@kouji-ui/core 0.1.1 → 0.1.2
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/fesm2022/kouji-ui-core.mjs +26789 -0
- package/fesm2022/kouji-ui-core.mjs.map +1 -0
- package/package.json +5 -6
- package/types/kouji-ui-core.d.ts +13545 -0
- package/.turbo/turbo-build.log +0 -30
- package/CHANGELOG.md +0 -190
- package/ng-package.json +0 -11
- package/src/a11y/.gitkeep +0 -0
- package/src/a11y/aria-describedby.spec.ts +0 -55
- package/src/a11y/aria-describedby.ts +0 -37
- package/src/a11y/aria-labelledby.spec.ts +0 -55
- package/src/a11y/aria-labelledby.ts +0 -38
- package/src/a11y/focus-trap.spec.ts +0 -86
- package/src/a11y/focus-trap.ts +0 -72
- package/src/a11y/index.ts +0 -10
- package/src/a11y/live-region.spec.ts +0 -58
- package/src/a11y/live-region.ts +0 -50
- package/src/a11y/roving-tabindex.spec.ts +0 -201
- package/src/a11y/roving-tabindex.ts +0 -153
- package/src/a11y/visually-hidden.spec.ts +0 -34
- package/src/a11y/visually-hidden.ts +0 -26
- package/src/accordion/accordion.context.ts +0 -44
- package/src/accordion/accordion.spec.ts +0 -242
- package/src/accordion/accordion.ts +0 -401
- package/src/accordion/index.ts +0 -8
- package/src/alert/alert.context.ts +0 -28
- package/src/alert/alert.spec.ts +0 -217
- package/src/alert/alert.ts +0 -417
- package/src/alert/config.ts +0 -46
- package/src/alert/index.ts +0 -19
- package/src/avatar/avatar-group.context.ts +0 -45
- package/src/avatar/avatar-group.spec.ts +0 -358
- package/src/avatar/avatar-group.ts +0 -259
- package/src/avatar/avatar.spec.ts +0 -18
- package/src/avatar/avatar.ts +0 -39
- package/src/avatar/index.ts +0 -11
- package/src/badge/badge.spec.ts +0 -28
- package/src/badge/badge.ts +0 -35
- package/src/badge/index.ts +0 -1
- package/src/breadcrumb/breadcrumb-current.ts +0 -38
- package/src/breadcrumb/breadcrumb-ellipsis.ts +0 -71
- package/src/breadcrumb/breadcrumb-item.ts +0 -41
- package/src/breadcrumb/breadcrumb-link.ts +0 -44
- package/src/breadcrumb/breadcrumb-list.ts +0 -42
- package/src/breadcrumb/breadcrumb-separator.ts +0 -45
- package/src/breadcrumb/breadcrumb.context.ts +0 -45
- package/src/breadcrumb/breadcrumb.spec.ts +0 -354
- package/src/breadcrumb/breadcrumb.ts +0 -239
- package/src/breadcrumb/config.ts +0 -84
- package/src/breadcrumb/index.ts +0 -18
- package/src/button/_examples/button.example.ts +0 -71
- package/src/button/_examples/button.finance.example.ts +0 -83
- package/src/button/_examples/button.retro.example.ts +0 -91
- package/src/button/_examples/button.sizes.example.ts +0 -60
- package/src/button/_examples/index.ts +0 -6
- package/src/button/button.spec.ts +0 -163
- package/src/button/button.ts +0 -142
- package/src/button/config.spec.ts +0 -33
- package/src/button/config.ts +0 -45
- package/src/button/index.ts +0 -2
- package/src/button-group/button-group.context.ts +0 -28
- package/src/button-group/button-group.spec.ts +0 -99
- package/src/button-group/button-group.ts +0 -99
- package/src/button-group/index.ts +0 -2
- package/src/calendar/calendar-day.ts +0 -102
- package/src/calendar/calendar-grid.ts +0 -90
- package/src/calendar/calendar-header.ts +0 -65
- package/src/calendar/calendar.context.ts +0 -53
- package/src/calendar/calendar.spec.ts +0 -225
- package/src/calendar/calendar.ts +0 -233
- package/src/calendar/date-utils.ts +0 -225
- package/src/calendar/index.ts +0 -28
- package/src/carousel/carousel.context.ts +0 -81
- package/src/carousel/carousel.spec.ts +0 -337
- package/src/carousel/carousel.ts +0 -919
- package/src/carousel/index.ts +0 -22
- package/src/cascade-select/cascade-select-option.ts +0 -205
- package/src/cascade-select/cascade-select-panel.ts +0 -106
- package/src/cascade-select/cascade-select-root.ts +0 -265
- package/src/cascade-select/cascade-select-sub-panel.ts +0 -168
- package/src/cascade-select/cascade-select-trigger.ts +0 -44
- package/src/cascade-select/cascade-select.context.ts +0 -71
- package/src/cascade-select/cascade-select.spec.ts +0 -241
- package/src/cascade-select/cascade-select.ts +0 -5
- package/src/cascade-select/index.ts +0 -11
- package/src/chart/chart.spec.ts +0 -27
- package/src/chart/chart.ts +0 -52
- package/src/chart/index.ts +0 -1
- package/src/chat/chat-avatar.ts +0 -31
- package/src/chat/chat-bubble.ts +0 -49
- package/src/chat/chat-footer.ts +0 -67
- package/src/chat/chat-header.ts +0 -41
- package/src/chat/chat-log.ts +0 -43
- package/src/chat/chat.context.ts +0 -64
- package/src/chat/chat.spec.ts +0 -341
- package/src/chat/chat.ts +0 -191
- package/src/chat/config.ts +0 -53
- package/src/chat/index.ts +0 -21
- package/src/checkbox/checkbox.spec.ts +0 -35
- package/src/checkbox/checkbox.ts +0 -89
- package/src/checkbox/index.ts +0 -1
- package/src/color-picker/color-picker.context.ts +0 -74
- package/src/color-picker/color-picker.spec.ts +0 -241
- package/src/color-picker/color-picker.ts +0 -698
- package/src/color-picker/color-picker.utils.ts +0 -140
- package/src/color-picker/index.ts +0 -28
- package/src/combobox/combobox-input.ts +0 -143
- package/src/combobox/combobox-listbox.ts +0 -49
- package/src/combobox/combobox-option.ts +0 -43
- package/src/combobox/combobox-root.ts +0 -281
- package/src/combobox/combobox.spec.ts +0 -75
- package/src/combobox/combobox.ts +0 -4
- package/src/combobox/index.ts +0 -4
- package/src/command-palette/command-empty.ts +0 -36
- package/src/command-palette/command-group.ts +0 -21
- package/src/command-palette/command-input.ts +0 -70
- package/src/command-palette/command-item.ts +0 -60
- package/src/command-palette/command-list.ts +0 -25
- package/src/command-palette/command-palette-dialog.ts +0 -74
- package/src/command-palette/command-palette-trigger.ts +0 -64
- package/src/command-palette/command-palette.filters.ts +0 -53
- package/src/command-palette/command-palette.spec.ts +0 -349
- package/src/command-palette/command-palette.ts +0 -204
- package/src/command-palette/command-separator.ts +0 -18
- package/src/command-palette/index.ts +0 -15
- package/src/confirm-popup/confirm-popup-action.ts +0 -39
- package/src/confirm-popup/confirm-popup-cancel.ts +0 -38
- package/src/confirm-popup/confirm-popup-content.ts +0 -113
- package/src/confirm-popup/confirm-popup-message.ts +0 -36
- package/src/confirm-popup/confirm-popup-trigger.ts +0 -31
- package/src/confirm-popup/confirm-popup.context.ts +0 -41
- package/src/confirm-popup/confirm-popup.spec.ts +0 -337
- package/src/confirm-popup/confirm-popup.ts +0 -109
- package/src/confirm-popup/index.ts +0 -12
- package/src/date-picker/date-picker-calendar.ts +0 -65
- package/src/date-picker/date-picker-trigger.ts +0 -215
- package/src/date-picker/date-picker.context.ts +0 -50
- package/src/date-picker/date-picker.spec.ts +0 -117
- package/src/date-picker/date-picker.ts +0 -127
- package/src/date-picker/index.ts +0 -7
- package/src/dialog/_examples/dialog.confirm.example.ts +0 -145
- package/src/dialog/_examples/dialog.example.ts +0 -106
- package/src/dialog/_examples/dialog.finance.example.ts +0 -121
- package/src/dialog/_examples/dialog.retro.example.ts +0 -126
- package/src/dialog/_examples/index.ts +0 -6
- package/src/dialog/dialog.ref.ts +0 -42
- package/src/dialog/dialog.service.ts +0 -66
- package/src/dialog/dialog.spec.ts +0 -37
- package/src/dialog/dialog.ts +0 -26
- package/src/dialog/index.ts +0 -3
- package/src/divider/divider.spec.ts +0 -223
- package/src/divider/divider.ts +0 -137
- package/src/divider/index.ts +0 -5
- package/src/drawer/drawer.ref.ts +0 -63
- package/src/drawer/drawer.service.ts +0 -106
- package/src/drawer/drawer.spec.ts +0 -117
- package/src/drawer/drawer.ts +0 -122
- package/src/drawer/index.ts +0 -10
- package/src/dropdown-menu/dropdown-menu-content.ts +0 -258
- package/src/dropdown-menu/dropdown-menu-group.ts +0 -31
- package/src/dropdown-menu/dropdown-menu-item.ts +0 -51
- package/src/dropdown-menu/dropdown-menu-label.ts +0 -41
- package/src/dropdown-menu/dropdown-menu-separator.ts +0 -27
- package/src/dropdown-menu/dropdown-menu-trigger.ts +0 -140
- package/src/dropdown-menu/dropdown-menu.spec.ts +0 -265
- package/src/dropdown-menu/dropdown-menu.ts +0 -60
- package/src/dropdown-menu/index.ts +0 -15
- package/src/example-components.ts +0 -42
- package/src/field/field-error.ts +0 -49
- package/src/field/field-group.ts +0 -39
- package/src/field/field-help.ts +0 -47
- package/src/field/field-label.ts +0 -30
- package/src/field/field.context.ts +0 -28
- package/src/field/field.spec.ts +0 -179
- package/src/field/field.ts +0 -121
- package/src/field/index.ts +0 -6
- package/src/file-upload/file-upload.context.ts +0 -89
- package/src/file-upload/file-upload.spec.ts +0 -290
- package/src/file-upload/file-upload.ts +0 -639
- package/src/file-upload/file-upload.types.ts +0 -59
- package/src/file-upload/index.ts +0 -23
- package/src/form/form-error-summary.ts +0 -87
- package/src/form/form-field.context.ts +0 -3
- package/src/form/form-field.spec.ts +0 -25
- package/src/form/form-field.ts +0 -52
- package/src/form/form.context.ts +0 -53
- package/src/form/form.spec.ts +0 -162
- package/src/form/form.ts +0 -326
- package/src/form/index.ts +0 -11
- package/src/icon/E2E.md +0 -14
- package/src/icon/icon.directive.spec.ts +0 -198
- package/src/icon/icon.directive.ts +0 -113
- package/src/icon/icon.mode.spec.ts +0 -29
- package/src/icon/icon.mode.ts +0 -23
- package/src/icon/icon.providers.spec.ts +0 -63
- package/src/icon/icon.providers.ts +0 -47
- package/src/icon/icon.resolver.spec.ts +0 -96
- package/src/icon/icon.resolver.ts +0 -49
- package/src/icon/icon.tokens.ts +0 -88
- package/src/icon/icon.types.ts +0 -48
- package/src/icon/index.ts +0 -21
- package/src/input/index.ts +0 -1
- package/src/input/input.spec.ts +0 -43
- package/src/input/input.ts +0 -89
- package/src/input-group/index.ts +0 -3
- package/src/input-group/input-group-addon.ts +0 -92
- package/src/input-group/input-group.context.ts +0 -27
- package/src/input-group/input-group.spec.ts +0 -186
- package/src/input-group/input-group.ts +0 -136
- package/src/input-mask/index.ts +0 -11
- package/src/input-mask/input-mask.compile.ts +0 -69
- package/src/input-mask/input-mask.engine.ts +0 -376
- package/src/input-mask/input-mask.presets.ts +0 -24
- package/src/input-mask/input-mask.spec.ts +0 -304
- package/src/input-mask/input-mask.tokens.ts +0 -49
- package/src/input-mask/input-mask.ts +0 -280
- package/src/input-otp/index.ts +0 -2
- package/src/input-otp/input-otp.context.ts +0 -41
- package/src/input-otp/input-otp.spec.ts +0 -308
- package/src/input-otp/input-otp.ts +0 -470
- package/src/kbd/index.ts +0 -1
- package/src/kbd/kbd.spec.ts +0 -127
- package/src/kbd/kbd.ts +0 -132
- package/src/link/config.ts +0 -44
- package/src/link/index.ts +0 -2
- package/src/link/link.spec.ts +0 -246
- package/src/link/link.ts +0 -226
- package/src/list/index.ts +0 -11
- package/src/list/list.spec.ts +0 -237
- package/src/list/list.ts +0 -277
- package/src/menubar/index.ts +0 -7
- package/src/menubar/menubar-item.ts +0 -204
- package/src/menubar/menubar.context.ts +0 -43
- package/src/menubar/menubar.spec.ts +0 -433
- package/src/menubar/menubar.ts +0 -309
- package/src/number-input/index.ts +0 -4
- package/src/number-input/number-input-group.ts +0 -64
- package/src/number-input/number-input.context.ts +0 -31
- package/src/number-input/number-input.format.ts +0 -148
- package/src/number-input/number-input.spec.ts +0 -170
- package/src/number-input/number-input.ts +0 -457
- package/src/number-input/number-stepper.ts +0 -193
- package/src/overlay-badge/index.ts +0 -7
- package/src/overlay-badge/overlay-badge-content.ts +0 -73
- package/src/overlay-badge/overlay-badge.context.ts +0 -37
- package/src/overlay-badge/overlay-badge.spec.ts +0 -220
- package/src/overlay-badge/overlay-badge.ts +0 -128
- package/src/pagination/config.ts +0 -82
- package/src/pagination/index.ts +0 -19
- package/src/pagination/page-tokens.ts +0 -78
- package/src/pagination/pagination-ellipsis.ts +0 -69
- package/src/pagination/pagination-first.ts +0 -84
- package/src/pagination/pagination-info.ts +0 -70
- package/src/pagination/pagination-item.ts +0 -81
- package/src/pagination/pagination-last.ts +0 -85
- package/src/pagination/pagination-next.ts +0 -86
- package/src/pagination/pagination-previous.ts +0 -90
- package/src/pagination/pagination.context.ts +0 -52
- package/src/pagination/pagination.spec.ts +0 -388
- package/src/pagination/pagination.ts +0 -288
- package/src/password-input/index.ts +0 -15
- package/src/password-input/password-input.context.ts +0 -65
- package/src/password-input/password-input.scorer.ts +0 -34
- package/src/password-input/password-input.spec.ts +0 -274
- package/src/password-input/password-input.ts +0 -488
- package/src/popover/_examples/index.ts +0 -5
- package/src/popover/_examples/popover.example.ts +0 -92
- package/src/popover/_examples/popover.finance.example.ts +0 -106
- package/src/popover/_examples/popover.retro.example.ts +0 -103
- package/src/popover/index.ts +0 -5
- package/src/popover/popover-arrow.ts +0 -30
- package/src/popover/popover-close.ts +0 -36
- package/src/popover/popover-content.ts +0 -41
- package/src/popover/popover-title.ts +0 -39
- package/src/popover/popover-trigger.ts +0 -40
- package/src/popover/popover.spec.ts +0 -59
- package/src/popover/popover.ts +0 -5
- package/src/presets/bind-presets.spec.ts +0 -50
- package/src/presets/bind-presets.ts +0 -43
- package/src/presets/index.ts +0 -3
- package/src/presets/size.spec.ts +0 -67
- package/src/presets/size.ts +0 -59
- package/src/presets/variant.spec.ts +0 -72
- package/src/presets/variant.ts +0 -62
- package/src/primitives/.gitkeep +0 -0
- package/src/primitives/directionality/directionality.spec.ts +0 -112
- package/src/primitives/directionality/directionality.ts +0 -89
- package/src/primitives/directionality/index.ts +0 -1
- package/src/primitives/forms/form-control.spec.ts +0 -67
- package/src/primitives/forms/form-control.ts +0 -94
- package/src/primitives/forms/index.ts +0 -1
- package/src/primitives/index.ts +0 -6
- package/src/primitives/interaction/disabled.spec.ts +0 -47
- package/src/primitives/interaction/disabled.ts +0 -31
- package/src/primitives/interaction/focus-ring.spec.ts +0 -62
- package/src/primitives/interaction/focus-ring.ts +0 -59
- package/src/primitives/interaction/index.ts +0 -2
- package/src/primitives/list/filterable-list.spec.ts +0 -114
- package/src/primitives/list/filterable-list.ts +0 -126
- package/src/primitives/list/group.spec.ts +0 -99
- package/src/primitives/list/group.ts +0 -139
- package/src/primitives/list/index.ts +0 -8
- package/src/primitives/list/inject-helpers.ts +0 -8
- package/src/primitives/list/item.spec.ts +0 -173
- package/src/primitives/list/item.ts +0 -222
- package/src/primitives/list/navigator.spec.ts +0 -286
- package/src/primitives/list/navigator.ts +0 -238
- package/src/primitives/list/selection.spec.ts +0 -214
- package/src/primitives/list/selection.ts +0 -339
- package/src/primitives/list/tokens.ts +0 -106
- package/src/primitives/list/type-ahead.spec.ts +0 -58
- package/src/primitives/list/type-ahead.ts +0 -46
- package/src/primitives/overlay/backdrop.spec.ts +0 -54
- package/src/primitives/overlay/backdrop.ts +0 -31
- package/src/primitives/overlay/builder.spec.ts +0 -38
- package/src/primitives/overlay/builder.ts +0 -151
- package/src/primitives/overlay/container.ts +0 -42
- package/src/primitives/overlay/context.ts +0 -14
- package/src/primitives/overlay/controller.spec.ts +0 -86
- package/src/primitives/overlay/controller.ts +0 -190
- package/src/primitives/overlay/id.spec.ts +0 -24
- package/src/primitives/overlay/id.ts +0 -17
- package/src/primitives/overlay/index.ts +0 -18
- package/src/primitives/overlay/overlay.css +0 -42
- package/src/primitives/overlay/panel.spec.ts +0 -52
- package/src/primitives/overlay/panel.ts +0 -102
- package/src/primitives/overlay/stack.spec.ts +0 -55
- package/src/primitives/overlay/stack.ts +0 -113
- package/src/primitives/overlay/strategies/backdrop/blurred.spec.ts +0 -11
- package/src/primitives/overlay/strategies/backdrop/blurred.ts +0 -5
- package/src/primitives/overlay/strategies/backdrop/none.spec.ts +0 -10
- package/src/primitives/overlay/strategies/backdrop/none.ts +0 -9
- package/src/primitives/overlay/strategies/backdrop/solid.spec.ts +0 -18
- package/src/primitives/overlay/strategies/backdrop/solid.ts +0 -23
- package/src/primitives/overlay/strategies/focus-trap/inert-based.spec.ts +0 -28
- package/src/primitives/overlay/strategies/focus-trap/inert-based.ts +0 -38
- package/src/primitives/overlay/strategies/focus-trap/no-trap.spec.ts +0 -9
- package/src/primitives/overlay/strategies/focus-trap/no-trap.ts +0 -8
- package/src/primitives/overlay/strategies/focus-trap/tab-cycle.spec.ts +0 -49
- package/src/primitives/overlay/strategies/focus-trap/tab-cycle.ts +0 -85
- package/src/primitives/overlay/strategies/index.ts +0 -34
- package/src/primitives/overlay/strategies/live-announcer/_announce.ts +0 -35
- package/src/primitives/overlay/strategies/live-announcer/assertive.spec.ts +0 -21
- package/src/primitives/overlay/strategies/live-announcer/assertive.ts +0 -11
- package/src/primitives/overlay/strategies/live-announcer/polite.spec.ts +0 -21
- package/src/primitives/overlay/strategies/live-announcer/polite.ts +0 -11
- package/src/primitives/overlay/strategies/live-announcer/silent.spec.ts +0 -12
- package/src/primitives/overlay/strategies/live-announcer/silent.ts +0 -5
- package/src/primitives/overlay/strategies/mount/body-portal.spec.ts +0 -40
- package/src/primitives/overlay/strategies/mount/body-portal.ts +0 -91
- package/src/primitives/overlay/strategies/mount/in-container.spec.ts +0 -43
- package/src/primitives/overlay/strategies/mount/in-container.ts +0 -39
- package/src/primitives/overlay/strategies/mount/in-place.spec.ts +0 -40
- package/src/primitives/overlay/strategies/mount/in-place.ts +0 -20
- package/src/primitives/overlay/strategies/position/anchored-to.spec.ts +0 -56
- package/src/primitives/overlay/strategies/position/anchored-to.ts +0 -248
- package/src/primitives/overlay/strategies/position/corner.spec.ts +0 -36
- package/src/primitives/overlay/strategies/position/corner.ts +0 -33
- package/src/primitives/overlay/strategies/position/edge-sheet.spec.ts +0 -32
- package/src/primitives/overlay/strategies/position/edge-sheet.ts +0 -36
- package/src/primitives/overlay/strategies/position/in-place-sibling.spec.ts +0 -25
- package/src/primitives/overlay/strategies/position/in-place-sibling.ts +0 -13
- package/src/primitives/overlay/strategies/position/point-at.spec.ts +0 -40
- package/src/primitives/overlay/strategies/position/point-at.ts +0 -34
- package/src/primitives/overlay/strategies/position/viewport-centered.spec.ts +0 -31
- package/src/primitives/overlay/strategies/position/viewport-centered.ts +0 -31
- package/src/primitives/overlay/strategies/scroll-lock/css-clip.spec.ts +0 -15
- package/src/primitives/overlay/strategies/scroll-lock/css-clip.ts +0 -39
- package/src/primitives/overlay/strategies/scroll-lock/html-overflow.spec.ts +0 -21
- package/src/primitives/overlay/strategies/scroll-lock/html-overflow.ts +0 -44
- package/src/primitives/overlay/strategies/scroll-lock/none.spec.ts +0 -9
- package/src/primitives/overlay/strategies/scroll-lock/none.ts +0 -5
- package/src/primitives/overlay/strategies/trigger-event/on-click.spec.ts +0 -32
- package/src/primitives/overlay/strategies/trigger-event/on-click.ts +0 -28
- package/src/primitives/overlay/strategies/trigger-event/on-context-menu.spec.ts +0 -45
- package/src/primitives/overlay/strategies/trigger-event/on-context-menu.ts +0 -70
- package/src/primitives/overlay/strategies/trigger-event/on-focus-or-input.spec.ts +0 -35
- package/src/primitives/overlay/strategies/trigger-event/on-focus-or-input.ts +0 -34
- package/src/primitives/overlay/strategies/trigger-event/on-focus.spec.ts +0 -64
- package/src/primitives/overlay/strategies/trigger-event/on-focus.ts +0 -37
- package/src/primitives/overlay/strategies/trigger-event/on-hotkey.spec.ts +0 -37
- package/src/primitives/overlay/strategies/trigger-event/on-hotkey.ts +0 -59
- package/src/primitives/overlay/strategies/trigger-event/on-hover.spec.ts +0 -34
- package/src/primitives/overlay/strategies/trigger-event/on-hover.ts +0 -86
- package/src/primitives/overlay/strategies/trigger-event/programmatic.spec.ts +0 -16
- package/src/primitives/overlay/strategies/trigger-event/programmatic.ts +0 -12
- package/src/primitives/overlay/tokens.ts +0 -54
- package/src/primitives/overlay/trigger.spec.ts +0 -103
- package/src/primitives/overlay/trigger.ts +0 -75
- package/src/primitives/overlay/types.ts +0 -24
- package/src/primitives/overlay/wrapper.ts +0 -50
- package/src/primitives/signals/deep-signal.ts +0 -109
- package/src/primitives/signals/index.ts +0 -1
- package/src/progress-bar/config.ts +0 -48
- package/src/progress-bar/index.ts +0 -12
- package/src/progress-bar/progress-bar-fill.ts +0 -37
- package/src/progress-bar/progress-bar.context.ts +0 -34
- package/src/progress-bar/progress-bar.spec.ts +0 -423
- package/src/progress-bar/progress-bar.ts +0 -217
- package/src/public-api.ts +0 -84
- package/src/radio/index.ts +0 -2
- package/src/radio/radio.context.ts +0 -3
- package/src/radio/radio.spec.ts +0 -36
- package/src/radio/radio.ts +0 -66
- package/src/select/index.ts +0 -4
- package/src/select/select-content.ts +0 -69
- package/src/select/select-option.ts +0 -35
- package/src/select/select-root.ts +0 -129
- package/src/select/select-trigger.ts +0 -93
- package/src/select/select.spec.ts +0 -138
- package/src/select/select.ts +0 -4
- package/src/skeleton/index.ts +0 -5
- package/src/skeleton/skeleton.spec.ts +0 -115
- package/src/skeleton/skeleton.ts +0 -56
- package/src/slider/index.ts +0 -10
- package/src/slider/slider-range.ts +0 -49
- package/src/slider/slider-thumb.ts +0 -335
- package/src/slider/slider-track.ts +0 -70
- package/src/slider/slider.context.ts +0 -79
- package/src/slider/slider.geometry.ts +0 -73
- package/src/slider/slider.spec.ts +0 -216
- package/src/slider/slider.ts +0 -443
- package/src/speed-dial/index.ts +0 -10
- package/src/speed-dial/speed-dial-action.ts +0 -40
- package/src/speed-dial/speed-dial-actions.ts +0 -31
- package/src/speed-dial/speed-dial-trigger.ts +0 -55
- package/src/speed-dial/speed-dial.context.ts +0 -36
- package/src/speed-dial/speed-dial.spec.ts +0 -143
- package/src/speed-dial/speed-dial.ts +0 -127
- package/src/spinner/config.ts +0 -48
- package/src/spinner/index.ts +0 -8
- package/src/spinner/spinner.spec.ts +0 -262
- package/src/spinner/spinner.ts +0 -129
- package/src/stepper/index.ts +0 -15
- package/src/stepper/stepper.context.ts +0 -63
- package/src/stepper/stepper.spec.ts +0 -403
- package/src/stepper/stepper.ts +0 -544
- package/src/styles/docs-themes.css +0 -82
- package/src/styles.css +0 -17
- package/src/table/column-helpers.spec.ts +0 -74
- package/src/table/column-helpers.ts +0 -68
- package/src/table/filter-fns.ts +0 -230
- package/src/table/filter-models.spec.ts +0 -240
- package/src/table/filter-models.ts +0 -124
- package/src/table/filter-params.ts +0 -90
- package/src/table/grid-api-impl.ts +0 -321
- package/src/table/grid-api.spec.ts +0 -178
- package/src/table/grid-api.ts +0 -285
- package/src/table/index.ts +0 -73
- package/src/table/table-cell.spec.ts +0 -43
- package/src/table/table-cell.ts +0 -38
- package/src/table/table-filter-outlet.ts +0 -120
- package/src/table/table-header.spec.ts +0 -54
- package/src/table/table-header.ts +0 -63
- package/src/table/table-keyboard.spec.ts +0 -68
- package/src/table/table-keyboard.ts +0 -107
- package/src/table/table-resource.spec.ts +0 -37
- package/src/table/table-resource.ts +0 -36
- package/src/table/table-row.spec.ts +0 -54
- package/src/table/table-row.ts +0 -31
- package/src/table/table-storage.spec.ts +0 -67
- package/src/table/table-storage.ts +0 -76
- package/src/table/table.spec.ts +0 -172
- package/src/table/table.ts +0 -281
- package/src/table/table.types.ts +0 -83
- package/src/tabs/index.ts +0 -7
- package/src/tabs/tabs.context.ts +0 -32
- package/src/tabs/tabs.spec.ts +0 -352
- package/src/tabs/tabs.ts +0 -364
- package/src/tag/config.ts +0 -53
- package/src/tag/index.ts +0 -7
- package/src/tag/tag-list.ts +0 -76
- package/src/tag/tag-remove.ts +0 -61
- package/src/tag/tag.context.ts +0 -36
- package/src/tag/tag.spec.ts +0 -240
- package/src/tag/tag.ts +0 -203
- package/src/test-setup.ts +0 -5
- package/src/textarea/config.ts +0 -42
- package/src/textarea/index.ts +0 -8
- package/src/textarea/textarea.spec.ts +0 -176
- package/src/textarea/textarea.ts +0 -235
- package/src/time-picker/index.ts +0 -15
- package/src/time-picker/time-picker-meridiem.ts +0 -123
- package/src/time-picker/time-picker-segment.ts +0 -318
- package/src/time-picker/time-picker.context.ts +0 -38
- package/src/time-picker/time-picker.format.ts +0 -181
- package/src/time-picker/time-picker.spec.ts +0 -189
- package/src/time-picker/time-picker.ts +0 -274
- package/src/toast/_examples/index.ts +0 -5
- package/src/toast/_examples/toast.example.ts +0 -282
- package/src/toast/_examples/toast.finance.example.ts +0 -180
- package/src/toast/_examples/toast.retro.example.ts +0 -161
- package/src/toast/index.ts +0 -28
- package/src/toast/toast.ref.ts +0 -26
- package/src/toast/toast.service.ts +0 -339
- package/src/toast/toast.spec.ts +0 -247
- package/src/toast/toast.strategy.ts +0 -112
- package/src/toast/toast.ts +0 -463
- package/src/toast/toast.types.ts +0 -5
- package/src/toggle/index.ts +0 -1
- package/src/toggle/toggle.spec.ts +0 -24
- package/src/toggle/toggle.ts +0 -48
- package/src/tooltip/_examples/index.ts +0 -6
- package/src/tooltip/_examples/tooltip.example.ts +0 -82
- package/src/tooltip/_examples/tooltip.finance.example.ts +0 -97
- package/src/tooltip/_examples/tooltip.placements.example.ts +0 -83
- package/src/tooltip/_examples/tooltip.retro.example.ts +0 -107
- package/src/tooltip/index.ts +0 -4
- package/src/tooltip/tooltip-arrow.ts +0 -31
- package/src/tooltip/tooltip-content.ts +0 -38
- package/src/tooltip/tooltip-group.ts +0 -32
- package/src/tooltip/tooltip-trigger.ts +0 -47
- package/src/tooltip/tooltip.spec.ts +0 -40
- package/src/tooltip/tooltip.ts +0 -5
- package/src/tree-select/index.ts +0 -12
- package/src/tree-select/tree-select-content.ts +0 -199
- package/src/tree-select/tree-select-node.ts +0 -132
- package/src/tree-select/tree-select-root.ts +0 -272
- package/src/tree-select/tree-select-trigger.ts +0 -90
- package/src/tree-select/tree-select.context.ts +0 -63
- package/src/tree-select/tree-select.spec.ts +0 -433
- package/src/tree-select/tree-select.ts +0 -2
- package/src/typography/blockquote.ts +0 -57
- package/src/typography/code.ts +0 -53
- package/src/typography/index.ts +0 -22
- package/src/typography/lead.ts +0 -49
- package/src/typography/muted.ts +0 -29
- package/src/typography/truncate.ts +0 -99
- package/src/typography/typography.spec.ts +0 -203
- package/tsconfig.lib.json +0 -21
- package/tsconfig.lib.prod.json +0 -17
- package/tsconfig.spec.json +0 -18
- package/vite.config.ts +0 -27
- /package/{src/icon → icon}/icon.css +0 -0
- /package/{src/typography → typography}/prose.css +0 -0
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DestroyRef,
|
|
3
|
-
Directive,
|
|
4
|
-
Signal,
|
|
5
|
-
booleanAttribute,
|
|
6
|
-
computed,
|
|
7
|
-
inject,
|
|
8
|
-
input,
|
|
9
|
-
} from '@angular/core';
|
|
10
|
-
import { KJ_INPUT_GROUP } from './input-group.context';
|
|
11
|
-
|
|
12
|
-
/** Auto-incrementing counter for stable addon ids. */
|
|
13
|
-
let _nextId = 0;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Marks an element as a prefix or suffix addon inside a `[kjInputGroup]`.
|
|
17
|
-
*
|
|
18
|
-
* Auto-mints a stable `id` (e.g. `kj-addon-0`) so the parent group can build
|
|
19
|
-
* `aria-labelledby` lists. Registers with the group on construction and
|
|
20
|
-
* deregisters on destroy.
|
|
21
|
-
*
|
|
22
|
-
* - `kjPosition='start'` — always treated as a leading addon.
|
|
23
|
-
* - `kjPosition='end'` — always treated as a trailing addon.
|
|
24
|
-
* - `kjPosition='auto'` — inferred from DOM order (default).
|
|
25
|
-
*
|
|
26
|
-
* Set `kjAriaHidden="true"` (or omit) to mark decorative addons (icons,
|
|
27
|
-
* currency symbols, etc.) that do not need to participate in
|
|
28
|
-
* `aria-labelledby`.
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* ```html
|
|
32
|
-
* <span kjInputGroupAddon>$</span>
|
|
33
|
-
* <input kjInput type="text" placeholder="Amount" />
|
|
34
|
-
* <span kjInputGroupAddon kjPosition="end">.00</span>
|
|
35
|
-
* ```
|
|
36
|
-
* @doc-category Core/Inputs
|
|
37
|
-
* @doc
|
|
38
|
-
* @doc-name input-group
|
|
39
|
-
*/
|
|
40
|
-
@Directive({
|
|
41
|
-
selector: '[kjInputGroupAddon]',
|
|
42
|
-
standalone: true,
|
|
43
|
-
exportAs: 'kjInputGroupAddon',
|
|
44
|
-
host: {
|
|
45
|
-
'[id]': 'addonId',
|
|
46
|
-
'[attr.aria-hidden]': 'kjAriaHidden() != null ? (kjAriaHidden() ? "true" : null) : null',
|
|
47
|
-
'[attr.data-position]': 'kjPosition()',
|
|
48
|
-
},
|
|
49
|
-
})
|
|
50
|
-
export class KjInputGroupAddon {
|
|
51
|
-
private readonly _group = inject(KJ_INPUT_GROUP, { optional: true });
|
|
52
|
-
private readonly _destroyRef = inject(DestroyRef);
|
|
53
|
-
|
|
54
|
-
/** Stable id for this addon — set once at construction time. */
|
|
55
|
-
readonly addonId = `kj-addon-${_nextId++}`;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Explicit position override. When `'auto'` (default), position is inferred
|
|
59
|
-
* from DOM order within the group.
|
|
60
|
-
*/
|
|
61
|
-
readonly kjPosition = input<'start' | 'end' | 'auto'>('auto');
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* When `true`, marks this addon as decorative (`aria-hidden="true"`).
|
|
65
|
-
* When `false`, ensures the element is not hidden.
|
|
66
|
-
* When `undefined` (default), no `aria-hidden` attribute is written.
|
|
67
|
-
*/
|
|
68
|
-
readonly kjAriaHidden = input<boolean | undefined, boolean | string | undefined>(undefined, {
|
|
69
|
-
transform: (v: boolean | string | undefined): boolean | undefined => {
|
|
70
|
-
if (v === undefined || v === '') return undefined;
|
|
71
|
-
return booleanAttribute(v);
|
|
72
|
-
},
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
/** `true` when this addon should be excluded from `aria-labelledby` composition. */
|
|
76
|
-
readonly isDecorative: Signal<boolean> = computed(() => this.kjAriaHidden() === true);
|
|
77
|
-
|
|
78
|
-
constructor() {
|
|
79
|
-
if (this._group) {
|
|
80
|
-
const group = this._group;
|
|
81
|
-
const id = this.addonId;
|
|
82
|
-
const position = this.kjPosition;
|
|
83
|
-
const isDecorative = this.isDecorative;
|
|
84
|
-
|
|
85
|
-
group.registerAddon({ id, position, isDecorative });
|
|
86
|
-
|
|
87
|
-
this._destroyRef.onDestroy(() => {
|
|
88
|
-
group.unregisterAddon(id);
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { InjectionToken, Signal } from '@angular/core';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Context interface surfaced by `KjInputGroup` for child addons and inputs.
|
|
5
|
-
*
|
|
6
|
-
* - `variant` / `size` / `disabled` propagate from the group to children.
|
|
7
|
-
* - `startAddonIds` / `endAddonIds` track registered addon ids for ARIA composition.
|
|
8
|
-
* - `registerAddon` / `unregisterAddon` maintain the addon registry.
|
|
9
|
-
* - `grouped: true` is a type discriminant that proves a context token is present.
|
|
10
|
-
*/
|
|
11
|
-
export interface KjInputGroupContext {
|
|
12
|
-
readonly variant: Signal<string | undefined>;
|
|
13
|
-
readonly size: Signal<string | undefined>;
|
|
14
|
-
readonly disabled: Signal<boolean>;
|
|
15
|
-
readonly grouped: true;
|
|
16
|
-
readonly startAddonIds: Signal<readonly string[]>;
|
|
17
|
-
readonly endAddonIds: Signal<readonly string[]>;
|
|
18
|
-
registerAddon(addon: {
|
|
19
|
-
id: string;
|
|
20
|
-
position: Signal<'start' | 'end' | 'auto'>;
|
|
21
|
-
isDecorative: Signal<boolean>;
|
|
22
|
-
}): void;
|
|
23
|
-
unregisterAddon(id: string): void;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** Injection token for `KjInputGroupContext`. */
|
|
27
|
-
export const KJ_INPUT_GROUP = new InjectionToken<KjInputGroupContext>('KjInputGroup');
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { Component, inject } from '@angular/core';
|
|
2
|
-
import { render } from '@testing-library/angular';
|
|
3
|
-
import { axe, toHaveNoViolations } from 'jest-axe';
|
|
4
|
-
import { describe, expect, it } from 'vitest';
|
|
5
|
-
|
|
6
|
-
import { KjInputGroupAddon } from './input-group-addon';
|
|
7
|
-
import { KjInputGroup } from './input-group';
|
|
8
|
-
import { KJ_INPUT_GROUP } from './input-group.context';
|
|
9
|
-
|
|
10
|
-
expect.extend(toHaveNoViolations);
|
|
11
|
-
|
|
12
|
-
describe('KjInputGroup', () => {
|
|
13
|
-
it('renders without error', async () => {
|
|
14
|
-
const { container } = await render(
|
|
15
|
-
`<div kjInputGroup>
|
|
16
|
-
<span kjInputGroupAddon>$</span>
|
|
17
|
-
</div>`,
|
|
18
|
-
{ imports: [KjInputGroup, KjInputGroupAddon] },
|
|
19
|
-
);
|
|
20
|
-
expect(container.querySelector('[kjInputGroup]')).toBeInTheDocument();
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('defaults to horizontal orientation', async () => {
|
|
24
|
-
const { container } = await render(
|
|
25
|
-
`<div kjInputGroup><span kjInputGroupAddon>$</span></div>`,
|
|
26
|
-
{ imports: [KjInputGroup, KjInputGroupAddon] },
|
|
27
|
-
);
|
|
28
|
-
const host = container.querySelector('[kjInputGroup]') as HTMLElement;
|
|
29
|
-
expect(host.getAttribute('data-orientation')).toBe('horizontal');
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('reflects kjOrientation="vertical" to data-orientation', async () => {
|
|
33
|
-
const { container } = await render(
|
|
34
|
-
`<div kjInputGroup [kjOrientation]="'vertical'"><span kjInputGroupAddon>$</span></div>`,
|
|
35
|
-
{ imports: [KjInputGroup, KjInputGroupAddon] },
|
|
36
|
-
);
|
|
37
|
-
const host = container.querySelector('[kjInputGroup]') as HTMLElement;
|
|
38
|
-
expect(host.getAttribute('data-orientation')).toBe('vertical');
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('sets data-disabled when kjDisabled is true', async () => {
|
|
42
|
-
const { container } = await render(
|
|
43
|
-
`<div kjInputGroup [kjDisabled]="true"><span kjInputGroupAddon>$</span></div>`,
|
|
44
|
-
{ imports: [KjInputGroup, KjInputGroupAddon] },
|
|
45
|
-
);
|
|
46
|
-
const host = container.querySelector('[kjInputGroup]') as HTMLElement;
|
|
47
|
-
expect(host.getAttribute('data-disabled')).toBe('');
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it('omits data-disabled when kjDisabled is false', async () => {
|
|
51
|
-
const { container } = await render(
|
|
52
|
-
`<div kjInputGroup><span kjInputGroupAddon>$</span></div>`,
|
|
53
|
-
{ imports: [KjInputGroup, KjInputGroupAddon] },
|
|
54
|
-
);
|
|
55
|
-
const host = container.querySelector('[kjInputGroup]') as HTMLElement;
|
|
56
|
-
expect(host.hasAttribute('data-disabled')).toBe(false);
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('provides KJ_INPUT_GROUP context', async () => {
|
|
60
|
-
let captured: ReturnType<typeof inject<typeof KJ_INPUT_GROUP>> | undefined;
|
|
61
|
-
|
|
62
|
-
@Component({
|
|
63
|
-
selector: 'kj-ig-probe',
|
|
64
|
-
standalone: true,
|
|
65
|
-
template: '',
|
|
66
|
-
})
|
|
67
|
-
class Probe {
|
|
68
|
-
constructor() {
|
|
69
|
-
captured = inject(KJ_INPUT_GROUP);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
await render(
|
|
74
|
-
`<div kjInputGroup [kjDisabled]="false">
|
|
75
|
-
<kj-ig-probe />
|
|
76
|
-
</div>`,
|
|
77
|
-
{ imports: [KjInputGroup, Probe] },
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
expect(captured).toBeDefined();
|
|
81
|
-
expect(captured!.grouped).toBe(true);
|
|
82
|
-
expect(captured!.disabled()).toBe(false);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('addons register with the group and expose an id', async () => {
|
|
86
|
-
let captured: ReturnType<typeof inject<typeof KJ_INPUT_GROUP>> | undefined;
|
|
87
|
-
|
|
88
|
-
@Component({
|
|
89
|
-
selector: 'kj-ig-ctx-probe',
|
|
90
|
-
standalone: true,
|
|
91
|
-
template: '',
|
|
92
|
-
})
|
|
93
|
-
class CtxProbe {
|
|
94
|
-
constructor() {
|
|
95
|
-
captured = inject(KJ_INPUT_GROUP);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
await render(
|
|
100
|
-
`<div kjInputGroup>
|
|
101
|
-
<span kjInputGroupAddon>$</span>
|
|
102
|
-
<kj-ig-ctx-probe />
|
|
103
|
-
<span kjInputGroupAddon kjPosition="end">.00</span>
|
|
104
|
-
</div>`,
|
|
105
|
-
{ imports: [KjInputGroup, KjInputGroupAddon, CtxProbe] },
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
// After both addons register, there should be entries in start / end ids.
|
|
109
|
-
expect(captured).toBeDefined();
|
|
110
|
-
// Non-decorative addons appear in either startAddonIds or endAddonIds.
|
|
111
|
-
const allIds = [...captured!.startAddonIds(), ...captured!.endAddonIds()];
|
|
112
|
-
expect(allIds.length).toBeGreaterThanOrEqual(1);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it('addon with kjAriaHidden="true" is excluded from id lists', async () => {
|
|
116
|
-
let captured: ReturnType<typeof inject<typeof KJ_INPUT_GROUP>> | undefined;
|
|
117
|
-
|
|
118
|
-
@Component({
|
|
119
|
-
selector: 'kj-ig-hidden-probe',
|
|
120
|
-
standalone: true,
|
|
121
|
-
template: '',
|
|
122
|
-
})
|
|
123
|
-
class HiddenProbe {
|
|
124
|
-
constructor() {
|
|
125
|
-
captured = inject(KJ_INPUT_GROUP);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
await render(
|
|
130
|
-
`<div kjInputGroup>
|
|
131
|
-
<span kjInputGroupAddon [kjAriaHidden]="true">icon</span>
|
|
132
|
-
<kj-ig-hidden-probe />
|
|
133
|
-
</div>`,
|
|
134
|
-
{ imports: [KjInputGroup, KjInputGroupAddon, HiddenProbe] },
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
expect(captured).toBeDefined();
|
|
138
|
-
const allIds = [...captured!.startAddonIds(), ...captured!.endAddonIds()];
|
|
139
|
-
expect(allIds.length).toBe(0);
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it('addon reflects kjPosition to data-position attribute', async () => {
|
|
143
|
-
const { container } = await render(
|
|
144
|
-
`<div kjInputGroup>
|
|
145
|
-
<span kjInputGroupAddon kjPosition="end">.00</span>
|
|
146
|
-
</div>`,
|
|
147
|
-
{ imports: [KjInputGroup, KjInputGroupAddon] },
|
|
148
|
-
);
|
|
149
|
-
const addon = container.querySelector('[kjInputGroupAddon]') as HTMLElement;
|
|
150
|
-
expect(addon.getAttribute('data-position')).toBe('end');
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
it('addon sets aria-hidden="true" when kjAriaHidden is true', async () => {
|
|
154
|
-
const { container } = await render(
|
|
155
|
-
`<div kjInputGroup>
|
|
156
|
-
<span kjInputGroupAddon [kjAriaHidden]="true">icon</span>
|
|
157
|
-
</div>`,
|
|
158
|
-
{ imports: [KjInputGroup, KjInputGroupAddon] },
|
|
159
|
-
);
|
|
160
|
-
const addon = container.querySelector('[kjInputGroupAddon]') as HTMLElement;
|
|
161
|
-
expect(addon.getAttribute('aria-hidden')).toBe('true');
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
it('addon does not set aria-hidden when kjAriaHidden is undefined', async () => {
|
|
165
|
-
const { container } = await render(
|
|
166
|
-
`<div kjInputGroup>
|
|
167
|
-
<span kjInputGroupAddon>$</span>
|
|
168
|
-
</div>`,
|
|
169
|
-
{ imports: [KjInputGroup, KjInputGroupAddon] },
|
|
170
|
-
);
|
|
171
|
-
const addon = container.querySelector('[kjInputGroupAddon]') as HTMLElement;
|
|
172
|
-
expect(addon.hasAttribute('aria-hidden')).toBe(false);
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
it('passes axe audit', async () => {
|
|
176
|
-
const { container } = await render(
|
|
177
|
-
`<div kjInputGroup aria-label="Amount">
|
|
178
|
-
<span kjInputGroupAddon aria-hidden="true">$</span>
|
|
179
|
-
<input type="text" aria-label="Amount" placeholder="Amount" />
|
|
180
|
-
<span kjInputGroupAddon aria-hidden="true">.00</span>
|
|
181
|
-
</div>`,
|
|
182
|
-
{ imports: [KjInputGroup, KjInputGroupAddon] },
|
|
183
|
-
);
|
|
184
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
185
|
-
});
|
|
186
|
-
});
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Directive,
|
|
3
|
-
Signal,
|
|
4
|
-
WritableSignal,
|
|
5
|
-
booleanAttribute,
|
|
6
|
-
computed,
|
|
7
|
-
inject,
|
|
8
|
-
input,
|
|
9
|
-
signal,
|
|
10
|
-
} from '@angular/core';
|
|
11
|
-
import { KjDisabled } from '../primitives/interaction/disabled';
|
|
12
|
-
import { KjSize } from '../presets/size';
|
|
13
|
-
import { KjVariant } from '../presets/variant';
|
|
14
|
-
import { KJ_INPUT_GROUP, KjInputGroupContext } from './input-group.context';
|
|
15
|
-
|
|
16
|
-
/** Internal shape stored in the addon registry. */
|
|
17
|
-
interface AddonEntry {
|
|
18
|
-
id: string;
|
|
19
|
-
position: Signal<'start' | 'end' | 'auto'>;
|
|
20
|
-
isDecorative: Signal<boolean>;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Coordinates a group of `[kjInputGroupAddon]` elements flanking a central
|
|
25
|
-
* `[kjInput]`. Provides the `KJ_INPUT_GROUP` context token, propagates
|
|
26
|
-
* variant/size/disabled to children, and builds the `startAddonIds` /
|
|
27
|
-
* `endAddonIds` lists used to compose `aria-labelledby` on the inner input.
|
|
28
|
-
*
|
|
29
|
-
* The directive is structural-only: it does not render any DOM of its own.
|
|
30
|
-
* Visual concerns live in `packages/components/src/input-group/`.
|
|
31
|
-
*
|
|
32
|
-
* @example
|
|
33
|
-
* ```html
|
|
34
|
-
* <div kjInputGroup [kjOrientation]="'horizontal'">
|
|
35
|
-
* <span kjInputGroupAddon>$</span>
|
|
36
|
-
* <input kjInput type="text" placeholder="Amount" />
|
|
37
|
-
* <span kjInputGroupAddon kjPosition="end">.00</span>
|
|
38
|
-
* </div>
|
|
39
|
-
* ```
|
|
40
|
-
* @doc-category Core/Inputs
|
|
41
|
-
* @doc
|
|
42
|
-
* @doc-name input-group
|
|
43
|
-
* @doc-description Groups an input with prefix and suffix addons that share variant, size, and disabled state.
|
|
44
|
-
* @doc-is-main
|
|
45
|
-
*/
|
|
46
|
-
@Directive({
|
|
47
|
-
selector: '[kjInputGroup]',
|
|
48
|
-
standalone: true,
|
|
49
|
-
exportAs: 'kjInputGroup',
|
|
50
|
-
hostDirectives: [
|
|
51
|
-
{ directive: KjVariant, inputs: ['kjVariant'] },
|
|
52
|
-
{ directive: KjSize, inputs: ['kjSize'] },
|
|
53
|
-
{ directive: KjDisabled, inputs: ['kjDisabled'] },
|
|
54
|
-
],
|
|
55
|
-
providers: [{ provide: KJ_INPUT_GROUP, useExisting: KjInputGroup }],
|
|
56
|
-
host: {
|
|
57
|
-
'[attr.data-orientation]': 'kjOrientation()',
|
|
58
|
-
'[attr.data-disabled]': 'aggregateDisabled() ? "" : null',
|
|
59
|
-
},
|
|
60
|
-
})
|
|
61
|
-
export class KjInputGroup implements KjInputGroupContext {
|
|
62
|
-
private readonly _variantDir = inject(KjVariant);
|
|
63
|
-
private readonly _sizeDir = inject(KjSize);
|
|
64
|
-
private readonly _disabledDir = inject(KjDisabled);
|
|
65
|
-
|
|
66
|
-
/** Layout axis for the group. */
|
|
67
|
-
readonly kjOrientation = input<'horizontal' | 'vertical'>('horizontal');
|
|
68
|
-
|
|
69
|
-
/** Disabled input (forwarded from `KjDisabled`). */
|
|
70
|
-
readonly kjDisabled = input(false, { transform: booleanAttribute });
|
|
71
|
-
|
|
72
|
-
// ── Addon registry ──────────────────────────────────────────────────────
|
|
73
|
-
private readonly _addons: WritableSignal<readonly AddonEntry[]> = signal([]);
|
|
74
|
-
|
|
75
|
-
/** Ids of addons positioned at the start of the group. */
|
|
76
|
-
readonly startAddonIds: Signal<readonly string[]> = computed(() =>
|
|
77
|
-
this._addons()
|
|
78
|
-
.filter(a => {
|
|
79
|
-
const pos = a.position();
|
|
80
|
-
return pos === 'start' || (pos === 'auto' && this._addons().indexOf(a) < this._firstNonStartIndex());
|
|
81
|
-
})
|
|
82
|
-
.filter(a => !a.isDecorative())
|
|
83
|
-
.map(a => a.id),
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
/** Ids of addons positioned at the end of the group. */
|
|
87
|
-
readonly endAddonIds: Signal<readonly string[]> = computed(() =>
|
|
88
|
-
this._addons()
|
|
89
|
-
.filter(a => {
|
|
90
|
-
const pos = a.position();
|
|
91
|
-
return pos === 'end' || (pos === 'auto' && this._addons().indexOf(a) >= this._firstNonStartIndex());
|
|
92
|
-
})
|
|
93
|
-
.filter(a => !a.isDecorative())
|
|
94
|
-
.map(a => a.id),
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
// ── KjInputGroupContext ──────────────────────────────────────────────────
|
|
98
|
-
readonly grouped = true as const;
|
|
99
|
-
|
|
100
|
-
get variant(): Signal<string | undefined> {
|
|
101
|
-
return this._variantDir.kjVariant as Signal<string | undefined>;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
get size(): Signal<string | undefined> {
|
|
105
|
-
return this._sizeDir.kjSize as Signal<string | undefined>;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
get disabled(): Signal<boolean> {
|
|
109
|
-
return this._disabledDir.disabled;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/** OR of own disabled flag. Exposed for host bindings and children. */
|
|
113
|
-
readonly aggregateDisabled = computed(() => this._disabledDir.disabled());
|
|
114
|
-
|
|
115
|
-
registerAddon(addon: AddonEntry): void {
|
|
116
|
-
this._addons.update(prev => [...prev, addon]);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
unregisterAddon(id: string): void {
|
|
120
|
-
this._addons.update(prev => prev.filter(a => a.id !== id));
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// ── Helpers ─────────────────────────────────────────────────────────────
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Returns the index of the first addon whose `position` signal is not
|
|
127
|
-
* `'start'` — used as the boundary between start and end in `'auto'` mode.
|
|
128
|
-
*/
|
|
129
|
-
private _firstNonStartIndex(): number {
|
|
130
|
-
const addons = this._addons();
|
|
131
|
-
for (let i = 0; i < addons.length; i++) {
|
|
132
|
-
if (addons[i].position() !== 'start') return i;
|
|
133
|
-
}
|
|
134
|
-
return addons.length;
|
|
135
|
-
}
|
|
136
|
-
}
|
package/src/input-mask/index.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export { KjInputMask } from './input-mask';
|
|
2
|
-
export { compileMask } from './input-mask.compile';
|
|
3
|
-
export type { Slot, CompiledMask } from './input-mask.compile';
|
|
4
|
-
export { MaskEngine } from './input-mask.engine';
|
|
5
|
-
export type { MaskEngineCallbacks, MaskEngineOptions } from './input-mask.engine';
|
|
6
|
-
export {
|
|
7
|
-
KJ_INPUT_MASK_TOKENS,
|
|
8
|
-
defaultMaskTokens,
|
|
9
|
-
provideKjInputMaskTokens,
|
|
10
|
-
} from './input-mask.tokens';
|
|
11
|
-
export { KJ_INPUT_MASK_PRESETS } from './input-mask.presets';
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A single slot in a compiled mask.
|
|
3
|
-
* - `literal`: a fixed character that is always rendered and skipped by the caret.
|
|
4
|
-
* - `variable`: a user-fillable position with a regex that filters keystrokes.
|
|
5
|
-
*/
|
|
6
|
-
export type Slot =
|
|
7
|
-
| { kind: 'literal'; char: string }
|
|
8
|
-
| { kind: 'variable'; tokenId: string; re: RegExp };
|
|
9
|
-
|
|
10
|
-
/** Result of compiling a mask template string. */
|
|
11
|
-
export interface CompiledMask {
|
|
12
|
-
/** Full slot vector — one entry per character position in the display string. */
|
|
13
|
-
readonly slots: ReadonlyArray<Slot>;
|
|
14
|
-
/** Positions (in `slots`) that are variable (user-fillable). */
|
|
15
|
-
readonly variableIndices: ReadonlyArray<number>;
|
|
16
|
-
readonly literalCount: number;
|
|
17
|
-
readonly variableCount: number;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Compiles a mask template string into a `CompiledMask`.
|
|
22
|
-
*
|
|
23
|
-
* Token characters (keys of `tokens`) become variable slots. Any other
|
|
24
|
-
* character becomes a literal slot. Escape a token character with a leading
|
|
25
|
-
* backslash: `\\9` → literal `9`.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```ts
|
|
29
|
-
* const mask = compileMask('(999) 999-9999', { '9': /[0-9]/ });
|
|
30
|
-
* // mask.variableCount === 10
|
|
31
|
-
* // mask.slots[0] === { kind: 'literal', char: '(' }
|
|
32
|
-
* // mask.slots[1] === { kind: 'variable', tokenId: '9', re: /[0-9]/ }
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
export function compileMask(
|
|
36
|
-
template: string,
|
|
37
|
-
tokens: Record<string, RegExp>,
|
|
38
|
-
): CompiledMask {
|
|
39
|
-
const slots: Slot[] = [];
|
|
40
|
-
const variableIndices: number[] = [];
|
|
41
|
-
let i = 0;
|
|
42
|
-
|
|
43
|
-
while (i < template.length) {
|
|
44
|
-
const ch = template[i];
|
|
45
|
-
|
|
46
|
-
// Escape: \\ followed by any character → literal of that character
|
|
47
|
-
if (ch === '\\' && i + 1 < template.length) {
|
|
48
|
-
slots.push({ kind: 'literal', char: template[i + 1] });
|
|
49
|
-
i += 2;
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const re = tokens[ch];
|
|
54
|
-
if (re) {
|
|
55
|
-
variableIndices.push(slots.length);
|
|
56
|
-
slots.push({ kind: 'variable', tokenId: ch, re });
|
|
57
|
-
} else {
|
|
58
|
-
slots.push({ kind: 'literal', char: ch });
|
|
59
|
-
}
|
|
60
|
-
i++;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
slots,
|
|
65
|
-
variableIndices,
|
|
66
|
-
literalCount: slots.length - variableIndices.length,
|
|
67
|
-
variableCount: variableIndices.length,
|
|
68
|
-
};
|
|
69
|
-
}
|