@kouji-ui/components 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-components.mjs +17668 -0
- package/fesm2022/kouji-ui-components.mjs.map +1 -0
- package/package.json +17 -10
- package/types/kouji-ui-components.d.ts +8032 -0
- package/.turbo/turbo-build.log +0 -29
- package/CHANGELOG.md +0 -192
- package/ng-package.json +0 -7
- package/src/accordion/_examples/accordion.default.example.ts +0 -31
- package/src/accordion/_examples/accordion.disabled.example.ts +0 -38
- package/src/accordion/_examples/accordion.multiple.example.ts +0 -31
- package/src/accordion/_examples/accordion.rich-content.example.ts +0 -49
- package/src/accordion/_examples/index.ts +0 -6
- package/src/accordion/accordion.arrow-nav.example.ts +0 -39
- package/src/accordion/accordion.css +0 -68
- package/src/accordion/accordion.playground.ts +0 -119
- package/src/accordion/accordion.spec.ts +0 -117
- package/src/accordion/accordion.ts +0 -153
- package/src/accordion/accordion.usage.example.ts +0 -38
- package/src/accordion/accordion.value.example.ts +0 -60
- package/src/accordion/index.ts +0 -1
- package/src/alert/_examples/alert.banner.example.ts +0 -56
- package/src/alert/_examples/alert.dismissible.example.ts +0 -53
- package/src/alert/_examples/alert.example.ts +0 -40
- package/src/alert/_examples/alert.variants.example.ts +0 -66
- package/src/alert/_examples/alert.with-actions.example.ts +0 -57
- package/src/alert/_examples/index.ts +0 -7
- package/src/alert/alert.css +0 -133
- package/src/alert/alert.playground.ts +0 -111
- package/src/alert/alert.spec.ts +0 -167
- package/src/alert/alert.ts +0 -250
- package/src/alert/alert.usage.example.ts +0 -58
- package/src/alert/index.ts +0 -8
- package/src/avatar/_examples/avatar-group.example.ts +0 -31
- package/src/avatar/_examples/avatar-group.list.example.ts +0 -45
- package/src/avatar/_examples/avatar-group.overflow.example.ts +0 -33
- package/src/avatar/_examples/avatar-group.shapes.example.ts +0 -39
- package/src/avatar/_examples/avatar-group.sizes.example.ts +0 -44
- package/src/avatar/_examples/avatar.default.example.ts +0 -18
- package/src/avatar/_examples/avatar.initials.example.ts +0 -20
- package/src/avatar/_examples/avatar.shapes.example.ts +0 -22
- package/src/avatar/_examples/avatar.sizes.example.ts +0 -26
- package/src/avatar/_examples/avatar.with-image.example.ts +0 -20
- package/src/avatar/_examples/index.ts +0 -12
- package/src/avatar/avatar-group.spec.ts +0 -138
- package/src/avatar/avatar-group.ts +0 -127
- package/src/avatar/avatar-group.usage.example.ts +0 -30
- package/src/avatar/avatar.css +0 -58
- package/src/avatar/avatar.playground.ts +0 -95
- package/src/avatar/avatar.ts +0 -123
- package/src/avatar/index.ts +0 -2
- package/src/badge/_examples/badge.default.example.ts +0 -18
- package/src/badge/_examples/badge.sizes.example.ts +0 -25
- package/src/badge/_examples/badge.variants.example.ts +0 -24
- package/src/badge/_examples/badge.with-dot.example.ts +0 -31
- package/src/badge/_examples/badge.with-icon.example.ts +0 -23
- package/src/badge/_examples/index.ts +0 -7
- package/src/badge/badge.css +0 -59
- package/src/badge/badge.playground.ts +0 -49
- package/src/badge/badge.ts +0 -86
- package/src/badge/badge.usage.example.ts +0 -22
- package/src/badge/index.ts +0 -1
- package/src/breadcrumb/_examples/breadcrumb.custom-separator.example.ts +0 -53
- package/src/breadcrumb/_examples/breadcrumb.example.ts +0 -48
- package/src/breadcrumb/_examples/breadcrumb.long-path.example.ts +0 -58
- package/src/breadcrumb/_examples/breadcrumb.truncated.example.ts +0 -59
- package/src/breadcrumb/_examples/breadcrumb.with-icons.example.ts +0 -66
- package/src/breadcrumb/_examples/index.ts +0 -7
- package/src/breadcrumb/breadcrumb.css +0 -121
- package/src/breadcrumb/breadcrumb.playground.ts +0 -93
- package/src/breadcrumb/breadcrumb.spec.ts +0 -230
- package/src/breadcrumb/breadcrumb.ts +0 -272
- package/src/breadcrumb/breadcrumb.usage.example.ts +0 -45
- package/src/breadcrumb/index.ts +0 -1
- package/src/button/_examples/button.anchor.example.ts +0 -18
- package/src/button/_examples/button.configured.example.ts +0 -43
- package/src/button/_examples/button.disabled.example.ts +0 -25
- package/src/button/_examples/button.example.ts +0 -22
- package/src/button/_examples/button.icon.example.ts +0 -27
- package/src/button/_examples/button.loading.example.ts +0 -31
- package/src/button/_examples/button.pressed.example.ts +0 -24
- package/src/button/_examples/button.sizes.example.ts +0 -26
- package/src/button/_examples/button.usage.example.ts +0 -66
- package/src/button/_examples/button.variants.example.ts +0 -26
- package/src/button/_examples/index.ts +0 -12
- package/src/button/button.css +0 -263
- package/src/button/button.playground.ts +0 -79
- package/src/button/button.spec.ts +0 -100
- package/src/button/button.ts +0 -150
- package/src/button/index.ts +0 -1
- package/src/button-group/_examples/button-group.example.ts +0 -30
- package/src/button-group/_examples/button-group.icon-only.example.ts +0 -30
- package/src/button-group/_examples/button-group.toggle.example.ts +0 -36
- package/src/button-group/_examples/button-group.variants.example.ts +0 -40
- package/src/button-group/_examples/button-group.vertical.example.ts +0 -29
- package/src/button-group/_examples/index.ts +0 -7
- package/src/button-group/button-group.css +0 -80
- package/src/button-group/button-group.playground.ts +0 -94
- package/src/button-group/button-group.spec.ts +0 -119
- package/src/button-group/button-group.ts +0 -130
- package/src/button-group/button-group.usage.example.ts +0 -35
- package/src/button-group/index.ts +0 -1
- package/src/calendar/_examples/calendar.example.ts +0 -33
- package/src/calendar/_examples/index.ts +0 -3
- package/src/calendar/calendar.css +0 -129
- package/src/calendar/calendar.playground.ts +0 -84
- package/src/calendar/calendar.spec.ts +0 -50
- package/src/calendar/calendar.ts +0 -171
- package/src/calendar/calendar.usage.example.ts +0 -33
- package/src/calendar/index.ts +0 -1
- package/src/card/_examples/card.cover.example.ts +0 -53
- package/src/card/_examples/card.example.ts +0 -27
- package/src/card/_examples/card.full.example.ts +0 -51
- package/src/card/_examples/index.ts +0 -5
- package/src/card/card.css +0 -120
- package/src/card/card.playground.ts +0 -116
- package/src/card/card.spec.ts +0 -50
- package/src/card/card.ts +0 -194
- package/src/card/card.usage.example.ts +0 -46
- package/src/card/index.ts +0 -1
- package/src/carousel/_examples/carousel.autoplay.example.ts +0 -69
- package/src/carousel/_examples/carousel.example.ts +0 -60
- package/src/carousel/_examples/carousel.indicators.example.ts +0 -64
- package/src/carousel/_examples/carousel.lazy-load.example.ts +0 -85
- package/src/carousel/_examples/carousel.tabs-pattern.example.ts +0 -61
- package/src/carousel/_examples/index.ts +0 -7
- package/src/carousel/carousel.css +0 -181
- package/src/carousel/carousel.playground.ts +0 -135
- package/src/carousel/carousel.spec.ts +0 -211
- package/src/carousel/carousel.ts +0 -399
- package/src/carousel/carousel.usage.example.ts +0 -46
- package/src/carousel/index.ts +0 -1
- package/src/cascade-select/_examples/cascade-select.data-driven.example.ts +0 -119
- package/src/cascade-select/_examples/cascade-select.disabled.example.ts +0 -74
- package/src/cascade-select/_examples/cascade-select.example.ts +0 -80
- package/src/cascade-select/_examples/cascade-select.field.example.ts +0 -73
- package/src/cascade-select/_examples/cascade-select.path.example.ts +0 -85
- package/src/cascade-select/_examples/index.ts +0 -7
- package/src/cascade-select/cascade-select.css +0 -120
- package/src/cascade-select/cascade-select.playground.ts +0 -133
- package/src/cascade-select/cascade-select.ts +0 -201
- package/src/cascade-select/cascade-select.usage.example.ts +0 -44
- package/src/cascade-select/index.ts +0 -5
- package/src/chat/_examples/chat-bubble.example.ts +0 -71
- package/src/chat/_examples/chat-bubble.grouped.example.ts +0 -69
- package/src/chat/_examples/chat-bubble.sides.example.ts +0 -41
- package/src/chat/_examples/chat-bubble.variants.example.ts +0 -58
- package/src/chat/_examples/chat-bubble.with-state.example.ts +0 -57
- package/src/chat/_examples/index.ts +0 -7
- package/src/chat/chat.css +0 -231
- package/src/chat/chat.playground.ts +0 -171
- package/src/chat/chat.spec.ts +0 -343
- package/src/chat/chat.ts +0 -269
- package/src/chat/chat.usage.example.ts +0 -49
- package/src/chat/index.ts +0 -13
- package/src/checkbox/_examples/checkbox.checked.example.ts +0 -20
- package/src/checkbox/_examples/checkbox.default.example.ts +0 -20
- package/src/checkbox/_examples/checkbox.disabled.example.ts +0 -26
- package/src/checkbox/_examples/checkbox.indeterminate.example.ts +0 -20
- package/src/checkbox/_examples/checkbox.usage.example.ts +0 -62
- package/src/checkbox/_examples/index.ts +0 -7
- package/src/checkbox/checkbox.css +0 -74
- package/src/checkbox/checkbox.playground.ts +0 -68
- package/src/checkbox/checkbox.ts +0 -122
- package/src/checkbox/index.ts +0 -1
- package/src/color-picker/_examples/color-picker.alpha.example.ts +0 -36
- package/src/color-picker/_examples/color-picker.example.ts +0 -34
- package/src/color-picker/_examples/color-picker.hex-input.example.ts +0 -53
- package/src/color-picker/_examples/color-picker.in-form.example.ts +0 -60
- package/src/color-picker/_examples/color-picker.usage.example.ts +0 -58
- package/src/color-picker/_examples/color-picker.with-presets.example.ts +0 -45
- package/src/color-picker/_examples/index.ts +0 -8
- package/src/color-picker/color-picker.css +0 -183
- package/src/color-picker/color-picker.playground.ts +0 -83
- package/src/color-picker/color-picker.spec.ts +0 -94
- package/src/color-picker/color-picker.ts +0 -234
- package/src/color-picker/index.ts +0 -1
- package/src/combobox/_examples/combobox.async.example.ts +0 -85
- package/src/combobox/_examples/combobox.empty-state.example.ts +0 -36
- package/src/combobox/_examples/combobox.example.ts +0 -36
- package/src/combobox/_examples/combobox.free-text.example.ts +0 -42
- package/src/combobox/_examples/combobox.usage.example.ts +0 -51
- package/src/combobox/_examples/combobox.with-icons.example.ts +0 -49
- package/src/combobox/_examples/index.ts +0 -8
- package/src/combobox/combobox.css +0 -101
- package/src/combobox/combobox.playground.ts +0 -90
- package/src/combobox/combobox.spec.ts +0 -111
- package/src/combobox/combobox.ts +0 -219
- package/src/combobox/index.ts +0 -6
- package/src/command-palette/_examples/command-palette.async.example.ts +0 -99
- package/src/command-palette/_examples/command-palette.dialog.example.ts +0 -90
- package/src/command-palette/_examples/command-palette.example.ts +0 -40
- package/src/command-palette/_examples/command-palette.fuzzy.example.ts +0 -54
- package/src/command-palette/_examples/command-palette.groups.example.ts +0 -55
- package/src/command-palette/_examples/command-palette.usage.example.ts +0 -49
- package/src/command-palette/_examples/index.ts +0 -8
- package/src/command-palette/command-palette.css +0 -234
- package/src/command-palette/command-palette.playground.ts +0 -119
- package/src/command-palette/command-palette.ts +0 -448
- package/src/command-palette/index.ts +0 -10
- package/src/confirm-popup/_examples/confirm-popup.destructive.example.ts +0 -72
- package/src/confirm-popup/_examples/confirm-popup.example.ts +0 -82
- package/src/confirm-popup/_examples/confirm-popup.placement.example.ts +0 -97
- package/src/confirm-popup/_examples/confirm-popup.usage.example.ts +0 -94
- package/src/confirm-popup/_examples/confirm-popup.with-message.example.ts +0 -76
- package/src/confirm-popup/_examples/index.ts +0 -7
- package/src/confirm-popup/confirm-popup.css +0 -47
- package/src/confirm-popup/confirm-popup.playground.ts +0 -109
- package/src/confirm-popup/confirm-popup.spec.ts +0 -209
- package/src/confirm-popup/confirm-popup.ts +0 -279
- package/src/confirm-popup/index.ts +0 -1
- package/src/date-picker/_examples/date-picker.disabled-dates.example.ts +0 -44
- package/src/date-picker/_examples/date-picker.example.ts +0 -38
- package/src/date-picker/_examples/date-picker.locale.example.ts +0 -50
- package/src/date-picker/_examples/date-picker.readonly.example.ts +0 -32
- package/src/date-picker/_examples/date-picker.usage.example.ts +0 -60
- package/src/date-picker/_examples/date-picker.with-min-max.example.ts +0 -47
- package/src/date-picker/_examples/index.ts +0 -8
- package/src/date-picker/date-picker.css +0 -61
- package/src/date-picker/date-picker.playground.ts +0 -79
- package/src/date-picker/date-picker.spec.ts +0 -71
- package/src/date-picker/date-picker.ts +0 -185
- package/src/date-picker/index.ts +0 -1
- package/src/dialog/_examples/dialog.confirmation.example.ts +0 -30
- package/src/dialog/_examples/dialog.default.example.ts +0 -30
- package/src/dialog/_examples/dialog.nested.example.ts +0 -86
- package/src/dialog/_examples/dialog.scrollable.example.ts +0 -30
- package/src/dialog/_examples/dialog.usage.example.ts +0 -57
- package/src/dialog/_examples/dialog.with-form.example.ts +0 -48
- package/src/dialog/_examples/index.ts +0 -8
- package/src/dialog/dialog.css +0 -56
- package/src/dialog/dialog.playground.ts +0 -136
- package/src/dialog/dialog.ts +0 -82
- package/src/dialog/index.ts +0 -1
- package/src/divider/_examples/divider.example.ts +0 -27
- package/src/divider/_examples/divider.sizes.example.ts +0 -33
- package/src/divider/_examples/divider.structural.example.ts +0 -55
- package/src/divider/_examples/divider.usage.example.ts +0 -48
- package/src/divider/_examples/divider.variants.example.ts +0 -33
- package/src/divider/_examples/divider.vertical.example.ts +0 -38
- package/src/divider/_examples/divider.with-content.example.ts +0 -38
- package/src/divider/_examples/index.ts +0 -9
- package/src/divider/divider.css +0 -93
- package/src/divider/divider.playground.ts +0 -97
- package/src/divider/divider.spec.ts +0 -207
- package/src/divider/divider.ts +0 -220
- package/src/divider/index.ts +0 -1
- package/src/drawer/_examples/drawer.example.ts +0 -30
- package/src/drawer/_examples/drawer.modal-vs-non-modal.example.ts +0 -27
- package/src/drawer/_examples/drawer.scrollable.example.ts +0 -30
- package/src/drawer/_examples/drawer.sides.example.ts +0 -32
- package/src/drawer/_examples/drawer.usage.example.ts +0 -56
- package/src/drawer/_examples/drawer.with-form.example.ts +0 -48
- package/src/drawer/_examples/index.ts +0 -8
- package/src/drawer/drawer.css +0 -130
- package/src/drawer/drawer.playground.ts +0 -107
- package/src/drawer/drawer.spec.ts +0 -216
- package/src/drawer/drawer.ts +0 -85
- package/src/drawer/index.ts +0 -1
- package/src/dropdown-menu/_examples/dropdown-menu.disabled.example.ts +0 -19
- package/src/dropdown-menu/_examples/dropdown-menu.example.ts +0 -20
- package/src/dropdown-menu/_examples/dropdown-menu.shortcuts.example.ts +0 -31
- package/src/dropdown-menu/_examples/dropdown-menu.sides.example.ts +0 -18
- package/src/dropdown-menu/_examples/dropdown-menu.usage.example.ts +0 -56
- package/src/dropdown-menu/_examples/dropdown-menu.with-icons.example.ts +0 -31
- package/src/dropdown-menu/_examples/dropdown-menu.with-separator.example.ts +0 -41
- package/src/dropdown-menu/_examples/index.ts +0 -9
- package/src/dropdown-menu/dropdown-menu.css +0 -108
- package/src/dropdown-menu/dropdown-menu.playground.ts +0 -109
- package/src/dropdown-menu/dropdown-menu.spec.ts +0 -5
- package/src/dropdown-menu/dropdown-menu.ts +0 -128
- package/src/dropdown-menu/index.ts +0 -1
- package/src/empty-state/_examples/empty-state.error.example.ts +0 -63
- package/src/empty-state/_examples/empty-state.example.ts +0 -59
- package/src/empty-state/_examples/empty-state.search.example.ts +0 -82
- package/src/empty-state/_examples/empty-state.sizes.example.ts +0 -76
- package/src/empty-state/_examples/empty-state.usage.example.ts +0 -66
- package/src/empty-state/_examples/empty-state.with-actions.example.ts +0 -68
- package/src/empty-state/_examples/index.ts +0 -8
- package/src/empty-state/empty-state.css +0 -114
- package/src/empty-state/empty-state.playground.ts +0 -87
- package/src/empty-state/empty-state.spec.ts +0 -211
- package/src/empty-state/empty-state.ts +0 -276
- package/src/empty-state/index.ts +0 -1
- package/src/example-components.ts +0 -396
- package/src/field/_examples/field.disabled.example.ts +0 -49
- package/src/field/_examples/field.example.ts +0 -51
- package/src/field/_examples/field.required.example.ts +0 -46
- package/src/field/_examples/field.with-error.example.ts +0 -73
- package/src/field/_examples/field.with-prefix-suffix.example.ts +0 -63
- package/src/field/_examples/index.ts +0 -7
- package/src/field/field.css +0 -138
- package/src/field/field.playground.ts +0 -108
- package/src/field/field.spec.ts +0 -132
- package/src/field/field.ts +0 -232
- package/src/field/field.usage.example.ts +0 -63
- package/src/field/index.ts +0 -7
- package/src/file-upload/_examples/file-upload.dropzone.example.ts +0 -32
- package/src/file-upload/_examples/file-upload.example.ts +0 -29
- package/src/file-upload/_examples/file-upload.image-preview.example.ts +0 -31
- package/src/file-upload/_examples/file-upload.multiple.example.ts +0 -23
- package/src/file-upload/_examples/file-upload.with-progress.example.ts +0 -59
- package/src/file-upload/_examples/index.ts +0 -7
- package/src/file-upload/file-upload.css +0 -207
- package/src/file-upload/file-upload.playground.ts +0 -84
- package/src/file-upload/file-upload.spec.ts +0 -94
- package/src/file-upload/file-upload.ts +0 -301
- package/src/file-upload/file-upload.usage.example.ts +0 -45
- package/src/file-upload/index.ts +0 -1
- package/src/form/_examples/form.async-submit.example.ts +0 -72
- package/src/form/_examples/form.compound.example.ts +0 -93
- package/src/form/_examples/form.example.ts +0 -70
- package/src/form/_examples/form.validation.example.ts +0 -67
- package/src/form/_examples/index.ts +0 -6
- package/src/form/form.css +0 -63
- package/src/form/form.playground.ts +0 -145
- package/src/form/form.spec.ts +0 -96
- package/src/form/form.ts +0 -216
- package/src/form/form.usage.example.ts +0 -63
- package/src/form/index.ts +0 -5
- package/src/icon/_examples/icon.gallery.example.ts +0 -199
- package/src/icon/_examples/icon.usage.example.ts +0 -46
- package/src/icon/_examples/index.ts +0 -4
- package/src/icon/icon.playground.ts +0 -63
- package/src/icon/index.ts +0 -5
- package/src/icon/lucide/icon-names.generated.ts +0 -1708
- package/src/icon/lucide/icon-names.ts +0 -18
- package/src/icon/lucide/index.ts +0 -2
- package/src/icon/lucide/provide-lucide-icons.ts +0 -96
- package/src/input/_examples/index.ts +0 -4
- package/src/input/_examples/input.color.example.ts +0 -33
- package/src/input/_examples/input.example.ts +0 -22
- package/src/input/index.ts +0 -1
- package/src/input/input.css +0 -70
- package/src/input/input.playground.ts +0 -79
- package/src/input/input.spec.ts +0 -98
- package/src/input/input.ts +0 -158
- package/src/input/input.usage.example.ts +0 -40
- package/src/input-group/_examples/index.ts +0 -7
- package/src/input-group/_examples/input-group.button.example.ts +0 -43
- package/src/input-group/_examples/input-group.example.ts +0 -39
- package/src/input-group/_examples/input-group.icon.example.ts +0 -49
- package/src/input-group/_examples/input-group.url.example.ts +0 -36
- package/src/input-group/_examples/input-group.variants.example.ts +0 -39
- package/src/input-group/index.ts +0 -1
- package/src/input-group/input-group.css +0 -125
- package/src/input-group/input-group.playground.ts +0 -90
- package/src/input-group/input-group.ts +0 -142
- package/src/input-group/input-group.usage.example.ts +0 -47
- package/src/input-mask/_examples/index.ts +0 -8
- package/src/input-mask/_examples/input-mask.credit-card.example.ts +0 -90
- package/src/input-mask/_examples/input-mask.custom-tokens.example.ts +0 -87
- package/src/input-mask/_examples/input-mask.date.example.ts +0 -61
- package/src/input-mask/_examples/input-mask.example.ts +0 -61
- package/src/input-mask/_examples/input-mask.usage.example.ts +0 -44
- package/src/input-mask/_examples/input-mask.validation.example.ts +0 -80
- package/src/input-mask/index.ts +0 -9
- package/src/input-mask/input-mask.css +0 -39
- package/src/input-mask/input-mask.playground.ts +0 -79
- package/src/input-mask/input-mask.ts +0 -130
- package/src/input-otp/_examples/index.ts +0 -8
- package/src/input-otp/_examples/input-otp.autosubmit.example.ts +0 -71
- package/src/input-otp/_examples/input-otp.example.ts +0 -47
- package/src/input-otp/_examples/input-otp.lengths.example.ts +0 -67
- package/src/input-otp/_examples/input-otp.masked.example.ts +0 -46
- package/src/input-otp/_examples/input-otp.reactive.example.ts +0 -58
- package/src/input-otp/_examples/input-otp.separator.example.ts +0 -49
- package/src/input-otp/index.ts +0 -1
- package/src/input-otp/input-otp.css +0 -87
- package/src/input-otp/input-otp.playground.ts +0 -107
- package/src/input-otp/input-otp.ts +0 -244
- package/src/input-otp/input-otp.usage.example.ts +0 -45
- package/src/kbd/_examples/index.ts +0 -6
- package/src/kbd/_examples/kbd.combo.example.ts +0 -24
- package/src/kbd/_examples/kbd.example.ts +0 -22
- package/src/kbd/_examples/kbd.in-tooltip.example.ts +0 -43
- package/src/kbd/_examples/kbd.sizes.example.ts +0 -31
- package/src/kbd/index.ts +0 -1
- package/src/kbd/kbd.css +0 -67
- package/src/kbd/kbd.playground.ts +0 -51
- package/src/kbd/kbd.spec.ts +0 -123
- package/src/kbd/kbd.ts +0 -123
- package/src/kbd/kbd.usage.example.ts +0 -38
- package/src/link/_examples/index.ts +0 -8
- package/src/link/_examples/link.disabled.example.ts +0 -23
- package/src/link/_examples/link.example.ts +0 -26
- package/src/link/_examples/link.external.example.ts +0 -33
- package/src/link/_examples/link.in-prose.example.ts +0 -36
- package/src/link/_examples/link.sizes.example.ts +0 -28
- package/src/link/_examples/link.variants.example.ts +0 -25
- package/src/link/index.ts +0 -1
- package/src/link/link.css +0 -104
- package/src/link/link.playground.ts +0 -98
- package/src/link/link.spec.ts +0 -146
- package/src/link/link.ts +0 -133
- package/src/link/link.usage.example.ts +0 -37
- package/src/list/_examples/index.ts +0 -7
- package/src/list/_examples/list.divided.example.ts +0 -32
- package/src/list/_examples/list.example.ts +0 -31
- package/src/list/_examples/list.interactive.example.ts +0 -51
- package/src/list/_examples/list.nav.example.ts +0 -44
- package/src/list/_examples/list.with-icons.example.ts +0 -97
- package/src/list/index.ts +0 -1
- package/src/list/list.css +0 -166
- package/src/list/list.playground.ts +0 -90
- package/src/list/list.spec.ts +0 -121
- package/src/list/list.ts +0 -227
- package/src/list/list.usage.example.ts +0 -45
- package/src/menubar/_examples/index.ts +0 -6
- package/src/menubar/_examples/menubar.disabled-item.example.ts +0 -23
- package/src/menubar/_examples/menubar.example.ts +0 -22
- package/src/menubar/_examples/menubar.with-shortcuts.example.ts +0 -33
- package/src/menubar/_examples/menubar.with-submenu.example.ts +0 -76
- package/src/menubar/index.ts +0 -1
- package/src/menubar/menubar.css +0 -62
- package/src/menubar/menubar.playground.ts +0 -96
- package/src/menubar/menubar.ts +0 -160
- package/src/menubar/menubar.usage.example.ts +0 -33
- package/src/number-input/_examples/index.ts +0 -7
- package/src/number-input/_examples/number-input.currency.example.ts +0 -35
- package/src/number-input/_examples/number-input.decimal.example.ts +0 -34
- package/src/number-input/_examples/number-input.example.ts +0 -24
- package/src/number-input/_examples/number-input.min-max.example.ts +0 -33
- package/src/number-input/_examples/number-input.with-stepper.example.ts +0 -45
- package/src/number-input/index.ts +0 -1
- package/src/number-input/number-input.css +0 -115
- package/src/number-input/number-input.playground.ts +0 -92
- package/src/number-input/number-input.spec.ts +0 -102
- package/src/number-input/number-input.ts +0 -212
- package/src/number-input/number-input.usage.example.ts +0 -73
- package/src/overlay/overlay.css +0 -32
- package/src/overlay-badge/_examples/index.ts +0 -7
- package/src/overlay-badge/_examples/overlay-badge.described.example.ts +0 -36
- package/src/overlay-badge/_examples/overlay-badge.dot.example.ts +0 -28
- package/src/overlay-badge/_examples/overlay-badge.example.ts +0 -34
- package/src/overlay-badge/_examples/overlay-badge.on-avatar.example.ts +0 -38
- package/src/overlay-badge/_examples/overlay-badge.positions.example.ts +0 -39
- package/src/overlay-badge/index.ts +0 -1
- package/src/overlay-badge/overlay-badge.css +0 -118
- package/src/overlay-badge/overlay-badge.playground.ts +0 -92
- package/src/overlay-badge/overlay-badge.spec.ts +0 -174
- package/src/overlay-badge/overlay-badge.ts +0 -232
- package/src/overlay-badge/overlay-badge.usage.example.ts +0 -44
- package/src/pagination/_examples/index.ts +0 -7
- package/src/pagination/_examples/pagination.boundaries.example.ts +0 -56
- package/src/pagination/_examples/pagination.compact.example.ts +0 -42
- package/src/pagination/_examples/pagination.example.ts +0 -55
- package/src/pagination/_examples/pagination.large.example.ts +0 -54
- package/src/pagination/_examples/pagination.with-info.example.ts +0 -49
- package/src/pagination/index.ts +0 -1
- package/src/pagination/pagination.css +0 -146
- package/src/pagination/pagination.playground.ts +0 -107
- package/src/pagination/pagination.spec.ts +0 -202
- package/src/pagination/pagination.ts +0 -432
- package/src/pagination/pagination.usage.example.ts +0 -50
- package/src/password-input/_examples/index.ts +0 -6
- package/src/password-input/_examples/password-input.example.ts +0 -24
- package/src/password-input/_examples/password-input.strength.example.ts +0 -45
- package/src/password-input/_examples/password-input.toggle.example.ts +0 -43
- package/src/password-input/_examples/password-input.with-rules.example.ts +0 -78
- package/src/password-input/index.ts +0 -1
- package/src/password-input/password-input.css +0 -155
- package/src/password-input/password-input.playground.ts +0 -81
- package/src/password-input/password-input.spec.ts +0 -129
- package/src/password-input/password-input.ts +0 -254
- package/src/password-input/password-input.usage.example.ts +0 -55
- package/src/playground-types.ts +0 -47
- package/src/popover/_examples/index.ts +0 -7
- package/src/popover/_examples/popover.cancellable.example.ts +0 -20
- package/src/popover/_examples/popover.example.ts +0 -20
- package/src/popover/_examples/popover.modal.example.ts +0 -22
- package/src/popover/_examples/popover.sides.example.ts +0 -37
- package/src/popover/_examples/popover.with-form.example.ts +0 -38
- package/src/popover/index.ts +0 -1
- package/src/popover/popover.css +0 -71
- package/src/popover/popover.playground.ts +0 -86
- package/src/popover/popover.spec.ts +0 -5
- package/src/popover/popover.ts +0 -94
- package/src/popover/popover.usage.example.ts +0 -48
- package/src/progress-bar/_examples/index.ts +0 -7
- package/src/progress-bar/_examples/progress-bar.example.ts +0 -22
- package/src/progress-bar/_examples/progress-bar.indeterminate.example.ts +0 -23
- package/src/progress-bar/_examples/progress-bar.sizes.example.ts +0 -29
- package/src/progress-bar/_examples/progress-bar.variants.example.ts +0 -30
- package/src/progress-bar/_examples/progress-bar.with-label.example.ts +0 -30
- package/src/progress-bar/index.ts +0 -1
- package/src/progress-bar/progress-bar.css +0 -113
- package/src/progress-bar/progress-bar.playground.ts +0 -87
- package/src/progress-bar/progress-bar.spec.ts +0 -233
- package/src/progress-bar/progress-bar.ts +0 -155
- package/src/progress-bar/progress-bar.usage.example.ts +0 -52
- package/src/public-api.ts +0 -61
- package/src/radio/_examples/index.ts +0 -6
- package/src/radio/_examples/radio.default.example.ts +0 -26
- package/src/radio/_examples/radio.disabled.example.ts +0 -26
- package/src/radio/_examples/radio.group.example.ts +0 -27
- package/src/radio/_examples/radio.inline.example.ts +0 -26
- package/src/radio/index.ts +0 -1
- package/src/radio/radio.css +0 -58
- package/src/radio/radio.playground.ts +0 -90
- package/src/radio/radio.ts +0 -143
- package/src/radio/radio.usage.example.ts +0 -54
- package/src/select/_examples/index.ts +0 -6
- package/src/select/_examples/select.default.example.ts +0 -26
- package/src/select/_examples/select.disabled.example.ts +0 -24
- package/src/select/_examples/select.grouped.example.ts +0 -37
- package/src/select/_examples/select.placeholder.example.ts +0 -26
- package/src/select/index.ts +0 -1
- package/src/select/select.css +0 -65
- package/src/select/select.playground.ts +0 -81
- package/src/select/select.ts +0 -176
- package/src/select/select.usage.example.ts +0 -64
- package/src/skeleton/_examples/index.ts +0 -6
- package/src/skeleton/_examples/skeleton.animations.example.ts +0 -52
- package/src/skeleton/_examples/skeleton.card.example.ts +0 -68
- package/src/skeleton/_examples/skeleton.example.ts +0 -24
- package/src/skeleton/_examples/skeleton.shapes.example.ts +0 -55
- package/src/skeleton/index.ts +0 -1
- package/src/skeleton/skeleton.css +0 -111
- package/src/skeleton/skeleton.playground.ts +0 -80
- package/src/skeleton/skeleton.spec.ts +0 -126
- package/src/skeleton/skeleton.ts +0 -155
- package/src/skeleton/skeleton.usage.example.ts +0 -49
- package/src/slider/_examples/index.ts +0 -7
- package/src/slider/_examples/slider.example.ts +0 -41
- package/src/slider/_examples/slider.formatted.example.ts +0 -53
- package/src/slider/_examples/slider.range.example.ts +0 -48
- package/src/slider/_examples/slider.vertical.example.ts +0 -48
- package/src/slider/_examples/slider.with-marks.example.ts +0 -46
- package/src/slider/index.ts +0 -1
- package/src/slider/slider.css +0 -172
- package/src/slider/slider.playground.ts +0 -88
- package/src/slider/slider.spec.ts +0 -139
- package/src/slider/slider.ts +0 -246
- package/src/slider/slider.usage.example.ts +0 -68
- package/src/speed-dial/_examples/index.ts +0 -7
- package/src/speed-dial/_examples/speed-dial.directions.example.ts +0 -85
- package/src/speed-dial/_examples/speed-dial.disabled.example.ts +0 -71
- package/src/speed-dial/_examples/speed-dial.example.ts +0 -48
- package/src/speed-dial/_examples/speed-dial.usage.example.ts +0 -59
- package/src/speed-dial/_examples/speed-dial.with-tooltips.example.ts +0 -65
- package/src/speed-dial/index.ts +0 -1
- package/src/speed-dial/speed-dial.css +0 -137
- package/src/speed-dial/speed-dial.playground.ts +0 -137
- package/src/speed-dial/speed-dial.spec.ts +0 -191
- package/src/speed-dial/speed-dial.ts +0 -257
- package/src/spinner/_examples/index.ts +0 -8
- package/src/spinner/_examples/spinner.animations.example.ts +0 -54
- package/src/spinner/_examples/spinner.example.ts +0 -26
- package/src/spinner/_examples/spinner.in-button.example.ts +0 -51
- package/src/spinner/_examples/spinner.sizes.example.ts +0 -31
- package/src/spinner/_examples/spinner.usage.example.ts +0 -45
- package/src/spinner/_examples/spinner.variants.example.ts +0 -34
- package/src/spinner/index.ts +0 -1
- package/src/spinner/spinner.css +0 -161
- package/src/spinner/spinner.playground.ts +0 -68
- package/src/spinner/spinner.spec.ts +0 -184
- package/src/spinner/spinner.ts +0 -185
- package/src/stepper/_examples/index.ts +0 -8
- package/src/stepper/_examples/stepper.example.ts +0 -62
- package/src/stepper/_examples/stepper.non-linear.example.ts +0 -63
- package/src/stepper/_examples/stepper.optional-step.example.ts +0 -62
- package/src/stepper/_examples/stepper.usage.example.ts +0 -73
- package/src/stepper/_examples/stepper.vertical.example.ts +0 -66
- package/src/stepper/_examples/stepper.with-error.example.ts +0 -63
- package/src/stepper/index.ts +0 -1
- package/src/stepper/stepper.css +0 -147
- package/src/stepper/stepper.playground.ts +0 -88
- package/src/stepper/stepper.spec.ts +0 -200
- package/src/stepper/stepper.ts +0 -242
- package/src/table/_examples/index.ts +0 -23
- package/src/table/_examples/table.column-pinning.example.ts +0 -55
- package/src/table/_examples/table.column-resize.example.ts +0 -49
- package/src/table/_examples/table.column-visibility.example.ts +0 -52
- package/src/table/_examples/table.density.example.ts +0 -71
- package/src/table/_examples/table.editable.example.ts +0 -85
- package/src/table/_examples/table.empty-and-error.example.ts +0 -112
- package/src/table/_examples/table.example.ts +0 -45
- package/src/table/_examples/table.export.example.ts +0 -82
- package/src/table/_examples/table.filterable.example.ts +0 -67
- package/src/table/_examples/table.grouping.example.ts +0 -63
- package/src/table/_examples/table.keyboard.example.ts +0 -115
- package/src/table/_examples/table.master-detail.example.ts +0 -102
- package/src/table/_examples/table.persistence.example.ts +0 -85
- package/src/table/_examples/table.playground.ts +0 -154
- package/src/table/_examples/table.row-pinning.example.ts +0 -71
- package/src/table/_examples/table.selection.example.ts +0 -67
- package/src/table/_examples/table.server-mode.example.ts +0 -120
- package/src/table/_examples/table.sortable.example.ts +0 -49
- package/src/table/_examples/table.theming.example.ts +0 -64
- package/src/table/_examples/table.usage.example.ts +0 -90
- package/src/table/_examples/table.virtualized.example.ts +0 -122
- package/src/table/index.ts +0 -11
- package/src/table/table-cell-editor-outlet.ts +0 -111
- package/src/table/table-editors/boolean-editor.ts +0 -71
- package/src/table/table-editors/date-editor.ts +0 -117
- package/src/table/table-editors/editors.spec.ts +0 -147
- package/src/table/table-editors/index.ts +0 -41
- package/src/table/table-editors/number-editor.ts +0 -89
- package/src/table/table-editors/select-editor.ts +0 -107
- package/src/table/table-editors/text-editor.ts +0 -82
- package/src/table/table-export.spec.ts +0 -33
- package/src/table/table-export.ts +0 -53
- package/src/table/table-filter-outlet.ts +0 -137
- package/src/table/table-filters/date-filter.ts +0 -122
- package/src/table/table-filters/filters.css +0 -53
- package/src/table/table-filters/filters.spec.ts +0 -277
- package/src/table/table-filters/index.ts +0 -11
- package/src/table/table-filters/number-filter.ts +0 -232
- package/src/table/table-filters/select-filter.ts +0 -129
- package/src/table/table-filters/text-filter.ts +0 -110
- package/src/table/table-pagination.spec.ts +0 -118
- package/src/table/table-pagination.ts +0 -191
- package/src/table/table-side-panel.spec.ts +0 -170
- package/src/table/table-side-panel.ts +0 -263
- package/src/table/table-status-bar.spec.ts +0 -78
- package/src/table/table-status-bar.ts +0 -70
- package/src/table/table-toolbar.spec.ts +0 -180
- package/src/table/table-toolbar.ts +0 -244
- package/src/table/table-virtual.spec.ts +0 -103
- package/src/table/table-virtual.ts +0 -180
- package/src/table/table.css +0 -468
- package/src/table/table.spec.ts +0 -175
- package/src/table/table.ts +0 -1009
- package/src/tabs/_examples/index.ts +0 -8
- package/src/tabs/_examples/tabs.controlled.example.ts +0 -59
- package/src/tabs/_examples/tabs.disabled.example.ts +0 -34
- package/src/tabs/_examples/tabs.example.ts +0 -34
- package/src/tabs/_examples/tabs.manual-activation.example.ts +0 -34
- package/src/tabs/_examples/tabs.usage.example.ts +0 -43
- package/src/tabs/_examples/tabs.vertical.example.ts +0 -33
- package/src/tabs/index.ts +0 -1
- package/src/tabs/tabs.css +0 -80
- package/src/tabs/tabs.playground.ts +0 -88
- package/src/tabs/tabs.spec.ts +0 -135
- package/src/tabs/tabs.ts +0 -204
- package/src/tag/_examples/index.ts +0 -9
- package/src/tag/_examples/tag.example.ts +0 -22
- package/src/tag/_examples/tag.list.example.ts +0 -38
- package/src/tag/_examples/tag.removable.example.ts +0 -39
- package/src/tag/_examples/tag.selectable.example.ts +0 -33
- package/src/tag/_examples/tag.sizes.example.ts +0 -25
- package/src/tag/_examples/tag.usage.example.ts +0 -62
- package/src/tag/_examples/tag.variants.example.ts +0 -29
- package/src/tag/index.ts +0 -1
- package/src/tag/tag.css +0 -167
- package/src/tag/tag.playground.ts +0 -63
- package/src/tag/tag.spec.ts +0 -153
- package/src/tag/tag.ts +0 -186
- package/src/test-setup.ts +0 -5
- package/src/textarea/_examples/index.ts +0 -8
- package/src/textarea/_examples/textarea.autoresize.example.ts +0 -37
- package/src/textarea/_examples/textarea.character-count.example.ts +0 -34
- package/src/textarea/_examples/textarea.example.ts +0 -22
- package/src/textarea/_examples/textarea.no-resize.example.ts +0 -28
- package/src/textarea/_examples/textarea.usage.example.ts +0 -50
- package/src/textarea/_examples/textarea.with-field.example.ts +0 -66
- package/src/textarea/index.ts +0 -1
- package/src/textarea/textarea.css +0 -117
- package/src/textarea/textarea.playground.ts +0 -70
- package/src/textarea/textarea.spec.ts +0 -161
- package/src/textarea/textarea.ts +0 -339
- package/src/time-picker/_examples/index.ts +0 -8
- package/src/time-picker/_examples/time-picker.12-hour.example.ts +0 -24
- package/src/time-picker/_examples/time-picker.example.ts +0 -24
- package/src/time-picker/_examples/time-picker.formatted.example.ts +0 -32
- package/src/time-picker/_examples/time-picker.range.example.ts +0 -54
- package/src/time-picker/_examples/time-picker.usage.example.ts +0 -53
- package/src/time-picker/_examples/time-picker.with-seconds.example.ts +0 -24
- package/src/time-picker/index.ts +0 -1
- package/src/time-picker/time-picker.css +0 -126
- package/src/time-picker/time-picker.playground.ts +0 -72
- package/src/time-picker/time-picker.spec.ts +0 -77
- package/src/time-picker/time-picker.ts +0 -207
- package/src/toast/_examples/index.ts +0 -7
- package/src/toast/_examples/toast.default.example.ts +0 -37
- package/src/toast/_examples/toast.dismissible.example.ts +0 -38
- package/src/toast/_examples/toast.usage.example.ts +0 -57
- package/src/toast/_examples/toast.variants.example.ts +0 -43
- package/src/toast/_examples/toast.with-action.example.ts +0 -46
- package/src/toast/index.ts +0 -1
- package/src/toast/toast.css +0 -115
- package/src/toast/toast.playground.ts +0 -61
- package/src/toast/toast.ts +0 -168
- package/src/toggle/_examples/index.ts +0 -7
- package/src/toggle/_examples/toggle.checked.example.ts +0 -20
- package/src/toggle/_examples/toggle.default.example.ts +0 -20
- package/src/toggle/_examples/toggle.disabled.example.ts +0 -26
- package/src/toggle/_examples/toggle.usage.example.ts +0 -51
- package/src/toggle/_examples/toggle.with-label.example.ts +0 -30
- package/src/toggle/index.ts +0 -1
- package/src/toggle/toggle.css +0 -123
- package/src/toggle/toggle.playground.ts +0 -65
- package/src/toggle/toggle.ts +0 -113
- package/src/tooltip/_examples/index.ts +0 -9
- package/src/tooltip/_examples/tooltip.delays.example.ts +0 -16
- package/src/tooltip/_examples/tooltip.disabled.example.ts +0 -16
- package/src/tooltip/_examples/tooltip.example.ts +0 -16
- package/src/tooltip/_examples/tooltip.group.example.ts +0 -20
- package/src/tooltip/_examples/tooltip.rich.example.ts +0 -19
- package/src/tooltip/_examples/tooltip.sides.example.ts +0 -18
- package/src/tooltip/_examples/tooltip.usage.example.ts +0 -50
- package/src/tooltip/index.ts +0 -1
- package/src/tooltip/tooltip.css +0 -61
- package/src/tooltip/tooltip.playground.ts +0 -79
- package/src/tooltip/tooltip.spec.ts +0 -5
- package/src/tooltip/tooltip.ts +0 -102
- package/src/tree-select/_examples/index.ts +0 -8
- package/src/tree-select/_examples/tree-select.disabled.example.ts +0 -106
- package/src/tree-select/_examples/tree-select.example.ts +0 -65
- package/src/tree-select/_examples/tree-select.expanded.example.ts +0 -72
- package/src/tree-select/_examples/tree-select.field.example.ts +0 -77
- package/src/tree-select/_examples/tree-select.multi.example.ts +0 -73
- package/src/tree-select/_examples/tree-select.usage.example.ts +0 -85
- package/src/tree-select/index.ts +0 -1
- package/src/tree-select/tree-select.css +0 -220
- package/src/tree-select/tree-select.playground.ts +0 -83
- package/src/tree-select/tree-select.ts +0 -348
- package/src/typography/_examples/index.ts +0 -9
- package/src/typography/_examples/typography.blockquote.example.ts +0 -34
- package/src/typography/_examples/typography.code.example.ts +0 -32
- package/src/typography/_examples/typography.example.ts +0 -42
- package/src/typography/_examples/typography.lead.example.ts +0 -37
- package/src/typography/_examples/typography.muted.example.ts +0 -27
- package/src/typography/_examples/typography.truncate.example.ts +0 -41
- package/src/typography/_examples/typography.usage.example.ts +0 -44
- package/src/typography/index.ts +0 -8
- package/src/typography/typography.playground.ts +0 -101
- package/src/typography/typography.spec.ts +0 -70
- package/src/typography/typography.ts +0 -105
- package/tsconfig.lib.json +0 -25
- package/tsconfig.lib.prod.json +0 -17
- package/tsconfig.spec.json +0 -16
- package/vite.config.ts +0 -33
package/src/button/button.ts
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { Component, ChangeDetectionStrategy, ModelSignal, ViewEncapsulation, input, model } from '@angular/core';
|
|
2
|
-
import { KjButton } from '@kouji-ui/core';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Styled wrapper around the headless KjButton directive.
|
|
6
|
-
*
|
|
7
|
-
* Variant and size are user-configurable strings. Configure the allowed values
|
|
8
|
-
* and defaults via `provideKjButton(…)` at the application or component scope.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```html
|
|
12
|
-
* <kj-button kjVariant="destructive" kjSize="lg" [kjLoading]="busy()">
|
|
13
|
-
* Delete
|
|
14
|
-
* </kj-button>
|
|
15
|
-
* ```
|
|
16
|
-
* @doc-example Default
|
|
17
|
-
* The default playground — variant `secondary`, size `md`, no states.
|
|
18
|
-
* @doc-file button.example.ts
|
|
19
|
-
* @doc-example Usage
|
|
20
|
-
* A walkthrough of the most common button usages — variants, sizes,
|
|
21
|
-
* loading / disabled / pressed states, and a click handler. Use this as the
|
|
22
|
-
* copy-paste starting point for new screens.
|
|
23
|
-
* @doc-file button.usage.example.ts
|
|
24
|
-
* @doc-example Variants
|
|
25
|
-
* Primary / secondary / ghost / destructive — pick the visual weight that
|
|
26
|
-
* matches the action's importance.
|
|
27
|
-
* @doc-file button.variants.example.ts
|
|
28
|
-
* @doc-example Sizes
|
|
29
|
-
* `sm`, `md`, `lg` — `md` is the default. `sm` keeps a 44px touch target via
|
|
30
|
-
* padding so it stays WCAG 2.5.5 compliant.
|
|
31
|
-
* @doc-file button.sizes.example.ts
|
|
32
|
-
* @doc-example Disabled
|
|
33
|
-
* `[disabled]="true"` removes the button from the tab order and dims it. Use
|
|
34
|
-
* for forms where validation hasn't passed.
|
|
35
|
-
* @doc-file button.disabled.example.ts
|
|
36
|
-
* @doc-example Loading
|
|
37
|
-
* Toggle `[loading]="true"` while a request is in-flight. Implies disabled —
|
|
38
|
-
* don't set both.
|
|
39
|
-
* @doc-file button.loading.example.ts
|
|
40
|
-
* @doc-example Pressed (toggle)
|
|
41
|
-
* Stateful toggle via `[kjPressed]`. `aria-pressed` is wired automatically.
|
|
42
|
-
* @doc-file button.pressed.example.ts
|
|
43
|
-
* @doc-example Icon-only
|
|
44
|
-
* Provide `[kjAriaLabel]` for screen readers — dev-mode enforces it.
|
|
45
|
-
* @doc-file button.icon.example.ts
|
|
46
|
-
* @doc-example Anchor as button
|
|
47
|
-
* Render as `<a>` while keeping button visuals — handy for navigation that
|
|
48
|
-
* needs to look like an action.
|
|
49
|
-
* @doc-file button.anchor.example.ts
|
|
50
|
-
* @doc-example Configured presets
|
|
51
|
-
* `provideKjButton({ variant: 'primary' })` sets the default for every
|
|
52
|
-
* button in the injection scope.
|
|
53
|
-
* @doc-file button.configured.example.ts
|
|
54
|
-
*
|
|
55
|
-
* @doc-keyboard
|
|
56
|
-
* Enter|Space — Activates the button (native click on the underlying
|
|
57
|
-
* <button>; for [kjPressed] toggles this also flips the pressed state)
|
|
58
|
-
* Tab — Moves focus to the next focusable element
|
|
59
|
-
*
|
|
60
|
-
* @doc-aria
|
|
61
|
-
* aria-disabled — Reflected when [kjDisabled] or [kjLoading] is true
|
|
62
|
-
* aria-busy — Reflected when [kjLoading] is true
|
|
63
|
-
* aria-pressed — Reflected when used as a toggle (kjPressed is bound)
|
|
64
|
-
* aria-label — Wired through to the inner <button>; required for icon-only
|
|
65
|
-
* data-variant — Mirrors the resolved variant for theme/scope hooks
|
|
66
|
-
* data-size — Mirrors the resolved size for theme/scope hooks
|
|
67
|
-
*
|
|
68
|
-
* @doc-css-var
|
|
69
|
-
* --kj-button-bg — Background fill. Variant rules set this; override to brand-paint a one-off.
|
|
70
|
-
* --kj-button-fg — Foreground (label + icon) color. Resolved per variant.
|
|
71
|
-
* --kj-button-bg-hover — Hover background. Defaults to an 8% black mix on the variant fill.
|
|
72
|
-
* --kj-button-fg-hover — Hover foreground (default variant only).
|
|
73
|
-
* --kj-button-border-color — Border color. Outline/destructive set this per variant.
|
|
74
|
-
* --kj-button-border-width — Border thickness. Inherits the theme's --kj-border.
|
|
75
|
-
* --kj-button-radius — Corner radius. Inherits --kj-radius-field.
|
|
76
|
-
* --kj-button-padding-x — Horizontal padding. Sizes override.
|
|
77
|
-
* --kj-button-padding-y — Vertical padding. Sizes override.
|
|
78
|
-
* --kj-button-gap — Gap between icon and label.
|
|
79
|
-
* --kj-button-font — Font family. Defaults to --kj-font-sans.
|
|
80
|
-
* --kj-button-font-size — Font size. Sizes override.
|
|
81
|
-
* --kj-button-font-weight — Font weight. Default 600; brutalist themes bump it.
|
|
82
|
-
* --kj-button-letter-spacing — Letter tracking. Default -0.01em.
|
|
83
|
-
* --kj-button-height — Explicit height. Sizes (sm/md/lg/icon) set this.
|
|
84
|
-
* --kj-button-min-width — Minimum width. Defaults to auto.
|
|
85
|
-
* --kj-button-hover-translate — Y translation on hover (lift). -2px default; bauhaus -4px.
|
|
86
|
-
* --kj-button-translate-active — Transform on press. Defaults to none.
|
|
87
|
-
* --kj-button-shadow — Box shadow on the `default` variant. Unset by default — opt in at the page/scope where you want the brutalist offset (e.g. landing hero, docs playground stage).
|
|
88
|
-
* --kj-button-shadow-hover — Box shadow on hover (default variant). Falls back to --kj-button-shadow.
|
|
89
|
-
* --kj-button-shadow-active — Box shadow on press (default variant). Falls back to --kj-button-shadow.
|
|
90
|
-
*
|
|
91
|
-
* @doc-touch
|
|
92
|
-
* `size="lg"` and `size="icon"` meet WCAG 2.5.5 ≥ 44×44 by default.
|
|
93
|
-
* `sm` and `md` rely on the inline-text-link exception — embed in text only.
|
|
94
|
-
*
|
|
95
|
-
* @doc-a11y
|
|
96
|
-
* Renders a real <button type="..."> (defaults to "button"), so the
|
|
97
|
-
* native focus ring, click semantics, and form-submission behaviour
|
|
98
|
-
* are preserved. `KjFocusRing` (from kjButton) shows the outline on
|
|
99
|
-
* `:focus-visible` only — never on mouse-down. When used as an anchor
|
|
100
|
-
* via `[routerLink]`, Enter activates per native anchor semantics.
|
|
101
|
-
*
|
|
102
|
-
* @doc-related button-group,link,icon
|
|
103
|
-
*
|
|
104
|
-
* @doc-category Library/Actions
|
|
105
|
-
* @doc
|
|
106
|
-
* @doc-name button
|
|
107
|
-
* @doc-is-main
|
|
108
|
-
* @doc-description Themed button with variants, sizes, and built-in disabled, loading, and pressed states.
|
|
109
|
-
*/
|
|
110
|
-
@Component({
|
|
111
|
-
selector: 'kj-button',
|
|
112
|
-
standalone: true,
|
|
113
|
-
imports: [KjButton],
|
|
114
|
-
template: `
|
|
115
|
-
<button
|
|
116
|
-
[type]="kjType()"
|
|
117
|
-
kjButton
|
|
118
|
-
class="kj-button"
|
|
119
|
-
[kjVariant]="kjVariant()"
|
|
120
|
-
[kjSize]="kjSize()"
|
|
121
|
-
[kjDisabled]="kjDisabled()"
|
|
122
|
-
[kjLoading]="kjLoading()"
|
|
123
|
-
[kjFullWidth]="kjFullWidth()"
|
|
124
|
-
[(kjPressed)]="kjPressed"
|
|
125
|
-
[attr.aria-label]="kjAriaLabel()"
|
|
126
|
-
>
|
|
127
|
-
@if (kjLoading()) {
|
|
128
|
-
<span class="kj-button__spinner" aria-hidden="true"></span>
|
|
129
|
-
} @else {
|
|
130
|
-
<ng-content />
|
|
131
|
-
}
|
|
132
|
-
</button>
|
|
133
|
-
`,
|
|
134
|
-
styleUrl: './button.css',
|
|
135
|
-
encapsulation: ViewEncapsulation.None,
|
|
136
|
-
host: { style: 'display: contents;' },
|
|
137
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
138
|
-
})
|
|
139
|
-
export class KjButtonComponent {
|
|
140
|
-
readonly kjVariant = input('default');
|
|
141
|
-
readonly kjSize = input('md');
|
|
142
|
-
readonly kjDisabled = input(false);
|
|
143
|
-
readonly kjLoading = input(false);
|
|
144
|
-
readonly kjFullWidth = input(false);
|
|
145
|
-
// Field annotation matches the directive's — ng-packagr otherwise narrows
|
|
146
|
-
// both sides to ModelSignal<boolean>, breaking the [(kjPressed)] binding.
|
|
147
|
-
readonly kjPressed: ModelSignal<boolean | undefined> = model<boolean | undefined>(undefined);
|
|
148
|
-
readonly kjType = input<'button' | 'submit' | 'reset'>('button');
|
|
149
|
-
readonly kjAriaLabel = input<string | undefined>(undefined);
|
|
150
|
-
}
|
package/src/button/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './button';
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
-
import { KjButtonGroupComponent } from '../button-group';
|
|
3
|
-
import { KjButtonComponent } from '../../button/button';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Default usage example for KjButtonGroupComponent.
|
|
7
|
-
* Three joined buttons with the group's defaults
|
|
8
|
-
* (`kjOrientation="horizontal"`).
|
|
9
|
-
*/
|
|
10
|
-
@Component({
|
|
11
|
-
selector: 'kj-button-group-example',
|
|
12
|
-
standalone: true,
|
|
13
|
-
imports: [KjButtonGroupComponent, KjButtonComponent],
|
|
14
|
-
styles: [
|
|
15
|
-
`
|
|
16
|
-
:host {
|
|
17
|
-
display: block;
|
|
18
|
-
}
|
|
19
|
-
`,
|
|
20
|
-
],
|
|
21
|
-
changeDetection: ChangeDetectionStrategy.Eager,
|
|
22
|
-
template: `
|
|
23
|
-
<kj-button-group kjAriaLabel="Document actions">
|
|
24
|
-
<kj-button kjVariant="outline">Save</kj-button>
|
|
25
|
-
<kj-button kjVariant="outline">Cancel</kj-button>
|
|
26
|
-
<kj-button kjVariant="outline">Delete</kj-button>
|
|
27
|
-
</kj-button-group>
|
|
28
|
-
`,
|
|
29
|
-
})
|
|
30
|
-
export class KjButtonGroupExample {}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
-
import { KjButtonGroupComponent } from '../button-group';
|
|
3
|
-
import { KjButtonComponent } from '../../button/button';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Icon-only segmented control. `kjSize="icon"` enforces the 44×44 touch
|
|
7
|
-
* target on each child (per `KjButton`'s WCAG 2.5.5 rule), and the group
|
|
8
|
-
* collapses the inner edges into a tight cluster suitable for a toolbar.
|
|
9
|
-
*/
|
|
10
|
-
@Component({
|
|
11
|
-
selector: 'kj-button-group-icon-only-example',
|
|
12
|
-
standalone: true,
|
|
13
|
-
imports: [KjButtonGroupComponent, KjButtonComponent],
|
|
14
|
-
styles: [
|
|
15
|
-
`
|
|
16
|
-
:host {
|
|
17
|
-
display: block;
|
|
18
|
-
}
|
|
19
|
-
`,
|
|
20
|
-
],
|
|
21
|
-
changeDetection: ChangeDetectionStrategy.Eager,
|
|
22
|
-
template: `
|
|
23
|
-
<kj-button-group kjAriaLabel="Alignment">
|
|
24
|
-
<kj-button kjVariant="outline" kjSize="icon" kjAriaLabel="Align left">⟸</kj-button>
|
|
25
|
-
<kj-button kjVariant="outline" kjSize="icon" kjAriaLabel="Align center">≡</kj-button>
|
|
26
|
-
<kj-button kjVariant="outline" kjSize="icon" kjAriaLabel="Align right">⟹</kj-button>
|
|
27
|
-
</kj-button-group>
|
|
28
|
-
`,
|
|
29
|
-
})
|
|
30
|
-
export class KjButtonGroupIconOnlyExample {}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Component, signal, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
-
import { KjButtonGroupComponent } from '../button-group';
|
|
3
|
-
import { KjButtonComponent } from '../../button/button';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Toggle-style group using `KjButton`'s built-in `kjPressed` model on each
|
|
7
|
-
* child. The group itself is purely presentational here — it provides the
|
|
8
|
-
* segmented visual and the `role="group"` host. Per-child `[(kjPressed)]`
|
|
9
|
-
* gives `aria-pressed` semantics without coupling the group to selection
|
|
10
|
-
* state.
|
|
11
|
-
*/
|
|
12
|
-
@Component({
|
|
13
|
-
selector: 'kj-button-group-toggle-example',
|
|
14
|
-
standalone: true,
|
|
15
|
-
imports: [KjButtonGroupComponent, KjButtonComponent],
|
|
16
|
-
styles: [
|
|
17
|
-
`
|
|
18
|
-
:host {
|
|
19
|
-
display: block;
|
|
20
|
-
}
|
|
21
|
-
`,
|
|
22
|
-
],
|
|
23
|
-
changeDetection: ChangeDetectionStrategy.Eager,
|
|
24
|
-
template: `
|
|
25
|
-
<kj-button-group kjAriaLabel="Text formatting">
|
|
26
|
-
<kj-button kjVariant="outline" [(kjPressed)]="bold">Bold</kj-button>
|
|
27
|
-
<kj-button kjVariant="outline" [(kjPressed)]="italic">Italic</kj-button>
|
|
28
|
-
<kj-button kjVariant="outline" [(kjPressed)]="underline">Underline</kj-button>
|
|
29
|
-
</kj-button-group>
|
|
30
|
-
`,
|
|
31
|
-
})
|
|
32
|
-
export class KjButtonGroupToggleExample {
|
|
33
|
-
readonly bold = signal<boolean | undefined>(true);
|
|
34
|
-
readonly italic = signal<boolean | undefined>(false);
|
|
35
|
-
readonly underline = signal<boolean | undefined>(false);
|
|
36
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
-
import { KjButtonGroupComponent } from '../button-group';
|
|
3
|
-
import { KjButtonComponent } from '../../button/button';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Group-level variant propagation. The group sets `kjVariant="outline"` —
|
|
7
|
-
* children that don't override read it as a fallback through the
|
|
8
|
-
* `KJ_BUTTON_GROUP` context. Each child still applies the same variant
|
|
9
|
-
* explicitly here so the styled wrapper picks it up; the group context is
|
|
10
|
-
* the integration point for future variant-aware children.
|
|
11
|
-
*/
|
|
12
|
-
@Component({
|
|
13
|
-
selector: 'kj-button-group-variants-example',
|
|
14
|
-
standalone: true,
|
|
15
|
-
imports: [KjButtonGroupComponent, KjButtonComponent],
|
|
16
|
-
styles: [
|
|
17
|
-
`
|
|
18
|
-
:host {
|
|
19
|
-
display: flex;
|
|
20
|
-
flex-direction: column;
|
|
21
|
-
gap: var(--kj-space-md);
|
|
22
|
-
}
|
|
23
|
-
`,
|
|
24
|
-
],
|
|
25
|
-
changeDetection: ChangeDetectionStrategy.Eager,
|
|
26
|
-
template: `
|
|
27
|
-
<kj-button-group kjVariant="outline" kjAriaLabel="Outline group">
|
|
28
|
-
<kj-button kjVariant="outline">Day</kj-button>
|
|
29
|
-
<kj-button kjVariant="outline">Week</kj-button>
|
|
30
|
-
<kj-button kjVariant="outline">Month</kj-button>
|
|
31
|
-
</kj-button-group>
|
|
32
|
-
|
|
33
|
-
<kj-button-group kjVariant="ghost" kjAriaLabel="Ghost group">
|
|
34
|
-
<kj-button kjVariant="ghost">Cut</kj-button>
|
|
35
|
-
<kj-button kjVariant="ghost">Copy</kj-button>
|
|
36
|
-
<kj-button kjVariant="ghost">Paste</kj-button>
|
|
37
|
-
</kj-button-group>
|
|
38
|
-
`,
|
|
39
|
-
})
|
|
40
|
-
export class KjButtonGroupVariantsExample {}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
-
import { KjButtonGroupComponent } from '../button-group';
|
|
3
|
-
import { KjButtonComponent } from '../../button/button';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Vertical orientation: the group stacks its children top-to-bottom and
|
|
7
|
-
* collapses the touching top/bottom edges into a single segmented column.
|
|
8
|
-
*/
|
|
9
|
-
@Component({
|
|
10
|
-
selector: 'kj-button-group-vertical-example',
|
|
11
|
-
standalone: true,
|
|
12
|
-
imports: [KjButtonGroupComponent, KjButtonComponent],
|
|
13
|
-
styles: [
|
|
14
|
-
`
|
|
15
|
-
:host {
|
|
16
|
-
display: block;
|
|
17
|
-
}
|
|
18
|
-
`,
|
|
19
|
-
],
|
|
20
|
-
changeDetection: ChangeDetectionStrategy.Eager,
|
|
21
|
-
template: `
|
|
22
|
-
<kj-button-group kjOrientation="vertical" kjAriaLabel="View options">
|
|
23
|
-
<kj-button kjVariant="outline">Top</kj-button>
|
|
24
|
-
<kj-button kjVariant="outline">Middle</kj-button>
|
|
25
|
-
<kj-button kjVariant="outline">Bottom</kj-button>
|
|
26
|
-
</kj-button-group>
|
|
27
|
-
`,
|
|
28
|
-
})
|
|
29
|
-
export class KjButtonGroupVerticalExample {}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
// AUTO-GENERATED by scripts/migrate-examples.mjs
|
|
2
|
-
// One barrel per component folder — used by the docs app as a lazy chunk.
|
|
3
|
-
export { KjButtonGroupExample } from './button-group.example';
|
|
4
|
-
export { KjButtonGroupIconOnlyExample } from './button-group.icon-only.example';
|
|
5
|
-
export { KjButtonGroupToggleExample } from './button-group.toggle.example';
|
|
6
|
-
export { KjButtonGroupVariantsExample } from './button-group.variants.example';
|
|
7
|
-
export { KjButtonGroupVerticalExample } from './button-group.vertical.example';
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/* ─────────────────────────────────────────────────────────────
|
|
2
|
-
.kj-button-group — segmented cluster of <kj-button> children.
|
|
3
|
-
The wrapper itself is a flex container with no padding/bg of
|
|
4
|
-
its own; segmented "chunky" feel comes from collapsing the
|
|
5
|
-
inner borders between adjacent buttons and squaring their
|
|
6
|
-
touching edges while keeping the group's outer corners
|
|
7
|
-
rounded.
|
|
8
|
-
──────────────────────────────────────────────────────────── */
|
|
9
|
-
|
|
10
|
-
@layer kj.component {
|
|
11
|
-
.kj-button-group {
|
|
12
|
-
--kj-button-group-gap: 0;
|
|
13
|
-
display: inline-flex;
|
|
14
|
-
flex-direction: row;
|
|
15
|
-
align-items: stretch;
|
|
16
|
-
gap: var(--kj-button-group-gap);
|
|
17
|
-
border-radius: var(--kj-radius-field);
|
|
18
|
-
/* Hide pseudo-overflow from collapsed-corner siblings. Children also
|
|
19
|
-
inherit display:contents semantics from <kj-button>, so the inner
|
|
20
|
-
<button> is the actual flex item. */
|
|
21
|
-
isolation: isolate;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.kj-button-group[data-orientation='vertical'] {
|
|
25
|
-
flex-direction: column;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/* Each <kj-button> sets `display: contents` on its host (see button.ts);
|
|
29
|
-
the styled element is the inner `.kj-button`. Squarish inner edges +
|
|
30
|
-
rounded outer edges fall out of :first-child / :last-child rules on
|
|
31
|
-
those inner buttons. */
|
|
32
|
-
|
|
33
|
-
/* ── Horizontal: collapse left/right radii on middle items ─────────── */
|
|
34
|
-
.kj-button-group:not([data-orientation='vertical']) > kj-button > .kj-button {
|
|
35
|
-
border-radius: 0;
|
|
36
|
-
/* Pull adjacent borders into a single visual line. */
|
|
37
|
-
margin-left: calc(-1 * var(--kj-border));
|
|
38
|
-
}
|
|
39
|
-
.kj-button-group:not([data-orientation='vertical']) > kj-button:first-child > .kj-button {
|
|
40
|
-
border-top-left-radius: var(--kj-radius-field);
|
|
41
|
-
border-bottom-left-radius: var(--kj-radius-field);
|
|
42
|
-
margin-left: 0;
|
|
43
|
-
}
|
|
44
|
-
.kj-button-group:not([data-orientation='vertical']) > kj-button:last-child > .kj-button {
|
|
45
|
-
border-top-right-radius: var(--kj-radius-field);
|
|
46
|
-
border-bottom-right-radius: var(--kj-radius-field);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/* ── Vertical: collapse top/bottom radii on middle items ───────────── */
|
|
50
|
-
.kj-button-group[data-orientation='vertical'] > kj-button > .kj-button {
|
|
51
|
-
border-radius: 0;
|
|
52
|
-
margin-top: calc(-1 * var(--kj-border));
|
|
53
|
-
width: 100%;
|
|
54
|
-
}
|
|
55
|
-
.kj-button-group[data-orientation='vertical'] > kj-button:first-child > .kj-button {
|
|
56
|
-
border-top-left-radius: var(--kj-radius-field);
|
|
57
|
-
border-top-right-radius: var(--kj-radius-field);
|
|
58
|
-
margin-top: 0;
|
|
59
|
-
}
|
|
60
|
-
.kj-button-group[data-orientation='vertical'] > kj-button:last-child > .kj-button {
|
|
61
|
-
border-bottom-left-radius: var(--kj-radius-field);
|
|
62
|
-
border-bottom-right-radius: var(--kj-radius-field);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/* Lift the focused / hovered / pressed button above its neighbours so its
|
|
66
|
-
border isn't clipped by the negative-margin overlap. */
|
|
67
|
-
.kj-button-group > kj-button > .kj-button:hover,
|
|
68
|
-
.kj-button-group > kj-button > .kj-button:focus-visible,
|
|
69
|
-
.kj-button-group > kj-button > .kj-button[aria-pressed='true'] {
|
|
70
|
-
z-index: 1;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/* Group-level disabled: visually muted when the directive flags it. The
|
|
74
|
-
individual <kj-button>s still render their own aria-disabled when their
|
|
75
|
-
own kjDisabled is true; consumers wiring the group context as a fallback
|
|
76
|
-
will get aria-disabled on every child. */
|
|
77
|
-
.kj-button-group[data-disabled] {
|
|
78
|
-
opacity: 0.7;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
|
|
2
|
-
import { KjButtonGroupComponent } from './button-group';
|
|
3
|
-
import { KjButtonComponent } from '../button/button';
|
|
4
|
-
import type { PlaygroundFile } from '@kouji-ui/components/playground-types';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Playground state — module-scope signals. Tunes orientation, the cascaded
|
|
8
|
-
* variant / size for member buttons, disabled state, and the button count so
|
|
9
|
-
* the segmented joining can be verified visually.
|
|
10
|
-
*/
|
|
11
|
-
const orientation = signal<'horizontal' | 'vertical'>('horizontal');
|
|
12
|
-
const variant = signal<'default' | 'outline' | 'ghost' | 'destructive'>('outline');
|
|
13
|
-
const size = signal<'sm' | 'md' | 'lg'>('md');
|
|
14
|
-
const count = signal<2 | 3 | 4>(3);
|
|
15
|
-
const disabled = signal(false);
|
|
16
|
-
|
|
17
|
-
const LABELS = ['Save', 'Cancel', 'Delete', 'Archive'] as const;
|
|
18
|
-
|
|
19
|
-
@Component({
|
|
20
|
-
selector: 'kj-button-group-playground',
|
|
21
|
-
standalone: true,
|
|
22
|
-
imports: [KjButtonGroupComponent, KjButtonComponent],
|
|
23
|
-
template: `
|
|
24
|
-
<kj-button-group
|
|
25
|
-
[kjOrientation]="orientation()"
|
|
26
|
-
[kjVariant]="variant()"
|
|
27
|
-
[kjSize]="size()"
|
|
28
|
-
[kjDisabled]="disabled()"
|
|
29
|
-
>
|
|
30
|
-
@for (label of buttons(); track label) {
|
|
31
|
-
<kj-button>{{ label }}</kj-button>
|
|
32
|
-
}
|
|
33
|
-
</kj-button-group>
|
|
34
|
-
`,
|
|
35
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
36
|
-
})
|
|
37
|
-
export class KjButtonGroupPlaygroundDemo {
|
|
38
|
-
protected readonly orientation = orientation;
|
|
39
|
-
protected readonly variant = variant;
|
|
40
|
-
protected readonly size = size;
|
|
41
|
-
protected readonly count = count;
|
|
42
|
-
protected readonly disabled = disabled;
|
|
43
|
-
|
|
44
|
-
protected buttons(): readonly string[] {
|
|
45
|
-
return LABELS.slice(0, count());
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export const PLAYGROUND: PlaygroundFile = {
|
|
50
|
-
component: KjButtonGroupPlaygroundDemo,
|
|
51
|
-
state: {
|
|
52
|
-
orientation: orientation as unknown as ReturnType<typeof signal>,
|
|
53
|
-
variant: variant as unknown as ReturnType<typeof signal>,
|
|
54
|
-
size: size as unknown as ReturnType<typeof signal>,
|
|
55
|
-
count: count as unknown as ReturnType<typeof signal>,
|
|
56
|
-
disabled: disabled as unknown as ReturnType<typeof signal>,
|
|
57
|
-
},
|
|
58
|
-
controls: [
|
|
59
|
-
{
|
|
60
|
-
kind: 'chips',
|
|
61
|
-
name: 'orientation',
|
|
62
|
-
label: 'orientation',
|
|
63
|
-
options: ['horizontal', 'vertical'],
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
kind: 'chips',
|
|
67
|
-
name: 'variant',
|
|
68
|
-
label: 'variant',
|
|
69
|
-
options: ['default', 'outline', 'ghost', 'destructive'],
|
|
70
|
-
},
|
|
71
|
-
{ kind: 'chips', name: 'size', label: 'size', options: ['sm', 'md', 'lg'] },
|
|
72
|
-
{ kind: 'chips', name: 'count', label: 'buttons', options: [2, 3, 4] },
|
|
73
|
-
{ kind: 'toggle', name: 'disabled', label: 'disabled' },
|
|
74
|
-
],
|
|
75
|
-
snippet: (values) => {
|
|
76
|
-
const s = values as {
|
|
77
|
-
orientation: string;
|
|
78
|
-
variant: string;
|
|
79
|
-
size: string;
|
|
80
|
-
count: number;
|
|
81
|
-
disabled: boolean;
|
|
82
|
-
};
|
|
83
|
-
const attrs: string[] = [
|
|
84
|
-
`kjOrientation="${s.orientation}"`,
|
|
85
|
-
`kjVariant="${s.variant}"`,
|
|
86
|
-
`kjSize="${s.size}"`,
|
|
87
|
-
];
|
|
88
|
-
if (s.disabled) attrs.push('[kjDisabled]="true"');
|
|
89
|
-
const children = LABELS.slice(0, s.count)
|
|
90
|
-
.map((label) => ` <kj-button>${label}</kj-button>`)
|
|
91
|
-
.join('\n');
|
|
92
|
-
return `<kj-button-group\n ${attrs.join('\n ')}\n>\n${children}\n</kj-button-group>`;
|
|
93
|
-
},
|
|
94
|
-
};
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { Component, inject, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
-
import { TestBed } from '@angular/core/testing';
|
|
3
|
-
import { describe, expect, test, beforeEach } from 'vitest';
|
|
4
|
-
import { KJ_BUTTON_GROUP } from '@kouji-ui/core';
|
|
5
|
-
import { KjButtonGroupComponent } from './button-group';
|
|
6
|
-
import { KjButtonComponent } from '../button/button';
|
|
7
|
-
|
|
8
|
-
@Component({
|
|
9
|
-
standalone: true,
|
|
10
|
-
imports: [KjButtonGroupComponent, KjButtonComponent],
|
|
11
|
-
changeDetection: ChangeDetectionStrategy.Eager,
|
|
12
|
-
template: `
|
|
13
|
-
<kj-button-group
|
|
14
|
-
[kjOrientation]="orientation"
|
|
15
|
-
[kjVariant]="variant"
|
|
16
|
-
[kjSize]="size"
|
|
17
|
-
[kjDisabled]="disabled"
|
|
18
|
-
[kjAriaLabel]="ariaLabel"
|
|
19
|
-
>
|
|
20
|
-
<kj-button>One</kj-button>
|
|
21
|
-
<kj-button>Two</kj-button>
|
|
22
|
-
<kj-button>Three</kj-button>
|
|
23
|
-
</kj-button-group>
|
|
24
|
-
`,
|
|
25
|
-
})
|
|
26
|
-
class HostComponent {
|
|
27
|
-
orientation: 'horizontal' | 'vertical' = 'horizontal';
|
|
28
|
-
variant: string | undefined = undefined;
|
|
29
|
-
size: string | undefined = undefined;
|
|
30
|
-
disabled = false;
|
|
31
|
-
ariaLabel: string | undefined = undefined;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
describe('KjButtonGroupComponent', () => {
|
|
35
|
-
beforeEach(() => {
|
|
36
|
-
TestBed.configureTestingModule({ imports: [HostComponent] });
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test('renders host with .kj-button-group class and role="group"', () => {
|
|
40
|
-
const fixture = TestBed.createComponent(HostComponent);
|
|
41
|
-
fixture.detectChanges();
|
|
42
|
-
const host = fixture.nativeElement.querySelector('kj-button-group');
|
|
43
|
-
expect(host).not.toBeNull();
|
|
44
|
-
expect(host.classList.contains('kj-button-group')).toBe(true);
|
|
45
|
-
expect(host.getAttribute('role')).toBe('group');
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
test('reflects kjOrientation to data-orientation', () => {
|
|
49
|
-
const fixture = TestBed.createComponent(HostComponent);
|
|
50
|
-
fixture.componentInstance.orientation = 'vertical';
|
|
51
|
-
fixture.detectChanges();
|
|
52
|
-
const host = fixture.nativeElement.querySelector('kj-button-group');
|
|
53
|
-
expect(host.getAttribute('data-orientation')).toBe('vertical');
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
test('forwards kjAriaLabel to host', () => {
|
|
57
|
-
const fixture = TestBed.createComponent(HostComponent);
|
|
58
|
-
fixture.componentInstance.ariaLabel = 'Toolbar';
|
|
59
|
-
fixture.detectChanges();
|
|
60
|
-
const host = fixture.nativeElement.querySelector('kj-button-group');
|
|
61
|
-
expect(host.getAttribute('aria-label')).toBe('Toolbar');
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
test('writes data-disabled when kjDisabled is true', () => {
|
|
65
|
-
const fixture = TestBed.createComponent(HostComponent);
|
|
66
|
-
fixture.componentInstance.disabled = true;
|
|
67
|
-
fixture.detectChanges();
|
|
68
|
-
const host = fixture.nativeElement.querySelector('kj-button-group');
|
|
69
|
-
expect(host.getAttribute('data-disabled')).toBe('');
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
test('omits data-disabled when not disabled', () => {
|
|
73
|
-
const fixture = TestBed.createComponent(HostComponent);
|
|
74
|
-
fixture.detectChanges();
|
|
75
|
-
const host = fixture.nativeElement.querySelector('kj-button-group');
|
|
76
|
-
expect(host.hasAttribute('data-disabled')).toBe(false);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
test('projects child <kj-button> elements', () => {
|
|
80
|
-
const fixture = TestBed.createComponent(HostComponent);
|
|
81
|
-
fixture.detectChanges();
|
|
82
|
-
const host = fixture.nativeElement.querySelector('kj-button-group');
|
|
83
|
-
expect(host.querySelectorAll('button.kj-button').length).toBe(3);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
test('exposes KJ_BUTTON_GROUP context with forwarded variant/size', () => {
|
|
87
|
-
let captured: ReturnType<typeof inject<typeof KJ_BUTTON_GROUP>> | undefined;
|
|
88
|
-
|
|
89
|
-
@Component({
|
|
90
|
-
selector: 'kj-bg-probe',
|
|
91
|
-
standalone: true,
|
|
92
|
-
template: '',
|
|
93
|
-
})
|
|
94
|
-
class Probe {
|
|
95
|
-
constructor() {
|
|
96
|
-
captured = inject(KJ_BUTTON_GROUP);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
@Component({
|
|
101
|
-
standalone: true,
|
|
102
|
-
imports: [KjButtonGroupComponent, Probe],
|
|
103
|
-
template: `
|
|
104
|
-
<kj-button-group kjVariant="ghost" kjSize="lg">
|
|
105
|
-
<kj-bg-probe />
|
|
106
|
-
</kj-button-group>
|
|
107
|
-
`,
|
|
108
|
-
})
|
|
109
|
-
class HostWithProbe {}
|
|
110
|
-
|
|
111
|
-
TestBed.configureTestingModule({ imports: [HostWithProbe] });
|
|
112
|
-
const fixture = TestBed.createComponent(HostWithProbe);
|
|
113
|
-
fixture.detectChanges();
|
|
114
|
-
|
|
115
|
-
expect(captured).toBeDefined();
|
|
116
|
-
expect(captured!.variant()).toBe('ghost');
|
|
117
|
-
expect(captured!.size()).toBe('lg');
|
|
118
|
-
});
|
|
119
|
-
});
|