@univerjs/design 1.0.0-beta.1 → 1.0.0-beta.2

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 (84) hide show
  1. package/lib/cjs/index.js +124 -40
  2. package/lib/cjs/locale/ar-SA.js +3 -0
  3. package/lib/cjs/locale/ca-ES.js +3 -0
  4. package/lib/cjs/locale/de-DE.js +3 -0
  5. package/lib/cjs/locale/en-US.js +3 -0
  6. package/lib/cjs/locale/es-ES.js +3 -0
  7. package/lib/cjs/locale/fa-IR.js +3 -0
  8. package/lib/cjs/locale/fr-FR.js +3 -0
  9. package/lib/cjs/locale/id-ID.js +3 -0
  10. package/lib/cjs/locale/it-IT.js +3 -0
  11. package/lib/cjs/locale/ja-JP.js +3 -0
  12. package/lib/cjs/locale/ko-KR.js +3 -0
  13. package/lib/cjs/locale/pl-PL.js +3 -0
  14. package/lib/cjs/locale/pt-BR.js +3 -0
  15. package/lib/cjs/locale/ru-RU.js +3 -0
  16. package/lib/cjs/locale/sk-SK.js +3 -0
  17. package/lib/cjs/locale/vi-VN.js +3 -0
  18. package/lib/cjs/locale/zh-CN.js +3 -0
  19. package/lib/cjs/locale/zh-HK.js +3 -0
  20. package/lib/cjs/locale/zh-TW.js +3 -0
  21. package/lib/es/index.js +124 -40
  22. package/lib/es/locale/ar-SA.js +3 -0
  23. package/lib/es/locale/ca-ES.js +3 -0
  24. package/lib/es/locale/de-DE.js +3 -0
  25. package/lib/es/locale/en-US.js +3 -0
  26. package/lib/es/locale/es-ES.js +3 -0
  27. package/lib/es/locale/fa-IR.js +3 -0
  28. package/lib/es/locale/fr-FR.js +3 -0
  29. package/lib/es/locale/id-ID.js +3 -0
  30. package/lib/es/locale/it-IT.js +3 -0
  31. package/lib/es/locale/ja-JP.js +3 -0
  32. package/lib/es/locale/ko-KR.js +3 -0
  33. package/lib/es/locale/pl-PL.js +3 -0
  34. package/lib/es/locale/pt-BR.js +3 -0
  35. package/lib/es/locale/ru-RU.js +3 -0
  36. package/lib/es/locale/sk-SK.js +3 -0
  37. package/lib/es/locale/vi-VN.js +3 -0
  38. package/lib/es/locale/zh-CN.js +3 -0
  39. package/lib/es/locale/zh-HK.js +3 -0
  40. package/lib/es/locale/zh-TW.js +3 -0
  41. package/lib/index.css +75 -2
  42. package/lib/index.js +124 -40
  43. package/lib/locale/ar-SA.js +3 -0
  44. package/lib/locale/ca-ES.js +3 -0
  45. package/lib/locale/de-DE.js +3 -0
  46. package/lib/locale/en-US.js +3 -0
  47. package/lib/locale/es-ES.js +3 -0
  48. package/lib/locale/fa-IR.js +3 -0
  49. package/lib/locale/fr-FR.js +3 -0
  50. package/lib/locale/id-ID.js +3 -0
  51. package/lib/locale/it-IT.js +3 -0
  52. package/lib/locale/ja-JP.js +3 -0
  53. package/lib/locale/ko-KR.js +3 -0
  54. package/lib/locale/pl-PL.js +3 -0
  55. package/lib/locale/pt-BR.js +3 -0
  56. package/lib/locale/ru-RU.js +3 -0
  57. package/lib/locale/sk-SK.js +3 -0
  58. package/lib/locale/vi-VN.js +3 -0
  59. package/lib/locale/zh-CN.js +3 -0
  60. package/lib/locale/zh-HK.js +3 -0
  61. package/lib/locale/zh-TW.js +3 -0
  62. package/lib/types/components/pager/Pager.d.ts +2 -0
  63. package/lib/types/locale/en-US.d.ts +3 -0
  64. package/lib/umd/index.js +20 -17
  65. package/lib/umd/locale/ar-SA.js +1 -1
  66. package/lib/umd/locale/ca-ES.js +1 -1
  67. package/lib/umd/locale/de-DE.js +1 -1
  68. package/lib/umd/locale/en-US.js +1 -1
  69. package/lib/umd/locale/es-ES.js +1 -1
  70. package/lib/umd/locale/fa-IR.js +1 -1
  71. package/lib/umd/locale/fr-FR.js +1 -1
  72. package/lib/umd/locale/id-ID.js +1 -1
  73. package/lib/umd/locale/it-IT.js +1 -1
  74. package/lib/umd/locale/ja-JP.js +1 -1
  75. package/lib/umd/locale/ko-KR.js +1 -1
  76. package/lib/umd/locale/pl-PL.js +1 -1
  77. package/lib/umd/locale/pt-BR.js +1 -1
  78. package/lib/umd/locale/ru-RU.js +1 -1
  79. package/lib/umd/locale/sk-SK.js +1 -1
  80. package/lib/umd/locale/vi-VN.js +1 -1
  81. package/lib/umd/locale/zh-CN.js +1 -1
  82. package/lib/umd/locale/zh-HK.js +1 -1
  83. package/lib/umd/locale/zh-TW.js +1 -1
  84. package/package.json +3 -3
package/lib/cjs/index.js CHANGED
@@ -2501,9 +2501,12 @@ const FormDualColumnLayout = (props) => {
2501
2501
  * limitations under the License.
2502
2502
  */
2503
2503
  function Pager(props) {
2504
- const { className, value: current = 0, total: count = 0, loop, text: propText, onChange } = props;
2504
+ const { className, value: current = 0, total: count = 0, loop, text: propText, previousButtonAriaLabel, nextButtonAriaLabel, onChange } = props;
2505
+ const { locale } = (0, react.useContext)(ConfigContext);
2505
2506
  const text = propText ?? `${current}/${count}`;
2506
2507
  const hasValue = count > 0;
2508
+ const previousButtonDisabled = !loop && current <= 1;
2509
+ const nextButtonDisabled = !loop && current >= count;
2507
2510
  const onClickLeftArrow = () => {
2508
2511
  if (current === 1) {
2509
2512
  if (loop) onChange === null || onChange === void 0 || onChange(count);
@@ -2520,23 +2523,33 @@ function Pager(props) {
2520
2523
  children: hasValue ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
2521
2524
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2522
2525
  "data-u-comp": "pager-left-arrow",
2523
- className: "univer-inline-flex univer-size-4 univer-cursor-pointer univer-items-center univer-rounded univer-border-none univer-bg-transparent univer-p-0 univer-text-current hover:univer-bg-gray-50 dark:hover:!univer-bg-gray-600",
2526
+ className: "univer-inline-flex univer-size-6 univer-cursor-pointer univer-items-center univer-rounded univer-border-none univer-bg-transparent univer-p-0 univer-text-current hover:univer-bg-gray-50 focus-visible:univer-outline-none focus-visible:univer-ring-2 focus-visible:univer-ring-primary-500 disabled:univer-cursor-default disabled:univer-opacity-40 dark:hover:!univer-bg-gray-600",
2524
2527
  type: "button",
2525
- role: "button",
2528
+ "aria-label": previousButtonAriaLabel ?? (locale === null || locale === void 0 ? void 0 : locale.Accessibility.previous) ?? "Previous",
2529
+ disabled: previousButtonDisabled,
2526
2530
  onClick: onClickLeftArrow,
2527
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreLeftIcon, { className: "rtl:univer-rotate-180" })
2531
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreLeftIcon, {
2532
+ className: "rtl:univer-rotate-180",
2533
+ "aria-hidden": "true"
2534
+ })
2528
2535
  }),
2529
2536
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2530
2537
  className: "univer-mx-1",
2538
+ "aria-live": "polite",
2539
+ "aria-atomic": "true",
2531
2540
  children: text
2532
2541
  }),
2533
2542
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2534
2543
  "data-u-comp": "pager-right-arrow",
2535
- className: "univer-inline-flex univer-size-4 univer-cursor-pointer univer-items-center univer-rounded univer-border-none univer-bg-transparent univer-p-0 univer-text-current hover:univer-bg-gray-50 dark:hover:!univer-bg-gray-600",
2544
+ className: "univer-inline-flex univer-size-6 univer-cursor-pointer univer-items-center univer-rounded univer-border-none univer-bg-transparent univer-p-0 univer-text-current hover:univer-bg-gray-50 focus-visible:univer-outline-none focus-visible:univer-ring-2 focus-visible:univer-ring-primary-500 disabled:univer-cursor-default disabled:univer-opacity-40 dark:hover:!univer-bg-gray-600",
2536
2545
  type: "button",
2537
- role: "button",
2546
+ "aria-label": nextButtonAriaLabel ?? (locale === null || locale === void 0 ? void 0 : locale.Accessibility.next) ?? "Next",
2547
+ disabled: nextButtonDisabled,
2538
2548
  onClick: onClickRightArrow,
2539
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreRightIcon, { className: "rtl:univer-rotate-180" })
2549
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.MoreRightIcon, {
2550
+ className: "rtl:univer-rotate-180",
2551
+ "aria-hidden": "true"
2552
+ })
2540
2553
  })
2541
2554
  ] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2542
2555
  className: "univer-mx-1",
@@ -2562,40 +2575,83 @@ function Pager(props) {
2562
2575
  * See the License for the specific language governing permissions and
2563
2576
  * limitations under the License.
2564
2577
  */
2565
- const buttonClassName = `
2566
- univer-flex univer-cursor-pointer univer-items-center univer-justify-center univer-border-none
2567
- univer-bg-transparent univer-p-0 univer-text-current
2568
- hover:univer-text-gray-0
2578
+ const toolbarButtonClassName = `
2579
+ !univer-border-transparent !univer-bg-transparent !univer-text-gray-300
2580
+ hover:!univer-bg-gray-600 hover:!univer-text-gray-0
2581
+ focus-visible:!univer-outline-none focus-visible:!univer-ring-2 focus-visible:!univer-ring-gray-0
2582
+ `;
2583
+ const focusableElementSelector = `
2584
+ button:not([disabled]), [href], input:not([disabled]), select:not([disabled]),
2585
+ textarea:not([disabled]), [tabindex]:not([tabindex="-1"])
2569
2586
  `;
2570
2587
  function Gallery(props) {
2588
+ var _locale$Accessibility;
2571
2589
  const { className, images, open, onOpenChange } = props;
2572
- const [isVisible, setIsVisible] = (0, react.useState)(false);
2590
+ const [isVisible, setIsVisible] = (0, react.useState)(Boolean(open));
2573
2591
  const [activeImageIndex, setActiveImageIndex] = (0, react.useState)(0);
2574
2592
  const [zoomLevel, setZoomLevel] = (0, react.useState)(1);
2575
2593
  const { direction, locale } = (0, react.useContext)(ConfigContext);
2576
2594
  const dialogRef = (0, react.useRef)(null);
2595
+ const closeButtonRef = (0, react.useRef)(null);
2596
+ const previouslyFocusedElementRef = (0, react.useRef)(null);
2577
2597
  const activeImage = images[activeImageIndex];
2578
2598
  const hasPagination = images.length > 1;
2599
+ const imageLabel = (locale === null || locale === void 0 || (_locale$Accessibility = locale.Accessibility.image) === null || _locale$Accessibility === void 0 ? void 0 : _locale$Accessibility.replace("{0}", String(activeImageIndex + 1)).replace("{1}", String(images.length))) ?? `Image ${activeImageIndex + 1} of ${images.length}`;
2579
2600
  (0, react.useEffect)(() => {
2580
- if (open && dialogRef.current) dialogRef.current.focus();
2601
+ const timer = setTimeout(() => {
2602
+ var _previouslyFocusedEle;
2603
+ setIsVisible(Boolean(open));
2604
+ if (!open && ((_previouslyFocusedEle = previouslyFocusedElementRef.current) === null || _previouslyFocusedEle === void 0 ? void 0 : _previouslyFocusedEle.isConnected)) previouslyFocusedElementRef.current.focus();
2605
+ if (!open) previouslyFocusedElementRef.current = null;
2606
+ }, open ? 0 : 150);
2607
+ return () => clearTimeout(timer);
2581
2608
  }, [open]);
2582
2609
  (0, react.useEffect)(() => {
2610
+ var _closeButtonRef$curre;
2583
2611
  if (!open) return;
2584
- const handler = (e) => {
2585
- if (e.key === "Escape") onOpenChange === null || onOpenChange === void 0 || onOpenChange(false);
2612
+ previouslyFocusedElementRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
2613
+ (_closeButtonRef$curre = closeButtonRef.current) === null || _closeButtonRef$curre === void 0 || _closeButtonRef$curre.focus();
2614
+ }, [open]);
2615
+ (0, react.useEffect)(() => {
2616
+ if (!open && !isVisible) return;
2617
+ const handler = (event) => {
2618
+ if (event.key === "Escape" && open) {
2619
+ event.preventDefault();
2620
+ event.stopPropagation();
2621
+ onOpenChange === null || onOpenChange === void 0 || onOpenChange(false);
2622
+ return;
2623
+ }
2624
+ if (event.key !== "Tab" || !dialogRef.current) return;
2625
+ const focusableElements = Array.from(dialogRef.current.querySelectorAll(focusableElementSelector));
2626
+ if (focusableElements.length === 0) {
2627
+ event.preventDefault();
2628
+ dialogRef.current.focus();
2629
+ return;
2630
+ }
2631
+ const firstElement = focusableElements[0];
2632
+ const lastElement = focusableElements[focusableElements.length - 1];
2633
+ const activeElement = document.activeElement;
2634
+ if (event.shiftKey && (activeElement === firstElement || !dialogRef.current.contains(activeElement))) {
2635
+ event.preventDefault();
2636
+ lastElement.focus();
2637
+ } else if (!event.shiftKey && (activeElement === lastElement || !dialogRef.current.contains(activeElement))) {
2638
+ event.preventDefault();
2639
+ firstElement.focus();
2640
+ }
2586
2641
  };
2587
2642
  window.addEventListener("keydown", handler);
2588
2643
  return () => window.removeEventListener("keydown", handler);
2589
- }, [open, onOpenChange]);
2644
+ }, [
2645
+ isVisible,
2646
+ onOpenChange,
2647
+ open
2648
+ ]);
2590
2649
  (0, react.useEffect)(() => {
2591
- if (open) setIsVisible(true);
2592
- else {
2593
- const timer = setTimeout(() => {
2594
- setIsVisible(false);
2595
- }, 150);
2596
- return () => clearTimeout(timer);
2597
- }
2598
- }, [open]);
2650
+ return () => {
2651
+ var _previouslyFocusedEle2;
2652
+ if ((_previouslyFocusedEle2 = previouslyFocusedElementRef.current) === null || _previouslyFocusedEle2 === void 0 ? void 0 : _previouslyFocusedEle2.isConnected) previouslyFocusedElementRef.current.focus();
2653
+ };
2654
+ }, []);
2599
2655
  (0, react.useEffect)(() => {
2600
2656
  if (!open) return;
2601
2657
  const handleWheel = (e) => {
@@ -2614,17 +2670,17 @@ function Gallery(props) {
2614
2670
  setZoomLevel(1);
2615
2671
  return;
2616
2672
  }
2617
- const newZoomLevel = zoomLevel + ratio;
2618
- if (newZoomLevel < .5) return;
2619
- if (newZoomLevel > 2) return;
2620
- setZoomLevel(newZoomLevel);
2673
+ setZoomLevel((previousZoomLevel) => Math.min(Math.max(.5, previousZoomLevel + ratio), 2));
2674
+ }
2675
+ function handleClose() {
2676
+ onOpenChange === null || onOpenChange === void 0 || onOpenChange(false);
2621
2677
  }
2622
2678
  return (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2623
2679
  "data-u-comp": "gallery",
2624
2680
  dir: direction,
2625
2681
  role: "dialog",
2626
2682
  "aria-modal": "true",
2627
- "aria-label": locale === null || locale === void 0 ? void 0 : locale.Accessibility.imageGallery,
2683
+ "aria-label": (locale === null || locale === void 0 ? void 0 : locale.Accessibility.imageGallery) ?? "Image gallery",
2628
2684
  tabIndex: -1,
2629
2685
  ref: dialogRef,
2630
2686
  className: clsx$1("univer-fixed univer-inset-0 univer-z-[1080] univer-flex univer-h-screen univer-w-screen univer-select-none univer-items-center univer-justify-center", {
@@ -2635,7 +2691,18 @@ function Gallery(props) {
2635
2691
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2636
2692
  className: "univer-absolute univer-inset-0 univer-size-full univer-bg-gray-900 univer-opacity-80",
2637
2693
  "aria-hidden": "true",
2638
- onClick: () => onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(false)
2694
+ onClick: handleClose
2695
+ }),
2696
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
2697
+ ref: closeButtonRef,
2698
+ "data-u-comp": "gallery-close",
2699
+ type: "button",
2700
+ variant: "ghost",
2701
+ size: "icon",
2702
+ "aria-label": (locale === null || locale === void 0 ? void 0 : locale.Accessibility.close) ?? "Close",
2703
+ className: "univer-absolute univer-right-4 univer-top-4 univer-z-10 univer-size-10 univer-rounded-full !univer-border-gray-500 !univer-bg-gray-800 !univer-text-gray-0 hover:!univer-bg-gray-700 focus-visible:!univer-outline-none focus-visible:!univer-ring-2 focus-visible:!univer-ring-gray-0 rtl:univer-left-4 rtl:univer-right-auto",
2704
+ onClick: handleClose,
2705
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.CloseIcon, { "aria-hidden": "true" })
2639
2706
  }),
2640
2707
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2641
2708
  className: "univer-relative univer-flex univer-w-fit univer-items-center univer-justify-center",
@@ -2643,10 +2710,16 @@ function Gallery(props) {
2643
2710
  className: "univer-h-full univer-w-full univer-object-contain univer-transition-transform univer-duration-300 univer-ease-out",
2644
2711
  style: { transform: `scale(${zoomLevel})` },
2645
2712
  src: activeImage,
2646
- alt: locale === null || locale === void 0 ? void 0 : locale.Accessibility.image.replace("{0}", String(activeImageIndex + 1)).replace("{1}", String(images.length)),
2713
+ alt: imageLabel,
2647
2714
  draggable: false
2648
2715
  })
2649
2716
  }),
2717
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2718
+ className: "univer-sr-only",
2719
+ "aria-live": "polite",
2720
+ "aria-atomic": "true",
2721
+ children: imageLabel
2722
+ }),
2650
2723
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("footer", {
2651
2724
  className: "univer-absolute univer-bottom-6 univer-left-1/2 univer-flex -univer-translate-x-1/2 univer-items-center univer-gap-3 univer-rounded-full univer-bg-gray-800 univer-px-6 univer-py-3 univer-text-gray-400 rtl:univer-flex-row-reverse",
2652
2725
  children: [
@@ -2654,26 +2727,37 @@ function Gallery(props) {
2654
2727
  className: "!univer-text-gray-400 [&_[data-u-comp=pager-left-arrow]:hover]:!univer-bg-gray-600 [&_[data-u-comp=pager-right-arrow]:hover]:!univer-bg-gray-600",
2655
2728
  value: activeImageIndex + 1,
2656
2729
  total: images.length,
2730
+ previousButtonAriaLabel: (locale === null || locale === void 0 ? void 0 : locale.Accessibility.previous) ?? "Previous",
2731
+ nextButtonAriaLabel: (locale === null || locale === void 0 ? void 0 : locale.Accessibility.next) ?? "Next",
2657
2732
  onChange: (value) => setActiveImageIndex(value - 1)
2658
2733
  }),
2659
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2734
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
2660
2735
  type: "button",
2661
- "aria-label": locale === null || locale === void 0 ? void 0 : locale.Accessibility.zoomIn,
2662
- className: buttonClassName,
2736
+ variant: "ghost",
2737
+ size: "icon",
2738
+ "aria-label": (locale === null || locale === void 0 ? void 0 : locale.Accessibility.zoomIn) ?? "Zoom in",
2739
+ className: toolbarButtonClassName,
2740
+ disabled: zoomLevel >= 2,
2663
2741
  onClick: () => handleToggleZoom(.25),
2664
2742
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.ZoomInIcon, { "aria-hidden": "true" })
2665
2743
  }),
2666
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2744
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
2667
2745
  type: "button",
2668
- "aria-label": locale === null || locale === void 0 ? void 0 : locale.Accessibility.zoomOut,
2669
- className: buttonClassName,
2746
+ variant: "ghost",
2747
+ size: "icon",
2748
+ "aria-label": (locale === null || locale === void 0 ? void 0 : locale.Accessibility.zoomOut) ?? "Zoom out",
2749
+ className: toolbarButtonClassName,
2750
+ disabled: zoomLevel <= .5,
2670
2751
  onClick: () => handleToggleZoom(-.25),
2671
2752
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.ZoomOutIcon, { "aria-hidden": "true" })
2672
2753
  }),
2673
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2754
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
2674
2755
  type: "button",
2675
- "aria-label": locale === null || locale === void 0 ? void 0 : locale.Accessibility.resetZoom,
2676
- className: buttonClassName,
2756
+ variant: "ghost",
2757
+ size: "icon",
2758
+ "aria-label": (locale === null || locale === void 0 ? void 0 : locale.Accessibility.resetZoom) ?? "Reset zoom",
2759
+ className: toolbarButtonClassName,
2760
+ disabled: zoomLevel === 1,
2677
2761
  onClick: () => handleToggleZoom("reset"),
2678
2762
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_univerjs_icons.OneToOneIcon, { "aria-hidden": "true" })
2679
2763
  })
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "إغلاق الشارة",
6
+ close: "إغلاق",
7
+ previous: "السابق",
8
+ next: "التالي",
6
9
  imageGallery: "معرض الصور",
7
10
  image: "الصورة {0} من {1}",
8
11
  zoomIn: "تكبير",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Tanca la insígnia",
6
+ close: "Tanca",
7
+ previous: "Anterior",
8
+ next: "Següent",
6
9
  imageGallery: "Galeria d’imatges",
7
10
  image: "Imatge {0} de {1}",
8
11
  zoomIn: "Apropa",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Badge schließen",
6
+ close: "Schließen",
7
+ previous: "Zurück",
8
+ next: "Weiter",
6
9
  imageGallery: "Bildergalerie",
7
10
  image: "Bild {0} von {1}",
8
11
  zoomIn: "Vergrößern",
@@ -18,6 +18,9 @@
18
18
  const locale = { design: {
19
19
  Accessibility: {
20
20
  closeBadge: "Close badge",
21
+ close: "Close",
22
+ previous: "Previous",
23
+ next: "Next",
21
24
  imageGallery: "Image gallery",
22
25
  image: "Image {0} of {1}",
23
26
  zoomIn: "Zoom in",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Cerrar insignia",
6
+ close: "Cerrar",
7
+ previous: "Anterior",
8
+ next: "Siguiente",
6
9
  imageGallery: "Galería de imágenes",
7
10
  image: "Imagen {0} de {1}",
8
11
  zoomIn: "Acercar",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "بستن نشان",
6
+ close: "بستن",
7
+ previous: "قبلی",
8
+ next: "بعدی",
6
9
  imageGallery: "گالری تصاویر",
7
10
  image: "تصویر {0} از {1}",
8
11
  zoomIn: "بزرگ‌نمایی",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Fermer le badge",
6
+ close: "Fermer",
7
+ previous: "Précédent",
8
+ next: "Suivant",
6
9
  imageGallery: "Galerie d’images",
7
10
  image: "Image {0} sur {1}",
8
11
  zoomIn: "Zoom avant",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Tutup lencana",
6
+ close: "Tutup",
7
+ previous: "Sebelumnya",
8
+ next: "Berikutnya",
6
9
  imageGallery: "Galeri gambar",
7
10
  image: "Gambar {0} dari {1}",
8
11
  zoomIn: "Perbesar",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Chiudi badge",
6
+ close: "Chiudi",
7
+ previous: "Precedente",
8
+ next: "Successivo",
6
9
  imageGallery: "Galleria immagini",
7
10
  image: "Immagine {0} di {1}",
8
11
  zoomIn: "Ingrandisci",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "バッジを閉じる",
6
+ close: "閉じる",
7
+ previous: "前へ",
8
+ next: "次へ",
6
9
  imageGallery: "画像ギャラリー",
7
10
  image: "画像 {0}/{1}",
8
11
  zoomIn: "拡大",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "배지 닫기",
6
+ close: "닫기",
7
+ previous: "이전",
8
+ next: "다음",
6
9
  imageGallery: "이미지 갤러리",
7
10
  image: "이미지 {0}/{1}",
8
11
  zoomIn: "확대",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Zamknij plakietkę",
6
+ close: "Zamknij",
7
+ previous: "Poprzedni",
8
+ next: "Następny",
6
9
  imageGallery: "Galeria obrazów",
7
10
  image: "Obraz {0} z {1}",
8
11
  zoomIn: "Powiększ",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Fechar selo",
6
+ close: "Fechar",
7
+ previous: "Anterior",
8
+ next: "Próximo",
6
9
  imageGallery: "Galeria de imagens",
7
10
  image: "Imagem {0} de {1}",
8
11
  zoomIn: "Ampliar",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Закрыть метку",
6
+ close: "Закрыть",
7
+ previous: "Предыдущее",
8
+ next: "Следующее",
6
9
  imageGallery: "Галерея изображений",
7
10
  image: "Изображение {0} из {1}",
8
11
  zoomIn: "Увеличить",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Zavrieť odznak",
6
+ close: "Zavrieť",
7
+ previous: "Predchádzajúci",
8
+ next: "Nasledujúci",
6
9
  imageGallery: "Galéria obrázkov",
7
10
  image: "Obrázok {0} z {1}",
8
11
  zoomIn: "Priblížiť",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "Đóng huy hiệu",
6
+ close: "Đóng",
7
+ previous: "Trước",
8
+ next: "Tiếp theo",
6
9
  imageGallery: "Thư viện ảnh",
7
10
  image: "Ảnh {0} trên {1}",
8
11
  zoomIn: "Phóng to",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "关闭徽章",
6
+ close: "关闭",
7
+ previous: "上一个",
8
+ next: "下一个",
6
9
  imageGallery: "图片库",
7
10
  image: "第 {0} 张图片,共 {1} 张",
8
11
  zoomIn: "放大",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "關閉徽章",
6
+ close: "關閉",
7
+ previous: "上一個",
8
+ next: "下一個",
6
9
  imageGallery: "圖片庫",
7
10
  image: "第 {0} 張圖片,共 {1} 張",
8
11
  zoomIn: "放大",
@@ -3,6 +3,9 @@
3
3
  const locale = { design: {
4
4
  Accessibility: {
5
5
  closeBadge: "關閉徽章",
6
+ close: "關閉",
7
+ previous: "上一個",
8
+ next: "下一個",
6
9
  imageGallery: "圖片庫",
7
10
  image: "第 {0} 張圖片,共 {1} 張",
8
11
  zoomIn: "放大",