@ndla/ui 56.0.121-alpha.0 → 56.0.123-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ndla-ui
2
2
 
3
- Main UI component library for NDLA.
3
+ Main UI component library for NDLA
4
4
 
5
5
  ## Installation
6
6
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  import { forwardRef, useCallback, useEffect, useState } from "react";
10
10
  import { useTranslation } from "react-i18next";
11
- import { useLocation } from "react-router";
11
+ import { useLocation } from "react-router-dom";
12
12
  import { ArrowDownShortLine } from "@ndla/icons";
13
13
  import { AccordionItem, AccordionItemContent, AccordionItemIndicator, AccordionItemTrigger, AccordionRoot, Heading } from "@ndla/primitives";
14
14
  import { styled } from "@ndla/styled-system/jsx";
package/es/i18n/index.js CHANGED
@@ -8,4 +8,4 @@
8
8
 
9
9
  export { i18nInstance } from "./i18n";
10
10
  export { formatNestedMessages } from "./formatNestedMessages";
11
- export { useComboboxTranslations, useTagSelectorTranslations, useTagsInputTranslations, usePaginationTranslations, useAudioSearchTranslations, useImageSearchTranslations, useVideoSearchTranslations } from "./useComponentTranslations";
11
+ export { useComboboxTranslations, useTagSelectorTranslations, useTagsInputTranslations, usePaginationTranslations, useAudioSearchTranslations, useImageSearchTranslations, useVideoSearchTranslations, useDatePickerTranslations } from "./useComponentTranslations";
@@ -161,4 +161,51 @@ export const useVideoSearchTranslations = translations => {
161
161
  close: t("close"),
162
162
  ...translations
163
163
  }), [t, translations]);
164
+ };
165
+ export const useDatePickerTranslations = translations => {
166
+ const {
167
+ t
168
+ } = useTranslation("translation", {
169
+ keyPrefix: "component.datePicker"
170
+ });
171
+ return useMemo(() => ({
172
+ dayCell: state => {
173
+ if (state.unavailable) {
174
+ return t("dayCell.unavailable", {
175
+ date: state.formattedDate
176
+ });
177
+ } else if (state.selected) {
178
+ return t("dayCell.selected", {
179
+ date: state.formattedDate
180
+ });
181
+ } else return t("dayCell.select", {
182
+ date: state.formattedDate
183
+ });
184
+ },
185
+ nextTrigger: view => t(`nextTrigger.${view}`),
186
+ prevTrigger: view => t(`prevTrigger.${view}`),
187
+ monthSelect: t("monthSelect"),
188
+ yearSelect: t("yearSelect"),
189
+ viewTrigger: view => t(`viewTrigger.${view}`),
190
+ presetTrigger: value => {
191
+ if (Array.isArray(value)) {
192
+ return t("presetTrigger.range", {
193
+ start: value[0],
194
+ end: value[1]
195
+ });
196
+ } else return t("presetTrigger.single", {
197
+ date: value
198
+ });
199
+ },
200
+ clearTrigger: t("clearTrigger"),
201
+ trigger: open => t(`trigger.${open ? "close" : "open"}`),
202
+ content: t("content"),
203
+ placeholder: _locale => {
204
+ return {
205
+ day: "dd",
206
+ month: "mm",
207
+ year: "yyyy"
208
+ };
209
+ }
210
+ }), [t, translations]);
164
211
  };
package/es/index.js CHANGED
@@ -27,7 +27,7 @@ export { default as messagesNN } from "./locale/messages-nn";
27
27
  export { default as messagesEN } from "./locale/messages-en";
28
28
  export { default as messagesSE } from "./locale/messages-se";
29
29
  export { default as Breadcrumb, HomeBreadcrumb } from "./Breadcrumb";
30
- export { i18nInstance, formatNestedMessages, useTagsInputTranslations, useTagSelectorTranslations, useComboboxTranslations, usePaginationTranslations, useAudioSearchTranslations, useImageSearchTranslations, useVideoSearchTranslations } from "./i18n";
30
+ export { i18nInstance, formatNestedMessages, useTagsInputTranslations, useTagSelectorTranslations, useComboboxTranslations, usePaginationTranslations, useAudioSearchTranslations, useImageSearchTranslations, useVideoSearchTranslations, useDatePickerTranslations } from "./i18n";
31
31
  export { ContentTypeBadge, contentTypeToBadgeVariantMap } from "./ContentTypeBadge/ContentTypeBadge";
32
32
  export { ContentTypeBlockQuote } from "./ContentTypeBlockQuote/ContentTypeBlockQuote";
33
33
  export { ContentTypeFramedContent } from "./ContentTypeFramedContent/ContentTypeFramedContent";
@@ -405,6 +405,40 @@ const messages = {
405
405
  previewVideo: "Preview",
406
406
  is360Video: "VR video",
407
407
  close: "Lukk"
408
+ },
409
+ datePicker: {
410
+ dayCell: {
411
+ unavailable: "Unavailable date. {{date}}",
412
+ selected: "Selected date. {{date}}",
413
+ select: "Select date. {{date}}"
414
+ },
415
+ nextTrigger: {
416
+ day: "Go to next month",
417
+ month: "Go to next year",
418
+ year: "Go to next decade"
419
+ },
420
+ prevTrigger: {
421
+ day: "Go to previous month",
422
+ month: "Go to previous year",
423
+ year: "Go to previous decade"
424
+ },
425
+ monthSelect: "Select month",
426
+ yearSelect: "Select year",
427
+ viewTrigger: {
428
+ day: "Switch to day view",
429
+ month: "Switch to month view",
430
+ year: "Switch to year view"
431
+ },
432
+ presetTrigger: {
433
+ single: "Select {{date}}",
434
+ range: "Select from {{start}} to {{end}}"
435
+ },
436
+ clearTrigger: "Clear selected dates",
437
+ trigger: {
438
+ open: "Open date picker",
439
+ close: "Close date picker"
440
+ },
441
+ content: "Calendar"
408
442
  }
409
443
  },
410
444
  richTextEditor: {
@@ -405,6 +405,40 @@ const messages = {
405
405
  previewVideo: "Forhåndsvis",
406
406
  is360Video: "VR-video",
407
407
  close: "Lukk"
408
+ },
409
+ datePicker: {
410
+ dayCell: {
411
+ unavailable: "Ikke tilgjengelig dato. {{date}}",
412
+ selected: "Valgt dato. {{date}}",
413
+ select: "Velg dato. {{date}}"
414
+ },
415
+ nextTrigger: {
416
+ day: "Gå til neste måned",
417
+ month: "Gå til neste år",
418
+ year: "Gå til neste tiår"
419
+ },
420
+ prevTrigger: {
421
+ day: "Gå til forrige måned",
422
+ month: "Gå til forrige år",
423
+ year: "Gå til forrige tiår"
424
+ },
425
+ monthSelect: "Velg måned",
426
+ yearSelect: "Velg år",
427
+ viewTrigger: {
428
+ day: "Bytt til dagvisning",
429
+ month: "Bytt til månedvisning",
430
+ year: "Bytt til årvisning"
431
+ },
432
+ presetTrigger: {
433
+ single: "Velg {{date}}",
434
+ range: "Velg fra {{start}} til {{end}}"
435
+ },
436
+ clearTrigger: "Fjern valgte datoer",
437
+ trigger: {
438
+ open: "Åpne datovelger",
439
+ close: "Lukk datovelger"
440
+ },
441
+ content: "Kalender"
408
442
  }
409
443
  },
410
444
  richTextEditor: {
@@ -405,6 +405,40 @@ const messages = {
405
405
  previewVideo: "Førehandsvis",
406
406
  is360Video: "VR-video",
407
407
  close: "Lukk"
408
+ },
409
+ datePicker: {
410
+ dayCell: {
411
+ unavailable: "Ikkje tilgjengelig dato. {{date}}",
412
+ selected: "Valt dato. {{date}}",
413
+ select: "Velg dato. {{date}}"
414
+ },
415
+ nextTrigger: {
416
+ day: "Gå til neste måned",
417
+ month: "Gå til neste år",
418
+ year: "Gå til neste tiår"
419
+ },
420
+ prevTrigger: {
421
+ day: "Gå til forrige måned",
422
+ month: "Gå til forrige år",
423
+ year: "Gå til forrige tiår"
424
+ },
425
+ monthSelect: "Velg måned",
426
+ yearSelect: "Velg år",
427
+ viewTrigger: {
428
+ day: "Bytt til dagvising",
429
+ month: "Bytt til månedvising",
430
+ year: "Bytt til årvising"
431
+ },
432
+ presetTrigger: {
433
+ single: "Velg {{date}}",
434
+ range: "Velg fra {{start}} til {{end}}"
435
+ },
436
+ clearTrigger: "Fjern valte datoer",
437
+ trigger: {
438
+ open: "Åpne datoveljar",
439
+ close: "Lukk datoveljar"
440
+ },
441
+ content: "Kalender"
408
442
  }
409
443
  },
410
444
  richTextEditor: {
@@ -405,6 +405,40 @@ const messages = {
405
405
  previewVideo: "Forhåndsvis",
406
406
  is360Video: "VR-video",
407
407
  close: "Lukk"
408
+ },
409
+ datePicker: {
410
+ dayCell: {
411
+ unavailable: "Ikke tilgjengelig dato. {{date}}",
412
+ selected: "Valgt dato. {{date}}",
413
+ select: "Velg dato. {{date}}"
414
+ },
415
+ nextTrigger: {
416
+ day: "Gå til neste måned",
417
+ month: "Gå til neste år",
418
+ year: "Gå til neste tiår"
419
+ },
420
+ prevTrigger: {
421
+ day: "Gå til forrige måned",
422
+ month: "Gå til forrige år",
423
+ year: "Gå til forrige tiår"
424
+ },
425
+ monthSelect: "Velg måned",
426
+ yearSelect: "Velg år",
427
+ viewTrigger: {
428
+ day: "Bytt til dagvisning",
429
+ month: "Bytt til månedvisning",
430
+ year: "Bytt til årvisning"
431
+ },
432
+ presetTrigger: {
433
+ single: "Velg {{date}}",
434
+ range: "Velg fra {{start}} til {{end}}"
435
+ },
436
+ clearTrigger: "Fjern valgte datoer",
437
+ trigger: {
438
+ open: "Åpne datovelger",
439
+ close: "Lukk datovelger"
440
+ },
441
+ content: "Kalender"
408
442
  }
409
443
  },
410
444
  richTextEditor: {
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.ArticleBylineAccordionItem = exports.ArticleByline = void 0;
7
7
  var _react = require("react");
8
8
  var _reactI18next = require("react-i18next");
9
- var _reactRouter = require("react-router");
9
+ var _reactRouterDom = require("react-router-dom");
10
10
  var _icons = require("@ndla/icons");
11
11
  var _primitives = require("@ndla/primitives");
12
12
  var _jsx2 = require("@ndla/styled-system/jsx");
@@ -100,7 +100,7 @@ const ArticleByline = _ref => {
100
100
  } = (0, _reactI18next.useTranslation)();
101
101
  const {
102
102
  pathname
103
- } = (0, _reactRouter.useLocation)();
103
+ } = (0, _reactRouterDom.useLocation)();
104
104
  const [openAccordions, setOpenAccordions] = (0, _react.useState)([]);
105
105
  const accordionItemValue = "rulesForUse";
106
106
  const onHashChange = (0, _react.useCallback)(e => {
@@ -7,4 +7,4 @@
7
7
  */
8
8
  export { i18nInstance } from "./i18n";
9
9
  export { formatNestedMessages } from "./formatNestedMessages";
10
- export { useComboboxTranslations, useTagSelectorTranslations, useTagsInputTranslations, usePaginationTranslations, useAudioSearchTranslations, useImageSearchTranslations, useVideoSearchTranslations, } from "./useComponentTranslations";
10
+ export { useComboboxTranslations, useTagSelectorTranslations, useTagsInputTranslations, usePaginationTranslations, useAudioSearchTranslations, useImageSearchTranslations, useVideoSearchTranslations, useDatePickerTranslations, } from "./useComponentTranslations";
package/lib/i18n/index.js CHANGED
@@ -27,6 +27,12 @@ Object.defineProperty(exports, "useComboboxTranslations", {
27
27
  return _useComponentTranslations.useComboboxTranslations;
28
28
  }
29
29
  });
30
+ Object.defineProperty(exports, "useDatePickerTranslations", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _useComponentTranslations.useDatePickerTranslations;
34
+ }
35
+ });
30
36
  Object.defineProperty(exports, "useImageSearchTranslations", {
31
37
  enumerable: true,
32
38
  get: function () {
@@ -6,7 +6,7 @@
6
6
  *
7
7
  */
8
8
  import type { CollectionItem } from "@ark-ui/react";
9
- import type { ComboboxRootProps, PaginationRootProps, TagsInputRootProps } from "@ndla/primitives";
9
+ import type { ComboboxRootProps, PaginationRootProps, TagsInputRootProps, DatePickerRootProps } from "@ndla/primitives";
10
10
  import { type TagSelectorRootProps } from "../TagSelector/TagSelector";
11
11
  type DeepPartial<T> = {
12
12
  [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
@@ -53,4 +53,5 @@ interface ImageSearchTranslations {
53
53
  export declare const useImageSearchTranslations: (translations?: DeepPartial<ImageSearchTranslations>) => ImageSearchTranslations;
54
54
  export declare const useAudioSearchTranslations: (translations?: DeepPartial<AudioSearchTranslations>) => AudioSearchTranslations;
55
55
  export declare const useVideoSearchTranslations: (translations?: Partial<VideoTranslations>) => VideoTranslations;
56
+ export declare const useDatePickerTranslations: (translations?: Partial<DatePickerRootProps["translations"]>) => NonNullable<DatePickerRootProps["translations"]>;
56
57
  export {};
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useVideoSearchTranslations = exports.useTagsInputTranslations = exports.useTagSelectorTranslations = exports.usePaginationTranslations = exports.useImageSearchTranslations = exports.useComboboxTranslations = exports.useAudioSearchTranslations = void 0;
6
+ exports.useVideoSearchTranslations = exports.useTagsInputTranslations = exports.useTagSelectorTranslations = exports.usePaginationTranslations = exports.useImageSearchTranslations = exports.useDatePickerTranslations = exports.useComboboxTranslations = exports.useAudioSearchTranslations = void 0;
7
7
  var _reactI18next = require("react-i18next");
8
8
  var _react = require("react");
9
9
  /**
@@ -173,4 +173,52 @@ const useVideoSearchTranslations = translations => {
173
173
  ...translations
174
174
  }), [t, translations]);
175
175
  };
176
- exports.useVideoSearchTranslations = useVideoSearchTranslations;
176
+ exports.useVideoSearchTranslations = useVideoSearchTranslations;
177
+ const useDatePickerTranslations = translations => {
178
+ const {
179
+ t
180
+ } = (0, _reactI18next.useTranslation)("translation", {
181
+ keyPrefix: "component.datePicker"
182
+ });
183
+ return (0, _react.useMemo)(() => ({
184
+ dayCell: state => {
185
+ if (state.unavailable) {
186
+ return t("dayCell.unavailable", {
187
+ date: state.formattedDate
188
+ });
189
+ } else if (state.selected) {
190
+ return t("dayCell.selected", {
191
+ date: state.formattedDate
192
+ });
193
+ } else return t("dayCell.select", {
194
+ date: state.formattedDate
195
+ });
196
+ },
197
+ nextTrigger: view => t(`nextTrigger.${view}`),
198
+ prevTrigger: view => t(`prevTrigger.${view}`),
199
+ monthSelect: t("monthSelect"),
200
+ yearSelect: t("yearSelect"),
201
+ viewTrigger: view => t(`viewTrigger.${view}`),
202
+ presetTrigger: value => {
203
+ if (Array.isArray(value)) {
204
+ return t("presetTrigger.range", {
205
+ start: value[0],
206
+ end: value[1]
207
+ });
208
+ } else return t("presetTrigger.single", {
209
+ date: value
210
+ });
211
+ },
212
+ clearTrigger: t("clearTrigger"),
213
+ trigger: open => t(`trigger.${open ? "close" : "open"}`),
214
+ content: t("content"),
215
+ placeholder: _locale => {
216
+ return {
217
+ day: "dd",
218
+ month: "mm",
219
+ year: "yyyy"
220
+ };
221
+ }
222
+ }), [t, translations]);
223
+ };
224
+ exports.useDatePickerTranslations = useDatePickerTranslations;
package/lib/index.d.ts CHANGED
@@ -26,7 +26,7 @@ export { default as messagesEN } from "./locale/messages-en";
26
26
  export { default as messagesSE } from "./locale/messages-se";
27
27
  export { default as Breadcrumb, HomeBreadcrumb } from "./Breadcrumb";
28
28
  export type { SimpleBreadcrumbItem, IndexedBreadcrumbItem } from "./Breadcrumb";
29
- export { i18nInstance, formatNestedMessages, useTagsInputTranslations, useTagSelectorTranslations, useComboboxTranslations, usePaginationTranslations, useAudioSearchTranslations, useImageSearchTranslations, useVideoSearchTranslations, } from "./i18n";
29
+ export { i18nInstance, formatNestedMessages, useTagsInputTranslations, useTagSelectorTranslations, useComboboxTranslations, usePaginationTranslations, useAudioSearchTranslations, useImageSearchTranslations, useVideoSearchTranslations, useDatePickerTranslations, } from "./i18n";
30
30
  export type { ContentTypeBadgeProps, StrictContentType, ContentType } from "./ContentTypeBadge/ContentTypeBadge";
31
31
  export { ContentTypeBadge, contentTypeToBadgeVariantMap } from "./ContentTypeBadge/ContentTypeBadge";
32
32
  export { ContentTypeBlockQuote } from "./ContentTypeBlockQuote/ContentTypeBlockQuote";
package/lib/index.js CHANGED
@@ -525,6 +525,12 @@ Object.defineProperty(exports, "useComboboxTranslations", {
525
525
  return _i18n.useComboboxTranslations;
526
526
  }
527
527
  });
528
+ Object.defineProperty(exports, "useDatePickerTranslations", {
529
+ enumerable: true,
530
+ get: function () {
531
+ return _i18n.useDatePickerTranslations;
532
+ }
533
+ });
528
534
  Object.defineProperty(exports, "useImageSearchTranslations", {
529
535
  enumerable: true,
530
536
  get: function () {
@@ -363,6 +363,40 @@ declare const messages: {
363
363
  is360Video: string;
364
364
  close: string;
365
365
  };
366
+ datePicker: {
367
+ dayCell: {
368
+ unavailable: string;
369
+ selected: string;
370
+ select: string;
371
+ };
372
+ nextTrigger: {
373
+ day: string;
374
+ month: string;
375
+ year: string;
376
+ };
377
+ prevTrigger: {
378
+ day: string;
379
+ month: string;
380
+ year: string;
381
+ };
382
+ monthSelect: string;
383
+ yearSelect: string;
384
+ viewTrigger: {
385
+ day: string;
386
+ month: string;
387
+ year: string;
388
+ };
389
+ presetTrigger: {
390
+ single: string;
391
+ range: string;
392
+ };
393
+ clearTrigger: string;
394
+ trigger: {
395
+ open: string;
396
+ close: string;
397
+ };
398
+ content: string;
399
+ };
366
400
  };
367
401
  richTextEditor: {
368
402
  tooltip: {
@@ -412,6 +412,40 @@ const messages = {
412
412
  previewVideo: "Preview",
413
413
  is360Video: "VR video",
414
414
  close: "Lukk"
415
+ },
416
+ datePicker: {
417
+ dayCell: {
418
+ unavailable: "Unavailable date. {{date}}",
419
+ selected: "Selected date. {{date}}",
420
+ select: "Select date. {{date}}"
421
+ },
422
+ nextTrigger: {
423
+ day: "Go to next month",
424
+ month: "Go to next year",
425
+ year: "Go to next decade"
426
+ },
427
+ prevTrigger: {
428
+ day: "Go to previous month",
429
+ month: "Go to previous year",
430
+ year: "Go to previous decade"
431
+ },
432
+ monthSelect: "Select month",
433
+ yearSelect: "Select year",
434
+ viewTrigger: {
435
+ day: "Switch to day view",
436
+ month: "Switch to month view",
437
+ year: "Switch to year view"
438
+ },
439
+ presetTrigger: {
440
+ single: "Select {{date}}",
441
+ range: "Select from {{start}} to {{end}}"
442
+ },
443
+ clearTrigger: "Clear selected dates",
444
+ trigger: {
445
+ open: "Open date picker",
446
+ close: "Close date picker"
447
+ },
448
+ content: "Calendar"
415
449
  }
416
450
  },
417
451
  richTextEditor: {
@@ -363,6 +363,40 @@ declare const messages: {
363
363
  is360Video: string;
364
364
  close: string;
365
365
  };
366
+ datePicker: {
367
+ dayCell: {
368
+ unavailable: string;
369
+ selected: string;
370
+ select: string;
371
+ };
372
+ nextTrigger: {
373
+ day: string;
374
+ month: string;
375
+ year: string;
376
+ };
377
+ prevTrigger: {
378
+ day: string;
379
+ month: string;
380
+ year: string;
381
+ };
382
+ monthSelect: string;
383
+ yearSelect: string;
384
+ viewTrigger: {
385
+ day: string;
386
+ month: string;
387
+ year: string;
388
+ };
389
+ presetTrigger: {
390
+ single: string;
391
+ range: string;
392
+ };
393
+ clearTrigger: string;
394
+ trigger: {
395
+ open: string;
396
+ close: string;
397
+ };
398
+ content: string;
399
+ };
366
400
  };
367
401
  richTextEditor: {
368
402
  tooltip: {
@@ -412,6 +412,40 @@ const messages = {
412
412
  previewVideo: "Forhåndsvis",
413
413
  is360Video: "VR-video",
414
414
  close: "Lukk"
415
+ },
416
+ datePicker: {
417
+ dayCell: {
418
+ unavailable: "Ikke tilgjengelig dato. {{date}}",
419
+ selected: "Valgt dato. {{date}}",
420
+ select: "Velg dato. {{date}}"
421
+ },
422
+ nextTrigger: {
423
+ day: "Gå til neste måned",
424
+ month: "Gå til neste år",
425
+ year: "Gå til neste tiår"
426
+ },
427
+ prevTrigger: {
428
+ day: "Gå til forrige måned",
429
+ month: "Gå til forrige år",
430
+ year: "Gå til forrige tiår"
431
+ },
432
+ monthSelect: "Velg måned",
433
+ yearSelect: "Velg år",
434
+ viewTrigger: {
435
+ day: "Bytt til dagvisning",
436
+ month: "Bytt til månedvisning",
437
+ year: "Bytt til årvisning"
438
+ },
439
+ presetTrigger: {
440
+ single: "Velg {{date}}",
441
+ range: "Velg fra {{start}} til {{end}}"
442
+ },
443
+ clearTrigger: "Fjern valgte datoer",
444
+ trigger: {
445
+ open: "Åpne datovelger",
446
+ close: "Lukk datovelger"
447
+ },
448
+ content: "Kalender"
415
449
  }
416
450
  },
417
451
  richTextEditor: {
@@ -363,6 +363,40 @@ declare const messages: {
363
363
  is360Video: string;
364
364
  close: string;
365
365
  };
366
+ datePicker: {
367
+ dayCell: {
368
+ unavailable: string;
369
+ selected: string;
370
+ select: string;
371
+ };
372
+ nextTrigger: {
373
+ day: string;
374
+ month: string;
375
+ year: string;
376
+ };
377
+ prevTrigger: {
378
+ day: string;
379
+ month: string;
380
+ year: string;
381
+ };
382
+ monthSelect: string;
383
+ yearSelect: string;
384
+ viewTrigger: {
385
+ day: string;
386
+ month: string;
387
+ year: string;
388
+ };
389
+ presetTrigger: {
390
+ single: string;
391
+ range: string;
392
+ };
393
+ clearTrigger: string;
394
+ trigger: {
395
+ open: string;
396
+ close: string;
397
+ };
398
+ content: string;
399
+ };
366
400
  };
367
401
  richTextEditor: {
368
402
  tooltip: {
@@ -412,6 +412,40 @@ const messages = {
412
412
  previewVideo: "Førehandsvis",
413
413
  is360Video: "VR-video",
414
414
  close: "Lukk"
415
+ },
416
+ datePicker: {
417
+ dayCell: {
418
+ unavailable: "Ikkje tilgjengelig dato. {{date}}",
419
+ selected: "Valt dato. {{date}}",
420
+ select: "Velg dato. {{date}}"
421
+ },
422
+ nextTrigger: {
423
+ day: "Gå til neste måned",
424
+ month: "Gå til neste år",
425
+ year: "Gå til neste tiår"
426
+ },
427
+ prevTrigger: {
428
+ day: "Gå til forrige måned",
429
+ month: "Gå til forrige år",
430
+ year: "Gå til forrige tiår"
431
+ },
432
+ monthSelect: "Velg måned",
433
+ yearSelect: "Velg år",
434
+ viewTrigger: {
435
+ day: "Bytt til dagvising",
436
+ month: "Bytt til månedvising",
437
+ year: "Bytt til årvising"
438
+ },
439
+ presetTrigger: {
440
+ single: "Velg {{date}}",
441
+ range: "Velg fra {{start}} til {{end}}"
442
+ },
443
+ clearTrigger: "Fjern valte datoer",
444
+ trigger: {
445
+ open: "Åpne datoveljar",
446
+ close: "Lukk datoveljar"
447
+ },
448
+ content: "Kalender"
415
449
  }
416
450
  },
417
451
  richTextEditor: {
@@ -363,6 +363,40 @@ declare const messages: {
363
363
  is360Video: string;
364
364
  close: string;
365
365
  };
366
+ datePicker: {
367
+ dayCell: {
368
+ unavailable: string;
369
+ selected: string;
370
+ select: string;
371
+ };
372
+ nextTrigger: {
373
+ day: string;
374
+ month: string;
375
+ year: string;
376
+ };
377
+ prevTrigger: {
378
+ day: string;
379
+ month: string;
380
+ year: string;
381
+ };
382
+ monthSelect: string;
383
+ yearSelect: string;
384
+ viewTrigger: {
385
+ day: string;
386
+ month: string;
387
+ year: string;
388
+ };
389
+ presetTrigger: {
390
+ single: string;
391
+ range: string;
392
+ };
393
+ clearTrigger: string;
394
+ trigger: {
395
+ open: string;
396
+ close: string;
397
+ };
398
+ content: string;
399
+ };
366
400
  };
367
401
  richTextEditor: {
368
402
  tooltip: {
@@ -412,6 +412,40 @@ const messages = {
412
412
  previewVideo: "Forhåndsvis",
413
413
  is360Video: "VR-video",
414
414
  close: "Lukk"
415
+ },
416
+ datePicker: {
417
+ dayCell: {
418
+ unavailable: "Ikke tilgjengelig dato. {{date}}",
419
+ selected: "Valgt dato. {{date}}",
420
+ select: "Velg dato. {{date}}"
421
+ },
422
+ nextTrigger: {
423
+ day: "Gå til neste måned",
424
+ month: "Gå til neste år",
425
+ year: "Gå til neste tiår"
426
+ },
427
+ prevTrigger: {
428
+ day: "Gå til forrige måned",
429
+ month: "Gå til forrige år",
430
+ year: "Gå til forrige tiår"
431
+ },
432
+ monthSelect: "Velg måned",
433
+ yearSelect: "Velg år",
434
+ viewTrigger: {
435
+ day: "Bytt til dagvisning",
436
+ month: "Bytt til månedvisning",
437
+ year: "Bytt til årvisning"
438
+ },
439
+ presetTrigger: {
440
+ single: "Velg {{date}}",
441
+ range: "Velg fra {{start}} til {{end}}"
442
+ },
443
+ clearTrigger: "Fjern valgte datoer",
444
+ trigger: {
445
+ open: "Åpne datovelger",
446
+ close: "Lukk datovelger"
447
+ },
448
+ content: "Kalender"
415
449
  }
416
450
  },
417
451
  richTextEditor: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "56.0.121-alpha.0",
3
+ "version": "56.0.123-alpha.0",
4
4
  "description": "UI component library for NDLA",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -32,11 +32,12 @@
32
32
  "types"
33
33
  ],
34
34
  "dependencies": {
35
+ "@ark-ui/react": "^5.9.0",
35
36
  "@ndla/core": "^6.0.0-alpha.0",
36
37
  "@ndla/icons": "^8.0.58-alpha.0",
37
38
  "@ndla/licenses": "^9.0.1",
38
- "@ndla/primitives": "^1.0.87-alpha.0",
39
- "@ndla/safelink": "^7.0.89-alpha.0",
39
+ "@ndla/primitives": "^1.0.89-alpha.0",
40
+ "@ndla/safelink": "^7.0.91-alpha.0",
40
41
  "@ndla/styled-system": "^0.0.34",
41
42
  "@ndla/util": "^5.0.8-alpha.0",
42
43
  "html-react-parser": "^5.1.19"
@@ -46,7 +47,7 @@
46
47
  "react": ">= 18",
47
48
  "react-dom": ">= 18",
48
49
  "react-i18next": "^15.4.1",
49
- "react-router": ">= 6.0.0"
50
+ "react-router-dom": ">= 6.0.0"
50
51
  },
51
52
  "devDependencies": {
52
53
  "@ndla/preset-panda": "^0.0.54",
@@ -57,5 +58,5 @@
57
58
  "publishConfig": {
58
59
  "access": "public"
59
60
  },
60
- "gitHead": "d9ad62bb693321e31691b09d045af548f650c049"
61
+ "gitHead": "dc0f32d958e7f1df5a4330a412ad3ce03452d300"
61
62
  }
@@ -9,7 +9,7 @@
9
9
  import type { TFunction } from "i18next";
10
10
  import { type ReactNode, forwardRef, useCallback, useEffect, useState } from "react";
11
11
  import { useTranslation } from "react-i18next";
12
- import { useLocation } from "react-router";
12
+ import { useLocation } from "react-router-dom";
13
13
  import { ArrowDownShortLine } from "@ndla/icons";
14
14
  import {
15
15
  AccordionItem,
package/src/i18n/index.ts CHANGED
@@ -16,4 +16,5 @@ export {
16
16
  useAudioSearchTranslations,
17
17
  useImageSearchTranslations,
18
18
  useVideoSearchTranslations,
19
+ useDatePickerTranslations,
19
20
  } from "./useComponentTranslations";
@@ -8,7 +8,7 @@
8
8
 
9
9
  import { useTranslation } from "react-i18next";
10
10
  import type { CollectionItem } from "@ark-ui/react";
11
- import type { ComboboxRootProps, PaginationRootProps, TagsInputRootProps } from "@ndla/primitives";
11
+ import type { ComboboxRootProps, PaginationRootProps, TagsInputRootProps, DatePickerRootProps } from "@ndla/primitives";
12
12
  import { type TagSelectorRootProps } from "../TagSelector/TagSelector";
13
13
  import { useMemo } from "react";
14
14
 
@@ -198,3 +198,38 @@ export const useVideoSearchTranslations = (translations?: Partial<VideoTranslati
198
198
  [t, translations],
199
199
  );
200
200
  };
201
+
202
+ export const useDatePickerTranslations = (
203
+ translations?: Partial<DatePickerRootProps["translations"]>,
204
+ ): NonNullable<DatePickerRootProps["translations"]> => {
205
+ const { t } = useTranslation("translation", { keyPrefix: "component.datePicker" });
206
+
207
+ return useMemo(
208
+ () => ({
209
+ dayCell: (state) => {
210
+ if (state.unavailable) {
211
+ return t("dayCell.unavailable", { date: state.formattedDate });
212
+ } else if (state.selected) {
213
+ return t("dayCell.selected", { date: state.formattedDate });
214
+ } else return t("dayCell.select", { date: state.formattedDate });
215
+ },
216
+ nextTrigger: (view) => t(`nextTrigger.${view}`),
217
+ prevTrigger: (view) => t(`prevTrigger.${view}`),
218
+ monthSelect: t("monthSelect"),
219
+ yearSelect: t("yearSelect"),
220
+ viewTrigger: (view) => t(`viewTrigger.${view}`),
221
+ presetTrigger: (value) => {
222
+ if (Array.isArray(value)) {
223
+ return t("presetTrigger.range", { start: value[0], end: value[1] });
224
+ } else return t("presetTrigger.single", { date: value });
225
+ },
226
+ clearTrigger: t("clearTrigger"),
227
+ trigger: (open) => t(`trigger.${open ? "close" : "open"}`),
228
+ content: t("content"),
229
+ placeholder: (_locale) => {
230
+ return { day: "dd", month: "mm", year: "yyyy" };
231
+ },
232
+ }),
233
+ [t, translations],
234
+ );
235
+ };
package/src/index.ts CHANGED
@@ -89,6 +89,7 @@ export {
89
89
  useAudioSearchTranslations,
90
90
  useImageSearchTranslations,
91
91
  useVideoSearchTranslations,
92
+ useDatePickerTranslations,
92
93
  } from "./i18n";
93
94
 
94
95
  export type { ContentTypeBadgeProps, StrictContentType, ContentType } from "./ContentTypeBadge/ContentTypeBadge";
@@ -402,6 +402,40 @@ const messages = {
402
402
  is360Video: "VR video",
403
403
  close: "Lukk",
404
404
  },
405
+ datePicker: {
406
+ dayCell: {
407
+ unavailable: "Unavailable date. {{date}}",
408
+ selected: "Selected date. {{date}}",
409
+ select: "Select date. {{date}}",
410
+ },
411
+ nextTrigger: {
412
+ day: "Go to next month",
413
+ month: "Go to next year",
414
+ year: "Go to next decade",
415
+ },
416
+ prevTrigger: {
417
+ day: "Go to previous month",
418
+ month: "Go to previous year",
419
+ year: "Go to previous decade",
420
+ },
421
+ monthSelect: "Select month",
422
+ yearSelect: "Select year",
423
+ viewTrigger: {
424
+ day: "Switch to day view",
425
+ month: "Switch to month view",
426
+ year: "Switch to year view",
427
+ },
428
+ presetTrigger: {
429
+ single: "Select {{date}}",
430
+ range: "Select from {{start}} to {{end}}",
431
+ },
432
+ clearTrigger: "Clear selected dates",
433
+ trigger: {
434
+ open: "Open date picker",
435
+ close: "Close date picker",
436
+ },
437
+ content: "Calendar",
438
+ },
405
439
  },
406
440
  richTextEditor: {
407
441
  tooltip: {
@@ -403,6 +403,40 @@ const messages = {
403
403
  is360Video: "VR-video",
404
404
  close: "Lukk",
405
405
  },
406
+ datePicker: {
407
+ dayCell: {
408
+ unavailable: "Ikke tilgjengelig dato. {{date}}",
409
+ selected: "Valgt dato. {{date}}",
410
+ select: "Velg dato. {{date}}",
411
+ },
412
+ nextTrigger: {
413
+ day: "Gå til neste måned",
414
+ month: "Gå til neste år",
415
+ year: "Gå til neste tiår",
416
+ },
417
+ prevTrigger: {
418
+ day: "Gå til forrige måned",
419
+ month: "Gå til forrige år",
420
+ year: "Gå til forrige tiår",
421
+ },
422
+ monthSelect: "Velg måned",
423
+ yearSelect: "Velg år",
424
+ viewTrigger: {
425
+ day: "Bytt til dagvisning",
426
+ month: "Bytt til månedvisning",
427
+ year: "Bytt til årvisning",
428
+ },
429
+ presetTrigger: {
430
+ single: "Velg {{date}}",
431
+ range: "Velg fra {{start}} til {{end}}",
432
+ },
433
+ clearTrigger: "Fjern valgte datoer",
434
+ trigger: {
435
+ open: "Åpne datovelger",
436
+ close: "Lukk datovelger",
437
+ },
438
+ content: "Kalender",
439
+ },
406
440
  },
407
441
  richTextEditor: {
408
442
  tooltip: {
@@ -403,6 +403,40 @@ const messages = {
403
403
  is360Video: "VR-video",
404
404
  close: "Lukk",
405
405
  },
406
+ datePicker: {
407
+ dayCell: {
408
+ unavailable: "Ikkje tilgjengelig dato. {{date}}",
409
+ selected: "Valt dato. {{date}}",
410
+ select: "Velg dato. {{date}}",
411
+ },
412
+ nextTrigger: {
413
+ day: "Gå til neste måned",
414
+ month: "Gå til neste år",
415
+ year: "Gå til neste tiår",
416
+ },
417
+ prevTrigger: {
418
+ day: "Gå til forrige måned",
419
+ month: "Gå til forrige år",
420
+ year: "Gå til forrige tiår",
421
+ },
422
+ monthSelect: "Velg måned",
423
+ yearSelect: "Velg år",
424
+ viewTrigger: {
425
+ day: "Bytt til dagvising",
426
+ month: "Bytt til månedvising",
427
+ year: "Bytt til årvising",
428
+ },
429
+ presetTrigger: {
430
+ single: "Velg {{date}}",
431
+ range: "Velg fra {{start}} til {{end}}",
432
+ },
433
+ clearTrigger: "Fjern valte datoer",
434
+ trigger: {
435
+ open: "Åpne datoveljar",
436
+ close: "Lukk datoveljar",
437
+ },
438
+ content: "Kalender",
439
+ },
406
440
  },
407
441
  richTextEditor: {
408
442
  tooltip: {
@@ -404,6 +404,40 @@ const messages = {
404
404
  is360Video: "VR-video",
405
405
  close: "Lukk",
406
406
  },
407
+ datePicker: {
408
+ dayCell: {
409
+ unavailable: "Ikke tilgjengelig dato. {{date}}",
410
+ selected: "Valgt dato. {{date}}",
411
+ select: "Velg dato. {{date}}",
412
+ },
413
+ nextTrigger: {
414
+ day: "Gå til neste måned",
415
+ month: "Gå til neste år",
416
+ year: "Gå til neste tiår",
417
+ },
418
+ prevTrigger: {
419
+ day: "Gå til forrige måned",
420
+ month: "Gå til forrige år",
421
+ year: "Gå til forrige tiår",
422
+ },
423
+ monthSelect: "Velg måned",
424
+ yearSelect: "Velg år",
425
+ viewTrigger: {
426
+ day: "Bytt til dagvisning",
427
+ month: "Bytt til månedvisning",
428
+ year: "Bytt til årvisning",
429
+ },
430
+ presetTrigger: {
431
+ single: "Velg {{date}}",
432
+ range: "Velg fra {{start}} til {{end}}",
433
+ },
434
+ clearTrigger: "Fjern valgte datoer",
435
+ trigger: {
436
+ open: "Åpne datovelger",
437
+ close: "Lukk datovelger",
438
+ },
439
+ content: "Kalender",
440
+ },
407
441
  },
408
442
  richTextEditor: {
409
443
  tooltip: {