+
@@ -50,12 +47,12 @@ export default async function Footer() {
-
-
+
-
+
+
+
+
);
diff --git a/apps/researcher/src/components/form/language-selector.tsx b/apps/researcher/src/components/form/language-selector.tsx
index 4c408e6fe..8e1d679e4 100644
--- a/apps/researcher/src/components/form/language-selector.tsx
+++ b/apps/researcher/src/components/form/language-selector.tsx
@@ -1,5 +1,11 @@
import {CheckIcon, ChevronDownIcon} from '@heroicons/react/20/solid';
-import {Combobox} from '@headlessui/react';
+import {
+ Combobox,
+ ComboboxButton,
+ ComboboxInput,
+ ComboboxOption,
+ ComboboxOptions,
+} from '@headlessui/react';
import {useState} from 'react';
import classNames from 'classnames';
import ISO6391 from 'iso-639-1';
@@ -31,7 +37,7 @@ export function LanguageSelector({name}: Props) {
onChange={value => setValue(name, value)}
>
- setQuery(event.target.value)}
displayValue={() => {
@@ -41,17 +47,17 @@ export function LanguageSelector({name}: Props) {
: value;
}}
/>
-
+
-
+
{filteredLanguageCodes.length > 0 && (
-
+
{filteredLanguageCodes.map(languageCode => (
-
@@ -94,9 +100,9 @@ export function LanguageSelector({name}: Props) {
)}
>
)}
-
+
))}
-
+
)}
diff --git a/apps/researcher/src/components/form/search-selector.tsx b/apps/researcher/src/components/form/search-selector.tsx
index 582f629a0..467c91c47 100644
--- a/apps/researcher/src/components/form/search-selector.tsx
+++ b/apps/researcher/src/components/form/search-selector.tsx
@@ -1,7 +1,13 @@
'use client';
import {MagnifyingGlassIcon} from '@heroicons/react/20/solid';
-import {Combobox} from '@headlessui/react';
+import {
+ Combobox,
+ ComboboxButton,
+ ComboboxInput,
+ ComboboxOption,
+ ComboboxOptions,
+} from '@headlessui/react';
import {useRef, useState} from 'react';
import {FaceFrownIcon} from '@heroicons/react/24/solid';
import {useDebounce} from 'use-debounce';
@@ -38,7 +44,7 @@ export function SearchSelector({name, searchers}: Props) {
className="pointer-events-none absolute left-4 top-3.5 h-5 w-5 text-gray-400"
aria-hidden="true"
/>
-
{
setQuery(e.target.value);
}}
@@ -49,10 +55,10 @@ export function SearchSelector({name, searchers}: Props) {
buttonRef.current?.click();
}}
/>
-
+
-
+
{query === '' ? (
{t('beforeTyping')}
@@ -69,7 +75,7 @@ export function SearchSelector({name, searchers}: Props) {
))}
>
)}
-
+
);
}
@@ -106,7 +112,7 @@ function SearcherItems({
) : (
{searchResults!.map(searchItem => (
-
@@ -136,7 +142,7 @@ function SearcherItems({
)}
-
+
))}
)}
diff --git a/apps/researcher/src/components/object-list-form/form.tsx b/apps/researcher/src/components/object-list-form/form.tsx
index 8f54250e8..4054fbc48 100644
--- a/apps/researcher/src/components/object-list-form/form.tsx
+++ b/apps/researcher/src/components/object-list-form/form.tsx
@@ -63,7 +63,7 @@ function Form({
try {
await saveAction({list, pathName, id: listId});
addNotification({
- id: 'add-object-list-success',
+ id: 'objectList.created.success',
message: t.rich(successfulSaveMessageKey, {
name: () => {list.name},
}),
diff --git a/apps/researcher/src/components/popover.tsx b/apps/researcher/src/components/popover.tsx
index f5705e1ce..d1faa1760 100644
--- a/apps/researcher/src/components/popover.tsx
+++ b/apps/researcher/src/components/popover.tsx
@@ -1,7 +1,12 @@
'use client';
import {Fragment, useRef} from 'react';
-import {Transition, Popover} from '@headlessui/react';
+import {
+ Transition,
+ Popover,
+ PopoverButton,
+ PopoverPanel,
+} from '@headlessui/react';
import {ChevronDownIcon} from '@heroicons/react/20/solid';
import classNames from 'classnames';
@@ -46,7 +51,7 @@ export default function PopoverMenu({
onMouseEnter={() => handleEnter(open)}
onMouseLeave={() => handleLeave(open)}
>
-
-
+
-
{children}
-
+
)}
diff --git a/apps/researcher/src/components/titles.tsx b/apps/researcher/src/components/titles.tsx
deleted file mode 100644
index 7ef979890..000000000
--- a/apps/researcher/src/components/titles.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import {ReactNode} from 'react';
-
-interface HeaderProps {
- children: ReactNode;
-}
-
-export function H2({children}: HeaderProps) {
- return
{children}
;
-}
-
-export function H3({children}: HeaderProps) {
- return (
-
- {children}
-
- );
-}
diff --git a/apps/researcher/src/messages/en/messages.json b/apps/researcher/src/messages/en/messages.json
index 867aa964a..7c2c59530 100644
--- a/apps/researcher/src/messages/en/messages.json
+++ b/apps/researcher/src/messages/en/messages.json
@@ -102,6 +102,7 @@
"noEntity": "Object could not be found",
"object": "Object",
"providerCurrentHolder": "Data provider object",
+ "accessibilityProviderCurrentHolder": "More information about the data provider",
"providerInfo": "More info",
"contactInfo": "Contact info",
"dataProviderTitle": "Data provider object",
@@ -149,27 +150,39 @@
"objectRemovedFromList": "Object removed from list
.",
"errorObjectRemovedFromList": "There was a problem removing the object from the list. Please try again later.",
"needAccountToAddNarrativeTitle": "To add your narrative to this object you need to have an account.",
- "needCommunityToAddNarrativeTitle": "To add your narrative to this object you need to be part of a community."
+ "needCommunityToAddNarrativeTitle": "To add your narrative to this object you need to be part of a community.",
+ "pageNavigationMetadata": "Metadata",
+ "pageNavigationNotices": "Local Context Notices",
+ "pageNavigationProvenance": "Provenance",
+ "pageNavigationProvider": "Data provider"
},
"LocalContextsNotices": {
"attributionIncomplete": "Attribution Incomplete",
"attributionIncompleteLabel": "Collections and items in our institution have incomplete, inaccurate, and/or missing attribution. We are using this notice to clearly identify this material so that it can be updated, or corrected by communities of origin. Our institution is committed to collaboration and partnerships to address this problem of incorrect or missing attribution.",
"authorization": "Authorization",
"authorizationLabel": "The Authorization Notice is being used to indicate that distinct Tribal or community authorization through consultation needs to be obtained for any reproduction of this item, including for the use in exhibitions and publications in print or online.",
+ "authorizationInformation": "The Authorization Notice recognizes that specific Tribal or community authorization through consultation is necessary prior to use of specific items or collections in all forms of publication and exhibits.",
"belonging": "Belonging",
"belongingLabel": "The Belonging Notice is being used to indicate that only specific persons belonging to communities, Tribes, Clans, and societies have the right to access and handle these specific items or collections.",
+ "belongingInformation": "The Belonging Notice recognizes the exclusive right of Indigenous communities, Tribes, Clans, or societies to access and handle items or collections.",
"caring": "Caring",
"caringLabel": "The Caring Notice is being used to indicate that specialized cultural care is required. Care for items or collections will require specific community guidelines for storage and handling.",
+ "caringInformation": "The Caring Notice recognizes cultural ways of caring for materials including specific ways of handling, storing, or managing specific items or collections. In all cases, care will be defined through community consultations.",
"genderAware": "Gender Aware",
"genderAwareLabel": "The Gender Aware Notice is being used to indicate there are specific gender responsibilities that affect who can access, view, and/or handle this item or collection.",
+ "genderAwareInformation": "The Gender Aware Notice recognizes that gender influences access, handling, viewing, and interacting with items or collections. Specifically, this Notice calls attention to who should handle items or collections based on their self-identified gender.",
"leaveUndisturbed": "Leave Undisturbed",
"leaveUndisturbedLabel": "The Leave Undisturbed Notice is being used to indicate that items in a collection should not be disturbed. They should only be moved or disturbed under very limited circumstances according to community guidance.",
+ "leaveUndisturbedInformation": "The Leave Undisturbed Notice recognizes the cultural significance and necessity of not disturbing certain cultural materials.",
"safety": "Safety",
"safetyLabel": "The Safety Notice is being used to indicate that extreme caution and care needs to be taken in viewing and handling this item or collection for individual or community well-being and health.",
+ "safetyInformation": "The Safety Notice calls attention to the need for respectful safety precautions to avoid handling items in collections when one is menstruating and/or pregnant for the well-being and health of the individual and their family.",
"viewing": "Viewing",
"viewingLabel": "The Viewing Notice is being used to indicate that there are limits to who, how, and when an item/collection can be viewed, distributed, and circulated. This includes existing images or representations of an existing or deaccessioned item(s) within a collection(s).",
+ "viewingInformation": "The Viewing Notice recognizes that there are limits to viewing or accessing current or deaccessioned items in a collection(s) or their representations.",
"withholding": "Withholding",
- "withholdingLabel": "The Withholding Notice is being used to indicate that no reproductions of this item or collection should ever be made. If there are already existing photographs or reproductions, these should not be used in any exhibition or publication in print, online, or any other format."
+ "withholdingLabel": "The Withholding Notice is being used to indicate that no reproductions of this item or collection should ever be made. If there are already existing photographs or reproductions, these should not be used in any exhibition or publication in print, online, or any other format.",
+ "withholdingInformation": "The Withholding Notice recognizes the need to completely withhold certain items or collections from photography, reproduction, publications, and any type of exhibit in future modalities."
},
"LocalContextsNoticesOverview": {
"title": "Local Contexts Notices",
@@ -199,8 +212,8 @@
"agreedToLicenseUnchecked": "You need to agree to the license before you can add a Local Context Notice",
"noCommunities": "You are not yet a member of a community that has permission to add a Local Context Notice. You can create a community or join an existing community.",
"saving": "Saving...",
- "noticeInformationTitle": "Notice text",
- "noticeInformationSubTitle": "This text will be placed as a Notice."
+ "noticeInformationTitle": "Why use this notice",
+ "noticeTextTitle": "Notice text"
},
"Provenance": {
"title": "Provenance",
diff --git a/apps/researcher/src/messages/nl/messages.json b/apps/researcher/src/messages/nl/messages.json
index 1c9a09ddc..4e3dccbed 100644
--- a/apps/researcher/src/messages/nl/messages.json
+++ b/apps/researcher/src/messages/nl/messages.json
@@ -102,6 +102,7 @@
"noEntity": "Object kon niet gevonden worden",
"object": "Object",
"providerCurrentHolder": "Data provider of huidig object bewaarder",
+ "accessibilityProviderCurrentHolder": "Meer informatie over de data provider of huidig object bewaarder",
"providerInfo": "Meer info",
"contactInfo": "Contact gegevens",
"dataProviderTitle": "Data provider of huidig object bewaarder",
@@ -149,27 +150,39 @@
"objectRemovedFromList": "Object verwijderd van lijst
.",
"errorObjectRemovedFromList": "Er is een probleem opgetreden bij het verwijderen van het object van de lijst. Probeer het later opnieuw.",
"needAccountToAddNarrativeTitle": "Om je verhaal aan dit object toe te voegen, heb je een account nodig.",
- "needCommunityToAddNarrativeTitle": "Om je verhaal aan dit object toe te voegen, moet je deel uitmaken van een community."
+ "needCommunityToAddNarrativeTitle": "Om je verhaal aan dit object toe te voegen, moet je deel uitmaken van een community.",
+ "pageNavigationMetadata": "Metadata",
+ "pageNavigationNotices": "Local Context Notices",
+ "pageNavigationProvenance": "Herkomst",
+ "pageNavigationProvider": "Data provider"
},
"LocalContextsNotices": {
"attributionIncomplete": "Onvolledige Toeschrijving",
"attributionIncompleteLabel": "Collecties en items in onze instelling hebben onvolledige, onjuiste en/of ontbrekende toeschrijving. We gebruiken deze kennisgeving om dit materiaal duidelijk te identificeren zodat het kan worden bijgewerkt of gecorrigeerd door gemeenschappen van herkomst. Onze instelling zet zich in voor samenwerking en partnerschappen om dit probleem van onjuiste of ontbrekende toeschrijving aan te pakken.",
"authorization": "Autorisatie",
"authorizationLabel": "De Autorisatiekennisgeving wordt gebruikt om aan te geven dat er door middel van overleg distincte tribale of gemeenschapsautorisatie moet worden verkregen voor elke reproductie van dit item, inclusief het gebruik in tentoonstellingen en publicaties in print of online.",
+ "authorizationInformation": "De Autorisatiekennisgeving erkent dat specifieke tribale of gemeenschapsautorisatie door middel van overleg noodzakelijk is voorafgaand aan het gebruik van specifieke items of collecties in alle vormen van publicatie en tentoonstellingen.",
"belonging": "Toebehoren",
"belongingLabel": "De Toebehorenkennisgeving wordt gebruikt om aan te geven dat alleen specifieke personen die tot gemeenschappen, stammen, clans en verenigingen behoren, het recht hebben om deze specifieke items of collecties te bekijken en te behandelen.",
+ "belongingInformation": "De Toebehorenkennisgeving erkent het exclusieve recht van inheemse gemeenschappen, stammen, clans of verenigingen om toegang te hebben tot en om te gaan met items of collecties.",
"caring": "Verzorging",
"caringLabel": "De Verzorgingskennisgeving wordt gebruikt om aan te geven dat gespecialiseerde culturele zorg vereist is. Zorg voor items of collecties vereist specifieke gemeenschapsrichtlijnen voor opslag en handling.",
+ "caringInformation": "De Verzorgingskennisgeving erkent culturele manieren van zorg voor materialen, inclusief specifieke manieren van behandeling, opslag of beheer van specifieke items of collecties. In alle gevallen zal zorg worden gedefinieerd door middel van gemeenschapsconsultaties.",
"genderAware": "Genderbewust",
"genderAwareLabel": "De Genderbewust Kennisgeving wordt gebruikt om aan te geven dat er specifieke genderverantwoordelijkheden zijn die van invloed zijn op wie toegang kan krijgen tot, kijken naar en/of omgaan met dit item of deze collectie.",
+ "genderAwareInformation": "De Genderbewust Kennisgeving erkent dat gender invloed heeft op toegang, behandeling, bekijken en omgaan met items of collecties. Deze kennisgeving vestigt specifiek de aandacht op wie items of collecties zou moeten behandelen op basis van hun zelf geïdentificeerde gender.",
"leaveUndisturbed": "Ongestoord Laten",
"leaveUndisturbedLabel": "De Ongestoord Laten Kennisgeving wordt gebruikt om aan te geven dat items in een collectie niet mogen worden verstoord. Ze mogen alleen onder zeer beperkte omstandigheden volgens gemeenschapsrichtlijnen worden verplaatst of verstoord.",
+ "leaveUndisturbedInformation": "De Ongestoord Laten Kennisgeving erkent het culturele belang en de noodzaak om bepaalde culturele materialen niet te verstoren.",
"safety": "Veiligheid",
"safetyLabel": "De Veiligheidskennisgeving wordt gebruikt om aan te geven dat uiterste voorzichtigheid en zorg nodig is bij het bekijken en behandelen van dit item of deze collectie voor het welzijn en de gezondheid van individuen of gemeenschappen.",
+ "safetyInformation": "De Veiligheidskennisgeving vestigt de aandacht op de noodzaak van respectvolle veiligheidsmaatregelen om te voorkomen dat items in collecties worden behandeld wanneer men menstrueert en/of zwanger is, voor het welzijn en de gezondheid van het individu en hun familie.",
"viewing": "Bekijken",
"viewingLabel": "De Bekijkkennisgeving wordt gebruikt om aan te geven dat er beperkingen zijn op wie, hoe en wanneer een item/collectie kan worden bekeken, gedistribueerd en gecirculeerd. Dit omvat bestaande afbeeldingen of representaties van een bestaand of gedeaccesioneerd item binnen een collectie.",
+ "viewingInformation": "De Bekijkkennisgeving erkent dat er beperkingen zijn op het bekijken of toegang hebben tot huidige of gedeaccesioneerde items in een collectie(s) of hun representaties.",
"withholding": "Achterhouden",
- "withholdingLabel": "De Achterhouden Kennisgeving wordt gebruikt om aan te geven dat er nooit reproducties van dit item of deze collectie mogen worden gemaakt. Als er al bestaande foto's of reproducties zijn, mogen deze niet worden gebruikt in een tentoonstelling of publicatie in print, online of in enig ander formaat."
+ "withholdingLabel": "De Achterhouden Kennisgeving wordt gebruikt om aan te geven dat er nooit reproducties van dit item of deze collectie mogen worden gemaakt. Als er al bestaande foto's of reproducties zijn, mogen deze niet worden gebruikt in een tentoonstelling of publicatie in print, online of in enig ander formaat.",
+ "withholdingInformation": "De Achterhouden Kennisgeving erkent de noodzaak om bepaalde items of collecties volledig te onthouden van fotografie, reproductie, publicaties en elke vorm van tentoonstelling in toekomstige modaliteiten."
},
"LocalContextsNoticesOverview": {
"title": "Local Context Notices",
@@ -184,7 +197,7 @@
"title": "Voeg een Local Context Notice toe",
"type": "Selecteer een van de Local Context Notice. Klik op een label voor meer informatie.",
"description": "Motivatie",
- "descriptionSubTitle": "Hier kunt u tekst invoegen over het gebruik van deze Local Context Notice.",
+ "descriptionSubTitle": "Waarom wilt u deze Notice toevoegen?",
"inLanguage": "Taal",
"languageSubTitle": "Selecteer een taal van het verhaal. Begin met typen om een taal te selecteren.",
"successfullyAdded": "Uw Local Context Notice is toegevoegd aan het object. Het kan even duren voordat het zichtbaar is.",
@@ -199,8 +212,8 @@
"agreedToLicenseUnchecked": "U moet akkoord gaan met de licentie voordat u een verhaal kunt toevoegen",
"noCommunities": "U bent nog geen lid van een community die toestemming heeft om een verhaal toe te voegen. U kunt een community creëren of lid worden van een bestaande community.",
"saving": "Opslaan...",
- "noticeInformationTitle": "Informatie over notice",
- "noticeInformationSubTitle": "Deze tekst wordt als label geplaatst."
+ "noticeInformationTitle": "Waarom deze notice gebruiken",
+ "noticeTextTitle": "Notice Tekst"
},
"Provenance": {
"title": "Herkomst",
diff --git a/docs/components.md b/docs/components.md
index a9d2090eb..6368809c3 100644
--- a/docs/components.md
+++ b/docs/components.md
@@ -10,13 +10,8 @@ Place the app-specific components in the `/apps/[app-name]/src/app` folder at th
Components are generic if they are used in multiple apps. Place these components in the UI package at `/packages/ui`.
-You can write generic components as *compound components* with a *dot notation*.
+You can write generic components as *compound components*.
Components divided into little parts that work together to accomplish one task are called compound components. You can read about compound components here:
- https://betterprogramming.pub/compound-component-design-pattern-in-react-34b50e32dea0
-
-If you use dot notation for the compound components, it is called dot notation components. You can read more about dot notation components here:
-
-- https://andreidobrinski.com/blog/react-component-composition-with-dot-notation-exports/
-- https://reactjs.org/docs/jsx-in-depth.html#using-dot-notation-for-jsx-type
diff --git a/packages/ui/badge.tsx b/packages/ui/badge.tsx
index 40d2afc4b..78bd94390 100644
--- a/packages/ui/badge.tsx
+++ b/packages/ui/badge.tsx
@@ -29,7 +29,7 @@ interface BadgeIconProps {
variant?: 'outline' | 'solid';
}
-function BadgeIcon({Icon = XMarkIcon, variant}: BadgeIconProps) {
+export function BadgeIcon({Icon = XMarkIcon, variant}: BadgeIconProps) {
const variantClassName = classNames('w-4 h-4 mr-1', {
"stroke-(lookup . 'twColor')": variant === 'outline',
"fill-(lookup . 'twColor')": variant === 'solid',
@@ -47,13 +47,10 @@ interface BadgeActionProps {
onClick: () => void;
}
-function BadgeAction({Icon = XMarkIcon, onClick}: BadgeActionProps) {
+export function BadgeAction({Icon = XMarkIcon, onClick}: BadgeActionProps) {
return (
);
}
-
-Badge.Action = BadgeAction;
-Badge.Icon = BadgeIcon;
diff --git a/packages/ui/branding/footer-background.tsx b/packages/ui/branding/footer-background.tsx
index c85720a52..30d53f60a 100644
--- a/packages/ui/branding/footer-background.tsx
+++ b/packages/ui/branding/footer-background.tsx
@@ -3,7 +3,7 @@ export function FooterBackground() {