@tailng-ui/primitives 0.1.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 +36 -0
- package/package.json +13 -0
- package/src/index.d.ts +55 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +61 -0
- package/src/index.js.map +1 -0
- package/src/lib/feedback/empty/tng-empty.d.ts +16 -0
- package/src/lib/feedback/empty/tng-empty.d.ts.map +1 -0
- package/src/lib/feedback/empty/tng-empty.js +68 -0
- package/src/lib/feedback/empty/tng-empty.js.map +1 -0
- package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts +24 -0
- package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts.map +1 -0
- package/src/lib/feedback/progress-bar/tng-progress-bar.js +100 -0
- package/src/lib/feedback/progress-bar/tng-progress-bar.js.map +1 -0
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts +21 -0
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts.map +1 -0
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.js +87 -0
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.js.map +1 -0
- package/src/lib/feedback/skeleton/tng-skeleton.d.ts +11 -0
- package/src/lib/feedback/skeleton/tng-skeleton.d.ts.map +1 -0
- package/src/lib/feedback/skeleton/tng-skeleton.js +44 -0
- package/src/lib/feedback/skeleton/tng-skeleton.js.map +1 -0
- package/src/lib/feedback/toast/tng-toast.d.ts +20 -0
- package/src/lib/feedback/toast/tng-toast.d.ts.map +1 -0
- package/src/lib/feedback/toast/tng-toast.js +79 -0
- package/src/lib/feedback/toast/tng-toast.js.map +1 -0
- package/src/lib/form/_shared/id/index.d.ts +4 -0
- package/src/lib/form/_shared/id/index.d.ts.map +1 -0
- package/src/lib/form/_shared/id/index.js +4 -0
- package/src/lib/form/_shared/id/index.js.map +1 -0
- package/src/lib/form/_shared/id/tng-unique-id.provider.d.ts +11 -0
- package/src/lib/form/_shared/id/tng-unique-id.provider.d.ts.map +1 -0
- package/src/lib/form/_shared/id/tng-unique-id.provider.js +15 -0
- package/src/lib/form/_shared/id/tng-unique-id.provider.js.map +1 -0
- package/src/lib/form/_shared/id/tng-unique-id.service.d.ts +9 -0
- package/src/lib/form/_shared/id/tng-unique-id.service.d.ts.map +1 -0
- package/src/lib/form/_shared/id/tng-unique-id.service.js +18 -0
- package/src/lib/form/_shared/id/tng-unique-id.service.js.map +1 -0
- package/src/lib/form/_shared/id/tng-unique-id.token.d.ts +8 -0
- package/src/lib/form/_shared/id/tng-unique-id.token.d.ts.map +1 -0
- package/src/lib/form/_shared/id/tng-unique-id.token.js +13 -0
- package/src/lib/form/_shared/id/tng-unique-id.token.js.map +1 -0
- package/src/lib/form/_shared/select/tng-select.host-api.d.ts +28 -0
- package/src/lib/form/_shared/select/tng-select.host-api.d.ts.map +1 -0
- package/src/lib/form/_shared/select/tng-select.host-api.js +1 -0
- package/src/lib/form/_shared/select/tng-select.host-api.js.map +1 -0
- package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts +38 -0
- package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts.map +1 -0
- package/src/lib/form/_shared/select/tng-select.overlay.shared.js +226 -0
- package/src/lib/form/_shared/select/tng-select.overlay.shared.js.map +1 -0
- package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts +35 -0
- package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts.map +1 -0
- package/src/lib/form/_shared/select/tng-select.parts.shared.js +199 -0
- package/src/lib/form/_shared/select/tng-select.parts.shared.js.map +1 -0
- package/src/lib/form/_shared/select/tng-select.tokens.shared.d.ts +8 -0
- package/src/lib/form/_shared/select/tng-select.tokens.shared.d.ts.map +1 -0
- package/src/lib/form/_shared/select/tng-select.tokens.shared.js +7 -0
- package/src/lib/form/_shared/select/tng-select.tokens.shared.js.map +1 -0
- package/src/lib/form/autocomplete/index.d.ts +7 -0
- package/src/lib/form/autocomplete/index.d.ts.map +1 -0
- package/src/lib/form/autocomplete/index.js +6 -0
- package/src/lib/form/autocomplete/index.js.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.d.ts +52 -0
- package/src/lib/form/autocomplete/tng-autocomplete.d.ts.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.js +95 -0
- package/src/lib/form/autocomplete/tng-autocomplete.js.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts +19 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.js +123 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.js.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.tokens.d.ts +4 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.tokens.d.ts.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.tokens.js +3 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.tokens.js.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.types.d.ts +4 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.types.d.ts.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.types.js +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.types.js.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts +40 -0
- package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.overlay.js +236 -0
- package/src/lib/form/autocomplete/tng-autocomplete.overlay.js.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts +38 -0
- package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.parts.js +252 -0
- package/src/lib/form/autocomplete/tng-autocomplete.parts.js.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.tokens.d.ts +4 -0
- package/src/lib/form/autocomplete/tng-autocomplete.tokens.d.ts.map +1 -0
- package/src/lib/form/autocomplete/tng-autocomplete.tokens.js +3 -0
- package/src/lib/form/autocomplete/tng-autocomplete.tokens.js.map +1 -0
- package/src/lib/form/button-toggle/tng-button-toggle.d.ts +164 -0
- package/src/lib/form/button-toggle/tng-button-toggle.d.ts.map +1 -0
- package/src/lib/form/button-toggle/tng-button-toggle.js +1097 -0
- package/src/lib/form/button-toggle/tng-button-toggle.js.map +1 -0
- package/src/lib/form/checkbox/tng-checkbox.d.ts +48 -0
- package/src/lib/form/checkbox/tng-checkbox.d.ts.map +1 -0
- package/src/lib/form/checkbox/tng-checkbox.js +234 -0
- package/src/lib/form/checkbox/tng-checkbox.js.map +1 -0
- package/src/lib/form/chips/tng-chips.d.ts +4 -0
- package/src/lib/form/chips/tng-chips.d.ts.map +1 -0
- package/src/lib/form/chips/tng-chips.js +16 -0
- package/src/lib/form/chips/tng-chips.js.map +1 -0
- package/src/lib/form/combobox/tng-combobox.d.ts +4 -0
- package/src/lib/form/combobox/tng-combobox.d.ts.map +1 -0
- package/src/lib/form/combobox/tng-combobox.js +16 -0
- package/src/lib/form/combobox/tng-combobox.js.map +1 -0
- package/src/lib/form/input/tng-input.d.ts +87 -0
- package/src/lib/form/input/tng-input.d.ts.map +1 -0
- package/src/lib/form/input/tng-input.js +393 -0
- package/src/lib/form/input/tng-input.js.map +1 -0
- package/src/lib/form/input-otp/tng-input-otp.d.ts +7 -0
- package/src/lib/form/input-otp/tng-input-otp.d.ts.map +1 -0
- package/src/lib/form/input-otp/tng-input-otp.js +33 -0
- package/src/lib/form/input-otp/tng-input-otp.js.map +1 -0
- package/src/lib/form/label/tng-label.d.ts +6 -0
- package/src/lib/form/label/tng-label.d.ts.map +1 -0
- package/src/lib/form/label/tng-label.js +25 -0
- package/src/lib/form/label/tng-label.js.map +1 -0
- package/src/lib/form/listbox/listbox.directive.d.ts +51 -0
- package/src/lib/form/listbox/listbox.directive.d.ts.map +1 -0
- package/src/lib/form/listbox/listbox.directive.js +439 -0
- package/src/lib/form/listbox/listbox.directive.js.map +1 -0
- package/src/lib/form/listbox/option.directive.d.ts +22 -0
- package/src/lib/form/listbox/option.directive.d.ts.map +1 -0
- package/src/lib/form/listbox/option.directive.js +109 -0
- package/src/lib/form/listbox/option.directive.js.map +1 -0
- package/src/lib/form/listbox/tokens.d.ts +14 -0
- package/src/lib/form/listbox/tokens.d.ts.map +1 -0
- package/src/lib/form/listbox/tokens.js +13 -0
- package/src/lib/form/listbox/tokens.js.map +1 -0
- package/src/lib/form/multi-autocomplete/index.d.ts +10 -0
- package/src/lib/form/multi-autocomplete/index.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/index.js +10 -0
- package/src/lib/form/multi-autocomplete/index.js.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts +11 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js +98 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts +10 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js +45 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts +43 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js +150 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts +20 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js +138 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.tokens.d.ts +4 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.tokens.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.tokens.js +3 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.tokens.js.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.types.d.ts +18 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.types.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.types.js +2 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.types.js.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts +4 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js +17 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.tokens.d.ts +4 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.tokens.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.tokens.js +3 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.tokens.js.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts +21 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts.map +1 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js +241 -0
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js.map +1 -0
- package/src/lib/form/multi-select/index.d.ts +7 -0
- package/src/lib/form/multi-select/index.d.ts.map +1 -0
- package/src/lib/form/multi-select/index.js +6 -0
- package/src/lib/form/multi-select/index.js.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.d.ts +45 -0
- package/src/lib/form/multi-select/tng-multi-select.d.ts.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.js +136 -0
- package/src/lib/form/multi-select/tng-multi-select.js.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts +21 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.js +107 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.js.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.tokens.d.ts +3 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.tokens.d.ts.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.tokens.js +3 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.tokens.js.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.types.d.ts +3 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.types.d.ts.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.types.js +1 -0
- package/src/lib/form/multi-select/tng-multi-select.listbox.types.js.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.overlay.d.ts +5 -0
- package/src/lib/form/multi-select/tng-multi-select.overlay.d.ts.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.overlay.js +5 -0
- package/src/lib/form/multi-select/tng-multi-select.overlay.js.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.parts.d.ts +5 -0
- package/src/lib/form/multi-select/tng-multi-select.parts.d.ts.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.parts.js +5 -0
- package/src/lib/form/multi-select/tng-multi-select.parts.js.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.tokens.d.ts +4 -0
- package/src/lib/form/multi-select/tng-multi-select.tokens.d.ts.map +1 -0
- package/src/lib/form/multi-select/tng-multi-select.tokens.js +3 -0
- package/src/lib/form/multi-select/tng-multi-select.tokens.js.map +1 -0
- package/src/lib/form/multiselect/tng-multiselect.d.ts +4 -0
- package/src/lib/form/multiselect/tng-multiselect.d.ts.map +1 -0
- package/src/lib/form/multiselect/tng-multiselect.js +16 -0
- package/src/lib/form/multiselect/tng-multiselect.js.map +1 -0
- package/src/lib/form/radio/tng-radio.d.ts +20 -0
- package/src/lib/form/radio/tng-radio.d.ts.map +1 -0
- package/src/lib/form/radio/tng-radio.js +86 -0
- package/src/lib/form/radio/tng-radio.js.map +1 -0
- package/src/lib/form/select/tng-select.d.ts +38 -0
- package/src/lib/form/select/tng-select.d.ts.map +1 -0
- package/src/lib/form/select/tng-select.js +106 -0
- package/src/lib/form/select/tng-select.js.map +1 -0
- package/src/lib/form/select/tng-select.listbox.d.ts +20 -0
- package/src/lib/form/select/tng-select.listbox.d.ts.map +1 -0
- package/src/lib/form/select/tng-select.listbox.js +123 -0
- package/src/lib/form/select/tng-select.listbox.js.map +1 -0
- package/src/lib/form/select/tng-select.listbox.tokens.d.ts +3 -0
- package/src/lib/form/select/tng-select.listbox.tokens.d.ts.map +1 -0
- package/src/lib/form/select/tng-select.listbox.tokens.js +3 -0
- package/src/lib/form/select/tng-select.listbox.tokens.js.map +1 -0
- package/src/lib/form/select/tng-select.listbox.types.d.ts +4 -0
- package/src/lib/form/select/tng-select.listbox.types.d.ts.map +1 -0
- package/src/lib/form/select/tng-select.listbox.types.js +1 -0
- package/src/lib/form/select/tng-select.listbox.types.js.map +1 -0
- package/src/lib/form/select/tng-select.overlay.d.ts +5 -0
- package/src/lib/form/select/tng-select.overlay.d.ts.map +1 -0
- package/src/lib/form/select/tng-select.overlay.js +5 -0
- package/src/lib/form/select/tng-select.overlay.js.map +1 -0
- package/src/lib/form/select/tng-select.parts.d.ts +5 -0
- package/src/lib/form/select/tng-select.parts.d.ts.map +1 -0
- package/src/lib/form/select/tng-select.parts.js +5 -0
- package/src/lib/form/select/tng-select.parts.js.map +1 -0
- package/src/lib/form/select/tng-select.tokens.d.ts +4 -0
- package/src/lib/form/select/tng-select.tokens.d.ts.map +1 -0
- package/src/lib/form/select/tng-select.tokens.js +3 -0
- package/src/lib/form/select/tng-select.tokens.js.map +1 -0
- package/src/lib/form/slider/tng-slider.d.ts +19 -0
- package/src/lib/form/slider/tng-slider.d.ts.map +1 -0
- package/src/lib/form/slider/tng-slider.js +84 -0
- package/src/lib/form/slider/tng-slider.js.map +1 -0
- package/src/lib/form/switch/tng-switch.d.ts +19 -0
- package/src/lib/form/switch/tng-switch.d.ts.map +1 -0
- package/src/lib/form/switch/tng-switch.js +79 -0
- package/src/lib/form/switch/tng-switch.js.map +1 -0
- package/src/lib/form/textarea/tng-textarea.d.ts +23 -0
- package/src/lib/form/textarea/tng-textarea.d.ts.map +1 -0
- package/src/lib/form/textarea/tng-textarea.js +119 -0
- package/src/lib/form/textarea/tng-textarea.js.map +1 -0
- package/src/lib/form/toggle/tng-toggle.d.ts +44 -0
- package/src/lib/form/toggle/tng-toggle.d.ts.map +1 -0
- package/src/lib/form/toggle/tng-toggle.js +203 -0
- package/src/lib/form/toggle/tng-toggle.js.map +1 -0
- package/src/lib/form/toggle-group/tng-toggle-group.d.ts +35 -0
- package/src/lib/form/toggle-group/tng-toggle-group.d.ts.map +1 -0
- package/src/lib/form/toggle-group/tng-toggle-group.js +156 -0
- package/src/lib/form/toggle-group/tng-toggle-group.js.map +1 -0
- package/src/lib/internal/combobox/combobox.active.d.ts +17 -0
- package/src/lib/internal/combobox/combobox.active.d.ts.map +1 -0
- package/src/lib/internal/combobox/combobox.active.js +19 -0
- package/src/lib/internal/combobox/combobox.active.js.map +1 -0
- package/src/lib/internal/combobox/combobox.commit.d.ts +20 -0
- package/src/lib/internal/combobox/combobox.commit.d.ts.map +1 -0
- package/src/lib/internal/combobox/combobox.commit.js +34 -0
- package/src/lib/internal/combobox/combobox.commit.js.map +1 -0
- package/src/lib/internal/combobox/combobox.keyboard.d.ts +39 -0
- package/src/lib/internal/combobox/combobox.keyboard.d.ts.map +1 -0
- package/src/lib/internal/combobox/combobox.keyboard.js +88 -0
- package/src/lib/internal/combobox/combobox.keyboard.js.map +1 -0
- package/src/lib/internal/combobox/combobox.listbox-api.d.ts +19 -0
- package/src/lib/internal/combobox/combobox.listbox-api.d.ts.map +1 -0
- package/src/lib/internal/combobox/combobox.listbox-api.js +5 -0
- package/src/lib/internal/combobox/combobox.listbox-api.js.map +1 -0
- package/src/lib/internal/combobox/index.d.ts +5 -0
- package/src/lib/internal/combobox/index.d.ts.map +1 -0
- package/src/lib/internal/combobox/index.js +4 -0
- package/src/lib/internal/combobox/index.js.map +1 -0
- package/src/lib/layout/accordion/tng-accordion.d.ts +150 -0
- package/src/lib/layout/accordion/tng-accordion.d.ts.map +1 -0
- package/src/lib/layout/accordion/tng-accordion.js +852 -0
- package/src/lib/layout/accordion/tng-accordion.js.map +1 -0
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts +4 -0
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts.map +1 -0
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js +16 -0
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js.map +1 -0
- package/src/lib/layout/card/tng-card.d.ts +31 -0
- package/src/lib/layout/card/tng-card.d.ts.map +1 -0
- package/src/lib/layout/card/tng-card.js +133 -0
- package/src/lib/layout/card/tng-card.js.map +1 -0
- package/src/lib/layout/collapsible/tng-collapsible.d.ts +28 -0
- package/src/lib/layout/collapsible/tng-collapsible.d.ts.map +1 -0
- package/src/lib/layout/collapsible/tng-collapsible.js +123 -0
- package/src/lib/layout/collapsible/tng-collapsible.js.map +1 -0
- package/src/lib/layout/drawer/tng-drawer.d.ts +177 -0
- package/src/lib/layout/drawer/tng-drawer.d.ts.map +1 -0
- package/src/lib/layout/drawer/tng-drawer.js +1147 -0
- package/src/lib/layout/drawer/tng-drawer.js.map +1 -0
- package/src/lib/layout/grid/tng-grid.d.ts +4 -0
- package/src/lib/layout/grid/tng-grid.d.ts.map +1 -0
- package/src/lib/layout/grid/tng-grid.js +16 -0
- package/src/lib/layout/grid/tng-grid.js.map +1 -0
- package/src/lib/layout/separator/tng-separator.d.ts +11 -0
- package/src/lib/layout/separator/tng-separator.d.ts.map +1 -0
- package/src/lib/layout/separator/tng-separator.js +47 -0
- package/src/lib/layout/separator/tng-separator.js.map +1 -0
- package/src/lib/layout/stepper/tng-stepper.d.ts +4 -0
- package/src/lib/layout/stepper/tng-stepper.d.ts.map +1 -0
- package/src/lib/layout/stepper/tng-stepper.js +16 -0
- package/src/lib/layout/stepper/tng-stepper.js.map +1 -0
- package/src/lib/layout/tree/tng-tree.d.ts +4 -0
- package/src/lib/layout/tree/tng-tree.d.ts.map +1 -0
- package/src/lib/layout/tree/tng-tree.js +16 -0
- package/src/lib/layout/tree/tng-tree.js.map +1 -0
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts +17 -0
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts.map +1 -0
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.js +72 -0
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.js.map +1 -0
- package/src/lib/navigation/context-menu/tng-context-menu.d.ts +36 -0
- package/src/lib/navigation/context-menu/tng-context-menu.d.ts.map +1 -0
- package/src/lib/navigation/context-menu/tng-context-menu.js +159 -0
- package/src/lib/navigation/context-menu/tng-context-menu.js.map +1 -0
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts +4 -0
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts.map +1 -0
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js +16 -0
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js.map +1 -0
- package/src/lib/navigation/menu/tng-menu.d.ts +173 -0
- package/src/lib/navigation/menu/tng-menu.d.ts.map +1 -0
- package/src/lib/navigation/menu/tng-menu.js +1026 -0
- package/src/lib/navigation/menu/tng-menu.js.map +1 -0
- package/src/lib/navigation/menubar/tng-menubar.d.ts +64 -0
- package/src/lib/navigation/menubar/tng-menubar.d.ts.map +1 -0
- package/src/lib/navigation/menubar/tng-menubar.js +478 -0
- package/src/lib/navigation/menubar/tng-menubar.js.map +1 -0
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts +4 -0
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts.map +1 -0
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.js +16 -0
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.js.map +1 -0
- package/src/lib/navigation/tabs/tng-tabs.d.ts +234 -0
- package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -0
- package/src/lib/navigation/tabs/tng-tabs.js +1350 -0
- package/src/lib/navigation/tabs/tng-tabs.js.map +1 -0
- package/src/lib/navigation/toolbar/tng-toolbar.d.ts +4 -0
- package/src/lib/navigation/toolbar/tng-toolbar.d.ts.map +1 -0
- package/src/lib/navigation/toolbar/tng-toolbar.js +16 -0
- package/src/lib/navigation/toolbar/tng-toolbar.js.map +1 -0
- package/src/lib/overlay/tooltip/tng-tooltip.d.ts +25 -0
- package/src/lib/overlay/tooltip/tng-tooltip.d.ts.map +1 -0
- package/src/lib/overlay/tooltip/tng-tooltip.js +99 -0
- package/src/lib/overlay/tooltip/tng-tooltip.js.map +1 -0
- package/src/lib/utility/avatar/tng-avatar.d.ts +10 -0
- package/src/lib/utility/avatar/tng-avatar.d.ts.map +1 -0
- package/src/lib/utility/avatar/tng-avatar.js +42 -0
- package/src/lib/utility/avatar/tng-avatar.js.map +1 -0
- package/src/lib/utility/badge/tng-badge.d.ts +63 -0
- package/src/lib/utility/badge/tng-badge.d.ts.map +1 -0
- package/src/lib/utility/badge/tng-badge.js +345 -0
- package/src/lib/utility/badge/tng-badge.js.map +1 -0
- package/src/lib/utility/code-block/tng-code-block.d.ts +16 -0
- package/src/lib/utility/code-block/tng-code-block.d.ts.map +1 -0
- package/src/lib/utility/code-block/tng-code-block.js +68 -0
- package/src/lib/utility/code-block/tng-code-block.js.map +1 -0
- package/src/lib/utility/copy/tng-copy.d.ts +75 -0
- package/src/lib/utility/copy/tng-copy.d.ts.map +1 -0
- package/src/lib/utility/copy/tng-copy.js +544 -0
- package/src/lib/utility/copy/tng-copy.js.map +1 -0
- package/src/lib/utility/press/tng-press.d.ts +33 -0
- package/src/lib/utility/press/tng-press.d.ts.map +1 -0
- package/src/lib/utility/press/tng-press.js +207 -0
- package/src/lib/utility/press/tng-press.js.map +1 -0
- package/src/lib/utility/tag/tng-tag.d.ts +4 -0
- package/src/lib/utility/tag/tng-tag.d.ts.map +1 -0
- package/src/lib/utility/tag/tng-tag.js +16 -0
- package/src/lib/utility/tag/tng-tag.js.map +1 -0
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { DestroyRef, Directive, ElementRef, HostBinding, HostListener, booleanAttribute, effect, inject, input, output, signal, } from '@angular/core';
|
|
3
|
+
export const defaultTngCopyIgnoreSelectors = Object.freeze([
|
|
4
|
+
'[data-copy-ignore]',
|
|
5
|
+
'.line-no',
|
|
6
|
+
'.line-number',
|
|
7
|
+
'.line-numbers',
|
|
8
|
+
]);
|
|
9
|
+
export const defaultTngCopySuccessDurationMs = 1500;
|
|
10
|
+
export const defaultTngCopySuccessAnnouncement = 'Copied to clipboard';
|
|
11
|
+
export const defaultTngCopyErrorAnnouncement = 'Copy failed';
|
|
12
|
+
function hasNonEmptyText(value) {
|
|
13
|
+
return value.trim().length > 0;
|
|
14
|
+
}
|
|
15
|
+
function dedupeSelectors(selectors) {
|
|
16
|
+
return [...new Set(selectors)];
|
|
17
|
+
}
|
|
18
|
+
function normalizeSelectorFromArray(value) {
|
|
19
|
+
return dedupeSelectors(value.map((selector) => selector.trim()).filter((selector) => selector.length > 0));
|
|
20
|
+
}
|
|
21
|
+
function normalizeSelectorFromString(value) {
|
|
22
|
+
return dedupeSelectors(value
|
|
23
|
+
.split(',')
|
|
24
|
+
.map((selector) => selector.trim())
|
|
25
|
+
.filter((selector) => selector.length > 0));
|
|
26
|
+
}
|
|
27
|
+
function toCopyError(error) {
|
|
28
|
+
if (error instanceof Error) {
|
|
29
|
+
return error;
|
|
30
|
+
}
|
|
31
|
+
if (typeof error === 'string') {
|
|
32
|
+
return new Error(error);
|
|
33
|
+
}
|
|
34
|
+
return new Error('Copy failed.');
|
|
35
|
+
}
|
|
36
|
+
function isHtmlElement(value) {
|
|
37
|
+
return typeof HTMLElement !== 'undefined' && value instanceof HTMLElement;
|
|
38
|
+
}
|
|
39
|
+
function isDocument(value) {
|
|
40
|
+
return typeof Document !== 'undefined' && value instanceof Document;
|
|
41
|
+
}
|
|
42
|
+
function isElementRefTarget(value) {
|
|
43
|
+
if (typeof value !== 'object' || value === null) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if (!('nativeElement' in value)) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
const candidate = value;
|
|
50
|
+
return isHtmlElement(candidate.nativeElement);
|
|
51
|
+
}
|
|
52
|
+
function resolveSourceElement(source, ownerDocument) {
|
|
53
|
+
if (!isDocument(ownerDocument)) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
if (source === null || source === undefined) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
if (typeof source === 'string') {
|
|
60
|
+
const normalizedSelector = source.trim();
|
|
61
|
+
if (normalizedSelector.length === 0) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
return ownerDocument.querySelector(normalizedSelector);
|
|
65
|
+
}
|
|
66
|
+
if (isHtmlElement(source)) {
|
|
67
|
+
return source;
|
|
68
|
+
}
|
|
69
|
+
if (isElementRefTarget(source)) {
|
|
70
|
+
return source.nativeElement;
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
function removeIgnoredNodes(root, ignoreSelectors) {
|
|
75
|
+
if (!isHtmlElement(root)) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
for (const selector of ignoreSelectors) {
|
|
79
|
+
try {
|
|
80
|
+
const ignoredNodes = Array.from(root.querySelectorAll(selector));
|
|
81
|
+
for (const node of ignoredNodes) {
|
|
82
|
+
node.remove();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function isTextInputElement(sourceElement) {
|
|
91
|
+
const isInputElement = typeof HTMLInputElement !== 'undefined' && sourceElement instanceof HTMLInputElement;
|
|
92
|
+
if (isInputElement) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
return typeof HTMLTextAreaElement !== 'undefined' && sourceElement instanceof HTMLTextAreaElement;
|
|
96
|
+
}
|
|
97
|
+
function extractTextFromSourceElement(sourceElement, ignoreSelectors) {
|
|
98
|
+
if (!isHtmlElement(sourceElement)) {
|
|
99
|
+
return '';
|
|
100
|
+
}
|
|
101
|
+
if (isTextInputElement(sourceElement)) {
|
|
102
|
+
return sourceElement.value;
|
|
103
|
+
}
|
|
104
|
+
if (ignoreSelectors.length === 0) {
|
|
105
|
+
return sourceElement.textContent ?? '';
|
|
106
|
+
}
|
|
107
|
+
const clone = sourceElement.cloneNode(true);
|
|
108
|
+
removeIgnoredNodes(clone, ignoreSelectors);
|
|
109
|
+
return clone.textContent ?? '';
|
|
110
|
+
}
|
|
111
|
+
function copyWithExecCommand(text, ownerDocument) {
|
|
112
|
+
if (!isDocument(ownerDocument)) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
if (typeof ownerDocument.execCommand !== 'function') {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
const body = ownerDocument.body;
|
|
119
|
+
if (body === null) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
const textarea = ownerDocument.createElement('textarea');
|
|
123
|
+
textarea.value = text;
|
|
124
|
+
textarea.setAttribute('readonly', '');
|
|
125
|
+
textarea.style.inset = '0';
|
|
126
|
+
textarea.style.opacity = '0';
|
|
127
|
+
textarea.style.pointerEvents = 'none';
|
|
128
|
+
textarea.style.position = 'fixed';
|
|
129
|
+
const activeElement = ownerDocument.activeElement;
|
|
130
|
+
const restoreTarget = isHtmlElement(activeElement) ? activeElement : null;
|
|
131
|
+
body.appendChild(textarea);
|
|
132
|
+
textarea.focus();
|
|
133
|
+
textarea.select();
|
|
134
|
+
try {
|
|
135
|
+
return ownerDocument.execCommand('copy');
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
body.removeChild(textarea);
|
|
139
|
+
if (restoreTarget !== null && ownerDocument.contains(restoreTarget)) {
|
|
140
|
+
restoreTarget.focus();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function toRoundedPositiveNumber(value) {
|
|
145
|
+
return Math.max(0, Math.round(value));
|
|
146
|
+
}
|
|
147
|
+
function toPlainTextFromHtml(html, ownerDocument) {
|
|
148
|
+
if (!isDocument(ownerDocument)) {
|
|
149
|
+
return html.replace(/<[^>]*>/g, '');
|
|
150
|
+
}
|
|
151
|
+
const template = ownerDocument.createElement('template');
|
|
152
|
+
template.innerHTML = html;
|
|
153
|
+
return template.content.textContent ?? '';
|
|
154
|
+
}
|
|
155
|
+
function normalizeHotkey(value) {
|
|
156
|
+
if (value === undefined || value === null) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const normalized = value.trim().toLowerCase();
|
|
160
|
+
return normalized.length > 0 ? normalized : null;
|
|
161
|
+
}
|
|
162
|
+
function normalizeKey(value) {
|
|
163
|
+
if (value === ' ') {
|
|
164
|
+
return 'space';
|
|
165
|
+
}
|
|
166
|
+
const normalized = value.trim().toLowerCase();
|
|
167
|
+
if (normalized === 'spacebar') {
|
|
168
|
+
return 'space';
|
|
169
|
+
}
|
|
170
|
+
return normalized;
|
|
171
|
+
}
|
|
172
|
+
function isActivationKey(key) {
|
|
173
|
+
return key === 'Enter' || key === ' ';
|
|
174
|
+
}
|
|
175
|
+
function isNativeButton(value) {
|
|
176
|
+
return typeof HTMLButtonElement !== 'undefined' && value instanceof HTMLButtonElement;
|
|
177
|
+
}
|
|
178
|
+
function isElement(value) {
|
|
179
|
+
return typeof Element !== 'undefined' && value instanceof Element;
|
|
180
|
+
}
|
|
181
|
+
function resolveExplicitText(value) {
|
|
182
|
+
if (value === undefined || value === null) {
|
|
183
|
+
return { error: null, value };
|
|
184
|
+
}
|
|
185
|
+
if (typeof value === 'string') {
|
|
186
|
+
return { error: null, value };
|
|
187
|
+
}
|
|
188
|
+
try {
|
|
189
|
+
const result = value();
|
|
190
|
+
if (result === null || result === undefined) {
|
|
191
|
+
return { error: null, value: null };
|
|
192
|
+
}
|
|
193
|
+
return { error: null, value: typeof result === 'string' ? result : String(result) };
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
return { error: toCopyError(error), value: null };
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function eventMatchesHotkey(event, hotkey) {
|
|
200
|
+
const tokens = hotkey
|
|
201
|
+
.split('+')
|
|
202
|
+
.map((token) => token.trim().toLowerCase())
|
|
203
|
+
.filter((token) => token.length > 0);
|
|
204
|
+
if (tokens.length === 0) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
const keyToken = tokens[tokens.length - 1];
|
|
208
|
+
const modifierTokens = tokens.slice(0, -1);
|
|
209
|
+
const modifierSet = new Set(modifierTokens);
|
|
210
|
+
const isMacPlatform = /mac|iphone|ipad|ipod/i.test(globalThis.navigator?.platform ?? '');
|
|
211
|
+
const expectsCtrl = modifierSet.has('ctrl') || (modifierSet.has('mod') && !isMacPlatform);
|
|
212
|
+
const expectsMeta = modifierSet.has('meta') || (modifierSet.has('mod') && isMacPlatform);
|
|
213
|
+
const expectsAlt = modifierSet.has('alt');
|
|
214
|
+
const expectsShift = modifierSet.has('shift');
|
|
215
|
+
if (event.ctrlKey !== expectsCtrl) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
if (event.metaKey !== expectsMeta) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
if (event.altKey !== expectsAlt) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
if (event.shiftKey !== expectsShift) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
return normalizeKey(event.key) === normalizeKey(keyToken);
|
|
228
|
+
}
|
|
229
|
+
function coerceTngCopySuccessDuration(value) {
|
|
230
|
+
const numericValue = typeof value === 'number' ? value : Number(value);
|
|
231
|
+
if (!Number.isFinite(numericValue)) {
|
|
232
|
+
return defaultTngCopySuccessDurationMs;
|
|
233
|
+
}
|
|
234
|
+
return toRoundedPositiveNumber(numericValue);
|
|
235
|
+
}
|
|
236
|
+
function coerceTngCopyAnnounce(value) {
|
|
237
|
+
if (value === undefined || value === null || value === 'auto') {
|
|
238
|
+
return 'auto';
|
|
239
|
+
}
|
|
240
|
+
if (value === '' || value === true || value === 'true') {
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
if (value === false || value === 'false') {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
return 'auto';
|
|
247
|
+
}
|
|
248
|
+
function coerceTngCopyFormat(value) {
|
|
249
|
+
if (value === 'text/html') {
|
|
250
|
+
return 'text/html';
|
|
251
|
+
}
|
|
252
|
+
return 'text/plain';
|
|
253
|
+
}
|
|
254
|
+
export function normalizeTngCopyIgnoreSelectors(value) {
|
|
255
|
+
if (value === undefined || value === null) {
|
|
256
|
+
return defaultTngCopyIgnoreSelectors;
|
|
257
|
+
}
|
|
258
|
+
if (typeof value === 'string') {
|
|
259
|
+
return normalizeSelectorFromString(value);
|
|
260
|
+
}
|
|
261
|
+
return normalizeSelectorFromArray(value);
|
|
262
|
+
}
|
|
263
|
+
export function resolveTngCopyPayload(directText, sourceText) {
|
|
264
|
+
if (directText !== null && directText !== undefined) {
|
|
265
|
+
return hasNonEmptyText(directText) ? directText : null;
|
|
266
|
+
}
|
|
267
|
+
if (sourceText !== null && hasNonEmptyText(sourceText)) {
|
|
268
|
+
return sourceText;
|
|
269
|
+
}
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
export async function writeTngClipboardText(text, ownerDocument, format = 'text/plain') {
|
|
273
|
+
const clipboardApi = globalThis.navigator?.clipboard;
|
|
274
|
+
const plainText = format === 'text/html' ? toPlainTextFromHtml(text, ownerDocument) : text;
|
|
275
|
+
let clipboardError = null;
|
|
276
|
+
if (clipboardApi !== undefined) {
|
|
277
|
+
try {
|
|
278
|
+
if (format === 'text/html' &&
|
|
279
|
+
typeof clipboardApi.write === 'function' &&
|
|
280
|
+
typeof ClipboardItem !== 'undefined' &&
|
|
281
|
+
typeof Blob !== 'undefined') {
|
|
282
|
+
const clipboardItem = new ClipboardItem({
|
|
283
|
+
'text/html': new Blob([text], { type: 'text/html' }),
|
|
284
|
+
'text/plain': new Blob([plainText], { type: 'text/plain' }),
|
|
285
|
+
});
|
|
286
|
+
await clipboardApi.write([clipboardItem]);
|
|
287
|
+
return 'clipboard';
|
|
288
|
+
}
|
|
289
|
+
if (typeof clipboardApi.writeText === 'function') {
|
|
290
|
+
await clipboardApi.writeText(plainText);
|
|
291
|
+
return 'clipboard';
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
clipboardError = error;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
const didCopy = copyWithExecCommand(plainText, ownerDocument);
|
|
299
|
+
if (didCopy) {
|
|
300
|
+
return 'execCommand';
|
|
301
|
+
}
|
|
302
|
+
if (clipboardError !== null) {
|
|
303
|
+
throw toCopyError(clipboardError);
|
|
304
|
+
}
|
|
305
|
+
throw new Error('Clipboard API is not available in this environment.');
|
|
306
|
+
}
|
|
307
|
+
let TngCopy = class TngCopy {
|
|
308
|
+
tngCopy = output();
|
|
309
|
+
tngCopyButtonText = input(undefined);
|
|
310
|
+
tngCopyButtonTarget = input(null);
|
|
311
|
+
tngCopyButtonFormat = input('text/plain', { transform: coerceTngCopyFormat });
|
|
312
|
+
tngCopyButtonSuccessDurationMs = input(defaultTngCopySuccessDurationMs, { transform: coerceTngCopySuccessDuration });
|
|
313
|
+
tngCopyButtonDisabled = input(false, {
|
|
314
|
+
transform: booleanAttribute,
|
|
315
|
+
});
|
|
316
|
+
tngCopyButtonHotkey = input(null);
|
|
317
|
+
tngCopyButtonAnnounce = input('auto', { transform: coerceTngCopyAnnounce });
|
|
318
|
+
tngCopyButtonSuccessMessage = input(defaultTngCopySuccessAnnouncement);
|
|
319
|
+
tngCopyButtonErrorMessage = input(defaultTngCopyErrorAnnouncement);
|
|
320
|
+
tngCopyDisabled = input(false, {
|
|
321
|
+
transform: booleanAttribute,
|
|
322
|
+
});
|
|
323
|
+
tngCopied = output();
|
|
324
|
+
tngCopySuccess = output();
|
|
325
|
+
tngCopyError = output();
|
|
326
|
+
tngCopyFrom = input(null);
|
|
327
|
+
tngCopyIgnoreSelectors = input(defaultTngCopyIgnoreSelectors, {
|
|
328
|
+
transform: normalizeTngCopyIgnoreSelectors,
|
|
329
|
+
});
|
|
330
|
+
tngCopyText = input(undefined);
|
|
331
|
+
tngCopyAnnounced = output();
|
|
332
|
+
status = signal('idle');
|
|
333
|
+
lastCopiedText = signal(null);
|
|
334
|
+
error = signal(null);
|
|
335
|
+
hostElement = inject(ElementRef).nativeElement;
|
|
336
|
+
destroyRef = inject(DestroyRef);
|
|
337
|
+
successResetTimer = null;
|
|
338
|
+
copying = false;
|
|
339
|
+
get dataCopyDisabledAttr() {
|
|
340
|
+
return this.isDisabled() ? '' : null;
|
|
341
|
+
}
|
|
342
|
+
get ariaDisabledAttr() {
|
|
343
|
+
if (isNativeButton(this.hostElement)) {
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
return this.isDisabled() ? 'true' : null;
|
|
347
|
+
}
|
|
348
|
+
get disabledAttr() {
|
|
349
|
+
if (!isNativeButton(this.hostElement)) {
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
return this.isDisabled() ? '' : null;
|
|
353
|
+
}
|
|
354
|
+
constructor() {
|
|
355
|
+
effect((onCleanup) => {
|
|
356
|
+
const hotkey = normalizeHotkey(this.tngCopyButtonHotkey());
|
|
357
|
+
if (hotkey === null) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
const ownerDocument = this.hostElement.ownerDocument;
|
|
361
|
+
const listener = (event) => {
|
|
362
|
+
if (!this.isHostOrChildFocused()) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
if (!eventMatchesHotkey(event, hotkey)) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
event.preventDefault();
|
|
369
|
+
void this.tryCopy('keyboard');
|
|
370
|
+
};
|
|
371
|
+
ownerDocument.addEventListener('keydown', listener);
|
|
372
|
+
onCleanup(() => ownerDocument.removeEventListener('keydown', listener));
|
|
373
|
+
});
|
|
374
|
+
this.destroyRef.onDestroy(() => {
|
|
375
|
+
this.clearSuccessResetTimer();
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
onHostClick(...args) {
|
|
379
|
+
const [event] = args;
|
|
380
|
+
if (!(event instanceof Event)) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
if (this.isDisabled() && !isNativeButton(this.hostElement)) {
|
|
384
|
+
event.preventDefault();
|
|
385
|
+
event.stopImmediatePropagation();
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
void this.tryCopy('pointer');
|
|
389
|
+
}
|
|
390
|
+
onHostKeyDown(...args) {
|
|
391
|
+
if (isNativeButton(this.hostElement)) {
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
const [event] = args;
|
|
395
|
+
if (!(event instanceof KeyboardEvent)) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
if (!isActivationKey(event.key)) {
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
event.preventDefault();
|
|
402
|
+
if (this.isDisabled()) {
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
void this.tryCopy('keyboard');
|
|
406
|
+
}
|
|
407
|
+
async copy() {
|
|
408
|
+
return this.tryCopy('programmatic');
|
|
409
|
+
}
|
|
410
|
+
shouldAnnounce(trigger) {
|
|
411
|
+
const announce = this.tngCopyButtonAnnounce();
|
|
412
|
+
if (announce === false) {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
if (announce === true) {
|
|
416
|
+
return true;
|
|
417
|
+
}
|
|
418
|
+
return trigger === 'keyboard';
|
|
419
|
+
}
|
|
420
|
+
isDisabled() {
|
|
421
|
+
return this.tngCopyDisabled() || this.tngCopyButtonDisabled();
|
|
422
|
+
}
|
|
423
|
+
isHostOrChildFocused() {
|
|
424
|
+
const activeElement = this.hostElement.ownerDocument.activeElement;
|
|
425
|
+
if (!isElement(activeElement)) {
|
|
426
|
+
return false;
|
|
427
|
+
}
|
|
428
|
+
return activeElement === this.hostElement || this.hostElement.contains(activeElement);
|
|
429
|
+
}
|
|
430
|
+
clearSuccessResetTimer() {
|
|
431
|
+
if (this.successResetTimer === null) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
clearTimeout(this.successResetTimer);
|
|
435
|
+
this.successResetTimer = null;
|
|
436
|
+
}
|
|
437
|
+
scheduleSuccessReset() {
|
|
438
|
+
this.clearSuccessResetTimer();
|
|
439
|
+
this.successResetTimer = setTimeout(() => {
|
|
440
|
+
this.status.set('idle');
|
|
441
|
+
this.successResetTimer = null;
|
|
442
|
+
}, this.tngCopyButtonSuccessDurationMs());
|
|
443
|
+
}
|
|
444
|
+
announce(message, trigger) {
|
|
445
|
+
if (!this.shouldAnnounce(trigger)) {
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
const normalizedMessage = message.trim();
|
|
449
|
+
if (normalizedMessage.length === 0) {
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
this.tngCopyAnnounced.emit(normalizedMessage);
|
|
453
|
+
}
|
|
454
|
+
emitError(error, trigger) {
|
|
455
|
+
this.status.set('error');
|
|
456
|
+
this.error.set(error);
|
|
457
|
+
this.tngCopyError.emit({ error });
|
|
458
|
+
this.announce(this.tngCopyButtonErrorMessage(), trigger);
|
|
459
|
+
}
|
|
460
|
+
async tryCopy(trigger) {
|
|
461
|
+
if (this.copying) {
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
if (this.isDisabled()) {
|
|
465
|
+
return false;
|
|
466
|
+
}
|
|
467
|
+
this.clearSuccessResetTimer();
|
|
468
|
+
this.status.set('copying');
|
|
469
|
+
this.error.set(null);
|
|
470
|
+
this.copying = true;
|
|
471
|
+
const resolvedPayload = this.resolvePayload();
|
|
472
|
+
if (resolvedPayload.error !== null) {
|
|
473
|
+
this.emitError(resolvedPayload.error, trigger);
|
|
474
|
+
this.copying = false;
|
|
475
|
+
return false;
|
|
476
|
+
}
|
|
477
|
+
if (resolvedPayload.text === null) {
|
|
478
|
+
this.emitError(new Error('No copy payload found. Provide tngCopyButtonText/tngCopyText or target inputs.'), trigger);
|
|
479
|
+
this.copying = false;
|
|
480
|
+
return false;
|
|
481
|
+
}
|
|
482
|
+
this.tngCopy.emit({ text: resolvedPayload.text, trigger });
|
|
483
|
+
try {
|
|
484
|
+
const method = await writeTngClipboardText(resolvedPayload.text, this.hostElement.ownerDocument, this.tngCopyButtonFormat());
|
|
485
|
+
this.status.set('success');
|
|
486
|
+
this.lastCopiedText.set(resolvedPayload.text);
|
|
487
|
+
this.tngCopied.emit(resolvedPayload.text);
|
|
488
|
+
this.tngCopySuccess.emit({ text: resolvedPayload.text, method });
|
|
489
|
+
this.announce(this.tngCopyButtonSuccessMessage(), trigger);
|
|
490
|
+
this.scheduleSuccessReset();
|
|
491
|
+
return true;
|
|
492
|
+
}
|
|
493
|
+
catch (error) {
|
|
494
|
+
this.emitError(toCopyError(error), trigger);
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
finally {
|
|
498
|
+
this.copying = false;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
resolvePayload() {
|
|
502
|
+
const explicitTextResult = resolveExplicitText(this.tngCopyButtonText());
|
|
503
|
+
if (explicitTextResult.error !== null) {
|
|
504
|
+
return { error: explicitTextResult.error, text: null };
|
|
505
|
+
}
|
|
506
|
+
const fallbackText = this.tngCopyText();
|
|
507
|
+
const directText = explicitTextResult.value !== undefined ? explicitTextResult.value : fallbackText;
|
|
508
|
+
const configuredTarget = this.tngCopyButtonTarget() ?? this.tngCopyFrom();
|
|
509
|
+
const hasConfiguredTarget = configuredTarget !== undefined &&
|
|
510
|
+
configuredTarget !== null &&
|
|
511
|
+
!(typeof configuredTarget === 'string' && configuredTarget.trim().length === 0);
|
|
512
|
+
const sourceElement = resolveSourceElement(configuredTarget, this.hostElement.ownerDocument);
|
|
513
|
+
if (hasConfiguredTarget && sourceElement === null) {
|
|
514
|
+
return { error: new Error('Copy target was not found.'), text: null };
|
|
515
|
+
}
|
|
516
|
+
const sourceText = sourceElement === null
|
|
517
|
+
? null
|
|
518
|
+
: extractTextFromSourceElement(sourceElement, this.tngCopyIgnoreSelectors());
|
|
519
|
+
return { error: null, text: resolveTngCopyPayload(directText, sourceText) };
|
|
520
|
+
}
|
|
521
|
+
};
|
|
522
|
+
__decorate([
|
|
523
|
+
HostBinding('attr.data-copy-disabled')
|
|
524
|
+
], TngCopy.prototype, "dataCopyDisabledAttr", null);
|
|
525
|
+
__decorate([
|
|
526
|
+
HostBinding('attr.aria-disabled')
|
|
527
|
+
], TngCopy.prototype, "ariaDisabledAttr", null);
|
|
528
|
+
__decorate([
|
|
529
|
+
HostBinding('attr.disabled')
|
|
530
|
+
], TngCopy.prototype, "disabledAttr", null);
|
|
531
|
+
__decorate([
|
|
532
|
+
HostListener('click', ['$event'])
|
|
533
|
+
], TngCopy.prototype, "onHostClick", null);
|
|
534
|
+
__decorate([
|
|
535
|
+
HostListener('keydown', ['$event'])
|
|
536
|
+
], TngCopy.prototype, "onHostKeyDown", null);
|
|
537
|
+
TngCopy = __decorate([
|
|
538
|
+
Directive({
|
|
539
|
+
selector: '[tngCopy], [tngCopyButton]',
|
|
540
|
+
exportAs: 'tngCopy',
|
|
541
|
+
})
|
|
542
|
+
], TngCopy);
|
|
543
|
+
export { TngCopy };
|
|
544
|
+
//# sourceMappingURL=tng-copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-copy.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/utility/copy/tng-copy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n booleanAttribute,\n effect,\n inject,\n input,\n output,\n signal,\n type Signal,\n} from '@angular/core';\nimport type { ElementRef as NgElementRef } from '@angular/core';\n\ntype TngCopyElementRef = Readonly<NgElementRef<HTMLElement>>;\ntype TngCopySourceElement = Readonly<HTMLElement>;\n\nexport type TngCopyFromTarget =\n | TngCopyElementRef\n | TngCopySourceElement\n | string\n | null\n | undefined;\nexport type TngCopyIgnoreSelectorsInput = readonly string[] | string | null | undefined;\nexport type TngCopyButtonTextInput = string | (() => string) | Signal<string> | null | undefined;\nexport type TngCopyButtonTrigger = 'keyboard' | 'pointer' | 'programmatic';\nexport type TngCopyButtonStatus = 'copying' | 'error' | 'idle' | 'success';\nexport type TngCopyFormat = 'text/html' | 'text/plain';\nexport type TngCopyMethod = 'clipboard' | 'execCommand';\nexport type TngCopyAnnounce = boolean | 'auto';\n\nexport interface TngCopyEvent {\n text: string;\n trigger: TngCopyButtonTrigger;\n}\n\nexport interface TngCopySuccessEvent {\n method: TngCopyMethod;\n text: string;\n}\n\nexport interface TngCopyErrorEvent {\n error: unknown;\n}\n\nexport const defaultTngCopyIgnoreSelectors: readonly string[] = Object.freeze([\n '[data-copy-ignore]',\n '.line-no',\n '.line-number',\n '.line-numbers',\n]);\nexport const defaultTngCopySuccessDurationMs = 1500;\nexport const defaultTngCopySuccessAnnouncement = 'Copied to clipboard';\nexport const defaultTngCopyErrorAnnouncement = 'Copy failed';\n\nfunction hasNonEmptyText(value: string): boolean {\n return value.trim().length > 0;\n}\n\nfunction dedupeSelectors(selectors: readonly string[]): readonly string[] {\n return [...new Set(selectors)];\n}\n\nfunction normalizeSelectorFromArray(value: readonly string[]): readonly string[] {\n return dedupeSelectors(\n value.map((selector) => selector.trim()).filter((selector) => selector.length > 0),\n );\n}\n\nfunction normalizeSelectorFromString(value: string): readonly string[] {\n return dedupeSelectors(\n value\n .split(',')\n .map((selector) => selector.trim())\n .filter((selector) => selector.length > 0),\n );\n}\n\nfunction toCopyError(error: unknown): Error {\n if (error instanceof Error) {\n return error;\n }\n\n if (typeof error === 'string') {\n return new Error(error);\n }\n\n return new Error('Copy failed.');\n}\n\nfunction isHtmlElement(value: unknown): value is HTMLElement {\n return typeof HTMLElement !== 'undefined' && value instanceof HTMLElement;\n}\n\nfunction isDocument(value: unknown): value is Document {\n return typeof Document !== 'undefined' && value instanceof Document;\n}\n\nfunction isElementRefTarget(value: unknown): value is TngCopyElementRef {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n if (!('nativeElement' in value)) {\n return false;\n }\n\n const candidate = value as { nativeElement: unknown };\n return isHtmlElement(candidate.nativeElement);\n}\n\nfunction resolveSourceElement(source: unknown, ownerDocument: unknown): HTMLElement | null {\n if (!isDocument(ownerDocument)) {\n return null;\n }\n\n if (source === null || source === undefined) {\n return null;\n }\n\n if (typeof source === 'string') {\n const normalizedSelector = source.trim();\n if (normalizedSelector.length === 0) {\n return null;\n }\n\n return ownerDocument.querySelector<HTMLElement>(normalizedSelector);\n }\n\n if (isHtmlElement(source)) {\n return source;\n }\n\n if (isElementRefTarget(source)) {\n return source.nativeElement;\n }\n\n return null;\n}\n\nfunction removeIgnoredNodes(root: unknown, ignoreSelectors: readonly string[]): void {\n if (!isHtmlElement(root)) {\n return;\n }\n\n for (const selector of ignoreSelectors) {\n try {\n const ignoredNodes: readonly Element[] = Array.from(root.querySelectorAll(selector));\n for (const node of ignoredNodes) {\n node.remove();\n }\n } catch {\n continue;\n }\n }\n}\n\nfunction isTextInputElement(\n sourceElement: unknown,\n): sourceElement is HTMLInputElement | HTMLTextAreaElement {\n const isInputElement =\n typeof HTMLInputElement !== 'undefined' && sourceElement instanceof HTMLInputElement;\n if (isInputElement) {\n return true;\n }\n\n return typeof HTMLTextAreaElement !== 'undefined' && sourceElement instanceof HTMLTextAreaElement;\n}\n\nfunction extractTextFromSourceElement(\n sourceElement: unknown,\n ignoreSelectors: readonly string[],\n): string {\n if (!isHtmlElement(sourceElement)) {\n return '';\n }\n\n if (isTextInputElement(sourceElement)) {\n return sourceElement.value;\n }\n\n if (ignoreSelectors.length === 0) {\n return sourceElement.textContent ?? '';\n }\n\n const clone = sourceElement.cloneNode(true) as HTMLElement;\n removeIgnoredNodes(clone, ignoreSelectors);\n return clone.textContent ?? '';\n}\n\nfunction copyWithExecCommand(text: string, ownerDocument: unknown): boolean {\n if (!isDocument(ownerDocument)) {\n return false;\n }\n\n if (typeof ownerDocument.execCommand !== 'function') {\n return false;\n }\n\n const body = ownerDocument.body;\n if (body === null) {\n return false;\n }\n\n const textarea = ownerDocument.createElement('textarea');\n textarea.value = text;\n textarea.setAttribute('readonly', '');\n textarea.style.inset = '0';\n textarea.style.opacity = '0';\n textarea.style.pointerEvents = 'none';\n textarea.style.position = 'fixed';\n const activeElement = ownerDocument.activeElement;\n const restoreTarget = isHtmlElement(activeElement) ? activeElement : null;\n\n body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n\n try {\n return ownerDocument.execCommand('copy');\n } finally {\n body.removeChild(textarea);\n if (restoreTarget !== null && ownerDocument.contains(restoreTarget)) {\n restoreTarget.focus();\n }\n }\n}\n\nfunction toRoundedPositiveNumber(value: number): number {\n return Math.max(0, Math.round(value));\n}\n\nfunction toPlainTextFromHtml(html: string, ownerDocument: unknown): string {\n if (!isDocument(ownerDocument)) {\n return html.replace(/<[^>]*>/g, '');\n }\n\n const template = ownerDocument.createElement('template');\n template.innerHTML = html;\n return template.content.textContent ?? '';\n}\n\nfunction normalizeHotkey(value: string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n const normalized = value.trim().toLowerCase();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction normalizeKey(value: string): string {\n if (value === ' ') {\n return 'space';\n }\n\n const normalized = value.trim().toLowerCase();\n if (normalized === 'spacebar') {\n return 'space';\n }\n\n return normalized;\n}\n\nfunction isActivationKey(key: string): boolean {\n return key === 'Enter' || key === ' ';\n}\n\nfunction isNativeButton(value: unknown): value is HTMLButtonElement {\n return typeof HTMLButtonElement !== 'undefined' && value instanceof HTMLButtonElement;\n}\n\nfunction isElement(value: unknown): value is Element {\n return typeof Element !== 'undefined' && value instanceof Element;\n}\n\nfunction resolveExplicitText(\n value: TngCopyButtonTextInput,\n): { error: Error | null; value: string | null | undefined } {\n if (value === undefined || value === null) {\n return { error: null, value };\n }\n\n if (typeof value === 'string') {\n return { error: null, value };\n }\n\n try {\n const result = value();\n if (result === null || result === undefined) {\n return { error: null, value: null };\n }\n\n return { error: null, value: typeof result === 'string' ? result : String(result) };\n } catch (error) {\n return { error: toCopyError(error), value: null };\n }\n}\n\nfunction eventMatchesHotkey(event: KeyboardEvent, hotkey: string): boolean {\n const tokens = hotkey\n .split('+')\n .map((token) => token.trim().toLowerCase())\n .filter((token) => token.length > 0);\n\n if (tokens.length === 0) {\n return false;\n }\n\n const keyToken = tokens[tokens.length - 1];\n const modifierTokens = tokens.slice(0, -1);\n const modifierSet = new Set(modifierTokens);\n const isMacPlatform = /mac|iphone|ipad|ipod/i.test(globalThis.navigator?.platform ?? '');\n\n const expectsCtrl = modifierSet.has('ctrl') || (modifierSet.has('mod') && !isMacPlatform);\n const expectsMeta = modifierSet.has('meta') || (modifierSet.has('mod') && isMacPlatform);\n const expectsAlt = modifierSet.has('alt');\n const expectsShift = modifierSet.has('shift');\n\n if (event.ctrlKey !== expectsCtrl) {\n return false;\n }\n\n if (event.metaKey !== expectsMeta) {\n return false;\n }\n\n if (event.altKey !== expectsAlt) {\n return false;\n }\n\n if (event.shiftKey !== expectsShift) {\n return false;\n }\n\n return normalizeKey(event.key) === normalizeKey(keyToken);\n}\n\nfunction coerceTngCopySuccessDuration(value: number | string): number {\n const numericValue = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numericValue)) {\n return defaultTngCopySuccessDurationMs;\n }\n\n return toRoundedPositiveNumber(numericValue);\n}\n\nfunction coerceTngCopyAnnounce(value: TngCopyAnnounce | string | null | undefined): TngCopyAnnounce {\n if (value === undefined || value === null || value === 'auto') {\n return 'auto';\n }\n\n if (value === '' || value === true || value === 'true') {\n return true;\n }\n\n if (value === false || value === 'false') {\n return false;\n }\n\n return 'auto';\n}\n\nfunction coerceTngCopyFormat(value: TngCopyFormat | string | null | undefined): TngCopyFormat {\n if (value === 'text/html') {\n return 'text/html';\n }\n\n return 'text/plain';\n}\n\nexport function normalizeTngCopyIgnoreSelectors(\n value: TngCopyIgnoreSelectorsInput,\n): readonly string[] {\n if (value === undefined || value === null) {\n return defaultTngCopyIgnoreSelectors;\n }\n\n if (typeof value === 'string') {\n return normalizeSelectorFromString(value);\n }\n\n return normalizeSelectorFromArray(value);\n}\n\nexport function resolveTngCopyPayload(\n directText: string | null | undefined,\n sourceText: string | null,\n): string | null {\n if (directText !== null && directText !== undefined) {\n return hasNonEmptyText(directText) ? directText : null;\n }\n\n if (sourceText !== null && hasNonEmptyText(sourceText)) {\n return sourceText;\n }\n\n return null;\n}\n\nexport async function writeTngClipboardText(\n text: string,\n ownerDocument: unknown,\n format: TngCopyFormat = 'text/plain',\n): Promise<TngCopyMethod> {\n const clipboardApi = globalThis.navigator?.clipboard;\n const plainText = format === 'text/html' ? toPlainTextFromHtml(text, ownerDocument) : text;\n let clipboardError: unknown = null;\n\n if (clipboardApi !== undefined) {\n try {\n if (\n format === 'text/html' &&\n typeof clipboardApi.write === 'function' &&\n typeof ClipboardItem !== 'undefined' &&\n typeof Blob !== 'undefined'\n ) {\n const clipboardItem = new ClipboardItem({\n 'text/html': new Blob([text], { type: 'text/html' }),\n 'text/plain': new Blob([plainText], { type: 'text/plain' }),\n });\n await clipboardApi.write([clipboardItem]);\n return 'clipboard';\n }\n\n if (typeof clipboardApi.writeText === 'function') {\n await clipboardApi.writeText(plainText);\n return 'clipboard';\n }\n } catch (error) {\n clipboardError = error;\n }\n }\n\n const didCopy = copyWithExecCommand(plainText, ownerDocument);\n if (didCopy) {\n return 'execCommand';\n }\n\n if (clipboardError !== null) {\n throw toCopyError(clipboardError);\n }\n\n throw new Error('Clipboard API is not available in this environment.');\n}\n\n@Directive({\n selector: '[tngCopy], [tngCopyButton]',\n exportAs: 'tngCopy',\n})\nexport class TngCopy {\n public readonly tngCopy = output<TngCopyEvent>();\n public readonly tngCopyButtonText = input<TngCopyButtonTextInput>(undefined);\n public readonly tngCopyButtonTarget = input<TngCopyFromTarget>(null);\n public readonly tngCopyButtonFormat = input<TngCopyFormat, TngCopyFormat | string | null | undefined>(\n 'text/plain',\n { transform: coerceTngCopyFormat },\n );\n public readonly tngCopyButtonSuccessDurationMs = input<number, number | string>(\n defaultTngCopySuccessDurationMs,\n { transform: coerceTngCopySuccessDuration },\n );\n public readonly tngCopyButtonDisabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly tngCopyButtonHotkey = input<string | null>(null);\n public readonly tngCopyButtonAnnounce = input<TngCopyAnnounce, TngCopyAnnounce | string | null | undefined>(\n 'auto',\n { transform: coerceTngCopyAnnounce },\n );\n public readonly tngCopyButtonSuccessMessage = input<string>(defaultTngCopySuccessAnnouncement);\n public readonly tngCopyButtonErrorMessage = input<string>(defaultTngCopyErrorAnnouncement);\n public readonly tngCopyDisabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly tngCopied = output<string>();\n public readonly tngCopySuccess = output<TngCopySuccessEvent>();\n public readonly tngCopyError = output<TngCopyErrorEvent>();\n public readonly tngCopyFrom = input<TngCopyFromTarget>(null);\n public readonly tngCopyIgnoreSelectors = input<readonly string[], TngCopyIgnoreSelectorsInput>(\n defaultTngCopyIgnoreSelectors,\n {\n transform: normalizeTngCopyIgnoreSelectors,\n },\n );\n public readonly tngCopyText = input<string | null | undefined>(undefined);\n public readonly tngCopyAnnounced = output<string>();\n public readonly status = signal<TngCopyButtonStatus>('idle');\n public readonly lastCopiedText = signal<string | null>(null);\n public readonly error = signal<unknown | null>(null);\n\n private readonly hostElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n private successResetTimer: ReturnType<typeof setTimeout> | null = null;\n private copying = false;\n\n @HostBinding('attr.data-copy-disabled')\n protected get dataCopyDisabledAttr(): '' | null {\n return this.isDisabled() ? '' : null;\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): 'true' | null {\n if (isNativeButton(this.hostElement)) {\n return null;\n }\n\n return this.isDisabled() ? 'true' : null;\n }\n\n @HostBinding('attr.disabled')\n protected get disabledAttr(): '' | null {\n if (!isNativeButton(this.hostElement)) {\n return null;\n }\n\n return this.isDisabled() ? '' : null;\n }\n\n public constructor() {\n effect((onCleanup): void => {\n const hotkey = normalizeHotkey(this.tngCopyButtonHotkey());\n if (hotkey === null) {\n return;\n }\n\n const ownerDocument = this.hostElement.ownerDocument;\n const listener = (event: KeyboardEvent): void => {\n if (!this.isHostOrChildFocused()) {\n return;\n }\n\n if (!eventMatchesHotkey(event, hotkey)) {\n return;\n }\n\n event.preventDefault();\n void this.tryCopy('keyboard');\n };\n\n ownerDocument.addEventListener('keydown', listener);\n onCleanup(() => ownerDocument.removeEventListener('keydown', listener));\n });\n\n this.destroyRef.onDestroy((): void => {\n this.clearSuccessResetTimer();\n });\n }\n\n @HostListener('click', ['$event'])\n protected onHostClick(...args: readonly unknown[]): void {\n const [event] = args;\n if (!(event instanceof Event)) {\n return;\n }\n\n if (this.isDisabled() && !isNativeButton(this.hostElement)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n\n void this.tryCopy('pointer');\n }\n\n @HostListener('keydown', ['$event'])\n protected onHostKeyDown(...args: readonly unknown[]): void {\n if (isNativeButton(this.hostElement)) {\n return;\n }\n\n const [event] = args;\n if (!(event instanceof KeyboardEvent)) {\n return;\n }\n\n if (!isActivationKey(event.key)) {\n return;\n }\n\n event.preventDefault();\n if (this.isDisabled()) {\n return;\n }\n\n void this.tryCopy('keyboard');\n }\n\n public async copy(): Promise<boolean> {\n return this.tryCopy('programmatic');\n }\n\n private shouldAnnounce(trigger: TngCopyButtonTrigger): boolean {\n const announce = this.tngCopyButtonAnnounce();\n if (announce === false) {\n return false;\n }\n\n if (announce === true) {\n return true;\n }\n\n return trigger === 'keyboard';\n }\n\n private isDisabled(): boolean {\n return this.tngCopyDisabled() || this.tngCopyButtonDisabled();\n }\n\n private isHostOrChildFocused(): boolean {\n const activeElement = this.hostElement.ownerDocument.activeElement;\n if (!isElement(activeElement)) {\n return false;\n }\n\n return activeElement === this.hostElement || this.hostElement.contains(activeElement);\n }\n\n private clearSuccessResetTimer(): void {\n if (this.successResetTimer === null) {\n return;\n }\n\n clearTimeout(this.successResetTimer);\n this.successResetTimer = null;\n }\n\n private scheduleSuccessReset(): void {\n this.clearSuccessResetTimer();\n this.successResetTimer = setTimeout((): void => {\n this.status.set('idle');\n this.successResetTimer = null;\n }, this.tngCopyButtonSuccessDurationMs());\n }\n\n private announce(message: string, trigger: TngCopyButtonTrigger): void {\n if (!this.shouldAnnounce(trigger)) {\n return;\n }\n\n const normalizedMessage = message.trim();\n if (normalizedMessage.length === 0) {\n return;\n }\n\n this.tngCopyAnnounced.emit(normalizedMessage);\n }\n\n private emitError(error: Error, trigger: TngCopyButtonTrigger): void {\n this.status.set('error');\n this.error.set(error);\n this.tngCopyError.emit({ error });\n this.announce(this.tngCopyButtonErrorMessage(), trigger);\n }\n\n private async tryCopy(trigger: TngCopyButtonTrigger): Promise<boolean> {\n if (this.copying) {\n return false;\n }\n\n if (this.isDisabled()) {\n return false;\n }\n\n this.clearSuccessResetTimer();\n this.status.set('copying');\n this.error.set(null);\n this.copying = true;\n\n const resolvedPayload = this.resolvePayload();\n if (resolvedPayload.error !== null) {\n this.emitError(resolvedPayload.error, trigger);\n this.copying = false;\n return false;\n }\n\n if (resolvedPayload.text === null) {\n this.emitError(\n new Error('No copy payload found. Provide tngCopyButtonText/tngCopyText or target inputs.'),\n trigger,\n );\n this.copying = false;\n return false;\n }\n\n this.tngCopy.emit({ text: resolvedPayload.text, trigger });\n\n try {\n const method = await writeTngClipboardText(\n resolvedPayload.text,\n this.hostElement.ownerDocument,\n this.tngCopyButtonFormat(),\n );\n this.status.set('success');\n this.lastCopiedText.set(resolvedPayload.text);\n this.tngCopied.emit(resolvedPayload.text);\n this.tngCopySuccess.emit({ text: resolvedPayload.text, method });\n this.announce(this.tngCopyButtonSuccessMessage(), trigger);\n this.scheduleSuccessReset();\n return true;\n } catch (error) {\n this.emitError(toCopyError(error), trigger);\n return false;\n } finally {\n this.copying = false;\n }\n }\n\n private resolvePayload(): { error: Error | null; text: string | null } {\n const explicitTextResult = resolveExplicitText(this.tngCopyButtonText());\n if (explicitTextResult.error !== null) {\n return { error: explicitTextResult.error, text: null };\n }\n\n const fallbackText = this.tngCopyText();\n const directText =\n explicitTextResult.value !== undefined ? explicitTextResult.value : fallbackText;\n\n const configuredTarget = this.tngCopyButtonTarget() ?? this.tngCopyFrom();\n const hasConfiguredTarget =\n configuredTarget !== undefined &&\n configuredTarget !== null &&\n !(typeof configuredTarget === 'string' && configuredTarget.trim().length === 0);\n\n const sourceElement = resolveSourceElement(configuredTarget, this.hostElement.ownerDocument);\n if (hasConfiguredTarget && sourceElement === null) {\n return { error: new Error('Copy target was not found.'), text: null };\n }\n\n const sourceText =\n sourceElement === null\n ? null\n : extractTextFromSourceElement(sourceElement, this.tngCopyIgnoreSelectors());\n\n return { error: null, text: resolveTngCopyPayload(directText, sourceText) };\n }\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
type NullableBooleanInput = boolean | null | string | undefined;
|
|
2
|
+
export type TngPressAriaHasPopup = 'dialog' | 'false' | 'grid' | 'listbox' | 'menu' | 'tree' | 'true';
|
|
3
|
+
export type TngPressType = 'button' | 'reset' | 'submit';
|
|
4
|
+
export declare function coerceTngPressNullableBoolean(value: NullableBooleanInput): boolean | null;
|
|
5
|
+
export declare function coerceTngPressAriaHasPopup(value: boolean | null | string | undefined): TngPressAriaHasPopup | null;
|
|
6
|
+
export declare class TngPress {
|
|
7
|
+
readonly ariaControls: import("@angular/core").InputSignal<string | null>;
|
|
8
|
+
readonly ariaExpanded: import("@angular/core").InputSignalWithTransform<boolean | null, NullableBooleanInput>;
|
|
9
|
+
readonly ariaHasPopup: import("@angular/core").InputSignalWithTransform<TngPressAriaHasPopup | null, string | boolean | null | undefined>;
|
|
10
|
+
readonly ariaPressed: import("@angular/core").InputSignalWithTransform<boolean | null, NullableBooleanInput>;
|
|
11
|
+
readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
|
|
12
|
+
readonly type: import("@angular/core").InputSignal<TngPressType>;
|
|
13
|
+
private readonly hostRef;
|
|
14
|
+
protected get ariaControlsAttr(): string | null;
|
|
15
|
+
protected get ariaDisabledAttr(): 'true' | null;
|
|
16
|
+
protected get ariaExpandedAttr(): 'false' | 'true' | null;
|
|
17
|
+
protected get ariaHasPopupAttr(): TngPressAriaHasPopup | null;
|
|
18
|
+
protected get ariaPressedAttr(): 'false' | 'true' | null;
|
|
19
|
+
protected get dataDisabledAttr(): '' | null;
|
|
20
|
+
protected get disabledAttr(): '' | null;
|
|
21
|
+
protected get roleAttr(): 'button' | null;
|
|
22
|
+
protected get tabIndexAttr(): -1 | 0 | null;
|
|
23
|
+
protected get typeAttr(): TngPressType | null;
|
|
24
|
+
protected onHostClick(...args: readonly unknown[]): void;
|
|
25
|
+
protected onHostKeyDown(...args: readonly unknown[]): void;
|
|
26
|
+
private get hostElement();
|
|
27
|
+
private hasHref;
|
|
28
|
+
private isAnchorHost;
|
|
29
|
+
private isAnchorWithoutHref;
|
|
30
|
+
private isNativeButton;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=tng-press.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-press.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/utility/press/tng-press.ts"],"names":[],"mappings":"AAWA,KAAK,oBAAoB,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAChE,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAYzD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,GAAG,IAAI,CAczF;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GACzC,oBAAoB,GAAG,IAAI,CAmB7B;AA2BD,qBAIa,QAAQ;IACnB,SAAgB,YAAY,qDAA8B;IAC1D,SAAgB,YAAY,yFAEzB;IACH,SAAgB,YAAY,qHAKzB;IACH,SAAgB,WAAW,yFAExB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,oDAAiC;IAErD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqD;IAG7E,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAM9C;IAGD,SAAS,KAAK,gBAAgB,IAAI,OAAO,GAAG,MAAM,GAAG,IAAI,CAExD;IAGD,SAAS,KAAK,gBAAgB,IAAI,oBAAoB,GAAG,IAAI,CAE5D;IAGD,SAAS,KAAK,eAAe,IAAI,OAAO,GAAG,MAAM,GAAG,IAAI,CAEvD;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAMtC;IAGD,SAAS,KAAK,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAExC;IAGD,SAAS,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAU1C;IAGD,SAAS,KAAK,QAAQ,IAAI,YAAY,GAAG,IAAI,CAE5C;IAGD,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAexD,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAsB1D,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,cAAc;CAGvB"}
|