@spartan-ng/cli 0.0.1-alpha.707 → 0.0.1-alpha.708
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/package.json +8 -8
- package/src/generators/base/generator.js +39 -43
- package/src/generators/base/generator.js.map +1 -1
- package/src/generators/base/lib/build-dependency-array.js +10 -14
- package/src/generators/base/lib/build-dependency-array.js.map +1 -1
- package/src/generators/base/lib/deleteFiles.js +3 -6
- package/src/generators/base/lib/deleteFiles.js.map +1 -1
- package/src/generators/base/lib/generate-as.js +1 -4
- package/src/generators/base/lib/generate-as.js.map +1 -1
- package/src/generators/base/lib/get-target-library-directory.js +5 -9
- package/src/generators/base/lib/get-target-library-directory.js.map +1 -1
- package/src/generators/base/lib/initialize-angular-library.js +24 -30
- package/src/generators/base/lib/initialize-angular-library.js.map +1 -1
- package/src/generators/base/lib/single-lib-name.js +1 -4
- package/src/generators/base/lib/single-lib-name.js.map +1 -1
- package/src/generators/base/lib/styles/create-style-map.js +8 -13
- package/src/generators/base/lib/styles/create-style-map.js.map +1 -1
- package/src/generators/base/lib/styles/index.js +3 -6
- package/src/generators/base/lib/styles/index.js.map +1 -1
- package/src/generators/base/lib/styles/transform-style-map.js +23 -27
- package/src/generators/base/lib/styles/transform-style-map.js.map +1 -1
- package/src/generators/base/lib/styles/transform.js +5 -8
- package/src/generators/base/lib/styles/transform.js.map +1 -1
- package/src/generators/base/lib/supported-libs.js +0 -2
- package/src/generators/base/versions.js +6 -9
- package/src/generators/base/versions.js.map +1 -1
- package/src/generators/healthcheck/compat.js +3 -5
- package/src/generators/healthcheck/compat.js.map +1 -1
- package/src/generators/healthcheck/generator.js +72 -75
- package/src/generators/healthcheck/generator.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brain-imports.js +9 -13
- package/src/generators/healthcheck/healthchecks/brain-imports.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-accordion-trigger.js +20 -24
- package/src/generators/healthcheck/healthchecks/brn-accordion-trigger.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-checkbox-changed-event-rename.js +7 -11
- package/src/generators/healthcheck/healthchecks/brn-checkbox-changed-event-rename.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-collapsible.js +7 -10
- package/src/generators/healthcheck/healthchecks/brn-collapsible.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-radio.js +7 -10
- package/src/generators/healthcheck/healthchecks/brn-radio.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-select.js +7 -11
- package/src/generators/healthcheck/healthchecks/brn-select.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-separator.js +7 -10
- package/src/generators/healthcheck/healthchecks/brn-separator.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-switch-changed-event-rename.js +7 -11
- package/src/generators/healthcheck/healthchecks/brn-switch-changed-event-rename.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-toggle-group-2.js +7 -11
- package/src/generators/healthcheck/healthchecks/brn-toggle-group-2.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-toggle-group.js +7 -10
- package/src/generators/healthcheck/healthchecks/brn-toggle-group.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/brn-toggle.js +7 -11
- package/src/generators/healthcheck/healthchecks/brn-toggle.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/core-imports.js +7 -10
- package/src/generators/healthcheck/healthchecks/core-imports.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/helm-imports.js +9 -13
- package/src/generators/healthcheck/healthchecks/helm-imports.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-date-picker.js +7 -11
- package/src/generators/healthcheck/healthchecks/hlm-date-picker.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-dialog-portal.js +7 -11
- package/src/generators/healthcheck/healthchecks/hlm-dialog-portal.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-dialog.js +8 -12
- package/src/generators/healthcheck/healthchecks/hlm-dialog.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-form-field.js +7 -11
- package/src/generators/healthcheck/healthchecks/hlm-form-field.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-icon.js +7 -10
- package/src/generators/healthcheck/healthchecks/hlm-icon.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-input-id.js +7 -11
- package/src/generators/healthcheck/healthchecks/hlm-input-id.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-menu.js +8 -12
- package/src/generators/healthcheck/healthchecks/hlm-menu.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-progress.js +7 -11
- package/src/generators/healthcheck/healthchecks/hlm-progress.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-scroll-area.js +7 -10
- package/src/generators/healthcheck/healthchecks/hlm-scroll-area.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm-select.js +10 -14
- package/src/generators/healthcheck/healthchecks/hlm-select.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/hlm.js +7 -11
- package/src/generators/healthcheck/healthchecks/hlm.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/module-imports.js +9 -13
- package/src/generators/healthcheck/healthchecks/module-imports.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/naming-conventions.js +9 -13
- package/src/generators/healthcheck/healthchecks/naming-conventions.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/sonner.js +7 -11
- package/src/generators/healthcheck/healthchecks/sonner.js.map +1 -1
- package/src/generators/healthcheck/healthchecks/version.js +9 -13
- package/src/generators/healthcheck/healthchecks/version.js.map +1 -1
- package/src/generators/healthcheck/healthchecks.js +5 -9
- package/src/generators/healthcheck/healthchecks.js.map +1 -1
- package/src/generators/healthcheck/utils/prompt.js +1 -4
- package/src/generators/healthcheck/utils/prompt.js.map +1 -1
- package/src/generators/healthcheck/utils/reporter.js +19 -23
- package/src/generators/healthcheck/utils/reporter.js.map +1 -1
- package/src/generators/healthcheck/utils/runner.js +6 -9
- package/src/generators/healthcheck/utils/runner.js.map +1 -1
- package/src/generators/info/compat.js +3 -5
- package/src/generators/info/compat.js.map +1 -1
- package/src/generators/info/generator.js +8 -44
- package/src/generators/info/generator.js.map +1 -1
- package/src/generators/info/lib/collect-info.js +7 -10
- package/src/generators/info/lib/collect-info.js.map +1 -1
- package/src/generators/init/compat.js +3 -5
- package/src/generators/init/compat.js.map +1 -1
- package/src/generators/init/generator.js +14 -18
- package/src/generators/init/generator.js.map +1 -1
- package/src/generators/migrate-brain-accordion-trigger/compat.js +3 -6
- package/src/generators/migrate-brain-accordion-trigger/compat.js.map +1 -1
- package/src/generators/migrate-brain-accordion-trigger/generator.js +18 -21
- package/src/generators/migrate-brain-accordion-trigger/generator.js.map +1 -1
- package/src/generators/migrate-brain-accordion-trigger/utils/html-utils.js +10 -20
- package/src/generators/migrate-brain-accordion-trigger/utils/html-utils.js.map +1 -1
- package/src/generators/migrate-brain-accordion-trigger/utils/shared-utils.js +17 -24
- package/src/generators/migrate-brain-accordion-trigger/utils/shared-utils.js.map +1 -1
- package/src/generators/migrate-brain-imports/compat.js +3 -5
- package/src/generators/migrate-brain-imports/compat.js.map +1 -1
- package/src/generators/migrate-brain-imports/generator.js +21 -26
- package/src/generators/migrate-brain-imports/generator.js.map +1 -1
- package/src/generators/migrate-brain-imports/import-map.js +1 -3
- package/src/generators/migrate-brain-imports/import-map.js.map +1 -1
- package/src/generators/migrate-brain-imports/utils/binary-extensions.js +3 -6
- package/src/generators/migrate-brain-imports/utils/binary-extensions.js.map +1 -1
- package/src/generators/migrate-brn-checkbox-changed-event/compat.js +3 -6
- package/src/generators/migrate-brn-checkbox-changed-event/compat.js.map +1 -1
- package/src/generators/migrate-brn-checkbox-changed-event/generator.js +6 -9
- package/src/generators/migrate-brn-checkbox-changed-event/generator.js.map +1 -1
- package/src/generators/migrate-brn-select/compat.js +3 -5
- package/src/generators/migrate-brn-select/compat.js.map +1 -1
- package/src/generators/migrate-brn-select/generator.js +7 -10
- package/src/generators/migrate-brn-select/generator.js.map +1 -1
- package/src/generators/migrate-brn-switch-changed-event/compat.js +3 -6
- package/src/generators/migrate-brn-switch-changed-event/compat.js.map +1 -1
- package/src/generators/migrate-brn-switch-changed-event/generator.js +6 -9
- package/src/generators/migrate-brn-switch-changed-event/generator.js.map +1 -1
- package/src/generators/migrate-brn-toggle-group/compat.js +3 -6
- package/src/generators/migrate-brn-toggle-group/compat.js.map +1 -1
- package/src/generators/migrate-brn-toggle-group/generator.js +7 -10
- package/src/generators/migrate-brn-toggle-group/generator.js.map +1 -1
- package/src/generators/migrate-collapsible/compat.js +3 -6
- package/src/generators/migrate-collapsible/compat.js.map +1 -1
- package/src/generators/migrate-collapsible/generator.js +7 -10
- package/src/generators/migrate-collapsible/generator.js.map +1 -1
- package/src/generators/migrate-core/compat.js +3 -5
- package/src/generators/migrate-core/compat.js.map +1 -1
- package/src/generators/migrate-core/generator.js +7 -10
- package/src/generators/migrate-core/generator.js.map +1 -1
- package/src/generators/migrate-date-picker/compat.js +3 -6
- package/src/generators/migrate-date-picker/compat.js.map +1 -1
- package/src/generators/migrate-date-picker/generator.js +6 -9
- package/src/generators/migrate-date-picker/generator.js.map +1 -1
- package/src/generators/migrate-dialog/compat.js +3 -5
- package/src/generators/migrate-dialog/compat.js.map +1 -1
- package/src/generators/migrate-dialog/generator.js +8 -12
- package/src/generators/migrate-dialog/generator.js.map +1 -1
- package/src/generators/migrate-dialog-portal/compat.js +3 -5
- package/src/generators/migrate-dialog-portal/compat.js.map +1 -1
- package/src/generators/migrate-dialog-portal/generator.js +9 -12
- package/src/generators/migrate-dialog-portal/generator.js.map +1 -1
- package/src/generators/migrate-form-field/compat.js +3 -5
- package/src/generators/migrate-form-field/compat.js.map +1 -1
- package/src/generators/migrate-form-field/generator.js +10 -13
- package/src/generators/migrate-form-field/generator.js.map +1 -1
- package/src/generators/migrate-helm-imports/compat.js +3 -5
- package/src/generators/migrate-helm-imports/compat.js.map +1 -1
- package/src/generators/migrate-helm-imports/generator.js +13 -17
- package/src/generators/migrate-helm-imports/generator.js.map +1 -1
- package/src/generators/migrate-helm-imports/import-map.js +1 -3
- package/src/generators/migrate-helm-imports/import-map.js.map +1 -1
- package/src/generators/migrate-helm-libraries/compat.js +3 -6
- package/src/generators/migrate-helm-libraries/compat.js.map +1 -1
- package/src/generators/migrate-helm-libraries/generator.js +31 -67
- package/src/generators/migrate-helm-libraries/generator.js.map +1 -1
- package/src/generators/migrate-hlm/compat.js +3 -6
- package/src/generators/migrate-hlm/compat.js.map +1 -1
- package/src/generators/migrate-hlm/generator.js +11 -47
- package/src/generators/migrate-hlm/generator.js.map +1 -1
- package/src/generators/migrate-icon/compat.js +3 -5
- package/src/generators/migrate-icon/compat.js.map +1 -1
- package/src/generators/migrate-icon/generator.js +34 -38
- package/src/generators/migrate-icon/generator.js.map +1 -1
- package/src/generators/migrate-input-id/compat.js +3 -6
- package/src/generators/migrate-input-id/compat.js.map +1 -1
- package/src/generators/migrate-input-id/generator.js +6 -9
- package/src/generators/migrate-input-id/generator.js.map +1 -1
- package/src/generators/migrate-menu/compat.js +3 -5
- package/src/generators/migrate-menu/compat.js.map +1 -1
- package/src/generators/migrate-menu/generator.js +14 -18
- package/src/generators/migrate-menu/generator.js.map +1 -1
- package/src/generators/migrate-module-imports/compat.js +3 -5
- package/src/generators/migrate-module-imports/compat.js.map +1 -1
- package/src/generators/migrate-module-imports/generator.js +15 -19
- package/src/generators/migrate-module-imports/generator.js.map +1 -1
- package/src/generators/migrate-module-imports/import-map.js +1 -3
- package/src/generators/migrate-module-imports/import-map.js.map +1 -1
- package/src/generators/migrate-naming-convention/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/generators/migrate-naming-convention/compat.js +3 -6
- package/src/generators/migrate-naming-convention/compat.js.map +1 -1
- package/src/generators/migrate-naming-convention/generator.js +12 -15
- package/src/generators/migrate-naming-convention/generator.js.map +1 -1
- package/src/generators/migrate-progress/compat.js +3 -5
- package/src/generators/migrate-progress/compat.js.map +1 -1
- package/src/generators/migrate-progress/generator.js +5 -8
- package/src/generators/migrate-progress/generator.js.map +1 -1
- package/src/generators/migrate-radio/compat.js +3 -6
- package/src/generators/migrate-radio/compat.js.map +1 -1
- package/src/generators/migrate-radio/generator.js +7 -10
- package/src/generators/migrate-radio/generator.js.map +1 -1
- package/src/generators/migrate-scroll-area/compat.js +3 -5
- package/src/generators/migrate-scroll-area/compat.js.map +1 -1
- package/src/generators/migrate-scroll-area/generator.js +20 -24
- package/src/generators/migrate-scroll-area/generator.js.map +1 -1
- package/src/generators/migrate-select/compat.js +3 -6
- package/src/generators/migrate-select/compat.js.map +1 -1
- package/src/generators/migrate-select/generator.js +9 -12
- package/src/generators/migrate-select/generator.js.map +1 -1
- package/src/generators/migrate-separator/compat.js +3 -6
- package/src/generators/migrate-separator/compat.js.map +1 -1
- package/src/generators/migrate-separator/generator.js +7 -10
- package/src/generators/migrate-separator/generator.js.map +1 -1
- package/src/generators/migrate-sonner/compat.js +3 -5
- package/src/generators/migrate-sonner/compat.js.map +1 -1
- package/src/generators/migrate-sonner/generator.js +6 -9
- package/src/generators/migrate-sonner/generator.js.map +1 -1
- package/src/generators/migrate-toggle/compat.js +3 -6
- package/src/generators/migrate-toggle/compat.js.map +1 -1
- package/src/generators/migrate-toggle/generator.js +7 -10
- package/src/generators/migrate-toggle/generator.js.map +1 -1
- package/src/generators/migrate-toggle-group/compat.js +3 -6
- package/src/generators/migrate-toggle-group/compat.js.map +1 -1
- package/src/generators/migrate-toggle-group/generator.js +8 -11
- package/src/generators/migrate-toggle-group/generator.js.map +1 -1
- package/src/generators/theme/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/generators/theme/compat.js +3 -6
- package/src/generators/theme/compat.js.map +1 -1
- package/src/generators/theme/generator.js +10 -13
- package/src/generators/theme/generator.js.map +1 -1
- package/src/generators/theme/libs/add-theme-to-application-styles.js +14 -17
- package/src/generators/theme/libs/add-theme-to-application-styles.js.map +1 -1
- package/src/generators/theme/libs/colors.js +3 -6
- package/src/generators/theme/libs/colors.js.map +1 -1
- package/src/generators/ui/add-dependent-primitive.js +5 -9
- package/src/generators/ui/add-dependent-primitive.js.map +1 -1
- package/src/generators/ui/compat.js +3 -6
- package/src/generators/ui/compat.js.map +1 -1
- package/src/generators/ui/generator.js +17 -54
- package/src/generators/ui/generator.js.map +1 -1
- package/src/generators/ui/libs/accordion/generator.js +3 -7
- package/src/generators/ui/libs/accordion/generator.js.map +1 -1
- package/src/generators/ui/libs/alert/generator.js +3 -7
- package/src/generators/ui/libs/alert/generator.js.map +1 -1
- package/src/generators/ui/libs/alert-dialog/generator.js +3 -7
- package/src/generators/ui/libs/alert-dialog/generator.js.map +1 -1
- package/src/generators/ui/libs/aspect-ratio/generator.js +3 -7
- package/src/generators/ui/libs/aspect-ratio/generator.js.map +1 -1
- package/src/generators/ui/libs/autocomplete/generator.js +3 -7
- package/src/generators/ui/libs/autocomplete/generator.js.map +1 -1
- package/src/generators/ui/libs/avatar/generator.js +3 -7
- package/src/generators/ui/libs/avatar/generator.js.map +1 -1
- package/src/generators/ui/libs/badge/generator.js +3 -7
- package/src/generators/ui/libs/badge/generator.js.map +1 -1
- package/src/generators/ui/libs/breadcrumb/generator.js +3 -7
- package/src/generators/ui/libs/breadcrumb/generator.js.map +1 -1
- package/src/generators/ui/libs/button/generator.js +3 -7
- package/src/generators/ui/libs/button/generator.js.map +1 -1
- package/src/generators/ui/libs/button-group/generator.js +3 -7
- package/src/generators/ui/libs/button-group/generator.js.map +1 -1
- package/src/generators/ui/libs/calendar/generator.js +3 -7
- package/src/generators/ui/libs/calendar/generator.js.map +1 -1
- package/src/generators/ui/libs/card/files/lib/hlm-card-action.ts.template +1 -3
- package/src/generators/ui/libs/card/files/lib/hlm-card-content.ts.template +1 -3
- package/src/generators/ui/libs/card/files/lib/hlm-card-description.ts.template +1 -3
- package/src/generators/ui/libs/card/files/lib/hlm-card-footer.ts.template +1 -3
- package/src/generators/ui/libs/card/files/lib/hlm-card-header.ts.template +2 -4
- package/src/generators/ui/libs/card/files/lib/hlm-card-title.ts.template +1 -3
- package/src/generators/ui/libs/card/generator.js +3 -7
- package/src/generators/ui/libs/card/generator.js.map +1 -1
- package/src/generators/ui/libs/carousel/generator.js +3 -7
- package/src/generators/ui/libs/carousel/generator.js.map +1 -1
- package/src/generators/ui/libs/checkbox/generator.js +3 -7
- package/src/generators/ui/libs/checkbox/generator.js.map +1 -1
- package/src/generators/ui/libs/collapsible/generator.js +3 -7
- package/src/generators/ui/libs/collapsible/generator.js.map +1 -1
- package/src/generators/ui/libs/combobox/generator.js +3 -7
- package/src/generators/ui/libs/combobox/generator.js.map +1 -1
- package/src/generators/ui/libs/command/generator.js +3 -7
- package/src/generators/ui/libs/command/generator.js.map +1 -1
- package/src/generators/ui/libs/context-menu/generator.js +3 -7
- package/src/generators/ui/libs/context-menu/generator.js.map +1 -1
- package/src/generators/ui/libs/date-picker/files/index.ts.template +17 -4
- package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker-anchor.ts.template +28 -0
- package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker-input.ts.template +175 -0
- package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker-multi.ts.template +34 -72
- package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker-trigger.token.ts.template +11 -0
- package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker-trigger.ts.template +87 -0
- package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker.token.ts.template +45 -1
- package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker.ts.template +61 -80
- package/src/generators/ui/libs/date-picker/files/lib/hlm-date-range-picker.ts.template +38 -74
- package/src/generators/ui/libs/date-picker/generator.js +3 -7
- package/src/generators/ui/libs/date-picker/generator.js.map +1 -1
- package/src/generators/ui/libs/dialog/generator.js +3 -7
- package/src/generators/ui/libs/dialog/generator.js.map +1 -1
- package/src/generators/ui/libs/dropdown-menu/generator.js +3 -7
- package/src/generators/ui/libs/dropdown-menu/generator.js.map +1 -1
- package/src/generators/ui/libs/empty/generator.js +3 -7
- package/src/generators/ui/libs/empty/generator.js.map +1 -1
- package/src/generators/ui/libs/field/files/lib/hlm-field-error.ts.template +1 -1
- package/src/generators/ui/libs/field/generator.js +3 -7
- package/src/generators/ui/libs/field/generator.js.map +1 -1
- package/src/generators/ui/libs/hover-card/generator.js +3 -7
- package/src/generators/ui/libs/hover-card/generator.js.map +1 -1
- package/src/generators/ui/libs/icon/generator.js +3 -7
- package/src/generators/ui/libs/icon/generator.js.map +1 -1
- package/src/generators/ui/libs/input/generator.js +3 -7
- package/src/generators/ui/libs/input/generator.js.map +1 -1
- package/src/generators/ui/libs/input-group/generator.js +3 -7
- package/src/generators/ui/libs/input-group/generator.js.map +1 -1
- package/src/generators/ui/libs/input-otp/generator.js +3 -7
- package/src/generators/ui/libs/input-otp/generator.js.map +1 -1
- package/src/generators/ui/libs/item/generator.js +3 -7
- package/src/generators/ui/libs/item/generator.js.map +1 -1
- package/src/generators/ui/libs/kbd/generator.js +3 -7
- package/src/generators/ui/libs/kbd/generator.js.map +1 -1
- package/src/generators/ui/libs/label/generator.js +3 -7
- package/src/generators/ui/libs/label/generator.js.map +1 -1
- package/src/generators/ui/libs/menubar/generator.js +3 -7
- package/src/generators/ui/libs/menubar/generator.js.map +1 -1
- package/src/generators/ui/libs/native-select/generator.js +3 -7
- package/src/generators/ui/libs/native-select/generator.js.map +1 -1
- package/src/generators/ui/libs/navigation-menu/generator.js +3 -7
- package/src/generators/ui/libs/navigation-menu/generator.js.map +1 -1
- package/src/generators/ui/libs/pagination/generator.js +3 -7
- package/src/generators/ui/libs/pagination/generator.js.map +1 -1
- package/src/generators/ui/libs/popover/generator.js +3 -7
- package/src/generators/ui/libs/popover/generator.js.map +1 -1
- package/src/generators/ui/libs/progress/generator.js +3 -7
- package/src/generators/ui/libs/progress/generator.js.map +1 -1
- package/src/generators/ui/libs/radio-group/generator.js +3 -7
- package/src/generators/ui/libs/radio-group/generator.js.map +1 -1
- package/src/generators/ui/libs/resizable/generator.js +3 -7
- package/src/generators/ui/libs/resizable/generator.js.map +1 -1
- package/src/generators/ui/libs/scroll-area/generator.js +3 -7
- package/src/generators/ui/libs/scroll-area/generator.js.map +1 -1
- package/src/generators/ui/libs/select/generator.js +3 -7
- package/src/generators/ui/libs/select/generator.js.map +1 -1
- package/src/generators/ui/libs/separator/generator.js +3 -7
- package/src/generators/ui/libs/separator/generator.js.map +1 -1
- package/src/generators/ui/libs/sheet/generator.js +3 -7
- package/src/generators/ui/libs/sheet/generator.js.map +1 -1
- package/src/generators/ui/libs/sidebar/generator.js +3 -7
- package/src/generators/ui/libs/sidebar/generator.js.map +1 -1
- package/src/generators/ui/libs/skeleton/generator.js +3 -7
- package/src/generators/ui/libs/skeleton/generator.js.map +1 -1
- package/src/generators/ui/libs/slider/generator.js +3 -7
- package/src/generators/ui/libs/slider/generator.js.map +1 -1
- package/src/generators/ui/libs/sonner/generator.js +3 -7
- package/src/generators/ui/libs/sonner/generator.js.map +1 -1
- package/src/generators/ui/libs/spinner/generator.js +3 -7
- package/src/generators/ui/libs/spinner/generator.js.map +1 -1
- package/src/generators/ui/libs/switch/generator.js +3 -7
- package/src/generators/ui/libs/switch/generator.js.map +1 -1
- package/src/generators/ui/libs/table/generator.js +3 -7
- package/src/generators/ui/libs/table/generator.js.map +1 -1
- package/src/generators/ui/libs/tabs/generator.js +3 -7
- package/src/generators/ui/libs/tabs/generator.js.map +1 -1
- package/src/generators/ui/libs/textarea/generator.js +3 -7
- package/src/generators/ui/libs/textarea/generator.js.map +1 -1
- package/src/generators/ui/libs/toggle/generator.js +3 -7
- package/src/generators/ui/libs/toggle/generator.js.map +1 -1
- package/src/generators/ui/libs/toggle-group/generator.js +3 -7
- package/src/generators/ui/libs/toggle-group/generator.js.map +1 -1
- package/src/generators/ui/libs/tooltip/generator.js +3 -7
- package/src/generators/ui/libs/tooltip/generator.js.map +1 -1
- package/src/generators/ui/libs/typography/generator.js +3 -7
- package/src/generators/ui/libs/typography/generator.js.map +1 -1
- package/src/generators/ui/libs/utils/generator.js +3 -7
- package/src/generators/ui/libs/utils/generator.js.map +1 -1
- package/src/generators/ui/primitive-deps.js +4 -8
- package/src/generators/ui/primitive-deps.js.map +1 -1
- package/src/generators/ui/primitives.js +0 -2
- package/src/generators/ui/style-luma.css +9 -4
- package/src/generators/ui/style-lyra.css +10 -5
- package/src/generators/ui/style-maia.css +10 -5
- package/src/generators/ui/style-mira.css +10 -5
- package/src/generators/ui/style-nova.css +10 -5
- package/src/generators/ui/style-vega.css +10 -5
- package/src/generators/ui/supported-ui-libraries.json +140 -140
- package/src/index.js +5 -11
- package/src/index.js.map +1 -1
- package/src/registry/index.js +1 -4
- package/src/registry/index.js.map +1 -1
- package/src/registry/schema.js +117 -120
- package/src/registry/schema.js.map +1 -1
- package/src/utils/config.js +19 -25
- package/src/utils/config.js.map +1 -1
- package/src/utils/get-project-names.js +3 -7
- package/src/utils/get-project-names.js.map +1 -1
- package/src/utils/get-tailwind-version.js +4 -9
- package/src/utils/get-tailwind-version.js.map +1 -1
- package/src/utils/hlm-class.js +9 -13
- package/src/utils/hlm-class.js.map +1 -1
- package/src/utils/import-alias.js +1 -4
- package/src/utils/import-alias.js.map +1 -1
- package/src/utils/tsconfig.js +5 -8
- package/src/utils/tsconfig.js.map +1 -1
- package/src/utils/version-utils.js +6 -9
- package/src/utils/version-utils.js.map +1 -1
- package/src/utils/visit-files.js +3 -6
- package/src/utils/visit-files.js.map +1 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { BooleanInput } from '@angular/cdk/coercion';
|
|
2
|
+
import { booleanAttribute, ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';
|
|
3
|
+
import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
4
|
+
import { lucideChevronDown } from '@ng-icons/lucide';
|
|
5
|
+
import { BrnFieldControl, BrnFieldControlDescribedBy } from '@spartan-ng/brain/field';
|
|
6
|
+
import { ButtonVariants, HlmButtonImports } from '<%- importAlias %>/button';
|
|
7
|
+
import { HlmPopoverTrigger } from '<%- importAlias %>/popover';
|
|
8
|
+
import { hlm } from '<%- importAlias %>/utils';
|
|
9
|
+
import { ClassValue } from 'clsx';
|
|
10
|
+
import { HlmDatePickerTriggerBase, provideHlmDatePickerTrigger } from './hlm-date-picker-trigger.token';
|
|
11
|
+
import { injectHlmDatePicker } from './hlm-date-picker.token';
|
|
12
|
+
|
|
13
|
+
@Component({
|
|
14
|
+
selector: 'hlm-date-picker-trigger',
|
|
15
|
+
imports: [HlmButtonImports, HlmPopoverTrigger, NgIcon, BrnFieldControlDescribedBy],
|
|
16
|
+
providers: [provideIcons({ lucideChevronDown }), provideHlmDatePickerTrigger(HlmDatePickerTrigger)],
|
|
17
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18
|
+
host: { 'data-slot': 'date-picker-trigger' },
|
|
19
|
+
template: `
|
|
20
|
+
<button
|
|
21
|
+
[id]="buttonId()"
|
|
22
|
+
type="button"
|
|
23
|
+
[class]="_computedClass()"
|
|
24
|
+
[disabled]="_disabled()"
|
|
25
|
+
[attr.aria-invalid]="_ariaInvalid()"
|
|
26
|
+
[attr.data-invalid]="_ariaInvalid()"
|
|
27
|
+
[attr.data-touched]="_touched?.() ? 'true' : null"
|
|
28
|
+
[attr.data-dirty]="_dirty?.() ? 'true' : null"
|
|
29
|
+
[attr.data-matches-spartan-invalid]="_spartanInvalid() ? 'true' : null"
|
|
30
|
+
hlmBtn
|
|
31
|
+
[variant]="variant()"
|
|
32
|
+
hlmPopoverTrigger
|
|
33
|
+
[hlmPopoverTriggerFor]="_popover()"
|
|
34
|
+
brnFieldControlDescribedBy
|
|
35
|
+
[attr.data-placeholder]="_isPlaceholder() ? '' : null"
|
|
36
|
+
>
|
|
37
|
+
<span class="truncate">
|
|
38
|
+
@if (_formattedDate(); as formattedDate) {
|
|
39
|
+
{{ formattedDate }}
|
|
40
|
+
} @else {
|
|
41
|
+
<ng-content />
|
|
42
|
+
}
|
|
43
|
+
</span>
|
|
44
|
+
|
|
45
|
+
@if (showTrigger()) {
|
|
46
|
+
<ng-icon name="lucideChevronDown" />
|
|
47
|
+
}
|
|
48
|
+
</button>
|
|
49
|
+
`,
|
|
50
|
+
})
|
|
51
|
+
export class HlmDatePickerTrigger implements HlmDatePickerTriggerBase {
|
|
52
|
+
private static _nextId = 0;
|
|
53
|
+
|
|
54
|
+
private readonly _fieldControl = inject(BrnFieldControl, { optional: true });
|
|
55
|
+
private readonly _datePicker = injectHlmDatePicker();
|
|
56
|
+
|
|
57
|
+
private readonly _invalid = this._fieldControl?.invalid;
|
|
58
|
+
protected readonly _spartanInvalid = computed(() => this.forceInvalid() || this._fieldControl?.spartanInvalid());
|
|
59
|
+
protected readonly _dirty = this._fieldControl?.dirty;
|
|
60
|
+
protected readonly _touched = this._fieldControl?.touched;
|
|
61
|
+
|
|
62
|
+
protected readonly _ariaInvalid = computed(() => (this._invalid?.() ? 'true' : null));
|
|
63
|
+
|
|
64
|
+
public readonly userClass = input<ClassValue>('', { alias: 'class' });
|
|
65
|
+
protected readonly _computedClass = computed(() =>
|
|
66
|
+
hlm('spartan-date-picker-trigger w-64 justify-between', this.userClass()),
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
protected readonly _isPlaceholder = computed(() => !this._datePicker.hasDate());
|
|
70
|
+
|
|
71
|
+
/** The id of the button that opens the date picker. */
|
|
72
|
+
public readonly buttonId = input<string>(`hlm-date-picker-${++HlmDatePickerTrigger._nextId}`);
|
|
73
|
+
|
|
74
|
+
/** @internal The id of the button that opens the date picker, used for labeling. */
|
|
75
|
+
public readonly triggerId = this.buttonId;
|
|
76
|
+
|
|
77
|
+
/** Forces the invalid state visually, regardless of form control state. */
|
|
78
|
+
public readonly forceInvalid = input<boolean, BooleanInput>(false, { transform: booleanAttribute });
|
|
79
|
+
|
|
80
|
+
public readonly variant = input<ButtonVariants['variant']>('outline');
|
|
81
|
+
|
|
82
|
+
public readonly showTrigger = input<boolean, BooleanInput>(true, { transform: booleanAttribute });
|
|
83
|
+
|
|
84
|
+
protected readonly _popover = this._datePicker.popover;
|
|
85
|
+
protected readonly _disabled = this._datePicker.disabledState;
|
|
86
|
+
protected readonly _formattedDate = this._datePicker.formattedDate;
|
|
87
|
+
}
|
|
@@ -1,4 +1,36 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type ExistingProvider,
|
|
3
|
+
inject,
|
|
4
|
+
InjectionToken,
|
|
5
|
+
type Signal,
|
|
6
|
+
type Type,
|
|
7
|
+
type ValueProvider,
|
|
8
|
+
} from '@angular/core';
|
|
9
|
+
import type { BrnPopover } from '@spartan-ng/brain/popover';
|
|
10
|
+
|
|
11
|
+
export interface HlmDatePickerBase<T> {
|
|
12
|
+
popover: Signal<BrnPopover>;
|
|
13
|
+
disabledState: Signal<boolean>;
|
|
14
|
+
formattedDate: Signal<string | undefined>;
|
|
15
|
+
hasDate: Signal<boolean>;
|
|
16
|
+
/** Commit a date to the picker (e.g. from a parsed input). Pass `undefined` to clear. Optional. */
|
|
17
|
+
updateDate?(value: T | undefined): void;
|
|
18
|
+
// used for ControlValueAccessor
|
|
19
|
+
touched?(): void;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const HlmDatePickerToken = new InjectionToken<HlmDatePickerBase<unknown>>('HlmDatePickerToken');
|
|
23
|
+
|
|
24
|
+
export function provideHlmDatePicker(instance: Type<HlmDatePickerBase<unknown>>): ExistingProvider {
|
|
25
|
+
return { provide: HlmDatePickerToken, useExisting: instance };
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Inject the date picker component.
|
|
30
|
+
*/
|
|
31
|
+
export function injectHlmDatePicker<T>(): HlmDatePickerBase<T> {
|
|
32
|
+
return inject(HlmDatePickerToken) as HlmDatePickerBase<T>;
|
|
33
|
+
}
|
|
2
34
|
|
|
3
35
|
export interface HlmDatePickerConfig<T> {
|
|
4
36
|
/**
|
|
@@ -21,12 +53,24 @@ export interface HlmDatePickerConfig<T> {
|
|
|
21
53
|
* @returns transformed date
|
|
22
54
|
*/
|
|
23
55
|
transformDate: (date: T) => T;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Parse a user-entered string into a date.
|
|
59
|
+
*
|
|
60
|
+
* @param value the raw string from the input
|
|
61
|
+
* @returns the parsed date, or `undefined` when the value can't be parsed
|
|
62
|
+
*/
|
|
63
|
+
parseDate: (value: string) => T | undefined;
|
|
24
64
|
}
|
|
25
65
|
|
|
26
66
|
function getDefaultConfig<T>(): HlmDatePickerConfig<T> {
|
|
27
67
|
return {
|
|
28
68
|
formatDate: (date) => (date instanceof Date ? date.toDateString() : `${date}`),
|
|
29
69
|
transformDate: (date) => date,
|
|
70
|
+
parseDate: (value) => {
|
|
71
|
+
const date = new Date(value);
|
|
72
|
+
return isNaN(date.getTime()) ? undefined : (date as T);
|
|
73
|
+
},
|
|
30
74
|
autoCloseOnSelect: false,
|
|
31
75
|
};
|
|
32
76
|
}
|
|
@@ -4,25 +4,23 @@ import {
|
|
|
4
4
|
ChangeDetectionStrategy,
|
|
5
5
|
Component,
|
|
6
6
|
computed,
|
|
7
|
+
contentChild,
|
|
7
8
|
forwardRef,
|
|
8
|
-
inject,
|
|
9
9
|
input,
|
|
10
10
|
linkedSignal,
|
|
11
11
|
output,
|
|
12
12
|
signal,
|
|
13
|
+
viewChild,
|
|
13
14
|
} from '@angular/core';
|
|
14
15
|
import { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
15
|
-
import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
16
|
-
import { lucideChevronDown } from '@ng-icons/lucide';
|
|
17
16
|
import type { BrnDialogState } from '@spartan-ng/brain/dialog';
|
|
18
|
-
import { BrnFieldControl,
|
|
17
|
+
import { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';
|
|
19
18
|
import type { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';
|
|
19
|
+
import { BrnPopover } from '@spartan-ng/brain/popover';
|
|
20
20
|
import { HlmCalendar } from '<%- importAlias %>/calendar';
|
|
21
|
-
import { HlmIcon } from '<%- importAlias %>/icon';
|
|
22
21
|
import { HlmPopoverImports } from '<%- importAlias %>/popover';
|
|
23
|
-
import {
|
|
24
|
-
import
|
|
25
|
-
import { injectHlmDatePickerConfig } from './hlm-date-picker.token';
|
|
22
|
+
import { HlmDatePickerTriggerToken } from './hlm-date-picker-trigger.token';
|
|
23
|
+
import { HlmDatePickerBase, injectHlmDatePickerConfig, provideHlmDatePicker } from './hlm-date-picker.token';
|
|
26
24
|
|
|
27
25
|
export const HLM_DATE_PICKER_VALUE_ACCESSOR = {
|
|
28
26
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -30,92 +28,46 @@ export const HLM_DATE_PICKER_VALUE_ACCESSOR = {
|
|
|
30
28
|
multi: true,
|
|
31
29
|
};
|
|
32
30
|
|
|
33
|
-
let nextId = 0;
|
|
34
|
-
|
|
35
31
|
@Component({
|
|
36
32
|
selector: 'hlm-date-picker',
|
|
37
|
-
imports: [
|
|
38
|
-
providers: [HLM_DATE_PICKER_VALUE_ACCESSOR,
|
|
33
|
+
imports: [HlmPopoverImports, HlmCalendar],
|
|
34
|
+
providers: [HLM_DATE_PICKER_VALUE_ACCESSOR, provideHlmDatePicker(HlmDatePicker), provideBrnLabelable(HlmDatePicker)],
|
|
39
35
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
40
36
|
hostDirectives: [BrnFieldControl],
|
|
41
|
-
host: {
|
|
42
|
-
class: 'block',
|
|
43
|
-
},
|
|
37
|
+
host: { class: 'block' },
|
|
44
38
|
template: `
|
|
45
39
|
<hlm-popover
|
|
46
40
|
sideOffset="5"
|
|
41
|
+
autoFocus="first-heading"
|
|
47
42
|
[state]="_popoverState()"
|
|
48
43
|
(stateChanged)="_popoverState.set($event)"
|
|
49
44
|
(closed)="_onTouched?.()"
|
|
50
45
|
>
|
|
51
|
-
<
|
|
52
|
-
[id]="buttonId()"
|
|
53
|
-
type="button"
|
|
54
|
-
[class]="_computedClass()"
|
|
55
|
-
[disabled]="_mutableDisabled()"
|
|
56
|
-
[attr.aria-invalid]="_ariaInvalid()"
|
|
57
|
-
[attr.data-invalid]="_ariaInvalid()"
|
|
58
|
-
[attr.data-touched]="_touched?.() ? 'true' : null"
|
|
59
|
-
[attr.data-dirty]="_dirty?.() ? 'true' : null"
|
|
60
|
-
[attr.data-matches-spartan-invalid]="_spartanInvalid?.() ? 'true' : null"
|
|
61
|
-
hlmPopoverTrigger
|
|
62
|
-
brnFieldControlDescribedBy
|
|
63
|
-
>
|
|
64
|
-
<span class="truncate">
|
|
65
|
-
@if (_formattedDate(); as formattedDate) {
|
|
66
|
-
{{ formattedDate }}
|
|
67
|
-
} @else {
|
|
68
|
-
<ng-content />
|
|
69
|
-
}
|
|
70
|
-
</span>
|
|
71
|
-
|
|
72
|
-
<ng-icon hlm size="sm" name="lucideChevronDown" />
|
|
73
|
-
</button>
|
|
46
|
+
<ng-content />
|
|
74
47
|
|
|
75
48
|
<hlm-popover-content class="w-fit p-0" *hlmPopoverPortal="let ctx">
|
|
49
|
+
<ng-content select="[hlmDatePickerHeader]" />
|
|
76
50
|
<hlm-calendar
|
|
77
|
-
calendarClass="border-0
|
|
51
|
+
calendarClass="rounded-none border-0"
|
|
78
52
|
[captionLayout]="captionLayout()"
|
|
79
53
|
[date]="_mutableDate()"
|
|
54
|
+
[defaultFocusedDate]="_mutableDate() ?? defaultFocusedDate()"
|
|
80
55
|
[min]="min()"
|
|
81
56
|
[max]="max()"
|
|
82
|
-
[disabled]="
|
|
57
|
+
[disabled]="_disabled()"
|
|
83
58
|
(dateChange)="_handleChange($event)"
|
|
84
59
|
/>
|
|
60
|
+
<ng-content select="[hlmDatePickerFooter]" />
|
|
85
61
|
</hlm-popover-content>
|
|
86
62
|
</hlm-popover>
|
|
87
63
|
`,
|
|
88
64
|
})
|
|
89
|
-
export class HlmDatePicker<T> implements ControlValueAccessor {
|
|
65
|
+
export class HlmDatePicker<T> implements HlmDatePickerBase<T>, ControlValueAccessor {
|
|
90
66
|
private readonly _config = injectHlmDatePickerConfig<T>();
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
protected readonly _dirty = this._fieldControl?.dirty;
|
|
96
|
-
protected readonly _touched = this._fieldControl?.touched;
|
|
97
|
-
|
|
98
|
-
protected readonly _errorStateClass = computed(() =>
|
|
99
|
-
this._spartanInvalid?.()
|
|
100
|
-
? 'border-destructive focus-visible:border-destructive focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40'
|
|
101
|
-
: '',
|
|
102
|
-
);
|
|
103
|
-
protected readonly _ariaInvalid = computed(() => (this._invalid?.() ? 'true' : null));
|
|
104
|
-
|
|
105
|
-
public readonly userClass = input<ClassValue>('', { alias: 'class' });
|
|
106
|
-
protected readonly _computedClass = computed(() =>
|
|
107
|
-
hlm(
|
|
108
|
-
'ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 rounded-md border px-3 py-2 text-left text-sm font-normal whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50',
|
|
109
|
-
'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',
|
|
110
|
-
'disabled:pointer-events-none disabled:opacity-50',
|
|
111
|
-
'[&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0',
|
|
112
|
-
this._errorStateClass(),
|
|
113
|
-
this.userClass(),
|
|
114
|
-
),
|
|
115
|
-
);
|
|
116
|
-
|
|
117
|
-
/** The id of the button that opens the date picker. */
|
|
118
|
-
public readonly buttonId = input<string>(`hlm-date-picker-${++nextId}`);
|
|
67
|
+
|
|
68
|
+
public readonly popover = viewChild.required(BrnPopover);
|
|
69
|
+
|
|
70
|
+
private readonly _trigger = contentChild(HlmDatePickerTriggerToken);
|
|
119
71
|
|
|
120
72
|
/** Show dropdowns to navigate between months or years. */
|
|
121
73
|
public readonly captionLayout = input<'dropdown' | 'label' | 'dropdown-months' | 'dropdown-years'>('label');
|
|
@@ -134,6 +86,9 @@ export class HlmDatePicker<T> implements ControlValueAccessor {
|
|
|
134
86
|
/** The selected value. */
|
|
135
87
|
public readonly date = input<T>();
|
|
136
88
|
|
|
89
|
+
/** The date the calendar focuses on first open when no date is selected. */
|
|
90
|
+
public readonly defaultFocusedDate = input<T>();
|
|
91
|
+
|
|
137
92
|
protected readonly _mutableDate = linkedSignal(this.date);
|
|
138
93
|
|
|
139
94
|
/** If true, the date picker will close when a date is selected. */
|
|
@@ -149,33 +104,49 @@ export class HlmDatePicker<T> implements ControlValueAccessor {
|
|
|
149
104
|
|
|
150
105
|
protected readonly _popoverState = signal<BrnDialogState | null>(null);
|
|
151
106
|
|
|
152
|
-
protected readonly
|
|
107
|
+
protected readonly _disabled = linkedSignal(this.disabled);
|
|
153
108
|
|
|
154
|
-
|
|
109
|
+
/** @internal The disabled state as a readonly signal */
|
|
110
|
+
public readonly disabledState = this._disabled.asReadonly();
|
|
111
|
+
|
|
112
|
+
public readonly formattedDate = computed(() => {
|
|
155
113
|
const date = this._mutableDate();
|
|
156
114
|
return date ? this.formatDate()(date) : undefined;
|
|
157
115
|
});
|
|
158
116
|
|
|
159
117
|
public readonly dateChange = output<T>();
|
|
160
118
|
|
|
161
|
-
public readonly labelableId = this.
|
|
119
|
+
public readonly labelableId = computed(() => this._trigger()?.triggerId());
|
|
120
|
+
|
|
121
|
+
public readonly hasDate = computed(() => !!this._mutableDate());
|
|
162
122
|
|
|
163
123
|
protected _onChange?: ChangeFn<T>;
|
|
164
124
|
protected _onTouched?: TouchFn;
|
|
165
125
|
|
|
166
|
-
protected _handleChange(value: T) {
|
|
167
|
-
if (this.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
this._mutableDate.set(transformedDate);
|
|
171
|
-
this._onChange?.(transformedDate);
|
|
172
|
-
this.dateChange.emit(transformedDate);
|
|
126
|
+
protected _handleChange(value: T | undefined) {
|
|
127
|
+
if (this._disabled()) return;
|
|
128
|
+
this.updateDate(value);
|
|
173
129
|
|
|
174
130
|
if (this.autoCloseOnSelect()) {
|
|
175
131
|
this._popoverState.set('closed');
|
|
176
132
|
}
|
|
177
133
|
}
|
|
178
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Commit a date to the picker. Updates the internal model, notifies form
|
|
137
|
+
* controls, and emits `dateChange`. Unlike `_handleChange`, this does not
|
|
138
|
+
* close the popover - it's intended to be called from a text input that
|
|
139
|
+
* is parsing user-entered values while typing.
|
|
140
|
+
*/
|
|
141
|
+
public updateDate(value: T | undefined) {
|
|
142
|
+
if (this._disabled()) return;
|
|
143
|
+
const transformedDate = value !== undefined ? this.transformDate()(value) : undefined;
|
|
144
|
+
|
|
145
|
+
this._mutableDate.set(transformedDate);
|
|
146
|
+
this._onChange?.(transformedDate as T);
|
|
147
|
+
this.dateChange.emit(transformedDate as T);
|
|
148
|
+
}
|
|
149
|
+
|
|
179
150
|
/** CONTROL VALUE ACCESSOR */
|
|
180
151
|
public writeValue(value: T | null): void {
|
|
181
152
|
this._mutableDate.set(value ? this.transformDate()(value) : undefined);
|
|
@@ -189,8 +160,12 @@ export class HlmDatePicker<T> implements ControlValueAccessor {
|
|
|
189
160
|
this._onTouched = fn;
|
|
190
161
|
}
|
|
191
162
|
|
|
163
|
+
public touched(): void {
|
|
164
|
+
this._onTouched?.();
|
|
165
|
+
}
|
|
166
|
+
|
|
192
167
|
public setDisabledState(isDisabled: boolean): void {
|
|
193
|
-
this.
|
|
168
|
+
this._disabled.set(isDisabled);
|
|
194
169
|
}
|
|
195
170
|
|
|
196
171
|
public open() {
|
|
@@ -200,4 +175,10 @@ export class HlmDatePicker<T> implements ControlValueAccessor {
|
|
|
200
175
|
public close() {
|
|
201
176
|
this._popoverState.set('closed');
|
|
202
177
|
}
|
|
178
|
+
|
|
179
|
+
public reset() {
|
|
180
|
+
this._mutableDate.set(undefined);
|
|
181
|
+
this._onChange?.(undefined as T);
|
|
182
|
+
this.dateChange.emit(undefined as T);
|
|
183
|
+
}
|
|
203
184
|
}
|
|
@@ -4,25 +4,24 @@ import {
|
|
|
4
4
|
ChangeDetectionStrategy,
|
|
5
5
|
Component,
|
|
6
6
|
computed,
|
|
7
|
+
contentChild,
|
|
7
8
|
forwardRef,
|
|
8
|
-
inject,
|
|
9
9
|
input,
|
|
10
10
|
linkedSignal,
|
|
11
11
|
output,
|
|
12
12
|
signal,
|
|
13
13
|
untracked,
|
|
14
|
+
viewChild,
|
|
14
15
|
} from '@angular/core';
|
|
15
16
|
import { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
16
|
-
import { provideIcons } from '@ng-icons/core';
|
|
17
|
-
import { lucideChevronDown } from '@ng-icons/lucide';
|
|
18
17
|
import type { BrnDialogState } from '@spartan-ng/brain/dialog';
|
|
19
|
-
import { BrnFieldControl,
|
|
18
|
+
import { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';
|
|
20
19
|
import type { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';
|
|
20
|
+
import { BrnPopover } from '@spartan-ng/brain/popover';
|
|
21
21
|
import { HlmCalendarRange } from '<%- importAlias %>/calendar';
|
|
22
|
-
import { HlmIconImports } from '<%- importAlias %>/icon';
|
|
23
22
|
import { HlmPopoverImports } from '<%- importAlias %>/popover';
|
|
24
|
-
import {
|
|
25
|
-
import
|
|
23
|
+
import { HlmDatePickerTriggerToken } from './hlm-date-picker-trigger.token';
|
|
24
|
+
import { HlmDatePickerBase, provideHlmDatePicker } from './hlm-date-picker.token';
|
|
26
25
|
import { injectHlmDateRangePickerConfig } from './hlm-date-range-picker.token';
|
|
27
26
|
|
|
28
27
|
export const HLM_DATE_RANGE_PICKER_VALUE_ACCESSOR = {
|
|
@@ -31,21 +30,17 @@ export const HLM_DATE_RANGE_PICKER_VALUE_ACCESSOR = {
|
|
|
31
30
|
multi: true,
|
|
32
31
|
};
|
|
33
32
|
|
|
34
|
-
let nextId = 0;
|
|
35
|
-
|
|
36
33
|
@Component({
|
|
37
34
|
selector: 'hlm-date-range-picker',
|
|
38
|
-
imports: [
|
|
35
|
+
imports: [HlmPopoverImports, HlmCalendarRange],
|
|
39
36
|
providers: [
|
|
40
37
|
HLM_DATE_RANGE_PICKER_VALUE_ACCESSOR,
|
|
41
|
-
|
|
38
|
+
provideHlmDatePicker(HlmDateRangePicker),
|
|
42
39
|
provideBrnLabelable(HlmDateRangePicker),
|
|
43
40
|
],
|
|
44
41
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
45
42
|
hostDirectives: [BrnFieldControl],
|
|
46
|
-
host: {
|
|
47
|
-
class: 'block',
|
|
48
|
-
},
|
|
43
|
+
host: { class: 'block' },
|
|
49
44
|
template: `
|
|
50
45
|
<hlm-popover
|
|
51
46
|
sideOffset="5"
|
|
@@ -53,31 +48,10 @@ let nextId = 0;
|
|
|
53
48
|
(stateChanged)="_popoverState.set($event)"
|
|
54
49
|
(closed)="_onClose(); _onTouched?.()"
|
|
55
50
|
>
|
|
56
|
-
<
|
|
57
|
-
[id]="buttonId()"
|
|
58
|
-
type="button"
|
|
59
|
-
[class]="_computedClass()"
|
|
60
|
-
[disabled]="_mutableDisabled()"
|
|
61
|
-
[attr.aria-invalid]="_ariaInvalid()"
|
|
62
|
-
[attr.data-invalid]="_ariaInvalid()"
|
|
63
|
-
[attr.data-touched]="_touched?.() ? 'true' : null"
|
|
64
|
-
[attr.data-dirty]="_dirty?.() ? 'true' : null"
|
|
65
|
-
[attr.data-matches-spartan-invalid]="_spartanInvalid?.() ? 'true' : null"
|
|
66
|
-
hlmPopoverTrigger
|
|
67
|
-
brnFieldControlDescribedBy
|
|
68
|
-
>
|
|
69
|
-
<span class="truncate">
|
|
70
|
-
@if (_formattedDate(); as formattedDate) {
|
|
71
|
-
{{ formattedDate }}
|
|
72
|
-
} @else {
|
|
73
|
-
<ng-content />
|
|
74
|
-
}
|
|
75
|
-
</span>
|
|
76
|
-
|
|
77
|
-
<ng-icon hlm size="sm" name="lucideChevronDown" />
|
|
78
|
-
</button>
|
|
51
|
+
<ng-content />
|
|
79
52
|
|
|
80
53
|
<hlm-popover-content class="w-fit p-0" *hlmPopoverPortal="let ctx">
|
|
54
|
+
<ng-content select="[hlmDatePickerHeader]" />
|
|
81
55
|
<hlm-calendar-range
|
|
82
56
|
calendarClass="border-0 rounded-none"
|
|
83
57
|
[startDate]="_start()"
|
|
@@ -85,44 +59,21 @@ let nextId = 0;
|
|
|
85
59
|
[endDate]="_end()"
|
|
86
60
|
[min]="min()"
|
|
87
61
|
[max]="max()"
|
|
88
|
-
[disabled]="
|
|
62
|
+
[disabled]="_disabled()"
|
|
89
63
|
(startDateChange)="_handleStartDayChange($event)"
|
|
90
64
|
(endDateChange)="_handleEndDateChange($event)"
|
|
91
65
|
/>
|
|
66
|
+
<ng-content select="[hlmDatePickerFooter]" />
|
|
92
67
|
</hlm-popover-content>
|
|
93
68
|
</hlm-popover>
|
|
94
69
|
`,
|
|
95
70
|
})
|
|
96
|
-
export class HlmDateRangePicker<T> implements ControlValueAccessor {
|
|
71
|
+
export class HlmDateRangePicker<T> implements HlmDatePickerBase<T>, ControlValueAccessor {
|
|
97
72
|
private readonly _config = injectHlmDateRangePickerConfig<T>();
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
protected readonly _dirty = this._fieldControl?.dirty;
|
|
103
|
-
protected readonly _invalid = this._fieldControl?.invalid;
|
|
104
|
-
|
|
105
|
-
protected readonly _errorStateClass = computed(() =>
|
|
106
|
-
this._spartanInvalid?.()
|
|
107
|
-
? 'border-destructive focus-visible:border-destructive focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40'
|
|
108
|
-
: '',
|
|
109
|
-
);
|
|
110
|
-
protected readonly _ariaInvalid = computed(() => (this._invalid?.() ? 'true' : null));
|
|
111
|
-
|
|
112
|
-
public readonly userClass = input<ClassValue>('', { alias: 'class' });
|
|
113
|
-
protected readonly _computedClass = computed(() =>
|
|
114
|
-
hlm(
|
|
115
|
-
'ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 rounded-md border px-3 py-2 text-left text-sm font-normal whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50',
|
|
116
|
-
'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',
|
|
117
|
-
'disabled:pointer-events-none disabled:opacity-50',
|
|
118
|
-
'[&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0',
|
|
119
|
-
this._errorStateClass(),
|
|
120
|
-
this.userClass(),
|
|
121
|
-
),
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
/** The id of the button that opens the date picker. */
|
|
125
|
-
public readonly buttonId = input<string>(`hlm-date-picker-range-${++nextId}`);
|
|
73
|
+
|
|
74
|
+
public readonly popover = viewChild.required(BrnPopover);
|
|
75
|
+
|
|
76
|
+
private readonly _trigger = contentChild(HlmDatePickerTriggerToken);
|
|
126
77
|
|
|
127
78
|
/** Show dropdowns to navigate between months or years. */
|
|
128
79
|
public readonly captionLayout = input<'dropdown' | 'label' | 'dropdown-months' | 'dropdown-years'>('label');
|
|
@@ -159,9 +110,12 @@ export class HlmDateRangePicker<T> implements ControlValueAccessor {
|
|
|
159
110
|
|
|
160
111
|
protected readonly _popoverState = signal<BrnDialogState | null>(null);
|
|
161
112
|
|
|
162
|
-
protected readonly
|
|
113
|
+
protected readonly _disabled = linkedSignal(this.disabled);
|
|
114
|
+
|
|
115
|
+
/** @internal The disabled state as a readonly signal */
|
|
116
|
+
public readonly disabledState = this._disabled.asReadonly();
|
|
163
117
|
|
|
164
|
-
|
|
118
|
+
public readonly formattedDate = computed(() => {
|
|
165
119
|
const start = this._start();
|
|
166
120
|
const end = this._end();
|
|
167
121
|
return start || end ? this.formatDates()([start, end]) : undefined;
|
|
@@ -169,18 +123,20 @@ export class HlmDateRangePicker<T> implements ControlValueAccessor {
|
|
|
169
123
|
|
|
170
124
|
public readonly dateChange = output<[T, T] | null>();
|
|
171
125
|
|
|
172
|
-
public readonly labelableId = this.
|
|
126
|
+
public readonly labelableId = computed(() => this._trigger()?.triggerId());
|
|
127
|
+
|
|
128
|
+
public readonly hasDate = computed(() => !!this._start() || !!this._end());
|
|
173
129
|
|
|
174
130
|
protected _onChange?: ChangeFn<[T, T] | null>;
|
|
175
131
|
protected _onTouched?: TouchFn;
|
|
176
132
|
|
|
177
|
-
protected _handleStartDayChange(value: T) {
|
|
133
|
+
protected _handleStartDayChange(value: T | undefined) {
|
|
178
134
|
this._start.set(value);
|
|
179
135
|
}
|
|
180
136
|
|
|
181
|
-
protected _handleEndDateChange(value: T): void {
|
|
137
|
+
protected _handleEndDateChange(value: T | undefined): void {
|
|
182
138
|
this._end.set(value);
|
|
183
|
-
if (this.
|
|
139
|
+
if (this._disabled()) return;
|
|
184
140
|
|
|
185
141
|
const start = this._start();
|
|
186
142
|
if (start && value) {
|
|
@@ -215,7 +171,7 @@ export class HlmDateRangePicker<T> implements ControlValueAccessor {
|
|
|
215
171
|
}
|
|
216
172
|
|
|
217
173
|
public setDisabledState(isDisabled: boolean): void {
|
|
218
|
-
this.
|
|
174
|
+
this._disabled.set(isDisabled);
|
|
219
175
|
}
|
|
220
176
|
|
|
221
177
|
public open() {
|
|
@@ -226,6 +182,14 @@ export class HlmDateRangePicker<T> implements ControlValueAccessor {
|
|
|
226
182
|
this._popoverState.set('closed');
|
|
227
183
|
}
|
|
228
184
|
|
|
185
|
+
public reset() {
|
|
186
|
+
this._mutableDate.set(undefined);
|
|
187
|
+
this._start.set(undefined);
|
|
188
|
+
this._end.set(undefined);
|
|
189
|
+
this._onChange?.(null);
|
|
190
|
+
this.dateChange.emit(null);
|
|
191
|
+
}
|
|
192
|
+
|
|
229
193
|
protected _onClose(): void {
|
|
230
194
|
const dates = this._mutableDate();
|
|
231
195
|
if (this._start() && !this._end() && dates) {
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const generator_1 = tslib_1.__importDefault(require("../../../base/generator"));
|
|
6
|
-
async function generator(tree, options) {
|
|
7
|
-
return await (0, generator_1.default)(tree, { ...options, name: 'date-picker' });
|
|
1
|
+
import hlmBaseGenerator from '../../../base/generator';
|
|
2
|
+
export async function generator(tree, options) {
|
|
3
|
+
return await hlmBaseGenerator(tree, { ...options, name: 'date-picker' });
|
|
8
4
|
}
|
|
9
5
|
//# sourceMappingURL=generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/date-picker/generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/date-picker/generator.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAGvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAU,EAAE,OAA+B;IAC1E,OAAO,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const generator_1 = tslib_1.__importDefault(require("../../../base/generator"));
|
|
6
|
-
async function generator(tree, options) {
|
|
7
|
-
return await (0, generator_1.default)(tree, { ...options, name: 'dialog' });
|
|
1
|
+
import hlmBaseGenerator from '../../../base/generator';
|
|
2
|
+
export async function generator(tree, options) {
|
|
3
|
+
return await hlmBaseGenerator(tree, { ...options, name: 'dialog' });
|
|
8
4
|
}
|
|
9
5
|
//# sourceMappingURL=generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/dialog/generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/dialog/generator.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAGvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAU,EAAE,OAA+B;IAC1E,OAAO,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const generator_1 = tslib_1.__importDefault(require("../../../base/generator"));
|
|
6
|
-
async function generator(tree, options) {
|
|
7
|
-
return await (0, generator_1.default)(tree, { ...options, name: 'dropdown-menu' });
|
|
1
|
+
import hlmBaseGenerator from '../../../base/generator';
|
|
2
|
+
export async function generator(tree, options) {
|
|
3
|
+
return await hlmBaseGenerator(tree, { ...options, name: 'dropdown-menu' });
|
|
8
4
|
}
|
|
9
5
|
//# sourceMappingURL=generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/dropdown-menu/generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/dropdown-menu/generator.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAGvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAU,EAAE,OAA+B;IAC1E,OAAO,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const generator_1 = tslib_1.__importDefault(require("../../../base/generator"));
|
|
6
|
-
async function generator(tree, options) {
|
|
7
|
-
return await (0, generator_1.default)(tree, { ...options, name: 'empty' });
|
|
1
|
+
import hlmBaseGenerator from '../../../base/generator';
|
|
2
|
+
export async function generator(tree, options) {
|
|
3
|
+
return await hlmBaseGenerator(tree, { ...options, name: 'empty' });
|
|
8
4
|
}
|
|
9
5
|
//# sourceMappingURL=generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/empty/generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../../libs/cli/src/generators/ui/libs/empty/generator.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAGvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAU,EAAE,OAA+B;IAC1E,OAAO,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACpE,CAAC"}
|