@kouji-ui/core 0.1.1 → 0.1.3
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 +15 -7
- 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/chat/chat.ts
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DestroyRef,
|
|
3
|
-
Directive,
|
|
4
|
-
ElementRef,
|
|
5
|
-
Injector,
|
|
6
|
-
afterNextRender,
|
|
7
|
-
computed,
|
|
8
|
-
effect,
|
|
9
|
-
inject,
|
|
10
|
-
input,
|
|
11
|
-
signal,
|
|
12
|
-
} from '@angular/core';
|
|
13
|
-
import {
|
|
14
|
-
KJ_CHAT,
|
|
15
|
-
KJ_CHAT_LOG,
|
|
16
|
-
type KjChatContext,
|
|
17
|
-
type KjChatRole,
|
|
18
|
-
type KjChatSide,
|
|
19
|
-
} from './chat.context';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Element → directive map used by `KjChat` to walk previous siblings without
|
|
23
|
-
* relying on Angular dev-mode internals. Each row registers itself on its host
|
|
24
|
-
* element on construction and unregisters on destroy.
|
|
25
|
-
*/
|
|
26
|
-
const CHAT_ROW_REGISTRY = new WeakMap<Element, KjChat>();
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* A single chat row. Owns the logical side, the per-row role, and the
|
|
30
|
-
* group-by-sender computation; reflects header / footer ids registered by
|
|
31
|
-
* its children for `aria-labelledby` / `aria-describedby` wiring.
|
|
32
|
-
*
|
|
33
|
-
* **Grouping uses DOM traversal, not a registry**, deliberately: the registry
|
|
34
|
-
* pattern races on the bottom-up `ngOnInit` order (children before parent),
|
|
35
|
-
* which means the first row could ask for its previous sibling before the
|
|
36
|
-
* previous row has registered. DOM traversal via `previousElementSibling` is
|
|
37
|
-
* deterministic and works at first render.
|
|
38
|
-
*
|
|
39
|
-
* Standalone rows (no `KjChatLog` parent) skip auto-grouping entirely;
|
|
40
|
-
* consumers set `kjChatGrouped` explicitly when they want grouped chrome.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```html
|
|
44
|
-
* <div kjChat kjSide="start" kjChatAuthor="alice">
|
|
45
|
-
* <span kjChatAvatar>…</span>
|
|
46
|
-
* <header kjChatHeader>Alice 12:46</header>
|
|
47
|
-
* <p kjChatBubble>Hey!</p>
|
|
48
|
-
* <footer kjChatFooter kjState="read">Read 12:46</footer>
|
|
49
|
-
* </div>
|
|
50
|
-
* ```
|
|
51
|
-
* @doc-category Core/Data display
|
|
52
|
-
* @doc
|
|
53
|
-
* @doc-name chat
|
|
54
|
-
* @doc-description Unstyled chat row with side, sender grouping, and ARIA wiring for message log semantics.
|
|
55
|
-
* @doc-is-main
|
|
56
|
-
*/
|
|
57
|
-
@Directive({
|
|
58
|
-
selector: '[kjChat]',
|
|
59
|
-
standalone: true,
|
|
60
|
-
providers: [{ provide: KJ_CHAT, useExisting: KjChat }],
|
|
61
|
-
host: {
|
|
62
|
-
'[attr.role]': 'kjRole()',
|
|
63
|
-
'[attr.data-side]': 'kjSide()',
|
|
64
|
-
'[attr.data-grouped]': 'grouped() ? "" : null',
|
|
65
|
-
'[attr.aria-labelledby]': 'headerId() ?? null',
|
|
66
|
-
'[attr.aria-describedby]': 'footerId() ?? null',
|
|
67
|
-
},
|
|
68
|
-
})
|
|
69
|
-
export class KjChat implements KjChatContext {
|
|
70
|
-
private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);
|
|
71
|
-
private readonly injector = inject(Injector);
|
|
72
|
-
private readonly destroyRef = inject(DestroyRef);
|
|
73
|
-
private readonly log = inject(KJ_CHAT_LOG, { optional: true });
|
|
74
|
-
|
|
75
|
-
/** Logical side of this row. CSS reads `data-side` and handles RTL flip. */
|
|
76
|
-
readonly kjSide = input<KjChatSide>('start');
|
|
77
|
-
|
|
78
|
-
/** Sender id — drives auto-grouping with the previous sibling row. */
|
|
79
|
-
readonly kjChatAuthor = input<string | undefined>(undefined);
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Explicit group override. When defined, wins over the auto-computed value;
|
|
83
|
-
* use this when no `KjChatLog` parent is present.
|
|
84
|
-
*/
|
|
85
|
-
readonly kjChatGrouped = input<boolean | undefined>(undefined);
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Per-row role. Default `'article'` gives AT users a per-message landmark
|
|
89
|
-
* navigable via JAWS / NVDA `M`; `'listitem'` opts in to list semantics
|
|
90
|
-
* (parent log must then expose `role="list"`); `null` drops the attribute.
|
|
91
|
-
*/
|
|
92
|
-
readonly kjRole = input<KjChatRole>('article');
|
|
93
|
-
|
|
94
|
-
private readonly headerIds = signal<readonly string[]>([]);
|
|
95
|
-
private readonly footerIds = signal<readonly string[]>([]);
|
|
96
|
-
|
|
97
|
-
/** Composed `aria-labelledby` value. */
|
|
98
|
-
readonly headerId = computed(() => {
|
|
99
|
-
const ids = this.headerIds();
|
|
100
|
-
return ids.length === 0 ? null : ids.join(' ');
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
/** Composed `aria-describedby` value. */
|
|
104
|
-
readonly footerId = computed(() => {
|
|
105
|
-
const ids = this.footerIds();
|
|
106
|
-
return ids.length === 0 ? null : ids.join(' ');
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
private readonly autoGrouped = signal(false);
|
|
110
|
-
|
|
111
|
-
/** True when this row groups with the previous one (same author). */
|
|
112
|
-
readonly grouped = computed(
|
|
113
|
-
() => this.kjChatGrouped() ?? this.autoGrouped(),
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
constructor() {
|
|
117
|
-
// Registry write happens in the constructor so any sibling rendered
|
|
118
|
-
// *after* us finds us during its own afterNextRender pass. (Angular
|
|
119
|
-
// builds child instances bottom-up, but DOM siblings are ordered
|
|
120
|
-
// top-down — by the time the second row's afterNextRender fires,
|
|
121
|
-
// the first row's host element exists and is keyed in the WeakMap.)
|
|
122
|
-
CHAT_ROW_REGISTRY.set(this.el.nativeElement, this);
|
|
123
|
-
this.destroyRef.onDestroy(() =>
|
|
124
|
-
CHAT_ROW_REGISTRY.delete(this.el.nativeElement),
|
|
125
|
-
);
|
|
126
|
-
|
|
127
|
-
// DOM-traversal grouping: run after first render (so the previous
|
|
128
|
-
// sibling exists) and re-run whenever this row's author changes.
|
|
129
|
-
afterNextRender(() => {
|
|
130
|
-
this.recomputeAutoGrouped();
|
|
131
|
-
});
|
|
132
|
-
effect(
|
|
133
|
-
() => {
|
|
134
|
-
// Track the input — touching it inside the effect creates the dep.
|
|
135
|
-
this.kjChatAuthor();
|
|
136
|
-
this.recomputeAutoGrouped();
|
|
137
|
-
},
|
|
138
|
-
{ injector: this.injector },
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/** @internal */
|
|
143
|
-
registerHeaderId(id: string): void {
|
|
144
|
-
this.headerIds.update(ids => [...ids, id]);
|
|
145
|
-
this.destroyRef.onDestroy(() => this.unregisterHeaderId(id));
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/** @internal */
|
|
149
|
-
unregisterHeaderId(id: string): void {
|
|
150
|
-
this.headerIds.update(ids => ids.filter(x => x !== id));
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/** @internal */
|
|
154
|
-
registerFooterId(id: string): void {
|
|
155
|
-
this.footerIds.update(ids => [...ids, id]);
|
|
156
|
-
this.destroyRef.onDestroy(() => this.unregisterFooterId(id));
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/** @internal */
|
|
160
|
-
unregisterFooterId(id: string): void {
|
|
161
|
-
this.footerIds.update(ids => ids.filter(x => x !== id));
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
private recomputeAutoGrouped(): void {
|
|
165
|
-
if (!this.log) {
|
|
166
|
-
this.autoGrouped.set(false);
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
const me = this.kjChatAuthor();
|
|
170
|
-
if (me === undefined) {
|
|
171
|
-
this.autoGrouped.set(false);
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
const prev = this.previousChatRow();
|
|
175
|
-
if (!prev) {
|
|
176
|
-
this.autoGrouped.set(false);
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
this.autoGrouped.set(prev.kjChatAuthor() === me);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
private previousChatRow(): KjChat | null {
|
|
183
|
-
let sib = this.el.nativeElement.previousElementSibling as Element | null;
|
|
184
|
-
while (sib) {
|
|
185
|
-
const row = CHAT_ROW_REGISTRY.get(sib);
|
|
186
|
-
if (row) return row;
|
|
187
|
-
sib = sib.previousElementSibling;
|
|
188
|
-
}
|
|
189
|
-
return null;
|
|
190
|
-
}
|
|
191
|
-
}
|
package/src/chat/config.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { InjectionToken, Provider } from '@angular/core';
|
|
2
|
-
|
|
3
|
-
/** Shape of the bubble's preset configuration. */
|
|
4
|
-
export interface KjChatBubbleConfig {
|
|
5
|
-
variants: string[];
|
|
6
|
-
sizes: string[];
|
|
7
|
-
defaults: { variant: string; size: string };
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Default Chat-Bubble presets shipped by kouji-ui. Exported so consumers can
|
|
12
|
-
* spread when extending: `[...KJ_CHAT_BUBBLE_DEFAULTS.variants, 'brand']`.
|
|
13
|
-
*/
|
|
14
|
-
export const KJ_CHAT_BUBBLE_DEFAULTS: KjChatBubbleConfig = {
|
|
15
|
-
variants: [
|
|
16
|
-
'default',
|
|
17
|
-
'primary',
|
|
18
|
-
'secondary',
|
|
19
|
-
'accent',
|
|
20
|
-
'info',
|
|
21
|
-
'success',
|
|
22
|
-
'warning',
|
|
23
|
-
'error',
|
|
24
|
-
],
|
|
25
|
-
sizes: ['sm', 'md', 'lg'],
|
|
26
|
-
defaults: { variant: 'default', size: 'md' },
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* DI token for the active Chat-Bubble presets. Default factory yields
|
|
31
|
-
* `KJ_CHAT_BUBBLE_DEFAULTS`. Override via `provideKjChatBubble(…)` at the
|
|
32
|
-
* application or component scope.
|
|
33
|
-
*/
|
|
34
|
-
export const KJ_CHAT_BUBBLE_CONFIG = new InjectionToken<KjChatBubbleConfig>(
|
|
35
|
-
'kj.chat-bubble.config',
|
|
36
|
-
{ factory: () => KJ_CHAT_BUBBLE_DEFAULTS },
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Configures the Chat-Bubble presets for the enclosing injector. Replaces
|
|
41
|
-
* (does not merge) `variants` and `sizes`; spread `KJ_CHAT_BUBBLE_DEFAULTS.variants`
|
|
42
|
-
* to extend.
|
|
43
|
-
*/
|
|
44
|
-
export function provideKjChatBubble(
|
|
45
|
-
config: Partial<KjChatBubbleConfig>,
|
|
46
|
-
): Provider[] {
|
|
47
|
-
return [
|
|
48
|
-
{
|
|
49
|
-
provide: KJ_CHAT_BUBBLE_CONFIG,
|
|
50
|
-
useValue: { ...KJ_CHAT_BUBBLE_DEFAULTS, ...config },
|
|
51
|
-
},
|
|
52
|
-
];
|
|
53
|
-
}
|
package/src/chat/index.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export { KjChatLog } from './chat-log';
|
|
2
|
-
export { KjChat } from './chat';
|
|
3
|
-
export { KjChatAvatar } from './chat-avatar';
|
|
4
|
-
export { KjChatHeader } from './chat-header';
|
|
5
|
-
export { KjChatBubble } from './chat-bubble';
|
|
6
|
-
export { KjChatFooter } from './chat-footer';
|
|
7
|
-
export {
|
|
8
|
-
KJ_CHAT,
|
|
9
|
-
KJ_CHAT_LOG,
|
|
10
|
-
type KjChatContext,
|
|
11
|
-
type KjChatLogContext,
|
|
12
|
-
type KjChatRole,
|
|
13
|
-
type KjChatSide,
|
|
14
|
-
type KjChatState,
|
|
15
|
-
} from './chat.context';
|
|
16
|
-
export {
|
|
17
|
-
KJ_CHAT_BUBBLE_CONFIG,
|
|
18
|
-
KJ_CHAT_BUBBLE_DEFAULTS,
|
|
19
|
-
provideKjChatBubble,
|
|
20
|
-
type KjChatBubbleConfig,
|
|
21
|
-
} from './config';
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { render, fireEvent } from '@testing-library/angular';
|
|
2
|
-
import { axe, toHaveNoViolations } from 'jest-axe';
|
|
3
|
-
import { KjCheckbox } from './checkbox';
|
|
4
|
-
|
|
5
|
-
expect.extend(toHaveNoViolations);
|
|
6
|
-
|
|
7
|
-
describe('KjCheckbox', () => {
|
|
8
|
-
it('sets role=checkbox', async () => {
|
|
9
|
-
const { getByRole } = await render(`<div kjCheckbox tabindex="0">Check</div>`, { imports: [KjCheckbox] });
|
|
10
|
-
expect(getByRole('checkbox')).toBeInTheDocument();
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('has aria-checked=false by default', async () => {
|
|
14
|
-
const { getByRole } = await render(`<div kjCheckbox tabindex="0">Check</div>`, { imports: [KjCheckbox] });
|
|
15
|
-
expect(getByRole('checkbox')).toHaveAttribute('aria-checked', 'false');
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('toggles checked on click', async () => {
|
|
19
|
-
const { getByRole } = await render(`<div kjCheckbox tabindex="0">Check</div>`, { imports: [KjCheckbox] });
|
|
20
|
-
fireEvent.click(getByRole('checkbox'));
|
|
21
|
-
expect(getByRole('checkbox')).toHaveAttribute('aria-checked', 'true');
|
|
22
|
-
expect(getByRole('checkbox')).toHaveAttribute('data-checked', '');
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('toggles on Space key', async () => {
|
|
26
|
-
const { getByRole } = await render(`<div kjCheckbox tabindex="0">Check</div>`, { imports: [KjCheckbox] });
|
|
27
|
-
fireEvent.keyDown(getByRole('checkbox'), { key: ' ' });
|
|
28
|
-
expect(getByRole('checkbox')).toHaveAttribute('aria-checked', 'true');
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('passes axe audit', async () => {
|
|
32
|
-
const { container } = await render(`<div kjCheckbox tabindex="0" aria-label="Accept terms">Accept</div>`, { imports: [KjCheckbox] });
|
|
33
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
34
|
-
});
|
|
35
|
-
});
|
package/src/checkbox/checkbox.ts
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { Directive, inject, model } from '@angular/core';
|
|
2
|
-
import { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Adds checkbox semantics with Angular forms integration.
|
|
6
|
-
* Supports `formControl`, `formControlName`, and `ngModel` bindings.
|
|
7
|
-
*
|
|
8
|
-
* Apply `[kjCheckbox]` to any focusable element to get `role="checkbox"`,
|
|
9
|
-
* `aria-checked` reflection, Space/click toggle, and the shared focus-ring
|
|
10
|
-
* primitive — all composable onto custom markup with no styling attached.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```html
|
|
14
|
-
* <div kjCheckbox tabindex="0" [(kjChecked)]="accepted" aria-label="Accept terms">Accept</div>
|
|
15
|
-
* ```
|
|
16
|
-
* @doc
|
|
17
|
-
* @doc-file checkbox.example.ts
|
|
18
|
-
* ```typescript
|
|
19
|
-
* import { Component, signal } from '@angular/core';
|
|
20
|
-
* import { KjCheckbox } from '@kouji-ui/core';
|
|
21
|
-
*
|
|
22
|
-
* @Component({
|
|
23
|
-
* standalone: true,
|
|
24
|
-
* imports: [KjCheckbox],
|
|
25
|
-
* styles: [`
|
|
26
|
-
* .row { display: flex; flex-direction: column; gap: 1rem; padding: 2rem; background: #0c0c0c; }
|
|
27
|
-
* .item { display: flex; align-items: center; gap: 0.75rem; }
|
|
28
|
-
* [kjCheckbox] { width: 18px; height: 18px; border: 2px solid #333; background: #111; cursor: pointer; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
|
|
29
|
-
* [data-checked] { background: #b8f500; border-color: #b8f500; }
|
|
30
|
-
* [data-checked]::after { content: '✓'; color: #0c0c0c; font-size: 0.75rem; font-weight: bold; }
|
|
31
|
-
* span { color: #888; font-family: 'JetBrains Mono', monospace; font-size: 0.875rem; }
|
|
32
|
-
* `],
|
|
33
|
-
* template: `
|
|
34
|
-
* <div class="row">
|
|
35
|
-
* <div class="item">
|
|
36
|
-
* <div kjCheckbox tabindex="0" [(kjChecked)]="terms" aria-label="Accept terms"></div>
|
|
37
|
-
* <span>Accept terms — {{ terms() ? 'checked' : 'unchecked' }}</span>
|
|
38
|
-
* </div>
|
|
39
|
-
* <div class="item">
|
|
40
|
-
* <div kjCheckbox tabindex="0" [(kjChecked)]="newsletter" aria-label="Newsletter"></div>
|
|
41
|
-
* <span>Subscribe to newsletter</span>
|
|
42
|
-
* </div>
|
|
43
|
-
* </div>
|
|
44
|
-
* `,
|
|
45
|
-
* })
|
|
46
|
-
* export class CheckboxExampleComponent {
|
|
47
|
-
* terms = signal(false);
|
|
48
|
-
* newsletter = signal(true);
|
|
49
|
-
* }
|
|
50
|
-
* ```
|
|
51
|
-
* @doc-category Core/Inputs
|
|
52
|
-
* @doc-name checkbox
|
|
53
|
-
* @doc-description Adds accessible checkbox behaviour and Angular forms support to any element you bring.
|
|
54
|
-
* @doc-is-main
|
|
55
|
-
*/
|
|
56
|
-
@Directive({
|
|
57
|
-
selector: '[kjCheckbox]',
|
|
58
|
-
standalone: true,
|
|
59
|
-
hostDirectives: [
|
|
60
|
-
{ directive: KjDisabled, inputs: ['kjDisabled'] },
|
|
61
|
-
KjFocusRing,
|
|
62
|
-
KjFormControl,
|
|
63
|
-
],
|
|
64
|
-
host: {
|
|
65
|
-
role: 'checkbox',
|
|
66
|
-
'[attr.aria-checked]': 'kjChecked().toString()',
|
|
67
|
-
'[attr.data-checked]': 'kjChecked() ? "" : null',
|
|
68
|
-
'[attr.disabled]': 'formCtrl.disabled() ? "" : null',
|
|
69
|
-
'(click)': 'toggle()',
|
|
70
|
-
'(keydown.space)': 'onSpace($event)',
|
|
71
|
-
'(blur)': 'formCtrl.notifyTouched()',
|
|
72
|
-
},
|
|
73
|
-
})
|
|
74
|
-
export class KjCheckbox {
|
|
75
|
-
readonly formCtrl = inject(KjFormControl);
|
|
76
|
-
|
|
77
|
-
/** Whether the checkbox is checked. Supports two-way binding. */
|
|
78
|
-
kjChecked = model<boolean>(false);
|
|
79
|
-
|
|
80
|
-
/** @internal */
|
|
81
|
-
toggle(): void {
|
|
82
|
-
const next = !this.kjChecked();
|
|
83
|
-
this.kjChecked.set(next);
|
|
84
|
-
this.formCtrl.notifyChange(next);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/** @internal */
|
|
88
|
-
onSpace(e: Event): void { e.preventDefault(); this.toggle(); }
|
|
89
|
-
}
|
package/src/checkbox/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { KjCheckbox } from './checkbox';
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { InjectionToken, Signal } from '@angular/core';
|
|
2
|
-
import type { KjHsl, KjHsv, KjRgb } from './color-picker.utils';
|
|
3
|
-
|
|
4
|
-
/** Output formats supported by `KjColorPicker`. */
|
|
5
|
-
export type KjColorFormat = 'hex' | 'rgb' | 'hsl';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Public emitted value for `KjColorPicker`.
|
|
9
|
-
* Concrete shape depends on the active `kjFormat`:
|
|
10
|
-
* - `'hex'` → `string` (`'#rrggbb'` or `'#rrggbbaa'` when alpha is on).
|
|
11
|
-
* - `'rgb'` → `[r, g, b]` or `[r, g, b, a]` when alpha is on.
|
|
12
|
-
* - `'hsl'` → `{ h, s, l }` or `{ h, s, l, a }` when alpha is on.
|
|
13
|
-
*/
|
|
14
|
-
export type KjColorValue =
|
|
15
|
-
| string
|
|
16
|
-
| readonly [number, number, number]
|
|
17
|
-
| readonly [number, number, number, number]
|
|
18
|
-
| { h: number; s: number; l: number }
|
|
19
|
-
| { h: number; s: number; l: number; a: number };
|
|
20
|
-
|
|
21
|
-
/** A single preset swatch in the color picker's palette grid. */
|
|
22
|
-
export interface KjColorPreset {
|
|
23
|
-
/** Any parseable hex color string. */
|
|
24
|
-
readonly value: string;
|
|
25
|
-
/** Optional accessible name announced to AT in place of the raw hex. */
|
|
26
|
-
readonly label?: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Shared state container exposed to every `KjColorPicker` sub-directive
|
|
31
|
-
* via the `KJ_COLOR_PICKER` token. The root directive is the sole writer;
|
|
32
|
-
* sub-directives read derived signals and call mutator methods.
|
|
33
|
-
*/
|
|
34
|
-
export interface KjColorPickerContext {
|
|
35
|
-
// Canonical state
|
|
36
|
-
readonly hue: Signal<number>;
|
|
37
|
-
readonly saturation: Signal<number>;
|
|
38
|
-
readonly value: Signal<number>;
|
|
39
|
-
readonly alpha: Signal<number>;
|
|
40
|
-
|
|
41
|
-
// Derived projections
|
|
42
|
-
readonly hex: Signal<string>;
|
|
43
|
-
readonly rgb: Signal<KjRgb>;
|
|
44
|
-
readonly hsv: Signal<KjHsv>;
|
|
45
|
-
readonly hsl: Signal<KjHsl>;
|
|
46
|
-
|
|
47
|
-
// Mutators
|
|
48
|
-
setHue(h: number): void;
|
|
49
|
-
setSaturationValue(s: number, v: number): void;
|
|
50
|
-
setAlpha(a: number): void;
|
|
51
|
-
setHex(hex: string): boolean;
|
|
52
|
-
setRgb(r: number, g: number, b: number, a?: number): void;
|
|
53
|
-
|
|
54
|
-
// UI state
|
|
55
|
-
readonly open: Signal<boolean>;
|
|
56
|
-
readonly disabled: Signal<boolean>;
|
|
57
|
-
readonly format: Signal<KjColorFormat>;
|
|
58
|
-
readonly showAlpha: Signal<boolean>;
|
|
59
|
-
readonly presets: Signal<readonly KjColorPreset[]>;
|
|
60
|
-
setOpen(open: boolean): void;
|
|
61
|
-
|
|
62
|
-
// Wiring ids
|
|
63
|
-
readonly panelId: Signal<string>;
|
|
64
|
-
readonly triggerId: Signal<string>;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* DI token consumed by every `KjColorPicker*` sub-directive. Provided by
|
|
69
|
-
* the root `KjColorPicker` directive — sub-directives outside that
|
|
70
|
-
* context throw at injection time in dev.
|
|
71
|
-
*/
|
|
72
|
-
export const KJ_COLOR_PICKER = new InjectionToken<KjColorPickerContext>(
|
|
73
|
-
'KjColorPicker',
|
|
74
|
-
);
|