@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
package/src/slider/slider.ts
DELETED
|
@@ -1,443 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Directive,
|
|
3
|
-
ElementRef,
|
|
4
|
-
afterNextRender,
|
|
5
|
-
booleanAttribute,
|
|
6
|
-
computed,
|
|
7
|
-
effect,
|
|
8
|
-
inject,
|
|
9
|
-
input,
|
|
10
|
-
model,
|
|
11
|
-
numberAttribute,
|
|
12
|
-
output,
|
|
13
|
-
signal,
|
|
14
|
-
untracked,
|
|
15
|
-
} from '@angular/core';
|
|
16
|
-
import { KjDirectionality } from '../primitives/directionality/directionality';
|
|
17
|
-
import { KjDisabled } from '../primitives/interaction/disabled';
|
|
18
|
-
import { clamp, snapToStep } from '../number-input/number-input.format';
|
|
19
|
-
import {
|
|
20
|
-
KJ_SLIDER,
|
|
21
|
-
KjSliderContext,
|
|
22
|
-
KjSliderSource,
|
|
23
|
-
KjSliderThumbHandle,
|
|
24
|
-
} from './slider.context';
|
|
25
|
-
import { valueFromClientPosition } from './slider.geometry';
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Headless root of the `KjSlider` directive family. Owns bounds (`kjMin` /
|
|
29
|
-
* `kjMax` / `kjStep` / `kjPageStep` / `kjStepBase`), orientation, RTL,
|
|
30
|
-
* inverted axis, range-mode coordination (min-distance, swap policy), tick
|
|
31
|
-
* definition, and a per-mode value sugar (`kjValue` for single-thumb,
|
|
32
|
-
* `kjRange` for two-thumb). Publishes `KJ_SLIDER` to descendants.
|
|
33
|
-
*
|
|
34
|
-
* Composition shape (mirrors Radix):
|
|
35
|
-
*
|
|
36
|
-
* ```html
|
|
37
|
-
* <div kjSlider [(kjValue)]="volume" [kjMin]="0" [kjMax]="100" [kjStep]="1">
|
|
38
|
-
* <div kjSliderTrack>
|
|
39
|
-
* <div kjSliderRange></div>
|
|
40
|
-
* <button kjSliderThumb kjAriaLabel="Volume" type="button"></button>
|
|
41
|
-
* </div>
|
|
42
|
-
* </div>
|
|
43
|
-
* ```
|
|
44
|
-
*
|
|
45
|
-
* In single mode, `[(kjValue)]` mirrors the lone `[kjSliderThumb]` value.
|
|
46
|
-
* In range mode, bind `[(kjRange)]` (a `[number, number]` tuple) at the root,
|
|
47
|
-
* or two independent `[(kjValue)]`s on the two thumbs (with `KjFormControl`
|
|
48
|
-
* carrying each one through Angular Forms — natural validators).
|
|
49
|
-
*
|
|
50
|
-
* Per-thumb `KjFormControl` lives on the thumb directive, not here. The root
|
|
51
|
-
* coordinates: it enforces `kjMinDistance` and `kjAllowThumbCross`, narrows
|
|
52
|
-
* each thumb's `aria-valuemin/max` to the partner-thumb position, and
|
|
53
|
-
* exposes the dragging / active-thumb state for the wrapper visuals.
|
|
54
|
-
*
|
|
55
|
-
* @doc-css-var
|
|
56
|
-
* --kj-slider-track-thickness — Track width on vertical / height on horizontal.
|
|
57
|
-
* --kj-slider-track-bg — Track (unfilled portion) background.
|
|
58
|
-
* --kj-slider-fill-bg — Filled-range background between thumbs (or start → thumb).
|
|
59
|
-
* --kj-slider-thumb-size — Visual diameter of the thumb circle.
|
|
60
|
-
* --kj-slider-thumb-hit — Invisible hit area / touch target around the thumb. 2.75rem for WCAG 2.5.5.
|
|
61
|
-
* --kj-slider-thumb-bg — Thumb background fill.
|
|
62
|
-
* --kj-slider-thumb-fg — Thumb foreground (icon/text inside) color.
|
|
63
|
-
* --kj-slider-thumb-border — Thumb border shorthand. Halos the thumb against the track.
|
|
64
|
-
* --kj-slider-tick-size — Diameter of optional tick marks.
|
|
65
|
-
* --kj-slider-tick-bg — Tick mark color.
|
|
66
|
-
* --kj-slider-radius — Track and fill corner radius. Defaults to a pill.
|
|
67
|
-
* --kj-slider-vertical-length — Default rail length when orientation is vertical.
|
|
68
|
-
*
|
|
69
|
-
* @doc-category Library/Data input
|
|
70
|
-
* @doc
|
|
71
|
-
* @doc-name slider
|
|
72
|
-
* @doc-description Unstyled slider root for single or range value selection with bounds, orientation, RTL, and ticks.
|
|
73
|
-
* @doc-is-main
|
|
74
|
-
*/
|
|
75
|
-
@Directive({
|
|
76
|
-
selector: '[kjSlider]',
|
|
77
|
-
standalone: true,
|
|
78
|
-
hostDirectives: [{ directive: KjDisabled, inputs: ['kjDisabled'] }],
|
|
79
|
-
providers: [{ provide: KJ_SLIDER, useExisting: KjSlider }],
|
|
80
|
-
exportAs: 'kjSlider',
|
|
81
|
-
host: {
|
|
82
|
-
'[attr.role]': 'role()',
|
|
83
|
-
'[attr.data-orientation]': 'kjOrientation()',
|
|
84
|
-
'[attr.data-direction]': 'direction()',
|
|
85
|
-
'[attr.data-disabled]': 'kjDisabled() ? "" : null',
|
|
86
|
-
'[attr.data-readonly]': 'kjReadonly() ? "" : null',
|
|
87
|
-
'[attr.data-dragging]': 'dragging() ? "" : null',
|
|
88
|
-
},
|
|
89
|
-
})
|
|
90
|
-
export class KjSlider implements KjSliderContext {
|
|
91
|
-
private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);
|
|
92
|
-
private readonly directionality = inject(KjDirectionality);
|
|
93
|
-
|
|
94
|
-
// ── Bounds ────────────────────────────────────────────────────────────────
|
|
95
|
-
|
|
96
|
-
/** Lower bound. Reflected as `aria-valuemin` on each thumb. */
|
|
97
|
-
readonly kjMin = input<number, unknown>(0, { transform: numberAttribute });
|
|
98
|
-
|
|
99
|
-
/** Upper bound. Reflected as `aria-valuemax` on each thumb. */
|
|
100
|
-
readonly kjMax = input<number, unknown>(100, { transform: numberAttribute });
|
|
101
|
-
|
|
102
|
-
/** Increment unit. `0` (or non-positive) means continuous (no snap). */
|
|
103
|
-
readonly kjStep = input<number, unknown>(1, { transform: numberAttribute });
|
|
104
|
-
|
|
105
|
-
/** PageUp / PageDown step. Defaults to `max(kjStep * 10, range / 10)`. */
|
|
106
|
-
readonly kjPageStep = input<number | undefined, unknown>(undefined, { transform: optionalNumber });
|
|
107
|
-
|
|
108
|
-
/** Lattice base for snap-to-step. Defaults to `kjMin`. */
|
|
109
|
-
readonly kjStepBase = input<number | undefined, unknown>(undefined, { transform: optionalNumber });
|
|
110
|
-
|
|
111
|
-
// ── Layout ────────────────────────────────────────────────────────────────
|
|
112
|
-
|
|
113
|
-
/** Visual orientation. Reflected as `aria-orientation` on each thumb. */
|
|
114
|
-
readonly kjOrientation = input<'horizontal' | 'vertical'>('horizontal');
|
|
115
|
-
|
|
116
|
-
/** RTL handling. `'auto'` reads from the injected `KjDirectionality`. */
|
|
117
|
-
readonly kjDirection = input<'ltr' | 'rtl' | 'auto'>('auto');
|
|
118
|
-
|
|
119
|
-
/** Visually flips the axis without changing the keyboard contract. */
|
|
120
|
-
readonly kjInverted = input<boolean, unknown>(false, { transform: booleanAttribute });
|
|
121
|
-
|
|
122
|
-
// ── Range coordination ───────────────────────────────────────────────────
|
|
123
|
-
|
|
124
|
-
/** Minimum delta in *value* units between low and high in range mode. */
|
|
125
|
-
readonly kjMinDistance = input<number, unknown>(0, { transform: numberAttribute });
|
|
126
|
-
|
|
127
|
-
/** When `true`, low/high silently swap when crossed. Off by default. */
|
|
128
|
-
readonly kjAllowThumbCross = input<boolean, unknown>(false, { transform: booleanAttribute });
|
|
129
|
-
|
|
130
|
-
// ── Tick + display ───────────────────────────────────────────────────────
|
|
131
|
-
|
|
132
|
-
/** Tick definition. `false` (default) renders no ticks; `'auto'` per-step; explicit array for irregular ticks. */
|
|
133
|
-
readonly kjTicks = input<readonly number[] | 'auto' | false>(false);
|
|
134
|
-
|
|
135
|
-
/** Formatter for `aria-valuetext` / value bubble. Receives the thumb index. */
|
|
136
|
-
readonly kjDisplayWith = input<((value: number, thumbIndex: number) => string) | undefined>(undefined);
|
|
137
|
-
|
|
138
|
-
// ── State ────────────────────────────────────────────────────────────────
|
|
139
|
-
|
|
140
|
-
/** Read-only state. Drag and key both ignored; thumbs remain focusable. */
|
|
141
|
-
readonly kjReadonly = input<boolean, unknown>(false, { transform: booleanAttribute });
|
|
142
|
-
|
|
143
|
-
/** Effective-disabled. Composed via `KjDisabled`. */
|
|
144
|
-
readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });
|
|
145
|
-
|
|
146
|
-
// ── Sugar models ─────────────────────────────────────────────────────────
|
|
147
|
-
|
|
148
|
-
/** Single-mode sugar. Mirrors the single child thumb's value. */
|
|
149
|
-
readonly kjValue = model<number | undefined>(undefined);
|
|
150
|
-
|
|
151
|
-
/** Range-mode sugar. Mirrors `[low, high]` in stable order. */
|
|
152
|
-
readonly kjRange = model<readonly [number, number] | undefined>(undefined);
|
|
153
|
-
|
|
154
|
-
// ── Outputs ──────────────────────────────────────────────────────────────
|
|
155
|
-
|
|
156
|
-
/** Fires per-tick during drag and per-keypress; high frequency. */
|
|
157
|
-
readonly kjInput = output<{
|
|
158
|
-
value: number | readonly [number, number];
|
|
159
|
-
thumbIndex: number;
|
|
160
|
-
source: KjSliderSource;
|
|
161
|
-
}>();
|
|
162
|
-
|
|
163
|
-
/** Fires once per committed change (pointerup, keypress, programmatic). */
|
|
164
|
-
readonly kjCommit = output<number | readonly [number, number]>();
|
|
165
|
-
|
|
166
|
-
/** Pointerdown on a thumb (after threshold). */
|
|
167
|
-
readonly kjDragStart = output<{ thumbIndex: number }>();
|
|
168
|
-
|
|
169
|
-
/** Pointerup / Esc-during-drag. */
|
|
170
|
-
readonly kjDragEnd = output<{ thumbIndex: number; cancelled: boolean }>();
|
|
171
|
-
|
|
172
|
-
// ── Internal state ───────────────────────────────────────────────────────
|
|
173
|
-
|
|
174
|
-
private readonly _thumbs = signal<readonly KjSliderThumbHandle[]>([]);
|
|
175
|
-
private readonly _trackEl = signal<HTMLElement | null>(null);
|
|
176
|
-
private readonly _dragging = signal(false);
|
|
177
|
-
private readonly _activeThumbIndex = signal<number | null>(null);
|
|
178
|
-
|
|
179
|
-
// ── Public computed signals (KjSliderContext) ────────────────────────────
|
|
180
|
-
|
|
181
|
-
readonly min = computed(() => this.kjMin());
|
|
182
|
-
readonly max = computed(() => this.kjMax());
|
|
183
|
-
readonly step = computed(() => this.kjStep());
|
|
184
|
-
readonly pageStep = computed(() => {
|
|
185
|
-
const explicit = this.kjPageStep();
|
|
186
|
-
if (explicit !== undefined && explicit > 0) return explicit;
|
|
187
|
-
const range = this.max() - this.min();
|
|
188
|
-
const stepTen = this.step() * 10;
|
|
189
|
-
return Math.max(stepTen > 0 ? stepTen : 1, range / 10);
|
|
190
|
-
});
|
|
191
|
-
readonly stepBase = computed(() => this.kjStepBase() ?? this.min());
|
|
192
|
-
|
|
193
|
-
readonly orientation = computed(() => this.kjOrientation());
|
|
194
|
-
readonly direction = computed<'ltr' | 'rtl'>(() => {
|
|
195
|
-
const d = this.kjDirection();
|
|
196
|
-
if (d === 'rtl') return 'rtl';
|
|
197
|
-
if (d === 'ltr') return 'ltr';
|
|
198
|
-
return this.directionality.current();
|
|
199
|
-
});
|
|
200
|
-
readonly inverted = computed(() => this.kjInverted());
|
|
201
|
-
|
|
202
|
-
readonly minDistance = computed(() => this.kjMinDistance());
|
|
203
|
-
readonly allowThumbCross = computed(() => this.kjAllowThumbCross());
|
|
204
|
-
|
|
205
|
-
readonly disabled = computed(() => this.kjDisabled());
|
|
206
|
-
readonly readonly = computed(() => this.kjReadonly());
|
|
207
|
-
readonly dragging = this._dragging.asReadonly();
|
|
208
|
-
readonly activeThumbIndex = this._activeThumbIndex.asReadonly();
|
|
209
|
-
|
|
210
|
-
readonly thumbs = this._thumbs.asReadonly();
|
|
211
|
-
readonly trackElement = this._trackEl.asReadonly();
|
|
212
|
-
|
|
213
|
-
readonly ticks = computed<readonly number[]>(() => {
|
|
214
|
-
const t = this.kjTicks();
|
|
215
|
-
if (t === false) return [];
|
|
216
|
-
if (Array.isArray(t)) return t;
|
|
217
|
-
// 'auto' — generate per-step ticks, capped at 100.
|
|
218
|
-
const step = this.step();
|
|
219
|
-
const min = this.min();
|
|
220
|
-
const max = this.max();
|
|
221
|
-
if (step <= 0 || max <= min) return [];
|
|
222
|
-
const count = Math.floor((max - min) / step) + 1;
|
|
223
|
-
if (count > 100) return [];
|
|
224
|
-
const out: number[] = [];
|
|
225
|
-
for (let i = 0; i < count; i++) out.push(min + i * step);
|
|
226
|
-
return out;
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
readonly displayWith = computed(() => this.kjDisplayWith());
|
|
230
|
-
|
|
231
|
-
/** `'group'` for range, `'slider'` is on the thumb instead — root has no role in single mode. */
|
|
232
|
-
protected readonly role = computed(() => (this._thumbs().length > 1 ? 'group' : null));
|
|
233
|
-
|
|
234
|
-
constructor() {
|
|
235
|
-
// After every render pass, if the thumb registry has new entries
|
|
236
|
-
// since last sort, re-sort by DOM order. This handles the case where
|
|
237
|
-
// child directives register before their host elements are connected
|
|
238
|
-
// (e.g. inside an @if/@for block) and `compareDocumentPosition`
|
|
239
|
-
// would return DISCONNECTED at registration time.
|
|
240
|
-
afterNextRender(() => {
|
|
241
|
-
if (this.pendingReindex) {
|
|
242
|
-
this.pendingReindex = false;
|
|
243
|
-
this.reindexThumbs();
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
// Sugar `[(kjValue)]` ↔ single thumb sync. Read thumb values via
|
|
248
|
-
// `untracked` so this effect runs only when the consumer mutates
|
|
249
|
-
// `kjValue` or the thumb registry changes — not when the thumb's
|
|
250
|
-
// own `kjValue` updates (which would create a feedback loop).
|
|
251
|
-
effect(() => {
|
|
252
|
-
const v = this.kjValue();
|
|
253
|
-
const thumbs = this._thumbs();
|
|
254
|
-
if (v == null) return;
|
|
255
|
-
if (thumbs.length === 1) {
|
|
256
|
-
const handle = thumbs[0];
|
|
257
|
-
if (untracked(() => handle.value()) !== v) handle.setValue(v, 'programmatic');
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
// Sugar `[(kjRange)]` ↔ two-thumb sync. Stable-ordered.
|
|
262
|
-
effect(() => {
|
|
263
|
-
const r = this.kjRange();
|
|
264
|
-
const thumbs = this._thumbs();
|
|
265
|
-
if (!r) return;
|
|
266
|
-
if (thumbs.length !== 2) return;
|
|
267
|
-
const [a, b] = r;
|
|
268
|
-
const lo = Math.min(a, b);
|
|
269
|
-
const hi = Math.max(a, b);
|
|
270
|
-
const cur0 = untracked(() => thumbs[0].value());
|
|
271
|
-
const cur1 = untracked(() => thumbs[1].value());
|
|
272
|
-
if (cur0 !== lo) thumbs[0].setValue(lo, 'programmatic');
|
|
273
|
-
if (cur1 !== hi) thumbs[1].setValue(hi, 'programmatic');
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// ── KjSliderContext.registerThumb / unregisterThumb ──────────────────────
|
|
278
|
-
|
|
279
|
-
registerThumb(handle: KjSliderThumbHandle): void {
|
|
280
|
-
this._thumbs.update((existing) => {
|
|
281
|
-
if (existing.includes(handle)) return existing;
|
|
282
|
-
const next = [...existing, handle];
|
|
283
|
-
next.forEach((h, i) => ((h as { index: number }).index = i));
|
|
284
|
-
return next;
|
|
285
|
-
});
|
|
286
|
-
// DOM-order sort is deferred until the elements are in the document
|
|
287
|
-
// (compareDocumentPosition on disconnected nodes is unreliable). The
|
|
288
|
-
// root's afterNextRender pass re-sorts once everything is rendered.
|
|
289
|
-
this.pendingReindex = true;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/** Re-sort the thumb registry by current DOM order and re-assign indices. */
|
|
293
|
-
private reindexThumbs(): void {
|
|
294
|
-
this._thumbs.update((existing) => {
|
|
295
|
-
if (existing.length <= 1) return existing;
|
|
296
|
-
const next = [...existing];
|
|
297
|
-
next.sort((a, b) => orderIndex(a.element, b.element));
|
|
298
|
-
const changed = next.some((h, i) => h !== existing[i]);
|
|
299
|
-
next.forEach((h, i) => ((h as { index: number }).index = i));
|
|
300
|
-
return changed ? next : existing;
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
private pendingReindex = false;
|
|
305
|
-
|
|
306
|
-
unregisterThumb(handle: KjSliderThumbHandle): void {
|
|
307
|
-
this._thumbs.update((existing) => {
|
|
308
|
-
const next = existing.filter((h) => h !== handle);
|
|
309
|
-
next.forEach((h, i) => ((h as { index: number }).index = i));
|
|
310
|
-
return next;
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
setTrackElement(el: HTMLElement | null): void {
|
|
315
|
-
this._trackEl.set(el);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
// ── KjSliderContext.setThumbValue (the coordination policy) ──────────────
|
|
319
|
-
|
|
320
|
-
setThumbValue(thumbIndex: number, value: number, source: KjSliderSource): void {
|
|
321
|
-
if (this.disabled() || this.readonly()) return;
|
|
322
|
-
const thumbs = this._thumbs();
|
|
323
|
-
const handle = thumbs[thumbIndex];
|
|
324
|
-
if (!handle) return;
|
|
325
|
-
|
|
326
|
-
// Clamp + snap first.
|
|
327
|
-
let next = clamp(value, this.min(), this.max());
|
|
328
|
-
next = snapToStep(next, this.step(), this.stepBase());
|
|
329
|
-
|
|
330
|
-
// Apply cross-thumb policy in range mode.
|
|
331
|
-
if (thumbs.length === 2) {
|
|
332
|
-
const minDist = this.minDistance();
|
|
333
|
-
if (this.allowThumbCross()) {
|
|
334
|
-
// Allowed: assign as-is, but re-sort if the user crossed.
|
|
335
|
-
handle.setValue(next, source);
|
|
336
|
-
const [low, high] = thumbs;
|
|
337
|
-
if (low.value() > high.value()) {
|
|
338
|
-
// Swap their values.
|
|
339
|
-
const lo = high.value();
|
|
340
|
-
const hi = low.value();
|
|
341
|
-
low.setValue(lo, source);
|
|
342
|
-
high.setValue(hi, source);
|
|
343
|
-
}
|
|
344
|
-
} else {
|
|
345
|
-
// Block: cannot pass partner ± minDist.
|
|
346
|
-
if (thumbIndex === 0) {
|
|
347
|
-
const ceiling = thumbs[1].value() - minDist;
|
|
348
|
-
if (next > ceiling) next = ceiling;
|
|
349
|
-
} else {
|
|
350
|
-
const floor = thumbs[0].value() + minDist;
|
|
351
|
-
if (next < floor) next = floor;
|
|
352
|
-
}
|
|
353
|
-
handle.setValue(next, source);
|
|
354
|
-
}
|
|
355
|
-
} else {
|
|
356
|
-
handle.setValue(next, source);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// Mirror to sugar models.
|
|
360
|
-
if (thumbs.length === 1) {
|
|
361
|
-
const v = thumbs[0].value();
|
|
362
|
-
if (this.kjValue() !== v) this.kjValue.set(v);
|
|
363
|
-
this.kjInput.emit({ value: v, thumbIndex, source });
|
|
364
|
-
if (source !== 'pointer' || !this._dragging()) {
|
|
365
|
-
this.kjCommit.emit(v);
|
|
366
|
-
}
|
|
367
|
-
} else if (thumbs.length === 2) {
|
|
368
|
-
const tuple: [number, number] = [thumbs[0].value(), thumbs[1].value()];
|
|
369
|
-
const cur = this.kjRange();
|
|
370
|
-
if (!cur || cur[0] !== tuple[0] || cur[1] !== tuple[1]) this.kjRange.set(tuple);
|
|
371
|
-
this.kjInput.emit({ value: tuple, thumbIndex, source });
|
|
372
|
-
if (source !== 'pointer' || !this._dragging()) {
|
|
373
|
-
this.kjCommit.emit(tuple);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
beginDrag(thumbIndex: number): void {
|
|
379
|
-
this._dragging.set(true);
|
|
380
|
-
this._activeThumbIndex.set(thumbIndex);
|
|
381
|
-
this.kjDragStart.emit({ thumbIndex });
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
endDrag(cancelled = false): void {
|
|
385
|
-
if (!this._dragging()) return;
|
|
386
|
-
const idx = this._activeThumbIndex() ?? 0;
|
|
387
|
-
this._dragging.set(false);
|
|
388
|
-
this.kjDragEnd.emit({ thumbIndex: idx, cancelled });
|
|
389
|
-
// Fire commit at drag-end so consumers get a single event per drag.
|
|
390
|
-
const thumbs = this._thumbs();
|
|
391
|
-
if (thumbs.length === 1) {
|
|
392
|
-
this.kjCommit.emit(thumbs[0].value());
|
|
393
|
-
} else if (thumbs.length === 2) {
|
|
394
|
-
this.kjCommit.emit([thumbs[0].value(), thumbs[1].value()]);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/** Find the thumb closest to `value`. Ties resolved by previously-active. */
|
|
399
|
-
nearestThumbIndex(value: number): number {
|
|
400
|
-
const thumbs = this._thumbs();
|
|
401
|
-
if (thumbs.length <= 1) return 0;
|
|
402
|
-
const distLo = Math.abs(thumbs[0].value() - value);
|
|
403
|
-
const distHi = Math.abs(thumbs[1].value() - value);
|
|
404
|
-
if (distLo < distHi) return 0;
|
|
405
|
-
if (distHi < distLo) return 1;
|
|
406
|
-
// Tie: prefer the previously-active, else high (so click-to-jump tends to widen).
|
|
407
|
-
const active = this._activeThumbIndex();
|
|
408
|
-
return active ?? 1;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
valueFromClientPosition(clientX: number, clientY: number): number {
|
|
412
|
-
const track = this._trackEl();
|
|
413
|
-
if (!track) return this.min();
|
|
414
|
-
return valueFromClientPosition(clientX, clientY, {
|
|
415
|
-
min: this.min(),
|
|
416
|
-
max: this.max(),
|
|
417
|
-
orientation: this.orientation(),
|
|
418
|
-
direction: this.direction(),
|
|
419
|
-
inverted: this.inverted(),
|
|
420
|
-
trackRect: track.getBoundingClientRect(),
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
/** @internal — host element for diagnostics. */
|
|
425
|
-
get hostElement(): HTMLElement {
|
|
426
|
-
return this.el.nativeElement;
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
function optionalNumber(v: unknown): number | undefined {
|
|
431
|
-
if (v === undefined || v === null || v === '') return undefined;
|
|
432
|
-
const n = typeof v === 'number' ? v : Number(v);
|
|
433
|
-
return Number.isFinite(n) ? n : undefined;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
/** DOM-order comparator: `< 0` if `a` precedes `b`. */
|
|
437
|
-
function orderIndex(a: HTMLElement, b: HTMLElement): number {
|
|
438
|
-
if (a === b) return 0;
|
|
439
|
-
const pos = a.compareDocumentPosition(b);
|
|
440
|
-
if (pos & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
|
|
441
|
-
if (pos & Node.DOCUMENT_POSITION_PRECEDING) return 1;
|
|
442
|
-
return 0;
|
|
443
|
-
}
|
package/src/speed-dial/index.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export { KjSpeedDial } from './speed-dial';
|
|
2
|
-
export { KjSpeedDialTrigger } from './speed-dial-trigger';
|
|
3
|
-
export { KjSpeedDialActions } from './speed-dial-actions';
|
|
4
|
-
export { KjSpeedDialAction } from './speed-dial-action';
|
|
5
|
-
|
|
6
|
-
export {
|
|
7
|
-
KJ_SPEED_DIAL,
|
|
8
|
-
type KjSpeedDialContext,
|
|
9
|
-
type KjSpeedDialDirection,
|
|
10
|
-
} from './speed-dial.context';
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Directive, booleanAttribute, inject, input } from '@angular/core';
|
|
2
|
-
import { KJ_SPEED_DIAL, type KjSpeedDialContext } from './speed-dial.context';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* One action button in a Speed Dial cluster.
|
|
6
|
-
*
|
|
7
|
-
* Apply alongside `kjButton` on a native `<button>` to inherit the button
|
|
8
|
-
* presets. This directive contributes `role="menuitem"` and closes the parent
|
|
9
|
-
* dial after the consumer's click handler runs (controllable via
|
|
10
|
-
* `kjCloseOnActivate`).
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```html
|
|
14
|
-
* <button kjButton kjSpeedDialAction aria-label="Edit" (click)="edit()">E</button>
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* @doc-category Core/Actions
|
|
18
|
-
* @doc
|
|
19
|
-
* @doc-name speed-dial
|
|
20
|
-
*/
|
|
21
|
-
@Directive({
|
|
22
|
-
selector: '[kjSpeedDialAction]',
|
|
23
|
-
standalone: true,
|
|
24
|
-
exportAs: 'kjSpeedDialAction',
|
|
25
|
-
host: {
|
|
26
|
-
role: 'menuitem',
|
|
27
|
-
'(click)': 'onClick()',
|
|
28
|
-
},
|
|
29
|
-
})
|
|
30
|
-
export class KjSpeedDialAction {
|
|
31
|
-
private readonly ctx = inject<KjSpeedDialContext>(KJ_SPEED_DIAL);
|
|
32
|
-
|
|
33
|
-
/** Whether activating this action should close the dial. Default `true`. */
|
|
34
|
-
readonly kjCloseOnActivate = input(true, { transform: booleanAttribute });
|
|
35
|
-
|
|
36
|
-
protected onClick(): void {
|
|
37
|
-
if (!this.kjCloseOnActivate()) return;
|
|
38
|
-
this.ctx.close();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Directive, inject } from '@angular/core';
|
|
2
|
-
import { KJ_SPEED_DIAL, type KjSpeedDialContext } from './speed-dial.context';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Action cluster container for a Speed Dial.
|
|
6
|
-
*
|
|
7
|
-
* Holds `role="menu"` and is hidden from the AT tree (and from layout via the
|
|
8
|
-
* styled wrapper's CSS) when the dial is collapsed. Reflects `id`,
|
|
9
|
-
* `data-direction`, `data-expanded` and `aria-hidden` for the wrapper to key
|
|
10
|
-
* its layout / animation off of.
|
|
11
|
-
*
|
|
12
|
-
* @doc-category Core/Actions
|
|
13
|
-
* @doc
|
|
14
|
-
* @doc-name speed-dial
|
|
15
|
-
*/
|
|
16
|
-
@Directive({
|
|
17
|
-
selector: '[kjSpeedDialActions]',
|
|
18
|
-
standalone: true,
|
|
19
|
-
exportAs: 'kjSpeedDialActions',
|
|
20
|
-
host: {
|
|
21
|
-
role: 'menu',
|
|
22
|
-
'[id]': 'ctx.contentId',
|
|
23
|
-
'[attr.data-direction]': 'ctx.direction()',
|
|
24
|
-
'[attr.data-expanded]': 'ctx.expanded() ? "" : null',
|
|
25
|
-
'[attr.aria-hidden]': 'ctx.expanded() ? null : "true"',
|
|
26
|
-
},
|
|
27
|
-
})
|
|
28
|
-
export class KjSpeedDialActions {
|
|
29
|
-
/** @internal */
|
|
30
|
-
readonly ctx = inject<KjSpeedDialContext>(KJ_SPEED_DIAL);
|
|
31
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Directive, inject } from '@angular/core';
|
|
2
|
-
import { KJ_SPEED_DIAL, type KjSpeedDialContext } from './speed-dial.context';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The floating action button that toggles the Speed Dial open/closed.
|
|
6
|
-
*
|
|
7
|
-
* Apply alongside `kjButton` on a native `<button>` so the trigger inherits
|
|
8
|
-
* the button presets (variant, size, focus ring, capture-phase disabled
|
|
9
|
-
* suppression). The trigger itself contributes the menu-button ARIA wiring
|
|
10
|
-
* (`aria-haspopup="menu"`, `aria-expanded`, `aria-controls`) and the click
|
|
11
|
-
* toggle semantics that drive the parent `[kjSpeedDial]`.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```html
|
|
15
|
-
* <div kjSpeedDial>
|
|
16
|
-
* <button kjButton kjSpeedDialTrigger aria-label="Open actions">+</button>
|
|
17
|
-
* …
|
|
18
|
-
* </div>
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @doc-category Core/Actions
|
|
22
|
-
* @doc
|
|
23
|
-
* @doc-name speed-dial
|
|
24
|
-
*/
|
|
25
|
-
@Directive({
|
|
26
|
-
selector: '[kjSpeedDialTrigger]',
|
|
27
|
-
standalone: true,
|
|
28
|
-
exportAs: 'kjSpeedDialTrigger',
|
|
29
|
-
host: {
|
|
30
|
-
type: 'button',
|
|
31
|
-
'[attr.aria-haspopup]': '"menu"',
|
|
32
|
-
'[attr.aria-expanded]': 'ctx.expanded() ? "true" : "false"',
|
|
33
|
-
'[attr.aria-controls]': 'ctx.contentId',
|
|
34
|
-
'[attr.data-state]': 'ctx.expanded() ? "open" : "closed"',
|
|
35
|
-
'(click)': 'onClick($event)',
|
|
36
|
-
'(keydown.escape)': 'onEscape($event)',
|
|
37
|
-
},
|
|
38
|
-
})
|
|
39
|
-
export class KjSpeedDialTrigger {
|
|
40
|
-
/** @internal */
|
|
41
|
-
readonly ctx = inject<KjSpeedDialContext>(KJ_SPEED_DIAL);
|
|
42
|
-
|
|
43
|
-
protected onClick(event: MouseEvent): void {
|
|
44
|
-
if (this.ctx.disabled()) return;
|
|
45
|
-
event.stopPropagation();
|
|
46
|
-
this.ctx.toggle();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
protected onEscape(event: Event): void {
|
|
50
|
-
if (!this.ctx.expanded()) return;
|
|
51
|
-
event.preventDefault();
|
|
52
|
-
event.stopPropagation();
|
|
53
|
-
this.ctx.close();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { InjectionToken, type Signal } from '@angular/core';
|
|
2
|
-
|
|
3
|
-
/** Direction the action cluster fans out from the trigger. */
|
|
4
|
-
export type KjSpeedDialDirection = 'up' | 'down' | 'left' | 'right';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Shared state surface exposed by `[kjSpeedDial]` to its trigger, container
|
|
8
|
-
* and action descendants. Injected via {@link KJ_SPEED_DIAL}.
|
|
9
|
-
*/
|
|
10
|
-
export interface KjSpeedDialContext {
|
|
11
|
-
/** Whether the action cluster is currently expanded. */
|
|
12
|
-
readonly expanded: Signal<boolean>;
|
|
13
|
-
/** Disabled state — when true, opening is suppressed. */
|
|
14
|
-
readonly disabled: Signal<boolean>;
|
|
15
|
-
/** Direction the cluster fans out from the trigger. */
|
|
16
|
-
readonly direction: Signal<KjSpeedDialDirection>;
|
|
17
|
-
/** Auto-generated id for the action container, used by `aria-controls`. */
|
|
18
|
-
readonly contentId: string;
|
|
19
|
-
/** Open the cluster. */
|
|
20
|
-
open(): void;
|
|
21
|
-
/** Close the cluster. */
|
|
22
|
-
close(): void;
|
|
23
|
-
/** Toggle the cluster. */
|
|
24
|
-
toggle(): void;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/** DI token for the shared speed-dial state. */
|
|
28
|
-
export const KJ_SPEED_DIAL = new InjectionToken<KjSpeedDialContext>('KJ_SPEED_DIAL');
|
|
29
|
-
|
|
30
|
-
let nextSpeedDialId = 0;
|
|
31
|
-
|
|
32
|
-
/** @internal Generates a unique id for each speed-dial instance. */
|
|
33
|
-
export function nextKjSpeedDialId(): string {
|
|
34
|
-
nextSpeedDialId += 1;
|
|
35
|
-
return `kj-speed-dial-${nextSpeedDialId}`;
|
|
36
|
-
}
|