@hashicorp/design-system-components 4.15.0 → 4.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -8
- package/declarations/components/hds/advanced-table/expandable-tr-group.d.ts +45 -0
- package/declarations/components/hds/advanced-table/expandable-tr-group.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/index.d.ts +83 -0
- package/declarations/components/hds/advanced-table/index.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/td.d.ts +34 -0
- package/declarations/components/hds/advanced-table/td.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/th-button-expand.d.ts +22 -0
- package/declarations/components/hds/advanced-table/th-button-expand.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/th-button-sort.d.ts +23 -0
- package/declarations/components/hds/advanced-table/th-button-sort.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/th-button-tooltip.d.ts +18 -0
- package/declarations/components/hds/advanced-table/th-button-tooltip.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/th-selectable.d.ts +36 -0
- package/declarations/components/hds/advanced-table/th-selectable.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/th-sort.d.ts +38 -0
- package/declarations/components/hds/advanced-table/th-sort.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/th.d.ts +47 -0
- package/declarations/components/hds/advanced-table/th.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/tr.d.ts +44 -0
- package/declarations/components/hds/advanced-table/tr.d.ts.map +1 -0
- package/declarations/components/hds/advanced-table/types.d.ts +85 -0
- package/declarations/components/hds/advanced-table/types.d.ts.map +1 -0
- package/declarations/components/hds/alert/index.d.ts +2 -1
- package/declarations/components/hds/alert/index.d.ts.map +1 -1
- package/declarations/components/hds/app-footer/status-link.d.ts +3 -2
- package/declarations/components/hds/app-footer/status-link.d.ts.map +1 -1
- package/declarations/components/hds/app-header/index.d.ts +2 -1
- package/declarations/components/hds/app-header/index.d.ts.map +1 -1
- package/declarations/components/hds/app-side-nav/index.d.ts +2 -1
- package/declarations/components/hds/app-side-nav/index.d.ts.map +1 -1
- package/declarations/components/hds/app-side-nav/portal/target.d.ts.map +1 -1
- package/declarations/components/hds/breadcrumb/item.d.ts +1 -1
- package/declarations/components/hds/breadcrumb/item.d.ts.map +1 -1
- package/declarations/components/hds/code-block/copy-button.d.ts +5 -2
- package/declarations/components/hds/code-block/copy-button.d.ts.map +1 -1
- package/declarations/components/hds/code-block/index.d.ts +3 -0
- package/declarations/components/hds/code-block/index.d.ts.map +1 -1
- package/declarations/components/hds/code-editor/description.d.ts +22 -0
- package/declarations/components/hds/code-editor/description.d.ts.map +1 -0
- package/declarations/components/hds/code-editor/full-screen-button.d.ts +18 -0
- package/declarations/components/hds/code-editor/full-screen-button.d.ts.map +1 -0
- package/declarations/components/hds/code-editor/generic.d.ts +13 -0
- package/declarations/components/hds/code-editor/generic.d.ts.map +1 -0
- package/declarations/components/hds/code-editor/index.d.ts +54 -0
- package/declarations/components/hds/code-editor/index.d.ts.map +1 -0
- package/declarations/components/hds/code-editor/title.d.ts +24 -0
- package/declarations/components/hds/code-editor/title.d.ts.map +1 -0
- package/declarations/components/hds/dropdown/list-item/interactive.d.ts +2 -1
- package/declarations/components/hds/dropdown/list-item/interactive.d.ts.map +1 -1
- package/declarations/components/hds/dropdown/toggle/icon.d.ts +2 -1
- package/declarations/components/hds/dropdown/toggle/icon.d.ts.map +1 -1
- package/declarations/components/hds/flyout/body.d.ts +2 -1
- package/declarations/components/hds/flyout/body.d.ts.map +1 -1
- package/declarations/components/hds/flyout/description.d.ts +2 -1
- package/declarations/components/hds/flyout/description.d.ts.map +1 -1
- package/declarations/components/hds/flyout/footer.d.ts +2 -1
- package/declarations/components/hds/flyout/footer.d.ts.map +1 -1
- package/declarations/components/hds/flyout/header.d.ts +2 -1
- package/declarations/components/hds/flyout/header.d.ts.map +1 -1
- package/declarations/components/hds/form/masked-input/base.d.ts +5 -2
- package/declarations/components/hds/form/masked-input/base.d.ts.map +1 -1
- package/declarations/components/hds/form/super-select/multiple/base.d.ts +1 -1
- package/declarations/components/hds/form/super-select/multiple/base.d.ts.map +1 -1
- package/declarations/components/hds/form/super-select/single/base.d.ts +1 -1
- package/declarations/components/hds/form/super-select/single/base.d.ts.map +1 -1
- package/declarations/components/hds/form/text-input/field.d.ts +3 -2
- package/declarations/components/hds/form/text-input/field.d.ts.map +1 -1
- package/declarations/components/hds/icon/index.d.ts +2 -1
- package/declarations/components/hds/icon/index.d.ts.map +1 -1
- package/declarations/components/hds/interactive/index.d.ts +1 -1
- package/declarations/components/hds/interactive/index.d.ts.map +1 -1
- package/declarations/components/hds/link/inline.d.ts +2 -1
- package/declarations/components/hds/link/inline.d.ts.map +1 -1
- package/declarations/components/hds/link/standalone.d.ts +2 -1
- package/declarations/components/hds/link/standalone.d.ts.map +1 -1
- package/declarations/components/hds/menu-primitive/index.d.ts +2 -1
- package/declarations/components/hds/menu-primitive/index.d.ts.map +1 -1
- package/declarations/components/hds/modal/body.d.ts +2 -1
- package/declarations/components/hds/modal/body.d.ts.map +1 -1
- package/declarations/components/hds/modal/footer.d.ts +2 -1
- package/declarations/components/hds/modal/footer.d.ts.map +1 -1
- package/declarations/components/hds/modal/header.d.ts +2 -1
- package/declarations/components/hds/modal/header.d.ts.map +1 -1
- package/declarations/components/hds/pagination/compact/index.d.ts +2 -1
- package/declarations/components/hds/pagination/compact/index.d.ts.map +1 -1
- package/declarations/components/hds/pagination/numbered/index.d.ts +3 -2
- package/declarations/components/hds/pagination/numbered/index.d.ts.map +1 -1
- package/declarations/components/hds/popover-primitive/index.d.ts +2 -1
- package/declarations/components/hds/popover-primitive/index.d.ts.map +1 -1
- package/declarations/components/hds/rich-tooltip/toggle.d.ts.map +1 -1
- package/declarations/components/hds/side-nav/header/icon-button.d.ts +2 -1
- package/declarations/components/hds/side-nav/header/icon-button.d.ts.map +1 -1
- package/declarations/components/hds/side-nav/index.d.ts +2 -1
- package/declarations/components/hds/side-nav/index.d.ts.map +1 -1
- package/declarations/components/hds/side-nav/portal/target.d.ts.map +1 -1
- package/declarations/components/hds/stepper/task/indicator.d.ts +1 -1
- package/declarations/components/hds/stepper/task/indicator.d.ts.map +1 -1
- package/declarations/components/hds/table/index.d.ts +2 -1
- package/declarations/components/hds/table/index.d.ts.map +1 -1
- package/declarations/components/hds/table/th-selectable.d.ts +3 -3
- package/declarations/components/hds/table/th-selectable.d.ts.map +1 -1
- package/declarations/components/hds/tabs/index.d.ts +2 -1
- package/declarations/components/hds/tabs/index.d.ts.map +1 -1
- package/declarations/components/hds/tabs/tab.d.ts +7 -1
- package/declarations/components/hds/tabs/tab.d.ts.map +1 -1
- package/declarations/components/hds/tag/index.d.ts +16 -0
- package/declarations/components/hds/tag/index.d.ts.map +1 -1
- package/declarations/components/hds/tag/types.d.ts +15 -0
- package/declarations/components/hds/tag/types.d.ts.map +1 -1
- package/declarations/components/hds/time/index.d.ts.map +1 -1
- package/declarations/components.d.ts +15 -0
- package/declarations/components.d.ts.map +1 -1
- package/declarations/helpers/hds-format-date.d.ts +16 -3
- package/declarations/helpers/hds-format-date.d.ts.map +1 -1
- package/declarations/helpers/hds-format-relative.d.ts +9 -3
- package/declarations/helpers/hds-format-relative.d.ts.map +1 -1
- package/declarations/helpers/hds-link-to-models.d.ts +7 -1
- package/declarations/helpers/hds-link-to-models.d.ts.map +1 -1
- package/declarations/helpers/hds-link-to-query.d.ts +7 -1
- package/declarations/helpers/hds-link-to-query.d.ts.map +1 -1
- package/declarations/instance-initializers/load-sprite.d.ts.map +1 -1
- package/declarations/modifiers/hds-advanced-table-cell/dom-management.d.ts +10 -0
- package/declarations/modifiers/hds-advanced-table-cell/dom-management.d.ts.map +1 -0
- package/declarations/modifiers/hds-advanced-table-cell/keyboard-navigation.d.ts +6 -0
- package/declarations/modifiers/hds-advanced-table-cell/keyboard-navigation.d.ts.map +1 -0
- package/declarations/modifiers/hds-advanced-table-cell.d.ts +26 -0
- package/declarations/modifiers/hds-advanced-table-cell.d.ts.map +1 -0
- package/declarations/modifiers/hds-clipboard.d.ts.map +1 -1
- package/declarations/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.d.ts +8 -0
- package/declarations/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.d.ts.map +1 -0
- package/declarations/modifiers/hds-code-editor/languages/rego.d.ts +48 -0
- package/declarations/modifiers/hds-code-editor/languages/rego.d.ts.map +1 -0
- package/declarations/modifiers/hds-code-editor/languages/sentinel.d.ts +48 -0
- package/declarations/modifiers/hds-code-editor/languages/sentinel.d.ts.map +1 -0
- package/declarations/modifiers/hds-code-editor/palettes/hds-dark-palette.d.ts +21 -0
- package/declarations/modifiers/hds-code-editor/palettes/hds-dark-palette.d.ts.map +1 -0
- package/declarations/modifiers/hds-code-editor/themes/hds-dark-theme.d.ts +7 -0
- package/declarations/modifiers/hds-code-editor/themes/hds-dark-theme.d.ts.map +1 -0
- package/declarations/modifiers/hds-code-editor/types.d.ts +18 -0
- package/declarations/modifiers/hds-code-editor/types.d.ts.map +1 -0
- package/declarations/modifiers/hds-code-editor.d.ts +47 -0
- package/declarations/modifiers/hds-code-editor.d.ts.map +1 -0
- package/declarations/modifiers/hds-tooltip.d.ts +4 -2
- package/declarations/modifiers/hds-tooltip.d.ts.map +1 -1
- package/declarations/services/hds-time-types.d.ts +7 -7
- package/declarations/services/hds-time-types.d.ts.map +1 -1
- package/declarations/services/hds-time.d.ts +7 -3
- package/declarations/services/hds-time.d.ts.map +1 -1
- package/declarations/template-registry.d.ts +49 -0
- package/declarations/template-registry.d.ts.map +1 -1
- package/dist/README.md +4 -8
- package/dist/_app_/components/hds/advanced-table/expandable-tr-group.js +1 -0
- package/dist/_app_/components/hds/advanced-table/index.js +1 -0
- package/dist/_app_/components/hds/advanced-table/td.js +1 -0
- package/dist/_app_/components/hds/advanced-table/th-button-expand.js +1 -0
- package/dist/_app_/components/hds/advanced-table/th-button-sort.js +1 -0
- package/dist/_app_/components/hds/advanced-table/th-button-tooltip.js +1 -0
- package/dist/_app_/components/hds/advanced-table/th-selectable.js +1 -0
- package/dist/_app_/components/hds/advanced-table/th-sort.js +1 -0
- package/dist/_app_/components/hds/advanced-table/th.js +1 -0
- package/dist/_app_/components/hds/advanced-table/tr.js +1 -0
- package/dist/_app_/components/hds/code-editor/description.js +1 -0
- package/dist/_app_/components/hds/code-editor/full-screen-button.js +1 -0
- package/dist/_app_/components/hds/code-editor/generic.js +1 -0
- package/dist/_app_/components/hds/code-editor/index.js +1 -0
- package/dist/_app_/components/hds/code-editor/title.js +1 -0
- package/dist/_app_/modifiers/hds-advanced-table-cell/dom-management.js +1 -0
- package/dist/_app_/modifiers/hds-advanced-table-cell/keyboard-navigation.js +1 -0
- package/dist/_app_/modifiers/hds-advanced-table-cell.js +1 -0
- package/dist/_app_/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.js +1 -0
- package/dist/_app_/modifiers/hds-code-editor/languages/rego.js +1 -0
- package/dist/_app_/modifiers/hds-code-editor/languages/sentinel.js +1 -0
- package/dist/_app_/modifiers/hds-code-editor/palettes/hds-dark-palette.js +1 -0
- package/dist/_app_/modifiers/hds-code-editor/themes/hds-dark-theme.js +1 -0
- package/dist/_app_/modifiers/hds-code-editor/types.js +1 -0
- package/dist/_app_/modifiers/hds-code-editor.js +1 -0
- package/dist/components/hds/accordion/index.js.map +1 -1
- package/dist/components/hds/accordion/item/button.js +11 -4
- package/dist/components/hds/accordion/item/button.js.map +1 -1
- package/dist/components/hds/accordion/item/index.js +12 -11
- package/dist/components/hds/accordion/item/index.js.map +1 -1
- package/dist/components/hds/advanced-table/expandable-tr-group.js +74 -0
- package/dist/components/hds/advanced-table/expandable-tr-group.js.map +1 -0
- package/dist/components/hds/advanced-table/index.js +328 -0
- package/dist/components/hds/advanced-table/index.js.map +1 -0
- package/dist/components/hds/advanced-table/td.js +89 -0
- package/dist/components/hds/advanced-table/td.js.map +1 -0
- package/dist/components/hds/advanced-table/th-button-expand.js +53 -0
- package/dist/components/hds/advanced-table/th-button-expand.js.map +1 -0
- package/dist/components/hds/advanced-table/th-button-sort.js +58 -0
- package/dist/components/hds/advanced-table/th-button-sort.js.map +1 -0
- package/dist/components/hds/advanced-table/th-button-tooltip.js +29 -0
- package/dist/components/hds/advanced-table/th-button-tooltip.js.map +1 -0
- package/dist/components/hds/advanced-table/th-selectable.js +100 -0
- package/dist/components/hds/advanced-table/th-selectable.js.map +1 -0
- package/dist/components/hds/advanced-table/th-sort.js +88 -0
- package/dist/components/hds/advanced-table/th-sort.js.map +1 -0
- package/dist/components/hds/advanced-table/th.js +105 -0
- package/dist/components/hds/advanced-table/th.js.map +1 -0
- package/dist/components/hds/advanced-table/tr.js +39 -0
- package/dist/components/hds/advanced-table/tr.js.map +1 -0
- package/dist/components/hds/advanced-table/types.js +54 -0
- package/dist/components/hds/advanced-table/types.js.map +1 -0
- package/dist/components/hds/alert/description.js.map +1 -1
- package/dist/components/hds/alert/index.js +19 -16
- package/dist/components/hds/alert/index.js.map +1 -1
- package/dist/components/hds/alert/title.js.map +1 -1
- package/dist/components/hds/app-footer/copyright.js.map +1 -1
- package/dist/components/hds/app-footer/index.js.map +1 -1
- package/dist/components/hds/app-footer/item.js.map +1 -1
- package/dist/components/hds/app-footer/legal-links.js.map +1 -1
- package/dist/components/hds/app-footer/link.js.map +1 -1
- package/dist/components/hds/app-footer/status-link.js.map +1 -1
- package/dist/components/hds/app-frame/index.js.map +1 -1
- package/dist/components/hds/app-frame/parts/footer.js.map +1 -1
- package/dist/components/hds/app-frame/parts/header.js.map +1 -1
- package/dist/components/hds/app-frame/parts/main.js.map +1 -1
- package/dist/components/hds/app-frame/parts/modals.js.map +1 -1
- package/dist/components/hds/app-frame/parts/sidebar.js.map +1 -1
- package/dist/components/hds/app-header/home-link.js.map +1 -1
- package/dist/components/hds/app-header/index.js +42 -34
- package/dist/components/hds/app-header/index.js.map +1 -1
- package/dist/components/hds/app-header/menu-button.js +11 -4
- package/dist/components/hds/app-header/menu-button.js.map +1 -1
- package/dist/components/hds/app-side-nav/index.js +44 -31
- package/dist/components/hds/app-side-nav/index.js.map +1 -1
- package/dist/components/hds/app-side-nav/list/back-link.js.map +1 -1
- package/dist/components/hds/app-side-nav/list/index.js +15 -13
- package/dist/components/hds/app-side-nav/list/index.js.map +1 -1
- package/dist/components/hds/app-side-nav/list/item.js.map +1 -1
- package/dist/components/hds/app-side-nav/list/link.js.map +1 -1
- package/dist/components/hds/app-side-nav/list/title.js +13 -9
- package/dist/components/hds/app-side-nav/list/title.js.map +1 -1
- package/dist/components/hds/app-side-nav/portal/index.js.map +1 -1
- package/dist/components/hds/app-side-nav/portal/target.js +31 -28
- package/dist/components/hds/app-side-nav/portal/target.js.map +1 -1
- package/dist/components/hds/app-side-nav/toggle-button.js.map +1 -1
- package/dist/components/hds/application-state/body.js.map +1 -1
- package/dist/components/hds/application-state/footer.js.map +1 -1
- package/dist/components/hds/application-state/header.js.map +1 -1
- package/dist/components/hds/application-state/index.js.map +1 -1
- package/dist/components/hds/application-state/media.js.map +1 -1
- package/dist/components/hds/badge/index.js.map +1 -1
- package/dist/components/hds/badge-count/index.js.map +1 -1
- package/dist/components/hds/breadcrumb/index.js.map +1 -1
- package/dist/components/hds/breadcrumb/item.js +1 -1
- package/dist/components/hds/breadcrumb/item.js.map +1 -1
- package/dist/components/hds/breadcrumb/truncation.js.map +1 -1
- package/dist/components/hds/button/index.js.map +1 -1
- package/dist/components/hds/button-set/index.js.map +1 -1
- package/dist/components/hds/card/container.js.map +1 -1
- package/dist/components/hds/code-block/copy-button.js +9 -5
- package/dist/components/hds/code-block/copy-button.js.map +1 -1
- package/dist/components/hds/code-block/description.js.map +1 -1
- package/dist/components/hds/code-block/index.js +27 -21
- package/dist/components/hds/code-block/index.js.map +1 -1
- package/dist/components/hds/code-block/title.js.map +1 -1
- package/dist/components/hds/code-editor/description.js +18 -0
- package/dist/components/hds/code-editor/description.js.map +1 -0
- package/dist/components/hds/code-editor/full-screen-button.js +26 -0
- package/dist/components/hds/code-editor/full-screen-button.js.map +1 -0
- package/dist/components/hds/code-editor/generic.js +16 -0
- package/dist/components/hds/code-editor/generic.js.map +1 -0
- package/dist/components/hds/code-editor/index.js +135 -0
- package/dist/components/hds/code-editor/index.js.map +1 -0
- package/dist/components/hds/code-editor/title.js +21 -0
- package/dist/components/hds/code-editor/title.js.map +1 -0
- package/dist/components/hds/copy/button/index.js +23 -20
- package/dist/components/hds/copy/button/index.js.map +1 -1
- package/dist/components/hds/copy/snippet/index.js +23 -20
- package/dist/components/hds/copy/snippet/index.js.map +1 -1
- package/dist/components/hds/dialog-primitive/body.js.map +1 -1
- package/dist/components/hds/dialog-primitive/description.js.map +1 -1
- package/dist/components/hds/dialog-primitive/footer.js.map +1 -1
- package/dist/components/hds/dialog-primitive/header.js.map +1 -1
- package/dist/components/hds/dialog-primitive/overlay.js.map +1 -1
- package/dist/components/hds/dialog-primitive/wrapper.js.map +1 -1
- package/dist/components/hds/disclosure-primitive/index.js +27 -21
- package/dist/components/hds/disclosure-primitive/index.js.map +1 -1
- package/dist/components/hds/dismiss-button/index.js.map +1 -1
- package/dist/components/hds/dropdown/footer.js.map +1 -1
- package/dist/components/hds/dropdown/header.js.map +1 -1
- package/dist/components/hds/dropdown/index.js +12 -5
- package/dist/components/hds/dropdown/index.js.map +1 -1
- package/dist/components/hds/dropdown/list-item/checkbox.js.map +1 -1
- package/dist/components/hds/dropdown/list-item/checkmark.js.map +1 -1
- package/dist/components/hds/dropdown/list-item/copy-item.js.map +1 -1
- package/dist/components/hds/dropdown/list-item/description.js.map +1 -1
- package/dist/components/hds/dropdown/list-item/generic.js.map +1 -1
- package/dist/components/hds/dropdown/list-item/interactive.js.map +1 -1
- package/dist/components/hds/dropdown/list-item/radio.js.map +1 -1
- package/dist/components/hds/dropdown/list-item/separator.js.map +1 -1
- package/dist/components/hds/dropdown/list-item/title.js.map +1 -1
- package/dist/components/hds/dropdown/toggle/button.js +12 -10
- package/dist/components/hds/dropdown/toggle/button.js.map +1 -1
- package/dist/components/hds/dropdown/toggle/chevron.js.map +1 -1
- package/dist/components/hds/dropdown/toggle/icon.js +20 -12
- package/dist/components/hds/dropdown/toggle/icon.js.map +1 -1
- package/dist/components/hds/flyout/body.js +2 -1
- package/dist/components/hds/flyout/body.js.map +1 -1
- package/dist/components/hds/flyout/description.js +1 -0
- package/dist/components/hds/flyout/description.js.map +1 -1
- package/dist/components/hds/flyout/footer.js +2 -1
- package/dist/components/hds/flyout/footer.js.map +1 -1
- package/dist/components/hds/flyout/header.js +2 -1
- package/dist/components/hds/flyout/header.js.map +1 -1
- package/dist/components/hds/flyout/index.js +33 -18
- package/dist/components/hds/flyout/index.js.map +1 -1
- package/dist/components/hds/form/character-count/index.js.map +1 -1
- package/dist/components/hds/form/checkbox/base.js.map +1 -1
- package/dist/components/hds/form/checkbox/field.js.map +1 -1
- package/dist/components/hds/form/checkbox/group.js.map +1 -1
- package/dist/components/hds/form/error/index.js.map +1 -1
- package/dist/components/hds/form/error/message.js.map +1 -1
- package/dist/components/hds/form/field/index.js +15 -7
- package/dist/components/hds/form/field/index.js.map +1 -1
- package/dist/components/hds/form/fieldset/index.js +15 -7
- package/dist/components/hds/form/fieldset/index.js.map +1 -1
- package/dist/components/hds/form/file-input/base.js.map +1 -1
- package/dist/components/hds/form/file-input/field.js.map +1 -1
- package/dist/components/hds/form/helper-text/index.js.map +1 -1
- package/dist/components/hds/form/indicator/index.js.map +1 -1
- package/dist/components/hds/form/label/index.js.map +1 -1
- package/dist/components/hds/form/legend/index.js.map +1 -1
- package/dist/components/hds/form/masked-input/base.js +45 -15
- package/dist/components/hds/form/masked-input/base.js.map +1 -1
- package/dist/components/hds/form/masked-input/field.js.map +1 -1
- package/dist/components/hds/form/radio/base.js.map +1 -1
- package/dist/components/hds/form/radio/field.js.map +1 -1
- package/dist/components/hds/form/radio/group.js.map +1 -1
- package/dist/components/hds/form/radio-card/description.js.map +1 -1
- package/dist/components/hds/form/radio-card/group.js.map +1 -1
- package/dist/components/hds/form/radio-card/index.js.map +1 -1
- package/dist/components/hds/form/radio-card/label.js.map +1 -1
- package/dist/components/hds/form/select/base.js.map +1 -1
- package/dist/components/hds/form/select/field.js.map +1 -1
- package/dist/components/hds/form/super-select/after-options.js.map +1 -1
- package/dist/components/hds/form/super-select/multiple/base.js +39 -29
- package/dist/components/hds/form/super-select/multiple/base.js.map +1 -1
- package/dist/components/hds/form/super-select/multiple/field.js +1 -1
- package/dist/components/hds/form/super-select/multiple/field.js.map +1 -1
- package/dist/components/hds/form/super-select/option-group.js +11 -10
- package/dist/components/hds/form/super-select/option-group.js.map +1 -1
- package/dist/components/hds/form/super-select/placeholder.js.map +1 -1
- package/dist/components/hds/form/super-select/single/base.js +18 -13
- package/dist/components/hds/form/super-select/single/base.js.map +1 -1
- package/dist/components/hds/form/super-select/single/field.js +1 -1
- package/dist/components/hds/form/super-select/single/field.js.map +1 -1
- package/dist/components/hds/form/text-input/base.js.map +1 -1
- package/dist/components/hds/form/text-input/field.js +21 -18
- package/dist/components/hds/form/text-input/field.js.map +1 -1
- package/dist/components/hds/form/textarea/base.js.map +1 -1
- package/dist/components/hds/form/textarea/field.js.map +1 -1
- package/dist/components/hds/form/toggle/base.js.map +1 -1
- package/dist/components/hds/form/toggle/field.js.map +1 -1
- package/dist/components/hds/form/toggle/group.js.map +1 -1
- package/dist/components/hds/form/visibility-toggle/index.js.map +1 -1
- package/dist/components/hds/icon/index.js +7 -3
- package/dist/components/hds/icon/index.js.map +1 -1
- package/dist/components/hds/icon-tile/index.js.map +1 -1
- package/dist/components/hds/interactive/index.js +12 -5
- package/dist/components/hds/interactive/index.js.map +1 -1
- package/dist/components/hds/link/inline.js.map +1 -1
- package/dist/components/hds/link/standalone.js.map +1 -1
- package/dist/components/hds/menu-primitive/index.js +37 -24
- package/dist/components/hds/menu-primitive/index.js.map +1 -1
- package/dist/components/hds/modal/body.js +1 -0
- package/dist/components/hds/modal/body.js.map +1 -1
- package/dist/components/hds/modal/footer.js +2 -1
- package/dist/components/hds/modal/footer.js.map +1 -1
- package/dist/components/hds/modal/header.js +1 -0
- package/dist/components/hds/modal/header.js.map +1 -1
- package/dist/components/hds/modal/index.js +30 -16
- package/dist/components/hds/modal/index.js.map +1 -1
- package/dist/components/hds/page-header/actions.js.map +1 -1
- package/dist/components/hds/page-header/badges.js.map +1 -1
- package/dist/components/hds/page-header/description.js.map +1 -1
- package/dist/components/hds/page-header/index.js.map +1 -1
- package/dist/components/hds/page-header/subtitle.js.map +1 -1
- package/dist/components/hds/page-header/title.js.map +1 -1
- package/dist/components/hds/pagination/compact/index.js +31 -28
- package/dist/components/hds/pagination/compact/index.js.map +1 -1
- package/dist/components/hds/pagination/info/index.js.map +1 -1
- package/dist/components/hds/pagination/nav/arrow.js +10 -4
- package/dist/components/hds/pagination/nav/arrow.js.map +1 -1
- package/dist/components/hds/pagination/nav/ellipsis.js.map +1 -1
- package/dist/components/hds/pagination/nav/number.js +10 -4
- package/dist/components/hds/pagination/nav/number.js.map +1 -1
- package/dist/components/hds/pagination/numbered/index.js +44 -47
- package/dist/components/hds/pagination/numbered/index.js.map +1 -1
- package/dist/components/hds/pagination/size-selector/index.js +12 -8
- package/dist/components/hds/pagination/size-selector/index.js.map +1 -1
- package/dist/components/hds/popover-primitive/index.js +127 -96
- package/dist/components/hds/popover-primitive/index.js.map +1 -1
- package/dist/components/hds/reveal/index.js +26 -24
- package/dist/components/hds/reveal/index.js.map +1 -1
- package/dist/components/hds/reveal/toggle/button.js.map +1 -1
- package/dist/components/hds/rich-tooltip/bubble.js.map +1 -1
- package/dist/components/hds/rich-tooltip/index.js +8 -7
- package/dist/components/hds/rich-tooltip/index.js.map +1 -1
- package/dist/components/hds/rich-tooltip/toggle.js +1 -1
- package/dist/components/hds/rich-tooltip/toggle.js.map +1 -1
- package/dist/components/hds/segmented-group/index.js.map +1 -1
- package/dist/components/hds/separator/index.js.map +1 -1
- package/dist/components/hds/side-nav/base.js.map +1 -1
- package/dist/components/hds/side-nav/header/home-link.js.map +1 -1
- package/dist/components/hds/side-nav/header/icon-button.js +1 -0
- package/dist/components/hds/side-nav/header/icon-button.js.map +1 -1
- package/dist/components/hds/side-nav/header/index.js.map +1 -1
- package/dist/components/hds/side-nav/index.js +47 -34
- package/dist/components/hds/side-nav/index.js.map +1 -1
- package/dist/components/hds/side-nav/list/back-link.js.map +1 -1
- package/dist/components/hds/side-nav/list/index.js +15 -13
- package/dist/components/hds/side-nav/list/index.js.map +1 -1
- package/dist/components/hds/side-nav/list/item.js.map +1 -1
- package/dist/components/hds/side-nav/list/link.js.map +1 -1
- package/dist/components/hds/side-nav/list/title.js +13 -9
- package/dist/components/hds/side-nav/list/title.js.map +1 -1
- package/dist/components/hds/side-nav/portal/index.js.map +1 -1
- package/dist/components/hds/side-nav/portal/target.js +31 -28
- package/dist/components/hds/side-nav/portal/target.js.map +1 -1
- package/dist/components/hds/side-nav/toggle-button.js.map +1 -1
- package/dist/components/hds/stepper/step/indicator.js.map +1 -1
- package/dist/components/hds/stepper/task/indicator.js.map +1 -1
- package/dist/components/hds/table/index.js +54 -40
- package/dist/components/hds/table/index.js.map +1 -1
- package/dist/components/hds/table/td.js.map +1 -1
- package/dist/components/hds/table/th-button-sort.js +8 -7
- package/dist/components/hds/table/th-button-sort.js.map +1 -1
- package/dist/components/hds/table/th-button-tooltip.js +7 -6
- package/dist/components/hds/table/th-button-tooltip.js.map +1 -1
- package/dist/components/hds/table/th-selectable.js +26 -32
- package/dist/components/hds/table/th-selectable.js.map +1 -1
- package/dist/components/hds/table/th-sort.js +12 -10
- package/dist/components/hds/table/th-sort.js.map +1 -1
- package/dist/components/hds/table/th.js +12 -10
- package/dist/components/hds/table/th.js.map +1 -1
- package/dist/components/hds/table/tr.js.map +1 -1
- package/dist/components/hds/tabs/index.js +78 -55
- package/dist/components/hds/tabs/index.js.map +1 -1
- package/dist/components/hds/tabs/panel.js +21 -14
- package/dist/components/hds/tabs/panel.js.map +1 -1
- package/dist/components/hds/tabs/tab.js +38 -14
- package/dist/components/hds/tabs/tab.js.map +1 -1
- package/dist/components/hds/tag/index.js +43 -3
- package/dist/components/hds/tag/index.js.map +1 -1
- package/dist/components/hds/tag/types.js +16 -1
- package/dist/components/hds/tag/types.js.map +1 -1
- package/dist/components/hds/text/body.js.map +1 -1
- package/dist/components/hds/text/code.js.map +1 -1
- package/dist/components/hds/text/display.js.map +1 -1
- package/dist/components/hds/text/index.js.map +1 -1
- package/dist/components/hds/time/index.js +19 -14
- package/dist/components/hds/time/index.js.map +1 -1
- package/dist/components/hds/time/range.js +11 -12
- package/dist/components/hds/time/range.js.map +1 -1
- package/dist/components/hds/time/single.js.map +1 -1
- package/dist/components/hds/toast/index.js.map +1 -1
- package/dist/components/hds/tooltip-button/index.js.map +1 -1
- package/dist/components/hds/yield/index.js.map +1 -1
- package/dist/components.js +16 -1
- package/dist/components.js.map +1 -1
- package/dist/helpers/hds-format-date.js.map +1 -1
- package/dist/helpers/hds-format-relative.js.map +1 -1
- package/dist/instance-initializers/load-sprite.js +3 -1
- package/dist/instance-initializers/load-sprite.js.map +1 -1
- package/dist/modifiers/hds-advanced-table-cell/dom-management.js +51 -0
- package/dist/modifiers/hds-advanced-table-cell/dom-management.js.map +1 -0
- package/dist/modifiers/hds-advanced-table-cell/keyboard-navigation.js +105 -0
- package/dist/modifiers/hds-advanced-table-cell/keyboard-navigation.js.map +1 -0
- package/dist/modifiers/hds-advanced-table-cell.js +55 -0
- package/dist/modifiers/hds-advanced-table-cell.js.map +1 -0
- package/dist/modifiers/hds-clipboard.js +29 -35
- package/dist/modifiers/hds-clipboard.js.map +1 -1
- package/dist/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.js +80 -0
- package/dist/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.js.map +1 -0
- package/dist/modifiers/hds-code-editor/languages/rego.js +191 -0
- package/dist/modifiers/hds-code-editor/languages/rego.js.map +1 -0
- package/dist/modifiers/hds-code-editor/languages/sentinel.js +148 -0
- package/dist/modifiers/hds-code-editor/languages/sentinel.js.map +1 -0
- package/dist/modifiers/hds-code-editor/palettes/hds-dark-palette.js +24 -0
- package/dist/modifiers/hds-code-editor/palettes/hds-dark-palette.js.map +1 -0
- package/dist/modifiers/hds-code-editor/themes/hds-dark-theme.js +62 -0
- package/dist/modifiers/hds-code-editor/themes/hds-dark-theme.js.map +1 -0
- package/dist/modifiers/hds-code-editor/types.js +21 -0
- package/dist/modifiers/hds-code-editor/types.js.map +1 -0
- package/dist/modifiers/hds-code-editor.js +293 -0
- package/dist/modifiers/hds-code-editor.js.map +1 -0
- package/dist/modifiers/hds-tooltip.js +128 -108
- package/dist/modifiers/hds-tooltip.js.map +1 -1
- package/dist/services/hds-time.js +29 -23
- package/dist/services/hds-time.js.map +1 -1
- package/dist/styles/@hashicorp/design-system-components.css +560 -65
- package/dist/styles/@hashicorp/design-system-components.scss +2 -0
- package/dist/styles/@hashicorp/design-system-power-select-overrides.scss +3 -3
- package/dist/styles/components/accordion.scss +1 -1
- package/dist/styles/components/advanced-table.scss +353 -0
- package/dist/styles/components/alert.scss +2 -2
- package/dist/styles/components/app-header.scss +1 -1
- package/dist/styles/components/badge-count.scss +1 -1
- package/dist/styles/components/badge.scss +12 -2
- package/dist/styles/components/breadcrumb.scss +2 -2
- package/dist/styles/components/card/container.scss +1 -1
- package/dist/styles/components/code-block/index.scss +1 -1
- package/dist/styles/components/code-editor/index.scss +113 -0
- package/dist/styles/components/code-editor/theme.scss +20 -0
- package/dist/styles/components/copy/snippet.scss +1 -1
- package/dist/styles/components/dropdown.scss +4 -3
- package/dist/styles/components/form/select.scss +1 -1
- package/dist/styles/components/icon-tile.scss +1 -1
- package/dist/styles/components/link/standalone.scss +1 -1
- package/dist/styles/components/modal.scss +1 -1
- package/dist/styles/components/rich-tooltip.scss +4 -2
- package/dist/styles/components/side-nav/a11y-refocus.scss +1 -1
- package/dist/styles/components/table.scss +10 -33
- package/dist/styles/components/tag.scss +28 -0
- package/dist/styles/components/time.scss +7 -0
- package/dist/styles/components/tooltip.scss +49 -0
- package/dist/styles/mixins/_button.scss +3 -3
- package/dist/utils/hds-aria-described-by.js +14 -17
- package/dist/utils/hds-aria-described-by.js.map +1 -1
- package/package.json +101 -70
- package/dist/_rollupPluginBabelHelpers-81503waH.js +0 -57
- package/dist/_rollupPluginBabelHelpers-81503waH.js.map +0 -1
|
@@ -1,19 +1,27 @@
|
|
|
1
|
-
import { c as _classPrivateMethodInitSpec, a as _defineProperty, d as _assertClassBrand } from '../_rollupPluginBabelHelpers-81503waH.js';
|
|
2
1
|
import Modifier from 'ember-modifier';
|
|
3
2
|
import { assert } from '@ember/debug';
|
|
4
3
|
import { registerDestructor } from '@ember/destroyable';
|
|
4
|
+
import { guidFor } from '@ember/object/internals';
|
|
5
5
|
import tippy, { followCursor } from 'tippy.js';
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Copyright (c) HashiCorp, Inc.
|
|
9
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
10
|
+
*/
|
|
7
11
|
|
|
8
12
|
function cleanup(instance) {
|
|
9
13
|
const {
|
|
10
14
|
_interval,
|
|
11
15
|
_needsTabIndex,
|
|
12
|
-
_tooltip
|
|
16
|
+
_tooltip,
|
|
17
|
+
_containerElement
|
|
13
18
|
} = instance;
|
|
14
19
|
if (_needsTabIndex) {
|
|
15
20
|
_tooltip?.reference?.removeAttribute('tabindex');
|
|
16
21
|
}
|
|
22
|
+
if (_containerElement) {
|
|
23
|
+
_containerElement.remove();
|
|
24
|
+
}
|
|
17
25
|
clearInterval(_interval);
|
|
18
26
|
_tooltip?.destroy();
|
|
19
27
|
}
|
|
@@ -31,133 +39,145 @@ function cleanup(instance) {
|
|
|
31
39
|
* @class TooltipModifier
|
|
32
40
|
*
|
|
33
41
|
*/
|
|
34
|
-
var _HdsTooltipModifier_brand = /*#__PURE__*/new WeakSet();
|
|
35
42
|
class HdsTooltipModifier extends Modifier {
|
|
43
|
+
_didSetup = false;
|
|
44
|
+
_containerId = 'container-' + guidFor(this);
|
|
45
|
+
_interval = undefined;
|
|
46
|
+
_needsTabIndex = false;
|
|
47
|
+
_tooltip = undefined;
|
|
48
|
+
_containerElement;
|
|
36
49
|
constructor(owner, args) {
|
|
37
50
|
super(owner, args);
|
|
38
|
-
_classPrivateMethodInitSpec(this, _HdsTooltipModifier_brand);
|
|
39
|
-
_defineProperty(this, "_didSetup", false);
|
|
40
|
-
_defineProperty(this, "_interval", undefined);
|
|
41
|
-
_defineProperty(this, "_needsTabIndex", false);
|
|
42
|
-
_defineProperty(this, "_tooltip", undefined);
|
|
43
|
-
_defineProperty(this, "hideOnEsc", {
|
|
44
|
-
name: 'hideOnEsc',
|
|
45
|
-
defaultValue: true,
|
|
46
|
-
fn({
|
|
47
|
-
hide
|
|
48
|
-
}) {
|
|
49
|
-
function onKeyDown(event) {
|
|
50
|
-
if (event.key === 'Escape') {
|
|
51
|
-
hide();
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return {
|
|
55
|
-
onShow() {
|
|
56
|
-
document.addEventListener('keydown', onKeyDown);
|
|
57
|
-
},
|
|
58
|
-
onHide() {
|
|
59
|
-
document.removeEventListener('keydown', onKeyDown);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
51
|
registerDestructor(this, cleanup);
|
|
65
52
|
}
|
|
53
|
+
hideOnEsc = {
|
|
54
|
+
name: 'hideOnEsc',
|
|
55
|
+
defaultValue: true,
|
|
56
|
+
fn({
|
|
57
|
+
hide
|
|
58
|
+
}) {
|
|
59
|
+
function onKeyDown(event) {
|
|
60
|
+
if (event.key === 'Escape') {
|
|
61
|
+
hide();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
onShow() {
|
|
66
|
+
document.addEventListener('keydown', onKeyDown);
|
|
67
|
+
},
|
|
68
|
+
onHide() {
|
|
69
|
+
document.removeEventListener('keydown', onKeyDown);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
};
|
|
66
74
|
modify(element, positional, named) {
|
|
67
75
|
assert('Tooltip must have an element', element);
|
|
68
76
|
if (!this._didSetup) {
|
|
69
|
-
|
|
77
|
+
this.#setup(element, positional, named);
|
|
70
78
|
this._didSetup = true;
|
|
71
79
|
}
|
|
72
|
-
|
|
80
|
+
this.#update(element, positional, named);
|
|
73
81
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
82
|
+
#setup(element, positional, named) {
|
|
83
|
+
this.#createPopoverContainer(element);
|
|
84
|
+
const tooltipProps = this.#getTooltipProps(element, positional, named);
|
|
85
|
+
this._tooltip = tippy(element, tooltipProps);
|
|
86
|
+
}
|
|
87
|
+
#update(element, positional, named) {
|
|
88
|
+
const tooltipProps = this.#getTooltipProps(element, positional, named);
|
|
89
|
+
this._tooltip?.setProps(tooltipProps);
|
|
90
|
+
}
|
|
91
|
+
#createPopoverContainer(element) {
|
|
92
|
+
const containerElement = document.createElement('div');
|
|
93
|
+
containerElement.setAttribute('id', this._containerId);
|
|
94
|
+
containerElement.classList.add('hds-tooltip-container');
|
|
95
|
+
containerElement.style.setProperty('position', 'absolute');
|
|
96
|
+
containerElement.style.setProperty('width', '100%');
|
|
97
|
+
element.setAttribute('aria-controls', this._containerId);
|
|
98
|
+
element.setAttribute('aria-describedby', this._containerId);
|
|
99
|
+
element.after(containerElement);
|
|
100
|
+
this._containerElement = containerElement;
|
|
101
|
+
}
|
|
102
|
+
#getTooltipProps(element, positional, named) {
|
|
103
|
+
const {
|
|
104
|
+
options
|
|
105
|
+
} = named;
|
|
106
|
+
let [content] = positional;
|
|
107
|
+
let $anchor = element; // Ensure $anchor can be null
|
|
89
108
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
109
|
+
if (typeof options?.triggerTarget === 'string') {
|
|
110
|
+
const $el = $anchor;
|
|
111
|
+
if (options.triggerTarget === 'parentNode') {
|
|
112
|
+
if ($anchor.parentNode instanceof HTMLElement) {
|
|
113
|
+
// Type guard
|
|
114
|
+
$anchor = $anchor.parentNode;
|
|
115
|
+
}
|
|
116
|
+
} else {
|
|
117
|
+
const queryResult = $anchor.querySelector(options.triggerTarget);
|
|
118
|
+
if (queryResult) {
|
|
119
|
+
$anchor = queryResult;
|
|
120
|
+
}
|
|
96
121
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
122
|
+
if ($anchor instanceof HTMLElement) {
|
|
123
|
+
// Ensure $anchor is an HTMLElement before cloning
|
|
124
|
+
const clonedElement = $anchor.cloneNode(true); // Explicitly cast cloned node to HTMLElement
|
|
125
|
+
content = clonedElement.outerHTML; // Now safely access outerHTML
|
|
101
126
|
}
|
|
127
|
+
$el?.remove(); // Use optional chaining in case $el is null
|
|
128
|
+
options.triggerTarget = null;
|
|
102
129
|
}
|
|
103
|
-
if ($anchor instanceof HTMLElement) {
|
|
104
|
-
// Ensure $anchor is an HTMLElement before cloning
|
|
105
|
-
const clonedElement = $anchor.cloneNode(true); // Explicitly cast cloned node to HTMLElement
|
|
106
|
-
content = clonedElement.outerHTML; // Now safely access outerHTML
|
|
107
|
-
}
|
|
108
|
-
$el?.remove(); // Use optional chaining in case $el is null
|
|
109
|
-
options.triggerTarget = null;
|
|
110
|
-
}
|
|
111
130
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
// The {{hds-tooltip}} will just use the HTML content.
|
|
132
|
+
if (typeof content === 'undefined' && $anchor instanceof HTMLElement) {
|
|
133
|
+
// Ensure $anchor is an HTMLElement before accessing innerHTML
|
|
134
|
+
content = $anchor.innerHTML;
|
|
135
|
+
$anchor.innerHTML = '';
|
|
136
|
+
}
|
|
137
|
+
if (options?.trigger === 'manual') {
|
|
138
|
+
// If we are manually triggering, a out delay means only show for the
|
|
139
|
+
// amount of time specified by the delay.
|
|
140
|
+
const delay = options.delay || [];
|
|
141
|
+
if (Array.isArray(delay) && delay.length) {
|
|
142
|
+
if (typeof delay[1] !== 'undefined') {
|
|
143
|
+
options.onShown = tooltip => {
|
|
144
|
+
clearInterval(this._interval);
|
|
145
|
+
this._interval = setTimeout(() => {
|
|
146
|
+
tooltip.hide();
|
|
147
|
+
}, delay[1] ?? 0);
|
|
148
|
+
};
|
|
149
|
+
}
|
|
130
150
|
}
|
|
131
151
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
152
|
+
const $trigger = $anchor;
|
|
153
|
+
if (!$trigger.hasAttribute('tabindex')) {
|
|
154
|
+
this._needsTabIndex = true;
|
|
155
|
+
$trigger.setAttribute('tabindex', '0');
|
|
156
|
+
}
|
|
138
157
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
158
|
+
/* Typescript does not like the previous approach of adding an undefined value
|
|
159
|
+
** to the array and then filtering it out.
|
|
160
|
+
*/
|
|
161
|
+
const plugins = options?.followCursor !== undefined ? [this.hideOnEsc, followCursor] : [this.hideOnEsc];
|
|
162
|
+
return {
|
|
163
|
+
theme: 'hds',
|
|
164
|
+
triggerTarget: $trigger,
|
|
165
|
+
arrow: `
|
|
147
166
|
<svg class="hds-tooltip-pointer" width="16" height="7" viewBox="0 0 16 7" xmlns="http://www.w3.org/2000/svg">
|
|
148
167
|
<path d="M0 7H16L9.11989 0.444571C8.49776 -0.148191 7.50224 -0.148191 6.88011 0.444572L0 7Z" />
|
|
149
168
|
</svg>`,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
169
|
+
// keeps tooltip itself open on hover:
|
|
170
|
+
interactive: true,
|
|
171
|
+
appendTo: this._containerElement,
|
|
172
|
+
// fix accessibility features that get messed up with setting interactive: true
|
|
173
|
+
aria: {
|
|
174
|
+
expanded: false
|
|
175
|
+
},
|
|
176
|
+
content: () => content,
|
|
177
|
+
plugins,
|
|
178
|
+
...options
|
|
179
|
+
};
|
|
180
|
+
}
|
|
161
181
|
}
|
|
162
182
|
|
|
163
183
|
export { HdsTooltipModifier as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hds-tooltip.js","sources":["../../src/modifiers/hds-tooltip.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// Note: the majority of this code is a porting of the existing tooltip implementation in Cloud UI\n// (which was initially implemented in Structure)\n\nimport Modifier from 'ember-modifier';\nimport type { ArgsFor } from 'ember-modifier';\n\nimport { assert } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\n\nimport tippy, { followCursor } from 'tippy.js';\nimport type {\n HideAll as TippyHideAll,\n Instance as TippyInstance,\n Props as TippyProps,\n} from 'tippy.js';\n// used by custom SVG arrow:\nimport 'tippy.js/dist/svg-arrow.css';\n\nexport interface HdsTooltipModifierSignature {\n Args: {\n Positional: [string];\n Named: {\n options?: Partial<TippyProps>;\n };\n };\n Element: HTMLElement;\n}\n\nfunction cleanup(instance: HdsTooltipModifier): void {\n const { _interval, _needsTabIndex, _tooltip } = instance;\n if (_needsTabIndex) {\n _tooltip?.reference?.removeAttribute('tabindex');\n }\n clearInterval(_interval);\n _tooltip?.destroy();\n}\n\n/**\n *\n * `Tooltip` implements a modifier that uses Tippy.js to display a tooltip.\n *\n * Sample usage:\n * ```\n * <div {{hds-tooltip 'Text' options=(hash )}}>Hover me!</div>\n * ```\n *\n * @see https://atomiks.github.io/tippyjs\n * @class TooltipModifier\n *\n */\nexport default class HdsTooltipModifier extends Modifier<HdsTooltipModifierSignature> {\n private _didSetup = false;\n _interval: number | undefined = undefined;\n _needsTabIndex = false;\n _tooltip: TippyInstance | undefined = undefined;\n\n constructor(owner: unknown, args: ArgsFor<HdsTooltipModifierSignature>) {\n super(owner, args);\n registerDestructor(this, cleanup);\n }\n\n hideOnEsc = {\n name: 'hideOnEsc',\n defaultValue: true,\n fn({ hide }: { hide: TippyHideAll }) {\n function onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n hide();\n }\n }\n\n return {\n onShow() {\n document.addEventListener('keydown', onKeyDown);\n },\n onHide() {\n document.removeEventListener('keydown', onKeyDown);\n },\n };\n },\n };\n\n modify(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n assert('Tooltip must have an element', element);\n\n if (!this._didSetup) {\n this.#setup(element, positional, named);\n this._didSetup = true;\n }\n\n this.#update(element, positional, named);\n }\n\n #setup(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n const tooltipProps = this.#getTooltipProps(element, positional, named);\n this._tooltip = tippy(element, tooltipProps);\n }\n\n #update(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n const tooltipProps = this.#getTooltipProps(element, positional, named);\n this._tooltip?.setProps(tooltipProps);\n }\n\n #getTooltipProps(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): Partial<TippyProps> {\n const { options } = named;\n let [content] = positional;\n\n let $anchor: HTMLElement | null = element; // Ensure $anchor can be null\n\n if (typeof options?.triggerTarget === 'string') {\n const $el = $anchor;\n if (options.triggerTarget === 'parentNode') {\n if ($anchor.parentNode instanceof HTMLElement) {\n // Type guard\n $anchor = $anchor.parentNode;\n }\n } else {\n const queryResult: HTMLElement | null = $anchor.querySelector(\n options.triggerTarget\n );\n if (queryResult) {\n $anchor = queryResult;\n }\n }\n if ($anchor instanceof HTMLElement) {\n // Ensure $anchor is an HTMLElement before cloning\n const clonedElement = $anchor.cloneNode(true) as HTMLElement; // Explicitly cast cloned node to HTMLElement\n content = clonedElement.outerHTML; // Now safely access outerHTML\n }\n $el?.remove(); // Use optional chaining in case $el is null\n options.triggerTarget = null;\n }\n\n // The {{hds-tooltip}} will just use the HTML content.\n if (typeof content === 'undefined' && $anchor instanceof HTMLElement) {\n // Ensure $anchor is an HTMLElement before accessing innerHTML\n content = $anchor.innerHTML;\n $anchor.innerHTML = '';\n }\n\n if (options?.trigger === 'manual') {\n // If we are manually triggering, a out delay means only show for the\n // amount of time specified by the delay.\n const delay = options.delay || [];\n\n if (Array.isArray(delay) && delay.length) {\n if (typeof delay[1] !== 'undefined') {\n options.onShown = (tooltip) => {\n clearInterval(this._interval);\n this._interval = setTimeout(() => {\n tooltip.hide();\n }, delay[1] ?? 0);\n };\n }\n }\n }\n\n const $trigger = $anchor;\n\n if (!$trigger.hasAttribute('tabindex')) {\n this._needsTabIndex = true;\n $trigger.setAttribute('tabindex', '0');\n }\n\n /* Typescript does not like the previous approach of adding an undefined value\n ** to the array and then filtering it out.\n */\n const plugins =\n options?.followCursor !== undefined\n ? [this.hideOnEsc, followCursor]\n : [this.hideOnEsc];\n\n return {\n theme: 'hds',\n triggerTarget: $trigger,\n arrow: `\n <svg class=\"hds-tooltip-pointer\" width=\"16\" height=\"7\" viewBox=\"0 0 16 7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 7H16L9.11989 0.444571C8.49776 -0.148191 7.50224 -0.148191 6.88011 0.444572L0 7Z\" />\n </svg>`,\n // keeps tooltip itself open on hover:\n interactive: true,\n // fix accessibility features that get messed up with setting interactive: true\n aria: {\n content: 'describedby',\n expanded: false,\n },\n content: () => content,\n plugins,\n ...options,\n };\n }\n}\n"],"names":["cleanup","instance","_interval","_needsTabIndex","_tooltip","reference","removeAttribute","clearInterval","destroy","_HdsTooltipModifier_brand","WeakSet","HdsTooltipModifier","Modifier","constructor","owner","args","_classPrivateMethodInitSpec","_defineProperty","undefined","name","defaultValue","fn","hide","onKeyDown","event","key","onShow","document","addEventListener","onHide","removeEventListener","registerDestructor","modify","element","positional","named","assert","_didSetup","_assertClassBrand","_setup","call","_update","tooltipProps","_getTooltipProps","tippy","setProps","options","content","$anchor","triggerTarget","$el","parentNode","HTMLElement","queryResult","querySelector","clonedElement","cloneNode","outerHTML","remove","innerHTML","trigger","delay","Array","isArray","length","onShown","tooltip","setTimeout","$trigger","hasAttribute","setAttribute","plugins","followCursor","hideOnEsc","theme","arrow","interactive","aria","expanded"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hds-tooltip.js","sources":["../../src/modifiers/hds-tooltip.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// Note: the majority of this code is a porting of the existing tooltip implementation in Cloud UI\n// (which was initially implemented in Structure)\n\nimport Modifier from 'ember-modifier';\nimport type { ArgsFor } from 'ember-modifier';\n\nimport { assert } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { guidFor } from '@ember/object/internals';\n\nimport tippy, { followCursor } from 'tippy.js';\nimport type {\n HideAll as TippyHideAll,\n Instance as TippyInstance,\n Props as TippyProps,\n} from 'tippy.js';\n\nimport type Owner from '@ember/owner';\n\nexport interface HdsTooltipModifierSignature {\n Args: {\n Positional: [string];\n Named: {\n options?: Partial<TippyProps>;\n };\n };\n Element: HTMLElement;\n}\n\nfunction cleanup(instance: HdsTooltipModifier): void {\n const { _interval, _needsTabIndex, _tooltip, _containerElement } = instance;\n if (_needsTabIndex) {\n _tooltip?.reference?.removeAttribute('tabindex');\n }\n if (_containerElement) {\n _containerElement.remove();\n }\n clearInterval(_interval);\n _tooltip?.destroy();\n}\n\n/**\n *\n * `Tooltip` implements a modifier that uses Tippy.js to display a tooltip.\n *\n * Sample usage:\n * ```\n * <div {{hds-tooltip 'Text' options=(hash )}}>Hover me!</div>\n * ```\n *\n * @see https://atomiks.github.io/tippyjs\n * @class TooltipModifier\n *\n */\nexport default class HdsTooltipModifier extends Modifier<HdsTooltipModifierSignature> {\n private _didSetup = false;\n private _containerId: string = 'container-' + guidFor(this);\n _interval: number | undefined = undefined;\n _needsTabIndex = false;\n _tooltip: TippyInstance | undefined = undefined;\n _containerElement?: HTMLElement;\n\n constructor(owner: Owner, args: ArgsFor<HdsTooltipModifierSignature>) {\n super(owner, args);\n registerDestructor(this, cleanup);\n }\n\n hideOnEsc = {\n name: 'hideOnEsc',\n defaultValue: true,\n fn({ hide }: { hide: TippyHideAll }) {\n function onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n hide();\n }\n }\n\n return {\n onShow() {\n document.addEventListener('keydown', onKeyDown);\n },\n onHide() {\n document.removeEventListener('keydown', onKeyDown);\n },\n };\n },\n };\n\n modify(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n assert('Tooltip must have an element', element);\n\n if (!this._didSetup) {\n this.#setup(element, positional, named);\n this._didSetup = true;\n }\n\n this.#update(element, positional, named);\n }\n\n #setup(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n this.#createPopoverContainer(element);\n const tooltipProps = this.#getTooltipProps(element, positional, named);\n this._tooltip = tippy(element, tooltipProps);\n }\n\n #update(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n const tooltipProps = this.#getTooltipProps(element, positional, named);\n this._tooltip?.setProps(tooltipProps);\n }\n\n #createPopoverContainer(\n element: HdsTooltipModifierSignature['Element']\n ): void {\n const containerElement = document.createElement('div');\n containerElement.setAttribute('id', this._containerId);\n containerElement.classList.add('hds-tooltip-container');\n containerElement.style.setProperty('position', 'absolute');\n containerElement.style.setProperty('width', '100%');\n element.setAttribute('aria-controls', this._containerId);\n element.setAttribute('aria-describedby', this._containerId);\n element.after(containerElement);\n this._containerElement = containerElement;\n }\n\n #getTooltipProps(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): Partial<TippyProps> {\n const { options } = named;\n let [content] = positional;\n\n let $anchor: HTMLElement | null = element; // Ensure $anchor can be null\n\n if (typeof options?.triggerTarget === 'string') {\n const $el = $anchor;\n if (options.triggerTarget === 'parentNode') {\n if ($anchor.parentNode instanceof HTMLElement) {\n // Type guard\n $anchor = $anchor.parentNode;\n }\n } else {\n const queryResult: HTMLElement | null = $anchor.querySelector(\n options.triggerTarget\n );\n if (queryResult) {\n $anchor = queryResult;\n }\n }\n if ($anchor instanceof HTMLElement) {\n // Ensure $anchor is an HTMLElement before cloning\n const clonedElement = $anchor.cloneNode(true) as HTMLElement; // Explicitly cast cloned node to HTMLElement\n content = clonedElement.outerHTML; // Now safely access outerHTML\n }\n $el?.remove(); // Use optional chaining in case $el is null\n options.triggerTarget = null;\n }\n\n // The {{hds-tooltip}} will just use the HTML content.\n if (typeof content === 'undefined' && $anchor instanceof HTMLElement) {\n // Ensure $anchor is an HTMLElement before accessing innerHTML\n content = $anchor.innerHTML;\n $anchor.innerHTML = '';\n }\n\n if (options?.trigger === 'manual') {\n // If we are manually triggering, a out delay means only show for the\n // amount of time specified by the delay.\n const delay = options.delay || [];\n\n if (Array.isArray(delay) && delay.length) {\n if (typeof delay[1] !== 'undefined') {\n options.onShown = (tooltip) => {\n clearInterval(this._interval);\n this._interval = setTimeout(() => {\n tooltip.hide();\n }, delay[1] ?? 0);\n };\n }\n }\n }\n\n const $trigger = $anchor;\n\n if (!$trigger.hasAttribute('tabindex')) {\n this._needsTabIndex = true;\n $trigger.setAttribute('tabindex', '0');\n }\n\n /* Typescript does not like the previous approach of adding an undefined value\n ** to the array and then filtering it out.\n */\n const plugins =\n options?.followCursor !== undefined\n ? [this.hideOnEsc, followCursor]\n : [this.hideOnEsc];\n\n return {\n theme: 'hds',\n triggerTarget: $trigger,\n arrow: `\n <svg class=\"hds-tooltip-pointer\" width=\"16\" height=\"7\" viewBox=\"0 0 16 7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 7H16L9.11989 0.444571C8.49776 -0.148191 7.50224 -0.148191 6.88011 0.444572L0 7Z\" />\n </svg>`,\n // keeps tooltip itself open on hover:\n interactive: true,\n appendTo: this._containerElement,\n // fix accessibility features that get messed up with setting interactive: true\n aria: {\n expanded: false,\n },\n content: () => content,\n plugins,\n ...options,\n };\n }\n}\n"],"names":["cleanup","instance","_interval","_needsTabIndex","_tooltip","_containerElement","reference","removeAttribute","remove","clearInterval","destroy","HdsTooltipModifier","Modifier","_didSetup","_containerId","guidFor","undefined","constructor","owner","args","registerDestructor","hideOnEsc","name","defaultValue","fn","hide","onKeyDown","event","key","onShow","document","addEventListener","onHide","removeEventListener","modify","element","positional","named","assert","#setup","tooltipProps","tippy","#update","setProps","#createPopoverContainer","containerElement","createElement","setAttribute","classList","add","style","setProperty","after","#getTooltipProps","options","content","$anchor","triggerTarget","$el","parentNode","HTMLElement","queryResult","querySelector","clonedElement","cloneNode","outerHTML","innerHTML","trigger","delay","Array","isArray","length","onShown","tooltip","setTimeout","$trigger","hasAttribute","plugins","followCursor","theme","arrow","interactive","appendTo","aria","expanded"],"mappings":"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"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { _ as _applyDecoratedDescriptor, e as _classPrivateFieldInitSpec, b as _initializerDefineProperty, f as _classPrivateFieldGet2 } from '../_rollupPluginBabelHelpers-81503waH.js';
|
|
2
1
|
import Service from '@ember/service';
|
|
3
|
-
import {
|
|
2
|
+
import { timeout, task } from 'ember-concurrency';
|
|
4
3
|
import { tracked } from '@glimmer/tracking';
|
|
5
4
|
import { DateTime } from 'luxon';
|
|
6
5
|
import { isTesting } from '@embroider/macros';
|
|
6
|
+
import { g, i, n } from 'decorator-transforms/runtime';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Copyright (c) HashiCorp, Inc.
|
|
10
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
11
|
+
*/
|
|
7
12
|
|
|
8
|
-
var _dec, _class, _descriptor, _listeners;
|
|
9
13
|
const MILLISECOND_IN_MS = 1;
|
|
10
14
|
const SECOND_IN_MS = 1000 * MILLISECOND_IN_MS;
|
|
11
15
|
const MINUTE_IN_MS = 60 * SECOND_IN_MS;
|
|
@@ -29,12 +33,16 @@ const DEFAULT_RELATIVE_THRESHOLDS = {
|
|
|
29
33
|
};
|
|
30
34
|
let HdsDisplayKeyValues = /*#__PURE__*/function (HdsDisplayKeyValues) {
|
|
31
35
|
HdsDisplayKeyValues["FriendlyRelative"] = "friendly-relative";
|
|
36
|
+
// Example: 'Sep 5, 2018 (30 minutes ago)'
|
|
32
37
|
HdsDisplayKeyValues["FriendlyLocal"] = "friendly-local";
|
|
38
|
+
// Example: 'Sep 5, 2018, 4:07:32 pm'
|
|
33
39
|
HdsDisplayKeyValues["FriendlyOnly"] = "friendly-only";
|
|
40
|
+
// Example: 'Sep 5, 2018'
|
|
34
41
|
HdsDisplayKeyValues["Relative"] = "relative";
|
|
35
|
-
|
|
42
|
+
// Example: 'in 7 days'
|
|
43
|
+
HdsDisplayKeyValues["Utc"] = "utc"; // Example: '2018-09-05T23:15:17345Z'
|
|
36
44
|
return HdsDisplayKeyValues;
|
|
37
|
-
}({});
|
|
45
|
+
}({});
|
|
38
46
|
const FORMAT_PRECISION_SHORT_DATE = {
|
|
39
47
|
month: 'short',
|
|
40
48
|
day: 'numeric',
|
|
@@ -91,14 +99,14 @@ const DEFAULT_DISPLAY_MAPPING = {
|
|
|
91
99
|
};
|
|
92
100
|
const DISPLAY_SCALE = Object.keys(DEFAULT_DISPLAY_MAPPING);
|
|
93
101
|
const DISPLAYS = [HdsDisplayKeyValues.FriendlyRelative, HdsDisplayKeyValues.FriendlyLocal, HdsDisplayKeyValues.FriendlyOnly, HdsDisplayKeyValues.Relative, HdsDisplayKeyValues.Utc];
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
_initializerDefineProperty(this, "now", _descriptor, this);
|
|
102
|
+
class TimeService extends Service {
|
|
103
|
+
#listeners = new Set();
|
|
104
|
+
static {
|
|
105
|
+
g(this.prototype, "now", [tracked], function () {
|
|
106
|
+
return Date.now();
|
|
107
|
+
});
|
|
101
108
|
}
|
|
109
|
+
#now = (i(this, "now"), undefined);
|
|
102
110
|
format(difference, display = DEFAULT_DISPLAY) {
|
|
103
111
|
let displayKey;
|
|
104
112
|
// If the scale display is defined and valid then set that display.
|
|
@@ -164,7 +172,7 @@ let TimeService = (_dec = task({
|
|
|
164
172
|
|
|
165
173
|
// Subscribes a listener to the ticking task for time changes.
|
|
166
174
|
register(id) {
|
|
167
|
-
|
|
175
|
+
this.#listeners.add(id);
|
|
168
176
|
// @ts-expect-error - TS2339: Property 'perform' does not exist on type '() => TaskGenerator<string | undefined>'
|
|
169
177
|
// note: we could potentially use taskFor via `ember-concurrency-ts` to avoid this exception
|
|
170
178
|
this.start.perform();
|
|
@@ -175,7 +183,7 @@ let TimeService = (_dec = task({
|
|
|
175
183
|
|
|
176
184
|
// Unregisters listener for the time task.
|
|
177
185
|
unregister(id) {
|
|
178
|
-
return
|
|
186
|
+
return this.#listeners.delete(id);
|
|
179
187
|
}
|
|
180
188
|
*start() {
|
|
181
189
|
while (this.listeners.size) {
|
|
@@ -190,6 +198,11 @@ let TimeService = (_dec = task({
|
|
|
190
198
|
}
|
|
191
199
|
|
|
192
200
|
// Transforms a JS date to a string representing the UTC ISO date.
|
|
201
|
+
static {
|
|
202
|
+
n(this.prototype, "start", [task({
|
|
203
|
+
drop: true
|
|
204
|
+
})]);
|
|
205
|
+
}
|
|
193
206
|
toIsoUtcString(date) {
|
|
194
207
|
try {
|
|
195
208
|
return DateTime.fromJSDate(date).toUTC().toJSDate().toISOString();
|
|
@@ -200,16 +213,9 @@ let TimeService = (_dec = task({
|
|
|
200
213
|
|
|
201
214
|
// Gets the currently subscribed listeners.
|
|
202
215
|
get listeners() {
|
|
203
|
-
return
|
|
204
|
-
}
|
|
205
|
-
}), _descriptor = _applyDecoratedDescriptor(_class.prototype, "now", [tracked], {
|
|
206
|
-
configurable: true,
|
|
207
|
-
enumerable: true,
|
|
208
|
-
writable: true,
|
|
209
|
-
initializer: function () {
|
|
210
|
-
return Date.now();
|
|
216
|
+
return this.#listeners;
|
|
211
217
|
}
|
|
212
|
-
}
|
|
218
|
+
}
|
|
213
219
|
|
|
214
220
|
export { DATE_DISPLAY_FORMATS, DAY_IN_MS, DEFAULT_DISPLAY, DEFAULT_DISPLAY_MAPPING, DEFAULT_RELATIVE_THRESHOLDS, DISPLAYS, DISPLAY_SCALE, FORMAT_PRECISION_MINUTE, FORMAT_PRECISION_SECOND, FORMAT_PRECISION_SHORT_DATE, HOUR_IN_MS, HdsDisplayKeyValues, HdsTimeRelativeUnitValues, MILLISECOND_IN_MS, MINUTE_IN_MS, SECOND_IN_MS, THRESHOLD_RELATIVE_TIME_IN_MS, WEEK_IN_MS, TimeService as default };
|
|
215
221
|
//# sourceMappingURL=hds-time.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hds-time.js","sources":["../../src/services/hds-time.ts"],"sourcesContent":["import Service from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { DateTime } from 'luxon';\nimport { isTesting } from '@embroider/macros';\nimport type { TaskGenerator } from 'ember-concurrency';\nimport type {\n DisplayType,\n DefaultDisplayType,\n DisplayFormatType,\n} from './hds-time-types.ts';\n\nexport const MILLISECOND_IN_MS = 1;\nexport const SECOND_IN_MS = 1000 * MILLISECOND_IN_MS;\nexport const MINUTE_IN_MS = 60 * SECOND_IN_MS;\nexport const HOUR_IN_MS = 60 * MINUTE_IN_MS;\nexport const DAY_IN_MS = 24 * HOUR_IN_MS;\nexport const WEEK_IN_MS = 7 * DAY_IN_MS;\n\nexport const THRESHOLD_RELATIVE_TIME_IN_MS = WEEK_IN_MS;\n\nexport enum HdsTimeRelativeUnitValues {\n Second = 'second',\n Hour = 'hour',\n Minute = 'minute',\n Day = 'day',\n Week = 'week',\n}\n\nexport const DEFAULT_RELATIVE_THRESHOLDS = {\n [HdsTimeRelativeUnitValues.Second]: 1 * MINUTE_IN_MS,\n [HdsTimeRelativeUnitValues.Minute]: 1 * HOUR_IN_MS,\n [HdsTimeRelativeUnitValues.Hour]: 1 * DAY_IN_MS,\n [HdsTimeRelativeUnitValues.Day]: 100 * WEEK_IN_MS,\n};\n\nexport enum HdsDisplayKeyValues {\n FriendlyRelative = 'friendly-relative', // Example: 'Sep 5, 2018 (30 minutes ago)'\n FriendlyLocal = 'friendly-local', // Example: 'Sep 5, 2018, 4:07:32 pm'\n FriendlyOnly = 'friendly-only', // Example: 'Sep 5, 2018'\n Relative = 'relative', // Example: 'in 7 days'\n Utc = 'utc', // Example: '2018-09-05T23:15:17345Z'\n}\n\nexport const FORMAT_PRECISION_SHORT_DATE: DisplayFormatType = {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n};\nexport const FORMAT_PRECISION_MINUTE: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n};\nexport const FORMAT_PRECISION_SECOND: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n};\nexport const DATE_DISPLAY_FORMATS: {\n [x: string]: DisplayFormatType;\n} = {\n [HdsDisplayKeyValues.FriendlyLocal]: FORMAT_PRECISION_SECOND,\n [HdsDisplayKeyValues.FriendlyOnly]: FORMAT_PRECISION_SHORT_DATE,\n};\n\nexport const DEFAULT_DISPLAY = '';\n\nexport const DEFAULT_DISPLAY_MAPPING: {\n [x: string]: DefaultDisplayType;\n} = {\n [HdsDisplayKeyValues.FriendlyRelative]: {\n displayFormat: FORMAT_PRECISION_SHORT_DATE,\n showFriendly: true,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_SECOND,\n },\n [HdsDisplayKeyValues.FriendlyLocal]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyLocal],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.FriendlyOnly]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyOnly],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.Relative]: {\n displayFormat: null,\n showFriendly: false,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_MINUTE,\n },\n [HdsDisplayKeyValues.Utc]: {\n displayFormat: null,\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n};\n\nexport const DISPLAY_SCALE = Object.keys(DEFAULT_DISPLAY_MAPPING);\n\nexport const DISPLAYS = [\n HdsDisplayKeyValues.FriendlyRelative,\n HdsDisplayKeyValues.FriendlyLocal,\n HdsDisplayKeyValues.FriendlyOnly,\n HdsDisplayKeyValues.Relative,\n HdsDisplayKeyValues.Utc,\n];\n\nexport default class TimeService extends Service {\n #listeners = new Set<Date>();\n\n @tracked now = Date.now();\n\n format(\n difference: {\n absValueInMs: number;\n valueInMs: number;\n },\n display = DEFAULT_DISPLAY\n ): DisplayType {\n let displayKey;\n // If the scale display is defined and valid then set that display.\n if (display && DISPLAY_SCALE.includes(display)) {\n displayKey = display;\n } else {\n // If there's no defined display then we will execute the design system's\n // prefered algorithm.\n\n // By default, we assume we will display just a relative display only.\n displayKey = HdsDisplayKeyValues.Relative;\n\n // If the difference in date is greater than the threshold for showing the\n // relative time then switch the display key.\n if (difference.absValueInMs > THRESHOLD_RELATIVE_TIME_IN_MS) {\n displayKey = HdsDisplayKeyValues.FriendlyLocal;\n }\n }\n\n const options: DefaultDisplayType | undefined =\n DEFAULT_DISPLAY_MAPPING[displayKey];\n\n return {\n options,\n difference,\n relative: this.selectTimeRelativeUnit(difference),\n };\n }\n\n // Formats the value of a relative unit.\n formatTimeRelativeUnit(\n value: number,\n unit: string\n ): { value: number; unit: string } {\n return {\n value: Math.trunc(value),\n unit,\n };\n }\n\n // Selects an appropriate display format for the difference.\n selectTimeRelativeUnit(\n { absValueInMs, valueInMs }: { absValueInMs: number; valueInMs: number },\n thresholds: {\n second: number;\n minute: number;\n hour: number;\n day: number;\n } = DEFAULT_RELATIVE_THRESHOLDS\n ): { value: number; unit: string } {\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Second]) {\n return this.formatTimeRelativeUnit(\n valueInMs / SECOND_IN_MS,\n HdsTimeRelativeUnitValues.Second\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Minute]) {\n return this.formatTimeRelativeUnit(\n valueInMs / MINUTE_IN_MS,\n HdsTimeRelativeUnitValues.Minute\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Hour]) {\n return this.formatTimeRelativeUnit(\n valueInMs / HOUR_IN_MS,\n HdsTimeRelativeUnitValues.Hour\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Day]) {\n return this.formatTimeRelativeUnit(\n valueInMs / DAY_IN_MS,\n HdsTimeRelativeUnitValues.Day\n );\n }\n\n return this.formatTimeRelativeUnit(\n valueInMs / WEEK_IN_MS,\n HdsTimeRelativeUnitValues.Week\n );\n }\n\n // Gets the currently subscribed listeners.\n timeDifference(\n startDate: number,\n endDate: Date\n ): { absValueInMs: number; valueInMs: number } {\n const valueInMs = Number(endDate) - Number(startDate);\n return {\n absValueInMs: Math.abs(valueInMs),\n valueInMs,\n };\n }\n\n // Subscribes a listener to the ticking task for time changes.\n register(id: Date): () => void {\n this.#listeners.add(id);\n // @ts-expect-error - TS2339: Property 'perform' does not exist on type '() => TaskGenerator<string | undefined>'\n // note: we could potentially use taskFor via `ember-concurrency-ts` to avoid this exception\n this.start.perform();\n return (): void => {\n this.unregister(id);\n };\n }\n\n // Unregisters listener for the time task.\n unregister(id: Date): boolean {\n return this.#listeners.delete(id);\n }\n\n @task({ drop: true })\n *start(): TaskGenerator<string | undefined> {\n while (this.listeners.size) {\n this.now = Date.now();\n // When testing and canceling a EC task, a timer will never resolve and\n // cause the test to hang while waiting for a permanently hanging timeout.\n // This condition breaks the test out of that.\n // via: http://ember-concurrency.com/docs/testing-debugging/\n if (isTesting()) return;\n yield timeout(SECOND_IN_MS);\n }\n }\n\n // Transforms a JS date to a string representing the UTC ISO date.\n toIsoUtcString(date: Date): string | undefined {\n try {\n return DateTime.fromJSDate(date).toUTC().toJSDate().toISOString();\n } catch (error) {\n console.error('Error: Could not convert date to ISO UTC string; ', error);\n }\n }\n\n // Gets the currently subscribed listeners.\n get listeners(): Set<Date> {\n return this.#listeners;\n }\n}\n"],"names":["MILLISECOND_IN_MS","SECOND_IN_MS","MINUTE_IN_MS","HOUR_IN_MS","DAY_IN_MS","WEEK_IN_MS","THRESHOLD_RELATIVE_TIME_IN_MS","HdsTimeRelativeUnitValues","DEFAULT_RELATIVE_THRESHOLDS","Second","Minute","Hour","Day","HdsDisplayKeyValues","FORMAT_PRECISION_SHORT_DATE","month","day","year","FORMAT_PRECISION_MINUTE","hour","minute","FORMAT_PRECISION_SECOND","second","timeZoneName","DATE_DISPLAY_FORMATS","FriendlyLocal","FriendlyOnly","DEFAULT_DISPLAY","DEFAULT_DISPLAY_MAPPING","FriendlyRelative","displayFormat","showFriendly","showRelative","tooltipFormat","Relative","Utc","DISPLAY_SCALE","Object","keys","DISPLAYS","TimeService","_dec","task","drop","_class","_listeners","WeakMap","Service","constructor","args","_classPrivateFieldInitSpec","Set","_initializerDefineProperty","_descriptor","format","difference","display","displayKey","includes","absValueInMs","options","relative","selectTimeRelativeUnit","formatTimeRelativeUnit","value","unit","Math","trunc","valueInMs","thresholds","Week","timeDifference","startDate","endDate","Number","abs","register","id","_classPrivateFieldGet","add","start","perform","unregister","delete","listeners","size","now","Date","isTesting","timeout","toIsoUtcString","date","DateTime","fromJSDate","toUTC","toJSDate","toISOString","error","console","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","getOwnPropertyDescriptor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hds-time.js","sources":["../../src/services/hds-time.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Service from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { DateTime } from 'luxon';\nimport { isTesting } from '@embroider/macros';\nimport type { TaskGenerator } from 'ember-concurrency';\nimport type {\n DisplayType,\n DefaultDisplayType,\n DisplayFormatType,\n} from './hds-time-types.ts';\n\nexport const MILLISECOND_IN_MS = 1;\nexport const SECOND_IN_MS = 1000 * MILLISECOND_IN_MS;\nexport const MINUTE_IN_MS = 60 * SECOND_IN_MS;\nexport const HOUR_IN_MS = 60 * MINUTE_IN_MS;\nexport const DAY_IN_MS = 24 * HOUR_IN_MS;\nexport const WEEK_IN_MS = 7 * DAY_IN_MS;\n\nexport const THRESHOLD_RELATIVE_TIME_IN_MS = WEEK_IN_MS;\n\nexport enum HdsTimeRelativeUnitValues {\n Second = 'second',\n Hour = 'hour',\n Minute = 'minute',\n Day = 'day',\n Week = 'week',\n}\n\nexport const DEFAULT_RELATIVE_THRESHOLDS = {\n [HdsTimeRelativeUnitValues.Second]: 1 * MINUTE_IN_MS,\n [HdsTimeRelativeUnitValues.Minute]: 1 * HOUR_IN_MS,\n [HdsTimeRelativeUnitValues.Hour]: 1 * DAY_IN_MS,\n [HdsTimeRelativeUnitValues.Day]: 100 * WEEK_IN_MS,\n};\n\nexport enum HdsDisplayKeyValues {\n FriendlyRelative = 'friendly-relative', // Example: 'Sep 5, 2018 (30 minutes ago)'\n FriendlyLocal = 'friendly-local', // Example: 'Sep 5, 2018, 4:07:32 pm'\n FriendlyOnly = 'friendly-only', // Example: 'Sep 5, 2018'\n Relative = 'relative', // Example: 'in 7 days'\n Utc = 'utc', // Example: '2018-09-05T23:15:17345Z'\n}\n\nexport const FORMAT_PRECISION_SHORT_DATE: DisplayFormatType = {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n};\nexport const FORMAT_PRECISION_MINUTE: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n};\nexport const FORMAT_PRECISION_SECOND: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n};\nexport const DATE_DISPLAY_FORMATS: {\n [x: string]: DisplayFormatType;\n} = {\n [HdsDisplayKeyValues.FriendlyLocal]: FORMAT_PRECISION_SECOND,\n [HdsDisplayKeyValues.FriendlyOnly]: FORMAT_PRECISION_SHORT_DATE,\n};\n\nexport const DEFAULT_DISPLAY = '';\n\nexport const DEFAULT_DISPLAY_MAPPING: {\n [x: string]: DefaultDisplayType;\n} = {\n [HdsDisplayKeyValues.FriendlyRelative]: {\n displayFormat: FORMAT_PRECISION_SHORT_DATE,\n showFriendly: true,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_SECOND,\n },\n [HdsDisplayKeyValues.FriendlyLocal]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyLocal],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.FriendlyOnly]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyOnly],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.Relative]: {\n displayFormat: null,\n showFriendly: false,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_MINUTE,\n },\n [HdsDisplayKeyValues.Utc]: {\n displayFormat: null,\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n};\n\nexport const DISPLAY_SCALE = Object.keys(DEFAULT_DISPLAY_MAPPING);\n\nexport const DISPLAYS = [\n HdsDisplayKeyValues.FriendlyRelative,\n HdsDisplayKeyValues.FriendlyLocal,\n HdsDisplayKeyValues.FriendlyOnly,\n HdsDisplayKeyValues.Relative,\n HdsDisplayKeyValues.Utc,\n];\n\nexport default class TimeService extends Service {\n #listeners = new Set<Date>();\n\n @tracked now = Date.now();\n\n format(\n difference: {\n absValueInMs: number;\n valueInMs: number;\n },\n display = DEFAULT_DISPLAY\n ): DisplayType {\n let displayKey;\n // If the scale display is defined and valid then set that display.\n if (display && DISPLAY_SCALE.includes(display)) {\n displayKey = display;\n } else {\n // If there's no defined display then we will execute the design system's\n // prefered algorithm.\n\n // By default, we assume we will display just a relative display only.\n displayKey = HdsDisplayKeyValues.Relative;\n\n // If the difference in date is greater than the threshold for showing the\n // relative time then switch the display key.\n if (difference.absValueInMs > THRESHOLD_RELATIVE_TIME_IN_MS) {\n displayKey = HdsDisplayKeyValues.FriendlyLocal;\n }\n }\n\n const options: DefaultDisplayType | undefined =\n DEFAULT_DISPLAY_MAPPING[displayKey];\n\n return {\n options,\n difference,\n relative: this.selectTimeRelativeUnit(difference),\n };\n }\n\n // Formats the value of a relative unit.\n formatTimeRelativeUnit(\n value: number,\n unit: Intl.RelativeTimeFormatUnit\n ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n return {\n value: Math.trunc(value),\n unit,\n };\n }\n\n // Selects an appropriate display format for the difference.\n selectTimeRelativeUnit(\n { absValueInMs, valueInMs }: { absValueInMs: number; valueInMs: number },\n thresholds: {\n second: number;\n minute: number;\n hour: number;\n day: number;\n } = DEFAULT_RELATIVE_THRESHOLDS\n ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Second]) {\n return this.formatTimeRelativeUnit(\n valueInMs / SECOND_IN_MS,\n HdsTimeRelativeUnitValues.Second\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Minute]) {\n return this.formatTimeRelativeUnit(\n valueInMs / MINUTE_IN_MS,\n HdsTimeRelativeUnitValues.Minute\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Hour]) {\n return this.formatTimeRelativeUnit(\n valueInMs / HOUR_IN_MS,\n HdsTimeRelativeUnitValues.Hour\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Day]) {\n return this.formatTimeRelativeUnit(\n valueInMs / DAY_IN_MS,\n HdsTimeRelativeUnitValues.Day\n );\n }\n\n return this.formatTimeRelativeUnit(\n valueInMs / WEEK_IN_MS,\n HdsTimeRelativeUnitValues.Week\n );\n }\n\n // Gets the currently subscribed listeners.\n timeDifference(\n startDate: number,\n endDate: Date\n ): { absValueInMs: number; valueInMs: number } {\n const valueInMs = Number(endDate) - Number(startDate);\n return {\n absValueInMs: Math.abs(valueInMs),\n valueInMs,\n };\n }\n\n // Subscribes a listener to the ticking task for time changes.\n register(id: Date): () => void {\n this.#listeners.add(id);\n // @ts-expect-error - TS2339: Property 'perform' does not exist on type '() => TaskGenerator<string | undefined>'\n // note: we could potentially use taskFor via `ember-concurrency-ts` to avoid this exception\n this.start.perform();\n return (): void => {\n this.unregister(id);\n };\n }\n\n // Unregisters listener for the time task.\n unregister(id: Date): boolean {\n return this.#listeners.delete(id);\n }\n\n @task({ drop: true })\n *start(): TaskGenerator<string | undefined> {\n while (this.listeners.size) {\n this.now = Date.now();\n // When testing and canceling a EC task, a timer will never resolve and\n // cause the test to hang while waiting for a permanently hanging timeout.\n // This condition breaks the test out of that.\n // via: http://ember-concurrency.com/docs/testing-debugging/\n if (isTesting()) return;\n yield timeout(SECOND_IN_MS);\n }\n }\n\n // Transforms a JS date to a string representing the UTC ISO date.\n toIsoUtcString(date: Date): string | undefined {\n try {\n return DateTime.fromJSDate(date).toUTC().toJSDate().toISOString();\n } catch (error) {\n console.error('Error: Could not convert date to ISO UTC string; ', error);\n }\n }\n\n // Gets the currently subscribed listeners.\n get listeners(): Set<Date> {\n return this.#listeners;\n }\n}\n"],"names":["MILLISECOND_IN_MS","SECOND_IN_MS","MINUTE_IN_MS","HOUR_IN_MS","DAY_IN_MS","WEEK_IN_MS","THRESHOLD_RELATIVE_TIME_IN_MS","HdsTimeRelativeUnitValues","DEFAULT_RELATIVE_THRESHOLDS","Second","Minute","Hour","Day","HdsDisplayKeyValues","FORMAT_PRECISION_SHORT_DATE","month","day","year","FORMAT_PRECISION_MINUTE","hour","minute","FORMAT_PRECISION_SECOND","second","timeZoneName","DATE_DISPLAY_FORMATS","FriendlyLocal","FriendlyOnly","DEFAULT_DISPLAY","DEFAULT_DISPLAY_MAPPING","FriendlyRelative","displayFormat","showFriendly","showRelative","tooltipFormat","Relative","Utc","DISPLAY_SCALE","Object","keys","DISPLAYS","TimeService","Service","Set","g","prototype","tracked","Date","now","i","void 0","format","difference","display","displayKey","includes","absValueInMs","options","relative","selectTimeRelativeUnit","formatTimeRelativeUnit","value","unit","Math","trunc","valueInMs","thresholds","Week","timeDifference","startDate","endDate","Number","abs","register","id","add","start","perform","unregister","delete","listeners","size","isTesting","timeout","n","task","drop","toIsoUtcString","date","DateTime","fromJSDate","toUTC","toJSDate","toISOString","error","console"],"mappings":"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"}
|