@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
|
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { inject, Directive, ElementRef, viewChild, input, output, linkedSignal, signal } from '@angular/core';
|
|
3
3
|
import * as i1 from '@ngbase/adk/form-field';
|
|
4
4
|
import { InputBase } from '@ngbase/adk/form-field';
|
|
5
|
-
import { disposals,
|
|
5
|
+
import { disposals, provideValueAccessor } from '@ngbase/adk/utils';
|
|
6
6
|
|
|
7
7
|
class NgbInlineInput {
|
|
8
8
|
constructor() {
|
|
@@ -13,13 +13,13 @@ class NgbInlineInput {
|
|
|
13
13
|
this.ie.updateValue(v);
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
17
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInlineInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.0", type: NgbInlineInput, isStandalone: true, selector: "[ngbInlineInput]", host: { listeners: { "blur": "ie.onBlur()", "keydown.enter": "ie.onEnter($event)", "keydown.escape": "ie.onEnter($event)" }, properties: { "style.width.px": "ie.inputWidth()" } }, hostDirectives: [{ directive: i1.InputBase }], ngImport: i0 }); }
|
|
18
18
|
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInlineInput, decorators: [{
|
|
20
20
|
type: Directive,
|
|
21
21
|
args: [{
|
|
22
|
-
selector: '
|
|
22
|
+
selector: '[ngbInlineInput]',
|
|
23
23
|
hostDirectives: [InputBase],
|
|
24
24
|
host: {
|
|
25
25
|
'(blur)': 'ie.onBlur()',
|
|
@@ -33,10 +33,10 @@ class NgbInlineValue {
|
|
|
33
33
|
constructor() {
|
|
34
34
|
this.ie = inject(NgbInlineEdit);
|
|
35
35
|
}
|
|
36
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
37
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
36
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInlineValue, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
37
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.0", type: NgbInlineValue, isStandalone: true, selector: "[ngbInlineValue]", host: { listeners: { "click": "ie.onClick()", "dblclick": "ie.onDoubleClick()" } }, ngImport: i0 }); }
|
|
38
38
|
}
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInlineValue, decorators: [{
|
|
40
40
|
type: Directive,
|
|
41
41
|
args: [{
|
|
42
42
|
selector: '[ngbInlineValue]',
|
|
@@ -51,22 +51,18 @@ class NgbInlineEdit {
|
|
|
51
51
|
// Dependencies
|
|
52
52
|
this.el = inject(ElementRef);
|
|
53
53
|
this.disposals = disposals();
|
|
54
|
-
this.inputElement = viewChild(NgbInlineInput, {
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
this.inputElement = viewChild(NgbInlineInput, ...(ngDevMode ? [{ debugName: "inputElement", read: ElementRef }] : [{
|
|
55
|
+
read: ElementRef,
|
|
56
|
+
}]));
|
|
57
57
|
// Inputs
|
|
58
|
-
this.value = input('');
|
|
59
|
-
this.editOn = input('dblclick');
|
|
58
|
+
this.value = input('', ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
59
|
+
this.editOn = input('dblclick', ...(ngDevMode ? [{ debugName: "editOn" }] : []));
|
|
60
60
|
this.valueChange = output();
|
|
61
|
+
this.afterEdit = output();
|
|
61
62
|
// State
|
|
62
63
|
this.localValue = linkedSignal(this.value);
|
|
63
|
-
this.isEditing = signal(false);
|
|
64
|
-
this.inputWidth = signal(0);
|
|
65
|
-
documentListener('click', (ev) => {
|
|
66
|
-
if (this.isEditing() && !this.el.nativeElement.contains(ev.target)) {
|
|
67
|
-
this.onBlur();
|
|
68
|
-
}
|
|
69
|
-
});
|
|
64
|
+
this.isEditing = signal(false, ...(ngDevMode ? [{ debugName: "isEditing" }] : []));
|
|
65
|
+
this.inputWidth = signal(0, ...(ngDevMode ? [{ debugName: "inputWidth" }] : []));
|
|
70
66
|
}
|
|
71
67
|
onClick() {
|
|
72
68
|
if (this.editOn() === 'click') {
|
|
@@ -85,6 +81,9 @@ class NgbInlineEdit {
|
|
|
85
81
|
}
|
|
86
82
|
onBlur() {
|
|
87
83
|
this.isEditing.set(false);
|
|
84
|
+
if (this.localValue() !== this.value()) {
|
|
85
|
+
this.afterEdit.emit(this.localValue());
|
|
86
|
+
}
|
|
88
87
|
}
|
|
89
88
|
onEnter(ev) {
|
|
90
89
|
ev.stopPropagation();
|
|
@@ -105,23 +104,26 @@ class NgbInlineEdit {
|
|
|
105
104
|
writeValue(value) {
|
|
106
105
|
this.localValue.set(value);
|
|
107
106
|
}
|
|
108
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
109
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "
|
|
107
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInlineEdit, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
108
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.2.0", type: NgbInlineEdit, isStandalone: true, selector: "[ngbInlineEdit]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, editOn: { classPropertyName: "editOn", publicName: "editOn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", afterEdit: "afterEdit" }, providers: [_provide()], viewQueries: [{ propertyName: "inputElement", first: true, predicate: NgbInlineInput, descendants: true, read: ElementRef, isSignal: true }], ngImport: i0 }); }
|
|
110
109
|
}
|
|
111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInlineEdit, decorators: [{
|
|
112
111
|
type: Directive,
|
|
113
112
|
args: [{
|
|
114
113
|
selector: '[ngbInlineEdit]',
|
|
115
|
-
providers: [
|
|
114
|
+
providers: [_provide()],
|
|
116
115
|
}]
|
|
117
|
-
}]
|
|
118
|
-
function
|
|
116
|
+
}] });
|
|
117
|
+
function _provide() {
|
|
119
118
|
return provideValueAccessor(NgbInlineEdit);
|
|
120
119
|
}
|
|
120
|
+
function aliasInlineEdit(inlineEdit) {
|
|
121
|
+
return [_provide(), { provide: NgbInlineEdit, useExisting: inlineEdit }];
|
|
122
|
+
}
|
|
121
123
|
|
|
122
124
|
/**
|
|
123
125
|
* Generated bundle index. Do not edit.
|
|
124
126
|
*/
|
|
125
127
|
|
|
126
|
-
export { NgbInlineEdit, NgbInlineInput, NgbInlineValue,
|
|
128
|
+
export { NgbInlineEdit, NgbInlineInput, NgbInlineValue, aliasInlineEdit };
|
|
127
129
|
//# sourceMappingURL=ngbase-adk-inline-edit.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngbase-adk-inline-edit.mjs","sources":["../../../projects/adk/inline-edit/inline-edit.ts","../../../projects/adk/inline-edit/ngbase-adk-inline-edit.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { InputBase } from '@ngbase/adk/form-field';\nimport { disposals,
|
|
1
|
+
{"version":3,"file":"ngbase-adk-inline-edit.mjs","sources":["../../../projects/adk/inline-edit/inline-edit.ts","../../../projects/adk/inline-edit/ngbase-adk-inline-edit.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { InputBase } from '@ngbase/adk/form-field';\nimport { disposals, provideValueAccessor } from '@ngbase/adk/utils';\n\n@Directive({\n selector: '[ngbInlineInput]',\n hostDirectives: [InputBase],\n host: {\n '(blur)': 'ie.onBlur()',\n '(keydown.enter)': 'ie.onEnter($event)',\n '(keydown.escape)': 'ie.onEnter($event)',\n '[style.width.px]': 'ie.inputWidth()',\n },\n})\nexport class NgbInlineInput {\n readonly ie = inject(NgbInlineEdit);\n readonly inputBase = inject(InputBase);\n\n constructor() {\n this.inputBase.value.set(this.ie.localValue());\n this.inputBase.value.subscribe(v => {\n this.ie.updateValue(v);\n });\n }\n}\n\n@Directive({\n selector: '[ngbInlineValue]',\n host: {\n '(click)': 'ie.onClick()',\n '(dblclick)': 'ie.onDoubleClick()',\n },\n})\nexport class NgbInlineValue {\n readonly ie = inject(NgbInlineEdit);\n}\n\n@Directive({\n selector: '[ngbInlineEdit]',\n providers: [_provide()],\n})\nexport class NgbInlineEdit implements ControlValueAccessor {\n // Dependencies\n private readonly el = inject(ElementRef);\n private readonly disposals = disposals();\n readonly inputElement = viewChild<NgbInlineInput, ElementRef>(NgbInlineInput, {\n read: ElementRef,\n });\n\n // Inputs\n readonly value = input('');\n readonly editOn = input<'click' | 'dblclick'>('dblclick');\n readonly valueChange = output<string>();\n readonly afterEdit = output<string>();\n\n // State\n readonly localValue = linkedSignal(this.value);\n readonly isEditing = signal(false);\n readonly inputWidth = signal(0);\n onChange?: (value: string) => void;\n onTouched?: () => void;\n\n onClick() {\n if (this.editOn() === 'click') {\n this.startEditing();\n }\n }\n\n onDoubleClick() {\n if (this.editOn() === 'dblclick') {\n this.startEditing();\n }\n }\n\n startEditing() {\n this.isEditing.set(true);\n this.inputWidth.set(this.el.nativeElement.offsetWidth);\n this.disposals.afterNextRender(() => this.inputElement()?.nativeElement.focus());\n }\n\n onBlur() {\n this.isEditing.set(false);\n if (this.localValue() !== this.value()) {\n this.afterEdit.emit(this.localValue());\n }\n }\n\n onEnter(ev: Event) {\n ev.stopPropagation();\n this.onBlur();\n }\n\n updateValue(newValue: string) {\n this.localValue.set(newValue);\n this.valueChange.emit(newValue);\n this.onChange?.(newValue);\n this.onTouched?.();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n writeValue(value: string): void {\n this.localValue.set(value);\n }\n}\n\nfunction _provide() {\n return provideValueAccessor(NgbInlineEdit);\n}\n\nexport function aliasInlineEdit(inlineEdit: typeof NgbInlineEdit) {\n return [_provide(), { provide: NgbInlineEdit, useExisting: inlineEdit }];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -52,10 +52,10 @@ class JwtService {
|
|
|
52
52
|
}
|
|
53
53
|
return atob(input);
|
|
54
54
|
}
|
|
55
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
56
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: JwtService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
56
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: JwtService, providedIn: 'root' }); }
|
|
57
57
|
}
|
|
58
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: JwtService, decorators: [{
|
|
59
59
|
type: Injectable,
|
|
60
60
|
args: [{ providedIn: 'root' }]
|
|
61
61
|
}] });
|
|
@@ -73,10 +73,10 @@ class JwtInterceptor {
|
|
|
73
73
|
}
|
|
74
74
|
return next.handle(req);
|
|
75
75
|
}
|
|
76
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
77
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
76
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: JwtInterceptor, deps: [{ token: JwtService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
77
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: JwtInterceptor, providedIn: 'root' }); }
|
|
78
78
|
}
|
|
79
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
80
80
|
type: Injectable,
|
|
81
81
|
args: [{ providedIn: 'root' }]
|
|
82
82
|
}], ctorParameters: () => [{ type: JwtService }] });
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
|
2
1
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject, Injectable, runInInjectionContext, Injector, DestroyRef } from '@angular/core';
|
|
2
|
+
import { inject, DOCUMENT, Injectable, runInInjectionContext, Injector, DestroyRef } from '@angular/core';
|
|
4
3
|
import { fromEvent, merge, tap, finalize, share, map, filter, distinctUntilKeyChanged } from 'rxjs';
|
|
5
4
|
import { isClient, documentListener, uniqueId } from '@ngbase/adk/utils';
|
|
6
5
|
|
|
@@ -45,10 +44,10 @@ class Keys {
|
|
|
45
44
|
isKey(key) {
|
|
46
45
|
return this.keys.has(key);
|
|
47
46
|
}
|
|
48
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
49
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
47
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Keys, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
48
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Keys, providedIn: 'root' }); }
|
|
50
49
|
}
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Keys, decorators: [{
|
|
52
51
|
type: Injectable,
|
|
53
52
|
args: [{ providedIn: 'root' }]
|
|
54
53
|
}] });
|
|
@@ -182,10 +181,10 @@ class Shortcuts {
|
|
|
182
181
|
this.keydown.on();
|
|
183
182
|
}
|
|
184
183
|
}
|
|
185
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
186
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
184
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Shortcuts, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
185
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Shortcuts, providedIn: 'root' }); }
|
|
187
186
|
}
|
|
188
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Shortcuts, decorators: [{
|
|
189
188
|
type: Injectable,
|
|
190
189
|
args: [{
|
|
191
190
|
providedIn: 'root',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngbase-adk-keys.mjs","sources":["../../../projects/adk/keys/keys.service.ts","../../../projects/adk/keys/shortcuts.service.ts","../../../projects/adk/keys/public-api.ts","../../../projects/adk/keys/ngbase-adk-keys.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\nimport { fromEvent, merge, distinctUntilKeyChanged, filter, finalize, map, share, tap } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class Keys {\n private document = inject(DOCUMENT);\n private keyup$ = fromEvent<KeyboardEvent>(this.document, 'keyup');\n private keydown$ = fromEvent<KeyboardEvent>(this.document, 'keydown');\n private keypress$ = merge(this.keyup$, this.keydown$).pipe(\n tap(ev => {\n if (ev.type === 'keyup') {\n this.keys.delete(ev.key);\n } else {\n this.keys.add(ev.key);\n }\n this.lastEvent = ev;\n }),\n finalize(() => {\n // we have to clear the keys when there is no subscriber\n // because keyup is not considered on last unsubscribe\n this.keys.clear();\n }),\n share(),\n );\n\n lastEvent?: KeyboardEvent;\n\n private keys = new Set<string>();\n\n event(keyCombination: string) {\n keyCombination = [\n ['ctrl', 'Control'],\n ['esc', 'Escape'],\n ].reduce((a, [b, B]) => a.replace(b, B), keyCombination);\n const keys = keyCombination.split('+');\n let isFirstTrueValue = false;\n\n return this.keypress$.pipe(\n map<KeyboardEvent, [boolean, KeyboardEvent]>(ev => {\n // make sure key combination and number of keys should be same\n const isLengthSame = this.keys.size === keys.length;\n // check all the keys are matching\n const isAllKeysSame = [...this.keys].every(k => keys.includes(k));\n const active = isLengthSame && isAllKeysSame;\n\n isFirstTrueValue = isFirstTrueValue || active;\n return [active, ev];\n }),\n filter(() => isFirstTrueValue), //skipValues until positive value comes\n distinctUntilKeyChanged(0), // avoid duplicate values emitting\n );\n }\n\n isKey(key: string) {\n return this.keys.has(key);\n }\n}\n","import { DestroyRef, inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { documentListener, isClient, uniqueId } from '@ngbase/adk/utils';\n\nconst IGNORED_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\nconst SHORTCUT_MAP: Record<string, string> = {\n '⇧': 'shift',\n '⌥': 'alt',\n '⌃': 'ctrl',\n '⌘': 'meta',\n '⏎': 'enter',\n esc: 'escape',\n};\n\n// prettier-ignore\nconst SPECIAL_KEYS = new Set([\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n 'Enter', 'Escape', 'Tab', 'Backspace', 'Delete',\n 'Home', 'End', 'PageUp', 'PageDown',\n 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12'\n]);\n\ninterface Shortcut {\n callback: (ev: KeyboardEvent) => void;\n prevent: boolean;\n stop: boolean;\n global: boolean;\n id: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Shortcuts {\n private readonly shortcuts = new Map<string, Shortcut[]>();\n private isActive = false;\n private isClient = isClient();\n\n on(keyCombination: string, data: Shortcut): void {\n const parsedKey = this.getParsedKey(keyCombination);\n for (const key of parsedKey) {\n const shortcuts = this.shortcuts.get(key) || [];\n shortcuts.push(data);\n this.shortcuts.set(key, shortcuts);\n }\n this.turnOn();\n }\n\n off(keyCombination: string, id: string): void {\n const parsedKey = this.getParsedKey(keyCombination);\n for (const key of parsedKey) {\n const shortcuts = this.shortcuts.get(key);\n if (shortcuts) {\n const index = shortcuts.findIndex(s => s.id === id);\n if (index > -1) {\n shortcuts.splice(index, 1);\n }\n if (shortcuts.length === 0) {\n this.shortcuts.delete(key);\n }\n }\n }\n this.turnOff();\n }\n\n /**\n * We need to parse the key combination\n * e.g. ⇧⌘P -> shift+meta+p, ⌥⌘P -> meta+alt+p, ctrl+p -> ctrl+p\n * e.g. esc|prevent|stop|global -> escape\n */\n private getParsedKey(combination: string): string[] {\n const baseSplit = combination.split('|');\n return baseSplit.map(split => {\n const keys = split.split('+');\n const parsedKeys = keys.map(key => {\n // Check if the key is a special character in our map\n if (SHORTCUT_MAP[key]) {\n return SHORTCUT_MAP[key];\n }\n\n // If it's a special key, return it as is (case-sensitive)\n if (SPECIAL_KEYS.has(key)) {\n return key;\n }\n // If not found in the map or special keys, return the lowercase key\n return key.toLowerCase();\n });\n return parsedKeys.join('+');\n });\n }\n\n private handleKeyEvent = (event: KeyboardEvent): void => {\n const key = this.getKeyCombo(event);\n const data = this.shortcuts.get(key);\n if (!data) {\n return;\n }\n let i = data.length;\n while (i--) {\n const item = data[i];\n if (item.global && this.shouldIgnoreEvent(event)) {\n return;\n }\n\n if (item.callback) {\n if (item.prevent) {\n event.preventDefault();\n }\n if (item.stop) {\n event.stopPropagation();\n }\n item.callback(event);\n if (item.stop) {\n break;\n }\n }\n }\n };\n private keydown = documentListener('keydown', this.handleKeyEvent, { lazy: true });\n\n private shouldIgnoreEvent(event: KeyboardEvent): boolean {\n const target = event.target as HTMLElement;\n\n return (\n IGNORED_TAGS.includes(target.tagName) ||\n target.isContentEditable ||\n target.getAttribute('role') === 'textbox'\n );\n }\n\n private getKeyCombo(event: KeyboardEvent): string {\n const modifiers = [];\n\n if (event.ctrlKey) modifiers.push('ctrl');\n if (event.altKey) modifiers.push('alt');\n if (event.shiftKey) modifiers.push('shift');\n if (event.metaKey) modifiers.push('meta');\n\n const key = event.key?.toLowerCase();\n return [...modifiers, ...(key ? [key] : [])].join('+');\n }\n\n private turnOff() {\n if (this.isClient && this.shortcuts.size === 0 && this.isActive) {\n this.isActive = false;\n this.keydown.off();\n }\n }\n\n private turnOn() {\n if (this.isClient && this.shortcuts.size > 0 && !this.isActive) {\n this.isActive = true;\n this.keydown.on();\n }\n }\n}\n\nexport function keyMap(\n key: string,\n callback: (ev: KeyboardEvent) => void,\n data?: {\n injector?: Injector;\n cleanup?: (off: () => void) => void;\n stop?: boolean;\n global?: boolean;\n prevent?: boolean;\n },\n) {\n const { injector, cleanup, stop = false, global = false, prevent = true } = data || {};\n return runInInjectionContext(injector || inject(Injector), () => {\n const shortcuts = inject(Shortcuts);\n const onDestroy = inject(DestroyRef);\n const id = uniqueId();\n\n shortcuts.on(key, { callback, prevent, stop, global, id });\n\n const off = () => {\n shortcuts.off(key, id);\n };\n\n onDestroy?.onDestroy(off);\n cleanup?.(off);\n return off;\n });\n}\n","/*\n * Public API Surface of keys\n */\n\nexport { Keys } from './keys.service';\nexport { keyMap, Shortcuts } from './shortcuts.service';\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-keys.mjs","sources":["../../../projects/adk/keys/keys.service.ts","../../../projects/adk/keys/shortcuts.service.ts","../../../projects/adk/keys/public-api.ts","../../../projects/adk/keys/ngbase-adk-keys.ts"],"sourcesContent":["import { Injectable, inject, DOCUMENT } from '@angular/core';\nimport { fromEvent, merge, distinctUntilKeyChanged, filter, finalize, map, share, tap } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class Keys {\n private document = inject(DOCUMENT);\n private keyup$ = fromEvent<KeyboardEvent>(this.document, 'keyup');\n private keydown$ = fromEvent<KeyboardEvent>(this.document, 'keydown');\n private keypress$ = merge(this.keyup$, this.keydown$).pipe(\n tap(ev => {\n if (ev.type === 'keyup') {\n this.keys.delete(ev.key);\n } else {\n this.keys.add(ev.key);\n }\n this.lastEvent = ev;\n }),\n finalize(() => {\n // we have to clear the keys when there is no subscriber\n // because keyup is not considered on last unsubscribe\n this.keys.clear();\n }),\n share(),\n );\n\n lastEvent?: KeyboardEvent;\n\n private keys = new Set<string>();\n\n event(keyCombination: string) {\n keyCombination = [\n ['ctrl', 'Control'],\n ['esc', 'Escape'],\n ].reduce((a, [b, B]) => a.replace(b, B), keyCombination);\n const keys = keyCombination.split('+');\n let isFirstTrueValue = false;\n\n return this.keypress$.pipe(\n map<KeyboardEvent, [boolean, KeyboardEvent]>(ev => {\n // make sure key combination and number of keys should be same\n const isLengthSame = this.keys.size === keys.length;\n // check all the keys are matching\n const isAllKeysSame = [...this.keys].every(k => keys.includes(k));\n const active = isLengthSame && isAllKeysSame;\n\n isFirstTrueValue = isFirstTrueValue || active;\n return [active, ev];\n }),\n filter(() => isFirstTrueValue), //skipValues until positive value comes\n distinctUntilKeyChanged(0), // avoid duplicate values emitting\n );\n }\n\n isKey(key: string) {\n return this.keys.has(key);\n }\n}\n","import { DestroyRef, inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { documentListener, isClient, uniqueId } from '@ngbase/adk/utils';\n\nconst IGNORED_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\nconst SHORTCUT_MAP: Record<string, string> = {\n '⇧': 'shift',\n '⌥': 'alt',\n '⌃': 'ctrl',\n '⌘': 'meta',\n '⏎': 'enter',\n esc: 'escape',\n};\n\n// prettier-ignore\nconst SPECIAL_KEYS = new Set([\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n 'Enter', 'Escape', 'Tab', 'Backspace', 'Delete',\n 'Home', 'End', 'PageUp', 'PageDown',\n 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12'\n]);\n\ninterface Shortcut {\n callback: (ev: KeyboardEvent) => void;\n prevent: boolean;\n stop: boolean;\n global: boolean;\n id: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Shortcuts {\n private readonly shortcuts = new Map<string, Shortcut[]>();\n private isActive = false;\n private isClient = isClient();\n\n on(keyCombination: string, data: Shortcut): void {\n const parsedKey = this.getParsedKey(keyCombination);\n for (const key of parsedKey) {\n const shortcuts = this.shortcuts.get(key) || [];\n shortcuts.push(data);\n this.shortcuts.set(key, shortcuts);\n }\n this.turnOn();\n }\n\n off(keyCombination: string, id: string): void {\n const parsedKey = this.getParsedKey(keyCombination);\n for (const key of parsedKey) {\n const shortcuts = this.shortcuts.get(key);\n if (shortcuts) {\n const index = shortcuts.findIndex(s => s.id === id);\n if (index > -1) {\n shortcuts.splice(index, 1);\n }\n if (shortcuts.length === 0) {\n this.shortcuts.delete(key);\n }\n }\n }\n this.turnOff();\n }\n\n /**\n * We need to parse the key combination\n * e.g. ⇧⌘P -> shift+meta+p, ⌥⌘P -> meta+alt+p, ctrl+p -> ctrl+p\n * e.g. esc|prevent|stop|global -> escape\n */\n private getParsedKey(combination: string): string[] {\n const baseSplit = combination.split('|');\n return baseSplit.map(split => {\n const keys = split.split('+');\n const parsedKeys = keys.map(key => {\n // Check if the key is a special character in our map\n if (SHORTCUT_MAP[key]) {\n return SHORTCUT_MAP[key];\n }\n\n // If it's a special key, return it as is (case-sensitive)\n if (SPECIAL_KEYS.has(key)) {\n return key;\n }\n // If not found in the map or special keys, return the lowercase key\n return key.toLowerCase();\n });\n return parsedKeys.join('+');\n });\n }\n\n private handleKeyEvent = (event: KeyboardEvent): void => {\n const key = this.getKeyCombo(event);\n const data = this.shortcuts.get(key);\n if (!data) {\n return;\n }\n let i = data.length;\n while (i--) {\n const item = data[i];\n if (item.global && this.shouldIgnoreEvent(event)) {\n return;\n }\n\n if (item.callback) {\n if (item.prevent) {\n event.preventDefault();\n }\n if (item.stop) {\n event.stopPropagation();\n }\n item.callback(event);\n if (item.stop) {\n break;\n }\n }\n }\n };\n private keydown = documentListener('keydown', this.handleKeyEvent, { lazy: true });\n\n private shouldIgnoreEvent(event: KeyboardEvent): boolean {\n const target = event.target as HTMLElement;\n\n return (\n IGNORED_TAGS.includes(target.tagName) ||\n target.isContentEditable ||\n target.getAttribute('role') === 'textbox'\n );\n }\n\n private getKeyCombo(event: KeyboardEvent): string {\n const modifiers = [];\n\n if (event.ctrlKey) modifiers.push('ctrl');\n if (event.altKey) modifiers.push('alt');\n if (event.shiftKey) modifiers.push('shift');\n if (event.metaKey) modifiers.push('meta');\n\n const key = event.key?.toLowerCase();\n return [...modifiers, ...(key ? [key] : [])].join('+');\n }\n\n private turnOff() {\n if (this.isClient && this.shortcuts.size === 0 && this.isActive) {\n this.isActive = false;\n this.keydown.off();\n }\n }\n\n private turnOn() {\n if (this.isClient && this.shortcuts.size > 0 && !this.isActive) {\n this.isActive = true;\n this.keydown.on();\n }\n }\n}\n\nexport function keyMap(\n key: string,\n callback: (ev: KeyboardEvent) => void,\n data?: {\n injector?: Injector;\n cleanup?: (off: () => void) => void;\n stop?: boolean;\n global?: boolean;\n prevent?: boolean;\n },\n) {\n const { injector, cleanup, stop = false, global = false, prevent = true } = data || {};\n return runInInjectionContext(injector || inject(Injector), () => {\n const shortcuts = inject(Shortcuts);\n const onDestroy = inject(DestroyRef);\n const id = uniqueId();\n\n shortcuts.on(key, { callback, prevent, stop, global, id });\n\n const off = () => {\n shortcuts.off(key, id);\n };\n\n onDestroy?.onDestroy(off);\n cleanup?.(off);\n return off;\n });\n}\n","/*\n * Public API Surface of keys\n */\n\nexport { Keys } from './keys.service';\nexport { keyMap, Shortcuts } from './shortcuts.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ function breakpointObserver() {
|
|
|
6
6
|
const client = isClient();
|
|
7
7
|
const activeListeners = new Map();
|
|
8
8
|
function observe(queries) {
|
|
9
|
-
const breakpointStates = signal({});
|
|
9
|
+
const breakpointStates = signal({}, ...(ngDevMode ? [{ debugName: "breakpointStates" }] : []));
|
|
10
10
|
if (client) {
|
|
11
11
|
const cleanup = setupMediaQueries(queries, breakpointStates);
|
|
12
12
|
activeListeners.set(queries, cleanup);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngbase-adk-layout.mjs","sources":["../../../projects/adk/layout/layout.ts","../../../projects/adk/layout/ngbase-adk-layout.ts"],"sourcesContent":["import { DestroyRef, inject, signal, WritableSignal } from '@angular/core';\nimport { isClient } from '@ngbase/adk/utils';\n\nconst mediaQueryListeners = new Map<\n string,\n { mql: MediaQueryList; listeners: Set<(event: MediaQueryListEvent) => void> }\n>();\n\nexport function breakpointObserver() {\n const client = isClient();\n const activeListeners = new Map<any, () => void>();\n\n function observe<T extends string>(queries: Record<T, string>) {\n const breakpointStates = signal({} as Record<T, boolean>);\n\n if (client) {\n const cleanup = setupMediaQueries(queries, breakpointStates);\n activeListeners.set(queries, cleanup);\n }\n\n return {\n state: breakpointStates.asReadonly(),\n unobserve: () => {\n activeListeners.get(queries)?.();\n activeListeners.delete(queries);\n },\n };\n }\n\n function setupMediaQueries(\n queries: Record<string, string>,\n breakpointStates: WritableSignal<Record<string, boolean>>,\n ) {\n const states = {} as Record<string, boolean>;\n const cleanupFns: Array<() => void> = [];\n\n Object.entries(queries).forEach(([name, query]) => {\n let queryData = mediaQueryListeners.get(query);\n\n if (!queryData) {\n const mql = _matchMedia(query);\n if (!mql) return;\n queryData = { mql, listeners: new Set() };\n mediaQueryListeners.set(query, queryData);\n\n mql.addEventListener('change', event => {\n queryData!.listeners.forEach(listener => listener(event));\n });\n }\n\n states[name] = queryData.mql.matches;\n\n const listener = (event: MediaQueryListEvent) => {\n breakpointStates.update(states => ({\n ...states,\n [name]: event.matches,\n }));\n };\n\n queryData.listeners.add(listener);\n cleanupFns.push(() => {\n queryData!.listeners.delete(listener);\n if (queryData!.listeners.size === 0) {\n queryData!.mql.removeEventListener('change', listener);\n mediaQueryListeners.delete(query);\n }\n });\n });\n\n breakpointStates.set(states);\n\n return () => cleanupFns.forEach(fn => fn());\n }\n\n // cleanup all listeners when the component is destroyed\n inject(DestroyRef).onDestroy(() => {\n activeListeners.forEach(cleanup => cleanup());\n });\n\n function matches(queryName: string): boolean {\n if (!client) return false;\n return _matchMedia(queryName)?.matches ?? false;\n }\n\n function _matchMedia(queryName: string) {\n return typeof window.matchMedia !== 'undefined' ? window.matchMedia(queryName) : null;\n }\n\n return { observe, matches };\n}\n\n// This is a mock for testing purposes\nexport function setupTestBreakpoint(fn: Function) {\n const createMockMediaQuery = () => ({\n matches: false,\n addEventListener: fn(),\n removeEventListener: fn(),\n });\n\n const _mediaQueryList = createMockMediaQuery();\n const _matchMedia = fn(() => _mediaQueryList);\n window.matchMedia = _matchMedia;\n\n return {\n reset: () => {\n Object.assign(_mediaQueryList, createMockMediaQuery());\n Object.assign(\n _matchMedia,\n fn(() => _mediaQueryList),\n );\n window.matchMedia = _matchMedia;\n },\n get mediaQueryList() {\n return _mediaQueryList;\n },\n get matchMedia() {\n return _matchMedia;\n },\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAGA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAGhC;SAEa,kBAAkB,GAAA;AAChC,IAAA,MAAM,MAAM,GAAG,QAAQ,EAAE;AACzB,IAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmB;IAElD,SAAS,OAAO,CAAmB,OAA0B,EAAA;AAC3D,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAwB,
|
|
1
|
+
{"version":3,"file":"ngbase-adk-layout.mjs","sources":["../../../projects/adk/layout/layout.ts","../../../projects/adk/layout/ngbase-adk-layout.ts"],"sourcesContent":["import { DestroyRef, inject, signal, WritableSignal } from '@angular/core';\nimport { isClient } from '@ngbase/adk/utils';\n\nconst mediaQueryListeners = new Map<\n string,\n { mql: MediaQueryList; listeners: Set<(event: MediaQueryListEvent) => void> }\n>();\n\nexport function breakpointObserver() {\n const client = isClient();\n const activeListeners = new Map<any, () => void>();\n\n function observe<T extends string>(queries: Record<T, string>) {\n const breakpointStates = signal({} as Record<T, boolean>);\n\n if (client) {\n const cleanup = setupMediaQueries(queries, breakpointStates);\n activeListeners.set(queries, cleanup);\n }\n\n return {\n state: breakpointStates.asReadonly(),\n unobserve: () => {\n activeListeners.get(queries)?.();\n activeListeners.delete(queries);\n },\n };\n }\n\n function setupMediaQueries(\n queries: Record<string, string>,\n breakpointStates: WritableSignal<Record<string, boolean>>,\n ) {\n const states = {} as Record<string, boolean>;\n const cleanupFns: Array<() => void> = [];\n\n Object.entries(queries).forEach(([name, query]) => {\n let queryData = mediaQueryListeners.get(query);\n\n if (!queryData) {\n const mql = _matchMedia(query);\n if (!mql) return;\n queryData = { mql, listeners: new Set() };\n mediaQueryListeners.set(query, queryData);\n\n mql.addEventListener('change', event => {\n queryData!.listeners.forEach(listener => listener(event));\n });\n }\n\n states[name] = queryData.mql.matches;\n\n const listener = (event: MediaQueryListEvent) => {\n breakpointStates.update(states => ({\n ...states,\n [name]: event.matches,\n }));\n };\n\n queryData.listeners.add(listener);\n cleanupFns.push(() => {\n queryData!.listeners.delete(listener);\n if (queryData!.listeners.size === 0) {\n queryData!.mql.removeEventListener('change', listener);\n mediaQueryListeners.delete(query);\n }\n });\n });\n\n breakpointStates.set(states);\n\n return () => cleanupFns.forEach(fn => fn());\n }\n\n // cleanup all listeners when the component is destroyed\n inject(DestroyRef).onDestroy(() => {\n activeListeners.forEach(cleanup => cleanup());\n });\n\n function matches(queryName: string): boolean {\n if (!client) return false;\n return _matchMedia(queryName)?.matches ?? false;\n }\n\n function _matchMedia(queryName: string) {\n return typeof window.matchMedia !== 'undefined' ? window.matchMedia(queryName) : null;\n }\n\n return { observe, matches };\n}\n\n// This is a mock for testing purposes\nexport function setupTestBreakpoint(fn: Function) {\n const createMockMediaQuery = () => ({\n matches: false,\n addEventListener: fn(),\n removeEventListener: fn(),\n });\n\n const _mediaQueryList = createMockMediaQuery();\n const _matchMedia = fn(() => _mediaQueryList);\n window.matchMedia = _matchMedia;\n\n return {\n reset: () => {\n Object.assign(_mediaQueryList, createMockMediaQuery());\n Object.assign(\n _matchMedia,\n fn(() => _mediaQueryList),\n );\n window.matchMedia = _matchMedia;\n },\n get mediaQueryList() {\n return _mediaQueryList;\n },\n get matchMedia() {\n return _matchMedia;\n },\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@ class NgbList {
|
|
|
10
10
|
this.allyItem = inject(AccessibleItem);
|
|
11
11
|
this.el = inject(ElementRef);
|
|
12
12
|
// Inputs
|
|
13
|
-
this.ayId = input();
|
|
14
|
-
this.disabled = input(false, { transform: booleanAttribute });
|
|
13
|
+
this.ayId = input(...(ngDevMode ? [undefined, { debugName: "ayId" }] : []));
|
|
14
|
+
this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
15
15
|
this.allyItem._ayId = linkedSignal(this.ayId);
|
|
16
16
|
}
|
|
17
17
|
setAyId(id) {
|
|
@@ -27,10 +27,10 @@ class NgbList {
|
|
|
27
27
|
unselect() {
|
|
28
28
|
this.el.nativeElement.classList.remove('bg-muted');
|
|
29
29
|
}
|
|
30
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
31
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbList, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
31
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: NgbList, isStandalone: true, selector: "[ngbList]", inputs: { ayId: { classPropertyName: "ayId", publicName: "ayId", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "list" } }, hostDirectives: [{ directive: i1.AccessibleItem, inputs: ["role", "role", "disabled", "disabled"] }], ngImport: i0 }); }
|
|
32
32
|
}
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbList, decorators: [{
|
|
34
34
|
type: Directive,
|
|
35
35
|
args: [{
|
|
36
36
|
selector: '[ngbList]',
|
|
@@ -49,8 +49,8 @@ function provideList(list) {
|
|
|
49
49
|
|
|
50
50
|
class NgbListActionGroup {
|
|
51
51
|
constructor() {
|
|
52
|
-
this.options = contentChildren(NgbList, { descendants: true });
|
|
53
|
-
this.activeIndex = signal(undefined);
|
|
52
|
+
this.options = contentChildren(NgbList, ...(ngDevMode ? [{ debugName: "options", descendants: true }] : [{ descendants: true }]));
|
|
53
|
+
this.activeIndex = signal(undefined, ...(ngDevMode ? [{ debugName: "activeIndex" }] : []));
|
|
54
54
|
this.optionsMap = new WeakMap();
|
|
55
55
|
this.handleKeyDown = (event) => {
|
|
56
56
|
const options = this.options();
|
|
@@ -87,10 +87,10 @@ class NgbListActionGroup {
|
|
|
87
87
|
lastIndex?.unselect();
|
|
88
88
|
option?.focus();
|
|
89
89
|
}
|
|
90
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
91
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "
|
|
90
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbListActionGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
91
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.2.0", type: NgbListActionGroup, isStandalone: true, selector: "[ngbActionGroup]", queries: [{ propertyName: "options", predicate: NgbList, descendants: true, isSignal: true }], ngImport: i0 }); }
|
|
92
92
|
}
|
|
93
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbListActionGroup, decorators: [{
|
|
94
94
|
type: Directive,
|
|
95
95
|
args: [{
|
|
96
96
|
selector: '[ngbActionGroup]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngbase-adk-list.mjs","sources":["../../../projects/adk/list/list.ts","../../../projects/adk/list/list.directive.ts","../../../projects/adk/list/public-api.ts","../../../projects/adk/list/ngbase-adk-list.ts"],"sourcesContent":["import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n WritableSignal,\n} from '@angular/core';\nimport { AccessibleItem } from '@ngbase/adk/a11y';\n\n@Directive({\n selector: '[ngbList]',\n hostDirectives: [{ directive: AccessibleItem, inputs: ['role', 'disabled'] }],\n host: {\n role: 'list',\n },\n})\nexport class NgbList {\n // Dependencies\n private readonly allyItem = inject(AccessibleItem);\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // Inputs\n readonly ayId = input<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n constructor() {\n this.allyItem._ayId = linkedSignal(this.ayId) as WritableSignal<string>;\n }\n\n setAyId(id: string) {\n this.allyItem._ayId.set(id);\n }\n\n select() {\n this.el.nativeElement.click();\n }\n\n focus() {\n this.el.nativeElement.scrollIntoView({ block: 'nearest' });\n this.el.nativeElement.classList.add('bg-muted');\n }\n\n unselect() {\n this.el.nativeElement.classList.remove('bg-muted');\n }\n}\n\nexport function provideList(list: typeof NgbList) {\n return {\n provide: NgbList,\n useExisting: list,\n };\n}\n","import {\n Directive,\n afterNextRender,\n contentChildren,\n effect,\n signal,\n untracked,\n} from '@angular/core';\nimport { documentListener } from '@ngbase/adk/utils';\nimport { NgbList } from './list';\n\n@Directive({\n selector: '[ngbActionGroup]',\n})\nexport class NgbListActionGroup {\n readonly options = contentChildren(NgbList, { descendants: true });\n\n private readonly activeIndex = signal<NgbList | undefined>(undefined);\n private readonly optionsMap = new WeakMap<NgbList, number>();\n\n constructor() {\n documentListener('keydown', this.handleKeyDown);\n afterNextRender(() => this.afterAction());\n\n effect(() => {\n const options = this.options();\n options.forEach((x, i) => this.optionsMap.set(x, i));\n untracked(() => {\n const lastIndex = this.activeIndex();\n this.activeIndex.set(options[0]);\n this.afterAction(lastIndex);\n });\n });\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n const options = this.options();\n const lastIndex = this.activeIndex();\n const i = this.optionsMap.get(this.activeIndex() || options[0])!;\n if (event.key === 'ArrowDown') {\n this.activeIndex.set(options[Math.min(i + 1, options.length - 1)]);\n } else if (event.key === 'ArrowUp') {\n this.activeIndex.set(options[Math.max(i - 1, 0)]);\n } else if (event.key === 'Enter') {\n lastIndex?.select();\n }\n if (lastIndex !== this.activeIndex()) {\n event.preventDefault();\n this.afterAction(lastIndex);\n }\n };\n\n private afterAction(lastIndex?: NgbList) {\n const option = this.activeIndex();\n lastIndex?.unselect();\n option?.focus();\n }\n}\n","/*\n * Public API Surface of list\n */\n\nexport * from './list';\nexport * from './list.directive';\n// export * from './list-selection.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAkBa,OAAO,CAAA;AASlB,IAAA,WAAA,GAAA;;AAPiB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;AACzC,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;;QAGhD,IAAI,CAAA,IAAA,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"ngbase-adk-list.mjs","sources":["../../../projects/adk/list/list.ts","../../../projects/adk/list/list.directive.ts","../../../projects/adk/list/public-api.ts","../../../projects/adk/list/ngbase-adk-list.ts"],"sourcesContent":["import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n WritableSignal,\n} from '@angular/core';\nimport { AccessibleItem } from '@ngbase/adk/a11y';\n\n@Directive({\n selector: '[ngbList]',\n hostDirectives: [{ directive: AccessibleItem, inputs: ['role', 'disabled'] }],\n host: {\n role: 'list',\n },\n})\nexport class NgbList {\n // Dependencies\n private readonly allyItem = inject(AccessibleItem);\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // Inputs\n readonly ayId = input<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n constructor() {\n this.allyItem._ayId = linkedSignal(this.ayId) as WritableSignal<string>;\n }\n\n setAyId(id: string) {\n this.allyItem._ayId.set(id);\n }\n\n select() {\n this.el.nativeElement.click();\n }\n\n focus() {\n this.el.nativeElement.scrollIntoView({ block: 'nearest' });\n this.el.nativeElement.classList.add('bg-muted');\n }\n\n unselect() {\n this.el.nativeElement.classList.remove('bg-muted');\n }\n}\n\nexport function provideList(list: typeof NgbList) {\n return {\n provide: NgbList,\n useExisting: list,\n };\n}\n","import {\n Directive,\n afterNextRender,\n contentChildren,\n effect,\n signal,\n untracked,\n} from '@angular/core';\nimport { documentListener } from '@ngbase/adk/utils';\nimport { NgbList } from './list';\n\n@Directive({\n selector: '[ngbActionGroup]',\n})\nexport class NgbListActionGroup {\n readonly options = contentChildren(NgbList, { descendants: true });\n\n private readonly activeIndex = signal<NgbList | undefined>(undefined);\n private readonly optionsMap = new WeakMap<NgbList, number>();\n\n constructor() {\n documentListener('keydown', this.handleKeyDown);\n afterNextRender(() => this.afterAction());\n\n effect(() => {\n const options = this.options();\n options.forEach((x, i) => this.optionsMap.set(x, i));\n untracked(() => {\n const lastIndex = this.activeIndex();\n this.activeIndex.set(options[0]);\n this.afterAction(lastIndex);\n });\n });\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n const options = this.options();\n const lastIndex = this.activeIndex();\n const i = this.optionsMap.get(this.activeIndex() || options[0])!;\n if (event.key === 'ArrowDown') {\n this.activeIndex.set(options[Math.min(i + 1, options.length - 1)]);\n } else if (event.key === 'ArrowUp') {\n this.activeIndex.set(options[Math.max(i - 1, 0)]);\n } else if (event.key === 'Enter') {\n lastIndex?.select();\n }\n if (lastIndex !== this.activeIndex()) {\n event.preventDefault();\n this.afterAction(lastIndex);\n }\n };\n\n private afterAction(lastIndex?: NgbList) {\n const option = this.activeIndex();\n lastIndex?.unselect();\n option?.focus();\n }\n}\n","/*\n * Public API Surface of list\n */\n\nexport * from './list';\nexport * from './list.directive';\n// export * from './list-selection.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,8 @@ class Mask {
|
|
|
14
14
|
this.control = inject(NgControl, { optional: true });
|
|
15
15
|
this.inputC = inject(InputBase);
|
|
16
16
|
// Inputs
|
|
17
|
-
this.ngbMask = input('');
|
|
18
|
-
this.showMaskType = input(false);
|
|
17
|
+
this.ngbMask = input('', ...(ngDevMode ? [{ debugName: "ngbMask" }] : []));
|
|
18
|
+
this.showMaskType = input(false, ...(ngDevMode ? [{ debugName: "showMaskType" }] : []));
|
|
19
19
|
this.localValue = linkedSignal(() => this.inputC.value() ?? '');
|
|
20
20
|
afterRenderEffect(() => {
|
|
21
21
|
const mask = this.ngbMask();
|
|
@@ -148,10 +148,10 @@ class Mask {
|
|
|
148
148
|
}
|
|
149
149
|
return unmaskedValue;
|
|
150
150
|
}
|
|
151
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
152
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
151
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Mask, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
152
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: Mask, isStandalone: true, selector: "[ngbMask]", inputs: { ngbMask: { classPropertyName: "ngbMask", publicName: "ngbMask", isSignal: true, isRequired: false, transformFunction: null }, showMaskType: { classPropertyName: "showMaskType", publicName: "showMaskType", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeyDown($event)", "paste": "onPaste($event)" } }, ngImport: i0 }); }
|
|
153
153
|
}
|
|
154
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Mask, decorators: [{
|
|
155
155
|
type: Directive,
|
|
156
156
|
args: [{
|
|
157
157
|
selector: '[ngbMask]',
|
|
@@ -218,10 +218,10 @@ class MaskPipe {
|
|
|
218
218
|
transform(value, mask) {
|
|
219
219
|
return maskTransform(value, mask);
|
|
220
220
|
}
|
|
221
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
222
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
221
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: MaskPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
222
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.0", ngImport: i0, type: MaskPipe, isStandalone: true, name: "mask" }); }
|
|
223
223
|
}
|
|
224
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: MaskPipe, decorators: [{
|
|
225
225
|
type: Pipe,
|
|
226
226
|
args: [{
|
|
227
227
|
name: 'mask',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngbase-adk-mask.mjs","sources":["../../../projects/adk/mask/mask.ts","../../../projects/adk/mask/mask-pipe.ts","../../../projects/adk/mask/ngbase-adk-mask.ts"],"sourcesContent":["import {\n afterRenderEffect,\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { InputBase } from '@ngbase/adk/form-field';\n\n@Directive({\n selector: '[ngbMask]',\n host: {\n '(keydown)': 'onKeyDown($event)',\n '(paste)': 'onPaste($event)',\n },\n})\nexport class Mask {\n // Dependencies\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n readonly control = inject(NgControl, { optional: true });\n private readonly inputC = inject(InputBase);\n\n // Inputs\n readonly ngbMask = input<string>('');\n readonly showMaskType = input(false);\n\n readonly localValue = linkedSignal(() => (this.inputC.value() as string) ?? '');\n // private lastValue = '';\n\n constructor() {\n // this.control?.valueChanges?.subscribe(value => {\n // if (value !== this.lastValue) this.handleValue(value);\n // });\n\n afterRenderEffect(() => {\n const mask = this.ngbMask();\n const value = this.localValue();\n this.el.nativeElement.value = this.updateView(value, mask);\n });\n }\n\n onKeyDown(event: KeyboardEvent): void {\n // console.log('onKeyDown', event);\n const input = event.target as HTMLInputElement;\n const keyCode = event.key;\n\n // Allow navigation keys\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n 'Tab',\n 'Backspace',\n 'Delete',\n 'Shift',\n 'Meta',\n 'Control',\n 'Alt',\n 'Escape',\n 'CapsLock',\n ].includes(keyCode)\n ) {\n return;\n }\n\n // allow selecting all text\n if (keyCode === 'a' && (event.metaKey || event.ctrlKey)) {\n return;\n }\n\n event.preventDefault();\n const cursorPos = input.selectionStart || 0;\n const key = event.key;\n\n // Get the current value and mask\n const currentValue = input.value;\n const mask = this.ngbMask();\n\n // Check if the key matches the mask at current position\n if (this.isValidChar(key, this.getCurrentMaskChar(mask, cursorPos))) {\n // Insert the character at cursor position\n const newValue =\n currentValue.substring(0, cursorPos) + key + currentValue.substring(cursorPos);\n\n this.handleValue(newValue, cursorPos);\n }\n }\n\n getCurrentMaskChar(mask: string, cursorPos: number): string {\n // we only have to check cursor position and have to skip non-mask characters\n for (let i = cursorPos; i < mask.length; i++) {\n if (mask[i] !== '#' && mask[i] !== 'a' && mask[i] !== '*') {\n continue;\n }\n return mask[i];\n }\n return '';\n }\n\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const input = event.target as HTMLInputElement;\n const cursorPos = input.selectionStart || 0;\n const pastedText = event.clipboardData?.getData('text') || '';\n\n const currentValue = input.value;\n const beforeCursor = currentValue.substring(0, cursorPos);\n const afterCursor = currentValue.substring(cursorPos);\n\n const newValue = beforeCursor + pastedText + afterCursor;\n this.handleValue(newValue, cursorPos);\n }\n\n private isValidChar(char: string, maskChar: string): boolean {\n switch (maskChar) {\n case '#':\n return /\\d/.test(char);\n case 'a':\n return /[a-zA-Z]/.test(char);\n case '*':\n return /[a-zA-Z0-9]/.test(char);\n default:\n return char === maskChar;\n }\n }\n\n handleValue(value: string, cursorPos?: number) {\n // Apply mask and update view\n const maskedValue = this.updateView(value);\n // Update actualValue\n const actualValue = this.unmask(maskedValue);\n\n this.updateLocalValue(actualValue, actualValue !== value);\n\n // Set cursor position after update\n // if (cursorPos !== undefined) {\n // setTimeout(() => {\n // const newPos = this.calculateCursorPosition(maskedValue, cursorPos);\n // this.el.nativeElement.setSelectionRange(newPos, newPos);\n // });\n // }\n }\n\n private calculateCursorPosition(maskedValue: string, oldPos: number): number {\n const mask = this.ngbMask();\n let newPos = oldPos;\n\n // Move cursor past any fixed mask characters\n while (newPos < mask.length && !'#a*'.includes(mask[newPos])) {\n newPos++;\n }\n\n return Math.min(newPos, maskedValue.length);\n }\n\n private updateLocalValue(value: string, emit = true) {\n this.inputC.setValue(value);\n // this.lastValue = value;\n this.localValue.set(value);\n if (emit) this.control?.control?.setValue(value);\n }\n\n writeValue(value: string): void {\n this.handleValue(value);\n }\n\n private updateView(value: string, mask = this.ngbMask()): string {\n return maskTransform(value, mask);\n }\n\n private unmask(value: string): string {\n const mask = this.ngbMask();\n let unmaskedValue = '';\n let valueIndex = 0;\n\n for (let maskIndex = 0; maskIndex < mask.length && valueIndex < value.length; maskIndex++) {\n const maskChar = mask[maskIndex];\n const valueChar = value[valueIndex];\n\n if ('#a*'.includes(maskChar)) {\n unmaskedValue += valueChar;\n valueIndex++;\n } else if (maskChar === valueChar) {\n valueIndex++;\n }\n }\n\n return unmaskedValue;\n }\n}\n\nexport function maskTransform(value: string, mask: string, showMaskType = false): string {\n let result = '';\n let valueIndex = 0;\n\n for (let maskIndex = 0; maskIndex < mask.length && valueIndex < value.length; maskIndex++) {\n const maskChar = mask[maskIndex];\n const valueChar = value[valueIndex];\n\n switch (maskChar) {\n case '#':\n if (/\\d/.test(valueChar)) {\n result += valueChar;\n valueIndex++;\n } else if (showMaskType) {\n result += '_';\n } else {\n return result;\n }\n break;\n case 'a':\n if (/[a-zA-Z]/.test(valueChar)) {\n result += valueChar;\n valueIndex++;\n } else if (showMaskType) {\n result += '_';\n } else {\n return result;\n }\n break;\n case '*':\n if (/[a-zA-Z0-9]/.test(valueChar)) {\n result += valueChar;\n valueIndex++;\n } else if (showMaskType) {\n result += '_';\n } else {\n return result;\n }\n break;\n default:\n result += maskChar;\n if (maskChar === valueChar && valueIndex === maskIndex) {\n valueIndex++;\n }\n }\n }\n\n return result;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { maskTransform } from './mask';\n\n@Pipe({\n name: 'mask',\n})\nexport class MaskPipe implements PipeTransform {\n transform(value: string, mask: string): string {\n return maskTransform(value, mask);\n }\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-mask.mjs","sources":["../../../projects/adk/mask/mask.ts","../../../projects/adk/mask/mask-pipe.ts","../../../projects/adk/mask/ngbase-adk-mask.ts"],"sourcesContent":["import {\n afterRenderEffect,\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { InputBase } from '@ngbase/adk/form-field';\n\n@Directive({\n selector: '[ngbMask]',\n host: {\n '(keydown)': 'onKeyDown($event)',\n '(paste)': 'onPaste($event)',\n },\n})\nexport class Mask {\n // Dependencies\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n readonly control = inject(NgControl, { optional: true });\n private readonly inputC = inject(InputBase);\n\n // Inputs\n readonly ngbMask = input<string>('');\n readonly showMaskType = input(false);\n\n readonly localValue = linkedSignal(() => (this.inputC.value() as string) ?? '');\n // private lastValue = '';\n\n constructor() {\n // this.control?.valueChanges?.subscribe(value => {\n // if (value !== this.lastValue) this.handleValue(value);\n // });\n\n afterRenderEffect(() => {\n const mask = this.ngbMask();\n const value = this.localValue();\n this.el.nativeElement.value = this.updateView(value, mask);\n });\n }\n\n onKeyDown(event: KeyboardEvent): void {\n // console.log('onKeyDown', event);\n const input = event.target as HTMLInputElement;\n const keyCode = event.key;\n\n // Allow navigation keys\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n 'Tab',\n 'Backspace',\n 'Delete',\n 'Shift',\n 'Meta',\n 'Control',\n 'Alt',\n 'Escape',\n 'CapsLock',\n ].includes(keyCode)\n ) {\n return;\n }\n\n // allow selecting all text\n if (keyCode === 'a' && (event.metaKey || event.ctrlKey)) {\n return;\n }\n\n event.preventDefault();\n const cursorPos = input.selectionStart || 0;\n const key = event.key;\n\n // Get the current value and mask\n const currentValue = input.value;\n const mask = this.ngbMask();\n\n // Check if the key matches the mask at current position\n if (this.isValidChar(key, this.getCurrentMaskChar(mask, cursorPos))) {\n // Insert the character at cursor position\n const newValue =\n currentValue.substring(0, cursorPos) + key + currentValue.substring(cursorPos);\n\n this.handleValue(newValue, cursorPos);\n }\n }\n\n getCurrentMaskChar(mask: string, cursorPos: number): string {\n // we only have to check cursor position and have to skip non-mask characters\n for (let i = cursorPos; i < mask.length; i++) {\n if (mask[i] !== '#' && mask[i] !== 'a' && mask[i] !== '*') {\n continue;\n }\n return mask[i];\n }\n return '';\n }\n\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const input = event.target as HTMLInputElement;\n const cursorPos = input.selectionStart || 0;\n const pastedText = event.clipboardData?.getData('text') || '';\n\n const currentValue = input.value;\n const beforeCursor = currentValue.substring(0, cursorPos);\n const afterCursor = currentValue.substring(cursorPos);\n\n const newValue = beforeCursor + pastedText + afterCursor;\n this.handleValue(newValue, cursorPos);\n }\n\n private isValidChar(char: string, maskChar: string): boolean {\n switch (maskChar) {\n case '#':\n return /\\d/.test(char);\n case 'a':\n return /[a-zA-Z]/.test(char);\n case '*':\n return /[a-zA-Z0-9]/.test(char);\n default:\n return char === maskChar;\n }\n }\n\n handleValue(value: string, cursorPos?: number) {\n // Apply mask and update view\n const maskedValue = this.updateView(value);\n // Update actualValue\n const actualValue = this.unmask(maskedValue);\n\n this.updateLocalValue(actualValue, actualValue !== value);\n\n // Set cursor position after update\n // if (cursorPos !== undefined) {\n // setTimeout(() => {\n // const newPos = this.calculateCursorPosition(maskedValue, cursorPos);\n // this.el.nativeElement.setSelectionRange(newPos, newPos);\n // });\n // }\n }\n\n private calculateCursorPosition(maskedValue: string, oldPos: number): number {\n const mask = this.ngbMask();\n let newPos = oldPos;\n\n // Move cursor past any fixed mask characters\n while (newPos < mask.length && !'#a*'.includes(mask[newPos])) {\n newPos++;\n }\n\n return Math.min(newPos, maskedValue.length);\n }\n\n private updateLocalValue(value: string, emit = true) {\n this.inputC.setValue(value);\n // this.lastValue = value;\n this.localValue.set(value);\n if (emit) this.control?.control?.setValue(value);\n }\n\n writeValue(value: string): void {\n this.handleValue(value);\n }\n\n private updateView(value: string, mask = this.ngbMask()): string {\n return maskTransform(value, mask);\n }\n\n private unmask(value: string): string {\n const mask = this.ngbMask();\n let unmaskedValue = '';\n let valueIndex = 0;\n\n for (let maskIndex = 0; maskIndex < mask.length && valueIndex < value.length; maskIndex++) {\n const maskChar = mask[maskIndex];\n const valueChar = value[valueIndex];\n\n if ('#a*'.includes(maskChar)) {\n unmaskedValue += valueChar;\n valueIndex++;\n } else if (maskChar === valueChar) {\n valueIndex++;\n }\n }\n\n return unmaskedValue;\n }\n}\n\nexport function maskTransform(value: string, mask: string, showMaskType = false): string {\n let result = '';\n let valueIndex = 0;\n\n for (let maskIndex = 0; maskIndex < mask.length && valueIndex < value.length; maskIndex++) {\n const maskChar = mask[maskIndex];\n const valueChar = value[valueIndex];\n\n switch (maskChar) {\n case '#':\n if (/\\d/.test(valueChar)) {\n result += valueChar;\n valueIndex++;\n } else if (showMaskType) {\n result += '_';\n } else {\n return result;\n }\n break;\n case 'a':\n if (/[a-zA-Z]/.test(valueChar)) {\n result += valueChar;\n valueIndex++;\n } else if (showMaskType) {\n result += '_';\n } else {\n return result;\n }\n break;\n case '*':\n if (/[a-zA-Z0-9]/.test(valueChar)) {\n result += valueChar;\n valueIndex++;\n } else if (showMaskType) {\n result += '_';\n } else {\n return result;\n }\n break;\n default:\n result += maskChar;\n if (maskChar === valueChar && valueIndex === maskIndex) {\n valueIndex++;\n }\n }\n }\n\n return result;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { maskTransform } from './mask';\n\n@Pipe({\n name: 'mask',\n})\nexport class MaskPipe implements PipeTransform {\n transform(value: string, mask: string): string {\n return maskTransform(value, mask);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|