@lablup/ui-common 0.2.0-alpha.16 → 0.2.0-alpha.18

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.
Files changed (105) hide show
  1. package/README.md +1 -0
  2. package/astryx/components/Board.doc.mjs +122 -0
  3. package/astryx/components/Board.tsx +3 -0
  4. package/astryx/docs/ui-common.doc.mjs +1 -1
  5. package/dist/assets/components/Board/Board.css +2 -0
  6. package/dist/components/Board/Board.d.ts +102 -0
  7. package/dist/components/Board/Board.messages.d.ts +62 -0
  8. package/dist/components/Board/Board.messages.js +68 -0
  9. package/dist/components/Board/Board.messages.js.map +1 -0
  10. package/dist/components/Board/Board2.js +607 -0
  11. package/dist/components/Board/Board2.js.map +1 -0
  12. package/dist/components/Board/engine.d.ts +60 -0
  13. package/dist/components/Board/engine.js +397 -0
  14. package/dist/components/Board/engine.js.map +1 -0
  15. package/dist/components/Board/index.d.ts +4 -0
  16. package/dist/components/Board/index.js +3 -0
  17. package/dist/components/Board/layout.d.ts +81 -0
  18. package/dist/components/Board/layout.js +67 -0
  19. package/dist/components/Board/layout.js.map +1 -0
  20. package/dist/components/Board/scroll.d.ts +38 -0
  21. package/dist/components/Board/scroll.js +42 -0
  22. package/dist/components/Board/scroll.js.map +1 -0
  23. package/dist/components/DataGrid/DataGrid2.js +128 -128
  24. package/dist/components/DataGrid/DataGrid2.js.map +1 -1
  25. package/dist/components/Form/FormItem.d.ts +1 -1
  26. package/dist/components/Modal/modalStack.d.ts +9 -8
  27. package/dist/components/Modal/modalStack.js +29 -26
  28. package/dist/components/Modal/modalStack.js.map +1 -1
  29. package/dist/components/PageHeader/PageHeader2.js +4 -4
  30. package/dist/components/PagedSelector/PagedSelector2.js +37 -37
  31. package/dist/components/PagedSelector/PagedSelector2.js.map +1 -1
  32. package/dist/components/SelectionLabel/SelectionLabel.js +4 -4
  33. package/dist/forks/Drawer/Drawer.js +71 -53
  34. package/dist/forks/Drawer/Drawer.js.map +1 -1
  35. package/dist/forks/Drawer/useDrawerDialogPresence.d.ts +6 -6
  36. package/dist/forks/Drawer/useDrawerDialogPresence.js +19 -31
  37. package/dist/forks/Drawer/useDrawerDialogPresence.js.map +1 -1
  38. package/dist/i18n/catalog.js +27 -25
  39. package/dist/i18n/catalog.js.map +1 -1
  40. package/dist/i18n/locales/de-DE.js +60 -0
  41. package/dist/i18n/locales/de-DE.js.map +1 -1
  42. package/dist/i18n/locales/el-GR.js +60 -0
  43. package/dist/i18n/locales/el-GR.js.map +1 -1
  44. package/dist/i18n/locales/es-ES.js +60 -0
  45. package/dist/i18n/locales/es-ES.js.map +1 -1
  46. package/dist/i18n/locales/fi-FI.js +60 -0
  47. package/dist/i18n/locales/fi-FI.js.map +1 -1
  48. package/dist/i18n/locales/fr-FR.js +60 -0
  49. package/dist/i18n/locales/fr-FR.js.map +1 -1
  50. package/dist/i18n/locales/id-ID.js +60 -0
  51. package/dist/i18n/locales/id-ID.js.map +1 -1
  52. package/dist/i18n/locales/it-IT.js +60 -0
  53. package/dist/i18n/locales/it-IT.js.map +1 -1
  54. package/dist/i18n/locales/ja-JP.js +60 -0
  55. package/dist/i18n/locales/ja-JP.js.map +1 -1
  56. package/dist/i18n/locales/ko-KR.js +60 -0
  57. package/dist/i18n/locales/ko-KR.js.map +1 -1
  58. package/dist/i18n/locales/mn-MN.js +60 -0
  59. package/dist/i18n/locales/mn-MN.js.map +1 -1
  60. package/dist/i18n/locales/ms-MY.js +60 -0
  61. package/dist/i18n/locales/ms-MY.js.map +1 -1
  62. package/dist/i18n/locales/pl-PL.js +60 -0
  63. package/dist/i18n/locales/pl-PL.js.map +1 -1
  64. package/dist/i18n/locales/pt-BR.js +60 -0
  65. package/dist/i18n/locales/pt-BR.js.map +1 -1
  66. package/dist/i18n/locales/pt-PT.js +60 -0
  67. package/dist/i18n/locales/pt-PT.js.map +1 -1
  68. package/dist/i18n/locales/ru-RU.js +60 -0
  69. package/dist/i18n/locales/ru-RU.js.map +1 -1
  70. package/dist/i18n/locales/th-TH.js +60 -0
  71. package/dist/i18n/locales/th-TH.js.map +1 -1
  72. package/dist/i18n/locales/tr-TR.js +60 -0
  73. package/dist/i18n/locales/tr-TR.js.map +1 -1
  74. package/dist/i18n/locales/vi-VN.js +60 -0
  75. package/dist/i18n/locales/vi-VN.js.map +1 -1
  76. package/dist/i18n/locales/zh-CN.js +60 -0
  77. package/dist/i18n/locales/zh-CN.js.map +1 -1
  78. package/dist/i18n/locales/zh-TW.js +60 -0
  79. package/dist/i18n/locales/zh-TW.js.map +1 -1
  80. package/dist/index.d.ts +2 -0
  81. package/dist/index.js +61 -59
  82. package/dist/instance.js +1 -1
  83. package/dist/ui-common-locales/de-DE.json +60 -0
  84. package/dist/ui-common-locales/el-GR.json +60 -0
  85. package/dist/ui-common-locales/en.json +60 -0
  86. package/dist/ui-common-locales/es-ES.json +60 -0
  87. package/dist/ui-common-locales/fi-FI.json +60 -0
  88. package/dist/ui-common-locales/fr-FR.json +60 -0
  89. package/dist/ui-common-locales/id-ID.json +60 -0
  90. package/dist/ui-common-locales/it-IT.json +60 -0
  91. package/dist/ui-common-locales/ja-JP.json +60 -0
  92. package/dist/ui-common-locales/ko-KR.json +60 -0
  93. package/dist/ui-common-locales/mn-MN.json +60 -0
  94. package/dist/ui-common-locales/ms-MY.json +60 -0
  95. package/dist/ui-common-locales/pl-PL.json +60 -0
  96. package/dist/ui-common-locales/pt-BR.json +60 -0
  97. package/dist/ui-common-locales/pt-PT.json +60 -0
  98. package/dist/ui-common-locales/ru-RU.json +60 -0
  99. package/dist/ui-common-locales/th-TH.json +60 -0
  100. package/dist/ui-common-locales/tr-TR.json +60 -0
  101. package/dist/ui-common-locales/vi-VN.json +60 -0
  102. package/dist/ui-common-locales/zh-CN.json +60 -0
  103. package/dist/ui-common-locales/zh-TW.json +60 -0
  104. package/exports.customs.json +1 -0
  105. package/package.json +1 -1
@@ -4,80 +4,68 @@ import { flushSync as n } from "react-dom";
4
4
  //#region src/forks/Drawer/useDrawerDialogPresence.ts
5
5
  var r = 50, i = 250;
6
6
  function a(e) {
7
- try {
8
- return e.matches(":popover-open");
9
- } catch {
10
- return !1;
11
- }
7
+ return e.open;
12
8
  }
13
9
  function o(e, t) {
14
- return t ? e.open : a(e) || e.open;
10
+ t ? e.showModal() : e.show();
15
11
  }
16
- function s(e, t) {
17
- t ? e.showModal() : typeof e.showPopover == "function" ? e.showPopover() : e.show();
12
+ function s(e) {
13
+ e.open && e.close();
18
14
  }
19
- function c(e) {
20
- let t = e.ownerDocument.defaultView?.Event ?? Event;
21
- e.dispatchEvent(new t("close"));
22
- }
23
- function l(e, t) {
24
- return !t && typeof e.hidePopover == "function" ? (e.hidePopover(), !0) : (e.open && e.close(), !1);
25
- }
26
- function u({ dialogRef: r, isOpen: i, isModal: a, setIsRendered: u }) {
27
- let f = t(null);
15
+ function c({ dialogRef: r, isOpen: i, isModal: c, setIsRendered: u }) {
16
+ let d = t(null);
28
17
  e(() => {
29
18
  let e = r.current;
30
19
  if (e) {
31
20
  if (i) {
32
- o(e, a) || (f.current = document.activeElement, s(e, a), e.querySelector("[data-autofocus]")?.focus());
21
+ a(e) || (d.current = document.activeElement, o(e, c), e.querySelector("[data-autofocus]")?.focus());
33
22
  return;
34
23
  }
35
- if (o(e, a)) return d(e, () => {
36
- let t = l(e, a);
37
- n(() => {
24
+ if (a(e)) return l(e, () => {
25
+ s(e), n(() => {
38
26
  u(!1);
39
- }), f.current?.focus(), f.current = null, t && c(e);
27
+ }), d.current?.focus(), d.current = null;
40
28
  });
41
29
  }
42
30
  }, [
43
31
  r,
44
- a,
32
+ c,
45
33
  i,
46
34
  u
47
35
  ]), e(() => {
48
36
  let e = r.current;
49
37
  return () => {
50
- e && o(e, a) && l(e, a) && c(e);
38
+ e && a(e) && s(e);
51
39
  };
52
- }, [r, a]);
40
+ }, [r]);
53
41
  }
54
- function d(e, t) {
42
+ function l(e, t) {
55
43
  let n = !1, a = null, o = () => {
56
44
  n || (n = !0, a != null && clearTimeout(a), e.removeEventListener("transitionend", s), e.removeEventListener("transitioncancel", s), t());
57
45
  }, s = (t) => {
58
46
  t.target === e && t.propertyName === "transform" && o();
59
47
  };
60
48
  e.addEventListener("transitionend", s), e.addEventListener("transitioncancel", s);
61
- let c = f(e);
49
+ let c = u(e);
62
50
  return a = setTimeout(o, (c ?? i) + r), () => {
63
51
  n = !0, a != null && clearTimeout(a), e.removeEventListener("transitionend", s), e.removeEventListener("transitioncancel", s);
64
52
  };
65
53
  }
66
- function f(e) {
67
- let t = window.getComputedStyle(e), n = t.transitionProperty.split(",").map((e) => e.trim()), r = p(t.transitionDuration), i = p(t.transitionDelay);
54
+ function u(e) {
55
+ let t = window.getComputedStyle(e), n = t.transitionProperty.split(",").map((e) => e.trim()), r = d(t.transitionDuration), i = d(t.transitionDelay);
68
56
  return n.length === 0 || r.length === 0 || i.length === 0 || r.includes(null) || i.includes(null) ? null : n.reduce((e, t, n) => {
69
57
  if (t !== "transform" && t !== "all") return e;
70
58
  let a = r[n % r.length], o = i[n % i.length];
71
59
  return Math.max(e, (a ?? 0) + (o ?? 0));
72
60
  }, 0);
73
61
  }
74
- function p(e) {
62
+ function d(e) {
75
63
  return e.split(",").map((e) => {
76
64
  let t = e.trim(), n = Number.parseFloat(t);
77
65
  return Number.isFinite(n) ? t.endsWith("ms") ? n : t.endsWith("s") ? n * 1e3 : null : null;
78
66
  });
79
67
  }
80
68
  //#endregion
81
- export { u as useDrawerDialogPresence };
69
+ export { c as useDrawerDialogPresence };
82
70
 
83
71
  //# sourceMappingURL=useDrawerDialogPresence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDrawerDialogPresence.js","names":[],"sources":["../../../src/forks/Drawer/useDrawerDialogPresence.ts"],"sourcesContent":["// Copyright (c) Meta Platforms, Inc. and affiliates.\n//\n// Forked from @astryxdesign/lab 0.6.5-canary.8701623, src/Drawer/useDrawerDialogPresence.ts\n// (MIT; see NOTICE). Unchanged: forked with Drawer, which uses it.\n// Provenance and the drift guard: src/forks/provenance.json.\n\n\"use client\";\n\n/**\n * @file useDrawerDialogPresence.ts\n * @input Controlled open state, modal mode, dialog ref, and rendered-state setter\n * @output Coordinates native top-layer presence, exit timing, focus restoration, and unmount cleanup\n * @position Drawer-internal hook; consumed only by Drawer.tsx\n *\n * The drawer has two independent notions of presence:\n * - React's rendered state keeps the panel visible for its CSS exit.\n * - Native `showModal()` or `showPopover()` state keeps it in the browser top\n * layer.\n *\n * Their close ordering is a browser-visible invariant: the panel must finish\n * its exit, then leave the active native host and hide in the same task. If the\n * hide lands a frame later, a transformed ancestor becomes the containing block\n * for the now-non-top-layer `position: fixed` panel and it paints back inside\n * the page for one frame.\n *\n * SYNC: When modified, update:\n * - /packages/lab/src/Drawer/Drawer.test.tsx\n * - /.github/scripts/modal-close-visibility.js\n */\n\nimport {\n useEffect,\n useRef,\n type Dispatch,\n type RefObject,\n type SetStateAction,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\n\n/** Slack past the computed transition before the backstop gives up waiting. */\nconst EXIT_BACKSTOP_BUFFER_MS = 50;\n\n/**\n * Hold used when the transition duration cannot be read — an unresolved\n * `var()` outside a real browser. Picking a fixed number would otherwise make\n * an assumption about the consumer's theme.\n */\nconst EXIT_FALLBACK_MS = 250;\n\ntype UseDrawerDialogPresenceOptions = {\n dialogRef: RefObject<HTMLDialogElement | null>;\n isOpen: boolean;\n isModal: boolean;\n setIsRendered: Dispatch<SetStateAction<boolean>>;\n};\n\nfunction isPopoverOpen(dialog: HTMLDialogElement): boolean {\n try {\n return dialog.matches(\":popover-open\");\n } catch {\n // jsdom and pre-Popover browsers do not recognize :popover-open.\n return false;\n }\n}\n\nfunction isDrawerHostOpen(dialog: HTMLDialogElement, isModal: boolean): boolean {\n return isModal ? dialog.open : isPopoverOpen(dialog) || dialog.open;\n}\n\nfunction showDrawerHost(dialog: HTMLDialogElement, isModal: boolean): void {\n if (isModal) {\n dialog.showModal();\n } else if (typeof dialog.showPopover === \"function\") {\n dialog.showPopover();\n } else {\n // Reduced fallback for browsers below the Popover API support floor.\n dialog.show();\n }\n}\n\nfunction dispatchDialogClose(dialog: HTMLDialogElement): void {\n const EventConstructor = dialog.ownerDocument.defaultView?.Event ?? Event;\n dialog.dispatchEvent(new EventConstructor(\"close\"));\n}\n\n/**\n * Leaves the active native host. Returns whether the caller owes a synthetic\n * `close` dispatch: `dialog.close()` used to power the non-modal path, and\n * consumers observe its native `close` event through refs/onClose. Popover\n * dismissal has no equivalent event, so that public DOM contract is preserved\n * explicitly — but by the caller, not here. Native `close` is queued as a\n * task, so a consumer's listener always ran after this hook's own focus\n * restore; the synthetic event must keep that ordering (and fire exactly once\n * per exit, including the unmount path).\n */\nfunction hideDrawerHost(dialog: HTMLDialogElement, isModal: boolean): boolean {\n if (!isModal && typeof dialog.hidePopover === \"function\") {\n dialog.hidePopover();\n return true;\n }\n if (dialog.open) {\n dialog.close();\n }\n return false;\n}\n\n/**\n * Coordinates the native dialog and React-rendered presence for Drawer.\n *\n * Opening captures the trigger, enters the modal-dialog or manual-popover host,\n * and honours the component's `data-autofocus` contract. Closing waits for the\n * actual transform transition (with a computed-duration backstop), then leaves\n * the native host and synchronously hides the panel before the browser can paint\n * it outside the top layer, restores focus to the captured trigger, and only\n * then dispatches the popover host's synthetic `close`. Unmount cleanup closes\n * a host left open by React Activity or a removed subtree.\n */\nexport function useDrawerDialogPresence({\n dialogRef,\n isOpen,\n isModal,\n setIsRendered,\n}: UseDrawerDialogPresenceOptions): void {\n // Element focused when the drawer opened — restored on close.\n const triggerElementRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) {\n return;\n }\n\n if (isOpen) {\n if (!isDrawerHostOpen(dialog, isModal)) {\n triggerElementRef.current = document.activeElement as HTMLElement | null;\n showDrawerHost(dialog, isModal);\n // React's autoFocus calls .focus() during commit, before the native host\n // is visible, so it silently fails — honour data-autofocus instead (same\n // contract as Dialog).\n dialog.querySelector<HTMLElement>(\"[data-autofocus]\")?.focus();\n }\n return;\n }\n\n if (!isDrawerHostOpen(dialog, isModal)) {\n return;\n }\n\n return waitForDrawerExit(dialog, () => {\n const owesCloseEvent = hideDrawerHost(dialog, isModal);\n // flushSync, not a plain setState: React's default scheduling can land\n // the commit after the next paint, and that one frame is exactly the\n // bug — the panel paints outside the top layer. Both happen in this\n // task, so the browser never gets to paint between them.\n flushSync(() => {\n setIsRendered(false);\n });\n // Return focus after leaving the native host: a modal dialog makes the\n // rest of the document inert, so focusing earlier silently fails.\n triggerElementRef.current?.focus();\n triggerElementRef.current = null;\n // The synthetic popover close fires after the focus restore above,\n // mirroring the task-queued native event: a consumer close listener\n // that retargets focus (master-detail row switching) gets the last word.\n if (owesCloseEvent) {\n dispatchDialogClose(dialog);\n }\n });\n }, [dialogRef, isModal, isOpen, setIsRendered]);\n\n // Leave the active native host on unmount. When the drawer is mounted inside\n // an <Activity> that flips to mode=\"hidden\", React runs effect cleanups (with\n // stale isOpen) instead of re-running the effect with isOpen=false. Leaving\n // the host active would strand the top-layer surface and skip the next open.\n // This is deliberately separate from the open/close effect: putting it in\n // that cleanup would cut off every delayed slide-out.\n useEffect(() => {\n const dialog = dialogRef.current;\n return () => {\n if (dialog && isDrawerHostOpen(dialog, isModal)) {\n if (hideDrawerHost(dialog, isModal)) {\n // No focus restore on this path — the drawer is being torn down, so\n // the owed synthetic close fires immediately (still exactly once).\n dispatchDialogClose(dialog);\n }\n }\n };\n }, [dialogRef, isModal]);\n}\n\n/**\n * Wait for the panel's transform transition, with a computed-duration\n * backstop. Mirrors BottomSheetPanel.waitForTransition: the native event is\n * authoritative, and the timeout only prevents a lost event from stranding an\n * open dialog.\n */\nfunction waitForDrawerExit(\n element: HTMLDialogElement,\n complete: () => void,\n): () => void {\n let done = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const finish = () => {\n if (done) {\n return;\n }\n done = true;\n if (timer != null) {\n clearTimeout(timer);\n }\n element.removeEventListener(\"transitionend\", handleTransitionEnd);\n element.removeEventListener(\"transitioncancel\", handleTransitionEnd);\n complete();\n };\n\n const handleTransitionEnd = (event: TransitionEvent) => {\n if (event.target === element && event.propertyName === \"transform\") {\n finish();\n }\n };\n\n element.addEventListener(\"transitionend\", handleTransitionEnd);\n element.addEventListener(\"transitioncancel\", handleTransitionEnd);\n\n const transitionMs = readTransformTransitionMs(element);\n timer = setTimeout(\n finish,\n (transitionMs ?? EXIT_FALLBACK_MS) + EXIT_BACKSTOP_BUFFER_MS,\n );\n\n return () => {\n done = true;\n if (timer != null) {\n clearTimeout(timer);\n }\n element.removeEventListener(\"transitionend\", handleTransitionEnd);\n element.removeEventListener(\"transitioncancel\", handleTransitionEnd);\n };\n}\n\n/** Read the transform transition's duration + delay from computed CSS. */\nfunction readTransformTransitionMs(element: HTMLElement): number | null {\n const computed = window.getComputedStyle(element);\n const properties = computed.transitionProperty\n .split(\",\")\n .map((value) => value.trim());\n const durations = parseTimes(computed.transitionDuration);\n const delays = parseTimes(computed.transitionDelay);\n\n if (\n properties.length === 0 ||\n durations.length === 0 ||\n delays.length === 0 ||\n durations.includes(null) ||\n delays.includes(null)\n ) {\n return null;\n }\n\n return properties.reduce((longest, property, index) => {\n if (property !== \"transform\" && property !== \"all\") {\n return longest;\n }\n const duration = durations[index % durations.length];\n const delay = delays[index % delays.length];\n return Math.max(longest, (duration ?? 0) + (delay ?? 0));\n }, 0);\n}\n\nfunction parseTimes(value: string): (number | null)[] {\n return value.split(\",\").map((part) => {\n const trimmed = part.trim();\n const time = Number.parseFloat(trimmed);\n if (!Number.isFinite(time)) {\n return null;\n }\n if (trimmed.endsWith(\"ms\")) {\n return time;\n }\n return trimmed.endsWith(\"s\") ? time * 1000 : null;\n });\n}\n"],"mappings":";;;;AAwCA,IAAM,IAA0B,IAO1B,IAAmB;AASzB,SAAS,EAAc,GAAoC;CACzD,IAAI;EACF,OAAO,EAAO,QAAQ,eAAe;CACvC,QAAQ;EAEN,OAAO;CACT;AACF;AAEA,SAAS,EAAiB,GAA2B,GAA2B;CAC9E,OAAO,IAAU,EAAO,OAAO,EAAc,CAAM,KAAK,EAAO;AACjE;AAEA,SAAS,EAAe,GAA2B,GAAwB;CACzE,AAAI,IACF,EAAO,UAAU,IACR,OAAO,EAAO,eAAgB,aACvC,EAAO,YAAY,IAGnB,EAAO,KAAK;AAEhB;AAEA,SAAS,EAAoB,GAAiC;CAC5D,IAAM,IAAmB,EAAO,cAAc,aAAa,SAAS;CACpE,EAAO,cAAc,IAAI,EAAiB,OAAO,CAAC;AACpD;AAYA,SAAS,EAAe,GAA2B,GAA2B;CAQ5E,OAPI,CAAC,KAAW,OAAO,EAAO,eAAgB,cAC5C,EAAO,YAAY,GACZ,OAEL,EAAO,QACT,EAAO,MAAM,GAER;AACT;AAaA,SAAgB,EAAwB,EACtC,cACA,WACA,YACA,oBACuC;CAEvC,IAAM,IAAoB,EAA2B,IAAI;CAoDzD,AAlDA,QAAgB;EACd,IAAM,IAAS,EAAU;EACpB,OAIL;OAAI,GAAQ;IACV,AAAK,EAAiB,GAAQ,CAAO,MACnC,EAAkB,UAAU,SAAS,eACrC,EAAe,GAAQ,CAAO,GAI9B,EAAO,cAA2B,kBAAkB,CAAC,EAAE,MAAM;IAE/D;GACF;GAEK,MAAiB,GAAQ,CAAO,GAIrC,OAAO,EAAkB,SAAc;IACrC,IAAM,IAAiB,EAAe,GAAQ,CAAO;IAerD,AAVA,QAAgB;KACd,EAAc,EAAK;IACrB,CAAC,GAGD,EAAkB,SAAS,MAAM,GACjC,EAAkB,UAAU,MAIxB,KACF,EAAoB,CAAM;GAE9B,CAAC;EAzBD;CA0BF,GAAG;EAAC;EAAW;EAAS;EAAQ;CAAa,CAAC,GAQ9C,QAAgB;EACd,IAAM,IAAS,EAAU;EACzB,aAAa;GACX,AAAI,KAAU,EAAiB,GAAQ,CAAO,KACxC,EAAe,GAAQ,CAAO,KAGhC,EAAoB,CAAM;EAGhC;CACF,GAAG,CAAC,GAAW,CAAO,CAAC;AACzB;AAQA,SAAS,EACP,GACA,GACY;CACZ,IAAI,IAAO,IACP,IAA8C,MAE5C,UAAe;EACf,MAGJ,IAAO,IACH,KAAS,QACX,aAAa,CAAK,GAEpB,EAAQ,oBAAoB,iBAAiB,CAAmB,GAChE,EAAQ,oBAAoB,oBAAoB,CAAmB,GACnE,EAAS;CACX,GAEM,KAAuB,MAA2B;EACtD,AAAI,EAAM,WAAW,KAAW,EAAM,iBAAiB,eACrD,EAAO;CAEX;CAGA,AADA,EAAQ,iBAAiB,iBAAiB,CAAmB,GAC7D,EAAQ,iBAAiB,oBAAoB,CAAmB;CAEhE,IAAM,IAAe,EAA0B,CAAO;CAMtD,OALA,IAAQ,WACN,IACC,KAAgB,KAAoB,CACvC,SAEa;EAMX,AALA,IAAO,IACH,KAAS,QACX,aAAa,CAAK,GAEpB,EAAQ,oBAAoB,iBAAiB,CAAmB,GAChE,EAAQ,oBAAoB,oBAAoB,CAAmB;CACrE;AACF;AAGA,SAAS,EAA0B,GAAqC;CACtE,IAAM,IAAW,OAAO,iBAAiB,CAAO,GAC1C,IAAa,EAAS,mBACzB,MAAM,GAAG,CAAC,CACV,KAAK,MAAU,EAAM,KAAK,CAAC,GACxB,IAAY,EAAW,EAAS,kBAAkB,GAClD,IAAS,EAAW,EAAS,eAAe;CAYlD,OATE,EAAW,WAAW,KACtB,EAAU,WAAW,KACrB,EAAO,WAAW,KAClB,EAAU,SAAS,IAAI,KACvB,EAAO,SAAS,IAAI,IAEb,OAGF,EAAW,QAAQ,GAAS,GAAU,MAAU;EACrD,IAAI,MAAa,eAAe,MAAa,OAC3C,OAAO;EAET,IAAM,IAAW,EAAU,IAAQ,EAAU,SACvC,IAAQ,EAAO,IAAQ,EAAO;EACpC,OAAO,KAAK,IAAI,IAAU,KAAY,MAAM,KAAS,EAAE;CACzD,GAAG,CAAC;AACN;AAEA,SAAS,EAAW,GAAkC;CACpD,OAAO,EAAM,MAAM,GAAG,CAAC,CAAC,KAAK,MAAS;EACpC,IAAM,IAAU,EAAK,KAAK,GACpB,IAAO,OAAO,WAAW,CAAO;EAOtC,OANK,OAAO,SAAS,CAAI,IAGrB,EAAQ,SAAS,IAAI,IAChB,IAEF,EAAQ,SAAS,GAAG,IAAI,IAAO,MAAO,OALpC;CAMX,CAAC;AACH"}
1
+ {"version":3,"file":"useDrawerDialogPresence.js","names":[],"sources":["../../../src/forks/Drawer/useDrawerDialogPresence.ts"],"sourcesContent":["// Copyright (c) Meta Platforms, Inc. and affiliates.\n//\n// Forked from @astryxdesign/lab 0.6.5-canary.8701623, src/Drawer/useDrawerDialogPresence.ts\n// (MIT; see NOTICE). Changed (marked `ui-common:`): a non-modal drawer opens\n// with `show()`, not `showPopover()`, so it stays out of the top layer (Drawer.tsx).\n// Provenance and the drift guard: src/forks/provenance.json.\n\n\"use client\";\n\n/**\n * @file useDrawerDialogPresence.ts\n * @input Controlled open state, modal mode, dialog ref, and rendered-state setter\n * @output Coordinates native dialog presence, exit timing, focus restoration, and unmount cleanup\n * @position Drawer-internal hook; consumed only by Drawer.tsx\n *\n * The drawer has two independent notions of presence:\n * - React's rendered state keeps the panel visible for its CSS exit.\n * - The native dialog's `open` state: `showModal()` (top layer) with a scrim,\n * `show()` (in the page, by z-index) without (ui-common; lab uses\n * `showPopover()`).\n *\n * Their close ordering is a browser-visible invariant: the panel must finish\n * its exit, then leave the active native host and hide in the same task. If the\n * hide lands a frame later, a transformed ancestor becomes the containing block\n * for the now-non-top-layer `position: fixed` panel and it paints back inside\n * the page for one frame.\n *\n * SYNC: When modified, update:\n * - /packages/lab/src/Drawer/Drawer.test.tsx\n * - /.github/scripts/modal-close-visibility.js\n */\n\nimport {\n useEffect,\n useRef,\n type Dispatch,\n type RefObject,\n type SetStateAction,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\n\n/** Slack past the computed transition before the backstop gives up waiting. */\nconst EXIT_BACKSTOP_BUFFER_MS = 50;\n\n/**\n * Hold used when the transition duration cannot be read — an unresolved\n * `var()` outside a real browser. Picking a fixed number would otherwise make\n * an assumption about the consumer's theme.\n */\nconst EXIT_FALLBACK_MS = 250;\n\ntype UseDrawerDialogPresenceOptions = {\n dialogRef: RefObject<HTMLDialogElement | null>;\n isOpen: boolean;\n isModal: boolean;\n setIsRendered: Dispatch<SetStateAction<boolean>>;\n};\n\n// ui-common: a non-modal drawer opens with `show()` and stacks by z-index, as\n// it did before lab 0.6.5 moved it into the top layer as a manual popover.\n// ui-common's `Modal` and notification stack are z-index surfaces too, so a\n// top-layer drawer would paint over every one of them (Drawer.tsx).\nfunction isDrawerHostOpen(dialog: HTMLDialogElement): boolean {\n return dialog.open;\n}\n\nfunction showDrawerHost(dialog: HTMLDialogElement, isModal: boolean): void {\n if (isModal) {\n dialog.showModal();\n } else {\n dialog.show();\n }\n}\n\n/** Leaves the native host; `close()` fires the native `close` event itself. */\nfunction hideDrawerHost(dialog: HTMLDialogElement): void {\n if (dialog.open) {\n dialog.close();\n }\n}\n\n/**\n * Coordinates the native dialog and React-rendered presence for Drawer.\n *\n * Opening captures the trigger, opens the dialog (`showModal()` or `show()`),\n * and honours the component's `data-autofocus` contract. Closing waits for the\n * actual transform transition (with a computed-duration backstop), then calls\n * `close()` (which fires the native `close` event) and synchronously hides the\n * panel before the browser can paint it outside the top layer, then restores\n * focus to the captured trigger. Unmount cleanup closes a dialog left open by\n * React Activity or a removed subtree.\n */\nexport function useDrawerDialogPresence({\n dialogRef,\n isOpen,\n isModal,\n setIsRendered,\n}: UseDrawerDialogPresenceOptions): void {\n // Element focused when the drawer opened — restored on close.\n const triggerElementRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) {\n return;\n }\n\n if (isOpen) {\n if (!isDrawerHostOpen(dialog)) {\n triggerElementRef.current = document.activeElement as HTMLElement | null;\n showDrawerHost(dialog, isModal);\n // React's autoFocus calls .focus() during commit, before the native host\n // is visible, so it silently fails — honour data-autofocus instead (same\n // contract as Dialog).\n dialog.querySelector<HTMLElement>(\"[data-autofocus]\")?.focus();\n }\n return;\n }\n\n if (!isDrawerHostOpen(dialog)) {\n return;\n }\n\n return waitForDrawerExit(dialog, () => {\n hideDrawerHost(dialog);\n // flushSync, not a plain setState: React's default scheduling can land\n // the commit after the next paint, and that one frame is exactly the\n // bug — the panel paints outside the top layer. Both happen in this\n // task, so the browser never gets to paint between them.\n flushSync(() => {\n setIsRendered(false);\n });\n // Return focus after leaving the native host: a modal dialog makes the\n // rest of the document inert, so focusing earlier silently fails.\n triggerElementRef.current?.focus();\n triggerElementRef.current = null;\n });\n }, [dialogRef, isModal, isOpen, setIsRendered]);\n\n // Leave the active native host on unmount. When the drawer is mounted inside\n // an <Activity> that flips to mode=\"hidden\", React runs effect cleanups (with\n // stale isOpen) instead of re-running the effect with isOpen=false. Leaving\n // the host active would strand the top-layer surface and skip the next open.\n // This is deliberately separate from the open/close effect: putting it in\n // that cleanup would cut off every delayed slide-out.\n useEffect(() => {\n const dialog = dialogRef.current;\n return () => {\n if (dialog && isDrawerHostOpen(dialog)) {\n hideDrawerHost(dialog);\n }\n };\n }, [dialogRef]);\n}\n\n/**\n * Wait for the panel's transform transition, with a computed-duration\n * backstop. Mirrors BottomSheetPanel.waitForTransition: the native event is\n * authoritative, and the timeout only prevents a lost event from stranding an\n * open dialog.\n */\nfunction waitForDrawerExit(\n element: HTMLDialogElement,\n complete: () => void,\n): () => void {\n let done = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const finish = () => {\n if (done) {\n return;\n }\n done = true;\n if (timer != null) {\n clearTimeout(timer);\n }\n element.removeEventListener(\"transitionend\", handleTransitionEnd);\n element.removeEventListener(\"transitioncancel\", handleTransitionEnd);\n complete();\n };\n\n const handleTransitionEnd = (event: TransitionEvent) => {\n if (event.target === element && event.propertyName === \"transform\") {\n finish();\n }\n };\n\n element.addEventListener(\"transitionend\", handleTransitionEnd);\n element.addEventListener(\"transitioncancel\", handleTransitionEnd);\n\n const transitionMs = readTransformTransitionMs(element);\n timer = setTimeout(\n finish,\n (transitionMs ?? EXIT_FALLBACK_MS) + EXIT_BACKSTOP_BUFFER_MS,\n );\n\n return () => {\n done = true;\n if (timer != null) {\n clearTimeout(timer);\n }\n element.removeEventListener(\"transitionend\", handleTransitionEnd);\n element.removeEventListener(\"transitioncancel\", handleTransitionEnd);\n };\n}\n\n/** Read the transform transition's duration + delay from computed CSS. */\nfunction readTransformTransitionMs(element: HTMLElement): number | null {\n const computed = window.getComputedStyle(element);\n const properties = computed.transitionProperty\n .split(\",\")\n .map((value) => value.trim());\n const durations = parseTimes(computed.transitionDuration);\n const delays = parseTimes(computed.transitionDelay);\n\n if (\n properties.length === 0 ||\n durations.length === 0 ||\n delays.length === 0 ||\n durations.includes(null) ||\n delays.includes(null)\n ) {\n return null;\n }\n\n return properties.reduce((longest, property, index) => {\n if (property !== \"transform\" && property !== \"all\") {\n return longest;\n }\n const duration = durations[index % durations.length];\n const delay = delays[index % delays.length];\n return Math.max(longest, (duration ?? 0) + (delay ?? 0));\n }, 0);\n}\n\nfunction parseTimes(value: string): (number | null)[] {\n return value.split(\",\").map((part) => {\n const trimmed = part.trim();\n const time = Number.parseFloat(trimmed);\n if (!Number.isFinite(time)) {\n return null;\n }\n if (trimmed.endsWith(\"ms\")) {\n return time;\n }\n return trimmed.endsWith(\"s\") ? time * 1000 : null;\n });\n}\n"],"mappings":";;;;AA0CA,IAAM,IAA0B,IAO1B,IAAmB;AAazB,SAAS,EAAiB,GAAoC;CAC5D,OAAO,EAAO;AAChB;AAEA,SAAS,EAAe,GAA2B,GAAwB;CACzE,AAAI,IACF,EAAO,UAAU,IAEjB,EAAO,KAAK;AAEhB;AAGA,SAAS,EAAe,GAAiC;CACvD,AAAI,EAAO,QACT,EAAO,MAAM;AAEjB;AAaA,SAAgB,EAAwB,EACtC,cACA,WACA,YACA,oBACuC;CAEvC,IAAM,IAAoB,EAA2B,IAAI;CA8CzD,AA5CA,QAAgB;EACd,IAAM,IAAS,EAAU;EACpB,OAIL;OAAI,GAAQ;IACV,AAAK,EAAiB,CAAM,MAC1B,EAAkB,UAAU,SAAS,eACrC,EAAe,GAAQ,CAAO,GAI9B,EAAO,cAA2B,kBAAkB,CAAC,EAAE,MAAM;IAE/D;GACF;GAEK,MAAiB,CAAM,GAI5B,OAAO,EAAkB,SAAc;IAYrC,AAXA,EAAe,CAAM,GAKrB,QAAgB;KACd,EAAc,EAAK;IACrB,CAAC,GAGD,EAAkB,SAAS,MAAM,GACjC,EAAkB,UAAU;GAC9B,CAAC;EAnBD;CAoBF,GAAG;EAAC;EAAW;EAAS;EAAQ;CAAa,CAAC,GAQ9C,QAAgB;EACd,IAAM,IAAS,EAAU;EACzB,aAAa;GACX,AAAI,KAAU,EAAiB,CAAM,KACnC,EAAe,CAAM;EAEzB;CACF,GAAG,CAAC,CAAS,CAAC;AAChB;AAQA,SAAS,EACP,GACA,GACY;CACZ,IAAI,IAAO,IACP,IAA8C,MAE5C,UAAe;EACf,MAGJ,IAAO,IACH,KAAS,QACX,aAAa,CAAK,GAEpB,EAAQ,oBAAoB,iBAAiB,CAAmB,GAChE,EAAQ,oBAAoB,oBAAoB,CAAmB,GACnE,EAAS;CACX,GAEM,KAAuB,MAA2B;EACtD,AAAI,EAAM,WAAW,KAAW,EAAM,iBAAiB,eACrD,EAAO;CAEX;CAGA,AADA,EAAQ,iBAAiB,iBAAiB,CAAmB,GAC7D,EAAQ,iBAAiB,oBAAoB,CAAmB;CAEhE,IAAM,IAAe,EAA0B,CAAO;CAMtD,OALA,IAAQ,WACN,IACC,KAAgB,KAAoB,CACvC,SAEa;EAMX,AALA,IAAO,IACH,KAAS,QACX,aAAa,CAAK,GAEpB,EAAQ,oBAAoB,iBAAiB,CAAmB,GAChE,EAAQ,oBAAoB,oBAAoB,CAAmB;CACrE;AACF;AAGA,SAAS,EAA0B,GAAqC;CACtE,IAAM,IAAW,OAAO,iBAAiB,CAAO,GAC1C,IAAa,EAAS,mBACzB,MAAM,GAAG,CAAC,CACV,KAAK,MAAU,EAAM,KAAK,CAAC,GACxB,IAAY,EAAW,EAAS,kBAAkB,GAClD,IAAS,EAAW,EAAS,eAAe;CAYlD,OATE,EAAW,WAAW,KACtB,EAAU,WAAW,KACrB,EAAO,WAAW,KAClB,EAAU,SAAS,IAAI,KACvB,EAAO,SAAS,IAAI,IAEb,OAGF,EAAW,QAAQ,GAAS,GAAU,MAAU;EACrD,IAAI,MAAa,eAAe,MAAa,OAC3C,OAAO;EAET,IAAM,IAAW,EAAU,IAAQ,EAAU,SACvC,IAAQ,EAAO,IAAQ,EAAO;EACpC,OAAO,KAAK,IAAI,IAAU,KAAY,MAAM,KAAS,EAAE;CACzD,GAAG,CAAC;AACN;AAEA,SAAS,EAAW,GAAkC;CACpD,OAAO,EAAM,MAAM,GAAG,CAAC,CAAC,KAAK,MAAS;EACpC,IAAM,IAAU,EAAK,KAAK,GACpB,IAAO,OAAO,WAAW,CAAO;EAOtC,OANK,OAAO,SAAS,CAAI,IAGrB,EAAQ,SAAS,IAAI,IAChB,IAEF,EAAQ,SAAS,GAAG,IAAI,IAAO,MAAO,OALpC;CAMX,CAAC;AACH"}
@@ -1,27 +1,28 @@
1
- import { booleanTokenMessages as e } from "../components/BooleanToken/BooleanToken.messages.js";
2
- import { bulkEditFormItemMessages as t } from "../components/BulkEditFormItem/BulkEditFormItem.messages.js";
3
- import { bulkErrorModalMessages as n } from "../components/BulkErrorModal/BulkErrorModal.messages.js";
4
- import { colorPickerMessages as r } from "../components/ColorPicker/ColorPicker.messages.js";
5
- import { dataGridMessages as i } from "../components/DataGrid/DataGrid.messages.js";
6
- import { deleteConfirmModalMessages as a } from "../components/DeleteConfirmModal/DeleteConfirmModal.messages.js";
7
- import { formMessages as o } from "../components/Form/Form.messages.js";
8
- import { notificationStackMessages as s } from "../components/NotificationStack/NotificationStack.messages.js";
9
- import { pageHeaderMessages as c } from "../components/PageHeader/PageHeader.messages.js";
10
- import { pagedSelectorMessages as l } from "../components/PagedSelector/PagedSelector.messages.js";
11
- import { selectionLabelMessages as u } from "../components/SelectionLabel/SelectionLabel.messages.js";
12
- import { skeletonMessages as d } from "../components/Skeleton/Skeleton.messages.js";
13
- import { statisticMessages as f } from "../components/Statistic/Statistic.messages.js";
14
- import { numberStepperMessages as p } from "../components/StepNumberInput/NumberStepper.messages.js";
15
- import { tokenRowMessages as m } from "../components/TokenRow/TokenRow.messages.js";
16
- import { uncontrolledInputMessages as h } from "../components/UncontrolledInput/UncontrolledInput.messages.js";
17
- import { unitGridMessages as g } from "../components/UnitGrid/UnitGrid.messages.js";
18
- import { commonMessages as _ } from "./common.messages.js";
1
+ import { boardMessages as e } from "../components/Board/Board.messages.js";
2
+ import { booleanTokenMessages as t } from "../components/BooleanToken/BooleanToken.messages.js";
3
+ import { bulkEditFormItemMessages as n } from "../components/BulkEditFormItem/BulkEditFormItem.messages.js";
4
+ import { bulkErrorModalMessages as r } from "../components/BulkErrorModal/BulkErrorModal.messages.js";
5
+ import { colorPickerMessages as i } from "../components/ColorPicker/ColorPicker.messages.js";
6
+ import { dataGridMessages as a } from "../components/DataGrid/DataGrid.messages.js";
7
+ import { deleteConfirmModalMessages as o } from "../components/DeleteConfirmModal/DeleteConfirmModal.messages.js";
8
+ import { formMessages as s } from "../components/Form/Form.messages.js";
9
+ import { notificationStackMessages as c } from "../components/NotificationStack/NotificationStack.messages.js";
10
+ import { pageHeaderMessages as l } from "../components/PageHeader/PageHeader.messages.js";
11
+ import { pagedSelectorMessages as u } from "../components/PagedSelector/PagedSelector.messages.js";
12
+ import { selectionLabelMessages as d } from "../components/SelectionLabel/SelectionLabel.messages.js";
13
+ import { skeletonMessages as f } from "../components/Skeleton/Skeleton.messages.js";
14
+ import { statisticMessages as p } from "../components/Statistic/Statistic.messages.js";
15
+ import { numberStepperMessages as m } from "../components/StepNumberInput/NumberStepper.messages.js";
16
+ import { tokenRowMessages as h } from "../components/TokenRow/TokenRow.messages.js";
17
+ import { uncontrolledInputMessages as g } from "../components/UncontrolledInput/UncontrolledInput.messages.js";
18
+ import { unitGridMessages as _ } from "../components/UnitGrid/UnitGrid.messages.js";
19
+ import { commonMessages as v } from "./common.messages.js";
19
20
  //#region src/i18n/catalog.ts
20
- function v(e) {
21
+ function y(e) {
21
22
  return e;
22
23
  }
23
- var y = {
24
- ..._,
24
+ var b = {
25
+ ...v,
25
26
  ...e,
26
27
  ...t,
27
28
  ...n,
@@ -30,17 +31,18 @@ var y = {
30
31
  ...a,
31
32
  ...o,
32
33
  ...s,
33
- ...p,
34
34
  ...c,
35
+ ...m,
35
36
  ...l,
36
37
  ...u,
37
38
  ...d,
38
39
  ...f,
39
- ...m,
40
+ ...p,
40
41
  ...h,
41
- ...g
42
+ ...g,
43
+ ..._
42
44
  };
43
45
  //#endregion
44
- export { v as defineMessages, y as uiCommonCatalog };
46
+ export { y as defineMessages, b as uiCommonCatalog };
45
47
 
46
48
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","names":[],"sources":["../../src/i18n/catalog.ts"],"sourcesContent":["/**\n * ui-common's message catalog: every built-in string a custom component\n * shows, with its English text.\n *\n * English lives in code, as `defaultMessage`. Translations live in\n * `./locales/<locale>.json`, one file per Astryx locale name (`ko-KR.json`,\n * `ja-JP.json`, ...), holding the same keys. The build writes `en.json` from\n * this catalog and ships every file at\n * `@lablup/ui-common/ui-common-locales/<locale>.json`.\n *\n * Adding strings for a component:\n *\n * // src/components/Foo/Foo.messages.ts\n * export const fooMessages = defineMessages({\n * \"uic.Foo.expand\": { defaultMessage: \"Expand\", description: \"...\" },\n * });\n *\n * then spread `fooMessages` into `uiCommonCatalog` below. Generic action\n * words (OK, Cancel, Confirm, Retry, ...) are `uic.common.*` keys in\n * `./common.messages.ts`; use those instead of a key of your own. Keep message\n * files free of React and CSS imports: the build reads this catalog.\n */\nimport type { Catalog, MessageEntry } from \"@astryxdesign/core/i18n\";\n\n// These modules import `defineMessages` back from here. The cycle is safe:\n// it is a function declaration, so it is bound before either module runs.\nimport { booleanTokenMessages } from \"../components/BooleanToken/BooleanToken.messages\";\nimport { bulkEditFormItemMessages } from \"../components/BulkEditFormItem/BulkEditFormItem.messages\";\nimport { bulkErrorModalMessages } from \"../components/BulkErrorModal/BulkErrorModal.messages\";\nimport { colorPickerMessages } from \"../components/ColorPicker/ColorPicker.messages\";\nimport { dataGridMessages } from \"../components/DataGrid/DataGrid.messages\";\nimport { deleteConfirmModalMessages } from \"../components/DeleteConfirmModal/DeleteConfirmModal.messages\";\nimport { formMessages } from \"../components/Form/Form.messages\";\nimport { notificationStackMessages } from \"../components/NotificationStack/NotificationStack.messages\";\nimport { pageHeaderMessages } from \"../components/PageHeader/PageHeader.messages\";\nimport { pagedSelectorMessages } from \"../components/PagedSelector/PagedSelector.messages\";\nimport { selectionLabelMessages } from \"../components/SelectionLabel/SelectionLabel.messages\";\nimport { skeletonMessages } from \"../components/Skeleton/Skeleton.messages\";\nimport { statisticMessages } from \"../components/Statistic/Statistic.messages\";\nimport { numberStepperMessages } from \"../components/StepNumberInput/NumberStepper.messages\";\nimport { tokenRowMessages } from \"../components/TokenRow/TokenRow.messages\";\nimport { uncontrolledInputMessages } from \"../components/UncontrolledInput/UncontrolledInput.messages\";\nimport { unitGridMessages } from \"../components/UnitGrid/UnitGrid.messages\";\nimport { commonMessages } from \"./common.messages\";\n\n/**\n * A catalog key: `uic.<Component>.<key>`, or `uic.common.<key>` for a word\n * every component shares (`./common.messages.ts`).\n */\nexport type UicMessageKey = `uic.${string}.${string}`;\n\n/**\n * Type-checks a component's messages. Keys must be `uic.<Component>.<key>` or\n * `uic.common.<key>`.\n */\nexport function defineMessages<const T extends Record<UicMessageKey, MessageEntry>>(\n messages: T,\n): T {\n return messages;\n}\n\nexport const uiCommonCatalog: Catalog = {\n ...commonMessages,\n ...booleanTokenMessages,\n ...bulkEditFormItemMessages,\n ...bulkErrorModalMessages,\n ...colorPickerMessages,\n ...dataGridMessages,\n ...deleteConfirmModalMessages,\n ...formMessages,\n ...notificationStackMessages,\n ...numberStepperMessages,\n ...pageHeaderMessages,\n ...pagedSelectorMessages,\n ...selectionLabelMessages,\n ...skeletonMessages,\n ...statisticMessages,\n ...tokenRowMessages,\n ...uncontrolledInputMessages,\n ...unitGridMessages,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAuDA,SAAgB,EACd,GACG;CACH,OAAO;AACT;AAEA,IAAa,IAA2B;CACtC,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;AACL"}
1
+ {"version":3,"file":"catalog.js","names":[],"sources":["../../src/i18n/catalog.ts"],"sourcesContent":["/**\n * ui-common's message catalog: every built-in string a custom component\n * shows, with its English text.\n *\n * English lives in code, as `defaultMessage`. Translations live in\n * `./locales/<locale>.json`, one file per Astryx locale name (`ko-KR.json`,\n * `ja-JP.json`, ...), holding the same keys. The build writes `en.json` from\n * this catalog and ships every file at\n * `@lablup/ui-common/ui-common-locales/<locale>.json`.\n *\n * Adding strings for a component:\n *\n * // src/components/Foo/Foo.messages.ts\n * export const fooMessages = defineMessages({\n * \"uic.Foo.expand\": { defaultMessage: \"Expand\", description: \"...\" },\n * });\n *\n * then spread `fooMessages` into `uiCommonCatalog` below. Generic action\n * words (OK, Cancel, Confirm, Retry, ...) are `uic.common.*` keys in\n * `./common.messages.ts`; use those instead of a key of your own. Keep message\n * files free of React and CSS imports: the build reads this catalog.\n */\nimport type { Catalog, MessageEntry } from \"@astryxdesign/core/i18n\";\n\n// These modules import `defineMessages` back from here. The cycle is safe:\n// it is a function declaration, so it is bound before either module runs.\nimport { boardMessages } from \"../components/Board/Board.messages\";\nimport { booleanTokenMessages } from \"../components/BooleanToken/BooleanToken.messages\";\nimport { bulkEditFormItemMessages } from \"../components/BulkEditFormItem/BulkEditFormItem.messages\";\nimport { bulkErrorModalMessages } from \"../components/BulkErrorModal/BulkErrorModal.messages\";\nimport { colorPickerMessages } from \"../components/ColorPicker/ColorPicker.messages\";\nimport { dataGridMessages } from \"../components/DataGrid/DataGrid.messages\";\nimport { deleteConfirmModalMessages } from \"../components/DeleteConfirmModal/DeleteConfirmModal.messages\";\nimport { formMessages } from \"../components/Form/Form.messages\";\nimport { notificationStackMessages } from \"../components/NotificationStack/NotificationStack.messages\";\nimport { pageHeaderMessages } from \"../components/PageHeader/PageHeader.messages\";\nimport { pagedSelectorMessages } from \"../components/PagedSelector/PagedSelector.messages\";\nimport { selectionLabelMessages } from \"../components/SelectionLabel/SelectionLabel.messages\";\nimport { skeletonMessages } from \"../components/Skeleton/Skeleton.messages\";\nimport { statisticMessages } from \"../components/Statistic/Statistic.messages\";\nimport { numberStepperMessages } from \"../components/StepNumberInput/NumberStepper.messages\";\nimport { tokenRowMessages } from \"../components/TokenRow/TokenRow.messages\";\nimport { uncontrolledInputMessages } from \"../components/UncontrolledInput/UncontrolledInput.messages\";\nimport { unitGridMessages } from \"../components/UnitGrid/UnitGrid.messages\";\nimport { commonMessages } from \"./common.messages\";\n\n/**\n * A catalog key: `uic.<Component>.<key>`, or `uic.common.<key>` for a word\n * every component shares (`./common.messages.ts`).\n */\nexport type UicMessageKey = `uic.${string}.${string}`;\n\n/**\n * Type-checks a component's messages. Keys must be `uic.<Component>.<key>` or\n * `uic.common.<key>`.\n */\nexport function defineMessages<const T extends Record<UicMessageKey, MessageEntry>>(\n messages: T,\n): T {\n return messages;\n}\n\nexport const uiCommonCatalog: Catalog = {\n ...commonMessages,\n ...boardMessages,\n ...booleanTokenMessages,\n ...bulkEditFormItemMessages,\n ...bulkErrorModalMessages,\n ...colorPickerMessages,\n ...dataGridMessages,\n ...deleteConfirmModalMessages,\n ...formMessages,\n ...notificationStackMessages,\n ...numberStepperMessages,\n ...pageHeaderMessages,\n ...pagedSelectorMessages,\n ...selectionLabelMessages,\n ...skeletonMessages,\n ...statisticMessages,\n ...tokenRowMessages,\n ...uncontrolledInputMessages,\n ...unitGridMessages,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwDA,SAAgB,EACd,GACG;CACH,OAAO;AACT;AAEA,IAAa,IAA2B;CACtC,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;AACL"}
@@ -24,6 +24,50 @@ var e = {
24
24
  defaultMessage: "Anwenden",
25
25
  description: "Generic label of a button that applies the changes made in a dialog"
26
26
  },
27
+ "uic.Board.dragHandle": {
28
+ defaultMessage: "Ziehgriff",
29
+ description: "Accessible name of the button at a board item's top-left corner that moves the item"
30
+ },
31
+ "uic.Board.resizeHandle": {
32
+ defaultMessage: "Größengriff",
33
+ description: "Accessible name of the button at a board item's bottom-right corner that resizes the item"
34
+ },
35
+ "uic.Board.moveStarted": {
36
+ defaultMessage: "Wird gezogen.",
37
+ description: "Screen reader announcement when a board item is picked up to be moved"
38
+ },
39
+ "uic.Board.resizeStarted": {
40
+ defaultMessage: "Größe wird geändert.",
41
+ description: "Screen reader announcement when a board item starts being resized"
42
+ },
43
+ "uic.Board.itemMoved": {
44
+ defaultMessage: "Element in Spalte {column}, Zeile {row} verschoben.",
45
+ description: "Screen reader announcement while a board item moves. {column} and {row} are 1-based"
46
+ },
47
+ "uic.Board.itemResized": {
48
+ defaultMessage: "Elementgröße auf {columns} Spalten mal {rows} Zeilen geändert.",
49
+ description: "Screen reader announcement while a board item is resized"
50
+ },
51
+ "uic.Board.moveCommitted": {
52
+ defaultMessage: "Verschieben übernommen.",
53
+ description: "Screen reader announcement when a board item is dropped in its new place"
54
+ },
55
+ "uic.Board.resizeCommitted": {
56
+ defaultMessage: "Größenänderung übernommen.",
57
+ description: "Screen reader announcement when a board item's new size is applied"
58
+ },
59
+ "uic.Board.moveDiscarded": {
60
+ defaultMessage: "Verschieben verworfen.",
61
+ description: "Screen reader announcement when moving a board item is cancelled"
62
+ },
63
+ "uic.Board.resizeDiscarded": {
64
+ defaultMessage: "Größenänderung verworfen.",
65
+ description: "Screen reader announcement when resizing a board item is cancelled"
66
+ },
67
+ "uic.Board.itemRemoved": {
68
+ defaultMessage: "Element entfernt.",
69
+ description: "Screen reader announcement when a board item is removed"
70
+ },
27
71
  "uic.ColorPicker.label": {
28
72
  defaultMessage: "Farbe auswählen",
29
73
  description: "Accessible name of a color picker whose caller gave it no label"
@@ -323,6 +367,22 @@ var e = {
323
367
  "uic.PagedSelector.totalItems": {
324
368
  defaultMessage: "Total {total} Elemente",
325
369
  description: "Foot of a selector's option list; {total} is how many options exist in all pages"
370
+ },
371
+ "uic.Board.directionUp": {
372
+ defaultMessage: "Nach oben",
373
+ description: "Accessible name of the button that moves an activated board item, or shrinks a resized one, one row up"
374
+ },
375
+ "uic.Board.directionDown": {
376
+ defaultMessage: "Nach unten",
377
+ description: "Accessible name of the button that moves an activated board item, or grows a resized one, one row down"
378
+ },
379
+ "uic.Board.directionLeft": {
380
+ defaultMessage: "Nach links",
381
+ description: "Accessible name of the button that moves an activated board item, or shrinks a resized one, one column left"
382
+ },
383
+ "uic.Board.directionRight": {
384
+ defaultMessage: "Nach rechts",
385
+ description: "Accessible name of the button that moves an activated board item, or grows a resized one, one column right"
326
386
  }
327
387
  };
328
388
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"de-DE.js","names":[],"sources":["../../../src/i18n/locales/de-DE.json"],"sourcesContent":["{\n \"uic.common.ok\": {\n \"defaultMessage\": \"OK\",\n \"description\": \"Generic label of a primary action button that accepts\"\n },\n \"uic.common.cancel\": {\n \"defaultMessage\": \"Abbrechen\",\n \"description\": \"Generic label of a button that backs out of an action or stops a task\"\n },\n \"uic.common.confirm\": {\n \"defaultMessage\": \"Bestätigen\",\n \"description\": \"Generic label of a button that confirms an action\"\n },\n \"uic.common.delete\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"Generic label of a button that deletes something\"\n },\n \"uic.common.retry\": {\n \"defaultMessage\": \"Wiederholen\",\n \"description\": \"Generic label of a button that retries a failed action or load\"\n },\n \"uic.common.apply\": {\n \"defaultMessage\": \"Anwenden\",\n \"description\": \"Generic label of a button that applies the changes made in a dialog\"\n },\n \"uic.ColorPicker.label\": {\n \"defaultMessage\": \"Farbe auswählen\",\n \"description\": \"Accessible name of a color picker whose caller gave it no label\"\n },\n \"uic.ColorPicker.hexValue\": {\n \"defaultMessage\": \"Hex-Wert\",\n \"description\": \"Hidden label of the color picker's text field for a #rrggbb value\"\n },\n \"uic.ColorPicker.clear\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"Button in a color picker that removes the chosen color\"\n },\n \"uic.ColorPicker.noColor\": {\n \"defaultMessage\": \"Keine Farbe\",\n \"description\": \"Shown on a color picker's trigger when no color is set\"\n },\n \"uic.DeleteConfirmModal.title\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"Title of the dialog that confirms deleting one item\"\n },\n \"uic.DeleteConfirmModal.titleMany\": {\n \"defaultMessage\": \"{count, plural, other {# Elemente löschen}}\",\n \"description\": \"Title of the dialog that confirms deleting several items; {count} is how many\"\n },\n \"uic.DeleteConfirmModal.description\": {\n \"defaultMessage\": \"Sind Sie sicher, dass Sie löschen möchten?\",\n \"description\": \"Question above the list of items about to be deleted\"\n },\n \"uic.DeleteConfirmModal.targetDescription\": {\n \"defaultMessage\": \"Möchten Sie {target} wirklich dauerhaft löschen?\",\n \"description\": \"Question above the list of items about to be deleted; {target} names the kind of item, e.g. Project\"\n },\n \"uic.DeleteConfirmModal.typeToConfirm\": {\n \"defaultMessage\": \"Geben Sie {confirmText} ein, um zu bestätigen.\",\n \"description\": \"Instruction above the confirmation field; {confirmText} is the text to type, shown as a token\"\n },\n \"uic.DeleteConfirmModal.confirmText\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"The word the user types to confirm deleting several items at once\"\n },\n \"uic.DeleteConfirmModal.cannotBeUndone\": {\n \"defaultMessage\": \"Diese Aktion kann nicht rückgängig gemacht werden.\",\n \"description\": \"Warning that the deletion is permanent\"\n },\n \"uic.NumberStepper.increase\": {\n \"defaultMessage\": \"Erhöhen\",\n \"description\": \"Accessible name of the button that steps a number field up\"\n },\n \"uic.NumberStepper.decrease\": {\n \"defaultMessage\": \"Verringern\",\n \"description\": \"Accessible name of the button that steps a number field down\"\n },\n \"uic.SelectionLabel.selectedCount\": {\n \"defaultMessage\": \"{count} ausgewählt\",\n \"description\": \"How many items are selected, e.g. rows of a table; {count} is the number\"\n },\n \"uic.SelectionLabel.clear\": {\n \"defaultMessage\": \"Alle abwählen\",\n \"description\": \"Button that clears the whole selection\"\n },\n \"uic.SkeletonCard.loading\": {\n \"defaultMessage\": \"Wird geladen\",\n \"description\": \"Accessible name of a card-shaped loading placeholder\"\n },\n \"uic.SkeletonRow.loading\": {\n \"defaultMessage\": \"Wird geladen\",\n \"description\": \"Accessible name of one list-row loading placeholder\"\n },\n \"uic.SkeletonText.loading\": {\n \"defaultMessage\": \"Wird geladen\",\n \"description\": \"Accessible name of a text-block loading placeholder\"\n },\n \"uic.Statistic.unlimited\": {\n \"defaultMessage\": \"Unbegrenzt\",\n \"description\": \"Shown in place of a metric's value when the value has no limit\"\n },\n \"uic.TokenRow.more\": {\n \"defaultMessage\": \"und {count} weitere\",\n \"description\": \"After a row of tokens cut short, how many were left out; {count} is the number\"\n },\n \"uic.UncontrolledInput.label\": {\n \"defaultMessage\": \"Auswählen\",\n \"description\": \"Hidden accessible name of an input whose caller gave it no label of its own\"\n },\n \"uic.UnitGrid.label\": {\n \"defaultMessage\": \"Ressourcenraster\",\n \"description\": \"Accessible name of a unit grid whose caller gave it no aria-label\"\n },\n \"uic.UnitGrid.changeGroupColor\": {\n \"defaultMessage\": \"Gruppenfarbe ändern\",\n \"description\": \"Button in a unit grid's hover card that opens the palette for the group\"\n },\n \"uic.UnitGrid.useColor\": {\n \"defaultMessage\": \"Farbe {index} verwenden\",\n \"description\": \"Accessible name of one palette swatch in a unit grid; {index} is its 1-based position\"\n },\n \"uic.Form.optional\": {\n \"defaultMessage\": \"(optional)\",\n \"description\": \"Suffix after the label of an optional field when requiredMark=\\\"optional\\\"\"\n },\n \"uic.Form.default\": {\n \"defaultMessage\": \"Feld-Validierungsfehler: {label}\",\n \"description\": \"Validation error when a rule failed without a more specific message\"\n },\n \"uic.Form.required\": {\n \"defaultMessage\": \"Bitte geben Sie {label} an\",\n \"description\": \"Validation error for an empty required field\"\n },\n \"uic.Form.whitespace\": {\n \"defaultMessage\": \"{label} darf kein Leerzeichen sein\",\n \"description\": \"Validation error for a required field that holds only whitespace\"\n },\n \"uic.Form.typeString\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for a value that is not a string; {type} is the type name\"\n },\n \"uic.Form.typeNumber\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for a value that is not a number; {type} is the type name\"\n },\n \"uic.Form.typeObject\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for a value that is not an object; {type} is the type name\"\n },\n \"uic.Form.typeEmail\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for an invalid email address; {type} is the type name\"\n },\n \"uic.Form.typeUrl\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for an invalid URL; {type} is the type name\"\n },\n \"uic.Form.stringLen\": {\n \"defaultMessage\": \"{label} muss genau {len} Zeichen lang sein\",\n \"description\": \"Validation error for text of the wrong exact length\"\n },\n \"uic.Form.stringMin\": {\n \"defaultMessage\": \"{label} muss mindestens {min} Zeichen lang sein\",\n \"description\": \"Validation error for text shorter than the minimum\"\n },\n \"uic.Form.stringMax\": {\n \"defaultMessage\": \"{label} darf höchstens {max} Zeichen lang sein\",\n \"description\": \"Validation error for text longer than the maximum\"\n },\n \"uic.Form.stringRange\": {\n \"defaultMessage\": \"{label} muss zwischen {min} und {max} Zeichen lang sein\",\n \"description\": \"Validation error for text outside a length range\"\n },\n \"uic.Form.numberLen\": {\n \"defaultMessage\": \"{label} muss gleich {len} sein\",\n \"description\": \"Validation error for a number that must equal a value\"\n },\n \"uic.Form.numberMin\": {\n \"defaultMessage\": \"{label} muss mindestens {min} sein\",\n \"description\": \"Validation error for a number below the minimum\"\n },\n \"uic.Form.numberMax\": {\n \"defaultMessage\": \"{label} darf maximal {max} sein\",\n \"description\": \"Validation error for a number above the maximum\"\n },\n \"uic.Form.numberRange\": {\n \"defaultMessage\": \"{label} muss zwischen {min} und {max} liegen\",\n \"description\": \"Validation error for a number outside a range\"\n },\n \"uic.Form.arrayLen\": {\n \"defaultMessage\": \"Es müssen {len} {label} sein\",\n \"description\": \"Validation error for a list with the wrong number of items\"\n },\n \"uic.Form.arrayMin\": {\n \"defaultMessage\": \"Es müssen mindestens {min} {label} sein\",\n \"description\": \"Validation error for a list with too few items\"\n },\n \"uic.Form.arrayMax\": {\n \"defaultMessage\": \"Es dürfen maximal {max} {label} sein\",\n \"description\": \"Validation error for a list with too many items\"\n },\n \"uic.Form.arrayRange\": {\n \"defaultMessage\": \"Die Anzahl an {label} muss zwischen {min} und {max} liegen\",\n \"description\": \"Validation error for a list whose item count is outside a range\"\n },\n \"uic.Form.patternMismatch\": {\n \"defaultMessage\": \"{label} entspricht nicht dem {pattern} Muster\",\n \"description\": \"Validation error for text that does not match a pattern\"\n },\n \"uic.BulkEditFormItem.keepAsIs\": {\n \"defaultMessage\": \"Unverändert lassen\",\n \"description\": \"Placeholder of a bulk-edit field that leaves every selected item's current value unchanged\"\n },\n \"uic.BulkEditFormItem.clear\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"Link that clears the field on every selected item, and the field's placeholder once cleared\"\n },\n \"uic.BulkEditFormItem.undoChanges\": {\n \"defaultMessage\": \"Änderungen rückgängig machen\",\n \"description\": \"Link that returns a bulk-edit field to keeping the current values\"\n },\n \"uic.BulkErrorModal.title\": {\n \"defaultMessage\": \"Ausführung fehlgeschlagen\",\n \"description\": \"Default title of the dialog that lists the failed items of a bulk operation\"\n },\n \"uic.BulkErrorModal.errorOccurred\": {\n \"defaultMessage\": \"Ein Fehler ist aufgetreten\",\n \"description\": \"Title of the error banner above the failed items, over the caller's guidance\"\n },\n \"uic.DataGrid.noData\": {\n \"defaultMessage\": \"Keine Daten zum Anzeigen\",\n \"description\": \"Shown in place of a data grid's rows when there are none\"\n },\n \"uic.DataGrid.invalidPage\": {\n \"defaultMessage\": \"Ungültige Seitenzahl\",\n \"description\": \"Shown in place of a data grid's rows when the current page lies past the last page\"\n },\n \"uic.DataGrid.goToFirstPage\": {\n \"defaultMessage\": \"Zur ersten Seite\",\n \"description\": \"Button under the invalid page message that returns to page 1\"\n },\n \"uic.DataGrid.expandRow\": {\n \"defaultMessage\": \"Zeile ausklappen\",\n \"description\": \"Accessible name of the button that shows or hides a row's details\"\n },\n \"uic.DataGrid.pagination\": {\n \"defaultMessage\": \"Seitennummerierung\",\n \"description\": \"Accessible name of a data grid's page navigation\"\n },\n \"uic.DataGrid.range\": {\n \"defaultMessage\": \"{start} - {end} von {total} Elementen\",\n \"description\": \"Beside a data grid's page navigation: the rows on screen out of the total. {start} and {end} are 1-based row numbers\"\n },\n \"uic.DataGrid.settings\": {\n \"defaultMessage\": \"Tabelleneinstellungen\",\n \"description\": \"Button under a data grid that opens its column settings, and the title of that dialog\"\n },\n \"uic.DataGrid.exportCsv\": {\n \"defaultMessage\": \"Als CSV exportieren\",\n \"description\": \"Button under a data grid that opens the CSV export dialog, and the title of that dialog\"\n },\n \"uic.DataGrid.selectColumns\": {\n \"defaultMessage\": \"Wählen Sie Spalten aus, um angezeigt zu werden\",\n \"description\": \"Subtitle of a data grid's column settings and CSV export dialogs\"\n },\n \"uic.DataGrid.searchColumns\": {\n \"defaultMessage\": \"Suchtabellenspalten\",\n \"description\": \"Placeholder of the column search field in a data grid's dialogs, also shown when no column matches\"\n },\n \"uic.DataGrid.reorderColumn\": {\n \"defaultMessage\": \"{column} verschieben\",\n \"description\": \"Accessible name of the drag handle beside a column in a data grid's column settings dialog. {column} is the column's label\"\n },\n \"uic.DataGrid.reorderInstructions\": {\n \"defaultMessage\": \"Drücken Sie die Leertaste, um die Spalte aufzunehmen, verschieben Sie sie mit den Pfeiltasten und drücken Sie erneut die Leertaste, um sie abzulegen, oder Escape, um abzubrechen.\",\n \"description\": \"Screen reader instructions for a drag handle in a data grid's column settings dialog\"\n },\n \"uic.DataGrid.reorderPickedUp\": {\n \"defaultMessage\": \"{column} aufgenommen. Position {position} von {total}.\",\n \"description\": \"Screen reader announcement when a column is picked up for reordering in the column settings dialog. {position} is 1-based\"\n },\n \"uic.DataGrid.reorderMoved\": {\n \"defaultMessage\": \"{column} auf Position {position} von {total} verschoben.\",\n \"description\": \"Screen reader announcement while a picked-up column moves in the column settings dialog. {position} is 1-based\"\n },\n \"uic.DataGrid.reorderDropped\": {\n \"defaultMessage\": \"{column} auf Position {position} von {total} abgelegt.\",\n \"description\": \"Screen reader announcement when a column is dropped in the column settings dialog. {position} is 1-based\"\n },\n \"uic.DataGrid.reorderCancelled\": {\n \"defaultMessage\": \"Verschieben abgebrochen. {column} ist wieder auf Position {position} von {total}.\",\n \"description\": \"Screen reader announcement when reordering a column is cancelled in the column settings dialog. {position} is 1-based\"\n },\n \"uic.DataGrid.export\": {\n \"defaultMessage\": \"Exportieren\",\n \"description\": \"Primary button of a data grid's CSV export dialog\"\n },\n \"uic.PagedSelector.placeholder\": {\n \"defaultMessage\": \"{label} auswählen\",\n \"description\": \"Placeholder of a selector with nothing selected; {label} is the field's label\"\n },\n \"uic.PagedSelector.searchOptions\": {\n \"defaultMessage\": \"Optionen durchsuchen\",\n \"description\": \"Accessible name of the search box at the top of a selector's option list\"\n },\n \"uic.PagedSelector.searchPlaceholder\": {\n \"defaultMessage\": \"Suchen\",\n \"description\": \"Placeholder of the search box at the top of a selector's option list\"\n },\n \"uic.PagedSelector.clearSearch\": {\n \"defaultMessage\": \"Optionen durchsuchen löschen\",\n \"description\": \"Accessible name of the button that empties a selector's search box\"\n },\n \"uic.PagedSelector.noResults\": {\n \"defaultMessage\": \"Keine Ergebnisse\",\n \"description\": \"Shown in a selector's option list when no option matches\"\n },\n \"uic.PagedSelector.loading\": {\n \"defaultMessage\": \"Wird geladen...\",\n \"description\": \"Shown in a selector's empty option list while options are being fetched\"\n },\n \"uic.PagedSelector.totalItems\": {\n \"defaultMessage\": \"Total {total} Elemente\",\n \"description\": \"Foot of a selector's option list; {total} is how many options exist in all pages\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"de-DE.js","names":[],"sources":["../../../src/i18n/locales/de-DE.json"],"sourcesContent":["{\n \"uic.common.ok\": {\n \"defaultMessage\": \"OK\",\n \"description\": \"Generic label of a primary action button that accepts\"\n },\n \"uic.common.cancel\": {\n \"defaultMessage\": \"Abbrechen\",\n \"description\": \"Generic label of a button that backs out of an action or stops a task\"\n },\n \"uic.common.confirm\": {\n \"defaultMessage\": \"Bestätigen\",\n \"description\": \"Generic label of a button that confirms an action\"\n },\n \"uic.common.delete\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"Generic label of a button that deletes something\"\n },\n \"uic.common.retry\": {\n \"defaultMessage\": \"Wiederholen\",\n \"description\": \"Generic label of a button that retries a failed action or load\"\n },\n \"uic.common.apply\": {\n \"defaultMessage\": \"Anwenden\",\n \"description\": \"Generic label of a button that applies the changes made in a dialog\"\n },\n \"uic.Board.dragHandle\": {\n \"defaultMessage\": \"Ziehgriff\",\n \"description\": \"Accessible name of the button at a board item's top-left corner that moves the item\"\n },\n \"uic.Board.resizeHandle\": {\n \"defaultMessage\": \"Größengriff\",\n \"description\": \"Accessible name of the button at a board item's bottom-right corner that resizes the item\"\n },\n \"uic.Board.moveStarted\": {\n \"defaultMessage\": \"Wird gezogen.\",\n \"description\": \"Screen reader announcement when a board item is picked up to be moved\"\n },\n \"uic.Board.resizeStarted\": {\n \"defaultMessage\": \"Größe wird geändert.\",\n \"description\": \"Screen reader announcement when a board item starts being resized\"\n },\n \"uic.Board.itemMoved\": {\n \"defaultMessage\": \"Element in Spalte {column}, Zeile {row} verschoben.\",\n \"description\": \"Screen reader announcement while a board item moves. {column} and {row} are 1-based\"\n },\n \"uic.Board.itemResized\": {\n \"defaultMessage\": \"Elementgröße auf {columns} Spalten mal {rows} Zeilen geändert.\",\n \"description\": \"Screen reader announcement while a board item is resized\"\n },\n \"uic.Board.moveCommitted\": {\n \"defaultMessage\": \"Verschieben übernommen.\",\n \"description\": \"Screen reader announcement when a board item is dropped in its new place\"\n },\n \"uic.Board.resizeCommitted\": {\n \"defaultMessage\": \"Größenänderung übernommen.\",\n \"description\": \"Screen reader announcement when a board item's new size is applied\"\n },\n \"uic.Board.moveDiscarded\": {\n \"defaultMessage\": \"Verschieben verworfen.\",\n \"description\": \"Screen reader announcement when moving a board item is cancelled\"\n },\n \"uic.Board.resizeDiscarded\": {\n \"defaultMessage\": \"Größenänderung verworfen.\",\n \"description\": \"Screen reader announcement when resizing a board item is cancelled\"\n },\n \"uic.Board.itemRemoved\": {\n \"defaultMessage\": \"Element entfernt.\",\n \"description\": \"Screen reader announcement when a board item is removed\"\n },\n \"uic.ColorPicker.label\": {\n \"defaultMessage\": \"Farbe auswählen\",\n \"description\": \"Accessible name of a color picker whose caller gave it no label\"\n },\n \"uic.ColorPicker.hexValue\": {\n \"defaultMessage\": \"Hex-Wert\",\n \"description\": \"Hidden label of the color picker's text field for a #rrggbb value\"\n },\n \"uic.ColorPicker.clear\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"Button in a color picker that removes the chosen color\"\n },\n \"uic.ColorPicker.noColor\": {\n \"defaultMessage\": \"Keine Farbe\",\n \"description\": \"Shown on a color picker's trigger when no color is set\"\n },\n \"uic.DeleteConfirmModal.title\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"Title of the dialog that confirms deleting one item\"\n },\n \"uic.DeleteConfirmModal.titleMany\": {\n \"defaultMessage\": \"{count, plural, other {# Elemente löschen}}\",\n \"description\": \"Title of the dialog that confirms deleting several items; {count} is how many\"\n },\n \"uic.DeleteConfirmModal.description\": {\n \"defaultMessage\": \"Sind Sie sicher, dass Sie löschen möchten?\",\n \"description\": \"Question above the list of items about to be deleted\"\n },\n \"uic.DeleteConfirmModal.targetDescription\": {\n \"defaultMessage\": \"Möchten Sie {target} wirklich dauerhaft löschen?\",\n \"description\": \"Question above the list of items about to be deleted; {target} names the kind of item, e.g. Project\"\n },\n \"uic.DeleteConfirmModal.typeToConfirm\": {\n \"defaultMessage\": \"Geben Sie {confirmText} ein, um zu bestätigen.\",\n \"description\": \"Instruction above the confirmation field; {confirmText} is the text to type, shown as a token\"\n },\n \"uic.DeleteConfirmModal.confirmText\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"The word the user types to confirm deleting several items at once\"\n },\n \"uic.DeleteConfirmModal.cannotBeUndone\": {\n \"defaultMessage\": \"Diese Aktion kann nicht rückgängig gemacht werden.\",\n \"description\": \"Warning that the deletion is permanent\"\n },\n \"uic.NumberStepper.increase\": {\n \"defaultMessage\": \"Erhöhen\",\n \"description\": \"Accessible name of the button that steps a number field up\"\n },\n \"uic.NumberStepper.decrease\": {\n \"defaultMessage\": \"Verringern\",\n \"description\": \"Accessible name of the button that steps a number field down\"\n },\n \"uic.SelectionLabel.selectedCount\": {\n \"defaultMessage\": \"{count} ausgewählt\",\n \"description\": \"How many items are selected, e.g. rows of a table; {count} is the number\"\n },\n \"uic.SelectionLabel.clear\": {\n \"defaultMessage\": \"Alle abwählen\",\n \"description\": \"Button that clears the whole selection\"\n },\n \"uic.SkeletonCard.loading\": {\n \"defaultMessage\": \"Wird geladen\",\n \"description\": \"Accessible name of a card-shaped loading placeholder\"\n },\n \"uic.SkeletonRow.loading\": {\n \"defaultMessage\": \"Wird geladen\",\n \"description\": \"Accessible name of one list-row loading placeholder\"\n },\n \"uic.SkeletonText.loading\": {\n \"defaultMessage\": \"Wird geladen\",\n \"description\": \"Accessible name of a text-block loading placeholder\"\n },\n \"uic.Statistic.unlimited\": {\n \"defaultMessage\": \"Unbegrenzt\",\n \"description\": \"Shown in place of a metric's value when the value has no limit\"\n },\n \"uic.TokenRow.more\": {\n \"defaultMessage\": \"und {count} weitere\",\n \"description\": \"After a row of tokens cut short, how many were left out; {count} is the number\"\n },\n \"uic.UncontrolledInput.label\": {\n \"defaultMessage\": \"Auswählen\",\n \"description\": \"Hidden accessible name of an input whose caller gave it no label of its own\"\n },\n \"uic.UnitGrid.label\": {\n \"defaultMessage\": \"Ressourcenraster\",\n \"description\": \"Accessible name of a unit grid whose caller gave it no aria-label\"\n },\n \"uic.UnitGrid.changeGroupColor\": {\n \"defaultMessage\": \"Gruppenfarbe ändern\",\n \"description\": \"Button in a unit grid's hover card that opens the palette for the group\"\n },\n \"uic.UnitGrid.useColor\": {\n \"defaultMessage\": \"Farbe {index} verwenden\",\n \"description\": \"Accessible name of one palette swatch in a unit grid; {index} is its 1-based position\"\n },\n \"uic.Form.optional\": {\n \"defaultMessage\": \"(optional)\",\n \"description\": \"Suffix after the label of an optional field when requiredMark=\\\"optional\\\"\"\n },\n \"uic.Form.default\": {\n \"defaultMessage\": \"Feld-Validierungsfehler: {label}\",\n \"description\": \"Validation error when a rule failed without a more specific message\"\n },\n \"uic.Form.required\": {\n \"defaultMessage\": \"Bitte geben Sie {label} an\",\n \"description\": \"Validation error for an empty required field\"\n },\n \"uic.Form.whitespace\": {\n \"defaultMessage\": \"{label} darf kein Leerzeichen sein\",\n \"description\": \"Validation error for a required field that holds only whitespace\"\n },\n \"uic.Form.typeString\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for a value that is not a string; {type} is the type name\"\n },\n \"uic.Form.typeNumber\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for a value that is not a number; {type} is the type name\"\n },\n \"uic.Form.typeObject\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for a value that is not an object; {type} is the type name\"\n },\n \"uic.Form.typeEmail\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for an invalid email address; {type} is the type name\"\n },\n \"uic.Form.typeUrl\": {\n \"defaultMessage\": \"{label} ist nicht gültig. {type} erwartet\",\n \"description\": \"Validation error for an invalid URL; {type} is the type name\"\n },\n \"uic.Form.stringLen\": {\n \"defaultMessage\": \"{label} muss genau {len} Zeichen lang sein\",\n \"description\": \"Validation error for text of the wrong exact length\"\n },\n \"uic.Form.stringMin\": {\n \"defaultMessage\": \"{label} muss mindestens {min} Zeichen lang sein\",\n \"description\": \"Validation error for text shorter than the minimum\"\n },\n \"uic.Form.stringMax\": {\n \"defaultMessage\": \"{label} darf höchstens {max} Zeichen lang sein\",\n \"description\": \"Validation error for text longer than the maximum\"\n },\n \"uic.Form.stringRange\": {\n \"defaultMessage\": \"{label} muss zwischen {min} und {max} Zeichen lang sein\",\n \"description\": \"Validation error for text outside a length range\"\n },\n \"uic.Form.numberLen\": {\n \"defaultMessage\": \"{label} muss gleich {len} sein\",\n \"description\": \"Validation error for a number that must equal a value\"\n },\n \"uic.Form.numberMin\": {\n \"defaultMessage\": \"{label} muss mindestens {min} sein\",\n \"description\": \"Validation error for a number below the minimum\"\n },\n \"uic.Form.numberMax\": {\n \"defaultMessage\": \"{label} darf maximal {max} sein\",\n \"description\": \"Validation error for a number above the maximum\"\n },\n \"uic.Form.numberRange\": {\n \"defaultMessage\": \"{label} muss zwischen {min} und {max} liegen\",\n \"description\": \"Validation error for a number outside a range\"\n },\n \"uic.Form.arrayLen\": {\n \"defaultMessage\": \"Es müssen {len} {label} sein\",\n \"description\": \"Validation error for a list with the wrong number of items\"\n },\n \"uic.Form.arrayMin\": {\n \"defaultMessage\": \"Es müssen mindestens {min} {label} sein\",\n \"description\": \"Validation error for a list with too few items\"\n },\n \"uic.Form.arrayMax\": {\n \"defaultMessage\": \"Es dürfen maximal {max} {label} sein\",\n \"description\": \"Validation error for a list with too many items\"\n },\n \"uic.Form.arrayRange\": {\n \"defaultMessage\": \"Die Anzahl an {label} muss zwischen {min} und {max} liegen\",\n \"description\": \"Validation error for a list whose item count is outside a range\"\n },\n \"uic.Form.patternMismatch\": {\n \"defaultMessage\": \"{label} entspricht nicht dem {pattern} Muster\",\n \"description\": \"Validation error for text that does not match a pattern\"\n },\n \"uic.BulkEditFormItem.keepAsIs\": {\n \"defaultMessage\": \"Unverändert lassen\",\n \"description\": \"Placeholder of a bulk-edit field that leaves every selected item's current value unchanged\"\n },\n \"uic.BulkEditFormItem.clear\": {\n \"defaultMessage\": \"Löschen\",\n \"description\": \"Link that clears the field on every selected item, and the field's placeholder once cleared\"\n },\n \"uic.BulkEditFormItem.undoChanges\": {\n \"defaultMessage\": \"Änderungen rückgängig machen\",\n \"description\": \"Link that returns a bulk-edit field to keeping the current values\"\n },\n \"uic.BulkErrorModal.title\": {\n \"defaultMessage\": \"Ausführung fehlgeschlagen\",\n \"description\": \"Default title of the dialog that lists the failed items of a bulk operation\"\n },\n \"uic.BulkErrorModal.errorOccurred\": {\n \"defaultMessage\": \"Ein Fehler ist aufgetreten\",\n \"description\": \"Title of the error banner above the failed items, over the caller's guidance\"\n },\n \"uic.DataGrid.noData\": {\n \"defaultMessage\": \"Keine Daten zum Anzeigen\",\n \"description\": \"Shown in place of a data grid's rows when there are none\"\n },\n \"uic.DataGrid.invalidPage\": {\n \"defaultMessage\": \"Ungültige Seitenzahl\",\n \"description\": \"Shown in place of a data grid's rows when the current page lies past the last page\"\n },\n \"uic.DataGrid.goToFirstPage\": {\n \"defaultMessage\": \"Zur ersten Seite\",\n \"description\": \"Button under the invalid page message that returns to page 1\"\n },\n \"uic.DataGrid.expandRow\": {\n \"defaultMessage\": \"Zeile ausklappen\",\n \"description\": \"Accessible name of the button that shows or hides a row's details\"\n },\n \"uic.DataGrid.pagination\": {\n \"defaultMessage\": \"Seitennummerierung\",\n \"description\": \"Accessible name of a data grid's page navigation\"\n },\n \"uic.DataGrid.range\": {\n \"defaultMessage\": \"{start} - {end} von {total} Elementen\",\n \"description\": \"Beside a data grid's page navigation: the rows on screen out of the total. {start} and {end} are 1-based row numbers\"\n },\n \"uic.DataGrid.settings\": {\n \"defaultMessage\": \"Tabelleneinstellungen\",\n \"description\": \"Button under a data grid that opens its column settings, and the title of that dialog\"\n },\n \"uic.DataGrid.exportCsv\": {\n \"defaultMessage\": \"Als CSV exportieren\",\n \"description\": \"Button under a data grid that opens the CSV export dialog, and the title of that dialog\"\n },\n \"uic.DataGrid.selectColumns\": {\n \"defaultMessage\": \"Wählen Sie Spalten aus, um angezeigt zu werden\",\n \"description\": \"Subtitle of a data grid's column settings and CSV export dialogs\"\n },\n \"uic.DataGrid.searchColumns\": {\n \"defaultMessage\": \"Suchtabellenspalten\",\n \"description\": \"Placeholder of the column search field in a data grid's dialogs, also shown when no column matches\"\n },\n \"uic.DataGrid.reorderColumn\": {\n \"defaultMessage\": \"{column} verschieben\",\n \"description\": \"Accessible name of the drag handle beside a column in a data grid's column settings dialog. {column} is the column's label\"\n },\n \"uic.DataGrid.reorderInstructions\": {\n \"defaultMessage\": \"Drücken Sie die Leertaste, um die Spalte aufzunehmen, verschieben Sie sie mit den Pfeiltasten und drücken Sie erneut die Leertaste, um sie abzulegen, oder Escape, um abzubrechen.\",\n \"description\": \"Screen reader instructions for a drag handle in a data grid's column settings dialog\"\n },\n \"uic.DataGrid.reorderPickedUp\": {\n \"defaultMessage\": \"{column} aufgenommen. Position {position} von {total}.\",\n \"description\": \"Screen reader announcement when a column is picked up for reordering in the column settings dialog. {position} is 1-based\"\n },\n \"uic.DataGrid.reorderMoved\": {\n \"defaultMessage\": \"{column} auf Position {position} von {total} verschoben.\",\n \"description\": \"Screen reader announcement while a picked-up column moves in the column settings dialog. {position} is 1-based\"\n },\n \"uic.DataGrid.reorderDropped\": {\n \"defaultMessage\": \"{column} auf Position {position} von {total} abgelegt.\",\n \"description\": \"Screen reader announcement when a column is dropped in the column settings dialog. {position} is 1-based\"\n },\n \"uic.DataGrid.reorderCancelled\": {\n \"defaultMessage\": \"Verschieben abgebrochen. {column} ist wieder auf Position {position} von {total}.\",\n \"description\": \"Screen reader announcement when reordering a column is cancelled in the column settings dialog. {position} is 1-based\"\n },\n \"uic.DataGrid.export\": {\n \"defaultMessage\": \"Exportieren\",\n \"description\": \"Primary button of a data grid's CSV export dialog\"\n },\n \"uic.PagedSelector.placeholder\": {\n \"defaultMessage\": \"{label} auswählen\",\n \"description\": \"Placeholder of a selector with nothing selected; {label} is the field's label\"\n },\n \"uic.PagedSelector.searchOptions\": {\n \"defaultMessage\": \"Optionen durchsuchen\",\n \"description\": \"Accessible name of the search box at the top of a selector's option list\"\n },\n \"uic.PagedSelector.searchPlaceholder\": {\n \"defaultMessage\": \"Suchen\",\n \"description\": \"Placeholder of the search box at the top of a selector's option list\"\n },\n \"uic.PagedSelector.clearSearch\": {\n \"defaultMessage\": \"Optionen durchsuchen löschen\",\n \"description\": \"Accessible name of the button that empties a selector's search box\"\n },\n \"uic.PagedSelector.noResults\": {\n \"defaultMessage\": \"Keine Ergebnisse\",\n \"description\": \"Shown in a selector's option list when no option matches\"\n },\n \"uic.PagedSelector.loading\": {\n \"defaultMessage\": \"Wird geladen...\",\n \"description\": \"Shown in a selector's empty option list while options are being fetched\"\n },\n \"uic.PagedSelector.totalItems\": {\n \"defaultMessage\": \"Total {total} Elemente\",\n \"description\": \"Foot of a selector's option list; {total} is how many options exist in all pages\"\n },\n \"uic.Board.directionUp\": {\n \"defaultMessage\": \"Nach oben\",\n \"description\": \"Accessible name of the button that moves an activated board item, or shrinks a resized one, one row up\"\n },\n \"uic.Board.directionDown\": {\n \"defaultMessage\": \"Nach unten\",\n \"description\": \"Accessible name of the button that moves an activated board item, or grows a resized one, one row down\"\n },\n \"uic.Board.directionLeft\": {\n \"defaultMessage\": \"Nach links\",\n \"description\": \"Accessible name of the button that moves an activated board item, or shrinks a resized one, one column left\"\n },\n \"uic.Board.directionRight\": {\n \"defaultMessage\": \"Nach rechts\",\n \"description\": \"Accessible name of the button that moves an activated board item, or grows a resized one, one column right\"\n }\n}\n"],"mappings":""}
@@ -24,6 +24,50 @@ var e = {
24
24
  defaultMessage: "Εφαρμογή",
25
25
  description: "Generic label of a button that applies the changes made in a dialog"
26
26
  },
27
+ "uic.Board.dragHandle": {
28
+ defaultMessage: "Λαβή μεταφοράς",
29
+ description: "Accessible name of the button at a board item's top-left corner that moves the item"
30
+ },
31
+ "uic.Board.resizeHandle": {
32
+ defaultMessage: "Λαβή αλλαγής μεγέθους",
33
+ description: "Accessible name of the button at a board item's bottom-right corner that resizes the item"
34
+ },
35
+ "uic.Board.moveStarted": {
36
+ defaultMessage: "Μεταφορά σε εξέλιξη.",
37
+ description: "Screen reader announcement when a board item is picked up to be moved"
38
+ },
39
+ "uic.Board.resizeStarted": {
40
+ defaultMessage: "Αλλαγή μεγέθους σε εξέλιξη.",
41
+ description: "Screen reader announcement when a board item starts being resized"
42
+ },
43
+ "uic.Board.itemMoved": {
44
+ defaultMessage: "Το στοιχείο μετακινήθηκε στη στήλη {column}, γραμμή {row}.",
45
+ description: "Screen reader announcement while a board item moves. {column} and {row} are 1-based"
46
+ },
47
+ "uic.Board.itemResized": {
48
+ defaultMessage: "Το μέγεθος του στοιχείου άλλαξε σε {columns} στήλες επί {rows} γραμμές.",
49
+ description: "Screen reader announcement while a board item is resized"
50
+ },
51
+ "uic.Board.moveCommitted": {
52
+ defaultMessage: "Η μετακίνηση εφαρμόστηκε.",
53
+ description: "Screen reader announcement when a board item is dropped in its new place"
54
+ },
55
+ "uic.Board.resizeCommitted": {
56
+ defaultMessage: "Η αλλαγή μεγέθους εφαρμόστηκε.",
57
+ description: "Screen reader announcement when a board item's new size is applied"
58
+ },
59
+ "uic.Board.moveDiscarded": {
60
+ defaultMessage: "Η μετακίνηση ακυρώθηκε.",
61
+ description: "Screen reader announcement when moving a board item is cancelled"
62
+ },
63
+ "uic.Board.resizeDiscarded": {
64
+ defaultMessage: "Η αλλαγή μεγέθους ακυρώθηκε.",
65
+ description: "Screen reader announcement when resizing a board item is cancelled"
66
+ },
67
+ "uic.Board.itemRemoved": {
68
+ defaultMessage: "Το στοιχείο αφαιρέθηκε.",
69
+ description: "Screen reader announcement when a board item is removed"
70
+ },
27
71
  "uic.ColorPicker.label": {
28
72
  defaultMessage: "Επιλογή χρώματος",
29
73
  description: "Accessible name of a color picker whose caller gave it no label"
@@ -323,6 +367,22 @@ var e = {
323
367
  "uic.PagedSelector.totalItems": {
324
368
  defaultMessage: "Σύνολο {total} στοιχεία",
325
369
  description: "Foot of a selector's option list; {total} is how many options exist in all pages"
370
+ },
371
+ "uic.Board.directionUp": {
372
+ defaultMessage: "Πάνω",
373
+ description: "Accessible name of the button that moves an activated board item, or shrinks a resized one, one row up"
374
+ },
375
+ "uic.Board.directionDown": {
376
+ defaultMessage: "Κάτω",
377
+ description: "Accessible name of the button that moves an activated board item, or grows a resized one, one row down"
378
+ },
379
+ "uic.Board.directionLeft": {
380
+ defaultMessage: "Αριστερά",
381
+ description: "Accessible name of the button that moves an activated board item, or shrinks a resized one, one column left"
382
+ },
383
+ "uic.Board.directionRight": {
384
+ defaultMessage: "Δεξιά",
385
+ description: "Accessible name of the button that moves an activated board item, or grows a resized one, one column right"
326
386
  }
327
387
  };
328
388
  //#endregion