@hashicorp/mds-react 0.9.13 → 0.9.15
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/dist/components/accordion/index.d.ts +15 -0
- package/dist/components/accordion/index.d.ts.map +1 -0
- package/dist/components/accordion/item/button.d.ts +7 -0
- package/dist/components/accordion/item/button.d.ts.map +1 -0
- package/dist/components/accordion/item/index.d.ts +25 -0
- package/dist/components/accordion/item/index.d.ts.map +1 -0
- package/dist/components/accordion/item/index.js.map +1 -0
- package/dist/components/accordion/style.module.scss +110 -0
- package/dist/components/alert/alert.module.scss +227 -0
- package/dist/components/alert/icon.d.ts +10 -0
- package/dist/components/alert/icon.d.ts.map +1 -0
- package/dist/components/alert/index.d.ts +63 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/badge/index.d.ts +32 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/badge/style.module.scss +108 -0
- package/dist/components/badge-count/index.d.ts +16 -0
- package/dist/components/badge-count/index.d.ts.map +1 -0
- package/dist/components/badge-count/index.js.map +1 -0
- package/dist/components/badge-count/style.module.scss +86 -0
- package/dist/components/breadcrumbs/index.d.ts +8 -0
- package/dist/components/breadcrumbs/index.d.ts.map +1 -0
- package/dist/components/breadcrumbs/index.js.map +1 -0
- package/dist/components/breadcrumbs/item/index.d.ts +3 -0
- package/dist/components/breadcrumbs/item/index.d.ts.map +1 -0
- package/dist/components/breadcrumbs/style.module.scss +183 -0
- package/dist/components/breadcrumbs/truncation-button/index.d.ts +4 -0
- package/dist/components/breadcrumbs/truncation-button/index.d.ts.map +1 -0
- package/dist/components/breadcrumbs/types/index.d.ts +52 -0
- package/dist/components/breadcrumbs/types/index.d.ts.map +1 -0
- package/dist/components/button/button-primitive.d.ts +6 -0
- package/dist/components/button/button-primitive.d.ts.map +1 -0
- package/dist/components/button/button-primitive.js.map +1 -0
- package/dist/components/button/index.d.ts +31 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/styles.module.scss +217 -0
- package/dist/components/card/card-thumbnail/index.d.ts +3 -0
- package/dist/components/card/card-thumbnail/index.d.ts.map +1 -0
- package/dist/components/card/index.d.ts +5 -0
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/card/types.d.ts +54 -0
- package/dist/components/card/types.d.ts.map +1 -0
- package/dist/components/code-block/code-block.module.scss +505 -0
- package/dist/components/code-block/code-lines/index.d.ts +20 -0
- package/dist/components/code-block/code-lines/index.d.ts.map +1 -0
- package/dist/components/code-block/code-lines/utils/split-html-into-lines.d.ts +20 -0
- package/dist/components/code-block/code-lines/utils/split-html-into-lines.d.ts.map +1 -0
- package/dist/components/code-block/code-lines/utils/split-jsx-into-lines.d.ts +22 -0
- package/dist/components/code-block/code-lines/utils/split-jsx-into-lines.d.ts.map +1 -0
- package/dist/components/code-block/code-lines/utils/split-jsx-into-lines.js.map +1 -0
- package/dist/components/code-block/hidden-copy-content/index.d.ts +6 -0
- package/dist/components/code-block/hidden-copy-content/index.d.ts.map +1 -0
- package/dist/components/code-block/hidden-copy-content/index.js.map +1 -0
- package/dist/components/code-block/index.d.ts +56 -0
- package/dist/components/code-block/index.d.ts.map +1 -0
- package/dist/components/code-block/index.js.map +1 -0
- package/dist/components/code-block/utils/parse-highlighted-lines.d.ts +3 -0
- package/dist/components/code-block/utils/parse-highlighted-lines.d.ts.map +1 -0
- package/dist/components/code-block/utils/parse-highlighted-lines.js.map +1 -0
- package/dist/components/code-block/utils/process-snippet.d.ts +13 -0
- package/dist/components/code-block/utils/process-snippet.d.ts.map +1 -0
- package/dist/components/code-block/utils/shellwords.d.ts +15 -0
- package/dist/components/code-block/utils/shellwords.d.ts.map +1 -0
- package/dist/components/code-block/utils/shellwords.js.map +1 -0
- package/dist/components/combo-box-primitive/index.d.ts +69 -0
- package/dist/components/combo-box-primitive/index.d.ts.map +1 -0
- package/dist/components/combo-box-primitive/index.js.map +1 -0
- package/dist/components/dialog-primitive/index.d.ts +13 -0
- package/dist/components/dialog-primitive/index.d.ts.map +1 -0
- package/dist/components/dialog-primitive/index.js.map +1 -0
- package/dist/components/disclosure-primitive/index.d.ts +20 -0
- package/dist/components/disclosure-primitive/index.d.ts.map +1 -0
- package/dist/components/disclosure-primitive/index.js.map +1 -0
- package/dist/components/disclosure-primitive/use-disclosure-primitive.d.ts +12 -0
- package/dist/components/disclosure-primitive/use-disclosure-primitive.d.ts.map +1 -0
- package/dist/components/disclosure-primitive/use-disclosure-primitive.js.map +1 -0
- package/dist/components/dismiss-button/index.d.ts +9 -0
- package/dist/components/dismiss-button/index.d.ts.map +1 -0
- package/dist/components/dismiss-button/styles.module.scss +26 -0
- package/dist/components/dropdown/index.d.ts +73 -0
- package/dist/components/dropdown/index.d.ts.map +1 -0
- package/dist/components/dropdown/index.js.map +1 -0
- package/dist/components/dropdown/list-item/custom.d.ts +11 -0
- package/dist/components/dropdown/list-item/custom.d.ts.map +1 -0
- package/dist/components/dropdown/list-item/index.d.ts +20 -0
- package/dist/components/dropdown/list-item/index.d.ts.map +1 -0
- package/dist/components/dropdown/list-item/interactive.d.ts +30 -0
- package/dist/components/dropdown/list-item/interactive.d.ts.map +1 -0
- package/dist/components/dropdown/list-item/separator.d.ts +9 -0
- package/dist/components/dropdown/list-item/separator.d.ts.map +1 -0
- package/dist/components/dropdown/list-item/styles.module.css +218 -0
- package/dist/components/dropdown/list-item/title.d.ts +11 -0
- package/dist/components/dropdown/list-item/title.d.ts.map +1 -0
- package/dist/components/dropdown/list-item/title.js.map +1 -0
- package/dist/components/dropdown/toggle-button/index.d.ts +31 -0
- package/dist/components/dropdown/toggle-button/index.d.ts.map +1 -0
- package/dist/components/dropdown/toggle-button/index.js.map +1 -0
- package/dist/components/dropdown/toggle-button/styles.module.scss +54 -0
- package/dist/components/flight-icon/index.d.ts +45 -0
- package/dist/components/flight-icon/index.d.ts.map +1 -0
- package/dist/components/flight-icon/index.js.map +1 -0
- package/dist/components/form/checkbox/form-checkbox.module.css +81 -0
- package/dist/components/form/checkbox/index.d.ts +46 -0
- package/dist/components/form/checkbox/index.d.ts.map +1 -0
- package/dist/components/form/error/index.d.ts +17 -0
- package/dist/components/form/error/index.d.ts.map +1 -0
- package/dist/components/form/field/index.d.ts +20 -0
- package/dist/components/form/field/index.d.ts.map +1 -0
- package/dist/components/form/fieldset/index.d.ts +19 -0
- package/dist/components/form/fieldset/index.d.ts.map +1 -0
- package/dist/components/form/file-input/form-file-input.module.scss +81 -0
- package/dist/components/form/file-input/index.d.ts +28 -0
- package/dist/components/form/file-input/index.d.ts.map +1 -0
- package/dist/components/form/helper-text/index.d.ts +12 -0
- package/dist/components/form/helper-text/index.d.ts.map +1 -0
- package/dist/components/form/indicator/index.d.ts +10 -0
- package/dist/components/form/indicator/index.d.ts.map +1 -0
- package/dist/components/form/label/index.d.ts +15 -0
- package/dist/components/form/label/index.d.ts.map +1 -0
- package/dist/components/form/legend/index.d.ts +13 -0
- package/dist/components/form/legend/index.d.ts.map +1 -0
- package/dist/components/form/radio/form-radio.module.scss +71 -0
- package/dist/components/form/radio/index.d.ts +43 -0
- package/dist/components/form/radio/index.d.ts.map +1 -0
- package/dist/components/form/radio-card/description.d.ts +4 -0
- package/dist/components/form/radio-card/description.d.ts.map +1 -0
- package/dist/components/form/radio-card/form-radio-card.module.css +152 -0
- package/dist/components/form/radio-card/group.d.ts +12 -0
- package/dist/components/form/radio-card/group.d.ts.map +1 -0
- package/dist/components/form/radio-card/index.d.ts +49 -0
- package/dist/components/form/radio-card/index.d.ts.map +1 -0
- package/dist/components/form/radio-card/index.js.map +1 -0
- package/dist/components/form/radio-card/label.d.ts +4 -0
- package/dist/components/form/radio-card/label.d.ts.map +1 -0
- package/dist/components/form/select/form-select.module.css +81 -0
- package/dist/components/form/select/index.d.ts +23 -0
- package/dist/components/form/select/index.d.ts.map +1 -0
- package/dist/components/form/select/index.js.map +1 -0
- package/dist/components/form/super-select/form-super-select.module.css +149 -0
- package/dist/components/form/super-select/index.d.ts +56 -0
- package/dist/components/form/super-select/index.d.ts.map +1 -0
- package/dist/components/form/super-select/index.js.map +1 -0
- package/dist/components/form/text-input/index.d.ts +99 -0
- package/dist/components/form/text-input/index.d.ts.map +1 -0
- package/dist/components/form/text-input/index.js.map +1 -0
- package/dist/components/form/text-input/styles.module.css +144 -0
- package/dist/components/form/textarea/form-textarea.module.css +87 -0
- package/dist/components/form/textarea/index.d.ts +20 -0
- package/dist/components/form/textarea/index.d.ts.map +1 -0
- package/dist/components/form/textarea/index.js.map +1 -0
- package/dist/components/form/toggle/form-toggle.module.scss +151 -0
- package/dist/components/form/toggle/index.d.ts +79 -0
- package/dist/components/form/toggle/index.d.ts.map +1 -0
- package/dist/components/hds/wrappers/tooltip.d.ts +15 -0
- package/dist/components/hds/wrappers/tooltip.d.ts.map +1 -0
- package/dist/components/icon-tile/index.d.ts +22 -0
- package/dist/components/icon-tile/index.d.ts.map +1 -0
- package/dist/components/icon-tile/index.js.map +1 -0
- package/dist/components/icon-tile/style.module.scss +123 -0
- package/dist/components/index.d.ts +63 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +124 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/inline-link/index.d.ts +41 -0
- package/dist/components/inline-link/index.d.ts.map +1 -0
- package/dist/components/interactive/index.d.ts +27 -0
- package/dist/components/interactive/index.d.ts.map +1 -0
- package/dist/components/interactive/index.js.map +1 -0
- package/dist/components/legacy-button/index.d.ts +6 -0
- package/dist/components/legacy-button/index.d.ts.map +1 -0
- package/dist/components/legacy-button/index.js.map +1 -0
- package/dist/components/legacy-button/types.d.ts +38 -0
- package/dist/components/legacy-button/types.d.ts.map +1 -0
- package/dist/components/legacy-button/utils.d.ts +10 -0
- package/dist/components/legacy-button/utils.d.ts.map +1 -0
- package/dist/components/legacy-button/utils.js.map +1 -0
- package/dist/components/menu-primitive/index.d.ts +15 -0
- package/dist/components/menu-primitive/index.d.ts.map +1 -0
- package/dist/components/menu-primitive/index.js.map +1 -0
- package/dist/components/menu-primitive/use-menu-primitive.d.ts +10 -0
- package/dist/components/menu-primitive/use-menu-primitive.d.ts.map +1 -0
- package/dist/components/menu-primitive/use-menu-primitive.js.map +1 -0
- package/dist/components/modal/index.d.ts +14 -0
- package/dist/components/modal/index.d.ts.map +1 -0
- package/dist/components/modal/index.js.map +1 -0
- package/dist/components/modal/use-modal.d.ts +9 -0
- package/dist/components/modal/use-modal.d.ts.map +1 -0
- package/dist/components/modal/use-modal.js.map +1 -0
- package/dist/components/separator/index.d.ts +11 -0
- package/dist/components/separator/index.d.ts.map +1 -0
- package/dist/components/skeleton/index.d.ts +14 -0
- package/dist/components/skeleton/index.d.ts.map +1 -0
- package/dist/components/skeleton/index.js +30 -0
- package/dist/components/skeleton/index.js.map +1 -0
- package/dist/components/skeleton/skeleton-form/index.d.ts +8 -0
- package/dist/components/skeleton/skeleton-form/index.d.ts.map +1 -0
- package/dist/components/skeleton/skeleton-form/index.js +19 -0
- package/dist/components/skeleton/skeleton-form/index.js.map +1 -0
- package/dist/components/skeleton/skeleton-form/skeleton-form.module.css +32 -0
- package/dist/components/skeleton/skeleton-form/skeleton-form.module.css.js +11 -0
- package/dist/components/skeleton/skeleton-form/skeleton-form.module.css.js.map +1 -0
- package/dist/components/skeleton/skeleton.module.css +87 -0
- package/dist/components/skeleton/skeleton.module.css.js +19 -0
- package/dist/components/skeleton/skeleton.module.css.js.map +1 -0
- package/dist/components/standalone-link/index.d.ts +24 -0
- package/dist/components/standalone-link/index.d.ts.map +1 -0
- package/dist/components/standalone-link/index.js.map +1 -0
- package/dist/components/standalone-link/styles.module.scss +164 -0
- package/dist/components/table/index.d.ts +59 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/td.d.ts +18 -0
- package/dist/components/table/td.d.ts.map +1 -0
- package/dist/components/table/td.js.map +1 -0
- package/dist/components/table/th-button-tooltip.d.ts +7 -0
- package/dist/components/table/th-button-tooltip.d.ts.map +1 -0
- package/dist/components/table/th.d.ts +35 -0
- package/dist/components/table/th.d.ts.map +1 -0
- package/dist/components/table/th.js.map +1 -0
- package/dist/components/table/tr.d.ts +13 -0
- package/dist/components/table/tr.d.ts.map +1 -0
- package/dist/components/table/utils.d.ts +17 -0
- package/dist/components/table/utils.d.ts.map +1 -0
- package/dist/components/table/utils.js.map +1 -0
- package/dist/components/tabs/index.d.ts +22 -0
- package/dist/components/tabs/index.d.ts.map +1 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/tabs/tab-panel.d.ts +6 -0
- package/dist/components/tabs/tab-panel.d.ts.map +1 -0
- package/dist/components/tabs/tab-panel.js.map +1 -0
- package/dist/components/tabs/tab.d.ts +25 -0
- package/dist/components/tabs/tab.d.ts.map +1 -0
- package/dist/components/tabs/tab.js.map +1 -0
- package/dist/components/tabs/tabs.module.scss +120 -0
- package/dist/components/tabs/use-tabs-context.d.ts +16 -0
- package/dist/components/tabs/use-tabs-context.d.ts.map +1 -0
- package/dist/components/tabs/use-tabs-context.js.map +1 -0
- package/dist/components/text/index.d.ts +70 -0
- package/dist/components/text/index.d.ts.map +1 -0
- package/dist/components/text/index.js.map +1 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/dataset-value/index.d.ts +9 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/dataset-value/index.d.ts.map +1 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/dataset-value/index.js +63 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/dataset-value/index.js.map +1 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/index.d.ts +44 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/index.d.ts.map +1 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/index.js +104 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/index.js.map +1 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/legend/index.d.ts +11 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/legend/index.d.ts.map +1 -0
- package/dist/components/visualizations/bar-chart/horizontal-chart/style.module.css +76 -0
- package/dist/components/visualizations/bar-chart/index.d.ts +14 -0
- package/dist/components/visualizations/bar-chart/index.d.ts.map +1 -0
- package/dist/components/visualizations/bar-chart/style.module.css +37 -0
- package/dist/components/visualizations/donut-chart/components/arc-tooltip/index.d.ts +4 -0
- package/dist/components/visualizations/donut-chart/components/arc-tooltip/index.d.ts.map +1 -0
- package/dist/components/visualizations/donut-chart/components/external-arc-label/index.d.ts +4 -0
- package/dist/components/visualizations/donut-chart/components/external-arc-label/index.d.ts.map +1 -0
- package/dist/components/visualizations/donut-chart/components/index.d.ts +4 -0
- package/dist/components/visualizations/donut-chart/components/index.d.ts.map +1 -0
- package/dist/components/visualizations/donut-chart/components/internal-arc-label/index.d.ts +4 -0
- package/dist/components/visualizations/donut-chart/components/internal-arc-label/index.d.ts.map +1 -0
- package/dist/components/visualizations/donut-chart/index.d.ts +11 -0
- package/dist/components/visualizations/donut-chart/index.d.ts.map +1 -0
- package/dist/components/visualizations/donut-chart/index.js +91 -0
- package/dist/components/visualizations/donut-chart/index.js.map +1 -0
- package/dist/components/visualizations/donut-chart/styles.module.css +71 -0
- package/dist/components/visualizations/donut-chart/types.d.ts +17 -0
- package/dist/components/visualizations/donut-chart/types.d.ts.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +169 -0
- package/dist/index.js.map +1 -0
- package/dist/patterns/card/index.d.ts +6 -0
- package/dist/patterns/card/index.d.ts.map +1 -0
- package/dist/patterns/card/newsroom-card/index.d.ts +16 -0
- package/dist/patterns/card/newsroom-card/index.d.ts.map +1 -0
- package/dist/patterns/card/partner-card/index.d.ts +19 -0
- package/dist/patterns/card/partner-card/index.d.ts.map +1 -0
- package/dist/patterns/card/person-card/index.d.ts +16 -0
- package/dist/patterns/card/person-card/index.d.ts.map +1 -0
- package/dist/patterns/card/primitives.d.ts +38 -0
- package/dist/patterns/card/primitives.d.ts.map +1 -0
- package/dist/patterns/card/promo-card/index.d.ts +19 -0
- package/dist/patterns/card/promo-card/index.d.ts.map +1 -0
- package/dist/patterns/card/resource-card/index.d.ts +17 -0
- package/dist/patterns/card/resource-card/index.d.ts.map +1 -0
- package/dist/patterns/card/style.module.css +119 -0
- package/dist/patterns/card/thumbnails/index.d.ts +14 -0
- package/dist/patterns/card/thumbnails/index.d.ts.map +1 -0
- package/dist/patterns/card/types.d.ts +42 -0
- package/dist/patterns/card/types.d.ts.map +1 -0
- package/dist/patterns/card/unified-card/index.d.ts +11 -0
- package/dist/patterns/card/unified-card/index.d.ts.map +1 -0
- package/dist/patterns/card/unified-card/index.js.map +1 -0
- package/dist/patterns/copy-button/index.d.ts +20 -0
- package/dist/patterns/copy-button/index.d.ts.map +1 -0
- package/dist/patterns/copy-button/index.js +57 -0
- package/dist/patterns/copy-button/index.js.map +1 -0
- package/dist/patterns/index.d.ts +16 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/layout/index.d.ts +70 -0
- package/dist/patterns/layout/index.d.ts.map +1 -0
- package/dist/patterns/layout/layout.module.css +66 -0
- package/dist/patterns/product-badge/index.d.ts +12 -0
- package/dist/patterns/product-badge/index.d.ts.map +1 -0
- package/dist/patterns/product-badge/style.module.css +3 -0
- package/dist/patterns/product-logo/index.d.ts +49 -0
- package/dist/patterns/product-logo/index.d.ts.map +1 -0
- package/dist/patterns/related-content/index.d.ts +7 -0
- package/dist/patterns/related-content/index.d.ts.map +1 -0
- package/dist/patterns/related-content/style.module.css +74 -0
- package/dist/patterns/related-content/types.d.ts +15 -0
- package/dist/patterns/related-content/types.d.ts.map +1 -0
- package/dist/style.css +1 -0
- package/dist/styles/mixins/button.scss +224 -0
- package/dist/styles/mixins/focus-ring.scss +68 -0
- package/dist/utils/clipboard.d.ts +17 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +78 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/get-contrast-yiq.d.ts +21 -0
- package/dist/utils/get-contrast-yiq.d.ts.map +1 -0
- package/dist/utils/get-contrast-yiq.js.map +1 -0
- package/dist/utils/hooks/use-media-query/index.d.ts +2 -0
- package/dist/utils/hooks/use-media-query/index.d.ts.map +1 -0
- package/dist/utils/hooks/use-media-query/index.js +16 -0
- package/dist/utils/hooks/use-media-query/index.js.map +1 -0
- package/dist/utils/hooks/use-screen-size/index.d.ts +6 -0
- package/dist/utils/hooks/use-screen-size/index.d.ts.map +1 -0
- package/dist/utils/hooks/use-screen-size/index.js +10 -0
- package/dist/utils/hooks/use-screen-size/index.js.map +1 -0
- package/dist/utils/i18n/constants/index.d.ts +15 -0
- package/dist/utils/i18n/constants/index.d.ts.map +1 -0
- package/dist/utils/i18n/constants/index.js.map +1 -0
- package/dist/utils/i18n/helpers/index.d.ts +6 -0
- package/dist/utils/i18n/helpers/index.d.ts.map +1 -0
- package/dist/utils/i18n/helpers/is-supported-local.d.ts +3 -0
- package/dist/utils/i18n/helpers/is-supported-local.d.ts.map +1 -0
- package/dist/utils/i18n/helpers/is-supported-local.js +8 -0
- package/dist/utils/i18n/helpers/is-supported-local.js.map +1 -0
- package/dist/utils/i18n/helpers/locale-provider.d.ts +15 -0
- package/dist/utils/i18n/helpers/locale-provider.d.ts.map +1 -0
- package/dist/utils/i18n/helpers/locale-provider.js +19 -0
- package/dist/utils/i18n/helpers/locale-provider.js.map +1 -0
- package/dist/utils/i18n/helpers/to-smart-sentence-case.d.ts +3 -0
- package/dist/utils/i18n/helpers/to-smart-sentence-case.d.ts.map +1 -0
- package/dist/utils/i18n/helpers/to-smart-sentence-case.js.map +1 -0
- package/dist/utils/i18n/helpers/to-smart-title-case.d.ts +3 -0
- package/dist/utils/i18n/helpers/to-smart-title-case.d.ts.map +1 -0
- package/dist/utils/i18n/helpers/to-smart-title-case.js.map +1 -0
- package/dist/utils/i18n/helpers/use-locale.d.ts +3 -0
- package/dist/utils/i18n/helpers/use-locale.d.ts.map +1 -0
- package/dist/utils/i18n/helpers/use-locale.js +14 -0
- package/dist/utils/i18n/helpers/use-locale.js.map +1 -0
- package/dist/utils/i18n/index.d.ts +12 -0
- package/dist/utils/i18n/index.d.ts.map +1 -0
- package/dist/utils/i18n/index.js.map +1 -0
- package/dist/utils/i18n/types.d.ts +3 -0
- package/dist/utils/i18n/types.d.ts.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +16 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/make-normalizer/index.d.ts +31 -0
- package/dist/utils/make-normalizer/index.d.ts.map +1 -0
- package/dist/utils/make-normalizer/index.js.map +1 -0
- package/dist/utils/mds-context/index.d.ts +60 -0
- package/dist/utils/mds-context/index.d.ts.map +1 -0
- package/dist/utils/mds-context/index.js.map +1 -0
- package/package.json +116 -75
- package/components/accordion/index.d.ts +0 -14
- package/components/accordion/item/button.d.ts +0 -6
- package/components/accordion/item/index.d.ts +0 -24
- package/components/accordion/item/index.js.map +0 -1
- package/components/accordion/style.module.scss +0 -110
- package/components/alert/alert.module.scss +0 -229
- package/components/alert/icon.d.ts +0 -9
- package/components/alert/index.d.ts +0 -62
- package/components/alert/index.js.map +0 -1
- package/components/badge/index.d.ts +0 -31
- package/components/badge/index.js.map +0 -1
- package/components/badge/style.module.scss +0 -113
- package/components/badge-count/index.d.ts +0 -15
- package/components/badge-count/index.js.map +0 -1
- package/components/badge-count/style.module.scss +0 -91
- package/components/breadcrumbs/index.d.ts +0 -7
- package/components/breadcrumbs/index.js.map +0 -1
- package/components/breadcrumbs/item/index.d.ts +0 -2
- package/components/breadcrumbs/style.module.scss +0 -183
- package/components/breadcrumbs/truncation-button/index.d.ts +0 -3
- package/components/breadcrumbs/types/index.d.ts +0 -51
- package/components/button/button-primitive.d.ts +0 -5
- package/components/button/button-primitive.js.map +0 -1
- package/components/button/index.d.ts +0 -30
- package/components/button/styles.module.scss +0 -221
- package/components/card/card-thumbnail/index.d.ts +0 -2
- package/components/card/index.d.ts +0 -4
- package/components/card/index.js.map +0 -1
- package/components/card/types.d.ts +0 -53
- package/components/code-block/code-block.module.scss +0 -511
- package/components/code-block/code-lines/index.d.ts +0 -12
- package/components/code-block/code-lines/utils/split-html-into-lines.d.ts +0 -19
- package/components/code-block/code-lines/utils/split-jsx-into-lines.d.ts +0 -21
- package/components/code-block/code-lines/utils/split-jsx-into-lines.js.map +0 -1
- package/components/code-block/hidden-copy-content/index.d.ts +0 -5
- package/components/code-block/hidden-copy-content/index.js.map +0 -1
- package/components/code-block/index.d.ts +0 -55
- package/components/code-block/index.js.map +0 -1
- package/components/code-block/utils/parse-highlighted-lines.d.ts +0 -2
- package/components/code-block/utils/parse-highlighted-lines.js.map +0 -1
- package/components/code-block/utils/process-snippet.d.ts +0 -12
- package/components/code-block/utils/shellwords.d.ts +0 -14
- package/components/code-block/utils/shellwords.js.map +0 -1
- package/components/combo-box-primitive/index.d.ts +0 -69
- package/components/combo-box-primitive/index.js.map +0 -1
- package/components/dialog-primitive/index.d.ts +0 -12
- package/components/dialog-primitive/index.js.map +0 -1
- package/components/disclosure-primitive/index.d.ts +0 -19
- package/components/disclosure-primitive/index.js.map +0 -1
- package/components/disclosure-primitive/use-disclosure-primitive.d.ts +0 -11
- package/components/disclosure-primitive/use-disclosure-primitive.js.map +0 -1
- package/components/dismiss-button/index.d.ts +0 -9
- package/components/dismiss-button/styles.module.scss +0 -31
- package/components/dropdown/index.d.ts +0 -72
- package/components/dropdown/index.js.map +0 -1
- package/components/dropdown/list-item/custom.d.ts +0 -10
- package/components/dropdown/list-item/index.d.ts +0 -19
- package/components/dropdown/list-item/interactive.d.ts +0 -29
- package/components/dropdown/list-item/separator.d.ts +0 -8
- package/components/dropdown/list-item/styles.module.css +0 -222
- package/components/dropdown/list-item/title.d.ts +0 -10
- package/components/dropdown/list-item/title.js.map +0 -1
- package/components/dropdown/toggle-button/index.d.ts +0 -30
- package/components/dropdown/toggle-button/index.js.map +0 -1
- package/components/dropdown/toggle-button/styles.module.scss +0 -54
- package/components/flight-icon/index.d.ts +0 -44
- package/components/flight-icon/index.js.map +0 -1
- package/components/form/checkbox/form-checkbox.module.css +0 -88
- package/components/form/checkbox/index.d.ts +0 -45
- package/components/form/error/index.d.ts +0 -16
- package/components/form/field/index.d.ts +0 -19
- package/components/form/fieldset/index.d.ts +0 -18
- package/components/form/file-input/form-file-input.module.scss +0 -81
- package/components/form/file-input/index.d.ts +0 -27
- package/components/form/helper-text/index.d.ts +0 -11
- package/components/form/indicator/index.d.ts +0 -9
- package/components/form/label/index.d.ts +0 -14
- package/components/form/legend/index.d.ts +0 -12
- package/components/form/radio/form-radio.module.scss +0 -74
- package/components/form/radio/index.d.ts +0 -42
- package/components/form/radio-card/description.d.ts +0 -3
- package/components/form/radio-card/form-radio-card.module.css +0 -153
- package/components/form/radio-card/group.d.ts +0 -11
- package/components/form/radio-card/index.d.ts +0 -48
- package/components/form/radio-card/index.js.map +0 -1
- package/components/form/radio-card/label.d.ts +0 -3
- package/components/form/select/form-select.module.css +0 -89
- package/components/form/select/index.d.ts +0 -22
- package/components/form/select/index.js.map +0 -1
- package/components/form/super-select/form-super-select.module.css +0 -155
- package/components/form/super-select/index.d.ts +0 -55
- package/components/form/super-select/index.js.map +0 -1
- package/components/form/text-input/index.d.ts +0 -98
- package/components/form/text-input/index.js.map +0 -1
- package/components/form/text-input/styles.module.css +0 -158
- package/components/form/textarea/form-textarea.module.css +0 -88
- package/components/form/textarea/index.d.ts +0 -19
- package/components/form/textarea/index.js.map +0 -1
- package/components/form/toggle/form-toggle.module.scss +0 -164
- package/components/form/toggle/index.d.ts +0 -78
- package/components/hds/wrappers/tooltip.d.ts +0 -13
- package/components/icon-tile/index.d.ts +0 -21
- package/components/icon-tile/index.js.map +0 -1
- package/components/icon-tile/style.module.scss +0 -138
- package/components/index.d.ts +0 -60
- package/components/index.js +0 -120
- package/components/index.js.map +0 -1
- package/components/inline-link/index.d.ts +0 -40
- package/components/interactive/index.d.ts +0 -26
- package/components/interactive/index.js.map +0 -1
- package/components/legacy-button/index.d.ts +0 -5
- package/components/legacy-button/index.js.map +0 -1
- package/components/legacy-button/types.d.ts +0 -37
- package/components/legacy-button/utils.d.ts +0 -9
- package/components/legacy-button/utils.js.map +0 -1
- package/components/menu-primitive/index.d.ts +0 -14
- package/components/menu-primitive/index.js.map +0 -1
- package/components/menu-primitive/use-menu-primitive.d.ts +0 -9
- package/components/menu-primitive/use-menu-primitive.js.map +0 -1
- package/components/modal/index.d.ts +0 -13
- package/components/modal/index.js.map +0 -1
- package/components/modal/use-modal.d.ts +0 -8
- package/components/modal/use-modal.js.map +0 -1
- package/components/separator/index.d.ts +0 -10
- package/components/standalone-link/index.d.ts +0 -23
- package/components/standalone-link/index.js.map +0 -1
- package/components/standalone-link/styles.module.scss +0 -166
- package/components/table/index.d.ts +0 -58
- package/components/table/index.js.map +0 -1
- package/components/table/td.d.ts +0 -17
- package/components/table/td.js.map +0 -1
- package/components/table/th-button-tooltip.d.ts +0 -6
- package/components/table/th.d.ts +0 -34
- package/components/table/th.js.map +0 -1
- package/components/table/tr.d.ts +0 -12
- package/components/table/utils.d.ts +0 -16
- package/components/table/utils.js.map +0 -1
- package/components/tabs/index.d.ts +0 -21
- package/components/tabs/index.js.map +0 -1
- package/components/tabs/tab-panel.d.ts +0 -5
- package/components/tabs/tab-panel.js.map +0 -1
- package/components/tabs/tab.d.ts +0 -24
- package/components/tabs/tab.js.map +0 -1
- package/components/tabs/tabs.module.scss +0 -163
- package/components/tabs/use-tabs-context.d.ts +0 -15
- package/components/tabs/use-tabs-context.js.map +0 -1
- package/components/text/index.d.ts +0 -69
- package/components/text/index.js.map +0 -1
- package/components/visualizations/bar-chart/horizontal-chart/dataset-value/index.d.ts +0 -8
- package/components/visualizations/bar-chart/horizontal-chart/dataset-value/index.js +0 -62
- package/components/visualizations/bar-chart/horizontal-chart/dataset-value/index.js.map +0 -1
- package/components/visualizations/bar-chart/horizontal-chart/index.d.ts +0 -44
- package/components/visualizations/bar-chart/horizontal-chart/index.js +0 -104
- package/components/visualizations/bar-chart/horizontal-chart/index.js.map +0 -1
- package/components/visualizations/bar-chart/horizontal-chart/legend/index.d.ts +0 -10
- package/components/visualizations/bar-chart/horizontal-chart/style.module.css +0 -76
- package/components/visualizations/bar-chart/index.d.ts +0 -13
- package/components/visualizations/bar-chart/style.module.css +0 -39
- package/components/visualizations/donut-chart/components/arc-tooltip/index.d.ts +0 -3
- package/components/visualizations/donut-chart/components/external-arc-label/index.d.ts +0 -3
- package/components/visualizations/donut-chart/components/index.d.ts +0 -3
- package/components/visualizations/donut-chart/components/internal-arc-label/index.d.ts +0 -3
- package/components/visualizations/donut-chart/index.d.ts +0 -10
- package/components/visualizations/donut-chart/index.js +0 -90
- package/components/visualizations/donut-chart/index.js.map +0 -1
- package/components/visualizations/donut-chart/styles.module.css +0 -73
- package/components/visualizations/donut-chart/types.d.ts +0 -16
- package/hooks/use-media-query/index.js +0 -16
- package/hooks/use-media-query/index.js.map +0 -1
- package/index.d.ts +0 -3
- package/index.js +0 -163
- package/index.js.map +0 -1
- package/patterns/card/index.d.ts +0 -5
- package/patterns/card/newsroom-card/index.d.ts +0 -15
- package/patterns/card/partner-card/index.d.ts +0 -18
- package/patterns/card/person-card/index.d.ts +0 -15
- package/patterns/card/primitives.d.ts +0 -37
- package/patterns/card/promo-card/index.d.ts +0 -18
- package/patterns/card/resource-card/index.d.ts +0 -16
- package/patterns/card/style.module.css +0 -121
- package/patterns/card/thumbnails/index.d.ts +0 -13
- package/patterns/card/types.d.ts +0 -41
- package/patterns/card/unified-card/index.d.ts +0 -10
- package/patterns/card/unified-card/index.js.map +0 -1
- package/patterns/copy-button/clipboard.d.ts +0 -16
- package/patterns/copy-button/clipboard.js +0 -78
- package/patterns/copy-button/clipboard.js.map +0 -1
- package/patterns/copy-button/index.d.ts +0 -19
- package/patterns/copy-button/index.js +0 -57
- package/patterns/copy-button/index.js.map +0 -1
- package/patterns/index.d.ts +0 -15
- package/patterns/layout/index.d.ts +0 -69
- package/patterns/layout/layout.module.css +0 -72
- package/patterns/product-badge/index.d.ts +0 -11
- package/patterns/product-badge/style.module.css +0 -3
- package/patterns/product-logo/index.d.ts +0 -48
- package/patterns/related-content/index.d.ts +0 -6
- package/patterns/related-content/style.module.css +0 -74
- package/patterns/related-content/types.d.ts +0 -14
- package/style.css +0 -1
- package/styles/mixins/button.scss +0 -279
- package/styles/mixins/focus-ring.scss +0 -75
- package/utils/get-contrast-yiq.d.ts +0 -20
- package/utils/get-contrast-yiq.js.map +0 -1
- package/utils/hooks/use-screen-size.d.ts +0 -5
- package/utils/hooks/use-screen-size.js +0 -10
- package/utils/hooks/use-screen-size.js.map +0 -1
- package/utils/i18n/constants/index.js.map +0 -1
- package/utils/i18n/helpers/index.d.ts +0 -4
- package/utils/i18n/helpers/index.js +0 -8
- package/utils/i18n/helpers/index.js.map +0 -1
- package/utils/i18n/helpers/locale-provider.d.ts +0 -14
- package/utils/i18n/helpers/locale-provider.js +0 -19
- package/utils/i18n/helpers/locale-provider.js.map +0 -1
- package/utils/i18n/helpers/to-smart-sentence-case.d.ts +0 -2
- package/utils/i18n/helpers/to-smart-sentence-case.js.map +0 -1
- package/utils/i18n/helpers/to-smart-title-case.d.ts +0 -2
- package/utils/i18n/helpers/to-smart-title-case.js.map +0 -1
- package/utils/i18n/helpers/use-locale.d.ts +0 -2
- package/utils/i18n/helpers/use-locale.js +0 -14
- package/utils/i18n/helpers/use-locale.js.map +0 -1
- package/utils/i18n/index.d.ts +0 -11
- package/utils/i18n/index.js.map +0 -1
- package/utils/index.d.ts +0 -4
- package/utils/index.js +0 -14
- package/utils/index.js.map +0 -1
- package/utils/make-normalizer/index.d.ts +0 -30
- package/utils/make-normalizer/index.js.map +0 -1
- package/utils/mds-context/index.d.ts +0 -59
- package/utils/mds-context/index.js.map +0 -1
- /package/{components → dist/components}/accordion/index.js +0 -0
- /package/{components → dist/components}/accordion/index.js.map +0 -0
- /package/{components → dist/components}/accordion/item/button.js +0 -0
- /package/{components → dist/components}/accordion/item/button.js.map +0 -0
- /package/{components → dist/components}/accordion/item/index.js +0 -0
- /package/{components → dist/components}/accordion/style.module.scss.js +0 -0
- /package/{components → dist/components}/accordion/style.module.scss.js.map +0 -0
- /package/{components → dist/components}/alert/alert.module.scss.js +0 -0
- /package/{components → dist/components}/alert/alert.module.scss.js.map +0 -0
- /package/{components → dist/components}/alert/icon.js +0 -0
- /package/{components → dist/components}/alert/icon.js.map +0 -0
- /package/{components → dist/components}/alert/index.js +0 -0
- /package/{components → dist/components}/badge/index.js +0 -0
- /package/{components → dist/components}/badge/style.module.scss.js +0 -0
- /package/{components → dist/components}/badge/style.module.scss.js.map +0 -0
- /package/{components → dist/components}/badge-count/index.js +0 -0
- /package/{components → dist/components}/badge-count/style.module.scss.js +0 -0
- /package/{components → dist/components}/badge-count/style.module.scss.js.map +0 -0
- /package/{components → dist/components}/breadcrumbs/index.js +0 -0
- /package/{components → dist/components}/breadcrumbs/item/index.js +0 -0
- /package/{components → dist/components}/breadcrumbs/item/index.js.map +0 -0
- /package/{components → dist/components}/breadcrumbs/style.module.scss.js +0 -0
- /package/{components → dist/components}/breadcrumbs/style.module.scss.js.map +0 -0
- /package/{components → dist/components}/breadcrumbs/truncation-button/index.js +0 -0
- /package/{components → dist/components}/breadcrumbs/truncation-button/index.js.map +0 -0
- /package/{components → dist/components}/button/button-primitive.js +0 -0
- /package/{components → dist/components}/button/index.js +0 -0
- /package/{components → dist/components}/button/index.js.map +0 -0
- /package/{components → dist/components}/button/styles.module.scss.js +0 -0
- /package/{components → dist/components}/button/styles.module.scss.js.map +0 -0
- /package/{components → dist/components}/card/card-thumbnail/card-thumbnail.module.css +0 -0
- /package/{components → dist/components}/card/card-thumbnail/card-thumbnail.module.css.js +0 -0
- /package/{components → dist/components}/card/card-thumbnail/card-thumbnail.module.css.js.map +0 -0
- /package/{components → dist/components}/card/card-thumbnail/index.js +0 -0
- /package/{components → dist/components}/card/card-thumbnail/index.js.map +0 -0
- /package/{components → dist/components}/card/index.js +0 -0
- /package/{components → dist/components}/card/styles.module.css +0 -0
- /package/{components → dist/components}/card/styles.module.css.js +0 -0
- /package/{components → dist/components}/card/styles.module.css.js.map +0 -0
- /package/{components → dist/components}/code-block/code-block.module.scss.js +0 -0
- /package/{components → dist/components}/code-block/code-block.module.scss.js.map +0 -0
- /package/{components → dist/components}/code-block/code-lines/index.js +0 -0
- /package/{components → dist/components}/code-block/code-lines/index.js.map +0 -0
- /package/{components → dist/components}/code-block/code-lines/utils/split-html-into-lines.js +0 -0
- /package/{components → dist/components}/code-block/code-lines/utils/split-html-into-lines.js.map +0 -0
- /package/{components → dist/components}/code-block/code-lines/utils/split-jsx-into-lines.js +0 -0
- /package/{components → dist/components}/code-block/hidden-copy-content/index.js +0 -0
- /package/{components → dist/components}/code-block/index.js +0 -0
- /package/{components → dist/components}/code-block/utils/parse-highlighted-lines.js +0 -0
- /package/{components → dist/components}/code-block/utils/process-snippet.js +0 -0
- /package/{components → dist/components}/code-block/utils/process-snippet.js.map +0 -0
- /package/{components → dist/components}/code-block/utils/shellwords.js +0 -0
- /package/{components → dist/components}/combo-box-primitive/index.js +0 -0
- /package/{components → dist/components}/dialog-primitive/dialog.module.scss +0 -0
- /package/{components → dist/components}/dialog-primitive/dialog.module.scss.js +0 -0
- /package/{components → dist/components}/dialog-primitive/dialog.module.scss.js.map +0 -0
- /package/{components → dist/components}/dialog-primitive/index.js +0 -0
- /package/{components → dist/components}/disclosure-primitive/index.js +0 -0
- /package/{components → dist/components}/disclosure-primitive/styles.module.css +0 -0
- /package/{components → dist/components}/disclosure-primitive/styles.module.css.js +0 -0
- /package/{components → dist/components}/disclosure-primitive/styles.module.css.js.map +0 -0
- /package/{components → dist/components}/disclosure-primitive/use-disclosure-primitive.js +0 -0
- /package/{components → dist/components}/dismiss-button/index.js +0 -0
- /package/{components → dist/components}/dismiss-button/index.js.map +0 -0
- /package/{components → dist/components}/dismiss-button/styles.module.scss.js +0 -0
- /package/{components → dist/components}/dismiss-button/styles.module.scss.js.map +0 -0
- /package/{components → dist/components}/dropdown/index.js +0 -0
- /package/{components → dist/components}/dropdown/list-item/custom.js +0 -0
- /package/{components → dist/components}/dropdown/list-item/custom.js.map +0 -0
- /package/{components → dist/components}/dropdown/list-item/index.js +0 -0
- /package/{components → dist/components}/dropdown/list-item/index.js.map +0 -0
- /package/{components → dist/components}/dropdown/list-item/interactive.js +0 -0
- /package/{components → dist/components}/dropdown/list-item/interactive.js.map +0 -0
- /package/{components → dist/components}/dropdown/list-item/separator.js +0 -0
- /package/{components → dist/components}/dropdown/list-item/separator.js.map +0 -0
- /package/{components → dist/components}/dropdown/list-item/styles.module.css.js +0 -0
- /package/{components → dist/components}/dropdown/list-item/styles.module.css.js.map +0 -0
- /package/{components → dist/components}/dropdown/list-item/title.js +0 -0
- /package/{components → dist/components}/dropdown/styles.module.css +0 -0
- /package/{components → dist/components}/dropdown/styles.module.css.js +0 -0
- /package/{components → dist/components}/dropdown/styles.module.css.js.map +0 -0
- /package/{components → dist/components}/dropdown/toggle-button/index.js +0 -0
- /package/{components → dist/components}/dropdown/toggle-button/styles.module.scss.js +0 -0
- /package/{components → dist/components}/dropdown/toggle-button/styles.module.scss.js.map +0 -0
- /package/{components → dist/components}/flight-icon/flight-icon.module.css +0 -0
- /package/{components → dist/components}/flight-icon/flight-icon.module.css.js +0 -0
- /package/{components → dist/components}/flight-icon/flight-icon.module.css.js.map +0 -0
- /package/{components → dist/components}/flight-icon/index.js +0 -0
- /package/{components → dist/components}/form/checkbox/form-checkbox.module.css.js +0 -0
- /package/{components → dist/components}/form/checkbox/form-checkbox.module.css.js.map +0 -0
- /package/{components → dist/components}/form/checkbox/index.js +0 -0
- /package/{components → dist/components}/form/checkbox/index.js.map +0 -0
- /package/{components → dist/components}/form/error/form-error.module.css +0 -0
- /package/{components → dist/components}/form/error/form-error.module.css.js +0 -0
- /package/{components → dist/components}/form/error/form-error.module.css.js.map +0 -0
- /package/{components → dist/components}/form/error/index.js +0 -0
- /package/{components → dist/components}/form/error/index.js.map +0 -0
- /package/{components → dist/components}/form/field/form-field.module.css +0 -0
- /package/{components → dist/components}/form/field/form-field.module.css.js +0 -0
- /package/{components → dist/components}/form/field/form-field.module.css.js.map +0 -0
- /package/{components → dist/components}/form/field/index.js +0 -0
- /package/{components → dist/components}/form/field/index.js.map +0 -0
- /package/{components → dist/components}/form/fieldset/form-fieldset.module.css +0 -0
- /package/{components → dist/components}/form/fieldset/form-fieldset.module.css.js +0 -0
- /package/{components → dist/components}/form/fieldset/form-fieldset.module.css.js.map +0 -0
- /package/{components → dist/components}/form/fieldset/index.js +0 -0
- /package/{components → dist/components}/form/fieldset/index.js.map +0 -0
- /package/{components → dist/components}/form/file-input/form-file-input.module.scss.js +0 -0
- /package/{components → dist/components}/form/file-input/form-file-input.module.scss.js.map +0 -0
- /package/{components → dist/components}/form/file-input/index.js +0 -0
- /package/{components → dist/components}/form/file-input/index.js.map +0 -0
- /package/{components → dist/components}/form/helper-text/form-helper-text.module.css +0 -0
- /package/{components → dist/components}/form/helper-text/form-helper-text.module.css.js +0 -0
- /package/{components → dist/components}/form/helper-text/form-helper-text.module.css.js.map +0 -0
- /package/{components → dist/components}/form/helper-text/index.js +0 -0
- /package/{components → dist/components}/form/helper-text/index.js.map +0 -0
- /package/{components → dist/components}/form/indicator/form-indicator.module.css +0 -0
- /package/{components → dist/components}/form/indicator/form-indicator.module.css.js +0 -0
- /package/{components → dist/components}/form/indicator/form-indicator.module.css.js.map +0 -0
- /package/{components → dist/components}/form/indicator/index.js +0 -0
- /package/{components → dist/components}/form/indicator/index.js.map +0 -0
- /package/{components → dist/components}/form/label/form-label.module.css +0 -0
- /package/{components → dist/components}/form/label/form-label.module.css.js +0 -0
- /package/{components → dist/components}/form/label/form-label.module.css.js.map +0 -0
- /package/{components → dist/components}/form/label/index.js +0 -0
- /package/{components → dist/components}/form/label/index.js.map +0 -0
- /package/{components → dist/components}/form/legend/form-legend.module.css +0 -0
- /package/{components → dist/components}/form/legend/form-legend.module.css.js +0 -0
- /package/{components → dist/components}/form/legend/form-legend.module.css.js.map +0 -0
- /package/{components → dist/components}/form/legend/index.js +0 -0
- /package/{components → dist/components}/form/legend/index.js.map +0 -0
- /package/{components → dist/components}/form/radio/form-radio.module.scss.js +0 -0
- /package/{components → dist/components}/form/radio/form-radio.module.scss.js.map +0 -0
- /package/{components → dist/components}/form/radio/index.js +0 -0
- /package/{components → dist/components}/form/radio/index.js.map +0 -0
- /package/{components → dist/components}/form/radio-card/RadioCardStory.css +0 -0
- /package/{components → dist/components}/form/radio-card/description.js +0 -0
- /package/{components → dist/components}/form/radio-card/description.js.map +0 -0
- /package/{components → dist/components}/form/radio-card/form-radio-card.module.css.js +0 -0
- /package/{components → dist/components}/form/radio-card/form-radio-card.module.css.js.map +0 -0
- /package/{components → dist/components}/form/radio-card/group.js +0 -0
- /package/{components → dist/components}/form/radio-card/group.js.map +0 -0
- /package/{components → dist/components}/form/radio-card/index.js +0 -0
- /package/{components → dist/components}/form/radio-card/label.js +0 -0
- /package/{components → dist/components}/form/radio-card/label.js.map +0 -0
- /package/{components → dist/components}/form/select/form-select.module.css.js +0 -0
- /package/{components → dist/components}/form/select/form-select.module.css.js.map +0 -0
- /package/{components → dist/components}/form/select/index.js +0 -0
- /package/{components → dist/components}/form/super-select/form-super-select.module.css.js +0 -0
- /package/{components → dist/components}/form/super-select/form-super-select.module.css.js.map +0 -0
- /package/{components → dist/components}/form/super-select/index.js +0 -0
- /package/{components → dist/components}/form/text-input/index.js +0 -0
- /package/{components → dist/components}/form/text-input/styles.module.css.js +0 -0
- /package/{components → dist/components}/form/text-input/styles.module.css.js.map +0 -0
- /package/{components → dist/components}/form/textarea/form-textarea.module.css.js +0 -0
- /package/{components → dist/components}/form/textarea/form-textarea.module.css.js.map +0 -0
- /package/{components → dist/components}/form/textarea/index.js +0 -0
- /package/{components → dist/components}/form/toggle/form-toggle.module.scss.js +0 -0
- /package/{components → dist/components}/form/toggle/form-toggle.module.scss.js.map +0 -0
- /package/{components → dist/components}/form/toggle/index.js +0 -0
- /package/{components → dist/components}/form/toggle/index.js.map +0 -0
- /package/{components → dist/components}/hds/wrappers/tooltip.js +0 -0
- /package/{components → dist/components}/hds/wrappers/tooltip.js.map +0 -0
- /package/{components → dist/components}/icon-tile/index.js +0 -0
- /package/{components → dist/components}/icon-tile/style.module.scss.js +0 -0
- /package/{components → dist/components}/icon-tile/style.module.scss.js.map +0 -0
- /package/{components → dist/components}/inline-link/index.js +0 -0
- /package/{components → dist/components}/inline-link/index.js.map +0 -0
- /package/{components → dist/components}/inline-link/inline-link.module.css +0 -0
- /package/{components → dist/components}/inline-link/inline-link.module.css.js +0 -0
- /package/{components → dist/components}/inline-link/inline-link.module.css.js.map +0 -0
- /package/{components → dist/components}/interactive/index.js +0 -0
- /package/{components → dist/components}/legacy-button/index.js +0 -0
- /package/{components → dist/components}/legacy-button/utils.js +0 -0
- /package/{components → dist/components}/menu-primitive/index.js +0 -0
- /package/{components → dist/components}/menu-primitive/styles.module.css +0 -0
- /package/{components → dist/components}/menu-primitive/styles.module.css.js +0 -0
- /package/{components → dist/components}/menu-primitive/styles.module.css.js.map +0 -0
- /package/{components → dist/components}/menu-primitive/use-menu-primitive.js +0 -0
- /package/{components → dist/components}/modal/index.js +0 -0
- /package/{components → dist/components}/modal/modal.module.css +0 -0
- /package/{components → dist/components}/modal/modal.module.css.js +0 -0
- /package/{components → dist/components}/modal/modal.module.css.js.map +0 -0
- /package/{components → dist/components}/modal/use-modal.js +0 -0
- /package/{components → dist/components}/separator/index.js +0 -0
- /package/{components → dist/components}/separator/index.js.map +0 -0
- /package/{components → dist/components}/separator/separator.module.css +0 -0
- /package/{components → dist/components}/separator/separator.module.css.js +0 -0
- /package/{components → dist/components}/separator/separator.module.css.js.map +0 -0
- /package/{components → dist/components}/standalone-link/index.js +0 -0
- /package/{components → dist/components}/standalone-link/styles.module.scss.js +0 -0
- /package/{components → dist/components}/standalone-link/styles.module.scss.js.map +0 -0
- /package/{components → dist/components}/table/index.js +0 -0
- /package/{components → dist/components}/table/table.module.scss +0 -0
- /package/{components → dist/components}/table/table.module.scss.js +0 -0
- /package/{components → dist/components}/table/table.module.scss.js.map +0 -0
- /package/{components → dist/components}/table/td.js +0 -0
- /package/{components → dist/components}/table/th-button-tooltip.js +0 -0
- /package/{components → dist/components}/table/th-button-tooltip.js.map +0 -0
- /package/{components → dist/components}/table/th.js +0 -0
- /package/{components → dist/components}/table/tr.js +0 -0
- /package/{components → dist/components}/table/tr.js.map +0 -0
- /package/{components → dist/components}/table/utils.js +0 -0
- /package/{components → dist/components}/tabs/index.js +0 -0
- /package/{components → dist/components}/tabs/tab-panel.js +0 -0
- /package/{components → dist/components}/tabs/tab.js +0 -0
- /package/{components → dist/components}/tabs/tabs.module.scss.js +0 -0
- /package/{components → dist/components}/tabs/tabs.module.scss.js.map +0 -0
- /package/{components → dist/components}/tabs/use-tabs-context.js +0 -0
- /package/{components → dist/components}/text/index.js +0 -0
- /package/{components → dist/components}/text/style.module.scss +0 -0
- /package/{components → dist/components}/text/style.module.scss.js +0 -0
- /package/{components → dist/components}/text/style.module.scss.js.map +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/dataset-value/style.module.css +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/dataset-value/style.module.css.js +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/dataset-value/style.module.css.js.map +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/legend/index.js +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/legend/index.js.map +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/legend/style.module.css +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/legend/style.module.css.js +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/legend/style.module.css.js.map +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/style.module.css.js +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/horizontal-chart/style.module.css.js.map +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/index.js +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/index.js.map +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/style.module.css.js +0 -0
- /package/{components → dist/components}/visualizations/bar-chart/style.module.css.js.map +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/arc-tooltip/index.js +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/arc-tooltip/index.js.map +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/arc-tooltip/styles.module.css +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/arc-tooltip/styles.module.css.js +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/arc-tooltip/styles.module.css.js.map +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/external-arc-label/index.js +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/external-arc-label/index.js.map +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/external-arc-label/styles.module.css +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/external-arc-label/styles.module.css.js +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/external-arc-label/styles.module.css.js.map +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/internal-arc-label/index.js +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/internal-arc-label/index.js.map +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/internal-arc-label/styles.module.css +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/internal-arc-label/styles.module.css.js +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/components/internal-arc-label/styles.module.css.js.map +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/styles.module.css.js +0 -0
- /package/{components → dist/components}/visualizations/donut-chart/styles.module.css.js.map +0 -0
- /package/{patterns → dist/patterns}/card/newsroom-card/index.js +0 -0
- /package/{patterns → dist/patterns}/card/newsroom-card/index.js.map +0 -0
- /package/{patterns → dist/patterns}/card/newsroom-card/style.module.css +0 -0
- /package/{patterns → dist/patterns}/card/newsroom-card/style.module.css.js +0 -0
- /package/{patterns → dist/patterns}/card/newsroom-card/style.module.css.js.map +0 -0
- /package/{patterns → dist/patterns}/card/partner-card/index.js +0 -0
- /package/{patterns → dist/patterns}/card/partner-card/index.js.map +0 -0
- /package/{patterns → dist/patterns}/card/partner-card/style.module.css +0 -0
- /package/{patterns → dist/patterns}/card/partner-card/style.module.css.js +0 -0
- /package/{patterns → dist/patterns}/card/partner-card/style.module.css.js.map +0 -0
- /package/{patterns → dist/patterns}/card/person-card/index.js +0 -0
- /package/{patterns → dist/patterns}/card/person-card/index.js.map +0 -0
- /package/{patterns → dist/patterns}/card/person-card/style.module.css +0 -0
- /package/{patterns → dist/patterns}/card/person-card/style.module.css.js +0 -0
- /package/{patterns → dist/patterns}/card/person-card/style.module.css.js.map +0 -0
- /package/{patterns → dist/patterns}/card/primitives.js +0 -0
- /package/{patterns → dist/patterns}/card/primitives.js.map +0 -0
- /package/{patterns → dist/patterns}/card/promo-card/index.js +0 -0
- /package/{patterns → dist/patterns}/card/promo-card/index.js.map +0 -0
- /package/{patterns → dist/patterns}/card/resource-card/index.js +0 -0
- /package/{patterns → dist/patterns}/card/resource-card/index.js.map +0 -0
- /package/{patterns → dist/patterns}/card/style.module.css.js +0 -0
- /package/{patterns → dist/patterns}/card/style.module.css.js.map +0 -0
- /package/{patterns → dist/patterns}/card/thumbnails/index.js +0 -0
- /package/{patterns → dist/patterns}/card/thumbnails/index.js.map +0 -0
- /package/{patterns → dist/patterns}/card/unified-card/index.js +0 -0
- /package/{patterns → dist/patterns}/copy-button/style.module.css +0 -0
- /package/{patterns → dist/patterns}/copy-button/style.module.css.js +0 -0
- /package/{patterns → dist/patterns}/copy-button/style.module.css.js.map +0 -0
- /package/{patterns → dist/patterns}/index.js +0 -0
- /package/{patterns → dist/patterns}/index.js.map +0 -0
- /package/{patterns → dist/patterns}/layout/index.js +0 -0
- /package/{patterns → dist/patterns}/layout/index.js.map +0 -0
- /package/{patterns → dist/patterns}/layout/layout.module.css.js +0 -0
- /package/{patterns → dist/patterns}/layout/layout.module.css.js.map +0 -0
- /package/{patterns → dist/patterns}/product-badge/index.js +0 -0
- /package/{patterns → dist/patterns}/product-badge/index.js.map +0 -0
- /package/{patterns → dist/patterns}/product-badge/style.module.css.js +0 -0
- /package/{patterns → dist/patterns}/product-badge/style.module.css.js.map +0 -0
- /package/{patterns → dist/patterns}/product-logo/index.js +0 -0
- /package/{patterns → dist/patterns}/product-logo/index.js.map +0 -0
- /package/{patterns → dist/patterns}/product-logo/product-logo.module.css +0 -0
- /package/{patterns → dist/patterns}/product-logo/product-logo.module.css.js +0 -0
- /package/{patterns → dist/patterns}/product-logo/product-logo.module.css.js.map +0 -0
- /package/{patterns → dist/patterns}/related-content/index.js +0 -0
- /package/{patterns → dist/patterns}/related-content/index.js.map +0 -0
- /package/{patterns → dist/patterns}/related-content/style.module.css.js +0 -0
- /package/{patterns → dist/patterns}/related-content/style.module.css.js.map +0 -0
- /package/{utils → dist/utils}/get-contrast-yiq.js +0 -0
- /package/{utils → dist/utils}/i18n/constants/index.js +0 -0
- /package/{utils → dist/utils}/i18n/helpers/to-smart-sentence-case.js +0 -0
- /package/{utils → dist/utils}/i18n/helpers/to-smart-title-case.js +0 -0
- /package/{utils → dist/utils}/i18n/index.js +0 -0
- /package/{utils → dist/utils}/make-normalizer/index.js +0 -0
- /package/{utils → dist/utils}/mds-context/index.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-jsx-into-lines.js","sources":["../../../../../src/components/code-block/code-lines/utils/split-jsx-into-lines.ts"],"sourcesContent":["import { Children, type ReactNode } from 'react'\n\n/**\n * Given an array of React children,\n * split the array on newlines, grouping consecutive\n * non-newline tokens in individual line elements,\n * and return an array of React <span> elements,\n * each of which will contain a single line.\n *\n * Note that JSX tokens should not be multi-line,\n * ie, all newline characters should be surfaced\n * to the top level rather than nested in syntax\n * highlighting tokens (otherwise the line-by-line\n * markup we render would be invalid). We have\n * a rehype plugin we include with our markdown defaults\n * to ensure newlines are surfaced in this way.\n *\n * @param {*} codeJsx Array of JSX elements, some of which may be newline strings\n * @returns Array of JSX <span> elements representing individual lines\n */\nfunction splitJsxIntoLines(codeJsx: React.ReactNode | React.ReactNode[]) {\n\tconst linesArray = Children.toArray(codeJsx)\n\t/**\n\t * Many newlines take the form of a literal newline string, `\\n`.\n\t * However, some newlines take different forms. We expect these to be tagged\n\t * with an `empty-line` className by our rehype code plugins.\n\t * Here we detect the latter types of newline, and convert them to the former.\n\t */\n\tconst withNormalizedNewlines = linesArray.map((token) => {\n\t\t// If our token has an `empty-line` className, use a literal newline\n\t\t// rather than the token itself (which would render, but with zero height)\n\t\tif (typeof token === 'object' && 'props' in token) {\n\t\t\tif (token.props.className?.includes('empty-line')) {\n\t\t\t\treturn '\\n'\n\t\t\t}\n\t\t}\n\t\t// Otherwise, return the token unmodified\n\t\treturn token\n\t})\n\t// Filter out any surfaces newlines, that are \"in between\"\n\t// other lines of code. Special exceptions should be made for:\n\t// 1. newlines at start or end of array - should be rendered as blank lines\n\t// 2. consecutive newlines - \"n\" consecutive newlines should be rendered\n\t// as \"n - 1\" blank lines.\n\tconst accumulatedLines = withNormalizedNewlines.reduce(\n\t\t(acc, token, idx) => {\n\t\t\tconst isLastLine = idx === withNormalizedNewlines.length - 1\n\t\t\tconst isNewline = token === '\\n'\n\t\t\tconst isInlineToken = token !== '\\n'\n\t\t\t// For newlines, increment the consecutive newline counter\n\t\t\tif (isNewline) acc.consecutiveNewlines++\n\t\t\t// If this token is an inline token, and we have\n\t\t\t// pending newlines, then start a new line,\n\t\t\t// adding blank lines for consecutive newlines as needed\n\t\t\tconst isFinalNewline = isNewline && isLastLine\n\t\t\tconst hasNewlines = acc.consecutiveNewlines > 0\n\t\t\tconst needsNewlines = (isInlineToken || isFinalNewline) && hasNewlines\n\t\t\tif (needsNewlines) {\n\t\t\t\t// If there are any tokens in the current line, add them as a new line\n\t\t\t\tif (acc.currentLine.length > 0) {\n\t\t\t\t\tacc.lines.push(acc.currentLine)\n\t\t\t\t\tacc.currentLine = []\n\t\t\t\t}\n\t\t\t\t// Add blank lines for each consecutive newline, then reset the counter\n\t\t\t\tfor (let i = 1; i < acc.consecutiveNewlines; i++) {\n\t\t\t\t\tacc.lines.push('')\n\t\t\t\t}\n\t\t\t\tacc.consecutiveNewlines = 0\n\t\t\t}\n\t\t\t// If this token is an inline token,\n\t\t\t// append it to the current line\n\t\t\tif (isInlineToken) {\n\t\t\t\tacc.currentLine.push(token)\n\t\t\t\t// If this is the last line,\n\t\t\t\t// then ensure the current line\n\t\t\t\t// has been pushed to the lines array\n\t\t\t\tif (isLastLine) acc.lines.push(acc.currentLine)\n\t\t\t}\n\t\t\treturn acc\n\t\t},\n\t\t{\n\t\t\tlines: [] as ReactNode[],\n\t\t\tcurrentLine: [] as ReactNode[],\n\t\t\tconsecutiveNewlines: 1, // Start at 1 to handle leading newlines\n\t\t},\n\t)\n\treturn accumulatedLines.lines\n}\n\nexport default splitJsxIntoLines\n"],"names":["splitJsxIntoLines","codeJsx","withNormalizedNewlines","Children","token","acc","idx","isLastLine","isNewline","isInlineToken","isFinalNewline","hasNewlines","i"],"mappings":";AAoBA,SAASA,EAAkBC,GAA8C;AAQxE,QAAMC,IAPaC,EAAS,QAAQF,CAAO,EAOD,IAAI,CAACG,MAG1C,OAAOA,KAAU,YAAY,WAAWA,KACvCA,EAAM,MAAM,WAAW,SAAS,YAAY,IACxC;AAAA,IAIFA,CACP;AAgDD,SA1CyBF,EAAuB;AAAA,IAC/C,CAACG,GAAKD,GAAOE,MAAQ;AACpB,YAAMC,IAAaD,MAAQJ,EAAuB,SAAS,GACrDM,IAAYJ,MAAU;AAAA,GACtBK,IAAgBL,MAAU;AAAA;AAEhC,MAAII,KAAWH,EAAI;AAInB,YAAMK,IAAiBF,KAAaD,GAC9BI,IAAcN,EAAI,sBAAsB;AAE9C,WADuBI,KAAiBC,MAAmBC,GACxC;AAElB,QAAIN,EAAI,YAAY,SAAS,MAC5BA,EAAI,MAAM,KAAKA,EAAI,WAAW,GAC9BA,EAAI,cAAc,CAAA;AAGnB,iBAASO,IAAI,GAAGA,IAAIP,EAAI,qBAAqBO;AAC5C,UAAAP,EAAI,MAAM,KAAK,EAAE;AAElB,QAAAA,EAAI,sBAAsB;AAAA,MAC3B;AAGA,aAAII,MACHJ,EAAI,YAAY,KAAKD,CAAK,GAItBG,KAAYF,EAAI,MAAM,KAAKA,EAAI,WAAW,IAExCA;AAAA,IACR;AAAA,IACA;AAAA,MACC,OAAO,CAAA;AAAA,MACP,aAAa,CAAA;AAAA,MACb,qBAAqB;AAAA;AAAA,IAAA;AAAA,EACtB,EAEuB;AACzB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/code-block/hidden-copy-content/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAqCvE,QAAA,MAAM,iBAAiB;UA3BJ,SAAS;kDA2BoC,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/code-block/hidden-copy-content/index.tsx"],"sourcesContent":["'use client'\n\nimport { forwardRef, useEffect, useState, type ReactNode } from 'react'\n\n/**\n * This hidden element acts solely as a container\n * that we can fetch textContent to copy to clipboard.\n * This allows to ignore the \"how will we copy this cleanly\"\n * concern when splitting code into lines, and adding\n * line numbers and so on in other parts of code-block.\n */\nconst HiddenCopyContentComponent = (\n\t{ code }: { code: ReactNode },\n\tcopyRef: React.ForwardedRef<HTMLPreElement>,\n) => {\n\tconst [isClient, setIsClient] = useState(false)\n\n\tuseEffect(() => {\n\t\tsetIsClient(true)\n\t}, [])\n\n\t/**\n\t * We are avoiding SSR here as this component is only used for the copy-to-clipboard interaction, and so rendering\n\t * the text content of the code introduces duplicate markup and some difficult-to-debug hydration mismatches.\n\t * By the time someone interacts with the copy-to-clipboard functionality, this should be rendered.\n\t */\n\tif (!isClient) return null\n\n\treturn (\n\t\t<pre ref={copyRef} style={{ display: 'none' }}>\n\t\t\t{typeof code === 'string' ? (\n\t\t\t\t<span dangerouslySetInnerHTML={{ __html: code }} />\n\t\t\t) : (\n\t\t\t\tcode\n\t\t\t)}\n\t\t</pre>\n\t)\n}\n\nconst HiddenCopyContent = forwardRef(HiddenCopyContentComponent)\n\nexport { HiddenCopyContent }\n"],"names":["HiddenCopyContentComponent","code","copyRef","isClient","setIsClient","useState","useEffect","jsx"],"mappings":";;;AAeC,MAAAA,IAAgC,CAAA,EAAA,MAAAC,EAAS,GAAAC,MAAK;AAE9C,QAAA,CAAAC,GAAgBC,CAAA,IAAAC,EAAA,EAAA;AAWhB,SAVCC,EAAA,MAAY;AACb,IAAAF,EAAK,EAAA;AAAA,EAOL,GAAA,CAAI,CAAC,OAWN,gBAAAG,EAAA,OAAA,EAAA,KAAAL,GAAA,OAAA,EAAA,SAAA,OAAA,GAAA,UAAA,OAAAD,KAAA,WAAA,gBAAAM,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAAN,EAAA,EAAA,CAAA,IAAAA,EAAA,CAAA;AAEA;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* ALERT: This component is a combination of logic from the official HashiCorp
|
|
4
|
+
* Design System CodeBlock component and the CodeBlock component written by the
|
|
5
|
+
* Web Presence Team. The official component relies on client-side rendering
|
|
6
|
+
* for the calculation of line-heights for line numbers, but this is something
|
|
7
|
+
* we want to be able to achieve without client-side rendering.
|
|
8
|
+
*/
|
|
9
|
+
interface CodeBlockProps {
|
|
10
|
+
/**
|
|
11
|
+
* The text/code content for the CodeBlock. The component encodes this
|
|
12
|
+
* argument before displaying it. Should be a pre-highlighted string
|
|
13
|
+
* generated by Prism.js or Shiki.
|
|
14
|
+
*/
|
|
15
|
+
value: ReactNode;
|
|
16
|
+
/**
|
|
17
|
+
* The coding language to use for syntax highlighting. If you need
|
|
18
|
+
* additional languages contact the Design Systems Team.
|
|
19
|
+
*/
|
|
20
|
+
language?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Applies rounded borders to the component. When used within another
|
|
23
|
+
* component or when the context requires it, you can turn it off.
|
|
24
|
+
*/
|
|
25
|
+
isStandalone?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Used to control whether a copy button for copying the code/text content
|
|
28
|
+
* will be displayed.
|
|
29
|
+
*/
|
|
30
|
+
hasCopyButton?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Used to control display of line numbers.
|
|
33
|
+
*/
|
|
34
|
+
hasLineNumbers?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Accepts a list or range of line numbers to highlight.
|
|
37
|
+
* (Examples: `2, 4`,`6-10`)
|
|
38
|
+
*/
|
|
39
|
+
highlightLines?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Accepts any valid CSS unit. If the CodeBlock content exceeds the maximum
|
|
42
|
+
* height a vertical scrollbar is enabled. This value applies to the code
|
|
43
|
+
* content only and does not include the header element (title and/or description).
|
|
44
|
+
*/
|
|
45
|
+
maxHeight?: string;
|
|
46
|
+
title?: ReactNode;
|
|
47
|
+
description?: ReactNode;
|
|
48
|
+
className?: string;
|
|
49
|
+
}
|
|
50
|
+
declare const CodeBlock: {
|
|
51
|
+
({ title, description, language, value, isStandalone, hasCopyButton, hasLineNumbers, highlightLines, maxHeight, className, }: CodeBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
52
|
+
displayName: string;
|
|
53
|
+
};
|
|
54
|
+
export type { CodeBlockProps };
|
|
55
|
+
export { CodeBlock };
|
|
56
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AASrD;;;;;;GAMG;AAEH,UAAU,cAAc;IACvB;;;;OAIG;IACH,KAAK,EAAE,SAAS,CAAA;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,QAAA,MAAM,SAAS;kIAWZ,cAAc;;CA2EhB,CAAA;AAID,YAAY,EAAE,cAAc,EAAE,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/code-block/index.tsx"],"sourcesContent":["'use client'\n\nimport { useId, useRef, type ReactNode } from 'react'\nimport classNames from 'classnames'\nimport { Text } from '../text'\nimport { CodeLines } from './code-lines'\nimport { HiddenCopyContent } from './hidden-copy-content'\nimport processSnippet from './utils/process-snippet'\nimport { CopyButton } from '../../patterns/copy-button'\nimport s from './code-block.module.scss'\n\n/**\n * ALERT: This component is a combination of logic from the official HashiCorp\n * Design System CodeBlock component and the CodeBlock component written by the\n * Web Presence Team. The official component relies on client-side rendering\n * for the calculation of line-heights for line numbers, but this is something\n * we want to be able to achieve without client-side rendering.\n */\n\ninterface CodeBlockProps {\n\t/**\n\t * The text/code content for the CodeBlock. The component encodes this\n\t * argument before displaying it. Should be a pre-highlighted string\n\t * generated by Prism.js or Shiki.\n\t */\n\tvalue: ReactNode\n\n\t/**\n\t * The coding language to use for syntax highlighting. If you need\n\t * additional languages contact the Design Systems Team.\n\t */\n\tlanguage?: string\n\n\t/**\n\t * Applies rounded borders to the component. When used within another\n\t * component or when the context requires it, you can turn it off.\n\t */\n\tisStandalone?: boolean\n\n\t/**\n\t * Used to control whether a copy button for copying the code/text content\n\t * will be displayed.\n\t */\n\thasCopyButton?: boolean\n\n\t/**\n\t * Used to control display of line numbers.\n\t */\n\thasLineNumbers?: boolean\n\n\t/**\n\t * Accepts a list or range of line numbers to highlight.\n\t * (Examples: `2, 4`,`6-10`)\n\t */\n\thighlightLines?: string\n\n\t/**\n\t * Accepts any valid CSS unit. If the CodeBlock content exceeds the maximum\n\t * height a vertical scrollbar is enabled. This value applies to the code\n\t * content only and does not include the header element (title and/or description).\n\t */\n\tmaxHeight?: string\n\ttitle?: ReactNode\n\tdescription?: ReactNode\n\tclassName?: string\n}\n\nconst CodeBlock = ({\n\ttitle,\n\tdescription,\n\tlanguage,\n\tvalue,\n\tisStandalone = true,\n\thasCopyButton,\n\thasLineNumbers = true,\n\thighlightLines,\n\tmaxHeight = 'auto',\n\tclassName,\n}: CodeBlockProps) => {\n\tconst copyRef = useRef<HTMLPreElement>(null)\n\tconst preCodeId = useId()\n\n\treturn (\n\t\t<div\n\t\t\tclassName={classNames(\n\t\t\t\ts['code-block'],\n\t\t\t\ts.dark,\n\t\t\t\t{\n\t\t\t\t\t[s[`language-${language}`]]: language,\n\t\t\t\t\t[s['is-standalone']]: isStandalone,\n\t\t\t\t\t[s['line-numbers']]: hasLineNumbers,\n\t\t\t\t},\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className={s.header}>\n\t\t\t\t{title && (\n\t\t\t\t\t<Text.HDSBody\n\t\t\t\t\t\tsize=\"200\"\n\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\tclassName={s.title}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text.HDSBody>\n\t\t\t\t)}\n\t\t\t\t{description && (\n\t\t\t\t\t<Text.HDSBody tag=\"p\" size=\"100\" className={s.description}>\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text.HDSBody>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className={s.body}>\n\t\t\t\t{/**\n\t\t\t\t * NOTE: ideally we'd keep the markup of this component in lockstep\n\t\t\t\t * with the markup of the Helios code block. However, we also need\n\t\t\t\t * to support \"clever\" copying of snippets, parsing out shell\n\t\t\t\t * prompt characters like `$` from output, as this is a common\n\t\t\t\t * practice in our tutorial and documentation content. So, this\n\t\t\t\t * HiddenCopyContent component is one divergence from the markup\n\t\t\t\t * of the Helios code block.\n\t\t\t\t */}\n\t\t\t\t<HiddenCopyContent code={value} ref={copyRef} />\n\t\t\t\t<pre className={s.code} id={preCodeId} style={{ maxHeight }}>\n\t\t\t\t\t<code>\n\t\t\t\t\t\t<CodeLines\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\thighlightLines={highlightLines}\n\t\t\t\t\t\t\thasLineNumbers={hasLineNumbers}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</code>\n\t\t\t\t</pre>\n\t\t\t\t{hasCopyButton && (\n\t\t\t\t\t<CopyButton\n\t\t\t\t\t\tclassName={s['copy-button']}\n\t\t\t\t\t\taria-describedby={preCodeId}\n\t\t\t\t\t\tgetTextFn={() => {\n\t\t\t\t\t\t\tconst rawSnippet = copyRef.current?.textContent\n\t\t\t\t\t\t\tif (!rawSnippet) {\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\"`code-block` - Couldn't find text content to copy.\",\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn processSnippet(rawSnippet)\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttext=\"Copy\"\n\t\t\t\t\t\tisIconOnly\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nCodeBlock.displayName = 'CodeBlock'\n\nexport type { CodeBlockProps }\nexport { CodeBlock }\n"],"names":["CodeBlock","title","description","language","value","isStandalone","hasCopyButton","hasLineNumbers","highlightLines","maxHeight","className","copyRef","jsxs","classNames","s","jsx","Text","HiddenCopyContent","preCodeId","CodeLines","CopyButton","rawSnippet","processSnippet"],"mappings":";;;;;;;;;;AAmEmB,MAClBA,IAAA,CAAA;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC,IAAA;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC,IAAA;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC,IAAA;AAAA,EACD,WAAAC;AACC;AACA,QAAMC,MAAY,IAAM,SAGvB;AAAA,SAAC,gBAAAC;AAAA,IAAA;AAAA,IAAA;AAAA,MACW,WACRC;AAAA,QACFC,EAAE,YAAA;AAAA,QACFA,EAAA;AAAA,QAAA;AAAA,UAEC,CAACA,EAAE,YAAAX,CAAmB,EAAA,CAAA,GAAAA;AAAA,UACtB,CAACW,EAAE,eAAe,CAAA,GAAGT;AAAA,UACtB,CAAAS,EAAA,cAAA,CAAA,GAAAP;AAAA,QACA;AAAA,QACDG;AAAA,MAEA;AAAA,MAAA,UAAA;AAAA,iCAEE,EAAA,WAAAI,EAAA,QAAA,UAAA;AAAA,UAAAb,KAAM,gBAAAc;AAAA,YAALC,EAAA;AAAA,YAAA;AAAA,cAEA,MAAI;AAAA,cACJ,KAAA;AAAA,cACA,QAAA;AAAA,cAEC,WAAAF,EAAA;AAAA,cAAA,UAAAb;AAAA,YACF;AAAA,UAEA;AAAA,eAKF,gBAAAc,EAAAC,EAAA,SAAA,EAAA,KAAA,KAAA,MAAA,OAAA,WAAAF,EAAA,aAAA,UAAAZ,EAAA,CAAA;AAAA,QAAA,EAAA,CAAA;AAAA,QAWC,gBAAAU,EAAA,OAAC,EAAA,WAAAE,EAAkB,MAAM,UAAO;AAAA,UAChC,gBAAAC,EAACE,GAAI,EAAW,MAAEb,GAAU,KAAAO,EAAW,CAAA;AAAA,UAEpC,gBAAAI,EAAA,OAAA,EAAA,WAAAD,EAAA,MAAA,IAAAI,GAAA,OAAA,EAAA,WAAAT,EAAA,GAAA,UAAA,gBAAAM,EAAA,QAAA,EAAA,UAAA,gBAAAA;AAAA,YAAAI;AAAA,YAAA;AAAA,cAEA,OAAAf;AAAA,cACA,gBAAAI;AAAA,cAAA,gBAAAD;AAAA;UAIF,EAAA,CAAA,EAAA,CAAA;AAAA,UACAD,KAAC,gBAAAS;AAAA,YAAAK;AAAA,YAAA;AAAA,cAEA,WAAAN,EAAA,aAAkB;AAAA,cAClB,oBAAiBI;AAAA,cAChB,WAAM,MAAA;AACN,sBAAKG,IAAYV,EAAA,SAAA;AAChB,oBAAA,CAAAU;AAAU,wBACT,IAAA;AAAA,oBACD;AAAA,kBACD;AAED,uBAAAC,EAAAD,CAAA;AAAA,cACA;AAAA,cACA,MAAA;AAAA,cACA,YAAK;AAAA,cAAA,MAAA;AAAA,YAAA;AAAA,UACN;AAAA,QAEF,EAAA,CAAA;AAAA,MAAA;AAAA,IACD;AAAA,EAEF;AAEA;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-highlighted-lines.d.ts","sourceRoot":"","sources":["../../../../src/components/code-block/utils/parse-highlighted-lines.ts"],"names":[],"mappings":"AAAA,iBAAS,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,YAsBvD;AAqCD,eAAe,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-highlighted-lines.js","sources":["../../../../src/components/code-block/utils/parse-highlighted-lines.ts"],"sourcesContent":["function parseHighlightedLines(string?: string | boolean) {\n\tif (typeof string == 'undefined' || string === false || string === '') {\n\t\treturn []\n\t}\n\n\tif (typeof string !== 'string') {\n\t\tthrow new Error(\n\t\t\t`The highlight prop must be a string. Received a value of type \"${typeof string}\" instead.`,\n\t\t)\n\t}\n\n\tconst hasValidChars = /^[-,0-9\\s]+$/.test(string)\n\tif (!hasValidChars) {\n\t\tthrow new Error(\n\t\t\t`The highlight prop must be a comma-separated list of single integers or ranges with a single dash between two integers. Found invalid characters: \"${string}\".`,\n\t\t)\n\t}\n\n\tconst parts = string.split(',')\n\treturn parts.reduce((acc, part) => {\n\t\treturn acc.concat(parsePart(part))\n\t}, [] as number[])\n}\n\nfunction parsePart(string: string): number[] {\n\tconst dashParts = string.split('-')\n\tif (dashParts.length > 2) {\n\t\tthrow new Error(\n\t\t\t`Each comma-separated value in the highlight prop must be either a single integer, or a range with a single dash between two integers. Found a value with multiple dashes: \"${string}\".`,\n\t\t)\n\t}\n\t// Single integers are easy, just parse and return\n\tconst isSingle = dashParts.length == 1\n\tif (isSingle) {\n\t\tconst parsedInt = parseInt(string)\n\t\tconst isNaN = parsedInt !== parsedInt\n\t\tif (isNaN) {\n\t\t\tthrow new Error(\n\t\t\t\t`Each comma-separated value in the highlight prop must be either a single integer, or a range with a single dash between two integers. Found a value that parsed to NaN: \"${\n\t\t\t\t\tstring === '' ? '<empty string>' : string\n\t\t\t\t}\".`,\n\t\t\t)\n\t\t}\n\t\treturn [parsedInt]\n\t}\n\t// Ranges require a little more logic\n\tconst [startVal, endVal] = dashParts.map((v) => parseInt(v))\n\tconst hasNaNStart = startVal !== startVal\n\tconst hasNaNEnd = endVal !== endVal\n\tif (hasNaNStart || hasNaNEnd) {\n\t\tthrow new Error(\n\t\t\t`Each comma-separated value in the highlight prop must be either a single integer, or a range with a single dash between two integers. Found a range that produced a NaN: \"${string}\".`,\n\t\t)\n\t}\n\tconst length = endVal - startVal + 1\n\tconst values = [...Array(length).keys()].map((int) => int + startVal)\n\treturn values\n}\n\nexport default parseHighlightedLines\n"],"names":["parseHighlightedLines","string","acc","part","parsePart","dashParts","parsedInt","startVal","endVal","v","length","int"],"mappings":"AAAA,SAASA,EAAsBC,GAA2B;AACzD,MAAI,OAAOA,IAAU,OAAeA,MAAW,MAASA,MAAW;AAClE,WAAO,CAAA;AAGR,MAAI,OAAOA,KAAW;AACrB,UAAM,IAAI;AAAA,MACT,kEAAkE,OAAOA,CAAM;AAAA,IAAA;AAKjF,MAAI,CADkB,eAAe,KAAKA,CAAM;AAE/C,UAAM,IAAI;AAAA,MACT,sJAAsJA,CAAM;AAAA,IAAA;AAK9J,SADcA,EAAO,MAAM,GAAG,EACjB,OAAO,CAACC,GAAKC,MAClBD,EAAI,OAAOE,EAAUD,CAAI,CAAC,GAC/B,CAAA,CAAc;AAClB;AAEA,SAASC,EAAUH,GAA0B;AAC5C,QAAMI,IAAYJ,EAAO,MAAM,GAAG;AAClC,MAAII,EAAU,SAAS;AACtB,UAAM,IAAI;AAAA,MACT,8KAA8KJ,CAAM;AAAA,IAAA;AAKtL,MADiBI,EAAU,UAAU,GACvB;AACb,UAAMC,IAAY,SAASL,CAAM;AAEjC,QADcK,MAAcA;AAE3B,YAAM,IAAI;AAAA,QACT,4KACCL,MAAW,KAAK,mBAAmBA,CACpC;AAAA,MAAA;AAGF,WAAO,CAACK,CAAS;AAAA,EAClB;AAEA,QAAM,CAACC,GAAUC,CAAM,IAAIH,EAAU,IAAI,CAACI,MAAM,SAASA,CAAC,CAAC;AAG3D,MAFoBF,MAAaA,KACfC,MAAWA;AAE5B,UAAM,IAAI;AAAA,MACT,6KAA6KP,CAAM;AAAA,IAAA;AAGrL,QAAMS,IAASF,IAASD,IAAW;AAEnC,SADe,CAAC,GAAG,MAAMG,CAAM,EAAE,MAAM,EAAE,IAAI,CAACC,MAAQA,IAAMJ,CAAQ;AAErE;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) HashiCorp, Inc.
|
|
3
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Given a snippet of code,
|
|
7
|
+
* process it based on the detected language,
|
|
8
|
+
* returning a modified snippet that has is
|
|
9
|
+
* more suited to direct execution.
|
|
10
|
+
*/
|
|
11
|
+
declare function processSnippet(snippet: string): string;
|
|
12
|
+
export default processSnippet;
|
|
13
|
+
//# sourceMappingURL=process-snippet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-snippet.d.ts","sourceRoot":"","sources":["../../../../src/components/code-block/utils/process-snippet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG/C;AAwDD,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Splits a string into an array of tokens in the same way the UNIX Bourne shell does.
|
|
3
|
+
*
|
|
4
|
+
* @param line A string to split.
|
|
5
|
+
* @returns An array of the split tokens.
|
|
6
|
+
*/
|
|
7
|
+
export declare const split: (line?: string) => string[];
|
|
8
|
+
/**
|
|
9
|
+
* Escapes a string so that it can be safely used in a Bourne shell command line.
|
|
10
|
+
*
|
|
11
|
+
* @param str A string to escape.
|
|
12
|
+
* @returns The escaped string.
|
|
13
|
+
*/
|
|
14
|
+
export declare const escape: (str?: string) => string;
|
|
15
|
+
//# sourceMappingURL=shellwords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shellwords.d.ts","sourceRoot":"","sources":["../../../../src/components/code-block/utils/shellwords.ts"],"names":[],"mappings":"AAuBA;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,aAAS,aA2C9B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,YAAQ,WAE9B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shellwords.js","sources":["../../../../src/components/code-block/utils/shellwords.ts"],"sourcesContent":["const scan = (\n\tstring: string,\n\tpattern: RegExp,\n\tcallback: (match: RegExpMatchArray) => void,\n) => {\n\tlet result = ''\n\n\twhile (string.length > 0) {\n\t\tconst match = string.match(pattern)\n\n\t\tif (match && match.index != null && match[0] != null) {\n\t\t\tresult += string.slice(0, match.index)\n\t\t\tresult += callback(match)\n\t\t\tstring = string.slice(match.index + match[0].length)\n\t\t} else {\n\t\t\tresult += string\n\t\t\tstring = ''\n\t\t}\n\t}\n\n\treturn result\n}\n\n/**\n * Splits a string into an array of tokens in the same way the UNIX Bourne shell does.\n *\n * @param line A string to split.\n * @returns An array of the split tokens.\n */\nexport const split = (line = '') => {\n\tconst words: string[] = []\n\tlet field = ''\n\tscan(\n\t\tline,\n\t\t/\\s*(?:([^\\s\\\\'\"]+)|'((?:[^'\\\\]|\\\\.)*)'|\"((?:[^\"\\\\]|\\\\.)*)\"|(\\\\.?)|(\\S))(\\s|$)?/,\n\t\t(match) => {\n\t\t\tconst [_raw, word, sq, dq, escape, garbage, separator] = match\n\n\t\t\tif (garbage != null) {\n\t\t\t\tthrow new Error(`Unmatched quote: ${line}`)\n\t\t\t}\n\n\t\t\tif (word) {\n\t\t\t\tfield += word\n\t\t\t} else {\n\t\t\t\tlet addition\n\n\t\t\t\tif (sq) {\n\t\t\t\t\taddition = sq\n\t\t\t\t} else if (dq) {\n\t\t\t\t\taddition = dq\n\t\t\t\t} else if (escape) {\n\t\t\t\t\taddition = escape\n\t\t\t\t}\n\n\t\t\t\tif (addition) {\n\t\t\t\t\tfield += addition.replace(/\\\\(?=.)/, '')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (separator != null) {\n\t\t\t\twords.push(field)\n\t\t\t\tfield = ''\n\t\t\t}\n\t\t},\n\t)\n\n\tif (field) {\n\t\twords.push(field)\n\t}\n\n\treturn words\n}\n\n/**\n * Escapes a string so that it can be safely used in a Bourne shell command line.\n *\n * @param str A string to escape.\n * @returns The escaped string.\n */\nexport const escape = (str = '') => {\n\treturn str.replace(/([^A-Za-z0-9_\\-.,:/@\\n])/g, '\\\\$1').replace(/\\n/g, \"'\\n'\")\n}\n"],"names":["scan","string","pattern","callback","result","match","split","line","words","field","_raw","word","sq","dq","escape","garbage","separator","addition","str"],"mappings":"AAAA,MAAMA,IAAO,CACZC,GACAC,GACAC,MACI;AACJ,MAAIC,IAAS;AAEb,SAAOH,EAAO,SAAS,KAAG;AACzB,UAAMI,IAAQJ,EAAO,MAAMC,CAAO;AAElC,IAAIG,KAASA,EAAM,SAAS,QAAQA,EAAM,CAAC,KAAK,QAC/CD,KAAUH,EAAO,MAAM,GAAGI,EAAM,KAAK,GACrCD,KAAUD,EAASE,CAAK,GACxBJ,IAASA,EAAO,MAAMI,EAAM,QAAQA,EAAM,CAAC,EAAE,MAAM,MAEnDD,KAAUH,GACVA,IAAS;AAAA,EAEX;AAEA,SAAOG;AACR,GAQaE,IAAQ,CAACC,IAAO,OAAO;AACnC,QAAMC,IAAkB,CAAA;AACxB,MAAIC,IAAQ;AACZ,SAAAT;AAAA,IACCO;AAAA,IACA;AAAA,IACA,CAACF,MAAU;AACV,YAAM,CAACK,GAAMC,GAAMC,GAAIC,GAAIC,GAAQC,GAASC,CAAS,IAAIX;AAEzD,UAAIU,KAAW;AACd,cAAM,IAAI,MAAM,oBAAoBR,CAAI,EAAE;AAG3C,UAAII;AACH,QAAAF,KAASE;AAAA,WACH;AACN,YAAIM;AAEJ,QAAIL,IACHK,IAAWL,IACDC,IACVI,IAAWJ,IACDC,MACVG,IAAWH,IAGRG,MACHR,KAASQ,EAAS,QAAQ,WAAW,EAAE;AAAA,MAEzC;AAEA,MAAID,KAAa,SAChBR,EAAM,KAAKC,CAAK,GAChBA,IAAQ;AAAA,IAEV;AAAA,EAAA,GAGGA,KACHD,EAAM,KAAKC,CAAK,GAGVD;AACR,GAQaM,IAAS,CAACI,IAAM,OACrBA,EAAI,QAAQ,6BAA6B,MAAM,EAAE,QAAQ,OAAO;AAAA,EAAM;"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
type TComboBoxItem = {
|
|
2
|
+
id: string;
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
};
|
|
6
|
+
type ComboBoxIds = {
|
|
7
|
+
toggle?: string;
|
|
8
|
+
popover?: string;
|
|
9
|
+
listbox?: string;
|
|
10
|
+
};
|
|
11
|
+
interface ComboBoxProviderProps {
|
|
12
|
+
children: React.ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* This does **not** loop the items, it loops the focus when the items are exhausted.
|
|
15
|
+
* Meaning that if set to `true` and the user navigates to the last {@link ComboBox.Item} and presses `ArrowDown`,
|
|
16
|
+
* the focus will not loop back around to the first {@link ComboBox.Item}, it will return focus to the {@link ComboBox.Trigger} and close the popover.
|
|
17
|
+
* Otherwise, if set to `false` and the user navigates to the last {@link ComboBox.Item} and presses `ArrowDown`,
|
|
18
|
+
* it will just remain there.
|
|
19
|
+
*
|
|
20
|
+
* @default true
|
|
21
|
+
*/
|
|
22
|
+
keyboardFocusLoop?: boolean;
|
|
23
|
+
ids?: ComboBoxIds;
|
|
24
|
+
onChangeVFocusedOption?: (option: TComboBoxItem) => void;
|
|
25
|
+
onChangeSelectedOption?: (option: TComboBoxItem) => void;
|
|
26
|
+
}
|
|
27
|
+
interface ComboBoxItemProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'role' | 'aria-selected' | 'onClick' | 'onKeyDown' | 'onMouseEnter'> {
|
|
28
|
+
value: string;
|
|
29
|
+
label: string;
|
|
30
|
+
}
|
|
31
|
+
interface ComboBoxTriggerProps {
|
|
32
|
+
children: React.ReactNode;
|
|
33
|
+
className?: string;
|
|
34
|
+
}
|
|
35
|
+
interface ComboBoxValueProps {
|
|
36
|
+
placeholder?: string;
|
|
37
|
+
}
|
|
38
|
+
interface ComboBoxPopoverProps {
|
|
39
|
+
children: React.ReactNode;
|
|
40
|
+
className?: string;
|
|
41
|
+
}
|
|
42
|
+
interface ComboBoxListProps extends React.PropsWithChildren {
|
|
43
|
+
/**
|
|
44
|
+
* Not rendered, used to hint assistive technologies,
|
|
45
|
+
* indicate the type of options available in the popover
|
|
46
|
+
* eg. Schools | Languages | Countries
|
|
47
|
+
*/
|
|
48
|
+
label: string;
|
|
49
|
+
className?: string;
|
|
50
|
+
maxHeight?: `${number}em` | `${number}px` | `${number}%`;
|
|
51
|
+
onScroll?: (e: React.UIEvent<HTMLUListElement>) => void;
|
|
52
|
+
}
|
|
53
|
+
interface ComboBoxSearchInputProps {
|
|
54
|
+
placeholder?: string;
|
|
55
|
+
value?: string;
|
|
56
|
+
onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
57
|
+
onBlur?: () => void;
|
|
58
|
+
}
|
|
59
|
+
export type { TComboBoxItem, ComboBoxListProps, ComboBoxSearchInputProps };
|
|
60
|
+
export declare const ComboBox: Readonly<{
|
|
61
|
+
Root: ({ children, keyboardFocusLoop, ids: providedIds, onChangeVFocusedOption, onChangeSelectedOption, }: ComboBoxProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
Trigger: ({ children, className }: ComboBoxTriggerProps) => import("react/jsx-runtime").JSX.Element;
|
|
63
|
+
Popover: ({ children, className }: ComboBoxPopoverProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
64
|
+
SearchInput: ({ placeholder, value, onChange, onBlur, }: ComboBoxSearchInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
65
|
+
List: ({ label, children, className, maxHeight, onScroll, }: ComboBoxListProps) => import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
Item: ({ id: providedId, value, label, children, ...restProps }: React.PropsWithChildren<ComboBoxItemProps>) => import("react/jsx-runtime").JSX.Element;
|
|
67
|
+
Value: ({ placeholder, }: ComboBoxValueProps) => import("react/jsx-runtime").JSX.Element;
|
|
68
|
+
}>;
|
|
69
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/combo-box-primitive/index.tsx"],"names":[],"mappings":"AAaA,KAAK,aAAa,GAAG;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACb,CAAA;AAmBD,KAAK,WAAW,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AA6DD,UAAU,qBAAqB;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IACxD,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;CACxD;AAsPD,UAAU,iBAAkB,SAAQ,IAAI,CACvC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EACnC,MAAM,GAAG,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,cAAc,CACnE;IACA,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACb;AAoCD,UAAU,oBAAoB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAqED,UAAU,kBAAkB;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB;AASD,UAAU,oBAAoB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AA6BD,UAAU,iBAAkB,SAAQ,KAAK,CAAC,iBAAiB;IAC1D;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,GAAG,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,CAAA;IACxD,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;CACvD;AA2BD,UAAU,wBAAwB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;IAC/D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACnB;AA2CD,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,CAAA;AAE1E,eAAO,MAAM,QAAQ;+GAlelB,qBAAqB;uCA6R0B,oBAAoB;uCAmFpB,oBAAoB;6DA4EnE,wBAAwB;iEA/BxB,iBAAiB;qEAjKjB,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;8BA0G1C,kBAAkB;EAoInB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/combo-box-primitive/index.tsx"],"sourcesContent":["'use client'\n\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseRef,\n\tuseId,\n\tuseState,\n} from 'react'\nimport { TextInputBase } from '../form/text-input'\n\ntype TComboBoxItem = {\n\tid: string\n\tvalue: string\n\tlabel: string\n}\n\nconst idWithPrefix = (prefix: string, id: string) => {\n\treturn `${prefix}__${id}`\n}\n\n/**\n * Something to note as you move through the code\n * The distinction between the native browser focus and the visually focused item\n *\n * The native browser focus only ever alternates between the toggle and the search input, focus should never be on an individual {@link ComboBox.Item}\n * The currently selected item is visually identified with css and marked in the accessibility tree with `aria-selected`\n *\n * You can see more in the [combobox aria guide](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/).\n *\n * To make this terse in our implementation, we use the term `vFocus` to refer to the visually focused {@link ComboBox.Item}\n */\nconst NOTHING_VFOCUSED = -1\n\ntype ComboBoxIds = {\n\ttoggle?: string\n\tpopover?: string\n\tlistbox?: string\n}\n\nfunction assertUniqueIds(ids: ComboBoxIds) {\n\tconst idToKeysMap = new Map<string, string[]>()\n\tfor (const [key, id] of Object.entries(ids)) {\n\t\tif (!id) continue\n\t\tconst existingKeys = idToKeysMap.get(id) || []\n\t\tidToKeysMap.set(id, [...existingKeys, key])\n\t}\n\n\t// tells the caller specifically which ids are duplicated\n\tfor (const [id, keys] of idToKeysMap) {\n\t\tif (keys.length > 1) {\n\t\t\tthrow new Error(\n\t\t\t\t`ComboBox: id '${id}' is duplicated in ${keys.join(', ')}`,\n\t\t\t)\n\t\t}\n\t}\n}\n\n/**\n * internally, we generate them if not provided\n * so we can assert truthiness\n */\ntype InternalComboBoxIds = {\n\ttoggle: string\n\tpopover: string\n\tlistbox: string\n}\n\ninterface ComboBoxContext {\n\taddItem: (item: TComboBoxItem) => void\n\tselectItem: (item: TComboBoxItem) => void\n\tvFocusByIdx: (idx: number) => void\n\tvFocus: (item: TComboBoxItem) => void\n\tvFocusNext: () => void\n\tvFocusPrev: () => void\n\tgetSelectedItem: () => TComboBoxItem | null\n\tgetVFocusedItem: () => TComboBoxItem | null\n\tgetItems: () => TComboBoxItem[]\n\tremoveItem: (item: TComboBoxItem) => void\n\tsearchInputRef: React.RefObject<HTMLInputElement>\n\ttoggleRef: React.RefObject<HTMLDivElement>\n\tlistRef: React.RefObject<HTMLUListElement>\n\tisOpen: boolean\n\tclosePopover: () => void\n\topenPopover: () => void\n\thandleVFocusKeyboardControls: (e: React.KeyboardEvent) => void\n\tids: React.MutableRefObject<InternalComboBoxIds>\n}\n\nconst ComboBoxContext = createContext<ComboBoxContext | null>(null)\n\nconst useComboBox = (): ComboBoxContext => {\n\tconst ctx = useContext(ComboBoxContext)\n\tif (!ctx) {\n\t\tthrow new Error('useComboBox must be used within a ComboBoxProvider')\n\t}\n\treturn ctx\n}\n\ninterface ComboBoxProviderProps {\n\tchildren: React.ReactNode\n\t/**\n\t * This does **not** loop the items, it loops the focus when the items are exhausted.\n\t * Meaning that if set to `true` and the user navigates to the last {@link ComboBox.Item} and presses `ArrowDown`,\n\t * the focus will not loop back around to the first {@link ComboBox.Item}, it will return focus to the {@link ComboBox.Trigger} and close the popover.\n\t * Otherwise, if set to `false` and the user navigates to the last {@link ComboBox.Item} and presses `ArrowDown`,\n\t * it will just remain there.\n\t *\n\t * @default true\n\t */\n\tkeyboardFocusLoop?: boolean\n\tids?: ComboBoxIds\n\tonChangeVFocusedOption?: (option: TComboBoxItem) => void\n\tonChangeSelectedOption?: (option: TComboBoxItem) => void\n}\n\nconst ComboBoxProvider = ({\n\tchildren,\n\tkeyboardFocusLoop = true,\n\tids: providedIds = {},\n\tonChangeVFocusedOption,\n\tonChangeSelectedOption,\n}: ComboBoxProviderProps) => {\n\tassertUniqueIds(providedIds)\n\n\tconst itemsRef = useRef<TComboBoxItem[]>([])\n\tconst internalUsedIds = useRef(new Set<TComboBoxItem['id']>())\n\tconst [selectedItem, _setSelectedItem] = useState<TComboBoxItem | null>(null)\n\tconst [vFocusedItemIdx, _setVFocusedItemIdx] = useState(NOTHING_VFOCUSED)\n\tconst toggleRef = useRef<HTMLDivElement>(null)\n\tconst searchInputRef = useRef<HTMLInputElement>(null)\n\tconst [isOpen, setIsOpen] = useState(false)\n\tconst listRef = useRef<HTMLUListElement>(null)\n\n\tconst fallBackToggleId = idWithPrefix('hashi-combo-box-toggle', useId())\n\tconst fallBackPopoverId = idWithPrefix('hashi-combo-box-popover', useId())\n\tconst fallBackListboxId = idWithPrefix('hashi-combo-box-listbox', useId())\n\n\t// proxy the react state to simulate event listeners\n\tconst setSelectedItem = useCallback(\n\t\t(item: TComboBoxItem) => {\n\t\t\t_setSelectedItem(item)\n\t\t\tonChangeSelectedOption?.(item)\n\t\t},\n\t\t[onChangeSelectedOption],\n\t)\n\n\tconst setVFocusedItemIdx = useCallback(\n\t\t(idx: number) => {\n\t\t\t_setVFocusedItemIdx(idx)\n\t\t\tonChangeVFocusedOption?.(itemsRef.current[idx])\n\t\t},\n\t\t[onChangeVFocusedOption],\n\t)\n\n\tconst ids = useRef<InternalComboBoxIds>({\n\t\ttoggle: providedIds.toggle ?? fallBackToggleId,\n\t\tpopover: providedIds.popover ?? fallBackPopoverId,\n\t\tlistbox: providedIds.listbox ?? fallBackListboxId,\n\t})\n\n\tconst vFocusByIdx = useCallback(\n\t\t(idx: number) => {\n\t\t\tsetVFocusedItemIdx(idx)\n\t\t},\n\t\t[setVFocusedItemIdx],\n\t)\n\n\tconst vFocusNext = useCallback(() => {\n\t\tconst items = itemsRef.current\n\t\tif (vFocusedItemIdx === NOTHING_VFOCUSED) return 0\n\t\tconst potentialNextIndex = vFocusedItemIdx + 1\n\t\tconst isAtEnd = potentialNextIndex >= items.length\n\t\tlet idx\n\t\tif (isAtEnd && keyboardFocusLoop) {\n\t\t\tidx = NOTHING_VFOCUSED\n\t\t\tsetIsOpen(false)\n\t\t} else {\n\t\t\tidx = isAtEnd ? vFocusedItemIdx : potentialNextIndex\n\t\t}\n\n\t\tvFocusByIdx(idx)\n\t}, [keyboardFocusLoop, vFocusedItemIdx, vFocusByIdx])\n\n\tconst vFocusPrev = useCallback(() => {\n\t\tif (vFocusedItemIdx === NOTHING_VFOCUSED) return 0\n\t\tconst potentialPreviousIndex = vFocusedItemIdx - 1\n\t\tconst isAtStart = potentialPreviousIndex < 0\n\t\tlet idx\n\t\tif (isAtStart && keyboardFocusLoop) {\n\t\t\tidx = NOTHING_VFOCUSED\n\t\t\tsetIsOpen(false)\n\t\t} else {\n\t\t\tidx = isAtStart ? vFocusedItemIdx : potentialPreviousIndex\n\t\t}\n\n\t\tvFocusByIdx(idx)\n\t}, [keyboardFocusLoop, vFocusedItemIdx, vFocusByIdx])\n\n\tconst vFocus = useCallback(\n\t\t(item: TComboBoxItem) => {\n\t\t\tconst foundItemIndex = itemsRef.current.findIndex((i) => i.id === item.id)\n\t\t\tif (foundItemIndex === -1) {\n\t\t\t\tconsole.error('ComboBox: Item not found', item)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsetVFocusedItemIdx(foundItemIndex)\n\t\t},\n\t\t[setVFocusedItemIdx],\n\t)\n\n\tconst getVFocusedItem = useCallback(() => {\n\t\tif (vFocusedItemIdx === NOTHING_VFOCUSED) return null\n\t\treturn itemsRef.current[vFocusedItemIdx] || null\n\t}, [vFocusedItemIdx])\n\n\tconst selectItem = useCallback(\n\t\t(item: TComboBoxItem) => {\n\t\t\tconst foundItemIndex = itemsRef.current.findIndex((i) => i.id === item.id)\n\t\t\tif (foundItemIndex === -1) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t'ComboBox: Item not found, Selected item not updated',\n\t\t\t\t\titem,\n\t\t\t\t)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsetSelectedItem(item)\n\t\t\tsetIsOpen(false)\n\t\t},\n\t\t[setSelectedItem],\n\t)\n\n\tconst getSelectedItem = useCallback(() => {\n\t\treturn selectedItem\n\t}, [selectedItem])\n\n\tconst addItem = useCallback((item: TComboBoxItem) => {\n\t\tif (internalUsedIds.current.has(item.id)) {\n\t\t\tconst existing = itemsRef.current.find((i) => i.id === item.id)\n\t\t\tconst attemptedToAdd = item\n\t\t\tconst dupes = JSON.stringify({\n\t\t\t\texisting,\n\t\t\t\tattemptedToAdd,\n\t\t\t})\n\t\t\tconst errMessage = `Each ComboBox.Item must have a unique id.\\n Found items with duplicate ids: ${dupes}`\n\t\t\tthrow Error(errMessage)\n\t\t}\n\t\tinternalUsedIds.current.add(item.id)\n\t\titemsRef.current.push(item)\n\t}, [])\n\n\tconst getItems = useCallback(() => {\n\t\treturn itemsRef.current\n\t}, [])\n\n\tconst removeItem = useCallback((item: TComboBoxItem) => {\n\t\tinternalUsedIds.current.delete(item.id)\n\t\titemsRef.current = itemsRef.current.filter((i) => i.id !== item.id)\n\t}, [])\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\tsearchInputRef.current?.focus()\n\t\t}\n\t}, [isOpen, searchInputRef, toggleRef])\n\n\t// if someone navigates to an item, via the keyboard, scroll it into view\n\tuseEffect(() => {\n\t\tconst vFocusedItem = getVFocusedItem()\n\t\tconst list = listRef.current\n\t\tif (vFocusedItem && list) {\n\t\t\tconst itemElement = list.querySelector(\n\t\t\t\t`[data-combo-box-item-id=\"${vFocusedItem.id}\"]`,\n\t\t\t)\n\t\t\titemElement?.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n\t\t}\n\t}, [getVFocusedItem])\n\n\tconst closePopover = useCallback(() => {\n\t\tsetIsOpen(false)\n\t\tsetVFocusedItemIdx(NOTHING_VFOCUSED)\n\t}, [setVFocusedItemIdx])\n\n\tconst openPopover = useCallback(() => {\n\t\tsetIsOpen(true)\n\t}, [])\n\n\t// we need this event handler in several places because\n\t// it has to be attached to a focused element\n\t// if there is a search input in use, that will be the focused element\n\t// otherwise, it will be the toggle element\n\tconst handleVFocusKeyboardControls = (e: React.KeyboardEvent) => {\n\t\tconst isScrollingKey = e.key === 'ArrowDown' || e.key === 'ArrowUp'\n\t\tconst isSpaceKey = e.key === ' '\n\t\tconst hasSearchInput = searchInputRef.current !== null\n\t\tconst isSpacePressWithoutSearchInput = isSpaceKey && !hasSearchInput\n\t\tif (isScrollingKey || isSpacePressWithoutSearchInput) {\n\t\t\te.preventDefault()\n\t\t}\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape': {\n\t\t\t\tclosePopover()\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'ArrowDown': {\n\t\t\t\tconst nothingVFocused = getVFocusedItem() === null\n\t\t\t\t// if someone presses down on the search input whilst nothing is vFocused, vFocus the first item\n\t\t\t\tif (isOpen && nothingVFocused) {\n\t\t\t\t\tvFocusByIdx(0)\n\t\t\t\t} else {\n\t\t\t\t\tvFocusNext()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'ArrowUp': {\n\t\t\t\tvFocusPrev()\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'Enter': {\n\t\t\t\tconst currItem = getVFocusedItem()\n\t\t\t\tif (currItem) {\n\t\t\t\t\tselectItem(currItem)\n\t\t\t\t}\n\t\t\t\tclosePopover()\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\treturn (\n\t\t<ComboBoxContext.Provider\n\t\t\tvalue={{\n\t\t\t\taddItem,\n\t\t\t\tselectItem,\n\t\t\t\tvFocus,\n\t\t\t\tvFocusByIdx,\n\t\t\t\tvFocusNext,\n\t\t\t\tvFocusPrev,\n\t\t\t\tgetSelectedItem,\n\t\t\t\tgetVFocusedItem,\n\t\t\t\tgetItems,\n\t\t\t\tremoveItem,\n\t\t\t\tsearchInputRef,\n\t\t\t\ttoggleRef,\n\t\t\t\tlistRef,\n\t\t\t\tisOpen,\n\t\t\t\tclosePopover,\n\t\t\t\topenPopover,\n\t\t\t\tids,\n\t\t\t\thandleVFocusKeyboardControls,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ComboBoxContext.Provider>\n\t)\n}\n\ninterface ComboBoxItemProps extends Omit<\n\tReact.HTMLAttributes<HTMLLIElement>,\n\t'role' | 'aria-selected' | 'onClick' | 'onKeyDown' | 'onMouseEnter'\n> {\n\tvalue: string\n\tlabel: string\n}\n\nconst ComboBoxItem = ({\n\tid: providedId,\n\tvalue,\n\tlabel,\n\tchildren,\n\t...restProps\n}: React.PropsWithChildren<ComboBoxItemProps>) => {\n\tconst generatedId = idWithPrefix('hashi-combo-box-item', useId())\n\tconst id = providedId ?? generatedId\n\tconst { addItem, removeItem, getVFocusedItem, vFocus, selectItem } =\n\t\tuseComboBox()\n\n\tuseEffect(() => {\n\t\taddItem({ id, value, label })\n\t\treturn () => removeItem({ id, value, label })\n\t}, [addItem, id, removeItem, value, label])\n\n\tconst isVFocused = getVFocusedItem()?.id === id\n\n\treturn (\n\t\t<li\n\t\t\tdata-combo-box-item-id={id}\n\t\t\trole=\"option\"\n\t\t\taria-selected={isVFocused}\n\t\t\tdata-vfocused={isVFocused}\n\t\t\tonClick={() => selectItem({ id, value, label })}\n\t\t\tonMouseEnter={() => vFocus({ id, value, label })}\n\t\t\t{...restProps}\n\t\t>\n\t\t\t{children}\n\t\t</li>\n\t)\n}\n\ninterface ComboBoxTriggerProps {\n\tchildren: React.ReactNode\n\tclassName?: string\n}\n\nconst ComboBoxTrigger = ({ children, className }: ComboBoxTriggerProps) => {\n\tconst {\n\t\ttoggleRef,\n\t\topenPopover,\n\t\tclosePopover,\n\t\tisOpen,\n\t\tids,\n\t\thandleVFocusKeyboardControls,\n\t\tsearchInputRef,\n\t} = useComboBox()\n\n\tconst handleClick = (e: React.MouseEvent) => {\n\t\te.stopPropagation() // an external click may be registered as an outside click which will close the popover\n\t\tif (isOpen) {\n\t\t\tclosePopover()\n\t\t} else {\n\t\t\topenPopover()\n\t\t}\n\t}\n\n\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\tconst isOpenKey =\n\t\t\te.key === 'Enter' || e.key === 'ArrowDown' || e.key === ' '\n\t\tconst isClosed = isOpen === false\n\n\t\tif (isOpenKey && isClosed) {\n\t\t\te.preventDefault()\n\t\t\topenPopover()\n\t\t\treturn\n\t\t}\n\n\t\tconst hasSearchInput = searchInputRef.current !== null\n\t\t// if there is a search input, the event handler will be bound there\n\t\tif (!hasSearchInput && isOpen) {\n\t\t\thandleVFocusKeyboardControls(e)\n\t\t}\n\t}\n\n\tconst getOnBlur = () => {\n\t\treturn (e: React.FocusEvent) => {\n\t\t\tconst isClickInside = e.relatedTarget?.closest('[data-combo-box-popover]')\n\t\t\tif (isClickInside) return\n\t\t\tconst hasSearchInput = searchInputRef.current !== null\n\t\t\tif (!hasSearchInput) {\n\t\t\t\tclosePopover()\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (\n\t\t<div\n\t\t\trole=\"combobox\"\n\t\t\tonClick={handleClick}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\ttabIndex={0}\n\t\t\tref={toggleRef}\n\t\t\taria-haspopup=\"listbox\"\n\t\t\taria-expanded={isOpen}\n\t\t\taria-controls={ids.current.popover}\n\t\t\tclassName={className}\n\t\t\tonBlur={getOnBlur()}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\ninterface ComboBoxValueProps {\n\tplaceholder?: string\n}\n\nconst ComboBoxValue = ({\n\tplaceholder = 'Select an option',\n}: ComboBoxValueProps) => {\n\tconst { getSelectedItem } = useComboBox()\n\treturn <>{getSelectedItem()?.label ?? placeholder}</>\n}\n\ninterface ComboBoxPopoverProps {\n\tchildren: React.ReactNode\n\tclassName?: string\n}\n\nconst ComboBoxPopover = ({ children, className }: ComboBoxPopoverProps) => {\n\tconst { isOpen, ids, closePopover } = useComboBox()\n\n\tuseEffect(() => {\n\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\tif (!isOpen) return\n\t\t\tconst target = e.target as HTMLElement\n\t\t\tconst isClickInside = target.closest('[data-combo-box-popover]')\n\t\t\tif (isClickInside) return\n\t\t\tclosePopover()\n\t\t}\n\n\t\tdocument.addEventListener('click', handleClickOutside)\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('click', handleClickOutside)\n\t\t}\n\t}, [isOpen, closePopover])\n\n\tif (!isOpen) return null\n\n\treturn (\n\t\t<div id={ids.current.popover} data-combo-box-popover className={className}>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\ninterface ComboBoxListProps extends React.PropsWithChildren {\n\t/**\n\t * Not rendered, used to hint assistive technologies,\n\t * indicate the type of options available in the popover\n\t * eg. Schools | Languages | Countries\n\t */\n\tlabel: string\n\tclassName?: string\n\tmaxHeight?: `${number}em` | `${number}px` | `${number}%`\n\tonScroll?: (e: React.UIEvent<HTMLUListElement>) => void\n}\n\nconst ComboBoxList = ({\n\tlabel,\n\tchildren,\n\tclassName = '',\n\tmaxHeight,\n\tonScroll,\n}: ComboBoxListProps) => {\n\tconst { ids, listRef } = useComboBox()\n\n\treturn (\n\t\t<ul\n\t\t\tid={ids.current.listbox}\n\t\t\taria-label={label}\n\t\t\trole=\"listbox\"\n\t\t\ttabIndex={-1}\n\t\t\tref={listRef}\n\t\t\tclassName={className}\n\t\t\tstyle={{ maxHeight }}\n\t\t\tonScroll={onScroll}\n\t\t>\n\t\t\t{children}\n\t\t</ul>\n\t)\n}\n\ninterface ComboBoxSearchInputProps {\n\tplaceholder?: string\n\tvalue?: string\n\tonChange?: (event: React.ChangeEvent<HTMLInputElement>) => void\n\tonBlur?: () => void\n}\n\nconst ComboBoxSearchInput = ({\n\tplaceholder = 'Search',\n\tvalue,\n\tonChange,\n\tonBlur,\n}: ComboBoxSearchInputProps) => {\n\tconst {\n\t\tsearchInputRef,\n\t\tgetVFocusedItem,\n\t\thandleVFocusKeyboardControls,\n\t\tclosePopover,\n\t} = useComboBox()\n\n\treturn (\n\t\t<TextInputBase\n\t\t\tfield={{\n\t\t\t\ttype: 'search',\n\t\t\t\tref: searchInputRef,\n\t\t\t\tautoComplete: 'off',\n\t\t\t\t'aria-haspopup': 'listbox',\n\t\t\t\t'aria-autocomplete': 'list',\n\t\t\t\trole: 'combobox',\n\t\t\t\t'aria-activedescendant': getVFocusedItem()?.id ?? '',\n\t\t\t\tplaceholder,\n\t\t\t\tvalue,\n\t\t\t\tonChange,\n\t\t\t\tonKeyDown: handleVFocusKeyboardControls,\n\t\t\t\tonBlur: (e) => {\n\t\t\t\t\te.stopPropagation()\n\t\t\t\t\tconst isClickInside = e.relatedTarget?.closest(\n\t\t\t\t\t\t'[data-combo-box-popover]',\n\t\t\t\t\t)\n\t\t\t\t\tif (isClickInside) return\n\t\t\t\t\tclosePopover()\n\t\t\t\t\tonBlur?.()\n\t\t\t\t},\n\t\t\t}}\n\t\t/>\n\t)\n}\n\nexport type { TComboBoxItem, ComboBoxListProps, ComboBoxSearchInputProps }\n\nexport const ComboBox = Object.freeze({\n\tRoot: ComboBoxProvider,\n\tTrigger: ComboBoxTrigger,\n\tPopover: ComboBoxPopover,\n\tSearchInput: ComboBoxSearchInput,\n\tList: ComboBoxList,\n\tItem: ComboBoxItem,\n\tValue: ComboBoxValue,\n})\n"],"names":["idWithPrefix","prefix","id","NOTHING_VFOCUSED","assertUniqueIds","ids","idToKeysMap","key","existingKeys","keys","ComboBoxContext","createContext","ctx","useContext","ComboBoxProvider","children","keyboardFocusLoop","providedIds","onChangeVFocusedOption","onChangeSelectedOption","itemsRef","internalUsedIds","useRef","selectedItem","_setSelectedItem","useState","vFocusedItemIdx","toggleRef","searchInputRef","isOpen","setIsOpen","listRef","fallBackToggleId","useId","fallBackPopoverId","fallBackListboxId","useCallback","item","setVFocusedItemIdx","idx","_setVFocusedItemIdx","vFocusByIdx","vFocusNext","items","potentialNextIndex","isAtEnd","vFocusPrev","potentialPreviousIndex","isAtStart","foundItemIndex","i","getVFocusedItem","setSelectedItem","addItem","existing","errMessage","getItems","removeItem","useEffect","vFocusedItem","list","closePopover","openPopover","handleVFocusKeyboardControls","isScrollingKey","isSpaceKey","hasSearchInput","nothingVFocused","currItem","selectItem","jsx","vFocus","getSelectedItem","ComboBoxItem","providedId","value","label","restProps","generatedId","useComboBox","isVFocused","ComboBoxTrigger","className","handleClick","e","getOnBlur","handleKeyDown","placeholder","Fragment","ComboBoxPopover","handleClickOutside","ComboBoxList","maxHeight","onScroll","ComboBoxSearchInput","onChange","onBlur","TextInputBase","ComboBox","ComboBoxValue"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DetailedHTMLProps, DialogHTMLAttributes } from 'react';
|
|
2
|
+
interface OverlayProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
}
|
|
5
|
+
interface DialogProps extends DetailedHTMLProps<DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement> {
|
|
6
|
+
onDismiss: () => void;
|
|
7
|
+
}
|
|
8
|
+
declare const Dialog: {
|
|
9
|
+
Overlay: ({ className }: OverlayProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
Wrapper: ({ children, className, onDismiss, ...rest }: DialogProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
};
|
|
12
|
+
export { Dialog };
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dialog-primitive/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAGpE,UAAU,YAAY;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAMD,UAAU,WAAY,SAAQ,iBAAiB,CAC9C,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,iBAAiB,CACjB;IACA,SAAS,EAAE,MAAM,IAAI,CAAA;CACrB;AAWD,QAAA,MAAM,MAAM;6BApBoB,YAAY;2DAWkB,WAAW;CAYxE,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/dialog-primitive/index.tsx"],"sourcesContent":["import classNames from 'classnames'\nimport { DismissButton } from '../dismiss-button'\nimport type { DetailedHTMLProps, DialogHTMLAttributes } from 'react'\nimport s from './dialog.module.scss'\n\ninterface OverlayProps {\n\tclassName?: string\n}\n\nconst Overlay = ({ className }: OverlayProps) => {\n\treturn <div className={classNames(s.overlay, className)}></div>\n}\n\ninterface DialogProps extends DetailedHTMLProps<\n\tDialogHTMLAttributes<HTMLDialogElement>,\n\tHTMLDialogElement\n> {\n\tonDismiss: () => void\n}\n\nconst Wrapper = ({ children, className, onDismiss, ...rest }: DialogProps) => {\n\treturn (\n\t\t<dialog className={classNames(s.wrapper, className)} {...rest}>\n\t\t\t<DismissButton onClick={onDismiss} className={s.dismiss} />\n\t\t\t{children}\n\t\t</dialog>\n\t)\n}\n\nconst Dialog = {\n\tOverlay,\n\tWrapper,\n}\n\nexport { Dialog }\n"],"names":["Overlay","className","classNames","s","Wrapper","children","onDismiss","rest","jsxs","jsx","DismissButton","Dialog"],"mappings":";;;;AASA,MAAMA,IAAU,CAAC,EAAE,WAAAC,0BACV,OAAA,EAAI,WAAWC,EAAWC,EAAE,SAASF,CAAS,GAAG,GAUpDG,IAAU,CAAC,EAAE,UAAAC,GAAU,WAAAJ,GAAW,WAAAK,GAAW,GAAGC,QAEpD,gBAAAC,EAAC,YAAO,WAAWN,EAAWC,EAAE,SAASF,CAAS,GAAI,GAAGM,GACxD,UAAA;AAAA,EAAA,gBAAAE,EAACC,GAAA,EAAc,SAASJ,GAAW,WAAWH,EAAE,SAAS;AAAA,EACxDE;AAAA,GACF,GAIIM,IAAS;AAAA,EACd,SAAAX;AAAA,EACA,SAAAI;AACD;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PropsWithChildren, HTMLAttributes } from 'react';
|
|
2
|
+
interface DisclosurePrimitiveProviderProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/**
|
|
4
|
+
* Callback fired when the disclosure is closed (optional)
|
|
5
|
+
*/
|
|
6
|
+
onClose?: () => void;
|
|
7
|
+
/**
|
|
8
|
+
* Hook into this trackedIsOpen property to access the state of isOpen
|
|
9
|
+
* @default false
|
|
10
|
+
* */
|
|
11
|
+
trackedIsOpen?: boolean;
|
|
12
|
+
containsInteractive?: boolean;
|
|
13
|
+
ariaLabel?: string;
|
|
14
|
+
}
|
|
15
|
+
declare const DisclosurePrimitive: {
|
|
16
|
+
Provider: ({ onClose, children, className, trackedIsOpen, containsInteractive, ariaLabel, ...rest }: DisclosurePrimitiveProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
Content: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
};
|
|
19
|
+
export { DisclosurePrimitive };
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/disclosure-primitive/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAS9D,UAAU,gCAAiC,SAAQ,cAAc,CAAC,cAAc,CAAC;IAChF;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;;SAGK;IACL,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAsED,QAAA,MAAM,mBAAmB;yGA5DtB,gCAAgC;4BAmDJ,iBAAiB;CASC,CAAA;AAEjD,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/disclosure-primitive/index.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useState, useCallback, useId } from 'react'\nimport type { PropsWithChildren, HTMLAttributes } from 'react'\nimport classNames from 'classnames'\nimport {\n\tDisclosurePrimitiveContext,\n\tuseDisclosurePrimitive,\n\ttype DisclosurePrimitiveContextState,\n} from './use-disclosure-primitive'\nimport s from './styles.module.css'\n\ninterface DisclosurePrimitiveProviderProps extends HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * Callback fired when the disclosure is closed (optional)\n\t */\n\tonClose?: () => void\n\t/**\n\t * Hook into this trackedIsOpen property to access the state of isOpen\n\t * @default false\n\t * */\n\ttrackedIsOpen?: boolean\n\tcontainsInteractive?: boolean\n\tariaLabel?: string\n}\n\nconst Provider = ({\n\tonClose,\n\tchildren,\n\tclassName,\n\ttrackedIsOpen = false,\n\tcontainsInteractive = false,\n\tariaLabel = 'Toggle display',\n\t...rest\n}: DisclosurePrimitiveProviderProps) => {\n\tconst [isOpen, setIsOpen] = useState(trackedIsOpen)\n\tconst contentId = 'content-' + useId()\n\n\t// update the provider state if the trackedIsOpen prop changes\n\tuseEffect(() => {\n\t\tsetIsOpen(trackedIsOpen)\n\t}, [trackedIsOpen])\n\n\tconst closeDisclosure = useCallback(() => {\n\t\tsetIsOpen(false)\n\t\tif (onClose) {\n\t\t\tonClose()\n\t\t}\n\t}, [setIsOpen, onClose])\n\n\tconst onClickToggle = useCallback(() => {\n\t\tsetIsOpen((prevState) => !prevState)\n\t}, [setIsOpen])\n\n\tconst contextValue: DisclosurePrimitiveContextState = useMemo(\n\t\t() => ({\n\t\t\tisOpen,\n\t\t\tonClickToggle,\n\t\t\tcloseDisclosure,\n\t\t\tcontentId,\n\t\t\tcontainsInteractive,\n\t\t\tariaLabel,\n\t\t}),\n\t\t[\n\t\t\tisOpen,\n\t\t\tonClickToggle,\n\t\t\tcloseDisclosure,\n\t\t\tcontentId,\n\t\t\tcontainsInteractive,\n\t\t\tariaLabel,\n\t\t],\n\t)\n\n\treturn (\n\t\t<DisclosurePrimitiveContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tclassName={classNames(s['disclosure-primitive'], className)}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</DisclosurePrimitiveContext.Provider>\n\t)\n}\n\nconst Content = ({ children }: PropsWithChildren) => {\n\tconst { isOpen } = useDisclosurePrimitive()\n\tif (!isOpen) {\n\t\treturn null\n\t}\n\n\treturn <>{children}</>\n}\n\nconst DisclosurePrimitive = { Provider, Content }\n\nexport { DisclosurePrimitive }\n"],"names":["Provider","onClose","children","className","trackedIsOpen","containsInteractive","ariaLabel","rest","isOpen","setIsOpen","contentId","useId","useEffect","closeDisclosure","useCallback","prevState","contextValue","useMemo","onClickToggle","jsx","DisclosurePrimitiveContext","classNames","s","useDisclosurePrimitive","Fragment"],"mappings":";;;;;;AA0BkB,MACjBA,IAAA,CAAA;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC,IAAA;AAAA,EACA,qBAAAC,IAAY;AAAA,EACZ,WAAAC,IAAG;AAAA,EACJ,GAAAC;AACC,MAAA;AACA,QAAM,CAAAC,GAAAC,CAAY,MAAaL,CAAM,GAGrCM,IAAgB,aAAAC,EAAA;AACf,EAAAC,EAAA,MAAU;AACX,IAAAH,EAAIL,CAAc;AAAA,EAElB,GAAA,CAAAA,CAAM,CAAA;AACL,QAAAS,IAAeC,EAAA,MAAA;AACf,IAAAL,IAAa,QAEbR,EAAA;AAAA,EAGD,GAAA,CAAAQ,GAAMR,CAAgB,CAAA,OACVa,QAAwB;AACpC,IAAAL,EAAI,CAASM,MAAC,CAAAA,CAAA;AAAA,EAEd,GAAA,CAAAN,CAAM,CAAA,GACLO,IAAOC;AAAA,IAAA,OACN;AAAA,MACA,QAAAT;AAAA,MACA,eAAAU;AAAA,MACA,iBAAAL;AAAA,MACA,WAAAH;AAAA,MACA,qBAAAL;AAAA,MACD,WAAAC;AAAA,IACA;AAAA,IAAA;AAAA,MAECE;AAAA,MACAU;AAAA,MACAL;AAAA,MACAH;AAAA,MACAL;AAAA,MAAAC;AAAA,IAEF;AAAA,EAEA;AAEE,SAAC,gBAAAa,EAAAC,EAAA,UAAA,EAAA,OAAAJ,GAAA,UAAA,gBAAAG;AAAA,IAAA;AAAA,IAAA;AAAA,MAEC,WAAGE,EAAAC,EAAA,sBAAA,GAAAnB,CAAA;AAAA,MAEH,GAAAI;AAAA,MAAA,UAAAL;AAAA;EAIL,EAAA,CAAA;AAEA,OACS,CAAA,EAAO,UAAAA;AACf,QAAK,EAAA,QAAAM,EAAQ,IAAAe,EAAA;AACZ,aAIF,gBAAAJ,EAAAK,GAAA,EAAA,UAAAtB,EAAA,CAAA,IAHC;AAKD;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type MouseEventHandler } from 'react';
|
|
2
|
+
export interface DisclosurePrimitiveContextState {
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
onClickToggle: MouseEventHandler<HTMLButtonElement>;
|
|
5
|
+
closeDisclosure: () => void;
|
|
6
|
+
contentId: string;
|
|
7
|
+
containsInteractive: boolean;
|
|
8
|
+
ariaLabel: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const DisclosurePrimitiveContext: import("react").Context<DisclosurePrimitiveContextState | undefined>;
|
|
11
|
+
export declare function useDisclosurePrimitive(): DisclosurePrimitiveContextState;
|
|
12
|
+
//# sourceMappingURL=use-disclosure-primitive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-disclosure-primitive.d.ts","sourceRoot":"","sources":["../../../src/components/disclosure-primitive/use-disclosure-primitive.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAEzE,MAAM,WAAW,+BAA+B;IAC/C,MAAM,EAAE,OAAO,CAAA;IACf,aAAa,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;IACnD,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,0BAA0B,sEAE3B,CAAA;AAGZ,wBAAgB,sBAAsB,IAAI,+BAA+B,CAQxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-disclosure-primitive.js","sources":["../../../src/components/disclosure-primitive/use-disclosure-primitive.ts"],"sourcesContent":["'use client'\n\nimport { createContext, useContext, type MouseEventHandler } from 'react'\n\nexport interface DisclosurePrimitiveContextState {\n\tisOpen: boolean\n\tonClickToggle: MouseEventHandler<HTMLButtonElement>\n\tcloseDisclosure: () => void\n\tcontentId: string\n\tcontainsInteractive: boolean\n\tariaLabel: string\n}\n\nexport const DisclosurePrimitiveContext = createContext<\n\tDisclosurePrimitiveContextState | undefined\n>(undefined)\nDisclosurePrimitiveContext.displayName = 'DisclosurePrimitiveContext'\n\nexport function useDisclosurePrimitive(): DisclosurePrimitiveContextState {\n\tconst context = useContext(DisclosurePrimitiveContext)\n\tif (context === undefined) {\n\t\tthrow new Error(\n\t\t\t'useDisclosurePrimitive must be used within a DisclosurePrimitiveContext.Provider',\n\t\t)\n\t}\n\treturn context\n}\n"],"names":["DisclosurePrimitiveContext","createContext","useDisclosurePrimitive","context","useContext"],"mappings":";;AAgBA,MAAAA,IAA2BC,EAAc,MAAA;AAElCD,gBAAmE;AACzE,SAAME;AACN,QAAIC,IAAYC,EAAWJ,CAAA;AAC1B,MAAAG,MAAU;AAAA,UACT,IAAA;AAAA,MACD;AAAA,IACD;AAED,SAAAA;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface DismissButtonProps {
|
|
2
|
+
ariaLabel?: string;
|
|
3
|
+
onClick: React.MouseEventHandler<HTMLButtonElement>;
|
|
4
|
+
className?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const DismissButton: ({ ariaLabel, onClick, className, }: DismissButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export type { DismissButtonProps };
|
|
8
|
+
export { DismissButton };
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dismiss-button/index.tsx"],"names":[],"mappings":"AAIA,UAAU,kBAAkB;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,QAAA,MAAM,aAAa,GAAI,oCAIpB,kBAAkB,4CAWpB,CAAA;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@use 'styles/mixins/focus-ring' as *;
|
|
2
|
+
|
|
3
|
+
.dismiss-button {
|
|
4
|
+
display: flex;
|
|
5
|
+
padding: 0;
|
|
6
|
+
color: var(--mds-color-foreground-faint);
|
|
7
|
+
background-color: transparent;
|
|
8
|
+
border: none;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
|
|
11
|
+
&:hover {
|
|
12
|
+
&::before {
|
|
13
|
+
/* we re-use the pseudo-element created by the "focus-ring" mixin */
|
|
14
|
+
background-color: var(--mds-color-palette-alpha-100);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&:active {
|
|
19
|
+
&::before {
|
|
20
|
+
background-color: var(--mds-color-palette-alpha-200);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* notice: this is used not only for the focus, but also to increase the clickable area */
|
|
25
|
+
@include hds-focus-ring-with-pseudo-element($top: -4px, $right: -4px, $bottom: -4px, $left: -4px);
|
|
26
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { DropdownToggleButtonProps } from './toggle-button';
|
|
2
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
3
|
+
interface DropdownProps extends HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
/**
|
|
5
|
+
* If true, container is given full width styles. (Added by web presence team)
|
|
6
|
+
*/
|
|
7
|
+
isFullWidth?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Callback function invoked when the Dropdown is closed, if provided.
|
|
10
|
+
*/
|
|
11
|
+
onClose?: () => void;
|
|
12
|
+
}
|
|
13
|
+
interface DropdownContentProps {
|
|
14
|
+
listPosition?: 'right' | 'left' | 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
|
|
15
|
+
width?: `${number}px` | `${number}em` | `${number}%`;
|
|
16
|
+
/**
|
|
17
|
+
* If a height prop is provided then the list will have a fixed height.
|
|
18
|
+
*/
|
|
19
|
+
height?: `${number}px` | `${number}em`;
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
}
|
|
22
|
+
interface DropdownHeaderFooterProps extends HTMLAttributes<HTMLDivElement> {
|
|
23
|
+
hasDivider?: boolean;
|
|
24
|
+
}
|
|
25
|
+
declare const Dropdown: {
|
|
26
|
+
Root: {
|
|
27
|
+
({ isFullWidth, onClose, children, className, ...rest }: DropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
displayName: string;
|
|
29
|
+
};
|
|
30
|
+
ToggleButton: {
|
|
31
|
+
({ text, color, size, icon, isFullWidth, count, badge, badgeIcon, disabled, ...rest }: DropdownToggleButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
displayName: string;
|
|
33
|
+
};
|
|
34
|
+
Content: {
|
|
35
|
+
({ listPosition, width, height, children, }: DropdownContentProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
displayName: string;
|
|
37
|
+
};
|
|
38
|
+
List: {
|
|
39
|
+
({ children }: {
|
|
40
|
+
children: ReactNode;
|
|
41
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
displayName: string;
|
|
43
|
+
};
|
|
44
|
+
Header: {
|
|
45
|
+
({ hasDivider, children, ...rest }: DropdownHeaderFooterProps): import("react/jsx-runtime").JSX.Element;
|
|
46
|
+
displayName: string;
|
|
47
|
+
};
|
|
48
|
+
Footer: {
|
|
49
|
+
({ hasDivider, children, ...rest }: DropdownHeaderFooterProps): import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
displayName: string;
|
|
51
|
+
};
|
|
52
|
+
ListItem: {
|
|
53
|
+
Interactive: {
|
|
54
|
+
({ text, color, icon, isLoading, trailingIcon, ...rest }: import("./list-item/interactive").ListItemInteractiveProps): import("react/jsx-runtime").JSX.Element;
|
|
55
|
+
displayName: string;
|
|
56
|
+
};
|
|
57
|
+
Title: {
|
|
58
|
+
({ text, ...rest }: import("./list-item/title").ListItemTitleProps): import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
displayName: string;
|
|
60
|
+
};
|
|
61
|
+
Separator: {
|
|
62
|
+
(props: import("./list-item/separator").ListItemSeparatorProps): import("react/jsx-runtime").JSX.Element;
|
|
63
|
+
displayName: string;
|
|
64
|
+
};
|
|
65
|
+
Custom: {
|
|
66
|
+
({ children }: import("./list-item/custom").ListItemCustomProps): import("react/jsx-runtime").JSX.Element;
|
|
67
|
+
displayName: string;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
export type { DropdownProps, DropdownContentProps, DropdownHeaderFooterProps, DropdownToggleButtonProps, };
|
|
72
|
+
export { Dropdown };
|
|
73
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtD,UAAU,aAAc,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC7D;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB;AA0BD,UAAU,oBAAoB;IAC7B,YAAY,CAAC,EACV,OAAO,GACP,MAAM,GACN,aAAa,GACb,cAAc,GACd,UAAU,GACV,WAAW,CAAA;IACd,KAAK,CAAC,EAAE,GAAG,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,CAAA;IACpD;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,CAAA;IACtC,QAAQ,EAAE,SAAS,CAAA;CACnB;AA4BD,UAAU,yBAA0B,SAAQ,cAAc,CAAC,cAAc,CAAC;IACzE,UAAU,CAAC,EAAE,OAAO,CAAA;CACpB;AA0CD,QAAA,MAAM,QAAQ;;iEAxGX,aAAa;;;;;;;;qDAuCb,oBAAoB;;;;uBAiBK;YAAE,QAAQ,EAAE,SAAS,CAAA;SAAE;;;;4CAYhD,yBAAyB;;;;4CAiBzB,yBAAyB;;;;;;;;;;;;;;;;;;;;;CAmBoD,CAAA;AAEhF,YAAY,EACX,aAAa,EACb,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GACzB,CAAA;AACD,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/dropdown/index.tsx"],"sourcesContent":["import classNames from 'classnames'\nimport * as MenuPrimitive from '../menu-primitive'\nimport { ToggleButton } from './toggle-button'\nimport type { DropdownToggleButtonProps } from './toggle-button'\nimport { ListItem } from './list-item'\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport s from './styles.module.css'\n\ninterface DropdownProps extends HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * If true, container is given full width styles. (Added by web presence team)\n\t */\n\tisFullWidth?: boolean\n\t/**\n\t * Callback function invoked when the Dropdown is closed, if provided.\n\t */\n\tonClose?: () => void\n}\n\nconst Root = ({\n\tisFullWidth,\n\tonClose,\n\tchildren,\n\tclassName,\n\t...rest\n}: DropdownProps) => {\n\treturn (\n\t\t<MenuPrimitive.Provider\n\t\t\tclassName={classNames(\n\t\t\t\t{\n\t\t\t\t\t[s['width-full']]: isFullWidth,\n\t\t\t\t},\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonClose={onClose}\n\t\t\tisFullWidth={isFullWidth}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{children}\n\t\t</MenuPrimitive.Provider>\n\t)\n}\n\ninterface DropdownContentProps {\n\tlistPosition?:\n\t\t| 'right'\n\t\t| 'left'\n\t\t| 'bottom-left'\n\t\t| 'bottom-right'\n\t\t| 'top-left'\n\t\t| 'top-right'\n\twidth?: `${number}px` | `${number}em` | `${number}%`\n\t/**\n\t * If a height prop is provided then the list will have a fixed height.\n\t */\n\theight?: `${number}px` | `${number}em`\n\tchildren: ReactNode\n}\n\nconst Content = ({\n\tlistPosition = 'bottom-right',\n\twidth,\n\theight,\n\tchildren,\n}: DropdownContentProps) => {\n\treturn (\n\t\t<MenuPrimitive.Content>\n\t\t\t<div\n\t\t\t\tclassName={classNames(\n\t\t\t\t\ts.content,\n\t\t\t\t\ts[`content-position-${listPosition}`],\n\t\t\t\t\t{ [s['content-fixed-width']]: !!width },\n\t\t\t\t)}\n\t\t\t\tstyle={{ width, height }}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</MenuPrimitive.Content>\n\t)\n}\n\nconst List = ({ children }: { children: ReactNode }) => {\n\treturn <ul className={s.list}>{children}</ul>\n}\n\ninterface DropdownHeaderFooterProps extends HTMLAttributes<HTMLDivElement> {\n\thasDivider?: boolean\n}\n\nconst Header = ({\n\thasDivider,\n\tchildren,\n\t...rest\n}: DropdownHeaderFooterProps) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={classNames(s.header, {\n\t\t\t\t[s['header-with-divider']]: hasDivider,\n\t\t\t})}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nconst Footer = ({\n\thasDivider,\n\tchildren,\n\t...rest\n}: DropdownHeaderFooterProps) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={classNames(s.footer, {\n\t\t\t\t[s['footer-with-divider']]: hasDivider,\n\t\t\t})}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nRoot.displayName = 'Dropdown.Root'\nContent.displayName = 'Dropdown.Content'\nList.displayName = 'Dropdown.List'\nHeader.displayName = 'Dropdown.Header'\nFooter.displayName = 'Dropdown.Footer'\n\nconst Dropdown = { Root, ToggleButton, Content, List, Header, Footer, ListItem }\n\nexport type {\n\tDropdownProps,\n\tDropdownContentProps,\n\tDropdownHeaderFooterProps,\n\tDropdownToggleButtonProps,\n}\nexport { Dropdown }\n"],"names":["Root","isFullWidth","onClose","children","className","rest","jsx","MenuPrimitive.Provider","classNames","s","Content","listPosition","width","height","MenuPrimitive.Content","List","Header","hasDivider","Footer","Dropdown","ToggleButton","ListItem"],"mappings":";;;;;;AAmBA,MAAMA,IAAO,CAAC;AAAA,EACb,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACJ,MAEE,gBAAAC;AAAA,EAACC;AAAAA,EAAA;AAAA,IACA,WAAWC;AAAA,MACV;AAAA,QACC,CAACC,EAAE,YAAY,CAAC,GAAGR;AAAA,MAAA;AAAA,MAEpBG;AAAA,IAAA;AAAA,IAED,SAAAF;AAAA,IACA,aAAAD;AAAA,IACC,GAAGI;AAAA,IAEH,UAAAF;AAAA,EAAA;AAAA,GAqBEO,IAAU,CAAC;AAAA,EAChB,cAAAC,IAAe;AAAA,EACf,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAV;AACD,MAEE,gBAAAG,EAACQ,GAAA,EACA,UAAA,gBAAAR;AAAA,EAAC;AAAA,EAAA;AAAA,IACA,WAAWE;AAAA,MACVC,EAAE;AAAA,MACFA,EAAE,oBAAoBE,CAAY,EAAE;AAAA,MACpC,EAAE,CAACF,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAACG,EAAA;AAAA,IAAM;AAAA,IAEvC,OAAO,EAAE,OAAAA,GAAO,QAAAC,EAAA;AAAA,IAEf,UAAAV;AAAA,EAAA;AAAA,GAEH,GAIIY,IAAO,CAAC,EAAE,UAAAZ,QACR,gBAAAG,EAAC,MAAA,EAAG,WAAWG,EAAE,MAAO,UAAAN,GAAS,GAOnCa,IAAS,CAAC;AAAA,EACf,YAAAC;AAAA,EACA,UAAAd;AAAA,EACA,GAAGE;AACJ,MAEE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACA,WAAWE,EAAWC,EAAE,QAAQ;AAAA,MAC/B,CAACA,EAAE,qBAAqB,CAAC,GAAGQ;AAAA,IAAA,CAC5B;AAAA,IACA,GAAGZ;AAAA,IAEH,UAAAF;AAAA,EAAA;AAAA,GAKEe,IAAS,CAAC;AAAA,EACf,YAAAD;AAAA,EACA,UAAAd;AAAA,EACA,GAAGE;AACJ,MAEE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACA,WAAWE,EAAWC,EAAE,QAAQ;AAAA,MAC/B,CAACA,EAAE,qBAAqB,CAAC,GAAGQ;AAAA,IAAA,CAC5B;AAAA,IACA,GAAGZ;AAAA,IAEH,UAAAF;AAAA,EAAA;AAAA;AAKJH,EAAK,cAAc;AACnBU,EAAQ,cAAc;AACtBK,EAAK,cAAc;AACnBC,EAAO,cAAc;AACrBE,EAAO,cAAc;AAErB,MAAMC,IAAW,EAAE,MAAAnB,GAAM,cAAAoB,GAAc,SAAAV,GAAS,MAAAK,GAAM,QAAAC,GAAQ,QAAAE,GAAQ,UAAAG,EAAA;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
interface ListItemCustomProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
declare const ListItemCustom: {
|
|
6
|
+
({ children }: ListItemCustomProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
displayName: string;
|
|
8
|
+
};
|
|
9
|
+
export type { ListItemCustomProps };
|
|
10
|
+
export { ListItemCustom };
|
|
11
|
+
//# sourceMappingURL=custom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../src/components/dropdown/list-item/custom.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,UAAU,mBAAmB;IAC5B,QAAQ,EAAE,SAAS,CAAA;CACnB;AAED,QAAA,MAAM,cAAc;mBAAkB,mBAAmB;;CAExD,CAAA;AAID,YAAY,EAAE,mBAAmB,EAAE,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare const ListItem: {
|
|
2
|
+
Interactive: {
|
|
3
|
+
({ text, color, icon, isLoading, trailingIcon, ...rest }: import("./interactive").ListItemInteractiveProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
displayName: string;
|
|
5
|
+
};
|
|
6
|
+
Title: {
|
|
7
|
+
({ text, ...rest }: import("./title").ListItemTitleProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
displayName: string;
|
|
9
|
+
};
|
|
10
|
+
Separator: {
|
|
11
|
+
(props: import("./separator").ListItemSeparatorProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
displayName: string;
|
|
13
|
+
};
|
|
14
|
+
Custom: {
|
|
15
|
+
({ children }: import("./custom").ListItemCustomProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
displayName: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export { ListItem };
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/dropdown/list-item/index.tsx"],"names":[],"mappings":"AAKA,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;CAKb,CAAA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|