@ngbase/adk 0.1.10 → 0.1.12
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/a11y/index.d.ts +151 -5
- package/accordion/index.d.ts +44 -5
- package/autocomplete/index.d.ts +54 -5
- package/avatar/index.d.ts +25 -5
- package/bidi/index.d.ts +17 -5
- package/breadcrumb/index.d.ts +36 -5
- package/cache/index.d.ts +46 -5
- package/carousel/index.d.ts +79 -5
- package/checkbox/index.d.ts +33 -5
- package/chip/index.d.ts +28 -5
- package/clipboard/index.d.ts +11 -5
- package/collections/index.d.ts +23 -5
- package/color-picker/index.d.ts +119 -5
- package/cookies/index.d.ts +35 -5
- package/datepicker/index.d.ts +317 -5
- package/dialog/index.d.ts +63 -5
- package/drag/index.d.ts +107 -5
- package/fesm2022/ngbase-adk-a11y.mjs +100 -74
- package/fesm2022/ngbase-adk-a11y.mjs.map +1 -1
- package/fesm2022/ngbase-adk-accordion.mjs +31 -19
- package/fesm2022/ngbase-adk-accordion.mjs.map +1 -1
- package/fesm2022/ngbase-adk-autocomplete.mjs +17 -17
- package/fesm2022/ngbase-adk-autocomplete.mjs.map +1 -1
- package/fesm2022/ngbase-adk-avatar.mjs +16 -16
- package/fesm2022/ngbase-adk-avatar.mjs.map +1 -1
- package/fesm2022/ngbase-adk-bidi.mjs +6 -7
- package/fesm2022/ngbase-adk-bidi.mjs.map +1 -1
- package/fesm2022/ngbase-adk-breadcrumb.mjs +15 -15
- package/fesm2022/ngbase-adk-breadcrumb.mjs.map +1 -1
- package/fesm2022/ngbase-adk-cache.mjs +3 -3
- package/fesm2022/ngbase-adk-carousel.mjs +24 -24
- package/fesm2022/ngbase-adk-carousel.mjs.map +1 -1
- package/fesm2022/ngbase-adk-checkbox.mjs +10 -10
- package/fesm2022/ngbase-adk-checkbox.mjs.map +1 -1
- package/fesm2022/ngbase-adk-chip.mjs +13 -13
- package/fesm2022/ngbase-adk-chip.mjs.map +1 -1
- package/fesm2022/ngbase-adk-clipboard.mjs +27 -12
- package/fesm2022/ngbase-adk-clipboard.mjs.map +1 -1
- package/fesm2022/ngbase-adk-collections.mjs +5 -5
- package/fesm2022/ngbase-adk-collections.mjs.map +1 -1
- package/fesm2022/ngbase-adk-color-picker.mjs +39 -39
- package/fesm2022/ngbase-adk-color-picker.mjs.map +1 -1
- package/fesm2022/ngbase-adk-cookies.mjs +3 -3
- package/fesm2022/ngbase-adk-datepicker.mjs +107 -107
- package/fesm2022/ngbase-adk-datepicker.mjs.map +1 -1
- package/fesm2022/ngbase-adk-dialog.mjs +39 -109
- package/fesm2022/ngbase-adk-dialog.mjs.map +1 -1
- package/fesm2022/ngbase-adk-drag.mjs +21 -22
- package/fesm2022/ngbase-adk-drag.mjs.map +1 -1
- package/fesm2022/ngbase-adk-form-field.mjs +206 -31
- package/fesm2022/ngbase-adk-form-field.mjs.map +1 -1
- package/fesm2022/ngbase-adk-hover-card.mjs +6 -6
- package/fesm2022/ngbase-adk-hover-card.mjs.map +1 -1
- package/fesm2022/ngbase-adk-icon.mjs +10 -10
- package/fesm2022/ngbase-adk-icon.mjs.map +1 -1
- package/fesm2022/ngbase-adk-inline-edit.mjs +29 -27
- package/fesm2022/ngbase-adk-inline-edit.mjs.map +1 -1
- package/fesm2022/ngbase-adk-jwt.mjs +6 -6
- package/fesm2022/ngbase-adk-keys.mjs +7 -8
- package/fesm2022/ngbase-adk-keys.mjs.map +1 -1
- package/fesm2022/ngbase-adk-layout.mjs +1 -1
- package/fesm2022/ngbase-adk-layout.mjs.map +1 -1
- package/fesm2022/ngbase-adk-list.mjs +10 -10
- package/fesm2022/ngbase-adk-list.mjs.map +1 -1
- package/fesm2022/ngbase-adk-mask.mjs +8 -8
- package/fesm2022/ngbase-adk-mask.mjs.map +1 -1
- package/fesm2022/ngbase-adk-menu.mjs +41 -41
- package/fesm2022/ngbase-adk-menu.mjs.map +1 -1
- package/fesm2022/ngbase-adk-network.mjs +4 -4
- package/fesm2022/ngbase-adk-network.mjs.map +1 -1
- package/fesm2022/ngbase-adk-otp.mjs +19 -19
- package/fesm2022/ngbase-adk-otp.mjs.map +1 -1
- package/fesm2022/ngbase-adk-pagination.mjs +20 -20
- package/fesm2022/ngbase-adk-pagination.mjs.map +1 -1
- package/fesm2022/ngbase-adk-popover.mjs +28 -28
- package/fesm2022/ngbase-adk-popover.mjs.map +1 -1
- package/fesm2022/ngbase-adk-portal.mjs +14 -15
- package/fesm2022/ngbase-adk-portal.mjs.map +1 -1
- package/fesm2022/ngbase-adk-progress.mjs +8 -8
- package/fesm2022/ngbase-adk-progress.mjs.map +1 -1
- package/fesm2022/ngbase-adk-radio.mjs +15 -15
- package/fesm2022/ngbase-adk-radio.mjs.map +1 -1
- package/fesm2022/ngbase-adk-resizable.mjs +19 -20
- package/fesm2022/ngbase-adk-resizable.mjs.map +1 -1
- package/fesm2022/ngbase-adk-scroll-area.mjs +31 -31
- package/fesm2022/ngbase-adk-scroll-area.mjs.map +1 -1
- package/fesm2022/ngbase-adk-select.mjs +73 -75
- package/fesm2022/ngbase-adk-select.mjs.map +1 -1
- package/fesm2022/ngbase-adk-selectable.mjs +9 -9
- package/fesm2022/ngbase-adk-selectable.mjs.map +1 -1
- package/fesm2022/ngbase-adk-sheet.mjs +9 -7
- package/fesm2022/ngbase-adk-sheet.mjs.map +1 -1
- package/fesm2022/ngbase-adk-sidenav.mjs +37 -37
- package/fesm2022/ngbase-adk-sidenav.mjs.map +1 -1
- package/fesm2022/ngbase-adk-slider.mjs +26 -26
- package/fesm2022/ngbase-adk-slider.mjs.map +1 -1
- package/fesm2022/ngbase-adk-sonner.mjs +11 -11
- package/fesm2022/ngbase-adk-sonner.mjs.map +1 -1
- package/fesm2022/ngbase-adk-stepper.mjs +28 -28
- package/fesm2022/ngbase-adk-stepper.mjs.map +1 -1
- package/fesm2022/ngbase-adk-switch.mjs +16 -16
- package/fesm2022/ngbase-adk-switch.mjs.map +1 -1
- package/fesm2022/ngbase-adk-table.mjs +98 -78
- package/fesm2022/ngbase-adk-table.mjs.map +1 -1
- package/fesm2022/ngbase-adk-tabs.mjs +44 -44
- package/fesm2022/ngbase-adk-tabs.mjs.map +1 -1
- package/fesm2022/ngbase-adk-toggle-group.mjs +15 -15
- package/fesm2022/ngbase-adk-toggle-group.mjs.map +1 -1
- package/fesm2022/ngbase-adk-toggle.mjs +4 -4
- package/fesm2022/ngbase-adk-toggle.mjs.map +1 -1
- package/fesm2022/ngbase-adk-tooltip.mjs +15 -15
- package/fesm2022/ngbase-adk-tooltip.mjs.map +1 -1
- package/fesm2022/ngbase-adk-tour.mjs +28 -28
- package/fesm2022/ngbase-adk-tour.mjs.map +1 -1
- package/fesm2022/ngbase-adk-translate.mjs +13 -13
- package/fesm2022/ngbase-adk-translate.mjs.map +1 -1
- package/fesm2022/ngbase-adk-tree.mjs +27 -27
- package/fesm2022/ngbase-adk-tree.mjs.map +1 -1
- package/fesm2022/ngbase-adk-utils.mjs +43 -20
- package/fesm2022/ngbase-adk-utils.mjs.map +1 -1
- package/fesm2022/ngbase-adk-virtualizer.mjs +20 -20
- package/fesm2022/ngbase-adk-virtualizer.mjs.map +1 -1
- package/form-field/index.d.ts +95 -5
- package/hover-card/index.d.ts +21 -5
- package/icon/index.d.ts +28 -5
- package/index.d.ts +2 -5
- package/inline-edit/index.d.ts +53 -5
- package/jwt/index.d.ts +20 -5
- package/keys/index.d.ts +54 -5
- package/layout/index.d.ts +20 -5
- package/list/index.d.ts +34 -5
- package/mask/index.d.ts +33 -5
- package/menu/index.d.ts +145 -5
- package/network/index.d.ts +29 -5
- package/otp/index.d.ts +51 -5
- package/package.json +44 -44
- package/pagination/index.d.ts +35 -5
- package/popover/index.d.ts +212 -5
- package/portal/index.d.ts +113 -5
- package/progress/index.d.ts +17 -5
- package/radio/index.d.ts +45 -5
- package/resizable/index.d.ts +73 -5
- package/schematics/components/files/accordion/accordion.ts.template +2 -2
- package/schematics/components/files/autocomplete/autocomplete.ts.template +1 -0
- package/schematics/components/files/avatar/avatar.ts.template +12 -4
- package/schematics/components/files/button/button.ts.template +32 -13
- package/schematics/components/files/command/command.ts.template +10 -9
- package/schematics/components/files/datepicker/datepicker-llm.md.template +15 -2
- package/schematics/components/files/dialog/dialog.ts.template +9 -2
- package/schematics/components/files/drawer/drawer.ts.template +1 -1
- package/schematics/components/files/form-field/form-field.ts.template +10 -1
- package/schematics/components/files/form-field/input-style.directive.ts.template +1 -1
- package/schematics/components/files/icon/icon-llm.md.template +0 -1
- package/schematics/components/files/inline-edit/inline-edit.ts.template +2 -2
- package/schematics/components/files/otp/otp.ts.template +1 -1
- package/schematics/components/files/picasa/picasa-base.component.ts.template +1 -2
- package/schematics/components/files/picasa/picasa.component.ts.template +4 -4
- package/schematics/components/files/select/select.ts.template +5 -18
- package/schematics/components/files/sheet/sheet.ts.template +1 -1
- package/schematics/components/files/sidenav/sidenav-llm.md.template +0 -1
- package/schematics/components/files/spinner/spinner.ts.template +1 -29
- package/schematics/components/files/table/table-llm.md.template +41 -1
- package/schematics/components/files/table/table.ts.template +40 -5
- package/scroll-area/index.d.ts +60 -5
- package/select/index.d.ts +177 -5
- package/selectable/index.d.ts +32 -5
- package/sheet/index.d.ts +44 -5
- package/sidenav/index.d.ts +74 -5
- package/slider/index.d.ts +79 -5
- package/sonner/index.d.ts +50 -5
- package/stepper/index.d.ts +54 -5
- package/switch/index.d.ts +47 -5
- package/table/index.d.ts +143 -5
- package/tabs/index.d.ts +85 -5
- package/test/index.d.ts +81 -5
- package/toggle/index.d.ts +16 -5
- package/toggle-group/index.d.ts +39 -5
- package/tooltip/index.d.ts +60 -5
- package/tour/index.d.ts +70 -5
- package/translate/index.d.ts +58 -5
- package/tree/index.d.ts +95 -5
- package/utils/index.d.ts +82 -5
- package/virtualizer/index.d.ts +45 -5
- package/a11y/accessibility-group.d.ts +0 -46
- package/a11y/accessibility-item.d.ts +0 -49
- package/a11y/accessibility.service.d.ts +0 -17
- package/a11y/autofocus.d.ts +0 -18
- package/a11y/focus-trap.d.ts +0 -15
- package/a11y/public-api.d.ts +0 -4
- package/accordion/accordion-content.d.ts +0 -8
- package/accordion/accordion-group.d.ts +0 -10
- package/accordion/accordion-header.d.ts +0 -7
- package/accordion/accordion-item.d.ts +0 -16
- package/accordion/public-api.d.ts +0 -4
- package/autocomplete/autocomplete-input.d.ts +0 -19
- package/autocomplete/autocomplete.d.ts +0 -34
- package/autocomplete/public-api.d.ts +0 -2
- package/avatar/avatar.d.ts +0 -22
- package/avatar/public-api.d.ts +0 -1
- package/bidi/direction.service.d.ts +0 -14
- package/bidi/public-api.d.ts +0 -1
- package/breadcrumb/breadcrumb-link.d.ts +0 -7
- package/breadcrumb/breadcrumb-separator.d.ts +0 -6
- package/breadcrumb/breadcrumb.d.ts +0 -12
- package/breadcrumb/breadcrumbs.d.ts +0 -9
- package/breadcrumb/public-api.d.ts +0 -4
- package/cache/cache-config.d.ts +0 -22
- package/cache/cache.d.ts +0 -17
- package/cache/cache.interecptor.d.ts +0 -2
- package/cache/public-api.d.ts +0 -3
- package/carousel/carousel-item.d.ts +0 -7
- package/carousel/carousel-next.d.ts +0 -8
- package/carousel/carousel.d.ts +0 -61
- package/carousel/public-api.d.ts +0 -3
- package/checkbox/checkbox.d.ts +0 -30
- package/checkbox/public-api.d.ts +0 -1
- package/chip/chip-group.d.ts +0 -7
- package/chip/chip.d.ts +0 -19
- package/chip/public-api.d.ts +0 -2
- package/clipboard/clipboard.d.ts +0 -7
- package/clipboard/public-api.d.ts +0 -1
- package/collections/SelectionModel.d.ts +0 -19
- package/collections/public-api.d.ts +0 -1
- package/color-picker/color-input.d.ts +0 -16
- package/color-picker/color-picker-trigger.d.ts +0 -30
- package/color-picker/color-picker.d.ts +0 -72
- package/color-picker/public-api.d.ts +0 -3
- package/color-picker/utils.d.ts +0 -21
- package/cookies/cookie.service.d.ts +0 -32
- package/cookies/public-api.d.ts +0 -1
- package/datepicker/calendar.d.ts +0 -121
- package/datepicker/datepicker-trigger.d.ts +0 -66
- package/datepicker/datepicker.d.ts +0 -55
- package/datepicker/native-date-adapter.d.ts +0 -33
- package/datepicker/public-api.d.ts +0 -5
- package/datepicker/time.d.ts +0 -42
- package/dialog/dialog.animation.d.ts +0 -3
- package/dialog/dialog.d.ts +0 -49
- package/dialog/dialog.service.d.ts +0 -7
- package/dialog/public-api.d.ts +0 -3
- package/drag/drag-drop.d.ts +0 -37
- package/drag/drag-move.d.ts +0 -17
- package/drag/drag.d.ts +0 -52
- package/drag/public-api.d.ts +0 -3
- package/form-field/auto-height.d.ts +0 -9
- package/form-field/error.d.ts +0 -18
- package/form-field/form-field.d.ts +0 -14
- package/form-field/input.d.ts +0 -16
- package/form-field/label.d.ts +0 -7
- package/form-field/public-api.d.ts +0 -5
- package/hover-card/hover-card.d.ts +0 -18
- package/hover-card/public-api.d.ts +0 -1
- package/icon/icon.d.ts +0 -12
- package/icon/icon.service.d.ts +0 -12
- package/icon/public-api.d.ts +0 -2
- package/inline-edit/inline-edit.d.ts +0 -47
- package/inline-edit/public-api.d.ts +0 -1
- package/jwt/jwt.service.d.ts +0 -27
- package/jwt/public-api.d.ts +0 -1
- package/keys/keys.service.d.ts +0 -13
- package/keys/public-api.d.ts +0 -2
- package/keys/shortcuts.service.d.ts +0 -38
- package/layout/layout.d.ts +0 -16
- package/layout/public-api.d.ts +0 -1
- package/list/list.d.ts +0 -20
- package/list/list.directive.d.ts +0 -12
- package/list/public-api.d.ts +0 -2
- package/mask/mask-pipe.d.ts +0 -7
- package/mask/mask.d.ts +0 -24
- package/mask/public-api.d.ts +0 -2
- package/menu/context-menu.d.ts +0 -21
- package/menu/mention.d.ts +0 -18
- package/menu/menu-trigger.d.ts +0 -34
- package/menu/menu.d.ts +0 -58
- package/menu/navigation-menu.d.ts +0 -19
- package/menu/public-api.d.ts +0 -5
- package/network/network.interceptor.d.ts +0 -6
- package/network/network.service.d.ts +0 -18
- package/network/public-api.d.ts +0 -2
- package/otp/otp.d.ts +0 -48
- package/otp/public-api.d.ts +0 -1
- package/pagination/pagination.d.ts +0 -32
- package/pagination/public-api.d.ts +0 -1
- package/popover/base-popover.service.d.ts +0 -16
- package/popover/popover-arrow.ng.d.ts +0 -34
- package/popover/popover-trigger.d.ts +0 -21
- package/popover/popover.d.ts +0 -60
- package/popover/popover.service.d.ts +0 -43
- package/popover/public-api.d.ts +0 -6
- package/popover/utils.d.ts +0 -69
- package/portal/dialog-ref.d.ts +0 -70
- package/portal/portal-base.service.d.ts +0 -19
- package/portal/portal-close.directive.d.ts +0 -9
- package/portal/portal.component.d.ts +0 -7
- package/portal/portal.service.d.ts +0 -16
- package/portal/public-api.d.ts +0 -5
- package/progress/progress.d.ts +0 -13
- package/progress/public-api.d.ts +0 -1
- package/public-api.d.ts +0 -2
- package/radio/public-api.d.ts +0 -2
- package/radio/radio-group.d.ts +0 -19
- package/radio/radio.d.ts +0 -26
- package/resizable/public-api.d.ts +0 -2
- package/resizable/resizable-group.d.ts +0 -22
- package/resizable/resizable.d.ts +0 -50
- package/scroll-area/public-api.d.ts +0 -1
- package/scroll-area/scroll-area.d.ts +0 -56
- package/select/list-selection.d.ts +0 -7
- package/select/option-group.d.ts +0 -7
- package/select/option.d.ts +0 -25
- package/select/public-api.d.ts +0 -6
- package/select/select-base.d.ts +0 -66
- package/select/select-input.d.ts +0 -23
- package/select/select.d.ts +0 -53
- package/selectable/public-api.d.ts +0 -2
- package/selectable/selectable-item.d.ts +0 -12
- package/selectable/selectable.d.ts +0 -19
- package/sheet/public-api.d.ts +0 -2
- package/sheet/sheet.d.ts +0 -26
- package/sheet/sheet.service.d.ts +0 -13
- package/sidenav/public-api.d.ts +0 -3
- package/sidenav/sidenav-header.d.ts +0 -31
- package/sidenav/sidenav.d.ts +0 -23
- package/sidenav/sidenav.service.d.ts +0 -18
- package/slider/public-api.d.ts +0 -1
- package/slider/slider.d.ts +0 -76
- package/sonner/public-api.d.ts +0 -2
- package/sonner/sonner.d.ts +0 -25
- package/sonner/sonner.service.d.ts +0 -21
- package/stepper/animation.d.ts +0 -1
- package/stepper/public-api.d.ts +0 -3
- package/stepper/step.d.ts +0 -24
- package/stepper/stepper.d.ts +0 -26
- package/switch/public-api.d.ts +0 -1
- package/switch/switch.d.ts +0 -44
- package/table/body-cell.d.ts +0 -11
- package/table/body-row.d.ts +0 -25
- package/table/column.d.ts +0 -10
- package/table/head-cell.d.ts +0 -12
- package/table/head-row.d.ts +0 -24
- package/table/public-api.d.ts +0 -8
- package/table/sort.d.ts +0 -40
- package/table/table.d.ts +0 -38
- package/tabs/public-api.d.ts +0 -2
- package/tabs/tab-group.d.ts +0 -52
- package/tabs/tab.d.ts +0 -31
- package/test/public-api.d.ts +0 -1
- package/test/utils.d.ts +0 -78
- package/toggle/public-api.d.ts +0 -1
- package/toggle/toggle.d.ts +0 -13
- package/toggle-group/public-api.d.ts +0 -2
- package/toggle-group/toggle-group.d.ts +0 -25
- package/toggle-group/toggle-item.d.ts +0 -14
- package/tooltip/public-api.d.ts +0 -2
- package/tooltip/tooltip.d.ts +0 -24
- package/tooltip/tooltip.directive.d.ts +0 -34
- package/tooltip/tooltip.service.d.ts +0 -28
- package/tour/animation.d.ts +0 -2
- package/tour/public-api.d.ts +0 -5
- package/tour/tour-base.d.ts +0 -21
- package/tour/tour-step.d.ts +0 -11
- package/tour/tour.d.ts +0 -9
- package/tour/tour.service.d.ts +0 -29
- package/translate/config.d.ts +0 -16
- package/translate/public-api.d.ts +0 -3
- package/translate/translate.d.ts +0 -11
- package/translate/translate.service.d.ts +0 -31
- package/tree/public-api.d.ts +0 -3
- package/tree/tree-node.d.ts +0 -28
- package/tree/tree-toggle.d.ts +0 -16
- package/tree/tree.d.ts +0 -55
- package/utils/animation.d.ts +0 -3
- package/utils/disposals.d.ts +0 -7
- package/utils/number-only.d.ts +0 -22
- package/utils/public-api.d.ts +0 -6
- package/utils/range.pipe.d.ts +0 -7
- package/utils/ssr.d.ts +0 -2
- package/utils/utils.d.ts +0 -28
- package/virtualizer/public-api.d.ts +0 -1
- package/virtualizer/virtualizer.d.ts +0 -42
|
@@ -6,25 +6,25 @@ import { uniqueId, provideValueAccessor } from '@ngbase/adk/utils';
|
|
|
6
6
|
|
|
7
7
|
class NgbFormField {
|
|
8
8
|
constructor() {
|
|
9
|
-
this._control = contentChild(NgControl, { descendants: true });
|
|
9
|
+
this._control = contentChild(NgControl, ...(ngDevMode ? [{ debugName: "_control", descendants: true }] : [{ descendants: true }]));
|
|
10
10
|
this._id = uniqueId();
|
|
11
11
|
// we need to forwardRef the error component to avoid circular dependency
|
|
12
12
|
this.status = statusChange(this._control);
|
|
13
|
-
this._invalid = computed(() => this.status() === 'INVALID' && this._control()?.touched);
|
|
14
|
-
this.errors = contentChildren(forwardRef(() => NgbInputError));
|
|
15
|
-
this.hasErrors = computed(() => this._invalid() || this.errors().some(e => e.isInvalid()));
|
|
13
|
+
this._invalid = computed(() => this.status() === 'INVALID' && this._control()?.touched, ...(ngDevMode ? [{ debugName: "_invalid" }] : []));
|
|
14
|
+
this.errors = contentChildren(forwardRef(() => NgbInputError), ...(ngDevMode ? [{ debugName: "errors" }] : []));
|
|
15
|
+
this.hasErrors = computed(() => this._invalid() || this.errors().some(e => e.isInvalid()), ...(ngDevMode ? [{ debugName: "hasErrors" }] : []));
|
|
16
16
|
}
|
|
17
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
18
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "
|
|
17
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbFormField, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
18
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.2.0", type: NgbFormField, isStandalone: true, selector: "ngb-form-field, [ngbFormField]", queries: [{ propertyName: "_control", first: true, predicate: NgControl, descendants: true, isSignal: true }, { propertyName: "errors", predicate: i0.forwardRef(() => NgbInputError), isSignal: true }], ngImport: i0 }); }
|
|
19
19
|
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbFormField, decorators: [{
|
|
21
21
|
type: Directive,
|
|
22
22
|
args: [{
|
|
23
23
|
selector: 'ngb-form-field, [ngbFormField]',
|
|
24
24
|
}]
|
|
25
25
|
}] });
|
|
26
26
|
function statusChange(sControl) {
|
|
27
|
-
const statusChanges = signal(null, { equal: () => false });
|
|
27
|
+
const statusChanges = signal(null, ...(ngDevMode ? [{ debugName: "statusChanges", equal: () => false }] : [{ equal: () => false }]));
|
|
28
28
|
effect(cleanup => {
|
|
29
29
|
const control = sControl();
|
|
30
30
|
if (control) {
|
|
@@ -43,9 +43,9 @@ class NgbInputError {
|
|
|
43
43
|
/* the input can have comma separated error names like
|
|
44
44
|
* 'required' or '!required && minlength'
|
|
45
45
|
*/
|
|
46
|
-
this.ngbError = input.required();
|
|
47
|
-
this.invalid = input();
|
|
48
|
-
this.animate = signal(false);
|
|
46
|
+
this.ngbError = input.required(...(ngDevMode ? [{ debugName: "ngbError" }] : []));
|
|
47
|
+
this.invalid = input(...(ngDevMode ? [undefined, { debugName: "invalid" }] : []));
|
|
48
|
+
this.animate = signal(false, ...(ngDevMode ? [{ debugName: "animate" }] : []));
|
|
49
49
|
this.errorNames = computed(() => {
|
|
50
50
|
const names = (this.ngbError() ?? '').split('&&');
|
|
51
51
|
return names.reduce((acc, n) => {
|
|
@@ -56,7 +56,7 @@ class NgbInputError {
|
|
|
56
56
|
}
|
|
57
57
|
return acc;
|
|
58
58
|
}, []);
|
|
59
|
-
});
|
|
59
|
+
}, ...(ngDevMode ? [{ debugName: "errorNames" }] : []));
|
|
60
60
|
this.isFieldInvalid = computed(() => {
|
|
61
61
|
const control = this.formField._control();
|
|
62
62
|
const status = this.formField.status();
|
|
@@ -64,15 +64,15 @@ class NgbInputError {
|
|
|
64
64
|
return (status === 'INVALID' &&
|
|
65
65
|
control?.touched &&
|
|
66
66
|
names.every(n => !!control.errors?.[n.name] !== n.negated));
|
|
67
|
-
});
|
|
67
|
+
}, ...(ngDevMode ? [{ debugName: "isFieldInvalid" }] : []));
|
|
68
68
|
this.isInvalid = computed(() => {
|
|
69
69
|
return this.invalid() ?? this.isFieldInvalid();
|
|
70
|
-
});
|
|
70
|
+
}, ...(ngDevMode ? [{ debugName: "isInvalid" }] : []));
|
|
71
71
|
}
|
|
72
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
73
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
72
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInputError, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
73
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: NgbInputError, isStandalone: true, selector: "[ngbError]", inputs: { ngbError: { classPropertyName: "ngbError", publicName: "ngbError", isSignal: true, isRequired: true, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "hidden": "!animate() && !isInvalid()" } }, ngImport: i0 }); }
|
|
74
74
|
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInputError, decorators: [{
|
|
76
76
|
type: Directive,
|
|
77
77
|
args: [{
|
|
78
78
|
selector: '[ngbError]',
|
|
@@ -100,9 +100,13 @@ const toggleDiv = trigger('toggleDiv', [
|
|
|
100
100
|
class InputBase {
|
|
101
101
|
constructor() {
|
|
102
102
|
this.formField = inject(NgbFormField, { optional: true });
|
|
103
|
-
this.value = model('');
|
|
103
|
+
this.value = model('', ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
104
104
|
this.id = this.formField?._id ?? uniqueId();
|
|
105
105
|
}
|
|
106
|
+
setInputValue(ev) {
|
|
107
|
+
const value = ev.target.value;
|
|
108
|
+
this.setValue(value, true);
|
|
109
|
+
}
|
|
106
110
|
setValue(value, fromInput = false) {
|
|
107
111
|
this.value.set(value);
|
|
108
112
|
if (fromInput) {
|
|
@@ -119,19 +123,19 @@ class InputBase {
|
|
|
119
123
|
registerOnTouched(fn) {
|
|
120
124
|
this.onTouched = fn;
|
|
121
125
|
}
|
|
122
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
123
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
126
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: InputBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
127
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: InputBase, isStandalone: true, selector: "input[ngbInputBase]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "role": "textbox" }, listeners: { "input": "setInputValue($event)" }, properties: { "attr.id": "id", "value": "value()" } }, providers: [provideValueAccessor(InputBase)], ngImport: i0 }); }
|
|
124
128
|
}
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: InputBase, decorators: [{
|
|
126
130
|
type: Directive,
|
|
127
131
|
args: [{
|
|
128
|
-
selector: '[ngbInputBase]',
|
|
132
|
+
selector: 'input[ngbInputBase]',
|
|
129
133
|
providers: [provideValueAccessor(InputBase)],
|
|
130
134
|
host: {
|
|
131
135
|
role: 'textbox',
|
|
132
136
|
'[attr.id]': 'id',
|
|
133
137
|
'[value]': 'value()',
|
|
134
|
-
'(input)': '
|
|
138
|
+
'(input)': 'setInputValue($event)',
|
|
135
139
|
},
|
|
136
140
|
}]
|
|
137
141
|
}] });
|
|
@@ -140,6 +144,8 @@ class AutoHeight {
|
|
|
140
144
|
constructor() {
|
|
141
145
|
this.el = inject(ElementRef);
|
|
142
146
|
this.model = inject(NgControl, { optional: true });
|
|
147
|
+
this.ngbInput = inject(InputBase, { optional: true });
|
|
148
|
+
this.maxHeight = input(...(ngDevMode ? [undefined, { debugName: "maxHeight" }] : []));
|
|
143
149
|
// Disable textarea resizing
|
|
144
150
|
this.el.nativeElement.style.resize = 'none';
|
|
145
151
|
const injector = inject(Injector);
|
|
@@ -166,18 +172,29 @@ class AutoHeight {
|
|
|
166
172
|
ro.observe(this.el.nativeElement);
|
|
167
173
|
cleanup(() => ro.disconnect());
|
|
168
174
|
});
|
|
175
|
+
effect(() => {
|
|
176
|
+
const _ = this.ngbInput?.value();
|
|
177
|
+
this.update();
|
|
178
|
+
});
|
|
169
179
|
}
|
|
170
180
|
update() {
|
|
171
181
|
const el = this.el.nativeElement;
|
|
172
182
|
el.style.height = 'auto';
|
|
173
183
|
// also we need to consider the border so we need to calculate the border using height
|
|
174
184
|
const borderHeight = el.offsetHeight - el.clientHeight;
|
|
175
|
-
|
|
185
|
+
const height = el.scrollHeight + borderHeight;
|
|
186
|
+
const maxHeight = this.maxHeight();
|
|
187
|
+
if (maxHeight) {
|
|
188
|
+
el.style.height = Math.min(height, maxHeight) + 'px';
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
el.style.height = height + 'px';
|
|
192
|
+
}
|
|
176
193
|
}
|
|
177
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
178
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
194
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AutoHeight, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
195
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: AutoHeight, isStandalone: true, selector: "textarea[ngbAutoHeight]", inputs: { maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
179
196
|
}
|
|
180
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
197
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AutoHeight, decorators: [{
|
|
181
198
|
type: Directive,
|
|
182
199
|
args: [{
|
|
183
200
|
selector: 'textarea[ngbAutoHeight]',
|
|
@@ -189,10 +206,10 @@ class NgbLabel {
|
|
|
189
206
|
this.formField = inject(NgbFormField);
|
|
190
207
|
this.id = this.formField._id;
|
|
191
208
|
}
|
|
192
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
193
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
209
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
210
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.0", type: NgbLabel, isStandalone: true, selector: "[ngbLabel]", host: { properties: { "attr.for": "id" } }, ngImport: i0 }); }
|
|
194
211
|
}
|
|
195
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbLabel, decorators: [{
|
|
196
213
|
type: Directive,
|
|
197
214
|
args: [{
|
|
198
215
|
selector: '[ngbLabel]',
|
|
@@ -202,9 +219,167 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImpor
|
|
|
202
219
|
}]
|
|
203
220
|
}] });
|
|
204
221
|
|
|
222
|
+
class NumberFormat {
|
|
223
|
+
constructor() {
|
|
224
|
+
// Input signals with default values
|
|
225
|
+
this.el = inject(ElementRef);
|
|
226
|
+
this.decimals = input(2, ...(ngDevMode ? [{ debugName: "decimals" }] : []));
|
|
227
|
+
this.decimalSeparator = input('.', ...(ngDevMode ? [{ debugName: "decimalSeparator" }] : []));
|
|
228
|
+
this.thousandSeparator = input(',', ...(ngDevMode ? [{ debugName: "thousandSeparator" }] : []));
|
|
229
|
+
// Private members
|
|
230
|
+
this.onChange = (_) => { };
|
|
231
|
+
this.onTouched = () => { };
|
|
232
|
+
this.rawValue = '';
|
|
233
|
+
this.specialKeys = [
|
|
234
|
+
'Backspace',
|
|
235
|
+
'Tab',
|
|
236
|
+
'End',
|
|
237
|
+
'Home',
|
|
238
|
+
'ArrowLeft',
|
|
239
|
+
'ArrowRight',
|
|
240
|
+
'Delete',
|
|
241
|
+
];
|
|
242
|
+
}
|
|
243
|
+
// Handles input changes
|
|
244
|
+
onInput(ev) {
|
|
245
|
+
const value = ev.target.value.toString();
|
|
246
|
+
const position = this.el.nativeElement.selectionStart;
|
|
247
|
+
const cleanedValue = this.cleanValue(value);
|
|
248
|
+
if (this.isValidNumber(cleanedValue)) {
|
|
249
|
+
this.rawValue = cleanedValue;
|
|
250
|
+
this.formatDisplayValue(cleanedValue);
|
|
251
|
+
this.onChange(this.rawValue);
|
|
252
|
+
this.onTouched();
|
|
253
|
+
this.updateCursorPosition(value, position ?? 0);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Handles keydown events to validate input
|
|
257
|
+
onKeyDown(event) {
|
|
258
|
+
if (this.specialKeys.includes(event.key))
|
|
259
|
+
return;
|
|
260
|
+
const value = this.el.nativeElement.value;
|
|
261
|
+
const position = this.el.nativeElement.selectionStart;
|
|
262
|
+
// Handle decimal separator
|
|
263
|
+
if (event.key === this.decimalSeparator()) {
|
|
264
|
+
if (value.includes(this.decimalSeparator())) {
|
|
265
|
+
event.preventDefault();
|
|
266
|
+
}
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
// Only allow digits
|
|
270
|
+
if (!/^\d$/.test(event.key)) {
|
|
271
|
+
event.preventDefault();
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
// Check decimal digits limit
|
|
275
|
+
if (this.isDecimalPartFull(value, position ?? 0)) {
|
|
276
|
+
event.preventDefault();
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Handle blur event
|
|
280
|
+
onBlur() {
|
|
281
|
+
if (this.rawValue) {
|
|
282
|
+
this.formatDisplayValue(this.rawValue);
|
|
283
|
+
}
|
|
284
|
+
this.onTouched();
|
|
285
|
+
}
|
|
286
|
+
// ControlValueAccessor implementation
|
|
287
|
+
writeValue(value) {
|
|
288
|
+
if (value) {
|
|
289
|
+
const cleanValue = this.cleanValue(value);
|
|
290
|
+
this.rawValue = cleanValue;
|
|
291
|
+
this.formatDisplayValue(cleanValue);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
this.reset();
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
reset() {
|
|
298
|
+
this.el.nativeElement.value = '';
|
|
299
|
+
this.rawValue = '';
|
|
300
|
+
}
|
|
301
|
+
registerOnChange(fn) {
|
|
302
|
+
this.onChange = fn;
|
|
303
|
+
}
|
|
304
|
+
registerOnTouched(fn) {
|
|
305
|
+
this.onTouched = fn;
|
|
306
|
+
}
|
|
307
|
+
setDisabledState(isDisabled) {
|
|
308
|
+
this.el.nativeElement.disabled = isDisabled;
|
|
309
|
+
}
|
|
310
|
+
// Private helper methods
|
|
311
|
+
cleanValue(value) {
|
|
312
|
+
return value
|
|
313
|
+
.toString()
|
|
314
|
+
.replace(new RegExp(`[^\\d${this.escapeRegExp(this.decimalSeparator())}]`, 'g'), '');
|
|
315
|
+
}
|
|
316
|
+
isValidNumber(value) {
|
|
317
|
+
const parts = value.split(this.decimalSeparator());
|
|
318
|
+
return parts.length <= 2 && parts.every(part => /^\d*$/.test(part));
|
|
319
|
+
}
|
|
320
|
+
formatDisplayValue(value) {
|
|
321
|
+
if (!value) {
|
|
322
|
+
this.reset();
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
const parts = value.split(this.decimalSeparator());
|
|
326
|
+
let integerPart = parts[0]
|
|
327
|
+
.replace(/^0+(?=\d)/, '')
|
|
328
|
+
.replace(/\B(?=(\d{3})+(?!\d))/g, this.thousandSeparator());
|
|
329
|
+
const decimalPart = parts.length > 1 ? parts[1].substring(0, this.decimals()) : undefined;
|
|
330
|
+
this.el.nativeElement.value =
|
|
331
|
+
decimalPart !== undefined
|
|
332
|
+
? `${integerPart}${this.decimalSeparator()}${decimalPart}`
|
|
333
|
+
: integerPart;
|
|
334
|
+
}
|
|
335
|
+
updateCursorPosition(originalValue, originalPosition) {
|
|
336
|
+
setTimeout(() => {
|
|
337
|
+
const el = this.el.nativeElement;
|
|
338
|
+
if (originalPosition === originalValue.length) {
|
|
339
|
+
// If cursor was at the end, keep it at the end
|
|
340
|
+
el.setSelectionRange(el.value.length, el.value.length);
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
// Calculate new cursor position based on thousand separators
|
|
344
|
+
const oldSeparatorCount = this.countSeparators(originalValue.substring(0, originalPosition));
|
|
345
|
+
const newValueUpToOldPos = el.value.substring(0, originalPosition + 1);
|
|
346
|
+
const newSeparatorCount = this.countSeparators(newValueUpToOldPos);
|
|
347
|
+
const newPosition = originalPosition + (newSeparatorCount - oldSeparatorCount);
|
|
348
|
+
el.setSelectionRange(newPosition, newPosition);
|
|
349
|
+
}, 0);
|
|
350
|
+
}
|
|
351
|
+
countSeparators(value) {
|
|
352
|
+
const regex = new RegExp(this.escapeRegExp(this.thousandSeparator()), 'g');
|
|
353
|
+
return (value.match(regex) || []).length;
|
|
354
|
+
}
|
|
355
|
+
isDecimalPartFull(value, position) {
|
|
356
|
+
const decimalPos = value.indexOf(this.decimalSeparator());
|
|
357
|
+
return (decimalPos !== -1 &&
|
|
358
|
+
position > decimalPos &&
|
|
359
|
+
value.substring(decimalPos + 1).length >= this.decimals());
|
|
360
|
+
}
|
|
361
|
+
escapeRegExp(str) {
|
|
362
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
363
|
+
}
|
|
364
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NumberFormat, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
365
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: NumberFormat, isStandalone: true, selector: "[numberFormat]", inputs: { decimals: { classPropertyName: "decimals", publicName: "decimals", isSignal: true, isRequired: false, transformFunction: null }, decimalSeparator: { classPropertyName: "decimalSeparator", publicName: "decimalSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandSeparator: { classPropertyName: "thousandSeparator", publicName: "thousandSeparator", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "onInput($event)", "blur": "onBlur()", "keydown": "onKeyDown($event)" } }, providers: [provideValueAccessor(NumberFormat)], ngImport: i0 }); }
|
|
366
|
+
}
|
|
367
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NumberFormat, decorators: [{
|
|
368
|
+
type: Directive,
|
|
369
|
+
args: [{
|
|
370
|
+
selector: '[numberFormat]',
|
|
371
|
+
providers: [provideValueAccessor(NumberFormat)],
|
|
372
|
+
host: {
|
|
373
|
+
'(input)': 'onInput($event)',
|
|
374
|
+
'(blur)': 'onBlur()',
|
|
375
|
+
'(keydown)': 'onKeyDown($event)',
|
|
376
|
+
},
|
|
377
|
+
}]
|
|
378
|
+
}] });
|
|
379
|
+
|
|
205
380
|
/**
|
|
206
381
|
* Generated bundle index. Do not edit.
|
|
207
382
|
*/
|
|
208
383
|
|
|
209
|
-
export { AutoHeight, InputBase, NgbFormField, NgbInputError, NgbLabel, markControlsTouched, toggleDiv };
|
|
384
|
+
export { AutoHeight, InputBase, NgbFormField, NgbInputError, NgbLabel, NumberFormat, markControlsTouched, toggleDiv };
|
|
210
385
|
//# sourceMappingURL=ngbase-adk-form-field.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngbase-adk-form-field.mjs","sources":["../../../projects/adk/form-field/form-field.ts","../../../projects/adk/form-field/error.ts","../../../projects/adk/form-field/input.ts","../../../projects/adk/form-field/auto-height.ts","../../../projects/adk/form-field/label.ts","../../../projects/adk/form-field/ngbase-adk-form-field.ts"],"sourcesContent":["import {\n computed,\n contentChild,\n contentChildren,\n Directive,\n effect,\n forwardRef,\n signal,\n Signal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { uniqueId } from '@ngbase/adk/utils';\nimport { NgbInputError } from './error';\n\n@Directive({\n selector: 'ngb-form-field, [ngbFormField]',\n})\nexport class NgbFormField {\n readonly _control = contentChild(NgControl, { descendants: true });\n readonly _id = uniqueId();\n\n // we need to forwardRef the error component to avoid circular dependency\n readonly status = statusChange(this._control);\n private readonly _invalid = computed(\n () => this.status() === 'INVALID' && this._control()?.touched,\n );\n\n readonly errors = contentChildren<NgbInputError>(forwardRef(() => NgbInputError));\n readonly hasErrors = computed(() => this._invalid() || this.errors().some(e => e.isInvalid()));\n}\n\nfunction statusChange(sControl: Signal<NgControl | undefined>): Signal<string | null> {\n const statusChanges = signal<string | null>(null, { equal: () => false });\n effect(cleanup => {\n const control = sControl();\n if (control) {\n const sub = control.statusChanges?.subscribe(() => {\n statusChanges.set(control.status);\n });\n cleanup(() => sub?.unsubscribe());\n }\n });\n return statusChanges;\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { computed, Directive, inject, input, signal } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { NgbFormField } from './form-field';\n\n@Directive({\n selector: '[ngbError]',\n host: {\n '[hidden]': '!animate() && !isInvalid()',\n },\n})\nexport class NgbInputError {\n private readonly formField = inject(NgbFormField);\n /* the input can have comma separated error names like\n * 'required' or '!required && minlength'\n */\n readonly ngbError = input.required<string>();\n readonly invalid = input<boolean>();\n readonly animate = signal(false);\n\n private readonly errorNames = computed(() => {\n const names = (this.ngbError() ?? '').split('&&');\n return names.reduce(\n (acc, n) => {\n const trimmed = n.trim();\n if (trimmed) {\n const negated = trimmed.startsWith('!');\n acc.push({ name: trimmed.slice(negated ? 1 : 0), negated });\n }\n return acc;\n },\n [] as { name: string; negated: boolean }[],\n );\n });\n\n readonly isFieldInvalid = computed(() => {\n const control = this.formField._control();\n const status = this.formField.status();\n const names = this.errorNames();\n\n return (\n status === 'INVALID' &&\n control?.touched &&\n names.every(n => !!control.errors?.[n.name] !== n.negated)\n );\n });\n\n readonly isInvalid = computed(() => {\n return this.invalid() ?? this.isFieldInvalid();\n });\n}\n\nexport function markControlsTouched(\n control: AbstractControl,\n options = { touched: true, dirty: false },\n) {\n if (control instanceof FormGroup || control instanceof FormArray) {\n Object.values(control.controls).forEach(c => markControlsTouched(c, options));\n }\n if (options.dirty) control.markAsTouched();\n if (options.touched) control.markAsTouched();\n control.updateValueAndValidity();\n}\n\nexport const toggleDiv = trigger('toggleDiv', [\n state('hidden', style({ opacity: 0, height: '0px', visibility: 'hidden' })),\n state('visible', style({ opacity: 1, height: '*', visibility: 'visible' })),\n transition('hidden <=> visible', [animate('150ms ease-in-out')]),\n]);\n","import { Directive, inject, model } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { provideValueAccessor, uniqueId } from '@ngbase/adk/utils';\nimport { NgbFormField } from './form-field';\n\n@Directive({\n selector: '[ngbInputBase]',\n providers: [provideValueAccessor(InputBase)],\n host: {\n role: 'textbox',\n '[attr.id]': 'id',\n '[value]': 'value()',\n '(input)': 'setValue($event.target.value, true)',\n },\n})\nexport class InputBase<T = unknown> implements ControlValueAccessor {\n readonly formField = inject(NgbFormField, { optional: true });\n readonly value = model<T>('' as any);\n\n readonly id = this.formField?._id ?? uniqueId();\n\n onChange?: (_: string) => void;\n onTouched?: () => void;\n\n setValue(value: any, fromInput = false): void {\n this.value.set(value);\n if (fromInput) {\n this.onChange?.(value);\n this.onTouched?.();\n }\n }\n\n writeValue(value: string): void {\n this.setValue(value);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: VoidFunction): void {\n this.onTouched = fn;\n }\n}\n","import { afterNextRender, Directive, effect, ElementRef, inject, Injector } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: 'textarea[ngbAutoHeight]',\n})\nexport class AutoHeight {\n private el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private model = inject(NgControl, { optional: true });\n\n constructor() {\n // Disable textarea resizing\n this.el.nativeElement.style.resize = 'none';\n\n const injector = inject(Injector);\n effect(cleanup => {\n // required for updating the height for the initial value\n this.update();\n\n const sub = this.model?.valueChanges?.subscribe(v => {\n if (v === this.el.nativeElement.value) {\n this.update();\n } else {\n // Wait for Angular to update the DOM with the new value\n // Use a settimeout to wait for the next tick\n afterNextRender(() => this.update(), { injector });\n }\n });\n cleanup(() => sub?.unsubscribe());\n\n const ro = new ResizeObserver(entries => {\n for (let entry of entries) {\n this.update();\n }\n });\n\n // Observe one or multiple elements\n ro.observe(this.el.nativeElement);\n cleanup(() => ro.disconnect());\n });\n }\n\n private update() {\n const el = this.el.nativeElement;\n el.style.height = 'auto';\n // also we need to consider the border so we need to calculate the border using height\n const borderHeight = el.offsetHeight - el.clientHeight;\n el.style.height = el.scrollHeight + borderHeight + 'px';\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { NgbFormField } from './form-field';\n\n@Directive({\n selector: '[ngbLabel]',\n host: {\n '[attr.for]': 'id',\n },\n})\nexport class NgbLabel {\n private readonly formField = inject(NgbFormField);\n readonly id = this.formField._id;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngbase-adk-form-field.mjs","sources":["../../../projects/adk/form-field/form-field.ts","../../../projects/adk/form-field/error.ts","../../../projects/adk/form-field/input.ts","../../../projects/adk/form-field/auto-height.ts","../../../projects/adk/form-field/label.ts","../../../projects/adk/form-field/currency-mask.ng.ts","../../../projects/adk/form-field/ngbase-adk-form-field.ts"],"sourcesContent":["import {\n computed,\n contentChild,\n contentChildren,\n Directive,\n effect,\n forwardRef,\n signal,\n Signal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { uniqueId } from '@ngbase/adk/utils';\nimport { NgbInputError } from './error';\n\n@Directive({\n selector: 'ngb-form-field, [ngbFormField]',\n})\nexport class NgbFormField {\n readonly _control = contentChild(NgControl, { descendants: true });\n readonly _id = uniqueId();\n\n // we need to forwardRef the error component to avoid circular dependency\n readonly status = statusChange(this._control);\n private readonly _invalid = computed(\n () => this.status() === 'INVALID' && this._control()?.touched,\n );\n\n readonly errors = contentChildren<NgbInputError>(forwardRef(() => NgbInputError));\n readonly hasErrors = computed(() => this._invalid() || this.errors().some(e => e.isInvalid()));\n}\n\nfunction statusChange(sControl: Signal<NgControl | undefined>): Signal<string | null> {\n const statusChanges = signal<string | null>(null, { equal: () => false });\n effect(cleanup => {\n const control = sControl();\n if (control) {\n const sub = control.statusChanges?.subscribe(() => {\n statusChanges.set(control.status);\n });\n cleanup(() => sub?.unsubscribe());\n }\n });\n return statusChanges;\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { computed, Directive, inject, input, signal } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { NgbFormField } from './form-field';\n\n@Directive({\n selector: '[ngbError]',\n host: {\n '[hidden]': '!animate() && !isInvalid()',\n },\n})\nexport class NgbInputError {\n private readonly formField = inject(NgbFormField);\n /* the input can have comma separated error names like\n * 'required' or '!required && minlength'\n */\n readonly ngbError = input.required<string>();\n readonly invalid = input<boolean>();\n readonly animate = signal(false);\n\n private readonly errorNames = computed(() => {\n const names = (this.ngbError() ?? '').split('&&');\n return names.reduce(\n (acc, n) => {\n const trimmed = n.trim();\n if (trimmed) {\n const negated = trimmed.startsWith('!');\n acc.push({ name: trimmed.slice(negated ? 1 : 0), negated });\n }\n return acc;\n },\n [] as { name: string; negated: boolean }[],\n );\n });\n\n readonly isFieldInvalid = computed(() => {\n const control = this.formField._control();\n const status = this.formField.status();\n const names = this.errorNames();\n\n return (\n status === 'INVALID' &&\n control?.touched &&\n names.every(n => !!control.errors?.[n.name] !== n.negated)\n );\n });\n\n readonly isInvalid = computed(() => {\n return this.invalid() ?? this.isFieldInvalid();\n });\n}\n\nexport function markControlsTouched(\n control: AbstractControl,\n options = { touched: true, dirty: false },\n) {\n if (control instanceof FormGroup || control instanceof FormArray) {\n Object.values(control.controls).forEach(c => markControlsTouched(c, options));\n }\n if (options.dirty) control.markAsTouched();\n if (options.touched) control.markAsTouched();\n control.updateValueAndValidity();\n}\n\nexport const toggleDiv = trigger('toggleDiv', [\n state('hidden', style({ opacity: 0, height: '0px', visibility: 'hidden' })),\n state('visible', style({ opacity: 1, height: '*', visibility: 'visible' })),\n transition('hidden <=> visible', [animate('150ms ease-in-out')]),\n]);\n","import { Directive, inject, model } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { provideValueAccessor, uniqueId } from '@ngbase/adk/utils';\nimport { NgbFormField } from './form-field';\n\n@Directive({\n selector: 'input[ngbInputBase]',\n providers: [provideValueAccessor(InputBase)],\n host: {\n role: 'textbox',\n '[attr.id]': 'id',\n '[value]': 'value()',\n '(input)': 'setInputValue($event)',\n },\n})\nexport class InputBase<T = unknown> implements ControlValueAccessor {\n readonly formField = inject(NgbFormField, { optional: true });\n readonly value = model<T>('' as any);\n\n readonly id = this.formField?._id ?? uniqueId();\n\n onChange?: (_: string) => void;\n onTouched?: () => void;\n\n protected setInputValue(ev: Event): void {\n const value = (ev.target as HTMLInputElement).value;\n this.setValue(value, true);\n }\n\n setValue(value: any, fromInput = false): void {\n this.value.set(value);\n if (fromInput) {\n this.onChange?.(value);\n this.onTouched?.();\n }\n }\n\n writeValue(value: string): void {\n this.setValue(value);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: VoidFunction): void {\n this.onTouched = fn;\n }\n}\n","import {\n afterNextRender,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { InputBase } from './input';\n\n@Directive({\n selector: 'textarea[ngbAutoHeight]',\n})\nexport class AutoHeight {\n private el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private model = inject(NgControl, { optional: true });\n private ngbInput = inject(InputBase, { optional: true });\n\n readonly maxHeight = input<number>();\n\n constructor() {\n // Disable textarea resizing\n this.el.nativeElement.style.resize = 'none';\n\n const injector = inject(Injector);\n effect(cleanup => {\n // required for updating the height for the initial value\n this.update();\n\n const sub = this.model?.valueChanges?.subscribe(v => {\n if (v === this.el.nativeElement.value) {\n this.update();\n } else {\n // Wait for Angular to update the DOM with the new value\n // Use a settimeout to wait for the next tick\n afterNextRender(() => this.update(), { injector });\n }\n });\n cleanup(() => sub?.unsubscribe());\n\n const ro = new ResizeObserver(entries => {\n for (let entry of entries) {\n this.update();\n }\n });\n\n // Observe one or multiple elements\n ro.observe(this.el.nativeElement);\n cleanup(() => ro.disconnect());\n });\n\n effect(() => {\n const _ = this.ngbInput?.value();\n this.update();\n });\n }\n\n private update() {\n const el = this.el.nativeElement;\n el.style.height = 'auto';\n // also we need to consider the border so we need to calculate the border using height\n const borderHeight = el.offsetHeight - el.clientHeight;\n const height = el.scrollHeight + borderHeight;\n const maxHeight = this.maxHeight();\n if (maxHeight) {\n el.style.height = Math.min(height, maxHeight) + 'px';\n } else {\n el.style.height = height + 'px';\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { NgbFormField } from './form-field';\n\n@Directive({\n selector: '[ngbLabel]',\n host: {\n '[attr.for]': 'id',\n },\n})\nexport class NgbLabel {\n private readonly formField = inject(NgbFormField);\n readonly id = this.formField._id;\n}\n","import { Directive, ElementRef, input, inject } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { provideValueAccessor } from '@ngbase/adk/utils';\n\n@Directive({\n selector: '[numberFormat]',\n providers: [provideValueAccessor(NumberFormat)],\n host: {\n '(input)': 'onInput($event)',\n '(blur)': 'onBlur()',\n '(keydown)': 'onKeyDown($event)',\n },\n})\nexport class NumberFormat implements ControlValueAccessor {\n // Input signals with default values\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n readonly decimals = input<number>(2);\n readonly decimalSeparator = input<string>('.');\n readonly thousandSeparator = input<string>(',');\n\n // Private members\n private onChange = (_: any) => {};\n private onTouched = () => {};\n private rawValue = '';\n\n private readonly specialKeys = [\n 'Backspace',\n 'Tab',\n 'End',\n 'Home',\n 'ArrowLeft',\n 'ArrowRight',\n 'Delete',\n ];\n\n // Handles input changes\n onInput(ev: Event) {\n const value = (ev.target as any).value.toString();\n const position = this.el.nativeElement.selectionStart;\n const cleanedValue = this.cleanValue(value);\n\n if (this.isValidNumber(cleanedValue)) {\n this.rawValue = cleanedValue;\n this.formatDisplayValue(cleanedValue);\n this.onChange(this.rawValue);\n this.onTouched();\n this.updateCursorPosition(value, position ?? 0);\n }\n }\n\n // Handles keydown events to validate input\n onKeyDown(event: KeyboardEvent) {\n if (this.specialKeys.includes(event.key)) return;\n\n const value = this.el.nativeElement.value;\n const position = this.el.nativeElement.selectionStart;\n\n // Handle decimal separator\n if (event.key === this.decimalSeparator()) {\n if (value.includes(this.decimalSeparator())) {\n event.preventDefault();\n }\n return;\n }\n\n // Only allow digits\n if (!/^\\d$/.test(event.key)) {\n event.preventDefault();\n return;\n }\n\n // Check decimal digits limit\n if (this.isDecimalPartFull(value, position ?? 0)) {\n event.preventDefault();\n }\n }\n\n // Handle blur event\n onBlur() {\n if (this.rawValue) {\n this.formatDisplayValue(this.rawValue);\n }\n this.onTouched();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: string) {\n if (value) {\n const cleanValue = this.cleanValue(value);\n this.rawValue = cleanValue;\n this.formatDisplayValue(cleanValue);\n } else {\n this.reset();\n }\n }\n\n private reset() {\n this.el.nativeElement.value = '';\n this.rawValue = '';\n }\n\n registerOnChange(fn: any) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.el.nativeElement.disabled = isDisabled;\n }\n\n // Private helper methods\n private cleanValue(value: string | number): string {\n return value\n .toString()\n .replace(new RegExp(`[^\\\\d${this.escapeRegExp(this.decimalSeparator())}]`, 'g'), '');\n }\n\n private isValidNumber(value: string): boolean {\n const parts = value.split(this.decimalSeparator());\n return parts.length <= 2 && parts.every(part => /^\\d*$/.test(part));\n }\n\n private formatDisplayValue(value: string) {\n if (!value) {\n this.reset();\n return;\n }\n\n const parts = value.split(this.decimalSeparator());\n let integerPart = parts[0]\n .replace(/^0+(?=\\d)/, '')\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandSeparator());\n const decimalPart = parts.length > 1 ? parts[1].substring(0, this.decimals()) : undefined;\n\n this.el.nativeElement.value =\n decimalPart !== undefined\n ? `${integerPart}${this.decimalSeparator()}${decimalPart}`\n : integerPart;\n }\n\n private updateCursorPosition(originalValue: string, originalPosition: number) {\n setTimeout(() => {\n const el = this.el.nativeElement;\n if (originalPosition === originalValue.length) {\n // If cursor was at the end, keep it at the end\n el.setSelectionRange(el.value.length, el.value.length);\n return;\n }\n\n // Calculate new cursor position based on thousand separators\n const oldSeparatorCount = this.countSeparators(originalValue.substring(0, originalPosition));\n const newValueUpToOldPos = el.value.substring(0, originalPosition + 1);\n const newSeparatorCount = this.countSeparators(newValueUpToOldPos);\n\n const newPosition = originalPosition + (newSeparatorCount - oldSeparatorCount);\n el.setSelectionRange(newPosition, newPosition);\n }, 0);\n }\n\n private countSeparators(value: string): number {\n const regex = new RegExp(this.escapeRegExp(this.thousandSeparator()), 'g');\n return (value.match(regex) || []).length;\n }\n\n private isDecimalPartFull(value: string, position: number): boolean {\n const decimalPos = value.indexOf(this.decimalSeparator());\n return (\n decimalPos !== -1 &&\n position > decimalPos &&\n value.substring(decimalPos + 1).length >= this.decimals()\n );\n }\n\n private escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,9 @@ class NgbHoverCard {
|
|
|
6
6
|
constructor() {
|
|
7
7
|
this.popoverPortal = ngbPopoverPortal();
|
|
8
8
|
this.el = inject(ElementRef);
|
|
9
|
-
this.ngbHoverCard = input.required();
|
|
10
|
-
this.options = input();
|
|
11
|
-
this.delay = input(400, { transform: numberAttribute });
|
|
9
|
+
this.ngbHoverCard = input.required(...(ngDevMode ? [{ debugName: "ngbHoverCard" }] : []));
|
|
10
|
+
this.options = input(...(ngDevMode ? [undefined, { debugName: "options" }] : []));
|
|
11
|
+
this.delay = input(400, ...(ngDevMode ? [{ debugName: "delay", transform: numberAttribute }] : [{ transform: numberAttribute }]));
|
|
12
12
|
this.close = null;
|
|
13
13
|
}
|
|
14
14
|
open() {
|
|
@@ -52,10 +52,10 @@ class NgbHoverCard {
|
|
|
52
52
|
this.outTimer = null;
|
|
53
53
|
}, this.delay());
|
|
54
54
|
}
|
|
55
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
56
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbHoverCard, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
56
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: NgbHoverCard, isStandalone: true, selector: "[ngbHoverCard]", inputs: { ngbHoverCard: { classPropertyName: "ngbHoverCard", publicName: "ngbHoverCard", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "open()", "mouseleave": "closePopup()" } }, exportAs: ["ngbHoverCard"], ngImport: i0 }); }
|
|
57
57
|
}
|
|
58
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbHoverCard, decorators: [{
|
|
59
59
|
type: Directive,
|
|
60
60
|
args: [{
|
|
61
61
|
selector: '[ngbHoverCard]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngbase-adk-hover-card.mjs","sources":["../../../projects/adk/hover-card/hover-card.ts","../../../projects/adk/hover-card/public-api.ts","../../../projects/adk/hover-card/ngbase-adk-hover-card.ts"],"sourcesContent":["import { Directive, ElementRef, TemplateRef, inject, input, numberAttribute } from '@angular/core';\nimport { DialogRef } from '@ngbase/adk/portal';\nimport { PopoverOptions, ngbPopoverPortal } from '@ngbase/adk/popover';\n\n@Directive({\n selector: '[ngbHoverCard]',\n exportAs: 'ngbHoverCard',\n host: {\n '(mouseenter)': 'open()',\n '(mouseleave)': 'closePopup()',\n },\n})\nexport class NgbHoverCard<T = any> {\n private popoverPortal = ngbPopoverPortal();\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly ngbHoverCard = input.required<TemplateRef<T>>();\n readonly options = input<PopoverOptions>();\n readonly delay = input(400, { transform: numberAttribute });\n\n private close: DialogRef | null = null;\n private inTimer: any;\n private outTimer: any;\n\n open() {\n // if the user is hovering over the popover, we don't want to open a new one\n if (this.outTimer) {\n this.resetOut();\n return;\n }\n\n // we need to delay the opening of the popover to ensure that the user is hovering over the popover\n this.inTimer = setTimeout(() => {\n const options = this.options() ?? {};\n const { diaRef, events } = this.popoverPortal.open(this.ngbHoverCard(), {\n target: this.el.nativeElement,\n position: 'top',\n backdrop: false,\n ...options,\n });\n this.close = diaRef;\n events.subscribe(e => {\n if (e.type === 'mouseleave') {\n this.closePopup();\n } else {\n this.resetOut();\n }\n });\n }, this.delay());\n }\n\n private resetOut() {\n clearTimeout(this.outTimer);\n this.outTimer = null;\n }\n\n closePopup() {\n clearTimeout(this.inTimer);\n this.inTimer = null;\n if (!this.close) return;\n this.outTimer = setTimeout(() => {\n this.close?.close();\n this.close = null;\n this.outTimer = null;\n }, this.delay());\n }\n}\n","/*\n * Public API Surface of hover-card\n */\n\nexport * from './hover-card';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAYa,YAAY,CAAA;AARzB,IAAA,WAAA,GAAA;QASU,IAAa,CAAA,aAAA,GAAG,gBAAgB,EAAE;AAClC,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAE/C,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"ngbase-adk-hover-card.mjs","sources":["../../../projects/adk/hover-card/hover-card.ts","../../../projects/adk/hover-card/public-api.ts","../../../projects/adk/hover-card/ngbase-adk-hover-card.ts"],"sourcesContent":["import { Directive, ElementRef, TemplateRef, inject, input, numberAttribute } from '@angular/core';\nimport { DialogRef } from '@ngbase/adk/portal';\nimport { PopoverOptions, ngbPopoverPortal } from '@ngbase/adk/popover';\n\n@Directive({\n selector: '[ngbHoverCard]',\n exportAs: 'ngbHoverCard',\n host: {\n '(mouseenter)': 'open()',\n '(mouseleave)': 'closePopup()',\n },\n})\nexport class NgbHoverCard<T = any> {\n private popoverPortal = ngbPopoverPortal();\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly ngbHoverCard = input.required<TemplateRef<T>>();\n readonly options = input<PopoverOptions>();\n readonly delay = input(400, { transform: numberAttribute });\n\n private close: DialogRef | null = null;\n private inTimer: any;\n private outTimer: any;\n\n open() {\n // if the user is hovering over the popover, we don't want to open a new one\n if (this.outTimer) {\n this.resetOut();\n return;\n }\n\n // we need to delay the opening of the popover to ensure that the user is hovering over the popover\n this.inTimer = setTimeout(() => {\n const options = this.options() ?? {};\n const { diaRef, events } = this.popoverPortal.open(this.ngbHoverCard(), {\n target: this.el.nativeElement,\n position: 'top',\n backdrop: false,\n ...options,\n });\n this.close = diaRef;\n events.subscribe(e => {\n if (e.type === 'mouseleave') {\n this.closePopup();\n } else {\n this.resetOut();\n }\n });\n }, this.delay());\n }\n\n private resetOut() {\n clearTimeout(this.outTimer);\n this.outTimer = null;\n }\n\n closePopup() {\n clearTimeout(this.inTimer);\n this.inTimer = null;\n if (!this.close) return;\n this.outTimer = setTimeout(() => {\n this.close?.close();\n this.close = null;\n this.outTimer = null;\n }, this.delay());\n }\n}\n","/*\n * Public API Surface of hover-card\n */\n\nexport * from './hover-card';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -47,10 +47,10 @@ class IconService {
|
|
|
47
47
|
}
|
|
48
48
|
return pendingRequest;
|
|
49
49
|
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
51
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: IconService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
51
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: IconService, providedIn: 'root' }); }
|
|
52
52
|
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: IconService, decorators: [{
|
|
54
54
|
type: Injectable,
|
|
55
55
|
args: [{ providedIn: 'root' }]
|
|
56
56
|
}] });
|
|
@@ -59,20 +59,20 @@ class NgbIcon {
|
|
|
59
59
|
constructor() {
|
|
60
60
|
this.service = inject(IconService);
|
|
61
61
|
this.sanitizer = inject(DomSanitizer);
|
|
62
|
-
this.name = input.required();
|
|
62
|
+
this.name = input.required(...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
63
63
|
this.icon = resource({
|
|
64
|
-
|
|
65
|
-
loader: ({ request }) => this.service.getIcon(request),
|
|
64
|
+
params: this.name,
|
|
65
|
+
loader: ({ params: request }) => this.service.getIcon(request),
|
|
66
66
|
});
|
|
67
67
|
this.svg = computed(() => {
|
|
68
68
|
const txt = this.icon.value() || '';
|
|
69
69
|
return this.sanitizer.bypassSecurityTrustHtml(txt);
|
|
70
|
-
});
|
|
70
|
+
}, ...(ngDevMode ? [{ debugName: "svg" }] : []));
|
|
71
71
|
}
|
|
72
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
73
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
72
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
73
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: NgbIcon, isStandalone: true, selector: "[ngbIcon]", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "innerHTML": "svg()" } }, ngImport: i0 }); }
|
|
74
74
|
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbIcon, decorators: [{
|
|
76
76
|
type: Directive,
|
|
77
77
|
args: [{
|
|
78
78
|
selector: '[ngbIcon]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngbase-adk-icon.mjs","sources":["../../../projects/adk/icon/icon.service.ts","../../../projects/adk/icon/icon.ts","../../../projects/adk/icon/ngbase-adk-icon.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nexport type IconLoaderFn = (name: string) => Promise<string>;\n\nexport const ICON_LOADER = new InjectionToken<IconLoaderFn>('ICON_LOADER', {\n providedIn: 'root',\n factory: iconLoader,\n});\n\nfunction iconLoader(): IconLoaderFn {\n const http = inject(HttpClient, { optional: true });\n return async (name: string) => {\n try {\n if (http) {\n const icon = await firstValueFrom(\n http?.get(`/icons/${name}.svg`, { responseType: 'text' }),\n );\n return icon;\n }\n } catch {}\n return '';\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class IconService {\n readonly loader = inject(ICON_LOADER);\n readonly icons = new Map<string, string>();\n private readonly pendingRequests = new Map<string, Promise<string>>();\n\n async getIcon(name: string): Promise<string> {\n const cachedIcon = this.icons.get(name);\n\n if (cachedIcon) {\n return cachedIcon;\n }\n\n let pendingRequest = this.pendingRequests.get(name);\n if (!pendingRequest) {\n pendingRequest = this.loader(name);\n this.pendingRequests.set(name, pendingRequest);\n\n try {\n const icon = await pendingRequest;\n this.icons.set(name, icon);\n return icon;\n } finally {\n this.pendingRequests.delete(name);\n }\n }\n\n return pendingRequest;\n }\n}\n","import { computed, Directive, inject, input, resource } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { IconService } from './icon.service';\n\n@Directive({\n selector: '[ngbIcon]',\n host: {\n '[innerHTML]': 'svg()',\n },\n})\nexport class NgbIcon {\n readonly service = inject(IconService);\n readonly sanitizer = inject(DomSanitizer);\n\n readonly name = input.required<string>();\n\n private readonly icon = resource({\n
|
|
1
|
+
{"version":3,"file":"ngbase-adk-icon.mjs","sources":["../../../projects/adk/icon/icon.service.ts","../../../projects/adk/icon/icon.ts","../../../projects/adk/icon/ngbase-adk-icon.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nexport type IconLoaderFn = (name: string) => Promise<string>;\n\nexport const ICON_LOADER = new InjectionToken<IconLoaderFn>('ICON_LOADER', {\n providedIn: 'root',\n factory: iconLoader,\n});\n\nfunction iconLoader(): IconLoaderFn {\n const http = inject(HttpClient, { optional: true });\n return async (name: string) => {\n try {\n if (http) {\n const icon = await firstValueFrom(\n http?.get(`/icons/${name}.svg`, { responseType: 'text' }),\n );\n return icon;\n }\n } catch {}\n return '';\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class IconService {\n readonly loader = inject(ICON_LOADER);\n readonly icons = new Map<string, string>();\n private readonly pendingRequests = new Map<string, Promise<string>>();\n\n async getIcon(name: string): Promise<string> {\n const cachedIcon = this.icons.get(name);\n\n if (cachedIcon) {\n return cachedIcon;\n }\n\n let pendingRequest = this.pendingRequests.get(name);\n if (!pendingRequest) {\n pendingRequest = this.loader(name);\n this.pendingRequests.set(name, pendingRequest);\n\n try {\n const icon = await pendingRequest;\n this.icons.set(name, icon);\n return icon;\n } finally {\n this.pendingRequests.delete(name);\n }\n }\n\n return pendingRequest;\n }\n}\n","import { computed, Directive, inject, input, resource } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { IconService } from './icon.service';\n\n@Directive({\n selector: '[ngbIcon]',\n host: {\n '[innerHTML]': 'svg()',\n },\n})\nexport class NgbIcon {\n readonly service = inject(IconService);\n readonly sanitizer = inject(DomSanitizer);\n\n readonly name = input.required<string>();\n\n private readonly icon = resource({\n params: this.name,\n loader: ({ params: request }) => this.service.getIcon(request),\n });\n\n readonly svg = computed(() => {\n const txt = this.icon.value() || '';\n return this.sanitizer.bypassSecurityTrustHtml(txt);\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|