@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,45 @@
|
|
|
1
|
+
import type { TngSelectHostApi } from '../_shared/select/tng-select.host-api';
|
|
2
|
+
import { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';
|
|
3
|
+
export declare class TngMultiSelect<T = unknown> implements TngSelectHostApi {
|
|
4
|
+
readonly hostElement: any;
|
|
5
|
+
readonly open: import("@angular/core").ModelSignal<boolean>;
|
|
6
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
7
|
+
/** Values of selected options. Empty array = no selection. */
|
|
8
|
+
readonly value: import("@angular/core").ModelSignal<readonly T[]>;
|
|
9
|
+
private _contentId;
|
|
10
|
+
private _listboxId;
|
|
11
|
+
private _activeId;
|
|
12
|
+
private _listboxApi;
|
|
13
|
+
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
14
|
+
readonly invalid: import("@angular/core").InputSignal<boolean>;
|
|
15
|
+
readonly labelId: import("@angular/core").InputSignal<string | null>;
|
|
16
|
+
readonly descriptionId: import("@angular/core").InputSignal<string | null>;
|
|
17
|
+
readonly errorId: import("@angular/core").InputSignal<string | null>;
|
|
18
|
+
protected readonly dataSlot: 'multi-select';
|
|
19
|
+
protected get dataState(): 'open' | 'closed';
|
|
20
|
+
protected get dataDisabled(): '' | null;
|
|
21
|
+
protected get dataLoading(): '' | null;
|
|
22
|
+
protected get dataInvalid(): '' | null;
|
|
23
|
+
/** Multi-select: always true. Satisfies TngSelectHostApi. */
|
|
24
|
+
readonly multiple: () => boolean;
|
|
25
|
+
setContentId(id: string | null): void;
|
|
26
|
+
getContentId(): string | null;
|
|
27
|
+
setListboxId(id: string | null): void;
|
|
28
|
+
getListboxId(): string | null;
|
|
29
|
+
setActiveDescendantId(id: string | null): void;
|
|
30
|
+
getActiveDescendantId(): string | null;
|
|
31
|
+
openSelect(): void;
|
|
32
|
+
close(): void;
|
|
33
|
+
toggle(): void;
|
|
34
|
+
/** Adds an item to the selection if not already selected. */
|
|
35
|
+
addSelectedItem(item: T): void;
|
|
36
|
+
/** Removes an item from the selection if currently selected. */
|
|
37
|
+
removeSelectedItem(item: T): void;
|
|
38
|
+
/** Toggles an item in the selection (add if not present, remove if present). */
|
|
39
|
+
toggleSelectedItem(item: T): void;
|
|
40
|
+
/** Clears the selection. */
|
|
41
|
+
clear(): void;
|
|
42
|
+
setListboxApi(api: TngMultiSelectListboxApi<T> | null): void;
|
|
43
|
+
getListboxApi(): TngMultiSelectListboxApi<T> | null;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=tng-multi-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,qBASa,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,gBAAgB;IAClE,QAAQ,CAAC,WAAW,MAAiD;IACrE,SAAgB,IAAI,+CAAyB;IAC7C,SAAgB,QAAQ,+CAAyB;IACjD,8DAA8D;IAC9D,SAAgB,KAAK,oDAA2B;IAEhD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAA4C;IAE/D,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,aAAa,qDAA8B;IAC3D,SAAgB,OAAO,qDAA8B;IAGrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAkB;IAG7D,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAED,6DAA6D;IAC7D,SAAgB,QAAQ,QAAO,OAAO,CAAS;IAExC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,UAAU,IAAI,IAAI;IAIlB,KAAK,IAAI,IAAI;IAGb,MAAM,IAAI,IAAI;IAKrB,6DAA6D;IACtD,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAOrC,gEAAgE;IACzD,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAQxC,gFAAgF;IACzE,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAWxC,4BAA4B;IACrB,KAAK,IAAI,IAAI;IAKb,aAAa,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAG5D,aAAa,IAAI,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI;CAG3D"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Directive, ElementRef, HostBinding, inject, input, model } from '@angular/core';
|
|
3
|
+
import { TNG_MULTI_SELECT } from './tng-multi-select.tokens';
|
|
4
|
+
import { TNG_SELECT_HOST } from '../_shared/select/tng-select.tokens.shared';
|
|
5
|
+
let TngMultiSelect = class TngMultiSelect {
|
|
6
|
+
hostElement = inject((ElementRef)).nativeElement;
|
|
7
|
+
open = model(false);
|
|
8
|
+
disabled = input(false);
|
|
9
|
+
/** Values of selected options. Empty array = no selection. */
|
|
10
|
+
value = model([]);
|
|
11
|
+
_contentId = null;
|
|
12
|
+
_listboxId = null;
|
|
13
|
+
_activeId = null;
|
|
14
|
+
_listboxApi = null;
|
|
15
|
+
loading = input(false);
|
|
16
|
+
invalid = input(false);
|
|
17
|
+
labelId = input(null);
|
|
18
|
+
descriptionId = input(null);
|
|
19
|
+
errorId = input(null);
|
|
20
|
+
dataSlot = 'multi-select';
|
|
21
|
+
get dataState() {
|
|
22
|
+
return this.open() ? 'open' : 'closed';
|
|
23
|
+
}
|
|
24
|
+
get dataDisabled() {
|
|
25
|
+
return this.disabled() ? '' : null;
|
|
26
|
+
}
|
|
27
|
+
get dataLoading() {
|
|
28
|
+
return this.loading() ? '' : null;
|
|
29
|
+
}
|
|
30
|
+
get dataInvalid() {
|
|
31
|
+
return this.invalid() ? '' : null;
|
|
32
|
+
}
|
|
33
|
+
/** Multi-select: always true. Satisfies TngSelectHostApi. */
|
|
34
|
+
multiple = () => true;
|
|
35
|
+
setContentId(id) {
|
|
36
|
+
this._contentId = id;
|
|
37
|
+
}
|
|
38
|
+
getContentId() {
|
|
39
|
+
return this._contentId;
|
|
40
|
+
}
|
|
41
|
+
setListboxId(id) {
|
|
42
|
+
this._listboxId = id;
|
|
43
|
+
}
|
|
44
|
+
getListboxId() {
|
|
45
|
+
return this._listboxId;
|
|
46
|
+
}
|
|
47
|
+
setActiveDescendantId(id) {
|
|
48
|
+
this._activeId = id;
|
|
49
|
+
}
|
|
50
|
+
getActiveDescendantId() {
|
|
51
|
+
return this._activeId;
|
|
52
|
+
}
|
|
53
|
+
openSelect() {
|
|
54
|
+
if (this.disabled())
|
|
55
|
+
return;
|
|
56
|
+
this.open.set(true);
|
|
57
|
+
}
|
|
58
|
+
close() {
|
|
59
|
+
this.open.set(false);
|
|
60
|
+
}
|
|
61
|
+
toggle() {
|
|
62
|
+
if (this.disabled())
|
|
63
|
+
return;
|
|
64
|
+
this.open.set(!this.open());
|
|
65
|
+
}
|
|
66
|
+
/** Adds an item to the selection if not already selected. */
|
|
67
|
+
addSelectedItem(item) {
|
|
68
|
+
if (this.disabled())
|
|
69
|
+
return;
|
|
70
|
+
const cur = this.value();
|
|
71
|
+
if (cur.some((v) => Object.is(v, item)))
|
|
72
|
+
return;
|
|
73
|
+
this.value.set([...cur, item]);
|
|
74
|
+
}
|
|
75
|
+
/** Removes an item from the selection if currently selected. */
|
|
76
|
+
removeSelectedItem(item) {
|
|
77
|
+
if (this.disabled())
|
|
78
|
+
return;
|
|
79
|
+
const cur = this.value();
|
|
80
|
+
const idx = cur.findIndex((v) => Object.is(v, item));
|
|
81
|
+
if (idx < 0)
|
|
82
|
+
return;
|
|
83
|
+
this.value.set([...cur.slice(0, idx), ...cur.slice(idx + 1)]);
|
|
84
|
+
}
|
|
85
|
+
/** Toggles an item in the selection (add if not present, remove if present). */
|
|
86
|
+
toggleSelectedItem(item) {
|
|
87
|
+
if (this.disabled())
|
|
88
|
+
return;
|
|
89
|
+
const cur = this.value();
|
|
90
|
+
const idx = cur.findIndex((v) => Object.is(v, item));
|
|
91
|
+
const next = idx >= 0
|
|
92
|
+
? [...cur.slice(0, idx), ...cur.slice(idx + 1)]
|
|
93
|
+
: [...cur, item];
|
|
94
|
+
this.value.set(next);
|
|
95
|
+
}
|
|
96
|
+
/** Clears the selection. */
|
|
97
|
+
clear() {
|
|
98
|
+
if (this.disabled())
|
|
99
|
+
return;
|
|
100
|
+
this.value.set([]);
|
|
101
|
+
}
|
|
102
|
+
setListboxApi(api) {
|
|
103
|
+
this._listboxApi = api;
|
|
104
|
+
}
|
|
105
|
+
getListboxApi() {
|
|
106
|
+
return this._listboxApi;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
__decorate([
|
|
110
|
+
HostBinding('attr.data-slot')
|
|
111
|
+
], TngMultiSelect.prototype, "dataSlot", void 0);
|
|
112
|
+
__decorate([
|
|
113
|
+
HostBinding('attr.data-state')
|
|
114
|
+
], TngMultiSelect.prototype, "dataState", null);
|
|
115
|
+
__decorate([
|
|
116
|
+
HostBinding('attr.data-disabled')
|
|
117
|
+
], TngMultiSelect.prototype, "dataDisabled", null);
|
|
118
|
+
__decorate([
|
|
119
|
+
HostBinding('attr.data-loading')
|
|
120
|
+
], TngMultiSelect.prototype, "dataLoading", null);
|
|
121
|
+
__decorate([
|
|
122
|
+
HostBinding('attr.data-invalid')
|
|
123
|
+
], TngMultiSelect.prototype, "dataInvalid", null);
|
|
124
|
+
TngMultiSelect = __decorate([
|
|
125
|
+
Directive({
|
|
126
|
+
selector: '[tngMultiSelect]',
|
|
127
|
+
exportAs: 'tngMultiSelect',
|
|
128
|
+
standalone: true,
|
|
129
|
+
providers: [
|
|
130
|
+
{ provide: TNG_MULTI_SELECT, useExisting: TngMultiSelect },
|
|
131
|
+
{ provide: TNG_SELECT_HOST, useExisting: TngMultiSelect },
|
|
132
|
+
],
|
|
133
|
+
})
|
|
134
|
+
], TngMultiSelect);
|
|
135
|
+
export { TngMultiSelect };
|
|
136
|
+
//# sourceMappingURL=tng-multi-select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAatE,IAAM,cAAc,GAApB,MAAM,cAAc;IAChB,WAAW,GAAG,MAAM,CAAC,CAAA,UAAuB,CAAA,CAAC,CAAC,aAAa,CAAC;IACrD,IAAI,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;IAC7B,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;IACjD,8DAA8D;IAC9C,KAAK,GAAG,KAAK,CAAe,EAAE,CAAC,CAAC;IAExC,UAAU,GAAkB,IAAI,CAAC;IACjC,UAAU,GAAkB,IAAI,CAAC;IACjC,SAAS,GAAkB,IAAI,CAAC;IAChC,WAAW,GAAuC,IAAI,CAAC;IAE/C,OAAO,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;IAChC,OAAO,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;IAChC,OAAO,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IACrC,aAAa,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAC3C,OAAO,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAGlC,QAAQ,GAAmB,cAAc,CAAC;IAG7D,IAAc,SAAS;QACrB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzC,CAAC;IAGD,IAAc,YAAY;QACxB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAGD,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC;IAGD,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC;IAED,6DAA6D;IAC7C,QAAQ,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC;IAExC,YAAY,CAAC,EAAiB;QACnC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IACM,YAAY;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACM,YAAY,CAAC,EAAiB;QACnC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IACM,YAAY;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACM,qBAAqB,CAAC,EAAiB;QAC5C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IACM,qBAAqB;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,UAAU;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACM,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACM,MAAM;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,6DAA6D;IACtD,eAAe,CAAC,IAAO;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAAE,OAAO;QAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,gEAAgE;IACzD,kBAAkB,CAAC,IAAO;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,gFAAgF;IACzE,kBAAkB,CAAC,IAAO;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,IAAI,GACR,GAAG,IAAI,CAAC;YACN,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,4BAA4B;IACrB,KAAK;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IAEM,aAAa,CAAC,GAAuC;QAC1D,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;IACzB,CAAC;IACM,aAAa;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF,CAAA;AAjGoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;gDAC+B;AAG7D;IADC,WAAW,CAAC,iBAAiB,CAAC;+CAG9B;AAGD;IADC,WAAW,CAAC,oBAAoB,CAAC;kDAGjC;AAGD;IADC,WAAW,CAAC,mBAAmB,CAAC;iDAGhC;AAGD;IADC,WAAW,CAAC,mBAAmB,CAAC;iDAGhC;AAvCU,cAAc;IAT1B,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,QAAQ,EAAE,gBAAgB;QAC1B,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE;YACT,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE;YAC1D,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE;SAC1D;KACF,CAAC;GACW,cAAc,CAoH1B","sourcesContent":["import { Directive, ElementRef, HostBinding, inject, input, model } from '@angular/core';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport { TNG_SELECT_HOST } from '../_shared/select/tng-select.tokens.shared';\nimport type { TngSelectHostApi } from '../_shared/select/tng-select.host-api';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\n\n@Directive({\n selector: '[tngMultiSelect]',\n exportAs: 'tngMultiSelect',\n standalone: true,\n providers: [\n { provide: TNG_MULTI_SELECT, useExisting: TngMultiSelect },\n { provide: TNG_SELECT_HOST, useExisting: TngMultiSelect },\n ],\n})\nexport class TngMultiSelect<T = unknown> implements TngSelectHostApi {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n public readonly open = model<boolean>(false);\n public readonly disabled = input<boolean>(false);\n /** Values of selected options. Empty array = no selection. */\n public readonly value = model<readonly T[]>([]);\n\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngMultiSelectListboxApi<T> | null = null;\n\n public readonly loading = input<boolean>(false);\n public readonly invalid = input<boolean>(false);\n public readonly labelId = input<string | null>(null);\n public readonly descriptionId = input<string | null>(null);\n public readonly errorId = input<string | null>(null);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select' = 'multi-select';\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n /** Multi-select: always true. Satisfies TngSelectHostApi. */\n public readonly multiple = (): boolean => true;\n\n public setContentId(id: string | null): void {\n this._contentId = id;\n }\n public getContentId(): string | null {\n return this._contentId;\n }\n public setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n public getListboxId(): string | null {\n return this._listboxId;\n }\n public setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n public getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n public openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n public close(): void {\n this.open.set(false);\n }\n public toggle(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n /** Adds an item to the selection if not already selected. */\n public addSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n if (cur.some((v) => Object.is(v, item))) return;\n this.value.set([...cur, item]);\n }\n\n /** Removes an item from the selection if currently selected. */\n public removeSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n if (idx < 0) return;\n this.value.set([...cur.slice(0, idx), ...cur.slice(idx + 1)]);\n }\n\n /** Toggles an item in the selection (add if not present, remove if present). */\n public toggleSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n const next =\n idx >= 0\n ? [...cur.slice(0, idx), ...cur.slice(idx + 1)]\n : [...cur, item];\n this.value.set(next);\n }\n\n /** Clears the selection. */\n public clear(): void {\n if (this.disabled()) return;\n this.value.set([]);\n }\n\n public setListboxApi(api: TngMultiSelectListboxApi<T> | null): void {\n this._listboxApi = api;\n }\n public getListboxApi(): TngMultiSelectListboxApi<T> | null {\n return this._listboxApi;\n }\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';
|
|
2
|
+
export declare class TngMultiSelectListbox<T = unknown> implements TngMultiSelectListboxApi<T> {
|
|
3
|
+
private readonly multiSelect;
|
|
4
|
+
private readonly destroyRef;
|
|
5
|
+
private readonly listbox;
|
|
6
|
+
protected readonly dataSlot: 'multi-select-listbox';
|
|
7
|
+
protected readonly id: string;
|
|
8
|
+
constructor();
|
|
9
|
+
getHostId(): string | null;
|
|
10
|
+
getActiveId(): string | null;
|
|
11
|
+
ensureActive(pref?: 'first' | 'last'): void;
|
|
12
|
+
handleKey(key: string, shiftKey?: boolean): boolean;
|
|
13
|
+
typeahead(key: string): boolean;
|
|
14
|
+
/** Multi: Enter toggles option, does not close. */
|
|
15
|
+
commitActive(): void;
|
|
16
|
+
protected onListboxValueChange(value: T | readonly T[] | null): void;
|
|
17
|
+
}
|
|
18
|
+
export declare class TngMultiSelectOption<T> {
|
|
19
|
+
protected readonly dataSlot: 'multi-select-option';
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=tng-multi-select.listbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAK5E,qBAYa,qBAAqB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,wBAAwB,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+C;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAA0B;IAG7E,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IAuB1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,mDAAmD;IACnD,YAAY,IAAI,IAAI;IAKpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;CAUrE;AAED,qBAUa,oBAAoB,CAAC,CAAC;IAEjC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAyB;CAC5E"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';
|
|
3
|
+
import { createTngIdFactory } from '@tailng-ui/cdk';
|
|
4
|
+
import { arraysEqual, normalizeToArray } from '../../internal/combobox';
|
|
5
|
+
import { TngListboxDirective, TngOptionDirective } from '@tailng-ui/primitives';
|
|
6
|
+
import { TNG_MULTI_SELECT } from './tng-multi-select.tokens';
|
|
7
|
+
import { TNG_MULTI_SELECT_LISTBOX } from './tng-multi-select.listbox.tokens';
|
|
8
|
+
const createListboxId = createTngIdFactory('tng-multi-select-listbox');
|
|
9
|
+
let TngMultiSelectListbox = class TngMultiSelectListbox {
|
|
10
|
+
multiSelect = inject(TNG_MULTI_SELECT);
|
|
11
|
+
destroyRef = inject(DestroyRef);
|
|
12
|
+
listbox = inject((TngListboxDirective), { self: true });
|
|
13
|
+
dataSlot = 'multi-select-listbox';
|
|
14
|
+
id = createListboxId();
|
|
15
|
+
constructor() {
|
|
16
|
+
this.multiSelect.setListboxId(this.id);
|
|
17
|
+
this.multiSelect.setListboxApi(this);
|
|
18
|
+
effect(() => {
|
|
19
|
+
const v = this.multiSelect.value();
|
|
20
|
+
if (this.multiSelect.open())
|
|
21
|
+
return;
|
|
22
|
+
const current = untracked(this.listbox.value);
|
|
23
|
+
const arrV = v.length > 0 ? [...v] : null;
|
|
24
|
+
const arrCur = normalizeToArray(current);
|
|
25
|
+
if (arraysEqual(arrV, arrCur))
|
|
26
|
+
return;
|
|
27
|
+
this.listbox.value.set((v.length > 0 ? v : null));
|
|
28
|
+
});
|
|
29
|
+
this.destroyRef.onDestroy(() => {
|
|
30
|
+
this.multiSelect.setListboxId(null);
|
|
31
|
+
this.multiSelect.setListboxApi(null);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
getHostId() {
|
|
35
|
+
return this.id ?? null;
|
|
36
|
+
}
|
|
37
|
+
getActiveId() {
|
|
38
|
+
return this.listbox.getActiveId();
|
|
39
|
+
}
|
|
40
|
+
ensureActive(pref) {
|
|
41
|
+
this.listbox.ensureActive(pref);
|
|
42
|
+
}
|
|
43
|
+
handleKey(key, shiftKey) {
|
|
44
|
+
return this.listbox.handleKeyFromCombobox(key, shiftKey);
|
|
45
|
+
}
|
|
46
|
+
typeahead(key) {
|
|
47
|
+
return this.listbox.typeaheadFromCombobox(key);
|
|
48
|
+
}
|
|
49
|
+
/** Multi: Enter toggles option, does not close. */
|
|
50
|
+
commitActive() {
|
|
51
|
+
this.listbox.handleKeyFromCombobox('Enter');
|
|
52
|
+
}
|
|
53
|
+
onListboxValueChange(value) {
|
|
54
|
+
if (this.multiSelect.disabled())
|
|
55
|
+
return;
|
|
56
|
+
const next = normalizeToArray(value);
|
|
57
|
+
const cur = this.multiSelect.value();
|
|
58
|
+
if (arraysEqual(next, cur.length > 0 ? cur : null))
|
|
59
|
+
return;
|
|
60
|
+
this.multiSelect.value.set(next && next.length > 0 ? [...next] : []);
|
|
61
|
+
// Multi: overlay stays open
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
__decorate([
|
|
65
|
+
HostBinding('attr.data-slot')
|
|
66
|
+
], TngMultiSelectListbox.prototype, "dataSlot", void 0);
|
|
67
|
+
__decorate([
|
|
68
|
+
HostBinding('attr.id')
|
|
69
|
+
], TngMultiSelectListbox.prototype, "id", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
HostListener('valueChange', ['$event'])
|
|
72
|
+
], TngMultiSelectListbox.prototype, "onListboxValueChange", null);
|
|
73
|
+
TngMultiSelectListbox = __decorate([
|
|
74
|
+
Directive({
|
|
75
|
+
selector: '[tngMultiSelectListbox]',
|
|
76
|
+
standalone: true,
|
|
77
|
+
providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }],
|
|
78
|
+
hostDirectives: [
|
|
79
|
+
{
|
|
80
|
+
directive: TngListboxDirective,
|
|
81
|
+
inputs: ['orientation', 'direction', 'disabled', 'loop', 'value', 'multiple'],
|
|
82
|
+
outputs: ['valueChange'],
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
})
|
|
86
|
+
], TngMultiSelectListbox);
|
|
87
|
+
export { TngMultiSelectListbox };
|
|
88
|
+
let TngMultiSelectOption = class TngMultiSelectOption {
|
|
89
|
+
dataSlot = 'multi-select-option';
|
|
90
|
+
};
|
|
91
|
+
__decorate([
|
|
92
|
+
HostBinding('attr.data-slot')
|
|
93
|
+
], TngMultiSelectOption.prototype, "dataSlot", void 0);
|
|
94
|
+
TngMultiSelectOption = __decorate([
|
|
95
|
+
Directive({
|
|
96
|
+
selector: '[tngMultiSelectOption]',
|
|
97
|
+
standalone: true,
|
|
98
|
+
hostDirectives: [
|
|
99
|
+
{
|
|
100
|
+
directive: TngOptionDirective,
|
|
101
|
+
inputs: ['tngValue', 'disabled'],
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
})
|
|
105
|
+
], TngMultiSelectOption);
|
|
106
|
+
export { TngMultiSelectOption };
|
|
107
|
+
//# sourceMappingURL=tng-multi-select.listbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"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","sourcesContent":["import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { arraysEqual, normalizeToArray } from '../../internal/combobox';\nimport type { ListboxValue } from '../listbox/listbox.directive';\nimport { TngListboxDirective, TngOptionDirective } from '@tailng-ui/primitives';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport type { TngMultiSelect } from './tng-multi-select';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\nimport { TNG_MULTI_SELECT_LISTBOX } from './tng-multi-select.listbox.tokens';\n\nconst createListboxId = createTngIdFactory('tng-multi-select-listbox');\n\n@Directive({\n selector: '[tngMultiSelectListbox]',\n standalone: true,\n providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value', 'multiple'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngMultiSelectListbox<T = unknown> implements TngMultiSelectListboxApi<T> {\n private readonly multiSelect = inject<TngMultiSelect<T>>(TNG_MULTI_SELECT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly listbox = inject(TngListboxDirective<T>, { self: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select-listbox' = 'multi-select-listbox';\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.multiSelect.setListboxId(this.id);\n this.multiSelect.setListboxApi(this);\n\n effect(() => {\n const v = this.multiSelect.value();\n if (this.multiSelect.open()) return;\n\n const current = untracked(this.listbox.value);\n const arrV = v.length > 0 ? ([...v] as readonly T[]) : null;\n const arrCur = normalizeToArray(current);\n if (arraysEqual(arrV, arrCur)) return;\n this.listbox.value.set((v.length > 0 ? v : null) as ListboxValue<T>);\n });\n\n this.destroyRef.onDestroy(() => {\n this.multiSelect.setListboxId(null);\n this.multiSelect.setListboxApi(null);\n });\n }\n\n getHostId(): string | null {\n return this.id ?? null;\n }\n\n getActiveId(): string | null {\n return this.listbox.getActiveId();\n }\n\n ensureActive(pref?: 'first' | 'last'): void {\n this.listbox.ensureActive(pref);\n }\n\n handleKey(key: string, shiftKey?: boolean): boolean {\n return this.listbox.handleKeyFromCombobox(key, shiftKey);\n }\n\n typeahead(key: string): boolean {\n return this.listbox.typeaheadFromCombobox(key);\n }\n\n /** Multi: Enter toggles option, does not close. */\n commitActive(): void {\n this.listbox.handleKeyFromCombobox('Enter');\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.multiSelect.disabled()) return;\n\n const next = normalizeToArray(value);\n const cur = this.multiSelect.value();\n if (arraysEqual(next, cur.length > 0 ? cur : null)) return;\n\n this.multiSelect.value.set(next && next.length > 0 ? [...next] : []);\n // Multi: overlay stays open\n }\n}\n\n@Directive({\n selector: '[tngMultiSelectOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngMultiSelectOption<T> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select-option' = 'multi-select-option';\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.listbox.tokens.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,eAAO,MAAM,wBAAwB,sEAEpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.listbox.tokens.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B,CAC3B,CAAC","sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\n\nexport const TNG_MULTI_SELECT_LISTBOX = new InjectionToken<TngMultiSelectListboxApi>(\n 'TNG_MULTI_SELECT_LISTBOX'\n);\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.listbox.types.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,MAAM,wBAAwB,CAAC,CAAC,GAAG,OAAO,IAAI,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=tng-multi-select.listbox.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.listbox.types.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ComboboxListboxApi } from '../../internal/combobox';\n\nexport type TngMultiSelectListboxApi<T = unknown> = ComboboxListboxApi;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.overlay.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.overlay.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC","sourcesContent":["/**\n * Re-exports shared select overlay. Multi-select uses same overlay infra.\n */\nexport { TngSelectOverlay } from '../_shared/select/tng-select.overlay.shared';\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-exports shared select parts. Multi-select uses same trigger/content/overlay infra.
|
|
3
|
+
*/
|
|
4
|
+
export { TngSelectTrigger, TngSelectValue, TngSelectIcon, TngSelectContent, } from '../_shared/select/tng-select.parts.shared';
|
|
5
|
+
//# sourceMappingURL=tng-multi-select.parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.parts.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.parts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,MAAM,2CAA2C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-exports shared select parts. Multi-select uses same trigger/content/overlay infra.
|
|
3
|
+
*/
|
|
4
|
+
export { TngSelectTrigger, TngSelectValue, TngSelectIcon, TngSelectContent, } from '../_shared/select/tng-select.parts.shared';
|
|
5
|
+
//# sourceMappingURL=tng-multi-select.parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.parts.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.parts.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,MAAM,2CAA2C,CAAC","sourcesContent":["/**\n * Re-exports shared select parts. Multi-select uses same trigger/content/overlay infra.\n */\nexport {\n TngSelectTrigger,\n TngSelectValue,\n TngSelectIcon,\n TngSelectContent,\n} from '../_shared/select/tng-select.parts.shared';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.tokens.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,eAAO,MAAM,gBAAgB,yCAAyD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multi-select.tokens.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB,CAAC,CAAC","sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { TngMultiSelect } from './tng-multi-select';\n\nexport const TNG_MULTI_SELECT = new InjectionToken<TngMultiSelect>('TNG_MULTI_SELECT');\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multiselect.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":"AAEA,qBAIa,cAAc;IAEzB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;CACtD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Directive, HostBinding } from '@angular/core';
|
|
3
|
+
let TngMultiselect = class TngMultiselect {
|
|
4
|
+
dataSlot = 'multiselect';
|
|
5
|
+
};
|
|
6
|
+
__decorate([
|
|
7
|
+
HostBinding('attr.data-slot')
|
|
8
|
+
], TngMultiselect.prototype, "dataSlot", void 0);
|
|
9
|
+
TngMultiselect = __decorate([
|
|
10
|
+
Directive({
|
|
11
|
+
selector: '[tngMultiselect]',
|
|
12
|
+
exportAs: 'tngMultiselect',
|
|
13
|
+
})
|
|
14
|
+
], TngMultiselect);
|
|
15
|
+
export { TngMultiselect };
|
|
16
|
+
//# sourceMappingURL=tng-multiselect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-multiselect.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAMhD,IAAM,cAAc,GAApB,MAAM,cAAc;IAEN,QAAQ,GAAG,aAAsB,CAAC;CACtD,CAAA;AADoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;gDACuB;AAF1C,cAAc;IAJ1B,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;GACW,cAAc,CAG1B","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngMultiselect]',\n exportAs: 'tngMultiselect',\n})\nexport class TngMultiselect {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multiselect' as const;\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare function normalizeTngRadioStringValue(value: string | null | undefined): string | null;
|
|
2
|
+
export declare class TngRadio {
|
|
3
|
+
readonly ariaDescribedBy: import("@angular/core").InputSignal<string | null>;
|
|
4
|
+
readonly checked: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
|
|
5
|
+
readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
|
|
6
|
+
readonly name: import("@angular/core").InputSignal<string | null>;
|
|
7
|
+
readonly required: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
|
|
8
|
+
readonly value: import("@angular/core").InputSignal<string | null>;
|
|
9
|
+
protected readonly typeAttr: "radio";
|
|
10
|
+
protected get checkedProp(): boolean;
|
|
11
|
+
protected get ariaCheckedAttr(): 'false' | 'true';
|
|
12
|
+
protected get ariaDescribedByAttr(): string | null;
|
|
13
|
+
protected get dataDisabledAttr(): '' | null;
|
|
14
|
+
protected get disabledAttr(): '' | null;
|
|
15
|
+
protected get nameAttr(): string | null;
|
|
16
|
+
protected get requiredAttr(): '' | null;
|
|
17
|
+
protected get hostTypeAttr(): 'radio';
|
|
18
|
+
protected get valueAttr(): string | null;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=tng-radio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-radio.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/radio/tng-radio.ts"],"names":[],"mappings":"AAEA,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO5F;AAED,qBAIa,QAAQ;IACnB,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,qDAA8B;IACnD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IAG/C,SAAS,KAAK,WAAW,IAAI,OAAO,CAEnC;IAGD,SAAS,KAAK,eAAe,IAAI,OAAO,GAAG,MAAM,CAEhD;IAGD,SAAS,KAAK,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEjD;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,OAAO,CAEpC;IAGD,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,CAEvC;CACF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Directive, HostBinding, booleanAttribute, input } from '@angular/core';
|
|
3
|
+
export function normalizeTngRadioStringValue(value) {
|
|
4
|
+
if (value === undefined || value === null) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
const normalized = value.trim();
|
|
8
|
+
return normalized.length > 0 ? normalized : null;
|
|
9
|
+
}
|
|
10
|
+
let TngRadio = class TngRadio {
|
|
11
|
+
ariaDescribedBy = input(null);
|
|
12
|
+
checked = input(false, {
|
|
13
|
+
transform: booleanAttribute,
|
|
14
|
+
});
|
|
15
|
+
disabled = input(false, {
|
|
16
|
+
transform: booleanAttribute,
|
|
17
|
+
});
|
|
18
|
+
name = input(null);
|
|
19
|
+
required = input(false, {
|
|
20
|
+
transform: booleanAttribute,
|
|
21
|
+
});
|
|
22
|
+
value = input(null);
|
|
23
|
+
typeAttr = 'radio';
|
|
24
|
+
get checkedProp() {
|
|
25
|
+
return this.checked();
|
|
26
|
+
}
|
|
27
|
+
get ariaCheckedAttr() {
|
|
28
|
+
return this.checked() ? 'true' : 'false';
|
|
29
|
+
}
|
|
30
|
+
get ariaDescribedByAttr() {
|
|
31
|
+
return normalizeTngRadioStringValue(this.ariaDescribedBy());
|
|
32
|
+
}
|
|
33
|
+
get dataDisabledAttr() {
|
|
34
|
+
return this.disabled() ? '' : null;
|
|
35
|
+
}
|
|
36
|
+
get disabledAttr() {
|
|
37
|
+
return this.disabled() ? '' : null;
|
|
38
|
+
}
|
|
39
|
+
get nameAttr() {
|
|
40
|
+
return normalizeTngRadioStringValue(this.name());
|
|
41
|
+
}
|
|
42
|
+
get requiredAttr() {
|
|
43
|
+
return this.required() ? '' : null;
|
|
44
|
+
}
|
|
45
|
+
get hostTypeAttr() {
|
|
46
|
+
return this.typeAttr;
|
|
47
|
+
}
|
|
48
|
+
get valueAttr() {
|
|
49
|
+
return normalizeTngRadioStringValue(this.value());
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
__decorate([
|
|
53
|
+
HostBinding('checked')
|
|
54
|
+
], TngRadio.prototype, "checkedProp", null);
|
|
55
|
+
__decorate([
|
|
56
|
+
HostBinding('attr.aria-checked')
|
|
57
|
+
], TngRadio.prototype, "ariaCheckedAttr", null);
|
|
58
|
+
__decorate([
|
|
59
|
+
HostBinding('attr.aria-describedby')
|
|
60
|
+
], TngRadio.prototype, "ariaDescribedByAttr", null);
|
|
61
|
+
__decorate([
|
|
62
|
+
HostBinding('attr.data-disabled')
|
|
63
|
+
], TngRadio.prototype, "dataDisabledAttr", null);
|
|
64
|
+
__decorate([
|
|
65
|
+
HostBinding('attr.disabled')
|
|
66
|
+
], TngRadio.prototype, "disabledAttr", null);
|
|
67
|
+
__decorate([
|
|
68
|
+
HostBinding('attr.name')
|
|
69
|
+
], TngRadio.prototype, "nameAttr", null);
|
|
70
|
+
__decorate([
|
|
71
|
+
HostBinding('attr.required')
|
|
72
|
+
], TngRadio.prototype, "requiredAttr", null);
|
|
73
|
+
__decorate([
|
|
74
|
+
HostBinding('attr.type')
|
|
75
|
+
], TngRadio.prototype, "hostTypeAttr", null);
|
|
76
|
+
__decorate([
|
|
77
|
+
HostBinding('attr.value')
|
|
78
|
+
], TngRadio.prototype, "valueAttr", null);
|
|
79
|
+
TngRadio = __decorate([
|
|
80
|
+
Directive({
|
|
81
|
+
selector: 'input[tngRadio]',
|
|
82
|
+
exportAs: 'tngRadio',
|
|
83
|
+
})
|
|
84
|
+
], TngRadio);
|
|
85
|
+
export { TngRadio };
|
|
86
|
+
//# sourceMappingURL=tng-radio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-radio.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/radio/tng-radio.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEhF,MAAM,UAAU,4BAA4B,CAAC,KAAgC;IAC3E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAMM,IAAM,QAAQ,GAAd,MAAM,QAAQ;IACH,eAAe,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAC7C,OAAO,GAAG,KAAK,CAA4B,KAAK,EAAE;QAChE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAClC,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAChC,QAAQ,GAAG,OAAgB,CAAC;IAG/C,IAAc,WAAW;QACvB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAGD,IAAc,eAAe;QAC3B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3C,CAAC;IAGD,IAAc,mBAAmB;QAC/B,OAAO,4BAA4B,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9D,CAAC;IAGD,IAAc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAGD,IAAc,YAAY;QACxB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAGD,IAAc,QAAQ;QACpB,OAAO,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAGD,IAAc,YAAY;QACxB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAGD,IAAc,YAAY;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAGD,IAAc,SAAS;QACrB,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAA;AA3CC;IADC,WAAW,CAAC,SAAS,CAAC;2CAGtB;AAGD;IADC,WAAW,CAAC,mBAAmB,CAAC;+CAGhC;AAGD;IADC,WAAW,CAAC,uBAAuB,CAAC;mDAGpC;AAGD;IADC,WAAW,CAAC,oBAAoB,CAAC;gDAGjC;AAGD;IADC,WAAW,CAAC,eAAe,CAAC;4CAG5B;AAGD;IADC,WAAW,CAAC,WAAW,CAAC;wCAGxB;AAGD;IADC,WAAW,CAAC,eAAe,CAAC;4CAG5B;AAGD;IADC,WAAW,CAAC,WAAW,CAAC;4CAGxB;AAGD;IADC,WAAW,CAAC,YAAY,CAAC;yCAGzB;AA1DU,QAAQ;IAJpB,SAAS,CAAC;QACT,QAAQ,EAAE,iBAAiB;QAC3B,QAAQ,EAAE,UAAU;KACrB,CAAC;GACW,QAAQ,CA2DpB","sourcesContent":["import { Directive, HostBinding, booleanAttribute, input } from '@angular/core';\n\nexport function normalizeTngRadioStringValue(value: string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\n@Directive({\n selector: 'input[tngRadio]',\n exportAs: 'tngRadio',\n})\nexport class TngRadio {\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly checked = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly name = input<string | null>(null);\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly value = input<string | null>(null);\n protected readonly typeAttr = 'radio' as const;\n\n @HostBinding('checked')\n protected get checkedProp(): boolean {\n return this.checked();\n }\n\n @HostBinding('attr.aria-checked')\n protected get ariaCheckedAttr(): 'false' | 'true' {\n return this.checked() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedByAttr(): string | null {\n return normalizeTngRadioStringValue(this.ariaDescribedBy());\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.disabled')\n protected get disabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.name')\n protected get nameAttr(): string | null {\n return normalizeTngRadioStringValue(this.name());\n }\n\n @HostBinding('attr.required')\n protected get requiredAttr(): '' | null {\n return this.required() ? '' : null;\n }\n\n @HostBinding('attr.type')\n protected get hostTypeAttr(): 'radio' {\n return this.typeAttr;\n }\n\n @HostBinding('attr.value')\n protected get valueAttr(): string | null {\n return normalizeTngRadioStringValue(this.value());\n }\n}\n"]}
|