@hashicorp/mds-react 0.9.3 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/accordion/index.js +9 -0
- package/components/accordion/index.js.map +1 -0
- package/components/accordion/item/button.js +44 -0
- package/components/accordion/item/button.js.map +1 -0
- package/components/accordion/item/index.js +59 -0
- package/components/accordion/item/index.js.map +1 -0
- package/components/accordion/style.module.scss.js +24 -0
- package/components/accordion/style.module.scss.js.map +1 -0
- package/components/alert/alert.module.scss.js +29 -0
- package/components/alert/alert.module.scss.js.map +1 -0
- package/components/alert/icon.js +34 -0
- package/components/alert/icon.js.map +1 -0
- package/components/alert/index.js +97 -0
- package/components/alert/index.js.map +1 -0
- package/components/badge/index.js +50 -0
- package/components/badge/index.js.map +1 -0
- package/components/badge/style.module.scss.js +22 -0
- package/components/badge/style.module.scss.js.map +1 -0
- package/components/badge-count/index.js +29 -0
- package/components/badge-count/index.js.map +1 -0
- package/components/badge-count/style.module.scss.js +15 -0
- package/components/badge-count/style.module.scss.js.map +1 -0
- package/components/breadcrumbs/index.js +38 -0
- package/components/breadcrumbs/index.js.map +1 -0
- package/components/breadcrumbs/item/index.js +32 -0
- package/components/breadcrumbs/item/index.js.map +1 -0
- package/components/breadcrumbs/style.module.scss.js +27 -0
- package/components/breadcrumbs/style.module.scss.js.map +1 -0
- package/components/breadcrumbs/truncation-button/index.js +25 -0
- package/components/breadcrumbs/truncation-button/index.js.map +1 -0
- package/components/button/index.d.ts +2 -1
- package/components/button/index.js +119 -0
- package/components/button/index.js.map +1 -0
- package/components/button/styles.module.scss.js +32 -0
- package/components/button/styles.module.scss.js.map +1 -0
- package/components/card/card-thumbnail/card-thumbnail.module.css.js +8 -0
- package/components/card/card-thumbnail/card-thumbnail.module.css.js.map +1 -0
- package/components/card/card-thumbnail/index.js +23 -0
- package/components/card/card-thumbnail/index.js.map +1 -0
- package/components/card/index.d.ts +2 -1
- package/components/card/index.js +160 -0
- package/components/card/index.js.map +1 -0
- package/components/card/styles.module.css.js +29 -0
- package/components/card/styles.module.css.js.map +1 -0
- package/components/card/types.d.ts +1 -0
- package/components/code-block/code-block.module.scss.js +34 -0
- package/components/code-block/code-block.module.scss.js.map +1 -0
- package/components/code-block/code-lines/index.js +59 -0
- package/components/code-block/code-lines/index.js.map +1 -0
- package/components/code-block/code-lines/utils/split-html-into-lines.js +19 -0
- package/components/code-block/code-lines/utils/split-html-into-lines.js.map +1 -0
- package/components/code-block/code-lines/utils/split-jsx-into-lines.js +31 -0
- package/components/code-block/code-lines/utils/split-jsx-into-lines.js.map +1 -0
- package/components/code-block/hidden-copy-content/index.js +13 -0
- package/components/code-block/hidden-copy-content/index.js.map +1 -0
- package/components/code-block/index.js +88 -0
- package/components/code-block/index.js.map +1 -0
- package/components/code-block/utils/parse-highlighted-lines.js +39 -0
- package/components/code-block/utils/parse-highlighted-lines.js.map +1 -0
- package/components/code-block/utils/process-snippet.js +20 -0
- package/components/code-block/utils/process-snippet.js.map +1 -0
- package/components/code-block/utils/shellwords.js +33 -0
- package/components/code-block/utils/shellwords.js.map +1 -0
- package/components/combo-box-primitive/index.js +302 -0
- package/components/combo-box-primitive/index.js.map +1 -0
- package/components/dialog-primitive/dialog.module.scss.js +12 -0
- package/components/dialog-primitive/dialog.module.scss.js.map +1 -0
- package/components/dialog-primitive/index.js +15 -0
- package/components/dialog-primitive/index.js.map +1 -0
- package/components/disclosure-primitive/index.js +57 -0
- package/components/disclosure-primitive/index.js.map +1 -0
- package/components/disclosure-primitive/styles.module.css.js +7 -0
- package/components/disclosure-primitive/styles.module.css.js.map +1 -0
- package/components/disclosure-primitive/use-disclosure-primitive.js +17 -0
- package/components/disclosure-primitive/use-disclosure-primitive.js.map +1 -0
- package/components/dismiss-button/index.js +22 -0
- package/components/dismiss-button/index.js.map +1 -0
- package/components/dismiss-button/styles.module.scss.js +7 -0
- package/components/dismiss-button/styles.module.scss.js.map +1 -0
- package/components/dropdown/index.js +79 -0
- package/components/dropdown/index.js.map +1 -0
- package/components/dropdown/list-item/custom.js +9 -0
- package/components/dropdown/list-item/custom.js.map +1 -0
- package/components/dropdown/list-item/index.js +14 -0
- package/components/dropdown/list-item/index.js.map +1 -0
- package/components/dropdown/list-item/interactive.js +49 -0
- package/components/dropdown/list-item/interactive.js.map +1 -0
- package/components/dropdown/list-item/separator.js +17 -0
- package/components/dropdown/list-item/separator.js.map +1 -0
- package/components/dropdown/list-item/styles.module.css.js +26 -0
- package/components/dropdown/list-item/styles.module.css.js.map +1 -0
- package/components/dropdown/list-item/title.js +9 -0
- package/components/dropdown/list-item/title.js.map +1 -0
- package/components/dropdown/styles.module.css.js +24 -0
- package/components/dropdown/styles.module.css.js.map +1 -0
- package/components/dropdown/toggle-button/index.js +54 -0
- package/components/dropdown/toggle-button/index.js.map +1 -0
- package/components/dropdown/toggle-button/styles.module.scss.js +14 -0
- package/components/dropdown/toggle-button/styles.module.scss.js.map +1 -0
- package/components/flight-icon/flight-icon.module.css.js +12 -0
- package/components/flight-icon/flight-icon.module.css.js.map +1 -0
- package/components/flight-icon/index.js +58 -0
- package/components/flight-icon/index.js.map +1 -0
- package/components/form/checkbox/form-checkbox.module.css.js +8 -0
- package/components/form/checkbox/form-checkbox.module.css.js.map +1 -0
- package/components/form/checkbox/index.js +109 -0
- package/components/form/checkbox/index.js.map +1 -0
- package/components/form/error/form-error.module.css.js +14 -0
- package/components/form/error/form-error.module.css.js.map +1 -0
- package/components/form/error/index.js +22 -0
- package/components/form/error/index.js.map +1 -0
- package/components/form/field/form-field.module.css.js +17 -0
- package/components/form/field/form-field.module.css.js.map +1 -0
- package/components/form/field/index.js +46 -0
- package/components/form/field/index.js.map +1 -0
- package/components/form/fieldset/form-fieldset.module.css.js +19 -0
- package/components/form/fieldset/form-fieldset.module.css.js.map +1 -0
- package/components/form/fieldset/index.js +65 -0
- package/components/form/fieldset/index.js.map +1 -0
- package/components/form/file-input/form-file-input.module.scss.js +7 -0
- package/components/form/file-input/form-file-input.module.scss.js.map +1 -0
- package/components/form/file-input/index.js +68 -0
- package/components/form/file-input/index.js.map +1 -0
- package/components/form/helper-text/form-helper-text.module.css.js +7 -0
- package/components/form/helper-text/form-helper-text.module.css.js.map +1 -0
- package/components/form/helper-text/index.js +22 -0
- package/components/form/helper-text/index.js.map +1 -0
- package/components/form/indicator/form-indicator.module.css.js +8 -0
- package/components/form/indicator/form-indicator.module.css.js.map +1 -0
- package/components/form/indicator/index.js +23 -0
- package/components/form/indicator/index.js.map +1 -0
- package/components/form/label/form-label.module.css.js +10 -0
- package/components/form/label/form-label.module.css.js.map +1 -0
- package/components/form/label/index.js +33 -0
- package/components/form/label/index.js.map +1 -0
- package/components/form/legend/form-legend.module.css.js +10 -0
- package/components/form/legend/form-legend.module.css.js.map +1 -0
- package/components/form/legend/index.js +19 -0
- package/components/form/legend/index.js.map +1 -0
- package/components/form/radio/form-radio.module.scss.js +8 -0
- package/components/form/radio/form-radio.module.scss.js.map +1 -0
- package/components/form/radio/index.js +100 -0
- package/components/form/radio/index.js.map +1 -0
- package/components/form/radio-card/description.js +10 -0
- package/components/form/radio-card/description.js.map +1 -0
- package/components/form/radio-card/form-radio-card.module.css.js +30 -0
- package/components/form/radio-card/form-radio-card.module.css.js.map +1 -0
- package/components/form/radio-card/group.js +31 -0
- package/components/form/radio-card/group.js.map +1 -0
- package/components/form/radio-card/index.js +67 -0
- package/components/form/radio-card/index.js.map +1 -0
- package/components/form/radio-card/label.js +10 -0
- package/components/form/radio-card/label.js.map +1 -0
- package/components/form/select/form-select.module.css.js +14 -0
- package/components/form/select/form-select.module.css.js.map +1 -0
- package/components/form/select/index.js +79 -0
- package/components/form/select/index.js.map +1 -0
- package/components/form/super-select/form-super-select.module.css.js +22 -0
- package/components/form/super-select/form-super-select.module.css.js.map +1 -0
- package/components/form/super-select/index.js +170 -0
- package/components/form/super-select/index.js.map +1 -0
- package/components/form/text-input/index.js +91 -0
- package/components/form/text-input/index.js.map +1 -0
- package/components/form/text-input/styles.module.css.js +15 -0
- package/components/form/text-input/styles.module.css.js.map +1 -0
- package/components/form/textarea/form-textarea.module.css.js +14 -0
- package/components/form/textarea/form-textarea.module.css.js.map +1 -0
- package/components/form/textarea/index.js +74 -0
- package/components/form/textarea/index.js.map +1 -0
- package/components/form/toggle/form-toggle.module.scss.js +12 -0
- package/components/form/toggle/form-toggle.module.scss.js.map +1 -0
- package/components/form/toggle/index.js +102 -0
- package/components/form/toggle/index.js.map +1 -0
- package/components/hds/wrappers/tooltip.js +51 -0
- package/components/hds/wrappers/tooltip.js.map +1 -0
- package/components/icon-tile/index.js +50 -0
- package/components/icon-tile/index.js.map +1 -0
- package/components/icon-tile/style.module.scss.js +29 -0
- package/components/icon-tile/style.module.scss.js.map +1 -0
- package/components/index.d.ts +1 -1
- package/components/index.js +116 -73
- package/components/index.js.map +1 -1
- package/components/inline-link/index.js +33 -0
- package/components/inline-link/index.js.map +1 -0
- package/components/inline-link/inline-link.module.css.js +11 -0
- package/components/inline-link/inline-link.module.css.js.map +1 -0
- package/components/interactive/index.js +59 -0
- package/components/interactive/index.js.map +1 -0
- package/components/legacy-button/index.js +65 -0
- package/components/legacy-button/index.js.map +1 -0
- package/components/legacy-button/utils.js +39 -0
- package/components/legacy-button/utils.js.map +1 -0
- package/components/menu-primitive/index.js +68 -0
- package/components/menu-primitive/index.js.map +1 -0
- package/components/menu-primitive/styles.module.css.js +12 -0
- package/components/menu-primitive/styles.module.css.js.map +1 -0
- package/components/menu-primitive/use-menu-primitive.js +17 -0
- package/components/menu-primitive/use-menu-primitive.js.map +1 -0
- package/components/modal/index.js +61 -0
- package/components/modal/index.js.map +1 -0
- package/components/modal/modal.module.css.js +8 -0
- package/components/modal/modal.module.css.js.map +1 -0
- package/components/modal/use-modal.js +17 -0
- package/components/modal/use-modal.js.map +1 -0
- package/components/separator/index.js +15 -0
- package/components/separator/index.js.map +1 -0
- package/components/separator/separator.module.css.js +10 -0
- package/components/separator/separator.module.css.js.map +1 -0
- package/components/standalone-link/index.js +54 -0
- package/components/standalone-link/index.js.map +1 -0
- package/components/standalone-link/styles.module.scss.js +17 -0
- package/components/standalone-link/styles.module.scss.js.map +1 -0
- package/components/table/index.js +52 -0
- package/components/table/index.js.map +1 -0
- package/components/table/table.module.scss.js +33 -0
- package/components/table/table.module.scss.js.map +1 -0
- package/components/table/td.js +28 -0
- package/components/table/td.js.map +1 -0
- package/components/table/th-button-tooltip.js +24 -0
- package/components/table/th-button-tooltip.js.map +1 -0
- package/components/table/th.js +43 -0
- package/components/table/th.js.map +1 -0
- package/components/table/tr.js +9 -0
- package/components/table/tr.js.map +1 -0
- package/components/table/utils.js +28 -0
- package/components/table/utils.js.map +1 -0
- package/components/tabs/index.js +117 -0
- package/components/tabs/index.js.map +1 -0
- package/components/tabs/tab-panel.js +35 -0
- package/components/tabs/tab-panel.js.map +1 -0
- package/components/tabs/tab.js +70 -0
- package/components/tabs/tab.js.map +1 -0
- package/components/tabs/tabs.module.scss.js +22 -0
- package/components/tabs/tabs.module.scss.js.map +1 -0
- package/components/tabs/use-tabs-context.js +16 -0
- package/components/tabs/use-tabs-context.js.map +1 -0
- package/components/text/index.js +112 -0
- package/components/text/index.js.map +1 -0
- package/components/text/style.module.scss.js +9 -0
- package/components/text/style.module.scss.js.map +1 -0
- package/components/visualizations/bar-chart/horizontal-chart/dataset-value/index.js +62 -0
- package/components/visualizations/bar-chart/horizontal-chart/dataset-value/index.js.map +1 -0
- package/components/visualizations/bar-chart/horizontal-chart/dataset-value/style.module.css.js +20 -0
- package/components/visualizations/bar-chart/horizontal-chart/dataset-value/style.module.css.js.map +1 -0
- package/components/visualizations/bar-chart/horizontal-chart/index.js +104 -0
- package/components/visualizations/bar-chart/horizontal-chart/index.js.map +1 -0
- package/components/visualizations/bar-chart/horizontal-chart/legend/index.js +13 -0
- package/components/visualizations/bar-chart/horizontal-chart/legend/index.js.map +1 -0
- package/components/visualizations/bar-chart/horizontal-chart/legend/style.module.css.js +14 -0
- package/components/visualizations/bar-chart/horizontal-chart/legend/style.module.css.js.map +1 -0
- package/components/visualizations/bar-chart/horizontal-chart/style.module.css.js +28 -0
- package/components/visualizations/bar-chart/horizontal-chart/style.module.css.js.map +1 -0
- package/components/visualizations/bar-chart/index.js +37 -0
- package/components/visualizations/bar-chart/index.js.map +1 -0
- package/components/visualizations/bar-chart/style.module.css.js +12 -0
- package/components/visualizations/bar-chart/style.module.css.js.map +1 -0
- package/components/visualizations/donut-chart/components/arc-tooltip/index.js +14 -0
- package/components/visualizations/donut-chart/components/arc-tooltip/index.js.map +1 -0
- package/components/visualizations/donut-chart/components/arc-tooltip/styles.module.css.js +10 -0
- package/components/visualizations/donut-chart/components/arc-tooltip/styles.module.css.js.map +1 -0
- package/components/visualizations/donut-chart/components/external-arc-label/index.js +58 -0
- package/components/visualizations/donut-chart/components/external-arc-label/index.js.map +1 -0
- package/components/visualizations/donut-chart/components/external-arc-label/styles.module.css.js +16 -0
- package/components/visualizations/donut-chart/components/external-arc-label/styles.module.css.js.map +1 -0
- package/components/visualizations/donut-chart/components/internal-arc-label/index.js +42 -0
- package/components/visualizations/donut-chart/components/internal-arc-label/index.js.map +1 -0
- package/components/visualizations/donut-chart/components/internal-arc-label/styles.module.css.js +14 -0
- package/components/visualizations/donut-chart/components/internal-arc-label/styles.module.css.js.map +1 -0
- package/components/visualizations/donut-chart/index.js +90 -0
- package/components/visualizations/donut-chart/index.js.map +1 -0
- package/components/visualizations/donut-chart/styles.module.css.js +20 -0
- package/components/visualizations/donut-chart/styles.module.css.js.map +1 -0
- package/hooks/use-media-query/index.js +16 -0
- package/hooks/use-media-query/index.js.map +1 -0
- package/index.js +155 -101
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/patterns/card/newsroom-card/index.js +26 -0
- package/patterns/card/newsroom-card/index.js.map +1 -0
- package/patterns/card/newsroom-card/style.module.css.js +8 -0
- package/patterns/card/newsroom-card/style.module.css.js.map +1 -0
- package/patterns/card/partner-card/index.js +42 -0
- package/patterns/card/partner-card/index.js.map +1 -0
- package/patterns/card/partner-card/style.module.css.js +12 -0
- package/patterns/card/partner-card/style.module.css.js.map +1 -0
- package/patterns/card/person-card/index.js +52 -0
- package/patterns/card/person-card/index.js.map +1 -0
- package/patterns/card/person-card/style.module.css.js +12 -0
- package/patterns/card/person-card/style.module.css.js.map +1 -0
- package/patterns/card/primitives.js +77 -0
- package/patterns/card/primitives.js.map +1 -0
- package/patterns/card/promo-card/index.js +36 -0
- package/patterns/card/promo-card/index.js.map +1 -0
- package/patterns/card/resource-card/index.js +26 -0
- package/patterns/card/resource-card/index.js.map +1 -0
- package/patterns/card/style.module.css.js +30 -0
- package/patterns/card/style.module.css.js.map +1 -0
- package/patterns/card/thumbnails/index.js +25 -0
- package/patterns/card/thumbnails/index.js.map +1 -0
- package/patterns/card/unified-card/index.js +37 -0
- package/patterns/card/unified-card/index.js.map +1 -0
- package/patterns/copy-button/clipboard.js +78 -0
- package/patterns/copy-button/clipboard.js.map +1 -0
- package/patterns/copy-button/index.js +57 -0
- package/patterns/copy-button/index.js.map +1 -0
- package/patterns/copy-button/style.module.css.js +13 -0
- package/patterns/copy-button/style.module.css.js.map +1 -0
- package/patterns/index.js +32 -22
- package/patterns/index.js.map +1 -1
- package/patterns/layout/index.js +47 -0
- package/patterns/layout/index.js.map +1 -0
- package/patterns/layout/layout.module.css.js +20 -0
- package/patterns/layout/layout.module.css.js.map +1 -0
- package/patterns/product-badge/index.js +22 -0
- package/patterns/product-badge/index.js.map +1 -0
- package/patterns/product-badge/style.module.css.js +8 -0
- package/patterns/product-badge/style.module.css.js.map +1 -0
- package/patterns/product-logo/index.js +130 -0
- package/patterns/product-logo/index.js.map +1 -0
- package/patterns/product-logo/product-logo.module.css.js +13 -0
- package/patterns/product-logo/product-logo.module.css.js.map +1 -0
- package/patterns/related-content/index.js +65 -0
- package/patterns/related-content/index.js.map +1 -0
- package/patterns/related-content/style.module.css.js +22 -0
- package/patterns/related-content/style.module.css.js.map +1 -0
- package/style.css +1 -1
- package/utils/get-contrast-yiq.js +13 -0
- package/utils/get-contrast-yiq.js.map +1 -0
- package/utils/hooks/use-screen-size.js +10 -0
- package/utils/hooks/use-screen-size.js.map +1 -0
- package/utils/i18n/constants/index.js +98 -0
- package/utils/i18n/constants/index.js.map +1 -0
- package/utils/i18n/helpers/locale-provider.js +9 -0
- package/utils/i18n/helpers/locale-provider.js.map +1 -0
- package/utils/i18n/helpers/to-smart-sentence-case.js +12 -0
- package/utils/i18n/helpers/to-smart-sentence-case.js.map +1 -0
- package/utils/i18n/helpers/to-smart-title-case.js +10 -0
- package/utils/i18n/helpers/to-smart-title-case.js.map +1 -0
- package/utils/i18n/helpers/use-locale.js +14 -0
- package/utils/i18n/helpers/use-locale.js.map +1 -0
- package/utils/i18n/index.js +41 -0
- package/utils/i18n/index.js.map +1 -0
- package/utils/i18n/index2.js +33 -0
- package/utils/i18n/index2.js.map +1 -0
- package/utils/index.js +7 -7
- package/utils/make-normalizer/index.js +34 -0
- package/utils/make-normalizer/index.js.map +1 -0
- package/{index-DBjAbGt7.js → utils/mds-context/index.js} +20 -19
- package/utils/mds-context/index.js.map +1 -0
- package/index-B9mPJh9w.js +0 -579
- package/index-B9mPJh9w.js.map +0 -1
- package/index-BHBlMMNF.js +0 -16
- package/index-BHBlMMNF.js.map +0 -1
- package/index-C4GBbW3N.js +0 -3567
- package/index-C4GBbW3N.js.map +0 -1
- package/index-DBjAbGt7.js.map +0 -1
- package/index-WkGIywHj.js +0 -767
- package/index-WkGIywHj.js.map +0 -1
- package/use-screen-size-BOnkX_K-.js +0 -9
- package/use-screen-size-BOnkX_K-.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-screen-size.js","sources":["../../../src/utils/hooks/use-screen-size.ts"],"sourcesContent":["'use client'\n\nimport { useMediaQuery } from '@web/hooks/use-media-query'\n\n// ref: https://github.com/hashicorp/web/blob/main/packages/mds-tokens/src/custom-media.css\nconst useSmall = () => useMediaQuery('(max-width: 768px)')\nconst useMedium = () =>\n\tuseMediaQuery('(min-width: 768px) and (max-width: 1119px)')\nconst useMediumUp = () => useMediaQuery('(min-width: 768px)')\nconst useLarge = () => useMediaQuery('(min-width: 1120px)')\n\nexport { useSmall, useMedium, useMediumUp, useLarge }\n"],"names":["useSmall","useMediaQuery","useMedium","useMediumUp"],"mappings":";;AAMA,MAAMA,IAAA,MAAYC,EACjB,oBAAc,GACTC,IAAA,MAAcD,EAAM,4CAAkC,GACtDE,IAAW,MAAMF,EAAc,oBAAqB;"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
const e = "en", n = {
|
|
2
|
+
en: /* @__PURE__ */ new Set([
|
|
3
|
+
"a",
|
|
4
|
+
"an",
|
|
5
|
+
"and",
|
|
6
|
+
"as",
|
|
7
|
+
"at",
|
|
8
|
+
"but",
|
|
9
|
+
"by",
|
|
10
|
+
"for",
|
|
11
|
+
"in",
|
|
12
|
+
"nor",
|
|
13
|
+
"of",
|
|
14
|
+
"on",
|
|
15
|
+
"or",
|
|
16
|
+
"so",
|
|
17
|
+
"the",
|
|
18
|
+
"to",
|
|
19
|
+
"up",
|
|
20
|
+
"yet"
|
|
21
|
+
]),
|
|
22
|
+
de: /* @__PURE__ */ new Set(),
|
|
23
|
+
// Capitalization rules in German don't suppress small words.
|
|
24
|
+
es: /* @__PURE__ */ new Set([
|
|
25
|
+
"el",
|
|
26
|
+
"la",
|
|
27
|
+
"los",
|
|
28
|
+
"las",
|
|
29
|
+
"un",
|
|
30
|
+
"una",
|
|
31
|
+
"unos",
|
|
32
|
+
"unas",
|
|
33
|
+
"y",
|
|
34
|
+
"o",
|
|
35
|
+
"pero",
|
|
36
|
+
"de",
|
|
37
|
+
"del",
|
|
38
|
+
"al",
|
|
39
|
+
"en",
|
|
40
|
+
"por",
|
|
41
|
+
"para",
|
|
42
|
+
"con"
|
|
43
|
+
]),
|
|
44
|
+
fr: /* @__PURE__ */ new Set([
|
|
45
|
+
"le",
|
|
46
|
+
"la",
|
|
47
|
+
"les",
|
|
48
|
+
"un",
|
|
49
|
+
"une",
|
|
50
|
+
"et",
|
|
51
|
+
"de",
|
|
52
|
+
"du",
|
|
53
|
+
"des",
|
|
54
|
+
"en",
|
|
55
|
+
"à",
|
|
56
|
+
"au",
|
|
57
|
+
"aux",
|
|
58
|
+
"pour",
|
|
59
|
+
"avec"
|
|
60
|
+
]),
|
|
61
|
+
ja: /* @__PURE__ */ new Set(),
|
|
62
|
+
// Japanese doesn't use title casing; characters are not case-sensitive
|
|
63
|
+
ko: /* @__PURE__ */ new Set(),
|
|
64
|
+
// Korean doesn't use casing
|
|
65
|
+
pt: /* @__PURE__ */ new Set([
|
|
66
|
+
"o",
|
|
67
|
+
"a",
|
|
68
|
+
"os",
|
|
69
|
+
"as",
|
|
70
|
+
"um",
|
|
71
|
+
"uma",
|
|
72
|
+
"uns",
|
|
73
|
+
"umas",
|
|
74
|
+
"e",
|
|
75
|
+
"ou",
|
|
76
|
+
"mas",
|
|
77
|
+
"de",
|
|
78
|
+
"do",
|
|
79
|
+
"da",
|
|
80
|
+
"dos",
|
|
81
|
+
"das",
|
|
82
|
+
"em",
|
|
83
|
+
"no",
|
|
84
|
+
"na",
|
|
85
|
+
"nos",
|
|
86
|
+
"nas",
|
|
87
|
+
"por",
|
|
88
|
+
"para",
|
|
89
|
+
"com"
|
|
90
|
+
]),
|
|
91
|
+
id: /* @__PURE__ */ new Set()
|
|
92
|
+
// ! TODO Determine Indonesian's small word rules, and apply them here
|
|
93
|
+
};
|
|
94
|
+
export {
|
|
95
|
+
e as DEFAULT_LOCALE,
|
|
96
|
+
n as smallWordsByLocale
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../utils/i18n/constants/index.ts"],"sourcesContent":["import type { SupportedLocale } from '../types'\n\nexport const DEFAULT_LOCALE = 'en'\n\nexport const LOCALE_LANGUAGE_MAP = {\n\ten: 'English',\n\tfr: 'Français',\n\tde: 'Deutsch',\n\tja: '日本語',\n\tko: '한국어',\n\tpt: 'Português',\n\tes: 'Español',\n\tid: 'Bahasa Indonesia',\n}\n\nexport const SUPPORTED_LOCALES = Object.keys(\n\tLOCALE_LANGUAGE_MAP\n) as SupportedLocale[]\n\nexport const smallWordsByLocale: Record<SupportedLocale, Set<string>> = {\n\ten: new Set([\n\t\t'a',\n\t\t'an',\n\t\t'and',\n\t\t'as',\n\t\t'at',\n\t\t'but',\n\t\t'by',\n\t\t'for',\n\t\t'in',\n\t\t'nor',\n\t\t'of',\n\t\t'on',\n\t\t'or',\n\t\t'so',\n\t\t'the',\n\t\t'to',\n\t\t'up',\n\t\t'yet',\n\t]),\n\tde: new Set(), // Capitalization rules in German don't suppress small words.\n\tes: new Set([\n\t\t'el',\n\t\t'la',\n\t\t'los',\n\t\t'las',\n\t\t'un',\n\t\t'una',\n\t\t'unos',\n\t\t'unas',\n\t\t'y',\n\t\t'o',\n\t\t'pero',\n\t\t'de',\n\t\t'del',\n\t\t'al',\n\t\t'en',\n\t\t'por',\n\t\t'para',\n\t\t'con',\n\t]),\n\tfr: new Set([\n\t\t'le',\n\t\t'la',\n\t\t'les',\n\t\t'un',\n\t\t'une',\n\t\t'et',\n\t\t'de',\n\t\t'du',\n\t\t'des',\n\t\t'en',\n\t\t'à',\n\t\t'au',\n\t\t'aux',\n\t\t'pour',\n\t\t'avec',\n\t]),\n\tja: new Set(), // Japanese doesn't use title casing; characters are not case-sensitive\n\tko: new Set(), // Korean doesn't use casing\n\tpt: new Set([\n\t\t'o',\n\t\t'a',\n\t\t'os',\n\t\t'as',\n\t\t'um',\n\t\t'uma',\n\t\t'uns',\n\t\t'umas',\n\t\t'e',\n\t\t'ou',\n\t\t'mas',\n\t\t'de',\n\t\t'do',\n\t\t'da',\n\t\t'dos',\n\t\t'das',\n\t\t'em',\n\t\t'no',\n\t\t'na',\n\t\t'nos',\n\t\t'nas',\n\t\t'por',\n\t\t'para',\n\t\t'com',\n\t]),\n\tid: new Set(), // ! TODO Determine Indonesian's small word rules, and apply them here\n}\n"],"names":["DEFAULT_LOCALE","smallWordsByLocale"],"mappings":"AAEO,MAAMA,IAAiB,MAiBjBC,IAA2D;AAAA,EACvE,wBAAQ,IAAI;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACA;AAAA,EACD,wBAAQ,IAAA;AAAA;AAAA,EACR,wBAAQ,IAAI;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACA;AAAA,EACD,wBAAQ,IAAI;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACA;AAAA,EACD,wBAAQ,IAAA;AAAA;AAAA,EACR,wBAAQ,IAAA;AAAA;AAAA,EACR,wBAAQ,IAAI;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACA;AAAA,EACD,wBAAQ,IAAA;AAAA;AACT;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-provider.js","sources":["../../../../../utils/i18n/helpers/locale-provider.tsx"],"sourcesContent":["'use client'\n\nimport { createContext, type PropsWithChildren } from 'react'\nimport type { SupportedLocale } from '../types'\nimport { isSupportedLocale } from './is-supported-locale'\nimport { DEFAULT_LOCALE } from '../constants'\n\nfunction resolveLocale(input: string): SupportedLocale {\n\treturn isSupportedLocale(input) ? input : DEFAULT_LOCALE\n}\n\ntype LocaleContextValue = {\n\tlocale: SupportedLocale\n}\n\ninterface LocaleProviderProps extends PropsWithChildren {\n\t/**\n\t * Supported locales can be found in `SUPPORTED_LOCALES`.\n\t */\n\tlocale: string\n}\n\nexport const LocaleContext = createContext<LocaleContextValue | undefined>(\n\tundefined\n)\n\nexport const LocaleProvider = ({ locale, children }: LocaleProviderProps) => {\n\tconst resolvedLocale = resolveLocale(locale)\n\n\treturn (\n\t\t<LocaleContext.Provider value={{ locale: resolvedLocale }}>\n\t\t\t{children}\n\t\t</LocaleContext.Provider>\n\t)\n}\n"],"names":["LocaleContext","createContext"],"mappings":";;AAsB6B,MAC5BA,IAAAC;AAAA,EACD;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function o(t, r) {
|
|
2
|
+
if (r === "ja" || r === "ko")
|
|
3
|
+
return t;
|
|
4
|
+
const e = t.match(/^(\s*[\p{P}\p{Zs}]*)?(\p{L})(.*)$/u);
|
|
5
|
+
if (!e) return t;
|
|
6
|
+
const [, n, s, a] = e;
|
|
7
|
+
return (n ?? "") + s.toLocaleUpperCase(r) + a.toLocaleLowerCase(r);
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
o as toSmartSentenceCase
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=to-smart-sentence-case.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-smart-sentence-case.js","sources":["../../../../../utils/i18n/helpers/to-smart-sentence-case.ts"],"sourcesContent":["import type { SupportedLocale } from '../types'\n\nexport function toSmartSentenceCase(\n\ttext: string,\n\tlocale: SupportedLocale\n): string {\n\t// Skip transformation for non-cased languages\n\tif (locale === 'ja' || locale === 'ko') {\n\t\treturn text\n\t}\n\n\tconst match = text.match(/^(\\s*[\\p{P}\\p{Zs}]*)?(\\p{L})(.*)$/u)\n\n\tif (!match) return text // fallback if no match\n\n\tconst [, leading, firstChar, rest] = match\n\n\treturn (\n\t\t(leading ?? '') +\n\t\tfirstChar.toLocaleUpperCase(locale) +\n\t\trest.toLocaleLowerCase(locale)\n\t)\n}\n"],"names":["toSmartSentenceCase","text","locale","match","leading","firstChar","rest"],"mappings":"AAEO,SAASA,EACfC,GACAC,GACS;AAET,MAAIA,MAAW,QAAQA,MAAW;AACjC,WAAOD;AAGR,QAAME,IAAQF,EAAK,MAAM,oCAAoC;AAE7D,MAAI,CAACE,EAAO,QAAOF;AAEnB,QAAM,GAAGG,GAASC,GAAWC,CAAI,IAAIH;AAErC,UACEC,KAAW,MACZC,EAAU,kBAAkBH,CAAM,IAClCI,EAAK,kBAAkBJ,CAAM;AAE/B;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { smallWordsByLocale as i } from "../constants/index.js";
|
|
2
|
+
function c(o, t) {
|
|
3
|
+
const s = i[t], e = o.toLocaleLowerCase(t).split(/([\s\-:,.]+)/);
|
|
4
|
+
let a = !0;
|
|
5
|
+
return e.map((r) => /^[\s\-:,.]+$/.test(r) ? (/[:.!?]\s*$/.test(r) && (a = !0), r) : r.charAt(0).toLocaleUpperCase && (a || !s.has(r)) ? (a = !1, r.charAt(0).toLocaleUpperCase(t) + r.slice(1)) : r).join("");
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
c as toSmartTitleCase
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=to-smart-title-case.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-smart-title-case.js","sources":["../../../../../utils/i18n/helpers/to-smart-title-case.ts"],"sourcesContent":["import { smallWordsByLocale } from '../constants'\nimport { type SupportedLocale } from '../types'\n\nexport function toSmartTitleCase(\n\ttext: string,\n\tlocale: SupportedLocale\n): string {\n\tconst smallWords = smallWordsByLocale[locale]\n\tconst segments = text.toLocaleLowerCase(locale).split(/([\\s\\-:,.]+)/)\n\n\tlet capitalizeNext = true\n\n\treturn segments\n\t\t.map((segment) => {\n\t\t\tif (/^[\\s\\-:,.]+$/.test(segment)) {\n\t\t\t\t// If punctuation ends a sentence-like clause, capitalize the next word\n\t\t\t\tif (/[:.!?]\\s*$/.test(segment)) {\n\t\t\t\t\tcapitalizeNext = true\n\t\t\t\t}\n\t\t\t\treturn segment\n\t\t\t}\n\n\t\t\t// For non-cased languages (ja, ko), return as-is\n\t\t\tif (!segment.charAt(0).toLocaleUpperCase) return segment\n\n\t\t\tif (capitalizeNext || !smallWords.has(segment)) {\n\t\t\t\tcapitalizeNext = false\n\t\t\t\treturn segment.charAt(0).toLocaleUpperCase(locale) + segment.slice(1)\n\t\t\t} else {\n\t\t\t\treturn segment\n\t\t\t}\n\t\t})\n\t\t.join('')\n}\n"],"names":["toSmartTitleCase","text","locale","smallWords","smallWordsByLocale","segments","capitalizeNext","segment"],"mappings":";AAGO,SAASA,EACfC,GACAC,GACS;AACT,QAAMC,IAAaC,EAAmBF,CAAM,GACtCG,IAAWJ,EAAK,kBAAkBC,CAAM,EAAE,MAAM,cAAc;AAEpE,MAAII,IAAiB;AAErB,SAAOD,EACL,IAAI,CAACE,MACD,eAAe,KAAKA,CAAO,KAE1B,aAAa,KAAKA,CAAO,MAC5BD,IAAiB,KAEXC,KAIHA,EAAQ,OAAO,CAAC,EAAE,sBAEnBD,KAAkB,CAACH,EAAW,IAAII,CAAO,MAC5CD,IAAiB,IACVC,EAAQ,OAAO,CAAC,EAAE,kBAAkBL,CAAM,IAAIK,EAAQ,MAAM,CAAC,KAJpBA,CAQjD,EACA,KAAK,EAAE;AACV;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useContext as n } from "react";
|
|
2
|
+
import { DEFAULT_LOCALE as e } from "../constants/index.js";
|
|
3
|
+
import { LocaleContext as r } from "./locale-provider.js";
|
|
4
|
+
let t = !1;
|
|
5
|
+
function i() {
|
|
6
|
+
const o = n(r)?.locale;
|
|
7
|
+
return !o && typeof window < "u" && !t && (t = !0, console.warn(
|
|
8
|
+
`[@web/utils] No <LocaleProvider> found. Defaulting to "${e}".`
|
|
9
|
+
)), o || e;
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
i as useLocale
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=use-locale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-locale.js","sources":["../../../../../utils/i18n/helpers/use-locale.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { DEFAULT_LOCALE } from '../constants'\nimport { LocaleContext } from './locale-provider'\nimport type { SupportedLocale } from '../types'\n\nlet hasWarned = false\n\nexport function useLocale(): SupportedLocale {\n\tconst locale = useContext(LocaleContext)?.locale\n\n\tif (!locale && typeof window !== 'undefined' && !hasWarned) {\n\t\thasWarned = true\n\t\tconsole.warn(\n\t\t\t`[@web/utils] No <LocaleProvider> found. Defaulting to \"${DEFAULT_LOCALE}\".`\n\t\t)\n\t}\n\n\treturn locale || DEFAULT_LOCALE\n}\n"],"names":["hasWarned","useLocale","locale","useContext","LocaleContext","DEFAULT_LOCALE"],"mappings":";;;AAKA,IAAIA,IAAY;AAET,SAASC,IAA6B;AAC5C,QAAMC,IAASC,EAAWC,CAAa,GAAG;AAE1C,SAAI,CAACF,KAAU,OAAO,SAAW,OAAe,CAACF,MAChDA,IAAY,IACZ,QAAQ;AAAA,IACP,0DAA0DK,CAAc;AAAA,EAAA,IAInEH,KAAUG;AAClB;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { createLocalize as o } from "./index2.js";
|
|
2
|
+
const r = o({
|
|
3
|
+
de: {
|
|
4
|
+
optional: "optional",
|
|
5
|
+
// "optional" is the same in German
|
|
6
|
+
required: "erforderlich"
|
|
7
|
+
},
|
|
8
|
+
en: {
|
|
9
|
+
optional: "optional",
|
|
10
|
+
required: "required"
|
|
11
|
+
},
|
|
12
|
+
es: {
|
|
13
|
+
optional: "opcional",
|
|
14
|
+
required: "obligatorio"
|
|
15
|
+
},
|
|
16
|
+
fr: {
|
|
17
|
+
optional: "facultatif",
|
|
18
|
+
required: "obligatoire"
|
|
19
|
+
},
|
|
20
|
+
id: {
|
|
21
|
+
// ! TODO Translate text to Indonesian
|
|
22
|
+
optional: "optional",
|
|
23
|
+
required: "required"
|
|
24
|
+
},
|
|
25
|
+
ja: {
|
|
26
|
+
optional: "任意",
|
|
27
|
+
required: "必須"
|
|
28
|
+
},
|
|
29
|
+
ko: {
|
|
30
|
+
optional: "선택 사항",
|
|
31
|
+
required: "필수"
|
|
32
|
+
},
|
|
33
|
+
pt: {
|
|
34
|
+
optional: "opcional",
|
|
35
|
+
required: "obrigatório"
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
export {
|
|
39
|
+
r as localize
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/i18n/index.ts"],"sourcesContent":["import { createLocalize } from '@web/utils/i18n'\n\nexport const localize = createLocalize({\n\tde: {\n\t\toptional: 'optional', // \"optional\" is the same in German\n\t\trequired: 'erforderlich',\n\t},\n\ten: {\n\t\toptional: 'optional',\n\t\trequired: 'required',\n\t},\n\tes: {\n\t\toptional: 'opcional',\n\t\trequired: 'obligatorio',\n\t},\n\tfr: {\n\t\toptional: 'facultatif',\n\t\trequired: 'obligatoire',\n\t},\n\tid: {\n\t\t// ! TODO Translate text to Indonesian\n\t\toptional: 'optional',\n\t\trequired: 'required',\n\t},\n\tja: {\n\t\toptional: '任意',\n\t\trequired: '必須',\n\t},\n\tko: {\n\t\toptional: '선택 사항',\n\t\trequired: '필수',\n\t},\n\tpt: {\n\t\toptional: 'opcional',\n\t\trequired: 'obrigatório',\n\t},\n})\n"],"names":["localize","createLocalize"],"mappings":";AAEO,MAAMA,IAAWC,EAAe;AAAA,EACtC,IAAI;AAAA,IACH,UAAU;AAAA;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEX,IAAI;AAAA,IACH,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEX,IAAI;AAAA,IACH,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEX,IAAI;AAAA,IACH,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEX,IAAI;AAAA;AAAA,IAEH,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEX,IAAI;AAAA,IACH,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEX,IAAI;AAAA,IACH,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEX,IAAI;AAAA,IACH,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAEZ,CAAC;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import "./helpers/locale-provider.js";
|
|
2
|
+
import { toSmartSentenceCase as p } from "./helpers/to-smart-sentence-case.js";
|
|
3
|
+
import { toSmartTitleCase as f } from "./helpers/to-smart-title-case.js";
|
|
4
|
+
import "react";
|
|
5
|
+
function i(o, u) {
|
|
6
|
+
return u.split(".").reduce((t, r) => {
|
|
7
|
+
if (typeof t == "object" && t !== null && r in t)
|
|
8
|
+
return t[r];
|
|
9
|
+
}, o);
|
|
10
|
+
}
|
|
11
|
+
function w(o, u = "en") {
|
|
12
|
+
return function(r, n, s) {
|
|
13
|
+
const e = i(o[n], r) ?? i(o[u], r);
|
|
14
|
+
if (typeof e != "string") return "";
|
|
15
|
+
switch (s) {
|
|
16
|
+
case "title":
|
|
17
|
+
return f(e, n);
|
|
18
|
+
case "sentence":
|
|
19
|
+
return p(e, n);
|
|
20
|
+
case "upper":
|
|
21
|
+
return e.toLocaleUpperCase(n);
|
|
22
|
+
case "lower":
|
|
23
|
+
return e.toLocaleLowerCase(n);
|
|
24
|
+
case "none":
|
|
25
|
+
default:
|
|
26
|
+
return e;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
w as createLocalize
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","sources":["../../../../utils/i18n/index.ts"],"sourcesContent":["import { toSmartSentenceCase, toSmartTitleCase } from './helpers'\nimport type { SupportedLocale } from './types'\n\ntype Capitalization = 'none' | 'lower' | 'sentence' | 'title' | 'upper'\n\ntype DotPrefix<T extends string, U extends string> = `${T}.${U}`\n\ntype NestedKeyOf<ObjectType extends object> = {\n\t[K in keyof ObjectType & string]: ObjectType[K] extends object\n\t\t? DotPrefix<K, NestedKeyOf<ObjectType[K]>>\n\t\t: K\n}[keyof ObjectType & string]\n\nfunction getByDotPath<T extends object, P extends string>(\n\tobj: T,\n\tpath: P\n): unknown {\n\treturn path.split('.').reduce((acc: unknown, part) => {\n\t\tif (typeof acc === 'object' && acc !== null && part in acc) {\n\t\t\treturn (acc as Record<string, unknown>)[part]\n\t\t}\n\t\treturn undefined\n\t}, obj)\n}\n\nexport function createLocalize<Messages extends Record<string, unknown>>(\n\tlocalizations: Record<SupportedLocale, Messages>,\n\tfallbackLocale: SupportedLocale = 'en'\n) {\n\ttype Key = NestedKeyOf<Messages>\n\n\treturn function translate(\n\t\tkey: Key,\n\t\tlocale: SupportedLocale,\n\t\tcapitalization?: Capitalization\n\t): string {\n\t\tconst word =\n\t\t\tgetByDotPath(localizations[locale], key) ??\n\t\t\tgetByDotPath(localizations[fallbackLocale], key)\n\n\t\tif (typeof word !== 'string') return ''\n\n\t\tswitch (capitalization) {\n\t\t\tcase 'title':\n\t\t\t\treturn toSmartTitleCase(word, locale)\n\t\t\tcase 'sentence':\n\t\t\t\treturn toSmartSentenceCase(word, locale)\n\t\t\tcase 'upper':\n\t\t\t\treturn word.toLocaleUpperCase(locale)\n\t\t\tcase 'lower':\n\t\t\t\treturn word.toLocaleLowerCase(locale)\n\t\t\tcase 'none':\n\t\t\tdefault:\n\t\t\t\treturn word\n\t\t}\n\t}\n}\n"],"names":["getByDotPath","obj","path","acc","part","createLocalize","localizations","fallbackLocale","key","locale","capitalization","word","toSmartTitleCase","toSmartSentenceCase"],"mappings":";;;;AAaA,SAASA,EACRC,GACAC,GACU;AACV,SAAOA,EAAK,MAAM,GAAG,EAAE,OAAO,CAACC,GAAcC,MAAS;AACrD,QAAI,OAAOD,KAAQ,YAAYA,MAAQ,QAAQC,KAAQD;AACtD,aAAQA,EAAgCC,CAAI;AAAA,EAG9C,GAAGH,CAAG;AACP;AAEO,SAASI,EACfC,GACAC,IAAkC,MACjC;AAGD,SAAO,SACNC,GACAC,GACAC,GACS;AACT,UAAMC,IACLX,EAAaM,EAAcG,CAAM,GAAGD,CAAG,KACvCR,EAAaM,EAAcC,CAAc,GAAGC,CAAG;AAEhD,QAAI,OAAOG,KAAS,SAAU,QAAO;AAErC,YAAQD,GAAA;AAAA,MACP,KAAK;AACJ,eAAOE,EAAiBD,GAAMF,CAAM;AAAA,MACrC,KAAK;AACJ,eAAOI,EAAoBF,GAAMF,CAAM;AAAA,MACxC,KAAK;AACJ,eAAOE,EAAK,kBAAkBF,CAAM;AAAA,MACrC,KAAK;AACJ,eAAOE,EAAK,kBAAkBF,CAAM;AAAA,MACrC,KAAK;AAAA,MACL;AACC,eAAOE;AAAA,IAAA;AAAA,EAEV;AACD;"}
|
package/utils/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { useLarge as u, useMedium as m, useMediumUp as o, useSmall as s } from "./hooks/use-screen-size.js";
|
|
2
|
+
import { MDSProvider as i } from "./mds-context/index.js";
|
|
3
3
|
export {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
i as MDSProvider,
|
|
5
|
+
u as useLarge,
|
|
6
|
+
m as useMedium,
|
|
7
|
+
o as useMediumUp,
|
|
8
|
+
s as useSmall
|
|
9
9
|
};
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
function h(o, s) {
|
|
2
|
+
const a = o, r = s.aliases ?? Object.fromEntries(a.map((t) => [t, t])), c = s.transform ?? ((t) => t.trim().toLowerCase()), n = (t, e) => {
|
|
3
|
+
const i = { ...r, ...e?.aliases ?? {} }, l = e?.fallback ?? s.fallback, k = e?.transform ?? c;
|
|
4
|
+
if (typeof t != "string") return l;
|
|
5
|
+
const f = k(t), u = i[f] ?? f;
|
|
6
|
+
return a.includes(u) ? u : l;
|
|
7
|
+
};
|
|
8
|
+
return n.with = (t) => (e, i) => n(e, { ...t, ...i ?? {} }), n;
|
|
9
|
+
}
|
|
10
|
+
function b(o) {
|
|
11
|
+
const s = (a, r) => {
|
|
12
|
+
const c = {};
|
|
13
|
+
for (const n in o) {
|
|
14
|
+
if (!Object.prototype.hasOwnProperty.call(o, n)) continue;
|
|
15
|
+
const t = n, e = o[t], i = r?.all ? e.with(r.all) : e;
|
|
16
|
+
c[t] = i(a?.[t], r?.each?.[t]);
|
|
17
|
+
}
|
|
18
|
+
return c;
|
|
19
|
+
};
|
|
20
|
+
return s.with = (a) => {
|
|
21
|
+
const r = {};
|
|
22
|
+
for (const c in o) {
|
|
23
|
+
if (!Object.prototype.hasOwnProperty.call(o, c)) continue;
|
|
24
|
+
const n = c;
|
|
25
|
+
r[n] = o[n].with(a);
|
|
26
|
+
}
|
|
27
|
+
return b(r);
|
|
28
|
+
}, s;
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
h as makeNormalizer,
|
|
32
|
+
b as makeNormalizerSet
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/make-normalizer/index.tsx"],"sourcesContent":["export type NormalizerOpts<TOut extends string> = {\n\taliases?: Record<string, TOut>\n\tfallback?: TOut\n\ttransform?: (raw: string) => string\n}\n\nexport type Normalizer<TOut extends string> = {\n\t(input: unknown, opts?: NormalizerOpts<TOut>): TOut\n\twith(bound: NormalizerOpts<TOut>): Normalizer<TOut>\n}\n\nexport function makeNormalizer<\n\tTAllowed extends readonly string[],\n\tTOut extends TAllowed[number]\n>(\n\tallowed: TAllowed,\n\tdefaults: {\n\t\tfallback: TOut\n\t\taliases?: Record<string, TOut>\n\t\ttransform?: (raw: string) => string\n\t}\n): Normalizer<TOut> {\n\tconst list = allowed as readonly string[]\n\n\tconst defaultAliases: Record<string, TOut> =\n\t\tdefaults.aliases ??\n\t\t(Object.fromEntries(list.map((v) => [v, v])) as Record<string, TOut>)\n\n\tconst defaultTransform =\n\t\tdefaults.transform ?? ((s: string) => s.trim().toLowerCase())\n\n\tconst core = ((input: unknown, opts?: NormalizerOpts<TOut>): TOut => {\n\t\tconst aliases = { ...defaultAliases, ...(opts?.aliases ?? {}) }\n\t\tconst fallback = opts?.fallback ?? defaults.fallback\n\t\tconst transform = opts?.transform ?? defaultTransform\n\n\t\tif (typeof input !== 'string') return fallback\n\n\t\tconst s = transform(input)\n\t\tconst candidate = (aliases[s] ?? s) as string\n\t\treturn list.includes(candidate) ? (candidate as TOut) : fallback\n\t}) as Normalizer<TOut>\n\n\tcore.with = (bound: NormalizerOpts<TOut>) =>\n\t\t((input: unknown, opts?: NormalizerOpts<TOut>) =>\n\t\t\tcore(input, { ...bound, ...(opts ?? {}) })) as Normalizer<TOut>\n\n\treturn core\n}\n\n/**\n * Group helper: normalize a whole props object in one call.\n * - `all.transform` applies to every normalizer in the set (safe cross-type).\n * - `each[key]` lets you override per-key opts (aliases/fallback/transform).\n */\nexport function makeNormalizerSet<TOuts extends Record<string, string>>(map: {\n\t[K in keyof TOuts]: Normalizer<TOuts[K]>\n}) {\n\ttype In = { [K in keyof TOuts]?: unknown | null }\n\ttype Out = { [K in keyof TOuts]: TOuts[K] }\n\ttype All = Pick<NormalizerOpts<string>, 'transform'> // safe cross-prop\n\ttype Each = { [K in keyof TOuts]?: NormalizerOpts<TOuts[K]> }\n\ttype Call = (input: In, opts?: { all?: All; each?: Each }) => Out\n\n\tconst call = ((input: In, opts?: { all?: All; each?: Each }) => {\n\t\tconst out = {} as Out\n\t\tfor (const k in map) {\n\t\t\tif (!Object.prototype.hasOwnProperty.call(map, k)) continue\n\t\t\tconst key = k as keyof TOuts\n\t\t\tconst n = map[key]\n\t\t\tconst base = opts?.all ? n.with(opts.all as any) : n\n\t\t\tout[key] = base(input?.[key], opts?.each?.[key]) as TOuts[typeof key]\n\t\t}\n\t\treturn out\n\t}) as Call & { with(all: All): Call }\n\n\tcall.with = (all: All) => {\n\t\tconst bound = {} as { [K in keyof TOuts]: Normalizer<TOuts[K]> }\n\t\tfor (const k in map) {\n\t\t\tif (!Object.prototype.hasOwnProperty.call(map, k)) continue\n\t\t\tconst key = k as keyof TOuts\n\t\t\tbound[key] = map[key].with(all as any)\n\t\t}\n\t\treturn makeNormalizerSet(bound)\n\t}\n\n\treturn call\n}\n"],"names":["makeNormalizer","allowed","defaults","list","defaultAliases","v","defaultTransform","s","core","input","opts","aliases","fallback","transform","candidate","bound","makeNormalizerSet","map","call","out","k","key","n","base","all"],"mappings":"AAWO,SAASA,EAIfC,GACAC,GAKmB;AACnB,QAAMC,IAAOF,GAEPG,IACLF,EAAS,WACR,OAAO,YAAYC,EAAK,IAAI,CAACE,MAAM,CAACA,GAAGA,CAAC,CAAC,CAAC,GAEtCC,IACLJ,EAAS,cAAc,CAACK,MAAcA,EAAE,OAAO,gBAE1CC,IAAQ,CAACC,GAAgBC,MAAsC;AACpE,UAAMC,IAAU,EAAE,GAAGP,GAAgB,GAAIM,GAAM,WAAW,GAAC,GACrDE,IAAWF,GAAM,YAAYR,EAAS,UACtCW,IAAYH,GAAM,aAAaJ;AAErC,QAAI,OAAOG,KAAU,SAAU,QAAOG;AAEtC,UAAML,IAAIM,EAAUJ,CAAK,GACnBK,IAAaH,EAAQJ,CAAC,KAAKA;AACjC,WAAOJ,EAAK,SAASW,CAAS,IAAKA,IAAqBF;AAAA,EACzD;AAEA,SAAAJ,EAAK,OAAO,CAACO,MACX,CAACN,GAAgBC,MACjBF,EAAKC,GAAO,EAAE,GAAGM,GAAO,GAAIL,KAAQ,CAAA,GAAK,GAEpCF;AACR;AAOO,SAASQ,EAAwDC,GAErE;AAOF,QAAMC,IAAQ,CAACT,GAAWC,MAAsC;AAC/D,UAAMS,IAAM,CAAA;AACZ,eAAWC,KAAKH,GAAK;AACpB,UAAI,CAAC,OAAO,UAAU,eAAe,KAAKA,GAAKG,CAAC,EAAG;AACnD,YAAMC,IAAMD,GACNE,IAAIL,EAAII,CAAG,GACXE,IAAOb,GAAM,MAAMY,EAAE,KAAKZ,EAAK,GAAU,IAAIY;AACnD,MAAAH,EAAIE,CAAG,IAAIE,EAAKd,IAAQY,CAAG,GAAGX,GAAM,OAAOW,CAAG,CAAC;AAAA,IAChD;AACA,WAAOF;AAAA,EACR;AAEA,SAAAD,EAAK,OAAO,CAACM,MAAa;AACzB,UAAMT,IAAQ,CAAA;AACd,eAAWK,KAAKH,GAAK;AACpB,UAAI,CAAC,OAAO,UAAU,eAAe,KAAKA,GAAKG,CAAC,EAAG;AACnD,YAAMC,IAAMD;AACZ,MAAAL,EAAMM,CAAG,IAAIJ,EAAII,CAAG,EAAE,KAAKG,CAAU;AAAA,IACtC;AACA,WAAOR,EAAkBD,CAAK;AAAA,EAC/B,GAEOG;AACR;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx as n } from "react/jsx-runtime";
|
|
2
3
|
import { createContext as d, forwardRef as x, useContext as g } from "react";
|
|
3
4
|
const m = (t) => {
|
|
@@ -5,11 +6,11 @@ const m = (t) => {
|
|
|
5
6
|
alt: e,
|
|
6
7
|
src: i,
|
|
7
8
|
className: o,
|
|
8
|
-
style:
|
|
9
|
-
loading:
|
|
10
|
-
decoding:
|
|
11
|
-
fetchPriority:
|
|
12
|
-
objectFit:
|
|
9
|
+
style: c,
|
|
10
|
+
loading: l,
|
|
11
|
+
decoding: s,
|
|
12
|
+
fetchPriority: u,
|
|
13
|
+
objectFit: a,
|
|
13
14
|
objectPosition: f
|
|
14
15
|
// Next extras are accepted but ignored by the default renderer
|
|
15
16
|
} = t;
|
|
@@ -19,17 +20,17 @@ const m = (t) => {
|
|
|
19
20
|
alt: e,
|
|
20
21
|
src: i,
|
|
21
22
|
className: o,
|
|
22
|
-
loading:
|
|
23
|
-
decoding:
|
|
24
|
-
fetchPriority:
|
|
23
|
+
loading: l,
|
|
24
|
+
decoding: s,
|
|
25
|
+
fetchPriority: u,
|
|
25
26
|
style: {
|
|
26
27
|
position: "absolute",
|
|
27
28
|
inset: 0,
|
|
28
29
|
width: "100%",
|
|
29
30
|
height: "100%",
|
|
30
|
-
objectFit:
|
|
31
|
+
objectFit: a ?? "cover",
|
|
31
32
|
objectPosition: f,
|
|
32
|
-
...
|
|
33
|
+
...c
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
) : /* @__PURE__ */ n(
|
|
@@ -40,13 +41,13 @@ const m = (t) => {
|
|
|
40
41
|
width: t.width,
|
|
41
42
|
height: t.height,
|
|
42
43
|
className: o,
|
|
43
|
-
loading:
|
|
44
|
-
decoding:
|
|
45
|
-
fetchPriority:
|
|
44
|
+
loading: l,
|
|
45
|
+
decoding: s,
|
|
46
|
+
fetchPriority: u,
|
|
46
47
|
style: {
|
|
47
|
-
objectFit:
|
|
48
|
+
objectFit: a,
|
|
48
49
|
objectPosition: f,
|
|
49
|
-
...
|
|
50
|
+
...c
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
);
|
|
@@ -77,8 +78,8 @@ function j() {
|
|
|
77
78
|
return g(v);
|
|
78
79
|
}
|
|
79
80
|
export {
|
|
80
|
-
P as
|
|
81
|
-
b as
|
|
82
|
-
j as
|
|
81
|
+
P as MDSProvider,
|
|
82
|
+
b as useMDSImage,
|
|
83
|
+
j as useMDSLink
|
|
83
84
|
};
|
|
84
|
-
//# sourceMappingURL=index
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/utils/mds-context/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n\tcreateContext,\n\tuseContext,\n\tforwardRef,\n\ttype CSSProperties,\n\ttype ImgHTMLAttributes,\n\ttype ComponentType,\n} from 'react'\n\n/* ----------------------------- Image ----------------------------- */\n\ntype FillLayout = {\n\tfill: true\n\t/** Strongly recommended when using fill */\n\tsizes?: string\n}\n\ntype FixedLayout = {\n\twidth: number\n\theight: number\n\tfill?: false\n}\n\n/** Next/Image extras we want to allow on adapters (all optional here) */\ntype NextImageExtras = {\n\tpriority?: boolean\n\tplaceholder?: 'blur' | 'empty'\n\tblurDataURL?: string\n\tquality?: number\n\tunoptimized?: boolean\n\tonLoadingComplete?: (img: HTMLImageElement) => void\n}\n\nexport type MDSImageProps =\n\t// Core, DS-neutral props\n\t({\n\t\talt: string\n\t\t/** DS-neutral; Next adapter may also accept StaticImageData at runtime */\n\t\tsrc: string\n\t\tclassName?: string\n\t\tstyle?: CSSProperties\n\t\tloading?: 'eager' | 'lazy'\n\t\tdecoding?: 'sync' | 'async' | 'auto'\n\t\tfetchPriority?: 'high' | 'low' | 'auto'\n\t\tobjectFit?: string\n\t\tobjectPosition?: string\n\t} & (FillLayout | FixedLayout)) &\n\t\t// Allow common <img> props without clobbering the ones we define\n\t\tOmit<\n\t\t\tImgHTMLAttributes<HTMLImageElement>,\n\t\t\t'src' | 'alt' | 'width' | 'height' | 'loading' | 'decoding'\n\t\t> &\n\t\t// Make Next extras available (adapters can use them; default img ignores)\n\t\tNextImageExtras\n\ntype ImageComponent = ComponentType<MDSImageProps>\n\nconst DefaultImg: ImageComponent = (props) => {\n\tconst {\n\t\talt,\n\t\tsrc,\n\t\tclassName,\n\t\tstyle,\n\t\tloading,\n\t\tdecoding,\n\t\tfetchPriority,\n\t\tobjectFit,\n\t\tobjectPosition,\n\t\t// Next extras are accepted but ignored by the default renderer\n\t} = props\n\n\tif ('fill' in props && props.fill) {\n\t\treturn (\n\t\t\t<img\n\t\t\t\talt={alt}\n\t\t\t\tsrc={src}\n\t\t\t\tclassName={className}\n\t\t\t\tloading={loading}\n\t\t\t\tdecoding={decoding}\n\t\t\t\tfetchPriority={fetchPriority}\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tinset: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '100%',\n\t\t\t\t\tobjectFit: (objectFit as CSSProperties['objectFit']) ?? 'cover',\n\t\t\t\t\tobjectPosition,\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t/>\n\t\t)\n\t}\n\n\treturn (\n\t\t<img\n\t\t\talt={alt}\n\t\t\tsrc={src}\n\t\t\twidth={props.width}\n\t\t\theight={props.height}\n\t\t\tclassName={className}\n\t\t\tloading={loading}\n\t\t\tdecoding={decoding}\n\t\t\tfetchPriority={fetchPriority}\n\t\t\tstyle={{\n\t\t\t\tobjectFit: objectFit as CSSProperties['objectFit'],\n\t\t\t\tobjectPosition,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t/>\n\t)\n}\n\nconst ImageCtx = createContext<ImageComponent>(DefaultImg)\n\n/* ------------------------------ Link ----------------------------- */\n\n/**\n * Start from all standard <a> props, then refine:\n * - force a typed href\n * - keep children required\n * - keep Next-specific props optional so the default <a> can ignore them\n */\nexport type MDSLinkProps = Omit<\n\tReact.AnchorHTMLAttributes<HTMLAnchorElement>,\n\t'href'\n> & {\n\thref: string | URL\n\ttarget?: React.HTMLAttributeAnchorTarget\n\tonClick?: React.MouseEventHandler<HTMLAnchorElement>\n} & {\n\t// Next.js extras (optional; default <a> ignores them)\n\tprefetch?: boolean\n\treplace?: boolean\n\tscroll?: boolean\n\tshallow?: boolean\n\tlocale?: string | false\n}\n\ntype LinkComponent = React.ForwardRefExoticComponent<\n\tMDSLinkProps & React.RefAttributes<HTMLAnchorElement>\n>\n\nconst DefaultLink: LinkComponent = forwardRef<HTMLAnchorElement, MDSLinkProps>(\n\t({ href, children, ...rest }, ref) => (\n\t\t<a\n\t\t\tref={ref}\n\t\t\thref={typeof href === 'string' ? href : href.toString()}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{children}\n\t\t</a>\n\t)\n)\n\nDefaultLink.displayName = 'DefaultLink'\n\nconst LinkCtx = createContext<LinkComponent>(DefaultLink)\n\n/* ----------------------- Provider + hooks ------------------------ */\n\nexport function MDSProvider({\n\tchildren,\n\timageComponent,\n\tlinkComponent,\n}: {\n\tchildren: React.ReactNode\n\timageComponent?: ImageComponent\n\tlinkComponent?: LinkComponent\n}) {\n\treturn (\n\t\t<ImageCtx.Provider value={imageComponent ?? DefaultImg}>\n\t\t\t<LinkCtx.Provider value={linkComponent ?? DefaultLink}>\n\t\t\t\t{children}\n\t\t\t</LinkCtx.Provider>\n\t\t</ImageCtx.Provider>\n\t)\n}\n\nexport function useMDSImage() {\n\treturn useContext(ImageCtx)\n}\n\nexport function useMDSLink() {\n\treturn useContext(LinkCtx)\n}\n"],"names":["DefaultImg","props","alt","src","className","style","loading","decoding","fetchPriority","objectFit","objectPosition","jsx","ImageCtx","createContext","DefaultLink","href","children","rest","ref","LinkCtx","MDSProvider","imageComponent","linkComponent","useMDSImage","useContext","useMDSLink"],"mappings":";;;AA4DC,MAAAA,IAAM,CAAAC,MAAA;AAAA,QACL;AAAA,IACA,KAAAC;AAAA,IACA,KAAAC;AAAA,IACA,WAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC;AAAA,IACA,WAAAC;AAAA,IAAA,gBAAAC;AAAA;AAAA,EAID,IAAIT;AACH,0BACC,OAAC,gBAAAU;AAAA,IAAA;AAAA,IAAA;AAAA,MAEA,KAAAT;AAAA,MACA,KAAAC;AAAA,MACA,WAAAC;AAAA,MACA,SAAAE;AAAA,MACA,UAAAC;AAAA,MACA,eAAAC;AAAA,MAAO,OACN;AAAA,QACA,UAAO;AAAA,QACP,OAAO;AAAA,QACP;QACA,QAAA;AAAA,QACA,WAAAC,KAAA;AAAA,QACA,gBAAAC;AAAA,QAAG,GAAAL;AAAA,MACJ;AAAA,IACD;AAAA,EAEF,IAGE,gBAAAM;AAAA,IAAA;AAAA,IAAA;AAAA,MAEA,KAAAT;AAAA,MACA,KAAAC;AAAA,MACA,SAAQ;AAAA,MACR,QAAAF,EAAA;AAAA,MACA,WAAAG;AAAA,MACA,SAAAE;AAAA,MACA,UAAAC;AAAA,MACA,eAAAC;AAAA,MAAO,OACN;AAAA,QACA,WAAAC;AAAA,QACA,gBAAAC;AAAA,QAAG,GAAAL;AAAA,MACJ;AAAA,IACD;AAAA,EAEF;AAEA,GA8BMO,IAAAC,EAA6Bb,CAAA,GAC/Bc;EACF,CAAA,EAAC,MAAAC,GAAA,UAAAC,GAAA,GAAAC,EAAA,GAAAC,MAAA,gBAAAP;AAAA,IAAA;AAAA,IAAA;AAAA,MAEA,KAAAO;AAAA,MACC,MAAG,OAAAH,KAAA,WAAAA,IAAAA,EAAA,SAAA;AAAA,MAEH,GAAAE;AAAA,MAAA,UAAAD;AAAA,IAAA;AAAA,EAGJ;AAEA;AAEAF,EAAM,cAAU;AAIT,MAAAK,MAAqBL,CAAA;AAAA,SAC3BM,EAAA;AAAA,EACA,UAAAJ;AAAA,EACA,gBAAAK;AAAA,EACD,eAAAC;AAKC,GAAA;AAOD,SAAA,gBAAAX,EAAAC,EAAA,UAAA,EAAA,OAAAS,KAAArB,GAAA,UAAA,gBAAAW,EAAAQ,EAAA,UAAA,EAAA,OAAAG,KAAAR,GAAA,UAAAE,EAAA,CAAA,EAAA,CAAA;AAEO;AACN,SAAOO,IAAW;AACnB,SAAAC,EAAAZ,CAAA;AAEO;AACN,SAAOa,IAAW;AACnB,SAAAD,EAAAL,CAAA;;"}
|