@kouji-ui/core 0.0.4 → 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.
Files changed (127) hide show
  1. package/fesm2022/kouji-ui-core.mjs +26789 -0
  2. package/fesm2022/kouji-ui-core.mjs.map +1 -0
  3. package/icon/icon.css +40 -0
  4. package/package.json +20 -9
  5. package/types/kouji-ui-core.d.ts +13545 -0
  6. package/typography/prose.css +312 -0
  7. package/.turbo/turbo-build.log +0 -27
  8. package/CHANGELOG.md +0 -21
  9. package/ng-package.json +0 -7
  10. package/src/a11y/.gitkeep +0 -0
  11. package/src/a11y/aria-describedby.spec.ts +0 -55
  12. package/src/a11y/aria-describedby.ts +0 -33
  13. package/src/a11y/focus-trap.spec.ts +0 -86
  14. package/src/a11y/focus-trap.ts +0 -70
  15. package/src/a11y/index.ts +0 -9
  16. package/src/a11y/live-region.spec.ts +0 -58
  17. package/src/a11y/live-region.ts +0 -48
  18. package/src/a11y/roving-tabindex.spec.ts +0 -62
  19. package/src/a11y/roving-tabindex.ts +0 -104
  20. package/src/a11y/visually-hidden.spec.ts +0 -34
  21. package/src/a11y/visually-hidden.ts +0 -24
  22. package/src/accordion/accordion.context.ts +0 -22
  23. package/src/accordion/accordion.spec.ts +0 -32
  24. package/src/accordion/accordion.ts +0 -129
  25. package/src/accordion/index.ts +0 -2
  26. package/src/avatar/avatar.spec.ts +0 -18
  27. package/src/avatar/avatar.ts +0 -26
  28. package/src/avatar/index.ts +0 -1
  29. package/src/badge/badge.spec.ts +0 -20
  30. package/src/badge/badge.ts +0 -14
  31. package/src/badge/index.ts +0 -1
  32. package/src/button/button.example.ts +0 -30
  33. package/src/button/button.finance.example.ts +0 -37
  34. package/src/button/button.retro.example.ts +0 -47
  35. package/src/button/button.sizes.example.ts +0 -25
  36. package/src/button/button.spec.ts +0 -32
  37. package/src/button/button.ts +0 -44
  38. package/src/button/index.ts +0 -1
  39. package/src/chart/chart.spec.ts +0 -27
  40. package/src/chart/chart.ts +0 -48
  41. package/src/chart/index.ts +0 -1
  42. package/src/checkbox/checkbox.spec.ts +0 -35
  43. package/src/checkbox/checkbox.ts +0 -82
  44. package/src/checkbox/index.ts +0 -1
  45. package/src/dialog/dialog.confirm.example.ts +0 -57
  46. package/src/dialog/dialog.context.ts +0 -11
  47. package/src/dialog/dialog.example.ts +0 -40
  48. package/src/dialog/dialog.finance.example.ts +0 -47
  49. package/src/dialog/dialog.retro.example.ts +0 -46
  50. package/src/dialog/dialog.service.ts +0 -176
  51. package/src/dialog/dialog.spec.ts +0 -122
  52. package/src/dialog/dialog.ts +0 -201
  53. package/src/dialog/index.ts +0 -9
  54. package/src/example-components.ts +0 -33
  55. package/src/form/form.context.ts +0 -3
  56. package/src/form/form.spec.ts +0 -25
  57. package/src/form/form.ts +0 -46
  58. package/src/form/index.ts +0 -2
  59. package/src/input/index.ts +0 -1
  60. package/src/input/input.spec.ts +0 -43
  61. package/src/input/input.ts +0 -80
  62. package/src/menu/index.ts +0 -2
  63. package/src/menu/menu.context.ts +0 -10
  64. package/src/menu/menu.example.ts +0 -39
  65. package/src/menu/menu.spec.ts +0 -168
  66. package/src/menu/menu.ts +0 -176
  67. package/src/popover/index.ts +0 -12
  68. package/src/popover/popover.context.ts +0 -18
  69. package/src/popover/popover.example.ts +0 -50
  70. package/src/popover/popover.finance.example.ts +0 -52
  71. package/src/popover/popover.retro.example.ts +0 -53
  72. package/src/popover/popover.spec.ts +0 -52
  73. package/src/popover/popover.ts +0 -124
  74. package/src/primitives/.gitkeep +0 -0
  75. package/src/primitives/forms/form-control.spec.ts +0 -59
  76. package/src/primitives/forms/form-control.ts +0 -90
  77. package/src/primitives/forms/index.ts +0 -1
  78. package/src/primitives/index.ts +0 -3
  79. package/src/primitives/interaction/disabled.spec.ts +0 -47
  80. package/src/primitives/interaction/disabled.ts +0 -24
  81. package/src/primitives/interaction/focus-ring.spec.ts +0 -62
  82. package/src/primitives/interaction/focus-ring.ts +0 -57
  83. package/src/primitives/interaction/index.ts +0 -2
  84. package/src/primitives/overlay/index.ts +0 -1
  85. package/src/primitives/overlay/overlay.spec.ts +0 -90
  86. package/src/primitives/overlay/overlay.ts +0 -106
  87. package/src/public-api.ts +0 -35
  88. package/src/radio/index.ts +0 -2
  89. package/src/radio/radio.context.ts +0 -3
  90. package/src/radio/radio.spec.ts +0 -36
  91. package/src/radio/radio.ts +0 -55
  92. package/src/select/index.ts +0 -2
  93. package/src/select/select.context.ts +0 -3
  94. package/src/select/select.spec.ts +0 -145
  95. package/src/select/select.ts +0 -250
  96. package/src/styles/docs-themes.css +0 -82
  97. package/src/table/index.ts +0 -1
  98. package/src/table/table.spec.ts +0 -113
  99. package/src/table/table.ts +0 -126
  100. package/src/tabs/index.ts +0 -2
  101. package/src/tabs/tabs.context.ts +0 -9
  102. package/src/tabs/tabs.spec.ts +0 -40
  103. package/src/tabs/tabs.ts +0 -130
  104. package/src/test-setup.ts +0 -5
  105. package/src/toast/index.ts +0 -21
  106. package/src/toast/toast.example.ts +0 -134
  107. package/src/toast/toast.finance.example.ts +0 -68
  108. package/src/toast/toast.retro.example.ts +0 -69
  109. package/src/toast/toast.service.ts +0 -153
  110. package/src/toast/toast.spec.ts +0 -95
  111. package/src/toast/toast.strategy.ts +0 -102
  112. package/src/toast/toast.ts +0 -307
  113. package/src/toast/toast.types.ts +0 -5
  114. package/src/toggle/index.ts +0 -1
  115. package/src/toggle/toggle.spec.ts +0 -24
  116. package/src/toggle/toggle.ts +0 -40
  117. package/src/tooltip/index.ts +0 -5
  118. package/src/tooltip/tooltip.example.ts +0 -46
  119. package/src/tooltip/tooltip.finance.example.ts +0 -54
  120. package/src/tooltip/tooltip.placements.example.ts +0 -56
  121. package/src/tooltip/tooltip.retro.example.ts +0 -65
  122. package/src/tooltip/tooltip.spec.ts +0 -104
  123. package/src/tooltip/tooltip.ts +0 -129
  124. package/tsconfig.lib.json +0 -13
  125. package/tsconfig.lib.prod.json +0 -11
  126. package/tsconfig.spec.json +0 -10
  127. package/vite.config.ts +0 -19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kouji-ui-core.mjs","sources":["../../../packages/core/src/primitives/interaction/disabled.ts","../../../packages/core/src/primitives/interaction/focus-ring.ts","../../../packages/core/src/primitives/forms/form-control.ts","../../../packages/core/src/primitives/overlay/tokens.ts","../../../packages/core/src/primitives/overlay/id.ts","../../../packages/core/src/primitives/overlay/stack.ts","../../../packages/core/src/primitives/overlay/controller.ts","../../../packages/core/src/primitives/overlay/wrapper.ts","../../../packages/core/src/primitives/overlay/backdrop.ts","../../../packages/core/src/primitives/overlay/container.ts","../../../packages/core/src/primitives/overlay/builder.ts","../../../packages/core/src/primitives/overlay/trigger.ts","../../../packages/core/src/primitives/overlay/panel.ts","../../../packages/core/src/primitives/overlay/strategies/mount/body-portal.ts","../../../packages/core/src/primitives/overlay/strategies/mount/in-place.ts","../../../packages/core/src/primitives/overlay/strategies/mount/in-container.ts","../../../packages/core/src/primitives/overlay/strategies/position/anchored-to.ts","../../../packages/core/src/primitives/overlay/strategies/position/viewport-centered.ts","../../../packages/core/src/primitives/overlay/strategies/position/edge-sheet.ts","../../../packages/core/src/primitives/overlay/strategies/position/point-at.ts","../../../packages/core/src/primitives/overlay/strategies/position/corner.ts","../../../packages/core/src/primitives/overlay/strategies/position/in-place-sibling.ts","../../../packages/core/src/primitives/overlay/strategies/backdrop/solid.ts","../../../packages/core/src/primitives/overlay/strategies/backdrop/blurred.ts","../../../packages/core/src/primitives/overlay/strategies/backdrop/none.ts","../../../packages/core/src/primitives/overlay/strategies/focus-trap/tab-cycle.ts","../../../packages/core/src/primitives/overlay/strategies/focus-trap/inert-based.ts","../../../packages/core/src/primitives/overlay/strategies/focus-trap/no-trap.ts","../../../packages/core/src/primitives/overlay/strategies/scroll-lock/html-overflow.ts","../../../packages/core/src/primitives/overlay/strategies/scroll-lock/css-clip.ts","../../../packages/core/src/primitives/overlay/strategies/scroll-lock/none.ts","../../../packages/core/src/primitives/overlay/strategies/live-announcer/_announce.ts","../../../packages/core/src/primitives/overlay/strategies/live-announcer/polite.ts","../../../packages/core/src/primitives/overlay/strategies/live-announcer/assertive.ts","../../../packages/core/src/primitives/overlay/strategies/live-announcer/silent.ts","../../../packages/core/src/primitives/overlay/strategies/trigger-event/on-click.ts","../../../packages/core/src/primitives/overlay/strategies/trigger-event/on-hover.ts","../../../packages/core/src/primitives/overlay/strategies/trigger-event/on-focus.ts","../../../packages/core/src/primitives/overlay/strategies/trigger-event/on-context-menu.ts","../../../packages/core/src/primitives/overlay/strategies/trigger-event/on-hotkey.ts","../../../packages/core/src/primitives/overlay/strategies/trigger-event/on-focus-or-input.ts","../../../packages/core/src/primitives/overlay/strategies/trigger-event/programmatic.ts","../../../packages/core/src/primitives/directionality/directionality.ts","../../../packages/core/src/primitives/list/tokens.ts","../../../packages/core/src/primitives/list/type-ahead.ts","../../../packages/core/src/primitives/list/navigator.ts","../../../packages/core/src/primitives/list/selection.ts","../../../packages/core/src/primitives/list/item.ts","../../../packages/core/src/primitives/list/filterable-list.ts","../../../packages/core/src/primitives/list/group.ts","../../../packages/core/src/primitives/list/inject-helpers.ts","../../../packages/core/src/primitives/signals/deep-signal.ts","../../../packages/core/src/a11y/aria-describedby.ts","../../../packages/core/src/a11y/aria-labelledby.ts","../../../packages/core/src/a11y/focus-trap.ts","../../../packages/core/src/a11y/live-region.ts","../../../packages/core/src/a11y/roving-tabindex.ts","../../../packages/core/src/a11y/visually-hidden.ts","../../../packages/core/src/presets/variant.ts","../../../packages/core/src/presets/size.ts","../../../packages/core/src/presets/bind-presets.ts","../../../packages/core/src/button/config.ts","../../../packages/core/src/button/button.ts","../../../packages/core/src/button-group/button-group.context.ts","../../../packages/core/src/button-group/button-group.ts","../../../packages/core/src/input/input.ts","../../../packages/core/src/input-group/input-group.context.ts","../../../packages/core/src/input-group/input-group.ts","../../../packages/core/src/input-group/input-group-addon.ts","../../../packages/core/src/input-mask/input-mask.compile.ts","../../../packages/core/src/input-mask/input-mask.engine.ts","../../../packages/core/src/input-mask/input-mask.tokens.ts","../../../packages/core/src/input-mask/input-mask.ts","../../../packages/core/src/input-mask/input-mask.presets.ts","../../../packages/core/src/input-otp/input-otp.context.ts","../../../packages/core/src/input-otp/input-otp.ts","../../../packages/core/src/number-input/number-input.context.ts","../../../packages/core/src/number-input/number-input-group.ts","../../../packages/core/src/number-input/number-input.format.ts","../../../packages/core/src/number-input/number-input.ts","../../../packages/core/src/number-input/number-stepper.ts","../../../packages/core/src/slider/slider.context.ts","../../../packages/core/src/slider/slider.geometry.ts","../../../packages/core/src/slider/slider.ts","../../../packages/core/src/slider/slider-track.ts","../../../packages/core/src/slider/slider-range.ts","../../../packages/core/src/slider/slider-thumb.ts","../../../packages/core/src/password-input/password-input.context.ts","../../../packages/core/src/password-input/password-input.scorer.ts","../../../packages/core/src/password-input/password-input.ts","../../../packages/core/src/textarea/config.ts","../../../packages/core/src/textarea/textarea.ts","../../../packages/core/src/checkbox/checkbox.ts","../../../packages/core/src/radio/radio.context.ts","../../../packages/core/src/radio/radio.ts","../../../packages/core/src/toggle/toggle.ts","../../../packages/core/src/badge/badge.ts","../../../packages/core/src/overlay-badge/overlay-badge.context.ts","../../../packages/core/src/overlay-badge/overlay-badge.ts","../../../packages/core/src/overlay-badge/overlay-badge-content.ts","../../../packages/core/src/avatar/avatar.ts","../../../packages/core/src/avatar/avatar-group.context.ts","../../../packages/core/src/avatar/avatar-group.ts","../../../packages/core/src/kbd/kbd.ts","../../../packages/core/src/icon/icon.mode.ts","../../../packages/core/src/icon/icon.tokens.ts","../../../packages/core/src/icon/icon.providers.ts","../../../packages/core/src/icon/icon.resolver.ts","../../../packages/core/src/icon/icon.directive.ts","../../../packages/core/src/list/list.ts","../../../packages/core/src/carousel/carousel.context.ts","../../../packages/core/src/carousel/carousel.ts","../../../packages/core/src/chat/chat.context.ts","../../../packages/core/src/chat/chat-log.ts","../../../packages/core/src/chat/chat.ts","../../../packages/core/src/chat/chat-avatar.ts","../../../packages/core/src/chat/chat-header.ts","../../../packages/core/src/chat/config.ts","../../../packages/core/src/chat/chat-bubble.ts","../../../packages/core/src/chat/chat-footer.ts","../../../packages/core/src/typography/lead.ts","../../../packages/core/src/typography/muted.ts","../../../packages/core/src/typography/code.ts","../../../packages/core/src/typography/blockquote.ts","../../../packages/core/src/typography/truncate.ts","../../../packages/core/src/typography/index.ts","../../../packages/core/src/tag/tag.context.ts","../../../packages/core/src/tag/config.ts","../../../packages/core/src/tag/tag.ts","../../../packages/core/src/tag/tag-remove.ts","../../../packages/core/src/tag/tag-list.ts","../../../packages/core/src/dialog/dialog.ts","../../../packages/core/src/dialog/dialog.ref.ts","../../../packages/core/src/dialog/dialog.service.ts","../../../packages/core/src/drawer/drawer.ref.ts","../../../packages/core/src/drawer/drawer.service.ts","../../../packages/core/src/drawer/drawer.ts","../../../packages/core/src/tooltip/tooltip-trigger.ts","../../../packages/core/src/tooltip/tooltip-content.ts","../../../packages/core/src/tooltip/tooltip-arrow.ts","../../../packages/core/src/tooltip/tooltip-group.ts","../../../packages/core/src/popover/popover-trigger.ts","../../../packages/core/src/popover/popover-content.ts","../../../packages/core/src/popover/popover-arrow.ts","../../../packages/core/src/popover/popover-close.ts","../../../packages/core/src/popover/popover-title.ts","../../../packages/core/src/confirm-popup/confirm-popup.context.ts","../../../packages/core/src/confirm-popup/confirm-popup.ts","../../../packages/core/src/confirm-popup/confirm-popup-trigger.ts","../../../packages/core/src/confirm-popup/confirm-popup-content.ts","../../../packages/core/src/confirm-popup/confirm-popup-message.ts","../../../packages/core/src/confirm-popup/confirm-popup-action.ts","../../../packages/core/src/confirm-popup/confirm-popup-cancel.ts","../../../packages/core/src/dropdown-menu/dropdown-menu-trigger.ts","../../../packages/core/src/dropdown-menu/dropdown-menu.ts","../../../packages/core/src/dropdown-menu/dropdown-menu-content.ts","../../../packages/core/src/dropdown-menu/dropdown-menu-item.ts","../../../packages/core/src/dropdown-menu/dropdown-menu-separator.ts","../../../packages/core/src/dropdown-menu/dropdown-menu-label.ts","../../../packages/core/src/dropdown-menu/dropdown-menu-group.ts","../../../packages/core/src/speed-dial/speed-dial.context.ts","../../../packages/core/src/speed-dial/speed-dial.ts","../../../packages/core/src/speed-dial/speed-dial-trigger.ts","../../../packages/core/src/speed-dial/speed-dial-actions.ts","../../../packages/core/src/speed-dial/speed-dial-action.ts","../../../packages/core/src/toast/toast.strategy.ts","../../../packages/core/src/toast/toast.ref.ts","../../../packages/core/src/toast/toast.service.ts","../../../packages/core/src/toast/toast.ts","../../../packages/core/src/command-palette/command-palette.ts","../../../packages/core/src/command-palette/command-input.ts","../../../packages/core/src/command-palette/command-list.ts","../../../packages/core/src/command-palette/command-item.ts","../../../packages/core/src/command-palette/command-group.ts","../../../packages/core/src/command-palette/command-separator.ts","../../../packages/core/src/command-palette/command-empty.ts","../../../packages/core/src/command-palette/command-palette-dialog.ts","../../../packages/core/src/command-palette/command-palette-trigger.ts","../../../packages/core/src/command-palette/command-palette.filters.ts","../../../packages/core/src/table/filter-models.ts","../../../packages/core/src/table/grid-api-impl.ts","../../../packages/core/src/table/table.ts","../../../packages/core/src/table/table-header.ts","../../../packages/core/src/table/table-row.ts","../../../packages/core/src/table/table-cell.ts","../../../packages/core/src/table/table-keyboard.ts","../../../packages/core/src/table/filter-params.ts","../../../packages/core/src/table/table-filter-outlet.ts","../../../packages/core/src/table/filter-fns.ts","../../../packages/core/src/table/column-helpers.ts","../../../packages/core/src/table/table-resource.ts","../../../packages/core/src/table/table-storage.ts","../../../packages/core/src/field/field.context.ts","../../../packages/core/src/field/field.ts","../../../packages/core/src/field/field-label.ts","../../../packages/core/src/field/field-help.ts","../../../packages/core/src/field/field-error.ts","../../../packages/core/src/field/field-group.ts","../../../packages/core/src/file-upload/file-upload.context.ts","../../../packages/core/src/file-upload/file-upload.types.ts","../../../packages/core/src/file-upload/file-upload.ts","../../../packages/core/src/form/form-field.context.ts","../../../packages/core/src/form/form-field.ts","../../../packages/core/src/form/form.context.ts","../../../packages/core/src/form/form.ts","../../../packages/core/src/form/form-error-summary.ts","../../../packages/core/src/tabs/tabs.context.ts","../../../packages/core/src/tabs/tabs.ts","../../../packages/core/src/accordion/accordion.context.ts","../../../packages/core/src/accordion/accordion.ts","../../../packages/core/src/stepper/stepper.context.ts","../../../packages/core/src/stepper/stepper.ts","../../../packages/core/src/select/select-root.ts","../../../packages/core/src/select/select-trigger.ts","../../../packages/core/src/select/select-content.ts","../../../packages/core/src/select/select-option.ts","../../../packages/core/src/combobox/combobox-root.ts","../../../packages/core/src/combobox/combobox-input.ts","../../../packages/core/src/combobox/combobox-listbox.ts","../../../packages/core/src/combobox/combobox-option.ts","../../../packages/core/src/cascade-select/cascade-select.context.ts","../../../packages/core/src/cascade-select/cascade-select-sub-panel.ts","../../../packages/core/src/cascade-select/cascade-select-option.ts","../../../packages/core/src/cascade-select/cascade-select-root.ts","../../../packages/core/src/cascade-select/cascade-select-trigger.ts","../../../packages/core/src/cascade-select/cascade-select-panel.ts","../../../packages/core/src/tree-select/tree-select.context.ts","../../../packages/core/src/tree-select/tree-select-root.ts","../../../packages/core/src/tree-select/tree-select-node.ts","../../../packages/core/src/tree-select/tree-select-trigger.ts","../../../packages/core/src/tree-select/tree-select-content.ts","../../../packages/core/src/time-picker/time-picker.context.ts","../../../packages/core/src/time-picker/time-picker.format.ts","../../../packages/core/src/time-picker/time-picker.ts","../../../packages/core/src/time-picker/time-picker-segment.ts","../../../packages/core/src/time-picker/time-picker-meridiem.ts","../../../packages/core/src/color-picker/color-picker.context.ts","../../../packages/core/src/color-picker/color-picker.utils.ts","../../../packages/core/src/color-picker/color-picker.ts","../../../packages/core/src/calendar/date-utils.ts","../../../packages/core/src/calendar/calendar.context.ts","../../../packages/core/src/calendar/calendar.ts","../../../packages/core/src/calendar/calendar-header.ts","../../../packages/core/src/calendar/calendar-grid.ts","../../../packages/core/src/calendar/calendar-day.ts","../../../packages/core/src/date-picker/date-picker.context.ts","../../../packages/core/src/date-picker/date-picker.ts","../../../packages/core/src/date-picker/date-picker-trigger.ts","../../../packages/core/src/date-picker/date-picker-calendar.ts","../../../packages/core/src/chart/chart.ts","../../../packages/core/src/divider/divider.ts","../../../packages/core/src/skeleton/skeleton.ts","../../../packages/core/src/link/config.ts","../../../packages/core/src/link/link.ts","../../../packages/core/src/breadcrumb/config.ts","../../../packages/core/src/breadcrumb/breadcrumb.context.ts","../../../packages/core/src/breadcrumb/breadcrumb.ts","../../../packages/core/src/breadcrumb/breadcrumb-list.ts","../../../packages/core/src/breadcrumb/breadcrumb-item.ts","../../../packages/core/src/breadcrumb/breadcrumb-link.ts","../../../packages/core/src/breadcrumb/breadcrumb-current.ts","../../../packages/core/src/breadcrumb/breadcrumb-separator.ts","../../../packages/core/src/breadcrumb/breadcrumb-ellipsis.ts","../../../packages/core/src/menubar/menubar.context.ts","../../../packages/core/src/menubar/menubar.ts","../../../packages/core/src/menubar/menubar-item.ts","../../../packages/core/src/pagination/config.ts","../../../packages/core/src/pagination/pagination.context.ts","../../../packages/core/src/pagination/page-tokens.ts","../../../packages/core/src/pagination/pagination.ts","../../../packages/core/src/pagination/pagination-item.ts","../../../packages/core/src/pagination/pagination-previous.ts","../../../packages/core/src/pagination/pagination-next.ts","../../../packages/core/src/pagination/pagination-first.ts","../../../packages/core/src/pagination/pagination-last.ts","../../../packages/core/src/pagination/pagination-ellipsis.ts","../../../packages/core/src/pagination/pagination-info.ts","../../../packages/core/src/spinner/config.ts","../../../packages/core/src/spinner/spinner.ts","../../../packages/core/src/progress-bar/config.ts","../../../packages/core/src/progress-bar/progress-bar.context.ts","../../../packages/core/src/progress-bar/progress-bar.ts","../../../packages/core/src/progress-bar/progress-bar-fill.ts","../../../packages/core/src/alert/alert.context.ts","../../../packages/core/src/alert/config.ts","../../../packages/core/src/alert/alert.ts","../../../packages/core/src/public-api.ts","../../../packages/core/src/kouji-ui-core.ts"],"sourcesContent":["import { Directive, booleanAttribute, input } from '@angular/core';\n\n/**\n * Applies disabled state to any element via ARIA and data attributes.\n *\n * Compose via `hostDirectives` on other directives to add disabled behaviour.\n * The directive reflects `aria-disabled` and `data-disabled` so consumers do\n * not need to repeat the same host-binding pattern on every input.\n *\n * @example\n * ```html\n * <div kjDisabled [kjDisabled]=\"isLoading()\">Content</div>\n * ```\n * @doc-category Core/Primitives\n * @doc\n * @doc-name interaction\n * @doc-description Adds accessible disabled state to any element you compose it onto.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjDisabled]',\n standalone: true,\n host: {\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n },\n})\nexport class KjDisabled {\n /** Whether the element is disabled. Reflects via `aria-disabled` and `data-disabled`. */\n readonly disabled = input<boolean, unknown>(false, { alias: 'kjDisabled', transform: booleanAttribute });\n}\n","import { Directive, DestroyRef, ElementRef, afterNextRender, inject, signal } from '@angular/core';\nimport { PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n/**\n * Tracks focus-visible state using native PointerEvents and keyboard interaction.\n * Sets `data-focus-visible` only when the element receives focus via keyboard.\n * Compose via `hostDirectives` to add focus-ring behavior to interactive elements.\n *\n * @example\n * ```html\n * <button kjFocusRing>Focusable button</button>\n * ```\n * @doc-category Core/Primitives\n * @doc\n * @doc-name interaction\n */\n@Directive({\n selector: '[kjFocusRing]',\n standalone: true,\n host: {\n '[attr.data-focus-visible]': 'focusVisible() ? \"\" : null',\n },\n})\nexport class KjFocusRing {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n\n private readonly _focusVisible = signal(false);\n\n /** Whether the element currently has visible focus (keyboard-initiated). */\n readonly focusVisible = this._focusVisible.asReadonly();\n\n private _lastWasPointer = false;\n\n constructor() {\n afterNextRender(() => {\n if (!isPlatformBrowser(this.platformId)) return;\n\n const onKeydown = () => { this._lastWasPointer = false; };\n const onPointerdown = () => { this._lastWasPointer = true; };\n const onFocus = () => { this._focusVisible.set(!this._lastWasPointer); };\n const onBlur = () => { this._focusVisible.set(false); };\n\n document.addEventListener('keydown', onKeydown, true);\n document.addEventListener('pointerdown', onPointerdown, true);\n this.el.nativeElement.addEventListener('focus', onFocus);\n this.el.nativeElement.addEventListener('blur', onBlur);\n\n this.destroyRef.onDestroy(() => {\n document.removeEventListener('keydown', onKeydown, true);\n document.removeEventListener('pointerdown', onPointerdown, true);\n this.el.nativeElement.removeEventListener('focus', onFocus);\n this.el.nativeElement.removeEventListener('blur', onBlur);\n });\n });\n }\n}\n","import { Directive, forwardRef, signal } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Shared ControlValueAccessor primitive. Compose via `hostDirectives` on any\n * form input directive (KjInput, KjCheckbox, etc.) to wire\n * Angular reactive forms and template-driven forms automatically.\n *\n * The host directive calls `notifyChange(value)` on user input and\n * `notifyTouched()` on blur. The directive handles all CVA plumbing.\n *\n * @example\n * ```ts\n * @Directive({\n * selector: '[kjInput]',\n * hostDirectives: [KjFormControl],\n * host: {\n * '(input)': 'formCtrl.notifyChange($event.target.value)',\n * '(blur)': 'formCtrl.notifyTouched()',\n * },\n * })\n * export class KjInput {\n * readonly formCtrl = inject(KjFormControl);\n * }\n * ```\n * @doc-category Core/Primitives\n * @doc\n * @doc-name forms\n * @doc-description Wires any input directive into Angular reactive and template-driven forms.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjFormControl]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KjFormControl),\n multi: true,\n },\n ],\n})\nexport class KjFormControl implements ControlValueAccessor {\n /** The current form value, kept in sync with the Angular forms model. */\n readonly value = signal<unknown>(undefined);\n\n /** Whether the control is disabled by the Angular forms layer. */\n readonly disabled = signal<boolean>(false);\n\n /** Whether the control has been touched (blurred at least once). */\n readonly touched = signal<boolean>(false);\n\n private _onChange?: (value: unknown) => void;\n private _onTouched?: () => void;\n\n /** @internal — called by Angular forms */\n writeValue(val: unknown): void {\n this.value.set(val);\n }\n\n /** @internal — called by Angular forms */\n registerOnChange(fn: (value: unknown) => void): void {\n this._onChange = fn;\n }\n\n /** @internal — called by Angular forms */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n /** @internal — called by Angular forms */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * Call this when the user changes the control's value.\n * Updates the value signal and notifies Angular forms.\n * @param val - The new value.\n */\n notifyChange(val: unknown): void {\n this.value.set(val);\n this._onChange?.(val);\n }\n\n /**\n * Call this when the user blurs the control.\n * Marks the control as touched.\n */\n notifyTouched(): void {\n this.touched.set(true);\n this._onTouched?.();\n }\n}\n","import { InjectionToken, type Signal } from '@angular/core';\nimport type { KjOverlayContext } from './context';\nimport type { KjPanelRole, KjPlacement } from './types';\n\n/** Common shape for every overlay strategy. */\nexport interface KjStrategy {\n attach(ctx: KjOverlayContext): void;\n onOpen?(): void;\n onClose?(): void;\n detach(): void;\n}\n\nexport interface KjMountStrategy extends KjStrategy {\n resolveContainer(): HTMLElement;\n readonly portalled: boolean;\n}\n\nexport interface KjPositionStrategy extends KjStrategy {\n update(): void;\n readonly placement?: Signal<KjPlacement | null>;\n}\n\nexport interface KjBackdropStrategy extends KjStrategy {\n readonly inertSiblings: boolean;\n readonly closeOnClick: boolean;\n}\n\nexport interface KjFocusTrapStrategy extends KjStrategy {\n focusFirst(): void;\n restoreFocus(): void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface KjScrollLockStrategy extends KjStrategy {}\n\nexport interface KjLiveAnnouncerStrategy extends KjStrategy {\n announce(message: string): void;\n}\n\nexport type KjAriaHasPopup = 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | null;\n\nexport interface KjTriggerEventStrategy extends KjStrategy {\n readonly ariaHasPopup: KjAriaHasPopup;\n bindToggle(toggle: () => void): void;\n}\n\nexport const KJ_OVERLAY_MOUNT_STRATEGY = new InjectionToken<KjMountStrategy>('KJ_OVERLAY_MOUNT_STRATEGY');\nexport const KJ_OVERLAY_POSITION_STRATEGY = new InjectionToken<KjPositionStrategy>('KJ_OVERLAY_POSITION_STRATEGY');\nexport const KJ_OVERLAY_BACKDROP_STRATEGY = new InjectionToken<KjBackdropStrategy | null>('KJ_OVERLAY_BACKDROP_STRATEGY');\nexport const KJ_OVERLAY_FOCUS_TRAP_STRATEGY = new InjectionToken<KjFocusTrapStrategy>('KJ_OVERLAY_FOCUS_TRAP_STRATEGY');\nexport const KJ_OVERLAY_SCROLL_LOCK_STRATEGY = new InjectionToken<KjScrollLockStrategy>('KJ_OVERLAY_SCROLL_LOCK_STRATEGY');\nexport const KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY = new InjectionToken<KjLiveAnnouncerStrategy>('KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY');\nexport const KJ_OVERLAY_TRIGGER_EVENT_STRATEGY = new InjectionToken<KjTriggerEventStrategy>('KJ_OVERLAY_TRIGGER_EVENT_STRATEGY');\nexport const KJ_OVERLAY_PANEL_ROLE = new InjectionToken<KjPanelRole>('KJ_OVERLAY_PANEL_ROLE');\n","import { Injectable } from '@angular/core';\n\n/**\n * Stable id minter. Used by overlay panels, form fields, and any other\n * primitive that needs deterministic ids (including across SSR boundaries).\n *\n * Counter is per-application; pair an app-level provider override with a\n * deterministic seed if you need cross-render stability beyond a single render.\n */\n@Injectable({ providedIn: 'root' })\nexport class KjId {\n private _counter = 0;\n mint(prefix = ''): string {\n const id = ++this._counter;\n return prefix ? `kj-${prefix}-${id}` : `kj-${id}`;\n }\n}\n","import { Injectable, PLATFORM_ID, computed, inject, signal, type Signal } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport interface KjOverlayRegistration {\n onClose: () => void;\n closeOnOutside?: boolean;\n closeOnEsc?: boolean;\n}\n\nexport interface KjOverlayStackHandle {\n unregister: () => void;\n isTopmost: Signal<boolean>;\n}\n\ninterface StackEntry {\n id: string;\n opts: Required<KjOverlayRegistration>;\n contentEl: HTMLElement | null;\n}\n\n/**\n * Global coordinator for nested-overlay behaviour: stack ordering, Escape\n * routing, and outside-click detection. Only the topmost overlay receives\n * Esc / outside-click — prevents the double-close problem.\n *\n * SSR-safe: every DOM access guarded by isPlatformBrowser.\n *\n * @doc-category Core/Overlay\n * @doc\n * @doc-name overlay-stack\n * @doc-is-main\n * @doc-description Routes Escape and outside-click to only the topmost overlay when overlays are nested.\n */\n@Injectable({ providedIn: 'root' })\nexport class KjOverlayStack {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private readonly _stack = signal<StackEntry[]>([]);\n\n private _listenersInstalled = false;\n private readonly _onKeydown = (e: KeyboardEvent) => this.handleKeydown(e);\n private readonly _onPointerDown = (e: PointerEvent) => this.handlePointerDown(e);\n\n register(id: string, opts: KjOverlayRegistration): KjOverlayStackHandle {\n if (!this.isBrowser) {\n return { unregister: () => {}, isTopmost: computed(() => false) };\n }\n const entry: StackEntry = {\n id,\n opts: {\n onClose: opts.onClose,\n closeOnEsc: opts.closeOnEsc ?? true,\n closeOnOutside: opts.closeOnOutside ?? true,\n },\n contentEl: null,\n };\n this._stack.update(s => [...s, entry]);\n this.ensureListeners();\n const isTopmost = computed(() => {\n const s = this._stack();\n return s.length > 0 && s[s.length - 1].id === id;\n });\n return {\n unregister: () => {\n this._stack.update(s => s.filter(e => e !== entry));\n this.maybeRemoveListeners();\n },\n isTopmost,\n };\n }\n\n markContentEl(id: string, el: HTMLElement | null): void {\n if (!this.isBrowser) return;\n const entry = this._stack().find(e => e.id === id);\n if (entry) entry.contentEl = el;\n }\n\n get stackSize(): number { return this._stack().length; }\n\n private ensureListeners(): void {\n if (this._listenersInstalled) return;\n document.addEventListener('keydown', this._onKeydown, true);\n document.addEventListener('pointerdown', this._onPointerDown, true);\n this._listenersInstalled = true;\n }\n\n private maybeRemoveListeners(): void {\n if (this._stack().length > 0 || !this._listenersInstalled) return;\n document.removeEventListener('keydown', this._onKeydown, true);\n document.removeEventListener('pointerdown', this._onPointerDown, true);\n this._listenersInstalled = false;\n }\n\n private topmost(): StackEntry | null {\n const s = this._stack();\n return s.length ? s[s.length - 1] : null;\n }\n\n private handleKeydown(e: KeyboardEvent): void {\n if (e.key !== 'Escape') return;\n const top = this.topmost();\n if (!top || !top.opts.closeOnEsc) return;\n top.opts.onClose();\n }\n\n private handlePointerDown(e: PointerEvent): void {\n const top = this.topmost();\n if (!top || !top.opts.closeOnOutside) return;\n const target = e.target as Node | null;\n if (top.contentEl && target && top.contentEl.contains(target)) return;\n top.opts.onClose();\n }\n}\n","import { Injectable, computed, inject, signal, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport type { KjOverlayContext } from './context';\nimport type {\n KjMountStrategy, KjPositionStrategy, KjBackdropStrategy,\n KjFocusTrapStrategy, KjScrollLockStrategy, KjLiveAnnouncerStrategy,\n KjTriggerEventStrategy, KjStrategy,\n} from './tokens';\nimport type { KjOverlayState, KjCloseReason } from './types';\nimport { KjOverlayStack, type KjOverlayStackHandle } from './stack';\nimport { KjId } from './id';\n\nexport interface KjOverlayStrategies {\n mount: KjMountStrategy;\n position: KjPositionStrategy;\n trigger?: KjTriggerEventStrategy | null;\n backdrop?: KjBackdropStrategy | null;\n focusTrap?: KjFocusTrapStrategy | null;\n scrollLock?: KjScrollLockStrategy | null;\n liveAnnouncer?: KjLiveAnnouncerStrategy | null;\n}\n\n/**\n * Owns the overlay's open/closed state machine plus the rAF/transition\n * orchestration. Strategies (mount/position/backdrop/focus-trap/scroll-lock/\n * trigger-event) attach to it; the panel + trigger directives bind to it via DI.\n *\n * @doc-category Core/Overlay\n * @doc\n * @doc-name overlay-controller\n * @doc-is-main\n * @doc-description Owns one overlay's open/close state and keeps its panel, trigger, and backdrop in sync.\n */\n@Injectable()\nexport class KjOverlayController {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private readonly stack = inject(KjOverlayStack);\n private readonly idSvc = inject(KjId);\n readonly id = this.idSvc.mint('overlay');\n\n private readonly _state = signal<KjOverlayState>('closed');\n private readonly _trigger = signal<HTMLElement | null>(null);\n private readonly _panel = signal<HTMLElement | null>(null);\n readonly state = this._state.asReadonly();\n readonly isOpen = computed(() => this._state() === 'open' || this._state() === 'opening');\n readonly triggerEl = this._trigger.asReadonly();\n readonly panelEl = this._panel.asReadonly();\n\n readonly context: KjOverlayContext = {\n state: this.state,\n isOpen: this.isOpen,\n triggerEl: this.triggerEl,\n panelEl: this.panelEl,\n stack: this.stack,\n platform: { isBrowser: this.isBrowser },\n requestClose: (r) => this.close(r),\n };\n\n /**\n * Public read-only access to the attached strategy bundle. Builder, panel\n * directive, and tests all need to inspect strategies without reaching\n * for a private field via casts.\n */\n strategies: KjOverlayStrategies | null = null;\n private stackHandle: KjOverlayStackHandle | null = null;\n private transitionDeadline = 0;\n private rafId = 0;\n private transitionListener: ((e: Event) => void) | null = null;\n\n bindTrigger(el: HTMLElement | null) { this._trigger.set(el); }\n bindPanel(el: HTMLElement | null) { this._panel.set(el); }\n\n attachStrategies(s: KjOverlayStrategies): void {\n this.strategies = s;\n const order: (KjStrategy | null | undefined)[] = [\n s.mount, s.position, s.backdrop, s.scrollLock, s.focusTrap, s.liveAnnouncer, s.trigger,\n ];\n for (const strat of order) strat?.attach(this.context);\n }\n\n open(): void {\n const cur = this._state();\n if (cur === 'open' || cur === 'opening') return;\n if (cur === 'closing') this.cancelTransition();\n this._state.set('opening');\n this.beginOpen();\n }\n\n close(reason?: KjCloseReason): void {\n const cur = this._state();\n if (cur === 'closed' || cur === 'closing') return;\n if (cur === 'opening') this.cancelTransition();\n this._state.set('closing');\n this.beginClose(reason);\n }\n\n toggle(): void {\n if (this._state() === 'closed') this.open();\n else this.close('programmatic');\n }\n\n dispose(): void {\n if (this._state() !== 'closed') this.close('programmatic');\n if (!this.strategies) return;\n const s = this.strategies;\n const order: (KjStrategy | null | undefined)[] = [\n s.trigger, s.liveAnnouncer, s.focusTrap, s.scrollLock, s.backdrop, s.position, s.mount,\n ];\n for (const strat of order) strat?.detach();\n this.strategies = null;\n }\n\n private beginOpen(): void {\n if (!this.strategies) return;\n const s = this.strategies;\n s.mount.onOpen?.();\n s.position.onOpen?.();\n s.position.update();\n s.backdrop?.onOpen?.();\n s.scrollLock?.onOpen?.();\n this.stackHandle = this.stack.register(this.id, { onClose: () => this.close('esc') });\n if (this._panel()) this.stack.markContentEl(this.id, this._panel());\n this.runTransition('open', () => {\n this._state.set('open');\n s.focusTrap?.focusFirst();\n });\n }\n\n private beginClose(_reason?: KjCloseReason): void {\n if (!this.strategies) return;\n const s = this.strategies;\n this.runTransition('close', () => {\n s.focusTrap?.restoreFocus();\n this.stackHandle?.unregister();\n this.stackHandle = null;\n s.scrollLock?.onClose?.();\n s.backdrop?.onClose?.();\n // Hide the panel synchronously before strategy cleanup so the brief\n // moment between position.onClose clearing inline styles and Angular\n // CD applying [hidden] never paints the panel at its default flow\n // position. The host binding re-affirms this value via CD.\n const panel = this._panel();\n if (panel) panel.setAttribute('hidden', '');\n s.position.onClose?.();\n s.mount.onClose?.();\n this._state.set('closed');\n });\n }\n\n private runTransition(_kind: 'open' | 'close', done: () => void): void {\n if (!this.isBrowser) { done(); return; }\n const panel = this._panel();\n const reduce = typeof matchMedia === 'function' ? matchMedia('(prefers-reduced-motion: reduce)').matches : false;\n const cs = panel ? getComputedStyle(panel) : null;\n const transitionMs = cs ? parseFloat(cs.transitionDuration) * 1000 : 0;\n const animationMs = cs ? parseFloat(cs.animationDuration) * 1000 : 0;\n const longest = Math.max(transitionMs, animationMs);\n if (reduce || longest === 0 || !panel) {\n this.rafId = requestAnimationFrame(done);\n return;\n }\n let fired = false;\n const listener = (e: Event) => {\n if (e.target !== panel) return;\n if (fired) return; fired = true;\n panel.removeEventListener('transitionend', listener);\n panel.removeEventListener('animationend', listener);\n done();\n };\n this.transitionListener = listener;\n panel.addEventListener('transitionend', listener);\n panel.addEventListener('animationend', listener);\n // Safety: if event never fires within longest+50ms, force done.\n this.transitionDeadline = window.setTimeout(() => {\n if (!fired) { fired = true; panel.removeEventListener('transitionend', listener); panel.removeEventListener('animationend', listener); done(); }\n }, longest + 50);\n }\n\n private cancelTransition(): void {\n if (this.rafId) { cancelAnimationFrame(this.rafId); this.rafId = 0; }\n if (this.transitionDeadline) { clearTimeout(this.transitionDeadline); this.transitionDeadline = 0; }\n if (this.transitionListener && this._panel()) {\n const p = this._panel()!;\n p.removeEventListener('transitionend', this.transitionListener);\n p.removeEventListener('animationend', this.transitionListener);\n this.transitionListener = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ViewContainerRef,\n ViewEncapsulation,\n inject,\n viewChild,\n} from '@angular/core';\nimport { KjOverlayController } from './controller';\n\n/**\n * Per-overlay wrapper component. Owns its DOM, its child views (backdrop +\n * panel), and disposes the controller when destroyed. Created by\n * `KjOverlayBuilder` for each open overlay; mounted into the singleton\n * `.kj-overlay-container`. Sibling order in the container resolves\n * stacking among open overlays — last opened wins.\n *\n * Internal: not exported as part of the public API surface.\n *\n * @doc-category Core/Overlay\n * @doc\n * @doc-name overlay-wrapper\n * @doc-is-main\n * @doc-description Hosts one overlay's DOM and tears down its backdrop, panel, and controller together.\n */\n@Component({\n selector: 'kj-overlay-wrapper',\n standalone: true,\n template: `\n <ng-container #backdropAnchor />\n <ng-container #panelAnchor />\n `,\n host: { class: 'kj-overlay-wrapper' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class KjOverlayWrapper {\n /** ViewContainerRef anchored to the backdrop slot. */\n readonly backdropAnchor = viewChild.required('backdropAnchor', { read: ViewContainerRef });\n /** ViewContainerRef anchored to the panel slot. */\n readonly panelAnchor = viewChild.required('panelAnchor', { read: ViewContainerRef });\n readonly controller = inject(KjOverlayController);\n\n constructor() {\n // Cascade cleanup: destroying the wrapper component disposes the\n // controller (strategy detach chain) — no manual bookkeeping needed.\n inject(DestroyRef).onDestroy(() => this.controller.dispose());\n }\n}\n","import { Component, ChangeDetectionStrategy, computed, inject } from '@angular/core';\nimport { KjOverlayController } from './controller';\nimport { KJ_OVERLAY_BACKDROP_STRATEGY } from './tokens';\n\n/**\n * Renders the backdrop scrim for an overlay. Reads the backdrop strategy\n * (className, closeOnClick) and the controller from the per-overlay\n * injector so neither needs to be passed in. Mounted by `KjOverlayBuilder`\n * as a sibling preceding the panel inside the per-overlay wrapper.\n */\n@Component({\n selector: 'kj-backdrop',\n standalone: true,\n template: '',\n host: {\n '[class]': 'klass()',\n '[attr.data-state]': 'state()',\n '(click)': 'onClick($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KjBackdrop {\n private readonly controller = inject(KjOverlayController, { optional: true });\n private readonly strategy = inject(KJ_OVERLAY_BACKDROP_STRATEGY)!;\n readonly state = computed(() => this.controller?.state() ?? 'closed');\n readonly klass = computed(() => (this.strategy as { className?: string }).className ?? 'kj-backdrop');\n\n onClick(_e: MouseEvent): void {\n if (this.strategy.closeOnClick) this.controller?.close('outside');\n }\n}\n","/**\n * Module-level lazy singleton root for every overlay (dialogs, drawers,\n * popovers, tooltips, dropdowns, toasts). The first call appends a single\n * `<div class=\"kj-overlay-container\">` to `document.body`; subsequent calls\n * return the same element. SSR-safe (returns `null` when `document` is\n * unavailable).\n *\n * Per-overlay code MUST go through {@link getOverlayContainer} +\n * {@link createOverlayWrapper} instead of reaching for `document.body`\n * directly — a single positioned root owns z-stacking, pointer-events\n * isolation, and cleanup ordering across the whole overlay system.\n *\n * @doc-category Core/Overlay\n * @doc\n * @doc-name overlay-container\n * @doc-is-main\n * @doc-description Lazily creates the shared body-level root element where every overlay mounts.\n */\nlet _root: HTMLElement | null = null;\n\nexport function getOverlayContainer(): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n if (_root && _root.isConnected) return _root;\n _root = document.createElement('div');\n _root.className = 'kj-overlay-container';\n document.body.appendChild(_root);\n return _root;\n}\n\n/**\n * Creates a per-overlay wrapper inside the singleton container. The wrapper\n * owns its overlay's backdrop + panel as siblings so DOM teardown is atomic\n * and stacking among siblings follows insertion order.\n */\nexport function createOverlayWrapper(): HTMLElement | null {\n const root = getOverlayContainer();\n if (!root || typeof document === 'undefined') return null;\n const wrapper = document.createElement('div');\n wrapper.className = 'kj-overlay-wrapper';\n root.appendChild(wrapper);\n return wrapper;\n}\n","import {\n ApplicationRef,\n ComponentRef,\n EnvironmentInjector,\n Injectable,\n Injector,\n Type,\n createComponent,\n inject,\n} from '@angular/core';\nimport { KjOverlayController, type KjOverlayStrategies } from './controller';\nimport { KjOverlayWrapper } from './wrapper';\nimport { KjBackdrop } from './backdrop';\nimport { getOverlayContainer } from './container';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_BACKDROP_STRATEGY,\n KJ_OVERLAY_FOCUS_TRAP_STRATEGY,\n KJ_OVERLAY_SCROLL_LOCK_STRATEGY,\n KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY,\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from './tokens';\nimport type { KjPanelRole } from './types';\n\nexport interface KjOverlayBuilderConfig extends KjOverlayStrategies {\n panelRole: KjPanelRole;\n closeOnEsc?: boolean;\n closeOnOutside?: boolean;\n}\n\nexport interface KjAttachOptions<D = unknown> {\n data?: D;\n providers?: Array<{ provide: unknown; useValue?: unknown }>;\n}\n\n/**\n * Per-overlay handle returned by {@link KjOverlayBuilder.create}. Owns the\n * controller, the per-overlay element injector, and the wrapper component.\n * Callers dispose the entire overlay (DOM, child views, strategy detach\n * chain) by calling {@link destroy} — Angular's component destroy cascade\n * does the work; no manual ref tracking needed.\n *\n * @doc-category Core/Overlay\n * @doc\n * @doc-name overlay-handle\n * @doc-description Disposable handle for a single open overlay with controller, injector, and destroy access.\n */\nexport class KjOverlayHandle {\n constructor(\n readonly controller: KjOverlayController,\n readonly injector: Injector,\n readonly config: KjOverlayBuilderConfig,\n private readonly wrapperRef: ComponentRef<KjOverlayWrapper>,\n ) {}\n\n get wrapper(): KjOverlayWrapper { return this.wrapperRef.instance; }\n\n destroy(): void {\n if (this.wrapperRef.hostView.destroyed) return;\n const host = this.wrapperRef.location.nativeElement as HTMLElement;\n this.wrapperRef.destroy();\n // createComponent + manual appendChild → manual removal on destroy.\n host.parentElement?.removeChild(host);\n }\n}\n\n/**\n * Service that constructs per-overlay controllers + wrapper components from\n * a strategy bundle. Wires up the per-overlay element injector, appends the\n * wrapper to the singleton overlay container, and returns a\n * {@link KjOverlayHandle} for service-launched overlays (dialog, drawer,\n * toast, etc.).\n *\n * @doc-category Core/Overlay\n * @doc\n * @doc-name overlay-builder\n * @doc-is-main\n * @doc-description Builds and opens a service-launched overlay (dialog, drawer, toast) and returns a disposable handle.\n */\n@Injectable({ providedIn: 'root' })\nexport class KjOverlayBuilder {\n private readonly appRef = inject(ApplicationRef);\n private readonly env = inject(EnvironmentInjector);\n\n /**\n * Creates a per-overlay controller + wrapper component. The wrapper is\n * appended to the singleton `.kj-overlay-container` and is the host for\n * the backdrop and panel views. Strategies are attached eagerly so the\n * controller is ready for `open()` immediately after this call returns.\n */\n create(config: KjOverlayBuilderConfig): KjOverlayHandle {\n const injector = Injector.create({\n providers: [\n KjOverlayController,\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useValue: config.mount },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useValue: config.position },\n { provide: KJ_OVERLAY_BACKDROP_STRATEGY, useValue: config.backdrop ?? null },\n { provide: KJ_OVERLAY_FOCUS_TRAP_STRATEGY, useValue: config.focusTrap ?? null },\n { provide: KJ_OVERLAY_SCROLL_LOCK_STRATEGY, useValue: config.scrollLock ?? null },\n { provide: KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY, useValue: config.liveAnnouncer ?? null },\n { provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY, useValue: config.trigger ?? null },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: config.panelRole },\n ],\n parent: this.env,\n });\n const controller = injector.get(KjOverlayController);\n controller.attachStrategies(config);\n\n const wrapperRef = createComponent(KjOverlayWrapper, {\n environmentInjector: this.env,\n elementInjector: injector,\n });\n this.appRef.attachView(wrapperRef.hostView);\n // Sync CD so viewChild() anchors resolve before attachComponent runs.\n wrapperRef.changeDetectorRef.detectChanges();\n getOverlayContainer()?.appendChild(wrapperRef.location.nativeElement);\n\n return new KjOverlayHandle(controller, injector, config, wrapperRef);\n }\n\n /**\n * Mounts the user's component into the wrapper's panel slot, plus the\n * styled `<kj-backdrop>` into the backdrop slot when a backdrop strategy\n * is configured. Both views are owned by the wrapper component so\n * `handle.destroy()` tears them down in one cascade.\n */\n attachComponent<T>(\n handle: KjOverlayHandle,\n component: Type<T>,\n opts: KjAttachOptions = {},\n ): ComponentRef<T> {\n const wrapper = handle.wrapper;\n\n if (handle.config.backdrop) {\n wrapper.backdropAnchor().createComponent(KjBackdrop, { injector: handle.injector });\n }\n\n const childInjector = Injector.create({\n providers: opts.providers as never[] ?? [],\n parent: handle.injector,\n });\n const ref = wrapper.panelAnchor().createComponent(component, { injector: childInjector });\n // Pointer-events isolation: container is `pointer-events: none` so app\n // content stays clickable; each panel re-enables.\n (ref.location.nativeElement as HTMLElement).style.pointerEvents = 'auto';\n handle.controller.bindPanel(ref.location.nativeElement);\n return ref;\n }\n}\n","import { Directive, ElementRef, inject, model, computed, effect, untracked } from '@angular/core';\nimport { KjOverlayController } from './controller';\nimport { KJ_OVERLAY_TRIGGER_EVENT_STRATEGY } from './tokens';\nimport type { KjOverlayPanel } from './panel';\n\n/**\n * Marks an element as the overlay trigger — owns `aria-haspopup`,\n * `aria-expanded`, `aria-controls`, the trigger-event strategy, and the\n * two-way `kjOpen` model that mirrors the controller's open state.\n *\n * @doc-category Core/Overlay\n * @doc\n * @doc-name overlay-trigger\n * @doc-is-main\n * @doc-description Marks an element as the trigger that opens and closes an overlay panel.\n */\n@Directive({\n selector: '[kjOverlayTrigger]',\n exportAs: 'kjOverlayTrigger',\n // NOTE: do NOT provide KjOverlayController here. Consumer trigger directives\n // (e.g. KjSelectTrigger, KjTreeSelectTrigger) provide it on their host\n // element so the SAME instance is visible to both KjOverlayTrigger and any\n // sibling KjOverlayPanel via [kjFor]. For \"controller-on-root\" patterns\n // (e.g. KjColorPicker), the root directive provides it and ALL descendants\n // share one instance.\n host: {\n '[attr.aria-haspopup]': 'ariaHasPopup() ?? null',\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-controls]': 'panelId() ?? null',\n '[attr.data-state]': 'state()',\n },\n})\nexport class KjOverlayTrigger {\n private readonly host = inject(ElementRef<HTMLElement>);\n /**\n * The overlay controller for this trigger's scope. Exposed publicly so\n * sibling `KjOverlayPanel` directives wired via `[kjFor]` can read it\n * from their element injector (which would otherwise not see this\n * directive's providers).\n */\n readonly controller = inject(KjOverlayController);\n private readonly triggerStrategy = inject(KJ_OVERLAY_TRIGGER_EVENT_STRATEGY);\n\n readonly kjOpen = model<boolean>(false);\n readonly state = this.controller.state;\n readonly isOpen = this.controller.isOpen;\n readonly panelId = computed(() => this.controller.panelEl()?.id ?? null);\n readonly ariaHasPopup = computed(() => this.triggerStrategy.ariaHasPopup);\n\n attachPanel(panel: KjOverlayPanel): void {\n this.controller.bindPanel(panel.host.nativeElement);\n }\n\n constructor() {\n this.controller.bindTrigger(this.host.nativeElement);\n // The trigger strategy lives on the trigger element. Attach + bind here so\n // its DOM listeners wire up regardless of whether a panel ever attaches\n // (e.g. tooltip with no [kjFor]).\n this.triggerStrategy.attach(this.controller.context);\n this.triggerStrategy.bindToggle(() => this.controller.toggle());\n // Sync model → controller (user toggled kjOpen via two-way binding)\n effect(() => {\n const wantOpen = this.kjOpen();\n const isOpen = untracked(() => this.controller.isOpen());\n if (wantOpen && !isOpen) this.controller.open();\n if (!wantOpen && isOpen) this.controller.close('programmatic');\n });\n // Sync controller → model (controller state changed via trigger event / outside-click / esc)\n effect(() => {\n const isOpen = this.controller.isOpen();\n const wantOpen = untracked(() => this.kjOpen());\n if (isOpen !== wantOpen) this.kjOpen.set(isOpen);\n });\n }\n}\n","import { Directive, ElementRef, computed, effect, inject, input, signal } from '@angular/core';\nimport { KjId } from './id';\nimport { KjOverlayController } from './controller';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_BACKDROP_STRATEGY,\n KJ_OVERLAY_FOCUS_TRAP_STRATEGY,\n KJ_OVERLAY_SCROLL_LOCK_STRATEGY,\n KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY,\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from './tokens';\n\n/**\n * Trigger-like contract accepted by `KjOverlayPanel.kjFor`. Any directive\n * that exposes an `attachPanel(panel)` method and a `controller` reference\n * satisfies this — including `KjOverlayTrigger` itself and consumer trigger\n * directives that compose it via `hostDirectives`.\n */\nexport interface KjOverlayTriggerLike {\n readonly controller: KjOverlayController;\n attachPanel(panel: KjOverlayPanel): void;\n}\n\n/**\n * Marks an element as the overlay's panel — wires it to the controller,\n * resolves the panel role/aria-modal, and binds DOM state attributes\n * (`data-state`, `hidden`, `id`) for transition styling.\n *\n * @doc-category Core/Overlay\n * @doc\n * @doc-name overlay-panel\n * @doc-is-main\n * @doc-description Marks an element as the overlay panel and binds its state, role, and accessibility attributes.\n */\n@Directive({\n selector: '[kjOverlayPanel]',\n exportAs: 'kjOverlayPanel',\n host: {\n '[id]': 'panelId',\n '[attr.role]': 'role()',\n '[attr.aria-modal]': 'isModal() ? \"true\" : null',\n '[attr.data-state]': 'state()',\n '[attr.hidden]': 'state() === \"closed\" ? \"\" : null',\n },\n})\nexport class KjOverlayPanel {\n readonly host = inject(ElementRef<HTMLElement>);\n private readonly idSvc = inject(KjId);\n /**\n * Per-overlay controller injected from the element-injector chain.\n * Service-launched overlays expose this through the wrapper component;\n * declarative consumers without `[kjFor]` provide it on the trigger\n * directive (host-level `providers: [KjOverlayController]`).\n */\n private readonly hostController = inject(KjOverlayController, { optional: true });\n /**\n * Resolved controller — `kjFor()?.controller` wins over the host one.\n * Signal-backed so the `state`/`isModal` computeds re-evaluate when the\n * effect below swaps in the kjFor controller.\n */\n private readonly _controller = signal<KjOverlayController | null>(this.hostController);\n get controller(): KjOverlayController | null { return this._controller(); }\n readonly panelId = this.idSvc.mint('panel');\n\n private readonly mount = inject(KJ_OVERLAY_MOUNT_STRATEGY);\n private readonly position = inject(KJ_OVERLAY_POSITION_STRATEGY);\n private readonly backdrop = inject(KJ_OVERLAY_BACKDROP_STRATEGY, { optional: true });\n private readonly focusTrap = inject(KJ_OVERLAY_FOCUS_TRAP_STRATEGY, { optional: true });\n private readonly scrollLock = inject(KJ_OVERLAY_SCROLL_LOCK_STRATEGY, { optional: true });\n private readonly liveAnnouncer = inject(KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY, { optional: true });\n private readonly trigger = inject(KJ_OVERLAY_TRIGGER_EVENT_STRATEGY, { optional: true });\n private readonly role_ = inject(KJ_OVERLAY_PANEL_ROLE, { optional: true }) ?? 'dialog';\n\n readonly kjFor = input<KjOverlayTriggerLike | null>(null);\n readonly role = computed(() => this.role_);\n readonly isModal = computed(() => !!this.backdrop?.inertSiblings);\n readonly state = computed(() => this.controller?.state() ?? 'closed');\n\n constructor() {\n effect(() => {\n // Single resolution rule: trigger-driven (`kjFor`) wins, otherwise\n // use whatever controller we found at the host element-injector.\n const t = this.kjFor();\n const c = t?.controller ?? this.hostController;\n if (!c) return;\n this._controller.set(c);\n c.bindPanel(this.host.nativeElement);\n c.attachStrategies({\n mount: this.mount,\n position: this.position,\n backdrop: this.backdrop ?? null,\n focusTrap: this.focusTrap ?? null,\n scrollLock: this.scrollLock ?? null,\n liveAnnouncer: this.liveAnnouncer ?? null,\n trigger: this.trigger ?? null,\n });\n t?.attachPanel(this);\n });\n }\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjMountStrategy } from '../../tokens';\nimport { createOverlayWrapper } from '../../container';\n\n/**\n * Walk up from `start` until we hit an element with `[data-theme]` set —\n * that's the scope the trigger renders inside. We propagate that value to\n * the portalled wrapper so theme tokens resolve against the local scope,\n * not the global `<html data-theme>`. Critical for theme-generator\n * previews where the preview pane carries `data-theme=\"custom-draft\"` but\n * the outer page is on the docs theme.\n */\nfunction closestTheme(start: Element | null): string | null {\n let el: Element | null = start;\n while (el) {\n const v = el.getAttribute?.('data-theme');\n if (v) return v;\n el = el.parentElement;\n }\n return null;\n}\n\n/**\n * Mount strategy for declarative overlays whose panel is rendered inline\n * in the consumer's template (popover, tooltip, dropdown-menu via\n * `[kjFor]`). On open the panel is portalled into a per-overlay wrapper\n * inside the singleton `.kj-overlay-container`; on close it's returned to\n * its original DOM location and the wrapper is removed.\n *\n * Service-launched overlays (dialog, drawer, toast) are mounted directly\n * into a `<kj-overlay-wrapper>` component by the builder — they use\n * `inPlace()` instead.\n */\nexport function bodyPortal(): KjMountStrategy {\n let ctx: KjOverlayContext | null = null;\n let wrapper: HTMLElement | null = null;\n let originalParent: HTMLElement | null = null;\n let originalNextSibling: Node | null = null;\n\n const ensureWrapper = (): HTMLElement | null => {\n if (wrapper && wrapper.isConnected) return wrapper;\n wrapper = createOverlayWrapper();\n return wrapper;\n };\n\n return {\n portalled: true,\n attach(c) { ctx = c; },\n onOpen() {\n if (!ctx?.platform.isBrowser) return;\n const panel = ctx.panelEl();\n const w = ensureWrapper();\n if (!panel || !w) return;\n if (panel.parentElement === w) return;\n originalParent = panel.parentElement;\n originalNextSibling = panel.nextSibling;\n // Propagate the closest ancestor's `data-theme` so the portalled\n // panel resolves theme tokens against the trigger's local scope.\n const theme = closestTheme(ctx.triggerEl() ?? originalParent);\n if (theme) w.setAttribute('data-theme', theme);\n else w.removeAttribute('data-theme');\n w.appendChild(panel);\n },\n onClose() {\n if (!ctx?.platform.isBrowser) return;\n const panel = ctx.panelEl();\n if (panel && originalParent) {\n if (originalNextSibling && originalNextSibling.parentNode === originalParent) {\n originalParent.insertBefore(panel, originalNextSibling);\n } else {\n originalParent.appendChild(panel);\n }\n }\n originalParent = null;\n originalNextSibling = null;\n if (wrapper?.parentElement) wrapper.parentElement.removeChild(wrapper);\n wrapper = null;\n },\n detach() {\n if (wrapper?.parentElement) wrapper.parentElement.removeChild(wrapper);\n wrapper = null;\n ctx = null;\n },\n resolveContainer() {\n const w = ensureWrapper();\n if (w) return w;\n if (typeof document === 'undefined') return null as unknown as HTMLElement;\n return document.body;\n },\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjMountStrategy } from '../../tokens';\n\nexport function inPlace(): KjMountStrategy {\n let ctx: KjOverlayContext | null = null;\n return {\n portalled: false,\n attach(c) { ctx = c; },\n onOpen() {},\n onClose() {},\n detach() { ctx = null; },\n resolveContainer() {\n const panel = ctx?.panelEl();\n const parent = panel?.parentElement;\n if (parent) return parent;\n if (typeof document === 'undefined') return null as unknown as HTMLElement;\n return document.body;\n },\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjMountStrategy } from '../../tokens';\n\nexport type KjContainerTarget = HTMLElement | (() => HTMLElement);\n\nexport function inContainer(target: KjContainerTarget): KjMountStrategy {\n let ctx: KjOverlayContext | null = null;\n let originalParent: HTMLElement | null = null;\n let originalNextSibling: Node | null = null;\n\n const resolve = (): HTMLElement => typeof target === 'function' ? target() : target;\n\n return {\n portalled: true,\n attach(c) { ctx = c; },\n onOpen() {\n if (!ctx?.platform.isBrowser) return;\n const panel = ctx.panelEl();\n if (!panel) return;\n originalParent = panel.parentElement;\n originalNextSibling = panel.nextSibling;\n resolve().appendChild(panel);\n },\n onClose() {\n if (!ctx?.platform.isBrowser) return;\n const panel = ctx.panelEl();\n if (!panel || !originalParent) return;\n if (originalNextSibling && originalNextSibling.parentNode === originalParent) {\n originalParent.insertBefore(panel, originalNextSibling);\n } else {\n originalParent.appendChild(panel);\n }\n originalParent = null;\n originalNextSibling = null;\n },\n detach() { ctx = null; },\n resolveContainer() { return resolve(); },\n };\n}\n","import { isSignal, signal, computed, type Signal } from '@angular/core';\nimport type { KjOverlayContext } from '../../context';\nimport type { KjPositionStrategy } from '../../tokens';\nimport type { KjSide, KjAlign, KjPlacement } from '../../types';\n\nexport interface KjAnchoredToOpts {\n trigger?: Signal<HTMLElement | null>;\n side: Signal<KjSide> | KjSide;\n align: Signal<KjAlign> | KjAlign;\n offset?: Signal<number> | number;\n flip?: boolean;\n shift?: boolean;\n /**\n * How to size the panel relative to the trigger:\n * - `'none'` (default) — panel keeps its intrinsic width.\n * - `'min'` — panel min-width matches trigger width (panel can grow but not shrink below).\n * - `'fixed'` — panel width matches trigger width exactly.\n */\n matchTriggerWidth?: 'none' | 'min' | 'fixed';\n}\n\nexport type KjAnchoredToStrategy = KjPositionStrategy & {\n configure(opts: Partial<KjAnchoredToOpts>): void;\n};\n\nconst read = <T>(v: Signal<T> | T): T => isSignal(v) ? v() : v;\n\n/**\n * Returns the trigger's effective bounding rect. If the trigger element has\n * `display: contents` (rect is 0×0), walks to the first child until a sized\n * element is found. Common case: `<kj-button kjPopoverTrigger>` where the\n * `<kj-button>` host is `display: contents` and the actual `<button>` is a\n * descendant.\n */\nconst effectiveRect = (el: HTMLElement): DOMRect => {\n let r = el.getBoundingClientRect();\n if (r.width > 0 || r.height > 0) return r;\n let cur: HTMLElement | null = el;\n while (cur) {\n const child = cur.firstElementChild as HTMLElement | null;\n if (!child) break;\n r = child.getBoundingClientRect();\n if (r.width > 0 || r.height > 0) return r;\n cur = child;\n }\n return el.getBoundingClientRect();\n};\n\nlet _anchorIdCounter = 0;\n\nconst supportsCssAnchor = (): boolean => {\n // Disabled — CSS Anchor Positioning + position-area produces inconsistent\n // results across browser versions (Chrome flips/inflates inset unexpectedly\n // with span-* keywords). Manual math fallback is the canonical path.\n return false;\n};\n\nconst positionAreaFor = (side: KjSide, align: KjAlign): string => {\n if (side === 'top' || side === 'bottom') {\n const cross = align === 'start' ? 'span-right'\n : align === 'end' ? 'span-left'\n : 'center';\n return `${side} ${cross}`;\n }\n const cross = align === 'start' ? 'span-bottom'\n : align === 'end' ? 'span-top'\n : 'center';\n return `${side} ${cross}`;\n};\n\nexport function anchoredTo(initialOpts: Partial<KjAnchoredToOpts> = {}): KjAnchoredToStrategy {\n let opts: Partial<KjAnchoredToOpts> = { ...initialOpts };\n let ctx: KjOverlayContext | null = null;\n let onResize: (() => void) | null = null;\n let onScroll: (() => void) | null = null;\n let resizeObserver: ResizeObserver | null = null;\n let useCssAnchor: boolean | null = null;\n let anchorIdent: string | null = null;\n let cssTrigger: HTMLElement | null = null;\n let isOpen = false;\n const _placement = signal<KjPlacement | null>(null);\n const placement = computed(() => _placement());\n\n const applyCss = () => {\n if (!ctx?.platform.isBrowser) return;\n const trigger = opts.trigger ? opts.trigger() : ctx.triggerEl();\n const panel = ctx.panelEl();\n if (!trigger || !panel) return;\n\n const side = read<KjSide>(opts.side ?? 'bottom');\n const align = read<KjAlign>(opts.align ?? 'center');\n const offset = read<number>(opts.offset ?? 0);\n\n if (!anchorIdent) anchorIdent = `--kj-anchor-${++_anchorIdCounter}`;\n trigger.style.setProperty('anchor-name', anchorIdent);\n cssTrigger = trigger;\n\n panel.style.setProperty('position', 'fixed');\n panel.style.setProperty('position-anchor', anchorIdent);\n panel.style.setProperty('position-area', positionAreaFor(side, align));\n panel.style.setProperty('margin', `${offset}px`);\n\n _placement.set({ side, align });\n };\n\n const clearCss = () => {\n const panel = ctx?.panelEl();\n if (panel) {\n panel.style.removeProperty('position');\n panel.style.removeProperty('position-anchor');\n panel.style.removeProperty('position-area');\n panel.style.removeProperty('margin');\n }\n if (cssTrigger && anchorIdent) {\n const current = cssTrigger.style.getPropertyValue('anchor-name');\n if (current === anchorIdent) {\n cssTrigger.style.removeProperty('anchor-name');\n }\n }\n cssTrigger = null;\n _placement.set(null);\n };\n\n const applyManual = () => {\n if (!ctx?.platform.isBrowser) return;\n const trigger = opts.trigger ? opts.trigger() : ctx.triggerEl();\n const panel = ctx.panelEl();\n if (!trigger || !panel) return;\n\n const side = read<KjSide>(opts.side ?? 'bottom');\n const align = read<KjAlign>(opts.align ?? 'center');\n const offset = read<number>(opts.offset ?? 0);\n const flip = opts.flip ?? true;\n const shift = opts.shift ?? true;\n const matchWidth = opts.matchTriggerWidth ?? 'none';\n const tRect = effectiveRect(trigger);\n\n // Apply width matching BEFORE measuring panel — affects pRect.\n if (matchWidth === 'fixed') {\n panel.style.width = `${tRect.width}px`;\n } else if (matchWidth === 'min') {\n panel.style.minWidth = `${tRect.width}px`;\n }\n\n const pRect = panel.getBoundingClientRect();\n const vw = window.innerWidth, vh = window.innerHeight;\n\n let resolvedSide = side;\n if (flip) {\n if (side === 'bottom' && tRect.bottom + offset + pRect.height > vh && tRect.top - offset - pRect.height >= 0) resolvedSide = 'top';\n else if (side === 'top' && tRect.top - offset - pRect.height < 0 && tRect.bottom + offset + pRect.height <= vh) resolvedSide = 'bottom';\n else if (side === 'right' && tRect.right + offset + pRect.width > vw && tRect.left - offset - pRect.width >= 0) resolvedSide = 'left';\n else if (side === 'left' && tRect.left - offset - pRect.width < 0 && tRect.right + offset + pRect.width <= vw) resolvedSide = 'right';\n }\n\n let left = 0, top = 0;\n if (resolvedSide === 'bottom') { top = tRect.bottom + offset; }\n if (resolvedSide === 'top') { top = tRect.top - offset - pRect.height; }\n if (resolvedSide === 'right') { left = tRect.right + offset; }\n if (resolvedSide === 'left') { left = tRect.left - offset - pRect.width; }\n\n if (resolvedSide === 'top' || resolvedSide === 'bottom') {\n if (align === 'start') left = tRect.left;\n if (align === 'center') left = tRect.left + (tRect.width - pRect.width) / 2;\n if (align === 'end') left = tRect.right - pRect.width;\n } else {\n if (align === 'start') top = tRect.top;\n if (align === 'center') top = tRect.top + (tRect.height - pRect.height) / 2;\n if (align === 'end') top = tRect.bottom - pRect.height;\n }\n\n if (shift) {\n left = Math.max(0, Math.min(left, vw - pRect.width));\n top = Math.max(0, Math.min(top, vh - pRect.height));\n }\n\n panel.style.position = 'fixed';\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n _placement.set({ side: resolvedSide, align });\n };\n\n const clearManual = () => {\n const panel = ctx?.panelEl();\n if (!panel) return;\n panel.style.position = '';\n panel.style.left = '';\n panel.style.top = '';\n panel.style.width = '';\n panel.style.minWidth = '';\n _placement.set(null);\n };\n\n const apply = () => {\n if (useCssAnchor) applyCss();\n else applyManual();\n };\n\n return {\n placement,\n attach(c) { ctx = c; },\n onOpen() {\n isOpen = true;\n if (useCssAnchor === null) {\n useCssAnchor = ctx?.platform.isBrowser ? supportsCssAnchor() : false;\n }\n if (useCssAnchor) {\n applyCss();\n return;\n }\n applyManual();\n if (!ctx?.platform.isBrowser) return;\n onResize = () => applyManual();\n onScroll = () => applyManual();\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n const trigger = opts.trigger ? opts.trigger() : ctx.triggerEl();\n const panel = ctx.panelEl();\n if (typeof ResizeObserver !== 'undefined' && trigger && panel) {\n resizeObserver = new ResizeObserver(() => applyManual());\n resizeObserver.observe(trigger);\n resizeObserver.observe(panel);\n }\n },\n onClose() {\n isOpen = false;\n if (useCssAnchor) {\n clearCss();\n return;\n }\n clearManual();\n if (onResize) window.removeEventListener('resize', onResize);\n if (onScroll) window.removeEventListener('scroll', onScroll, true);\n onResize = onScroll = null;\n resizeObserver?.disconnect();\n resizeObserver = null;\n },\n update() {\n if (useCssAnchor) return;\n applyManual();\n },\n detach() { ctx = null; },\n configure(newOpts: Partial<KjAnchoredToOpts>) {\n opts = { ...opts, ...newOpts };\n if (isOpen) apply();\n },\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjPositionStrategy } from '../../tokens';\n\nexport function viewportCentered(): KjPositionStrategy {\n let ctx: KjOverlayContext | null = null;\n\n const apply = () => {\n const panel = ctx?.panelEl();\n if (!panel) return;\n panel.style.position = 'fixed';\n panel.style.left = '50%';\n panel.style.top = '50%';\n panel.style.transform = 'translate(-50%, -50%)';\n };\n const clear = () => {\n const panel = ctx?.panelEl();\n if (!panel) return;\n panel.style.position = '';\n panel.style.left = '';\n panel.style.top = '';\n panel.style.transform = '';\n };\n\n return {\n attach(c) { ctx = c; },\n onOpen() { apply(); },\n onClose() { clear(); },\n update() { apply(); },\n detach() { ctx = null; },\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjPositionStrategy } from '../../tokens';\n\nexport type KjSheetSide = 'left' | 'right' | 'top' | 'bottom';\n\nexport function edgeSheet(opts: { side: KjSheetSide }): KjPositionStrategy {\n let ctx: KjOverlayContext | null = null;\n const side = opts.side;\n\n const apply = () => {\n const panel = ctx?.panelEl();\n if (!panel) return;\n panel.style.position = 'fixed';\n panel.style.left = side === 'right' ? '' : '0';\n panel.style.right = side === 'left' ? '' : '0';\n panel.style.top = side === 'bottom' ? '' : '0';\n panel.style.bottom = side === 'top' ? '' : '0';\n };\n const clear = () => {\n const panel = ctx?.panelEl();\n if (!panel) return;\n panel.style.position = '';\n panel.style.left = '';\n panel.style.right = '';\n panel.style.top = '';\n panel.style.bottom = '';\n };\n\n return {\n attach(c) { ctx = c; },\n onOpen() { apply(); },\n onClose() { clear(); },\n update() { apply(); },\n detach() { ctx = null; },\n };\n}\n","import { isSignal, type Signal } from '@angular/core';\nimport type { KjOverlayContext } from '../../context';\nimport type { KjPositionStrategy } from '../../tokens';\n\nexport interface KjPointAtOpts {\n x: Signal<number> | number;\n y: Signal<number> | number;\n}\n\nexport function pointAt(opts: KjPointAtOpts): KjPositionStrategy {\n let ctx: KjOverlayContext | null = null;\n const read = (v: Signal<number> | number): number => isSignal(v) ? v() : v;\n const apply = () => {\n const panel = ctx?.panelEl();\n if (!panel) return;\n panel.style.position = 'fixed';\n panel.style.left = `${read(opts.x)}px`;\n panel.style.top = `${read(opts.y)}px`;\n };\n const clear = () => {\n const panel = ctx?.panelEl();\n if (!panel) return;\n panel.style.position = '';\n panel.style.left = '';\n panel.style.top = '';\n };\n return {\n attach(c) { ctx = c; },\n onOpen() { apply(); },\n onClose() { clear(); },\n update() { apply(); },\n detach() { ctx = null; },\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjPositionStrategy } from '../../tokens';\n\nexport type KjCornerPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\nexport function corner(opts: { position: KjCornerPosition; offset?: { x?: number; y?: number } }): KjPositionStrategy {\n let ctx: KjOverlayContext | null = null;\n const ox = opts.offset?.x ?? 0;\n const oy = opts.offset?.y ?? 0;\n const apply = () => {\n const panel = ctx?.panelEl();\n if (!panel) return;\n panel.style.position = 'fixed';\n panel.style.left = panel.style.right = panel.style.top = panel.style.bottom = '';\n if (opts.position === 'top-left') { panel.style.top = `${oy}px`; panel.style.left = `${ox}px`; }\n if (opts.position === 'top-right') { panel.style.top = `${oy}px`; panel.style.right = `${ox}px`; }\n if (opts.position === 'bottom-left') { panel.style.bottom = `${oy}px`; panel.style.left = `${ox}px`; }\n if (opts.position === 'bottom-right') { panel.style.bottom = `${oy}px`; panel.style.right = `${ox}px`; }\n };\n const clear = () => {\n const panel = ctx?.panelEl();\n if (!panel) return;\n panel.style.position = '';\n panel.style.left = panel.style.right = panel.style.top = panel.style.bottom = '';\n };\n return {\n attach(c) { ctx = c; },\n onOpen() { apply(); },\n onClose() { clear(); },\n update() { apply(); },\n detach() { ctx = null; },\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjPositionStrategy } from '../../tokens';\n\nexport function inPlaceSibling(): KjPositionStrategy {\n let _ctx: KjOverlayContext | null = null;\n return {\n attach(c) { _ctx = c; },\n onOpen() {},\n onClose() {},\n update() {},\n detach() { _ctx = null; },\n };\n}\n","import type { KjBackdropStrategy } from '../../tokens';\n\nexport interface KjSolidBackdropOpts {\n inert?: boolean;\n closeOnClick?: boolean;\n className?: string;\n}\n\nexport interface KjSolidBackdropStrategy extends KjBackdropStrategy {\n readonly className: string;\n}\n\nexport function solidBackdrop(opts: KjSolidBackdropOpts = {}): KjSolidBackdropStrategy {\n return {\n inertSiblings: opts.inert ?? true,\n closeOnClick: opts.closeOnClick ?? true,\n className: opts.className ?? 'kj-backdrop',\n attach() {},\n onOpen() {},\n onClose() {},\n detach() {},\n };\n}\n","import { solidBackdrop, type KjSolidBackdropOpts, type KjSolidBackdropStrategy } from './solid';\n\nexport function blurredBackdrop(opts: KjSolidBackdropOpts = {}): KjSolidBackdropStrategy {\n return solidBackdrop({ ...opts, className: opts.className ?? 'kj-backdrop kj-backdrop--blur' });\n}\n","import type { KjBackdropStrategy } from '../../tokens';\n\nexport function noBackdrop(): KjBackdropStrategy {\n return {\n inertSiblings: false,\n closeOnClick: false,\n attach() {}, onOpen() {}, onClose() {}, detach() {},\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjFocusTrapStrategy } from '../../tokens';\n\nconst FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport interface KjTabCycleOpts {\n initialFocus?: 'auto' | 'first' | HTMLElement | (() => HTMLElement | null);\n returnFocus?: boolean;\n enabled?: boolean | (() => boolean);\n}\n\nexport type KjTabCycleStrategy = KjFocusTrapStrategy & {\n configure(opts: Partial<KjTabCycleOpts>): void;\n};\n\nexport function tabCycle(initialOpts: KjTabCycleOpts = {}): KjTabCycleStrategy {\n let opts: KjTabCycleOpts = { ...initialOpts };\n let ctx: KjOverlayContext | null = null;\n let returnTarget: HTMLElement | null = null;\n let keyListener: ((e: KeyboardEvent) => void) | null = null;\n const isEnabled = (): boolean => {\n const e = opts.enabled;\n if (e === undefined) return true;\n return typeof e === 'function' ? e() : e;\n };\n\n const focusables = (): HTMLElement[] => {\n const panel = ctx?.panelEl();\n if (!panel) return [];\n return Array.from(panel.querySelectorAll<HTMLElement>(FOCUSABLE));\n };\n\n return {\n attach(c) { ctx = c; },\n onOpen() {\n if (!isEnabled()) return;\n if (!ctx?.platform.isBrowser) return;\n const panel = ctx.panelEl();\n if (!panel) return;\n returnTarget = (document.activeElement as HTMLElement) ?? null;\n keyListener = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const els = focusables();\n if (els.length === 0) return;\n const first = els[0], last = els[els.length - 1];\n if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }\n else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }\n };\n panel.addEventListener('keydown', keyListener);\n },\n onClose() {\n const panel = ctx?.panelEl();\n if (panel && keyListener) panel.removeEventListener('keydown', keyListener);\n keyListener = null;\n },\n detach() { ctx = null; returnTarget = null; },\n focusFirst() {\n if (!isEnabled()) return;\n const cfg = opts.initialFocus ?? 'first';\n let target: HTMLElement | null;\n if (cfg instanceof HTMLElement) target = cfg;\n else if (typeof cfg === 'function') target = cfg();\n else target = focusables()[0] ?? null;\n if (!target) {\n // No focusable children — focus the panel itself so the trigger\n // doesn't retain focus (WCAG 2.4.3) and so a held Space doesn't\n // re-fire the trigger's click handler. tabindex=-1 makes the panel\n // programmatically focusable without entering the tab order.\n const panel = ctx?.panelEl();\n if (panel) {\n if (!panel.hasAttribute('tabindex')) panel.setAttribute('tabindex', '-1');\n target = panel;\n }\n }\n target?.focus();\n },\n restoreFocus() {\n if (!isEnabled()) return;\n if (opts.returnFocus !== false) returnTarget?.focus();\n },\n configure(newOpts: Partial<KjTabCycleOpts>) {\n opts = { ...opts, ...newOpts };\n },\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjFocusTrapStrategy } from '../../tokens';\n\nexport function inertBased(): KjFocusTrapStrategy {\n let ctx: KjOverlayContext | null = null;\n let inerted: HTMLElement[] = [];\n let returnTarget: HTMLElement | null = null;\n\n return {\n attach(c) { ctx = c; },\n onOpen() {\n if (!ctx?.platform.isBrowser) return;\n const panel = ctx.panelEl();\n if (!panel?.parentElement) return;\n returnTarget = (document.activeElement as HTMLElement) ?? null;\n inerted = [];\n for (const sibling of Array.from(panel.parentElement.children)) {\n if (sibling === panel) continue;\n const el = sibling as HTMLElement;\n if (!el.hasAttribute('inert')) {\n el.setAttribute('inert', '');\n inerted.push(el);\n }\n }\n },\n onClose() {\n for (const el of inerted) el.removeAttribute('inert');\n inerted = [];\n },\n detach() { ctx = null; returnTarget = null; },\n focusFirst() {\n const panel = ctx?.panelEl();\n const focusable = panel?.querySelector<HTMLElement>('button,a,input,select,textarea,[tabindex]:not([tabindex=\"-1\"])');\n focusable?.focus();\n },\n restoreFocus() { returnTarget?.focus(); },\n };\n}\n","import type { KjFocusTrapStrategy } from '../../tokens';\n\nexport function noTrap(): KjFocusTrapStrategy {\n return {\n attach() {}, onOpen() {}, onClose() {}, detach() {},\n focusFirst() {}, restoreFocus() {},\n };\n}\n","import type { KjScrollLockStrategy } from '../../tokens';\n\nlet _count = 0;\nlet _savedOverflow: string | null = null;\nlet _savedPaddingRight: string | null = null;\n\nconst acquire = (): (() => void) => {\n if (typeof document === 'undefined') return () => {};\n _count++;\n if (_count === 1) {\n const html = document.documentElement;\n const scrollbarWidth = window.innerWidth - html.clientWidth;\n _savedOverflow = html.style.overflow;\n _savedPaddingRight = html.style.paddingRight;\n html.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n const existing = parseFloat(getComputedStyle(html).paddingRight) || 0;\n html.style.paddingRight = `${existing + scrollbarWidth}px`;\n }\n }\n let released = false;\n return () => {\n if (released) return;\n released = true;\n _count--;\n if (_count === 0) {\n const html = document.documentElement;\n html.style.overflow = _savedOverflow ?? '';\n html.style.paddingRight = _savedPaddingRight ?? '';\n _savedOverflow = null;\n _savedPaddingRight = null;\n }\n };\n};\n\nexport function htmlOverflow(): KjScrollLockStrategy {\n let release: (() => void) | null = null;\n return {\n attach() {},\n onOpen() { release = acquire(); },\n onClose() { release?.(); release = null; },\n detach() { release?.(); release = null; },\n };\n}\n","import type { KjScrollLockStrategy } from '../../tokens';\n\nlet _count = 0;\nlet _saved: string | null = null;\n\nexport function cssClip(): KjScrollLockStrategy {\n let acquired = false;\n return {\n attach() {},\n onOpen() {\n if (typeof document === 'undefined') return;\n _count++;\n acquired = true;\n if (_count === 1) {\n _saved = document.documentElement.style.overflow;\n document.documentElement.style.overflow = 'clip';\n }\n },\n onClose() {\n if (typeof document === 'undefined' || !acquired) return;\n acquired = false;\n _count--;\n if (_count === 0) {\n document.documentElement.style.overflow = _saved ?? '';\n _saved = null;\n }\n },\n detach() {\n if (acquired) {\n acquired = false;\n _count--;\n if (_count === 0 && typeof document !== 'undefined') {\n document.documentElement.style.overflow = _saved ?? '';\n _saved = null;\n }\n }\n },\n };\n}\n","import type { KjScrollLockStrategy } from '../../tokens';\n\nexport function noScrollLock(): KjScrollLockStrategy {\n return { attach() {}, onOpen() {}, onClose() {}, detach() {} };\n}\n","export type KjLivePoliteness = 'polite' | 'assertive';\n\nconst SR_ONLY_STYLE = `\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n\nconst regions: Partial<Record<KjLivePoliteness, HTMLElement>> = {};\n\nconst ensureRegion = (politeness: KjLivePoliteness): HTMLElement => {\n let region = regions[politeness];\n if (region) return region;\n region = document.createElement('div');\n region.setAttribute('data-kj-live-region', politeness);\n region.setAttribute('aria-live', politeness);\n region.setAttribute('aria-atomic', 'true');\n region.style.cssText = SR_ONLY_STYLE;\n document.body.appendChild(region);\n regions[politeness] = region;\n return region;\n};\n\nexport const announce = (message: string, politeness: KjLivePoliteness = 'polite'): void => {\n if (typeof document === 'undefined') return;\n const region = ensureRegion(politeness);\n region.textContent = '';\n requestAnimationFrame(() => { region.textContent = message; });\n};\n","import type { KjLiveAnnouncerStrategy } from '../../tokens';\nimport { announce } from './_announce';\n\nexport function polite(): KjLiveAnnouncerStrategy {\n return {\n attach() {},\n onOpen() {}, onClose() {},\n detach() {},\n announce(msg: string) { announce(msg, 'polite'); },\n };\n}\n","import type { KjLiveAnnouncerStrategy } from '../../tokens';\nimport { announce } from './_announce';\n\nexport function assertive(): KjLiveAnnouncerStrategy {\n return {\n attach() {},\n onOpen() {}, onClose() {},\n detach() {},\n announce(msg: string) { announce(msg, 'assertive'); },\n };\n}\n","import type { KjLiveAnnouncerStrategy } from '../../tokens';\n\nexport function silent(): KjLiveAnnouncerStrategy {\n return { attach() {}, onOpen() {}, onClose() {}, detach() {}, announce() {} };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjTriggerEventStrategy } from '../../tokens';\n\nexport function onClick(): KjTriggerEventStrategy {\n let ctx: KjOverlayContext | null = null;\n let toggle: (() => void) | null = null;\n let listener: ((e: Event) => void) | null = null;\n\n const wireListener = () => {\n if (!ctx?.platform.isBrowser) return;\n const trigger = ctx.triggerEl();\n if (!trigger || listener) return;\n listener = () => toggle?.();\n trigger.addEventListener('click', listener);\n };\n\n return {\n ariaHasPopup: null,\n attach(c) { ctx = c; wireListener(); },\n bindToggle(t) { toggle = t; wireListener(); },\n onOpen() {}, onClose() {},\n detach() {\n const trigger = ctx?.triggerEl();\n if (trigger && listener) trigger.removeEventListener('click', listener);\n listener = null; toggle = null; ctx = null;\n },\n };\n}\n","import { isSignal, type Signal } from '@angular/core';\nimport type { KjOverlayContext } from '../../context';\nimport type { KjTriggerEventStrategy } from '../../tokens';\n\ntype Reactive<T> = T | Signal<T> | (() => T);\nconst read = <T>(v: Reactive<T> | undefined, fallback: T): T => {\n if (v === undefined) return fallback;\n if (isSignal(v)) return v();\n if (typeof v === 'function') return (v as () => T)();\n return v;\n};\n\nexport interface KjOnHoverOpts {\n openDelay?: Reactive<number>;\n closeDelay?: Reactive<number>;\n}\n\nexport type KjOnHoverStrategy = KjTriggerEventStrategy & {\n configure(opts: Partial<KjOnHoverOpts>): void;\n};\n\n/**\n * Returns the effective hover-listening target. `pointerenter`/`pointerleave`\n * do not bubble, and elements with `display: contents` (e.g. `<kj-button>`)\n * never receive these events because they have no rendered box. Walk to the\n * first descendant with a layout box.\n */\nconst effectiveHoverTarget = (el: HTMLElement): HTMLElement => {\n if (typeof window === 'undefined') return el;\n const r = el.getBoundingClientRect();\n if (r.width > 0 || r.height > 0) return el;\n let cur: HTMLElement | null = el;\n while (cur) {\n const child = cur.firstElementChild as HTMLElement | null;\n if (!child) break;\n const cr = child.getBoundingClientRect();\n if (cr.width > 0 || cr.height > 0) return child;\n cur = child;\n }\n return el;\n};\n\nexport function onHover(initialOpts: Partial<KjOnHoverOpts> = {}): KjOnHoverStrategy {\n let opts: Partial<KjOnHoverOpts> = { ...initialOpts };\n let ctx: KjOverlayContext | null = null;\n let toggle: (() => void) | null = null;\n let openTimer = 0, closeTimer = 0;\n let onEnter: ((e: Event) => void) | null = null;\n let onLeave: ((e: Event) => void) | null = null;\n let listenTarget: HTMLElement | null = null;\n\n const wire = () => {\n if (!ctx?.platform.isBrowser) return;\n const trigger = ctx.triggerEl();\n if (!trigger || onEnter) return;\n listenTarget = effectiveHoverTarget(trigger);\n onEnter = () => {\n if (closeTimer) { clearTimeout(closeTimer); closeTimer = 0; }\n if (ctx?.isOpen()) return;\n openTimer = setTimeout(() => { toggle?.(); openTimer = 0; }, read(opts.openDelay, 0)) as unknown as number;\n };\n onLeave = () => {\n if (openTimer) { clearTimeout(openTimer); openTimer = 0; }\n if (!ctx?.isOpen()) return;\n closeTimer = setTimeout(() => { toggle?.(); closeTimer = 0; }, read(opts.closeDelay, 0)) as unknown as number;\n };\n listenTarget.addEventListener('pointerenter', onEnter);\n listenTarget.addEventListener('pointerleave', onLeave);\n };\n\n return {\n ariaHasPopup: null,\n attach(c) { ctx = c; wire(); },\n bindToggle(t) { toggle = t; wire(); },\n onOpen() {}, onClose() {},\n detach() {\n if (listenTarget && onEnter) listenTarget.removeEventListener('pointerenter', onEnter);\n if (listenTarget && onLeave) listenTarget.removeEventListener('pointerleave', onLeave);\n if (openTimer) clearTimeout(openTimer);\n if (closeTimer) clearTimeout(closeTimer);\n onEnter = onLeave = null; listenTarget = null; openTimer = closeTimer = 0;\n toggle = null; ctx = null;\n },\n configure(newOpts) { opts = { ...opts, ...newOpts }; },\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjTriggerEventStrategy } from '../../tokens';\n\nexport function onFocus(): KjTriggerEventStrategy {\n let ctx: KjOverlayContext | null = null;\n let toggle: (() => void) | null = null;\n let onIn: ((e: FocusEvent) => void) | null = null;\n let onOut: ((e: FocusEvent) => void) | null = null;\n\n const wire = () => {\n if (!ctx?.platform.isBrowser) return;\n const trigger = ctx.triggerEl();\n if (!trigger || onIn) return;\n onIn = () => { if (!ctx?.isOpen()) toggle?.(); };\n onOut = (e: FocusEvent) => {\n const related = e.relatedTarget as Node | null;\n const panel = ctx?.panelEl();\n if (panel && related && panel.contains(related)) return;\n if (ctx?.isOpen()) toggle?.();\n };\n trigger.addEventListener('focusin', onIn);\n trigger.addEventListener('focusout', onOut);\n };\n\n return {\n ariaHasPopup: null,\n attach(c) { ctx = c; wire(); },\n bindToggle(t) { toggle = t; wire(); },\n onOpen() {}, onClose() {},\n detach() {\n const trigger = ctx?.triggerEl();\n if (trigger && onIn) trigger.removeEventListener('focusin', onIn);\n if (trigger && onOut) trigger.removeEventListener('focusout', onOut);\n onIn = onOut = null; toggle = null; ctx = null;\n },\n };\n}\n","import { isSignal, type Signal } from '@angular/core';\nimport type { KjOverlayContext } from '../../context';\nimport type { KjTriggerEventStrategy } from '../../tokens';\n\ntype Reactive<T> = T | Signal<T> | (() => T);\nconst read = <T>(v: Reactive<T> | undefined, fallback: T): T => {\n if (v === undefined) return fallback;\n if (isSignal(v)) return v();\n if (typeof v === 'function') return (v as () => T)();\n return v;\n};\n\nexport interface KjOnContextMenuOpts {\n longPressMs?: Reactive<number>;\n}\n\nexport type KjOnContextMenuStrategy = KjTriggerEventStrategy & {\n configure(opts: Partial<KjOnContextMenuOpts>): void;\n};\n\nexport function onContextMenu(initialOpts: Partial<KjOnContextMenuOpts> = {}): KjOnContextMenuStrategy {\n let opts: Partial<KjOnContextMenuOpts> = { ...initialOpts };\n let ctx: KjOverlayContext | null = null;\n let toggle: (() => void) | null = null;\n let onCtx: ((e: MouseEvent) => void) | null = null;\n let onKey: ((e: KeyboardEvent) => void) | null = null;\n let onTouchStart: ((e: TouchEvent) => void) | null = null;\n let onTouchEnd: (() => void) | null = null;\n let touchTimer = 0;\n\n const wire = () => {\n if (!ctx?.platform.isBrowser) return;\n const trigger = ctx.triggerEl();\n if (!trigger || onCtx) return;\n\n onCtx = (e: MouseEvent) => { e.preventDefault(); toggle?.(); };\n onKey = (e: KeyboardEvent) => { if (e.key === 'F10' && e.shiftKey) { e.preventDefault(); toggle?.(); } };\n onTouchStart = (_e: TouchEvent) => { touchTimer = setTimeout(() => { toggle?.(); touchTimer = 0; }, read(opts.longPressMs, 500)) as unknown as number; };\n onTouchEnd = () => { if (touchTimer) { clearTimeout(touchTimer); touchTimer = 0; } };\n\n trigger.addEventListener('contextmenu', onCtx);\n trigger.addEventListener('keydown', onKey);\n trigger.addEventListener('touchstart', onTouchStart);\n trigger.addEventListener('touchend', onTouchEnd);\n trigger.addEventListener('touchcancel', onTouchEnd);\n };\n\n return {\n ariaHasPopup: 'menu',\n attach(c) { ctx = c; wire(); },\n bindToggle(t) { toggle = t; wire(); },\n onOpen() {}, onClose() {},\n detach() {\n const trigger = ctx?.triggerEl();\n if (trigger) {\n if (onCtx) trigger.removeEventListener('contextmenu', onCtx);\n if (onKey) trigger.removeEventListener('keydown', onKey);\n if (onTouchStart) trigger.removeEventListener('touchstart', onTouchStart);\n if (onTouchEnd) {\n trigger.removeEventListener('touchend', onTouchEnd);\n trigger.removeEventListener('touchcancel', onTouchEnd);\n }\n }\n if (touchTimer) clearTimeout(touchTimer);\n onCtx = onKey = onTouchStart = onTouchEnd = null; touchTimer = 0;\n toggle = null; ctx = null;\n },\n configure(newOpts) { opts = { ...opts, ...newOpts }; },\n };\n}\n","import type { KjTriggerEventStrategy } from '../../tokens';\n\ninterface ParsedChord { mod: boolean; ctrl: boolean; alt: boolean; shift: boolean; key: string; }\n\nfunction parseChord(chord: string): ParsedChord {\n const parts = chord.toLowerCase().split('+').map(p => p.trim());\n const out: ParsedChord = { mod: false, ctrl: false, alt: false, shift: false, key: '' };\n for (const p of parts) {\n if (p === 'mod') out.mod = true;\n else if (p === 'ctrl' || p === 'control') out.ctrl = true;\n else if (p === 'alt' || p === 'option') out.alt = true;\n else if (p === 'shift') out.shift = true;\n else out.key = p;\n }\n return out;\n}\n\nfunction isMac(): boolean {\n if (typeof navigator === 'undefined') return false;\n return /Mac|iPhone|iPad|iPod/.test(navigator.platform);\n}\n\nfunction matches(e: KeyboardEvent, parsed: ParsedChord): boolean {\n if (e.key.toLowerCase() !== parsed.key) return false;\n const wantMeta = parsed.mod && isMac();\n const wantCtrl = parsed.ctrl || (parsed.mod && !isMac());\n if (!!e.metaKey !== wantMeta) return false;\n if (!!e.ctrlKey !== wantCtrl) return false;\n if (!!e.altKey !== parsed.alt) return false;\n if (!!e.shiftKey !== parsed.shift) return false;\n return true;\n}\n\nexport function onHotkey(chord: string): KjTriggerEventStrategy {\n const parsed = parseChord(chord);\n let toggle: (() => void) | null = null;\n let listener: ((e: KeyboardEvent) => void) | null = null;\n let installed = false;\n\n const install = () => {\n if (installed || typeof document === 'undefined') return;\n listener = (e: KeyboardEvent) => {\n if (matches(e, parsed)) { e.preventDefault(); toggle?.(); }\n };\n document.addEventListener('keydown', listener);\n installed = true;\n };\n\n return {\n ariaHasPopup: null,\n attach() { install(); },\n bindToggle(t) { toggle = t; install(); },\n onOpen() {}, onClose() {},\n detach() {\n if (listener) document.removeEventListener('keydown', listener);\n listener = null; toggle = null; installed = false;\n },\n };\n}\n","import type { KjOverlayContext } from '../../context';\nimport type { KjTriggerEventStrategy } from '../../tokens';\n\nexport function onFocusOrInput(): KjTriggerEventStrategy {\n let ctx: KjOverlayContext | null = null;\n let toggle: (() => void) | null = null;\n let onFocusIn: ((e: Event) => void) | null = null;\n let onInput: ((e: Event) => void) | null = null;\n\n const wire = () => {\n if (!ctx?.platform.isBrowser) return;\n const trigger = ctx.triggerEl();\n if (!trigger || onFocusIn) return;\n onFocusIn = () => { if (!ctx?.isOpen()) toggle?.(); };\n onInput = () => { if (!ctx?.isOpen()) toggle?.(); };\n trigger.addEventListener('focusin', onFocusIn);\n trigger.addEventListener('input', onInput);\n };\n\n return {\n ariaHasPopup: 'listbox',\n attach(c) { ctx = c; wire(); },\n bindToggle(t) { toggle = t; wire(); },\n onOpen() {}, onClose() {},\n detach() {\n const trigger = ctx?.triggerEl();\n if (trigger) {\n if (onFocusIn) trigger.removeEventListener('focusin', onFocusIn);\n if (onInput) trigger.removeEventListener('input', onInput);\n }\n onFocusIn = onInput = null; toggle = null; ctx = null;\n },\n };\n}\n","import type { KjTriggerEventStrategy } from '../../tokens';\n\nexport function programmatic(): KjTriggerEventStrategy {\n let _toggle: (() => void) | null = null;\n return {\n ariaHasPopup: null,\n attach() {},\n bindToggle(t) { _toggle = t; },\n onOpen() {}, onClose() {},\n detach() { _toggle = null; },\n };\n}\n","import {\n DOCUMENT,\n DestroyRef,\n Injectable,\n PLATFORM_ID,\n Signal,\n afterNextRender,\n inject,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n/** Logical text direction. */\nexport type KjDirection = 'ltr' | 'rtl';\n\n/**\n * Reads the document's logical text direction (`<html dir>`, falling back to\n * `<body dir>`) and exposes it as a signal that updates when the attribute\n * changes. SSR-safe — on the server the signal returns `'ltr'` and no DOM\n * APIs are touched.\n *\n * Use this for RTL-aware behaviour in directives that cannot rely on CSS\n * (e.g. computing logical positions, emitting `[attr.data-direction]`,\n * choosing arrow-key handlers).\n *\n * @example\n * ```ts\n * private readonly dir = inject(KjDirectionality);\n * readonly isRtl = computed(() => this.dir.current() === 'rtl');\n * ```\n * @doc-category Core/Primitives\n */\n@Injectable({ providedIn: 'root' })\nexport class KjDirectionality {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n private readonly doc = inject(DOCUMENT, { optional: true }) as Document | null;\n\n private readonly _current = signal<KjDirection>('ltr');\n\n /**\n * Current document direction. `'ltr'` on the server and as the fallback\n * when no `dir` attribute is set.\n */\n readonly current: Signal<KjDirection> = this._current.asReadonly();\n\n constructor() {\n if (!isPlatformBrowser(this.platformId) || !this.doc) {\n // SSR: leave the default `'ltr'` and skip all DOM access.\n return;\n }\n\n // Read the initial value as soon as the DOM is ready. afterNextRender\n // guarantees a browser context and avoids reading during SSR.\n afterNextRender(() => {\n this._current.set(this.read());\n\n const html = this.doc!.documentElement;\n const observer = new MutationObserver(() => {\n const next = this.read();\n if (next !== this._current()) {\n this._current.set(next);\n }\n });\n observer.observe(html, {\n attributes: true,\n attributeFilter: ['dir'],\n subtree: false,\n });\n\n this.destroyRef.onDestroy(() => observer.disconnect());\n });\n }\n\n /**\n * Reads the effective direction from `<html dir>`, falling back to\n * `<body dir>`, then `'ltr'`. Any value other than `'rtl'` collapses to\n * `'ltr'` — `dir=\"auto\"` is treated as LTR until the browser computes\n * something more specific (which we cannot observe via attribute changes).\n */\n private read(): KjDirection {\n const doc = this.doc;\n if (!doc) return 'ltr';\n const htmlDir = doc.documentElement?.getAttribute('dir');\n const bodyDir = doc.body?.getAttribute('dir');\n const value = (htmlDir ?? bodyDir ?? '').toLowerCase();\n return value === 'rtl' ? 'rtl' : 'ltr';\n }\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport type { KjListItem } from './item';\n\n/**\n * The single contract a consumer root directive (KjSelect, KjCombobox,\n * KjCommandPalette, …) implements + provides via\n * `useExisting: forwardRef(() => Self)`. Primitives read whichever\n * fields they need from this one object — items for the navigator,\n * `value` for the selection model, `visibleItems` for filter-aware nav.\n */\nexport interface KjListNavigatorConfig {\n /** All registered items in DOM order. Source of truth for nav + filter. */\n readonly items: Signal<readonly KjListItem<unknown>[]>;\n /** Filter-aware visible subset. Falls back to `items` when not provided. */\n readonly visibleItems?: Signal<readonly KjListItem<unknown>[]>;\n /**\n * Writable signal holding the canonical selection value (typically the\n * consumer's `model()` input). When the consumer provides\n * `KjSelectionModel`, it reads / writes through this signal — one\n * source of truth, no bridging effects. Optional: consumers without\n * selection state (e.g. KjCommandPalette) omit it.\n */\n readonly value?: WritableSignal<unknown | readonly unknown[] | null>;\n /**\n * Selection mode signal. When provided, `KjSelectionModel` follows it\n * reactively — consumers don't need to inject the model just to call\n * `setMode()`. Default `'single'`.\n */\n readonly mode?: Signal<KjListSelectionMode>;\n /**\n * Equality fn signal. When provided, `KjSelectionModel` follows it\n * reactively. Default `Object.is`.\n */\n readonly compareBy?: Signal<KjCompareFn<unknown>>;\n /**\n * Tree topology signal. When provided, `KjSelectionModel` follows it\n * reactively, so the consumer never needs to inject the model just\n * to call `setTreeShape()`. Required for `'leaf'` / `'cascade'`\n * selection modes; optional otherwise.\n */\n readonly treeShape?: Signal<KjTreeShape<unknown> | null>;\n /**\n * Consumer-side hook invoked by `KjListItem` immediately after it\n * toggles the shared `KjSelectionModel`. Lets the consumer do its\n * post-selection work (close an overlay, set an input query, emit a\n * commit event) without subscribing to every option's `activate`\n * output — pushing the repeat pattern down into one place.\n *\n * `closeRequested` mirrors `KjSelectionModel.toggle()`'s return value:\n * `true` in single mode, `false` in multi / leaf / cascade modes.\n */\n afterSelect?(value: unknown, closeRequested: boolean): void;\n}\n\nexport const KJ_LIST_NAVIGATOR_CONFIG =\n new InjectionToken<KjListNavigatorConfig>('KJ_LIST_NAVIGATOR_CONFIG');\n\n/**\n * Focus model for a list-style cluster:\n *\n * - `'activedescendant'` — host element keeps DOM focus; the active\n * option is signalled via `aria-activedescendant`. Default for\n * listbox / combobox / command-palette.\n * - `'roving'` — the active option *is* the focused element; focus\n * moves between options via roving `tabindex`. Used by menus,\n * menubars, tree-select.\n */\nexport type KjListFocusMode = 'activedescendant' | 'roving';\n\n/**\n * Provided by `KjListNavigator` so child `KjListItem`s can read the\n * current focus mode reactively and bind their own `tabindex`. Items\n * inject this `{ optional: true }` — when absent (no navigator on the\n * host) they fall back to `'activedescendant'` behavior.\n */\nexport const KJ_LIST_FOCUS_MODE =\n new InjectionToken<Signal<KjListFocusMode>>('KJ_LIST_FOCUS_MODE');\n\nexport type KjListOrientation = 'vertical' | 'horizontal' | 'both';\n\n/**\n * Selection modes supported by `KjSelectionModel`:\n *\n * - `'single'` — exactly one value (or `null`). Aria: `aria-selected=\"true\"` on the chosen item.\n * - `'multi'` — any combination from a flat list. Aria: `aria-selected=\"true|false\"` per item, container `aria-multiselectable=\"true\"`.\n * - `'leaf'` — multi over a tree, but only leaf nodes go into `value`. Branch clicks are no-ops. Requires `setTreeShape()`. Aria: `aria-selected`.\n * - `'cascade'` — tri-state tree selection. Toggling a branch selects/deselects all leaf descendants; the parent's state is computed from descendants (`true` / `false` / `mixed`). Requires `setTreeShape()`. Aria: `aria-checked=\"true|false|mixed\"` per WAI-ARIA tree checkbox pattern.\n */\nexport type KjListSelectionMode = 'single' | 'multi' | 'leaf' | 'cascade';\n\nexport type KjFilterFn = (query: string, haystacks: readonly string[]) => number;\nexport type KjCompareFn<T> = (a: T, b: T) => boolean;\n\n/**\n * Tree topology contract used by `KjSelectionModel` in `'leaf'` and\n * `'cascade'` modes. The consumer's root directive (typically\n * `KjTreeSelect`) implements + provides this via `setTreeShape()`.\n */\nexport interface KjTreeShape<T> {\n /** Parent of `node`, or `null` at the root. */\n getParent(node: T): T | null;\n /** Immediate children of `node`. Empty for leaves. */\n getChildren(node: T): readonly T[];\n /** `true` when `node` has no children. */\n isLeaf(node: T): boolean;\n}\n","// packages/core/src/primitives/list/type-ahead.ts\nimport { Injectable, signal } from '@angular/core';\nimport type { KjListItem } from './item';\n\n/**\n * Char-buffered type-ahead matcher used by `KjListNavigator` on\n * single-character key presses. Buffers characters within a debounce\n * window so users can type \"ap\" to jump to \"Apricot\" instead of just\n * \"Apple\". Matches case-insensitive prefix against `KjListItem.label()`.\n * Skips disabled items.\n *\n * @doc-category Core/Primitives\n */\n@Injectable()\nexport class KjTypeAhead {\n /** Debounce window (ms) that resets the buffer between key presses. */\n readonly debounceMs = signal(500);\n\n private _buffer = '';\n private _lastKeyAt = 0;\n\n /**\n * Append `key` to the buffer (reset if outside debounce window), then\n * return the id of the first non-disabled item whose label starts with\n * the buffered prefix. Returns `null` if no item matches.\n */\n match(key: string, items: readonly KjListItem<unknown>[]): string | null {\n if (key.length !== 1) return null;\n const now = performance.now();\n if (now - this._lastKeyAt > this.debounceMs()) this._buffer = '';\n this._buffer += key.toLowerCase();\n this._lastKeyAt = now;\n\n const needle = this._buffer;\n const hit = items.find(\n i => !i.disabled() && i.label().toLowerCase().startsWith(needle),\n );\n return hit?.id ?? null;\n }\n\n /** Clear the buffer and last-key timestamp. */\n reset(): void {\n this._buffer = '';\n this._lastKeyAt = 0;\n }\n}\n","// packages/core/src/primitives/list/navigator.ts\nimport {\n Directive,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n KJ_LIST_FOCUS_MODE,\n KJ_LIST_NAVIGATOR_CONFIG,\n type KjListFocusMode,\n type KjListOrientation,\n} from './tokens';\nimport { KjTypeAhead } from './type-ahead';\nimport type { KjListItem } from './item';\n\n/**\n * Container-side keyboard / active-descendant primitive. Hosted on the\n * listbox panel (select / command-palette) or the input element\n * (combobox). Owns `aria-activedescendant` and the ArrowUp/Down /\n * Home/End / PageUp/Down / Enter / Space / type-ahead contract for the\n * WAI-ARIA APG listbox + combobox patterns.\n *\n * @doc-category Core/Primitives\n */\n@Directive({\n selector: '[kjListNavigator]',\n exportAs: 'kjListNavigator',\n standalone: true,\n providers: [\n {\n provide: KJ_LIST_FOCUS_MODE,\n // The factory closes over the directive instance via `inject`,\n // exposing the live `kjFocusMode` signal to child `KjListItem`s.\n useFactory: () => inject(KjListNavigator).kjFocusMode,\n },\n ],\n host: {\n '[attr.aria-activedescendant]': 'kjFocusMode() === \"activedescendant\" ? activeId() : null',\n '(keydown)': '_onKeydown($event)',\n },\n})\nexport class KjListNavigator {\n /** Which axis the navigator responds to. Default: `'vertical'`. */\n readonly kjOrientation = input<KjListOrientation>('vertical');\n /** Wrap at ends instead of clamping. Default: `true`. */\n readonly kjWrap = input<boolean>(true);\n /** Items to skip per PageUp / PageDown. Default: `10`. */\n readonly kjPageSize = input<number>(10);\n /** Activate item on pointer hover. Default: `false`. */\n readonly kjActivateOnHover = input<boolean>(false);\n /**\n * Focus model. `'activedescendant'` (default) keeps DOM focus on the\n * navigator host and signals the active option via\n * `aria-activedescendant`. `'roving'` moves DOM focus onto the active\n * option itself via roving `tabindex`. Switch to `'roving'` for menu\n * / menubar / tree-select patterns where each item must be the focus\n * target (so screen-reader virtual-cursor and JAWS / NVDA forms-mode\n * line up with the visual highlight).\n */\n readonly kjFocusMode = input<KjListFocusMode>('activedescendant');\n\n /** Fires when the active item changes. Emits the new id or `null`. */\n readonly kjActiveChange = output<string | null>();\n\n private readonly cfg = inject(KJ_LIST_NAVIGATOR_CONFIG);\n private readonly typeAhead = inject(KjTypeAhead, { optional: true });\n\n private readonly _activeId = signal<string | null>(null);\n /**\n * Currently active item id, or `null`.\n * Bound to `aria-activedescendant` on the host element.\n */\n readonly activeId = this._activeId.asReadonly();\n\n /** Visible + non-disabled items in DOM order — the navigable set. */\n private readonly navigable = computed<readonly KjListItem<unknown>[]>(() => {\n const source = this.cfg.visibleItems?.() ?? this.cfg.items();\n return source.filter(i => !i.disabled());\n });\n\n constructor() {\n // Roving seed: when the focus model is `'roving'` and no item is\n // active yet, point at the first navigable so its `tabindex=0`\n // makes the list reachable by Tab on first render — required by\n // WAI-ARIA APG (menu / tree). In `'activedescendant'` mode the\n // listbox host itself is the Tab target, so seeding would\n // pre-highlight an option before the user has interacted, hurting\n // accessibility (false \"selected\" cue). Hence: roving only.\n effect(() => {\n if (this.kjFocusMode() !== 'roving') return;\n if (this._activeId() !== null) return;\n const first = this.navigable()[0];\n if (first) this._activeId.set(first.id);\n });\n\n // Roving focus follow: when the active item changes (keyboard nav,\n // pointer hover, programmatic setActive), move DOM focus onto its\n // host element so the browser's focus ring + screen-reader virtual\n // cursor track the visual highlight. Only relevant in roving mode\n // — activedescendant keeps focus on the navigator host element.\n effect(() => {\n if (this.kjFocusMode() !== 'roving') return;\n const item = this.activeItem();\n if (!item) return;\n const host = item._host();\n if (host && document.activeElement !== host) host.focus();\n });\n }\n\n /**\n * The resolved active item object, or `null` when nothing is active.\n * Derived from `activeId` and the current navigable set.\n */\n readonly activeItem = computed<KjListItem<unknown> | null>(() => {\n const id = this._activeId();\n return id ? this.navigable().find(i => i.id === id) ?? null : null;\n });\n\n /**\n * Set the active item by id. No-op when unchanged; emits `kjActiveChange`.\n * The `[attr.aria-activedescendant]` host binding flushes the change to\n * the DOM on the next change-detection cycle.\n */\n setActive(id: string | null): void {\n if (this._activeId() === id) return;\n this._activeId.set(id);\n this.kjActiveChange.emit(id);\n }\n\n /**\n * Move the active index by `delta` positions in the navigable set.\n * Respects `kjWrap` (wrap vs. clamp) and skips disabled items.\n */\n moveBy(delta: number): void {\n const items = this.navigable();\n if (!items.length) return;\n const currentIdx = items.findIndex(i => i.id === this._activeId());\n // When nothing is active and moving forward, start at -1 so that\n // +1 lands on index 0 (first item). Moving backward from nothing\n // starts at items.length so -1 lands on the last item.\n const startIdx = currentIdx === -1 ? (delta > 0 ? -1 : items.length) : currentIdx;\n let next = startIdx + delta;\n const last = items.length - 1;\n if (this.kjWrap()) {\n next = ((next % items.length) + items.length) % items.length;\n } else {\n if (next < 0) next = 0;\n if (next > last) next = last;\n }\n this.setActive(items[next].id);\n }\n\n /** Move the active item to the first item in the navigable set. */\n moveToFirst(): void {\n const items = this.navigable();\n if (items.length) this.setActive(items[0].id);\n }\n\n /** Move the active item to the last item in the navigable set. */\n moveToLast(): void {\n const items = this.navigable();\n if (items.length) this.setActive(items[items.length - 1].id);\n }\n\n /**\n * Invoke `_activate()` on the currently active item.\n * No-op when nothing is active.\n */\n activateCurrent(): void {\n this.activeItem()?._activate();\n }\n\n /** @internal Keydown handler bound via host binding. */\n _onKeydown(e: KeyboardEvent): void {\n const o = this.kjOrientation();\n const isV = o === 'vertical' || o === 'both';\n const isH = o === 'horizontal' || o === 'both';\n\n switch (e.key) {\n case 'ArrowDown':\n if (!isV) return;\n e.preventDefault();\n this.moveBy(1);\n return;\n case 'ArrowUp':\n if (!isV) return;\n e.preventDefault();\n this.moveBy(-1);\n return;\n case 'ArrowRight':\n if (!isH) return;\n e.preventDefault();\n this.moveBy(1);\n return;\n case 'ArrowLeft':\n if (!isH) return;\n e.preventDefault();\n this.moveBy(-1);\n return;\n case 'Home':\n e.preventDefault();\n this.moveToFirst();\n return;\n case 'End':\n e.preventDefault();\n this.moveToLast();\n return;\n case 'PageDown':\n e.preventDefault();\n this.moveBy(this.kjPageSize());\n return;\n case 'PageUp':\n e.preventDefault();\n this.moveBy(-this.kjPageSize());\n return;\n case 'Enter':\n case ' ':\n // Only preventDefault when we actually activate. Lets consumers\n // (e.g. combobox free-text Enter) fall through when nothing is\n // active, and lets Space type a literal space in a combobox input.\n if (this.activeItem()) {\n e.preventDefault();\n this.activateCurrent();\n }\n return;\n default: {\n if (e.key.length !== 1 || e.ctrlKey || e.metaKey || e.altKey) return;\n if (!this.typeAhead) return;\n const id = this.typeAhead.match(e.key, this.navigable());\n if (id) this.setActive(id);\n }\n }\n }\n}\n","// packages/core/src/primitives/list/selection.ts\nimport { Injectable, computed, effect, signal, type Signal, type WritableSignal } from '@angular/core';\nimport type { KjListItem } from './item';\nimport type {\n KjCompareFn,\n KjListSelectionMode,\n KjTreeShape,\n} from './tokens';\n\n/**\n * Selection state shared by a list-style consumer (KjSelect, KjCombobox,\n * KjTreeSelect, KjCascadeSelect). The consumer root calls {@link bind}\n * from its constructor to wire in its canonical signals — the model\n * reads/writes through those signals, so there is no second source of\n * truth and no cyclic DI dependency (the model does not inject the\n * root; the root injects the model).\n *\n * **Tree topology is first-class.** When the consumer supplies a\n * `treeShape` signal, the model uses it. Otherwise the model\n * **auto-derives** a shape from the registered `KjListItem` parent\n * pointers (each item injects its nearest ancestor `KjListItem` via the\n * element injector). That makes DOM-nested clusters (cascade-select,\n * sub-menus) tree-aware out of the box; flat data-driven clusters\n * (tree-select) keep using the explicit shape.\n *\n * Modes:\n * - `'single'` — replace + close. With a shape, branch toggles no-op\n * (only leaves enter `value`).\n * - `'multi'` — flat toggle in array\n * - `'leaf'` — tree-aware multi where only leaves enter `value`\n * - `'cascade'` — tri-state tree selection\n *\n * @doc-category Core/Primitives\n */\n@Injectable()\nexport class KjSelectionModel<T = unknown> {\n /**\n * Source signals. Replaced wholesale by {@link bind} so the\n * consumer's reactive inputs become the canonical state. `bind` MUST\n * be called from the consumer's constructor, before any descendant\n * `KjListItem._activate` fires.\n */\n private _value: WritableSignal<T | readonly T[] | null> =\n signal<T | readonly T[] | null>(null);\n private _items: Signal<readonly KjListItem<unknown>[] | null> = signal(null);\n private _modeSig: Signal<KjListSelectionMode> = signal<KjListSelectionMode>('single');\n private _cmpSig: Signal<KjCompareFn<T>> = signal(Object.is as KjCompareFn<T>);\n private _shapeSig: Signal<KjTreeShape<T> | null> = signal(null);\n\n private readonly _mode = signal<KjListSelectionMode>('single');\n private _compareBy: KjCompareFn<T> = Object.is as KjCompareFn<T>;\n private readonly _consumerShape = signal<KjTreeShape<T> | null>(null);\n\n constructor() {\n // Effects always re-evaluate the bound signals so the model stays\n // in sync whether the consumer rebinds during construction or\n // mutates the underlying signals later. Reading inside an effect\n // (rather than at construction time) means the model is robust to\n // property-initializer ordering on consumer roots.\n effect(() => this._mode.set(this._modeSig()));\n effect(() => { this._compareBy = this._cmpSig(); });\n effect(() => this._consumerShape.set(this._shapeSig()));\n }\n\n /**\n * Bind consumer-owned source signals. Each is optional; unbound keys\n * keep their previous source (defaulting to constants on first\n * construct). Call once in the consumer's constructor before any\n * descendant `KjListItem` activation fires.\n */\n bind(sources: {\n readonly value?: WritableSignal<T | readonly T[] | null>;\n readonly items?: Signal<readonly KjListItem<unknown>[]>;\n readonly mode?: Signal<KjListSelectionMode>;\n readonly compareBy?: Signal<KjCompareFn<T>>;\n readonly treeShape?: Signal<KjTreeShape<T> | null>;\n }): void {\n if (sources.value) this._value = sources.value;\n if (sources.items) this._items = sources.items as Signal<readonly KjListItem<unknown>[] | null>;\n if (sources.mode) this._modeSig = sources.mode;\n if (sources.compareBy) this._cmpSig = sources.compareBy;\n if (sources.treeShape) this._shapeSig = sources.treeShape;\n }\n\n /** Current mode. */\n readonly mode = this._mode.asReadonly();\n\n /**\n * Effective tree topology — consumer-supplied (`bind({ treeShape })`)\n * when present, otherwise auto-derived from registered `KjListItem`\n * parent pointers. Returns `null` when neither is available.\n */\n readonly shape: Signal<KjTreeShape<T> | null> = computed(() => {\n const explicit = this._consumerShape();\n if (explicit) return explicit;\n return this._autoShape();\n });\n\n /**\n * Auto-derived tree shape: a map of every registered item's value to\n * its parent value (and inverse children list), built from each\n * `KjListItem`'s injected `parent` reference. Only useful for\n * DOM-nested clusters (cascade-select, sub-menus); flat clusters\n * (tree-select) bind their own shape.\n */\n private readonly _autoShape: Signal<KjTreeShape<T> | null> = computed(() => {\n const items = this._items();\n if (!items || items.length === 0) return null;\n const parentOf = new Map<T, T | null>();\n const childrenOf = new Map<T, T[]>();\n const valueByItem = new Map<KjListItem<unknown>, T>();\n for (const it of items) {\n const v = it.value();\n if (v === undefined) continue;\n valueByItem.set(it, v as T);\n }\n for (const it of items) {\n const v = valueByItem.get(it);\n if (v === undefined) continue;\n const parentItem = it.parent;\n const parentV = parentItem ? valueByItem.get(parentItem) ?? null : null;\n parentOf.set(v, parentV);\n if (parentV !== null) {\n const arr = childrenOf.get(parentV) ?? [];\n arr.push(v);\n childrenOf.set(parentV, arr);\n }\n }\n const eq = this._compareBy;\n const findKey = (n: T): T | undefined => {\n for (const k of parentOf.keys()) {\n if (eq(k, n)) return k;\n }\n return undefined;\n };\n return {\n getParent: (n: T) => {\n const key = findKey(n);\n return key !== undefined ? (parentOf.get(key) ?? null) : null;\n },\n getChildren: (n: T) => {\n const key = findKey(n);\n return key !== undefined ? (childrenOf.get(key) ?? []) : [];\n },\n isLeaf: (n: T) => {\n const key = findKey(n);\n if (key === undefined) return true;\n return (childrenOf.get(key)?.length ?? 0) === 0;\n },\n };\n });\n\n /** Switch mode imperatively (consumers should prefer binding a signal). */\n setMode(mode: KjListSelectionMode): void {\n this._mode.set(mode);\n }\n\n /** Replace the current selection value (writes through the bound signal). */\n setValue(v: T | readonly T[] | null): void {\n this._value.set(v);\n }\n\n /** Override the equality function. Defaults to `Object.is`. */\n setCompareBy(fn: KjCompareFn<T>): void {\n this._compareBy = fn;\n }\n\n /**\n * Provide the tree topology imperatively. Pass `null` to clear and\n * fall back to the auto-derived shape.\n */\n setTreeShape(shape: KjTreeShape<T> | null): void {\n this._consumerShape.set(shape);\n }\n\n /**\n * Whether `target` is a leaf in the effective shape. Returns `true`\n * when no shape is available (flat lists — everything is a \"leaf\").\n */\n isLeaf(target: T): boolean {\n const s = this.shape();\n return s ? s.isLeaf(target) : true;\n }\n\n /**\n * Root → target value chain via the effective shape. Returns\n * `[target]` when the target has no parent in the shape, and an\n * empty array when no shape is available.\n */\n pathTo(target: T): readonly T[] {\n const s = this.shape();\n if (!s) return [];\n const reverse: T[] = [target];\n let cur: T | null = s.getParent(target);\n while (cur !== null) {\n reverse.unshift(cur);\n cur = s.getParent(cur);\n }\n return reverse;\n }\n\n /**\n * Activation gate. Returns `true` when committing `target` is\n * meaningful in the current mode + shape:\n * - `'single'` with a shape → only leaves activate. Branches are\n * blocked so they can serve as pure disclosure controls (open a\n * sub-panel) without leaking a branch value into `value`.\n * - `'single'` without a shape → any value activates.\n * - `'multi'` → any value activates.\n * - `'leaf'` → only leaves activate (mirrors `toggle`'s no-op).\n * - `'cascade'` → any value activates (tri-state toggle applies).\n */\n canActivate(target: T): boolean {\n const mode = this._mode();\n if (mode === 'multi' || mode === 'cascade') return true;\n const s = this.shape();\n if (!s) return true;\n return s.isLeaf(target);\n }\n\n /** Whether `target` is currently in the selection (membership check). */\n isSelected(target: T): boolean {\n const v = this._value();\n if (v === null) return false;\n const mode = this._mode();\n if (mode === 'multi' || mode === 'leaf' || mode === 'cascade') {\n return Array.isArray(v) && v.some(x => this._compareBy(x, target));\n }\n return this._compareBy(v as T, target);\n }\n\n /**\n * Tri-state for `'cascade'` mode. Walks descendants via the effective\n * tree shape:\n * - `'true'` — node and all leaf descendants are selected\n * - `'mixed'` — some but not all descendants are selected\n * - `'false'` — no descendants are selected\n *\n * In any other mode (or when no tree shape is set), returns `'true'`\n * / `'false'` based on `isSelected()`.\n */\n cascadeState(target: T): 'true' | 'false' | 'mixed' {\n const shape = this.shape();\n if (this._mode() !== 'cascade' || !shape) {\n return this.isSelected(target) ? 'true' : 'false';\n }\n return this._cascadeState(target, shape);\n }\n\n private _cascadeState(node: T, shape: KjTreeShape<T>): 'true' | 'false' | 'mixed' {\n if (shape.isLeaf(node)) {\n return this.isSelected(node) ? 'true' : 'false';\n }\n const children = shape.getChildren(node);\n if (children.length === 0) {\n return this.isSelected(node) ? 'true' : 'false';\n }\n let allTrue = true;\n let anyTrueOrMixed = false;\n for (const c of children) {\n const s = this._cascadeState(c, shape);\n if (s !== 'true') allTrue = false;\n if (s !== 'false') anyTrueOrMixed = true;\n }\n if (allTrue) return 'true';\n if (anyTrueOrMixed) return 'mixed';\n return 'false';\n }\n\n /**\n * Toggle `target` per the current mode:\n * - `'single'` — with a shape, branch targets no-op\n * (`closeRequested: false`); leaves replace value and return\n * `closeRequested: true`. Without a shape, replaces unconditionally.\n * - `'multi'` — flat toggle in array; `closeRequested: false`\n * - `'leaf'` — toggle only when `target` is a leaf; branches are no-ops\n * - `'cascade'` — toggle target + all leaf descendants based on current\n * tri-state (`'true'` deselects, `'false'`/`'mixed'` selects)\n */\n toggle(target: T): { closeRequested: boolean } {\n const mode = this._mode();\n const shape = this.shape();\n if (mode === 'cascade' && shape) {\n return this._cascadeToggle(target, shape);\n }\n if (mode === 'leaf' && shape) {\n if (!shape.isLeaf(target)) return { closeRequested: false };\n return this._multiToggle(target);\n }\n if (mode === 'multi' || mode === 'leaf' || mode === 'cascade') {\n return this._multiToggle(target);\n }\n // Single mode — gate branches when a shape is available.\n if (shape && !shape.isLeaf(target)) return { closeRequested: false };\n this._value.set(target);\n return { closeRequested: true };\n }\n\n private _multiToggle(target: T): { closeRequested: boolean } {\n const current = this._value();\n const arr = Array.isArray(current) ? [...current] : [];\n const idx = arr.findIndex(x => this._compareBy(x, target));\n if (idx >= 0) arr.splice(idx, 1);\n else arr.push(target);\n this._value.set(arr);\n return { closeRequested: false };\n }\n\n private _cascadeToggle(target: T, shape: KjTreeShape<T>): { closeRequested: boolean } {\n const currentState = this._cascadeState(target, shape);\n const shouldSelect = currentState !== 'true';\n\n const collectLeaves = (node: T): T[] => {\n if (shape.isLeaf(node)) return [node];\n const out: T[] = [];\n for (const c of shape.getChildren(node)) out.push(...collectLeaves(c));\n return out;\n };\n\n const leaves = collectLeaves(target);\n const current = this._value();\n const arr = Array.isArray(current) ? [...current] : [];\n\n for (const leaf of leaves) {\n const idx = arr.findIndex(x => this._compareBy(x, leaf));\n if (shouldSelect && idx < 0) arr.push(leaf);\n else if (!shouldSelect && idx >= 0) arr.splice(idx, 1);\n }\n\n this._value.set(arr);\n return { closeRequested: false };\n }\n\n /** Clear the selection. `single` → `null`; multi-style → `[]`. */\n clear(): void {\n const mode = this._mode();\n this._value.set(mode === 'single' ? null : []);\n }\n}\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { KjListNavigator } from './navigator';\nimport { KjSelectionModel } from './selection';\nimport { KJ_LIST_FOCUS_MODE, KJ_LIST_NAVIGATOR_CONFIG } from './tokens';\n\nlet _id = 0;\n\n/**\n * Behavior primitive for any item rendered inside a listbox / menu / tree.\n * Composes `KjDisabled`; mints a stable id; exposes value/label/haystacks;\n * binds `aria-disabled`, `aria-selected` (via injected `KjSelectionModel`),\n * `aria-posinset`/`aria-setsize` (stamped by `KjFilterableList`), and\n * `aria-keyshortcuts`. Activation (click / Enter / Space) fires an\n * `activate` output the consumer subscribes to. Role is set by the\n * consumer's outer directive — varies per cluster.\n *\n * @doc-category Core/Primitives\n */\n@Directive({\n selector: '[kjListItem]',\n exportAs: 'kjListItem',\n standalone: true,\n host: {\n '[hidden]': '!visible()',\n '[attr.tabindex]': 'tabIndex()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.aria-selected]': 'ariaSelected()',\n '[attr.aria-checked]': 'ariaChecked()',\n '[attr.aria-posinset]': 'posInSet()',\n '[attr.aria-setsize]': 'setSize()',\n '[attr.aria-keyshortcuts]': 'kjShortcut() || null',\n '(click)': '_activate($event)',\n '(keydown.enter)': '$event.preventDefault(); _activate($event)',\n '(keydown.space)': '$event.preventDefault(); _activate($event)',\n },\n})\nexport class KjListItem<T = unknown> implements AfterContentInit {\n /** Typed value emitted on activation. `undefined` when unset. */\n readonly kjItemValue = input<T | undefined>(undefined);\n /** Display label. Falls back to element text content when empty. */\n readonly kjItemLabel = input<string>('');\n /** Extra search terms merged into `haystacks` for type-ahead / filter matching. */\n readonly kjItemKeywords = input<readonly string[]>([]);\n /** ARIA keyboard shortcut string bound to `aria-keyshortcuts`. Omit to suppress the attribute. */\n readonly kjShortcut = input<string | null>(null);\n /**\n * Disabled flag. Declared as a top-level input (rather than as a\n * `hostDirective` forward) so consumers that compose `KjListItem`\n * inside their own `hostDirectives` (`KjOption`, `KjTreeSelectNode`,\n * …) can re-forward it without falling foul of NG0311. The composed\n * `KjDisabled` instance follows this signal via an effect below.\n */\n readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Fires when the item is activated (click / Enter / Space) and not disabled. Emits `value()`. */\n readonly activate = output<T | undefined>();\n\n /**\n * Stable id used by `aria-activedescendant`. Resolved at construction.\n * Priority: existing host `id` attribute (static markup) → generated\n * `kj-list-item-N`. To pin an id, write `<el id=\"my-id\" kjListItem>`.\n */\n readonly id: string;\n\n private readonly el = inject(ElementRef<HTMLElement>);\n readonly disabled = this.kjDisabled;\n\n /**\n * Nearest ancestor `KjListItem` resolved via the element injector\n * (`skipSelf`, `optional`). Surfaces the DOM-nested parent → child\n * relationship to the selection model, which auto-derives a tree\n * shape from these pointers when the consumer does not supply one\n * via `cfg.treeShape`. Flat consumers (e.g. data-driven tree-select)\n * pass an explicit shape and this pointer is ignored.\n */\n readonly parent = inject<KjListItem<unknown> | null>(KjListItem, {\n skipSelf: true,\n optional: true,\n });\n\n // Optional — only present when this item lives inside a\n // `[kjListNavigator]` (the common case). Read by `tabIndex()` so the\n // item can reactively re-bind its host `tabindex` as activeId moves.\n // forwardRef avoids the navigator <-> item circular reference issue.\n private readonly navigator = inject<KjListNavigator | null>(\n forwardRef(() => KjListNavigator),\n { optional: true },\n );\n // Focus mode signal provided by the navigator. Optional: when no\n // navigator hosts this item, fall back to activedescendant behavior\n // (always `-1`) — matches the legacy tabindex output.\n private readonly focusMode = inject(KJ_LIST_FOCUS_MODE, { optional: true });\n\n constructor() {\n const host = this.el.nativeElement;\n this.id = host.id || `kj-list-item-${++_id}`;\n host.id = this.id;\n }\n\n /** @internal Native host element. Used by `KjListNavigator` to call `.focus()` in roving mode. */\n _host(): HTMLElement {\n return this.el.nativeElement;\n }\n\n /**\n * Reactive `tabindex` for the host element:\n * - No navigator / `'activedescendant'`: always `-1` — the navigator\n * host owns the Tab stop and signals activation via\n * `aria-activedescendant`.\n * - `'roving'`: `0` for the currently active (focused) item and `-1`\n * for the rest. Disabled items are never active because\n * `KjListNavigator.navigable` filters them out, so they naturally\n * read `-1` here.\n */\n readonly tabIndex = computed<string>(() => {\n const mode = this.focusMode?.();\n if (mode !== 'roving') return '-1';\n if (this.disabled()) return '-1';\n return this.navigator?.activeId() === this.id ? '0' : '-1';\n });\n\n private readonly _elText = signal('');\n readonly value = computed<T | undefined>(() => this.kjItemValue());\n readonly label = computed(() => (this.kjItemLabel() || this._elText()).trim());\n readonly haystacks = computed<readonly string[]>(() => [this.label(), ...this.kjItemKeywords()]);\n\n private readonly _visible = signal(true);\n readonly visible = this._visible.asReadonly();\n setVisible(v: boolean): void { this._visible.set(v); }\n\n /**\n * Position in the visible (filter-aware) set, bound to `aria-posinset`.\n * Writable for internal use by `KjFilterableList` only; consumers\n * should treat it as read-only.\n */\n readonly posInSet = signal<number | null>(null);\n /**\n * Total size of the visible (filter-aware) set, bound to `aria-setsize`.\n * Writable for internal use by `KjFilterableList` only; consumers\n * should treat it as read-only.\n */\n readonly setSize = signal<number | null>(null);\n\n private readonly selection = inject(KjSelectionModel, { optional: true }) as KjSelectionModel<T> | null;\n private readonly cfg = inject(KJ_LIST_NAVIGATOR_CONFIG, { optional: true });\n\n /**\n * `aria-selected` driven by the injected selection model. `null` when\n * no model is provided, the value is undefined, or the mode is\n * `'cascade'` (which uses `aria-checked` instead, per WAI-ARIA tree).\n */\n readonly ariaSelected = computed<'true' | 'false' | null>(() => {\n if (!this.selection) return null;\n if (this.selection.mode() === 'cascade') return null;\n const v = this.value();\n if (v === undefined) return null;\n return this.selection.isSelected(v) ? 'true' : 'false';\n });\n\n /**\n * `aria-checked` driven by `KjSelectionModel.cascadeState()` when the\n * mode is `'cascade'`. Returns `'true'` / `'false'` / `'mixed'` per\n * the WAI-ARIA tree checkbox tri-state pattern. `null` (attribute\n * omitted) in any other mode.\n */\n readonly ariaChecked = computed<'true' | 'false' | 'mixed' | null>(() => {\n if (!this.selection || this.selection.mode() !== 'cascade') return null;\n const v = this.value();\n if (v === undefined) return null;\n return this.selection.cascadeState(v);\n });\n\n ngAfterContentInit(): void {\n this._elText.set(this.el.nativeElement.textContent ?? '');\n }\n\n _activate(event?: Event): void {\n if (this.disabled()) return;\n const v = this.value();\n // Branch gate owned by the selection model: in `'single'` mode\n // with a tree shape (consumer-supplied or auto-derived from\n // KjListItem parent DI), non-leaf targets must not commit a value\n // — they exist purely as disclosure controls (e.g. cascade-select\n // branch options that only toggle their own sub-panel). Runs\n // before `stopPropagation` so a blocked click can still reach the\n // consumer's own host listener.\n if (v !== undefined && this.selection && !this.selection.canActivate(v)) return;\n // Stop bubbling so a click on a nested `kjListItem` doesn't also\n // activate the ancestor item (matters for tree-style consumers\n // where leaf nodes are rendered inside their parent branch's host\n // element — without this, the leaf activation would be followed\n // by the branch's `_activate` overriding the selection).\n event?.stopPropagation();\n // Selection toggle + consumer hook live here — not in the option\n // wrapper — because every list-style cluster that wires a\n // `KjSelectionModel` repeats the same two steps after activation:\n // (1) toggle the value, (2) run consumer-specific side-effects\n // (close the overlay, set an input query, emit a commit event).\n // Centralizing both removes the per-option `activate.subscribe(...)`\n // boilerplate. `afterSelect` is invoked even when the toggle was a\n // no-op (e.g. leaf-mode branch click) so consumers can decide what\n // counts as \"select\" — they receive `closeRequested` to gate on.\n let closeRequested = false;\n if (this.selection && v !== undefined) {\n ({ closeRequested } = this.selection.toggle(v));\n }\n this.cfg?.afterSelect?.(v, closeRequested);\n this.activate.emit(v);\n }\n}\n","// packages/core/src/primitives/list/filterable-list.ts\nimport { Injectable, type Signal, computed, effect, signal } from '@angular/core';\nimport type { KjFilterFn } from './tokens';\nimport type { KjListItem } from './item';\n\nconst defaultSubstring: KjFilterFn = (q, hs) => {\n if (!q) return 1;\n const needle = q.toLowerCase();\n return hs.some(h => h.toLowerCase().includes(needle)) ? 1 : 0;\n};\n\nconst EMPTY_ITEMS = signal<readonly KjListItem<unknown>[]>([]);\n\n/**\n * Filter / search state for a list-style consumer (KjCombobox,\n * KjCommandPalette). Reads its items source + filter inputs through\n * {@link bind}, so no DI lookup is needed at construction (which sidesteps\n * the cyclic dep that arises when the root provides itself under\n * `KJ_LIST_NAVIGATOR_CONFIG` and `KjFilterableList` together).\n *\n * Side effects (via `effect`):\n * - Calls `item.setVisible(bool)` on every item to reflect filter state.\n * - Stamps `item.posInSet` / `item.setSize` for visible items; clears\n * them to `null` for hidden items.\n *\n * Exposes `visibleItems`, `visibleCount`, `isEmpty`, plus a human\n * `announcement()` signal consumers wire into a `kjLiveRegion` so\n * WCAG 4.1.3 (Status Messages) is honored.\n *\n * @doc-category Core/Primitives\n */\n@Injectable()\nexport class KjFilterableList<T = unknown> {\n /**\n * Source signals. Replaced wholesale by {@link bind} so the consumer's\n * reactive inputs become the canonical state. `bind` MUST be called\n * from the consumer's constructor, before any downstream consumer\n * (e.g. KjListNavigator) subscribes to `visibleItems`.\n */\n private _items: Signal<readonly KjListItem<T>[]> = EMPTY_ITEMS as Signal<readonly KjListItem<T>[]>;\n private _query: Signal<string> = signal('');\n private _filterFn: Signal<KjFilterFn> = signal(defaultSubstring);\n private _shouldFilter: Signal<boolean> = signal(true);\n private _autoActivateFirst: Signal<boolean> = signal(true);\n\n /** Current query string. */\n readonly query = () => this._query();\n\n /** Items passing the current filter. */\n readonly visibleItems = computed<readonly KjListItem<T>[]>(() => {\n const all = this._items();\n if (!this._shouldFilter()) return all;\n const q = this._query();\n const fn = this._filterFn();\n return all.filter(i => fn(q, i.haystacks()) > 0);\n });\n\n /** Count of visible items. */\n readonly visibleCount = computed(() => this.visibleItems().length);\n\n /** True when no items match the current filter. */\n readonly isEmpty = computed(() => this.visibleCount() === 0);\n\n /**\n * Human-readable status string for `aria-live` regions.\n * Returns `'N results'` or `'No results'`. Wire to `kjLiveRegion`\n * to satisfy WCAG 4.1.3 Status Messages.\n */\n readonly announcement = computed(() =>\n this.isEmpty() ? 'No results' : `${this.visibleCount()} results`,\n );\n\n /**\n * Read-only view of the auto-activate-first toggle. When `true`,\n * consumers should activate the first visible item on each query change.\n * This service does NOT activate items itself; the consumer reads it.\n */\n readonly autoActivateFirst = () => this._autoActivateFirst();\n\n /**\n * Bind consumer-owned source signals. Each is optional; unbound keys\n * keep their previous source (defaulting to constants on first construct).\n *\n * Replaces the imperative setter-in-effect pattern when the consumer\n * holds the canonical reactive state (typically a `model()` /\n * `input()` / `contentChildren()`). Call once in the consumer's\n * constructor before any downstream `computed` / `effect` subscribes\n * to `visibleItems`.\n */\n bind(sources: {\n readonly items?: Signal<readonly KjListItem<T>[]>;\n readonly query?: Signal<string>;\n readonly filterFn?: Signal<KjFilterFn>;\n readonly shouldFilter?: Signal<boolean>;\n readonly autoActivateFirst?: Signal<boolean>;\n }): void {\n if (sources.items) this._items = sources.items;\n if (sources.query) this._query = sources.query;\n if (sources.filterFn) this._filterFn = sources.filterFn;\n if (sources.shouldFilter) this._shouldFilter = sources.shouldFilter;\n if (sources.autoActivateFirst) this._autoActivateFirst = sources.autoActivateFirst;\n }\n\n constructor() {\n // Toggle visibility + stamp posInSet/setSize on each item whenever\n // the filtered visible set changes.\n effect(() => {\n const all = this._items();\n const visible = this.visibleItems() as readonly KjListItem<unknown>[];\n const visibleSet = new Set(visible.map(v => v.id));\n const total = visible.length;\n let i = 0;\n for (const item of all) {\n const isVisible = visibleSet.has(item.id);\n item.setVisible(isVisible);\n if (isVisible) {\n item.posInSet.set(++i);\n item.setSize.set(total);\n } else {\n item.posInSet.set(null);\n item.setSize.set(null);\n }\n }\n });\n }\n}\n","// packages/core/src/primitives/list/group.ts\nimport {\n Directive,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { KjListItem } from './item';\n\nlet _groupId = 0;\nlet _labelId = 0;\n\n/**\n * Wraps a subset of `KjListItem`s inside a list-style container\n * (listbox / menu / tree). Sets `role=\"group\"` and auto-hides itself\n * when every child item is filter-hidden — so the section header (and\n * any visual chrome it provides) disappears with its options instead\n * of leaving an empty gap.\n *\n * Pair with `[kjListGroupLabel]` on a heading element inside the group\n * to wire `aria-labelledby` for screen readers.\n *\n * Items inside groups remain visible to the parent root's\n * `contentChildren(KjListItem, { descendants: true })` query, so the\n * navigator and filter primitives see them unchanged.\n *\n * @example\n * ```html\n * <kj-select-content>\n * <div kjListGroup>\n * <div kjListGroupLabel>Fruits</div>\n * <div kjOption [kjOptionValue]=\"'apple'\">Apple</div>\n * <div kjOption [kjOptionValue]=\"'banana'\">Banana</div>\n * </div>\n * <hr kjListSeparator />\n * <div kjListGroup>\n * <div kjListGroupLabel>Vegetables</div>\n * <div kjOption [kjOptionValue]=\"'carrot'\">Carrot</div>\n * </div>\n * </kj-select-content>\n * ```\n *\n * @doc-category Core/Primitives\n */\n@Directive({\n selector: '[kjListGroup]',\n exportAs: 'kjListGroup',\n standalone: true,\n host: {\n 'role': 'group',\n '[attr.id]': 'id()',\n '[attr.aria-labelledby]': 'labelId()',\n '[hidden]': 'isHidden()',\n },\n})\nexport class KjListGroup {\n /** Optional override id. Falls back to a generated `kj-list-group-N`. */\n readonly kjId = input<string>('');\n\n private readonly _fallbackId = `kj-list-group-${++_groupId}`;\n\n /**\n * Resolved id used by the host `id` attribute and as the target of any\n * child label's `aria-labelledby`. Reactively follows `kjId` when set.\n */\n readonly id = computed(() => this.kjId() || this._fallbackId);\n\n /** Items directly under this group. Source of truth for auto-hide. */\n readonly items = contentChildren(KjListItem, { descendants: true });\n\n private readonly _labelId = signal<string | null>(null);\n /** id of the `[kjListGroupLabel]` child (if any), bound to `aria-labelledby`. */\n readonly labelId = this._labelId.asReadonly();\n\n /** @internal — registered by a `[kjListGroupLabel]` child. */\n setLabelId(id: string | null): void { this._labelId.set(id); }\n\n /**\n * Hidden when the group has items AND every item is filter-hidden.\n * An empty group (no projected items) is treated as visible — the\n * consumer may be loading content async.\n */\n readonly isHidden = computed(() => {\n const items = this.items();\n if (items.length === 0) return false;\n return items.every(i => !i.visible());\n });\n}\n\n/**\n * Heading inside a `[kjListGroup]`. Mints a stable id and registers it\n * with the surrounding group so the wrapper picks it up via\n * `aria-labelledby`. The host `id` attribute is bound from the resolved\n * id — write `id=\"my-id\"` on the element to override.\n *\n * @doc-category Core/Primitives\n */\n@Directive({\n selector: '[kjListGroupLabel]',\n exportAs: 'kjListGroupLabel',\n standalone: true,\n host: {\n '[attr.id]': 'id()',\n },\n})\nexport class KjListGroupLabel {\n /** Optional override id. Falls back to a generated `kj-list-group-label-N`. */\n readonly kjId = input<string>('');\n\n private readonly _fallbackId = `kj-list-group-label-${++_labelId}`;\n\n /** Resolved id used by the host `id` attribute and by the parent group. */\n readonly id = computed(() => this.kjId() || this._fallbackId);\n\n private readonly group = inject(KjListGroup);\n\n constructor() {\n effect(() => this.group.setLabelId(this.id()));\n }\n}\n\n/**\n * Visual divider between groups (or arbitrary items). Non-interactive.\n * Sets `role=\"separator\"` + `aria-orientation=\"horizontal\"` per ARIA.\n *\n * @doc-category Core/Primitives\n */\n@Directive({\n selector: '[kjListSeparator]',\n standalone: true,\n host: {\n 'role': 'separator',\n 'aria-orientation': 'horizontal',\n },\n})\nexport class KjListSeparator {}\n","import { inject } from '@angular/core';\nimport { KjListItem } from './item';\nimport { KjSelectionModel } from './selection';\nimport { KjFilterableList } from './filterable-list';\n\nexport const injectListItem = <T>() => inject(KjListItem) as KjListItem<T>;\nexport const injectSelectionModel = <T>() => inject(KjSelectionModel) as KjSelectionModel<T>;\nexport const injectFilterableList = <T>() => inject(KjFilterableList) as KjFilterableList<T>;\n","import { computed, isSignal, Signal, untracked } from '@angular/core';\n\n/**\n * Recursively narrowed signal view of a record. The root behaves like any\n * `Signal<T>` (callable, returns the whole value), and each plain-record\n * property is exposed as a child signal — recursively, so deeply-nested\n * record fields stay reactive without manually wiring `computed()` calls.\n *\n * Implementation is a near-direct port of @ngrx/signals' `toDeepSignal`\n * (see {@link https://github.com/ngrx/platform/blob/a469cbf015628f30fe1fd2a995d6289cdfc26285/modules/signals/src/deep-signal.ts}).\n * We inline it here to avoid the @ngrx/signals dependency for a single\n * helper. Credit: NgRx contributors, MIT.\n */\nexport type DeepSignal<T> = Signal<T> &\n (IsKnownRecord<T> extends true\n ? Readonly<{\n [K in keyof T]: IsKnownRecord<T[K]> extends true\n ? DeepSignal<T[K]>\n : Signal<T[K]>;\n }>\n : unknown);\n\ntype IsKnownRecord<T> = T extends object\n ? T extends\n | readonly unknown[]\n | Set<unknown>\n | Map<unknown, unknown>\n | WeakSet<object>\n | WeakMap<object, unknown>\n | Date\n | RegExp\n | Promise<unknown>\n | Error\n | ((...args: never) => unknown)\n ? false\n : true\n : false;\n\nconst DEEP_SIGNAL = Symbol('kj.deep-signal');\n\n/**\n * Wraps a `Signal<T>` so that `result.foo` returns a child `Signal<T['foo']>`\n * (lazily memoised), recursively for nested plain records. The root proxy is\n * still callable — `result()` returns the full `T`.\n *\n * @example\n * ```ts\n * const root = signal({ a: 1, b: { c: 'x' } });\n * const deep = toDeepSignal(root.asReadonly());\n * deep(); // { a: 1, b: { c: 'x' } }\n * deep.a(); // 1\n * deep.b.c(); // 'x'\n * ```\n */\nexport function toDeepSignal<T>(source: Signal<T>): DeepSignal<T> {\n return new Proxy(source as Signal<T> & Record<PropertyKey, unknown>, {\n has(target, prop): boolean {\n return !!(this.get!(target, prop, undefined) as unknown);\n },\n get(target, prop) {\n const value = untracked(target as Signal<T>);\n if (!isRecord(value) || !(prop in value)) {\n const existing = target[prop];\n if (isSignal(existing) && (existing as { [DEEP_SIGNAL]?: true })[DEEP_SIGNAL]) {\n delete target[prop];\n }\n return target[prop];\n }\n if (!isSignal(target[prop])) {\n const child = computed(() => (target as Signal<Record<PropertyKey, unknown>>)()[prop]);\n (child as { [DEEP_SIGNAL]?: true })[DEEP_SIGNAL] = true;\n Object.defineProperty(target, prop, {\n value: child,\n configurable: true,\n });\n }\n return toDeepSignal(target[prop] as Signal<unknown>);\n },\n }) as DeepSignal<T>;\n}\n\nconst nonRecords: ReadonlyArray<new (...args: never[]) => unknown> = [\n WeakSet,\n WeakMap,\n Promise,\n Date,\n Error,\n RegExp,\n ArrayBuffer,\n DataView,\n Function,\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object' || isIterable(value)) {\n return false;\n }\n let proto = Object.getPrototypeOf(value);\n if (proto === Object.prototype) return true;\n while (proto && proto !== Object.prototype) {\n if (nonRecords.includes(proto.constructor)) return false;\n proto = Object.getPrototypeOf(proto);\n }\n return proto === Object.prototype;\n}\n\nfunction isIterable(value: unknown): value is Iterable<unknown> {\n return typeof (value as { [Symbol.iterator]?: unknown })?.[Symbol.iterator] === 'function';\n}\n","import { Directive, computed, input } from '@angular/core';\n\n/**\n * Wires `aria-describedby` to one or more element IDs.\n * Accepts a single ID string or an array of ID strings.\n * Removes the attribute automatically when the value is empty.\n *\n * @example\n * ```html\n * <input kjAriaDescribedBy [kjDescribedBy]=\"['hint-id', errorId()]\" />\n * <span id=\"hint-id\">Format: DD/MM/YYYY</span>\n * ```\n * @doc-category Core/Accessibility\n * @doc\n * @doc-name a11y\n * @doc-description Wires `aria-describedby` from a single id or an array of ids onto any element.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjAriaDescribedBy]',\n standalone: true,\n host: {\n '[attr.aria-describedby]': 'ariaDescribedBy()',\n },\n})\nexport class KjAriaDescribedBy {\n /** One or more element IDs to reference via `aria-describedby`. */\n kjDescribedBy = input<string | readonly string[]>('');\n\n /** @internal */\n readonly ariaDescribedBy = computed(() => {\n const val = this.kjDescribedBy();\n const ids = Array.isArray(val) ? val : [val];\n const filtered = ids.filter(Boolean);\n return filtered.length ? filtered.join(' ') : null;\n });\n}\n","import { Directive, computed, input } from '@angular/core';\n\n/**\n * Wires `aria-labelledby` to one or more element IDs.\n * Accepts a single ID string or an array of ID strings.\n * Removes the attribute automatically when the value is empty.\n *\n * @example\n * ```html\n * <section kjAriaLabelledBy [kjLabelledBy]=\"'features-heading'\">\n * <h2 id=\"features-heading\">Features</h2>\n * …\n * </section>\n * ```\n * @doc-category Core/Accessibility\n * @doc\n * @doc-name a11y\n * @doc-description Wires `aria-labelledby` from a single id or an array of ids onto any element.\n */\n@Directive({\n selector: '[kjAriaLabelledBy]',\n standalone: true,\n host: {\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\n },\n})\nexport class KjAriaLabelledBy {\n /** One or more element IDs to reference via `aria-labelledby`. */\n kjLabelledBy = input<string | readonly string[]>('');\n\n /** @internal */\n readonly ariaLabelledBy = computed(() => {\n const val = this.kjLabelledBy();\n const ids = Array.isArray(val) ? val : [val];\n const filtered = ids.filter(Boolean);\n return filtered.length ? filtered.join(' ') : null;\n });\n}\n","import { Directive, DestroyRef, ElementRef, afterNextRender, inject, input } from '@angular/core';\nimport { PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nconst FOCUSABLE = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled])',\n 'select:not([disabled])', 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])', '[contenteditable=\"true\"]',\n].join(',');\n\n/**\n * Traps keyboard focus within the host element using a native Tab-key interceptor.\n * Designed for modal dialogs, drawers, and other overlay patterns.\n *\n * @example\n * ```html\n * <div role=\"dialog\" kjFocusTrap [kjFocusTrapEnabled]=\"isOpen()\">\n * <button>Action</button>\n * </div>\n * ```\n * @doc-category Core/Accessibility\n * @doc\n * @doc-name a11y\n */\n@Directive({\n selector: '[kjFocusTrap]',\n standalone: true,\n})\nexport class KjFocusTrap {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n\n /** Whether the focus trap is active. Set to true when the overlay is open. */\n kjFocusTrapEnabled = input<boolean>(false);\n\n constructor() {\n afterNextRender(() => {\n if (!isPlatformBrowser(this.platformId)) return;\n\n const handleKeydown = (e: KeyboardEvent) => {\n if (!this.kjFocusTrapEnabled() || e.key !== 'Tab') return;\n const focusable = (Array.from(\n this.el.nativeElement.querySelectorAll(FOCUSABLE)\n ) as HTMLElement[]).filter(el => !el.closest('[hidden]') && getComputedStyle(el).display !== 'none');\n\n if (!focusable.length) { e.preventDefault(); return; }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === first || !this.el.nativeElement.contains(document.activeElement)) {\n e.preventDefault(); last.focus();\n }\n } else {\n if (document.activeElement === last || !this.el.nativeElement.contains(document.activeElement)) {\n e.preventDefault(); first.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleKeydown);\n this.destroyRef.onDestroy(() => document.removeEventListener('keydown', handleKeydown));\n });\n }\n\n /** Focuses the first tabbable element inside the trap. */\n focusFirst(): void {\n const el = this.el.nativeElement.querySelector(FOCUSABLE) as HTMLElement | null;\n el?.focus();\n }\n}\n","import { Directive, ElementRef, inject, input } from '@angular/core';\n\n/** Politeness setting for ARIA live regions. */\nexport type KjLivePoliteness = 'off' | 'polite' | 'assertive';\n\n/**\n * Marks an element as an ARIA live region and exposes an `announce` method\n * for programmatically pushing announcements to screen readers via DOM text content.\n *\n * @example\n * ```html\n * <div kjLiveRegion [kjPoliteness]=\"'polite'\" #region=\"kjLiveRegion\"></div>\n * <button (click)=\"region.announce('Item saved')\">Save</button>\n * ```\n * @doc-category Core/Accessibility\n * @doc\n * @doc-name a11y\n */\n@Directive({\n selector: '[kjLiveRegion]',\n standalone: true,\n exportAs: 'kjLiveRegion',\n host: {\n '[attr.aria-live]': 'kjPoliteness()',\n '[attr.aria-atomic]': '\"true\"',\n },\n})\nexport class KjLiveRegion {\n private readonly el = inject(ElementRef<HTMLElement>);\n\n /** The ARIA live politeness setting. Defaults to `'polite'`. */\n kjPoliteness = input<KjLivePoliteness>('polite');\n\n /**\n * Announces a message to screen readers by briefly clearing and re-setting text.\n * @param message - The message to announce.\n * @param durationMs - Optional duration in ms before clearing the announcement.\n */\n announce(message: string, durationMs?: number): void {\n const el = this.el.nativeElement;\n el.textContent = '';\n // Brief timeout lets screen readers detect the content change.\n setTimeout(() => {\n el.textContent = message;\n if (durationMs != null) {\n setTimeout(() => { el.textContent = ''; }, durationMs);\n }\n }, 50);\n }\n}\n","import {\n Directive,\n ElementRef,\n InjectionToken,\n contentChildren,\n effect,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\n\n/** Context token for roving tabindex coordination. */\nexport const KJ_ROVING_TABINDEX = new InjectionToken<KjRovingTabindex>(\n 'KjRovingTabindex',\n);\n\n/**\n * Marks an individual item within a `[kjRovingTabindex]` container.\n * Its `tabindex` is managed automatically by the parent directive.\n *\n * @example\n * ```html\n * <button kjRovingTabindexItem>Item</button>\n * ```\n * @doc-category Core/Accessibility\n * @doc\n * @doc-name a11y\n */\n@Directive({\n selector: '[kjRovingTabindexItem]',\n standalone: true,\n host: {\n '[attr.tabindex]': 'active() ? \"0\" : \"-1\"',\n },\n})\nexport class KjRovingTabindexItemDirective {\n /** @internal */\n readonly el = inject(ElementRef<HTMLElement>);\n /** @internal */\n readonly active = signal(false);\n}\n\n/**\n * Implements the roving tabindex pattern for composite widgets such as toolbars and tab lists.\n * Only one item has `tabindex=\"0\"` at a time; arrow keys move focus between items.\n *\n * @example\n * ```html\n * <div kjRovingTabindex role=\"toolbar\" aria-label=\"Formatting\">\n * <button kjRovingTabindexItem>Bold</button>\n * <button kjRovingTabindexItem>Italic</button>\n * </div>\n * ```\n * @doc-category Core/Accessibility\n * @doc\n * @doc-name a11y\n */\n@Directive({\n selector: '[kjRovingTabindex]',\n standalone: true,\n providers: [{ provide: KJ_ROVING_TABINDEX, useExisting: forwardRef(() => KjRovingTabindex) }],\n host: {\n '(keydown)': 'onKeydown($event)',\n '(focusin)': 'onFocusIn($event)',\n },\n})\nexport class KjRovingTabindex {\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly items = contentChildren(KjRovingTabindexItemDirective, {\n descendants: true,\n });\n private readonly activeIndex = signal(0);\n\n /**\n * Restricts arrow-key navigation to a single axis.\n * - `'horizontal'`: only ArrowLeft / ArrowRight move focus.\n * - `'vertical'`: only ArrowUp / ArrowDown move focus.\n * - `'both'`: all four arrow keys move focus (default — preserves prior behaviour).\n *\n * Under `'horizontal'`, ArrowLeft / ArrowRight are swapped when the host\n * element resolves to `dir=\"rtl\"`.\n */\n readonly kjRovingOrientation = input<'horizontal' | 'vertical' | 'both'>('both');\n\n constructor() {\n effect(() => {\n const all = this.items();\n all.forEach((item, i) => item.active.set(i === this.activeIndex()));\n });\n }\n\n private resolveRtl(): boolean {\n const el = this.host.nativeElement;\n if (typeof getComputedStyle === 'function') {\n const direction = getComputedStyle(el).direction;\n if (direction === 'rtl') return true;\n if (direction === 'ltr') {\n // Some test environments (jsdom) return the default 'ltr' even when an\n // ancestor sets `dir=\"rtl\"`. Fall through to attribute lookup.\n }\n }\n const dirHost = el.closest('[dir]') as HTMLElement | null;\n return dirHost?.dir.toLowerCase() === 'rtl';\n }\n\n /** @internal — syncs activeIndex when focus moves into an item programmatically */\n onFocusIn(event: FocusEvent): void {\n const all = this.items();\n const idx = all.findIndex((item) => item.el.nativeElement === event.target);\n if (idx !== -1) {\n this.activeIndex.set(idx);\n }\n }\n\n /** @internal */\n onKeydown(event: KeyboardEvent): void {\n const all = this.items();\n if (!all.length) return;\n let next = this.activeIndex();\n\n const orientation = this.kjRovingOrientation();\n const horizontalActive = orientation === 'horizontal' || orientation === 'both';\n const verticalActive = orientation === 'vertical' || orientation === 'both';\n\n // Resolve directionality lazily; only matters when horizontal arrows are active.\n // Prefer computed style; fall back to the nearest `dir` attribute (jsdom does\n // not propagate ancestor `dir` to computed style in all cases).\n const isRtl = horizontalActive && this.resolveRtl();\n const forwardKey = isRtl ? 'ArrowLeft' : 'ArrowRight';\n const backwardKey = isRtl ? 'ArrowRight' : 'ArrowLeft';\n\n if (horizontalActive && event.key === forwardKey) {\n next = (next + 1) % all.length;\n } else if (horizontalActive && event.key === backwardKey) {\n next = (next - 1 + all.length) % all.length;\n } else if (verticalActive && event.key === 'ArrowDown') {\n next = (next + 1) % all.length;\n } else if (verticalActive && event.key === 'ArrowUp') {\n next = (next - 1 + all.length) % all.length;\n } else if (event.key === 'Home') {\n next = 0;\n } else if (event.key === 'End') {\n next = all.length - 1;\n } else {\n return;\n }\n\n event.preventDefault();\n this.activeIndex.set(next);\n all[next].el.nativeElement.focus();\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Visually hides an element while keeping it accessible to screen readers.\n * Uses the standard visually-hidden CSS technique via inline styles.\n *\n * @example\n * ```html\n * <button>\n * <kj-icon name=\"close\" />\n * <span kjVisuallyHidden>Close dialog</span>\n * </button>\n * ```\n * @doc-category Core/Accessibility\n * @doc\n * @doc-name a11y\n */\n@Directive({\n selector: '[kjVisuallyHidden]',\n standalone: true,\n host: {\n style:\n 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0',\n },\n})\nexport class KjVisuallyHidden {}\n","import { Directive, InjectionToken, InputSignalWithTransform, effect, inject, input, isDevMode } from '@angular/core';\n\n/**\n * Shape of the preset configuration consumed by `KjVariant`. One per consumer\n * directive, provided via `bindPresets` from a per-component config token.\n *\n * @internal\n */\nexport interface KjVariantPreset {\n values: string[];\n default: string;\n}\n\n/**\n * DI token holding the variant preset for the current consumer's injector\n * scope. Resolved by `KjVariant` at construction time.\n *\n * Default factory: `{ values: ['default'], default: 'default' }`.\n *\n * @internal\n */\nexport const KJ_VARIANT_PRESET = new InjectionToken<KjVariantPreset>('kj.variant.preset', {\n factory: () => ({ values: ['default'], default: 'default' }),\n});\n\n/**\n * Internal preset directive composed via `hostDirectives` by every stylistic\n * component to expose a configurable `variant` input that reflects to a\n * `data-variant` host attribute. App code does not import this directly.\n *\n * @internal\n */\n@Directive({\n selector: '[kjVariant]',\n standalone: true,\n host: { '[attr.data-variant]': 'kjVariant()' },\n})\nexport class KjVariant {\n private readonly preset = inject(KJ_VARIANT_PRESET);\n\n // Explicit field annotation pins the ng-packagr-emitted .d.ts shape —\n // without it ng-packagr collapses the write type to `string` (dropping the\n // `| undefined` flow-through), which trips the docs extractor and any\n // consumer trying to bind a `string | undefined` source.\n readonly kjVariant: InputSignalWithTransform<string, string | undefined> = input(\n this.preset.default,\n { transform: (v?: string) => v || this.preset.default },\n );\n\n constructor() {\n if (isDevMode()) {\n effect(() => {\n const v = this.kjVariant();\n if (!this.preset.values.includes(v)) {\n console.warn(\n `[kj] unknown variant \"${v}\". Allowed values: ${this.preset.values.join(', ')}.`,\n );\n }\n });\n }\n }\n}\n","import { Directive, InjectionToken, InputSignalWithTransform, effect, inject, input, isDevMode } from '@angular/core';\n\n/**\n * Shape of the preset configuration consumed by `KjSize`. One per consumer\n * directive, provided via `bindPresets` from a per-component config token.\n *\n * @internal\n */\nexport interface KjSizePreset {\n values: string[];\n default: string;\n}\n\n/**\n * DI token holding the size preset for the current consumer's injector scope.\n * Resolved by `KjSize` at construction time.\n *\n * Default factory: `{ values: ['md'], default: 'md' }`.\n *\n * @internal\n */\nexport const KJ_SIZE_PRESET = new InjectionToken<KjSizePreset>('kj.size.preset', {\n factory: () => ({ values: ['md'], default: 'md' }),\n});\n\n/**\n * Internal preset directive composed via `hostDirectives` by every stylistic\n * component to expose a configurable `size` input that reflects to a\n * `data-size` host attribute. App code does not import this directly.\n *\n * @internal\n */\n@Directive({\n selector: '[kjSize]',\n standalone: true,\n host: { '[attr.data-size]': 'kjSize()' },\n})\nexport class KjSize {\n private readonly preset = inject(KJ_SIZE_PRESET);\n\n // See `KjVariant.kjVariant` for why the field type is annotated explicitly.\n readonly kjSize: InputSignalWithTransform<string, string | undefined> = input(\n this.preset.default,\n { transform: (v?: string) => v || this.preset.default },\n );\n\n constructor() {\n if (isDevMode()) {\n effect(() => {\n const v = this.kjSize();\n if (!this.preset.values.includes(v)) {\n console.warn(\n `[kj] unknown size \"${v}\". Allowed values: ${this.preset.values.join(', ')}.`,\n );\n }\n });\n }\n }\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\nimport { KJ_VARIANT_PRESET } from './variant';\nimport { KJ_SIZE_PRESET } from './size';\n\n/**\n * Generic shape every per-component config must expose to be consumable by\n * `bindPresets`. Consumers free to add fields beyond these.\n *\n * @internal\n */\nexport interface KjBindablePresetConfig {\n variants: string[];\n sizes: string[];\n defaults: { variant: string; size: string };\n}\n\n/**\n * Returns providers that translate a per-component config token into the\n * shared preset tokens (`KJ_VARIANT_PRESET`, `KJ_SIZE_PRESET`). Spread into a\n * consumer directive's `providers` array.\n *\n * @internal\n */\nexport function bindPresets<T extends KjBindablePresetConfig>(\n configToken: InjectionToken<T>,\n): Provider[] {\n return [\n {\n provide: KJ_VARIANT_PRESET,\n useFactory: () => {\n const c = inject(configToken);\n return { values: c.variants, default: c.defaults.variant };\n },\n },\n {\n provide: KJ_SIZE_PRESET,\n useFactory: () => {\n const c = inject(configToken);\n return { values: c.sizes, default: c.defaults.size };\n },\n },\n ];\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\nexport interface KjButtonConfig {\n variants: string[];\n sizes: string[];\n defaults: { variant: string; size: string };\n}\n\n/**\n * Default Button presets shipped by kouji-ui. Exported so consumers can spread\n * them when extending: `[...KJ_BUTTON_DEFAULTS.variants, 'brand']`.\n */\nexport const KJ_BUTTON_DEFAULTS: KjButtonConfig = {\n variants: ['default', 'destructive', 'outline', 'ghost', 'link'],\n sizes: ['sm', 'md', 'lg', 'xl', 'icon'],\n defaults: { variant: 'default', size: 'md' },\n};\n\n/**\n * DI token for the active Button presets. Default factory yields\n * `KJ_BUTTON_DEFAULTS`. Override via `provideKjButton(…)` at the application\n * scope (e.g. `bootstrapApplication`'s `providers` or a route's `providers`)\n * or at the component scope (a component's own `providers: […]`).\n */\nexport const KJ_BUTTON_CONFIG = new InjectionToken<KjButtonConfig>('kj.button.config', {\n factory: () => KJ_BUTTON_DEFAULTS,\n});\n\n/**\n * Configures the Button presets for the enclosing injector. Replaces (does\n * not merge) `variants` and `sizes`; spread `KJ_BUTTON_DEFAULTS.variants` to\n * extend.\n *\n * Returns a `Provider[]` so it can be spread into either an environment\n * `providers` (`bootstrapApplication`, route config) or a component-level\n * `providers` array.\n */\nexport function provideKjButton(config: Partial<KjButtonConfig>): Provider[] {\n return [\n {\n provide: KJ_BUTTON_CONFIG,\n useValue: { ...KJ_BUTTON_DEFAULTS, ...config },\n },\n ];\n}\n","import { Directive, ElementRef, ModelSignal, afterNextRender, computed, inject, input, model } from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KjVariant, KjSize, bindPresets } from '../presets';\nimport { KJ_BUTTON_CONFIG } from './config';\n\n/**\n * Enhances a native `<button>` (or `<a>`) with kouji-ui presets and a11y\n * primitives. Variant and size are configurable via `provideKjButton(…)`.\n *\n * Owns disabled / loading / pressed semantics directly: `kjLoading=true` sets\n * `aria-busy=\"true\"` and forces the host into a disabled state regardless of\n * the `kjDisabled` input. The `kjPressed` model is unset (default) for\n * non-toggle buttons and omits `aria-pressed`; once bound (`[kjPressed]` or\n * `[(kjPressed)]`), the directive auto-flips its value on click and emits\n * `kjPressedChange`.\n *\n * Click events on disabled buttons are intercepted in the capture phase and\n * suppressed before any consumer template-bound listener fires, while keeping\n * the button focusable (kouji's WCAG 2.1 AAA a11y stance: ARIA-disabled, not\n * native `disabled` attribute).\n *\n * @example\n * ```html\n * <button kjButton [kjVariant]=\"'destructive'\" [kjSize]=\"'sm'\" [kjLoading]=\"busy()\">Delete</button>\n * ```\n *\n * @doc-keyboard\n * Enter|Space — Activates the button (native button semantics)\n * Tab — Moves focus to the next focusable element; disabled buttons remain focusable\n *\n * @doc-aria\n * aria-disabled — set to \"true\" when [kjDisabled] or [kjLoading] is true\n * aria-busy — set to \"true\" when [kjLoading] is true\n * aria-pressed — emitted only when [kjPressed] is bound; absent for non-toggle buttons\n * data-disabled — mirror of aria-disabled for CSS targeting\n * data-full — set to \"true\" when [kjFullWidth] is true\n *\n * @doc-touch\n * Meets WCAG 2.5.5 (44×44 CSS px) at `size=\"lg\"` (2.75rem) and `size=\"icon\"` (enforced via min-width/min-height). Sizes `sm` (32px) and `md` (36px) sit below the 44px floor and rely on the inline-text-link exception — use them for buttons embedded in a sentence or dense form rows only.\n *\n * @doc-a11y\n * Kouji uses ARIA-disabled rather than the native `disabled` attribute so the\n * button stays focusable and discoverable by assistive tech. Click events on\n * a disabled/loading button are intercepted in the capture phase and suppressed\n * before consumer listeners fire. The focus ring is provided by `KjFocusRing`,\n * so the outline only appears on `:focus-visible` (keyboard / programmatic\n * focus) and never on mouse focus. When `kjButton` is applied to an `<a>`,\n * activation follows native anchor semantics (Enter only).\n *\n * @doc-related button-group,link,icon-button\n *\n * @doc\n * @doc-example Variants\n * @doc-theme default\n * @doc-file button.example.ts\n * @doc-theme retro\n * @doc-file button.retro.example.ts\n * @doc-theme finance\n * @doc-file button.finance.example.ts\n * @doc-example Sizes\n * @doc-file button.sizes.example.ts\n * @doc-category Core/Base\n * @doc-name button\n * @doc-is-main\n * @doc-description Adds accessible disabled, loading, and pressed semantics to any native button or anchor.\n */\n@Directive({\n selector: '[kjButton]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n KjFocusRing,\n ],\n providers: [...bindPresets(KJ_BUTTON_CONFIG)],\n host: {\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '[attr.aria-busy]': 'kjLoading() ? \"true\" : null',\n '[attr.aria-pressed]': 'pressedAttr()',\n '[attr.data-full]': 'kjFullWidth() ? \"true\" : null',\n },\n})\nexport class KjButton {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Disables the button. Reflects `aria-disabled` and `data-disabled`. */\n readonly kjDisabled = input(false);\n\n /** Marks the button as in-flight (e.g. async action). Sets `aria-busy=\"true\"` and forces disabled. */\n readonly kjLoading = input(false);\n\n /** Stretches the button to fill the parent's inline axis. Reflects `data-full=\"true\"`. */\n readonly kjFullWidth = input(false);\n\n /**\n * Toggle state. Unset (default) marks this as a non-toggle button and omits\n * `aria-pressed`. Once a value is provided (one-way `[kjPressed]` or two-way\n * `[(kjPressed)]`), the directive auto-toggles on click and emits the new\n * value via `kjPressedChange`.\n *\n * Both the field annotation and the explicit generic+initial-value form\n * are required: ng-packagr's declaration emission narrows\n * `ModelSignal<T | undefined>` to `ModelSignal<T>` for any inferred form\n * we tried (`model<boolean>()`, `model<boolean | undefined>(undefined)`),\n * which breaks consumer two-way bindings of `boolean | undefined` signals.\n * Pinning the field type preserves the read+write contract in the\n * published .d.ts. See `rules/code_style.md` \"Prefer TypeScript inference\"\n * for the documented ng-packagr exception.\n */\n readonly kjPressed: ModelSignal<boolean | undefined> = model<boolean | undefined>(undefined);\n\n protected readonly effectiveDisabled = computed(() => this.kjDisabled() || this.kjLoading());\n\n protected readonly pressedAttr = computed(() => {\n const p = this.kjPressed();\n return p === undefined ? null : (p ? 'true' : 'false');\n });\n\n constructor() {\n // Capture-phase native listener: fires BEFORE Angular's template-bound\n // bubble-phase (click) listeners on the same element, so\n // stopImmediatePropagation() actually prevents consumer handlers.\n afterNextRender(() => {\n this.el.nativeElement.addEventListener(\n 'click',\n (event: Event) => {\n if (this.effectiveDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n const p = this.kjPressed();\n if (p !== undefined) {\n this.kjPressed.set(!p);\n }\n },\n { capture: true },\n );\n });\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Layout axis for the button group. */\nexport type KjButtonGroupOrientation = 'horizontal' | 'vertical';\n\n/**\n * Shared state surfaced by `KjButtonGroup` for child buttons (in the wrapper\n * package) and the wrapper template to read.\n *\n * - `orientation` drives layout / styling hooks.\n * - `variant` / `size` are *defaults* — children may override per-instance.\n * - `disabled` is OR-ed into each child's own disabled state.\n */\nexport interface KjButtonGroupContext {\n /** Layout axis (default `'horizontal'`). */\n readonly orientation: Signal<KjButtonGroupOrientation>;\n /** Variant token forwarded from the group as a default for children. */\n readonly variant: Signal<string | undefined>;\n /** Size token forwarded from the group as a default for children. */\n readonly size: Signal<string | undefined>;\n /** Group-level disabled flag, OR-ed into each child's own state. */\n readonly disabled: Signal<boolean>;\n}\n\n/** Injection token for `KjButtonGroupContext`. */\nexport const KJ_BUTTON_GROUP = new InjectionToken<KjButtonGroupContext>(\n 'KjButtonGroup',\n);\n","import { Directive, Signal, booleanAttribute, input } from '@angular/core';\nimport {\n KJ_BUTTON_GROUP,\n KjButtonGroupContext,\n KjButtonGroupOrientation,\n} from './button-group.context';\n\n/**\n * Coordinates a visually-joined cluster of `KjButton` children. Owns the\n * group's layout role (`role=\"group\"`), orientation, and the per-group\n * variant/size defaults that child buttons read via the `KJ_BUTTON_GROUP`\n * context token (children fall back to the group's value when they don't\n * set their own variant/size).\n *\n * The directive is structural-only: it sets the host role, ARIA orientation,\n * and `data-orientation` attribute used by the wrapper package's segmented\n * styling. It does not own selection state, dropdown wiring, or roving\n * tabindex — keep those in dedicated directives (see `button-group.md`).\n *\n * Disabled propagates: when `kjDisabled` is true, every projected child\n * `KjButton` reads it from the context and OR-s it with its own.\n *\n * @example\n * ```html\n * <div kjButtonGroup [kjOrientation]=\"'horizontal'\" [kjVariant]=\"'outline'\">\n * <button kjButton>Save</button>\n * <button kjButton>Cancel</button>\n * <button kjButton>Delete</button>\n * </div>\n * ```\n * @doc-category Core/Actions\n * @doc\n * @doc-name button-group\n * @doc-description Unstyled button group that shares variant, size, and disabled defaults across child buttons.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjButtonGroup]',\n standalone: true,\n exportAs: 'kjButtonGroup',\n providers: [{ provide: KJ_BUTTON_GROUP, useExisting: KjButtonGroup }],\n host: {\n '[attr.role]': '\"group\"',\n // `role=\"group\"` does not accept `aria-orientation` per WAI-ARIA, so the\n // orientation is only surfaced as a styling hook via `data-orientation`.\n // Roles that *do* take the attribute (e.g. `toolbar`, `radiogroup`) are\n // out of scope for this directive — see `button-group.md` for the\n // dedicated toolbar/radiogroup variants.\n '[attr.data-orientation]': 'kjOrientation()',\n '[attr.data-disabled]': 'kjDisabled() ? \"\" : null',\n },\n})\nexport class KjButtonGroup implements KjButtonGroupContext {\n /**\n * Layout axis. Drives `aria-orientation` and the `data-orientation`\n * styling hook used by the wrapper package's CSS.\n * @default 'horizontal'\n */\n readonly kjOrientation = input<KjButtonGroupOrientation>('horizontal');\n\n /**\n * Default variant forwarded to children via `KJ_BUTTON_GROUP`. Children\n * that set their own `kjVariant` override this; children that don't read\n * the group's value as a fallback.\n */\n readonly kjVariant = input<string | undefined>(undefined);\n\n /**\n * Default size forwarded to children via `KJ_BUTTON_GROUP`. Per-child\n * overrides win.\n */\n readonly kjSize = input<string | undefined>(undefined);\n\n /**\n * Group-level disabled flag. OR-ed with each child button's own\n * `kjDisabled` — if either is `true` the child is disabled.\n */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Read-only context view — exposed for the wrapper / spec ergonomics. */\n get orientation(): Signal<KjButtonGroupOrientation> {\n return this.kjOrientation;\n }\n\n /** Read-only context view. */\n get variant(): Signal<string | undefined> {\n return this.kjVariant;\n }\n\n /** Read-only context view. */\n get size(): Signal<string | undefined> {\n return this.kjSize;\n }\n\n /** Read-only context view. */\n get disabled(): Signal<boolean> {\n return this.kjDisabled;\n }\n}\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\nimport { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';\n\n/**\n * Enhances a native `<input>` with Angular forms integration, disabled/invalid state, and focus-ring.\n * Supports `formControl`, `formControlName`, and `ngModel` bindings.\n *\n * @example\n * ```html\n * <input kjInput type=\"email\" [formControl]=\"emailCtrl\" [kjInvalid]=\"emailCtrl.invalid\" />\n * ```\n * @doc\n * @doc-file input.example.ts\n * ```typescript\n * import { Component } from '@angular/core';\n * import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\n * import { KjInput } from '@kouji-ui/core';\n *\n * @Component({\n * standalone: true,\n * imports: [KjInput, ReactiveFormsModule],\n * styles: [`\n * .form { padding: 2rem; background: #0c0c0c; display: flex; flex-direction: column; gap: 1rem; max-width: 400px; }\n * [kjInput] { padding: 0.625rem 0.875rem; background: #111; border: 1px solid #222; color: #f0ede6; font-family: 'JetBrains Mono', monospace; font-size: 0.875rem; width: 100%; }\n * [kjInput]:focus { outline: none; border-color: #b8f500; }\n * [aria-invalid=\"true\"] { border-color: #ef4444; }\n * .error { color: #ef4444; font-size: 0.75rem; font-family: 'JetBrains Mono', monospace; }\n * label { color: #888; font-size: 0.75rem; font-family: 'JetBrains Mono', monospace; }\n * `],\n * template: `\n * <div class=\"form\">\n * <label for=\"email\">Email</label>\n * <input id=\"email\" kjInput type=\"email\" [formControl]=\"emailCtrl\"\n * [kjInvalid]=\"emailCtrl.invalid && emailCtrl.touched\"\n * placeholder=\"you@example.com\" />\n * @if (emailCtrl.invalid && emailCtrl.touched) {\n * <span class=\"error\">Please enter a valid email.</span>\n * }\n * <label for=\"disabled\">Disabled input</label>\n * <input id=\"disabled\" kjInput type=\"text\" [kjDisabled]=\"true\" value=\"Not editable\" />\n * </div>\n * `,\n * })\n * export class InputExampleComponent {\n * emailCtrl = new FormControl('', [Validators.email, Validators.required]);\n * }\n * ```\n * @doc-category Core/Inputs\n * @doc-name input\n * @doc-description Adds Angular forms integration, invalid and disabled state, and a focus ring to a native input.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjInput]',\n standalone: true,\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFocusRing,\n KjFormControl,\n ],\n host: {\n '[attr.aria-invalid]': 'formCtrl.touched() && kjInvalid() ? \"true\" : null',\n '[attr.data-invalid]': 'formCtrl.touched() && kjInvalid() ? \"\" : null',\n '[attr.disabled]': 'formCtrl.disabled() ? \"\" : null',\n '(input)': 'formCtrl.notifyChange($any($event.target).value)',\n '(blur)': 'formCtrl.notifyTouched()',\n },\n})\nexport class KjInput {\n readonly formCtrl = inject(KjFormControl);\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n /** Whether the input is in an invalid state. Combined with `touched` for ARIA. */\n kjInvalid = input<boolean>(false);\n\n constructor() {\n // Reflect the CVA value signal back to the native input element.\n // Skip when the form control's value is null/undefined so external [value]\n // bindings (template attribute, parent component) are preserved when no\n // ngModel/formControl is wired. When a form is wired, callers clear via\n // setValue('') rather than setValue(null), preserving the clear-on-empty\n // behavior.\n effect(() => {\n const val = this.formCtrl.value();\n if (val == null) return;\n this.el.nativeElement.value = String(val);\n });\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Context interface surfaced by `KjInputGroup` for child addons and inputs.\n *\n * - `variant` / `size` / `disabled` propagate from the group to children.\n * - `startAddonIds` / `endAddonIds` track registered addon ids for ARIA composition.\n * - `registerAddon` / `unregisterAddon` maintain the addon registry.\n * - `grouped: true` is a type discriminant that proves a context token is present.\n */\nexport interface KjInputGroupContext {\n readonly variant: Signal<string | undefined>;\n readonly size: Signal<string | undefined>;\n readonly disabled: Signal<boolean>;\n readonly grouped: true;\n readonly startAddonIds: Signal<readonly string[]>;\n readonly endAddonIds: Signal<readonly string[]>;\n registerAddon(addon: {\n id: string;\n position: Signal<'start' | 'end' | 'auto'>;\n isDecorative: Signal<boolean>;\n }): void;\n unregisterAddon(id: string): void;\n}\n\n/** Injection token for `KjInputGroupContext`. */\nexport const KJ_INPUT_GROUP = new InjectionToken<KjInputGroupContext>('KjInputGroup');\n","import {\n Directive,\n Signal,\n WritableSignal,\n booleanAttribute,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { KjDisabled } from '../primitives/interaction/disabled';\nimport { KjSize } from '../presets/size';\nimport { KjVariant } from '../presets/variant';\nimport { KJ_INPUT_GROUP, KjInputGroupContext } from './input-group.context';\n\n/** Internal shape stored in the addon registry. */\ninterface AddonEntry {\n id: string;\n position: Signal<'start' | 'end' | 'auto'>;\n isDecorative: Signal<boolean>;\n}\n\n/**\n * Coordinates a group of `[kjInputGroupAddon]` elements flanking a central\n * `[kjInput]`. Provides the `KJ_INPUT_GROUP` context token, propagates\n * variant/size/disabled to children, and builds the `startAddonIds` /\n * `endAddonIds` lists used to compose `aria-labelledby` on the inner input.\n *\n * The directive is structural-only: it does not render any DOM of its own.\n * Visual concerns live in `packages/components/src/input-group/`.\n *\n * @example\n * ```html\n * <div kjInputGroup [kjOrientation]=\"'horizontal'\">\n * <span kjInputGroupAddon>$</span>\n * <input kjInput type=\"text\" placeholder=\"Amount\" />\n * <span kjInputGroupAddon kjPosition=\"end\">.00</span>\n * </div>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name input-group\n * @doc-description Groups an input with prefix and suffix addons that share variant, size, and disabled state.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjInputGroup]',\n standalone: true,\n exportAs: 'kjInputGroup',\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n ],\n providers: [{ provide: KJ_INPUT_GROUP, useExisting: KjInputGroup }],\n host: {\n '[attr.data-orientation]': 'kjOrientation()',\n '[attr.data-disabled]': 'aggregateDisabled() ? \"\" : null',\n },\n})\nexport class KjInputGroup implements KjInputGroupContext {\n private readonly _variantDir = inject(KjVariant);\n private readonly _sizeDir = inject(KjSize);\n private readonly _disabledDir = inject(KjDisabled);\n\n /** Layout axis for the group. */\n readonly kjOrientation = input<'horizontal' | 'vertical'>('horizontal');\n\n /** Disabled input (forwarded from `KjDisabled`). */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n // ── Addon registry ──────────────────────────────────────────────────────\n private readonly _addons: WritableSignal<readonly AddonEntry[]> = signal([]);\n\n /** Ids of addons positioned at the start of the group. */\n readonly startAddonIds: Signal<readonly string[]> = computed(() =>\n this._addons()\n .filter(a => {\n const pos = a.position();\n return pos === 'start' || (pos === 'auto' && this._addons().indexOf(a) < this._firstNonStartIndex());\n })\n .filter(a => !a.isDecorative())\n .map(a => a.id),\n );\n\n /** Ids of addons positioned at the end of the group. */\n readonly endAddonIds: Signal<readonly string[]> = computed(() =>\n this._addons()\n .filter(a => {\n const pos = a.position();\n return pos === 'end' || (pos === 'auto' && this._addons().indexOf(a) >= this._firstNonStartIndex());\n })\n .filter(a => !a.isDecorative())\n .map(a => a.id),\n );\n\n // ── KjInputGroupContext ──────────────────────────────────────────────────\n readonly grouped = true as const;\n\n get variant(): Signal<string | undefined> {\n return this._variantDir.kjVariant as Signal<string | undefined>;\n }\n\n get size(): Signal<string | undefined> {\n return this._sizeDir.kjSize as Signal<string | undefined>;\n }\n\n get disabled(): Signal<boolean> {\n return this._disabledDir.disabled;\n }\n\n /** OR of own disabled flag. Exposed for host bindings and children. */\n readonly aggregateDisabled = computed(() => this._disabledDir.disabled());\n\n registerAddon(addon: AddonEntry): void {\n this._addons.update(prev => [...prev, addon]);\n }\n\n unregisterAddon(id: string): void {\n this._addons.update(prev => prev.filter(a => a.id !== id));\n }\n\n // ── Helpers ─────────────────────────────────────────────────────────────\n\n /**\n * Returns the index of the first addon whose `position` signal is not\n * `'start'` — used as the boundary between start and end in `'auto'` mode.\n */\n private _firstNonStartIndex(): number {\n const addons = this._addons();\n for (let i = 0; i < addons.length; i++) {\n if (addons[i].position() !== 'start') return i;\n }\n return addons.length;\n }\n}\n","import {\n DestroyRef,\n Directive,\n Signal,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { KJ_INPUT_GROUP } from './input-group.context';\n\n/** Auto-incrementing counter for stable addon ids. */\nlet _nextId = 0;\n\n/**\n * Marks an element as a prefix or suffix addon inside a `[kjInputGroup]`.\n *\n * Auto-mints a stable `id` (e.g. `kj-addon-0`) so the parent group can build\n * `aria-labelledby` lists. Registers with the group on construction and\n * deregisters on destroy.\n *\n * - `kjPosition='start'` — always treated as a leading addon.\n * - `kjPosition='end'` — always treated as a trailing addon.\n * - `kjPosition='auto'` — inferred from DOM order (default).\n *\n * Set `kjAriaHidden=\"true\"` (or omit) to mark decorative addons (icons,\n * currency symbols, etc.) that do not need to participate in\n * `aria-labelledby`.\n *\n * @example\n * ```html\n * <span kjInputGroupAddon>$</span>\n * <input kjInput type=\"text\" placeholder=\"Amount\" />\n * <span kjInputGroupAddon kjPosition=\"end\">.00</span>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name input-group\n */\n@Directive({\n selector: '[kjInputGroupAddon]',\n standalone: true,\n exportAs: 'kjInputGroupAddon',\n host: {\n '[id]': 'addonId',\n '[attr.aria-hidden]': 'kjAriaHidden() != null ? (kjAriaHidden() ? \"true\" : null) : null',\n '[attr.data-position]': 'kjPosition()',\n },\n})\nexport class KjInputGroupAddon {\n private readonly _group = inject(KJ_INPUT_GROUP, { optional: true });\n private readonly _destroyRef = inject(DestroyRef);\n\n /** Stable id for this addon — set once at construction time. */\n readonly addonId = `kj-addon-${_nextId++}`;\n\n /**\n * Explicit position override. When `'auto'` (default), position is inferred\n * from DOM order within the group.\n */\n readonly kjPosition = input<'start' | 'end' | 'auto'>('auto');\n\n /**\n * When `true`, marks this addon as decorative (`aria-hidden=\"true\"`).\n * When `false`, ensures the element is not hidden.\n * When `undefined` (default), no `aria-hidden` attribute is written.\n */\n readonly kjAriaHidden = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (v: boolean | string | undefined): boolean | undefined => {\n if (v === undefined || v === '') return undefined;\n return booleanAttribute(v);\n },\n });\n\n /** `true` when this addon should be excluded from `aria-labelledby` composition. */\n readonly isDecorative: Signal<boolean> = computed(() => this.kjAriaHidden() === true);\n\n constructor() {\n if (this._group) {\n const group = this._group;\n const id = this.addonId;\n const position = this.kjPosition;\n const isDecorative = this.isDecorative;\n\n group.registerAddon({ id, position, isDecorative });\n\n this._destroyRef.onDestroy(() => {\n group.unregisterAddon(id);\n });\n }\n }\n}\n","/**\n * A single slot in a compiled mask.\n * - `literal`: a fixed character that is always rendered and skipped by the caret.\n * - `variable`: a user-fillable position with a regex that filters keystrokes.\n */\nexport type Slot =\n | { kind: 'literal'; char: string }\n | { kind: 'variable'; tokenId: string; re: RegExp };\n\n/** Result of compiling a mask template string. */\nexport interface CompiledMask {\n /** Full slot vector — one entry per character position in the display string. */\n readonly slots: ReadonlyArray<Slot>;\n /** Positions (in `slots`) that are variable (user-fillable). */\n readonly variableIndices: ReadonlyArray<number>;\n readonly literalCount: number;\n readonly variableCount: number;\n}\n\n/**\n * Compiles a mask template string into a `CompiledMask`.\n *\n * Token characters (keys of `tokens`) become variable slots. Any other\n * character becomes a literal slot. Escape a token character with a leading\n * backslash: `\\\\9` → literal `9`.\n *\n * @example\n * ```ts\n * const mask = compileMask('(999) 999-9999', { '9': /[0-9]/ });\n * // mask.variableCount === 10\n * // mask.slots[0] === { kind: 'literal', char: '(' }\n * // mask.slots[1] === { kind: 'variable', tokenId: '9', re: /[0-9]/ }\n * ```\n */\nexport function compileMask(\n template: string,\n tokens: Record<string, RegExp>,\n): CompiledMask {\n const slots: Slot[] = [];\n const variableIndices: number[] = [];\n let i = 0;\n\n while (i < template.length) {\n const ch = template[i];\n\n // Escape: \\\\ followed by any character → literal of that character\n if (ch === '\\\\' && i + 1 < template.length) {\n slots.push({ kind: 'literal', char: template[i + 1] });\n i += 2;\n continue;\n }\n\n const re = tokens[ch];\n if (re) {\n variableIndices.push(slots.length);\n slots.push({ kind: 'variable', tokenId: ch, re });\n } else {\n slots.push({ kind: 'literal', char: ch });\n }\n i++;\n }\n\n return {\n slots,\n variableIndices,\n literalCount: slots.length - variableIndices.length,\n variableCount: variableIndices.length,\n };\n}\n","import type { CompiledMask, Slot } from './input-mask.compile';\n\n/** Callbacks injected into MaskEngine to decouple it from the DOM and Angular. */\nexport interface MaskEngineCallbacks {\n /** Returns the current display value in the input element. */\n getValue(): string;\n /** Sets the display value in the input element. */\n setValue(value: string): void;\n /** Returns the current caret position (selectionStart). */\n getCaret(): number;\n /** Moves the caret to the given position. */\n setCaret(pos: number): void;\n /** Called whenever the logical (raw or masked) value changes. */\n notifyChange(value: string): void;\n}\n\n/** Options for constructing a MaskEngine. */\nexport interface MaskEngineOptions {\n getCompiled(): CompiledMask;\n getSlotChar(): string;\n getMaskMode(): 'unmasked' | 'masked';\n callbacks: MaskEngineCallbacks;\n}\n\n/**\n * Pure state machine for the input-mask keyboard/paste/caret behaviour.\n * No Angular DI — constructed by the directive with callback closures.\n *\n * Responsibilities:\n * - Intercept keydown (printable chars, Backspace, Delete, arrow keys).\n * - Intercept paste events and sanitise clipboard content.\n * - Reconstruct a display string from raw characters.\n * - Emit the model value (raw or masked) via `notifyChange`.\n */\nexport class MaskEngine {\n private _composing = false;\n\n constructor(private readonly opts: MaskEngineOptions) {}\n\n // ── Public event handlers ──────────────────────────────────────────────\n\n /** Handle keyboard events. Printable chars, Backspace, Delete, navigation. */\n onKeydown(e: KeyboardEvent): void {\n if (this._composing) return;\n\n const { key, ctrlKey, metaKey, altKey } = e;\n\n // Pass through: ctrl/meta/alt combos (copy, paste, undo, …)\n if (ctrlKey || metaKey || altKey) return;\n // Pass through: Tab, Enter, Escape, function keys\n if (['Tab', 'Enter', 'Escape'].includes(key) || key.startsWith('F')) return;\n\n if (key === 'Backspace') {\n e.preventDefault();\n this._handleBackspace();\n return;\n }\n\n if (key === 'Delete') {\n e.preventDefault();\n this._handleDelete();\n return;\n }\n\n if (key === 'ArrowLeft') {\n e.preventDefault();\n this._snapCaret('prev');\n return;\n }\n\n if (key === 'ArrowRight') {\n e.preventDefault();\n this._snapCaret('next');\n return;\n }\n\n if (key === 'Home') {\n e.preventDefault();\n this._snapCaret('first');\n return;\n }\n\n if (key === 'End') {\n e.preventDefault();\n this._snapCaret('last');\n return;\n }\n\n // Printable character (single char, not a special key)\n if (key.length === 1) {\n e.preventDefault();\n this._insertChar(key);\n }\n }\n\n /** Handle the beforeinput event (IME, mobile keyboards). */\n onBeforeInput(e: InputEvent): void {\n if (this._composing) return;\n if (!e.data) return;\n if (e.inputType === 'insertText' || e.inputType === 'insertCompositionText') {\n e.preventDefault();\n for (const ch of e.data) {\n this._insertChar(ch);\n }\n }\n }\n\n /** Handle paste events — sanitise clipboard text into the mask. */\n onPaste(e: ClipboardEvent): void {\n e.preventDefault();\n const text = e.clipboardData?.getData('text') ?? '';\n this._pasteText(text);\n }\n\n /** Composition start — hold off on keydown processing. */\n onCompositionStart(): void {\n this._composing = true;\n }\n\n /** Composition end — process the composed string. */\n onCompositionEnd(e: CompositionEvent): void {\n this._composing = false;\n if (e.data) {\n for (const ch of e.data) {\n this._insertChar(ch);\n }\n }\n }\n\n /**\n * Reconstruct a display string from a raw (unmasked) string.\n * Fills variable slots in order with characters from `raw`.\n * Returns the display string and the slot index after the last filled slot.\n */\n reconstructFromRaw(raw: string): { display: string; caretSlot: number } {\n const { slots, variableIndices } = this.opts.getCompiled();\n const slotChar = this.opts.getSlotChar();\n const filled = new Array<string | null>(slots.length).fill(null);\n let rawIdx = 0;\n\n for (const varIdx of variableIndices) {\n if (rawIdx >= raw.length) break;\n const slot = slots[varIdx] as Extract<Slot, { kind: 'variable' }>;\n const ch = raw[rawIdx];\n if (slot.re.test(ch)) {\n filled[varIdx] = ch;\n rawIdx++;\n } else {\n rawIdx++;\n // Try to keep going — skip non-matching raw chars\n // (handles masked input passed via setValue)\n }\n }\n\n const display = slots\n .map((slot, i) =>\n slot.kind === 'literal' ? slot.char : (filled[i] ?? slotChar),\n )\n .join('');\n\n // caretSlot: position just after the last filled variable, or first empty\n let caretSlot = variableIndices[0] ?? 0;\n for (let i = variableIndices.length - 1; i >= 0; i--) {\n if (filled[variableIndices[i]] !== null) {\n caretSlot = (variableIndices[i + 1] ?? variableIndices[i]) + (i + 1 < variableIndices.length ? 0 : 1);\n break;\n }\n }\n\n return { display, caretSlot };\n }\n\n /**\n * Reconstruct a display from a raw string, normalising the raw by stripping\n * chars that don't fit the variable slot sequence. Used when writing from a\n * form control setValue() call.\n */\n applyRawValue(raw: string): void {\n const { slots, variableIndices } = this.opts.getCompiled();\n const slotChar = this.opts.getSlotChar();\n const filled = new Array<string | null>(slots.length).fill(null);\n\n let rawIdx = 0;\n for (const varIdx of variableIndices) {\n if (rawIdx >= raw.length) break;\n const slot = slots[varIdx] as Extract<Slot, { kind: 'variable' }>;\n // skip chars that don't match (forgiving intake)\n while (rawIdx < raw.length && !slot.re.test(raw[rawIdx])) {\n rawIdx++;\n }\n if (rawIdx < raw.length) {\n filled[varIdx] = raw[rawIdx];\n rawIdx++;\n }\n }\n\n const display = slots\n .map((slot, i) =>\n slot.kind === 'literal' ? slot.char : (filled[i] ?? slotChar),\n )\n .join('');\n\n this.opts.callbacks.setValue(display);\n this._emitModelValue(filled);\n }\n\n // ── Private helpers ────────────────────────────────────────────────────\n\n private _getFilledSlots(): Array<string | null> {\n const { slots } = this.opts.getCompiled();\n const slotChar = this.opts.getSlotChar();\n const display = this.opts.callbacks.getValue();\n return slots.map((slot, i) => {\n if (slot.kind === 'literal') return null;\n const ch = display[i];\n return ch && ch !== slotChar ? ch : null;\n });\n }\n\n private _buildDisplay(filled: Array<string | null>): string {\n const { slots } = this.opts.getCompiled();\n const slotChar = this.opts.getSlotChar();\n return slots\n .map((slot, i) =>\n slot.kind === 'literal' ? slot.char : (filled[i] ?? slotChar),\n )\n .join('');\n }\n\n private _emitModelValue(filled: Array<string | null>): void {\n const { slots, variableIndices } = this.opts.getCompiled();\n const mode = this.opts.getMaskMode();\n let value: string;\n if (mode === 'unmasked') {\n value = variableIndices\n .map(i => filled[i] ?? '')\n .join('');\n } else {\n const slotChar = this.opts.getSlotChar();\n value = slots\n .map((slot, i) =>\n slot.kind === 'literal' ? slot.char : (filled[i] ?? slotChar),\n )\n .join('');\n }\n this.opts.callbacks.notifyChange(value);\n }\n\n private _insertChar(ch: string): void {\n const { variableIndices } = this.opts.getCompiled();\n const { slots } = this.opts.getCompiled();\n const caret = this.opts.callbacks.getCaret();\n const filled = this._getFilledSlots();\n\n // Find the next variable slot at or after caret\n const targetIdx = variableIndices.find(i => i >= caret);\n if (targetIdx === undefined) return; // mask is full or caret past end\n\n const slot = slots[targetIdx] as Extract<Slot, { kind: 'variable' }>;\n if (!slot.re.test(ch)) return; // char doesn't match slot regex\n\n filled[targetIdx] = ch;\n const display = this._buildDisplay(filled);\n this.opts.callbacks.setValue(display);\n this._emitModelValue(filled);\n\n // Advance caret to next variable slot\n const nextVar = variableIndices.find(i => i > targetIdx);\n const newCaret = nextVar !== undefined ? nextVar : targetIdx + 1;\n this.opts.callbacks.setCaret(newCaret);\n\n // Check completion\n const allFilled = variableIndices.every(i => filled[i] !== null);\n if (allFilled) {\n this.opts.callbacks.setCaret(variableIndices[variableIndices.length - 1] + 1);\n }\n }\n\n private _handleBackspace(): void {\n const { variableIndices } = this.opts.getCompiled();\n const caret = this.opts.callbacks.getCaret();\n const filled = this._getFilledSlots();\n\n // Find the last variable slot before caret\n const targets = variableIndices.filter(i => i < caret);\n const targetIdx = targets[targets.length - 1];\n if (targetIdx === undefined) return;\n\n filled[targetIdx] = null;\n const display = this._buildDisplay(filled);\n this.opts.callbacks.setValue(display);\n this._emitModelValue(filled);\n this.opts.callbacks.setCaret(targetIdx);\n }\n\n private _handleDelete(): void {\n const { variableIndices } = this.opts.getCompiled();\n const caret = this.opts.callbacks.getCaret();\n const filled = this._getFilledSlots();\n\n // Find the variable slot at or after caret\n const targetIdx = variableIndices.find(i => i >= caret);\n if (targetIdx === undefined) return;\n\n filled[targetIdx] = null;\n const display = this._buildDisplay(filled);\n this.opts.callbacks.setValue(display);\n this._emitModelValue(filled);\n this.opts.callbacks.setCaret(targetIdx);\n }\n\n private _snapCaret(direction: 'prev' | 'next' | 'first' | 'last'): void {\n const { variableIndices } = this.opts.getCompiled();\n if (variableIndices.length === 0) return;\n\n const caret = this.opts.callbacks.getCaret();\n\n if (direction === 'first') {\n this.opts.callbacks.setCaret(variableIndices[0]);\n return;\n }\n if (direction === 'last') {\n this.opts.callbacks.setCaret(\n variableIndices[variableIndices.length - 1] + 1,\n );\n return;\n }\n if (direction === 'prev') {\n const prev = [...variableIndices].reverse().find(i => i < caret);\n if (prev !== undefined) this.opts.callbacks.setCaret(prev);\n return;\n }\n if (direction === 'next') {\n const next = variableIndices.find(i => i > caret);\n if (next !== undefined) this.opts.callbacks.setCaret(next);\n return;\n }\n }\n\n private _pasteText(text: string): void {\n const { variableIndices } = this.opts.getCompiled();\n const { slots } = this.opts.getCompiled();\n const caret = this.opts.callbacks.getCaret();\n const filled = this._getFilledSlots();\n\n // Determine which variable slots we start filling from\n const startVarPos = variableIndices.findIndex(i => i >= caret);\n if (startVarPos === -1) return;\n\n let textIdx = 0;\n for (let vi = startVarPos; vi < variableIndices.length && textIdx < text.length; vi++) {\n const slotIdx = variableIndices[vi];\n const slot = slots[slotIdx] as Extract<Slot, { kind: 'variable' }>;\n // Skip paste chars that don't match\n while (textIdx < text.length && !slot.re.test(text[textIdx])) {\n textIdx++;\n }\n if (textIdx < text.length) {\n filled[slotIdx] = text[textIdx];\n textIdx++;\n }\n }\n\n const display = this._buildDisplay(filled);\n this.opts.callbacks.setValue(display);\n this._emitModelValue(filled);\n\n // Set caret after the last filled slot\n let lastFilledVar = variableIndices[startVarPos];\n for (const vi of variableIndices) {\n if (filled[vi] !== null) lastFilledVar = vi;\n }\n const nextVar = variableIndices.find(i => i > lastFilledVar);\n this.opts.callbacks.setCaret(nextVar !== undefined ? nextVar : lastFilledVar + 1);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Default token alphabet for `KjInputMask`.\n *\n * | Token | Matches |\n * |-------|---------|\n * | `9` | digit `[0-9]` |\n * | `a` | letter `[A-Za-z]` |\n * | `*` | alphanumeric `[A-Za-z0-9]` |\n *\n * Override app-wide by providing `KJ_INPUT_MASK_TOKENS` in `bootstrapApplication`:\n * ```ts\n * provideKjInputMaskTokens({ ...defaultTokens, 'H': /[0-9A-Fa-f]/ })\n * ```\n */\nexport const KJ_INPUT_MASK_TOKENS = new InjectionToken<Record<string, RegExp>>(\n 'KjInputMaskTokens',\n {\n providedIn: 'root',\n factory: () => ({\n '9': /[0-9]/,\n 'a': /[A-Za-z]/,\n '*': /[A-Za-z0-9]/,\n }),\n },\n);\n\n/** Default token map — exported for consumers who want to spread into custom maps. */\nexport const defaultMaskTokens: Record<string, RegExp> = {\n '9': /[0-9]/,\n 'a': /[A-Za-z]/,\n '*': /[A-Za-z0-9]/,\n};\n\n/**\n * Helper to provide a custom token alphabet app-wide.\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideKjInputMaskTokens({ ...defaultMaskTokens, 'H': /[0-9A-Fa-f]/ }),\n * ],\n * });\n * ```\n */\nexport function provideKjInputMaskTokens(tokens: Record<string, RegExp>) {\n return { provide: KJ_INPUT_MASK_TOKENS, useValue: tokens };\n}\n","import {\n AbstractControl,\n NG_VALIDATORS,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport {\n Directive,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport { KjInput } from '../input/input';\nimport { compileMask } from './input-mask.compile';\nimport { MaskEngine } from './input-mask.engine';\nimport { KJ_INPUT_MASK_TOKENS } from './input-mask.tokens';\n\n/**\n * Applies a fixed-format mask to a native `<input>` element. Composes\n * `KjInput` via `hostDirectives` so all Angular forms integration (CVA,\n * `aria-invalid`, focus-ring, ARIA-disabled) applies unchanged.\n *\n * Supports `[(ngModel)]`, `[formControl]`, and `[formControlName]` bindings.\n * By default the model value is the **raw** (unmasked) alphanumerics\n * (`kjMaskMode=\"unmasked\"`). Switch to `kjMaskMode=\"masked\"` to commit the\n * full display string.\n *\n * Provides itself as an `NG_VALIDATORS` multi-validator. When the field has\n * been partially filled, `validate()` returns `{ mask: { expected, filled,\n * required } }`. An empty field does **not** trigger the mask error —\n * `Validators.required` handles that.\n *\n * @example\n * ```html\n * <input kjInputMask kjMask=\"(999) 999-9999\" [(ngModel)]=\"phone\" />\n * ```\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name input-mask\n * @doc-description Applies a fixed-format mask to a native input with caret handling and partial-fill validation.\n * @doc-is-main\n */\n@Directive({\n selector: 'input[kjInputMask]',\n standalone: true,\n exportAs: 'kjInputMask',\n hostDirectives: [\n // KjInput already composes KjDisabled internally — do NOT add KjDisabled\n // here or it will match twice on the same element (NG0309).\n // kjDisabled is forwarded via our own input below and bound via the\n // KjDisabled instance injected from the host directive chain.\n { directive: KjInput, inputs: ['kjInvalid'] },\n ],\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => KjInputMask),\n multi: true,\n },\n ],\n host: {\n // Force type=\"text\" — partially-masked values fail browser validation\n // for tel/email/number types, and autofill behaves better with text.\n '[attr.type]': '\"text\"',\n '[attr.inputmode]': 'autoInputMode()',\n '[attr.placeholder]': 'displayPlaceholder()',\n '(keydown)': 'engine.onKeydown($event)',\n '(paste)': 'engine.onPaste($event)',\n '(beforeinput)': 'engine.onBeforeInput($event)',\n '(compositionstart)': 'engine.onCompositionStart()',\n '(compositionend)': 'engine.onCompositionEnd($event)',\n },\n})\nexport class KjInputMask implements Validator {\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly kjInput = inject(KjInput);\n private readonly defaultTokens = inject(KJ_INPUT_MASK_TOKENS);\n\n // ── Inputs ────────────────────────────────────────────────────────────\n\n /** Mask template, e.g. `'(999) 999-9999'`, `'99/99/9999'`. Required. */\n readonly kjMask = input.required<string>();\n\n /**\n * Per-instance token overrides. Merged on top of `KJ_INPUT_MASK_TOKENS`\n * — entries here win. Use `provideKjInputMaskTokens` to set app-wide tokens.\n */\n readonly kjMaskTokens = input<Record<string, RegExp>>({});\n\n /**\n * What value is committed to the FormControl.\n * - `'unmasked'` (default) — raw alphanumerics only: `\"4155551234\"`.\n * - `'masked'` — full display string: `\"(415) 555-1234\"`.\n */\n readonly kjMaskMode = input<'unmasked' | 'masked'>('unmasked');\n\n /** Placeholder character shown in unfilled variable slots. @default '_' */\n readonly kjSlotChar = input<string>('_');\n\n /**\n * Forwarded to the inherited `KjDisabled` directive. Setting this disables\n * the input via `aria-disabled` / `data-disabled`.\n * @default false\n */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * When `true`, the field value is cleared on blur if the mask is incomplete.\n * Defaults to `false` — see analysis doc for rationale.\n */\n readonly kjAutoClear = input(false, { transform: booleanAttribute });\n\n /**\n * Override the auto-generated screen-reader format hint. Set to `''` to\n * suppress it entirely (when `KjField`'s hint slot already covers the format).\n */\n readonly kjFormatHint = input<string | undefined>(undefined);\n\n // ── Outputs ──────────────────────────────────────────────────────────\n\n /**\n * Emits once when every variable slot is filled.\n * Re-emits if the user clears and re-fills.\n * Useful for auto-advancing focus in card-entry UX.\n */\n readonly kjComplete = output<void>();\n\n // ── Computed state ───────────────────────────────────────────────────\n\n /** Compiled mask — recomputed when `kjMask` or `kjMaskTokens` change. */\n readonly compiled = computed(() =>\n compileMask(this.kjMask(), {\n ...this.defaultTokens,\n ...this.kjMaskTokens(),\n }),\n );\n\n /**\n * `inputmode` attribute — `'numeric'` when all variable slots are digit-only,\n * `'text'` otherwise. Mobile browsers show the right keyboard.\n */\n readonly autoInputMode = computed<string>(() => {\n const { slots, variableIndices } = this.compiled();\n if (variableIndices.length === 0) return 'text';\n const allDigit = variableIndices.every(i => {\n const slot = slots[i];\n return slot.kind === 'variable' && slot.tokenId === '9';\n });\n return allDigit ? 'numeric' : 'text';\n });\n\n /**\n * Placeholder string shown when no value is entered — literals keep their\n * characters, variable slots show `kjSlotChar`.\n */\n readonly displayPlaceholder = computed<string>(() => {\n const { slots } = this.compiled();\n const slotChar = this.kjSlotChar();\n return slots\n .map(slot => (slot.kind === 'literal' ? slot.char : slotChar))\n .join('');\n });\n\n /** The MaskEngine instance — stateful per-directive. */\n readonly engine: MaskEngine;\n\n // Track whether completion was already emitted for the current fill cycle.\n private _wasComplete = false;\n\n constructor() {\n const el = this.el;\n const formCtrl = this.kjInput.formCtrl;\n\n this.engine = new MaskEngine({\n getCompiled: () => this.compiled(),\n getSlotChar: () => this.kjSlotChar(),\n getMaskMode: () => this.kjMaskMode(),\n callbacks: {\n getValue: () => el.nativeElement.value,\n setValue: (val) => { el.nativeElement.value = val; },\n getCaret: () => el.nativeElement.selectionStart ?? 0,\n setCaret: (pos) => {\n // requestAnimationFrame defers the caret move so it runs after the\n // browser's own value-update microtask; without this, some browsers\n // reset selectionStart back to 0 after we set the value.\n requestAnimationFrame(() => {\n el.nativeElement.setSelectionRange(pos, pos);\n });\n },\n notifyChange: (val) => {\n formCtrl.notifyChange(val);\n // Check completion\n const { variableIndices } = this.compiled();\n const display = el.nativeElement.value;\n const slotChar = this.kjSlotChar();\n const filled = variableIndices.filter(i => {\n const ch = display[i];\n return ch && ch !== slotChar;\n }).length;\n const isComplete = filled === variableIndices.length;\n if (isComplete && !this._wasComplete) {\n this._wasComplete = true;\n this.kjComplete.emit();\n } else if (!isComplete) {\n this._wasComplete = false;\n }\n },\n },\n });\n\n // Reflect the form control value → display string (e.g. from setValue() calls).\n effect(() => {\n const val = formCtrl.value();\n if (val == null || val === undefined) return;\n const raw = String(val);\n this.engine.applyRawValue(raw);\n });\n\n // Auto-clear on blur if incomplete and kjAutoClear is enabled.\n el.nativeElement.addEventListener('blur', () => {\n if (!this.kjAutoClear()) return;\n const errors = this._computeErrors();\n if (errors) {\n el.nativeElement.value = this.displayPlaceholder();\n formCtrl.notifyChange('');\n this._wasComplete = false;\n }\n });\n }\n\n // ── Validator ────────────────────────────────────────────────────────\n\n /** @internal — called by Angular forms. */\n validate(_control: AbstractControl): ValidationErrors | null {\n return this._computeErrors();\n }\n\n private _computeErrors(): ValidationErrors | null {\n const { variableIndices } = this.compiled();\n const display = this.el.nativeElement.value;\n const slotChar = this.kjSlotChar();\n const mode = this.kjMaskMode();\n\n // Determine how many variable slots are filled in the current display.\n const filledCount = variableIndices.filter(i => {\n const ch = display[i];\n return ch && ch !== slotChar;\n }).length;\n\n // Empty (no filled slots) — let Validators.required handle it.\n if (filledCount === 0) return null;\n\n // If using unmasked mode, the control value is the raw string. Recalculate\n // filled from the control value length vs. variableCount.\n let effectiveFilled = filledCount;\n if (mode === 'unmasked') {\n const raw = String(this.kjInput.formCtrl.value() ?? '');\n effectiveFilled = Math.min(raw.length, variableIndices.length);\n }\n\n if (effectiveFilled < variableIndices.length) {\n return {\n mask: {\n expected: this.kjMask(),\n filled: effectiveFilled,\n required: variableIndices.length,\n },\n };\n }\n\n return null;\n }\n}\n","/**\n * Predefined mask templates for common use cases.\n *\n * These are convenience string constants — not DI tokens, not hardcoded\n * into the directive. Use them as `[kjMask]=\"presets.phoneUS\"` or spread\n * and extend per your app's locale needs.\n *\n * @example\n * ```ts\n * import { KJ_INPUT_MASK_PRESETS } from '@kouji-ui/core';\n *\n * @Component({ template: `<input kjInputMask [kjMask]=\"presets.phoneUS\" />` })\n * export class MyForm {\n * readonly presets = KJ_INPUT_MASK_PRESETS;\n * }\n * ```\n */\nexport const KJ_INPUT_MASK_PRESETS = {\n phoneUS: '(999) 999-9999',\n cardNumber: '9999 9999 9999 9999',\n cardExpiry: '99/99',\n isoDate: '9999-99-99',\n usDate: '99/99/9999',\n} as const;\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Context shared between the root `KjInputOtp` directive and each\n * `KjInputOtpCell` leaf directive. Provided via `KJ_INPUT_OTP` on the\n * root element and injected by every cell.\n */\nexport interface KjInputOtpContext {\n /** The full concatenated OTP value. */\n value: Signal<string>;\n /** Total number of cells. */\n length: Signal<number>;\n /** Whether the widget is disabled (union of kjDisabled + form-level disable). */\n disabled: Signal<boolean>;\n /** Whether the widget is read-only. */\n readonly: Signal<boolean>;\n /** Whether cells should render as `type=\"password\"`. */\n masked: Signal<boolean>;\n /** Character set restriction — drives inputmode, pattern, and filter logic. */\n charSet: Signal<'digits' | 'alphanumeric' | RegExp>;\n /** Index of the currently focused cell, or -1 if none. */\n focusedIndex: Signal<number>;\n\n /** Called by a cell to push its new single character (or '' for clear) upstream. */\n setCellValue(index: number, char: string): void;\n /** Called by a cell to request focus movement by delta (+1 / -1). */\n moveFocus(delta: number): void;\n /** Called by a cell to request focus on a specific index (clamped). */\n focusIndex(index: number): void;\n /** Called by a cell when a paste event occurs; distributes chars from `fromIndex`. */\n handlePaste(event: ClipboardEvent, fromIndex: number): void;\n /** Called by a cell when a copy event occurs; writes the full code to clipboard. */\n handleCopy(event: ClipboardEvent): void;\n /** Called by a cell in ngOnInit to register its native input element. */\n registerCell(index: number, el: HTMLInputElement): void;\n /** Called by a cell in ngOnDestroy to deregister its element. */\n unregisterCell(index: number): void;\n}\n\n/** Injection token for the `KjInputOtpContext`. */\nexport const KJ_INPUT_OTP = new InjectionToken<KjInputOtpContext>('KjInputOtp');\n","import {\n Directive,\n ElementRef,\n OnDestroy,\n OnInit,\n Signal,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { KjDisabled } from '../primitives/interaction/disabled';\nimport { KjFormControl } from '../primitives/forms/form-control';\nimport { KjLiveRegion } from '../a11y/live-region';\nimport { KjFocusRing } from '../primitives/interaction/focus-ring';\nimport { KJ_INPUT_OTP, KjInputOtpContext } from './input-otp.context';\n\n/**\n * Root headless directive for the OTP input widget.\n *\n * Owns the concatenated value, cell count, character-set filtering, paste\n * distribution, auto-advance, completion announcement, and the\n * `KJ_INPUT_OTP` context that every `KjInputOtpCell` reads from.\n *\n * Composes `KjFormControl` via `hostDirectives` so the **whole widget** is a\n * single Angular form control — `[(ngModel)]` and `[formControl]` bind to the\n * concatenated string.\n *\n * @example\n * ```html\n * <div kjInputOtp [kjLength]=\"6\" [(ngModel)]=\"code\">\n * @for (i of cells; track i) {\n * <input kjInputOtpCell [kjIndex]=\"i\" />\n * }\n * </div>\n * ```\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name input-otp\n * @doc-description Unstyled multi-cell one-time-password root that exposes the whole widget as a single form control.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjInputOtp]',\n standalone: true,\n exportAs: 'kjInputOtp',\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFormControl,\n KjLiveRegion,\n ],\n providers: [\n { provide: KJ_INPUT_OTP, useExisting: forwardRef(() => KjInputOtp) },\n ],\n host: {\n 'role': 'group',\n '[attr.aria-label]': 'kjAriaLabel() ?? null',\n '[attr.aria-invalid]': 'formCtrl.touched() && kjInvalid() ? \"true\" : null',\n '[attr.data-invalid]': 'formCtrl.touched() && kjInvalid() ? \"\" : null',\n },\n})\nexport class KjInputOtp implements KjInputOtpContext, OnInit, OnDestroy {\n readonly formCtrl = inject(KjFormControl);\n private readonly disabled$ = inject(KjDisabled);\n private readonly liveRegion = inject(KjLiveRegion);\n\n // ── Inputs ──────────────────────────────────────────────────────────────────\n\n /** Number of OTP cells. Common values: 4, 6, 8. */\n readonly kjLength = input<number>(6);\n\n /** Character-set restriction. Drives `inputmode`, `pattern`, and input/paste filtering. */\n readonly kjCharSet = input<'digits' | 'alphanumeric' | RegExp>('digits');\n\n /** When `true`, cells render with `type=\"password\"`. */\n readonly kjMask = input(false, { transform: booleanAttribute });\n\n /** When `true`, emits `kjComplete` once the value reaches `kjLength`. */\n readonly kjAutoSubmit = input(false, { transform: booleanAttribute });\n\n /** Reflects an invalid state via `aria-invalid` (touched-gated). */\n readonly kjInvalid = input(false, { transform: booleanAttribute });\n\n /** Sets all cells to `readonly`. */\n readonly kjReadonly = input(false, { transform: booleanAttribute });\n\n /**\n * Accessible label for the widget when there is no parent `KjFormField`\n * supplying an `aria-labelledby`.\n */\n readonly kjAriaLabel = input<string | undefined>(undefined);\n\n // ── Outputs ─────────────────────────────────────────────────────────────────\n\n /** Emitted when the full code is entered (value.length === kjLength). */\n readonly kjComplete = output<string>();\n\n /** Emitted after a paste distributes characters across cells. */\n readonly kjPasted = output<string>();\n\n // ── Internal state ───────────────────────────────────────────────────────────\n\n /** Per-cell character array; resized lazily by setCellValue. */\n private readonly _chars = signal<string[]>([]);\n\n /** Cell element registry for programmatic focus management. */\n readonly _cells = new Map<number, HTMLInputElement>();\n\n /** Focused cell index, or -1. */\n private readonly _focusedIndex = signal<number>(-1);\n\n /** Whether the code was already complete on the previous notification cycle. */\n private _wasComplete = false;\n\n // ── Context signals (KjInputOtpContext) ──────────────────────────────────────\n\n /** Full concatenated OTP value (public, read-only signal). */\n readonly value: Signal<string> = computed(() =>\n this._chars().slice(0, this.kjLength()).join(''),\n );\n\n readonly length: Signal<number> = computed(() => this.kjLength());\n\n readonly disabled: Signal<boolean> = computed(\n () => this.disabled$.disabled() || this.formCtrl.disabled(),\n );\n\n readonly readonly: Signal<boolean> = computed(() => this.kjReadonly());\n\n readonly masked: Signal<boolean> = computed(() => this.kjMask());\n\n readonly charSet: Signal<'digits' | 'alphanumeric' | RegExp> = computed(\n () => this.kjCharSet(),\n );\n\n readonly focusedIndex: Signal<number> = this._focusedIndex.asReadonly();\n\n // ── Lifecycle ────────────────────────────────────────────────────────────────\n\n constructor() {\n // Reflect CVA value writes to internal char array (e.g. programmatic setValue).\n effect(() => {\n const incoming = this.formCtrl.value();\n if (incoming == null) return;\n const str = String(incoming);\n const chars = str.split('').slice(0, this.kjLength());\n this._chars.set(chars);\n });\n\n // Notify forms layer whenever the value signal changes.\n effect(() => {\n const val = this.value();\n this.formCtrl.notifyChange(val);\n this._checkCompletion(val);\n });\n }\n\n ngOnInit(): void {\n // Initialise the char array to the correct length on first render.\n if (this._chars().length === 0) {\n this._chars.set(Array(this.kjLength()).fill(''));\n }\n }\n\n ngOnDestroy(): void {\n this._cells.clear();\n }\n\n // ── KjInputOtpContext methods ────────────────────────────────────────────────\n\n /** Update a single cell's character and notify forms. */\n setCellValue(index: number, char: string): void {\n const current = [...this._chars()];\n // Ensure the array is long enough.\n while (current.length <= index) current.push('');\n current[index] = char;\n this._chars.set(current);\n }\n\n /** Move focus by delta (+1 / -1), clamped to valid range. */\n moveFocus(delta: number): void {\n const current = this._focusedIndex();\n const next = Math.max(0, Math.min(this.kjLength() - 1, current + delta));\n this._cells.get(next)?.focus();\n }\n\n /** Focus a specific cell index (clamped to valid range). */\n focusIndex(index: number): void {\n const clamped = Math.max(0, Math.min(this.kjLength() - 1, index));\n this._focusedIndex.set(clamped);\n this._cells.get(clamped)?.focus();\n }\n\n /**\n * Distribute pasted text across cells starting from `fromIndex`.\n * Filters the pasted text through the current charSet before distributing.\n */\n handlePaste(event: ClipboardEvent, fromIndex: number): void {\n event.preventDefault();\n const raw = event.clipboardData?.getData('text') ?? '';\n this.distributeText(raw, fromIndex);\n const filtered = this._filterChars(raw);\n if (filtered) {\n this.kjPasted.emit(filtered);\n }\n }\n\n /** Intercept copy and write the full OTP value to the clipboard. */\n handleCopy(event: ClipboardEvent): void {\n event.preventDefault();\n event.clipboardData?.setData('text/plain', this.value());\n }\n\n /** Register a cell's native input element for programmatic focus. */\n registerCell(index: number, el: HTMLInputElement): void {\n this._cells.set(index, el);\n }\n\n /** Deregister a cell element on destroy. */\n unregisterCell(index: number): void {\n this._cells.delete(index);\n }\n\n /**\n * Distribute raw text across cells starting from `fromIndex`, filtering\n * through the current charSet. Called by `KjInputOtpCell` for both\n * iOS-autofill over-length writes and as the internal paste helper.\n * @internal\n */\n distributeText(text: string, fromIndex: number): void {\n const filtered = this._filterChars(text);\n if (!filtered) return;\n\n const current = [...this._chars()];\n while (current.length < this.kjLength()) current.push('');\n\n let cellIndex = fromIndex;\n for (const ch of filtered) {\n if (cellIndex >= this.kjLength()) break;\n current[cellIndex] = ch;\n cellIndex++;\n }\n this._chars.set(current);\n\n // Focus the first empty cell after distribution, or the last cell.\n const firstEmpty = current.findIndex((c, i) => i >= fromIndex && !c);\n const focusTarget = firstEmpty !== -1 ? firstEmpty : this.kjLength() - 1;\n this._cells.get(focusTarget)?.focus();\n }\n\n // ── Private helpers ──────────────────────────────────────────────────────────\n\n private _checkCompletion(val: string): void {\n const complete = val.length >= this.kjLength() && !val.includes('');\n if (complete && !this._wasComplete) {\n this._wasComplete = true;\n this.liveRegion.announce('Code complete');\n // Always emit kjComplete so consumers can react regardless of\n // kjAutoSubmit. kjAutoSubmit is a UX hint for consumers, not a gate.\n this.kjComplete.emit(val);\n } else if (!complete) {\n this._wasComplete = false;\n }\n }\n\n /** Filter a string to only characters allowed by the current charSet. */\n private _filterChars(input: string): string {\n const cs = this.kjCharSet();\n if (cs === 'digits') return input.replace(/[^0-9]/g, '');\n if (cs === 'alphanumeric') return input.replace(/[^A-Za-z0-9]/g, '');\n // Custom RegExp — apply per character.\n return input.split('').filter(ch => (cs as RegExp).test(ch)).join('');\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// KjInputOtpCell\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Leaf directive applied to each `<input>` inside a `[kjInputOtp]` group.\n *\n * Reads its character from the parent context signal keyed by `kjIndex`.\n * Owns per-cell keyboard handling (Backspace, ArrowLeft/Right, Home/End)\n * and delegates paste/copy and focus tracking back to the root directive.\n *\n * @example\n * ```html\n * <input kjInputOtpCell [kjIndex]=\"i\" />\n * ```\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name input-otp\n */\n@Directive({\n selector: 'input[kjInputOtpCell]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n 'type': 'text',\n 'maxlength': '1',\n 'autocapitalize': 'off',\n 'autocorrect': 'off',\n 'spellcheck': 'false',\n '[attr.inputmode]': 'inputmode()',\n '[attr.pattern]': 'pattern()',\n '[attr.autocomplete]': 'kjIndex() === 0 ? \"one-time-code\" : \"off\"',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.tabindex]': 'isTabStop() ? \"0\" : \"-1\"',\n '[attr.disabled]': 'ctx.disabled() ? \"\" : null',\n '[attr.readonly]': 'ctx.readonly() ? \"\" : null',\n '[attr.type]': 'ctx.masked() ? \"password\" : \"text\"',\n '[value]': 'ctx.value()[kjIndex()] ?? \"\"',\n '(input)': 'onInput($event)',\n '(keydown)': 'onKeydown($event)',\n '(paste)': 'ctx.handlePaste($event, kjIndex())',\n '(copy)': 'ctx.handleCopy($event)',\n '(focus)': 'ctx.focusIndex(kjIndex())',\n '(blur)': 'onBlur()',\n },\n})\nexport class KjInputOtpCell implements OnInit, OnDestroy {\n /** The context provided by the parent `KjInputOtp`. */\n readonly ctx = inject(KJ_INPUT_OTP);\n\n /** Zero-based index of this cell within the OTP group. Required. */\n readonly kjIndex = input.required<number>();\n\n /** Whether this cell is the roving tab stop. */\n protected readonly isTabStop = computed(() => {\n const chars = this.ctx.value();\n const len = this.ctx.length();\n // Tab stop is the first empty cell, or cell 0 when all are filled.\n const firstEmpty = Array.from({ length: len }, (_, i) => chars[i] ?? '').findIndex(c => !c);\n const tabStopIndex = firstEmpty === -1 ? 0 : firstEmpty;\n return this.kjIndex() === tabStopIndex;\n });\n\n protected readonly inputmode = computed(() =>\n this.ctx.charSet() === 'digits' ? 'numeric' : 'text',\n );\n\n protected readonly pattern = computed(() =>\n this.ctx.charSet() === 'digits' ? '[0-9]*' : null,\n );\n\n protected readonly ariaLabel = computed(\n () => `Code digit ${this.kjIndex() + 1} of ${this.ctx.length()}`,\n );\n\n // ── Lifecycle ────────────────────────────────────────────────────────────────\n\n private readonly _elRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n ngOnInit(): void {\n this.ctx.registerCell(this.kjIndex(), this._elRef.nativeElement);\n }\n\n ngOnDestroy(): void {\n this.ctx.unregisterCell(this.kjIndex());\n }\n\n // ── Event handlers ───────────────────────────────────────────────────────────\n\n /** Handle character input from the user (or iOS autofill writing a full code). */\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n const raw = target.value;\n\n if (raw.length > 1) {\n // iOS autofill or paste-via-input: treat as a paste from this index.\n // We call distributeText directly on the root to avoid constructing\n // ClipboardEvent/DataTransfer which are unavailable in some environments.\n (this.ctx as KjInputOtp).distributeText(raw, this.kjIndex());\n return;\n }\n\n const cs = this.ctx.charSet();\n const filtered = this._filterChar(raw, cs);\n\n if (filtered === '' && raw !== '') {\n // Character rejected — restore original value.\n target.value = this.ctx.value()[this.kjIndex()] ?? '';\n return;\n }\n\n this.ctx.setCellValue(this.kjIndex(), filtered);\n\n if (filtered !== '') {\n // Advance focus only if a valid character was entered.\n this.ctx.moveFocus(1);\n }\n }\n\n /** Handle keyboard navigation within the OTP group. */\n protected onKeydown(event: KeyboardEvent): void {\n const { key } = event;\n\n if (key === 'Backspace') {\n event.preventDefault();\n const currentChar = this.ctx.value()[this.kjIndex()] ?? '';\n if (currentChar !== '') {\n // Filled cell: clear it and move focus back.\n this.ctx.setCellValue(this.kjIndex(), '');\n this.ctx.moveFocus(-1);\n } else {\n // Empty cell: move to previous and clear that cell.\n const prevIndex = this.kjIndex() - 1;\n if (prevIndex >= 0) {\n this.ctx.setCellValue(prevIndex, '');\n this.ctx.moveFocus(-1);\n }\n }\n return;\n }\n\n if (key === 'Delete') {\n event.preventDefault();\n this.ctx.setCellValue(this.kjIndex(), '');\n return;\n }\n\n if (key === 'ArrowLeft') {\n event.preventDefault();\n this.ctx.moveFocus(-1);\n return;\n }\n\n if (key === 'ArrowRight') {\n event.preventDefault();\n this.ctx.moveFocus(1);\n return;\n }\n\n if (key === 'Home') {\n event.preventDefault();\n this.ctx.focusIndex(0);\n return;\n }\n\n if (key === 'End') {\n event.preventDefault();\n this.ctx.focusIndex(this.ctx.length() - 1);\n return;\n }\n }\n\n protected onBlur(): void {\n // Notify the form control as touched when any cell blurs\n // (the form control is on the root, cells delegate).\n // We reach the root's formCtrl through the context cast.\n const root = this.ctx as KjInputOtp;\n root.formCtrl?.notifyTouched?.();\n }\n\n // ── Private helpers ──────────────────────────────────────────────────────────\n\n private _filterChar(ch: string, cs: 'digits' | 'alphanumeric' | RegExp): string {\n if (!ch) return '';\n if (cs === 'digits') return /^[0-9]$/.test(ch) ? ch : '';\n if (cs === 'alphanumeric') return /^[A-Za-z0-9]$/.test(ch) ? ch : '';\n return (cs as RegExp).test(ch) ? ch : '';\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Shared context published by `[kjNumberInput]` and consumed by sibling\n * `[kjNumberStepper]` directives inside an optional `[kjNumberInputGroup]`.\n *\n * The number-input registers itself as the implementation; steppers call\n * `stepBy()` for click / long-press activations.\n */\nexport interface KjNumberInputContext {\n /** Current numeric value, or `null` for empty. */\n readonly value: Signal<number | null>;\n /** Effective minimum (`-Infinity` when no `kjMin` is set). */\n readonly min: Signal<number>;\n /** Effective maximum (`+Infinity` when no `kjMax` is set). */\n readonly max: Signal<number>;\n /** Step amount used for stepper presses and ArrowUp / ArrowDown. */\n readonly step: Signal<number>;\n /** PageUp / PageDown amount. Defaults to `step * 10`. */\n readonly pageStep: Signal<number>;\n /** Whether the field is fully disabled. */\n readonly disabled: Signal<boolean>;\n /** Whether the field is read-only. */\n readonly readonly: Signal<boolean>;\n /** Apply `n` step units. Positive for up, negative for down. Clamps + snaps. */\n stepBy(units: number, amount?: number): void;\n /** Set the value directly. Clamps + snaps. */\n setValue(value: number | null): void;\n}\n\nexport const KJ_NUMBER_INPUT = new InjectionToken<KjNumberInputContext>('KjNumberInput');\n","import { Directive, Signal, computed, signal } from '@angular/core';\nimport { KJ_NUMBER_INPUT, KjNumberInputContext } from './number-input.context';\n\n/**\n * Layout container for `[kjNumberInput]` + `[kjNumberStepper]`.\n *\n * Acts as a *context bridge*: the group provides `KJ_NUMBER_INPUT`, the\n * `[kjNumberInput]` registers itself with the group on construction, and\n * sibling `[kjNumberStepper]` directives inject the group's context to find\n * the input. This lets steppers and the input live as DOM siblings while\n * still sharing state via DI.\n *\n * Without the group the input still publishes the context to its own\n * descendants, but stepper buttons that are not descendants of the `<input>`\n * (almost always the case) need the group as their common ancestor.\n *\n * @example\n * ```html\n * <div kjNumberInputGroup>\n * <button kjNumberStepper kjStep=\"down\" aria-label=\"Decrease\">−</button>\n * <input kjNumberInput [(kjValue)]=\"qty\" />\n * <button kjNumberStepper kjStep=\"up\" aria-label=\"Increase\">+</button>\n * </div>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name number-input\n */\n@Directive({\n selector: '[kjNumberInputGroup]',\n standalone: true,\n providers: [{ provide: KJ_NUMBER_INPUT, useExisting: KjNumberInputGroup }],\n host: {\n 'role': 'group',\n },\n})\nexport class KjNumberInputGroup implements KjNumberInputContext {\n private readonly registered = signal<KjNumberInputContext | null>(null);\n\n /** Called by `[kjNumberInput]` from its constructor. @internal */\n register(input: KjNumberInputContext): void {\n this.registered.set(input);\n }\n\n // ── Forward each context member through to the registered input ──────────\n // While no input is registered, the signals fall back to safe sentinel\n // values; steppers inside an empty group are simply inert.\n\n readonly value: Signal<number | null> = computed(() => this.registered()?.value() ?? null);\n readonly min: Signal<number> = computed(() => this.registered()?.min() ?? -Infinity);\n readonly max: Signal<number> = computed(() => this.registered()?.max() ?? Infinity);\n readonly step: Signal<number> = computed(() => this.registered()?.step() ?? 1);\n readonly pageStep: Signal<number> = computed(() => this.registered()?.pageStep() ?? 10);\n readonly disabled: Signal<boolean> = computed(() => this.registered()?.disabled() ?? false);\n readonly readonly: Signal<boolean> = computed(() => this.registered()?.readonly() ?? false);\n\n stepBy(units: number, amount?: number): void {\n this.registered()?.stepBy(units, amount);\n }\n\n setValue(value: number | null): void {\n this.registered()?.setValue(value);\n }\n}\n","/**\n * Internal format / parse helpers for `[kjNumberInput]`.\n *\n * `Intl.NumberFormat` ships no standard `parse()` method. We compose one by\n * inspecting `formatToParts()` to derive the locale's group and decimal\n * separators, plus a regex per (locale, options) pair. Best-effort: locales\n * with non-ASCII digits (`ar-EG`) parse both Arabic-Indic and Western digits;\n * mixed / malformed input falls back to `null`.\n */\n\nexport interface KjNumberFormatOptions {\n readonly locale?: string;\n readonly format?: 'decimal' | 'currency' | 'percent' | 'unit';\n readonly currency?: string;\n readonly currencyDisplay?: 'symbol' | 'narrowSymbol' | 'code' | 'name';\n readonly unit?: string;\n readonly unitDisplay?: 'short' | 'long' | 'narrow';\n readonly useGrouping?: boolean;\n readonly minimumFractionDigits?: number;\n readonly maximumFractionDigits?: number;\n readonly minimumIntegerDigits?: number;\n readonly minimumSignificantDigits?: number;\n readonly maximumSignificantDigits?: number;\n}\n\n/** Build an `Intl.NumberFormat` options bag from our directive inputs. */\nfunction toIntlOptions(options: KjNumberFormatOptions): Intl.NumberFormatOptions {\n const o: Intl.NumberFormatOptions = {};\n if (options.format) o.style = options.format;\n if (options.format === 'currency' && options.currency) o.currency = options.currency;\n if (options.currencyDisplay) o.currencyDisplay = options.currencyDisplay;\n if (options.format === 'unit' && options.unit) o.unit = options.unit;\n if (options.unitDisplay) o.unitDisplay = options.unitDisplay;\n if (options.useGrouping !== undefined) o.useGrouping = options.useGrouping;\n if (options.minimumFractionDigits !== undefined) o.minimumFractionDigits = options.minimumFractionDigits;\n if (options.maximumFractionDigits !== undefined) o.maximumFractionDigits = options.maximumFractionDigits;\n if (options.minimumIntegerDigits !== undefined) o.minimumIntegerDigits = options.minimumIntegerDigits;\n if (options.minimumSignificantDigits !== undefined) o.minimumSignificantDigits = options.minimumSignificantDigits;\n if (options.maximumSignificantDigits !== undefined) o.maximumSignificantDigits = options.maximumSignificantDigits;\n return o;\n}\n\n/** Format `value` for display (with grouping / currency / unit / percent). */\nexport function formatNumber(\n value: number,\n options: KjNumberFormatOptions,\n): string {\n try {\n return new Intl.NumberFormat(options.locale, toIntlOptions(options)).format(value);\n } catch {\n return String(value);\n }\n}\n\n/** Format `value` for *editing*: locale decimal separator, sign, digits — no grouping, no symbol. */\nexport function formatForEdit(value: number, locale: string | undefined): string {\n try {\n return new Intl.NumberFormat(locale, { useGrouping: false, maximumFractionDigits: 20 }).format(value);\n } catch {\n return String(value);\n }\n}\n\n/** Cache of (locale → separators) — `Intl.NumberFormat` instantiation is non-trivial. */\nconst separatorCache = new Map<string, { group: string; decimal: string }>();\n\n/** Derive group + decimal separators for a locale via `formatToParts`. */\nexport function getSeparators(locale: string | undefined): { group: string; decimal: string } {\n const key = locale ?? '';\n const hit = separatorCache.get(key);\n if (hit) return hit;\n let group = ',';\n let decimal = '.';\n try {\n const parts = new Intl.NumberFormat(locale, { useGrouping: true }).formatToParts(12345.6);\n for (const p of parts) {\n if (p.type === 'group') group = p.value;\n else if (p.type === 'decimal') decimal = p.value;\n }\n } catch {\n /* fall back to defaults */\n }\n const sep = { group, decimal };\n separatorCache.set(key, sep);\n return sep;\n}\n\n/**\n * Parse a user-typed / pasted string into a number. Strips currency / percent /\n * unit symbols, normalises Arabic-Indic digits, accepts the locale's decimal\n * separator. Returns `null` for empty / unparseable input.\n *\n * For percent format, the user types `50` and we store `0.5` — the multiplier\n * is applied here when `format === 'percent'`.\n */\nexport function parseNumber(\n raw: string,\n options: KjNumberFormatOptions,\n): number | null {\n if (raw == null) return null;\n const trimmed = String(raw).trim();\n if (trimmed === '') return null;\n\n const { group, decimal } = getSeparators(options.locale);\n\n // Normalise Arabic-Indic (0660-0669) and extended Arabic-Indic (06F0-06F9) digits.\n let s = trimmed.replace(/[٠-٩]/g, d => String(d.charCodeAt(0) - 0x0660));\n s = s.replace(/[۰-۹]/g, d => String(d.charCodeAt(0) - 0x06F0));\n\n // Drop everything that is not a digit, sign, decimal sep, or group sep.\n // Group separators (incl. NBSP / narrow NBSP) get dropped; decimal becomes '.'.\n s = s.replace(new RegExp(`[${escapeRegex(group)}\\u00A0\\u202F\\u2009 ]`, 'g'), '');\n if (decimal !== '.') s = s.replace(new RegExp(escapeRegex(decimal), 'g'), '.');\n\n // Strip everything except digits, '.', '-', '+'.\n s = s.replace(/[^\\d.+-]/g, '');\n if (s === '' || s === '-' || s === '+' || s === '.') return null;\n\n const n = Number(s);\n if (!Number.isFinite(n)) return null;\n\n if (options.format === 'percent') return n / 100;\n return n;\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/** Clamp `value` into `[min, max]`. */\nexport function clamp(value: number, min: number, max: number): number {\n if (value < min) return min;\n if (value > max) return max;\n return value;\n}\n\n/** Snap `value` to the nearest `base + n * step` lattice. */\nexport function snapToStep(value: number, step: number, base: number): number {\n if (!Number.isFinite(step) || step <= 0) return value;\n const offset = value - base;\n const snapped = Math.round(offset / step) * step + base;\n // Round to a sensible decimal precision derived from `step` to suppress FP drift.\n const stepStr = String(step);\n const dot = stepStr.indexOf('.');\n const decimals = dot === -1 ? 0 : stepStr.length - dot - 1;\n const factor = Math.pow(10, decimals);\n return Math.round(snapped * factor) / factor;\n}\n","import {\n Directive,\n ElementRef,\n LOCALE_ID,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';\nimport { KJ_NUMBER_INPUT, KjNumberInputContext } from './number-input.context';\nimport { KjNumberInputGroup } from './number-input-group';\nimport {\n clamp,\n formatForEdit,\n formatNumber,\n parseNumber,\n snapToStep,\n type KjNumberFormatOptions,\n} from './number-input.format';\n\nlet nextId = 0;\n\n/**\n * Enhances a native `<input>` with numeric-spinbox semantics: bounded\n * `kjMin` / `kjMax` / `kjStep`, increment / decrement on ArrowUp / ArrowDown,\n * PageUp / PageDown / Home / End, optional locale-aware display formatting via\n * `Intl.NumberFormat`, and the WAI-ARIA `spinbutton` contract\n * (`aria-valuemin` / `aria-valuemax` / `aria-valuenow` / `aria-valuetext`).\n *\n * The directive is a sibling to `[kjInput]`, not a sub-directive: the CVA\n * model is `number | null` (not `string | null`) and the keyboard contract\n * adds Arrow / Page / Home / End semantics. The two are mutually exclusive on\n * the same element.\n *\n * Compose with `[kjNumberStepper]` on sibling buttons (typically inside a\n * `[kjNumberInputGroup]`) to add increment / decrement triggers with\n * long-press auto-repeat.\n *\n * @example\n * ```html\n * <input kjNumberInput [(kjValue)]=\"qty\" [kjMin]=\"0\" [kjMax]=\"100\" [kjStep]=\"1\" />\n * ```\n * @doc\n * @doc-example Default\n * @doc-file number-input.example.ts\n * @doc-example With stepper buttons\n * @doc-file number-input.with-stepper.example.ts\n * @doc-example Min / max / step\n * @doc-file number-input.min-max.example.ts\n * @doc-example Decimal precision\n * @doc-file number-input.decimal.example.ts\n * @doc-example Currency formatting\n * @doc-file number-input.currency.example.ts\n * @doc-category Core/Inputs\n * @doc-name number-input\n * @doc-description Adds numeric spinbutton behaviour to a native input with min, max, step, and locale formatting.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjNumberInput]',\n standalone: true,\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFocusRing,\n KjFormControl,\n ],\n providers: [{ provide: KJ_NUMBER_INPUT, useExisting: KjNumberInput }],\n exportAs: 'kjNumberInput',\n host: {\n '[attr.role]': '\"spinbutton\"',\n '[attr.type]': 'kjUseNativeNumber() ? \"number\" : \"text\"',\n '[attr.inputmode]': 'inputMode()',\n '[attr.id]': 'inputId()',\n '[attr.aria-valuemin]': 'isFiniteMin() ? kjMin() : null',\n '[attr.aria-valuemax]': 'isFiniteMax() ? kjMax() : null',\n '[attr.aria-valuenow]': 'kjValue() ?? null',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-invalid]': 'ariaInvalid()',\n '[attr.aria-readonly]': 'kjReadonly() ? \"true\" : null',\n '[attr.readonly]': 'kjReadonly() ? \"\" : null',\n '[attr.disabled]': 'formCtrl.disabled() ? \"\" : null',\n '[attr.aria-label]': 'kjAriaLabel()',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(input)': 'onInput($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjNumberInput implements KjNumberInputContext {\n /** @internal */\n readonly formCtrl = inject(KjFormControl);\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly localeId = inject(LOCALE_ID);\n private readonly group = inject(KjNumberInputGroup, { optional: true, skipSelf: true });\n\n /** Two-way bindable numeric model. `null` for empty. */\n readonly kjValue = model<number | null>(null);\n\n /** Minimum allowed value. `undefined` → unbounded (`-Infinity`). */\n readonly kjMin = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** Maximum allowed value. `undefined` → unbounded (`+Infinity`). */\n readonly kjMax = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** Step amount for ArrowUp / ArrowDown / stepper presses. */\n readonly kjStep = input<number, unknown>(1, { transform: numberAttribute });\n\n /** PageUp / PageDown amount. Defaults to `kjStep * 10` if `undefined`. */\n readonly kjPageStep = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** Lattice base for snap-to-step. Defaults to `kjMin` if defined, else `0`. */\n readonly kjStepBase = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** When `false`, blur on empty snaps to `clamp(0, kjMin, kjMax)`. */\n readonly kjAllowEmpty = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** When `false`, the decimal separator is rejected on type. */\n readonly kjAllowDecimals = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** When `false`, the sign character is rejected and `kjMin` is floored at `0`. */\n readonly kjAllowNegative = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Read-only state. Reflects `aria-readonly` and `[readonly]`. */\n readonly kjReadonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** External invalid signal. OR'd with bounds + form invalidity for `aria-invalid`. */\n readonly kjInvalid = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Opts into native `<input type=\"number\">` mode. Disables the mask + locale formatting. */\n readonly kjUseNativeNumber = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Drives `Intl.NumberFormat` style. Ignored when `kjUseNativeNumber=true`. */\n readonly kjFormat = input<'decimal' | 'currency' | 'percent' | 'unit'>('decimal');\n\n /** BCP-47 tag. Falls back to the injected `LOCALE_ID`. */\n readonly kjLocale = input<string | undefined>(undefined);\n\n /** ISO 4217 code (e.g. `'USD'`). Required when `kjFormat=\"currency\"`. */\n readonly kjCurrency = input<string | undefined>(undefined);\n\n /** Currency display mode. */\n readonly kjCurrencyDisplay = input<'symbol' | 'narrowSymbol' | 'code' | 'name'>('symbol');\n\n /** Unit identifier (e.g. `'kilometer'`). Required when `kjFormat=\"unit\"`. */\n readonly kjUnit = input<string | undefined>(undefined);\n\n /** Unit display mode. */\n readonly kjUnitDisplay = input<'short' | 'long' | 'narrow'>('short');\n\n /** Whether to use thousands grouping in the formatted display. */\n readonly kjUseGrouping = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Minimum fraction digits forwarded to `Intl.NumberFormat`. */\n readonly kjMinimumFractionDigits = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** Maximum fraction digits forwarded to `Intl.NumberFormat`. */\n readonly kjMaximumFractionDigits = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** Minimum integer digits forwarded to `Intl.NumberFormat`. */\n readonly kjMinimumIntegerDigits = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** Minimum significant digits forwarded to `Intl.NumberFormat`. */\n readonly kjMinimumSignificantDigits = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** Maximum significant digits forwarded to `Intl.NumberFormat`. */\n readonly kjMaximumSignificantDigits = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** Forwarded to `[attr.aria-label]`. */\n readonly kjAriaLabel = input<string | null>(null);\n\n // ── Internal state ────────────────────────────────────────────────────────\n\n private readonly editing = signal(false);\n private readonly _id = `kj-number-${++nextId}`;\n\n /** Computed effective minimum (number; `-Infinity` if unbounded). */\n readonly min = computed(() => {\n const explicit = this.kjMin();\n const base = explicit === undefined ? -Infinity : explicit;\n return this.kjAllowNegative() ? base : Math.max(0, base);\n });\n\n /** Computed effective maximum (number; `+Infinity` if unbounded). */\n readonly max = computed(() => {\n const explicit = this.kjMax();\n return explicit === undefined ? Infinity : explicit;\n });\n\n readonly step = computed(() => this.kjStep());\n readonly pageStep = computed(() => this.kjPageStep() ?? this.kjStep() * 10);\n readonly disabled = computed(() => this.formCtrl.disabled());\n readonly readonly = computed(() => this.kjReadonly());\n\n /** @internal */\n readonly value = this.kjValue.asReadonly();\n\n protected readonly isFiniteMin = computed(() => Number.isFinite(this.min()));\n protected readonly isFiniteMax = computed(() => Number.isFinite(this.max()));\n\n protected readonly inputId = computed(() => this.el.nativeElement.id || this._id);\n\n protected readonly inputMode = computed(() => {\n if (this.kjUseNativeNumber()) return null;\n if (this.kjFormat() === 'decimal' && !this.kjAllowDecimals()) return 'numeric';\n return 'decimal';\n });\n\n /** Formatter options derived from the public inputs. */\n private readonly formatOptions = computed<KjNumberFormatOptions>(() => ({\n locale: this.kjLocale() ?? this.localeId,\n format: this.kjFormat(),\n currency: this.kjCurrency(),\n currencyDisplay: this.kjCurrencyDisplay(),\n unit: this.kjUnit(),\n unitDisplay: this.kjUnitDisplay(),\n useGrouping: this.kjUseGrouping(),\n minimumFractionDigits: this.kjMinimumFractionDigits(),\n maximumFractionDigits: this.kjMaximumFractionDigits(),\n minimumIntegerDigits: this.kjMinimumIntegerDigits(),\n minimumSignificantDigits: this.kjMinimumSignificantDigits(),\n maximumSignificantDigits: this.kjMaximumSignificantDigits(),\n }));\n\n /** Out-of-range when the value falls outside [min, max]. Used for `aria-invalid`. */\n protected readonly outOfRange = computed(() => {\n const v = this.kjValue();\n if (v == null) return false;\n return v < this.min() || v > this.max();\n });\n\n protected readonly ariaInvalid = computed(() => {\n const touched = this.formCtrl.touched();\n const invalid = this.kjInvalid() || this.outOfRange();\n return touched && invalid ? 'true' : null;\n });\n\n protected readonly ariaValueText = computed(() => {\n const v = this.kjValue();\n if (v == null) return null;\n return formatNumber(v, this.formatOptions());\n });\n\n constructor() {\n // Register with an enclosing group so sibling steppers can find us.\n this.group?.register(this);\n\n // Bridge the model ↔ KjFormControl value so reactive forms see numeric values.\n effect(() => {\n const cvaValue = this.formCtrl.value();\n if (cvaValue === undefined) return;\n const num = cvaValue == null ? null : typeof cvaValue === 'number' ? cvaValue : parseNumber(String(cvaValue), this.formatOptions());\n if (num !== this.kjValue()) this.kjValue.set(num);\n });\n\n // Reflect the numeric model back to the native input — formatted when not editing,\n // raw-edit form when editing or when in native-number mode.\n effect(() => {\n const value = this.kjValue();\n const editing = this.editing();\n const native = this.kjUseNativeNumber();\n const el = this.el.nativeElement;\n if (value == null) {\n if (el.value !== '') el.value = '';\n return;\n }\n let next: string;\n if (native) {\n next = String(value);\n } else if (editing) {\n // Percent: the user thinks of `50` even though we store `0.5`.\n const display = this.kjFormat() === 'percent' ? value * 100 : value;\n next = formatForEdit(display, this.kjLocale() ?? this.localeId);\n } else {\n next = formatNumber(value, this.formatOptions());\n }\n if (el.value !== next) el.value = next;\n });\n\n // Clamp the value when min/max change at runtime.\n effect(() => {\n const v = this.kjValue();\n if (v == null) return;\n const min = this.min();\n const max = this.max();\n if (v < min || v > max) {\n const clamped = clamp(v, min, max);\n if (clamped !== v) {\n this.kjValue.set(clamped);\n this.formCtrl.notifyChange(clamped);\n }\n }\n });\n }\n\n // ── KjNumberInputContext ──────────────────────────────────────────────────\n\n /** @internal */\n stepBy(units: number, amount?: number): void {\n if (this.kjReadonly() || this.formCtrl.disabled()) return;\n const stepAmount = amount ?? this.kjStep();\n const current = this.kjValue() ?? this.fallbackForStep();\n const base = this.kjStepBase() ?? (this.kjMin() ?? 0);\n const next = snapToStep(current + units * stepAmount, stepAmount, base);\n this.commit(clamp(next, this.min(), this.max()));\n }\n\n /** @internal */\n setValue(value: number | null): void {\n if (value == null) {\n this.commit(null);\n return;\n }\n const base = this.kjStepBase() ?? (this.kjMin() ?? 0);\n const snapped = snapToStep(value, this.kjStep(), base);\n this.commit(clamp(snapped, this.min(), this.max()));\n }\n\n // ── Event handlers ────────────────────────────────────────────────────────\n\n /** @internal */\n onFocus(): void {\n if (this.kjUseNativeNumber()) return;\n this.editing.set(true);\n }\n\n /** @internal */\n onBlur(): void {\n this.editing.set(false);\n this.formCtrl.notifyTouched();\n // Commit current edit buffer.\n const raw = this.el.nativeElement.value;\n if (raw === '' || raw == null) {\n if (this.kjAllowEmpty()) {\n this.commit(null);\n } else {\n this.commit(clamp(0, this.min(), this.max()));\n }\n return;\n }\n const parsed = this.kjUseNativeNumber()\n ? Number(raw)\n : parseNumber(raw, this.formatOptions());\n if (parsed == null || !Number.isFinite(parsed)) {\n this.commit(null);\n return;\n }\n this.commit(clamp(parsed, this.min(), this.max()));\n }\n\n /** @internal */\n onInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n // While editing we keep the model in sync so `aria-valuenow` updates with typing.\n if (this.kjUseNativeNumber()) {\n const n = raw === '' ? null : Number(raw);\n const next = n != null && Number.isFinite(n) ? n : null;\n this.kjValue.set(next);\n this.formCtrl.notifyChange(next);\n return;\n }\n const parsed = parseNumber(raw, this.formatOptions());\n this.kjValue.set(parsed);\n this.formCtrl.notifyChange(parsed);\n }\n\n /** @internal */\n onKeydown(event: KeyboardEvent): void {\n if (this.kjReadonly() || this.formCtrl.disabled()) return;\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.stepBy(1);\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.stepBy(-1);\n break;\n case 'PageUp':\n event.preventDefault();\n this.stepBy(1, this.pageStep());\n break;\n case 'PageDown':\n event.preventDefault();\n this.stepBy(-1, this.pageStep());\n break;\n case 'Home':\n if (Number.isFinite(this.min())) {\n event.preventDefault();\n this.commit(this.min());\n }\n break;\n case 'End':\n if (Number.isFinite(this.max())) {\n event.preventDefault();\n this.commit(this.max());\n }\n break;\n default:\n if (this.kjUseNativeNumber()) return;\n // Character filter: drop disallowed chars (decimal, sign) when restricted.\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n if (event.key === '.' || event.key === ',') {\n if (!this.kjAllowDecimals()) event.preventDefault();\n } else if (event.key === '-' || event.key === '+') {\n if (!this.kjAllowNegative()) event.preventDefault();\n }\n }\n }\n }\n\n // ── Internals ─────────────────────────────────────────────────────────────\n\n private commit(next: number | null): void {\n if (next === this.kjValue()) {\n // Still re-render the formatted display in case the editing buffer drifted.\n this.refreshDisplay();\n return;\n }\n this.kjValue.set(next);\n this.formCtrl.notifyChange(next);\n }\n\n private refreshDisplay(): void {\n const el = this.el.nativeElement;\n const value = this.kjValue();\n if (value == null) {\n el.value = '';\n return;\n }\n if (this.kjUseNativeNumber()) {\n el.value = String(value);\n return;\n }\n el.value = this.editing()\n ? formatForEdit(this.kjFormat() === 'percent' ? value * 100 : value, this.kjLocale() ?? this.localeId)\n : formatNumber(value, this.formatOptions());\n }\n\n private fallbackForStep(): number {\n const min = this.min();\n if (Number.isFinite(min)) return min;\n const max = this.max();\n if (Number.isFinite(max)) return max;\n return 0;\n }\n}\n\nfunction optionalNumber(v: unknown): number | undefined {\n if (v === undefined || v === null || v === '') return undefined;\n const n = typeof v === 'number' ? v : Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n inject,\n input,\n numberAttribute,\n output,\n} from '@angular/core';\nimport { KJ_NUMBER_INPUT, KjNumberInputContext } from './number-input.context';\n\n/**\n * Sibling stepper button for `[kjNumberInput]`. Owns increment / decrement\n * activations on click / Enter / Space and a long-press auto-repeat cycle on\n * pointer-hold (500 ms initial → 100 ms → 50 ms after 10 ticks).\n *\n * Reflects bounds-aware `aria-disabled` (`value >= max` for `up`,\n * `value <= min` for `down`) and intercepts capture-phase activation when\n * effective-disabled, mirroring `KjButton`. The host is forced to\n * `type=\"button\"` so a press inside a `<form>` does not submit it.\n *\n * Expects to find a `KjNumberInput` either via an enclosing\n * `[kjNumberInputGroup]` (canonical) or via the `[kjNumberStepperFor]`\n * template-ref escape hatch.\n *\n * @example\n * ```html\n * <div kjNumberInputGroup>\n * <button kjButton kjNumberStepper kjStep=\"down\" aria-label=\"Decrease\">−</button>\n * <input kjNumberInput [(kjValue)]=\"qty\" [kjMin]=\"0\" [kjMax]=\"100\" />\n * <button kjButton kjNumberStepper kjStep=\"up\" aria-label=\"Increase\">+</button>\n * </div>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name number-input\n */\n@Directive({\n selector: '[kjNumberStepper]',\n standalone: true,\n host: {\n '[attr.type]': '\"button\"',\n '[attr.aria-label]': 'kjAriaLabel()',\n '[attr.aria-controls]': 'controlledId()',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '[attr.tabindex]': '\"-1\"',\n '(click)': 'onClick($event)',\n '(keydown.enter)': 'onActivate($event)',\n '(keydown.space)': 'onActivate($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointerup)': 'cancelRepeat()',\n '(pointerleave)': 'cancelRepeat()',\n '(pointercancel)': 'cancelRepeat()',\n },\n})\nexport class KjNumberStepper {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly groupCtx = inject<KjNumberInputContext>(KJ_NUMBER_INPUT, { optional: true });\n\n /** Direction. Required — no default. */\n readonly kjStep = input.required<'up' | 'down'>();\n\n /** Per-button override of the input's `kjStep`. */\n readonly kjStepAmount = input<number | undefined, unknown>(undefined, {\n transform: (v: unknown) => (v === undefined || v === null || v === '' ? undefined : numberAttribute(v)),\n });\n\n /** Optional escape-hatch reference to a `[kjNumberInput]`. */\n readonly kjNumberStepperFor = input<KjNumberInputContext | null>(null);\n\n /** Required for icon-only stepper buttons. */\n readonly kjAriaLabel = input<string | null>(null);\n\n /** Forwarded to the host's effective-disabled. ORed with bounds-disabled. */\n readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Emits the new value after each step. */\n readonly kjStepped = output<number>();\n\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private repeatTicks = 0;\n\n protected readonly target = computed<KjNumberInputContext | null>(\n () => this.kjNumberStepperFor() ?? this.groupCtx ?? null,\n );\n\n protected readonly controlledId = computed(() => {\n const t = this.target();\n if (!t) return null;\n // The input's host id is set via `[attr.id]` from KjNumberInput. Reach for the element.\n // `t` is the directive instance — we don't expose a public `inputId()` on the context, so\n // we fall back to scanning the DOM in afterNextRender. For now, return null and rely on the\n // wrapper to wire `aria-controls` via DOM-id when needed.\n return null;\n });\n\n /** Bounds-aware effective disabled. */\n protected readonly effectiveDisabled = computed(() => {\n if (this.kjDisabled()) return true;\n const t = this.target();\n if (!t) return false;\n if (t.disabled() || t.readonly()) return true;\n const v = t.value();\n if (v == null) return false;\n return this.kjStep() === 'up' ? v >= t.max() : v <= t.min();\n });\n\n constructor() {\n // Capture-phase click suppression mirrors KjButton: stops consumer (click)\n // listeners from firing when the stepper is effective-disabled.\n afterNextRender(() => {\n const handler = (event: Event) => {\n if (this.effectiveDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n this.el.nativeElement.addEventListener('click', handler, { capture: true });\n this.destroyRef.onDestroy(() => {\n this.el.nativeElement.removeEventListener('click', handler, { capture: true });\n this.cancelRepeat();\n });\n });\n }\n\n /** @internal */\n onClick(event: Event): void {\n if (this.effectiveDisabled()) {\n event.preventDefault();\n return;\n }\n this.tick();\n }\n\n /** @internal */\n onActivate(event: Event): void {\n if (this.effectiveDisabled()) {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n this.tick();\n }\n\n /** @internal */\n onPointerDown(event: PointerEvent): void {\n if (this.effectiveDisabled()) {\n event.preventDefault();\n return;\n }\n // Preserve focus on the input — clicking the stepper must not move focus.\n event.preventDefault();\n this.cancelRepeat();\n this.timeoutId = setTimeout(() => {\n this.intervalId = setInterval(() => {\n this.repeatTicks++;\n this.tick();\n if (this.repeatTicks === 10 && this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = setInterval(() => this.tick(), 50);\n }\n }, 100);\n }, 500);\n }\n\n /** @internal */\n cancelRepeat(): void {\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n this.repeatTicks = 0;\n }\n\n private tick(): void {\n const t = this.target();\n if (!t) return;\n const units = this.kjStep() === 'up' ? 1 : -1;\n t.stepBy(units, this.kjStepAmount());\n const v = t.value();\n if (v != null) this.kjStepped.emit(v);\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Source of a value mutation, used by analytics / wrapper announcements. */\nexport type KjSliderSource = 'pointer' | 'keyboard' | 'programmatic';\n\n/**\n * Public handle each `[kjSliderThumb]` registers with the root.\n * Used by the root for cross-thumb coordination (min-distance, swap),\n * and by the track for click-to-jump nearest-thumb resolution.\n */\nexport interface KjSliderThumbHandle {\n /** DOM-order index. `0` for single mode, `0` (low) and `1` (high) for range. */\n readonly index: number;\n /** Current per-thumb value. */\n readonly value: Signal<number>;\n /** Underlying focusable host element. */\n readonly element: HTMLElement;\n /** Per-thumb effective disabled (root-OR-thumb). */\n readonly disabled: Signal<boolean>;\n /** Set the thumb's value. Performs clamp + snap and invokes the per-thumb CVA. */\n setValue(value: number, source: KjSliderSource): void;\n /** Move keyboard focus to the thumb. */\n focus(): void;\n}\n\n/**\n * Shared context published by `[kjSlider]` and consumed by\n * `[kjSliderTrack]`, `[kjSliderRange]`, `[kjSliderThumb]`, and\n * `[kjSliderTick]`.\n */\nexport interface KjSliderContext {\n // Bounds\n readonly min: Signal<number>;\n readonly max: Signal<number>;\n readonly step: Signal<number>;\n readonly pageStep: Signal<number>;\n readonly stepBase: Signal<number>;\n\n // Layout\n readonly orientation: Signal<'horizontal' | 'vertical'>;\n readonly direction: Signal<'ltr' | 'rtl'>;\n readonly inverted: Signal<boolean>;\n\n // Range coordination\n readonly minDistance: Signal<number>;\n readonly allowThumbCross: Signal<boolean>;\n\n // State\n readonly disabled: Signal<boolean>;\n readonly readonly: Signal<boolean>;\n readonly dragging: Signal<boolean>;\n readonly activeThumbIndex: Signal<number | null>;\n\n // Registry\n readonly thumbs: Signal<readonly KjSliderThumbHandle[]>;\n\n // Geometry (set by KjSliderTrack)\n readonly trackElement: Signal<HTMLElement | null>;\n\n // Tick definition\n readonly ticks: Signal<readonly number[]>;\n\n // Display / formatting\n readonly displayWith: Signal<((value: number, thumbIndex: number) => string) | undefined>;\n\n // Mutations\n registerThumb(handle: KjSliderThumbHandle): void;\n unregisterThumb(handle: KjSliderThumbHandle): void;\n setTrackElement(el: HTMLElement | null): void;\n setThumbValue(thumbIndex: number, value: number, source: KjSliderSource): void;\n beginDrag(thumbIndex: number): void;\n endDrag(cancelled?: boolean): void;\n /** Returns the index of the thumb closest to `value`, ties resolved by side (`px` half). */\n nearestThumbIndex(value: number): number;\n /** Convert client coordinates (px) to a slider value, respecting orientation/RTL/inverted. */\n valueFromClientPosition(clientX: number, clientY: number): number;\n}\n\nexport const KJ_SLIDER = new InjectionToken<KjSliderContext>('KjSlider');\n","/**\n * Pointer-to-value math for `[kjSlider]`. Pure functions kept outside the\n * directive so they can be unit-tested without an Angular `TestBed`.\n *\n * Rules:\n * - Horizontal LTR: `value = min + (px - left) / width * range`.\n * - Horizontal RTL: invert the X axis before mapping.\n * - Vertical: top of the track = `max`, bottom = `min`.\n * - `inverted` flips the visual axis after the orientation/RTL transform.\n * - Output is clamped to `[min, max]` but **not** snapped — snapping is the\n * directive's responsibility (it owns `kjStep` / `kjStepBase`).\n */\n\nexport interface KjSliderGeometryArgs {\n readonly min: number;\n readonly max: number;\n readonly orientation: 'horizontal' | 'vertical';\n readonly direction: 'ltr' | 'rtl';\n readonly inverted: boolean;\n readonly trackRect: DOMRect | DOMRectReadOnly;\n}\n\n/** Map client coordinates to a value in `[min, max]` (no snapping). */\nexport function valueFromClientPosition(\n clientX: number,\n clientY: number,\n args: KjSliderGeometryArgs,\n): number {\n const { min, max, orientation, direction, inverted, trackRect } = args;\n const range = max - min;\n if (range <= 0) return min;\n\n let fraction: number;\n if (orientation === 'vertical') {\n // top = max, bottom = min\n const denom = trackRect.height || 1;\n fraction = (trackRect.bottom - clientY) / denom;\n } else {\n const denom = trackRect.width || 1;\n if (direction === 'rtl') {\n fraction = (trackRect.right - clientX) / denom;\n } else {\n fraction = (clientX - trackRect.left) / denom;\n }\n }\n\n if (inverted) fraction = 1 - fraction;\n\n // Clamp the fraction first, then map. Avoids tiny FP drift past bounds.\n if (fraction <= 0) return min;\n if (fraction >= 1) return max;\n const value = min + fraction * range;\n\n // Coerce values within EPSILON*range of the bounds to the exact bound.\n const eps = Number.EPSILON * range;\n if (Math.abs(value - min) <= eps) return min;\n if (Math.abs(value - max) <= eps) return max;\n return value;\n}\n\n/** Position fraction `[0..1]` for a value, post-orientation/RTL/inverted. */\nexport function fractionForValue(\n value: number,\n args: Pick<KjSliderGeometryArgs, 'min' | 'max' | 'inverted'>,\n): number {\n const range = args.max - args.min;\n if (range <= 0) return 0;\n let f = (value - args.min) / range;\n if (f < 0) f = 0;\n else if (f > 1) f = 1;\n if (args.inverted) f = 1 - f;\n return f;\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { KjDirectionality } from '../primitives/directionality/directionality';\nimport { KjDisabled } from '../primitives/interaction/disabled';\nimport { clamp, snapToStep } from '../number-input/number-input.format';\nimport {\n KJ_SLIDER,\n KjSliderContext,\n KjSliderSource,\n KjSliderThumbHandle,\n} from './slider.context';\nimport { valueFromClientPosition } from './slider.geometry';\n\n/**\n * Headless root of the `KjSlider` directive family. Owns bounds (`kjMin` /\n * `kjMax` / `kjStep` / `kjPageStep` / `kjStepBase`), orientation, RTL,\n * inverted axis, range-mode coordination (min-distance, swap policy), tick\n * definition, and a per-mode value sugar (`kjValue` for single-thumb,\n * `kjRange` for two-thumb). Publishes `KJ_SLIDER` to descendants.\n *\n * Composition shape (mirrors Radix):\n *\n * ```html\n * <div kjSlider [(kjValue)]=\"volume\" [kjMin]=\"0\" [kjMax]=\"100\" [kjStep]=\"1\">\n * <div kjSliderTrack>\n * <div kjSliderRange></div>\n * <button kjSliderThumb kjAriaLabel=\"Volume\" type=\"button\"></button>\n * </div>\n * </div>\n * ```\n *\n * In single mode, `[(kjValue)]` mirrors the lone `[kjSliderThumb]` value.\n * In range mode, bind `[(kjRange)]` (a `[number, number]` tuple) at the root,\n * or two independent `[(kjValue)]`s on the two thumbs (with `KjFormControl`\n * carrying each one through Angular Forms — natural validators).\n *\n * Per-thumb `KjFormControl` lives on the thumb directive, not here. The root\n * coordinates: it enforces `kjMinDistance` and `kjAllowThumbCross`, narrows\n * each thumb's `aria-valuemin/max` to the partner-thumb position, and\n * exposes the dragging / active-thumb state for the wrapper visuals.\n *\n * @doc-css-var\n * --kj-slider-track-thickness — Track width on vertical / height on horizontal.\n * --kj-slider-track-bg — Track (unfilled portion) background.\n * --kj-slider-fill-bg — Filled-range background between thumbs (or start → thumb).\n * --kj-slider-thumb-size — Visual diameter of the thumb circle.\n * --kj-slider-thumb-hit — Invisible hit area / touch target around the thumb. 2.75rem for WCAG 2.5.5.\n * --kj-slider-thumb-bg — Thumb background fill.\n * --kj-slider-thumb-fg — Thumb foreground (icon/text inside) color.\n * --kj-slider-thumb-border — Thumb border shorthand. Halos the thumb against the track.\n * --kj-slider-tick-size — Diameter of optional tick marks.\n * --kj-slider-tick-bg — Tick mark color.\n * --kj-slider-radius — Track and fill corner radius. Defaults to a pill.\n * --kj-slider-vertical-length — Default rail length when orientation is vertical.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name slider\n * @doc-description Unstyled slider root for single or range value selection with bounds, orientation, RTL, and ticks.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjSlider]',\n standalone: true,\n hostDirectives: [{ directive: KjDisabled, inputs: ['kjDisabled'] }],\n providers: [{ provide: KJ_SLIDER, useExisting: KjSlider }],\n exportAs: 'kjSlider',\n host: {\n '[attr.role]': 'role()',\n '[attr.data-orientation]': 'kjOrientation()',\n '[attr.data-direction]': 'direction()',\n '[attr.data-disabled]': 'kjDisabled() ? \"\" : null',\n '[attr.data-readonly]': 'kjReadonly() ? \"\" : null',\n '[attr.data-dragging]': 'dragging() ? \"\" : null',\n },\n})\nexport class KjSlider implements KjSliderContext {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly directionality = inject(KjDirectionality);\n\n // ── Bounds ────────────────────────────────────────────────────────────────\n\n /** Lower bound. Reflected as `aria-valuemin` on each thumb. */\n readonly kjMin = input<number, unknown>(0, { transform: numberAttribute });\n\n /** Upper bound. Reflected as `aria-valuemax` on each thumb. */\n readonly kjMax = input<number, unknown>(100, { transform: numberAttribute });\n\n /** Increment unit. `0` (or non-positive) means continuous (no snap). */\n readonly kjStep = input<number, unknown>(1, { transform: numberAttribute });\n\n /** PageUp / PageDown step. Defaults to `max(kjStep * 10, range / 10)`. */\n readonly kjPageStep = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n /** Lattice base for snap-to-step. Defaults to `kjMin`. */\n readonly kjStepBase = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n\n // ── Layout ────────────────────────────────────────────────────────────────\n\n /** Visual orientation. Reflected as `aria-orientation` on each thumb. */\n readonly kjOrientation = input<'horizontal' | 'vertical'>('horizontal');\n\n /** RTL handling. `'auto'` reads from the injected `KjDirectionality`. */\n readonly kjDirection = input<'ltr' | 'rtl' | 'auto'>('auto');\n\n /** Visually flips the axis without changing the keyboard contract. */\n readonly kjInverted = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n // ── Range coordination ───────────────────────────────────────────────────\n\n /** Minimum delta in *value* units between low and high in range mode. */\n readonly kjMinDistance = input<number, unknown>(0, { transform: numberAttribute });\n\n /** When `true`, low/high silently swap when crossed. Off by default. */\n readonly kjAllowThumbCross = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n // ── Tick + display ───────────────────────────────────────────────────────\n\n /** Tick definition. `false` (default) renders no ticks; `'auto'` per-step; explicit array for irregular ticks. */\n readonly kjTicks = input<readonly number[] | 'auto' | false>(false);\n\n /** Formatter for `aria-valuetext` / value bubble. Receives the thumb index. */\n readonly kjDisplayWith = input<((value: number, thumbIndex: number) => string) | undefined>(undefined);\n\n // ── State ────────────────────────────────────────────────────────────────\n\n /** Read-only state. Drag and key both ignored; thumbs remain focusable. */\n readonly kjReadonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Effective-disabled. Composed via `KjDisabled`. */\n readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n // ── Sugar models ─────────────────────────────────────────────────────────\n\n /** Single-mode sugar. Mirrors the single child thumb's value. */\n readonly kjValue = model<number | undefined>(undefined);\n\n /** Range-mode sugar. Mirrors `[low, high]` in stable order. */\n readonly kjRange = model<readonly [number, number] | undefined>(undefined);\n\n // ── Outputs ──────────────────────────────────────────────────────────────\n\n /** Fires per-tick during drag and per-keypress; high frequency. */\n readonly kjInput = output<{\n value: number | readonly [number, number];\n thumbIndex: number;\n source: KjSliderSource;\n }>();\n\n /** Fires once per committed change (pointerup, keypress, programmatic). */\n readonly kjCommit = output<number | readonly [number, number]>();\n\n /** Pointerdown on a thumb (after threshold). */\n readonly kjDragStart = output<{ thumbIndex: number }>();\n\n /** Pointerup / Esc-during-drag. */\n readonly kjDragEnd = output<{ thumbIndex: number; cancelled: boolean }>();\n\n // ── Internal state ───────────────────────────────────────────────────────\n\n private readonly _thumbs = signal<readonly KjSliderThumbHandle[]>([]);\n private readonly _trackEl = signal<HTMLElement | null>(null);\n private readonly _dragging = signal(false);\n private readonly _activeThumbIndex = signal<number | null>(null);\n\n // ── Public computed signals (KjSliderContext) ────────────────────────────\n\n readonly min = computed(() => this.kjMin());\n readonly max = computed(() => this.kjMax());\n readonly step = computed(() => this.kjStep());\n readonly pageStep = computed(() => {\n const explicit = this.kjPageStep();\n if (explicit !== undefined && explicit > 0) return explicit;\n const range = this.max() - this.min();\n const stepTen = this.step() * 10;\n return Math.max(stepTen > 0 ? stepTen : 1, range / 10);\n });\n readonly stepBase = computed(() => this.kjStepBase() ?? this.min());\n\n readonly orientation = computed(() => this.kjOrientation());\n readonly direction = computed<'ltr' | 'rtl'>(() => {\n const d = this.kjDirection();\n if (d === 'rtl') return 'rtl';\n if (d === 'ltr') return 'ltr';\n return this.directionality.current();\n });\n readonly inverted = computed(() => this.kjInverted());\n\n readonly minDistance = computed(() => this.kjMinDistance());\n readonly allowThumbCross = computed(() => this.kjAllowThumbCross());\n\n readonly disabled = computed(() => this.kjDisabled());\n readonly readonly = computed(() => this.kjReadonly());\n readonly dragging = this._dragging.asReadonly();\n readonly activeThumbIndex = this._activeThumbIndex.asReadonly();\n\n readonly thumbs = this._thumbs.asReadonly();\n readonly trackElement = this._trackEl.asReadonly();\n\n readonly ticks = computed<readonly number[]>(() => {\n const t = this.kjTicks();\n if (t === false) return [];\n if (Array.isArray(t)) return t;\n // 'auto' — generate per-step ticks, capped at 100.\n const step = this.step();\n const min = this.min();\n const max = this.max();\n if (step <= 0 || max <= min) return [];\n const count = Math.floor((max - min) / step) + 1;\n if (count > 100) return [];\n const out: number[] = [];\n for (let i = 0; i < count; i++) out.push(min + i * step);\n return out;\n });\n\n readonly displayWith = computed(() => this.kjDisplayWith());\n\n /** `'group'` for range, `'slider'` is on the thumb instead — root has no role in single mode. */\n protected readonly role = computed(() => (this._thumbs().length > 1 ? 'group' : null));\n\n constructor() {\n // After every render pass, if the thumb registry has new entries\n // since last sort, re-sort by DOM order. This handles the case where\n // child directives register before their host elements are connected\n // (e.g. inside an @if/@for block) and `compareDocumentPosition`\n // would return DISCONNECTED at registration time.\n afterNextRender(() => {\n if (this.pendingReindex) {\n this.pendingReindex = false;\n this.reindexThumbs();\n }\n });\n\n // Sugar `[(kjValue)]` ↔ single thumb sync. Read thumb values via\n // `untracked` so this effect runs only when the consumer mutates\n // `kjValue` or the thumb registry changes — not when the thumb's\n // own `kjValue` updates (which would create a feedback loop).\n effect(() => {\n const v = this.kjValue();\n const thumbs = this._thumbs();\n if (v == null) return;\n if (thumbs.length === 1) {\n const handle = thumbs[0];\n if (untracked(() => handle.value()) !== v) handle.setValue(v, 'programmatic');\n }\n });\n\n // Sugar `[(kjRange)]` ↔ two-thumb sync. Stable-ordered.\n effect(() => {\n const r = this.kjRange();\n const thumbs = this._thumbs();\n if (!r) return;\n if (thumbs.length !== 2) return;\n const [a, b] = r;\n const lo = Math.min(a, b);\n const hi = Math.max(a, b);\n const cur0 = untracked(() => thumbs[0].value());\n const cur1 = untracked(() => thumbs[1].value());\n if (cur0 !== lo) thumbs[0].setValue(lo, 'programmatic');\n if (cur1 !== hi) thumbs[1].setValue(hi, 'programmatic');\n });\n }\n\n // ── KjSliderContext.registerThumb / unregisterThumb ──────────────────────\n\n registerThumb(handle: KjSliderThumbHandle): void {\n this._thumbs.update((existing) => {\n if (existing.includes(handle)) return existing;\n const next = [...existing, handle];\n next.forEach((h, i) => ((h as { index: number }).index = i));\n return next;\n });\n // DOM-order sort is deferred until the elements are in the document\n // (compareDocumentPosition on disconnected nodes is unreliable). The\n // root's afterNextRender pass re-sorts once everything is rendered.\n this.pendingReindex = true;\n }\n\n /** Re-sort the thumb registry by current DOM order and re-assign indices. */\n private reindexThumbs(): void {\n this._thumbs.update((existing) => {\n if (existing.length <= 1) return existing;\n const next = [...existing];\n next.sort((a, b) => orderIndex(a.element, b.element));\n const changed = next.some((h, i) => h !== existing[i]);\n next.forEach((h, i) => ((h as { index: number }).index = i));\n return changed ? next : existing;\n });\n }\n\n private pendingReindex = false;\n\n unregisterThumb(handle: KjSliderThumbHandle): void {\n this._thumbs.update((existing) => {\n const next = existing.filter((h) => h !== handle);\n next.forEach((h, i) => ((h as { index: number }).index = i));\n return next;\n });\n }\n\n setTrackElement(el: HTMLElement | null): void {\n this._trackEl.set(el);\n }\n\n // ── KjSliderContext.setThumbValue (the coordination policy) ──────────────\n\n setThumbValue(thumbIndex: number, value: number, source: KjSliderSource): void {\n if (this.disabled() || this.readonly()) return;\n const thumbs = this._thumbs();\n const handle = thumbs[thumbIndex];\n if (!handle) return;\n\n // Clamp + snap first.\n let next = clamp(value, this.min(), this.max());\n next = snapToStep(next, this.step(), this.stepBase());\n\n // Apply cross-thumb policy in range mode.\n if (thumbs.length === 2) {\n const minDist = this.minDistance();\n if (this.allowThumbCross()) {\n // Allowed: assign as-is, but re-sort if the user crossed.\n handle.setValue(next, source);\n const [low, high] = thumbs;\n if (low.value() > high.value()) {\n // Swap their values.\n const lo = high.value();\n const hi = low.value();\n low.setValue(lo, source);\n high.setValue(hi, source);\n }\n } else {\n // Block: cannot pass partner ± minDist.\n if (thumbIndex === 0) {\n const ceiling = thumbs[1].value() - minDist;\n if (next > ceiling) next = ceiling;\n } else {\n const floor = thumbs[0].value() + minDist;\n if (next < floor) next = floor;\n }\n handle.setValue(next, source);\n }\n } else {\n handle.setValue(next, source);\n }\n\n // Mirror to sugar models.\n if (thumbs.length === 1) {\n const v = thumbs[0].value();\n if (this.kjValue() !== v) this.kjValue.set(v);\n this.kjInput.emit({ value: v, thumbIndex, source });\n if (source !== 'pointer' || !this._dragging()) {\n this.kjCommit.emit(v);\n }\n } else if (thumbs.length === 2) {\n const tuple: [number, number] = [thumbs[0].value(), thumbs[1].value()];\n const cur = this.kjRange();\n if (!cur || cur[0] !== tuple[0] || cur[1] !== tuple[1]) this.kjRange.set(tuple);\n this.kjInput.emit({ value: tuple, thumbIndex, source });\n if (source !== 'pointer' || !this._dragging()) {\n this.kjCommit.emit(tuple);\n }\n }\n }\n\n beginDrag(thumbIndex: number): void {\n this._dragging.set(true);\n this._activeThumbIndex.set(thumbIndex);\n this.kjDragStart.emit({ thumbIndex });\n }\n\n endDrag(cancelled = false): void {\n if (!this._dragging()) return;\n const idx = this._activeThumbIndex() ?? 0;\n this._dragging.set(false);\n this.kjDragEnd.emit({ thumbIndex: idx, cancelled });\n // Fire commit at drag-end so consumers get a single event per drag.\n const thumbs = this._thumbs();\n if (thumbs.length === 1) {\n this.kjCommit.emit(thumbs[0].value());\n } else if (thumbs.length === 2) {\n this.kjCommit.emit([thumbs[0].value(), thumbs[1].value()]);\n }\n }\n\n /** Find the thumb closest to `value`. Ties resolved by previously-active. */\n nearestThumbIndex(value: number): number {\n const thumbs = this._thumbs();\n if (thumbs.length <= 1) return 0;\n const distLo = Math.abs(thumbs[0].value() - value);\n const distHi = Math.abs(thumbs[1].value() - value);\n if (distLo < distHi) return 0;\n if (distHi < distLo) return 1;\n // Tie: prefer the previously-active, else high (so click-to-jump tends to widen).\n const active = this._activeThumbIndex();\n return active ?? 1;\n }\n\n valueFromClientPosition(clientX: number, clientY: number): number {\n const track = this._trackEl();\n if (!track) return this.min();\n return valueFromClientPosition(clientX, clientY, {\n min: this.min(),\n max: this.max(),\n orientation: this.orientation(),\n direction: this.direction(),\n inverted: this.inverted(),\n trackRect: track.getBoundingClientRect(),\n });\n }\n\n /** @internal — host element for diagnostics. */\n get hostElement(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n\nfunction optionalNumber(v: unknown): number | undefined {\n if (v === undefined || v === null || v === '') return undefined;\n const n = typeof v === 'number' ? v : Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** DOM-order comparator: `< 0` if `a` precedes `b`. */\nfunction orderIndex(a: HTMLElement, b: HTMLElement): number {\n if (a === b) return 0;\n const pos = a.compareDocumentPosition(b);\n if (pos & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (pos & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n return 0;\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n afterNextRender,\n inject,\n output,\n} from '@angular/core';\nimport { KJ_SLIDER } from './slider.context';\n\n/**\n * Pointer-event owner for the slider. Captures `pointerdown` on the track,\n * resolves the target value via the root's geometry helper, picks the\n * nearest thumb (by absolute value distance), and forwards the value.\n *\n * Pointer interactions on a *thumb* are handled by `[kjSliderThumb]` —\n * the track only handles the click-on-empty-track-jump case.\n *\n * Sets `touch-action` to allow page scroll on the cross axis (e.g. vertical\n * page scroll on a horizontal slider) while blocking the on-axis drag.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name slider\n */\n@Directive({\n selector: '[kjSliderTrack]',\n standalone: true,\n exportAs: 'kjSliderTrack',\n host: {\n '[attr.aria-orientation]': 'ctx.orientation()',\n '[attr.data-orientation]': 'ctx.orientation()',\n '[style.touch-action]': 'ctx.orientation() === \"vertical\" ? \"pan-x\" : \"pan-y\"',\n '(pointerdown)': 'onPointerDown($event)',\n },\n})\nexport class KjSliderTrack {\n /** @internal */\n readonly ctx = inject(KJ_SLIDER);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Diagnostics: emitted when click-to-jump moves a thumb. */\n readonly kjTrackClick = output<{ value: number; thumbIndex: number }>();\n\n constructor() {\n afterNextRender(() => {\n this.ctx.setTrackElement(this.el.nativeElement);\n this.destroyRef.onDestroy(() => this.ctx.setTrackElement(null));\n });\n }\n\n /** @internal */\n onPointerDown(event: PointerEvent): void {\n if (this.ctx.disabled() || this.ctx.readonly()) {\n event.preventDefault();\n return;\n }\n const target = event.target as Element | null;\n // If the press landed on a thumb, let the thumb directive handle it.\n if (target && target.closest('[kjSliderThumb]')) return;\n\n event.preventDefault();\n const value = this.ctx.valueFromClientPosition(event.clientX, event.clientY);\n const thumbIndex = this.ctx.nearestThumbIndex(value);\n this.ctx.setThumbValue(thumbIndex, value, 'pointer');\n this.ctx.thumbs()[thumbIndex]?.focus();\n this.kjTrackClick.emit({ value, thumbIndex });\n }\n}\n","import { Directive, computed, inject } from '@angular/core';\nimport { KJ_SLIDER } from './slider.context';\nimport { fractionForValue } from './slider.geometry';\n\n/**\n * Highlighted span representing the *selected* portion of the track —\n * `0..thumb` for a single-thumb slider, or `low..high` for a range slider.\n *\n * Pure visual: writes two CSS custom properties (`--kj-slider-start` and\n * `--kj-slider-end`, both `0..1` fractions) which the wrapper layer maps\n * to `inset-inline-start` / `inline-size` (or block equivalents for\n * vertical). `aria-hidden=\"true\"` — decoration only.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name slider\n */\n@Directive({\n selector: '[kjSliderRange]',\n standalone: true,\n exportAs: 'kjSliderRange',\n host: {\n 'aria-hidden': 'true',\n '[attr.data-orientation]': 'ctx.orientation()',\n '[style.--kj-slider-start]': 'fractions().start',\n '[style.--kj-slider-end]': 'fractions().end',\n },\n})\nexport class KjSliderRange {\n /** @internal */\n readonly ctx = inject(KJ_SLIDER);\n\n /** @internal — `start` ≤ `end` regardless of inversion (CSS handles flipping). */\n readonly fractions = computed(() => {\n const thumbs = this.ctx.thumbs();\n const args = { min: this.ctx.min(), max: this.ctx.max(), inverted: this.ctx.inverted() };\n if (thumbs.length === 0) return { start: 0, end: 0 };\n if (thumbs.length === 1) {\n const f = fractionForValue(thumbs[0].value(), args);\n // From the start of the track (post-invert) to the thumb.\n const start = this.ctx.inverted() ? f : 0;\n const end = this.ctx.inverted() ? 1 : f;\n return { start, end };\n }\n const lo = fractionForValue(thumbs[0].value(), args);\n const hi = fractionForValue(thumbs[1].value(), args);\n return { start: Math.min(lo, hi), end: Math.max(lo, hi) };\n });\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { KjDisabled } from '../primitives/interaction/disabled';\nimport { KjFocusRing } from '../primitives/interaction/focus-ring';\nimport { KjFormControl } from '../primitives/forms/form-control';\nimport { KJ_SLIDER, KjSliderSource, KjSliderThumbHandle } from './slider.context';\nimport { fractionForValue } from './slider.geometry';\n\nlet nextId = 0;\n\n/**\n * Per-thumb directive. Owns `role=\"slider\"`, `aria-valuemin/max/now/text`,\n * `aria-orientation`, the keyboard contract (Arrow / Page / Home / End),\n * pointer-drag with capture, and one `KjFormControl` per thumb so each\n * thumb is independently bindable through Angular Forms.\n *\n * Range mode is just two `[kjSliderThumb]`s as siblings inside one\n * `[kjSliderTrack]`. The root resolves DOM order to `index` (0 = low,\n * 1 = high) and narrows each thumb's `aria-valuemin/max` to the partner\n * thumb's position when `kjMinDistance` would otherwise place a value\n * out of reach.\n *\n * Composes `KjDisabled`, `KjFocusRing`, and `KjFormControl` via\n * `hostDirectives`. Effective disabled is the OR of root + per-thumb.\n *\n * @doc-category Library/Data input\n * @doc\n * @doc-name slider\n */\n@Directive({\n selector: '[kjSliderThumb]',\n standalone: true,\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFocusRing,\n KjFormControl,\n ],\n exportAs: 'kjSliderThumb',\n host: {\n '[attr.role]': '\"slider\"',\n '[attr.id]': 'thumbId()',\n '[attr.tabindex]': 'effectiveDisabled() ? -1 : 0',\n '[attr.aria-orientation]': 'ctx.orientation()',\n '[attr.aria-valuemin]': 'effectiveValueMin()',\n '[attr.aria-valuemax]': 'effectiveValueMax()',\n '[attr.aria-valuenow]': 'kjValue()',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.aria-readonly]': 'ctx.readonly() ? \"true\" : null',\n '[attr.aria-label]': 'kjAriaLabel()',\n '[attr.aria-labelledby]': 'kjAriaLabelledBy()',\n '[attr.data-orientation]': 'ctx.orientation()',\n '[attr.data-dragging]': 'dragging() ? \"\" : null',\n '[style.--kj-slider-thumb-fraction]': 'fraction()',\n '[style.touch-action]': '\"none\"',\n '(keydown)': 'onKeydown($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n },\n})\nexport class KjSliderThumb implements KjSliderThumbHandle {\n /** @internal */\n readonly ctx = inject(KJ_SLIDER);\n /** @internal */\n readonly formCtrl = inject(KjFormControl);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n // ── Inputs ───────────────────────────────────────────────────────────────\n\n /** Per-thumb value. Two-way bindable. CVA-bridged via `KjFormControl`. */\n readonly kjValue = model<number>(0);\n\n /** Required when there is no `aria-labelledby` ancestor. */\n readonly kjAriaLabel = input<string | null>(null);\n\n /** Alternative to `kjAriaLabel`. */\n readonly kjAriaLabelledBy = input<string | null>(null);\n\n /** Per-thumb override of the root's `kjDisplayWith`. */\n readonly kjAriaValueText = input<string | null>(null);\n\n /** Per-thumb disable. ORed with the root's `kjDisabled`. */\n readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n // ── Internal state ───────────────────────────────────────────────────────\n\n /** @internal — DOM-order index assigned by the root on register. Mutable for re-indexing. */\n index = 0;\n\n private readonly _dragging = signal(false);\n private readonly _id = `kj-slider-thumb-${++nextId}`;\n private dragStartValue: number | null = null;\n\n // ── KjSliderThumbHandle interface ────────────────────────────────────────\n\n /** @internal */\n readonly value = this.kjValue.asReadonly();\n\n /** @internal */\n get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n /** @internal */\n setValue(value: number, _source: KjSliderSource): void {\n if (this.kjValue() !== value) {\n this.kjValue.set(value);\n this.formCtrl.notifyChange(value);\n }\n }\n\n /** @internal */\n focus(): void {\n this.el.nativeElement.focus();\n }\n\n // ── Computed ─────────────────────────────────────────────────────────────\n\n protected readonly thumbId = computed(() => this.el.nativeElement.id || this._id);\n\n /** OR of root + per-thumb disabled. */\n readonly effectiveDisabled = computed(\n () => this.ctx.disabled() || this.kjDisabled() || this.formCtrl.disabled(),\n );\n\n /** @internal */\n readonly disabled = this.effectiveDisabled;\n\n /** Effective `aria-valuemin` — narrowed to partner-thumb position in range mode. */\n protected readonly effectiveValueMin = computed(() => {\n const thumbs = this.ctx.thumbs();\n if (thumbs.length === 2 && this.index === 1) {\n return thumbs[0].value() + this.ctx.minDistance();\n }\n return this.ctx.min();\n });\n\n /** Effective `aria-valuemax` — narrowed to partner-thumb position in range mode. */\n protected readonly effectiveValueMax = computed(() => {\n const thumbs = this.ctx.thumbs();\n if (thumbs.length === 2 && this.index === 0) {\n return thumbs[1].value() - this.ctx.minDistance();\n }\n return this.ctx.max();\n });\n\n protected readonly ariaValueText = computed<string | null>(() => {\n const override = this.kjAriaValueText();\n if (override) return override;\n const formatter = this.ctx.displayWith();\n if (formatter) return formatter(this.kjValue(), this.index);\n // Continuous mode (step <= 0): truncate FP noise.\n if (this.ctx.step() <= 0) {\n try {\n return new Intl.NumberFormat(undefined, { maximumFractionDigits: 2 }).format(this.kjValue());\n } catch {\n return String(this.kjValue());\n }\n }\n return null;\n });\n\n /** @internal — used by the wrapper layer to position the thumb visually. */\n readonly fraction = computed(() =>\n fractionForValue(this.kjValue(), {\n min: this.ctx.min(),\n max: this.ctx.max(),\n inverted: this.ctx.inverted(),\n }),\n );\n\n /** @internal */\n readonly dragging = this._dragging.asReadonly();\n\n constructor() {\n // Register with the root after construction so the host element exists.\n this.ctx.registerThumb(this);\n this.destroyRef.onDestroy(() => this.ctx.unregisterThumb(this));\n\n // Default the value to `min` if uninitialised. afterNextRender so the\n // host element is in DOM and the root has registered us first.\n afterNextRender(() => {\n const v = this.kjValue();\n if (!Number.isFinite(v)) {\n this.kjValue.set(this.ctx.min());\n }\n });\n\n // Bridge KjFormControl ↔ kjValue.\n effect(() => {\n const cvaValue = this.formCtrl.value();\n if (cvaValue == null || cvaValue === undefined) return;\n const num = typeof cvaValue === 'number' ? cvaValue : Number(cvaValue);\n if (Number.isFinite(num) && num !== this.kjValue()) {\n this.kjValue.set(num);\n }\n });\n }\n\n // ── Event handlers ───────────────────────────────────────────────────────\n\n /** @internal */\n onKeydown(event: KeyboardEvent): void {\n if (this.effectiveDisabled() || this.ctx.readonly()) return;\n const step = this.ctx.step() > 0 ? this.ctx.step() : 1;\n const pageStep = this.ctx.pageStep();\n const orientation = this.ctx.orientation();\n const rtl = this.ctx.direction() === 'rtl';\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.stepBy(step);\n return;\n case 'ArrowDown':\n event.preventDefault();\n this.stepBy(-step);\n return;\n case 'ArrowRight': {\n event.preventDefault();\n // Visual semantics: LTR right = increase; RTL right = decrease.\n // Vertical: right = increase too (APG: visual axis collapses to value axis).\n const sign = orientation === 'horizontal' && rtl ? -1 : 1;\n this.stepBy(sign * step);\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const sign = orientation === 'horizontal' && rtl ? 1 : -1;\n this.stepBy(sign * step);\n return;\n }\n case 'PageUp':\n event.preventDefault();\n this.stepBy(pageStep);\n return;\n case 'PageDown':\n event.preventDefault();\n this.stepBy(-pageStep);\n return;\n case 'Home':\n event.preventDefault();\n this.ctx.setThumbValue(this.index, this.effectiveValueMin(), 'keyboard');\n return;\n case 'End':\n event.preventDefault();\n this.ctx.setThumbValue(this.index, this.effectiveValueMax(), 'keyboard');\n return;\n case 'Escape':\n if (this._dragging() && this.dragStartValue != null) {\n event.preventDefault();\n this.ctx.setThumbValue(this.index, this.dragStartValue, 'keyboard');\n this.endDrag(true);\n }\n return;\n default:\n return;\n }\n }\n\n /** @internal */\n onPointerDown(event: PointerEvent): void {\n if (this.effectiveDisabled() || this.ctx.readonly()) return;\n if (event.button !== undefined && event.button !== 0) return;\n event.preventDefault();\n this.dragStartValue = this.kjValue();\n this._dragging.set(true);\n this.ctx.beginDrag(this.index);\n\n const target = this.el.nativeElement;\n target.setPointerCapture?.(event.pointerId);\n target.focus();\n\n const onMove = (e: PointerEvent) => {\n if (!this._dragging()) return;\n const value = this.ctx.valueFromClientPosition(e.clientX, e.clientY);\n this.ctx.setThumbValue(this.index, value, 'pointer');\n };\n const onUp = () => {\n cleanup();\n this.endDrag(false);\n };\n const onCancel = () => {\n cleanup();\n this.endDrag(true);\n };\n const cleanup = () => {\n target.removeEventListener('pointermove', onMove);\n target.removeEventListener('pointerup', onUp);\n target.removeEventListener('pointercancel', onCancel);\n target.removeEventListener('lostpointercapture', onCancel);\n };\n\n target.addEventListener('pointermove', onMove);\n target.addEventListener('pointerup', onUp);\n target.addEventListener('pointercancel', onCancel);\n target.addEventListener('lostpointercapture', onCancel);\n }\n\n /** @internal */\n onFocus(): void {\n /* hook for KjFocusRing */\n }\n\n /** @internal */\n onBlur(): void {\n this.formCtrl.notifyTouched();\n }\n\n // ── Internals ────────────────────────────────────────────────────────────\n\n private stepBy(delta: number): void {\n const next = this.kjValue() + delta;\n this.ctx.setThumbValue(this.index, next, 'keyboard');\n }\n\n private endDrag(cancelled: boolean): void {\n this._dragging.set(false);\n this.dragStartValue = null;\n this.ctx.endDrag(cancelled);\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Numeric strength score, matching the de-facto `zxcvbn` 0..4 scale. */\nexport type KjPasswordScore = 0 | 1 | 2 | 3 | 4;\n\n/** Human-readable strength label mapped from {@link KjPasswordScore}. */\nexport type KjPasswordScoreLabel =\n | 'too weak'\n | 'weak'\n | 'fair'\n | 'good'\n | 'strong';\n\n/**\n * Allowed values for the `autocomplete` attribute on a password field.\n *\n * Restricted union — invalid strings are rejected at type-check time. This\n * catches the common mis-spelling `autocomplete=\"password\"` (which browsers\n * silently ignore).\n */\nexport type KjPasswordAutocomplete =\n | 'current-password'\n | 'new-password'\n | 'off';\n\n/**\n * Shared state surfaced by `KjPasswordInput` for its sibling directives\n * (`KjPasswordToggle`, `KjPasswordStrength`, `KjPasswordCapsLockWarning`) to\n * read.\n *\n * The root directive owns all derivations: the raw `revealed` / `capsLock`\n * signals, the `score` (computed lazily — only when at least one\n * `KjPasswordStrength` has registered), and the human-readable `scoreLabel`.\n */\nexport interface KjPasswordInputContext {\n /** Host `<input>` id, generated when the consumer didn't provide one. */\n readonly inputId: Signal<string>;\n /** Whether the password is currently rendered as plain text. */\n readonly revealed: Signal<boolean>;\n /** Whether Caps Lock was detected as on during the last keydown. */\n readonly capsLock: Signal<boolean>;\n /** Strength score in `0..4`. */\n readonly score: Signal<KjPasswordScore>;\n /** Human-readable strength label (i18n via `kjStrengthLabels`). */\n readonly scoreLabel: Signal<string>;\n /** Whether the host `<input>` is disabled (mirrors `KjInput`'s state). */\n readonly disabled: Signal<boolean>;\n /** Toggles `revealed`. No-op when disabled. */\n toggle(): void;\n /**\n * Registers a `KjPasswordStrength` so the root knows to run the scorer.\n * Returns a deregister function consumed via `DestroyRef`.\n */\n registerStrength(): () => void;\n /**\n * Registers a `KjPasswordCapsLockWarning` so the root can wire the\n * warning's id into `aria-describedby`. Returns a deregister function.\n */\n registerCapsLockWarning(): () => void;\n}\n\n/** Injection token for {@link KjPasswordInputContext}. */\nexport const KJ_PASSWORD_INPUT = new InjectionToken<KjPasswordInputContext>(\n 'KjPasswordInput',\n);\n","import { KjPasswordScore } from './password-input.context';\n\n/**\n * Default password strength scorer.\n *\n * A small length + character-class heuristic — intentionally not a security\n * grade rating. Consumers wanting `zxcvbn`-equivalent scoring should provide\n * their own scorer via `[kjStrengthScorer]`.\n *\n * Scoring rules:\n * - empty / `< 4` chars → 0 (too weak)\n * - `< 8` chars → 1 (weak)\n * - `>= 8` chars + ≥2 character classes → 2 (fair)\n * - `>= 10` chars + ≥3 character classes → 3 (good)\n * - `>= 12` chars + 4 character classes → 4 (strong)\n *\n * Character classes: lowercase, uppercase, digit, symbol.\n */\nexport function defaultPasswordScorer(value: string): KjPasswordScore {\n if (!value) return 0;\n const len = value.length;\n if (len < 4) return 0;\n\n let classes = 0;\n if (/[a-z]/.test(value)) classes++;\n if (/[A-Z]/.test(value)) classes++;\n if (/[0-9]/.test(value)) classes++;\n if (/[^a-zA-Z0-9]/.test(value)) classes++;\n\n if (len >= 12 && classes === 4) return 4;\n if (len >= 10 && classes >= 3) return 3;\n if (len >= 8 && classes >= 2) return 2;\n return 1;\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n Signal,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\n\nimport { KjButton } from '../button/button';\nimport { KjInput } from '../input/input';\nimport {\n KJ_PASSWORD_INPUT,\n KjPasswordAutocomplete,\n KjPasswordInputContext,\n KjPasswordScore,\n KjPasswordScoreLabel,\n} from './password-input.context';\nimport { defaultPasswordScorer } from './password-input.scorer';\n\nlet _passwordInputIdCounter = 0;\nfunction generateId(): string {\n return `kj-password-${++_passwordInputIdCounter}`;\n}\n\n/** Default English labels for the four strength tiers. Override via `kjStrengthLabels`. */\nconst DEFAULT_STRENGTH_LABELS: Record<KjPasswordScore, KjPasswordScoreLabel> = {\n 0: 'too weak',\n 1: 'weak',\n 2: 'fair',\n 3: 'good',\n 4: 'strong',\n};\n\n/**\n * Enhances a native `<input>` for password entry. Composes `KjInput` via\n * `hostDirectives` so all of its contracts (CVA, `aria-invalid`, focus-ring,\n * ARIA-disabled) apply unchanged. Adds three concerns specific to passwords:\n *\n * - **Reveal toggle.** Flips `type=\"password\" ⇄ \"text\"` via the\n * {@link KJ_PASSWORD_INPUT} context. The toggle is owned by a sibling\n * `[kjPasswordToggle]` directive (composed `KjButton`) so the wiring isn't\n * forced into the root.\n * - **Strength meter (optional).** When at least one `[kjPasswordStrength]`\n * element registers with the context, the root runs the configurable\n * scorer on every value change. The score (`0..4`, matching `zxcvbn`) and\n * human label flow into the meter via the context.\n * - **Caps Lock warning.** Sets a `capsLock` signal during keydown via\n * `KeyboardEvent.getModifierState('CapsLock')`. Consumers render the\n * warning with `[kjPasswordCapsLockWarning]`, which pipes the signal into\n * `[hidden]` and announces via `aria-live=\"polite\"`.\n *\n * Generates a host id when the consumer didn't supply one — needed by the\n * toggle's `aria-controls` and by `aria-describedby` wiring.\n *\n * @example\n * ```html\n * <input kjPasswordInput kjAutocomplete=\"new-password\" [formControl]=\"passwordCtrl\" />\n * <button kjPasswordToggle><svg aria-hidden=\"true\">…</svg></button>\n * <div kjPasswordStrength></div>\n * <p kjPasswordCapsLockWarning>Caps Lock is on.</p>\n * ```\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name password-input\n * @doc-description Adds password-entry features (reveal toggle, strength scoring, Caps Lock detection) to a native input.\n * @doc-is-main\n */\n@Directive({\n selector: 'input[kjPasswordInput]',\n standalone: true,\n exportAs: 'kjPasswordInput',\n hostDirectives: [\n { directive: KjInput, inputs: ['kjInvalid'] },\n ],\n providers: [{ provide: KJ_PASSWORD_INPUT, useExisting: KjPasswordInput }],\n host: {\n '[attr.id]': 'inputId()',\n '[attr.type]': 'revealed() ? \"text\" : \"password\"',\n '[attr.autocomplete]': 'kjAutocomplete()',\n '[attr.maxlength]': 'kjMaxLength() ?? null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '(keydown)': 'onKeydown($event)',\n '(blur)': 'capsLock.set(false)',\n },\n})\nexport class KjPasswordInput implements KjPasswordInputContext {\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly kjInput = inject(KjInput);\n\n /**\n * Native `autocomplete` attribute. Restricted to the three sensible values —\n * `'current-password'` for login forms, `'new-password'` for sign-up /\n * change-password forms (also opts out of password-manager autofill on the\n * paired confirm field), and `'off'` to fully disable.\n * @default 'current-password'\n */\n readonly kjAutocomplete = input<KjPasswordAutocomplete>('current-password');\n\n /** Native `maxlength` attribute. Useful so the strength meter agrees with the limit. */\n readonly kjMaxLength = input<number | undefined>(undefined);\n\n /**\n * Disabled state. Reflects to `aria-disabled` / `data-disabled` and is\n * read by `KjPasswordToggle` to suppress its click. The host `KjInput`\n * still owns its own form-disabled wiring (via Angular forms `disable()`);\n * this input is the imperative override for non-form contexts.\n * @default false\n */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * Two-way bindable reveal state. `true` flips the `type` attribute to\n * `\"text\"`. Wires `KjPasswordToggle` and any programmatic show into the\n * single source of truth.\n * @default false\n */\n readonly kjRevealed = model<boolean>(false);\n\n /**\n * Replaces the built-in heuristic with a custom scoring function. The\n * scorer is **synchronous** — async scoring would race with keystrokes;\n * wrap your async source and write to `[(kjScore)]` on the meter instead.\n */\n readonly kjStrengthScorer = input<(value: string) => KjPasswordScore>(\n defaultPasswordScorer,\n );\n\n /**\n * i18n hook for the human-readable score labels surfaced via\n * `aria-valuetext` on the meter.\n * @default English defaults\n */\n readonly kjStrengthLabels = input<Record<KjPasswordScore, string>>(\n DEFAULT_STRENGTH_LABELS,\n );\n\n // ── KjPasswordInputContext shape ───────────────────────────────────────\n /** Internal counter — number of strength meters currently registered. */\n private readonly _strengthRegistrations = signal(0);\n\n /** Internal counter — number of caps-lock warnings currently registered. */\n private readonly _capsLockRegistrations = signal(0);\n\n /** Caps Lock detection — set in `onKeydown`, cleared on blur. */\n readonly capsLock = signal(false);\n\n /** Stable id for the host `<input>`. Honours an existing id, otherwise generates. */\n private readonly _generatedId = signal<string>('');\n\n /** @internal */\n readonly inputId: Signal<string> = computed(\n () => this.el.nativeElement.id || this._generatedId(),\n );\n\n /** @internal — alias of `kjRevealed` for the context contract. */\n readonly revealed: Signal<boolean> = this.kjRevealed;\n\n /** @internal — strength score in `0..4`. Always computed; the registration\n * counter is kept for future \"skip scorer when no meter\" optimisation but is\n * intentionally not gating the score because content-query timing makes the\n * gate unreliable for siblings inside a `[kjPasswordInputScope]`. */\n readonly score: Signal<KjPasswordScore> = computed(() => {\n const value = this.kjInput.formCtrl.value();\n const text = typeof value === 'string' ? value : '';\n const scorer = this.kjStrengthScorer();\n const raw = scorer(text);\n const clamped = Math.min(4, Math.max(0, Math.round(raw))) as KjPasswordScore;\n return clamped;\n });\n\n /** @internal */\n readonly scoreLabel: Signal<string> = computed(() => {\n const labels = this.kjStrengthLabels();\n const score = this.score();\n return labels[score];\n });\n\n /** @internal — OR of the consumer input and the form-control disabled state. */\n readonly disabled: Signal<boolean> = computed(\n () => this.kjDisabled() || this.kjInput.formCtrl.disabled(),\n );\n\n constructor() {\n if (!this.el.nativeElement.id) {\n this._generatedId.set(generateId());\n }\n }\n\n /** @internal */\n toggle(): void {\n if (this.disabled()) return;\n this.kjRevealed.set(!this.kjRevealed());\n }\n\n /** @internal */\n registerStrength(): () => void {\n this._strengthRegistrations.update(n => n + 1);\n return () => this._strengthRegistrations.update(n => Math.max(0, n - 1));\n }\n\n /** @internal */\n registerCapsLockWarning(): () => void {\n this._capsLockRegistrations.update(n => n + 1);\n return () =>\n this._capsLockRegistrations.update(n => Math.max(0, n - 1));\n }\n\n /** @internal — keydown handler used to detect Caps Lock. */\n protected onKeydown(event: KeyboardEvent): void {\n // Fail-soft: some test environments / older browsers don't implement\n // `getModifierState`. Treat as \"no caps lock detected\".\n if (typeof event.getModifierState === 'function') {\n this.capsLock.set(event.getModifierState('CapsLock'));\n }\n }\n}\n\n/**\n * Wiring directive composed onto a `[kjButton]` to provide the password-reveal\n * toggle. Reads {@link KJ_PASSWORD_INPUT} for state and writes the press\n * status onto the host `KjButton`'s `kjPressed` model so `aria-pressed` is\n * reflected by `KjButton` (single source of truth, no duplicated semantics).\n *\n * Sets `aria-controls` to the input's id and switches `aria-label` between\n * `kjShowLabel` / `kjHideLabel` based on the reveal state — the three things\n * a hand-rolled toggle button consistently misses.\n *\n * @example\n * ```html\n * <button kjButton kjPasswordToggle [kjShowLabel]=\"'Reveal'\" [kjHideLabel]=\"'Hide'\">\n * <svg aria-hidden=\"true\">…</svg>\n * </button>\n * ```\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name password-input\n */\n@Directive({\n selector: '[kjPasswordToggle]',\n standalone: true,\n host: {\n 'type': 'button',\n '[attr.aria-controls]': 'ctx.inputId()',\n '[attr.aria-label]': 'currentLabel()',\n '[attr.data-revealed]': 'ctx.revealed() ? \"\" : null',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjPasswordToggle {\n /** @internal */\n protected readonly ctx = inject(KJ_PASSWORD_INPUT);\n /** @internal — host `KjButton` (required: `[kjPasswordToggle]` composes onto a `[kjButton]`). */\n private readonly kjButton = inject(KjButton, { optional: true });\n\n /**\n * `aria-label` shown when the password is hidden. Required for icon-only\n * buttons (WCAG 2.4.6).\n * @default 'Show password'\n */\n readonly kjShowLabel = input<string>('Show password');\n\n /**\n * `aria-label` shown when the password is revealed.\n * @default 'Hide password'\n */\n readonly kjHideLabel = input<string>('Hide password');\n\n /** @internal */\n protected readonly currentLabel = computed(() =>\n this.ctx.revealed() ? this.kjHideLabel() : this.kjShowLabel(),\n );\n\n constructor() {\n // Mirror `revealed` onto the host KjButton's `kjPressed` model so\n // `aria-pressed` is reflected by KjButton (single source of truth).\n if (this.kjButton) {\n const button = this.kjButton;\n effect(() => {\n button.kjPressed.set(this.ctx.revealed());\n });\n }\n }\n\n /** @internal */\n protected onClick(event: Event): void {\n if (this.ctx.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n this.ctx.toggle();\n }\n}\n\n/**\n * Marks an element as the password-strength meter. Owns `role=\"progressbar\"`\n * and the full ARIA value contract (`aria-valuemin=\"0\"`, `aria-valuemax=\"4\"`,\n * `aria-valuenow=\"{score}\"`, `aria-valuetext=\"{label}\"`). Subscribes to the\n * shared {@link KJ_PASSWORD_INPUT} context for the score signal.\n *\n * Score updates are **not** announced via live region by default — the\n * implicit `aria-valuetext` change is enough on focus, and announcing on every\n * keystroke would flood AT.\n *\n * Registers itself with the root on construction so the scorer only runs when\n * a meter is actually mounted.\n *\n * @example\n * ```html\n * <div kjPasswordStrength></div>\n * ```\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name password-input\n */\n@Directive({\n selector: '[kjPasswordStrength]',\n standalone: true,\n exportAs: 'kjPasswordStrength',\n host: {\n 'role': 'progressbar',\n '[attr.id]': 'strengthId',\n '[attr.aria-label]': 'kjAriaLabel()',\n '[attr.aria-valuemin]': '0',\n '[attr.aria-valuemax]': '4',\n '[attr.aria-valuenow]': 'ctx.score()',\n '[attr.aria-valuetext]': 'ctx.scoreLabel()',\n '[attr.data-score]': 'ctx.score()',\n '[attr.data-score-label]': 'ctx.scoreLabel()',\n },\n})\nexport class KjPasswordStrength {\n private readonly destroyRef = inject(DestroyRef);\n /** @internal */\n protected readonly ctx = inject(KJ_PASSWORD_INPUT);\n\n /** Stable id used for `aria-describedby` wiring on the host input. */\n readonly strengthId = `kj-password-strength-${++_passwordInputIdCounter}`;\n\n /**\n * Accessible label for the meter. The meter is **not** `aria-hidden` —\n * users with screen readers need the score read aloud.\n * @default 'Password strength'\n */\n readonly kjAriaLabel = input<string>('Password strength');\n\n /**\n * When `true`, the strength label is also read via a live region on every\n * change. Off by default to avoid AT spam.\n * @default false\n */\n readonly kjAnnounce = input(false, { transform: booleanAttribute });\n\n constructor() {\n const deregister = this.ctx.registerStrength();\n this.destroyRef.onDestroy(deregister);\n }\n}\n\n/**\n * Marks an element as the Caps Lock warning. Holds no visual content of its\n * own — the consumer projects whatever message they like — but owns the ARIA\n * contract: `role=\"status\"`, `aria-live=\"polite\"`, and `[hidden]` reflecting\n * the context's `capsLock` signal.\n *\n * `polite` (not `assertive`) is the right choice here — Caps Lock is\n * informative, not urgent; `assertive` would interrupt mid-type.\n *\n * @example\n * ```html\n * <p kjPasswordCapsLockWarning>Caps Lock is on.</p>\n * ```\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name password-input\n */\n@Directive({\n selector: '[kjPasswordCapsLockWarning]',\n standalone: true,\n host: {\n 'role': 'status',\n 'aria-live': 'polite',\n '[attr.id]': 'warningId',\n '[hidden]': '!ctx.capsLock()',\n },\n})\nexport class KjPasswordCapsLockWarning {\n private readonly destroyRef = inject(DestroyRef);\n /** @internal */\n protected readonly ctx = inject(KJ_PASSWORD_INPUT);\n\n /** Stable id used for `aria-describedby` wiring on the host input. */\n readonly warningId = `kj-password-caps-${++_passwordInputIdCounter}`;\n\n constructor() {\n const deregister = this.ctx.registerCapsLockWarning();\n this.destroyRef.onDestroy(deregister);\n }\n}\n\n/** No-op deregister returned before a `KjPasswordInput` has been discovered. */\nconst NOOP_DEREGISTER = (): void => undefined;\n\n/**\n * Scope directive placed on the wrapping element of a password input\n * composition. Provides `KJ_PASSWORD_INPUT` to siblings (toggle, strength,\n * caps-lock warning) by forwarding to the nested `KjPasswordInput` directive\n * discovered via content query. Without this wrapper, sibling directives\n * cannot see the input's context — DI flows down, not across.\n *\n * @example\n * ```html\n * <div kjPasswordInputScope>\n * <input kjPasswordInput [formControl]=\"passwordCtrl\" />\n * <button kjButton kjPasswordToggle>eye</button>\n * <div kjPasswordStrength></div>\n * <p kjPasswordCapsLockWarning>Caps Lock is on.</p>\n * </div>\n * ```\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name password-input\n */\n@Directive({\n selector: '[kjPasswordInputScope]',\n standalone: true,\n exportAs: 'kjPasswordInputScope',\n providers: [\n { provide: KJ_PASSWORD_INPUT, useExisting: KjPasswordInputScope },\n ],\n})\nexport class KjPasswordInputScope implements KjPasswordInputContext {\n /** @internal — discovered descendant input. */\n private readonly child = contentChild(KjPasswordInput, { descendants: true });\n\n /** @internal */\n readonly inputId: Signal<string> = computed(\n () => this.child()?.inputId() ?? '',\n );\n /** @internal */\n readonly revealed: Signal<boolean> = computed(\n () => this.child()?.revealed() ?? false,\n );\n /** @internal */\n readonly capsLock: Signal<boolean> = computed(\n () => this.child()?.capsLock() ?? false,\n );\n /** @internal */\n readonly score: Signal<KjPasswordScore> = computed(\n () => this.child()?.score() ?? (0 as KjPasswordScore),\n );\n /** @internal */\n readonly scoreLabel: Signal<string> = computed(\n () => this.child()?.scoreLabel() ?? '',\n );\n /** @internal */\n readonly disabled: Signal<boolean> = computed(\n () => this.child()?.disabled() ?? false,\n );\n\n /** @internal */\n toggle(): void {\n this.child()?.toggle();\n }\n\n /** @internal */\n registerStrength(): () => void {\n return this.child()?.registerStrength() ?? NOOP_DEREGISTER;\n }\n\n /** @internal */\n registerCapsLockWarning(): () => void {\n return this.child()?.registerCapsLockWarning() ?? NOOP_DEREGISTER;\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\n/** Preset configuration consumed by `KjTextarea` via `bindPresets`. */\nexport interface KjTextareaConfig {\n variants: string[];\n sizes: string[];\n defaults: { variant: string; size: string };\n}\n\n/**\n * Default Textarea presets shipped by kouji-ui. Variant list mirrors `KjInput`\n * — outlined / filled — so a textarea inside a form sits naturally next to a\n * matching input.\n */\nexport const KJ_TEXTAREA_DEFAULTS: KjTextareaConfig = {\n variants: ['outlined', 'filled'],\n sizes: ['sm', 'md', 'lg'],\n defaults: { variant: 'outlined', size: 'md' },\n};\n\n/**\n * DI token for the active Textarea presets. Default factory yields\n * `KJ_TEXTAREA_DEFAULTS`. Override via `provideKjTextarea(…)` at application\n * or component scope.\n */\nexport const KJ_TEXTAREA_CONFIG = new InjectionToken<KjTextareaConfig>('kj.textarea.config', {\n factory: () => KJ_TEXTAREA_DEFAULTS,\n});\n\n/**\n * Configures the Textarea presets for the enclosing injector. Replaces (does\n * not merge) `variants` and `sizes`; spread `KJ_TEXTAREA_DEFAULTS.variants` to\n * extend.\n */\nexport function provideKjTextarea(config: Partial<KjTextareaConfig>): Provider[] {\n return [\n {\n provide: KJ_TEXTAREA_CONFIG,\n useValue: { ...KJ_TEXTAREA_DEFAULTS, ...config },\n },\n ];\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';\nimport { KjSize, KjVariant, bindPresets } from '../presets';\nimport { KJ_TEXTAREA_CONFIG } from './config';\n\n/**\n * Number-attribute transform that preserves `undefined` instead of mapping it\n * to `NaN` like Angular's built-in `numberAttribute`. Required so that\n * `[kjMaxLength]=\"undefined\"` keeps the host attribute removed rather than\n * setting `maxlength=\"NaN\"`.\n *\n * @internal\n */\nfunction optionalNumberAttribute(v: number | string | undefined): number | undefined {\n if (v == null || v === '') return undefined;\n const n = typeof v === 'number' ? v : Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** Resize behavior override for `<textarea kjTextarea>`. Maps to CSS `resize`. */\nexport type KjTextareaResize = 'none' | 'vertical' | 'both';\n\n/** Auto-resize mode for `<textarea kjTextarea>`. */\nexport type KjTextareaAutoresize = 'off' | 'auto';\n\n/**\n * Enhances a native `<textarea>` with Angular forms integration, theme presets\n * (`kjVariant` / `kjSize`), focus-ring + disabled/invalid reflection, optional\n * auto-resize geometry, an optional character counter announcement, and a\n * `kjResize` CSS override.\n *\n * Composes:\n * - `KjFormControl` — `formControl` / `formControlName` / `ngModel` via CVA.\n * - `KjVariant` / `KjSize` — `data-variant` / `data-size` for theme styling.\n * - `KjFocusRing` — keyboard-only `data-focus-visible`.\n * - `KjDisabled` — `aria-disabled` / `data-disabled` reflection.\n *\n * Auto-resize: when `kjAutoresize=\"auto\"`, the directive measures\n * `scrollHeight` on every input, clamps to `[kjMinRows, kjMaxRows]` rows, and\n * pins `style.height` accordingly. The user drag-handle is forced off\n * (`resize: none`) while auto-resize is on — mixing the two produces drift.\n *\n * Character counter: when `kjMaxLength` is set, the native `maxlength`\n * attribute is bound. The directive exposes a `remaining()` signal and emits\n * threshold-based ARIA announcements (≤ 20, ≤ 10, 0 remaining) to a polite\n * live region declared by the wrapper or consumer — never per-keystroke.\n *\n * @example\n * ```html\n * <textarea kjTextarea rows=\"4\" [formControl]=\"bio\"></textarea>\n *\n * <textarea kjTextarea kjAutoresize=\"auto\" [kjMinRows]=\"2\" [kjMaxRows]=\"8\"\n * [formControl]=\"bio\"></textarea>\n * ```\n *\n * @doc\n * @doc-file textarea.example.ts\n * @doc-category Core/Inputs\n * @doc-name textarea\n * @doc-description Adds forms integration, focus ring, and optional auto-resize and character-count announcements to a textarea.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjTextarea]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFocusRing,\n KjFormControl,\n ],\n providers: [...bindPresets(KJ_TEXTAREA_CONFIG)],\n host: {\n '[attr.aria-invalid]': 'formCtrl.touched() && kjInvalid() ? \"true\" : null',\n '[attr.data-invalid]': 'formCtrl.touched() && kjInvalid() ? \"\" : null',\n '[attr.disabled]': 'formCtrl.disabled() ? \"\" : null',\n '[attr.maxlength]': 'kjMaxLength() ?? null',\n '[attr.data-autoresize]': 'kjAutoresize() === \"auto\" ? \"\" : null',\n '[style.resize]': 'effectiveResize()',\n '(input)': 'onInput($any($event.target).value)',\n '(blur)': 'formCtrl.notifyTouched()',\n },\n})\nexport class KjTextarea {\n readonly formCtrl = inject(KjFormControl);\n private readonly el = inject<ElementRef<HTMLTextAreaElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Whether the textarea is in an invalid state. Combined with `touched` for ARIA. */\n readonly kjInvalid = input(false, { transform: booleanAttribute });\n\n /**\n * Auto-resize mode. `'auto'` measures `scrollHeight` on each input and pins\n * height between `kjMinRows` and `kjMaxRows`. `'off'` (default) leaves the\n * height to native `rows` / CSS.\n */\n readonly kjAutoresize = input<KjTextareaAutoresize>('off');\n\n /** Minimum rows when `kjAutoresize=\"auto\"`. Falls back to native `rows`, then 1. */\n readonly kjMinRows = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumberAttribute,\n });\n\n /** Maximum rows when `kjAutoresize=\"auto\"`. Beyond this, `overflow-y: auto`. */\n readonly kjMaxRows = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumberAttribute,\n });\n\n /** Native `maxlength`. Required for the character counter. */\n readonly kjMaxLength = input<number | undefined, number | string | undefined>(undefined, {\n transform: optionalNumberAttribute,\n });\n\n /**\n * CSS `resize` override. Defaults to `'vertical'`. Forced to `'none'` when\n * `kjAutoresize === 'auto'` regardless of the bound value.\n */\n readonly kjResize = input<KjTextareaResize>('vertical');\n\n /** @internal Effective resize value once the autoresize override is applied. */\n protected readonly effectiveResize = computed<KjTextareaResize>(() =>\n this.kjAutoresize() === 'auto' ? 'none' : this.kjResize(),\n );\n\n /**\n * Characters remaining before `kjMaxLength`. `null` when no max is set.\n * Useful for wrappers that render a visible counter.\n */\n readonly remaining = computed<number | null>(() => {\n const max = this.kjMaxLength();\n if (max == null) return null;\n const val = this.formCtrl.value();\n const len = typeof val === 'string' ? val.length : 0;\n return Math.max(0, max - len);\n });\n\n /**\n * Threshold-based announcement string for the character counter, mirrored\n * into a polite live region by the wrapper. Empty string when no\n * announcement should fire on the current value (avoids per-keystroke\n * chatter).\n *\n * Crosses at: `kjMaxLength - 20`, `kjMaxLength - 10`, `0` remaining.\n */\n readonly counterAnnouncement = computed<string>(() => {\n const r = this.remaining();\n if (r == null) return '';\n if (r === 0) return 'Character limit reached';\n if (r === 10) return '10 characters remaining';\n if (r === 20) return '20 characters remaining';\n return '';\n });\n\n constructor() {\n // Reflect the CVA value signal back to the native textarea element. Same\n // posture as KjInput: skip null/undefined so an external [value] attribute\n // is preserved when no ngModel/formControl is wired.\n effect(() => {\n const val = this.formCtrl.value();\n if (val == null) return;\n const el = this.el.nativeElement;\n if (el.value !== String(val)) {\n el.value = String(val);\n }\n });\n\n // Auto-resize: re-measure on every value change and on first paint. The\n // `(input)` host binding also calls `measure()` so users see live growth\n // even without a form binding.\n effect(() => {\n // Tracking dependencies — autoresize toggles, value, and rows bounds.\n this.kjAutoresize();\n this.kjMinRows();\n this.kjMaxRows();\n this.formCtrl.value();\n this.measure();\n });\n\n afterNextRender(() => {\n this.measure();\n const onResize = () => this.measure();\n window.addEventListener('resize', onResize);\n this.destroyRef.onDestroy(() => window.removeEventListener('resize', onResize));\n });\n }\n\n /** @internal — host (input) handler. */\n onInput(value: string): void {\n this.formCtrl.notifyChange(value);\n if (this.kjAutoresize() === 'auto') {\n this.measure();\n }\n }\n\n /**\n * Re-measures and pins the textarea height when `kjAutoresize === 'auto'`.\n * Safe to call any time; no-op when auto-resize is off.\n */\n measure(): void {\n if (this.kjAutoresize() !== 'auto') return;\n const el = this.el.nativeElement;\n if (!el || typeof el.scrollHeight !== 'number') return;\n\n const cs = typeof getComputedStyle === 'function' ? getComputedStyle(el) : null;\n if (!cs) return;\n\n const lineHeight = parseFloat(cs.lineHeight) || parseFloat(cs.fontSize) * 1.4 || 20;\n const paddingY = (parseFloat(cs.paddingTop) || 0) + (parseFloat(cs.paddingBottom) || 0);\n const borderY = (parseFloat(cs.borderTopWidth) || 0) + (parseFloat(cs.borderBottomWidth) || 0);\n\n const minRows = this.kjMinRows() ?? el.rows ?? 1;\n const maxRows = this.kjMaxRows();\n\n const minHeight = minRows * lineHeight + paddingY + borderY;\n const maxHeight = maxRows != null ? maxRows * lineHeight + paddingY + borderY : Infinity;\n\n // Collapse → measure → clamp. The transient 'auto' is single-frame.\n el.style.height = 'auto';\n const measured = el.scrollHeight;\n const clamped = Math.max(minHeight, Math.min(measured, maxHeight));\n el.style.height = `${clamped}px`;\n el.style.overflowY = measured > maxHeight ? 'auto' : 'hidden';\n }\n}\n","import { Directive, inject, model } from '@angular/core';\nimport { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';\n\n/**\n * Adds checkbox semantics with Angular forms integration.\n * Supports `formControl`, `formControlName`, and `ngModel` bindings.\n *\n * Apply `[kjCheckbox]` to any focusable element to get `role=\"checkbox\"`,\n * `aria-checked` reflection, Space/click toggle, and the shared focus-ring\n * primitive — all composable onto custom markup with no styling attached.\n *\n * @example\n * ```html\n * <div kjCheckbox tabindex=\"0\" [(kjChecked)]=\"accepted\" aria-label=\"Accept terms\">Accept</div>\n * ```\n * @doc\n * @doc-file checkbox.example.ts\n * ```typescript\n * import { Component, signal } from '@angular/core';\n * import { KjCheckbox } from '@kouji-ui/core';\n *\n * @Component({\n * standalone: true,\n * imports: [KjCheckbox],\n * styles: [`\n * .row { display: flex; flex-direction: column; gap: 1rem; padding: 2rem; background: #0c0c0c; }\n * .item { display: flex; align-items: center; gap: 0.75rem; }\n * [kjCheckbox] { width: 18px; height: 18px; border: 2px solid #333; background: #111; cursor: pointer; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\n * [data-checked] { background: #b8f500; border-color: #b8f500; }\n * [data-checked]::after { content: '✓'; color: #0c0c0c; font-size: 0.75rem; font-weight: bold; }\n * span { color: #888; font-family: 'JetBrains Mono', monospace; font-size: 0.875rem; }\n * `],\n * template: `\n * <div class=\"row\">\n * <div class=\"item\">\n * <div kjCheckbox tabindex=\"0\" [(kjChecked)]=\"terms\" aria-label=\"Accept terms\"></div>\n * <span>Accept terms — {{ terms() ? 'checked' : 'unchecked' }}</span>\n * </div>\n * <div class=\"item\">\n * <div kjCheckbox tabindex=\"0\" [(kjChecked)]=\"newsletter\" aria-label=\"Newsletter\"></div>\n * <span>Subscribe to newsletter</span>\n * </div>\n * </div>\n * `,\n * })\n * export class CheckboxExampleComponent {\n * terms = signal(false);\n * newsletter = signal(true);\n * }\n * ```\n * @doc-category Core/Inputs\n * @doc-name checkbox\n * @doc-description Adds accessible checkbox behaviour and Angular forms support to any element you bring.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjCheckbox]',\n standalone: true,\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFocusRing,\n KjFormControl,\n ],\n host: {\n role: 'checkbox',\n '[attr.aria-checked]': 'kjChecked().toString()',\n '[attr.data-checked]': 'kjChecked() ? \"\" : null',\n '[attr.disabled]': 'formCtrl.disabled() ? \"\" : null',\n '(click)': 'toggle()',\n '(keydown.space)': 'onSpace($event)',\n '(blur)': 'formCtrl.notifyTouched()',\n },\n})\nexport class KjCheckbox {\n readonly formCtrl = inject(KjFormControl);\n\n /** Whether the checkbox is checked. Supports two-way binding. */\n kjChecked = model<boolean>(false);\n\n /** @internal */\n toggle(): void {\n const next = !this.kjChecked();\n this.kjChecked.set(next);\n this.formCtrl.notifyChange(next);\n }\n\n /** @internal */\n onSpace(e: Event): void { e.preventDefault(); this.toggle(); }\n}\n","import { InjectionToken, Signal } from '@angular/core';\nexport interface KjRadioContext { value: Signal<unknown>; select: (value: unknown) => void; }\nexport const KJ_RADIO_GROUP = new InjectionToken<KjRadioContext>('KjRadioGroup');\n","import { Directive, computed, inject, input, model } from '@angular/core';\nimport { KJ_RADIO_GROUP, KjRadioContext } from './radio.context';\nimport { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';\n\n/**\n * Container for a group of radio buttons. Manages the selected value.\n * @example\n * ```html\n * <div kjRadioGroup [(kjValue)]=\"size\" aria-label=\"Size\">\n * <div kjRadio [kjRadioValue]=\"'s'\" tabindex=\"0\">Small</div>\n * </div>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name radio\n */\n@Directive({\n selector: '[kjRadioGroup]', standalone: true,\n providers: [{ provide: KJ_RADIO_GROUP, useExisting: KjRadioGroup }],\n host: { role: 'radiogroup' },\n})\nexport class KjRadioGroup implements KjRadioContext {\n kjValue = model<unknown>(undefined);\n readonly value = this.kjValue.asReadonly();\n select(val: unknown): void { this.kjValue.set(val); }\n}\n\n/**\n * Individual radio button within a `[kjRadioGroup]`. Includes CVA for forms integration.\n *\n * Owns `role=\"radio\"`, `aria-checked`, Space/Enter activation, and Angular\n * forms integration via the `KjFormControl` host directive so each radio\n * participates in reactive and template-driven forms.\n *\n * @example `<div kjRadio [kjRadioValue]=\"'a'\" tabindex=\"0\">Option A</div>`\n * @doc-category Core/Inputs\n * @doc\n * @doc-name radio\n * @doc-description Individual radio button within a radio group with accessible activation and forms support.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjRadio]', standalone: true,\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFocusRing,\n KjFormControl,\n ],\n host: {\n role: 'radio',\n '[attr.aria-checked]': 'checked().toString()',\n '[attr.data-checked]': 'checked() ? \"\" : null',\n '(click)': 'select()',\n '(keydown.space)': 'onSpace($event)',\n '(keydown.enter)': 'select()',\n '(blur)': 'formCtrl.notifyTouched()',\n },\n})\nexport class KjRadio {\n private readonly group = inject(KJ_RADIO_GROUP);\n readonly formCtrl = inject(KjFormControl);\n kjRadioValue = input.required<unknown>();\n readonly checked = computed(() => this.group.value() === this.kjRadioValue());\n select(): void { this.group.select(this.kjRadioValue()); this.formCtrl.notifyChange(this.kjRadioValue()); }\n onSpace(e: Event): void { e.preventDefault(); this.select(); }\n}\n","import { Directive, inject, model } from '@angular/core';\nimport { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';\n\n/**\n * Adds toggle (press) behavior with Angular forms integration.\n *\n * Reflects `aria-pressed` and `data-pressed` and integrates with reactive and\n * template-driven forms so the pressed state participates as a regular form\n * value alongside other inputs.\n *\n * @example\n * ```html\n * <button kjToggle [(kjPressed)]=\"isBold\" aria-label=\"Bold\">B</button>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name toggle\n * @doc-description Adds press/unpress toggle behaviour to any focusable element with Angular forms support.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjToggle]',\n standalone: true,\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFocusRing,\n KjFormControl,\n ],\n host: {\n '[attr.aria-pressed]': 'kjPressed().toString()',\n '[attr.data-pressed]': 'kjPressed() ? \"\" : null',\n '(click)': 'toggle()',\n '(blur)': 'formCtrl.notifyTouched()',\n },\n})\nexport class KjToggle {\n readonly formCtrl = inject(KjFormControl);\n\n /** Whether the toggle is pressed. Supports two-way binding. */\n kjPressed = model<boolean>(false);\n\n /** @internal */\n toggle(): void {\n const next = !this.kjPressed();\n this.kjPressed.set(next);\n this.formCtrl.notifyChange(next);\n }\n}\n","import { Directive, booleanAttribute, input } from '@angular/core';\n\nexport type KjBadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline';\n\n/**\n * Marks an element as a badge via data attributes.\n *\n * Apply `[kjBadge]` to any inline element to reflect a `data-variant` attribute\n * that theme CSS reads — choose from `default`, `secondary`, `destructive`, or\n * `outline` without adding any wrapper markup. No styling is attached.\n *\n * Set `kjBadgeDot` to reflect a `data-dot` attribute for theme CSS to render a\n * leading status indicator.\n *\n * @example `<span kjBadge [kjBadgeVariant]=\"'destructive'\">Critical</span>`\n * @doc-category Core/Data display\n * @doc\n * @doc-name badge\n * @doc-description Marks an inline element as a badge with a variant data attribute that theme CSS picks up.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjBadge]',\n standalone: true,\n host: {\n '[attr.data-variant]': 'kjBadgeVariant()',\n '[attr.data-dot]': 'kjBadgeDot() ? \"\" : null',\n },\n})\nexport class KjBadge {\n /** The visual variant of the badge. Defaults to `'default'`. */\n kjBadgeVariant = input<KjBadgeVariant>('default');\n /** Reflects `data-dot` so theme CSS can render a leading status dot. Defaults to `false`. */\n kjBadgeDot = input(false, { transform: booleanAttribute });\n}\n","import { InjectionToken, type Signal } from '@angular/core';\n\n/**\n * Logical corner placement for an overlay badge. The `start`/`end` keywords\n * map to `inset-inline-start` / `inset-inline-end` in CSS so RTL flipping\n * happens at the style layer without any JS bidi reads.\n */\nexport type KjOverlayBadgePosition =\n | 'top-end'\n | 'top-start'\n | 'bottom-end'\n | 'bottom-start';\n\n/** Context shared between {@link KjOverlayBadge} and {@link KjOverlayBadgeContent}. */\nexport interface KjOverlayBadgeContext {\n /** Stable id of the badge content node. */\n readonly contentId: Signal<string>;\n /** Stable id of the visually-hidden description node, when present. */\n readonly descriptionId: Signal<string>;\n /** Logical corner of the anchor where the badge is placed. */\n readonly position: Signal<KjOverlayBadgePosition>;\n /** Presence-dot mode flag. */\n readonly dot: Signal<boolean>;\n /** Decorative opt-out flag — when true, the content is `aria-hidden`. */\n readonly decorative: Signal<boolean>;\n /** The accessible description text — empty string means \"no description\". */\n readonly description: Signal<string>;\n}\n\n/** Injection token for the {@link KjOverlayBadge} context. */\nexport const KJ_OVERLAY_BADGE = new InjectionToken<KjOverlayBadgeContext>('KjOverlayBadge');\n\nlet _overlayBadgeIdCounter = 0;\n/** Allocates a stable id used for the badge content node + `aria-describedby` wiring. */\nexport function nextOverlayBadgeId(): string {\n return `kj-overlay-badge-${++_overlayBadgeIdCounter}`;\n}\n","import {\n Directive,\n ElementRef,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n KJ_OVERLAY_BADGE,\n type KjOverlayBadgeContext,\n type KjOverlayBadgePosition,\n nextOverlayBadgeId,\n} from './overlay-badge.context';\n\n/**\n * Anchor-side directive of the Overlay Badge family. Applied to the host\n * element the badge decorates (a button, an avatar, a tab label, an inbox\n * row). Provides the {@link KJ_OVERLAY_BADGE} context that the sibling\n * `[kjOverlayBadgeContent]` directive consumes.\n *\n * The directive does **not** inject a wrapper element — it composes onto the\n * existing anchor host. Visual chrome (variant, size, dot styling) is reused\n * from {@link import('../badge/badge').KjBadge} via `hostDirectives` on the\n * content node.\n *\n * Accessibility:\n *\n * - When `kjDescription` is set, the directive renders a visually-hidden span\n * (id derived from `contentId`) and **merges** that id into the host's\n * existing `aria-describedby` attribute, preserving any consumer-set ids.\n * - When `kjDecorative` is `true`, the badge content is `aria-hidden` and the\n * describedby merge is skipped.\n * - Without a description and without `kjDecorative`, the content node is\n * `aria-hidden` by default (a stray \"4\" with no context is worse than\n * silence — the Material rule).\n *\n * @example\n * ```html\n * <button kjOverlayBadge kjDescription=\"4 unread\" [kjPosition]=\"'top-end'\">\n * <kj-icon name=\"bell\" />\n * <span kjOverlayBadgeContent>4</span>\n * </button>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name overlay-badge\n * @doc-description Positions a badge chip over its host element with an optional accessible description.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjOverlayBadge]',\n standalone: true,\n providers: [{ provide: KJ_OVERLAY_BADGE, useExisting: KjOverlayBadge }],\n host: {\n 'style': 'position: relative;',\n '[attr.aria-describedby]': 'mergedDescribedBy()',\n },\n})\nexport class KjOverlayBadge implements KjOverlayBadgeContext {\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Logical corner where the badge is placed. Defaults to `'top-end'`. */\n readonly kjPosition = input<KjOverlayBadgePosition>('top-end');\n\n /** Renders a fixed-size presence dot in place of numeric / text content. */\n readonly kjDot = input<boolean>(false);\n\n /**\n * Decorative opt-out. When `true`, the badge content is `aria-hidden` and\n * the host's `aria-describedby` merge is skipped. Use for cases where the\n * surrounding context already announces the badge's meaning.\n */\n readonly kjDecorative = input<boolean>(false);\n\n /**\n * Optional accessible description for assistive tech. When set, drives a\n * visually-hidden span whose id is merged into the host's existing\n * `aria-describedby`. Required for non-decorative badges that carry\n * meaning (a count, a status word).\n */\n readonly kjDescription = input<string | undefined>(undefined);\n\n /** Stable id of the badge content node. */\n private readonly _contentId = signal(nextOverlayBadgeId());\n\n /** @internal — exposed via {@link KJ_OVERLAY_BADGE}. */\n readonly contentId = this._contentId.asReadonly();\n\n /** Id of the visually-hidden description node — `${contentId}-desc`. */\n readonly descriptionId = computed(() => `${this._contentId()}-desc`);\n\n /** @internal — context surface (signal-typed) for consumers / tests. */\n readonly position = computed<KjOverlayBadgePosition>(() => this.kjPosition());\n /** @internal */\n readonly dot = computed(() => this.kjDot());\n /** @internal */\n readonly decorative = computed(() => this.kjDecorative());\n /** @internal */\n readonly description = computed(() => this.kjDescription() ?? '');\n\n /**\n * `aria-describedby` cached at construction so we can merge our description\n * id without dropping any consumer-set ids. We re-read once at construction\n * — consumers who mutate `aria-describedby` post-init via direct DOM are\n * out-of-contract; declarative bindings or `KjAriaDescribedBy` are the\n * supported paths.\n */\n private readonly originalDescribedBy = this.readOriginalDescribedBy();\n\n /** Merged `aria-describedby` value bound to the host. */\n protected readonly mergedDescribedBy = computed(() => {\n const original = this.originalDescribedBy;\n if (this.decorative() || !this.description()) {\n return original.length ? original.join(' ') : null;\n }\n const merged = [...original];\n const id = this.descriptionId();\n if (!merged.includes(id)) merged.push(id);\n return merged.join(' ');\n });\n\n private readOriginalDescribedBy(): string[] {\n const raw = this.hostEl.nativeElement.getAttribute('aria-describedby');\n if (!raw) return [];\n return raw.split(/\\s+/u).filter(Boolean);\n }\n}\n","import { Directive, computed, inject } from '@angular/core';\nimport { KjBadge } from '../badge/badge';\nimport { KJ_OVERLAY_BADGE } from './overlay-badge.context';\n\n/**\n * The badge content node of the Overlay Badge family. Applied to the element\n * that renders the badge's visible chrome (typically a `<span>` projected as\n * the last child of the anchor host).\n *\n * Composes {@link KjBadge} via `hostDirectives` so all variant / size styling\n * comes from the existing inline-Badge primitive — one CSS source of truth.\n *\n * Reads {@link KJ_OVERLAY_BADGE} for position, dot-mode, decorative, and\n * description state. Owns:\n *\n * - `data-position` reflection of the parent's logical-corner choice — used\n * by CSS to drive `inset-inline-*` / `inset-block-*` placement (RTL is a\n * pure-CSS concern, not JS).\n * - `data-dot` reflection for dot-vs-content rendering.\n * - `aria-hidden=\"true\"` when the parent is decorative or no description was\n * set (a stray \"4\" with no context would mislead AT — silence is better).\n * - Stable `id` derived from the parent context — referenced by the host's\n * merged `aria-describedby` when a description is configured.\n * - `pointer-events: none` so clicks pass through to the anchor. Consumers\n * who project an interactive child (e.g. `<button kjBadge>`) override this\n * in their own CSS.\n *\n * @example\n * ```html\n * <button kjOverlayBadge kjDescription=\"4 unread\">\n * <kj-icon name=\"bell\" />\n * <span kjOverlayBadgeContent>4</span>\n * </button>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name overlay-badge\n */\n@Directive({\n selector: '[kjOverlayBadgeContent]',\n standalone: true,\n hostDirectives: [\n { directive: KjBadge, inputs: ['kjBadgeVariant'] },\n ],\n host: {\n 'style': 'position: absolute; pointer-events: none;',\n '[attr.id]': 'ctx.contentId()',\n '[attr.data-position]': 'ctx.position()',\n '[attr.data-dot]': 'ctx.dot() ? \"\" : null',\n '[attr.aria-hidden]': 'ariaHidden()',\n },\n})\nexport class KjOverlayBadgeContent {\n /** The parent {@link KJ_OVERLAY_BADGE} context. */\n protected readonly ctx = inject(KJ_OVERLAY_BADGE);\n\n /**\n * `aria-hidden` resolution:\n *\n * - `true` when the parent is decorative — the consumer has explicitly\n * opted out of AT announcement.\n * - `true` when there is no description — without one, reading the badge\n * alone (e.g. just \"4\") would be context-free.\n * - `null` (attribute removed) when a description is wired and the badge\n * is non-decorative — AT reaches the description through the host's\n * merged `aria-describedby`.\n */\n protected readonly ariaHidden = computed(() => {\n if (this.ctx.decorative()) return 'true';\n if (!this.ctx.description()) return 'true';\n return null;\n });\n}\n","import { Directive, InjectionToken, inject, signal } from '@angular/core';\n\nexport interface KjAvatarContext { imageLoaded: ReturnType<typeof signal<boolean>>; }\nexport const KJ_AVATAR = new InjectionToken<KjAvatarContext>('KjAvatar');\n\n/**\n * Container for avatar. Tracks image load state.\n *\n * Compose `[kjAvatar]` with `[kjAvatarImage]` and `[kjAvatarFallback]` onto any\n * elements to toggle visibility between the image and the fallback\n * automatically when the image fails or is still loading. No styling attached.\n *\n * @example `<span kjAvatar><img kjAvatarImage src=\"...\" alt=\"...\" /><span kjAvatarFallback>JD</span></span>`\n * @doc-category Core/Data display\n * @doc\n * @doc-name avatar\n * @doc-description Unstyled avatar container that swaps between an image and a fallback when loading or failing.\n * @doc-is-main\n */\n@Directive({ selector: '[kjAvatar]', standalone: true, providers: [{ provide: KJ_AVATAR, useExisting: KjAvatar }] })\nexport class KjAvatar implements KjAvatarContext { readonly imageLoaded = signal(false); }\n\n/**\n * Image element within a `[kjAvatar]` container.\n * @doc-category Core/Data display\n * @doc\n * @doc-name avatar\n */\n@Directive({ selector: '[kjAvatarImage]', standalone: true, host: { '(load)': 'ctx.imageLoaded.set(true)', '(error)': 'ctx.imageLoaded.set(false)', '[attr.data-loaded]': 'ctx.imageLoaded() ? \"\" : null' } })\nexport class KjAvatarImage { readonly ctx = inject(KJ_AVATAR); }\n\n/**\n * Fallback shown when image is unavailable.\n * @doc-category Core/Data display\n * @doc\n * @doc-name avatar\n */\n@Directive({ selector: '[kjAvatarFallback]', standalone: true, host: { '[attr.data-visible]': '!ctx.imageLoaded() ? \"\" : null' } })\nexport class KjAvatarFallback { readonly ctx = inject(KJ_AVATAR); }\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Logical text direction surfaced by the group to its CSS / wrapper. */\nexport type KjAvatarGroupDirection = 'ltr' | 'rtl';\n\n/**\n * Shape forwarded from the group to its child avatars as a default.\n * Per-child overrides win.\n */\nexport type KjAvatarShape = 'circle' | 'rounded';\n\n/**\n * Shared state surfaced by `KjAvatarGroup` for child avatars (in the wrapper\n * package) and the wrapper template to read.\n *\n * - `size` / `shape` are *defaults* — children may override per-instance.\n * - `direction` mirrors the group's resolved logical direction.\n * - `visibleCount`, `overflowCount`, `total` drive the count-aware\n * `aria-label` and the wrapper's overflow chip.\n */\nexport interface KjAvatarGroupContext {\n /** Size token forwarded from the group as a default for children. */\n readonly size: Signal<string | undefined>;\n /** Shape forwarded from the group as a default for children. */\n readonly shape: Signal<KjAvatarShape | undefined>;\n /** Logical text direction observed by the group. */\n readonly direction: Signal<KjAvatarGroupDirection>;\n /**\n * Number of avatars rendered visibly, including the overflow chip when\n * present.\n */\n readonly visibleCount: Signal<number>;\n /** Number of avatars hidden behind the chip. `0` when no overflow. */\n readonly overflowCount: Signal<number>;\n /**\n * Effective total: `kjTotal` if provided (and not less than the projected\n * count), otherwise the projected child count.\n */\n readonly total: Signal<number>;\n}\n\n/** Injection token for `KjAvatarGroupContext`. */\nexport const KJ_AVATAR_GROUP = new InjectionToken<KjAvatarGroupContext>(\n 'KjAvatarGroup',\n);\n","import {\n Directive,\n ElementRef,\n PLATFORM_ID,\n Signal,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { KjDirectionality } from '../primitives/directionality/directionality';\nimport { KjAvatar } from './avatar';\nimport {\n KJ_AVATAR_GROUP,\n KjAvatarGroupContext,\n KjAvatarGroupDirection,\n KjAvatarShape,\n} from './avatar-group.context';\n\n/** Format used to compose the count-aware `aria-label`. */\nexport type KjAvatarGroupAriaLabelFormat = (\n visible: number,\n total: number,\n label: string,\n) => string;\n\nconst DEFAULT_ARIA_LABEL_FORMAT: KjAvatarGroupAriaLabelFormat = (v, t, l) =>\n `${v} of ${t} ${l}`;\n\n/**\n * Coordinates a horizontally stacked cluster of `KjAvatar` children.\n *\n * Owns:\n * - **Counting** — enumerates the projected `KjAvatar` directives via\n * `contentChildren` and exposes `visibleCount`, `overflowCount`, and `total`\n * signals for the wrapper template.\n * - **Overflow hiding (Plan C)** — writes `[hidden]` (and a\n * `data-overflow=\"true\"` data attribute) on each child past `kjMax`.\n * Cleared automatically when the child re-enters the visible range.\n * - **ARIA** — applies `role=\"group\"` (or `\"list\"` / none) and a count-aware\n * `aria-label` such as `\"3 of 8 collaborators\"`. Consumers may override the\n * noun (`kjAriaLabel`) and the entire format function (`kjAriaLabelFormat`),\n * or pass a static label via the standard `aria-label` attribute on the\n * host (the host binding only writes when the consumer hasn't).\n * - **RTL-aware stacking** — composes `KjDirectionality` and writes a\n * per-child `--kj-avatar-group-stack-order` CSS custom property (and the\n * group-wide `--kj-avatar-group-count` and `--kj-avatar-group-direction`)\n * so theme CSS can paint first-on-top in either direction without walking\n * ancestors.\n *\n * The directive renders nothing of its own (no template, no DOM mutations\n * beyond child host attributes / inline custom properties). The wrapper\n * component owns the chip element and the layout CSS.\n *\n * @example\n * ```html\n * <span kjAvatarGroup [kjMax]=\"3\" kjAriaLabel=\"collaborators\">\n * <span kjAvatar>...</span>\n * <span kjAvatar>...</span>\n * <span kjAvatar>...</span>\n * <span kjAvatar>...</span>\n * <span kjAvatar>...</span>\n * </span>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name avatar\n */\n@Directive({\n selector: '[kjAvatarGroup]',\n standalone: true,\n exportAs: 'kjAvatarGroup',\n providers: [{ provide: KJ_AVATAR_GROUP, useExisting: KjAvatarGroup }],\n host: {\n '[attr.role]': 'kjRole()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.data-direction]': 'direction()',\n '[style.--kj-avatar-group-count]': 'visibleCount()',\n '[style.--kj-avatar-group-direction]': 'direction()',\n },\n})\nexport class KjAvatarGroup implements KjAvatarGroupContext {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly directionality = inject(KjDirectionality);\n\n /**\n * Maximum number of avatars to show before the overflow chip. Children past\n * this index are hidden via `[hidden]` and counted toward\n * `overflowCount`. `0` disables the cap (always show all, no chip).\n * @default 4\n */\n readonly kjMax = input<number>(4);\n\n /**\n * Override of the effective total. When provided (and not less than the\n * projected child count) drives the count-aware `aria-label` and the\n * overflow count, so consumers can show a *page* of a larger collection\n * (e.g. server-side pagination).\n *\n * If the consumer passes a value smaller than the projected count, the\n * directive clamps to the projected count to avoid nonsense like `\"5 of 3\"`.\n */\n readonly kjTotal = input<number | undefined>(undefined);\n\n /**\n * Default size token forwarded to children via `KJ_AVATAR_GROUP`. Per-child\n * overrides win.\n */\n readonly kjSize = input<string | undefined>(undefined);\n\n /**\n * Default shape forwarded to children via `KJ_AVATAR_GROUP`. Per-child\n * overrides win.\n * @default 'circle'\n */\n readonly kjShape = input<KjAvatarShape | undefined>('circle');\n\n /** Noun used in the count-aware `aria-label`. */\n readonly kjAriaLabel = input<string>('avatars');\n\n /** Formatter for the count-aware `aria-label`. */\n readonly kjAriaLabelFormat = input<KjAvatarGroupAriaLabelFormat>(\n DEFAULT_ARIA_LABEL_FORMAT,\n );\n\n /**\n * Host role. `'group'` for a decorative cluster, `'list'` when each child\n * is wrapped in a `listitem` (e.g. interactive avatars as links), `null`\n * to opt out entirely.\n * @default 'group'\n */\n readonly kjRole = input<'group' | 'list' | null>('group');\n\n /**\n * Per-consumer override for the host `aria-label`. When set, takes\n * precedence over the count-aware label. `null` opts out of `aria-label`.\n */\n readonly kjAriaLabelOverride = input<string | null | undefined>(undefined);\n\n /**\n * All `KjAvatar` directives projected into the group, including those\n * composed via `hostDirectives` on a wrapper component.\n *\n * `descendants: true` so wrapping a `<kj-avatar>` in `<a>` (the \"stack of\n * links\" use case) still finds the child.\n */\n private readonly avatars = contentChildren(KjAvatar, { descendants: true });\n\n /**\n * Host elements for each projected `KjAvatar`, queried in parallel with\n * the directive query so we can write `[hidden]` and CSS variables onto\n * the right host node without having to expose `ElementRef` on `KjAvatar`.\n */\n private readonly avatarHosts = contentChildren(KjAvatar, {\n descendants: true,\n read: ElementRef,\n });\n\n /** Effective total: `kjTotal` (clamped) or the projected child count. */\n readonly total: Signal<number> = computed(() => {\n const childCount = this.avatars().length;\n const override = this.kjTotal();\n if (override === undefined) return childCount;\n return Math.max(override, childCount);\n });\n\n /** Number of children rendered visibly (the rest are `[hidden]`). */\n readonly visibleCount: Signal<number> = computed(() => {\n const max = this.kjMax();\n const childCount = this.avatars().length;\n if (max <= 0) return childCount;\n return Math.min(childCount, max);\n });\n\n /** Number of avatars hidden by the cap. `0` when nothing overflows. */\n readonly overflowCount: Signal<number> = computed(() => {\n const max = this.kjMax();\n if (max <= 0) return 0;\n return Math.max(0, this.total() - max);\n });\n\n /** Logical text direction observed at the document level. */\n readonly direction: Signal<KjAvatarGroupDirection> = computed(\n () => this.directionality.current() as KjAvatarGroupDirection,\n );\n\n /** Default `aria-label`, omitted when the group is empty. */\n private readonly countAwareAriaLabel = computed<string | null>(() => {\n const total = this.total();\n if (total === 0) return null;\n return this.kjAriaLabelFormat()(this.visibleCount(), total, this.kjAriaLabel());\n });\n\n /**\n * `aria-label` actually written to the host. Consumer override wins; `null`\n * opts out of the attribute entirely.\n */\n protected readonly resolvedAriaLabel = computed<string | null>(() => {\n const override = this.kjAriaLabelOverride();\n if (override !== undefined) return override ?? null;\n return this.countAwareAriaLabel();\n });\n\n /** Read-only signal — exposed for the wrapper / spec ergonomics. */\n get size(): Signal<string | undefined> {\n return this.kjSize;\n }\n\n /** Read-only signal — exposed for the wrapper / spec ergonomics. */\n get shape(): Signal<KjAvatarShape | undefined> {\n return this.kjShape;\n }\n\n constructor() {\n // Plan C from `avatar-group.md`: write `[hidden]` and a per-child stack\n // order onto each projected avatar's host element. Crosses the directive\n // boundary by design — the group owns visibility of its overflow items.\n effect(() => {\n const hosts = this.avatarHosts();\n const max = this.kjMax();\n const dir = this.direction();\n const visibleCount = this.visibleCount();\n const isBrowser = isPlatformBrowser(this.platformId);\n if (!isBrowser) return;\n\n const total = hosts.length;\n const cap = max <= 0 ? total : Math.min(max, total);\n\n hosts.forEach((ref, index) => {\n const el = ref.nativeElement as HTMLElement | null;\n if (!el) return;\n\n const overflow = max > 0 && index >= cap;\n if (overflow) {\n el.setAttribute('hidden', '');\n el.setAttribute('data-overflow', 'true');\n } else {\n el.removeAttribute('hidden');\n el.removeAttribute('data-overflow');\n }\n\n // First-on-top in LTR (highest z-index goes to index 0); flipped in\n // RTL so the visually-leading face — which is now on the right —\n // still paints on top.\n const visualIndex =\n dir === 'rtl' ? Math.max(0, visibleCount - 1 - index) : index;\n const stackOrder = Math.max(0, visibleCount - 1 - visualIndex);\n el.style.setProperty(\n '--kj-avatar-group-stack-order',\n String(stackOrder),\n );\n el.style.setProperty('--kj-avatar-group-index', String(index));\n });\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n inject,\n isDevMode,\n} from '@angular/core';\nimport { KjSize, type KjSizePreset } from '../presets';\n\n/**\n * Default size preset used by Kbd consumers (`xs / sm / md / lg`, default `md`).\n *\n * Re-exported so core-package consumers applying `[kjKbd]` directly to their\n * own `<kbd>` elements can opt into the same size scale the eventual styled\n * wrapper will provide, via:\n *\n * ```ts\n * providers: [{ provide: KJ_SIZE_PRESET, useValue: KJ_KBD_SIZE_PRESET }]\n * ```\n *\n * Avoids the silent-drift case where a consumer picks `'huge'` and the\n * directive's dev-mode validator passes (because the consumer's preset didn't\n * list it) but the CSS doesn't recognise the value. See\n * `docs/component-analyses/data-display/kbd.md` (Open question 13).\n */\nexport const KJ_KBD_SIZE_PRESET: KjSizePreset = {\n values: ['xs', 'sm', 'md', 'lg'],\n default: 'md',\n};\n\n/**\n * Marks an element as a kouji keyboard-key visual (`<kbd>`). The directive is\n * a pure visual primitive: it composes `KjSize` (the only configurable axis)\n * and otherwise relies on the native `<kbd>` element's a11y semantics.\n *\n * The host element is consumer-supplied. The recommended host is `<kbd>`\n * (native semantic — implicit `role=\"generic\"` per HTML AAM, but commonly\n * announced with a \"key\" prefix in verbose AT modes); applying `[kjKbd]` to\n * any other element is dev-mode warned but not enforced (consumers wanting a\n * `<span>` host for inline-baseline reasons get an escape hatch).\n *\n * **No variant.** Kbd is tonally neutral — there is no \"destructive kbd\" or\n * \"primary kbd\". A future design language wanting e.g. a \"deprecated shortcut\"\n * tone can fold in via a CSS-only `[data-deprecated=\"true\"]` attribute without\n * API churn.\n *\n * **No keyboard contract.** Kbd is non-focusable, non-clickable. Consumers\n * wanting a clickable shortcut chip wrap a `<button kjButton>` around the\n * `<kbd kjKbd>` and the button owns the click / focus / a11y story. Embedding\n * a focusable descendant inside `[kjKbd]` is dev-mode warned because most AT\n * will re-parent or strip the interactive child out of the kbd's accessible\n * name.\n *\n * **No `aria-label` injection.** When the visible text is a unicode glyph\n * (`⌘`, `⌥`, `↵`) the consumer sets `aria-label` directly on the host —\n * exactly the same idiom as setting `aria-label` on any HTML element. The\n * directive does not declare a duplicate input for it. (The eventual\n * `<kj-kbd>` wrapper exposes a template-driven `kjKbdAriaLabel` input that\n * forwards to `[attr.aria-label]`; that is the wrapper's call, not the\n * directive's.)\n *\n * @example\n * ```html\n * <kbd kjKbd>Enter</kbd>\n * <kbd kjKbd kjSize=\"xs\">⌘</kbd>\n * <kbd kjKbd aria-label=\"Command\">⌘</kbd>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name kbd\n * @doc-description Marks a kbd element as a keyboard-key visual with a configurable size.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjKbd]',\n standalone: true,\n hostDirectives: [{ directive: KjSize, inputs: ['kjSize'] }],\n})\nexport class KjKbd {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n if (isDevMode()) {\n afterNextRender(() => {\n const host = this.el.nativeElement;\n\n if (host.tagName?.toLowerCase() !== 'kbd') {\n console.warn(\n `[kj] kjKbd applied to <${host.tagName?.toLowerCase()}>. ` +\n `Recommended host element is <kbd> for native semantics ` +\n `(WCAG 1.3.1 / 4.1.2). Apply only to non-kbd elements when ` +\n `you have a specific styling reason.`,\n );\n }\n\n if (hasFocusableDescendant(host)) {\n console.warn(\n `[kj] kjKbd contains a focusable descendant. Kbd is a ` +\n `non-interactive visual primitive; most AT will re-parent or ` +\n `strip interactive children out of the kbd's accessible name. ` +\n `Wrap the <kbd kjKbd> inside a <button kjButton> instead of ` +\n `nesting an interactive element inside it.`,\n );\n }\n });\n }\n }\n}\n\n/**\n * Selector matching elements that are focusable by default. Intentionally\n * narrow: this is a dev-mode advisory, not an a11y enforcement gate, so we\n * accept the small risk of missing exotic focusable descendants\n * (`contenteditable`, embedded `<object>` with focusable controls, etc.) in\n * favour of a fast first-pass check.\n */\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'audio[controls]',\n 'video[controls]',\n '[tabindex]',\n '[contenteditable=\"\"]',\n '[contenteditable=\"true\"]',\n].join(',');\n\nfunction hasFocusableDescendant(host: HTMLElement): boolean {\n return host.querySelector(FOCUSABLE_SELECTOR) !== null;\n}\n","// packages/core/src/icon/icon.mode.ts\n\n/**\n * Render mode inferred from an icon name.\n * @doc\n * @doc-name icon\n * @doc-order 14\n */\nexport type IconMode = 'svg' | 'font';\n\nconst FONT_PREFIX = '@font.';\n\n/**\n * Infer render mode from icon name. Names starting with `@font.` use the\n * font code path (CSS `content`); everything else uses the svg/css-mask\n * code path.\n * @doc\n * @doc-name icon\n * @doc-order 5\n */\nexport function getIconMode(name: string): IconMode {\n return name.startsWith(FONT_PREFIX) ? 'font' : 'svg';\n}\n","import { InjectionToken, type WritableSignal, inject, signal } from '@angular/core';\nimport type { IconLoader, IconResolver } from './icon.types';\n\n/**\n * Multi-provider entries contributed by `provideIcons(...)`. Each entry is a\n * `Record<name, cssReadyValue>`. The registry factory merges all entries at\n * injection time.\n *\n * Internal — consumers use `provideIcons(...)`.\n * @internal\n */\nexport const KJ_ICON_ENTRIES = new InjectionToken<Record<string, string>>(\n 'KJ_ICON_ENTRIES',\n);\n\n/**\n * Runtime icon registry. A writable signal so the async loader can fill in\n * resolved icons and any consuming directive's computed re-evaluates.\n *\n * Stored values are CSS-ready: `url(\"...\")` for svg mode, quoted glyphs for\n * font mode. Adapter authors are responsible for the wrapping.\n * @doc\n * @doc-name icon\n * @doc-order 6\n */\nexport const KJ_ICON_REGISTRY = new InjectionToken<\n WritableSignal<Record<string, string>>\n>('KJ_ICON_REGISTRY', {\n providedIn: 'root',\n factory: () => {\n const entries = inject(KJ_ICON_ENTRIES, { optional: true }) as\n | Record<string, string>[]\n | Record<string, string>\n | null;\n const list: Record<string, string>[] = Array.isArray(entries)\n ? entries\n : entries\n ? [entries]\n : [];\n const merged = list.reduce<Record<string, string>>(\n (acc, m) => ({ ...acc, ...m }),\n {},\n );\n return signal<Record<string, string>>(merged);\n },\n});\n\n/**\n * Synchronous fallback resolver. Called when a name is not in the registry\n * and no async loader is configured. Returns a CSS-ready string.\n *\n * Default: returns the name unchanged.\n * @doc\n * @doc-name icon\n * @doc-order 7\n */\nexport const KJ_ICON_RESOLVER = new InjectionToken<IconResolver>(\n 'KJ_ICON_RESOLVER',\n { providedIn: 'root', factory: () => (name: string) => name },\n);\n\n/**\n * Optional async loader. When set, missing icons are loaded via this fn and\n * the result is written into `KJ_ICON_REGISTRY`. While loading, the\n * directive renders nothing for that name. If unset, the resolver fallback\n * is used instead.\n * @doc\n * @doc-name icon\n * @doc-order 8\n */\nexport const KJ_ICON_LOADER = new InjectionToken<IconLoader | null>(\n 'KJ_ICON_LOADER',\n { providedIn: 'root', factory: () => null },\n);\n\n/**\n * Resolvable path to the kouji icon stylesheet.\n *\n * ```ts\n * import { KJ_ICON_CSS_PATH } from '@kouji-ui/core';\n * // or import the file directly:\n * import '@kouji-ui/core/icon/icon.css';\n * ```\n * @doc\n * @doc-name icon\n * @doc-order 9\n */\nexport const KJ_ICON_CSS_PATH = '@kouji-ui/core/icon/icon.css' as const;\n","import {\n type EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport type { IconLoader, IconResolver } from './icon.types';\nimport {\n KJ_ICON_ENTRIES,\n KJ_ICON_LOADER,\n KJ_ICON_RESOLVER,\n} from './icon.tokens';\n\n/**\n * Register a map of icon names to CSS-ready values. Call multiple times to\n * compose icon sets; later calls win on key collision.\n * @doc\n * @doc-name icon\n * @doc-order 1\n */\nexport function provideIcons(\n map: Record<string, string>,\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: KJ_ICON_ENTRIES, useValue: map, multi: true },\n ]);\n}\n\n/**\n * Override the synchronous fallback resolver used when a name is not in the\n * registry and no async loader is configured.\n * @doc\n * @doc-name icon\n * @doc-order 2\n */\nexport function provideIconResolver(fn: IconResolver): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: KJ_ICON_RESOLVER, useValue: fn }]);\n}\n\n/**\n * Register an async loader. When present, missing icons are loaded via this\n * function and cached into the registry.\n * @doc\n * @doc-name icon\n * @doc-order 3\n */\nexport function provideIconLoader(fn: IconLoader): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: KJ_ICON_LOADER, useValue: fn }]);\n}\n","import { inject } from '@angular/core';\nimport {\n KJ_ICON_LOADER,\n KJ_ICON_REGISTRY,\n KJ_ICON_RESOLVER,\n} from './icon.tokens';\n\n/**\n * Returns a function that resolves an icon name to a CSS-ready value, or\n * `null` while an async load is pending.\n *\n * Lookup order:\n * 1. `KJ_ICON_REGISTRY` (eager)\n * 2. `KJ_ICON_LOADER` (async; fills registry on success, returns `null` while pending)\n * 3. `KJ_ICON_RESOLVER` (sync default, e.g. URL synthesis)\n *\n * Must be called in an injection context.\n * @doc\n * @doc-name icon\n * @doc-order 4\n */\nexport function injectKjIconResolver(): (name: string) => string | null {\n const registry = inject(KJ_ICON_REGISTRY);\n const loader = inject(KJ_ICON_LOADER);\n const fallback = inject(KJ_ICON_RESOLVER);\n const pending = new Set<string>();\n\n return (name: string): string | null => {\n const map = registry();\n if (Object.prototype.hasOwnProperty.call(map, name)) return map[name];\n\n if (loader) {\n if (!pending.has(name)) {\n pending.add(name);\n Promise.resolve(loader(name))\n .then((value) => {\n registry.update((m) => ({ ...m, [name]: value }));\n pending.delete(name);\n })\n .catch(() => {\n pending.delete(name);\n });\n }\n return null;\n }\n\n return fallback(name);\n };\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { getIconMode } from './icon.mode';\nimport { injectKjIconResolver } from './icon.resolver';\nimport type { KjIconColor, KjIconSize } from './icon.types';\n\n/**\n * Renders an icon on its host element via CSS custom properties. Owns icon\n * accessibility (decorative by default; meaningful when `kjIconLabel` is set).\n *\n * @example\n * ```html\n * <span [kjIcon]=\"'settings'\"></span>\n * <span [kjIcon]=\"'alert-triangle'\" [kjIconLabel]=\"'Warning'\"></span>\n * <span [kjIcon]=\"'check'\" [kjIconColor]=\"'success'\" [kjIconSize]=\"'lg'\"></span>\n * ```\n *\n * @doc-example Gallery\n * Browseable Lucide icon grid with a substring filter. Click any tile to\n * copy its `<i kjIcon=\"…\">` snippet.\n * @doc-file ../../../components/src/icon/icon.gallery.example.ts\n * @doc-example Usage\n * Common icon shapes — decorative inline, meaningful with a label, sized\n * variants, and semantic color tokens.\n * @doc-file ../../../components/src/icon/icon.usage.example.ts\n *\n * @doc-keyboard\n * None — the icon directive is non-interactive. Place inside a focusable parent (button/link) for activation semantics.\n *\n * @doc-aria\n * aria-hidden — Set to \"true\" by default (decorative). Removed when [kjIconLabel] is provided\n * role=\"img\" — Set when [kjIconLabel] is provided (meaningful icon)\n * aria-label — Bound to [kjIconLabel] when provided\n * data-kj-icon-mode — Mirrors the resolved mode (\"svg\" | \"font\") for theme CSS\n *\n * @doc-css-var\n * --kj-icon — CSS-ready resolved icon value (a url() for svg mode or a quoted glyph for font mode). Set by the directive.\n * --kj-icon-font — Font family used in font mode. Consumers set this on a parent when shipping icon fonts.\n * --kj-color-icon-* — Foreground color tokens for [kjIconColor] (muted/primary/success/warning/danger/info).\n * --kj-icon-size-* — Em-relative size tokens for [kjIconSize] (xs/sm/md/lg/xl).\n *\n * @doc-touch\n * The icon is layout-only and does not require a 44×44 target on its own.\n * When the icon is the sole label of an interactive control, the parent\n * (`kj-button kjSize=\"icon\"`, `<a>`, etc.) must meet WCAG 2.5.5.\n *\n * @doc-a11y\n * Decorative by default — `aria-hidden=\"true\"` keeps the icon silent for\n * AT. Pass `[kjIconLabel]` only when the icon conveys meaning that is not\n * duplicated in adjacent text; this swaps in `role=\"img\"` and the label.\n * Color tokens map to `--kj-color-icon-{token}` so theme palettes can\n * retarget per-mode without API churn.\n *\n * @doc-related button,link,badge\n *\n * @doc-category Core/Icon\n * @doc\n * @doc-name icon\n * @doc-description Renders an accessible icon on its host element by name with color and size tokens.\n * @doc-is-main\n */\n@Directive({\n selector: 'span[kjIcon], i[kjIcon]',\n standalone: true,\n host: {\n class: 'kj-icon',\n '[style.--kj-icon]': 'iconValue()',\n '[style.color]': 'colorVar()',\n '[style.font-size]': 'sizeVar()',\n '[attr.data-kj-icon-mode]': 'mode()',\n '[attr.aria-hidden]': 'ariaHidden()',\n '[attr.role]': 'roleAttr()',\n '[attr.aria-label]': 'ariaLabelAttr()',\n },\n})\nexport class KjIconDirective {\n private readonly resolve = injectKjIconResolver();\n\n /** Icon name. Names starting with `@font.` use font mode. */\n readonly kjIcon = input.required<string>();\n\n /**\n * Accessible name. When set, the icon is treated as meaningful:\n * `role=\"img\"`, `aria-label` set, `aria-hidden` removed. When unset\n * (the default), the icon is decorative and `aria-hidden=\"true\"`.\n */\n readonly kjIconLabel = input<string | null>(null);\n\n /** Semantic color token. Default `null` means inherit (CSS `currentColor`). */\n readonly kjIconColor = input<KjIconColor | null>(null);\n\n /** Size token. Default `null` means inherit from surrounding text. */\n readonly kjIconSize = input<KjIconSize | null>(null);\n\n protected readonly mode = computed(() => getIconMode(this.kjIcon()));\n protected readonly iconValue = computed(() => this.resolve(this.kjIcon()));\n\n protected readonly ariaHidden = computed(() =>\n this.kjIconLabel() ? null : 'true',\n );\n protected readonly roleAttr = computed(() =>\n this.kjIconLabel() ? 'img' : null,\n );\n protected readonly ariaLabelAttr = computed(() => this.kjIconLabel());\n\n protected readonly colorVar = computed(() => {\n const c = this.kjIconColor();\n return c && c !== 'inherit' ? `var(--kj-color-icon-${c})` : null;\n });\n protected readonly sizeVar = computed(() => {\n const s = this.kjIconSize();\n return s ? `var(--kj-icon-size-${s})` : null;\n });\n}\n","import {\n Directive,\n ElementRef,\n InjectionToken,\n Signal,\n computed,\n effect,\n inject,\n input,\n isDevMode,\n} from '@angular/core';\nimport { KjRovingTabindex } from '../a11y/roving-tabindex';\nimport { KjSize, KjVariant } from '../presets';\nimport type { KjListOrientation } from '../primitives/list/tokens';\n\nexport type { KjListOrientation };\n\n/**\n * Host element kind the consumer chose for the list root. The directive does\n * not render this element — the consumer does — but the input lets the\n * directive emit the right `role` and warn on landmark misuse.\n *\n * `'ul'` is the default and the recommended choice in 90% of cases.\n */\nexport type KjListAs = 'ul' | 'ol' | 'div' | 'nav';\n\n/** @internal Public shape of the parent list context exposed to descendants. */\nexport interface KjListContext {\n readonly kjOrientation: Signal<KjListOrientation>;\n readonly kjDivided: Signal<boolean>;\n readonly kjHoverable: Signal<boolean>;\n}\n\n/** Context token for the parent `KjList`, injected by descendants. */\nexport const KJ_LIST = new InjectionToken<KjListContext>('KjList');\n\n/** Context token for the parent `KjListRow`, injected by descendants. */\nexport const KJ_LIST_ROW = new InjectionToken<KjListRowContext>('KjListRow');\n\n/** @internal Public shape of the per-row context exposed to descendants. */\nexport interface KjListRowContext {\n readonly active: Signal<boolean>;\n readonly disabled: Signal<boolean>;\n}\n\n/**\n * Root list container. Owns the container ARIA role, orientation,\n * divider/hover data attributes, and an opt-in roving-tabindex composition for\n * sidebar-nav-list use cases. Composes `KjVariant` + `KjSize` via\n * `hostDirectives` so theme CSS can read the standard `data-variant` /\n * `data-size` mirrors.\n *\n * The directive does **not** render the host element — the consumer does. The\n * `kjAs` input declares which element the consumer chose so the directive can\n * emit (or omit) `role=\"list\"` and warn when a `<nav>` host is missing an\n * accessible name.\n *\n * **Why `role=\"list\"` on `<ul>`/`<ol>`?** Safari's WebKit \"list voice\"\n * heuristic strips the implicit `role=\"list\"` from a `<ul>` whose CSS sets\n * `list-style: none` (the default in our wrapper CSS). Re-emitting the role\n * defeats the heuristic. The redundancy is deliberate.\n *\n * @example\n * ```html\n * <ul kjList kjOrientation=\"vertical\" aria-label=\"Recent files\">\n * <li kjListRow>Item A</li>\n * <li kjListRow>Item B</li>\n * </ul>\n * ```\n *\n * @example Sidebar nav with arrow-key navigation\n * ```html\n * <nav kjList kjAs=\"nav\" kjArrowNavigation aria-label=\"Primary\">\n * <div kjListRow [kjActive]=\"true\">\n * <a kjLink kjRovingTabindexItem aria-current=\"page\">Home</a>\n * </div>\n * <div kjListRow>\n * <a kjLink kjRovingTabindexItem>Settings</a>\n * </div>\n * </nav>\n * ```\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name list\n * @doc-description Unstyled list container with role, orientation, and opt-in arrow-key navigation for sidebars.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjList]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n // Forward the composed roving primitive's orientation under the same\n // external name as `kjOrientation` so consumers writing\n // `<ul kjList kjOrientation=\"horizontal\">` get both axes wired.\n {\n directive: KjRovingTabindex,\n inputs: ['kjRovingOrientation: kjOrientation'],\n },\n ],\n providers: [{ provide: KJ_LIST, useExisting: KjList }],\n exportAs: 'kjList',\n host: {\n '[attr.role]': 'roleAttr()',\n // `aria-orientation` is rejected by axe's `aria-allowed-attr` on\n // `role=\"list\"` (the implicit/explicit list role does not list\n // `aria-orientation` as a supported attribute in ARIA 1.2). The keyboard\n // axis is enforced via the composed `KjRovingTabindex.kjRovingOrientation`\n // and themes read `data-orientation` for visual layout. Same precedent\n // as `KjStepper`.\n '[attr.data-orientation]': 'kjOrientation()',\n '[attr.data-divided]': 'kjDivided() ? \"\" : null',\n '[attr.data-hoverable]': 'kjHoverable() ? \"\" : null',\n },\n})\nexport class KjList implements KjListContext {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Declares which host element the consumer is rendering this list as.\n * Default `'ul'` matches the `<ul kjList>` ergonomic. `'nav'` switches the\n * implicit role to the `navigation` landmark (the directive omits its\n * `role=\"list\"` binding in that case) and triggers a dev-mode warning when\n * neither `aria-label` nor `aria-labelledby` is set on the host.\n */\n readonly kjAs = input<KjListAs>('ul');\n\n /**\n * List orientation. Drives `aria-orientation` and `data-orientation`.\n * Forwarded to the composed `KjRovingTabindex` (when `kjArrowNavigation` is\n * `true`) so arrow-key navigation moves on the right axis.\n */\n readonly kjOrientation = input<KjListOrientation>('vertical');\n\n /**\n * Whether the list draws between-row borders. Theme CSS reads\n * `data-divided` on the root and applies a `:not(:last-child)` border on\n * `KjListRow`. Pure CSS effect — no JS.\n */\n readonly kjDivided = input<boolean>(false);\n\n /**\n * Whether rows highlight on hover. Theme CSS reads `data-hoverable` on the\n * root. Off by default because purely informational lists (stat blocks)\n * should not hint at interactivity.\n */\n readonly kjHoverable = input<boolean>(false);\n\n /**\n * Opt-in flag that turns the list into a roving-tabindex group. When\n * `false` (default), the composed `KjRovingTabindex` is configured with\n * `kjRovingOrientation=\"vertical\" | \"horizontal\"` but no item is registered\n * unless the consumer applies `kjRovingTabindexItem` to a focusable child.\n * Setting this to `true` documents the intent at the consumer site; the\n * actual focus-stop wiring is done by the consumer applying\n * `kjRovingTabindexItem` on their projected `<a>` / `<button>`.\n */\n readonly kjArrowNavigation = input<boolean>(false);\n\n /**\n * Whether arrow-key navigation wraps at the ends. Forwarded conceptually to\n * theme/keyboard logic; only meaningful when `kjArrowNavigation` is `true`.\n * Defaults to `true` to match the typical sidebar-nav UX.\n */\n readonly kjListWrap = input<boolean>(true);\n\n /** @internal Computes the role the directive should host-bind. */\n protected readonly roleAttr = computed<string | null>(() => {\n const as = this.kjAs();\n // `<nav>` is a landmark (implicit `role=\"navigation\"`); emitting\n // `role=\"list\"` on top of it would conflict with the landmark semantics.\n if (as === 'nav') return null;\n // Always emit on `<ul>` / `<ol>` to defeat Safari's `list-style: none`\n // voice-stripping heuristic, and on `<div>` because there is no implicit\n // role to inherit from.\n return 'list';\n });\n\n constructor() {\n if (isDevMode()) {\n // Landmark naming discipline: a `<nav>` MUST have an accessible name.\n // We warn (not throw) so downstream tooling that adds the attribute via\n // a wrapper or a parent `aria-labelledby` on the surrounding heading\n // does not flake under unit tests; the wrapper layer escalates to an\n // error per the analysis doc.\n effect(() => {\n if (this.kjAs() !== 'nav') return;\n // Read host attributes lazily — the host element is the consumer's,\n // so attribute presence is the source of truth.\n const host = this.el.nativeElement;\n const hasLabel =\n host.hasAttribute('aria-label') || host.hasAttribute('aria-labelledby');\n if (!hasLabel) {\n console.warn(\n '[kj] kjList with kjAs=\"nav\" requires aria-label or aria-labelledby on the host. ' +\n 'A <nav> is a landmark and must be named.',\n );\n }\n });\n }\n }\n}\n\n/**\n * Per-row directive for themed list surfaces (settings panels, sidebar nav).\n * Owns the listitem ARIA role and reflects active / disabled state to data\n * attributes the wrapper CSS reads to paint chrome. Provides a tiny\n * `KJ_LIST_ROW` token so descendants (e.g. an icon button inside the row) can\n * read the parent's active/disabled signals.\n *\n * Distinct from the listbox/menu/tree primitive `KjListItem` in\n * `primitives/list` — that one drives selection, ARIA `aria-selected`, and\n * activation, whereas this directive is purely a presentational row in a\n * navigation/list surface.\n *\n * The row host is **not** a focus stop. Keyboard reachability lives on the\n * projected interactive child (`<a kjLink>`, `<button kjButton>`). The\n * directive's `kjDisabled` only paints the chrome via `data-disabled`; it\n * does **not** wire `aria-disabled` on the projected child — that is the\n * projected child's responsibility (via `KjDisabled`).\n *\n * @example\n * ```html\n * <li kjListRow [kjActive]=\"route === '/home'\">\n * <a kjLink href=\"/home\" aria-current=\"page\">Home</a>\n * </li>\n * ```\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name list\n */\n@Directive({\n selector: '[kjListRow]',\n standalone: true,\n providers: [{ provide: KJ_LIST_ROW, useExisting: KjListRow }],\n exportAs: 'kjListRow',\n host: {\n '[attr.role]': 'roleAttr()',\n '[attr.data-active]': 'kjActive() ? \"\" : null',\n '[attr.data-disabled]': 'kjDisabled() ? \"\" : null',\n },\n})\nexport class KjListRow implements KjListRowContext {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Whether the row is the current/active selection (e.g. the current page in\n * a sidebar nav). Reflects to `data-active=\"\"`. The directive does **not**\n * infer `aria-current` from this — the consumer sets `aria-current=\"page\"`\n * (or `step`, `date`, `true`) on the projected link/button because the\n * right token depends on the consumer's domain.\n */\n readonly kjActive = input<boolean>(false);\n\n /**\n * Whether the row is disabled. Reflects to `data-disabled=\"\"` so theme CSS\n * can dim the projected interactive child. Does not block keyboard\n * reachability — that responsibility is the projected child's (via\n * `KjDisabled`).\n */\n readonly kjDisabled = input<boolean>(false);\n\n /** @internal Mirrors `kjActive` for descendant-side reads via `KJ_LIST_ROW`. */\n readonly active = this.kjActive;\n\n /** @internal Mirrors `kjDisabled` for descendant-side reads via `KJ_LIST_ROW`. */\n readonly disabled = this.kjDisabled;\n\n /** @internal Computes the role to host-bind, omitting when the host is `<li>`. */\n protected readonly roleAttr = computed<string | null>(() => {\n const tag = this.el.nativeElement.tagName?.toLowerCase();\n return tag === 'li' ? null : 'listitem';\n });\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Carousel orientation. Drives `aria-orientation`, the scroll-snap axis, and the keyboard arrow mapping. */\nexport type KjCarouselOrientation = 'horizontal' | 'vertical';\n\n/** Slide alignment within the viewport. Drives `scroll-snap-align`. */\nexport type KjCarouselAlign = 'start' | 'center' | 'end';\n\n/** Indicator control pattern per WAI-ARIA APG. */\nexport type KjCarouselControlPattern = 'buttons' | 'tabs';\n\n/**\n * Context exposed by the root `KjCarousel` directive to its descendants.\n * Centralises selection, orientation, loop state, autoplay gating and the\n * imperative `next` / `prev` / `goTo` / `play` / `pause` API.\n */\nexport interface KjCarouselContext {\n /** Currently active slide value, or null when no slide has settled yet. */\n readonly currentValue: Signal<string | null>;\n /** Currently active slide index, or -1 when no slide has settled yet. */\n readonly currentIndex: Signal<number>;\n /** Total number of registered slides (excluding loop clones). */\n readonly slideCount: Signal<number>;\n /** Carousel orientation. */\n readonly orientation: Signal<KjCarouselOrientation>;\n /** Whether wrap-around (loop) is enabled. */\n readonly loop: Signal<boolean>;\n /** True only when the user has explicitly paused autoplay (gate 3). */\n readonly paused: Signal<boolean>;\n /** True when an autoplay directive is registered and all five gates are open. */\n readonly autoplayActive: Signal<boolean>;\n /** Stable id of the viewport element — used by Previous / Next as `aria-controls` target. */\n viewportId(): string;\n /** Stable id for the slide identified by `value`. */\n slideId(value: string): string;\n /** Whether the slide for `value` is the active one. */\n isActive(value: string): boolean;\n /** Imperative: advance to the next slide (no-op at end when `kjLoop` is false). */\n next(): void;\n /** Imperative: advance to the previous slide (no-op at start when `kjLoop` is false). */\n prev(): void;\n /** Imperative: jump to a slide by value. */\n goTo(value: string): void;\n /** Imperative: explicitly pause autoplay (sets paused signal to true). */\n pause(): void;\n /** Imperative: explicitly resume autoplay (sets paused signal to false). */\n play(): void;\n /** Push a polite announcement to the live region (user-initiated changes only). */\n announce(message: string): void;\n}\n\n/** Per-slide context exposed to projected helpers. */\nexport interface KjCarouselSlideContext {\n /** Stable string identifier for this slide. */\n readonly value: Signal<string>;\n /** Index in registration order. */\n readonly index: Signal<number>;\n /** Whether this slide is the active one. */\n readonly isActive: Signal<boolean>;\n /** Stable id for the slide host element. */\n readonly slideLabelId: Signal<string>;\n}\n\n/** Indicator-group context. */\nexport interface KjCarouselIndicatorsContext {\n /** Active control pattern: `'buttons'` (default) or `'tabs'`. */\n readonly controlPattern: Signal<KjCarouselControlPattern>;\n /** Activate the slide identified by `value`. */\n activate(value: string): void;\n}\n\n/** Injection token for the root carousel directive context. */\nexport const KJ_CAROUSEL = new InjectionToken<KjCarouselContext>('KjCarousel');\n\n/** Injection token for an individual carousel slide directive context. */\nexport const KJ_CAROUSEL_SLIDE = new InjectionToken<KjCarouselSlideContext>('KjCarouselSlide');\n\n/** Injection token for the carousel indicators directive context. */\nexport const KJ_CAROUSEL_INDICATORS = new InjectionToken<KjCarouselIndicatorsContext>(\n 'KjCarouselIndicators',\n);\n","import {\n Directive,\n ElementRef,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n Signal,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n untracked,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { KjFocusRing } from '../primitives/interaction/focus-ring';\nimport { KjDisabled } from '../primitives/interaction/disabled';\nimport { KjRovingTabindex, KjRovingTabindexItemDirective } from '../a11y/roving-tabindex';\nimport {\n KJ_CAROUSEL,\n KJ_CAROUSEL_INDICATORS,\n KJ_CAROUSEL_SLIDE,\n KjCarouselAlign,\n KjCarouselContext,\n KjCarouselControlPattern,\n KjCarouselIndicatorsContext,\n KjCarouselOrientation,\n KjCarouselSlideContext,\n} from './carousel.context';\n\nlet kjCarouselSeedCounter = 0;\nfunction nextSeed(): string {\n const cryptoLike = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (cryptoLike?.randomUUID) return cryptoLike.randomUUID().slice(0, 8);\n return `kj${(++kjCarouselSeedCounter).toString(36)}`;\n}\n\nfunction prefersReducedMotion(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return false;\n try {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n } catch {\n return false;\n }\n}\n\n/**\n * Root carousel directive — region landmark, source of truth for the active\n * slide, and orchestrator for orientation, loop semantics, autoplay gating,\n * and the live-region announcement cadence.\n *\n * The directive itself owns no DOM beyond the host element; it sits at the\n * outermost element of the carousel composition (the one wearing\n * `role=\"region\"` + `aria-roledescription=\"carousel\"`) and exposes\n * `KJ_CAROUSEL` to descendants for the per-slide ARIA wiring, the\n * previous / next / indicator controls, and the autoplay / pause directives.\n *\n * @example\n * ```html\n * <div kjCarousel kjLabel=\"Featured products\" [(kjValue)]=\"active\">\n * <button kjCarouselPrevious aria-label=\"Previous slide\">‹</button>\n * <div kjCarouselViewport>\n * <div kjCarouselSlide kjSlideValue=\"a\">…</div>\n * <div kjCarouselSlide kjSlideValue=\"b\">…</div>\n * </div>\n * <button kjCarouselNext aria-label=\"Next slide\">›</button>\n * <div kjCarouselIndicators></div>\n * </div>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name carousel\n * @doc-description Unstyled carousel root that owns slide state, autoplay, loop semantics, and ARIA announcements.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjCarousel]',\n standalone: true,\n exportAs: 'kjCarousel',\n providers: [{ provide: KJ_CAROUSEL, useExisting: KjCarousel }],\n host: {\n '[attr.role]': '\"region\"',\n '[attr.aria-roledescription]': '\"carousel\"',\n '[attr.aria-label]': 'kjLabel() ?? null',\n '[attr.aria-labelledby]': 'kjLabelledby() ?? null',\n '[attr.aria-orientation]': 'kjOrientation()',\n '[attr.data-paused]': 'paused() ? \"\" : null',\n '[attr.data-autoplay]': 'autoplayActive() ? \"\" : null',\n '[attr.data-orientation]': 'kjOrientation()',\n },\n})\nexport class KjCarousel implements KjCarouselContext {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly idSeed = nextSeed();\n\n /** Two-way bound active slide value. `null` defers to the first registered slide on mount. */\n readonly kjValue = model<string | null>(null);\n\n /** When true, prev / next wrap around. Boundary buttons go disabled when false. */\n readonly kjLoop = input(false, { transform: booleanAttribute });\n\n /** Carousel orientation. Drives the scroll-snap axis and the keyboard mapping. */\n readonly kjOrientation = input<KjCarouselOrientation>('horizontal');\n\n /** Number of slides visible in the viewport at once. `'auto'` defers to slide content widths. */\n readonly kjSlidesPerView = input<number | 'auto'>(1);\n\n /** Number of slides moved per `next()` / `prev()` call. Independent of slides-per-view. */\n readonly kjSlidesPerAdvance = input<number>(1);\n\n /** Default slide alignment within the viewport. Per-slide override via `KjCarouselSlide.kjSlideAlign`. */\n readonly kjAlign = input<KjCarouselAlign>('start');\n\n /** Accessible name for the region. Either this or `kjLabelledby` is required for WCAG 4.1.2. */\n readonly kjLabel = input<string | undefined>(undefined);\n\n /** Id of an external label element. Either this or `kjLabel` is required. */\n readonly kjLabelledby = input<string | undefined>(undefined);\n\n /** When false, native scroll drag is blocked on the viewport (programmatic advance still works). */\n readonly kjDraggable = input(true, { transform: booleanAttribute });\n\n /** Read-only mirror of the orientation for context consumers. */\n readonly orientation: Signal<KjCarouselOrientation> = this.kjOrientation;\n\n /** Read-only mirror of the loop flag for context consumers. */\n readonly loop: Signal<boolean> = this.kjLoop;\n\n // ── Slide registration ────────────────────────────────────────────────\n private readonly _slides = signal<readonly KjCarouselSlide[]>([]);\n /** Public read-only registration list, in DOM order. */\n readonly slides = this._slides.asReadonly();\n\n /** Total count of registered slides (excluding loop clones, which are DOM-only). */\n readonly slideCount = computed(() => this._slides().length);\n\n /** Current value, normalised to `null` when the registered set does not contain it. */\n readonly currentValue = computed<string | null>(() => {\n const v = this.kjValue();\n if (v == null) return null;\n return this._slides().some((s) => s.kjSlideValue() === v) ? v : null;\n });\n\n /** Index of the active slide in registration order; -1 when nothing is active. */\n readonly currentIndex = computed(() => {\n const v = this.currentValue();\n if (v == null) return -1;\n return this._slides().findIndex((s) => s.kjSlideValue() === v);\n });\n\n // ── Autoplay gating ───────────────────────────────────────────────────\n private readonly _userPaused = signal(false);\n private readonly _hovering = signal(false);\n private readonly _focusWithin = signal(false);\n private readonly _autoplay = signal<KjCarouselAutoplay | null>(null);\n private readonly _liveRegion = signal<{ announce: (msg: string) => void } | null>(null);\n\n /** True only when the user has explicitly paused (gate 3). */\n readonly paused: Signal<boolean> = this._userPaused.asReadonly();\n\n /** Whether an autoplay directive is registered. */\n readonly autoplayRegistered = computed(() => this._autoplay() != null);\n\n /** Whether autoplay should currently be ticking (all five gates open). */\n readonly autoplayActive = computed(() => {\n if (!this._autoplay()) return false;\n if (this._reducedMotion()) return false;\n if (this._userPaused()) return false;\n const ap = this._autoplay()!;\n if (ap.kjPauseOnHover() && this._hovering()) return false;\n if (ap.kjPauseOnFocus() && this._focusWithin()) return false;\n return true;\n });\n\n /** Whether `prefers-reduced-motion: reduce` matches in the current environment. */\n private readonly _reducedMotion = signal(false);\n\n // ── Viewport reference (set by KjCarouselViewport on mount) ───────────\n private _viewport: KjCarouselViewport | null = null;\n\n // ── Indicator-group registration (used by slides to flip role to tabpanel) ─\n private readonly _indicators = signal<KjCarouselIndicators | null>(null);\n /** Read-only mirror of the active control pattern (or `'buttons'` when no indicators are mounted). */\n readonly controlPattern = computed<KjCarouselControlPattern>(\n () => this._indicators()?.controlPattern() ?? 'buttons',\n );\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n afterNextRender(() => {\n // Refresh reduced-motion any time after first render; effects gate on it.\n this._reducedMotion.set(prefersReducedMotion());\n const mql = typeof window !== 'undefined' && window.matchMedia\n ? window.matchMedia('(prefers-reduced-motion: reduce)')\n : null;\n if (mql) {\n const onChange = () => this._reducedMotion.set(mql.matches);\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', onChange);\n }\n }\n });\n }\n\n // Default-value reconciliation: when kjValue is null and slides have registered,\n // adopt the first slide.\n effect(() => {\n const list = this._slides();\n const current = this.kjValue();\n if (current == null && list.length > 0) {\n const first = untracked(() => list[0]);\n if (first) {\n queueMicrotask(() => {\n if (this.kjValue() == null) this.kjValue.set(first.kjSlideValue());\n });\n }\n }\n });\n\n // Programmatic-advance bridge: when kjValue changes (via next/prev/goTo or\n // an external two-way bind), scroll the viewport to the new slide.\n effect(() => {\n const value = this.currentValue();\n if (value == null) return;\n // Run outside the effect's tracking by deferring to a microtask.\n queueMicrotask(() => this.scrollToValue(value));\n });\n }\n\n /** @internal Slide registration. */\n registerSlide(slide: KjCarouselSlide): void {\n this._slides.update((list) => (list.includes(slide) ? list : [...list, slide]));\n }\n\n /** @internal Slide un-registration. */\n unregisterSlide(slide: KjCarouselSlide): void {\n this._slides.update((list) => list.filter((s) => s !== slide));\n }\n\n /** @internal Viewport association. */\n registerViewport(vp: KjCarouselViewport): void {\n this._viewport = vp;\n }\n\n /** @internal Viewport teardown. */\n unregisterViewport(vp: KjCarouselViewport): void {\n if (this._viewport === vp) this._viewport = null;\n }\n\n /** @internal Autoplay registration. */\n registerAutoplay(ap: KjCarouselAutoplay): void {\n this._autoplay.set(ap);\n }\n\n /** @internal Autoplay teardown. */\n unregisterAutoplay(ap: KjCarouselAutoplay): void {\n if (this._autoplay() === ap) this._autoplay.set(null);\n }\n\n /** @internal Indicator-group registration (used by slide role flip). */\n registerIndicators(ind: KjCarouselIndicators): void {\n this._indicators.set(ind);\n }\n\n /** @internal Indicator-group teardown. */\n unregisterIndicators(ind: KjCarouselIndicators): void {\n if (this._indicators() === ind) this._indicators.set(null);\n }\n\n /** @internal Live-region announcer registration (set by the wrapper). */\n registerLiveRegion(lr: { announce: (msg: string) => void } | null): void {\n this._liveRegion.set(lr);\n }\n\n /** @internal Hover/focus state setters used by the host listeners. */\n setHovering(v: boolean): void { this._hovering.set(v); }\n setFocusWithin(v: boolean): void { this._focusWithin.set(v); }\n\n /** Whether the slide for `value` is the active one. */\n isActive(value: string): boolean {\n return this.currentValue() === value;\n }\n\n /** Stable id for the viewport element (consumed by Previous/Next as `aria-controls`). */\n viewportId(): string {\n return `kj-carousel-viewport-${this.idSeed}`;\n }\n\n /** Stable id for the slide identified by `value`. */\n slideId(value: string): string {\n return `kj-carousel-slide-${value}-${this.idSeed}`;\n }\n\n /** Imperative: advance to the next slide. No-op at the last slide when `kjLoop` is false. */\n next(): void {\n const list = this._slides();\n if (!list.length) return;\n const advance = Math.max(1, this.kjSlidesPerAdvance());\n const idx = this.currentIndex();\n let nextIdx = idx + advance;\n if (nextIdx >= list.length) {\n if (this.kjLoop()) nextIdx = nextIdx % list.length;\n else nextIdx = list.length - 1;\n }\n if (nextIdx === idx) return;\n this.kjValue.set(list[nextIdx].kjSlideValue());\n }\n\n /** Imperative: advance to the previous slide. No-op at the first slide when `kjLoop` is false. */\n prev(): void {\n const list = this._slides();\n if (!list.length) return;\n const advance = Math.max(1, this.kjSlidesPerAdvance());\n const idx = this.currentIndex();\n let nextIdx = idx - advance;\n if (nextIdx < 0) {\n if (this.kjLoop()) nextIdx = ((nextIdx % list.length) + list.length) % list.length;\n else nextIdx = 0;\n }\n if (nextIdx === idx) return;\n this.kjValue.set(list[nextIdx].kjSlideValue());\n }\n\n /** Imperative: jump to a slide by value. Silently ignores unknown values. */\n goTo(value: string): void {\n const list = this._slides();\n if (!list.some((s) => s.kjSlideValue() === value)) return;\n if (this.kjValue() !== value) this.kjValue.set(value);\n }\n\n /** Imperative: explicitly pause autoplay. Persists across slide changes (gate 3). */\n pause(): void {\n if (!this._userPaused()) {\n this._userPaused.set(true);\n this.announce('Autoplay paused');\n }\n }\n\n /** Imperative: explicitly resume autoplay (clears gate 3). */\n play(): void {\n if (this._userPaused()) {\n this._userPaused.set(false);\n this.announce('Autoplay resumed');\n }\n }\n\n /** @internal Whether the boundary is reached (used by Previous/Next disabled binding). */\n atStart(): boolean {\n return !this.kjLoop() && this.currentIndex() <= 0;\n }\n\n atEnd(): boolean {\n return !this.kjLoop() && this.currentIndex() >= this._slides().length - 1;\n }\n\n /** Push a polite announcement (user-initiated changes only — autoplay path skips this). */\n announce(message: string): void {\n const lr = this._liveRegion();\n if (lr) lr.announce(message);\n }\n\n /**\n * Build the announcement string for a settled user-initiated advance:\n * `\"Slide 3 of 7: <label>\"`. Returns `null` if the value is not registered.\n */\n buildSlideAnnouncement(value: string): string | null {\n const list = this._slides();\n const idx = list.findIndex((s) => s.kjSlideValue() === value);\n if (idx === -1) return null;\n const slide = list[idx];\n const label = slide.kjSlideLabel();\n const base = `Slide ${idx + 1} of ${list.length}`;\n return label ? `${base}: ${label}` : base;\n }\n\n /** @internal Whether reduced motion is currently in force. */\n prefersReducedMotion(): boolean {\n return this._reducedMotion();\n }\n\n /** @internal Programmatic scrolling — invoked from the kjValue effect and from goTo/next/prev callers. */\n private scrollToValue(value: string): void {\n if (!isPlatformBrowser(this.platformId)) return;\n const vp = this._viewport;\n if (!vp) return;\n const slide = this._slides().find((s) => s.kjSlideValue() === value);\n if (!slide) return;\n const slideEl = slide.el.nativeElement;\n const vpEl = vp.el.nativeElement;\n const orientation = this.kjOrientation();\n const reduced = this._reducedMotion();\n const opts: ScrollToOptions = {\n behavior: reduced ? 'auto' : 'smooth',\n };\n if (orientation === 'horizontal') {\n opts.left = slideEl.offsetLeft - vpEl.offsetLeft;\n } else {\n opts.top = slideEl.offsetTop - vpEl.offsetTop;\n }\n if (typeof vpEl.scrollTo === 'function') {\n vpEl.scrollTo(opts);\n }\n }\n}\n\n/**\n * Carousel viewport — the scroll container that hosts the slides. Owns\n * `overflow: hidden` (or `auto` when draggable), the scroll-snap axis, and\n * the `IntersectionObserver` that detects which slide has settled into view.\n *\n * Place inside `KjCarousel`. The viewport is *not* a tab stop — the previous\n * / next buttons and indicator dots cover the keyboard advance paths, and a\n * focusable scroll container conflicts with screen-reader virtual-cursor\n * navigation through the projected slide content.\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name carousel\n */\n@Directive({\n selector: '[kjCarouselViewport]',\n standalone: true,\n exportAs: 'kjCarouselViewport',\n host: {\n '[attr.id]': 'carousel.viewportId()',\n '[attr.data-orientation]': 'carousel.orientation()',\n '[style.--kj-carousel-slides-per-view]': 'slidesPerViewVar()',\n '(mouseenter)': 'carousel.setHovering(true)',\n '(mouseleave)': 'carousel.setHovering(false)',\n '(focusin)': 'carousel.setFocusWithin(true)',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class KjCarouselViewport implements OnInit, OnDestroy {\n private readonly platformId = inject(PLATFORM_ID);\n /** @internal */\n readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n /** @internal Native host element. */\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private observer: IntersectionObserver | null = null;\n\n /** @internal Computed style variable feed for the slide flex-basis. */\n protected slidesPerViewVar(): string {\n const v = this.carousel.kjSlidesPerView();\n return v === 'auto' ? 'auto' : String(v);\n }\n\n ngOnInit(): void {\n this.carousel.registerViewport(this);\n if (isPlatformBrowser(this.platformId) && typeof IntersectionObserver !== 'undefined') {\n this.observer = new IntersectionObserver(\n (entries) => this.onIntersect(entries),\n { root: this.el.nativeElement, threshold: [0.6] },\n );\n // Defer slide observation to the next microtask so registered slides have host elements.\n queueMicrotask(() => this.observeSlides());\n }\n }\n\n ngOnDestroy(): void {\n this.observer?.disconnect();\n this.observer = null;\n this.carousel.unregisterViewport(this);\n }\n\n /** @internal */\n observeSlides(): void {\n if (!this.observer) return;\n for (const slide of this.carousel.slides()) {\n this.observer.observe(slide.el.nativeElement);\n }\n }\n\n /** @internal */\n onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (!next || !this.el.nativeElement.contains(next)) {\n // Inspect the carousel root via the viewport's parentage — the host is\n // somewhere up the tree. If focus left the viewport but stayed within\n // the broader carousel root, leave focusWithin true; otherwise clear.\n // Conservative behaviour: clear on viewport blur — gate 5 only matters\n // for autoplay, and any subsequent focusin will re-set it.\n this.carousel.setFocusWithin(false);\n }\n }\n\n private lastBest: { ratio: number; value: string } | null = null;\n private settleTimer: ReturnType<typeof setTimeout> | null = null;\n\n private onIntersect(entries: IntersectionObserverEntry[]): void {\n // Pick the entry with the highest ratio that crossed the threshold.\n let best: { ratio: number; el: Element } | null = null;\n for (const entry of entries) {\n if (!entry.isIntersecting) continue;\n if (!best || entry.intersectionRatio > best.ratio) {\n best = { ratio: entry.intersectionRatio, el: entry.target };\n }\n }\n if (!best) return;\n const slide = this.carousel.slides().find((s) => s.el.nativeElement === best!.el);\n if (!slide) return;\n const value = slide.kjSlideValue();\n if (this.carousel.currentValue() === value) return;\n\n // Debounce settle to avoid flicker when two slides cross 0.6 in the same frame.\n if (this.settleTimer) clearTimeout(this.settleTimer);\n this.settleTimer = setTimeout(() => {\n // Only commit if this is still the best; in vertical-scroll cases the\n // browser may emit several entries before settling.\n const list = this.carousel.slides();\n if (!list.some((s) => s.kjSlideValue() === value)) return;\n const previous = this.carousel.currentValue();\n this.carousel.kjValue.set(value);\n // Announce only when the carousel is not currently auto-playing;\n // autoplay-driven advances are silent per APG to avoid AT flooding.\n if (previous !== null && previous !== value && !this.carousel.autoplayActive()) {\n const msg = this.carousel.buildSlideAnnouncement(value);\n if (msg) this.carousel.announce(msg);\n }\n }, 50);\n }\n}\n\n/**\n * Single slide. Hosts `role=\"group\"` + `aria-roledescription=\"slide\"` and\n * `aria-label=\"N of M[: <label>]\"` (or `aria-labelledby` when a projected\n * heading id is supplied via the slide context). Switches to\n * `role=\"tabpanel\"` when the parent indicator group is in\n * `controlPattern=\"tabs\"` mode.\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name carousel\n */\n@Directive({\n selector: '[kjCarouselSlide]',\n standalone: true,\n exportAs: 'kjCarouselSlide',\n providers: [{ provide: KJ_CAROUSEL_SLIDE, useExisting: KjCarouselSlide }],\n host: {\n '[attr.id]': 'slideLabelId()',\n '[attr.role]': 'role()',\n '[attr.aria-roledescription]': 'role() === \"group\" ? \"slide\" : null',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.data-active]': 'isActive() ? \"\" : null',\n '[attr.data-index]': 'index()',\n },\n})\nexport class KjCarouselSlide implements KjCarouselSlideContext, OnInit, OnDestroy {\n /** @internal */\n readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n /** @internal Native host element. */\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Required string identifier for this slide. */\n readonly kjSlideValue = input.required<string>();\n\n /** Optional accessible name appended to `\"N of M\"` to form the slide's `aria-label`. */\n readonly kjSlideLabel = input<string | undefined>(undefined);\n\n /** Per-slide alignment override; defaults to the carousel's `kjAlign`. */\n readonly kjSlideAlign = input<KjCarouselAlign | undefined>(undefined);\n\n /** Read-only mirror of the slide value. */\n readonly value: Signal<string> = this.kjSlideValue;\n\n /** Index of this slide in registration order. */\n readonly index = computed(() =>\n this.carousel.slides().findIndex((s) => s === this),\n );\n\n /** Whether this slide is the currently active one. */\n readonly isActive = computed(() => this.carousel.isActive(this.kjSlideValue()));\n\n /** Stable id for the slide host element — sourced from the parent carousel so indicator `aria-controls` stays in sync. */\n readonly slideLabelId = computed(() => this.carousel.slideId(this.kjSlideValue()));\n\n /** Effective alignment — per-slide override beats carousel-level default. */\n readonly effectiveAlign = computed<KjCarouselAlign>(\n () => this.kjSlideAlign() ?? this.carousel.kjAlign(),\n );\n\n /** @internal Computed role — `'tabpanel'` when an indicators group in `controlPattern=\"tabs\"` is registered, `'group'` otherwise. */\n protected role(): string {\n return this.carousel.controlPattern() === 'tabs' ? 'tabpanel' : 'group';\n }\n\n /** @internal Computed aria-label — `\"N of M[: <label>]\"` when in group mode. */\n protected ariaLabel(): string | null {\n if (this.role() !== 'group') return null;\n const total = this.carousel.slideCount();\n const idx = this.index();\n if (idx < 0) return null;\n const base = `${idx + 1} of ${total}`;\n const label = this.kjSlideLabel();\n return label ? `${base}: ${label}` : base;\n }\n\n ngOnInit(): void {\n this.carousel.registerSlide(this);\n }\n\n ngOnDestroy(): void {\n this.carousel.unregisterSlide(this);\n }\n}\n\n/**\n * Previous-slide control. Composes `KjFocusRing` and `KjDisabled`; when the\n * carousel is not looping and the current slide is the first, the host\n * receives `aria-disabled=\"true\"` and click is a no-op.\n *\n * Apply to a real `<button>` so Enter / Space, focus, and disabled semantics\n * work without extra wiring.\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name carousel\n */\n@Directive({\n selector: '[kjCarouselPrevious]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n '[attr.aria-controls]': 'carousel.viewportId()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '(click)': 'onClick()',\n },\n})\nexport class KjCarouselPrevious {\n /** @internal */\n readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n\n /** Whether the button is currently at the boundary (and not looping). */\n readonly disabled = computed(() => this.carousel.atStart());\n\n /** @internal */\n onClick(): void {\n if (this.disabled()) return;\n const previousValue = this.carousel.currentValue();\n this.carousel.prev();\n const next = this.carousel.currentValue();\n if (next != null && next !== previousValue) {\n const msg = this.carousel.buildSlideAnnouncement(next);\n if (msg) this.carousel.announce(msg);\n }\n }\n}\n\n/**\n * Next-slide control. Symmetric counterpart of `KjCarouselPrevious`.\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name carousel\n */\n@Directive({\n selector: '[kjCarouselNext]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n '[attr.aria-controls]': 'carousel.viewportId()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '(click)': 'onClick()',\n },\n})\nexport class KjCarouselNext {\n /** @internal */\n readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n\n /** Whether the button is currently at the boundary (and not looping). */\n readonly disabled = computed(() => this.carousel.atEnd());\n\n /** @internal */\n onClick(): void {\n if (this.disabled()) return;\n const previousValue = this.carousel.currentValue();\n this.carousel.next();\n const next = this.carousel.currentValue();\n if (next != null && next !== previousValue) {\n const msg = this.carousel.buildSlideAnnouncement(next);\n if (msg) this.carousel.announce(msg);\n }\n }\n}\n\n/**\n * Indicator-group container. Hosts `role=\"group\"` (default) or\n * `role=\"tablist\"` (`controlPattern=\"tabs\"`), composes `KjRovingTabindex`\n * for arrow-key navigation across the dots, and exposes\n * `KJ_CAROUSEL_INDICATORS` to descendants so individual indicator items can\n * read the active control pattern.\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name carousel\n */\n@Directive({\n selector: '[kjCarouselIndicators]',\n standalone: true,\n hostDirectives: [KjRovingTabindex],\n providers: [{ provide: KJ_CAROUSEL_INDICATORS, useExisting: KjCarouselIndicators }],\n host: {\n '[attr.role]': 'kjControlPattern() === \"tabs\" ? \"tablist\" : \"group\"',\n '[attr.aria-label]': 'kjAriaLabel()',\n '[attr.aria-orientation]': 'carousel.orientation()',\n '[attr.data-control-pattern]': 'kjControlPattern()',\n },\n})\nexport class KjCarouselIndicators implements KjCarouselIndicatorsContext, OnInit, OnDestroy {\n /** @internal */\n readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n\n /** Active control pattern. `'buttons'` is the APG-recommended default; `'tabs'` opts into the tablist variant. */\n readonly kjControlPattern = input<KjCarouselControlPattern>('buttons');\n\n /** Accessible name for the indicator group. */\n readonly kjAriaLabel = input<string>('Slide controls');\n\n /** Read-only mirror of the control pattern for the per-indicator host bindings. */\n readonly controlPattern: Signal<KjCarouselControlPattern> = this.kjControlPattern;\n\n ngOnInit(): void {\n this.carousel.registerIndicators(this);\n }\n\n ngOnDestroy(): void {\n this.carousel.unregisterIndicators(this);\n }\n\n /** Activate the slide for `value`. */\n activate(value: string): void {\n this.carousel.goTo(value);\n }\n}\n\n/**\n * Single indicator dot. Composes `KjRovingTabindexItem` and `KjFocusRing`,\n * targets the slide whose value matches `kjForValue` on click, and reflects\n * the active state via `aria-current` (buttons mode) or `aria-selected`\n * (tabs mode).\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name carousel\n */\n@Directive({\n selector: '[kjCarouselIndicator]',\n standalone: true,\n hostDirectives: [KjRovingTabindexItemDirective, KjFocusRing],\n host: {\n '[attr.role]': 'indicators.controlPattern() === \"tabs\" ? \"tab\" : null',\n '[attr.aria-current]': 'indicators.controlPattern() === \"buttons\" && isActive() ? \"true\" : null',\n '[attr.aria-selected]': 'indicators.controlPattern() === \"tabs\" ? (isActive() ? \"true\" : \"false\") : null',\n '[attr.aria-controls]': 'indicators.controlPattern() === \"tabs\" ? carousel.slideId(kjForValue()) : null',\n '[attr.data-active]': 'isActive() ? \"\" : null',\n '(click)': 'onClick()',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjCarouselIndicator {\n /** @internal */\n readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n /** @internal */\n readonly indicators = inject(KJ_CAROUSEL_INDICATORS) as KjCarouselIndicators;\n\n /** Slide value this indicator targets. */\n readonly kjForValue = input.required<string>();\n\n /** Whether this indicator's slide is the active one. */\n readonly isActive = computed(() => this.carousel.isActive(this.kjForValue()));\n\n /** @internal */\n onClick(): void {\n const previousValue = this.carousel.currentValue();\n this.indicators.activate(this.kjForValue());\n const next = this.carousel.currentValue();\n if (next != null && next !== previousValue) {\n const msg = this.carousel.buildSlideAnnouncement(next);\n if (msg) this.carousel.announce(msg);\n }\n }\n\n /**\n * @internal Tabs-mode keyboard contract: ArrowLeft/Right (or Up/Down in\n * vertical orientation) advance focus *and* activate, per APG tabs. In\n * buttons mode, the composed `KjRovingTabindex` already handles arrow\n * focus; activation requires Enter / Space, which the native `<button>`\n * resolves on its own.\n */\n onKeydown(event: KeyboardEvent): void {\n if (this.indicators.controlPattern() !== 'tabs') return;\n // Roving tabindex moves focus on next tick; piggy-back on the\n // focus event by activating the matching slide via the new active item.\n // We don't preventDefault — KjRovingTabindex needs to consume the arrow.\n if (\n event.key === 'ArrowLeft' || event.key === 'ArrowRight' ||\n event.key === 'ArrowUp' || event.key === 'ArrowDown'\n ) {\n // Defer so the new active item has been focused.\n queueMicrotask(() => {\n const focused = (typeof document !== 'undefined' ? document.activeElement : null) as\n | HTMLElement\n | null;\n if (!focused) return;\n const value = focused.getAttribute('data-kj-indicator-value');\n if (value) this.carousel.goTo(value);\n });\n }\n }\n}\n\n/**\n * Autoplay directive — lifecycle-only, no DOM. Manages a `setInterval` that\n * advances the carousel when all five gates are open:\n *\n * 1. The directive is mounted (composition is the on switch).\n * 2. `prefers-reduced-motion: reduce` does not match.\n * 3. The user has not pressed pause (`carousel.paused()` is false).\n * 4. Pointer is not hovering the carousel root, or `kjPauseOnHover` is false.\n * 5. Focus is not within the carousel root, or `kjPauseOnFocus` is false.\n *\n * Per WCAG 2.2.2 a delay greater than 5000 ms requires a pause control to be\n * present in the same composition.\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name carousel\n */\n@Directive({\n selector: '[kjCarouselAutoplay]',\n standalone: true,\n exportAs: 'kjCarouselAutoplay',\n})\nexport class KjCarouselAutoplay implements OnInit, OnDestroy {\n private readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n\n /** Interval between automatic advances. WCAG 2.2.2 requires a pause control when > 5000 ms. */\n readonly kjAutoplayDelay = input<number>(5000);\n\n /** Auto-pause while pointer is over the carousel root. */\n readonly kjPauseOnHover = input(true, { transform: booleanAttribute });\n\n /** Auto-pause while focus is within the carousel root. APG-required affordance for keyboard users. */\n readonly kjPauseOnFocus = input(true, { transform: booleanAttribute });\n\n private timer: ReturnType<typeof setInterval> | null = null;\n\n constructor() {\n effect(() => {\n const active = this.carousel.autoplayActive();\n const delay = this.kjAutoplayDelay();\n this.clearTimer();\n if (active && delay > 0) {\n this.timer = setInterval(() => {\n // Re-check gates inside the timer (may have flipped between fires).\n if (!this.carousel.autoplayActive()) return;\n // Auto-advance is silent — buildSlideAnnouncement is *not* called.\n this.carousel.next();\n }, delay);\n }\n });\n }\n\n ngOnInit(): void {\n this.carousel.registerAutoplay(this);\n }\n\n ngOnDestroy(): void {\n this.clearTimer();\n this.carousel.unregisterAutoplay(this);\n }\n\n private clearTimer(): void {\n if (this.timer != null) {\n clearInterval(this.timer);\n this.timer = null;\n }\n }\n}\n\n/**\n * Pause / play toggle. Wraps a real `<button>` and reflects the carousel's\n * `paused` signal as `aria-pressed`. When `prefers-reduced-motion: reduce`\n * matches the host is auto-disabled (autoplay never starts, so the toggle is\n * meaningless).\n *\n * @doc-category Core/Data display\n * @doc\n * @doc-name carousel\n */\n@Directive({\n selector: '[kjCarouselPauseToggle]',\n standalone: true,\n hostDirectives: [KjFocusRing, KjDisabled],\n host: {\n '[attr.aria-pressed]': 'carousel.paused() ? \"true\" : \"false\"',\n '[attr.data-paused]': 'carousel.paused() ? \"\" : null',\n '[attr.disabled]': 'carousel.prefersReducedMotion() ? \"\" : null',\n '(click)': 'onClick()',\n },\n})\nexport class KjCarouselPauseToggle {\n /** @internal */\n readonly carousel = inject(KJ_CAROUSEL) as KjCarousel;\n\n /** @internal */\n onClick(): void {\n if (this.carousel.prefersReducedMotion()) return;\n if (this.carousel.paused()) this.carousel.play();\n else this.carousel.pause();\n }\n}\n","import { InjectionToken, type Signal } from '@angular/core';\n\n/** Logical side of a chat row. CSS handles the physical RTL flip via cascade. */\nexport type KjChatSide = 'start' | 'end';\n\n/**\n * Per-row role override. Default `'article'` gives screen readers a per-message\n * landmark; `'listitem'` opts in to list semantics (parent log must then carry\n * `role=\"list\"`); `null` drops the role attribute entirely.\n */\nexport type KjChatRole = 'article' | 'listitem' | null;\n\n/** Read / delivery state machine for the footer. */\nexport type KjChatState =\n | 'sending'\n | 'sent'\n | 'delivered'\n | 'read'\n | 'error';\n\n/** Context shape exposed by `KjChatLog` to descendant chat directives. */\nexport interface KjChatLogContext {\n /** Reflected to `aria-live`. `'polite'` (default) or `'off'`. */\n readonly kjChatLogLive: Signal<'polite' | 'off'>;\n /** Optional landmark label for the log. */\n readonly kjChatLogLabel: Signal<string | undefined>;\n}\n\n/**\n * Context shape exposed by `KjChat` to its child directives. Children read this\n * to register their minted ids (header / footer) for `aria-labelledby` /\n * `aria-describedby` wiring, and to ask whether the row is part of a grouped\n * run for tail / avatar suppression.\n */\nexport interface KjChatContext {\n readonly kjSide: Signal<KjChatSide>;\n readonly kjChatAuthor: Signal<string | undefined>;\n /** True when this row is grouped with the previous row (same author). */\n readonly grouped: Signal<boolean>;\n /** Register a header id; the row reflects it as `aria-labelledby`. */\n registerHeaderId(id: string): void;\n unregisterHeaderId(id: string): void;\n /** Register a footer id; the row reflects it as `aria-describedby`. */\n registerFooterId(id: string): void;\n unregisterFooterId(id: string): void;\n}\n\n/** Injection token for the `KjChatLog` container. */\nexport const KJ_CHAT_LOG = new InjectionToken<KjChatLogContext>('KjChatLog');\n\n/** Injection token for the `KjChat` row. */\nexport const KJ_CHAT = new InjectionToken<KjChatContext>('KjChat');\n\nlet _chatHeaderIdCounter = 0;\n/** Allocate a stable id used for `aria-labelledby` wiring. */\nexport function nextChatHeaderId(): string {\n return `kj-chat-header-${++_chatHeaderIdCounter}`;\n}\n\nlet _chatFooterIdCounter = 0;\n/** Allocate a stable id used for `aria-describedby` wiring. */\nexport function nextChatFooterId(): string {\n return `kj-chat-footer-${++_chatFooterIdCounter}`;\n}\n","import { Directive, input } from '@angular/core';\nimport { KJ_CHAT_LOG, type KjChatLogContext } from './chat.context';\n\n/**\n * Container for a stream of `[kjChat]` rows. Owns the live region: per APG's\n * Log pattern, the **container** announces new arrivals — never the bubble\n * itself. Default `aria-live=\"polite\"` matches the chat-app convention; we\n * deliberately do not expose `'assertive'` (it would interrupt the user\n * mid-typing on every inbound message and is the canonical chat-app a11y bug).\n *\n * `aria-relevant=\"additions\"` confines announcements to *new* messages so that\n * edits to existing bubbles don't re-announce the full edited content.\n *\n * @example\n * ```html\n * <div kjChatLog kjChatLogLabel=\"Conversation with Alice\">\n * <div kjChat kjSide=\"start\" kjChatAuthor=\"alice\">…</div>\n * <div kjChat kjSide=\"end\" kjChatAuthor=\"me\">…</div>\n * </div>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name chat\n */\n@Directive({\n selector: '[kjChatLog]',\n standalone: true,\n providers: [{ provide: KJ_CHAT_LOG, useExisting: KjChatLog }],\n host: {\n 'role': 'log',\n '[attr.aria-live]': 'kjChatLogLive()',\n '[attr.aria-relevant]': '\"additions\"',\n '[attr.aria-atomic]': '\"false\"',\n '[attr.aria-label]': 'kjChatLogLabel() ?? null',\n },\n})\nexport class KjChatLog implements KjChatLogContext {\n /** Live-region politeness. `'polite'` (default) or `'off'`. */\n readonly kjChatLogLive = input<'polite' | 'off'>('polite');\n\n /** Optional `aria-label` for the log landmark. */\n readonly kjChatLogLabel = input<string | undefined>(undefined);\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n Injector,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n KJ_CHAT,\n KJ_CHAT_LOG,\n type KjChatContext,\n type KjChatRole,\n type KjChatSide,\n} from './chat.context';\n\n/**\n * Element → directive map used by `KjChat` to walk previous siblings without\n * relying on Angular dev-mode internals. Each row registers itself on its host\n * element on construction and unregisters on destroy.\n */\nconst CHAT_ROW_REGISTRY = new WeakMap<Element, KjChat>();\n\n/**\n * A single chat row. Owns the logical side, the per-row role, and the\n * group-by-sender computation; reflects header / footer ids registered by\n * its children for `aria-labelledby` / `aria-describedby` wiring.\n *\n * **Grouping uses DOM traversal, not a registry**, deliberately: the registry\n * pattern races on the bottom-up `ngOnInit` order (children before parent),\n * which means the first row could ask for its previous sibling before the\n * previous row has registered. DOM traversal via `previousElementSibling` is\n * deterministic and works at first render.\n *\n * Standalone rows (no `KjChatLog` parent) skip auto-grouping entirely;\n * consumers set `kjChatGrouped` explicitly when they want grouped chrome.\n *\n * @example\n * ```html\n * <div kjChat kjSide=\"start\" kjChatAuthor=\"alice\">\n * <span kjChatAvatar>…</span>\n * <header kjChatHeader>Alice 12:46</header>\n * <p kjChatBubble>Hey!</p>\n * <footer kjChatFooter kjState=\"read\">Read 12:46</footer>\n * </div>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name chat\n * @doc-description Unstyled chat row with side, sender grouping, and ARIA wiring for message log semantics.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjChat]',\n standalone: true,\n providers: [{ provide: KJ_CHAT, useExisting: KjChat }],\n host: {\n '[attr.role]': 'kjRole()',\n '[attr.data-side]': 'kjSide()',\n '[attr.data-grouped]': 'grouped() ? \"\" : null',\n '[attr.aria-labelledby]': 'headerId() ?? null',\n '[attr.aria-describedby]': 'footerId() ?? null',\n },\n})\nexport class KjChat implements KjChatContext {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly log = inject(KJ_CHAT_LOG, { optional: true });\n\n /** Logical side of this row. CSS reads `data-side` and handles RTL flip. */\n readonly kjSide = input<KjChatSide>('start');\n\n /** Sender id — drives auto-grouping with the previous sibling row. */\n readonly kjChatAuthor = input<string | undefined>(undefined);\n\n /**\n * Explicit group override. When defined, wins over the auto-computed value;\n * use this when no `KjChatLog` parent is present.\n */\n readonly kjChatGrouped = input<boolean | undefined>(undefined);\n\n /**\n * Per-row role. Default `'article'` gives AT users a per-message landmark\n * navigable via JAWS / NVDA `M`; `'listitem'` opts in to list semantics\n * (parent log must then expose `role=\"list\"`); `null` drops the attribute.\n */\n readonly kjRole = input<KjChatRole>('article');\n\n private readonly headerIds = signal<readonly string[]>([]);\n private readonly footerIds = signal<readonly string[]>([]);\n\n /** Composed `aria-labelledby` value. */\n readonly headerId = computed(() => {\n const ids = this.headerIds();\n return ids.length === 0 ? null : ids.join(' ');\n });\n\n /** Composed `aria-describedby` value. */\n readonly footerId = computed(() => {\n const ids = this.footerIds();\n return ids.length === 0 ? null : ids.join(' ');\n });\n\n private readonly autoGrouped = signal(false);\n\n /** True when this row groups with the previous one (same author). */\n readonly grouped = computed(\n () => this.kjChatGrouped() ?? this.autoGrouped(),\n );\n\n constructor() {\n // Registry write happens in the constructor so any sibling rendered\n // *after* us finds us during its own afterNextRender pass. (Angular\n // builds child instances bottom-up, but DOM siblings are ordered\n // top-down — by the time the second row's afterNextRender fires,\n // the first row's host element exists and is keyed in the WeakMap.)\n CHAT_ROW_REGISTRY.set(this.el.nativeElement, this);\n this.destroyRef.onDestroy(() =>\n CHAT_ROW_REGISTRY.delete(this.el.nativeElement),\n );\n\n // DOM-traversal grouping: run after first render (so the previous\n // sibling exists) and re-run whenever this row's author changes.\n afterNextRender(() => {\n this.recomputeAutoGrouped();\n });\n effect(\n () => {\n // Track the input — touching it inside the effect creates the dep.\n this.kjChatAuthor();\n this.recomputeAutoGrouped();\n },\n { injector: this.injector },\n );\n }\n\n /** @internal */\n registerHeaderId(id: string): void {\n this.headerIds.update(ids => [...ids, id]);\n this.destroyRef.onDestroy(() => this.unregisterHeaderId(id));\n }\n\n /** @internal */\n unregisterHeaderId(id: string): void {\n this.headerIds.update(ids => ids.filter(x => x !== id));\n }\n\n /** @internal */\n registerFooterId(id: string): void {\n this.footerIds.update(ids => [...ids, id]);\n this.destroyRef.onDestroy(() => this.unregisterFooterId(id));\n }\n\n /** @internal */\n unregisterFooterId(id: string): void {\n this.footerIds.update(ids => ids.filter(x => x !== id));\n }\n\n private recomputeAutoGrouped(): void {\n if (!this.log) {\n this.autoGrouped.set(false);\n return;\n }\n const me = this.kjChatAuthor();\n if (me === undefined) {\n this.autoGrouped.set(false);\n return;\n }\n const prev = this.previousChatRow();\n if (!prev) {\n this.autoGrouped.set(false);\n return;\n }\n this.autoGrouped.set(prev.kjChatAuthor() === me);\n }\n\n private previousChatRow(): KjChat | null {\n let sib = this.el.nativeElement.previousElementSibling as Element | null;\n while (sib) {\n const row = CHAT_ROW_REGISTRY.get(sib);\n if (row) return row;\n sib = sib.previousElementSibling;\n }\n return null;\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Side-edge slot for the projected sender face. The slot is **always\n * decorative** — the row's accessible name comes from the header (sender\n * name + time). Letting an `<img alt>` re-announce the name causes AT users\n * to hear \"Jane Doe, Jane Doe, [message]\". The directive forces\n * `aria-hidden=\"true\"` to prevent that.\n *\n * Project a `<kj-avatar [kjDecorative]=\"true\">` (or any decorative marker)\n * inside.\n *\n * @example\n * ```html\n * <span kjChatAvatar>\n * <span kjAvatar>…</span>\n * </span>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name chat\n */\n@Directive({\n selector: '[kjChatAvatar]',\n standalone: true,\n host: {\n 'role': 'presentation',\n '[attr.aria-hidden]': '\"true\"',\n },\n})\nexport class KjChatAvatar {}\n","import { DestroyRef, Directive, inject } from '@angular/core';\nimport { KJ_CHAT, nextChatHeaderId } from './chat.context';\n\n/**\n * Mints a stable id for the chat row's header and registers it with the\n * parent `KjChat` so the row's host `aria-labelledby` attribute references\n * the sender's name + time. Visual chrome (small font, muted colour, spacing\n * above the bubble) belongs to CSS; the directive does not paint.\n *\n * Standalone (no `KjChat` parent) the directive still mints an id but no\n * wiring fires — the consumer is responsible for the link.\n *\n * @example\n * ```html\n * <header kjChatHeader>Alice <time datetime=\"…\">12:46</time></header>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name chat\n */\n@Directive({\n selector: '[kjChatHeader]',\n standalone: true,\n host: {\n '[id]': 'id',\n },\n})\nexport class KjChatHeader {\n private readonly chat = inject(KJ_CHAT, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n /** Auto-generated id used for the parent row's `aria-labelledby`. */\n readonly id = nextChatHeaderId();\n\n constructor() {\n if (this.chat) {\n this.chat.registerHeaderId(this.id);\n this.destroyRef.onDestroy(() => this.chat?.unregisterHeaderId(this.id));\n }\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\n/** Shape of the bubble's preset configuration. */\nexport interface KjChatBubbleConfig {\n variants: string[];\n sizes: string[];\n defaults: { variant: string; size: string };\n}\n\n/**\n * Default Chat-Bubble presets shipped by kouji-ui. Exported so consumers can\n * spread when extending: `[...KJ_CHAT_BUBBLE_DEFAULTS.variants, 'brand']`.\n */\nexport const KJ_CHAT_BUBBLE_DEFAULTS: KjChatBubbleConfig = {\n variants: [\n 'default',\n 'primary',\n 'secondary',\n 'accent',\n 'info',\n 'success',\n 'warning',\n 'error',\n ],\n sizes: ['sm', 'md', 'lg'],\n defaults: { variant: 'default', size: 'md' },\n};\n\n/**\n * DI token for the active Chat-Bubble presets. Default factory yields\n * `KJ_CHAT_BUBBLE_DEFAULTS`. Override via `provideKjChatBubble(…)` at the\n * application or component scope.\n */\nexport const KJ_CHAT_BUBBLE_CONFIG = new InjectionToken<KjChatBubbleConfig>(\n 'kj.chat-bubble.config',\n { factory: () => KJ_CHAT_BUBBLE_DEFAULTS },\n);\n\n/**\n * Configures the Chat-Bubble presets for the enclosing injector. Replaces\n * (does not merge) `variants` and `sizes`; spread `KJ_CHAT_BUBBLE_DEFAULTS.variants`\n * to extend.\n */\nexport function provideKjChatBubble(\n config: Partial<KjChatBubbleConfig>,\n): Provider[] {\n return [\n {\n provide: KJ_CHAT_BUBBLE_CONFIG,\n useValue: { ...KJ_CHAT_BUBBLE_DEFAULTS, ...config },\n },\n ];\n}\n","import { Directive, computed, inject, input } from '@angular/core';\nimport { KjSize, KjVariant, bindPresets } from '../presets';\nimport { KJ_CHAT } from './chat.context';\nimport { KJ_CHAT_BUBBLE_CONFIG } from './config';\n\n/**\n * The rounded message body. Composes `KjVariant` + `KjSize` via\n * `hostDirectives` so theme CSS can paint per-message register\n * (`primary` for \"your\" messages, `default` for theirs, `info` / `success` /\n * `warning` / `error` for system or status, `accent` for highlighted) and\n * density (`sm` / `md` / `lg`).\n *\n * Owns the **tail** via the `data-tail` host attribute — present when\n * `kjChatBubbleNoTail` is false **and** the parent row is not grouped (the\n * tail belongs only to the first message in a same-sender run). CSS draws\n * the tail with a `::before` pseudo and reads `data-side` from the row to\n * place it on the correct corner.\n *\n * @example\n * ```html\n * <p kjChatBubble kjVariant=\"primary\" kjSize=\"md\">Reply text</p>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name chat\n */\n@Directive({\n selector: '[kjChatBubble]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n ],\n providers: [...bindPresets(KJ_CHAT_BUBBLE_CONFIG)],\n host: {\n '[attr.data-tail]': 'showTail() ? \"\" : null',\n },\n})\nexport class KjChatBubble {\n private readonly row = inject(KJ_CHAT, { optional: true });\n\n /** Suppresses the tail unconditionally. Auto-suppression on grouped rows is independent. */\n readonly kjChatBubbleNoTail = input(false);\n\n /** True when the tail should render. */\n readonly showTail = computed(\n () => !this.kjChatBubbleNoTail() && !(this.row?.grouped() ?? false),\n );\n}\n","import { DestroyRef, Directive, computed, inject, input } from '@angular/core';\nimport { KJ_CHAT, nextChatFooterId, type KjChatState } from './chat.context';\n\nconst STATE_LABEL: Readonly<Record<KjChatState, string>> = {\n sending: 'Sending',\n sent: 'Sent',\n delivered: 'Delivered',\n read: 'Read',\n error: 'Failed to send',\n};\n\n/**\n * Mints a stable id for the chat row's footer and registers it with the\n * parent `KjChat` so the row's host `aria-describedby` references it.\n *\n * Reflects `kjState` to a `data-state` host attribute that components-package\n * CSS reads to paint a status glyph (clock / single-check / double-check /\n * filled-double-check / exclamation). Also injects an `aria-label` so the\n * description is intelligible to AT even when the glyph is the only visible\n * content.\n *\n * Free-form text (\"Seen 12:46\") is fine too — leave `kjState` undefined and\n * the directive renders only the consumer's projected content.\n *\n * @example\n * ```html\n * <footer kjChatFooter kjState=\"read\">Read 12:46</footer>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name chat\n */\n@Directive({\n selector: '[kjChatFooter]',\n standalone: true,\n host: {\n '[id]': 'id',\n '[attr.data-state]': 'kjState() ?? null',\n '[attr.aria-label]': 'ariaLabel()',\n },\n})\nexport class KjChatFooter {\n private readonly chat = inject(KJ_CHAT, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n /** Auto-generated id used for the parent row's `aria-describedby`. */\n readonly id = nextChatFooterId();\n\n /**\n * Read / delivery state. Drives `data-state` for the glyph and an injected\n * `aria-label` for AT. When undefined, only projected content renders.\n */\n readonly kjState = input<KjChatState | undefined>(undefined);\n\n /** Aria label derived from `kjState`. `null` when no state is set. */\n readonly ariaLabel = computed(() => {\n const s = this.kjState();\n return s ? STATE_LABEL[s] : null;\n });\n\n constructor() {\n if (this.chat) {\n this.chat.registerFooterId(this.id);\n this.destroyRef.onDestroy(() => this.chat?.unregisterFooterId(this.id));\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n inject,\n isDevMode,\n} from '@angular/core';\n\n/**\n * Marks a paragraph as the lead-in paragraph for a section — slightly larger\n * size with a softer tone. Reflects `data-tone=\"lead\"` so theme CSS keys off\n * it; the directive owns no styling itself.\n *\n * Lead semantics are paragraph-bound; applied to a non-`<p>` host the\n * directive emits a dev-mode warning but does not enforce the tag.\n *\n * @example\n * ```html\n * <p kjLead>Atlas helps engineering teams plan quarterly roadmaps.</p>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name typography\n */\n@Directive({\n selector: '[kjLead]',\n standalone: true,\n exportAs: 'kjLead',\n host: {\n '[attr.data-tone]': '\"lead\"',\n },\n})\nexport class KjLead {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n if (isDevMode()) {\n afterNextRender(() => {\n const host = this.el.nativeElement;\n if (host.tagName?.toLowerCase() !== 'p') {\n console.warn(\n `[kj] kjLead applied to <${host.tagName?.toLowerCase()}>. ` +\n `Lead semantics are paragraph-bound; recommended host is <p>.`,\n );\n }\n });\n }\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Reduces a phrasing element's colour intensity to the muted token so the\n * text reads as secondary information against the primary text. Reflects\n * `data-tone=\"muted\"`; the kouji theme layer owns the actual colour mix and\n * is verified against the AAA contrast bar (≥ 7:1) on `base-100`,\n * `base-200`, and `base-300` page backgrounds.\n *\n * Works on any phrasing element (`<span>`, `<small>`, `<p>`, `<em>`).\n *\n * @example\n * ```html\n * <p>Primary text. <small kjMuted>Secondary info.</small></p>\n * <p kjMuted>Standalone muted paragraph.</p>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name typography\n */\n@Directive({\n selector: '[kjMuted]',\n standalone: true,\n exportAs: 'kjMuted',\n host: {\n '[attr.data-tone]': '\"muted\"',\n },\n})\nexport class KjMuted {}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n inject,\n isDevMode,\n} from '@angular/core';\n\n/**\n * Marks an inline `<code>` element with kouji's inline-code tone — monospace\n * font, subtle background fill, and inline padding. Reflects\n * `data-tone=\"code\"`. The directive does not handle multi-line `<pre><code>`\n * blocks; those are styled by the prose container's `pre code` selector or\n * by a consumer-wired syntax highlighter.\n *\n * Recommended host is `<code>` to preserve native semantics; applying\n * `[kjCode]` to a different element is dev-mode warned but not enforced.\n *\n * @example\n * ```html\n * <p>Run <code kjCode>npm install @kouji-ui/core</code> to install.</p>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name typography\n */\n@Directive({\n selector: '[kjCode]',\n standalone: true,\n exportAs: 'kjCode',\n host: {\n '[attr.data-tone]': '\"code\"',\n },\n})\nexport class KjCode {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n if (isDevMode()) {\n afterNextRender(() => {\n const host = this.el.nativeElement;\n if (host.tagName?.toLowerCase() !== 'code') {\n console.warn(\n `[kj] kjCode applied to <${host.tagName?.toLowerCase()}>. ` +\n `Recommended host element is <code> for native semantics ` +\n `(WCAG 1.3.1 / 4.1.2). Apply only to non-code elements when ` +\n `you have a specific styling reason.`,\n );\n }\n });\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n inject,\n isDevMode,\n} from '@angular/core';\n\n/**\n * Applies kouji's blockquote tone — left rule, italic, indent — to a\n * `<blockquote>` element. Reflects `data-tone=\"blockquote\"`. Useful when\n * the blockquote sits *outside* a `kj-prose` container (the prose container\n * styles its own `<blockquote>` descendants automatically).\n *\n * Recommended host is `<blockquote>` to preserve native semantics; applied\n * to a non-`<blockquote>` host the directive emits a dev-mode warning but\n * does not enforce the tag.\n *\n * @example\n * ```html\n * <blockquote kjBlockquote>\n * \"kouji-ui shipped on the day they said it would.\"\n * </blockquote>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name typography\n * @doc-description Styles a standalone blockquote outside a prose container with the kouji quotation tone.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjBlockquote]',\n standalone: true,\n exportAs: 'kjBlockquote',\n host: {\n '[attr.data-tone]': '\"blockquote\"',\n },\n})\nexport class KjBlockquote {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n if (isDevMode()) {\n afterNextRender(() => {\n const host = this.el.nativeElement;\n if (host.tagName?.toLowerCase() !== 'blockquote') {\n console.warn(\n `[kj] kjBlockquote applied to <${host.tagName?.toLowerCase()}>. ` +\n `Recommended host element is <blockquote> for native semantics ` +\n `(WCAG 1.3.1 / 4.1.2). Apply only to non-blockquote elements ` +\n `when you have a specific styling reason.`,\n );\n }\n });\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n inject,\n isDevMode,\n input,\n} from '@angular/core';\n\n/**\n * Clamps the host element's text content to a fixed number of lines.\n *\n * - `kjTruncate=\"1\"` (default) — single-line ellipsis using\n * `text-overflow: ellipsis`.\n * - `kjTruncate=\"2\"` and above — multi-line clamp using\n * `-webkit-line-clamp: N`.\n *\n * The directive reflects `[attr.data-truncate]` so the kouji CSS layer can\n * apply the right rules. After the first render it reads the host's\n * `textContent` and writes a normalised `[attr.title]` **only** when the\n * consumer has not supplied a `title` or `aria-label`. This is the\n * *belt-and-braces* affordance for sighted-but-zoomed users — AT users\n * read the full text from the accessibility tree, which is unaffected by\n * the visual clamp on modern browser/AT pairings.\n *\n * The directive does *not* install a `MutationObserver` to chase content\n * changes; if the projected text changes after first render, the consumer\n * is responsible for refreshing `title` themselves.\n *\n * @example\n * ```html\n * <p kjTruncate>Single-line truncation with auto-tooltip.</p>\n * <p [kjTruncate]=\"3\">Three-line clamp for a card description.</p>\n * <p kjTruncate title=\"Custom tooltip\">Consumer title wins.</p>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name typography\n */\n@Directive({\n selector: '[kjTruncate]',\n standalone: true,\n exportAs: 'kjTruncate',\n host: {\n '[attr.data-truncate]': 'kjTruncate()',\n },\n})\nexport class KjTruncate {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Number of visible lines before truncation kicks in. `1` produces a\n * single-line ellipsis; values ≥ `2` produce a multi-line clamp. `0` and\n * negative values are dev-mode warnings — omit the directive instead.\n * Defaults to `1`.\n */\n readonly kjTruncate = input(1, {\n transform: (value: number | string | undefined) => {\n const n = typeof value === 'string' ? Number(value) : (value ?? 1);\n return Number.isFinite(n) && n >= 1 ? Math.floor(n) : 1;\n },\n });\n\n constructor() {\n afterNextRender(() => {\n const host = this.el.nativeElement;\n\n if (isDevMode()) {\n // Re-validate the raw input shape: the transform clamps invalid values\n // to `1`, but we still want to flag intent so the consumer fixes the\n // template rather than silently getting a single-line clamp. A bare\n // `kjTruncate` attribute (no value, the documented single-line\n // default) is allowed and skipped.\n const raw = host.getAttribute('kjTruncate') ?? host.getAttribute('kjtruncate');\n if (raw !== null && raw !== '') {\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed < 1) {\n console.warn(\n `[kj] kjTruncate received \"${raw}\". Use a positive integer ` +\n `(1 = single-line ellipsis, 2+ = multi-line clamp), or omit ` +\n `the directive entirely.`,\n );\n }\n }\n }\n\n const hasTitle = host.hasAttribute('title');\n const hasAriaLabel = host.hasAttribute('aria-label');\n if (hasTitle || hasAriaLabel) {\n return;\n }\n\n const text = (host.textContent ?? '').trim().replace(/\\s+/g, ' ');\n if (text.length > 0) {\n host.setAttribute('title', text);\n }\n });\n }\n}\n","export { KjLead } from './lead';\nexport { KjMuted } from './muted';\nexport { KjCode } from './code';\nexport { KjBlockquote } from './blockquote';\nexport { KjTruncate } from './truncate';\n\n/**\n * Resolvable path to the kouji prose stylesheet. Consumers import the CSS\n * once at the application root:\n *\n * ```ts\n * import { KJ_PROSE_CSS_PATH } from '@kouji-ui/core';\n * // or import the file directly:\n * import '@kouji-ui/core/typography/prose.css';\n * ```\n *\n * The path is exposed as a string so build tools can locate the file via\n * `require.resolve(KJ_PROSE_CSS_PATH)` when programmatic resolution is\n * needed (for example, when wiring the stylesheet into a docs-site\n * pipeline).\n */\nexport const KJ_PROSE_CSS_PATH = '@kouji-ui/core/typography/prose.css';\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Public context exposed by `KjTag` to its descendants (notably\n * `KjTagRemove`). Mirrors the minimal surface called out in the analysis:\n * three signals + a `remove()` callback.\n */\nexport interface KjTagContext {\n /** Live read of the projected text content (label) for the tag. */\n readonly textContent: Signal<string>;\n /** Whether the tag is currently selected (selectable shape only). */\n readonly selected: Signal<boolean>;\n /** Whether the tag is disabled (own + inherited from `KjTagList`). */\n readonly disabled: Signal<boolean>;\n /** Triggers removal: emits the parent's `(kjTagRemoved)` output. */\n remove(): void;\n}\n\n/** Role that a `KjTagList` container exposes. Drives chip role selection. */\nexport type KjTagListRole = 'listbox' | 'grid' | 'group';\n\n/** Public context exposed by `KjTagList` so nested tags can self-configure. */\nexport interface KjTagListContext {\n /** Active container role; chips read this to compute their own role. */\n readonly role: Signal<KjTagListRole>;\n /** Whether the entire tag list is disabled (cascades into chips). */\n readonly disabled: Signal<boolean>;\n /** Whether the listbox container allows multi-selection. */\n readonly multiple: Signal<boolean>;\n}\n\n/** Injection token providing the parent `KjTag` to projected children. */\nexport const KJ_TAG = new InjectionToken<KjTagContext>('KjTag');\n\n/** Injection token providing the optional `KjTagList` container. */\nexport const KJ_TAG_LIST = new InjectionToken<KjTagListContext>('KjTagList');\n","import { InjectionToken, Provider } from '@angular/core';\n\n/** Preset configuration consumed by `KjTag` via `bindPresets`. */\nexport interface KjTagConfig {\n variants: string[];\n sizes: string[];\n defaults: { variant: string; size: string };\n}\n\n/**\n * Default Tag presets shipped by kouji-ui. Variant list is intentionally\n * kept in lock-step with `KjBadge` (see analysis §\"Variant parity with\n * Badge\") — a non-interactive Tag and a Badge with the same `kjVariant`\n * must look identical.\n */\nexport const KJ_TAG_DEFAULTS: KjTagConfig = {\n variants: [\n 'default',\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'info',\n 'outline',\n 'ghost',\n ],\n sizes: ['xs', 'sm', 'md', 'lg'],\n defaults: { variant: 'default', size: 'md' },\n};\n\n/**\n * DI token for the active Tag presets. Default factory yields\n * `KJ_TAG_DEFAULTS`. Override via `provideKjTag(...)` at the application\n * scope or at a component scope.\n */\nexport const KJ_TAG_CONFIG = new InjectionToken<KjTagConfig>('kj.tag.config', {\n factory: () => KJ_TAG_DEFAULTS,\n});\n\n/**\n * Configures the Tag presets for the enclosing injector. Replaces (does\n * not merge) `variants` and `sizes`; spread `KJ_TAG_DEFAULTS.variants` to\n * extend.\n */\nexport function provideKjTag(config: Partial<KjTagConfig>): Provider[] {\n return [\n {\n provide: KJ_TAG_CONFIG,\n useValue: { ...KJ_TAG_DEFAULTS, ...config },\n },\n ];\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n PLATFORM_ID,\n Signal,\n afterNextRender,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { KjFocusRing } from '../primitives/interaction/focus-ring';\nimport { KjDisabled } from '../primitives/interaction/disabled';\nimport { KjSize, KjVariant, bindPresets } from '../presets';\nimport { KJ_TAG, KJ_TAG_LIST, KjTagContext } from './tag.context';\nimport { KJ_TAG_CONFIG } from './config';\n\n/**\n * Root tag/chip directive. Renders one of four shapes from the same DOM\n * skeleton — decorative, removable, selectable, or input-chip — chosen by\n * inputs and the optional `KjTagList` container the host is rendered in.\n *\n * The host element stays element-agnostic (the wrapper picks `<button>` vs.\n * `<span>`); this directive owns the role / `tabindex` / `aria-pressed` /\n * `aria-selected` attribute decisions and the projected-text label signal\n * consumed by `KjTagRemove` to build its accessible name.\n *\n * @example\n * ```html\n * <span kjTag>Decorative</span>\n *\n * <span kjTag>\n * Acme\n * <button kjTagRemove>×</button>\n * </span>\n *\n * <span kjTag kjTagSelectable [(kjTagSelected)]=\"on\">Toggle</span>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name tag\n * @doc-description Unstyled tag or chip with decorative, removable, selectable, or listbox option modes.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjTag]',\n standalone: true,\n providers: [\n { provide: KJ_TAG, useExisting: KjTag },\n ...bindPresets(KJ_TAG_CONFIG),\n ],\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n { directive: KjDisabled, inputs: ['kjDisabled: kjTagDisabled'] },\n KjFocusRing,\n ],\n host: {\n '[attr.role]': 'computedRole()',\n '[attr.tabindex]': 'computedTabindex()',\n '[attr.aria-pressed]': 'computedPressed()',\n '[attr.aria-selected]': 'computedSelected()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-selected]': 'kjTagSelected() ? \"\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '(click)': 'onClick($event)',\n '(keydown.space)': 'onActivate($event)',\n '(keydown.enter)': 'onActivate($event)',\n },\n})\nexport class KjTag implements KjTagContext {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly list = inject(KJ_TAG_LIST, { optional: true });\n\n /** Enables toggle-button behaviour. Standalone selectable chips become `role=\"button\"` + `aria-pressed`. */\n readonly kjTagSelectable = input(false);\n\n /** Two-way bound selection state; only meaningful when `kjTagSelectable` is true or inside a listbox container. */\n readonly kjTagSelected = model(false);\n\n /**\n * Optional explicit text label. When set, `KjTagRemove` reads this for its\n * auto-generated `aria-label` instead of the `MutationObserver`-derived\n * projected text content.\n */\n readonly kjTagLabel = input<string | undefined>(undefined);\n\n /** Disabled state, aliased through `KjDisabled` from `kjTagDisabled`. */\n readonly kjTagDisabled = input(false);\n\n /** Fires when this tag's projected `KjTagRemove` is activated. */\n readonly kjTagRemoved = output<void>();\n\n private readonly _textContent = signal('');\n\n /** Live projected text content. Powers `KjTagRemove`'s auto aria-label. */\n readonly textContent: Signal<string> = computed(\n () => this.kjTagLabel() ?? this._textContent(),\n );\n\n /** Selection state exposed via `KjTagContext` for child directives. */\n readonly selected: Signal<boolean> = this.kjTagSelected.asReadonly();\n\n /**\n * Effective disabled state: the tag's own `kjTagDisabled` OR the parent\n * `KjTagList`'s cascading `disabled` signal.\n */\n readonly disabled: Signal<boolean> = computed(\n () => this.kjTagDisabled() || (this.list?.disabled() ?? false),\n );\n\n /**\n * Role decision tree. Container wins first:\n * - `KjTagList[role=\"listbox\"]` -> `option`\n * - `KjTagList[role=\"grid\"]` -> `row`\n * - else if `kjTagSelectable` -> `button`\n * - else -> null (decorative).\n */\n protected readonly computedRole = computed<string | null>(() => {\n const listRole = this.list?.role();\n if (listRole === 'listbox') return 'option';\n if (listRole === 'grid') return 'row';\n if (this.kjTagSelectable()) return 'button';\n return null;\n });\n\n /** Focusable iff interactive (selectable, listbox option, or grid row). */\n protected readonly computedTabindex = computed<string | null>(() => {\n if (this.computedRole() === null) return null;\n return this.disabled() ? '-1' : '0';\n });\n\n /** `aria-pressed` only on standalone selectable chips (the toggle-button pattern). */\n protected readonly computedPressed = computed<string | null>(() => {\n if (this.list) return null;\n if (!this.kjTagSelectable()) return null;\n return this.kjTagSelected() ? 'true' : 'false';\n });\n\n /** `aria-selected` for chips inside a listbox container; never on grid rows / decorative. */\n protected readonly computedSelected = computed<string | null>(() => {\n if (this.list?.role() !== 'listbox') return null;\n return this.kjTagSelected() ? 'true' : 'false';\n });\n\n constructor() {\n afterNextRender(() => {\n // Always seed once on first render so SSR-rendered text is captured\n // immediately. The MutationObserver attaches in browsers only.\n this._textContent.set(this.el.nativeElement.textContent?.trim() ?? '');\n\n if (!isPlatformBrowser(this.platformId)) return;\n if (typeof MutationObserver === 'undefined') return;\n\n const observer = new MutationObserver(() => {\n this._textContent.set(this.el.nativeElement.textContent?.trim() ?? '');\n });\n observer.observe(this.el.nativeElement, {\n characterData: true,\n childList: true,\n subtree: true,\n });\n this.destroyRef.onDestroy(() => observer.disconnect());\n });\n }\n\n /** @internal Click handler — toggles selection in selectable shapes only. */\n onClick(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n if (this.computedRole() === 'button' || this.computedRole() === 'option') {\n this.kjTagSelected.set(!this.kjTagSelected());\n }\n }\n\n /** @internal Space / Enter activator — mirrors the click path; prevents page scroll on Space. */\n onActivate(event: Event): void {\n if (this.computedRole() === null) return;\n if (this.disabled()) return;\n event.preventDefault();\n if (this.computedRole() === 'button' || this.computedRole() === 'option') {\n this.kjTagSelected.set(!this.kjTagSelected());\n }\n }\n\n /**\n * Triggers removal. Called from a projected `KjTagRemove`. Re-emitted as\n * `(kjTagRemoved)` for the consumer to drop this chip from their model.\n */\n remove(): void {\n if (this.disabled()) return;\n this.kjTagRemoved.emit();\n }\n}\n","import { Directive, computed, inject, input } from '@angular/core';\nimport { KjButton } from '../button/button';\nimport { KJ_TAG } from './tag.context';\n\n/**\n * Trailing remove control for a `KjTag`. Composes `KjButton` so the remove\n * action inherits native `<button>` semantics, ARIA-disabled handling,\n * capture-phase click suppression, and the focus ring — there is no second\n * keyboard / a11y story to maintain.\n *\n * The accessible name is derived automatically from the parent tag's\n * projected text content (`\"Remove {label}\"`) via a `MutationObserver` on\n * `KjTag`. Override with `kjTagRemoveLabel` when the auto-derived name is\n * insufficient (e.g. icon-only tag, custom phrasing).\n *\n * @example\n * ```html\n * <span kjTag>\n * Acme\n * <button kjTagRemove>×</button>\n * </span>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name tag\n */\n@Directive({\n selector: '[kjTagRemove]',\n standalone: true,\n hostDirectives: [KjButton],\n host: {\n 'type': 'button',\n '[attr.aria-label]': 'effectiveLabel()',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjTagRemove {\n private readonly tag = inject(KJ_TAG);\n\n /** Override the auto-derived `aria-label` for the remove button. */\n readonly kjTagRemoveLabel = input<string | undefined>(undefined);\n\n /** Computed accessible name: explicit override wins, else `\"Remove {label}\"`. */\n protected readonly effectiveLabel = computed<string>(() => {\n const override = this.kjTagRemoveLabel();\n if (override) return override;\n const label = this.tag.textContent();\n return label ? `Remove ${label}` : 'Remove';\n });\n\n /** @internal Click handler — fires the parent tag's `(kjTagRemoved)`. */\n onClick(event: Event): void {\n if (this.tag.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n event.stopPropagation();\n this.tag.remove();\n }\n}\n","import { Directive, Signal, computed, input } from '@angular/core';\nimport { KjRovingTabindex } from '../a11y/roving-tabindex';\nimport { KJ_TAG_LIST, KjTagListContext, KjTagListRole } from './tag.context';\n\n/**\n * Optional container that coordinates a group of `KjTag` chips. Provides\n * the chip-group keyboard story (roving tabindex via `KjRovingTabindex`)\n * and the ARIA wiring for the `listbox` / `grid` / `group` shapes called\n * out in the analysis.\n *\n * Standalone tags work fine without this container — the container is the\n * opt-in surface that turns a pile of independent chips into a single\n * keyboardable composite.\n *\n * @example\n * ```html\n * <div kjTagList kjTagListRole=\"listbox\" [kjTagListMultiple]=\"true\" aria-label=\"Filters\">\n * <span kjTag kjTagSelectable>One</span>\n * <span kjTag kjTagSelectable>Two</span>\n * </div>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name tag\n */\n@Directive({\n selector: '[kjTagList]',\n standalone: true,\n providers: [{ provide: KJ_TAG_LIST, useExisting: KjTagList }],\n hostDirectives: [\n { directive: KjRovingTabindex, inputs: ['kjRovingOrientation: kjTagListOrientation'] },\n ],\n host: {\n '[attr.role]': 'kjTagListRole()',\n '[attr.aria-orientation]': 'ariaOrientation()',\n '[attr.aria-multiselectable]': 'ariaMultiSelectable()',\n '[attr.aria-disabled]': 'kjTagListDisabled() ? \"true\" : null',\n '[attr.tabindex]': 'kjTagListRole() !== \"group\" ? \"-1\" : null',\n },\n})\nexport class KjTagList implements KjTagListContext {\n /** Container ARIA role — drives chip role selection (option / row / none). */\n readonly kjTagListRole = input<KjTagListRole>('group');\n\n /** Roving tabindex axis. Forwarded to `KjRovingTabindex`. */\n readonly kjTagListOrientation = input<'horizontal' | 'vertical' | 'both'>('horizontal');\n\n /** Only meaningful in `listbox` mode. Drives `aria-multiselectable`. */\n readonly kjTagListMultiple = input(false);\n\n /** Cascading disabled flag. Each chip's effective disabled OR-merges this. */\n readonly kjTagListDisabled = input(false);\n\n /** Read-only role view used by `KjTag` to compute its own role. */\n readonly role: Signal<KjTagListRole> = this.kjTagListRole;\n\n /** Read-only disabled view used by `KjTag` to merge into its effective disabled. */\n readonly disabled: Signal<boolean> = this.kjTagListDisabled;\n\n /** Read-only multi-selectable view (listbox-only meaning). */\n readonly multiple: Signal<boolean> = this.kjTagListMultiple;\n\n /** Only emit `aria-orientation` when the container has a real role. */\n protected readonly ariaOrientation = computed<string | null>(() => {\n if (this.kjTagListRole() === 'group') return null;\n return this.kjTagListOrientation() === 'both'\n ? 'horizontal'\n : this.kjTagListOrientation();\n });\n\n /** `aria-multiselectable` only set in listbox mode. */\n protected readonly ariaMultiSelectable = computed<string | null>(() => {\n if (this.kjTagListRole() !== 'listbox') return null;\n return this.kjTagListMultiple() ? 'true' : 'false';\n });\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, booleanAttribute, input } from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\n\n/**\n * Dialog body component. Composes `KjOverlayPanel` as a host directive so\n * the overlay primitives wire role/state/aria/focus management.\n *\n * The role is decided by the SERVICE (`KjDialog.open`) via the\n * `KJ_OVERLAY_PANEL_ROLE` provider on the controller. The `kjAlert` input\n * is exposed for declarative (non-service) usage where consumers wire their\n * own providers.\n *\n * @doc-category Core/Overlay\n */\n@Component({\n selector: 'kj-dialog',\n standalone: true,\n hostDirectives: [{ directive: KjOverlayPanel }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-dialog' },\n template: `<ng-content />`,\n})\nexport class KjDialog {\n readonly kjAlert = input(false, { transform: booleanAttribute });\n}\n","import { Signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport type { KjOverlayController } from '../primitives/overlay/controller';\n\nexport class KjDialogRef<T, R = unknown> {\n private _instance: T | null = null;\n private _result: R | undefined;\n private resolveResult!: (r: R | undefined) => void;\n readonly result: Promise<R | undefined>;\n private readonly _afterOpened = new Subject<void>();\n private readonly _afterClosed = new Subject<R | undefined>();\n readonly afterOpened$: Observable<void> = this._afterOpened.asObservable();\n readonly afterClosed$: Observable<R | undefined> = this._afterClosed.asObservable();\n\n readonly state: Signal<'closed' | 'opening' | 'open' | 'closing'>;\n readonly isOpen: Signal<boolean>;\n\n constructor(\n public readonly controller: KjOverlayController,\n ) {\n this.state = controller.state;\n this.isOpen = controller.isOpen;\n this.result = new Promise<R | undefined>((res) => { this.resolveResult = res; });\n }\n\n /** @internal */\n bindInstance(instance: T) { this._instance = instance; }\n get instance(): T {\n if (!this._instance) throw new Error('KjDialogRef: instance not bound');\n return this._instance;\n }\n\n close(result?: R): void {\n this._result = result;\n this.controller.close('programmatic');\n queueMicrotask(() => {\n this._afterClosed.next(this._result);\n this._afterClosed.complete();\n this.resolveResult(this._result);\n });\n }\n}\n","import { EnvironmentInjector, Injectable, Type, effect, inject, runInInjectionContext } from '@angular/core';\nimport { KjOverlayBuilder } from '../primitives/overlay/builder';\nimport { inPlace } from '../primitives/overlay/strategies/mount/in-place';\nimport { viewportCentered } from '../primitives/overlay/strategies/position/viewport-centered';\nimport { solidBackdrop } from '../primitives/overlay/strategies/backdrop/solid';\nimport { tabCycle } from '../primitives/overlay/strategies/focus-trap/tab-cycle';\nimport { htmlOverflow } from '../primitives/overlay/strategies/scroll-lock/html-overflow';\nimport { silent } from '../primitives/overlay/strategies/live-announcer/silent';\nimport { assertive } from '../primitives/overlay/strategies/live-announcer/assertive';\nimport { programmatic } from '../primitives/overlay/strategies/trigger-event/programmatic';\nimport { KjDialogRef } from './dialog.ref';\n\nexport interface KjDialogOpenOptions<D = unknown> {\n data?: D;\n alert?: boolean;\n closeOnEsc?: boolean;\n closeOnOutside?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class KjDialog {\n private readonly builder = inject(KjOverlayBuilder);\n private readonly env = inject(EnvironmentInjector);\n\n open<T, R = unknown, D = unknown>(component: Type<T>, opts: KjDialogOpenOptions<D> = {}): KjDialogRef<T, R> {\n const alert = !!opts.alert;\n const handle = this.builder.create({\n mount: inPlace(),\n position: viewportCentered(),\n backdrop: solidBackdrop({\n inert: true,\n closeOnClick: !alert && (opts.closeOnOutside ?? true),\n }),\n focusTrap: tabCycle({ returnFocus: true }),\n scrollLock: htmlOverflow(),\n liveAnnouncer: alert ? assertive() : silent(),\n trigger: programmatic(),\n panelRole: alert ? 'alertdialog' : 'dialog',\n });\n\n const ref = new KjDialogRef<T, R>(handle.controller);\n const cmpRef = this.builder.attachComponent(handle, component, {\n providers: [{ provide: KjDialogRef, useValue: ref }],\n data: opts.data,\n });\n ref.bindInstance(cmpRef.instance);\n\n runInInjectionContext(this.env, () => {\n let wasOpen = false;\n const eff = effect(() => {\n const s = handle.controller.state();\n if (s === 'open' || s === 'opening') wasOpen = true;\n if (s === 'closed' && wasOpen) {\n eff.destroy();\n // afterClosed$ subscribers see the result before teardown.\n queueMicrotask(() => handle.destroy());\n }\n });\n });\n handle.controller.open();\n return ref;\n }\n\n // TODO: sugar wrappers (alert/confirm/prompt) — implement once preset\n // components (packages/core/src/dialog/presets/*.ts) are added.\n}\n","import { Subject, type Observable } from 'rxjs';\nimport type { Signal } from '@angular/core';\nimport type { KjOverlayController } from '../primitives/overlay/controller';\n\n/**\n * Reference returned by `KjDrawer.open()`. Mirrors {@link import('../dialog/dialog.ref').KjDialogRef}.\n *\n * Use `close(result?)` to dismiss the drawer programmatically. Subscribe to\n * `afterClosed$` for the close result, or await the `result` promise.\n *\n * @doc-category Core/Overlay\n */\nexport class KjDrawerRef<T, R = unknown> {\n private _instance: T | null = null;\n private _result: R | undefined;\n private resolveResult!: (r: R | undefined) => void;\n /** Promise resolving with the close result. */\n readonly result: Promise<R | undefined>;\n\n private readonly _afterOpened = new Subject<void>();\n private readonly _afterClosed = new Subject<R | undefined>();\n /** Emits once after the drawer has finished opening. */\n readonly afterOpened$: Observable<void> = this._afterOpened.asObservable();\n /** Emits the close result once the drawer has finished closing. */\n readonly afterClosed$: Observable<R | undefined> = this._afterClosed.asObservable();\n\n /** Reactive lifecycle state mirrored from the underlying controller. */\n readonly state: Signal<'closed' | 'opening' | 'open' | 'closing'>;\n /** Convenience for `state() === 'open' || 'opening'`. */\n readonly isOpen: Signal<boolean>;\n\n constructor(public readonly controller: KjOverlayController) {\n this.state = controller.state;\n this.isOpen = controller.isOpen;\n this.result = new Promise<R | undefined>((res) => {\n this.resolveResult = res;\n });\n }\n\n /** @internal Bind the rendered component instance for `instance`. */\n bindInstance(instance: T): void {\n this._instance = instance;\n }\n\n /** The rendered drawer component instance. */\n get instance(): T {\n if (!this._instance) {\n throw new Error('KjDrawerRef: instance not bound');\n }\n return this._instance;\n }\n\n /** Close the drawer with an optional result payload. */\n close(result?: R): void {\n this._result = result;\n this.controller.close('programmatic');\n queueMicrotask(() => {\n this._afterClosed.next(this._result);\n this._afterClosed.complete();\n this.resolveResult(this._result);\n });\n }\n}\n","import {\n EnvironmentInjector,\n Injectable,\n InjectionToken,\n Type,\n effect,\n inject,\n runInInjectionContext,\n} from '@angular/core';\nimport { KjOverlayBuilder } from '../primitives/overlay/builder';\nimport { inPlace } from '../primitives/overlay/strategies/mount/in-place';\nimport { edgeSheet } from '../primitives/overlay/strategies/position/edge-sheet';\nimport { solidBackdrop } from '../primitives/overlay/strategies/backdrop/solid';\nimport { tabCycle } from '../primitives/overlay/strategies/focus-trap/tab-cycle';\nimport { htmlOverflow } from '../primitives/overlay/strategies/scroll-lock/html-overflow';\nimport { silent } from '../primitives/overlay/strategies/live-announcer/silent';\nimport { programmatic } from '../primitives/overlay/strategies/trigger-event/programmatic';\nimport { KjDrawerRef } from './drawer.ref';\n\n/** Side of the viewport the drawer slides in from. */\nexport type KjDrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\n/** Configuration options for {@link KjDrawer.open}. */\nexport interface KjDrawerOpenOptions<D = unknown> {\n /** Side of the viewport the drawer slides in from. Defaults to `'right'`. */\n side?: KjDrawerSide;\n /** Enables drag-to-dismiss when the body component implements it. */\n drag?: boolean;\n /** Data injected into the rendered component via `DRAWER_DATA` (when wired). */\n data?: D;\n /** Whether clicking the backdrop closes the drawer. Defaults to `true`. */\n closeOnOutside?: boolean;\n}\n\n/**\n * Programmatic service for opening drawers. Mirrors `KjDialog`. Builds an\n * overlay handle wired to the overlay primitives and renders a component\n * inside the singleton overlay container, positioned via `edgeSheet({side})`.\n *\n * @doc-category Core/Overlay\n */\n@Injectable({ providedIn: 'root' })\nexport class KjDrawerService {\n private readonly builder = inject(KjOverlayBuilder);\n private readonly env = inject(EnvironmentInjector);\n\n /**\n * Open a component as a modal drawer.\n *\n * @param component - The component class to render inside the drawer.\n * @param opts - Side, drag, data, and close-on-outside controls.\n * @returns A {@link KjDrawerRef} for closing and observing the drawer.\n */\n open<T, R = unknown, D = unknown>(\n component: Type<T>,\n opts: KjDrawerOpenOptions<D> = {},\n ): KjDrawerRef<T, R> {\n const side: KjDrawerSide = opts.side ?? 'right';\n\n const handle = this.builder.create({\n mount: inPlace(),\n position: edgeSheet({ side }),\n backdrop: solidBackdrop({\n inert: true,\n closeOnClick: opts.closeOnOutside ?? true,\n }),\n focusTrap: tabCycle({ returnFocus: true }),\n scrollLock: htmlOverflow(),\n liveAnnouncer: silent(),\n trigger: programmatic(),\n panelRole: 'dialog',\n });\n\n const ref = new KjDrawerRef<T, R>(handle.controller);\n const cmpRef = this.builder.attachComponent(handle, component, {\n providers: [\n { provide: KjDrawerRef, useValue: ref },\n { provide: DRAWER_DATA, useValue: opts.data },\n { provide: DRAWER_SIDE, useValue: side },\n { provide: DRAWER_DRAG, useValue: !!opts.drag },\n ],\n });\n ref.bindInstance(cmpRef.instance);\n\n runInInjectionContext(this.env, () => {\n let wasOpen = false;\n const eff = effect(() => {\n const s = handle.controller.state();\n if (s === 'open' || s === 'opening') wasOpen = true;\n if (s === 'closed' && wasOpen) {\n eff.destroy();\n queueMicrotask(() => handle.destroy());\n }\n });\n });\n handle.controller.open();\n return ref;\n }\n}\n\n/** Token for passing data to a programmatically opened drawer component. */\nexport const DRAWER_DATA = new InjectionToken<unknown>('KjDrawerData');\n/** Token exposing the resolved drawer side to the rendered component. */\nexport const DRAWER_SIDE = new InjectionToken<KjDrawerSide>('KjDrawerSide');\n/** Token exposing whether drag-to-dismiss is enabled to the rendered component. */\nexport const DRAWER_DRAG = new InjectionToken<boolean>('KjDrawerDrag');\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n ViewEncapsulation,\n computed,\n inject,\n} from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { DRAWER_DRAG, DRAWER_SIDE, type KjDrawerSide } from './drawer.service';\nimport { KjDrawerRef } from './drawer.ref';\n\n/** Downward drag fraction past which release dismisses (bottom side). */\nconst DEFAULT_DISMISS_THRESHOLD = 0.4;\n/** Downward velocity (px/s) past which release dismisses (bottom side). */\nconst DEFAULT_DISMISS_VELOCITY = 600;\n\n/**\n * Drawer body component. Composes {@link KjOverlayPanel} so the host element\n * inherits `role`, `[data-state]`, and the configured side strategy from\n * `KjDrawer.open()`. Preserves the optional drag-to-dismiss behaviour: when\n * `KjDrawer.open({ drag: true, side: 'bottom' })`, pointer-down on the host\n * starts a drag that calls `ref.close()` once the threshold is crossed.\n *\n * @doc-category Core/Overlay\n */\n@Component({\n selector: 'kj-drawer',\n standalone: true,\n hostDirectives: [{ directive: KjOverlayPanel }],\n host: {\n 'class': 'kj-drawer',\n '[attr.data-kj-side]': 'side',\n '[attr.data-kj-dragging]': 'dragging() ? \"\" : null',\n '[style.touch-action]': 'dragging() ? \"none\" : null',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerup)': 'onPointerUp($event)',\n '(pointercancel)': 'onPointerCancel($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n})\nexport class KjDrawer {\n /** Resolved drawer side (provided by `KjDrawer.open`). */\n readonly side = inject<KjDrawerSide>(DRAWER_SIDE, { optional: true }) ?? 'right';\n /** Whether drag-to-dismiss is active for this drawer. */\n readonly drag = inject<boolean>(DRAWER_DRAG, { optional: true }) ?? false;\n\n private readonly ref = inject<KjDrawerRef<unknown>>(KjDrawerRef, { optional: true });\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private startY = 0;\n private startTime = 0;\n private pointerId: number | null = null;\n private _dragging = false;\n\n /** Reactive flag for `data-kj-dragging` host binding. */\n protected dragging = computed(() => this._dragging);\n\n /** @internal */\n onPointerDown(event: PointerEvent): void {\n if (!this.drag) return;\n if (this.side !== 'bottom') return;\n if (event.button !== undefined && event.button !== 0) return;\n this.pointerId = event.pointerId;\n this.startY = event.clientY;\n this.startTime = typeof performance !== 'undefined' ? performance.now() : Date.now();\n this._dragging = true;\n (event.target as Element | null)?.setPointerCapture?.(event.pointerId);\n }\n\n /** @internal */\n onPointerMove(event: PointerEvent): void {\n if (!this._dragging) return;\n if (this.pointerId !== null && event.pointerId !== this.pointerId) return;\n const offset = Math.max(0, event.clientY - this.startY);\n this.el.nativeElement.style.setProperty('--kj-drawer-drag-offset', `${offset}px`);\n }\n\n /** @internal */\n onPointerUp(event: PointerEvent): void {\n if (!this._dragging) return;\n if (this.pointerId !== null && event.pointerId !== this.pointerId) return;\n const now = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const dy = Math.max(0, event.clientY - this.startY);\n const dt = Math.max(1, now - this.startTime);\n const velocity = (dy / dt) * 1000;\n this.endDrag();\n const panelHeight = this.el.nativeElement.getBoundingClientRect().height || 200;\n if (\n velocity > DEFAULT_DISMISS_VELOCITY\n || dy / panelHeight >= DEFAULT_DISMISS_THRESHOLD\n ) {\n this.ref?.close();\n }\n }\n\n /** @internal */\n onPointerCancel(_event: PointerEvent): void {\n this.endDrag();\n }\n\n private endDrag(): void {\n this._dragging = false;\n this.pointerId = null;\n this.el.nativeElement.style.removeProperty('--kj-drawer-drag-offset');\n }\n\n /** Close the drawer with an optional payload. */\n close(result?: unknown): void {\n (this.ref as KjDrawerRef<unknown, unknown> | null)?.close(result);\n }\n\n /** Esc closes via the overlay-stack coordinator on the controller. */\n @HostListener('keydown.escape')\n onEscape(): void {\n this.ref?.close();\n }\n}\n","import { Directive, inject, input, booleanAttribute } from '@angular/core';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport { onHover, type KjOnHoverStrategy } from '../primitives/overlay/strategies/trigger-event/on-hover';\n\n@Directive({\n selector: '[kjTooltipTrigger]',\n exportAs: 'kjTooltipTrigger',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayTrigger, inputs: ['kjOpen'] },\n ],\n providers: [\n KjOverlayController,\n {\n provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n useFactory: () => onHover({ openDelay: 200, closeDelay: 0 }),\n },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'tooltip' as const },\n ],\n})\nexport class KjTooltipTrigger {\n readonly kjOpenDelay = input<number, unknown>(200, { transform: (v) => Number(v) || 200 });\n readonly kjCloseDelay = input<number, unknown>(0, { transform: (v) => Number(v) || 0 });\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n constructor() {\n const strat = inject(KJ_OVERLAY_TRIGGER_EVENT_STRATEGY) as KjOnHoverStrategy;\n if ('configure' in strat) {\n strat.configure({ openDelay: this.kjOpenDelay, closeDelay: this.kjCloseDelay });\n }\n }\n\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n /** The controller of the composed `KjOverlayTrigger`, exposed for sibling `[kjFor]` panels. */\n get controller(): KjOverlayController {\n return this._overlayTrigger.controller;\n }\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n","// tooltip-content.ts\nimport { Component, ChangeDetectionStrategy, ViewEncapsulation, inject, input } from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport type { KjSide, KjAlign } from '../primitives/overlay/types';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\n\n@Component({\n selector: 'kj-tooltip-content',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayPanel, inputs: ['kjFor'] },\n ],\n providers: [\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'tooltip' as const },\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => bodyPortal() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => anchoredTo() },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-tooltip-content' },\n template: `<ng-content />`,\n})\nexport class KjTooltipContent {\n readonly kjSide = input<KjSide>('top');\n readonly kjAlign = input<KjAlign>('center');\n readonly kjOffset = input<number, unknown>(8, { transform: (v) => Number(v) || 8 });\n\n constructor() {\n const pos = inject(KJ_OVERLAY_POSITION_STRATEGY) as ReturnType<typeof anchoredTo>;\n pos.configure({ side: this.kjSide, align: this.kjAlign, offset: this.kjOffset });\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Optional decorative arrow rendered inside `[kjTooltipContent]`.\n *\n * Pure styling hook — has no behaviour. The wrapper / consumer CSS reads\n * `data-side` from the parent `[kjTooltipContent]` to position and rotate\n * the arrow. `aria-hidden=\"true\"` keeps it out of the AT tree.\n *\n * @example\n * ```html\n * <ng-template #tip>\n * <div kjTooltipContent>\n * Save to disk\n * <span kjTooltipArrow></span>\n * </div>\n * </ng-template>\n * ```\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjTooltipArrow]',\n standalone: true,\n host: {\n 'class': 'kj-tooltip-arrow',\n 'aria-hidden': 'true',\n 'data-kj-tooltip-arrow': '',\n },\n})\nexport class KjTooltipArrow {}\n","import { Directive, output } from '@angular/core';\n\n/**\n * Coordinates \"skip-delay\" timing between sibling tooltips.\n *\n * **Note (overlay primitives migration):** The skip-delay coordination\n * context was removed during the overlay-primitives migration; this\n * directive is currently a no-op marker that preserves the public selector\n * and analytics outputs. Re-instating coordinated open delays is a\n * follow-up — track via the trigger-event strategy on `KjTooltipTrigger`.\n *\n * @example\n * ```html\n * <div kjTooltipGroup>\n * <button kjButton [kjTooltip]=\"'Bold'\">B</button>\n * <button kjButton [kjTooltip]=\"'Italic'\">I</button>\n * </div>\n * ```\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjTooltipGroup]',\n standalone: true,\n exportAs: 'kjTooltipGroup',\n})\nexport class KjTooltipGroup {\n /** Fires whenever any tooltip in this group opens. Convenience analytics hook. */\n readonly kjTooltipOpened = output<void>();\n /** Fires whenever any tooltip in this group closes. Convenience analytics hook. */\n readonly kjTooltipClosed = output<void>();\n}\n","import { Directive, booleanAttribute, inject, input } from '@angular/core';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport { onClick } from '../primitives/overlay/strategies/trigger-event/on-click';\n\nexport type KjPopoverTriggerKind = 'click' | 'hover';\n\n@Directive({\n selector: '[kjPopoverTrigger]',\n exportAs: 'kjPopoverTrigger',\n standalone: true,\n hostDirectives: [{ directive: KjOverlayTrigger, inputs: ['kjOpen'] }],\n providers: [\n KjOverlayController,\n // For an MVP we resolve at construction; reactive switch is a follow-up.\n {\n provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n useFactory: () => onClick(),\n },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'dialog' as const },\n ],\n})\nexport class KjPopoverTrigger {\n readonly kjTrigger = input<KjPopoverTriggerKind>('click');\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n /** The controller of the composed `KjOverlayTrigger`, exposed for sibling `[kjFor]` panels. */\n get controller(): KjOverlayController {\n return this._overlayTrigger.controller;\n }\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, booleanAttribute, inject, input } from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_FOCUS_TRAP_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport type { KjSide, KjAlign } from '../primitives/overlay/types';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\nimport { tabCycle } from '../primitives/overlay/strategies/focus-trap/tab-cycle';\n\n@Component({\n selector: 'kj-popover-content',\n standalone: true,\n hostDirectives: [{ directive: KjOverlayPanel, inputs: ['kjFor'] }],\n providers: [\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'dialog' as const },\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => bodyPortal() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => anchoredTo() },\n { provide: KJ_OVERLAY_FOCUS_TRAP_STRATEGY, useFactory: () => tabCycle({ returnFocus: true }) },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-popover-content' },\n template: `<ng-content />`,\n})\nexport class KjPopoverContent {\n readonly kjSide = input<KjSide>('bottom');\n readonly kjAlign = input<KjAlign>('center');\n readonly kjOffset = input<number, unknown>(8, { transform: (v) => Number(v) || 8 });\n readonly kjTrap = input(false, { transform: booleanAttribute });\n\n constructor() {\n const pos = inject(KJ_OVERLAY_POSITION_STRATEGY) as ReturnType<typeof anchoredTo>;\n pos.configure({ side: this.kjSide, align: this.kjAlign, offset: this.kjOffset });\n const trap = inject(KJ_OVERLAY_FOCUS_TRAP_STRATEGY) as ReturnType<typeof tabCycle>;\n trap.configure({ enabled: () => this.kjTrap() });\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Optional decorative arrow rendered inside `[kjPopoverContent]`.\n *\n * Pure styling hook — has no behaviour. Consumer CSS reads `data-side` from\n * the parent panel host (set by the position strategy) to position and\n * rotate the arrow. `aria-hidden=\"true\"` keeps it out of the AT tree\n * (matches `KjTooltipArrow`).\n *\n * @example\n * ```html\n * <kj-popover-content [kjFor]=\"t\">\n * <h3 kjPopoverTitle>Profile</h3>\n * <span kjPopoverArrow></span>\n * </kj-popover-content>\n * ```\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjPopoverArrow]',\n standalone: true,\n host: {\n 'class': 'kj-popover-arrow',\n 'aria-hidden': 'true',\n 'data-kj-popover-arrow': '',\n },\n})\nexport class KjPopoverArrow {}\n","import { Directive, inject } from '@angular/core';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\n\n/**\n * Convenience close button. Place inside a `[kjPopoverContent]` panel.\n * Calls the overlay controller's `close('programmatic')` on click.\n *\n * @example\n * ```html\n * <kj-popover-content [kjFor]=\"t\">\n * …\n * <button kjPopoverClose>Close</button>\n * </kj-popover-content>\n * ```\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjPopoverClose]',\n standalone: true,\n host: {\n '(click)': 'onClick($event)',\n },\n})\nexport class KjPopoverClose {\n private readonly _panel = inject(KjOverlayPanel, { optional: true });\n private get controller(): KjOverlayController | null {\n return this._panel?.controller ?? null;\n }\n\n protected onClick(event: MouseEvent): void {\n event.stopPropagation();\n this.controller?.close('programmatic');\n }\n}\n","import { Directive } from '@angular/core';\n\nlet _popoverTitleIdCounter = 0;\n/** Allocate a stable id used for the panel's `aria-labelledby`. */\nexport function nextPopoverTitleId(): string {\n return `kj-popover-title-${++_popoverTitleIdCounter}`;\n}\n\n/**\n * Marks the heading element inside the popover content. Generates a stable\n * id so consumer code (or a future panel-level hook) can wire\n * `aria-labelledby`.\n *\n * Mirrors `KjDialogTitle` in the dialog family — applied to whatever heading\n * level the consumer's information architecture wants (`<h2>` … `<h4>`),\n * the directive does not override `role`.\n *\n * @example\n * ```html\n * <kj-popover-content [kjFor]=\"t\">\n * <h2 kjPopoverTitle>Profile settings</h2>\n * …\n * </kj-popover-content>\n * ```\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjPopoverTitle]',\n standalone: true,\n host: {\n 'class': 'kj-popover-title',\n '[attr.id]': 'titleId',\n },\n})\nexport class KjPopoverTitle {\n /** Auto-generated id used for the panel's `aria-labelledby`. */\n readonly titleId = nextPopoverTitleId();\n}\n","import { InjectionToken, type Signal } from '@angular/core';\n\n/**\n * Where initial focus lands when the confirm popup opens.\n *\n * - `'cancel'` — the safer default per WCAG 3.3.4 *Error Prevention*.\n * - `'confirm'` — opt-in for non-destructive flows where the muscle-memory\n * should snap to \"Yes\".\n */\nexport type KjConfirmPopupDefaultFocus = 'confirm' | 'cancel';\n\n/**\n * Context shared between the confirm popup directives. Lives in parallel with\n * the underlying `KJ_POPOVER` context — `KjConfirmPopup` reads from popover\n * for open/close mechanics but exposes its own context to children for the\n * confirm/cancel resolution contract.\n */\nexport interface KjConfirmPopupContext {\n /** Whether the popup is currently open. Mirrors the popover's `open` signal. */\n readonly open: Signal<boolean>;\n /** Whether the confirm action should render with destructive intent. */\n readonly destructive: Signal<boolean>;\n /** Where initial focus lands on open. */\n readonly defaultFocus: Signal<KjConfirmPopupDefaultFocus>;\n /** Stable id used for `aria-describedby` wiring on the panel. */\n readonly messageId: string;\n\n /** Resolve the confirmation: `true` confirms, `false` cancels. */\n close(result: boolean): void;\n}\n\n/** Injection token for the confirm popup context. */\nexport const KJ_CONFIRM_POPUP = new InjectionToken<KjConfirmPopupContext>(\n 'KjConfirmPopup',\n);\n\nlet _confirmPopupMessageIdCounter = 0;\n/** Allocate a stable id used for `aria-describedby` wiring. */\nexport function nextConfirmPopupMessageId(): string {\n return `kj-confirm-popup-message-${++_confirmPopupMessageIdCounter}`;\n}\n","import {\n Directive,\n booleanAttribute,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_CONFIRM_POPUP,\n type KjConfirmPopupContext,\n type KjConfirmPopupDefaultFocus,\n nextConfirmPopupMessageId,\n} from './confirm-popup.context';\n\n/**\n * Root state container for the confirm popup family.\n *\n * Layers a confirm/cancel resolution contract on top of an overlay controller\n * so consumer button slots can resolve the popup with `true` or `false`\n * semantics. Pair with `[kjConfirmPopupTrigger]` (which composes\n * `[kjPopoverTrigger]`) on the same element so popover wiring lives in the\n * same injector.\n *\n * **Note (overlay primitives migration):** This wrapper now reads the\n * controller's open state directly. The previous `KJ_POPOVER` context was\n * removed; ARIA promotion to `alertdialog` happens in\n * `[kjConfirmPopupContent]`.\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjConfirmPopup]',\n standalone: true,\n exportAs: 'kjConfirmPopup',\n providers: [\n { provide: KJ_CONFIRM_POPUP, useExisting: KjConfirmPopup },\n ],\n})\nexport class KjConfirmPopup implements KjConfirmPopupContext {\n /** The overlay controller provided by the trigger directive on the same element. */\n private readonly controller = inject(KjOverlayController, { optional: true });\n\n /** When `true`, the confirm action renders with destructive intent. */\n readonly kjDestructive = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Where to place initial focus. Default `'cancel'`. */\n readonly kjDefaultFocus = input<KjConfirmPopupDefaultFocus>('cancel');\n\n /** Emits when the user confirms (clicks the confirm action). */\n readonly kjConfirmed = output<void>();\n\n /** Emits when the user cancels (cancel button, Escape, or outside-click). */\n readonly kjCancelled = output<void>();\n\n /** Emits the boolean result on every close. `true` confirm, `false` cancel. */\n readonly kjResult = output<boolean>();\n\n // ── KjConfirmPopupContext ──────────────────────────────────────────\n\n /** Open state forwarded from the underlying controller. */\n readonly open = (() => {\n const ctrl = this.controller;\n return ctrl ? ctrl.isOpen : (() => false) as never;\n })();\n\n /** Whether the confirm action should render destructively. */\n readonly destructive = this.kjDestructive;\n\n /** Resolved default focus target. */\n readonly defaultFocus = this.kjDefaultFocus;\n\n /** Stable id used for the panel's `aria-describedby`. */\n readonly messageId = nextConfirmPopupMessageId();\n\n private resolved = false;\n private wasOpen = false;\n\n constructor() {\n // Bridge the controller's open signal into the resolution contract.\n effect(() => {\n const isOpen = this.controller?.isOpen() ?? false;\n if (isOpen && !this.wasOpen) {\n this.resolved = false;\n }\n if (!isOpen && this.wasOpen && !this.resolved) {\n this.resolved = true;\n this.kjCancelled.emit();\n this.kjResult.emit(false);\n }\n this.wasOpen = isOpen;\n });\n }\n\n /**\n * Close the popup with the given result. `true` confirms, `false` cancels.\n */\n close(result: boolean): void {\n if (!this.controller || !this.controller.isOpen()) return;\n this.resolved = true;\n if (result) this.kjConfirmed.emit();\n else this.kjCancelled.emit();\n this.kjResult.emit(result);\n this.controller.close('programmatic');\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { KjPopoverTrigger } from '../popover/popover-trigger';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport type { KjOverlayController } from '../primitives/overlay/controller';\n\n/**\n * The button that toggles the confirm popup. Composes `KjPopoverTrigger` via\n * `hostDirectives` for the trigger contract — `aria-haspopup`,\n * `aria-expanded`, `aria-controls`, click toggling.\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjConfirmPopupTrigger]',\n standalone: true,\n exportAs: 'kjConfirmPopupTrigger',\n hostDirectives: [KjPopoverTrigger],\n})\nexport class KjConfirmPopupTrigger {\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n\n /** Forwarded controller for sibling `[kjFor]` panels. */\n get controller(): KjOverlayController {\n return this._overlayTrigger.controller;\n }\n\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n","import {\n DestroyRef,\n Directive,\n PLATFORM_ID,\n effect,\n inject,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjPopoverContent } from '../popover/popover-content';\nimport {\n KJ_CONFIRM_POPUP,\n type KjConfirmPopupContext,\n} from './confirm-popup.context';\n\n/**\n * The floating confirm popup panel. Composes `kj-popover-content` (a\n * component) so the entire transport — portal mount, anchor positioning\n * with flip / shift, outside-click and Escape close, focus restoration —\n * is reused.\n *\n * Layered on top: promotes the panel role from `dialog` to `alertdialog`\n * (per WAI-ARIA APG, `alertdialog` causes assistive tech to interrupt and\n * announce the panel — the right semantic for a destructive confirmation),\n * keeps `aria-modal=\"false\"`, wires `aria-describedby` to the projected\n * `[kjConfirmPopupMessage]`, and moves initial focus to the configured\n * default-focus button (cancel by default, WCAG 3.3.4 *Error Prevention*).\n *\n * **Note (overlay primitives migration):** `KjPopoverContent` is now a\n * component (not a directive); use the `<kj-popover-content>` selector for\n * the actual panel and apply this directive on the same element to layer\n * the alertdialog promotion.\n *\n * ```html\n * <kj-popover-content kjConfirmPopupContent [kjFor]=\"t\">\n * <p kjConfirmPopupMessage>Delete this row?</p>\n * <button kjConfirmPopupCancel>Cancel</button>\n * <button kjConfirmPopupAction>Delete</button>\n * </kj-popover-content>\n * ```\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjConfirmPopupContent]',\n standalone: true,\n exportAs: 'kjConfirmPopupContent',\n})\nexport class KjConfirmPopupContent {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n private readonly ctx = inject<KjConfirmPopupContext>(KJ_CONFIRM_POPUP);\n private readonly _panel = inject(KjOverlayPanel, { optional: true });\n private get controller(): KjOverlayController | null {\n return this._panel?.controller ?? null;\n }\n /** Optional reference — present when the host is `<kj-popover-content>`. */\n private readonly popoverContent = inject(KjPopoverContent, { self: true, optional: true });\n\n constructor() {\n if (!isPlatformBrowser(this.platformId)) return;\n\n let lastOpen = false;\n const eff = effect(() => {\n const open = this.ctx.open();\n if (open && !lastOpen) {\n lastOpen = true;\n queueMicrotask(() => this.promoteRole());\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => this.focusDefault());\n }\n } else if (!open && lastOpen) {\n lastOpen = false;\n }\n });\n this.destroyRef.onDestroy(() => eff.destroy());\n // Touch the optional popover-content reference so unused-variable lint\n // stays quiet in the no-op branch.\n void this.popoverContent;\n }\n\n private findPanel(): HTMLElement | null {\n return this.controller?.panelEl() ?? null;\n }\n\n private promoteRole(): void {\n const panel = this.findPanel();\n if (!panel) return;\n panel.setAttribute('role', 'alertdialog');\n panel.setAttribute('aria-modal', 'false');\n panel.setAttribute('aria-describedby', this.ctx.messageId);\n }\n\n private focusDefault(): void {\n const panel = this.findPanel();\n if (!panel) return;\n panel.setAttribute('role', 'alertdialog');\n panel.setAttribute('aria-modal', 'false');\n panel.setAttribute('aria-describedby', this.ctx.messageId);\n\n const which = this.ctx.defaultFocus();\n const sel =\n which === 'cancel' ? '[kjConfirmPopupCancel]' : '[kjConfirmPopupAction]';\n const target = panel.querySelector<HTMLElement>(sel);\n if (!target) return;\n try {\n target.focus();\n } catch {\n /* ignore */\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport {\n KJ_CONFIRM_POPUP,\n type KjConfirmPopupContext,\n} from './confirm-popup.context';\n\n/**\n * Marks the body / message element inside the confirm popup. Sets the host\n * `id` to the context's `messageId` so `[kjConfirmPopupContent]` can wire\n * `aria-describedby` on the panel.\n *\n * **Required for accessibility.** The WAI-ARIA `alertdialog` pattern requires\n * a description; the panel's `aria-describedby` is wired to this element's\n * id via the confirm popup context.\n *\n * @example\n * ```html\n * <ng-template kjConfirmPopupContent>\n * <p kjConfirmPopupMessage>Delete this row? This cannot be undone.</p>\n * …\n * </ng-template>\n * ```\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjConfirmPopupMessage]',\n standalone: true,\n host: {\n 'class': 'kj-confirm-popup-message',\n '[attr.id]': 'ctx.messageId',\n },\n})\nexport class KjConfirmPopupMessage {\n protected readonly ctx = inject<KjConfirmPopupContext>(KJ_CONFIRM_POPUP);\n}\n","import { Directive, inject } from '@angular/core';\nimport {\n KJ_CONFIRM_POPUP,\n type KjConfirmPopupContext,\n} from './confirm-popup.context';\n\n/**\n * The confirm action button slot. Click resolves the popup with `true`,\n * emitting `(kjConfirmed)` on the parent `[kjConfirmPopup]`.\n *\n * Reflects the parent context's `destructive` flag via `data-destructive`\n * so the styled wrapper can switch the button colour token / focus ring\n * with a single attribute selector.\n *\n * @example\n * ```html\n * <button kjConfirmPopupAction>Delete</button>\n * ```\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjConfirmPopupAction]',\n standalone: true,\n exportAs: 'kjConfirmPopupAction',\n host: {\n 'data-kj-confirm-popup-action': '',\n '[attr.data-destructive]': 'ctx.destructive() ? \"\" : null',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjConfirmPopupAction {\n protected readonly ctx = inject<KjConfirmPopupContext>(KJ_CONFIRM_POPUP);\n\n protected onClick(event: MouseEvent): void {\n event.stopPropagation();\n this.ctx.close(true);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport {\n KJ_CONFIRM_POPUP,\n type KjConfirmPopupContext,\n} from './confirm-popup.context';\n\n/**\n * The cancel action button slot. Click resolves the popup with `false`,\n * emitting `(kjCancelled)` on the parent `[kjConfirmPopup]`.\n *\n * Receives initial focus by default (configurable via the parent's\n * `kjDefaultFocus`) — WCAG 3.3.4 *Error Prevention*. Confirm popups must\n * default to the safe action.\n *\n * @example\n * ```html\n * <button kjConfirmPopupCancel>Cancel</button>\n * ```\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjConfirmPopupCancel]',\n standalone: true,\n exportAs: 'kjConfirmPopupCancel',\n host: {\n 'data-kj-confirm-popup-cancel': '',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjConfirmPopupCancel {\n protected readonly ctx = inject<KjConfirmPopupContext>(KJ_CONFIRM_POPUP);\n\n protected onClick(event: MouseEvent): void {\n event.stopPropagation();\n this.ctx.close(false);\n }\n}\n","import {\n Directive,\n ElementRef,\n InjectionToken,\n booleanAttribute,\n inject,\n input,\n output,\n signal,\n type Signal,\n} from '@angular/core';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport { onClick } from '../primitives/overlay/strategies/trigger-event/on-click';\nimport { onContextMenu } from '../primitives/overlay/strategies/trigger-event/on-context-menu';\n\n/** Trigger event mode. `'click'` (default) or `'contextmenu'` (right-click / long-press). */\nexport type KjDropdownMenuTriggerKind = 'click' | 'contextmenu';\n\n/** How and where the panel mounts: portal (default), at a point, or inline (in-place). */\nexport type KjDropdownMenuMount = 'portal' | 'point' | 'inline';\n\n/** Reason a dropdown menu close was requested. */\nexport type KjDropdownMenuCloseReason =\n | 'item'\n | 'escape'\n | 'tab'\n | 'click-outside'\n | 'programmatic';\n\n/**\n * Minimal context surface consumed by item-level directives\n * (`KjDropdownMenuItem`, etc.). The trigger directive provides this token.\n */\nexport interface KjDropdownMenuContext {\n readonly closeOnSelect: Signal<boolean>;\n hide(reason: KjDropdownMenuCloseReason): void;\n}\n\n/** DI token for the dropdown menu shared context (item-level). */\nexport const KJ_DROPDOWN_MENU = new InjectionToken<KjDropdownMenuContext>(\n 'KjDropdownMenu',\n);\n\nlet _labelIdCounter = 0;\n/** Allocate a stable label id for `aria-labelledby` wiring on a group. */\nexport function nextDropdownMenuLabelId(): string {\n return `kj-dropdown-menu-label-${++_labelIdCounter}`;\n}\n\n/**\n * The button that opens a dropdown menu. Composes `KjOverlayTrigger`.\n *\n * `kjTrigger` switches between `onClick()` (default) and `onContextMenu()`\n * (replacement for the old `KjContextMenuTrigger`). For `kjMount=\"point\"`,\n * the trigger captures the originating pointer coords into signals consumed\n * by `pointAt()` in the content component.\n *\n * Wires `aria-haspopup=\"menu\"`, `aria-expanded`, `aria-controls` via the\n * underlying `KjOverlayTrigger` host directive.\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjDropdownMenuTrigger]',\n exportAs: 'kjDropdownMenuTrigger',\n standalone: true,\n hostDirectives: [{ directive: KjOverlayTrigger, inputs: ['kjOpen'] }],\n providers: [\n KjOverlayController,\n {\n provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n // MVP: resolve at construction. `contextmenu` consumers should set\n // `kjTrigger=\"contextmenu\"` declaratively at construction time.\n useFactory: () => {\n // Read input attribute on the host element synchronously to pick the\n // strategy. Falls back to click.\n const el = inject(ElementRef<HTMLElement>).nativeElement as HTMLElement;\n const kind = el.getAttribute('kjTrigger') ?? el.getAttribute('kjtrigger');\n return kind === 'contextmenu' ? onContextMenu({ longPressMs: 500 }) : onClick();\n },\n },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'menu' as const },\n { provide: KJ_DROPDOWN_MENU, useExisting: KjDropdownMenuTrigger },\n ],\n host: {\n '(click)': 'onPointer($event)',\n '(contextmenu)': 'onPointer($event)',\n },\n})\nexport class KjDropdownMenuTrigger implements KjDropdownMenuContext {\n /** Public — read by sibling `[kjFor]` panels. */\n readonly controller = inject(KjOverlayController);\n\n /** Trigger event kind. */\n readonly kjTrigger = input<KjDropdownMenuTriggerKind>('click');\n\n /** Mount mode for the content panel. */\n readonly kjMount = input<KjDropdownMenuMount>('portal');\n\n /** Suppresses opening entirely. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Whether item activation closes the menu by default. */\n readonly kjCloseOnSelect = input(true, { transform: booleanAttribute });\n\n /** Emitted when the menu closes, with the reason. */\n readonly kjMenuClosed = output<KjDropdownMenuCloseReason>();\n\n /** Captured pointer coordinates for `kjMount=\"point\"`. */\n readonly kjPointX = signal<number>(0);\n readonly kjPointY = signal<number>(0);\n\n /** Mirror exposed to item directives via `KJ_DROPDOWN_MENU`. */\n readonly closeOnSelect = this.kjCloseOnSelect;\n\n /** Capture pointer coords for point-mount; the strategy reads them. */\n protected onPointer(e: MouseEvent): void {\n if (this.kjMount() === 'point') {\n this.kjPointX.set(e.clientX);\n this.kjPointY.set(e.clientY);\n }\n }\n\n /** Item-driven close (`KJ_DROPDOWN_MENU.hide`). */\n hide(reason: KjDropdownMenuCloseReason): void {\n this.controller.close('programmatic');\n this.kjMenuClosed.emit(reason);\n }\n\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n","import {\n Directive,\n contentChildren,\n forwardRef,\n inject,\n signal,\n} from '@angular/core';\nimport {\n KJ_LIST_NAVIGATOR_CONFIG,\n KjListItem,\n type KjCompareFn,\n type KjListNavigatorConfig,\n} from '../primitives/list';\nimport {\n KJ_DROPDOWN_MENU,\n type KjDropdownMenuContext,\n} from './dropdown-menu-trigger';\n\n/**\n * Root container for a dropdown menu's projected items. Used by consumers\n * that render the panel content inline (e.g. inside a `<ng-template>` passed\n * to `[kjDropdownMenuTriggerFor]` from `KjMenubar`) instead of through the\n * `<kj-dropdown-menu-content>` component.\n *\n * Implements {@link KjListNavigatorConfig} so that any `KjListNavigator`\n * mounted on a wrapping panel can discover the projected `KjListItem`s and\n * drive WAI-ARIA APG menu keyboard navigation (Up/Down/Home/End/type-ahead)\n * + roving DOM focus. A menu has no selection model — items are actions —\n * so `value` / `mode` are omitted from the config. The `afterSelect` hook\n * closes the surrounding overlay (universal menu UX).\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjDropdownMenu]',\n standalone: true,\n exportAs: 'kjDropdownMenu',\n providers: [\n { provide: KJ_LIST_NAVIGATOR_CONFIG, useExisting: forwardRef(() => KjDropdownMenu) },\n ],\n})\nexport class KjDropdownMenu implements KjListNavigatorConfig {\n /** All `KjListItem`s under this root. Source of truth for nav + type-ahead. */\n readonly items = contentChildren(KjListItem, { descendants: true });\n\n /** Menu items are actions — no selection model. Kept as `Object.is`. */\n readonly compareBy = signal<KjCompareFn<unknown>>(Object.is as KjCompareFn<unknown>);\n\n /** Parent menu context (trigger or content), if any. Drives close-on-activate. */\n private readonly ctx = inject<KjDropdownMenuContext>(KJ_DROPDOWN_MENU, { optional: true });\n\n /**\n * Universal menu UX: any item activation closes the menu. `KjListItem`\n * calls this with `closeRequested=false` since no `KjSelectionModel` is\n * provided — we override the flag and always close.\n */\n afterSelect(_value: unknown, _closeRequested: boolean): void {\n this.ctx?.hide('item');\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n Injector,\n computed,\n contentChildren,\n effect,\n forwardRef,\n inject,\n input,\n signal,\n untracked,\n} from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport type {\n KjMountStrategy,\n KjPositionStrategy,\n} from '../primitives/overlay/tokens';\nimport type { KjOverlayContext } from '../primitives/overlay/context';\nimport type { KjSide, KjAlign } from '../primitives/overlay/types';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { inPlace } from '../primitives/overlay/strategies/mount/in-place';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\nimport { pointAt } from '../primitives/overlay/strategies/position/point-at';\nimport { inPlaceSibling } from '../primitives/overlay/strategies/position/in-place-sibling';\nimport {\n KJ_LIST_FOCUS_MODE,\n KJ_LIST_NAVIGATOR_CONFIG,\n KjListItem,\n KjListNavigator,\n KjTypeAhead,\n type KjCompareFn,\n type KjListFocusMode,\n type KjListNavigatorConfig,\n} from '../primitives/list';\nimport {\n KjDropdownMenuTrigger,\n KJ_DROPDOWN_MENU,\n type KjDropdownMenuCloseReason,\n type KjDropdownMenuContext,\n} from './dropdown-menu-trigger';\n\ntype KjDeferredMount = KjMountStrategy & { setDelegate(d: KjMountStrategy): void };\ntype KjDeferredPosition = KjPositionStrategy & { setDelegate(d: KjPositionStrategy): void };\n\nfunction deferredMount(): KjDeferredMount {\n let ctx: KjOverlayContext | null = null;\n let delegate: KjMountStrategy | null = null;\n let attached = false;\n let opened = false;\n return {\n get portalled() { return delegate?.portalled ?? true; },\n attach(c) { ctx = c; attached = true; if (delegate) delegate.attach(c); },\n onOpen() { opened = true; delegate?.onOpen?.(); },\n onClose() { opened = false; delegate?.onClose?.(); },\n detach() { delegate?.detach(); ctx = null; attached = false; },\n resolveContainer() {\n const from = delegate?.resolveContainer();\n if (from) return from;\n if (typeof document === 'undefined') return null as unknown as HTMLElement;\n return document.body;\n },\n setDelegate(d) {\n delegate = d;\n if (attached && ctx) d.attach(ctx);\n if (opened) d.onOpen?.();\n },\n };\n}\n\nfunction deferredPosition(): KjDeferredPosition {\n let ctx: KjOverlayContext | null = null;\n let delegate: KjPositionStrategy | null = null;\n let attached = false;\n let opened = false;\n return {\n attach(c) { ctx = c; attached = true; if (delegate) delegate.attach(c); },\n onOpen() { opened = true; delegate?.onOpen?.(); },\n onClose() { opened = false; delegate?.onClose?.(); },\n update() { delegate?.update(); },\n detach() { delegate?.detach(); ctx = null; attached = false; },\n setDelegate(d) {\n delegate = d;\n if (attached && ctx) d.attach(ctx);\n if (opened) d.onOpen?.();\n },\n };\n}\n\n/**\n * The dropdown-menu content panel. Composes `KjOverlayPanel` and dispatches\n * mount + position strategies based on `kjMount`:\n *\n * - `'portal'` (default) — `bodyPortal()` + `anchoredTo(trigger, side, align)`\n * - `'point'` — `bodyPortal()` + `pointAt({x, y})` (right-click / context-menu)\n * - `'inline'` — `inPlace()` + `inPlaceSibling()`\n *\n * Sets `role=\"menu\"` via the panel role token. Composes\n * `KjListNavigator{kjOrientation:'vertical', kjFocusMode:'roving'}` and\n * provides `KjTypeAhead`, so projected `[kjDropdownMenuItem]`s get the\n * full WAI-ARIA APG menu keyboard contract (Up/Down/Home/End/type-ahead)\n * + roving DOM focus for free. Implements {@link KjListNavigatorConfig}\n * — items are actions, no selection model.\n *\n * @doc-category Core/Overlay\n */\n@Component({\n selector: 'kj-dropdown-menu-content',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayPanel, inputs: ['kjFor'] },\n {\n directive: KjListNavigator,\n inputs: ['kjOrientation', 'kjFocusMode'],\n },\n ],\n providers: [\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'menu' as const },\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => deferredMount() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => deferredPosition() },\n { provide: KJ_DROPDOWN_MENU, useExisting: KjDropdownMenuContent },\n { provide: KJ_LIST_NAVIGATOR_CONFIG, useExisting: forwardRef(() => KjDropdownMenuContent) },\n // Force roving focus mode at the element injector. `KjListNavigator`\n // also provides this token (driven by its own `kjFocusMode` input,\n // which defaults to `'activedescendant'`). Overriding here means\n // `KjListItem`s under this content compute their `tabindex` from a\n // signal that always reads `'roving'` — independent of whether the\n // consumer remembered to set `kjFocusMode` on the navigator.\n {\n provide: KJ_LIST_FOCUS_MODE,\n useFactory: () => signal<KjListFocusMode>('roving'),\n },\n KjTypeAhead,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'kj-dropdown-menu',\n // The KjListNavigator host directive reads `kjOrientation` and\n // `kjFocusMode` as signal inputs; setting the matching static\n // attributes here seeds their initial values for the menu pattern\n // (vertical orientation + roving DOM focus per WAI-ARIA APG).\n 'kjOrientation': 'vertical',\n 'kjFocusMode': 'roving',\n '(keydown.escape)': 'onEscape($event)',\n },\n template: `<ng-content />`,\n})\nexport class KjDropdownMenuContent implements KjDropdownMenuContext, KjListNavigatorConfig {\n readonly kjSide = input<KjSide>('bottom');\n readonly kjAlign = input<KjAlign>('start');\n readonly kjMount = input<'portal' | 'point' | 'inline'>('portal');\n\n // ── KjListNavigatorConfig ────────────────────────────────────────────\n /** All `KjListItem`s projected into the menu panel. */\n readonly items = contentChildren(KjListItem, { descendants: true });\n /** Menu items are actions — no selection model. Kept as `Object.is`. */\n readonly compareBy = signal<KjCompareFn<unknown>>(Object.is as KjCompareFn<unknown>);\n /**\n * Universal menu UX: any item activation closes the menu. `KjListItem`\n * calls this with `closeRequested=false` since no `KjSelectionModel` is\n * provided — we override the flag and always close.\n */\n afterSelect(_value: unknown, _closeRequested: boolean): void {\n this.hide('item');\n }\n\n private readonly _injector = inject(Injector);\n private _panelCache: KjOverlayPanel | null | undefined = undefined;\n private get _panel(): KjOverlayPanel | null {\n if (this._panelCache === undefined) {\n this._panelCache = this._injector.get(KjOverlayPanel, null);\n }\n return this._panelCache;\n }\n\n /** Mirror of trigger's closeOnSelect — defaults to true; trigger overrides via its own provider. */\n readonly closeOnSelect = computed(() => true);\n\n /** Item-driven close. Routes through the panel's controller (resolved via `kjFor`). */\n hide(_reason: KjDropdownMenuCloseReason): void {\n this._panel?.controller?.close('programmatic');\n }\n\n /** Escape key — closes the menu. KjListNavigator does not own Escape. */\n protected onEscape(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.hide('escape');\n }\n\n /**\n * Lazily-resolved reference to the composed `KjListNavigator`. Resolved\n * inside effects (not at construction) to avoid the\n * `KjListNavigator <-> KJ_LIST_NAVIGATOR_CONFIG (useExisting this) <-> KjListNavigator`\n * NG0200 cycle that synchronous injection of `KjListNavigator` would\n * trigger at the element injector.\n */\n private _navCache: KjListNavigator | null = null;\n private getNav(): KjListNavigator | null {\n if (this._navCache) return this._navCache;\n this._navCache = this._injector.get(KjListNavigator, null, { self: true });\n return this._navCache;\n }\n\n constructor() {\n const mount = inject(KJ_OVERLAY_MOUNT_STRATEGY) as KjDeferredMount;\n const position = inject(KJ_OVERLAY_POSITION_STRATEGY) as KjDeferredPosition;\n const trigDir = inject(KjDropdownMenuTrigger, { optional: true });\n const m = this.kjMount();\n if (m === 'inline') {\n mount.setDelegate(inPlace());\n position.setDelegate(inPlaceSibling());\n } else if (m === 'point' && trigDir) {\n mount.setDelegate(bodyPortal());\n position.setDelegate(pointAt({ x: trigDir.kjPointX, y: trigDir.kjPointY }));\n } else {\n mount.setDelegate(bodyPortal());\n position.setDelegate(anchoredTo({ side: this.kjSide, align: this.kjAlign }));\n }\n\n // Roving seed: when nothing is active yet (e.g. just-opened menu),\n // point the navigator at the first non-disabled item so its host\n // gets `tabindex=0` and is reachable by Tab. Mirrors the seed effect\n // inside `KjListNavigator` for the `'roving'` focus mode — needed\n // here because the navigator's own seed gates on `kjFocusMode()`,\n // which stays at the directive's default `'activedescendant'`\n // (host-directive inputs cannot be defaulted from this component).\n effect(() => {\n const items = this.items();\n const nav = this.getNav();\n if (!nav) return;\n if (nav.activeId() !== null) return;\n const first = items.find(i => !i.disabled());\n if (first) untracked(() => nav.setActive(first.id));\n });\n\n // Roving focus follow: move DOM focus onto the active item's host.\n // Same rationale as the seed effect — the navigator's own\n // focus-follow effect gates on `kjFocusMode() === 'roving'`.\n effect(() => {\n const nav = this.getNav();\n if (!nav) return;\n const item = nav.activeItem();\n if (!item) return;\n const host = item._host();\n if (host && typeof document !== 'undefined' && document.activeElement !== host) {\n untracked(() => host.focus());\n }\n });\n }\n}\n","import {\n Directive,\n output,\n} from '@angular/core';\nimport { KjListItem, injectListItem } from '../primitives/list';\n\n/**\n * An individual item inside a `[kjDropdownMenu]` panel.\n *\n * Apply on a `<button>`. Sets `role=\"menuitem\"` and composes `KjListItem`\n * for id, value, label, disabled state, click + Enter/Space activation,\n * `aria-disabled`, and (via the surrounding `KjListNavigator` in roving\n * mode) `tabindex` driven by the active-item state.\n *\n * Activation flows through `KjListItem._activate` → root config's\n * `afterSelect` hook → overlay close. This directive only contributes\n * `role=\"menuitem\"`, the `kj-dropdown-menu-item` class, the `kj*` input\n * aliases, and re-emits the composed `activate` output as `kjSelect`.\n *\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjDropdownMenuItem]',\n standalone: true,\n hostDirectives: [\n {\n directive: KjListItem,\n inputs: [\n 'kjItemLabel:kjLabel',\n 'kjShortcut:kjShortcut',\n 'kjDisabled:kjDisabled',\n ],\n },\n ],\n host: {\n 'class': 'kj-dropdown-menu-item',\n 'role': 'menuitem',\n },\n})\nexport class KjDropdownMenuItem {\n private readonly item = injectListItem<unknown>();\n\n /** Emitted when the item is activated (click / Enter / Space). */\n readonly kjSelect = output<void>();\n\n constructor() {\n // Forward the primitive's activation output so consumers can keep\n // listening to `(kjSelect)` exactly as before.\n this.item.activate.subscribe(() => this.kjSelect.emit());\n }\n}\n","import { Directive } from '@angular/core';\nimport { KjListSeparator } from '../primitives/list';\n\n/**\n * A non-focusable horizontal divider between groups of menu items.\n *\n * Composes the shared `KjListSeparator` primitive — sets\n * `role=\"separator\"` and `aria-orientation=\"horizontal\"`. The roving\n * navigator / type-ahead in `[kjDropdownMenu]` skips it because it isn't\n * a `KjListItem`.\n *\n * @example\n * ```html\n * <div kjDropdownMenuSeparator></div>\n * ```\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjDropdownMenuSeparator]',\n standalone: true,\n hostDirectives: [KjListSeparator],\n host: {\n 'class': 'kj-dropdown-menu-separator',\n 'tabindex': '-1',\n },\n})\nexport class KjDropdownMenuSeparator {}\n","import { Directive, inject } from '@angular/core';\nimport { KjListGroupLabel } from '../primitives/list';\n\n/**\n * A non-interactive heading inside a `[kjDropdownMenu]` panel.\n *\n * Composes the shared `KjListGroupLabel` primitive, which mints a stable\n * id and registers it with the surrounding `[kjDropdownMenuGroup]`\n * (composing `KjListGroup`) so screen readers announce the group with\n * the label's text content via `aria-labelledby`.\n *\n * Sets `role=\"presentation\"` — the label is heading text, not a\n * focusable item, and the surrounding navigator skips it.\n *\n * @example\n * ```html\n * <span kjDropdownMenuLabel>Account</span>\n * ```\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjDropdownMenuLabel]',\n standalone: true,\n exportAs: 'kjDropdownMenuLabel',\n hostDirectives: [\n { directive: KjListGroupLabel, inputs: ['kjId'] },\n ],\n host: {\n 'class': 'kj-dropdown-menu-label',\n 'role': 'presentation',\n },\n})\nexport class KjDropdownMenuLabel {\n /** Composed label primitive — exposes the resolved id. */\n private readonly label = inject(KjListGroupLabel, { self: true });\n\n /** Stable id used by a wrapping `[kjDropdownMenuGroup]` for `aria-labelledby`. */\n get id(): string {\n return this.label.id();\n }\n}\n","import { Directive } from '@angular/core';\nimport { KjListGroup } from '../primitives/list';\n\n/**\n * A logical grouping of items inside a `[kjDropdownMenu]` panel.\n *\n * Composes the shared `KjListGroup` primitive — `role=\"group\"`,\n * auto-`aria-labelledby` wiring to a child `[kjDropdownMenuLabel]`, and\n * auto-hide when every child item is filter-hidden.\n *\n * @example\n * ```html\n * <div kjDropdownMenuGroup>\n * <span kjDropdownMenuLabel>Account</span>\n * <button kjDropdownMenuItem>Profile</button>\n * <button kjDropdownMenuItem>Settings</button>\n * </div>\n * ```\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjDropdownMenuGroup]',\n standalone: true,\n hostDirectives: [\n { directive: KjListGroup, inputs: ['kjId'] },\n ],\n host: {\n 'class': 'kj-dropdown-menu-group',\n },\n})\nexport class KjDropdownMenuGroup {}\n","import { InjectionToken, type Signal } from '@angular/core';\n\n/** Direction the action cluster fans out from the trigger. */\nexport type KjSpeedDialDirection = 'up' | 'down' | 'left' | 'right';\n\n/**\n * Shared state surface exposed by `[kjSpeedDial]` to its trigger, container\n * and action descendants. Injected via {@link KJ_SPEED_DIAL}.\n */\nexport interface KjSpeedDialContext {\n /** Whether the action cluster is currently expanded. */\n readonly expanded: Signal<boolean>;\n /** Disabled state — when true, opening is suppressed. */\n readonly disabled: Signal<boolean>;\n /** Direction the cluster fans out from the trigger. */\n readonly direction: Signal<KjSpeedDialDirection>;\n /** Auto-generated id for the action container, used by `aria-controls`. */\n readonly contentId: string;\n /** Open the cluster. */\n open(): void;\n /** Close the cluster. */\n close(): void;\n /** Toggle the cluster. */\n toggle(): void;\n}\n\n/** DI token for the shared speed-dial state. */\nexport const KJ_SPEED_DIAL = new InjectionToken<KjSpeedDialContext>('KJ_SPEED_DIAL');\n\nlet nextSpeedDialId = 0;\n\n/** @internal Generates a unique id for each speed-dial instance. */\nexport function nextKjSpeedDialId(): string {\n nextSpeedDialId += 1;\n return `kj-speed-dial-${nextSpeedDialId}`;\n}\n","import {\n Directive,\n booleanAttribute,\n computed,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\nimport {\n KJ_SPEED_DIAL,\n type KjSpeedDialContext,\n type KjSpeedDialDirection,\n nextKjSpeedDialId,\n} from './speed-dial.context';\n\n/**\n * Root container for a Speed Dial / FAB.\n *\n * A Speed Dial is a viewport-anchored floating action button that, when\n * activated, fans out a cluster of secondary action buttons. This directive\n * owns the open/closed state and exposes it to descendant trigger, container\n * and action directives via the {@link KJ_SPEED_DIAL} injection token.\n *\n * Reflects `data-direction`, `data-expanded` and `data-disabled` host\n * attributes for the styled wrapper to drive its layout and animation.\n *\n * @example\n * ```html\n * <div kjSpeedDial kjDirection=\"up\">\n * <button kjButton kjSpeedDialTrigger aria-label=\"Open menu\">+</button>\n * <div kjSpeedDialActions>\n * <button kjButton kjSpeedDialAction aria-label=\"Edit\">E</button>\n * <button kjButton kjSpeedDialAction aria-label=\"Share\">S</button>\n * </div>\n * </div>\n * ```\n *\n * @doc-category Core/Actions\n * @doc\n * @doc-name speed-dial\n * @doc-description Unstyled speed dial root that owns open state and fan-out direction for trigger and action children.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjSpeedDial]',\n standalone: true,\n exportAs: 'kjSpeedDial',\n providers: [{ provide: KJ_SPEED_DIAL, useExisting: KjSpeedDial }],\n host: {\n '[attr.data-direction]': 'kjDirection()',\n '[attr.data-expanded]': 'expanded() ? \"\" : null',\n '[attr.data-disabled]': 'kjDisabled() ? \"\" : null',\n '(mouseenter)': 'onPointerEnter()',\n '(mouseleave)': 'onPointerLeave()',\n },\n})\nexport class KjSpeedDial implements KjSpeedDialContext {\n /** Direction the action cluster fans out from the trigger. */\n readonly kjDirection = input<KjSpeedDialDirection>('up');\n\n /** Two-way bindable expanded state. */\n // eslint-disable-next-line @angular-eslint/no-input-rename -- alias keeps the public `kjOpen` name distinct from this internal linkedSignal-backed property\n readonly kjOpenInput = input<boolean>(false, { alias: 'kjOpen' });\n readonly kjOpen = linkedSignal(this.kjOpenInput);\n\n /** Disables opening; if open, closes. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Open on hover (desktop only — coarse pointers always click-to-open). */\n readonly kjOpenOnHover = input(false, { transform: booleanAttribute });\n\n /** Convenience output paired with the `kjOpen` input, deduplicated against internal writes. */\n readonly kjOpenChange = output<boolean>();\n\n // ── KjSpeedDialContext fields ────────────────────────────────────────\n\n readonly contentId: string = nextKjSpeedDialId();\n readonly expanded = computed(() => this.kjOpen() && !this.kjDisabled());\n readonly disabled = computed(() => this.kjDisabled());\n readonly direction = computed(() => this.kjDirection());\n\n // Track the last value emitted to consumers so we don't double-emit when\n // an internal close is followed by the model effect.\n private readonly lastEmitted = signal<boolean>(false);\n\n // ── Mutations ────────────────────────────────────────────────────────\n\n open(): void {\n if (this.kjDisabled()) return;\n if (this.kjOpen()) return;\n this.kjOpen.set(true);\n if (this.lastEmitted() !== true) {\n this.lastEmitted.set(true);\n this.kjOpenChange.emit(true);\n }\n }\n\n close(): void {\n if (!this.kjOpen()) return;\n this.kjOpen.set(false);\n if (this.lastEmitted() !== false) {\n this.lastEmitted.set(false);\n this.kjOpenChange.emit(false);\n }\n }\n\n toggle(): void {\n if (this.kjOpen()) this.close();\n else this.open();\n }\n\n protected onPointerEnter(): void {\n if (!this.kjOpenOnHover()) return;\n if (this.kjDisabled()) return;\n if (typeof window !== 'undefined' && window.matchMedia?.('(pointer: coarse)').matches) {\n return;\n }\n this.open();\n }\n\n protected onPointerLeave(): void {\n if (!this.kjOpenOnHover()) return;\n if (this.kjDisabled()) return;\n this.close();\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { KJ_SPEED_DIAL, type KjSpeedDialContext } from './speed-dial.context';\n\n/**\n * The floating action button that toggles the Speed Dial open/closed.\n *\n * Apply alongside `kjButton` on a native `<button>` so the trigger inherits\n * the button presets (variant, size, focus ring, capture-phase disabled\n * suppression). The trigger itself contributes the menu-button ARIA wiring\n * (`aria-haspopup=\"menu\"`, `aria-expanded`, `aria-controls`) and the click\n * toggle semantics that drive the parent `[kjSpeedDial]`.\n *\n * @example\n * ```html\n * <div kjSpeedDial>\n * <button kjButton kjSpeedDialTrigger aria-label=\"Open actions\">+</button>\n * …\n * </div>\n * ```\n *\n * @doc-category Core/Actions\n * @doc\n * @doc-name speed-dial\n */\n@Directive({\n selector: '[kjSpeedDialTrigger]',\n standalone: true,\n exportAs: 'kjSpeedDialTrigger',\n host: {\n type: 'button',\n '[attr.aria-haspopup]': '\"menu\"',\n '[attr.aria-expanded]': 'ctx.expanded() ? \"true\" : \"false\"',\n '[attr.aria-controls]': 'ctx.contentId',\n '[attr.data-state]': 'ctx.expanded() ? \"open\" : \"closed\"',\n '(click)': 'onClick($event)',\n '(keydown.escape)': 'onEscape($event)',\n },\n})\nexport class KjSpeedDialTrigger {\n /** @internal */\n readonly ctx = inject<KjSpeedDialContext>(KJ_SPEED_DIAL);\n\n protected onClick(event: MouseEvent): void {\n if (this.ctx.disabled()) return;\n event.stopPropagation();\n this.ctx.toggle();\n }\n\n protected onEscape(event: Event): void {\n if (!this.ctx.expanded()) return;\n event.preventDefault();\n event.stopPropagation();\n this.ctx.close();\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { KJ_SPEED_DIAL, type KjSpeedDialContext } from './speed-dial.context';\n\n/**\n * Action cluster container for a Speed Dial.\n *\n * Holds `role=\"menu\"` and is hidden from the AT tree (and from layout via the\n * styled wrapper's CSS) when the dial is collapsed. Reflects `id`,\n * `data-direction`, `data-expanded` and `aria-hidden` for the wrapper to key\n * its layout / animation off of.\n *\n * @doc-category Core/Actions\n * @doc\n * @doc-name speed-dial\n */\n@Directive({\n selector: '[kjSpeedDialActions]',\n standalone: true,\n exportAs: 'kjSpeedDialActions',\n host: {\n role: 'menu',\n '[id]': 'ctx.contentId',\n '[attr.data-direction]': 'ctx.direction()',\n '[attr.data-expanded]': 'ctx.expanded() ? \"\" : null',\n '[attr.aria-hidden]': 'ctx.expanded() ? null : \"true\"',\n },\n})\nexport class KjSpeedDialActions {\n /** @internal */\n readonly ctx = inject<KjSpeedDialContext>(KJ_SPEED_DIAL);\n}\n","import { Directive, booleanAttribute, inject, input } from '@angular/core';\nimport { KJ_SPEED_DIAL, type KjSpeedDialContext } from './speed-dial.context';\n\n/**\n * One action button in a Speed Dial cluster.\n *\n * Apply alongside `kjButton` on a native `<button>` to inherit the button\n * presets. This directive contributes `role=\"menuitem\"` and closes the parent\n * dial after the consumer's click handler runs (controllable via\n * `kjCloseOnActivate`).\n *\n * @example\n * ```html\n * <button kjButton kjSpeedDialAction aria-label=\"Edit\" (click)=\"edit()\">E</button>\n * ```\n *\n * @doc-category Core/Actions\n * @doc\n * @doc-name speed-dial\n */\n@Directive({\n selector: '[kjSpeedDialAction]',\n standalone: true,\n exportAs: 'kjSpeedDialAction',\n host: {\n role: 'menuitem',\n '(click)': 'onClick()',\n },\n})\nexport class KjSpeedDialAction {\n private readonly ctx = inject<KjSpeedDialContext>(KJ_SPEED_DIAL);\n\n /** Whether activating this action should close the dial. Default `true`. */\n readonly kjCloseOnActivate = input(true, { transform: booleanAttribute });\n\n protected onClick(): void {\n if (!this.kjCloseOnActivate()) return;\n this.ctx.close();\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { KjToastPositionX, KjToastPositionY } from './toast.types';\n\n/**\n * Behaviour and layout defaults for the toast viewport. Strategies are provided\n * via DI — both the service (for duration default) and `[kjToastViewport]` (for\n * positioning, gap, max visible, expand-on-hover) inject this token.\n */\nexport interface KjToastStrategy {\n /** Cap on simultaneously-rendered toasts. Excess stays queued. */\n maxVisible: number;\n /** Pixel gap between stacked toasts — exposed as `--kj-toast-gap`. */\n gap: number;\n /** Base `z-index` for stacked toasts — exposed as `--kj-toast-z-index`. */\n baseZIndex: number;\n /** Horizontal anchor. */\n positionX: KjToastPositionX;\n /** Vertical anchor. */\n positionY: KjToastPositionY;\n /** Default auto-dismiss delay in ms. `0` = persistent. */\n duration: number;\n /** When `true`, the viewport flips `data-expanded` on `mouseenter` / `mouseleave`. */\n expandOnHover: boolean;\n /**\n * When `true`, the viewport pauses every in-flight auto-dismiss timer while\n * the pointer hovers it or focus is inside it. Required for WCAG 2.2.1 (AAA)\n * and 1.4.13 — without it, a user reaching for the toast's action button\n * may have it disappear underneath them. Distinct from `expandOnHover`,\n * which controls visual stacking only.\n */\n pauseOnHover: boolean;\n}\n\n/**\n * Sonner-inspired defaults: max 3 visible, stacked at the bottom-right,\n * expand on hover, 4s default duration, 14px gap. Matches the popular\n * [Sonner](https://sonner.emilkowal.ski) toast feel.\n */\nexport const KJ_TOAST_SONNER_STRATEGY: KjToastStrategy = Object.freeze({\n maxVisible: 3,\n gap: 14,\n baseZIndex: 100,\n positionX: 'end',\n positionY: 'bottom',\n duration: 4000,\n expandOnHover: true,\n pauseOnHover: true,\n});\n\n/**\n * Plain vertical list: unlimited visible, no hover expansion, standard 5s duration.\n * Closer to Material / Bootstrap-style \"stacked notifications\" with no fancy stacking.\n */\nexport const KJ_TOAST_LIST_STRATEGY: KjToastStrategy = Object.freeze({\n maxVisible: Number.POSITIVE_INFINITY,\n gap: 8,\n baseZIndex: 100,\n positionX: 'end',\n positionY: 'bottom',\n duration: 5000,\n expandOnHover: false,\n pauseOnHover: true,\n});\n\n/** DI token holding the active toast strategy. Defaults to `KJ_TOAST_SONNER_STRATEGY`. */\nexport const KJ_TOAST_STRATEGY = new InjectionToken<KjToastStrategy>('KjToastStrategy', {\n providedIn: 'root',\n factory: () => KJ_TOAST_SONNER_STRATEGY,\n});\n\n/**\n * Use Sonner-inspired stacking (3 visible, expand on hover, bottom-right).\n * Pass `overrides` to tweak any individual property without rewriting the rest.\n *\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideKjToastSonnerStrategy({ positionY: 'top' }),\n * ],\n * });\n * ```\n */\nexport function provideKjToastSonnerStrategy(overrides?: Partial<KjToastStrategy>): Provider {\n return {\n provide: KJ_TOAST_STRATEGY,\n useValue: { ...KJ_TOAST_SONNER_STRATEGY, ...overrides },\n };\n}\n\n/**\n * Use a plain vertical list (unlimited, no hover expansion).\n *\n * @example\n * ```ts\n * provideKjToastListStrategy({ maxVisible: 5, positionX: 'start' })\n * ```\n */\nexport function provideKjToastListStrategy(overrides?: Partial<KjToastStrategy>): Provider {\n return {\n provide: KJ_TOAST_STRATEGY,\n useValue: { ...KJ_TOAST_LIST_STRATEGY, ...overrides },\n };\n}\n\n/** Fully-custom strategy override. */\nexport function provideKjToastStrategy(strategy: KjToastStrategy): Provider {\n return {\n provide: KJ_TOAST_STRATEGY,\n useValue: strategy,\n };\n}\n","import type { KjOverlayController } from '../primitives/overlay/controller';\n\n/**\n * Reference returned from `KjToastService.show()` (and the variant sugar\n * methods). Owns the toast's overlay controller and its id, and exposes a\n * single `close()` method.\n *\n * Toast queue management (auto-dismiss timers, max-visible cap, pause/resume)\n * is owned by `KjToastService`; the ref is the per-toast handle returned to\n * callers.\n */\nexport class KjToastRef {\n constructor(\n /** Stable id for this toast — also used by the service's queue. */\n public readonly id: string,\n /** The overlay controller backing this toast's panel. */\n public readonly controller: KjOverlayController,\n private readonly _dismiss: (id: string) => void,\n ) {}\n\n /** Dismiss this toast. Idempotent. */\n close(): void {\n this._dismiss(this.id);\n this.controller.close('programmatic');\n }\n}\n","import { EnvironmentInjector, Injectable, TemplateRef, Type, effect, inject, runInInjectionContext, signal } from '@angular/core';\nimport { KjOverlayBuilder } from '../primitives/overlay/builder';\nimport { inPlace } from '../primitives/overlay/strategies/mount/in-place';\nimport { corner, type KjCornerPosition } from '../primitives/overlay/strategies/position/corner';\nimport { polite } from '../primitives/overlay/strategies/live-announcer/polite';\nimport { assertive } from '../primitives/overlay/strategies/live-announcer/assertive';\nimport { programmatic } from '../primitives/overlay/strategies/trigger-event/programmatic';\nimport { KJ_TOAST_STRATEGY } from './toast.strategy';\nimport { KjToastRef } from './toast.ref';\n\nexport type KjToastVariant = 'default' | 'success' | 'destructive' | 'warning';\n\n/** Variant tag accepted by the variant-sugar methods (`success`/`info`/`warn`/`error`). */\nexport type KjToastSugarVariant = 'success' | 'info' | 'warn' | 'error';\n\n/**\n * Shape `[kjToastDefaultTemplate]` and per-call templates receive via `ngTemplateOutlet`.\n * Inherits every `KjToastContext` field for `let-id=\"id\"`-style bindings, plus `$implicit`\n * for the canonical `<ng-template let-ctx>` form.\n */\nexport interface KjToastTemplateContext<TData = unknown> extends KjToastContext<TData> {\n $implicit: KjToastContext<TData>;\n}\n\n/** Context object passed to a toast template. Available via `let-ctx` (or `let-ctx=\"$implicit\"`). */\nexport interface KjToastContext<TData = unknown> {\n /** Unique id for this toast. */\n readonly id: string;\n /** Variant set when the toast was shown. */\n readonly variant: KjToastVariant;\n /** Plain text message — only set when shown via the string-based API. */\n readonly message?: string;\n /** Optional title set via options. */\n readonly title?: string;\n /** Arbitrary client payload set via options.data. Strongly typed via the TemplateRef generic. */\n readonly data?: TData;\n /** Dismiss this toast. Bound — safe to use directly in templates. */\n dismiss(): void;\n}\n\n/** Options for `KjToastService.show()` and the `success`/`error`/`warning`/`info` shorthands. */\nexport interface KjToastOptions<TData = unknown> {\n /** Override the auto-generated id. */\n id?: string;\n /** Optional title rendered above the message. */\n title?: string;\n /** Plain text message — set when not using a custom template. */\n message?: string;\n /** Visual / semantic variant. Defaults to `'default'`. */\n variant?: KjToastVariant;\n /** Auto-dismiss delay in ms. `0` = persistent. Defaults to `5000`. */\n duration?: number;\n /** Arbitrary payload exposed to the template via `ctx.data`. */\n data?: TData;\n /** Override the corner position used for the overlay. Defaults to `'bottom-right'`. */\n position?: KjCornerPosition;\n /** Optional component to mount as the toast body. */\n component?: Type<unknown>;\n /** Optional template for queue-based rendering through `<kj-toast-viewport>`. */\n template?: TemplateRef<KjToastTemplateContext<TData>>;\n}\n\n/** Internal queue item — tracked by the service, consumed by `KjToastViewport`. */\nexport interface KjToastItem<TData = unknown> {\n readonly id: string;\n readonly variant: KjToastVariant;\n readonly duration: number;\n readonly message?: string;\n readonly title?: string;\n readonly data?: TData;\n /** Per-call template, when shown via `show(template, …)`. Otherwise the viewport's default template renders. */\n readonly template?: TemplateRef<KjToastTemplateContext<TData>>;\n}\n\n/** Reasons that can hold the auto-dismiss timers in the paused state. Ref-counted. */\nexport type KjToastPauseReason = 'hover' | 'focus' | 'manual';\n\n/** Internal timer tracking for an in-flight toast — supports pause / resume. */\ninterface KjToastTimer {\n /** The active `setTimeout` handle, or `null` while paused. */\n handle: ReturnType<typeof setTimeout> | null;\n /** Original duration (ms) used to compute remaining on pause. */\n duration: number;\n /** When the current `setTimeout` was started. Used to compute remaining on pause. */\n startedAt: number;\n /** Time left to fire when paused. */\n remaining: number;\n}\n\nconst VARIANT_FROM_SUGAR: Record<KjToastSugarVariant, KjToastVariant> = {\n success: 'success',\n info: 'default',\n warn: 'warning',\n error: 'destructive',\n};\n\n/**\n * Programmatic API for toast notifications.\n *\n * Two ways to dispatch a toast:\n * - `show(opts)` (and the `success`/`info`/`warn`/`error` sugar) — overlay-based.\n * Each call creates an overlay via `KjOverlayBuilder`, anchored at the chosen\n * corner, returning a `KjToastRef` for programmatic dismissal.\n * - The legacy queue API (`show(message|template, options)` returning a string id)\n * is preserved so consumers using `<kj-toast-viewport>` to render their own\n * queue continue to work. Auto-dismiss + pause/resume + max-visible logic\n * lives on this service regardless of which entry-point a caller uses.\n *\n * @doc-category Core/Overlay\n */\n@Injectable({ providedIn: 'root' })\nexport class KjToastService {\n private readonly strategy = inject(KJ_TOAST_STRATEGY);\n private readonly builder = inject(KjOverlayBuilder);\n private readonly env = inject(EnvironmentInjector);\n private readonly _toasts = signal<KjToastItem[]>([]);\n /** Live list of active toasts. Read by `[kjToastViewport]`. */\n readonly toasts = this._toasts.asReadonly();\n\n private readonly timers = new Map<string, KjToastTimer>();\n\n /** Holds active overlay controllers keyed by toast id so dismiss can close them. */\n private readonly overlays = new Map<string, { close: () => void }>();\n\n /**\n * Ref-counted pause depth, keyed by reason. A timer is considered paused\n * while any reason holds a non-zero count.\n */\n private readonly pauseDepth = new Map<KjToastPauseReason, number>();\n\n /**\n * Overlay-based entry point. Builds an overlay via `KjOverlayBuilder` with\n * `bodyPortal` mount, `corner` positioning and a polite/assertive live\n * announcer based on the variant. Returns a `KjToastRef` whose `close()`\n * dismisses the toast and unwinds the overlay.\n */\n show<TData = unknown>(opts: KjToastOptions<TData>): KjToastRef;\n /** Show a toast with a plain text message. The viewport's default template renders it. */\n show(message: string, options?: KjToastOptions): string;\n /** Show a toast with a custom template. Returns the toast id. */\n show<TData = unknown>(template: TemplateRef<KjToastTemplateContext<TData>>, options?: KjToastOptions<TData>): string;\n show(\n arg: KjToastOptions | string | TemplateRef<KjToastTemplateContext>,\n options: KjToastOptions = {},\n ): KjToastRef | string {\n if (typeof arg === 'string') {\n return this.enqueue({ ...options, message: arg });\n }\n if (arg instanceof TemplateRef) {\n return this.enqueue({ ...options, template: arg });\n }\n return this.openOverlay(arg);\n }\n\n private openOverlay(opts: KjToastOptions): KjToastRef {\n const id = opts.id ?? crypto.randomUUID();\n const variant = opts.variant ?? 'default';\n const handle = this.builder.create({\n mount: inPlace(),\n position: corner({ position: opts.position ?? 'bottom-right' }),\n backdrop: null,\n focusTrap: null,\n scrollLock: null,\n liveAnnouncer: variant === 'destructive' ? assertive() : polite(),\n trigger: programmatic(),\n panelRole: variant === 'destructive' ? 'alert' : 'status',\n });\n\n if (opts.component) {\n this.builder.attachComponent(handle, opts.component, { data: opts.data });\n }\n\n runInInjectionContext(this.env, () => {\n let wasOpen = false;\n const eff = effect(() => {\n const s = handle.controller.state();\n if (s === 'open' || s === 'opening') wasOpen = true;\n if (s === 'closed' && wasOpen) {\n eff.destroy();\n queueMicrotask(() => handle.destroy());\n }\n });\n });\n\n this._toasts.update((ts) => [...ts, {\n id,\n variant,\n duration: opts.duration ?? this.strategy.duration,\n title: opts.title,\n message: opts.message,\n data: opts.data,\n template: opts.template,\n }]);\n\n const dismiss = (toastId: string) => this.dismiss(toastId);\n const ref = new KjToastRef(id, handle.controller, dismiss);\n this.overlays.set(id, { close: () => handle.controller.close('programmatic') });\n\n const duration = opts.duration ?? this.strategy.duration;\n if (duration > 0) this.startTimer(id, duration);\n handle.controller.open();\n return ref;\n }\n\n private enqueue(options: KjToastOptions): string {\n const id = options.id ?? crypto.randomUUID();\n const toast: KjToastItem = {\n id,\n variant: options.variant ?? 'default',\n duration: options.duration ?? this.strategy.duration,\n title: options.title,\n data: options.data,\n message: options.message,\n template: options.template,\n };\n this._toasts.update((ts) => [...ts, toast]);\n if (toast.duration > 0) this.startTimer(id, toast.duration);\n return id;\n }\n\n /** Show a success toast via the overlay-based API. */\n success<TData = unknown>(opts: Omit<KjToastOptions<TData>, 'variant'> = {}): KjToastRef {\n return this.openOverlay({ ...opts, variant: VARIANT_FROM_SUGAR.success });\n }\n /** Show an informational toast via the overlay-based API. */\n info<TData = unknown>(opts: Omit<KjToastOptions<TData>, 'variant'> = {}): KjToastRef {\n return this.openOverlay({ ...opts, variant: VARIANT_FROM_SUGAR.info });\n }\n /** Show a warning toast via the overlay-based API. */\n warn<TData = unknown>(opts: Omit<KjToastOptions<TData>, 'variant'> = {}): KjToastRef {\n return this.openOverlay({ ...opts, variant: VARIANT_FROM_SUGAR.warn });\n }\n /** Show an error toast via the overlay-based API. Uses `role=\"alert\"` + assertive announcement. */\n error<TData = unknown>(opts: Omit<KjToastOptions<TData>, 'variant'> = {}): KjToastRef {\n return this.openOverlay({ ...opts, variant: VARIANT_FROM_SUGAR.error });\n }\n\n /**\n * Pause every in-flight auto-dismiss timer, ref-counted by `reason`.\n * Required by WCAG 2.2.1 (Timing Adjustable, AAA) and 1.4.13.\n */\n pause(reason: KjToastPauseReason): void {\n const next = (this.pauseDepth.get(reason) ?? 0) + 1;\n this.pauseDepth.set(reason, next);\n if (next === 1 && this.totalPauseDepth() === 1) this.pauseAllTimers();\n }\n\n /** Decrement the ref-count for `reason`; re-arms timers when the total reaches zero. */\n resume(reason: KjToastPauseReason): void {\n const cur = this.pauseDepth.get(reason) ?? 0;\n if (cur === 0) return;\n const next = cur - 1;\n if (next === 0) this.pauseDepth.delete(reason);\n else this.pauseDepth.set(reason, next);\n if (this.totalPauseDepth() === 0) this.resumeAllTimers();\n }\n\n /** True while any pause reason is held. */\n isPaused(): boolean {\n return this.totalPauseDepth() > 0;\n }\n\n private totalPauseDepth(): number {\n let sum = 0;\n for (const v of this.pauseDepth.values()) sum += v;\n return sum;\n }\n\n private startTimer(id: string, duration: number): void {\n if (this.isPaused()) {\n this.timers.set(id, { handle: null, duration, startedAt: 0, remaining: duration });\n return;\n }\n const handle = setTimeout(() => this.dismiss(id), duration);\n this.timers.set(id, { handle, duration, startedAt: Date.now(), remaining: duration });\n }\n\n private pauseAllTimers(): void {\n for (const [id, t] of this.timers) {\n if (t.handle == null) continue;\n clearTimeout(t.handle);\n const elapsed = Date.now() - t.startedAt;\n const remaining = Math.max(0, t.duration - elapsed);\n this.timers.set(id, { handle: null, duration: t.duration, startedAt: 0, remaining });\n }\n }\n\n private resumeAllTimers(): void {\n for (const [id, t] of this.timers) {\n if (t.handle != null) continue;\n const remaining = t.remaining;\n if (remaining <= 0) {\n queueMicrotask(() => this.dismiss(id));\n continue;\n }\n const handle = setTimeout(() => this.dismiss(id), remaining);\n this.timers.set(id, { handle, duration: remaining, startedAt: Date.now(), remaining });\n }\n }\n\n /** Manually dismiss a toast by id. */\n dismiss(id: string): void {\n const t = this.timers.get(id);\n if (t?.handle != null) clearTimeout(t.handle);\n this.timers.delete(id);\n this._toasts.update((ts) => ts.filter((t) => t.id !== id));\n const ov = this.overlays.get(id);\n if (ov) {\n this.overlays.delete(id);\n ov.close();\n }\n }\n\n /** Dismiss every active toast. */\n dismissAll(): void {\n for (const t of this.timers.values()) {\n if (t.handle != null) clearTimeout(t.handle);\n }\n this.timers.clear();\n this._toasts.set([]);\n for (const ov of this.overlays.values()) ov.close();\n this.overlays.clear();\n }\n\n /**\n * Builds a template context for a queued toast — used by `[kjToastViewport]` when rendering.\n */\n contextFor<T>(toast: KjToastItem<T>): KjToastTemplateContext<T> {\n const ctx: KjToastContext<T> = {\n id: toast.id,\n variant: toast.variant,\n message: toast.message,\n title: toast.title,\n data: toast.data,\n dismiss: () => this.dismiss(toast.id),\n };\n return Object.assign(ctx, { $implicit: ctx });\n }\n}\n","import {\n ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, TemplateRef, ViewEncapsulation,\n afterNextRender, booleanAttribute, computed, inject, input, signal,\n} from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjToastService, KjToastTemplateContext, KjToastVariant } from './toast.service';\nimport { KJ_TOAST_STRATEGY } from './toast.strategy';\nimport { KjToastPositionX, KjToastPositionY } from './toast.types';\n\nexport type { KjToastVariant, KjToastContext, KjToastOptions } from './toast.service';\nexport type { KjToastPositionX, KjToastPositionY } from './toast.types';\n\n/**\n * Marks an element as a single toast item. Sets `role`, `aria-atomic`, `data-variant`,\n * `data-front`, and exposes positional state as CSS custom properties so client CSS\n * can drive stacking, scaling, or spread-out animations.\n *\n * **CSS variables exposed (when `[kjToastId]` is bound):**\n * - `--kj-toast-index` — 1-based position from the front (newest = 1)\n * - `--kj-toast-before` — number of toasts behind this one\n * - `--kj-toast-after` — number of toasts in front of this one\n * - `--kj-toast-height` — measured pixel height (kept in sync via ResizeObserver)\n *\n * @doc\n * @doc-example Basic\n * @doc-theme default\n * @doc-file toast.example.ts\n * @doc-theme retro\n * @doc-file toast.retro.example.ts\n * @doc-theme finance\n * @doc-file toast.finance.example.ts\n *\n * @example\n * ```html\n * <ng-template #defaultTpl let-ctx>\n * <div kjToast [kjToastVariant]=\"ctx.variant\" [kjToastId]=\"ctx.id\">\n * <span>{{ ctx.message }}</span>\n * <button (click)=\"ctx.dismiss()\" aria-label=\"Dismiss\">×</button>\n * </div>\n * </ng-template>\n * ```\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjToast]',\n standalone: true,\n host: {\n '[attr.role]': 'role()',\n '[attr.aria-atomic]': '\"true\"',\n '[attr.data-variant]': 'kjToastVariant()',\n '[attr.data-front]': 'isFront()',\n '[attr.data-toast-id]': 'kjToastId()',\n '[style.--kj-toast-index]': 'index()',\n '[style.--kj-toast-before]': 'before()',\n '[style.--kj-toast-after]': 'after()',\n '[style.--kj-toast-height]': 'heightPx()',\n },\n})\nexport class KjToast {\n /** Visual / semantic variant. Defaults to `'default'`. */\n kjToastVariant = input<KjToastVariant>('default');\n\n /**\n * The toast id this element renders. Bind from the template context (`ctx.id`)\n * so the directive can compute its position in the live queue and expose\n * `--kj-toast-index`, `--kj-toast-before`, `--kj-toast-after`, and `data-front`.\n * Optional — without it, the toast still renders with role/variant only.\n */\n kjToastId = input<string | null>(null);\n\n private readonly svc = inject(KjToastService);\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly _height = signal<number>(0);\n\n readonly role = computed(() =>\n this.kjToastVariant() === 'destructive' ? 'alert' : 'status',\n );\n\n /** 1-based position from the front (1 = newest). `null` when no id is bound. */\n readonly index = computed<number | null>(() => {\n const id = this.kjToastId();\n if (!id) return null;\n const list = this.svc.toasts();\n const i = list.findIndex(t => t.id === id);\n return i >= 0 ? list.length - i : null;\n });\n\n /** Toasts older than this one (behind in the stack). */\n readonly before = computed<number | null>(() => {\n const idx = this.index();\n return idx == null ? null : idx - 1;\n });\n\n /** Toasts newer than this one (in front of it). */\n readonly after = computed<number | null>(() => {\n const idx = this.index();\n if (idx == null) return null;\n return this.svc.toasts().length - idx;\n });\n\n /** True when this is the front-most (newest) toast. */\n readonly isFront = computed(() => this.index() === 1);\n\n /** Measured height as a pixel string (`\"42px\"`). Empty when unmeasured. */\n readonly heightPx = computed(() => {\n const h = this._height();\n return h > 0 ? `${h}px` : '';\n });\n\n constructor() {\n afterNextRender(() => {\n const node = this.el.nativeElement;\n const measure = () => this._height.set(Math.round(node.getBoundingClientRect().height));\n measure();\n // Use border-box geometry via getBoundingClientRect — contentRect strips padding.\n // Guard ResizeObserver for SSR / older test environments.\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(measure);\n ro.observe(node);\n this.destroyRef.onDestroy(() => ro.disconnect());\n }\n });\n }\n}\n\n/** Per-toast renderable: the resolved template + the bound context to render with. */\nexport interface KjToastRenderable<TData = unknown> {\n readonly id: string;\n readonly template: TemplateRef<KjToastTemplateContext<TData>> | null;\n readonly context: KjToastTemplateContext<TData>;\n}\n\n/**\n * Container for active toasts. Reads the queue from `KjToastService`, applies\n * a visibility cap (`kjToastMaxVisible`), and exposes layout state both as\n * inputs-driven CSS variables and `data-position-x` / `data-position-y`\n * attributes so client CSS can drive position, gap, stacking strategy, and\n * z-index.\n *\n * **CSS variables exposed on the host:**\n * - `--kj-toast-gap` — gap between stacked toasts\n * - `--kj-toast-z-index` — base z-index for toasts\n * - `--kj-toasts-count` — number of currently-rendered toasts\n * - `--kj-toast-front-height` — measured height of the front-most toast\n *\n * **Data attributes:**\n * - `data-position-x=\"start|center|end\"`\n * - `data-position-y=\"top|bottom\"`\n * - `data-expanded=\"true|false\"`\n *\n * @example\n * ```html\n * <ol kjToastViewport\n * [kjToastDefaultTemplate]=\"defaultTpl\"\n * [kjToastMaxVisible]=\"3\"\n * [kjToastGap]=\"8\"\n * kjToastPositionX=\"end\"\n * kjToastPositionY=\"bottom\"\n * #vp=\"kjToastViewport\"\n * aria-label=\"Notifications\">\n * @for (r of vp.renderable(); track r.id) {\n * <li><ng-container *ngTemplateOutlet=\"r.template; context: { $implicit: r.context }\" /></li>\n * }\n * </ol>\n * ```\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjToastViewport]',\n standalone: true,\n exportAs: 'kjToastViewport',\n host: {\n 'role': 'region',\n 'tabindex': '-1',\n '[attr.aria-live]': '\"polite\"',\n '[attr.aria-atomic]': '\"false\"',\n '[attr.aria-relevant]': '\"additions removals\"',\n '[attr.data-position-x]': 'kjToastPositionX()',\n '[attr.data-position-y]': 'kjToastPositionY()',\n '[attr.data-expanded]': 'expanded()',\n '[style.--kj-toast-gap]': 'gapPx()',\n '[style.--kj-toast-z-index]': 'kjToastBaseZIndex()',\n '[style.--kj-toasts-count]': 'renderable().length',\n '[style.--kj-toast-front-height]': 'frontHeightPx()',\n '(mouseenter)': 'onPointerEnter()',\n '(mouseleave)': 'onPointerLeave()',\n '(focusin)': 'onFocusIn($event)',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class KjToastViewport {\n private readonly svc = inject(KjToastService);\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly strategy = inject(KJ_TOAST_STRATEGY);\n\n /** Default template used for string-based toasts. Per-call templates override this. */\n readonly kjToastDefaultTemplate = input<TemplateRef<KjToastTemplateContext> | null>(null);\n\n /** Cap on simultaneously-rendered toasts. Excess stays queued and surfaces as space frees. Defaults from the active `KjToastStrategy`. */\n readonly kjToastMaxVisible = input<number>(this.strategy.maxVisible);\n\n /** Pixel gap between stacked toasts — exposed as `--kj-toast-gap`. Defaults from the active `KjToastStrategy`. */\n readonly kjToastGap = input<number>(this.strategy.gap);\n\n /** Base `z-index` exposed as `--kj-toast-z-index`. Defaults from the active `KjToastStrategy`. */\n readonly kjToastBaseZIndex = input<number>(this.strategy.baseZIndex);\n\n /** Horizontal anchor — written as `data-position-x` for client CSS. Defaults from the active `KjToastStrategy`. */\n readonly kjToastPositionX = input<KjToastPositionX>(this.strategy.positionX);\n\n /** Vertical anchor — written as `data-position-y` for client CSS. Defaults from the active `KjToastStrategy`. */\n readonly kjToastPositionY = input<KjToastPositionY>(this.strategy.positionY);\n\n /**\n * Manual override for the spread-out state. When unset (`undefined`) and the active\n * strategy has `expandOnHover: true`, the viewport flips automatically on hover/focus.\n * Set explicitly to force one state or to drive expansion from custom logic.\n */\n readonly kjToastExpand = input<boolean | undefined>(undefined);\n\n /**\n * When `true` (default), hover/focus on the viewport pauses every in-flight\n * auto-dismiss timer via `KjToastService.pause('hover'|'focus')`. Required\n * for WCAG 2.2.1 (AAA) and 1.4.13. Distinct from visual stacking expansion\n * (`kjToastExpand` / `strategy.expandOnHover`). Defaults from the active\n * `KjToastStrategy.pauseOnHover`.\n */\n readonly kjToastPauseOnHover = input<boolean, unknown>(this.strategy.pauseOnHover, {\n transform: booleanAttribute,\n });\n\n private readonly _hovered = signal(false);\n /** Tracks pointer-driven pause state so resume() runs exactly once per enter/leave pair. */\n private pointerPauseHeld = false;\n /** Tracks focus-driven pause state — independent ref so blur after re-enter doesn't double-resume. */\n private focusPauseHeld = false;\n /** Element to restore focus to when F6/Escape leaves the viewport. */\n private previouslyFocused: HTMLElement | null = null;\n\n /** Resolved expand state — explicit input wins; otherwise falls back to hover when the strategy enables it. */\n readonly expanded = computed(() => {\n const override = this.kjToastExpand();\n if (override !== undefined) return override;\n return this.strategy.expandOnHover && this._hovered();\n });\n\n protected onPointerEnter(): void {\n if (this.strategy.expandOnHover) this._hovered.set(true);\n if (this.kjToastPauseOnHover() && !this.pointerPauseHeld) {\n this.pointerPauseHeld = true;\n this.svc.pause('hover');\n }\n }\n\n protected onPointerLeave(): void {\n if (this.strategy.expandOnHover) this._hovered.set(false);\n if (this.pointerPauseHeld) {\n this.pointerPauseHeld = false;\n this.svc.resume('hover');\n }\n }\n\n protected onFocusIn(event: FocusEvent): void {\n if (this.strategy.expandOnHover) this._hovered.set(true);\n // Capture the *external* focus owner so F6/Escape can restore. Only the\n // first focusin counts — subsequent focus moves *within* the viewport\n // (e.g. Tab between toasts) must not overwrite the restore target.\n if (!this.focusPauseHeld) {\n const previous = event.relatedTarget as HTMLElement | null;\n const root = this.el.nativeElement;\n // relatedTarget can be null on programmatic focus; fall back to\n // document.activeElement if it's outside the viewport.\n if (previous && !root.contains(previous)) {\n this.previouslyFocused = previous;\n }\n }\n if (this.kjToastPauseOnHover() && !this.focusPauseHeld) {\n this.focusPauseHeld = true;\n this.svc.pause('focus');\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const root = this.el.nativeElement;\n const next = event.relatedTarget as HTMLElement | null;\n // focusout fires for every internal focus move; only count *real* exits\n // — the new focus target is null or outside the viewport root.\n if (next && root.contains(next)) return;\n if (this.strategy.expandOnHover) this._hovered.set(false);\n if (this.focusPauseHeld) {\n this.focusPauseHeld = false;\n this.svc.resume('focus');\n }\n }\n\n private focusFrontToast(): void {\n const root = this.el.nativeElement as HTMLElement;\n // Front-most toast is the *last* in DOM order (newest). Prefer the first\n // focusable inside it; fall back to the toast element itself.\n const fronts = root.querySelectorAll('[kjToast][data-front=\"true\"]');\n const front = fronts.length > 0 ? (fronts[fronts.length - 1] as HTMLElement) : null;\n if (!front) return;\n const focusable = front.querySelector(\n 'button:not([disabled]), [href], input:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ) as HTMLElement | null;\n (focusable ?? front).focus();\n }\n\n private restorePreviousFocus(): void {\n const target = this.previouslyFocused;\n this.previouslyFocused = null;\n if (target && typeof target.focus === 'function') target.focus();\n }\n\n /** Live list of queued toasts (uncapped). */\n readonly toasts = this.svc.toasts;\n\n /** Renderables — capped by `kjToastMaxVisible`, paired with a template + bound context. */\n readonly renderable = computed<KjToastRenderable[]>(() => {\n const fallback = this.kjToastDefaultTemplate();\n const cap = this.kjToastMaxVisible();\n const list = this.toasts();\n // Newest are at the END of the service array; the front of the stack is the\n // last item. When capping, drop the OLDEST first.\n const visible = Number.isFinite(cap) && list.length > cap\n ? list.slice(list.length - cap)\n : list;\n return visible.map(t => ({\n id: t.id,\n template: t.template ?? fallback,\n context: this.svc.contextFor(t),\n }));\n });\n\n private readonly _frontHeight = signal<number>(0);\n\n /** `--kj-toast-gap` value (`\"8px\"`). */\n readonly gapPx = computed(() => `${this.kjToastGap()}px`);\n\n /** `--kj-toast-front-height` value (`\"42px\"`) — the measured height of the front toast. */\n readonly frontHeightPx = computed(() => {\n const h = this._frontHeight();\n return h > 0 ? `${h}px` : '';\n });\n\n constructor() {\n // Register the F6 / Escape document-level listener eagerly — registering\n // from `afterNextRender` was too late for tests that dispatch immediately\n // after `service.show()`. Sonner uses the same pattern of a long-lived\n // top-level listener. Handles both directions of F6 (outside → in,\n // inside → out) and Escape (dismiss focused toast + restore focus) so\n // there is exactly one source of truth — host listeners would race the\n // document listener over the same event.\n const doc = (typeof document !== 'undefined' ? document : null);\n if (doc) {\n const onDocKeydown = (event: KeyboardEvent) => {\n if (event.key !== 'F6' && event.key !== 'Escape') return;\n if (this.svc.toasts().length === 0) return;\n const root = this.el.nativeElement as HTMLElement;\n const active = doc.activeElement as HTMLElement | null;\n const inside = active != null && root.contains(active);\n if (event.key === 'F6') {\n if (inside) {\n event.preventDefault();\n this.restorePreviousFocus();\n return;\n }\n event.preventDefault();\n this.previouslyFocused = active;\n this.focusFrontToast();\n return;\n }\n // Escape: only act when focus is inside the viewport so we don't\n // hijack the consumer's other Escape affordances.\n if (event.key === 'Escape' && inside) {\n event.preventDefault();\n const target = event.target as HTMLElement | null;\n const toastEl = (target?.closest('[kjToast]')) as HTMLElement | null;\n const id = toastEl?.getAttribute('data-toast-id')\n ?? this.svc.toasts().at(-1)?.id\n ?? null;\n this.restorePreviousFocus();\n if (id) this.svc.dismiss(id);\n }\n };\n doc.addEventListener('keydown', onDocKeydown);\n this.destroyRef.onDestroy(() => doc.removeEventListener('keydown', onDocKeydown));\n }\n\n afterNextRender(() => {\n const root = this.el.nativeElement as HTMLElement;\n const measure = () => {\n const front = root.querySelector('[kjToast][data-front=\"true\"]') as HTMLElement | null;\n if (!front) { this._frontHeight.set(0); return; }\n this._frontHeight.set(Math.round(front.getBoundingClientRect().height));\n };\n measure();\n // Guard ResizeObserver / MutationObserver for SSR + older test envs.\n let ro: ResizeObserver | undefined;\n let mo: MutationObserver | undefined;\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(measure);\n // Observe the viewport — children added/resized trigger remeasure.\n ro.observe(root);\n }\n if (typeof MutationObserver !== 'undefined') {\n // MutationObserver picks up new children (data-front=\"true\" added on a new toast).\n mo = new MutationObserver(measure);\n mo.observe(root, { childList: true, subtree: true, attributes: true, attributeFilter: ['data-front'] });\n }\n this.destroyRef.onDestroy(() => { ro?.disconnect(); mo?.disconnect(); });\n });\n }\n}\n\n/**\n * Optional dismiss button. Use `(click)=\"ctx.dismiss()\"` directly in the template\n * for new code — this directive is for cases where the dismiss target id is\n * known outside the template context.\n *\n * @example\n * ```html\n * <button [kjToastClose]=\"toast.id\" aria-label=\"Dismiss\">×</button>\n * ```\n * @doc-category Core/Overlay\n */\n@Directive({\n selector: '[kjToastClose]',\n standalone: true,\n host: {\n 'class': 'kj-toast-close',\n '(click)': 'dismiss()',\n },\n})\nexport class KjToastClose {\n private readonly svc = inject(KjToastService);\n /** The id of the toast to dismiss on click. */\n kjToastClose = input.required<string>();\n\n dismiss(): void {\n this.svc.dismiss(this.kjToastClose());\n }\n}\n\n/**\n * Service-launched toast panel. Composes `KjOverlayPanel` as a host directive\n * so the overlay primitives wire role/state/aria management. The role is\n * decided by the service via `KJ_OVERLAY_PANEL_ROLE` (`status` or `alert`).\n *\n * @doc-category Core/Overlay\n */\n@Component({\n selector: 'kj-toast',\n standalone: true,\n hostDirectives: [{ directive: KjOverlayPanel }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'kj-toast' },\n template: `<ng-content />`,\n})\nexport class KjToastPanel {}\n","import {\n Directive,\n booleanAttribute,\n computed,\n contentChildren,\n effect,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n KJ_LIST_NAVIGATOR_CONFIG,\n KjFilterableList,\n KjListItem,\n KjListNavigator,\n KjTypeAhead,\n type KjFilterFn,\n type KjListNavigatorConfig,\n} from '../primitives/list';\n\nlet _listIdCounter = 0;\n/** Allocate a stable command list id. */\nexport function nextCommandListId(): string {\n return `kj-command-list-${++_listIdCounter}`;\n}\n\n/** Payload for the `kjActivate` output. */\nexport interface KjCommandActivateEvent {\n readonly value: unknown;\n readonly query: string;\n}\n\n/**\n * Root state container for the command palette. Provides\n * KJ_LIST_NAVIGATOR_CONFIG (items via contentChildren), KjFilterableList,\n * and KjTypeAhead. Children inject `KjCommandPalette` directly.\n *\n * @doc\n * @doc-example Inline\n * @doc-file command-palette.example.ts\n * @doc-example Dialog (modal)\n * @doc-file command-palette.dialog.example.ts\n * @doc-example With groups\n * @doc-file command-palette.groups.example.ts\n * @doc-example Async search\n * @doc-file command-palette.async.example.ts\n * @doc-example Fuzzy filter\n * @doc-file command-palette.fuzzy.example.ts\n * @doc-category Core/Actions\n * @doc-name command-palette\n * @doc-description Unstyled command palette root with item registration, filtering, and activation events.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjCommandPalette]',\n standalone: true,\n exportAs: 'kjCommandPalette',\n providers: [\n { provide: KJ_LIST_NAVIGATOR_CONFIG, useExisting: forwardRef(() => KjCommandPalette) },\n KjFilterableList,\n KjTypeAhead,\n ],\n})\nexport class KjCommandPalette implements KjListNavigatorConfig {\n /** Pluggable filter function. */\n readonly kjFilter = input<KjFilterFn | null>(null);\n /** When `false`, internal filtering is skipped (server-side / consumer-controlled). */\n readonly kjShouldFilter = input<boolean, unknown>(true, { transform: booleanAttribute });\n /** Show the loading state. */\n readonly kjLoading = input<boolean, unknown>(false, { transform: booleanAttribute });\n /** Reset the active item to the first visible item on query change. */\n readonly kjAutoActivateFirst = input<boolean, unknown>(true, { transform: booleanAttribute });\n /** Close the host dialog on activation. */\n readonly kjDismissOnActivate = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Two-way bindable active value (highlighted item, not committed). */\n readonly kjValue = model<unknown>(null);\n /** Two-way bindable query text. */\n readonly kjQuery = model<string>('');\n\n /** Fires when an item is activated. */\n readonly kjActivate = output<KjCommandActivateEvent>();\n\n /** Stable listbox id for `aria-controls` wiring. */\n readonly listId = nextCommandListId();\n /** All `KjListItem`s under this palette. Source of truth for nav + filter. */\n readonly items = contentChildren(KjListItem, { descendants: true });\n\n private readonly filterSvc = inject(KjFilterableList);\n\n /** Visible (filter-passing) items. */\n readonly visibleItems = computed(() => this.filterSvc.visibleItems() as readonly KjListItem<unknown>[]);\n readonly query = computed(() => this.kjQuery());\n readonly activeValue = computed(() => this.kjValue());\n readonly loading = computed(() => this.kjLoading());\n\n /** Default filter — substring match across haystacks. */\n private readonly defaultFilter: KjFilterFn = (q, hs) => {\n if (!q) return 1;\n const needle = q.toLowerCase();\n return hs.some(h => h.toLowerCase().includes(needle)) ? 1 : 0;\n };\n\n /** Bound source: custom filter when provided, else default. */\n private readonly resolvedFilter = computed<KjFilterFn>(\n () => this.kjFilter() ?? this.defaultFilter,\n );\n\n /** @internal — set by `KjCommandInput`'s lifecycle. */\n private readonly _nav = signal<KjListNavigator | null>(null);\n\n /** @internal */\n _setNavigator(n: KjListNavigator | null): void { this._nav.set(n); }\n\n /** Currently active descendant id (or null). Wired to input's `aria-activedescendant`. */\n readonly activeId = computed(() => this._nav()?.activeId() ?? null);\n\n constructor() {\n this.filterSvc.bind({\n items: this.items,\n query: this.kjQuery,\n filterFn: this.resolvedFilter,\n shouldFilter: this.kjShouldFilter,\n autoActivateFirst: this.kjAutoActivateFirst,\n });\n\n // Auto-activate first visible item on query change.\n effect(() => {\n this.kjQuery();\n const autoFirst = this.kjAutoActivateFirst();\n if (!autoFirst) return;\n untracked(() => {\n const visible = this.visibleItems();\n const nav = this._nav();\n if (visible.length > 0) {\n this.kjValue.set(visible[0].value());\n if (nav) nav.setActive(visible[0].id);\n } else {\n this.kjValue.set(null);\n if (nav) nav.setActive(null);\n }\n });\n });\n\n // When items register asynchronously (same query), pick first if nothing highlighted.\n effect(() => {\n const visible = this.visibleItems();\n const active = this.kjValue();\n const autoFirst = this.kjAutoActivateFirst();\n if (!autoFirst || visible.length === 0 || active !== null) return;\n untracked(() => {\n const nav = this._nav();\n this.kjValue.set(visible[0].value());\n if (nav) nav.setActive(visible[0].id);\n });\n });\n\n // When the navigator is registered (ngOnInit of KjCommandInput), seed\n // the active item so aria-activedescendant is correct from first render.\n effect(() => {\n const nav = this._nav();\n if (!nav) return;\n const autoFirst = this.kjAutoActivateFirst();\n if (!autoFirst) return;\n untracked(() => {\n if (nav.activeId() !== null) return;\n const visible = this.visibleItems();\n if (visible.length > 0) {\n nav.setActive(visible[0].id);\n this.kjValue.set(visible[0].value());\n }\n });\n });\n }\n\n setQuery(q: string): void {\n this.kjQuery.set(q);\n }\n\n activate(value: unknown): void {\n this.kjValue.set(value);\n const nav = this._nav();\n if (nav) {\n const item = this.items().find(i => i.value() === value);\n if (item) nav.setActive(item.id);\n }\n this.kjActivate.emit({ value, query: this.kjQuery() });\n }\n\n /**\n * Implements `KjListNavigatorConfig.afterSelect`. The palette has no\n * `KjSelectionModel`, so `closeRequested` is always `false` here —\n * we use this purely as the central \"an item was activated\" hook\n * called from `KjListItem`, which lets `KjCommandItem` skip the\n * `activate.subscribe(...)` boilerplate.\n */\n afterSelect(value: unknown): void {\n this.activate(value);\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n OnDestroy,\n OnInit,\n inject,\n} from '@angular/core';\nimport { KjListNavigator } from '../primitives/list';\nimport { KjCommandPalette } from './command-palette';\n\n/**\n * Search input inside the command palette. Composes `KjListNavigator`\n * — `aria-activedescendant` and the APG combobox 1.2 keyboard contract\n * live here, not on the listbox.\n *\n * Keyboard contract:\n * - `ArrowDown` / `ArrowUp` — move active item (handled by `KjListNavigator`)\n * - `Home` / `End` — jump to first/last (handled by `KjListNavigator`)\n * - `Enter` — activate active item (handled by `KjListNavigator`)\n * - `Escape` — first press clears query; second press propagates to dialog\n *\n * @doc-category Core/Actions\n * @doc\n * @doc-name command-palette\n */\n@Directive({\n selector: 'input[kjCommandInput]',\n standalone: true,\n exportAs: 'kjCommandInput',\n hostDirectives: [KjListNavigator],\n host: {\n 'role': 'combobox',\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'spellcheck': 'false',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n '[attr.aria-controls]': 'palette.listId',\n '[attr.aria-expanded]': '\"true\"',\n '[attr.aria-busy]': 'palette.loading() ? \"true\" : null',\n '(input)': 'palette.setQuery($any($event.target).value)',\n },\n})\nexport class KjCommandInput implements OnInit, OnDestroy {\n protected readonly palette = inject(KjCommandPalette);\n private readonly nav = inject(KjListNavigator);\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n ngOnInit(): void {\n this.palette._setNavigator(this.nav);\n }\n\n ngOnDestroy(): void {\n this.palette._setNavigator(null);\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n // First press: clear query. Second press propagates to the dialog.\n if (this.palette.query()) {\n event.stopPropagation();\n this.palette.setQuery('');\n this.el.nativeElement.value = '';\n }\n // If query is already empty, let the event bubble to KjDialog's Escape handler\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { KjCommandPalette } from './command-palette';\n\n/**\n * Listbox panel for the command palette. Role-only — keyboard nav\n * lives on `KjCommandInput` per APG combobox 1.2.\n *\n * @doc-category Core/Actions\n * @doc\n * @doc-name command-palette\n */\n@Directive({\n selector: '[kjCommandList]',\n standalone: true,\n host: {\n 'role': 'listbox',\n '[id]': 'palette.listId',\n 'class': 'kj-command-list',\n '[attr.aria-label]': '\"Commands\"',\n },\n})\nexport class KjCommandList {\n /** @internal — for the [id] host binding. */\n protected readonly palette = inject(KjCommandPalette);\n}\n","import {\n Directive,\n computed,\n inject,\n} from '@angular/core';\nimport { KjListItem, injectListItem } from '../primitives/list';\nimport { KjCommandPalette } from './command-palette';\n\n/**\n * Individual command item (`role=\"option\"`). Composes `KjListItem` for\n * id / value / label / keywords / disabled / click+keyboard activation.\n * The activation → `palette.activate(value)` wiring is now handled\n * centrally by `KjCommandPalette.afterSelect`, called from\n * `KjListItem` — this directive only contributes role, classes, the\n * `kj*` input aliases, and the active-item ARIA / data attributes.\n *\n * @example\n * ```html\n * <div kjCommandPalette>\n * <div kjCommandList>\n * <button kjCommandItem [kjValue]=\"'open-settings'\">Settings</button>\n * </div>\n * </div>\n * ```\n * @doc-category Core/Actions\n * @doc\n * @doc-name command-palette\n */\n@Directive({\n selector: '[kjCommandItem]',\n standalone: true,\n exportAs: 'kjCommandItem',\n hostDirectives: [\n {\n directive: KjListItem,\n inputs: [\n 'kjItemValue:kjValue',\n 'kjItemLabel:kjLabel',\n 'kjItemKeywords:kjKeywords',\n 'kjShortcut:kjShortcut',\n 'kjDisabled:kjDisabled',\n ],\n },\n ],\n host: {\n 'class': 'kj-command-item',\n 'role': 'option',\n '[attr.aria-selected]': 'isActive() ? \"true\" : \"false\"',\n '[attr.data-active]': 'isActive() ? \"\" : null',\n },\n})\nexport class KjCommandItem {\n private readonly item = injectListItem<unknown>();\n private readonly palette = inject(KjCommandPalette);\n\n /** Whether this item is the active (highlighted) item. */\n readonly isActive = computed(() =>\n this.palette.activeId() !== null && this.palette.activeId() === this.item.id,\n );\n}\n","import { Directive } from '@angular/core';\nimport { KjListGroup } from '../primitives/list';\n\n/**\n * Group wrapper for command items. Composes `KjListGroup` for the\n * shared role=group / aria-labelledby / auto-hide-when-empty behavior;\n * this selector exists so existing command-palette templates keep\n * working unchanged.\n *\n * Pair with a `[kjListGroupLabel]` heading element for the section title.\n *\n * @doc-category Core/Actions\n * @doc\n * @doc-name command-palette\n */\n@Directive({\n selector: '[kjCommandGroup]',\n standalone: true,\n hostDirectives: [KjListGroup],\n})\nexport class KjCommandGroup {}\n","import { Directive } from '@angular/core';\nimport { KjListSeparator } from '../primitives/list';\n\n/**\n * Visual separator between command groups. Non-interactive. Composes\n * the shared `KjListSeparator` primitive (role=separator,\n * aria-orientation=horizontal).\n *\n * @doc-category Core/Actions\n * @doc\n * @doc-name command-palette\n */\n@Directive({\n selector: '[kjCommandSeparator]',\n standalone: true,\n hostDirectives: [KjListSeparator],\n})\nexport class KjCommandSeparator {}\n","import { Directive, computed, inject } from '@angular/core';\nimport { KjCommandPalette } from './command-palette';\n\n/**\n * Slot shown when the palette has no visible items and is not loading.\n * Sets `role=\"status\"` and `aria-live=\"polite\"` for live-region announcements.\n * Hidden when items are visible or loading is active.\n *\n * @example\n * ```html\n * <div kjCommandList>\n * <div kjCommandEmpty>No results found.</div>\n * <button kjCommandItem>…</button>\n * </div>\n * ```\n * @doc-category Core/Actions\n * @doc\n * @doc-name command-palette\n */\n@Directive({\n selector: '[kjCommandEmpty]',\n standalone: true,\n host: {\n 'role': 'status',\n 'aria-live': 'polite',\n '[hidden]': 'isHidden()',\n },\n})\nexport class KjCommandEmpty {\n private readonly ctx = inject(KjCommandPalette);\n\n /** Hidden unless there are no visible items and loading is false. */\n readonly isHidden = computed(() =>\n this.ctx.visibleItems().length > 0 || this.ctx.loading()\n );\n}\n","// command-palette-dialog.ts\nimport {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n} from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_BACKDROP_STRATEGY,\n KJ_OVERLAY_FOCUS_TRAP_STRATEGY,\n KJ_OVERLAY_SCROLL_LOCK_STRATEGY,\n KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY,\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { viewportCentered } from '../primitives/overlay/strategies/position/viewport-centered';\nimport { solidBackdrop } from '../primitives/overlay/strategies/backdrop/solid';\nimport { tabCycle } from '../primitives/overlay/strategies/focus-trap/tab-cycle';\nimport { htmlOverflow } from '../primitives/overlay/strategies/scroll-lock/html-overflow';\nimport { silent } from '../primitives/overlay/strategies/live-announcer/silent';\nimport { programmatic } from '../primitives/overlay/strategies/trigger-event/programmatic';\n\n/**\n * Modal panel for the command palette (Cmd-K pattern). Composes\n * `KjOverlayPanel` and provides the modal-list strategy bundle: portalled\n * mount, viewport-centered position, solid (inert + close-on-click) backdrop,\n * tab-cycle focus trap with first-focus + return, html-overflow scroll lock,\n * and a silent live announcer.\n *\n * Pair with `[kjCommandPaletteTrigger]` (which supplies an `onHotkey`\n * trigger-event strategy) for the standard mod+k flow, or use programmatic\n * open/close via the bound `KjOverlayController`.\n *\n * The host element gets `aria-label=\"Command palette\"` and `role=\"dialog\"`.\n *\n * @doc-category Core/Actions\n * @doc\n * @doc-name command-palette\n */\n@Component({\n selector: 'kj-command-palette-dialog',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayPanel, inputs: ['kjFor'] },\n ],\n providers: [\n KjOverlayController,\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => bodyPortal() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => viewportCentered() },\n {\n provide: KJ_OVERLAY_BACKDROP_STRATEGY,\n useFactory: () => solidBackdrop({ inert: true, closeOnClick: true }),\n },\n {\n provide: KJ_OVERLAY_FOCUS_TRAP_STRATEGY,\n useFactory: () => tabCycle({ initialFocus: 'first', returnFocus: true }),\n },\n { provide: KJ_OVERLAY_SCROLL_LOCK_STRATEGY, useFactory: () => htmlOverflow() },\n { provide: KJ_OVERLAY_LIVE_ANNOUNCER_STRATEGY, useFactory: () => silent() },\n { provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY, useFactory: () => programmatic() },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'dialog' as const },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.aria-label]': '\"Command palette\"',\n },\n template: `<ng-content />`,\n})\nexport class KjCommandPaletteDialog {}\n","// command-palette-trigger.ts\nimport { Directive, inject, input } from '@angular/core';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport { onHotkey } from '../primitives/overlay/strategies/trigger-event/on-hotkey';\n\n/**\n * Hotkey-driven trigger for the command palette. Toggles the linked\n * `<kj-command-palette-dialog>` panel when the configured chord fires\n * (default `mod+k` — Cmd+K on macOS, Ctrl+K elsewhere).\n *\n * Composes `KjOverlayTrigger` via `hostDirectives` and provides an\n * `onHotkey()` trigger-event strategy (replacing the legacy\n * `KjCommandPaletteHotkey` directive).\n *\n * @example\n * ```html\n * <button kjCommandPaletteTrigger #t=\"kjCommandPaletteTrigger\" kjHotkey=\"mod+k\">\n * Open palette\n * </button>\n * <kj-command-palette-dialog [kjFor]=\"t\">\n * <div kjCommandPalette>...</div>\n * </kj-command-palette-dialog>\n * ```\n *\n * @doc-category Core/Actions\n */\n@Directive({\n selector: '[kjCommandPaletteTrigger]',\n exportAs: 'kjCommandPaletteTrigger',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayTrigger, inputs: ['kjOpen'] },\n ],\n providers: [\n KjOverlayController,\n {\n provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n useFactory: () => onHotkey('mod+k'),\n },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'dialog' as const },\n ],\n})\nexport class KjCommandPaletteTrigger {\n /**\n * Keyboard chord. `mod` resolves to `Meta` on macOS, `Ctrl` elsewhere.\n * Captured at provider construction; reactive switching is a follow-up.\n */\n readonly kjHotkey = input<string>('mod+k');\n\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n /** The controller of the composed `KjOverlayTrigger`, exposed for sibling `[kjFor]` panels. */\n get controller(): KjOverlayController {\n return this._overlayTrigger.controller;\n }\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n","/**\n * Filter function type for the command palette.\n * Returns a numeric score: > 0 means the item is visible, 0 means hidden.\n * Higher scores are more relevant when sorting by score.\n */\nexport type KjCommandFilter = (query: string, haystacks: readonly string[]) => number;\n\n/**\n * Strip diacritic marks from a string (e.g. `café` → `cafe`).\n * Uses NFD normalisation followed by removal of Unicode diacritic characters.\n * Note: locale-naive for v1 (Turkish/German edge cases are documented).\n */\nexport function stripDiacritics(str: string): string {\n return str.normalize('NFD').replace(/\\p{Diacritic}/gu, '');\n}\n\n/**\n * Default filter: case- and diacritic-insensitive substring match.\n * Returns score 1 if any haystack contains the needle, 0 otherwise.\n * Returns 1 for empty queries (all items visible).\n */\nexport const kjSubstringFilter: KjCommandFilter = (query, haystacks) => {\n if (!query) return 1;\n const needle = stripDiacritics(query.toLowerCase());\n return haystacks.some(h => stripDiacritics(h.toLowerCase()).includes(needle)) ? 1 : 0;\n};\n\n/**\n * Optional fuzzy filter: checks whether all characters of the query appear\n * in the haystack in order (abbreviation matching).\n * E.g. `gth` matches `git checkout`.\n * Returns score 1 if any haystack matches, 0 otherwise.\n * Returns 1 for empty queries.\n *\n * @example\n * ```html\n * <div kjCommandPalette [kjFilter]=\"kjFuzzyFilter\">…</div>\n * ```\n */\nexport const kjFuzzyFilter: KjCommandFilter = (query, haystacks) => {\n if (!query) return 1;\n const needle = query.toLowerCase();\n return haystacks.some(h => {\n const hay = h.toLowerCase();\n let i = 0;\n for (const c of needle) {\n const j = hay.indexOf(c, i);\n if (j < 0) return false;\n i = j + 1;\n }\n return true;\n }) ? 1 : 0;\n};\n","/**\n * Structured filter models — a near-direct adaptation of AG-Grid's\n * `FilterModel` shape. Each built-in filter writes one of these models\n * to `column.setFilterValue(...)` instead of a raw value. The structured\n * shape buys two things:\n *\n * 1. **Server-side rendering.** `gridApi.filter.getModel()` returns a\n * `KjGridFilterModel` (`Record<columnId, KjFilterModel>`) that\n * serialises cleanly into a JSON payload your backend can translate\n * to SQL/Mongo/etc. without re-parsing free-form values. Pair with\n * `kjTableResource({ loader })` to fan changes back to the server.\n *\n * 2. **Cross-filter introspection.** Code that needs to \"what does the\n * user currently have selected on column X\" can discriminate on\n * `filterType` and `type` instead of guessing from a `string | unknown`\n * value.\n *\n * The companion `filter-fns` helpers (`kjTextFilterFn` etc.) implement\n * client-side filtering against these models so client-mode tables work\n * out of the box — point `kjColumn({ filterFn: kjTextFilterFn })` at one\n * and TanStack will dispatch row matching for you.\n */\n\n/** Comparison operators for {@link KjTextFilterModel}. */\nexport type KjTextFilterType =\n | 'contains'\n | 'notContains'\n | 'equals'\n | 'notEquals'\n | 'startsWith'\n | 'endsWith'\n | 'blank'\n | 'notBlank';\n\nexport interface KjTextFilterModel {\n readonly filterType: 'text';\n readonly type: KjTextFilterType;\n /** Match string. Omitted for `blank` / `notBlank`. */\n readonly filter?: string;\n /** Case-insensitive matching. Defaults to `true`. */\n readonly caseSensitive?: boolean;\n}\n\n/** Comparison operators for {@link KjNumberFilterModel}. */\nexport type KjNumberFilterType =\n | 'equals'\n | 'notEquals'\n | 'greaterThan'\n | 'greaterThanOrEqual'\n | 'lessThan'\n | 'lessThanOrEqual'\n | 'inRange'\n | 'blank'\n | 'notBlank';\n\nexport interface KjNumberFilterModel {\n readonly filterType: 'number';\n readonly type: KjNumberFilterType;\n /** Primary number. Omitted for `blank` / `notBlank`. */\n readonly filter?: number;\n /** Range upper bound — used by `inRange`. */\n readonly filterTo?: number;\n}\n\n/** Comparison operators for {@link KjDateFilterModel}. */\nexport type KjDateFilterType =\n | 'equals'\n | 'notEquals'\n | 'greaterThan' // after\n | 'lessThan' // before\n | 'inRange'\n | 'blank'\n | 'notBlank';\n\nexport interface KjDateFilterModel {\n readonly filterType: 'date';\n readonly type: KjDateFilterType;\n /** Primary date — ISO `YYYY-MM-DD`. */\n readonly dateFrom?: string;\n /** Range upper bound — used by `inRange`. */\n readonly dateTo?: string;\n}\n\n/**\n * Set / multi-select filter — the row passes if the cell value is in\n * `values`. An empty `values` array means \"no filter\" (cleared); pair\n * with `setFilterValue(undefined)` for the cleared state by preference.\n */\nexport interface KjSetFilterModel {\n readonly filterType: 'set';\n readonly values: readonly unknown[];\n}\n\n/** Compound filter — combine two conditions with AND / OR. */\nexport interface KjMultiConditionFilterModel<TModel extends KjFilterModel = KjFilterModel> {\n readonly filterType: 'multi';\n readonly operator: 'AND' | 'OR';\n readonly conditions: readonly TModel[];\n}\n\n/** Discriminated union of every built-in filter model. */\nexport type KjFilterModel =\n | KjTextFilterModel\n | KjNumberFilterModel\n | KjDateFilterModel\n | KjSetFilterModel\n | KjMultiConditionFilterModel;\n\n/**\n * Bulk filter snapshot — keyed by column id. Shape mirrors AG-Grid's\n * `api.getFilterModel()` return so SSR loaders that already understand\n * AG-Grid payloads can consume it as-is.\n */\nexport type KjGridFilterModel = Record<string, KjFilterModel>;\n\n/** Narrowing helper. */\nexport function isKjFilterModel(value: unknown): value is KjFilterModel {\n return (\n !!value &&\n typeof value === 'object' &&\n 'filterType' in (value as object) &&\n typeof (value as { filterType: unknown }).filterType === 'string'\n );\n}\n","import type { WritableSignal, Signal } from '@angular/core';\nimport type {\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n GroupingState,\n PaginationState,\n RowData,\n RowSelectionState,\n Table,\n VisibilityState,\n} from '@tanstack/angular-table';\nimport type {\n KjColumnApi,\n KjColumnGroupingApi,\n KjColumnOrderApi,\n KjColumnPinningApi,\n KjColumnSizingApi,\n KjColumnVisibilityApi,\n KjDensityApi,\n KjExpansionApi,\n KjFilterApi,\n KjGlobalFilterApi,\n KjGridApi,\n KjGroupingApi,\n KjPaginationApi,\n KjRowsApi,\n KjSelectionApi,\n KjSortApi,\n} from './grid-api';\nimport { isKjFilterModel, type KjFilterModel, type KjGridFilterModel } from './filter-models';\nimport type { KjTableDensity, KjTableState } from './table.types';\n\n/**\n * Build a `KjGridApi` + `KjColumnApi` pair bound to a directive instance.\n * Called once from `KjTable` and cached. Methods close over the directive's\n * private state signal and the lazy TanStack `Table` getter so every call\n * sees the live grid.\n */\nexport function createGridApi<TData extends RowData>(opts: {\n state: Signal<KjTableState>;\n table: () => Table<TData>;\n patch: <K extends keyof KjTableState>(\n key: K,\n updater: KjTableState[K] | ((prev: KjTableState[K]) => KjTableState[K]),\n ) => void;\n setStateInternal: WritableSignal<KjTableState>['update'];\n resetState: () => void;\n defaultState: KjTableState;\n}): { gridApi: KjGridApi<TData>; columnApi: KjColumnApi<TData> } {\n const { state, table, patch, resetState, defaultState } = opts;\n\n const setStateMerge = (partial: Partial<KjTableState>): void => {\n opts.setStateInternal((s) => ({ ...s, ...partial }));\n };\n\n // ── KjColumnApi namespaces ────────────────────────────────────────────────\n\n const visibility: KjColumnVisibilityApi = {\n get: () => state().columnVisibility,\n set: (model) => patch('columnVisibility', model),\n isVisible: (id) => state().columnVisibility[id] !== false,\n setVisible: (id, visible) =>\n patch('columnVisibility', (prev: VisibilityState) => ({ ...prev, [id]: visible })),\n setManyVisible: (ids, visible) =>\n patch('columnVisibility', (prev: VisibilityState) => {\n const next = { ...prev };\n for (const id of ids) next[id] = visible;\n return next;\n }),\n };\n\n const sizing: KjColumnSizingApi = {\n get: () => state().columnSizing,\n set: (model) => patch('columnSizing', model),\n width: (id) => table().getColumn(id)?.getSize() ?? 0,\n setWidth: (id, width) =>\n patch('columnSizing', (prev: ColumnSizingState) => ({ ...prev, [id]: width })),\n };\n\n const pinning: KjColumnPinningApi = {\n get: () => state().columnPinning,\n set: (model) => patch('columnPinning', model),\n of: (id) => {\n const p = state().columnPinning;\n if ((p.left ?? []).includes(id)) return 'left';\n if ((p.right ?? []).includes(id)) return 'right';\n return null;\n },\n pin: (id, side) =>\n patch('columnPinning', (prev: ColumnPinningState) => ({\n left: (prev.left ?? []).filter((c) => c !== id).concat(side === 'left' ? [id] : []),\n right: (prev.right ?? []).filter((c) => c !== id).concat(side === 'right' ? [id] : []),\n })),\n };\n\n const order: KjColumnOrderApi = {\n get: () => state().columnOrder,\n set: (o) => patch('columnOrder', o),\n move: (id, toIndex) =>\n patch('columnOrder', (prev: ColumnOrderState) => {\n const base = prev.length > 0 ? prev : table().getAllLeafColumns().map((c) => c.id);\n const without = base.filter((c) => c !== id);\n const clamped = Math.max(0, Math.min(toIndex, without.length));\n return [...without.slice(0, clamped), id, ...without.slice(clamped)];\n }),\n };\n\n const colGrouping: KjColumnGroupingApi = {\n is: (id) => state().grouping.includes(id),\n set: (id, grouped) =>\n patch('grouping', (prev: GroupingState) =>\n grouped\n ? prev.includes(id) ? prev : [...prev, id]\n : prev.filter((c) => c !== id),\n ),\n };\n\n const columnApi: KjColumnApi<TData> = {\n get: (id) => table().getColumn(id) ?? null,\n all: () => table().getAllColumns(),\n leaves: () => table().getAllLeafColumns(),\n visibleLeaves: () => table().getVisibleLeafColumns(),\n visibility,\n sizing,\n pinning,\n order,\n grouping: colGrouping,\n reset: () =>\n setStateMerge({\n columnVisibility: defaultState.columnVisibility,\n columnSizing: defaultState.columnSizing,\n columnPinning: defaultState.columnPinning,\n columnOrder: defaultState.columnOrder,\n grouping: defaultState.grouping,\n }),\n };\n\n // ── KjGridApi namespaces ──────────────────────────────────────────────────\n\n const rows: KjRowsApi<TData> = {\n all: () => (table().options.data ?? []) as readonly TData[],\n displayed: () => table().getRowModel().rows,\n count: () => (table().options.data?.length ?? 0),\n filteredCount: () => table().getFilteredRowModel().rows.length,\n displayedCount: () => table().getRowModel().rows.length,\n get: (id) => table().getRow(id, /* searchAll */ true),\n };\n\n const selection: KjSelectionApi<TData> = {\n get: () => state().rowSelection,\n set: (model) => patch('rowSelection', model),\n rows: () => table().getSelectedRowModel().rows,\n ids: () => Object.keys(state().rowSelection).filter((id) => state().rowSelection[id]),\n has: () => {\n const sel = state().rowSelection;\n for (const key in sel) if (sel[key]) return true;\n return false;\n },\n select: (id, selected = true) =>\n patch('rowSelection', (prev: RowSelectionState) => ({ ...prev, [id]: selected })),\n deselect: (id) =>\n patch('rowSelection', (prev: RowSelectionState) => {\n const next = { ...prev };\n delete next[id];\n return next;\n }),\n toggle: (id) =>\n patch('rowSelection', (prev: RowSelectionState) => ({ ...prev, [id]: !prev[id] })),\n all: () => {\n const next: RowSelectionState = {};\n for (const r of table().getFilteredRowModel().rows) next[r.id] = true;\n patch('rowSelection', next);\n },\n clear: () => patch('rowSelection', {}),\n };\n\n const sort: KjSortApi = {\n get: () => state().sorting,\n set: (s) => patch('sorting', s),\n toggle: (columnId, multi = false) => {\n const col = table().getColumn(columnId);\n if (!col) return;\n col.toggleSorting(undefined, multi);\n },\n clear: () => patch('sorting', []),\n };\n\n const globalFilter: KjGlobalFilterApi = {\n get: () => state().globalFilter,\n set: (value) => patch('globalFilter', value),\n clear: () => patch('globalFilter', ''),\n };\n\n const filter: KjFilterApi = {\n get: (id) => state().columnFilters.find((f) => f.id === id)?.value,\n set: (id, value) =>\n patch('columnFilters', (prev: ColumnFiltersState) => {\n const without = prev.filter((f) => f.id !== id);\n return value === undefined || value === null || value === ''\n ? without\n : [...without, { id, value }];\n }),\n clear: (id) =>\n patch('columnFilters', (prev: ColumnFiltersState) => prev.filter((f) => f.id !== id)),\n all: () => state().columnFilters,\n setAll: (filters) => patch('columnFilters', filters),\n global: globalFilter,\n clearAll: () => setStateMerge({ columnFilters: [], globalFilter: '' }),\n\n getModelFor: (id) => {\n const v = state().columnFilters.find((f) => f.id === id)?.value;\n return isKjFilterModel(v) ? v : undefined;\n },\n setModelFor: (id, model) =>\n patch('columnFilters', (prev: ColumnFiltersState) => {\n const without = prev.filter((f) => f.id !== id);\n return model == null ? without : [...without, { id, value: model }];\n }),\n getModel: (): KjGridFilterModel => {\n const out: Record<string, KjFilterModel> = {};\n for (const entry of state().columnFilters) {\n if (isKjFilterModel(entry.value)) out[entry.id] = entry.value;\n }\n return out;\n },\n setModel: (model) =>\n patch('columnFilters', () => {\n if (!model) return [];\n return Object.entries(model).map(([id, value]) => ({ id, value }));\n }),\n };\n\n const pagination: KjPaginationApi = {\n get: () => state().pagination,\n set: (p) => patch('pagination', p),\n pageCount: () => table().getPageCount(),\n setPageIndex: (pageIndex) =>\n patch('pagination', (prev: PaginationState) => ({ ...prev, pageIndex: Math.max(0, pageIndex) })),\n setPageSize: (pageSize) =>\n patch('pagination', () => ({ pageIndex: 0, pageSize: Math.max(1, pageSize) })),\n next: () =>\n patch('pagination', (prev: PaginationState) => ({\n ...prev,\n pageIndex: Math.min(prev.pageIndex + 1, Math.max(0, table().getPageCount() - 1)),\n })),\n previous: () =>\n patch('pagination', (prev: PaginationState) => ({\n ...prev,\n pageIndex: Math.max(0, prev.pageIndex - 1),\n })),\n first: () => patch('pagination', (prev: PaginationState) => ({ ...prev, pageIndex: 0 })),\n last: () =>\n patch('pagination', (prev: PaginationState) => ({\n ...prev,\n pageIndex: Math.max(0, table().getPageCount() - 1),\n })),\n };\n\n const expansion: KjExpansionApi<TData> = {\n get: () => state().expanded,\n set: (e) => patch('expanded', e),\n setRow: (id, expanded) =>\n patch('expanded', (prev: ExpandedState) => {\n if (prev === true) {\n const next: Record<string, boolean> = {};\n for (const r of table().getCoreRowModel().rows) next[r.id] = true;\n next[id] = expanded;\n return next;\n }\n return { ...prev, [id]: expanded };\n }),\n toggle: (id) =>\n patch('expanded', (prev: ExpandedState) => {\n if (prev === true) {\n const next: Record<string, boolean> = {};\n for (const r of table().getCoreRowModel().rows) next[r.id] = true;\n next[id] = false;\n return next;\n }\n return { ...prev, [id]: !prev[id] };\n }),\n expandAll: () => patch('expanded', true),\n collapseAll: () => patch('expanded', {}),\n };\n\n const grouping: KjGroupingApi = {\n get: () => state().grouping,\n set: (g) => patch('grouping', g),\n add: (id) =>\n patch('grouping', (prev: GroupingState) => prev.includes(id) ? prev : [...prev, id]),\n remove: (id) =>\n patch('grouping', (prev: GroupingState) =>\n id === undefined ? [] : prev.filter((c) => c !== id),\n ),\n };\n\n const density: KjDensityApi = {\n get: () => state().density,\n set: (d: KjTableDensity) => patch('density', d),\n };\n\n const gridApi: KjGridApi<TData> = {\n state,\n table,\n rows,\n selection,\n sort,\n filter,\n pagination,\n expansion,\n grouping,\n density,\n setState: setStateMerge,\n resetState,\n };\n\n return { gridApi, columnApi };\n}\n","import {\n ColumnDef, RowData,\n createAngularTable, getCoreRowModel, getSortedRowModel, getFilteredRowModel,\n getPaginationRowModel, getExpandedRowModel, getGroupedRowModel,\n type ColumnSizingInfoState,\n type Table,\n} from '@tanstack/angular-table';\nimport { Directive, InjectionToken, computed, input, model, signal } from '@angular/core';\nimport { toDeepSignal, type DeepSignal } from '../primitives/signals/deep-signal';\nimport { createGridApi } from './grid-api-impl';\nimport type { KjColumnApi, KjGridApi } from './grid-api';\nimport type { KjTableState } from './table.types';\n\n/** Injection token providing the TanStack table instance to child directives. */\nexport const KJ_TABLE = new InjectionToken<KjTable<unknown>>('KjTable');\n\nconst DEFAULT_STATE: KjTableState = {\n sorting: [],\n columnFilters: [],\n globalFilter: '',\n pagination: { pageIndex: 0, pageSize: 25 },\n rowSelection: {},\n columnSizing: {},\n columnVisibility: {},\n columnOrder: [],\n columnPinning: { left: [], right: [] },\n expanded: {},\n grouping: [],\n density: 'standard',\n};\n\nconst DEFAULT_RESIZE_INFO: ColumnSizingInfoState = {\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: [],\n};\n\n/**\n * Wraps TanStack Angular Table. Accepts `kjTable` (columns) and `kjTableData` signal inputs and\n * exposes the table instance (rows, headers, sorting) via the `KJ_TABLE` context token.\n *\n * Use `table` to access the full TanStack `Table<T>` instance in templates via `exportAs: 'kjTable'`.\n *\n * State is exposed as a single `DeepSignal<KjTableState>`:\n *\n * - `state()` — full snapshot (also used by `kjTableResource`).\n * - `state.sorting()`, `state.pagination()`, … — per-slice readonly signals,\n * lazily memoised by the deep-signal proxy. Reading one only re-runs your\n * consumer when that specific slice changes.\n *\n * @example\n * ```html\n * <table [kjTable]=\"columns\" [kjTableData]=\"rows\" #tbl=\"kjTable\">\n * <thead>\n * @for (headerGroup of tbl.table().getHeaderGroups(); track headerGroup.id) {\n * <tr>\n * @for (header of headerGroup.headers; track header.id) {\n * <th kjTableHeader [kjHeader]=\"header\">\n * {{ header.column.columnDef.header }}\n * </th>\n * }\n * </tr>\n * }\n * </thead>\n * </table>\n * ```\n */\n@Directive({\n selector: '[kjTable]',\n standalone: true,\n exportAs: 'kjTable',\n providers: [{ provide: KJ_TABLE, useExisting: KjTable }],\n})\nexport class KjTable<TData extends RowData = unknown> {\n /** Column definitions for the table. */\n kjTable = input.required<ColumnDef<TData>[]>();\n\n /**\n * Data rows for the table. A `model()` so the styled wrapper can write\n * resource-resolved rows back into the directive when the user uses\n * `[kjResource]` instead of `[kjData]`. The model defaults to `[]`, and\n * a one-way external binding (`[kjTableData]=\"rows\"`) keeps working.\n */\n kjTableData = model<TData[]>([]);\n\n /**\n * Optional accessor that returns a stable id for each row. When set, TanStack\n * keys row state (selection, expansion, pinning) by this id rather than by\n * row index. Mirrors TanStack's `getRowId` option.\n */\n kjGetRowId = input<((row: TData, index: number) => string) | undefined>(undefined);\n\n private readonly _state = signal<KjTableState>(DEFAULT_STATE);\n\n /**\n * The full table state as a single deep signal. Call `state()` for the\n * whole snapshot, or read any slice (`state.sorting()`, `state.pagination()`,\n * `state.density()`…) as an individual `Signal<T>` — child signals are\n * lazily memoised so each only invalidates on its own slice's change.\n */\n readonly state: DeepSignal<KjTableState> = toDeepSignal(this._state.asReadonly());\n\n /**\n * Transient column-resize tracker. Updated continuously by TanStack while\n * the user drags a resize handle and read by the styled wrapper to render\n * a preview guide line. Excluded from `state` so it never gets persisted\n * or echoed through `(stateChange)`.\n */\n private readonly _columnSizingInfo = signal<ColumnSizingInfoState>(DEFAULT_RESIZE_INFO);\n readonly columnSizingInfo = this._columnSizingInfo.asReadonly();\n\n /**\n * Manual-pagination + total-row-count wiring for server-driven tables.\n * When `rowCount` is set to a non-null value, the wrapper assumes the\n * loader pages rows externally — TanStack stops paginating client-side\n * and the pagination / status-bar slots derive their totals from the\n * remote count. Set both via `setRowCount(total)` and read them through\n * the public `rowCount` / `manualPagination` signals if you need them.\n */\n private readonly _rowCount = signal<number | null>(null);\n readonly rowCount = this._rowCount.asReadonly();\n readonly manualPagination = computed(() => this._rowCount() !== null);\n setRowCount(n: number | null): void {\n this._rowCount.set(n);\n }\n\n /**\n * Apply a TanStack updater (value or function) to a single state slice.\n *\n * Dedupes content-equal updates: TanStack often calls `on*Change` with a\n * fresh object literal that has identical fields (e.g. pagination emits\n * `{pageIndex:0, pageSize:25}` on data ingestion). Without dedupe, the\n * state signal invalidates on every such call, which cascades into\n * `(stateChange)` consumers that drive `kjTableResource` — creating an\n * infinite loader loop where the spinner never goes away.\n */\n private patch<K extends keyof KjTableState>(\n key: K,\n updater: KjTableState[K] | ((prev: KjTableState[K]) => KjTableState[K]),\n ): void {\n this._state.update(s => {\n const next = typeof updater === 'function'\n ? (updater as (p: KjTableState[K]) => KjTableState[K])(s[key])\n : updater;\n if (sliceEqual(s[key], next)) return s;\n return { ...s, [key]: next };\n });\n }\n\n /** The TanStack table instance. Access rows, headers, and state here. */\n readonly table: () => Table<TData> = createAngularTable<TData>(() => ({\n data: this.kjTableData(),\n columns: this.kjTable(),\n getRowId: this.kjGetRowId()\n ? (row, index) => this.kjGetRowId()!(row, index)\n : undefined,\n // `columnResizeMode: 'onEnd'` defers the actual column width write until\n // the user releases the resize handle. While dragging, the wrapper reads\n // `state.columnSizingInfo().deltaOffset` to render a vertical preview\n // guide so the user sees where the new edge will land before reflow.\n columnResizeMode: 'onEnd',\n // Server-mode wiring: when a total `rowCount` is registered, switch\n // TanStack to manual pagination so the loader-page becomes the\n // visible page (no client-side slicing) and pagination controls\n // derive their totals from the remote count.\n manualPagination: this._rowCount() !== null,\n rowCount: this._rowCount() ?? undefined,\n state: { ...this._state(), columnSizingInfo: this._columnSizingInfo() },\n onSortingChange: u => this.patch('sorting', u),\n onColumnFiltersChange: u => this.patch('columnFilters', u),\n onGlobalFilterChange: u => this.patch('globalFilter', u),\n onPaginationChange: u => this.patch('pagination', u),\n onRowSelectionChange: u => this.patch('rowSelection', u),\n onColumnSizingChange: u => this.patch('columnSizing', u),\n onColumnSizingInfoChange: u => this._columnSizingInfo.update(p => typeof u === 'function' ? (u as (prev: ColumnSizingInfoState) => ColumnSizingInfoState)(p) : u),\n onColumnVisibilityChange: u => this.patch('columnVisibility', u),\n onColumnOrderChange: u => this.patch('columnOrder', u),\n onColumnPinningChange: u => this.patch('columnPinning', u),\n onExpandedChange: u => this.patch('expanded', u),\n onGroupingChange: u => this.patch('grouping', u),\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getGroupedRowModel: getGroupedRowModel(),\n // Selection is enabled by default in TanStack, but be explicit so a\n // future opts-passthrough doesn't accidentally turn it off and break\n // the styled wrapper's row-click toggle.\n enableRowSelection: true,\n enableMultiRowSelection: true,\n }));\n\n /** Merge a partial state. Unspecified slices are left untouched. */\n setState(partial: Partial<KjTableState>): void {\n this._state.update(s => ({ ...s, ...partial }));\n }\n\n /** Reset every slice back to the directive's default state. */\n resetState(): void { this._state.set(DEFAULT_STATE); }\n\n // ── Public API surface (AG-Grid-style) ─────────────────────────────────\n // Built lazily on first read so the TanStack table getter and the state\n // signal are already wired when callers touch the api.\n\n private _api?: { gridApi: KjGridApi<TData>; columnApi: KjColumnApi<TData> };\n private buildApi(): { gridApi: KjGridApi<TData>; columnApi: KjColumnApi<TData> } {\n return this._api ??= createGridApi<TData>({\n state: this._state.asReadonly(),\n table: this.table,\n patch: (key, updater) => this.patch(key, updater),\n setStateInternal: this._state.update.bind(this._state),\n resetState: () => this.resetState(),\n defaultState: DEFAULT_STATE,\n });\n }\n\n /**\n * Grid-wide imperative API — selection, sorting, filtering, pagination,\n * expansion, grouping, density, bulk state. Stable across grid lifetime.\n * Passed to custom filter/editor components via their params object so\n * user code never has to reach into TanStack or the directive directly.\n */\n get gridApi(): KjGridApi<TData> { return this.buildApi().gridApi; }\n\n /**\n * Per-column imperative API — visibility, width, pinning, order, grouping.\n * Mirrors AG-Grid's `ColumnApi`. Passed alongside `gridApi` to custom\n * filter/editor components.\n */\n get columnApi(): KjColumnApi<TData> { return this.buildApi().columnApi; }\n}\n\n/**\n * Shallow-equality check tuned for `KjTableState` slices — plain objects,\n * primitive arrays, and primitives. Returns `true` when `a` and `b` are\n * structurally identical at one level (object keys + values compared with\n * `Object.is`; arrays element-wise the same way). Falls back to `Object.is`\n * for non-object types. Cheap enough to run on every `patch()`.\n */\nfunction sliceEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (a == null || b == null) return false;\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n const av = a[i];\n const bv = b[i];\n if (Object.is(av, bv)) continue;\n // Sorting / column-filter entries are plain objects — one-level deep.\n if (av && bv && typeof av === 'object' && typeof bv === 'object') {\n if (!sliceEqual(av, bv)) return false;\n } else {\n return false;\n }\n }\n return true;\n }\n if (Array.isArray(b)) return false;\n const ao = a as Record<string, unknown>;\n const bo = b as Record<string, unknown>;\n const ak = Object.keys(ao);\n const bk = Object.keys(bo);\n if (ak.length !== bk.length) return false;\n for (const k of ak) {\n const av = ao[k];\n const bv = bo[k];\n if (Object.is(av, bv)) continue;\n // columnPinning has `{ left: string[], right: string[] }` — recurse one level.\n if (Array.isArray(av) || (av && typeof av === 'object')) {\n if (!sliceEqual(av, bv)) return false;\n } else {\n return false;\n }\n }\n return true;\n}\n","import { Directive, computed, inject, input } from '@angular/core';\nimport type { RowData, Table } from '@tanstack/angular-table';\nimport { KJ_TABLE } from './table';\n\n/** Sort direction for table columns. */\nexport type KjSortDirection = 'asc' | 'desc';\n\n/**\n * Marks a `<th>` as a sortable column header. Sets `aria-sort` based on TanStack sort state.\n * Clicking toggles sort direction only when the column has sorting enabled.\n * If `enableSorting: false` is set on the column def, the header renders as plain text.\n *\n * @example\n * ```html\n * <th kjTableHeader [kjHeader]=\"header\" scope=\"col\">Name</th>\n * ```\n */\n@Directive({\n selector: '[kjTableHeader]',\n standalone: true,\n host: {\n '[style.cursor]': 'canSort() ? \"pointer\" : null',\n '[attr.tabindex]': 'canSort() ? \"0\" : null',\n '[attr.aria-sort]': 'canSort() ? ariaSort() : null',\n '[attr.data-sort]': 'canSort() ? sortDir() : null',\n '(click)': 'onHeaderClick()',\n '(keydown.enter)': 'onHeaderClick()',\n '(keydown.space)': '$event.preventDefault(); onHeaderClick()',\n },\n})\nexport class KjTableHeader<TData extends RowData = unknown> {\n /** The TanStack header object for this column. Pass from the table's getHeaderGroups(). */\n kjHeader = input<ReturnType<Table<TData>['getHeaderGroups']>[0]['headers'][0] | undefined>(undefined);\n\n private readonly _table = inject(KJ_TABLE, { optional: true });\n\n /** Whether this column supports sorting, derived from TanStack column state. */\n readonly canSort = computed(() => this.kjHeader()?.column.getCanSort() ?? false);\n\n /** Current sort direction, or null when unsorted. */\n readonly sortDir = computed((): KjSortDirection | null => {\n // Track parent table sorting signal so this computed re-runs on sort changes.\n this._table?.state.sorting();\n const h = this.kjHeader();\n if (!h) return null;\n const sorted = h.column.getIsSorted();\n if (sorted === 'asc') return 'asc';\n if (sorted === 'desc') return 'desc';\n return null;\n });\n\n /** ARIA sort attribute value derived from sort direction. */\n readonly ariaSort = computed(() => {\n const d = this.sortDir();\n if (d === 'asc') return 'ascending';\n if (d === 'desc') return 'descending';\n return 'none';\n });\n\n onHeaderClick(): void {\n if (this.canSort()) this.kjHeader()?.column.toggleSorting();\n }\n}\n","import { Directive, computed, inject, input } from '@angular/core';\nimport type { RowData, Table } from '@tanstack/angular-table';\nimport { KJ_TABLE, KjTable } from './table';\n\ntype Row<T> = ReturnType<Table<T>['getRowModel']>['rows'][number];\n\n@Directive({\n selector: '[kjTableRow]',\n standalone: true,\n host: {\n 'role': 'row',\n '[attr.aria-rowindex]': 'ariaRowIndex()',\n '[attr.aria-selected]': 'isSelectable() ? isSelected() : null',\n '[attr.data-selected]': 'isSelected() ? \"\" : null',\n },\n})\nexport class KjTableRow<TData extends RowData = unknown> {\n /** TanStack row instance — pass from getRowModel().rows. */\n kjRow = input.required<Row<TData>>();\n\n private readonly table = inject(KJ_TABLE) as unknown as KjTable<TData>;\n\n /** 1-based ARIA index — accounts for header row(s). */\n readonly ariaRowIndex = computed(() => this.kjRow().index + 2);\n readonly isSelectable = computed(() => Object.keys(this.table.state.rowSelection()).length >= 0); // always true if selection enabled\n readonly isSelected = computed(() => {\n // Track parent selection signal so the computed re-runs on selection changes.\n this.table.state.rowSelection();\n return this.kjRow().getIsSelected();\n });\n}\n","import { Directive, ElementRef, computed, inject, input } from '@angular/core';\nimport type { RowData, Table } from '@tanstack/angular-table';\n\ntype Cell<T> = ReturnType<Table<T>['getRowModel']>['rows'][number]['getVisibleCells'] extends () => infer R\n ? R extends Array<infer C> ? C : never : never;\n\n@Directive({\n selector: '[kjTableCell]',\n standalone: true,\n host: {\n 'role': 'gridcell',\n '[attr.aria-colindex]': 'ariaColIndex()',\n '[attr.data-pin]': 'pin()',\n },\n})\nexport class KjTableCell<TData extends RowData = unknown> {\n /** TanStack cell instance — pass from row.getVisibleCells(). */\n kjCell = input.required<Cell<TData>>();\n\n private readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n\n /** Public host element handle — used by `KjTableKeyboardNav` to focus cells. */\n get hostElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n /** 1-based ARIA index for the column. */\n readonly ariaColIndex = computed(() => {\n const cell = this.kjCell() as { column?: { getIndex?: () => number } };\n const idx = cell.column?.getIndex?.();\n return idx != null ? idx + 1 : null;\n });\n\n readonly pin = computed(() => {\n const cell = this.kjCell() as { column?: { getIsPinned?: () => unknown } };\n return cell.column?.getIsPinned?.() ?? null;\n });\n}\n","import { Directive, contentChildren } from '@angular/core';\nimport { KjTableCell } from './table-cell';\n\n/**\n * WAI-ARIA Grid keyboard pattern. Attach to the same element as `[kjTable]`.\n * Handles Arrow / Home / End / Ctrl+Home/End / PageUp/Down. Tab leaves the\n * grid; cell-level F2 / Enter / Esc / Space are handled by row/cell\n * directives or the styled wrapper's editor.\n *\n * Cells are resolved through Angular's `contentChildren()` query against\n * `KjTableCell`, so the directive only ever sees **rendered** (visible) cells.\n * That keeps navigation correct under virtualization (off-window rows aren't\n * in the query result) and column visibility (hidden columns aren't queryable\n * either). No raw DOM selectors.\n */\n@Directive({\n selector: '[kjTableKeyboardNav]',\n standalone: true,\n host: { '(keydown)': 'onKeyDown($event)' },\n})\nexport class KjTableKeyboardNav {\n /** Live list of every `KjTableCell` rendered inside the grid. */\n private readonly cells = contentChildren(KjTableCell, { descendants: true });\n\n onKeyDown(event: KeyboardEvent): void {\n const startEl = (event.target as HTMLElement).closest<HTMLElement>('[kjTableCell]');\n if (!startEl) return;\n\n const matrix = this.buildMatrix();\n if (!matrix.length) return;\n\n const pos = this.findCell(matrix, startEl);\n if (!pos) return;\n const { rowIdx, colIdx } = pos;\n\n let target: HTMLElement | null;\n\n switch (event.key) {\n case 'ArrowLeft': target = matrix[rowIdx]?.[colIdx - 1] ?? null; break;\n case 'ArrowRight': target = matrix[rowIdx]?.[colIdx + 1] ?? null; break;\n case 'ArrowUp': target = matrix[rowIdx - 1]?.[colIdx] ?? null; break;\n case 'ArrowDown': target = matrix[rowIdx + 1]?.[colIdx] ?? null; break;\n case 'Home':\n target = event.ctrlKey\n ? (matrix[0]?.[0] ?? null)\n : (matrix[rowIdx]?.[0] ?? null);\n break;\n case 'End': {\n const lastRow = matrix[matrix.length - 1];\n if (event.ctrlKey) {\n target = lastRow?.[lastRow.length - 1] ?? null;\n } else {\n const row = matrix[rowIdx];\n target = row?.[row.length - 1] ?? null;\n }\n break;\n }\n case 'PageDown':\n target = matrix[Math.min(rowIdx + 10, matrix.length - 1)]?.[colIdx] ?? null;\n break;\n case 'PageUp':\n target = matrix[Math.max(rowIdx - 10, 0)]?.[colIdx] ?? null;\n break;\n default: return;\n }\n\n if (target) {\n event.preventDefault();\n target.focus();\n }\n }\n\n /**\n * Group every rendered cell host by its `<tr>` ancestor, then sort the\n * rows in DOM order. This produces a `rows[r][c]` matrix that interleaves\n * pinned and virtualized tbodies in the order the user actually sees.\n */\n private buildMatrix(): HTMLElement[][] {\n const byRow = new Map<HTMLTableRowElement, HTMLElement[]>();\n const order: HTMLTableRowElement[] = [];\n for (const cell of this.cells()) {\n const host = cell.hostElement;\n const tr = host.closest<HTMLTableRowElement>('tr');\n if (!tr) continue;\n if (!byRow.has(tr)) {\n byRow.set(tr, []);\n order.push(tr);\n }\n byRow.get(tr)!.push(host);\n }\n order.sort((a, b) =>\n a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n );\n return order.map((tr) => byRow.get(tr)!);\n }\n\n private findCell(\n matrix: HTMLElement[][],\n el: HTMLElement,\n ): { rowIdx: number; colIdx: number } | null {\n for (let r = 0; r < matrix.length; r++) {\n const c = matrix[r].indexOf(el);\n if (c !== -1) return { rowIdx: r, colIdx: c };\n }\n return null;\n }\n}\n","import {\n InjectionToken,\n Injector,\n Provider,\n TemplateRef,\n Type,\n inject,\n type Signal,\n} from '@angular/core';\nimport type { Column, RowData } from '@tanstack/angular-table';\nimport type { KjColumnApi, KjGridApi } from './grid-api';\n\n/**\n * Context handed to every custom filter — component class or template.\n *\n * Mirrors AG-Grid's `IFilterParams` shape: the column being filtered, the\n * grid + column APIs for cross-cutting actions, the current model as a\n * reactive signal, and an imperative setter that clears the filter on\n * `null`/`undefined`/`''`. A signal is used (rather than a callback) so\n * filter UIs can derive bound values via `computed()` without their own\n * change-detection plumbing.\n *\n * Components either accept a single required input named `params` of this\n * shape, or call {@link injectKjFilterParams}. Templates receive the same\n * context via `$implicit` (`let-params`).\n */\nexport interface KjFilterParams<TData extends RowData = unknown, TValue = unknown> {\n /** The TanStack column the filter targets. */\n readonly column: Column<TData, TValue>;\n /** Grid-wide imperative API for cross-column actions. */\n readonly api: KjGridApi<TData>;\n /** Per-column imperative API. */\n readonly columnApi: KjColumnApi<TData>;\n /** Live filter model — reactive view of `column.getFilterValue()`. */\n readonly model: Signal<TValue | null>;\n /** Imperative setter. `null`, `undefined`, or `''` clear the filter. */\n setModel(value: TValue | null | undefined): void;\n /** True when the filter currently restricts results. */\n isActive(): boolean;\n /** Convenience: clear this filter. Equivalent to `setModel(null)`. */\n clear(): void;\n}\n\n/**\n * Anything that can render a filter UI: a standalone component class or a\n * `TemplateRef` whose `$implicit` context is a `KjFilterParams`.\n */\nexport type KjFilterRenderer<TData extends RowData = unknown, TValue = unknown> =\n | Type<{ params?: unknown } & object>\n | TemplateRef<KjFilterParams<TData, TValue>>;\n\n/**\n * Private token. Use {@link provideKjFilterParams} / {@link injectKjFilterParams}\n * — the token itself is not exported from the package so consumers cannot\n * bypass the helpers (and can't accidentally provide a malformed value).\n */\nconst KJ_FILTER_PARAMS = new InjectionToken<KjFilterParams>('kj.filter.params');\n\n/**\n * Returns a `Provider` that exposes a `KjFilterParams` instance to a child\n * injector. Used by `KjTableFilterOutlet` and the styled-wrapper's filter\n * mounting code; user code should normally not call this directly.\n */\nexport function provideKjFilterParams<TData extends RowData, TValue>(\n params: KjFilterParams<TData, TValue>,\n): Provider {\n return { provide: KJ_FILTER_PARAMS, useValue: params };\n}\n\n/**\n * Resolve the active `KjFilterParams` from the current injection context.\n *\n * @example\n * ```ts\n * @Component({ selector: 'my-filter', template: '…' })\n * class MyFilter {\n * protected readonly params = injectKjFilterParams<User, string>();\n * protected onInput(v: string) { this.params.setModel(v || null); }\n * }\n * ```\n */\nexport function injectKjFilterParams<\n TData extends RowData = unknown,\n TValue = unknown,\n>(injector?: Injector): KjFilterParams<TData, TValue> {\n const params = injector\n ? injector.get(KJ_FILTER_PARAMS)\n : inject(KJ_FILTER_PARAMS);\n return params as KjFilterParams<TData, TValue>;\n}\n","import {\n Directive,\n EnvironmentInjector,\n Injector,\n TemplateRef,\n Type,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n signal,\n type ComponentRef,\n type EmbeddedViewRef,\n type Signal,\n} from '@angular/core';\nimport type { Column, RowData } from '@tanstack/angular-table';\nimport { KJ_TABLE, KjTable } from './table';\nimport { provideKjFilterParams, type KjFilterParams, type KjFilterRenderer } from './filter-params';\n\n/**\n * Mounts a user-supplied filter UI (component class or `TemplateRef`) and\n * wires it to a single `Column`. The mounted view receives a stable\n * `KjFilterParams` object via:\n *\n * - the component's `params` input (if it declares one), and\n * - the `KJ_FILTER_PARAMS` DI token (for components that prefer DI), and\n * - `let-params` on a template.\n *\n * The outlet itself owns the column's filter signal — it reads\n * `column.getFilterValue()` through the table's state signal so any external\n * change (URL state, persisted state, programmatic `gridApi.setColumnFilter`)\n * flows back into the UI.\n *\n * @example\n * ```html\n * <th kj-table-filter-outlet [kjColumn]=\"col\" [kjFilter]=\"MyFilter\" />\n * ```\n */\n@Directive({\n selector: '[kj-table-filter-outlet],[kjTableFilterOutlet]',\n standalone: true,\n})\nexport class KjTableFilterOutlet<TData extends RowData = unknown, TValue = unknown> {\n /** The TanStack column this outlet's filter operates on. */\n kjColumn = input.required<Column<TData, TValue>>();\n\n /** The filter renderer — a component class or a `TemplateRef`. */\n kjFilter = input.required<KjFilterRenderer<TData, TValue>>();\n\n private readonly tableDir = inject<KjTable<TData>>(KJ_TABLE as never);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly envInjector = inject(EnvironmentInjector);\n private readonly parentInjector = inject(Injector);\n\n /** Reactive view of the column's current filter value. */\n private readonly modelSignal: Signal<TValue | null> = computed(() => {\n // Subscribe to the underlying state slice so this re-runs whenever the\n // filter changes — `getFilterValue()` itself isn't a signal.\n this.tableDir.state.columnFilters();\n const v = this.kjColumn().getFilterValue();\n return (v ?? null) as TValue | null;\n });\n\n private mounted = signal<\n | { kind: 'component'; ref: ComponentRef<{ params?: KjFilterParams<TData, TValue> }> }\n | { kind: 'template'; ref: EmbeddedViewRef<KjFilterParams<TData, TValue>> }\n | null\n >(null);\n\n constructor() {\n // Mount / re-mount whenever the renderer or column changes.\n effect(() => {\n const renderer = this.kjFilter();\n const column = this.kjColumn();\n this.destroyMount();\n this.viewContainer.clear();\n\n const params: KjFilterParams<TData, TValue> = {\n column,\n api: this.tableDir.gridApi,\n columnApi: this.tableDir.columnApi,\n model: this.modelSignal,\n setModel: (value) => {\n column.setFilterValue(\n value === '' || value === null || value === undefined ? undefined : value,\n );\n },\n isActive: () => column.getIsFiltered(),\n clear: () => column.setFilterValue(undefined),\n };\n\n if (renderer instanceof TemplateRef) {\n const view = this.viewContainer.createEmbeddedView(renderer, params);\n this.mounted.set({ kind: 'template', ref: view });\n } else {\n const childInjector = Injector.create({\n providers: [provideKjFilterParams(params)],\n parent: this.parentInjector,\n });\n const ref = this.viewContainer.createComponent(renderer as Type<{ params?: KjFilterParams<TData, TValue> }>, {\n environmentInjector: this.envInjector,\n injector: childInjector,\n });\n // Set the input only when the component declares it — Angular\n // throws if the input doesn't exist, so we guard with try/catch.\n try { ref.setInput('params', params); } catch { /* component opted out of the input */ }\n this.mounted.set({ kind: 'component', ref });\n }\n });\n }\n\n private destroyMount(): void {\n const m = this.mounted();\n if (!m) return;\n if (m.kind === 'component') m.ref.destroy();\n else m.ref.destroy();\n this.mounted.set(null);\n }\n}\n","import type { Row } from '@tanstack/angular-table';\nimport {\n isKjFilterModel,\n type KjDateFilterModel,\n type KjFilterModel,\n type KjMultiConditionFilterModel,\n type KjNumberFilterModel,\n type KjSetFilterModel,\n type KjTextFilterModel,\n} from './filter-models';\n\n/**\n * TanStack `filterFn` for {@link KjTextFilterModel}. Accepts the model as\n * the filter value and dispatches on `model.type`. Tolerates a bare\n * string (legacy \"contains\" raw value) so users migrating filters one at\n * a time don't have to flip every column simultaneously.\n *\n * Usage:\n * ```ts\n * kjColumn<User>({ accessorKey: 'name', filterFn: kjTextFilterFn })\n * ```\n */\nexport function kjTextFilterFn<TData>(\n row: Row<TData>,\n columnId: string,\n filterValue: unknown,\n): boolean {\n if (filterValue == null || filterValue === '') return true;\n\n // Legacy raw-string compatibility — treated as `contains`.\n if (typeof filterValue === 'string') {\n return contains(read(row, columnId), filterValue, /* caseSensitive */ false);\n }\n\n if (!isKjFilterModel(filterValue) || filterValue.filterType !== 'text') return true;\n const model = filterValue as KjTextFilterModel;\n const cell = read(row, columnId);\n const cs = model.caseSensitive === true;\n\n switch (model.type) {\n case 'blank': return cell == null || cell === '';\n case 'notBlank': return cell != null && cell !== '';\n case 'equals': return text(cell, cs) === text(model.filter ?? '', cs);\n case 'notEquals': return text(cell, cs) !== text(model.filter ?? '', cs);\n case 'contains': return contains(cell, model.filter ?? '', cs);\n case 'notContains': return !contains(cell, model.filter ?? '', cs);\n case 'startsWith': return text(cell, cs).startsWith(text(model.filter ?? '', cs));\n case 'endsWith': return text(cell, cs).endsWith(text(model.filter ?? '', cs));\n }\n}\n\n/**\n * TanStack `filterFn` for {@link KjNumberFilterModel}. Tolerates a bare\n * `[min, max]` tuple as legacy raw value (treated as `inRange`).\n */\nexport function kjNumberFilterFn<TData>(\n row: Row<TData>,\n columnId: string,\n filterValue: unknown,\n): boolean {\n if (filterValue == null) return true;\n\n // Legacy `[min, max]` tuple → inRange.\n if (Array.isArray(filterValue)) {\n const [min, max] = filterValue as [number | undefined, number | undefined];\n return inNumberRange(Number(read(row, columnId)), min, max);\n }\n\n if (!isKjFilterModel(filterValue) || filterValue.filterType !== 'number') return true;\n const model = filterValue as KjNumberFilterModel;\n const cell = Number(read(row, columnId));\n\n if (model.type === 'blank') return Number.isNaN(cell);\n if (model.type === 'notBlank') return !Number.isNaN(cell);\n\n // `inRange` is the one operator where a missing `filter` is still\n // meaningful — it just leaves the lower bound open. Every other operator\n // needs an explicit `filter`, so we treat its absence as \"no filter\".\n if (model.type === 'inRange') {\n if (model.filter == null && model.filterTo == null) return true;\n return inNumberRange(cell, model.filter, model.filterTo);\n }\n\n const value = model.filter;\n if (value == null) return true;\n\n switch (model.type) {\n case 'equals': return cell === value;\n case 'notEquals': return cell !== value;\n case 'greaterThan': return cell > value;\n case 'greaterThanOrEqual': return cell >= value;\n case 'lessThan': return cell < value;\n case 'lessThanOrEqual': return cell <= value;\n }\n return true;\n}\n\n/**\n * TanStack `filterFn` for {@link KjDateFilterModel}. Compares ISO date\n * strings as calendar dates (no time component, no TZ math). Tolerates a\n * `[from, to]` tuple of ISO strings as legacy raw value.\n */\nexport function kjDateFilterFn<TData>(\n row: Row<TData>,\n columnId: string,\n filterValue: unknown,\n): boolean {\n if (filterValue == null) return true;\n\n if (Array.isArray(filterValue)) {\n const [from, to] = filterValue as [string | undefined, string | undefined];\n return inIsoRange(isoOf(read(row, columnId)), from, to);\n }\n\n if (!isKjFilterModel(filterValue) || filterValue.filterType !== 'date') return true;\n const model = filterValue as KjDateFilterModel;\n const cell = isoOf(read(row, columnId));\n\n if (model.type === 'blank') return !cell;\n if (model.type === 'notBlank') return !!cell;\n if (!cell) return false;\n\n switch (model.type) {\n case 'equals': return cell === model.dateFrom;\n case 'notEquals': return cell !== model.dateFrom;\n case 'greaterThan': return !!model.dateFrom && cell > model.dateFrom;\n case 'lessThan': return !!model.dateFrom && cell < model.dateFrom;\n case 'inRange': return inIsoRange(cell, model.dateFrom, model.dateTo);\n }\n}\n\n/**\n * TanStack `filterFn` for {@link KjSetFilterModel}. The row passes if the\n * cell's stringified value matches any selected entry. Tolerates a bare\n * (non-array) value as legacy raw equality.\n */\nexport function kjSetFilterFn<TData>(\n row: Row<TData>,\n columnId: string,\n filterValue: unknown,\n): boolean {\n if (filterValue == null) return true;\n\n if (!isKjFilterModel(filterValue)) {\n return Object.is(read(row, columnId), filterValue);\n }\n\n if (filterValue.filterType !== 'set') return true;\n const model = filterValue as KjSetFilterModel;\n if (model.values.length === 0) return true;\n const cell = read(row, columnId);\n return model.values.some((v) => Object.is(v, cell));\n}\n\n/**\n * TanStack `filterFn` for {@link KjMultiConditionFilterModel}.\n * Recursively delegates each condition to the matching helper based on\n * `condition.filterType`.\n */\nexport function kjMultiFilterFn<TData>(\n row: Row<TData>,\n columnId: string,\n filterValue: unknown,\n): boolean {\n if (!isKjFilterModel(filterValue) || filterValue.filterType !== 'multi') return true;\n const model = filterValue as KjMultiConditionFilterModel;\n const reduce = model.operator === 'AND'\n ? model.conditions.every.bind(model.conditions)\n : model.conditions.some.bind(model.conditions);\n return reduce((c) => evaluate(row, columnId, c));\n}\n\n/** Dispatch a single model against the correct typed helper. */\nfunction evaluate<TData>(\n row: Row<TData>,\n columnId: string,\n model: KjFilterModel,\n): boolean {\n switch (model.filterType) {\n case 'text': return kjTextFilterFn(row, columnId, model);\n case 'number': return kjNumberFilterFn(row, columnId, model);\n case 'date': return kjDateFilterFn(row, columnId, model);\n case 'set': return kjSetFilterFn(row, columnId, model);\n case 'multi': return kjMultiFilterFn(row, columnId, model);\n }\n}\n\n// ── primitives ─────────────────────────────────────────────────────────────\n\nfunction read<TData>(row: Row<TData>, columnId: string): unknown {\n return row.getValue(columnId);\n}\nfunction text(value: unknown, caseSensitive: boolean): string {\n const s = value == null ? '' : String(value);\n return caseSensitive ? s : s.toLowerCase();\n}\nfunction contains(cell: unknown, needle: string, caseSensitive: boolean): boolean {\n return text(cell, caseSensitive).includes(text(needle, caseSensitive));\n}\nfunction inNumberRange(\n cell: number,\n min: number | undefined,\n max: number | undefined,\n): boolean {\n if (Number.isNaN(cell)) return false;\n if (min !== undefined && cell < min) return false;\n if (max !== undefined && cell > max) return false;\n return true;\n}\nfunction inIsoRange(\n cell: string | undefined,\n from: string | undefined,\n to: string | undefined,\n): boolean {\n if (!cell) return false;\n if (from && cell < from) return false;\n if (to && cell > to) return false;\n return true;\n}\nfunction isoOf(value: unknown): string | undefined {\n if (!value) return undefined;\n if (value instanceof Date) {\n const y = value.getFullYear();\n const m = String(value.getMonth() + 1).padStart(2, '0');\n const d = String(value.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n }\n if (typeof value === 'string') return value.slice(0, 10);\n return undefined;\n}\n","import type { ColumnDef, FilterFn, RowData } from '@tanstack/angular-table';\nimport {\n kjDateFilterFn,\n kjNumberFilterFn,\n kjSetFilterFn,\n kjTextFilterFn,\n} from './filter-fns';\nimport type { KjColumnDef, KjColumnMeta, KjColumnType } from './table.types';\n\nconst KJ_KEYS = [\n 'kjType', 'kjEditable', 'kjFilterable', 'kjPin', 'kjGroup', 'kjAgg',\n 'kjEditor', 'kjFilterUi', 'kjSelectOptions', 'kjExportable', 'kjPersist',\n] as const;\n\n/** Auto-wired matcher per `kjType`. Picked up only when the column def\n * doesn't already supply its own `filterFn`. */\nconst DEFAULT_FILTER_FNS: Readonly<Record<KjColumnType, FilterFn<unknown>>> = {\n text: kjTextFilterFn as unknown as FilterFn<unknown>,\n number: kjNumberFilterFn as unknown as FilterFn<unknown>,\n date: kjDateFilterFn as unknown as FilterFn<unknown>,\n select: kjSetFilterFn as unknown as FilterFn<unknown>,\n boolean: kjSetFilterFn as unknown as FilterFn<unknown>,\n};\n\n/** Strip leading 'kj' and lowercase first char. */\nfunction unprefix(k: string): keyof KjColumnMeta {\n return (k.slice(2, 3).toLowerCase() + k.slice(3)) as keyof KjColumnMeta;\n}\n\n/**\n * Define a column for `<kj-data-table>`. Pass-through for every TanStack\n * `ColumnDef` field; kj-specific top-level knobs (`kjType`, `kjEditable`,\n * `kjPin`, …) are hoisted into `meta.kj` for the wrapper to read.\n */\nexport function kjColumn<TData extends RowData>(def: KjColumnDef<TData>): ColumnDef<TData> {\n const kjMeta: Partial<KjColumnMeta<TData>> = {};\n const rest: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(def)) {\n if ((KJ_KEYS as readonly string[]).includes(k)) {\n if (v !== undefined) kjMeta[unprefix(k)] = v as never;\n } else {\n rest[k] = v;\n }\n }\n const existingMeta = (rest['meta'] ?? {}) as Record<string, unknown>;\n const meta = Object.keys(kjMeta).length === 0\n ? existingMeta\n : { ...existingMeta, kj: kjMeta };\n\n // Auto-wire `filterFn` from `kjType` so columns built with `kjColumn({ ... })`\n // actually understand the structured `KjFilterModel` the built-in filter UIs\n // write. User-supplied `filterFn` always wins.\n if (rest['filterFn'] === undefined && kjMeta.type) {\n const fn = DEFAULT_FILTER_FNS[kjMeta.type as KjColumnType];\n if (fn) rest['filterFn'] = fn as unknown as FilterFn<TData>;\n }\n\n return { ...rest, meta } as unknown as ColumnDef<TData>;\n}\n\n/** Define a column group (header grouping). Children are `kjColumn()` defs. */\nexport function kjColumnGroup<TData extends RowData>(def: {\n id?: string;\n header: ColumnDef<TData>['header'];\n columns: ColumnDef<TData>[];\n}): ColumnDef<TData> {\n return def as unknown as ColumnDef<TData>;\n}\n","import { resource, Signal, type ResourceRef } from '@angular/core';\nimport type { KjTableState, KjResourceResult } from './table.types';\n\nexport interface KjTableResourceOptions<TData, TRequest = unknown> {\n /** Signal carrying the table's current state. Wired into the resource request. */\n stateSignal: Signal<KjTableState>;\n /** Optional extra request inputs — merged into the loader's `request` arg. */\n request?: Signal<TRequest> | (() => TRequest);\n /** Async loader. Receives the current table state + extra request + abort signal. */\n loader: (ctx: {\n state: KjTableState;\n request: TRequest | undefined;\n abortSignal: AbortSignal;\n }) => Promise<KjResourceResult<TData>>;\n}\n\n/**\n * Resource that wires the table's state signal into Angular's `resource()`.\n * The loader is re-invoked whenever the state (or optional extra request)\n * changes. Aborts in-flight loads on changes.\n */\nexport function kjTableResource<TData, TRequest = unknown>(\n opts: KjTableResourceOptions<TData, TRequest>,\n): ResourceRef<KjResourceResult<TData> | undefined> {\n const requestSig = opts.request\n ? (typeof opts.request === 'function' ? opts.request : () => opts.request!())\n : () => undefined;\n return resource<KjResourceResult<TData>, { state: KjTableState; request: TRequest | undefined }>({\n params: () => ({ state: opts.stateSignal(), request: requestSig() as TRequest | undefined }),\n loader: ({ params, abortSignal }) => opts.loader({\n state: params.state,\n request: params.request,\n abortSignal,\n }),\n });\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\n/**\n * Adapter contract for persisting `<kj-data-table>` state. The default\n * factory yields an in-memory adapter in non-browser environments and a\n * localStorage adapter in the browser.\n */\nexport interface KjStorageAdapter {\n read<T>(key: string): T | null;\n write<T>(key: string, value: T): void;\n}\n\nexport interface LocalStorageAdapterOptions { keyPrefix?: string; }\nexport interface SessionStorageAdapterOptions { keyPrefix?: string; }\n\n/** Per-instance in-memory adapter. Survives nothing. Default in SSR/tests. */\nexport function inMemoryAdapter(): KjStorageAdapter {\n const store = new Map<string, unknown>();\n return {\n read: <T>(k: string): T | null => store.has(k) ? (store.get(k) as T) : null,\n write: <T>(k: string, v: T) => { store.set(k, v); },\n };\n}\n\nfunction wrap(get: () => Storage | null, prefix = ''): KjStorageAdapter {\n return {\n read<T>(k: string): T | null {\n const s = get();\n if (!s) return null;\n const raw = s.getItem(prefix + k);\n if (raw == null) return null;\n try { return JSON.parse(raw) as T; } catch { return null; }\n },\n write<T>(k: string, v: T) {\n const s = get();\n if (!s) return;\n try { s.setItem(prefix + k, JSON.stringify(v)); } catch { /* quota / serialization */ }\n },\n };\n}\n\nconst safeLocal = (): Storage | null => {\n try { return typeof localStorage !== 'undefined' ? localStorage : null; } catch { return null; }\n};\nconst safeSession = (): Storage | null => {\n try { return typeof sessionStorage !== 'undefined' ? sessionStorage : null; } catch { return null; }\n};\n\n/** Adapter backed by `localStorage`. No-ops in SSR. Optional `keyPrefix`. */\nexport function localStorageAdapter(opts: LocalStorageAdapterOptions = {}): KjStorageAdapter {\n return wrap(safeLocal, opts.keyPrefix ?? '');\n}\n\n/** Adapter backed by `sessionStorage`. No-ops in SSR. Optional `keyPrefix`. */\nexport function sessionStorageAdapter(opts: SessionStorageAdapterOptions = {}): KjStorageAdapter {\n return wrap(safeSession, opts.keyPrefix ?? '');\n}\n\n/** Default smart adapter — localStorage in browser, in-memory otherwise. */\nfunction defaultAdapter(): KjStorageAdapter {\n return safeLocal() ? localStorageAdapter() : inMemoryAdapter();\n}\n\n/**\n * DI token for the active table storage adapter. Default factory yields a\n * smart adapter (localStorage in browser, in-memory otherwise). Override via\n * `provideKjTableStorage(...)` at app scope or `[kjStorageAdapter]` per table.\n */\nexport const KJ_TABLE_STORAGE = new InjectionToken<KjStorageAdapter>('kj.table.storage', {\n factory: defaultAdapter,\n});\n\n/** Configures the app-wide table storage adapter. */\nexport function provideKjTableStorage(adapter: KjStorageAdapter): Provider {\n return { provide: KJ_TABLE_STORAGE, useValue: adapter };\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Shared context exposed by `KjField` to its label, help, error, and\n * registered control children. Children inject this via `KJ_FIELD` and react\n * to its signals; they never reach into the root directive directly.\n */\nexport interface KjFieldContext {\n /** The id of the labelled control. Auto-minted when missing. */\n readonly controlId: Signal<string>;\n /** The id of the field's `<label>` element. */\n readonly labelId: Signal<string>;\n /** Whether the registered control is required (mirrored from validators / `kjRequired`). */\n readonly required: Signal<boolean>;\n /** Whether the field is disabled (forwarded to the inner control). */\n readonly disabled: Signal<boolean>;\n /** Whether the registered control is currently in error state. */\n readonly invalid: Signal<boolean>;\n /** Ordered, deduplicated ids of all visible help + error elements. */\n readonly describedByIds: Signal<readonly string[]>;\n\n /** Register a help / error element so its id participates in the\n * `aria-describedby` chain. Returns a deregister callback. */\n registerDescribedBy(id: string, kind: 'help' | 'error'): () => void;\n}\n\n/** Injection token for {@link KjFieldContext}. */\nexport const KJ_FIELD = new InjectionToken<KjFieldContext>('KjField');\n","import {\n Directive,\n booleanAttribute,\n computed,\n input,\n signal,\n} from '@angular/core';\nimport { KJ_FIELD, KjFieldContext } from './field.context';\n\nlet kjFieldIdCounter = 0;\n\n/**\n * Root directive for a form field. Owns id minting, the\n * `aria-describedby` chain, and the required / disabled / invalid state\n * propagation that label, help, error, and the inner control all read.\n *\n * Project a single labelled control plus any number of `[kjFieldLabel]`,\n * `[kjFieldHelp]`, and `[kjFieldError]` children. The label auto-wires\n * `for=`; help and error ids are appended to the inner control's\n * `aria-describedby` via {@link KjAriaDescribedBy}; `aria-invalid` is\n * toggled based on `kjInvalid`.\n *\n * @example\n * ```html\n * <div kjField [kjInvalid]=\"ctrl.touched && ctrl.invalid\" [kjRequired]=\"true\">\n * <label kjFieldLabel>Email</label>\n * <input kjInput type=\"email\" [formControl]=\"ctrl\"\n * kjAriaDescribedBy [kjDescribedBy]=\"describedByIds()\" />\n * <span kjFieldHelp>We'll never share it.</span>\n * <span kjFieldError>Enter a valid email.</span>\n * </div>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name field\n * @doc-description Groups a form control with its label, help, and error messages and keeps their accessibility wiring in sync.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjField]',\n standalone: true,\n exportAs: 'kjField',\n providers: [{ provide: KJ_FIELD, useExisting: KjField }],\n host: {\n '[attr.data-orientation]': 'kjFieldOrientation()',\n '[attr.data-required]': 'required() ? \"\" : null',\n '[attr.data-invalid]': 'invalid() ? \"\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n },\n})\nexport class KjField implements KjFieldContext {\n private readonly uid = ++kjFieldIdCounter;\n\n /** Layout orientation. Reflected as `data-orientation`. */\n readonly kjFieldOrientation = input<'vertical' | 'horizontal'>('vertical');\n\n /** Whether the inner control is required. Drives the visual `*` and\n * `aria-required` on the control. */\n readonly kjRequired = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Whether the field (and its inner control) is disabled. Forwarded to\n * the control via the field context. */\n readonly kjDisabled = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Whether the inner control is currently in error state. Drives\n * `aria-invalid` on the control and toggles visibility of error\n * children. */\n readonly kjInvalid = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Override the auto-minted id for the inner control. When unset, the\n * field generates a stable `kj-field-N` id. */\n readonly kjFieldId = input<string | undefined>(undefined);\n\n /** Override the auto-minted id for the field's label element. */\n readonly kjFieldLabelId = input<string | undefined>(undefined);\n\n /** @internal */ readonly controlId = computed(\n () => this.kjFieldId() ?? `kj-field-${this.uid}`,\n );\n /** @internal */ readonly labelId = computed(\n () => this.kjFieldLabelId() ?? `kj-field-label-${this.uid}`,\n );\n /** @internal */ readonly required = computed(() => this.kjRequired());\n /** @internal */ readonly disabled = computed(() => this.kjDisabled());\n /** @internal */ readonly invalid = computed(() => this.kjInvalid());\n\n // Two parallel registrations (help + error) keep the order stable: hints\n // first, errors second. Each registration is an ordered array of ids.\n private readonly helpIds = signal<readonly string[]>([]);\n private readonly errorIds = signal<readonly string[]>([]);\n\n /** @internal */ readonly describedByIds = computed<string[]>(() => {\n const help = this.helpIds();\n // Errors only contribute to describedby when the field is invalid —\n // otherwise SR would announce error text on focus when the user hasn't\n // yet failed validation.\n const errors = this.invalid() ? this.errorIds() : [];\n const seen = new Set<string>();\n const out: string[] = [];\n for (const id of [...help, ...errors]) {\n if (id && !seen.has(id)) {\n seen.add(id);\n out.push(id);\n }\n }\n return out;\n });\n\n /** @internal */\n registerDescribedBy(id: string, kind: 'help' | 'error'): () => void {\n const target = kind === 'help' ? this.helpIds : this.errorIds;\n target.update((ids) => (ids.includes(id) ? ids : [...ids, id]));\n return () => target.update((ids) => ids.filter((x) => x !== id));\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { KJ_FIELD } from './field.context';\n\n/**\n * Label inside a `[kjField]`. Reflects the field's `controlId` as `for=`\n * and mirrors the field's required / disabled / invalid state via\n * `data-*` attributes (theme CSS draws the visual `*` for required).\n *\n * @example\n * ```html\n * <label kjFieldLabel>Email</label>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name field\n */\n@Directive({\n selector: '[kjFieldLabel]',\n standalone: true,\n host: {\n '[attr.id]': 'ctx.labelId()',\n '[attr.for]': 'ctx.controlId()',\n '[attr.data-required]': 'ctx.required() ? \"\" : null',\n '[attr.data-disabled]': 'ctx.disabled() ? \"\" : null',\n '[attr.data-invalid]': 'ctx.invalid() ? \"\" : null',\n },\n})\nexport class KjFieldLabel {\n /** @internal */ readonly ctx = inject(KJ_FIELD);\n}\n","import { DestroyRef, Directive, inject, input } from '@angular/core';\nimport { KJ_FIELD } from './field.context';\n\nlet kjFieldHelpIdCounter = 0;\n\n/**\n * Helper / description text inside a `[kjField]`. The host id is\n * auto-minted on construction and registered with the field so it\n * participates in the inner control's `aria-describedby` chain.\n *\n * Hidden when the field is in error state — the error message takes\n * precedence to avoid double-announcement.\n *\n * @example\n * ```html\n * <span kjFieldHelp>Format: name@example.com</span>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name field\n */\n@Directive({\n selector: '[kjFieldHelp]',\n standalone: true,\n host: {\n '[attr.id]': 'id()',\n '[attr.data-disabled]': 'ctx.disabled() ? \"\" : null',\n '[attr.hidden]': 'ctx.invalid() ? \"\" : null',\n },\n})\nexport class KjFieldHelp {\n /** @internal */ readonly ctx = inject(KJ_FIELD);\n\n /** Override the auto-minted host id. */\n readonly kjFieldHelpId = input<string | undefined>(undefined);\n\n /** @internal */ readonly id = (() => {\n const seq = ++kjFieldHelpIdCounter;\n return () => this.kjFieldHelpId() ?? `kj-field-help-${seq}`;\n })();\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n const deregister = this.ctx.registerDescribedBy(this.id(), 'help');\n destroyRef.onDestroy(deregister);\n }\n}\n","import { DestroyRef, Directive, inject, input } from '@angular/core';\nimport { KJ_FIELD } from './field.context';\n\nlet kjFieldErrorIdCounter = 0;\n\n/**\n * Error text inside a `[kjField]`. The host id is auto-minted on\n * construction and registered with the field so it participates in the\n * inner control's `aria-describedby` chain (only while visible).\n *\n * Carries `role=\"alert\"` + `aria-live=\"polite\"` so newly-shown errors\n * are announced. Hidden via `[hidden]` when the field is not in error\n * state.\n *\n * @example\n * ```html\n * <span kjFieldError>Please enter a valid email.</span>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name field\n */\n@Directive({\n selector: '[kjFieldError]',\n standalone: true,\n host: {\n role: 'alert',\n 'aria-live': 'polite',\n '[attr.id]': 'id()',\n '[attr.hidden]': '!ctx.invalid() ? \"\" : null',\n },\n})\nexport class KjFieldError {\n /** @internal */ readonly ctx = inject(KJ_FIELD);\n\n /** Override the auto-minted host id. */\n readonly kjFieldErrorId = input<string | undefined>(undefined);\n\n /** @internal */ readonly id = (() => {\n const seq = ++kjFieldErrorIdCounter;\n return () => this.kjFieldErrorId() ?? `kj-field-error-${seq}`;\n })();\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n const deregister = this.ctx.registerDescribedBy(this.id(), 'error');\n destroyRef.onDestroy(deregister);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { KJ_FIELD } from './field.context';\n\n/**\n * Compound input layout inside a `[kjField]`. Wraps an input together\n * with leading / trailing prefix or suffix addons (icons, units,\n * action buttons) and presents them as a single visual control.\n *\n * The directive itself is a presentational marker — it adds no ARIA\n * semantics beyond mirroring the field's invalid / disabled state via\n * `data-*` so theme CSS can paint the addons consistently with the\n * rest of the field.\n *\n * @example\n * ```html\n * <div kjField>\n * <label kjFieldLabel>Amount</label>\n * <div kjFieldGroup>\n * <span class=\"kj-field-group__prefix\">$</span>\n * <input kjInput type=\"number\" />\n * <span class=\"kj-field-group__suffix\">USD</span>\n * </div>\n * </div>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name field\n */\n@Directive({\n selector: '[kjFieldGroup]',\n standalone: true,\n host: {\n '[attr.data-disabled]': 'ctx.disabled() ? \"\" : null',\n '[attr.data-invalid]': 'ctx.invalid() ? \"\" : null',\n },\n})\nexport class KjFieldGroup {\n /** @internal */ readonly ctx = inject(KJ_FIELD);\n}\n","import { InjectionToken, Signal } from '@angular/core';\nimport { KjFileStatus, KjUploadableFile } from './file-upload.types';\n\n/**\n * Aggregate status across the full file list. Drives `data-status` on the\n * root host so theme CSS can style the wrapper differently while uploads are\n * in flight.\n */\nexport type KjFileUploadAggregateStatus =\n | 'idle'\n | 'pending'\n | 'uploading'\n | 'complete'\n | 'partial-error';\n\n/**\n * Public context the root `KjFileUpload` exposes via DI. Child directives\n * (`KjFileUploadTrigger`, `KjFileUploadDropzone`, `KjFileUploadList`,\n * `KjFileUploadItem`) inject this token.\n */\nexport interface KjFileUploadContext {\n /** Files currently selected (in selection order). Removed entries are dropped. */\n readonly files: Signal<readonly KjUploadableFile[]>;\n /** Whether the root is disabled. Drop-zone, trigger, and per-row controls all gate on this. */\n readonly disabled: Signal<boolean>;\n /** True while at least one file is being dragged over the drop-zone host. */\n readonly dragActive: Signal<boolean>;\n /** Aggregate status for the whole list. */\n readonly aggregateStatus: Signal<KjFileUploadAggregateStatus>;\n /** Whether `kjMultiple` is on. */\n readonly multiple: Signal<boolean>;\n /** Configured `accept` MIME / extension list (or `undefined`). */\n readonly accept: Signal<string | undefined>;\n /** Maximum bytes per file (or `undefined` for no per-file cap). */\n readonly maxSize: Signal<number | undefined>;\n /** Maximum total file count (or `undefined`). */\n readonly maxFiles: Signal<number | undefined>;\n\n /** Open the native file picker. No-op when disabled. */\n openPicker(): void;\n /**\n * Add candidate files (from drop, programmatic add, or the trigger's file\n * input change event). Validates against `accept` / `maxSize` / `maxFiles`,\n * mints ids for survivors, appends to the list, and announces.\n */\n addFiles(files: readonly File[] | FileList): void;\n /** Remove a file from the list by id. Aborts an in-flight upload. */\n remove(id: string): void;\n /** Clear all files. */\n clear(): void;\n /** Re-run the upload simulation / handler for a single file. */\n retry(id: string): void;\n /** Cancel an in-flight upload (sets status to `'cancelled'`). */\n cancel(id: string): void;\n /** Update per-file progress and status (called by simulators / examples). */\n setFileStatus(id: string, status: KjFileStatus, progress?: number | null, error?: string): void;\n\n /** @internal Used by `KjFileUploadTrigger` to register its hidden file input. */\n registerPickerInput(el: HTMLInputElement): void;\n /** @internal Used by the trigger / drop-zone to forward `change` events. */\n onPickerChange(event: Event): void;\n /** @internal Drag-event handlers delegated from the drop-zone host bindings. */\n onDragEnter(event: Event): void;\n onDragOver(event: Event): void;\n onDragLeave(event: Event): void;\n onDrop(event: Event): void;\n}\n\n/** DI token for the root `KjFileUpload`. */\nexport const KJ_FILE_UPLOAD = new InjectionToken<KjFileUploadContext>('KjFileUpload');\n\n/** Per-row context exposed by `KjFileUploadItem`. */\nexport interface KjFileUploadItemContext {\n /** The current `KjUploadableFile` for the row. */\n readonly file: Signal<KjUploadableFile>;\n /** `0..100` or `null`. */\n readonly progress: Signal<number | null>;\n /** Per-row status. */\n readonly status: Signal<KjFileStatus>;\n /** Re-run the upload for this row. */\n retry(): void;\n /** Cancel an in-flight upload for this row. */\n cancel(): void;\n /** Remove this row from the list. */\n remove(): void;\n}\n\n/** DI token for an individual file row. */\nexport const KJ_FILE_UPLOAD_ITEM = new InjectionToken<KjFileUploadItemContext>('KjFileUploadItem');\n","/**\n * Per-file lifecycle status. Set by the directive as files move through the\n * state machine; read by templates and per-row controls (retry / cancel /\n * remove gate on this).\n */\nexport type KjFileStatus =\n | 'preparing'\n | 'pending'\n | 'uploading'\n | 'done'\n | 'error'\n | 'cancelled';\n\n/**\n * The kouji envelope around a native `File`. `KjFileUpload` mints `id` (a\n * stable string) on selection so consumers can `track` per-row by identity.\n *\n * `progress` is `null` when the file hasn't started yet *or* the upload is\n * indeterminate; once the consumer reports `progress` events the directive\n * fills in `0..100`.\n */\nexport interface KjUploadableFile {\n /** Stable id, minted by `KjFileUpload`. Survives retry. */\n readonly id: string;\n /** The native `File`. */\n readonly file: File;\n /** Current per-file status. */\n readonly status: KjFileStatus;\n /** `0..100` once the upload reports progress; `null` otherwise. */\n readonly progress: number | null;\n /** Human-readable error message (set when `status === 'error'`). */\n readonly error?: string;\n}\n\n/**\n * Reason a candidate file was rejected at selection time. Drives both the\n * built-in validation messages and the structured `kjReject` output the\n * consumer can map to a hint / toast.\n */\nexport type KjFileRejectReason = 'size' | 'type' | 'count';\n\n/** A file that was filtered out at selection. */\nexport interface KjFileRejection {\n readonly file: File;\n readonly reason: KjFileRejectReason;\n}\n\n/** Built-in validation messages (English, locale-neutral). Override per-instance via `kjValidationMessages`. */\nexport interface KjFileUploadValidationMessages {\n size: string;\n type: string;\n count: string;\n}\n\nexport const KJ_FILE_UPLOAD_DEFAULT_MESSAGES: KjFileUploadValidationMessages = {\n size: 'File too large',\n type: 'File type not allowed',\n count: 'Too many files',\n};\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n Output,\n Signal,\n afterNextRender,\n booleanAttribute,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n KJ_FILE_UPLOAD,\n KJ_FILE_UPLOAD_ITEM,\n KjFileUploadAggregateStatus,\n KjFileUploadContext,\n KjFileUploadItemContext,\n} from './file-upload.context';\nimport {\n KJ_FILE_UPLOAD_DEFAULT_MESSAGES,\n KjFileRejection,\n KjFileStatus,\n KjFileUploadValidationMessages,\n KjUploadableFile,\n} from './file-upload.types';\n\nlet kjFileUploadIdCounter = 0;\nfunction nextFileId(): string {\n const cryptoLike = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (cryptoLike?.randomUUID) return `kjf-${cryptoLike.randomUUID().slice(0, 8)}`;\n return `kjf-${(++kjFileUploadIdCounter).toString(36)}`;\n}\n\n/**\n * Validates a single `File` against the configured `accept` / `maxSize`\n * constraints. Returns the rejection reason, or `null` if the file passes.\n *\n * `accept` matching follows the WHATWG file picker rules: a comma-separated\n * list of MIME types (`image/*`, `application/pdf`) or extensions\n * (`.pdf`, `.heic`). When `file.type` is empty (browsers don't report a MIME\n * type for some extensions, e.g. `.heic`), we fall back to extension\n * matching against `file.name`.\n *\n * @internal\n */\nexport function kjFileMatchesAccept(file: File, accept: string | undefined): boolean {\n if (!accept) return true;\n const tokens = accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean);\n if (!tokens.length) return true;\n const type = file.type.toLowerCase();\n const name = file.name.toLowerCase();\n for (const tok of tokens) {\n if (tok.startsWith('.')) {\n if (name.endsWith(tok)) return true;\n } else if (tok.endsWith('/*')) {\n const prefix = tok.slice(0, -1); // keep the trailing slash\n if (type.startsWith(prefix)) return true;\n } else if (type && tok === type) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Root file-upload directive. Owns the file list, drag state, and selection\n * validation (`accept` / `maxSize` / `maxFiles`). Provides `KJ_FILE_UPLOAD`\n * for child directives (trigger, drop-zone, list, item).\n *\n * The transport is the consumer's job — `KjFileUpload` ships the *state\n * machine* and emits structured events. Examples call `setFileStatus` from\n * a simulated upload to drive `KjProgressBar` per row.\n *\n * The directive owns a visually-hidden `aria-live=\"polite\"` span (mounted\n * as a child of the host on first render) that announces file additions,\n * removals, completions, and errors to screen readers (WCAG 4.1.3). The\n * announcement node is intentionally NOT the host element itself — clearing\n * `host.textContent` to retrigger SR readout would also wipe out the\n * projected drop-zone / list children, so we keep the live region as a\n * dedicated sibling.\n *\n * @example\n * ```html\n * <div kjFileUpload kjAccept=\"image/*\" [kjMaxSize]=\"5_000_000\">\n * <button kjFileUploadTrigger>Choose files</button>\n * <div kjFileUploadDropzone>Drop files here</div>\n * <ul kjFileUploadList>\n * @for (f of upload.files(); track f.id) {\n * <li kjFileUploadItem [kjFile]=\"f\">{{ f.file.name }}</li>\n * }\n * </ul>\n * </div>\n * ```\n * @doc-category Core/Data input\n * @doc\n * @doc-name file-upload\n * @doc-description Manages file selection, drag state, and validation while you control the upload transport.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjFileUpload]',\n standalone: true,\n exportAs: 'kjFileUpload',\n providers: [{ provide: KJ_FILE_UPLOAD, useExisting: KjFileUpload }],\n host: {\n '[attr.data-disabled]': 'kjDisabled() ? \"\" : null',\n '[attr.data-drag-active]': 'dragActive() ? \"\" : null',\n '[attr.data-status]': 'aggregateStatus()',\n },\n})\nexport class KjFileUpload implements KjFileUploadContext {\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n private liveRegionEl: HTMLElement | null = null;\n\n /** MIME / extension list for the file picker and drop validation. */\n readonly kjAccept = input<string | undefined>(undefined);\n\n /** Whether multiple files may be selected. Defaults to `true` (advanced flavour). */\n readonly kjMultiple = input(true, { transform: booleanAttribute });\n\n /** Maximum bytes per file. Files over the cap are rejected at selection. */\n readonly kjMaxSize = input<number | undefined>(undefined);\n\n /** Maximum total file count across the list. Excess files are rejected. */\n readonly kjMaxFiles = input<number | undefined>(undefined);\n\n /** Disables the upload — drop-zone is `aria-disabled`, the trigger is inert. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** Per-rejection-reason override messages. */\n readonly kjValidationMessages = input<Partial<KjFileUploadValidationMessages>>({});\n\n /** Emits the survivors after validation each time the user adds files. */\n @Output() readonly kjSelect = new EventEmitter<File[]>();\n\n /** Emits the rejection list whenever validation filters files out. */\n @Output() readonly kjReject = new EventEmitter<KjFileRejection[]>();\n\n /** Emits the `KjUploadableFile` for each row the user removes. */\n @Output() readonly kjRemove = new EventEmitter<KjUploadableFile>();\n\n private readonly _files = signal<readonly KjUploadableFile[]>([]);\n /** Current file list (in selection order). */\n readonly files: Signal<readonly KjUploadableFile[]> = this._files.asReadonly();\n\n private readonly _dragActive = signal(false);\n /** True while at least one drag operation is currently over the drop-zone host. */\n readonly dragActive: Signal<boolean> = this._dragActive.asReadonly();\n\n /** Read-only mirror of the disabled flag for context consumers. */\n readonly disabled: Signal<boolean> = this.kjDisabled;\n readonly multiple: Signal<boolean> = this.kjMultiple;\n readonly accept: Signal<string | undefined> = this.kjAccept;\n readonly maxSize: Signal<number | undefined> = this.kjMaxSize;\n readonly maxFiles: Signal<number | undefined> = this.kjMaxFiles;\n\n /** Aggregate status across the file list. */\n readonly aggregateStatus = computed<KjFileUploadAggregateStatus>(() => {\n const list = this._files();\n if (!list.length) return 'idle';\n let hasUploading = false;\n let hasPending = false;\n let hasError = false;\n let allDone = true;\n for (const f of list) {\n if (f.status === 'uploading') hasUploading = true;\n if (f.status === 'pending' || f.status === 'preparing') hasPending = true;\n if (f.status === 'error') hasError = true;\n if (f.status !== 'done') allDone = false;\n }\n if (hasUploading) return 'uploading';\n if (allDone) return 'complete';\n if (hasError && !hasPending) return 'partial-error';\n return 'pending';\n });\n\n /** @internal Drag-enter / drag-leave counter — flips `_dragActive` cleanly across nested children. */\n private dragDepth = 0;\n\n /** @internal Set by the trigger / drop-zone so `openPicker()` can click the right input. */\n private pickerInput: HTMLInputElement | null = null;\n\n /** @internal Trigger / drop-zone register their hidden file input here. */\n registerPickerInput(el: HTMLInputElement): void {\n this.pickerInput = el;\n }\n\n /** Opens the native file picker by clicking the registered hidden input. */\n openPicker(): void {\n if (this.kjDisabled()) return;\n this.pickerInput?.click();\n }\n\n /**\n * Adds candidate files (from drop, programmatic add, or the picker's\n * `change` event). Validates each against `accept` / `maxSize`, then\n * applies the `kjMaxFiles` cap to the survivors. Mints ids, appends to\n * the list, fires `kjSelect` / `kjReject`, and announces.\n */\n addFiles(incoming: readonly File[] | FileList): void {\n if (this.kjDisabled()) return;\n const candidates: File[] = Array.from(incoming);\n if (!candidates.length) return;\n\n const accept = this.kjAccept();\n const maxSize = this.kjMaxSize();\n const maxFiles = this.kjMaxFiles();\n const messages = this.resolvedMessages();\n\n const survivors: File[] = [];\n const rejections: KjFileRejection[] = [];\n\n for (const file of candidates) {\n if (accept && !kjFileMatchesAccept(file, accept)) {\n rejections.push({ file, reason: 'type' });\n continue;\n }\n if (maxSize !== undefined && file.size > maxSize) {\n rejections.push({ file, reason: 'size' });\n continue;\n }\n survivors.push(file);\n }\n\n // In single mode, the most recent pick replaces any existing file. Cap\n // the survivors to 1 (rejecting any overflow with reason 'count'), then\n // clear the existing list so the survivor takes its place.\n if (!this.kjMultiple()) {\n if (survivors.length > 1) {\n const overflow = survivors.splice(1);\n for (const f of overflow) rejections.push({ file: f, reason: 'count' });\n }\n if (survivors.length) this._files.set([]);\n } else if (maxFiles !== undefined) {\n // Multi mode: the explicit `kjMaxFiles` cap applies to current + new.\n const current = this._files().length;\n if (current + survivors.length > maxFiles) {\n const allowed = Math.max(0, maxFiles - current);\n const overflow = survivors.splice(allowed);\n for (const f of overflow) rejections.push({ file: f, reason: 'count' });\n }\n }\n\n if (survivors.length) {\n const next: KjUploadableFile[] = survivors.map((f) => ({\n id: nextFileId(),\n file: f,\n status: 'pending' as const,\n progress: null,\n }));\n this._files.update((list) => [...list, ...next]);\n this.kjSelect.emit(survivors);\n this.announce(\n survivors.length === 1\n ? `${survivors[0].name} added`\n : `${survivors.length} files added`,\n );\n }\n\n if (rejections.length) {\n this.kjReject.emit(rejections);\n const reason = rejections[0].reason;\n const msg = messages[reason];\n this.announce(\n rejections.length === 1\n ? `${rejections[0].file.name} rejected: ${msg}`\n : `${rejections.length} files rejected: ${msg}`,\n );\n }\n }\n\n /** Remove a file by id. Cancels in-flight uploads, emits `kjRemove`. */\n remove(id: string): void {\n const target = this._files().find((f) => f.id === id);\n if (!target) return;\n this._files.update((list) => list.filter((f) => f.id !== id));\n this.kjRemove.emit(target);\n this.announce(`${target.file.name} removed`);\n }\n\n /** Clear the entire file list. */\n clear(): void {\n if (!this._files().length) return;\n this._files.set([]);\n this.announce('File list cleared');\n }\n\n /** Reset a row to `pending` so the consumer (or simulator) can re-run it. */\n retry(id: string): void {\n this.patchFile(id, { status: 'pending', progress: null, error: undefined });\n }\n\n /** Cancel an in-flight upload — sets `status: 'cancelled'`, clears progress. */\n cancel(id: string): void {\n this.patchFile(id, { status: 'cancelled', progress: null });\n }\n\n /**\n * Update a row's status / progress / error. Examples drive this from a\n * simulated upload; consumers wiring `HttpClient` call it from their\n * progress / success / error subscriptions.\n */\n setFileStatus(id: string, status: KjFileStatus, progress?: number | null, error?: string): void {\n this.patchFile(id, {\n status,\n progress: progress === undefined ? null : progress,\n error,\n });\n if (status === 'done') {\n const f = this._files().find((x) => x.id === id);\n if (f) this.announce(`${f.file.name} uploaded`);\n } else if (status === 'error') {\n const f = this._files().find((x) => x.id === id);\n if (f) this.announce(`${f.file.name} failed: ${error ?? 'upload error'}`);\n }\n }\n\n // ─── Drag state plumbing (called by KjFileUploadDropzone) ───\n\n /** @internal */\n onDragEnter(event: Event): void {\n if (this.kjDisabled()) return;\n if (!this.eventCarriesFiles(event)) return;\n event.preventDefault();\n this.dragDepth++;\n this._dragActive.set(true);\n }\n\n /** @internal */\n onDragOver(event: Event): void {\n if (this.kjDisabled()) return;\n if (!this.eventCarriesFiles(event)) return;\n event.preventDefault();\n }\n\n /** @internal */\n onDragLeave(event: Event): void {\n if (this.kjDisabled()) return;\n event.preventDefault();\n this.dragDepth = Math.max(0, this.dragDepth - 1);\n if (this.dragDepth === 0) this._dragActive.set(false);\n }\n\n /** @internal */\n onDrop(event: Event): void {\n event.preventDefault();\n this.dragDepth = 0;\n this._dragActive.set(false);\n if (this.kjDisabled()) return;\n const files = (event as DragEvent).dataTransfer?.files;\n if (!files || files.length === 0) return;\n this.addFiles(files);\n }\n\n /** @internal */\n onPickerChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n if (target.files) this.addFiles(target.files);\n // Reset so picking the same file twice fires another change event.\n target.value = '';\n }\n\n private eventCarriesFiles(event: Event): boolean {\n const types = (event as DragEvent).dataTransfer?.types;\n if (!types) return false;\n for (let i = 0; i < types.length; i++) {\n if (types[i] === 'Files') return true;\n }\n return false;\n }\n\n private patchFile(id: string, patch: Partial<KjUploadableFile>): void {\n this._files.update((list) =>\n list.map((f) => (f.id === id ? { ...f, ...patch } : f)),\n );\n }\n\n private resolvedMessages(): KjFileUploadValidationMessages {\n return { ...KJ_FILE_UPLOAD_DEFAULT_MESSAGES, ...this.kjValidationMessages() };\n }\n\n private announce(message: string): void {\n const el = this.liveRegionEl;\n if (!el) return;\n // Clear-then-set with a microtask gap so screen readers detect the change\n // even when consecutive announcements share a prefix.\n el.textContent = '';\n setTimeout(() => {\n if (this.liveRegionEl) this.liveRegionEl.textContent = message;\n }, 50);\n }\n\n constructor() {\n afterNextRender(() => {\n if (typeof document === 'undefined') return;\n const span = document.createElement('span');\n span.setAttribute('aria-live', 'polite');\n span.setAttribute('aria-atomic', 'true');\n span.style.cssText =\n 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;';\n this.hostEl.nativeElement.appendChild(span);\n this.liveRegionEl = span;\n });\n }\n}\n\n/**\n * The \"browse\" button — when clicked, opens the native file picker. Owns the\n * hidden `<input type=\"file\">` so consumers don't have to render one\n * themselves. Mirrors the `KjButton` keyboard contract (Enter / Space click\n * the host element).\n *\n * Use on a `<button>` (recommended, native keyboard semantics) or any\n * focusable element. The directive does **not** force `role=\"button\"` — wrap\n * a real `<button>` and let the browser handle it.\n *\n * @example\n * ```html\n * <button kjFileUploadTrigger>Choose files</button>\n * ```\n * @doc-category Core/Data input\n * @doc\n * @doc-name file-upload\n */\n@Directive({\n selector: '[kjFileUploadTrigger]',\n standalone: true,\n host: {\n 'type': 'button',\n '[attr.aria-disabled]': 'ctx.disabled() ? \"true\" : null',\n '[attr.data-disabled]': 'ctx.disabled() ? \"\" : null',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjFileUploadTrigger {\n /** @internal */\n readonly ctx = inject(KJ_FILE_UPLOAD);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private hidden!: HTMLInputElement;\n\n constructor() {\n // Mint and own a hidden `<input type=\"file\">` parked in the trigger's\n // host element. Visually hidden (not [hidden] attribute) so it stays in\n // the a11y tree and programmatic .click() opens the picker reliably\n // across browsers (analysis open-question #2).\n if (typeof document !== 'undefined') {\n this.hidden = document.createElement('input');\n this.hidden.type = 'file';\n this.hidden.tabIndex = -1;\n this.hidden.setAttribute('aria-hidden', 'true');\n this.hidden.style.cssText =\n 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;';\n this.hidden.addEventListener('change', (event) => this.ctx.onPickerChange(event));\n this.syncAttrs();\n // Mirror dynamic accept / multiple onto the hidden input.\n // computed-via-effect would also work; for a deliberately small surface\n // we re-sync on every click (cheap).\n this.el.nativeElement.appendChild(this.hidden);\n this.ctx.registerPickerInput(this.hidden);\n }\n }\n\n /** @internal */\n onClick(event: Event): void {\n if (this.ctx.disabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n this.syncAttrs();\n this.hidden?.click();\n }\n\n private syncAttrs(): void {\n if (!this.hidden) return;\n const accept = this.ctx.accept();\n if (accept) this.hidden.setAttribute('accept', accept);\n else this.hidden.removeAttribute('accept');\n if (this.ctx.multiple()) this.hidden.setAttribute('multiple', '');\n else this.hidden.removeAttribute('multiple');\n }\n}\n\n/**\n * Drag-and-drop surface. `role=\"button\"`, `tabindex=\"0\"`, Enter/Space open\n * the picker. Reflects `data-drag-active` while files are over the host so\n * theme CSS can style the highlighted state.\n *\n * The drop-zone wires drag enter / over / leave / drop into the root's\n * counter (so nested children don't churn `data-drag-active`). The host is\n * a generic `<div>`-shaped element so consumers can project arbitrary\n * content (thumbnail grid, instructional text, etc.) — analysis decision\n * #3 in `file-upload.md`.\n *\n * @example\n * ```html\n * <div kjFileUploadDropzone>\n * Drag files here, or click to browse\n * </div>\n * ```\n * @doc-category Core/Data input\n * @doc\n * @doc-name file-upload\n */\n@Directive({\n selector: '[kjFileUploadDropzone]',\n standalone: true,\n host: {\n 'role': 'button',\n 'tabindex': '0',\n '[attr.aria-label]': 'kjLabel()',\n '[attr.aria-disabled]': 'ctx.disabled() ? \"true\" : null',\n '[attr.data-drag-active]': 'ctx.dragActive() ? \"\" : null',\n '[attr.data-disabled]': 'ctx.disabled() ? \"\" : null',\n '(dragenter)': 'ctx.onDragEnter($event)',\n '(dragover)': 'ctx.onDragOver($event)',\n '(dragleave)': 'ctx.onDragLeave($event)',\n '(drop)': 'ctx.onDrop($event)',\n '(click)': 'onClick($event)',\n '(keydown.enter)': 'onActivate($event)',\n '(keydown.space)': 'onActivate($event)',\n },\n})\nexport class KjFileUploadDropzone {\n /** @internal */\n readonly ctx = inject(KJ_FILE_UPLOAD);\n\n /** Accessible name for the drop-zone. */\n readonly kjLabel = input<string>('Drag files here, or click to browse');\n\n /** @internal */\n onClick(event: Event): void {\n if (this.ctx.disabled()) {\n event.preventDefault();\n return;\n }\n this.ctx.openPicker();\n }\n\n /** @internal */\n onActivate(event: Event): void {\n event.preventDefault();\n if (this.ctx.disabled()) return;\n this.ctx.openPicker();\n }\n}\n\n/**\n * File list container. Sets `role=\"list\"` (idempotent on a `<ul>`, required\n * on a `<div>`) so the per-row `role=\"listitem\"` semantics chain correctly\n * for screen readers (WCAG 1.3.1).\n *\n * The directive is structural-light — the consumer iterates `ctx.files()`\n * with `@for` and renders rows via `[kjFileUploadItem]` — so list-shape\n * (table / definition list / virtualised) stays the consumer's call.\n *\n * @example\n * ```html\n * <ul kjFileUploadList>\n * @for (f of upload.files(); track f.id) {\n * <li kjFileUploadItem [kjFile]=\"f\">{{ f.file.name }}</li>\n * }\n * </ul>\n * ```\n * @doc-category Core/Data input\n * @doc\n * @doc-name file-upload\n */\n@Directive({\n selector: '[kjFileUploadList]',\n standalone: true,\n host: {\n 'role': 'list',\n },\n})\nexport class KjFileUploadList {\n /** @internal */\n readonly ctx = inject(KJ_FILE_UPLOAD);\n}\n\n/**\n * Per-file row directive. Provides `KJ_FILE_UPLOAD_ITEM` so per-row buttons\n * (retry / cancel / remove) and a per-row `KjProgressBar` can read\n * `file()` / `progress()` / `status()` from context.\n *\n * Reflects `data-status` so theme CSS can flip the row's tint (red border\n * for `error`, dimmed for `done`, etc.).\n *\n * @example\n * ```html\n * <li kjFileUploadItem [kjFile]=\"f\">\n * <span>{{ f.file.name }}</span>\n * <button (click)=\"item.remove()\">Remove</button>\n * </li>\n * ```\n * @doc-category Core/Data input\n * @doc\n * @doc-name file-upload\n */\n@Directive({\n selector: '[kjFileUploadItem]',\n standalone: true,\n exportAs: 'kjFileUploadItem',\n providers: [{ provide: KJ_FILE_UPLOAD_ITEM, useExisting: KjFileUploadItem }],\n host: {\n 'role': 'listitem',\n '[attr.data-status]': 'status()',\n },\n})\nexport class KjFileUploadItem implements KjFileUploadItemContext {\n /** @internal */\n readonly ctx = inject(KJ_FILE_UPLOAD);\n\n /** The `KjUploadableFile` for this row. Required. */\n readonly kjFile = input.required<KjUploadableFile>();\n\n /** Read-only mirror for context consumers. */\n readonly file: Signal<KjUploadableFile> = this.kjFile;\n\n readonly status: Signal<KjFileStatus> = computed(() => this.kjFile().status);\n readonly progress: Signal<number | null> = computed(() => this.kjFile().progress);\n\n retry(): void {\n this.ctx.retry(this.kjFile().id);\n }\n\n cancel(): void {\n this.ctx.cancel(this.kjFile().id);\n }\n\n remove(): void {\n this.ctx.remove(this.kjFile().id);\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\nexport interface KjFormFieldContext { invalid: Signal<boolean>; }\nexport const KJ_FORM_FIELD = new InjectionToken<KjFormFieldContext>('KjFormField');\n","import { Directive, computed, inject, input } from '@angular/core';\nimport { KJ_FORM_FIELD, KjFormFieldContext } from './form-field.context';\n\n/**\n * Container for a form field. Groups label, input, and error message.\n * @example\n * ```html\n * <div kjFormField [kjFieldInvalid]=\"ctrl.invalid && ctrl.touched\">\n * <label kjFormLabel for=\"name\">Name</label>\n * <input id=\"name\" kjInput />\n * <span kjFormError>Name is required</span>\n * </div>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name form\n */\n@Directive({\n selector: '[kjFormField]', standalone: true,\n providers: [{ provide: KJ_FORM_FIELD, useExisting: KjFormField }],\n host: { '[attr.data-invalid]': 'kjFieldInvalid() ? \"\" : null' },\n})\nexport class KjFormField implements KjFormFieldContext {\n /** Whether the field is in an invalid state. */\n kjFieldInvalid = input<boolean>(false);\n readonly invalid = computed(() => this.kjFieldInvalid());\n}\n\n/**\n * Label element within a form field.\n * @doc-category Core/Inputs\n * @doc\n * @doc-name form\n */\n@Directive({\n selector: '[kjFormLabel]', standalone: true,\n host: { '[attr.data-invalid]': 'ctx.invalid() ? \"\" : null' },\n})\nexport class KjFormLabel { readonly ctx = inject(KJ_FORM_FIELD); }\n\n/**\n * Error message element. Visible only when field is invalid.\n * @example `<span kjFormError>Email is invalid</span>`\n * @doc-category Core/Inputs\n * @doc\n * @doc-name form\n */\n@Directive({\n selector: '[kjFormError]', standalone: true,\n host: { role: 'alert', 'aria-live': 'polite', '[attr.hidden]': '!ctx.invalid() ? \"\" : null' },\n})\nexport class KjFormError { readonly ctx = inject(KJ_FORM_FIELD); }\n","import { InjectionToken, Signal } from '@angular/core';\nimport { AbstractControl, FormGroup } from '@angular/forms';\n\n/**\n * A pair of (control name path, host element) registered with KjForm so the\n * focus-on-error pipeline can target the right DOM node without a query crawl.\n */\nexport interface KjFormControlRegistration {\n /** Dot-path of the control within the form group (e.g. `'address.street'`). */\n readonly path: string;\n /** Host element that should receive focus when this control is the first invalid one. */\n readonly element: HTMLElement;\n /** Optional human label (used by the error summary). */\n readonly label?: string;\n}\n\n/**\n * Public surface that `KjForm` exposes to descendants via the `KJ_FORM`\n * injection token. Only descendants that need form-level coordination\n * (submitting flag, control registry, summary updates) inject this token.\n */\nexport interface KjFormContext {\n /** The Angular FormGroup powering this form (resolved from `[formGroup]` or `NgForm`). */\n readonly form: Signal<FormGroup | null>;\n /** True while an async submit is in flight. */\n readonly submitting: Signal<boolean>;\n /** True after the user has attempted submit at least once. */\n readonly submitted: Signal<boolean>;\n /** True when the most recent submit attempt was invalid. */\n readonly invalid: Signal<boolean>;\n /** Snapshot of the invalid leaf controls from the most recent submit attempt. */\n readonly invalidControls: Signal<readonly InvalidControlInfo[]>;\n /**\n * Register a host element as the focus target for `path`.\n * Returns a cleanup callback that removes the registration.\n */\n registerControl(reg: KjFormControlRegistration): () => void;\n /** Imperative submit — equivalent to dispatching a `submit` event on the host. */\n submit(): void;\n}\n\n/** Invalid leaf control descriptor used by the error summary. */\nexport interface InvalidControlInfo {\n /** Dot-path of the control. */\n readonly path: string;\n /** The Angular AbstractControl reference. */\n readonly control: AbstractControl;\n /** Human label (falls back to the path). */\n readonly label: string;\n}\n\n/** Injection token for the parent `<form kjForm>` directive. */\nexport const KJ_FORM = new InjectionToken<KjFormContext>('KjForm');\n","import {\n Directive,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup, FormGroupDirective, NgForm } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport {\n InvalidControlInfo,\n KJ_FORM,\n KjFormContext,\n KjFormControlRegistration,\n} from './form.context';\n\n/**\n * Async submit handler signature accepted by `[kjAsyncSubmit]`. The directive\n * awaits the returned promise/observable and toggles `submitting` for its\n * lifetime.\n */\nexport type KjAsyncSubmitHandler<T = unknown> = (\n value: T,\n) => void | Promise<unknown> | Observable<unknown>;\n\n/**\n * Coordinator directive applied to a `<form>` element. Owns the submit\n * pipeline (intercept, validity check, focus-on-first-error, scroll-into-view,\n * async submitting state, mark-all-as-touched, optional error summary). Defers\n * to Angular Forms (`FormGroup` / `NgForm`) for validation; this directive is\n * a coordinator, not a state holder.\n *\n * - Emits `(kjSubmit)` only when the form is valid (replaces hand-rolled\n * `(ngSubmit)` + `if (form.invalid) return` patterns).\n * - Emits `(kjInvalidSubmit)` when the user submitted but validity failed,\n * useful for analytics.\n * - When `[kjAsyncSubmit]` is set, awaits its returned `Promise`/`Observable`\n * and reflects `aria-busy=\"true\"` / `data-submitting=\"\"` for the lifetime.\n *\n * @example\n * ```html\n * <form kjForm [formGroup]=\"form\" (kjSubmit)=\"onSubmit($event)\">\n * <input formControlName=\"email\" kjInput />\n * <button type=\"submit\">Sign in</button>\n * </form>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name form\n * @doc-description Coordinates form submit with validation, first-error focus, and async submitting state.\n * @doc-is-main\n */\n@Directive({\n selector: 'form[kjForm]',\n standalone: true,\n exportAs: 'kjForm',\n providers: [{ provide: KJ_FORM, useExisting: KjForm }],\n host: {\n '[attr.aria-busy]': 'submitting() ? \"true\" : null',\n '[attr.aria-describedby]': 'errorSummaryId() ?? null',\n '[attr.data-submitting]': 'submitting() ? \"\" : null',\n '[attr.data-invalid]': 'invalid() ? \"\" : null',\n '(submit)': 'onNativeSubmit($event)',\n },\n})\nexport class KjForm implements KjFormContext {\n private readonly el = inject<ElementRef<HTMLFormElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly ngForm = inject(NgForm, { optional: true, self: true });\n private readonly formGroupDir = inject(FormGroupDirective, { optional: true, self: true });\n\n // ── Inputs ───────────────────────────────────────────────────────────\n /** When `false`, skips moving focus to the first invalid control on invalid submit. */\n readonly kjFocusOnError = input(true, { transform: booleanAttribute });\n /** When `false`, does not call `scrollIntoView` on the focused control. */\n readonly kjScrollOnError = input(true, { transform: booleanAttribute });\n /** Forwarded to `scrollIntoView({ behavior })`. Auto-downgrades to `'auto'` under `prefers-reduced-motion`. */\n readonly kjScrollBehavior = input<ScrollBehavior>('smooth');\n /** Forwarded to `scrollIntoView({ block })`. */\n readonly kjScrollBlock = input<ScrollLogicalPosition>('center');\n /** When `true` (default), calls `markAllAsTouched()` before validity check so all errors show together. */\n readonly kjMarkAllAsTouchedOnSubmit = input(true, { transform: booleanAttribute });\n /** When `true`, calls `form.reset()` after a successful async submit resolves. */\n readonly kjResetOnSuccess = input(false, { transform: booleanAttribute });\n /** Optional async submit handler. When set, the directive awaits its result and toggles `submitting`. */\n readonly kjAsyncSubmit = input<KjAsyncSubmitHandler | undefined>(undefined);\n\n // ── Outputs ──────────────────────────────────────────────────────────\n /** Emits the form value when the user submits and the form is valid. */\n readonly kjSubmit = output<unknown>();\n /** Emits the FormGroup when the user submits but validity fails. */\n readonly kjInvalidSubmit = output<FormGroup>();\n\n // ── Models / state ───────────────────────────────────────────────────\n /** Two-way bindable submitting flag. When unbound, the directive owns it internally. */\n readonly kjSubmitting = model(false);\n\n private readonly _submitted = signal(false);\n private readonly _invalid = signal(false);\n private readonly _invalidControls = signal<readonly InvalidControlInfo[]>([]);\n private readonly _errorSummaryId = signal<string | null>(null);\n private readonly registry = new Map<string, KjFormControlRegistration>();\n private prefersReducedMotion = false;\n\n // ── Public surface (KjFormContext) ───────────────────────────────────\n readonly form = computed<FormGroup | null>(() => {\n if (this.formGroupDir) return this.formGroupDir.form;\n if (this.ngForm) return this.ngForm.form;\n return null;\n });\n readonly submitting = computed(() => this.kjSubmitting());\n readonly submitted = this._submitted.asReadonly();\n readonly invalid = this._invalid.asReadonly();\n readonly invalidControls = this._invalidControls.asReadonly();\n readonly errorSummaryId = this._errorSummaryId.asReadonly();\n\n constructor() {\n afterNextRender(() => {\n try {\n this.prefersReducedMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;\n } catch {\n this.prefersReducedMotion = false;\n }\n });\n }\n\n registerControl(reg: KjFormControlRegistration): () => void {\n this.registry.set(reg.path, reg);\n return () => {\n const cur = this.registry.get(reg.path);\n if (cur === reg) this.registry.delete(reg.path);\n };\n }\n\n /** Internal: called by `KjFormErrorSummary` to advertise its `id` to the form. */\n setErrorSummaryId(id: string | null): void {\n this._errorSummaryId.set(id);\n }\n\n /** Imperative submit — equivalent to dispatching a `submit` event on the host. */\n submit(): void {\n this.el.nativeElement.requestSubmit();\n }\n\n /** @internal — host listener target. */\n onNativeSubmit(event: Event): void {\n event.preventDefault();\n // Drop submit attempts while a previous submission is still in flight.\n if (this.submitting()) return;\n\n const form = this.form();\n this._submitted.set(true);\n\n if (!form) {\n // No Angular forms binding — log a dev-mode warning and bail out.\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.warn(\n '[KjForm] <form kjForm> has no `[formGroup]` or `ngForm` binding. The directive is a coordinator over Angular Forms and needs one to function.',\n );\n }\n return;\n }\n\n if (this.kjMarkAllAsTouchedOnSubmit()) {\n form.markAllAsTouched();\n }\n\n if (form.invalid) {\n this._invalid.set(true);\n const invalidControls = collectInvalidControls(form);\n this._invalidControls.set(this.attachLabels(invalidControls));\n this.kjInvalidSubmit.emit(form);\n this.handleInvalidSubmit(invalidControls);\n return;\n }\n\n this._invalid.set(false);\n this._invalidControls.set([]);\n\n const handler = this.kjAsyncSubmit();\n if (handler) {\n this.runAsyncSubmit(handler, form);\n } else {\n this.kjSubmit.emit(form.value);\n }\n }\n\n // ── Internals ────────────────────────────────────────────────────────\n\n private attachLabels(invalid: ReadonlyArray<{ path: string; control: AbstractControl }>): InvalidControlInfo[] {\n return invalid.map((entry) => {\n const reg = this.registry.get(entry.path);\n return { ...entry, label: reg?.label ?? humanizePath(entry.path) };\n });\n }\n\n private handleInvalidSubmit(invalid: ReadonlyArray<{ path: string }>): void {\n if (!this.kjFocusOnError() || invalid.length === 0) return;\n const first = invalid[0];\n const reg = this.registry.get(first.path);\n const target = reg?.element ?? this.fallbackQuery(first.path);\n if (!target) return;\n try {\n target.focus({ preventScroll: !this.kjScrollOnError() });\n } catch {\n // Some hosts (SSR/jsdom) may not implement focus options — ignore.\n target.focus?.();\n }\n if (this.kjScrollOnError()) {\n const behavior = this.prefersReducedMotion ? 'auto' : this.kjScrollBehavior();\n target.scrollIntoView?.({ block: this.kjScrollBlock(), behavior });\n }\n }\n\n private fallbackQuery(path: string): HTMLElement | null {\n const root = this.el.nativeElement;\n const escaped = cssEscape(path);\n return (\n root.querySelector<HTMLElement>(`[formcontrolname=\"${escaped}\"]`) ??\n root.querySelector<HTMLElement>(`[ng-reflect-name=\"${escaped}\"]`) ??\n null\n );\n }\n\n private runAsyncSubmit(handler: KjAsyncSubmitHandler, form: FormGroup): void {\n let result: ReturnType<KjAsyncSubmitHandler>;\n this.kjSubmitting.set(true);\n try {\n result = handler(form.value);\n } catch (err) {\n this.kjSubmitting.set(false);\n throw err;\n }\n if (result instanceof Promise) {\n result.then(\n () => this.afterAsync(form, true),\n () => this.afterAsync(form, false),\n );\n // Also emit the synchronous (kjSubmit) for consumers that use both shapes.\n this.kjSubmit.emit(form.value);\n return;\n }\n if (isObservable(result)) {\n const sub = result.subscribe({\n complete: () => this.afterAsync(form, true),\n error: () => this.afterAsync(form, false),\n });\n // Defensive: if the observable completes synchronously, the subscribe\n // call already cleaned us up. Otherwise this no-op preserves cleanup\n // behaviour (we don't track for unsubscription beyond completion).\n void sub;\n this.kjSubmit.emit(form.value);\n return;\n }\n // Sync handler — release the flag immediately and emit.\n this.kjSubmitting.set(false);\n this.kjSubmit.emit(form.value);\n }\n\n private afterAsync(form: FormGroup, success: boolean): void {\n this.kjSubmitting.set(false);\n if (success && this.kjResetOnSuccess()) {\n form.reset();\n this._submitted.set(false);\n this._invalid.set(false);\n this._invalidControls.set([]);\n }\n }\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────\n\n/** Walks a `FormGroup` / `FormArray` tree depth-first, returning invalid leaves. */\nfunction collectInvalidControls(\n root: AbstractControl,\n): ReadonlyArray<{ path: string; control: AbstractControl }> {\n const out: { path: string; control: AbstractControl }[] = [];\n const walk = (ctrl: AbstractControl, path: string): void => {\n if (ctrl instanceof FormGroup) {\n for (const [name, child] of Object.entries(ctrl.controls)) {\n walk(child, path ? `${path}.${name}` : name);\n }\n return;\n }\n if (ctrl instanceof FormArray) {\n ctrl.controls.forEach((child, i) => walk(child, `${path}.${i}`));\n return;\n }\n if (ctrl.invalid) {\n out.push({ path, control: ctrl });\n }\n };\n walk(root, '');\n return out;\n}\n\n/** Converts `'address.street'` → `'Address street'` for fallback labels. */\nfunction humanizePath(path: string): string {\n if (!path) return '';\n const last = path.split('.').pop() ?? path;\n const words = last.replace(/([A-Z])/g, ' $1').replace(/[_-]+/g, ' ').trim();\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n\n/** Type guard for RxJS observable. Avoids a hard dep on `isObservable` in tests. */\nfunction isObservable(value: unknown): value is Observable<unknown> {\n return (\n !!value &&\n typeof value === 'object' &&\n typeof (value as { subscribe?: unknown }).subscribe === 'function'\n );\n}\n\n/** Minimal CSS.escape polyfill for `formcontrolname` attribute selectors. */\nfunction cssEscape(value: string): string {\n if (typeof CSS !== 'undefined' && typeof CSS.escape === 'function') {\n return CSS.escape(value);\n }\n return value.replace(/[^a-zA-Z0-9_-]/g, (ch) => `\\\\${ch}`);\n}\n","import {\n Directive,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { KjLiveRegion, KjLivePoliteness } from '../a11y/index';\nimport { KjForm } from './form';\n\nlet nextId = 0;\n\n/**\n * Optional companion to `KjForm` that renders a polite/assertive live-region\n * summary of the invalid controls after a failed submit. Composes\n * `KjLiveRegion` via `hostDirectives`. The presence of a registered summary\n * causes the parent `KjForm` to wire `aria-describedby` to its id.\n *\n * @example\n * ```html\n * <form kjForm [formGroup]=\"form\" (kjSubmit)=\"onSubmit($event)\">\n * <div kjFormErrorSummary></div>\n * …\n * </form>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name form\n */\n@Directive({\n selector: '[kjFormErrorSummary]',\n standalone: true,\n exportAs: 'kjFormErrorSummary',\n hostDirectives: [{ directive: KjLiveRegion, inputs: ['kjPoliteness: kjPoliteness'] }],\n host: {\n '[id]': 'id()',\n '[attr.role]': '\"status\"',\n '[attr.data-visible]': 'visible() ? \"\" : null',\n },\n})\nexport class KjFormErrorSummary {\n // Inject the concrete class so we can call internal methods like\n // `setErrorSummaryId` that are not part of the public KjFormContext.\n private readonly form = inject(KjForm, { optional: true });\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Politeness for the underlying live region. Default `'assertive'` — users are awaiting a response. */\n readonly kjPoliteness = input<KjLivePoliteness>('assertive');\n /** When `true`, focuses the summary host after population. Default `false`. */\n readonly kjFocusOnPopulate = input(false, { transform: booleanAttribute });\n\n /** Generated id, advertised to the parent KjForm so it can set `aria-describedby`. */\n readonly id = input<string>(`kj-form-error-summary-${++nextId}`);\n\n /** Visible whenever there is at least one invalid control to summarise. */\n readonly visible = computed(() => (this.form?.invalidControls().length ?? 0) > 0);\n\n /** Invalid leaves snapshot (re-exposed for templates rendering the list). */\n readonly invalidControls = computed(() => this.form?.invalidControls() ?? []);\n\n constructor() {\n if (this.form) {\n // Advertise our id to the parent form so it can wire aria-describedby.\n effect((onCleanup) => {\n const id = this.id();\n this.form!.setErrorSummaryId(id);\n onCleanup(() => this.form!.setErrorSummaryId(null));\n });\n }\n\n // Optional focus-on-populate side-effect.\n effect(() => {\n if (this.kjFocusOnPopulate() && this.visible()) {\n const host = this.el.nativeElement;\n host.tabIndex = host.tabIndex === -1 || host.tabIndex >= 0 ? host.tabIndex : -1;\n if (host.tabIndex === undefined || host.tabIndex < 0) host.tabIndex = -1;\n try {\n host.focus({ preventScroll: false });\n } catch {\n host.focus?.();\n }\n }\n });\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Activation modes per WAI-ARIA APG Tabs pattern. */\nexport type KjTabsActivationMode = 'automatic' | 'manual';\n\n/** Tabs orientation. Drives `aria-orientation` and the roving arrow-axis. */\nexport type KjTabsOrientation = 'horizontal' | 'vertical';\n\n/**\n * Context exposed by `KjTabs` to its child directives (`KjTabList`, `KjTab`,\n * `KjTabPanel`). Holds the active value, orientation, activation mode, and\n * id helpers for ARIA wiring.\n */\nexport interface KjTabsContext {\n /** Currently active tab value. */\n readonly value: Signal<string>;\n /** Tabs orientation; drives `aria-orientation` and arrow-key axis. */\n readonly orientation: Signal<KjTabsOrientation>;\n /** Activation mode; `'automatic'` activates on focus, `'manual'` requires Enter/Space. */\n readonly activationMode: Signal<KjTabsActivationMode>;\n /** Unique id for the tab element associated with `value`. */\n tabId(value: string): string;\n /** Unique id for the panel element associated with `value`. */\n panelId(value: string): string;\n /** Whether the tab/panel pair for `value` is currently active. */\n isActive(value: string): boolean;\n /** Activates the tab/panel pair for `value`. No-op when the tab is disabled. */\n select(value: string): void;\n}\n\n/** Injection token for the root `KjTabs` directive context. */\nexport const KJ_TABS = new InjectionToken<KjTabsContext>('KjTabs');\n","import {\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n model,\n OnDestroy,\n OnInit,\n output,\n signal,\n Signal,\n untracked,\n} from '@angular/core';\nimport { KjRovingTabindex, KjRovingTabindexItemDirective } from '../a11y/roving-tabindex';\nimport { KjDisabled } from '../primitives/interaction/disabled';\nimport { KjFocusRing } from '../primitives/interaction/focus-ring';\nimport {\n KJ_TABS,\n KjTabsActivationMode,\n KjTabsContext,\n KjTabsOrientation,\n} from './tabs.context';\n\nlet kjTabsSeedCounter = 0;\nfunction nextSeed(): string {\n // Try crypto.randomUUID where available (browser, jsdom 22+, node 19+).\n // Fall back to a counter so SSR / older environments still produce a stable string.\n const cryptoLike = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (cryptoLike?.randomUUID) return cryptoLike.randomUUID().slice(0, 8);\n return `kj${(++kjTabsSeedCounter).toString(36)}`;\n}\n\n/**\n * Root tabs container. Owns the active value, orientation, activation mode,\n * and the registration list of child tabs/panels. Provides `KJ_TABS` to its\n * descendants for ARIA wiring and selection coordination.\n *\n * @example\n * ```html\n * <div kjTabs [(kjValue)]=\"active\" kjOrientation=\"horizontal\" kjActivationMode=\"automatic\">\n * <div kjTabList>\n * <button kjTab kjTabValue=\"overview\">Overview</button>\n * <button kjTab kjTabValue=\"billing\">Billing</button>\n * </div>\n * <div kjTabPanel kjPanelValue=\"overview\">…</div>\n * <div kjTabPanel kjPanelValue=\"billing\">…</div>\n * </div>\n * ```\n * @doc-category Core/Navigation\n * @doc\n * @doc-name tabs\n * @doc-description Unstyled tabs root with active-value, orientation, and activation mode for tab and panel children.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjTabs]',\n standalone: true,\n providers: [{ provide: KJ_TABS, useExisting: KjTabs }],\n host: {\n '[attr.data-orientation]': 'kjOrientation()',\n },\n})\nexport class KjTabs implements KjTabsContext {\n /** Two-way bound active tab value. String-keyed; `''` means \"no tab active yet\". */\n readonly kjValue = model<string>('');\n\n /** Tabs orientation. Drives `aria-orientation` on the tablist and the arrow-key axis. */\n readonly kjOrientation = input<KjTabsOrientation>('horizontal');\n\n /**\n * Activation mode per WAI-ARIA APG.\n * - `'automatic'` (default): focus moves and the focused tab is activated immediately.\n * - `'manual'`: focus moves only; Enter or Space activates the focused tab.\n */\n readonly kjActivationMode = input<KjTabsActivationMode>('automatic');\n\n /** Read-only view of the active tab value. */\n readonly value: Signal<string> = this.kjValue.asReadonly();\n\n /** Read-only view of the orientation. */\n readonly orientation: Signal<KjTabsOrientation> = this.kjOrientation;\n\n /** Read-only view of the activation mode. */\n readonly activationMode: Signal<KjTabsActivationMode> = this.kjActivationMode;\n\n private readonly idSeed = nextSeed();\n\n /** @internal Map of value → registered tab; keeps document order via insertion. */\n private readonly _tabs = signal<readonly KjTab[]>([]);\n\n /** Public read-only registration list, in document order. */\n readonly tabs = this._tabs.asReadonly();\n\n /** Currently resolved active tab (may be undefined when value matches no tab). */\n readonly activeTab = computed<KjTab | undefined>(() =>\n this._tabs().find((t) => t.kjTabValue() === this.kjValue()),\n );\n\n constructor() {\n // Default-value reconciliation: when kjValue is unset (`''`) and at least one\n // non-disabled tab is registered, activate the first non-disabled tab.\n effect(() => {\n const list = this._tabs();\n const current = this.kjValue();\n if (current === '' && list.length > 0) {\n const first = untracked(() => list.find((t) => !t.kjTabDisabled()) ?? list[0]);\n if (first) {\n // Defer to avoid writing during a parent change-detection pass.\n queueMicrotask(() => {\n if (this.kjValue() === '') this.kjValue.set(first.kjTabValue());\n });\n }\n }\n });\n }\n\n /** @internal Called by `KjTab.ngOnInit` to register itself in document order. */\n register(tab: KjTab): void {\n this._tabs.update((list) => (list.includes(tab) ? list : [...list, tab]));\n }\n\n /** @internal Called by `KjTab` on destroy. */\n unregister(tab: KjTab): void {\n this._tabs.update((list) => list.filter((t) => t !== tab));\n }\n\n /** Returns whether the tab/panel pair for `value` is the active one. */\n isActive(value: string): boolean {\n return this.kjValue() === value;\n }\n\n /** Stable id for the tab element associated with `value`. */\n tabId(value: string): string {\n return `kj-tab-${value}-${this.idSeed}`;\n }\n\n /** Stable id for the panel element associated with `value`. */\n panelId(value: string): string {\n return `kj-panel-${value}-${this.idSeed}`;\n }\n\n /** Activates the tab/panel pair for `value`. No-op if the matching tab is disabled. */\n select(value: string): void {\n const target = this._tabs().find((t) => t.kjTabValue() === value);\n if (target?.kjTabDisabled()) return;\n if (this.kjValue() !== value) this.kjValue.set(value);\n }\n\n /** Imperative: advance to the next non-disabled tab. Clamps at the end. */\n next(): void {\n const list = this._tabs();\n const idx = list.findIndex((t) => t.kjTabValue() === this.kjValue());\n for (let i = idx + 1; i < list.length; i++) {\n if (!list[i].kjTabDisabled()) {\n this.select(list[i].kjTabValue());\n return;\n }\n }\n }\n\n /** Imperative: advance to the previous non-disabled tab. Clamps at the start. */\n previous(): void {\n const list = this._tabs();\n const idx = list.findIndex((t) => t.kjTabValue() === this.kjValue());\n for (let i = idx - 1; i >= 0; i--) {\n if (!list[i].kjTabDisabled()) {\n this.select(list[i].kjTabValue());\n return;\n }\n }\n }\n}\n\n/**\n * Tab list container. Hosts `role=\"tablist\"` + `aria-orientation` and composes\n * `KjRovingTabindex` to manage the single-tab-stop arrow-key navigation.\n *\n * Orientation is read from the parent `KJ_TABS` context and forwarded to the\n * roving primitive through its `kjRovingOrientation` input via a host binding\n * on the exposed input.\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name tabs\n */\n@Directive({\n selector: '[kjTabList]',\n standalone: true,\n hostDirectives: [KjRovingTabindex],\n host: {\n '[attr.role]': '\"tablist\"',\n '[attr.aria-orientation]': 'tabs.orientation()',\n '[attr.data-orientation]': 'tabs.orientation()',\n },\n})\nexport class KjTabList implements OnInit, OnDestroy {\n /** @internal */\n readonly tabs = inject(KJ_TABS);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private readonly keydownFilter = (event: KeyboardEvent): void => {\n const orientation = this.tabs.orientation();\n if (orientation === 'horizontal') {\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n // Off-axis: prevent the composed KjRovingTabindex from acting.\n event.stopImmediatePropagation();\n }\n } else if (orientation === 'vertical') {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n event.stopImmediatePropagation();\n }\n }\n };\n\n ngOnInit(): void {\n // Capture phase + `addEventListener` directly on the host: this listener\n // fires before the composed KjRovingTabindex's `(keydown)` host binding,\n // so we can swallow off-axis arrow keys per the parent KjTabs orientation\n // (the WAI-ARIA APG contract for tab strips).\n this.el.nativeElement.addEventListener('keydown', this.keydownFilter, true);\n }\n\n ngOnDestroy(): void {\n this.el.nativeElement.removeEventListener('keydown', this.keydownFilter, true);\n }\n}\n\n/**\n * Tab trigger. Hosts `role=\"tab\"` + the ARIA wiring (`aria-selected`,\n * `aria-controls`, `id`) and composes `KjRovingTabindexItem`, `KjFocusRing`\n * and `KjDisabled`. Click activates the tab; Enter/Space activate (always\n * honoured, required in manual mode); Delete fires `kjClose` when\n * `kjClosable` is true.\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name tabs\n */\n@Directive({\n selector: '[kjTab]',\n standalone: true,\n hostDirectives: [KjRovingTabindexItemDirective, KjFocusRing, KjDisabled],\n host: {\n '[attr.role]': '\"tab\"',\n '[attr.id]': 'tabs.tabId(kjTabValue())',\n '[attr.aria-controls]': 'tabs.panelId(kjTabValue())',\n '[attr.aria-selected]': 'isActive() ? \"true\" : \"false\"',\n '[attr.aria-disabled]': 'kjTabDisabled() ? \"true\" : null',\n '[attr.data-state]': 'isActive() ? \"active\" : \"inactive\"',\n '[attr.data-disabled]': 'kjTabDisabled() ? \"\" : null',\n '(click)': 'onClick()',\n '(keydown)': 'onKeydown($event)',\n '(focus)': 'onFocus()',\n },\n})\nexport class KjTab implements OnInit, OnDestroy {\n /** @internal */\n readonly tabs = inject(KJ_TABS) as KjTabs;\n /** @internal Native host element. */\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Required string key wiring this tab to its corresponding panel. */\n readonly kjTabValue = input.required<string>();\n\n /** When true, the tab cannot be activated but remains in the focus ring. */\n readonly kjTabDisabled = input<boolean>(false);\n\n /** When true, Delete on the focused tab fires `kjClose`. */\n readonly kjClosable = input<boolean>(false);\n\n /** Fires when the user closes this tab (Delete key). Emits the tab's value. */\n readonly kjClose = output<string>();\n\n /** Whether this tab is the currently active one. */\n readonly isActive = computed(() => this.tabs.isActive(this.kjTabValue()));\n\n ngOnInit(): void {\n this.tabs.register(this);\n }\n\n ngOnDestroy(): void {\n this.tabs.unregister(this);\n }\n\n /** @internal Click handler. */\n onClick(): void {\n if (this.kjTabDisabled()) return;\n this.tabs.select(this.kjTabValue());\n }\n\n /** @internal Focus handler — activates immediately in `automatic` mode. */\n onFocus(): void {\n if (this.kjTabDisabled()) return;\n if (this.tabs.activationMode() === 'automatic') {\n this.tabs.select(this.kjTabValue());\n }\n }\n\n /** @internal Keydown — Enter/Space activate (always honoured); Delete closes when closable. */\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {\n if (this.kjTabDisabled()) return;\n event.preventDefault();\n this.tabs.select(this.kjTabValue());\n return;\n }\n if (event.key === 'Delete' && this.kjClosable()) {\n event.preventDefault();\n this.kjClose.emit(this.kjTabValue());\n return;\n }\n }\n}\n\n/**\n * Tab panel. Hosts `role=\"tabpanel\"` + `aria-labelledby` + `id` + `hidden`.\n * Tracks first-activation history via `mounted`: it flips `true` on first\n * activation and stays `true` thereafter, so consumers can gate the\n * projected content with `@if (panel.mounted())` to implement the\n * lazy-then-persistent mount posture from the analysis.\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name tabs\n */\n@Directive({\n selector: '[kjTabPanel]',\n standalone: true,\n exportAs: 'kjTabPanel',\n host: {\n '[attr.role]': '\"tabpanel\"',\n '[attr.id]': 'tabs.panelId(kjPanelValue())',\n '[attr.aria-labelledby]': 'tabs.tabId(kjPanelValue())',\n '[attr.hidden]': 'isActive() ? null : \"\"',\n '[attr.data-state]': 'isActive() ? \"active\" : \"inactive\"',\n },\n})\nexport class KjTabPanel {\n /** @internal */\n readonly tabs = inject(KJ_TABS);\n\n /** Required string key wiring this panel to its corresponding tab. */\n readonly kjPanelValue = input.required<string>();\n\n /** Whether this panel is the active one. */\n readonly isActive = computed(() => this.tabs.isActive(this.kjPanelValue()));\n\n private readonly _mounted = signal(false);\n\n /**\n * `true` after this panel has been activated at least once. Consumers wrap\n * the panel's projected content in `@if (panel.mounted())` to mount the\n * content lazily on first activation and keep it mounted thereafter.\n */\n readonly mounted = this._mounted.asReadonly();\n\n constructor() {\n effect(() => {\n if (this.isActive() && !this._mounted()) this._mounted.set(true);\n });\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Accordion mode: `'single'` (one item open at a time) or `'multiple'` (any number open). */\nexport type KjAccordionType = 'single' | 'multiple';\n\n/** Context interface for the root accordion directive. */\nexport interface KjAccordionContext {\n /** Set of currently open item values. */\n readonly openIds: Signal<ReadonlySet<string>>;\n /** Current mode: single or multiple. */\n readonly type: Signal<KjAccordionType>;\n /** Whether opt-in arrow-key roving navigation is enabled. */\n readonly arrowNavigation: Signal<boolean>;\n /** Toggle an item by its string value. In single mode, closes others first. */\n toggle(id: string): void;\n /** Whether the given item value is currently open. */\n isOpen(id: string): boolean;\n}\n\n/** Context interface for an individual accordion item directive. */\nexport interface KjAccordionItemContext {\n /** Stable string value identifying the item within the parent accordion. */\n readonly value: Signal<string>;\n /** Whether this item is currently expanded. */\n readonly expanded: Signal<boolean>;\n /** Whether this item is disabled (toggle is a no-op, trigger announces aria-disabled). */\n readonly disabled: Signal<boolean>;\n /** Stable id for the trigger element — `aria-labelledby` target on the content region. */\n readonly headerId: Signal<string>;\n /** Stable id for the content region — `aria-controls` target on the trigger. */\n readonly contentId: Signal<string>;\n /** Toggle this item's expanded state. No-op when disabled. */\n toggle(): void;\n /** Open this item. No-op when disabled. */\n open(): void;\n /** Close this item. No-op when disabled. */\n close(): void;\n}\n\n/** Injection token for the root accordion directive. */\nexport const KJ_ACCORDION = new InjectionToken<KjAccordionContext>('KjAccordion');\n\n/** Injection token for an individual accordion item directive. */\nexport const KJ_ACCORDION_ITEM = new InjectionToken<KjAccordionItemContext>('KjAccordionItem');\n","import {\n Directive,\n ElementRef,\n OnDestroy,\n OnInit,\n Signal,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n KJ_ACCORDION,\n KJ_ACCORDION_ITEM,\n KjAccordionContext,\n KjAccordionItemContext,\n KjAccordionType,\n} from './accordion.context';\n\nlet kjAccordionSeedCounter = 0;\nfunction nextSeed(): string {\n // Try crypto.randomUUID where available (browser, jsdom 22+, node 19+).\n // Fall back to a counter so SSR / older environments still produce a stable string.\n const cryptoLike = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (cryptoLike?.randomUUID) return cryptoLike.randomUUID().slice(0, 8);\n return `kj${(++kjAccordionSeedCounter).toString(36)}`;\n}\n\n/**\n * Root accordion container. Manages open/close state for accordion items.\n * Supports `'single'` (only one item open) or `'multiple'` (any number open).\n *\n * Two-way bound `kjValue` mirrors the open set as a string (single mode) or\n * `string[]` (multiple mode). Internally the directive keeps a single\n * `ReadonlySet<string>` so single ↔ multiple flips don't lose state.\n *\n * Arrow-key roving navigation is opt-in via `kjArrowNavigation`; when enabled\n * the root listens for ArrowUp/ArrowDown/Home/End on registered triggers and\n * moves focus between them. When disabled (the default) each trigger is a\n * plain button in the page tab sequence — the WAI-ARIA APG-recommended\n * arrangement for FAQ-style content.\n *\n * @example\n * ```html\n * <div kjAccordion [(kjValue)]=\"open\" kjType=\"multiple\">\n * <div kjAccordionItem kjItemValue=\"billing\">\n * <button kjAccordionTrigger>Billing</button>\n * <div kjAccordionContent>...</div>\n * </div>\n * </div>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name accordion\n * @doc-description Unstyled accordion root that manages expand/collapse state across child accordion items.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjAccordion]',\n standalone: true,\n providers: [{ provide: KJ_ACCORDION, useExisting: KjAccordion }],\n host: {\n '[attr.data-orientation]': '\"vertical\"',\n },\n})\nexport class KjAccordion implements KjAccordionContext {\n /** Mode: `'single'` (one open at a time) or `'multiple'` (any number open). */\n readonly kjType = input<KjAccordionType>('single');\n\n /**\n * Two-way bound open value. In `'single'` mode it is a string (the open\n * item's value, or `''` when nothing is open); in `'multiple'` mode it is a\n * `string[]` (open item values, in insertion order).\n */\n readonly kjValue = model<string | string[]>('');\n\n /**\n * Opt-in roving tabindex on triggers. When `true`, ArrowUp/ArrowDown/Home/End\n * move focus between triggers and the group becomes a single tab stop.\n * When `false` (default), each trigger is a plain button in the page tab\n * sequence — the simpler arrangement for FAQ-style content where Tab also\n * needs to reach links and form fields inside an open panel.\n */\n readonly kjArrowNavigation = input(false, { transform: booleanAttribute });\n\n private readonly _openIds = signal<ReadonlySet<string>>(new Set());\n /** Set of currently open item values. */\n readonly openIds = this._openIds.asReadonly();\n\n /** Read-only view of `kjType` for context consumers. */\n readonly type: Signal<KjAccordionType> = this.kjType;\n\n /** Read-only view of `kjArrowNavigation` for context consumers. */\n readonly arrowNavigation: Signal<boolean> = this.kjArrowNavigation;\n\n /** @internal Registered triggers in document order — for arrow-key roving. */\n private readonly _triggers = signal<readonly KjAccordionTrigger[]>([]);\n\n /** Public read-only registration list, in document order. */\n readonly triggers = this._triggers.asReadonly();\n\n constructor() {\n // Reconcile incoming kjValue → internal _openIds (controlled binding).\n effect(() => {\n const v = this.kjValue();\n const next = new Set<string>();\n if (typeof v === 'string') {\n if (v) next.add(v);\n } else if (Array.isArray(v)) {\n for (const id of v) if (id) next.add(id);\n }\n // In single mode, only first wins.\n if (this.kjType() === 'single' && next.size > 1) {\n const [first] = next;\n next.clear();\n next.add(first);\n }\n // Avoid set-equal write loops with the toggle path.\n const current = untracked(this._openIds);\n if (!setsEqual(current, next)) this._openIds.set(next);\n });\n }\n\n /** Toggles an item open or closed. In single mode, closes all others first. */\n toggle(id: string): void {\n const next = new Set(this._openIds());\n if (next.has(id)) {\n next.delete(id);\n } else {\n if (this.kjType() === 'single') next.clear();\n next.add(id);\n }\n this._openIds.set(next);\n this.syncModelFromSet(next);\n }\n\n /** Returns whether the given item value is currently open. */\n isOpen(id: string): boolean {\n return this._openIds().has(id);\n }\n\n /** @internal Trigger registration — called from `KjAccordionTrigger.ngOnInit`. */\n registerTrigger(t: KjAccordionTrigger): void {\n this._triggers.update((list) => (list.includes(t) ? list : [...list, t]));\n }\n\n /** @internal Trigger un-registration — called from `KjAccordionTrigger.ngOnDestroy`. */\n unregisterTrigger(t: KjAccordionTrigger): void {\n this._triggers.update((list) => list.filter((x) => x !== t));\n }\n\n /** @internal Move focus by delta among non-disabled triggers. */\n focusTrigger(delta: number, fromIndex: number): void {\n const list = this._triggers();\n if (!list.length) return;\n const len = list.length;\n let i = fromIndex;\n for (let step = 0; step < len; step++) {\n i = (i + delta + len) % len;\n const t = list[i];\n if (!t.item.disabled()) {\n t.el.nativeElement.focus();\n return;\n }\n }\n }\n\n /** @internal Focus first / last non-disabled trigger. */\n focusEdge(edge: 'first' | 'last'): void {\n const list = this._triggers();\n if (!list.length) return;\n const range = edge === 'first' ? list : [...list].reverse();\n for (const t of range) {\n if (!t.item.disabled()) {\n t.el.nativeElement.focus();\n return;\n }\n }\n }\n\n private syncModelFromSet(set: ReadonlySet<string>): void {\n if (this.kjType() === 'single') {\n const first = set.values().next().value ?? '';\n const current = this.kjValue();\n if (typeof current === 'string') {\n if (current !== first) this.kjValue.set(first);\n } else {\n this.kjValue.set(first);\n }\n } else {\n const arr = Array.from(set);\n const current = this.kjValue();\n if (Array.isArray(current) && arraysEqual(current, arr)) return;\n this.kjValue.set(arr);\n }\n }\n}\n\nfunction setsEqual(a: ReadonlySet<string>, b: ReadonlySet<string>): boolean {\n if (a.size !== b.size) return false;\n for (const v of a) if (!b.has(v)) return false;\n return true;\n}\n\nfunction arraysEqual(a: readonly string[], b: readonly string[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\n/**\n * Individual accordion item. Owns the per-item `value`, `expanded` state, and\n * the stable `headerId` / `contentId` pair the trigger and content use to wire\n * `aria-controls` / `aria-labelledby`.\n *\n * @example\n * ```html\n * <div kjAccordionItem kjItemValue=\"section-1\">\n * <button kjAccordionTrigger>Section 1</button>\n * <div kjAccordionContent>Content</div>\n * </div>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name accordion\n */\n@Directive({\n selector: '[kjAccordionItem]',\n standalone: true,\n providers: [{ provide: KJ_ACCORDION_ITEM, useExisting: KjAccordionItem }],\n host: {\n '[attr.data-state]': 'expanded() ? \"open\" : \"closed\"',\n '[attr.data-disabled]': 'kjItemDisabled() ? \"\" : null',\n },\n})\nexport class KjAccordionItem implements KjAccordionItemContext {\n private readonly accordion = inject(KJ_ACCORDION) as KjAccordion;\n\n /** The unique value identifying this item within the accordion. */\n readonly kjItemValue = input.required<string>();\n\n /**\n * Whether this item is disabled. Gates `toggle`/`open`/`close`, drives\n * `aria-disabled` on the trigger and `data-disabled` on the item host.\n */\n readonly kjItemDisabled = input(false, { transform: booleanAttribute });\n\n private readonly idSeed = nextSeed();\n\n /** Stable id for the trigger element. */\n readonly headerId = computed(() => `kj-accordion-trigger-${this.kjItemValue()}-${this.idSeed}`);\n\n /** Stable id for the content region element. */\n readonly contentId = computed(() => `kj-accordion-content-${this.kjItemValue()}-${this.idSeed}`);\n\n /** Read-only mirror of the item value for context consumers. */\n readonly value: Signal<string> = this.kjItemValue;\n\n /** Read-only mirror of the disabled flag for context consumers. */\n readonly disabled: Signal<boolean> = this.kjItemDisabled;\n\n /** Whether this item is currently expanded. */\n readonly expanded = computed(() => this.accordion.isOpen(this.kjItemValue()));\n\n /** Toggles this item's expanded state. No-op when disabled. */\n toggle(): void {\n if (this.kjItemDisabled()) return;\n this.accordion.toggle(this.kjItemValue());\n }\n\n /** Opens this item. No-op when disabled. */\n open(): void {\n if (this.kjItemDisabled()) return;\n if (!this.expanded()) this.accordion.toggle(this.kjItemValue());\n }\n\n /** Closes this item. No-op when disabled. */\n close(): void {\n if (this.kjItemDisabled()) return;\n if (this.expanded()) this.accordion.toggle(this.kjItemValue());\n }\n}\n\n/**\n * Trigger button for an accordion item. Wires `aria-expanded`, `aria-controls`,\n * `aria-disabled`, and the click toggle. Also provides Enter / Space / arrow\n * key handling — arrow keys are gated on the root's `kjArrowNavigation` flag.\n *\n * The host element should be a `<button>` per WAI-ARIA APG so Enter / Space\n * activation, focus, and disabled semantics work without extra wiring.\n *\n * @example\n * ```html\n * <button kjAccordionTrigger>Section title</button>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name accordion\n */\n@Directive({\n selector: '[kjAccordionTrigger]',\n standalone: true,\n host: {\n '[attr.id]': 'item.headerId()',\n '[attr.aria-expanded]': 'item.expanded() ? \"true\" : \"false\"',\n '[attr.aria-controls]': 'item.contentId()',\n '[attr.aria-disabled]': 'item.disabled() ? \"true\" : null',\n '[attr.data-state]': 'item.expanded() ? \"open\" : \"closed\"',\n '[attr.data-open]': 'item.expanded() ? \"\" : null',\n '[attr.data-disabled]': 'item.disabled() ? \"\" : null',\n '(click)': 'onClick()',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjAccordionTrigger implements OnInit, OnDestroy {\n /** The parent accordion item context. */\n readonly item = inject(KJ_ACCORDION_ITEM) as KjAccordionItem;\n private readonly accordion = inject(KJ_ACCORDION) as KjAccordion;\n /** @internal Native host element. */\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n ngOnInit(): void {\n this.accordion.registerTrigger(this);\n }\n\n ngOnDestroy(): void {\n this.accordion.unregisterTrigger(this);\n }\n\n /** @internal Click handler. */\n onClick(): void {\n if (this.item.disabled()) return;\n this.item.toggle();\n }\n\n /** @internal Keydown handler — arrow-nav opt-in via `kjArrowNavigation` on the root. */\n onKeydown(event: KeyboardEvent): void {\n if (!this.accordion.arrowNavigation()) return;\n const list = this.accordion.triggers();\n const idx = list.indexOf(this);\n if (idx === -1) return;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.accordion.focusTrigger(1, idx);\n return;\n case 'ArrowUp':\n event.preventDefault();\n this.accordion.focusTrigger(-1, idx);\n return;\n case 'Home':\n event.preventDefault();\n this.accordion.focusEdge('first');\n return;\n case 'End':\n event.preventDefault();\n this.accordion.focusEdge('last');\n return;\n }\n }\n}\n\n/**\n * Accordion content panel. Hosts `role=\"region\"` + `aria-labelledby` to the\n * trigger's id. Visibility is signalled via `[data-state]` (`\"open\"` /\n * `\"closed\"`) so consumers can CSS-animate the open/close transition. While\n * closed, `aria-hidden=\"true\"` and `inert` keep the panel out of the AT tree\n * and tab sequence — the element stays in the DOM rather than being removed\n * with `hidden`, which would interrupt the animation.\n *\n * @example\n * ```html\n * <div kjAccordionContent>Panel content</div>\n * ```\n * @doc-category Core/Data display\n * @doc\n * @doc-name accordion\n */\n@Directive({\n selector: '[kjAccordionContent]',\n standalone: true,\n host: {\n '[attr.role]': '\"region\"',\n '[attr.id]': 'item.contentId()',\n '[attr.aria-labelledby]': 'item.headerId()',\n '[attr.data-state]': 'item.expanded() ? \"open\" : \"closed\"',\n // `aria-hidden` keeps the closed panel out of the AT tree while leaving\n // the element in the DOM so CSS can animate its open/close transition\n // (driven by [data-state]). The visual hide is owned by the component CSS.\n '[attr.aria-hidden]': '!item.expanded() ? \"true\" : null',\n '[attr.inert]': '!item.expanded() ? \"\" : null',\n },\n})\nexport class KjAccordionContent {\n /** The parent accordion item context. */\n readonly item = inject(KJ_ACCORDION_ITEM);\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Per-step context exposed to `KjStepLabel` and `KjStepContent`. */\nexport interface KjStepContext {\n /** 0-based index in the parent stepper's step set. */\n readonly index: Signal<number>;\n /** True when this step is the active one. */\n readonly active: Signal<boolean>;\n /** True when this step has been completed (consumer-set via `kjStepCompleted`). */\n readonly completed: Signal<boolean>;\n /** True when this step is in an error state (consumer-set via `kjStepError`). */\n readonly error: Signal<boolean>;\n /** True when this step is optional (does not gate linear advancement). */\n readonly optional: Signal<boolean>;\n /** True when this step is reachable in the current mode. */\n readonly reachable: Signal<boolean>;\n /** True when this step is explicitly disabled by the consumer. */\n readonly disabled: Signal<boolean>;\n /** Optional consumer-supplied semantic key, used by `goToKey()`. */\n readonly key: Signal<string | undefined>;\n /** Stable id for `aria-labelledby` wiring. */\n readonly labelId: Signal<string>;\n /** Stable id for the content region. */\n readonly contentId: Signal<string>;\n /** Activate this step (subject to linear-mode gating). */\n activate(): void;\n}\n\n/** Stepper-root context exposed to step / label / content / command directives. */\nexport interface KjStepperContext {\n /** Active step index (0-based). */\n readonly activeStep: Signal<number>;\n /** Total number of registered steps. */\n readonly totalSteps: Signal<number>;\n /** @internal — read-only view of registered steps in registration order. */\n readonly steps: Signal<readonly KjStepContext[]>;\n /** Linear-mode flag. */\n readonly linear: Signal<boolean>;\n /** Orientation. */\n readonly orientation: Signal<'horizontal' | 'vertical'>;\n /** True when `next()` will succeed. */\n readonly canAdvance: Signal<boolean>;\n /** True when `previous()` will succeed. */\n readonly canRetreat: Signal<boolean>;\n /** Imperative navigation. */\n next(): void;\n previous(): void;\n goTo(index: number): void;\n goToKey(key: string): void;\n reset(): void;\n /** @internal — `KjStep` registers / unregisters here. */\n register(step: KjStepContext): void;\n /** @internal */\n unregister(step: KjStepContext): void;\n /** @internal — `KjStep` reports its reachability under linear gating. */\n isReachable(index: number): boolean;\n}\n\n/** Injection token for the root stepper directive. */\nexport const KJ_STEPPER = new InjectionToken<KjStepperContext>('KjStepper');\n\n/** Injection token for an individual step directive. */\nexport const KJ_STEP = new InjectionToken<KjStepContext>('KjStep');\n","import {\n Directive,\n ElementRef,\n Signal,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport {\n KjRovingTabindex,\n KjRovingTabindexItemDirective,\n} from '../a11y/roving-tabindex';\nimport {\n KJ_STEP,\n KJ_STEPPER,\n KjStepContext,\n KjStepperContext,\n} from './stepper.context';\n\n// TODO(progress-bar): when the Progress Bar primitive lands at\n// `packages/core/src/feedback/progress-bar/`, expose `progressFraction()`\n// and `progressLabel()` computed signals on `KjStepperComponent`-shaped\n// wrappers. The directive layer here intentionally stays out of the\n// progress-bar composition — that's a wrapper concern.\n\nlet _stepperUid = 0;\n\n/**\n * Root of the Stepper directive family. Owns the active-step state machine,\n * registers child `KjStep` directives, and provides {@link KJ_STEPPER}.\n *\n * Applied to an `<ol>`. Uses APG wizard semantics — `aria-current=\"step\"`\n * on the active step, *not* `role=\"tablist\"` / `aria-selected`.\n *\n * Roving tabindex is composed via {@link KjRovingTabindex} with the\n * orientation fed from `kjOrientation`. When `kjArrowNavigation=false`\n * the roving directive is still applied but receives no items, so it\n * is a no-op.\n *\n * @example\n * ```html\n * <ol kjStepper [(kjActiveStep)]=\"step\">\n * <li kjStep>\n * <button kjStepLabel>Account</button>\n * <section kjStepContent>...</section>\n * </li>\n * <li kjStep>\n * <button kjStepLabel>Profile</button>\n * <section kjStepContent>...</section>\n * </li>\n * <button kjStepperPrevious>Back</button>\n * <button kjStepperNext>Continue</button>\n * </ol>\n * ```\n * @doc-category Core/Navigation\n * @doc\n * @doc-name stepper\n * @doc-description Unstyled multi-step wizard root with active-step state, linear-mode gating, and keyboard navigation.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjStepper]',\n standalone: true,\n exportAs: 'kjStepper',\n hostDirectives: [\n {\n directive: KjRovingTabindex,\n inputs: ['kjRovingOrientation: kjOrientation'],\n },\n ],\n providers: [{ provide: KJ_STEPPER, useExisting: KjStepper }],\n host: {\n // No `role` override — `<ol>` carries `list` semantics natively. We do\n // not bind `aria-orientation` because `aria-allowed-attr` rejects it on\n // the implicit `list` role; the keyboard axis is enforced via\n // `KjRovingTabindex`'s `kjRovingOrientation` and themes read\n // `data-orientation` for visual layout.\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-linear]': 'linear() ? \"true\" : null',\n '[attr.data-active-step]': 'activeStep()',\n },\n})\nexport class KjStepper implements KjStepperContext {\n /** Two-way bound active-step pointer (0-based). */\n readonly kjActiveStep = model<number>(0);\n\n /** Linear-mode flag. Linear gates forward jumps on prior-step completion. */\n readonly kjLinear = input<boolean>(false);\n\n /** Stepper orientation. Drives `aria-orientation` and the arrow-key axis. */\n readonly kjOrientation = input<'horizontal' | 'vertical'>('horizontal');\n\n /** When true, `next()` from the last step wraps to 0; `previous()` from 0 wraps to last. */\n readonly kjLoop = input<boolean>(false);\n\n /** Whether `reset()` should also emit `(kjReset)` so consumers can clear per-step signals. */\n readonly kjResetStepStates = input<boolean>(false);\n\n /** Whether to enable arrow-key roving across step headers. */\n readonly kjArrowNavigation = input<boolean>(true);\n\n /** Stable id for this stepper instance, used to namespace step ids. */\n readonly stepperId = `kj-stepper-${++_stepperUid}`;\n\n private readonly _steps = signal<readonly KjStepContext[]>([]);\n private readonly _navigationSource = signal<'click' | 'command' | 'programmatic'>(\n 'programmatic',\n );\n\n /** @internal — read-only view of registered steps in registration order. */\n readonly steps = this._steps.asReadonly();\n\n /** @internal — read by `KjStepLabel` to decide focus behaviour. */\n readonly navigationSource = this._navigationSource.asReadonly();\n\n /** Active-step index (0-based). */\n readonly activeStep: Signal<number> = computed(() => this.kjActiveStep());\n\n /** Total registered step count. */\n readonly totalSteps: Signal<number> = computed(() => this._steps().length);\n\n /** Linear-mode flag (signal mirror). */\n readonly linear: Signal<boolean> = computed(() => this.kjLinear());\n\n /** Orientation (signal mirror). */\n readonly orientation: Signal<'horizontal' | 'vertical'> = computed(() =>\n this.kjOrientation(),\n );\n\n /** True when `next()` will succeed under the current mode and state. */\n readonly canAdvance: Signal<boolean> = computed(() => {\n const steps = this._steps();\n const total = steps.length;\n if (total === 0) return false;\n const idx = this.kjActiveStep();\n const atEnd = idx >= total - 1;\n if (atEnd && !this.kjLoop()) return false;\n if (!this.kjLinear()) return true;\n const current = steps[idx];\n if (!current) return false;\n return current.completed() || current.optional();\n });\n\n /** True when `previous()` will succeed. */\n readonly canRetreat: Signal<boolean> = computed(() => {\n const total = this.totalSteps();\n if (total === 0) return false;\n if (this.activeStep() > 0) return true;\n return this.kjLoop();\n });\n\n constructor() {\n // Two-way binding sync: clamp out-of-range writes silently. The clamped\n // value is in-range, so the effect re-runs once and stabilises.\n effect(() => {\n const v = this.kjActiveStep();\n const total = this.totalSteps();\n if (total === 0) return;\n if (v < 0) {\n this.kjActiveStep.set(0);\n } else if (v >= total) {\n this.kjActiveStep.set(total - 1);\n }\n });\n }\n\n /** @internal */\n register(step: KjStepContext): void {\n this._steps.update((steps) => [...steps, step]);\n }\n\n /** @internal */\n unregister(step: KjStepContext): void {\n this._steps.update((steps) => steps.filter((s) => s !== step));\n }\n\n /** @internal — reachability under linear gating. */\n isReachable(index: number): boolean {\n if (!this.kjLinear()) return true;\n const active = this.kjActiveStep();\n if (index <= active) return true;\n const steps = this._steps();\n // For any forward jump, every step strictly before `index` must be\n // completed or optional. This subsumes the \"+1\" case (only the active\n // step matters then, since steps before it are necessarily completed\n // in a well-formed linear flow — and if they aren't, the user can't\n // be there in the first place).\n for (let i = 0; i < index; i++) {\n const s = steps[i];\n if (!s) return false;\n if (!s.completed() && !s.optional()) return false;\n }\n return true;\n }\n\n /** Advance one step. No-op when `canAdvance()` is false. */\n next(): void {\n if (!this.canAdvance()) return;\n this._navigationSource.set('command');\n const total = this.totalSteps();\n const idx = this.activeStep();\n const nextIdx = idx >= total - 1 ? (this.kjLoop() ? 0 : idx) : idx + 1;\n this.kjActiveStep.set(nextIdx);\n }\n\n /** Retreat one step. No-op when `canRetreat()` is false. */\n previous(): void {\n if (!this.canRetreat()) return;\n this._navigationSource.set('command');\n const idx = this.activeStep();\n const total = this.totalSteps();\n const prevIdx = idx === 0 ? (this.kjLoop() ? total - 1 : 0) : idx - 1;\n this.kjActiveStep.set(prevIdx);\n }\n\n /** Jump to a specific index. Subject to linear-mode gating. */\n goTo(index: number): void {\n const total = this.totalSteps();\n if (total === 0) return;\n if (index < 0 || index >= total) return;\n if (!this.isReachable(index)) return;\n this._navigationSource.set('click');\n this.kjActiveStep.set(index);\n }\n\n /** Jump to the step whose `kjStepKey` matches. First match wins. */\n goToKey(key: string): void {\n const steps = this._steps();\n const idx = steps.findIndex((s) => s.key() === key);\n if (idx === -1) return;\n this.goTo(idx);\n }\n\n /** Reset to step 0. Consumer is responsible for clearing per-step state when `kjResetStepStates=true`. */\n reset(): void {\n this._navigationSource.set('command');\n this.kjActiveStep.set(0);\n }\n}\n\nlet _stepUid = 0;\n\n/**\n * Individual step within a {@link KjStepper}. Registers with the parent on\n * construction, exposes per-step state (`completed`, `error`, `optional`,\n * `disabled`, `reachable`, `active`) via {@link KJ_STEP}, and host-binds\n * `aria-current=\"step\"` when active.\n *\n * @example\n * ```html\n * <li kjStep [kjStepCompleted]=\"form.valid()\" [kjStepError]=\"form.invalid() && form.touched()\">\n * <button kjStepLabel>Profile</button>\n * <section kjStepContent>...</section>\n * </li>\n * ```\n * @doc-category Core/Navigation\n * @doc\n * @doc-name stepper\n */\n@Directive({\n selector: '[kjStep]',\n standalone: true,\n exportAs: 'kjStep',\n providers: [{ provide: KJ_STEP, useExisting: KjStep }],\n host: {\n // No `role` override — applied to an `<li>`, the native `listitem`\n // semantics already apply, and forcing the role would orphan the item\n // when the step lives inside a non-`<ol>` parent (rare but possible).\n '[attr.aria-current]': 'active() ? \"step\" : null',\n '[attr.data-active]': 'active() ? \"true\" : null',\n '[attr.data-completed]': 'completed() ? \"true\" : null',\n '[attr.data-error]': 'error() ? \"true\" : null',\n '[attr.data-optional]': 'optional() ? \"true\" : null',\n '[attr.data-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-reachable]': 'reachable() ? \"true\" : null',\n '[attr.data-step-index]': 'index()',\n },\n})\nexport class KjStep implements KjStepContext {\n private readonly stepper = inject(KJ_STEPPER) as KjStepper;\n\n /** Marks the step as completed. Drives `data-completed` and gates linear advancement. */\n readonly kjStepCompleted = input<boolean>(false);\n\n /** Marks the step as in error. Drives `data-error`. Does *not* block advancement on its own. */\n readonly kjStepError = input<boolean>(false);\n\n /** Marks the step as optional — permits linear advancement without `completed`. */\n readonly kjStepOptional = input<boolean>(false);\n\n /** Explicit per-step disable, independent of linear-mode reachability. */\n readonly kjStepDisabled = input<boolean>(false);\n\n /** Optional human-meaningful key for `goToKey()` / analytics. */\n readonly kjStepKey = input<string | undefined>(undefined);\n\n private readonly _uid = ++_stepUid;\n\n /** 0-based index in the parent stepper's step list. */\n readonly index: Signal<number> = computed(() => this.stepper.steps().indexOf(this));\n\n /** True when this is the active step. */\n readonly active: Signal<boolean> = computed(\n () => this.stepper.activeStep() === this.index(),\n );\n\n /** Mirror of the `kjStepCompleted` input as a signal. */\n readonly completed: Signal<boolean> = computed(() => this.kjStepCompleted());\n\n /** Mirror of the `kjStepError` input as a signal. */\n readonly error: Signal<boolean> = computed(() => this.kjStepError());\n\n /** Mirror of the `kjStepOptional` input as a signal. */\n readonly optional: Signal<boolean> = computed(() => this.kjStepOptional());\n\n /** Mirror of the `kjStepDisabled` input as a signal. */\n readonly disabled: Signal<boolean> = computed(() => this.kjStepDisabled());\n\n /** Mirror of the `kjStepKey` input as a signal. */\n readonly key: Signal<string | undefined> = computed(() => this.kjStepKey());\n\n /** True when this step is reachable under the current mode (always true non-linear). */\n readonly reachable: Signal<boolean> = computed(() => {\n if (this.disabled()) return false;\n return this.stepper.isReachable(this.index());\n });\n\n /** Stable id for `aria-labelledby` wiring. */\n readonly labelId: Signal<string> = computed(\n () => `${this.stepper.stepperId}-step-${this._uid}-label`,\n );\n\n /** Stable id for the content region. */\n readonly contentId: Signal<string> = computed(\n () => `${this.stepper.stepperId}-step-${this._uid}-content`,\n );\n\n constructor() {\n this.stepper.register(this);\n }\n\n /** Activate this step. Subject to linear-mode gating. */\n activate(): void {\n if (this.disabled()) return;\n this.stepper.goTo(this.index());\n }\n}\n\n/**\n * Marks an element as the *header* of its parent {@link KjStep}. Wires the\n * accessible id, `aria-controls`, `aria-disabled`, and the click handler.\n * Also acts as a roving-tabindex item, joining the parent stepper's\n * single-tab-stop header strip.\n *\n * Apply to `<button>` (the recommended host) or any focusable element.\n *\n * @example\n * ```html\n * <button kjStepLabel>Profile</button>\n * ```\n * @doc-category Core/Navigation\n * @doc\n * @doc-name stepper\n */\n@Directive({\n selector: '[kjStepLabel]',\n standalone: true,\n hostDirectives: [KjRovingTabindexItemDirective],\n host: {\n '[attr.id]': 'step.labelId()',\n '[attr.aria-controls]': 'step.contentId()',\n '[attr.aria-disabled]': 'isAriaDisabled()',\n '[attr.disabled]': 'isNativeDisabled()',\n '[attr.data-active]': 'step.active() ? \"true\" : null',\n '(click)': 'onClick()',\n '(keydown.enter)': 'onActivationKey($event)',\n '(keydown.space)': 'onActivationKey($event)',\n },\n})\nexport class KjStepLabel {\n /** Parent step context. */\n readonly step = inject(KJ_STEP);\n private readonly host = inject(ElementRef<HTMLElement>);\n\n /** True when host element is a native `<button>`. */\n private readonly isButton = computed(\n () => this.host.nativeElement.tagName === 'BUTTON',\n );\n\n /** Resolves the `aria-disabled` attribute string ('true' or null). */\n readonly isAriaDisabled = computed(() => {\n const blocked = this.step.disabled() || !this.step.reachable();\n return blocked ? 'true' : null;\n });\n\n /** Resolves the native `disabled` attribute, only when host is a button. */\n readonly isNativeDisabled = computed(() => {\n if (!this.isButton()) return null;\n const blocked = this.step.disabled() || !this.step.reachable();\n return blocked ? '' : null;\n });\n\n /** @internal */\n onClick(): void {\n if (this.step.disabled() || !this.step.reachable()) return;\n this.step.activate();\n }\n\n /** @internal */\n onActivationKey(event: Event): void {\n // Native <button> handles Enter/Space natively — only intercept when host is not a button.\n if (this.isButton()) return;\n event.preventDefault();\n if (this.step.disabled() || !this.step.reachable()) return;\n this.step.activate();\n }\n}\n\n/**\n * Marks an element as the *content panel* of its parent {@link KjStep}.\n * Host-binds `role=\"region\"`, `aria-labelledby` to the step's label id,\n * and toggles `[hidden]` / `[inert]` based on the step's active state.\n *\n * The wrapper layer renders the content via `@if (step.active())` so only\n * the active panel is in the DOM. This directive's host bindings remain\n * correct even when the wrapper opts to keep all panels mounted (e.g.\n * for a crossfade).\n *\n * @example\n * ```html\n * <section kjStepContent>...</section>\n * ```\n * @doc-category Core/Navigation\n * @doc\n * @doc-name stepper\n */\n@Directive({\n selector: '[kjStepContent]',\n standalone: true,\n host: {\n role: 'region',\n '[attr.id]': 'step.contentId()',\n '[attr.aria-labelledby]': 'step.labelId()',\n '[attr.hidden]': '!step.active() ? \"\" : null',\n '[attr.inert]': '!step.active() ? \"\" : null',\n '[attr.data-state]': 'step.active() ? \"active\" : \"inactive\"',\n '[attr.tabindex]': 'step.active() ? \"-1\" : null',\n },\n})\nexport class KjStepContent {\n /** Parent step context. */\n readonly step = inject(KJ_STEP);\n}\n\n/**\n * Stepper-level *Next* command. Apply to a `<button>`. Host-binds\n * `[disabled]` from the parent's `canAdvance()`, and dispatches `next()` on click.\n *\n * @example `<button kjStepperNext>Continue</button>`\n * @doc-category Core/Navigation\n * @doc\n * @doc-name stepper\n */\n@Directive({\n selector: '[kjStepperNext]',\n standalone: true,\n host: {\n '[attr.disabled]': 'isDisabled()',\n '[attr.aria-disabled]': 'isDisabled() !== null ? \"true\" : null',\n '[attr.data-stepper-action]': '\"next\"',\n '(click)': 'onClick()',\n },\n})\nexport class KjStepperNext {\n private readonly stepper = inject(KJ_STEPPER);\n\n /** @internal */\n readonly isDisabled = computed(() => (this.stepper.canAdvance() ? null : ''));\n\n /** @internal */\n onClick(): void {\n this.stepper.next();\n }\n}\n\n/**\n * Stepper-level *Previous* command. Apply to a `<button>`. Host-binds\n * `[disabled]` from the parent's `canRetreat()`, and dispatches `previous()` on click.\n *\n * @example `<button kjStepperPrevious>Back</button>`\n * @doc-category Core/Navigation\n * @doc\n * @doc-name stepper\n */\n@Directive({\n selector: '[kjStepperPrevious]',\n standalone: true,\n host: {\n '[attr.disabled]': 'isDisabled()',\n '[attr.aria-disabled]': 'isDisabled() !== null ? \"true\" : null',\n '[attr.data-stepper-action]': '\"previous\"',\n '(click)': 'onClick()',\n },\n})\nexport class KjStepperPrevious {\n private readonly stepper = inject(KJ_STEPPER);\n\n /** @internal */\n readonly isDisabled = computed(() => (this.stepper.canRetreat() ? null : ''));\n\n /** @internal */\n onClick(): void {\n this.stepper.previous();\n }\n}\n\n/**\n * Stepper-level *Reset* command. Apply to a `<button>`. Dispatches\n * `reset()` on click; never gated.\n *\n * @example `<button kjStepperReset>Start over</button>`\n * @doc-category Core/Navigation\n * @doc\n * @doc-name stepper\n */\n@Directive({\n selector: '[kjStepperReset]',\n standalone: true,\n host: {\n '[attr.data-stepper-action]': '\"reset\"',\n '(click)': 'onClick()',\n },\n})\nexport class KjStepperReset {\n private readonly stepper = inject(KJ_STEPPER);\n\n /** @internal */\n onClick(): void {\n this.stepper.reset();\n }\n}\n","import {\n Directive,\n ElementRef,\n InjectionToken,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n model,\n signal,\n type Signal,\n type WritableSignal,\n} from '@angular/core';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_LIST_NAVIGATOR_CONFIG,\n KjListItem,\n KjSelectionModel,\n KjTypeAhead,\n type KjCompareFn,\n type KjListNavigatorConfig,\n type KjListSelectionMode,\n} from '../primitives/list';\n\nexport const KJ_SELECT = new InjectionToken<KjSelect>('KjSelect');\n\n/**\n * Root select container. Implements `KjListNavigatorConfig` (items,\n * value, mode, compareBy) and provides itself under\n * `KJ_LIST_NAVIGATOR_CONFIG` via `forwardRef`. Downstream primitives\n * (`KjSelectionModel`, `KjListNavigator`, `KjTypeAhead`) read whatever\n * they need from this single contract.\n *\n * `KjSelect` itself does NOT inject `KjSelectionModel` — doing so at\n * construction would create a runtime cycle (the model's\n * `inject(KJ_LIST_NAVIGATOR_CONFIG)` would try to resolve a not-yet-\n * constructed `KjSelect` instance, regardless of `forwardRef`). Instead,\n * the model is constructed lazily when a child (`KjOption`, `KjListItem`)\n * first asks for it, by which point `KjSelect` is fully built.\n *\n * @doc-category Core/Inputs\n */\n@Directive({\n selector: '[kjSelect]',\n standalone: true,\n exportAs: 'kjSelect',\n providers: [\n { provide: KJ_SELECT, useExisting: forwardRef(() => KjSelect) },\n { provide: KJ_LIST_NAVIGATOR_CONFIG, useExisting: forwardRef(() => KjSelect) },\n KjSelectionModel,\n KjTypeAhead,\n KjOverlayController,\n ],\n})\nexport class KjSelect implements KjListNavigatorConfig {\n /** Two-way bindable selected value (single) or values (multi). */\n readonly kjSelectValue = model<unknown>(undefined);\n\n /**\n * Implements `KjListNavigatorConfig.value`. The selection model reads\n * and writes through this same signal — one source of truth, no\n * bridging effects.\n */\n readonly value = this.kjSelectValue as unknown as WritableSignal<\n unknown | readonly unknown[] | null\n >;\n\n /** Optional custom equality fn. Defaults to `Object.is`. */\n readonly kjCompareBy = input<KjCompareFn<unknown>>(Object.is as KjCompareFn<unknown>);\n\n /** @internal — written by `KjSelectTrigger`'s `kjMultiple` input. */\n readonly _multiple = signal(false);\n /** Whether multi-select is enabled. */\n readonly multiple = this._multiple.asReadonly();\n\n /** @internal — set by `KjSelectTrigger` at construction time. */\n readonly _triggerEl = signal<ElementRef<HTMLElement> | null>(null);\n /**\n * Element ref of the registered trigger button. Resolves the moment\n * `KjSelectTrigger` constructs (no view-query lifecycle wait), so\n * consumers can call `focus()` synchronously from `effect()` blocks\n * even when the select is mounted dynamically.\n */\n readonly triggerEl = this._triggerEl.asReadonly();\n\n /** Move keyboard focus to the trigger. No-op if no trigger registered. */\n focus(): void {\n this._triggerEl()?.nativeElement.focus();\n }\n\n /** All `KjListItem`s under this select — source for navigator + type-ahead. */\n readonly items = contentChildren(KjListItem, { descendants: true });\n\n /** Implements `KjListNavigatorConfig.mode`. */\n readonly mode: Signal<KjListSelectionMode> = computed(() =>\n this._multiple() ? 'multi' : 'single',\n );\n\n /** Implements `KjListNavigatorConfig.compareBy`. */\n readonly compareBy = this.kjCompareBy;\n\n private readonly controller = inject(KjOverlayController);\n\n /** Whether the overlay is open. */\n readonly open = this.controller.isOpen;\n\n /** Directly-injected selection model; wired via `bind()` below. */\n private readonly _selection = inject(KjSelectionModel);\n\n constructor() {\n this._selection.bind({\n value: this.value,\n items: this.items,\n mode: this.mode,\n compareBy: this.compareBy,\n });\n }\n\n /**\n * Implements `KjListNavigatorConfig.afterSelect`. Called by\n * `KjListItem` right after it toggles the shared selection model.\n * In single mode (the only mode where `closeRequested` is `true`)\n * we dismiss the overlay; multi mode keeps it open.\n */\n afterSelect(_: unknown, closeRequested: boolean): void {\n if (closeRequested) this.controller.close('programmatic');\n }\n}\n","import {\n Directive,\n ElementRef,\n booleanAttribute,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n type KjTriggerEventStrategy,\n} from '../primitives/overlay/tokens';\nimport { onClick } from '../primitives/overlay/strategies/trigger-event/on-click';\nimport { KJ_SELECT } from './select-root';\n\n/**\n * Wraps `onClick()` and forces `ariaHasPopup` to `'listbox'` so the trigger\n * advertises its panel role to assistive tech.\n */\nfunction listboxClickTrigger(): KjTriggerEventStrategy {\n const inner = onClick();\n return {\n ariaHasPopup: 'listbox',\n attach: c => inner.attach(c),\n bindToggle: t => inner.bindToggle(t),\n onOpen: () => inner.onOpen?.(),\n onClose: () => inner.onClose?.(),\n detach: () => inner.detach(),\n };\n}\n\n/**\n * Trigger directive for `KjSelectContent`. Composes the overlay\n * `KjOverlayTrigger` host directive (which wires `aria-expanded`,\n * `aria-controls`, `aria-haspopup`) and forwards the `kjMultiple` input\n * onto the umbrella `KjSelect` root.\n *\n * The shared `KjOverlayController` is provided by the `KjSelect` root\n * directive, not here — so option clicks can call `controller.close()`\n * directly through the same instance the trigger is wired to.\n *\n * @doc-category Core/Inputs\n */\n@Directive({\n selector: '[kjSelectTrigger]',\n exportAs: 'kjSelectTrigger',\n standalone: true,\n hostDirectives: [\n KjFocusRing,\n { directive: KjOverlayTrigger, inputs: ['kjOpen'] },\n ],\n providers: [\n {\n provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n useFactory: () => listboxClickTrigger(),\n },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'listbox' as const },\n ],\n})\nexport class KjSelectTrigger {\n /** @internal — same instance as the one provided on KjSelect root. */\n readonly controller = inject(KjOverlayController);\n private readonly select = inject(KJ_SELECT, { optional: true });\n\n /** Whether the listbox supports multiple selection (absorbs `multi-select`). */\n readonly kjMultiple = input(false, { transform: booleanAttribute });\n /** Disabled state (advisory; downstream styling). */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n private readonly hostEl = inject(ElementRef<HTMLElement>);\n\n constructor() {\n // Forward kjMultiple onto the parent KjSelect (when present) so options\n // and content can read a single source of truth.\n effect(() => {\n this.select?._multiple.set(this.kjMultiple());\n });\n // Register the trigger's host element with the parent KjSelect so\n // consumers (cell editors, dialogs, custom integrations) can call\n // `KjSelect.focus()` without a view-query round-trip.\n this.select?._triggerEl.set(this.hostEl);\n }\n\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n inject,\n input,\n} from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport type { KjSide, KjAlign } from '../primitives/overlay/types';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\nimport { KjListNavigator, injectSelectionModel } from '../primitives/list';\n\n/**\n * Listbox panel for `KjSelect`. Composes `KjOverlayPanel` for\n * mount/position/role wiring and `KjListNavigator` for the WAI-ARIA APG\n * listbox keyboard + active-descendant contract. Reflects\n * `KjSelectionModel.mode()` as `aria-multiselectable`.\n *\n * @doc-category Core/Inputs\n */\n@Component({\n selector: 'kj-select-content',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayPanel, inputs: ['kjFor'] },\n KjListNavigator,\n ],\n providers: [\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'listbox' as const },\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => bodyPortal() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => anchoredTo() },\n ],\n host: {\n '[attr.aria-multiselectable]':\n 'selection.mode() === \"multi\" ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n})\nexport class KjSelectContent {\n /** @internal — for the aria-multiselectable host binding. */\n protected readonly selection = injectSelectionModel<unknown>();\n\n /** Which side of the trigger to anchor on. */\n readonly kjSide = input<KjSide>('bottom');\n /** Alignment along the chosen side. */\n readonly kjAlign = input<KjAlign>('start');\n /** Pixel offset between trigger and panel. */\n readonly kjOffset = input<number, unknown>(4, {\n transform: v => Number(v) || 4,\n });\n\n constructor() {\n const pos = inject(KJ_OVERLAY_POSITION_STRATEGY) as ReturnType<typeof anchoredTo>;\n pos.configure({\n side: this.kjSide,\n align: this.kjAlign,\n offset: this.kjOffset,\n matchTriggerWidth: 'min',\n });\n }\n}\n","import { Directive } from '@angular/core';\nimport { KjListItem } from '../primitives/list';\n\n/**\n * Individual option inside a `<kj-select-content>`. Public inputs\n * (`kjOptionValue`, `kjOptionLabel`) are aliased onto the composed\n * `KjListItem`'s `kjItemValue` / `kjItemLabel`. Activation (click /\n * Enter / Space), selection-model toggle, and overlay dismissal are\n * all owned by `KjListItem` + `KjSelect.afterSelect` — this directive\n * is just role + class + the input aliasing.\n *\n * @example\n * ```html\n * <div kjOption [kjOptionValue]=\"'apple'\">Apple</div>\n * ```\n * @doc-category Core/Inputs\n */\n@Directive({\n selector: '[kjOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: KjListItem,\n inputs: [\n 'kjItemValue:kjOptionValue',\n 'kjItemLabel:kjOptionLabel',\n ],\n },\n ],\n host: {\n 'class': 'kj-option',\n 'role': 'option',\n },\n})\nexport class KjOption {}\n","import {\n Directive,\n booleanAttribute,\n computed,\n contentChildren,\n effect,\n forwardRef,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n untracked,\n type Signal,\n type WritableSignal,\n} from '@angular/core';\nimport { KjDisabled } from '../primitives';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_LIST_NAVIGATOR_CONFIG,\n KjFilterableList,\n KjListItem,\n KjListNavigator,\n KjSelectionModel,\n type KjFilterFn,\n type KjListNavigatorConfig,\n type KjListSelectionMode,\n} from '../primitives/list';\n\nlet _idCounter = 0;\nconst nextId = (): string => `kj-combobox-${++_idCounter}`;\n\n/** Default substring filter — case-insensitive contains match. */\nexport const kjContainsFilter = (query: string, label: string): boolean => {\n if (!query) return true;\n return label.toLowerCase().includes(query.toLowerCase());\n};\n\n/** Case-insensitive prefix match. */\nexport const kjStartsWithFilter = (query: string, label: string): boolean => {\n if (!query) return true;\n return label.toLowerCase().startsWith(query.toLowerCase());\n};\n\n/**\n * Root combobox / autocomplete container. Provides\n * KJ_LIST_NAVIGATOR_CONFIG via contentChildren(KjListItem),\n * KjSelectionModel (single mode), KjFilterableList, and the shared\n * KjOverlayController. Children (`KjComboboxInput`, `KjComboboxListbox`,\n * `KjComboboxOption`) inject `KjCombobox` directly.\n *\n * Compound shape — pair with [kjComboboxInput], [kjComboboxListbox] and\n * [kjComboboxOption]:\n *\n * ```html\n * <div kjCombobox [(kjValue)]=\"country\" [(kjQuery)]=\"q\">\n * <input kjComboboxInput placeholder=\"Search countries\" />\n * <div kjComboboxListbox>\n * <button kjComboboxOption [kjOptionValue]=\"'fr'\">France</button>\n * <button kjComboboxOption [kjOptionValue]=\"'de'\">Germany</button>\n * </div>\n * </div>\n * ```\n *\n * @doc-category Core/Inputs\n */\n@Directive({\n selector: '[kjCombobox]',\n standalone: true,\n exportAs: 'kjCombobox',\n hostDirectives: [{ directive: KjDisabled, inputs: ['kjDisabled'] }],\n providers: [\n { provide: KJ_LIST_NAVIGATOR_CONFIG, useExisting: forwardRef(() => KjCombobox) },\n KjSelectionModel,\n KjFilterableList,\n KjOverlayController,\n ],\n host: {\n '[attr.data-state]': \"open() ? 'open' : 'closed'\",\n },\n})\nexport class KjCombobox implements KjListNavigatorConfig {\n /** The currently selected value. Two-way bindable. */\n readonly kjValue = model<unknown>(null);\n\n /**\n * Implements `KjListNavigatorConfig.value`. The selection model reads\n * and writes through this same signal — one source of truth.\n */\n readonly value = this.kjValue as unknown as WritableSignal<\n unknown | readonly unknown[] | null\n >;\n\n /** Implements `KjListNavigatorConfig.mode`. Combobox is always single. */\n readonly mode: Signal<KjListSelectionMode> = signal('single');\n\n /** The current query string typed into the input. Two-way bindable. */\n // eslint-disable-next-line @angular-eslint/no-input-rename -- alias keeps the public `kjQuery` name distinct from this internal linkedSignal-backed property\n readonly kjQueryInput = input<string>('', { alias: 'kjQuery' });\n readonly kjQuery: WritableSignal<string> = linkedSignal(this.kjQueryInput);\n\n /** Whether the directive should run its built-in synchronous filter. Default `true`. */\n readonly kjShouldFilter = input(true, { transform: booleanAttribute });\n\n /** Whether the consumer is currently fetching options. Reflects `aria-busy` on the input. */\n readonly kjLoading = input(false, { transform: booleanAttribute });\n\n /** Whether free-text values (not from the option set) may be committed. */\n readonly kjFreeText = input(false, { transform: booleanAttribute });\n\n /** Filter function used for synchronous filtering. Default {@link kjContainsFilter}. */\n readonly kjFilter = input<(query: string, label: string) => boolean>(kjContainsFilter);\n\n /** Whether the first matching option is auto-activated as the user types. Default `true`. */\n readonly kjAutoActivateFirst = input(true, { transform: booleanAttribute });\n\n /** Emitted with the new query on every keystroke. */\n readonly kjQueryChange = output<string>();\n\n /** Emitted on commit (option selected, free-text submitted). */\n readonly kjCommit = output<unknown>();\n\n private readonly controller = inject(KjOverlayController);\n private readonly filter = inject(KjFilterableList);\n private readonly _selection = inject(KjSelectionModel);\n\n /** Implements `KjListNavigatorConfig.compareBy`. */\n readonly compareBy = signal((a: unknown, b: unknown) => Object.is(a, b));\n\n /** Stable listbox id for `aria-controls` wiring. */\n readonly listboxId = nextId();\n\n /** All `KjListItem`s under this combobox — source for nav + filter. */\n readonly items = contentChildren(KjListItem, { descendants: true });\n\n /** Filter-aware visible items, exposed for KjListNavigatorConfig. */\n readonly visibleItems = computed(\n () => this.filter.visibleItems() as readonly KjListItem<unknown>[],\n );\n\n /** Public surface read by children. */\n readonly query = this.kjQuery.asReadonly();\n readonly open = this.controller.isOpen;\n readonly loading = this.kjLoading;\n readonly allowFreeText = this.kjFreeText;\n readonly shouldFilter = this.kjShouldFilter;\n readonly visibleCount = computed(() => this.filter.visibleCount());\n\n private readonly _inputEl = signal<HTMLElement | null>(null);\n readonly inputElement = this._inputEl.asReadonly();\n\n /** @internal — set by KjComboboxInput's lifecycle. Signal so auto-activate\n * effects can re-run when the navigator becomes available. */\n private readonly _nav = signal<KjListNavigator | null>(null);\n _setNavigator(n: KjListNavigator | null): void { this._nav.set(n); }\n\n /** Currently active descendant id (or null). */\n readonly activeId = computed(() => this._nav()?.activeId() ?? null);\n\n /** Adapts the consumer `(query, label) => boolean` shape into the\n * primitive's `KjFilterFn` shape. Derived; no effect/setter needed. */\n private readonly adaptedFilter = computed<KjFilterFn>(() => {\n const userFn = this.kjFilter();\n return (q, hs) => (hs.some(h => userFn(q, h)) ? 1 : 0);\n });\n\n constructor() {\n this.filter.bind({\n items: this.items,\n query: this.kjQuery,\n filterFn: this.adaptedFilter,\n shouldFilter: this.kjShouldFilter,\n autoActivateFirst: this.kjAutoActivateFirst,\n });\n this._selection.bind({\n value: this.value,\n items: this.items,\n mode: this.mode,\n compareBy: this.compareBy,\n });\n effect(() => this.kjQueryChange.emit(this.kjQuery()));\n\n // Auto-activate first visible item on query change so Enter can\n // commit it without an explicit ArrowDown press. APG combobox 1.2\n // discoverability pattern.\n effect(() => {\n this.kjQuery();\n const autoFirst = this.kjAutoActivateFirst();\n const nav = this._nav();\n if (!autoFirst || !nav) return;\n untracked(() => {\n const visible = this.filter.visibleItems() as readonly KjListItem<unknown>[];\n nav.setActive(visible.length ? visible[0].id : null);\n });\n });\n\n // Seed the active item once the navigator attaches (input mounts).\n effect(() => {\n const nav = this._nav();\n if (!nav || !this.kjAutoActivateFirst()) return;\n if (nav.activeId() !== null) return;\n untracked(() => {\n const visible = this.filter.visibleItems() as readonly KjListItem<unknown>[];\n if (visible.length > 0) nav.setActive(visible[0].id);\n });\n });\n\n // Seed `kjQuery` from the selected item's label whenever the input\n // would otherwise render blank. Covers the case where `kjValue` is\n // bound up-front (preset) but no query text has been typed yet.\n effect(() => {\n const items = this.items();\n const v = this.kjValue();\n if (v === null || v === undefined) return;\n if (this.kjQuery() !== '') return;\n untracked(() => {\n const match = items.find(i => i.value() === v);\n if (match) this.kjQuery.set(match.label());\n });\n });\n }\n\n setQuery(value: string): void {\n if (this.kjQuery() !== value) this.kjQuery.set(value);\n this.controller.open();\n }\n\n /**\n * Programmatic select used by `commitActive()` (Enter on the input\n * with a navigator-active item) and the free-text Enter fallback in\n * `KjComboboxInput`. Sets the value through the shared signal, then\n * runs the same post-selection side-effects `afterSelect()` runs for\n * option clicks — keeping both paths converged.\n */\n select(value: unknown): void {\n this.kjValue.set(value);\n this._finishSelect(value);\n }\n\n /**\n * Implements `KjListNavigatorConfig.afterSelect`. Called by\n * `KjListItem` after it toggles the shared selection model, so option\n * clicks / Enter / Space don't need a per-option `activate.subscribe`.\n */\n afterSelect(value: unknown, closeRequested: boolean): void {\n if (!closeRequested) return;\n this._finishSelect(value);\n }\n\n private _finishSelect(value: unknown): void {\n this.controller.close('programmatic');\n // Reflect the chosen item's label in the input so the combobox\n // reads as a picker (e.g. \"France\") instead of leaving the user's\n // typed query text behind. Matches the autocomplete UX of\n // `kj-select`.\n const match = this.items().find(i => i.value() === value);\n this.kjQuery.set(match ? match.label() : String(value ?? ''));\n this.kjCommit.emit(value);\n }\n\n show(): void { this.controller.open(); }\n hide(): void { this.controller.close('programmatic'); }\n toggle(): void { this.controller.toggle(); }\n\n move(delta: 1 | -1): void {\n if (!this.controller.isOpen()) this.controller.open();\n this._nav()?.moveBy(delta);\n }\n\n commitActive(): void {\n const item = this._nav()?.activeItem();\n if (item && !item.disabled()) {\n const v = item.value();\n if (v !== undefined) { this.select(v); return; }\n }\n if (this.kjFreeText()) this.select(this.kjQuery());\n }\n\n setInputElement(el: HTMLElement | null): void { this._inputEl.set(el); }\n}\n","import {\n afterNextRender,\n Directive,\n ElementRef,\n OnDestroy,\n OnInit,\n inject,\n} from '@angular/core';\nimport { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport { onFocusOrInput } from '../primitives/overlay/strategies/trigger-event/on-focus-or-input';\nimport { KjListNavigator } from '../primitives/list';\nimport { KjCombobox } from './combobox-root';\n\n/**\n * Decorates a native `<input>` to act as the combobox trigger. Composes the\n * overlay primitive `KjOverlayTrigger` (wires `aria-expanded`,\n * `aria-controls`, `aria-haspopup`) and `KjListNavigator` (APG combobox 1.2\n * keyboard contract: ArrowUp/Down/Home/End/PageUp/PageDown/Enter/Space).\n * Provides an `onFocusOrInput()` trigger event strategy so the panel opens\n * both on focus and on the first keystroke.\n *\n * Adds a free-text Enter handler that fires only when the navigator had no\n * active item (signaled via `e.defaultPrevented === false` after the\n * navigator's host listener runs first).\n *\n * Keyboard contract:\n * - ArrowDown / ArrowUp: move active option (handled by KjListNavigator).\n * - Enter: commit active option (KjListNavigator); or free-text query when no\n * active item and `kjFreeText=true`.\n * - Escape: close the listbox.\n *\n * @doc-category Core/Inputs\n */\n@Directive({\n selector: 'input[kjComboboxInput]',\n exportAs: 'kjComboboxInput',\n standalone: true,\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFocusRing,\n KjFormControl,\n { directive: KjOverlayTrigger, inputs: ['kjOpen'] },\n KjListNavigator,\n ],\n providers: [\n { provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY, useFactory: () => onFocusOrInput() },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'listbox' as const },\n ],\n host: {\n 'role': 'combobox',\n 'autocomplete': 'off',\n 'autocapitalize': 'off',\n 'autocorrect': 'off',\n 'spellcheck': 'false',\n '[attr.aria-autocomplete]': '\"list\"',\n '[attr.aria-busy]': 'ctx.loading() ? \"true\" : null',\n '[value]': 'ctx.query()',\n '(input)': 'onInput($event)',\n '(click)': 'onClick()',\n '(keydown.enter)': 'onEnter($event)',\n '(keydown.escape)': 'onEscape($event)',\n '(keydown.alt.arrowdown)': '$event.preventDefault(); ctx.show()',\n '(keydown.alt.arrowup)': '$event.preventDefault(); ctx.hide()',\n '(keydown.tab)': 'ctx.open() && ctx.hide()',\n },\n})\nexport class KjComboboxInput implements OnInit, OnDestroy {\n /** @internal */\n readonly ctx = inject(KjCombobox);\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly nav = inject(KjListNavigator);\n\n /** @internal — public so sibling `[kjFor]` panels can read it. */\n readonly controller = inject(KjOverlayController);\n\n constructor() {\n afterNextRender(() => {\n this.ctx.setInputElement(this.el.nativeElement);\n });\n }\n\n ngOnInit(): void {\n this.ctx._setNavigator(this.nav);\n }\n\n ngOnDestroy(): void {\n this.ctx.setInputElement(null);\n this.ctx._setNavigator(null);\n }\n\n /** @internal */\n onInput(e: Event): void {\n const v = (e.target as HTMLInputElement).value;\n this.ctx.setQuery(v);\n }\n\n /**\n * Re-open the listbox on click. The `onFocusOrInput` trigger strategy\n * opens on first focus; after a commit-close, focus typically stays\n * on the input so no new focus event fires. A click here reopens\n * without requiring the user to blur + refocus first.\n */\n onClick(): void {\n if (!this.ctx.open()) this.ctx.show();\n }\n\n /**\n * Handle Enter for free-text fallback. `KjListNavigator`'s host listener\n * fires first (hostDirectives run before consumer host listeners). When the\n * navigator had an active item it called `preventDefault()` and committed it\n * — we exit early. Otherwise this is the no-active-item case — commit the\n * query only when `kjFreeText` is enabled.\n */\n onEnter(e: Event): void {\n if (e.defaultPrevented) return;\n if (this.ctx.open() || this.ctx.allowFreeText()) {\n if (this.ctx.allowFreeText()) {\n e.preventDefault();\n this.ctx.select(this.ctx.query());\n }\n }\n }\n\n /** @internal */\n onEscape(e: Event): void {\n if (this.ctx.open()) {\n e.preventDefault();\n this.ctx.hide();\n }\n }\n\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport type { KjSide, KjAlign } from '../primitives/overlay/types';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\nimport { KjCombobox } from './combobox-root';\n\n/**\n * The popup listbox that contains [kjComboboxOption] children. Composes the\n * overlay primitive `KjOverlayPanel` for mount + position + role wiring; the\n * panel is portalled into `<body>` and anchored beneath the input via the\n * `anchoredTo()` strategy. `role=\"listbox\"` and the `[hidden]` attribute are\n * driven by `KjOverlayPanel`.\n *\n * @doc-category Core/Inputs\n */\n@Directive({\n selector: '[kjComboboxListbox]',\n standalone: true,\n hostDirectives: [{ directive: KjOverlayPanel, inputs: ['kjFor'] }],\n providers: [\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'listbox' as const },\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => bodyPortal() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => anchoredTo() },\n ],\n host: {\n '(mousedown)': '$event.preventDefault()',\n },\n})\nexport class KjComboboxListbox {\n /** @internal */\n readonly ctx = inject(KjCombobox);\n\n readonly kjSide = input<KjSide>('bottom');\n readonly kjAlign = input<KjAlign>('start');\n readonly kjOffset = input<number, unknown>(4, {\n transform: v => Number(v) || 4,\n });\n\n constructor() {\n const pos = inject(KJ_OVERLAY_POSITION_STRATEGY) as ReturnType<typeof anchoredTo>;\n pos.configure({ side: this.kjSide, align: this.kjAlign, offset: this.kjOffset, matchTriggerWidth: 'min' });\n }\n}\n","import { computed, Directive, inject } from '@angular/core';\nimport { KjListItem, injectListItem } from '../primitives/list';\nimport { KjCombobox } from './combobox-root';\n\n/**\n * One option inside the combobox listbox. Composes `KjListItem` for\n * id/value/label/disabled, activation (click + Enter/Space), and the\n * shared selection toggle. Post-selection side-effects (close overlay,\n * set query, emit commit) are run by `KjCombobox.afterSelect`, called\n * from `KjListItem` — this directive only contributes the option role,\n * the `kjOption*` input aliases, and the `aria-activedescendant`-driven\n * `data-active` styling hook.\n *\n * @doc-category Core/Inputs\n */\n@Directive({\n selector: '[kjComboboxOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: KjListItem,\n inputs: [\n 'kjItemValue:kjOptionValue',\n 'kjItemLabel:kjOptionLabel',\n 'kjItemKeywords:kjOptionKeywords',\n ],\n },\n ],\n host: {\n 'class': 'kj-combobox-option',\n 'role': 'option',\n '[attr.data-active]': 'isActive() ? \"\" : null',\n },\n})\nexport class KjComboboxOption {\n private readonly item = injectListItem<unknown>();\n private readonly combobox = inject(KjCombobox);\n\n /** Whether this option is the currently active (aria-activedescendant) item. */\n readonly isActive = computed(() =>\n this.combobox.activeId() !== null && this.combobox.activeId() === this.item.id,\n );\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * A node in the cascade tree — value, label, optional children.\n * Leaf nodes have no children (or empty children array).\n */\nexport interface KjCascadeNode<T = unknown> {\n readonly value: T;\n readonly label: string;\n readonly disabled?: boolean;\n readonly children?: readonly KjCascadeNode<T>[];\n}\n\n/**\n * Shared cascade-specific context for the Cascade Select compound family.\n * Owned by `KjCascadeSelect`; injected by panel, sub-panel, and option\n * directives. Carries only the cross-cutting state that doesn't already\n * live on the shared `KjListNavigator` / `KjSelectionModel` primitives\n * (open sub-panels, the cascade path, sub-panel hover timing).\n */\nexport interface KjCascadeSelectContext<T = unknown> {\n /** The currently selected leaf value (mirrors KjSelect's value). */\n readonly value: Signal<T | null | undefined>;\n\n /**\n * The path of values from root option to selected leaf (inclusive).\n * Empty when nothing is selected.\n */\n readonly path: Signal<readonly T[]>;\n\n /**\n * Ids of sub-panels that are currently open.\n * Each id is the `ownerOptionId` used to key the sub-panel.\n */\n readonly openSubPanels: Signal<readonly string[]>;\n\n /** Sub-panel hover-open delay in ms. */\n readonly subPanelOpenDelayMs: Signal<number>;\n\n /** Sub-panel hover-out-to-close delay in ms. */\n readonly subPanelCloseDelayMs: Signal<number>;\n\n /**\n * Open the sub-panel associated with the given owner-option id.\n * Automatically closes any sub-panels at deeper levels.\n */\n openSubPanel(ownerOptionId: string): void;\n\n /**\n * Close the sub-panel associated with the given owner-option id\n * and all deeper panels.\n */\n closeSubPanel(ownerOptionId: string): void;\n\n /** Close all sub-panels (called when the root select closes). */\n closeAll(): void;\n\n /** Close the root cascade panel. */\n hide(): void;\n}\n\n/** DI token for the Cascade Select shared context. */\nexport const KJ_CASCADE_SELECT = new InjectionToken<KjCascadeSelectContext>(\n 'KjCascadeSelect',\n);\n\nlet _idCounter = 0;\n/** Allocate a stable id for cascade sub-panels / options. */\nexport function nextCascadeId(prefix: string): string {\n return `${prefix}-${++_idCounter}`;\n}\n","import {\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\nimport { KjListNavigator } from '../primitives/list';\nimport { nextCascadeId } from './cascade-select.context';\nimport { KjCascadeSelect } from './cascade-select-root';\nimport { KjCascadeSelectOption } from './cascade-select-option';\n\n/**\n * Sub-panel for a single level in the cascade. Apply as a child of a\n * `[kjCascadeSelectOption]` that acts as a sub-trigger (branch node).\n *\n * Composes `KjListNavigator` (vertical + activedescendant) for the\n * generic Up/Down / Home/End / Enter / Space / type-ahead contract.\n * Cascade-specific ArrowRight (open the next-level sub-panel) and\n * ArrowLeft (close this sub-panel + focus parent) remain handled here.\n *\n * Resolves its parent `KjCascadeSelectOption` through Angular DI — no\n * `document.getElementById` / `setParentOptionId` plumbing. The\n * sub-panel reads the parent's auto-generated `KjListItem.id` for its\n * `aria-labelledby` and uses the parent's host element directly for\n * fixed-position anchoring.\n *\n * @example\n * ```html\n * <div kjCascadeSelectOption [kjValue]=\"'us'\" kjLabel=\"USA\">\n * <div kjCascadeSelectSubPanel>\n * <div kjCascadeSelectOption [kjValue]=\"'sf'\" kjLabel=\"San Francisco\" />\n * </div>\n * </div>\n * ```\n * @doc-category Core/Data input\n * @doc\n * @doc-name cascade-select\n */\n@Directive({\n selector: '[kjCascadeSelectSubPanel]',\n standalone: true,\n hostDirectives: [\n {\n directive: KjListNavigator,\n inputs: ['kjOrientation', 'kjFocusMode'],\n },\n ],\n host: {\n 'role': 'group',\n 'tabindex': '-1',\n 'kjOrientation': 'vertical',\n 'kjFocusMode': 'activedescendant',\n '[id]': 'panelId',\n '[attr.hidden]': '!open() ? \"\" : null',\n '[attr.aria-labelledby]': 'ownerOptionId()',\n '(keydown)': 'onKeydown($event)',\n '(click)': '$event.stopPropagation()',\n '(mouseenter)': 'parentOption?._cancelCloseTimer()',\n '(mouseleave)': 'parentOption?._scheduleClose()',\n },\n})\nexport class KjCascadeSelectSubPanel {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @internal — root cascade-select (sub-panel state + option lookup). */\n private readonly root = inject(KjCascadeSelect);\n /** @internal — generic list navigator composed via `hostDirectives`. */\n private readonly nav = inject(KjListNavigator);\n /**\n * @internal Parent option directive resolved via the element\n * injector — `[kjCascadeSelectSubPanel]` is always declared as a\n * content child of `[kjCascadeSelectOption]`, so Angular walks the\n * host hierarchy and finds it without an explicit registration call.\n * Not `private` because the host hover bindings reference it.\n */\n readonly parentOption = inject(KjCascadeSelectOption, { optional: true });\n\n /**\n * Override the parent-option id for `aria-labelledby` (rare —\n * typically the parent option's auto-minted `KjListItem.id` is the\n * right target).\n */\n readonly kjOwnerOptionId = input<string | undefined>(undefined);\n\n /** @internal — resolved owner-option id (input override → parent's KjListItem id). */\n readonly ownerOptionId = computed(\n () => this.kjOwnerOptionId() ?? this.parentOption?.item.id ?? '',\n );\n\n /** @internal Stable panel id used in `aria-owns`. */\n readonly panelId = nextCascadeId('kj-cascade-sub-panel');\n\n /** @internal True when this panel is in the open list. */\n readonly open = computed(() =>\n this.root.openSubPanels().includes(this.ownerOptionId()),\n );\n\n constructor() {\n // Position the sub-panel relative to its parent option whenever it\n // opens. Uses `position: fixed` (set in CSS) so it escapes the root\n // panel's `overflow: auto`. Listens for scroll/resize to keep the\n // anchor accurate. Parent element comes from DI (KjCascadeSelectOption)\n // — no `document.getElementById` lookup.\n let onResize: (() => void) | null = null;\n let onScroll: ((e: Event) => void) | null = null;\n\n const reposition = () => {\n const optEl = this.parentOption?.item._host();\n if (!optEl) return;\n const rect = optEl.getBoundingClientRect();\n const el = this.el.nativeElement;\n el.style.top = `${rect.top}px`;\n el.style.left = `${rect.right + 2}px`;\n };\n\n effect(() => {\n if (typeof window === 'undefined') return;\n const isOpen = this.open();\n if (isOpen) {\n reposition();\n onResize = reposition;\n onScroll = () => reposition();\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n } else {\n if (onResize) window.removeEventListener('resize', onResize);\n if (onScroll) window.removeEventListener('scroll', onScroll, true);\n onResize = onScroll = null;\n }\n });\n }\n\n /**\n * @internal Cascade-specific keys — ArrowRight opens the active\n * branch's nested sub-panel; ArrowLeft closes this sub-panel and\n * pops the active focus back to the parent panel; Escape / Tab\n * dismiss this level (or all levels at depth 1). Up/Down / Home/End\n * / Enter / Space / typeahead are owned by the composed\n * `KjListNavigator`.\n */\n onKeydown(e: KeyboardEvent): void {\n switch (e.key) {\n case 'ArrowRight': {\n e.preventDefault();\n const activeId = this.nav.activeId();\n if (!activeId) return;\n const option = this.root.findOption(activeId);\n if (option?.isBranch()) this.root.openSubPanel(option.item.id);\n return;\n }\n case 'ArrowLeft':\n e.preventDefault();\n e.stopPropagation();\n this.root.closeSubPanel(this.ownerOptionId());\n return;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n this.root.closeSubPanel(this.ownerOptionId());\n return;\n case 'Tab':\n this.root.hide();\n this.root.closeAll();\n return;\n }\n }\n}\n","import {\n computed,\n contentChildren,\n Directive,\n forwardRef,\n inject,\n OnDestroy,\n} from '@angular/core';\nimport { KjListItem, injectListItem } from '../primitives/list';\nimport { KJ_CASCADE_SELECT } from './cascade-select.context';\nimport { KjCascadeSelectSubPanel } from './cascade-select-sub-panel';\n\n/**\n * Single row inside a `[kjCascadeSelectPanel]` or\n * `[kjCascadeSelectSubPanel]`. When projected `[kjCascadeSelectSubPanel]`\n * content is present the option becomes a **sub-trigger** (branch node);\n * otherwise it is a **leaf** that commits a value on activation.\n *\n * Composes `KjListItem` via `hostDirectives` — the list item owns the\n * stable `id`, the click / Enter / Space activation, `aria-selected`\n * (via the shared `KjSelectionModel` in `'leaf'` mode), and\n * `aria-disabled`. This directive contributes cascade-specific\n * semantics: `role=\"treeitem\"`, branch `aria-haspopup` / `aria-expanded`,\n * and hover-open / hover-close timers for sub-panels.\n *\n * Branch detection is signal-driven: `KjCascadeSelectSubPanel` instances\n * declared inside this option call `_registerSubPanel()` from their\n * constructor (they inject this directive via the element injector).\n * No `contentChildren` + binding effect — straightforward DI both ways.\n *\n * Branch clicks are no-ops at the selection-model level (leaf mode\n * filters them out when a `treeShape` is provided on the root) but\n * still toggle their own sub-panel via this directive's\n * `handleClick()`.\n *\n * Role: `treeitem`.\n *\n * @example Leaf\n * ```html\n * <div kjCascadeSelectOption [kjValue]=\"'sf'\" kjLabel=\"San Francisco\" />\n * ```\n *\n * @example Branch\n * ```html\n * <div kjCascadeSelectOption [kjValue]=\"'us'\" kjLabel=\"USA\">\n * <div kjCascadeSelectSubPanel>…</div>\n * </div>\n * ```\n * @doc-category Core/Data input\n * @doc\n * @doc-name cascade-select\n */\n@Directive({\n selector: '[kjCascadeSelectOption]',\n exportAs: 'kjCascadeSelectOption',\n standalone: true,\n hostDirectives: [\n {\n directive: KjListItem,\n inputs: [\n 'kjItemValue:kjValue',\n 'kjItemLabel:kjLabel',\n 'kjDisabled:kjDisabled',\n ],\n },\n ],\n host: {\n 'role': 'treeitem',\n '[attr.aria-haspopup]': 'isBranch() ? \"tree\" : null',\n '[attr.aria-expanded]': 'isBranch() ? subPanelOpen().toString() : null',\n '[attr.data-label]': 'item.label()',\n '[attr.data-leaf]': 'isLeaf().toString()',\n '[attr.data-selected]': 'item.ariaSelected() === \"true\" ? \"\" : null',\n '[attr.data-active-path]': 'isOnActivePath() ? \"\" : null',\n '(click)': 'handleClick()',\n '(mouseenter)': 'handleMouseEnter()',\n '(mouseleave)': 'handleMouseLeave()',\n },\n})\nexport class KjCascadeSelectOption implements OnDestroy {\n /** @internal — composed list-item primitive providing id/value/disabled/activation. */\n readonly item = injectListItem<unknown>();\n /** @internal */\n readonly ctx = inject(KJ_CASCADE_SELECT);\n\n /**\n * @internal Closest ancestor sub-panel (if any). `null` when this\n * option sits in the root cascade panel. Used by `KjCascadeSelect`'s\n * `openSubPanel` chain rebuild — walking parent panels up to the\n * root produces the exact open-chain that should be set, so opening\n * a sibling at any level closes its siblings automatically (instead\n * of leaving stale entries that a late-firing close timer can then\n * slice through).\n *\n * `forwardRef` defers the class lookup so the option ↔ sub-panel\n * import cycle doesn't trip on first evaluation.\n */\n readonly parentSubPanel = inject<KjCascadeSelectSubPanel | null>(\n forwardRef(() => KjCascadeSelectSubPanel),\n { optional: true },\n );\n\n // `kjValue`, `kjLabel`, `kjDisabled` are exposed via the composed\n // `KjListItem` host directive above. Don't redeclare them on this\n // class — duplicate public-name inputs route to the local declaration\n // and leave `KjListItem.kjItemValue` unset. Read values back through\n // `this.item.value()` / `this.item.label()`.\n\n /**\n * @internal Sub-panels projected as content of this option. Any\n * `[kjCascadeSelectSubPanel]` declared inside the option's content\n * makes it a branch — Angular keeps this signal in sync.\n */\n private readonly _subPanels = contentChildren(\n forwardRef(() => KjCascadeSelectSubPanel),\n { descendants: true },\n );\n\n /** @internal Whether this option is a branch node. */\n readonly isBranch = computed(() => this._subPanels().length > 0);\n\n /** @internal Inverse of `isBranch` for the `data-leaf` attribute. */\n readonly isLeaf = computed(() => !this.isBranch());\n\n private _openTimer: ReturnType<typeof setTimeout> | undefined;\n private _closeTimer: ReturnType<typeof setTimeout> | undefined;\n\n /** @internal True when this option's sub-panel is open. */\n readonly subPanelOpen = computed(() =>\n this.isBranch()\n ? this.ctx.openSubPanels().includes(this.item.id)\n : false,\n );\n\n /** @internal True when the selected value is in this option's sub-tree. */\n readonly isOnActivePath = computed(() => {\n const path = this.ctx.path();\n const v = this.item.value();\n return v !== undefined && path.includes(v);\n });\n\n ngOnDestroy(): void {\n clearTimeout(this._openTimer);\n clearTimeout(this._closeTimer);\n }\n\n /**\n * @internal Click handler — branch-only sub-panel toggle. Leaf clicks\n * are handled by the composed `KjListItem` (which calls\n * `KjSelectionModel.toggle` and then `KjCascadeSelect.afterSelect`).\n * In leaf-mode `KjSelectionModel` no-ops on branches when a tree\n * shape is provided, so we don't need to gate that here.\n */\n handleClick(): void {\n if (this.item.disabled()) return;\n if (!this.isBranch()) return;\n clearTimeout(this._openTimer);\n clearTimeout(this._closeTimer);\n if (this.subPanelOpen()) this.ctx.closeSubPanel(this.item.id);\n else this.ctx.openSubPanel(this.item.id);\n }\n\n /** @internal */\n handleMouseEnter(): void {\n if (this.item.disabled() || !this.isBranch()) return;\n clearTimeout(this._closeTimer);\n const delay = this.ctx.subPanelOpenDelayMs();\n this._openTimer = setTimeout(() => {\n this.ctx.openSubPanel(this.item.id);\n }, delay);\n }\n\n /** @internal */\n handleMouseLeave(): void {\n if (this.item.disabled() || !this.isBranch()) return;\n clearTimeout(this._openTimer);\n this._scheduleClose();\n }\n\n /**\n * @internal Called by `KjCascadeSelectSubPanel` when the cursor enters\n * the sub-panel. The option's `mouseleave` fires the moment the cursor\n * crosses out of the option's bounding box — including the case where\n * the cursor moves *into* the adjacent sub-panel. Without this bridge,\n * the close timer kept ticking and dismissed an actively-hovered\n * sub-panel after `subPanelCloseDelayMs`.\n */\n _cancelCloseTimer(): void {\n clearTimeout(this._closeTimer);\n this._closeTimer = undefined;\n }\n\n /**\n * @internal Called by `KjCascadeSelectSubPanel` when the cursor leaves\n * the sub-panel (to anywhere except back into the parent option).\n * Restarts the same close timer the option's own `mouseleave` would.\n */\n _scheduleClose(): void {\n const delay = this.ctx.subPanelCloseDelayMs();\n this._closeTimer = setTimeout(() => {\n if (!this.subPanelOpen()) return;\n this.ctx.closeSubPanel(this.item.id);\n }, delay);\n }\n}\n","import {\n Directive,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n type Signal,\n type WritableSignal,\n} from '@angular/core';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport { KJ_SELECT } from '../select/select-root';\nimport {\n KJ_LIST_NAVIGATOR_CONFIG,\n KjListItem,\n KjSelectionModel,\n type KjCompareFn,\n type KjListNavigatorConfig,\n type KjListSelectionMode,\n type KjTreeShape,\n} from '../primitives/list';\nimport {\n KJ_CASCADE_SELECT,\n type KjCascadeSelectContext,\n} from './cascade-select.context';\nimport { KjCascadeSelectOption } from './cascade-select-option';\n\n/**\n * Root cascade-select container. Implements\n * {@link KjListNavigatorConfig} (items, value, mode, compareBy,\n * treeShape, afterSelect) and provides itself under\n * `KJ_LIST_NAVIGATOR_CONFIG` via `forwardRef`. Each cascade panel +\n * sub-panel hosts its own `KjListNavigator` (vertical +\n * activedescendant). All tree-walking logic — branch gating, path\n * derivation, isLeaf — lives in the shared `KjSelectionModel`, which\n * auto-derives the tree shape from each `KjListItem.parent` DI pointer.\n * The root just owns cascade-specific UX: the sub-panel open-chain and\n * the overlay close-on-commit behavior.\n *\n * Like `KjSelect`, the root does NOT inject `KjSelectionModel` at\n * construction — doing so creates a runtime cycle (the model's\n * `inject(KJ_LIST_NAVIGATOR_CONFIG)` would resolve to a still-\n * constructing root). Lazy access via the element `Injector` resolves\n * the model after construction finishes.\n *\n * @example\n * ```html\n * <div kjCascadeSelect [(kjValue)]=\"city\">\n * <button kjCascadeSelectTrigger #t=\"kjCascadeSelectTrigger\">Pick</button>\n * <div kjCascadeSelectPanel [kjFor]=\"t\">\n * <div kjCascadeSelectOption [kjValue]=\"'us'\" kjLabel=\"USA\">…</div>\n * </div>\n * </div>\n * ```\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name cascade-select\n * @doc-is-main\n * @doc-description Unstyled cascade-select root that implements KjListNavigatorConfig and owns the shared selection model.\n */\n@Directive({\n selector: '[kjCascadeSelect]',\n exportAs: 'kjCascadeSelect',\n standalone: true,\n providers: [\n { provide: KJ_CASCADE_SELECT, useExisting: forwardRef(() => KjCascadeSelect) },\n { provide: KJ_SELECT, useExisting: forwardRef(() => KjCascadeSelect) },\n { provide: KJ_LIST_NAVIGATOR_CONFIG, useExisting: forwardRef(() => KjCascadeSelect) },\n KjSelectionModel,\n KjOverlayController,\n ],\n})\nexport class KjCascadeSelect implements KjListNavigatorConfig, KjCascadeSelectContext {\n /** @internal — shared overlay controller; trigger + panel + options share this. */\n private readonly _controller = inject(KjOverlayController);\n\n /** Two-way bindable selected leaf value. */\n readonly kjValue = model<unknown>(undefined);\n\n /** Two-way bindable path of values from root to selected leaf. */\n readonly kjCascadePath = model<readonly unknown[]>([]);\n\n /**\n * Optional consumer-supplied tree topology. When omitted, the\n * selection model auto-derives one from each `KjListItem.parent`\n * pointer (which Angular resolves via the element injector — the\n * outer cascade option of a sub-panel's contents). Supply this only\n * when the consumer's data model isn't a faithful match for the\n * projected DOM (rare).\n */\n readonly kjTreeShape = input<KjTreeShape<unknown> | null>(null);\n\n /** Sub-panel hover-open delay in ms. Default 100 (matches Dropdown Menu). */\n readonly kjSubPanelOpenDelayMs = input<number>(100);\n\n /** Sub-panel hover-out close delay in ms. Default 300 (prevents flicker). */\n readonly kjSubPanelCloseDelayMs = input<number>(300);\n\n /** Emitted when the active-descendant crosses a level boundary. */\n readonly kjLevelChange = output<{ levelIndex: number }>();\n\n // ── KjListNavigatorConfig implementation ──────────────────────────\n /** All `KjListItem`s under this cascade — source for the navigators. */\n readonly items = contentChildren(KjListItem, { descendants: true });\n\n /**\n * Every projected `KjCascadeSelectOption`. Used by {@link findOption}\n * to resolve a `KjListItem` id (typically the navigator's active id)\n * to its wrapping option directive — no `document.getElementById` /\n * `querySelector` lookups in panel keydown handlers.\n */\n private readonly _options = contentChildren(KjCascadeSelectOption, { descendants: true });\n\n private readonly _optionsById = computed(() => {\n const map = new Map<string, KjCascadeSelectOption>();\n for (const o of this._options()) map.set(o.item.id, o);\n return map;\n });\n\n /**\n * Resolve the `KjCascadeSelectOption` wrapping the given\n * `KjListItem.id`. Returns `undefined` when no projected option\n * matches.\n */\n findOption(itemId: string): KjCascadeSelectOption | undefined {\n return this._optionsById().get(itemId);\n }\n\n /**\n * Implements `KjListNavigatorConfig.value`. Shared with `kjValue` so\n * `KjSelectionModel` reads / writes through the same signal — one\n * source of truth.\n */\n readonly value = this.kjValue as unknown as WritableSignal<\n unknown | readonly unknown[] | null\n >;\n\n /**\n * Cascade is single-leaf select: exactly one leaf value lives in\n * `kjValue`. The selection model's `'single'` + tree-shape branch\n * gate blocks non-leaf commits automatically — branches only toggle\n * their own sub-panel via `KjCascadeSelectOption.handleClick`.\n */\n readonly mode: Signal<KjListSelectionMode> = signal<KjListSelectionMode>('single');\n\n /** Implements `KjListNavigatorConfig.compareBy`. */\n readonly compareBy = signal<KjCompareFn<unknown>>(Object.is as KjCompareFn<unknown>);\n\n /** Re-exposes `kjTreeShape` under the {@link KjListNavigatorConfig} key. */\n readonly treeShape = this.kjTreeShape;\n\n /**\n * Selection model is injected directly. The model uses a {@link\n * KjSelectionModel.bind} call to receive this root's canonical\n * signals — that pattern keeps the DI graph acyclic (the model does\n * not inject `KJ_LIST_NAVIGATOR_CONFIG` back, so providing both on\n * the same element no longer collides).\n */\n private readonly _selection = inject(KjSelectionModel);\n\n constructor() {\n this._selection.bind({\n value: this.value,\n items: this.items,\n mode: this.mode,\n compareBy: this.compareBy,\n treeShape: this.treeShape,\n });\n }\n\n // ── KjSelectContext-compatible surface ──────────────────────────────\n /** Open state — drives `KjSelect.open` for downstream consumers. */\n readonly open = this._controller.isOpen;\n\n /** Compatibility shim — KjSelect-style single setter. Closes the panel. */\n select(val: unknown): void {\n this.kjValue.set(val);\n this._controller.close('programmatic');\n }\n\n /** Compatibility shim — toggles the overlay. */\n toggle(): void {\n if (this._controller.isOpen()) this._controller.close('programmatic');\n else this._controller.open();\n }\n\n // ── KjCascadeSelectContext implementation ──────────────────────────\n private readonly _openSubPanels = signal<readonly string[]>([]);\n\n /** Path of values from root option to the selected leaf. */\n readonly path = computed(() => this.kjCascadePath());\n\n /** Open sub-panel ownerOptionIds (level → level chain). */\n readonly openSubPanels = this._openSubPanels.asReadonly();\n\n /** Hover-open delay (ms). */\n readonly subPanelOpenDelayMs = computed(() => this.kjSubPanelOpenDelayMs());\n /** Hover-out close delay (ms). */\n readonly subPanelCloseDelayMs = computed(() => this.kjSubPanelCloseDelayMs());\n\n /**\n * Implements `KjListNavigatorConfig.afterSelect`. The selection model\n * already gated branches before reaching here (see\n * `KjSelectionModel.canActivate`), so any defined `value` is a leaf\n * commit: derive the path from the model, surface it on\n * `kjCascadePath`, close every sub-panel, and dismiss the overlay.\n */\n afterSelect(value: unknown, _closeRequested: boolean): void {\n if (value === undefined) return;\n this.kjCascadePath.set(this._selection.pathTo(value));\n this._openSubPanels.set([]);\n this._controller.close('programmatic');\n }\n\n /**\n * Open the sub-panel chain ending at `ownerOptionId`. Walking the\n * target's ancestry on every open is the trick that keeps sibling\n * sub-panels mutually exclusive: any stale entries from a prior\n * branch get replaced atomically with the fresh chain, so a\n * mouseleave-queued close timer on a sibling can no longer slice\n * through the new chain after it fires. The walk also cancels any\n * pending close timers along the new chain so a brief inter-option\n * cursor crossing doesn't dismiss a freshly-opened panel.\n */\n openSubPanel(ownerOptionId: string): void {\n const target = this.findOption(ownerOptionId);\n if (!target) {\n // Fallback: option not yet registered (rare — pre-content-init).\n // Append to keep behavior monotonic; the close path is tolerant.\n this._openSubPanels.update(panels =>\n panels.includes(ownerOptionId) ? panels : [...panels, ownerOptionId],\n );\n return;\n }\n const chain: string[] = [];\n let current: typeof target | null = target;\n while (current) {\n current._cancelCloseTimer();\n chain.unshift(current.item.id);\n current = current.parentSubPanel?.parentOption ?? null;\n }\n this._openSubPanels.set(chain);\n }\n\n closeSubPanel(ownerOptionId: string): void {\n this._openSubPanels.update(panels => {\n const idx = panels.indexOf(ownerOptionId);\n if (idx < 0) return panels;\n return panels.slice(0, idx);\n });\n }\n\n closeAll(): void {\n this._openSubPanels.set([]);\n }\n\n /** Closes the root cascade panel. */\n hide(): void {\n this._controller.close('programmatic');\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport { onClick } from '../primitives/overlay/strategies/trigger-event/on-click';\n\n/**\n * Trigger button for the Cascade Select root panel. Opens the panel on click\n * and exposes ARIA attributes (`aria-haspopup=\"listbox\"`, `aria-expanded`,\n * `aria-controls`) via the composed `KjOverlayTrigger` host directive.\n *\n * @example\n * ```html\n * <button kjCascadeSelectTrigger #t=\"kjCascadeSelectTrigger\">Pick a city</button>\n * <div kjCascadeSelectPanel [kjFor]=\"t\">…</div>\n * ```\n * @doc-category Core/Data input\n */\n@Directive({\n selector: '[kjCascadeSelectTrigger]',\n exportAs: 'kjCascadeSelectTrigger',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayTrigger, inputs: ['kjOpen'] },\n ],\n providers: [\n { provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY, useFactory: () => onClick() },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'listbox' as const },\n ],\n})\nexport class KjCascadeSelectTrigger {\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n /** The controller of the composed `KjOverlayTrigger`, exposed for sibling `[kjFor]` panels. */\n get controller(): KjOverlayController {\n return this._overlayTrigger.controller;\n }\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n","import {\n Directive,\n inject,\n input,\n} from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport type { KjAlign, KjSide } from '../primitives/overlay/types';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\nimport { KjListNavigator } from '../primitives/list';\nimport { KjCascadeSelect } from './cascade-select-root';\n\n/**\n * Root panel for a Cascade Select. Composes:\n * - `KjOverlayPanel` — mount / position / aria wiring (rendered with\n * `role=\"tree\"` via the panel-role provider).\n * - `KjListNavigator` (vertical + activedescendant) — generic Up/Down /\n * Home/End / Enter / Space / type-ahead navigation across the\n * level-0 options.\n *\n * Cascade-specific ArrowRight (open the active option's sub-panel) and\n * Escape / Tab (close everything) remain handled here because they\n * carry cascade-specific semantics the generic navigator doesn't\n * cover.\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name cascade-select\n */\n@Directive({\n selector: '[kjCascadeSelectPanel]',\n exportAs: 'kjCascadeSelectPanel',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayPanel, inputs: ['kjFor'] },\n {\n directive: KjListNavigator,\n inputs: ['kjOrientation', 'kjFocusMode'],\n },\n ],\n providers: [\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'tree' as const },\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => bodyPortal() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => anchoredTo() },\n ],\n host: {\n 'role': 'tree',\n 'aria-orientation': 'horizontal',\n 'aria-multiselectable': 'false',\n 'tabindex': '-1',\n 'kjOrientation': 'vertical',\n 'kjFocusMode': 'activedescendant',\n '(keydown)': 'onKeydown($event)',\n '(click)': '$event.stopPropagation()',\n },\n})\nexport class KjCascadeSelectPanel {\n /** @internal — root directive (typed). Owns sub-panel state + option lookup. */\n private readonly root = inject(KjCascadeSelect);\n /** @internal — generic list navigator composed via `hostDirectives`. */\n private readonly nav = inject(KjListNavigator);\n\n /** Anchored side relative to the trigger. */\n readonly kjSide = input<KjSide>('bottom');\n /** Cross-axis alignment relative to the trigger. */\n readonly kjAlign = input<KjAlign>('start');\n\n constructor() {\n const pos = inject(KJ_OVERLAY_POSITION_STRATEGY) as ReturnType<typeof anchoredTo>;\n pos.configure({ side: this.kjSide, align: this.kjAlign, matchTriggerWidth: 'min' });\n }\n\n /**\n * @internal Cascade-specific keys — ArrowRight opens the active\n * branch's sub-panel; Escape / Tab dismiss everything. Up/Down /\n * Home/End / Enter / Space / typeahead all flow through the composed\n * `KjListNavigator`.\n */\n onKeydown(e: KeyboardEvent): void {\n switch (e.key) {\n case 'ArrowRight': {\n e.preventDefault();\n const activeId = this.nav.activeId();\n if (!activeId) return;\n const option = this.root.findOption(activeId);\n if (option?.isBranch()) this.root.openSubPanel(option.item.id);\n return;\n }\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n this.root.hide();\n this.root.closeAll();\n return;\n case 'Tab':\n this.root.hide();\n this.root.closeAll();\n return;\n }\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * A single node in a tree structure. Nodes may carry an arbitrary value\n * of type `T`, a display label, an optional disabled flag, and optional\n * child nodes (making the node a branch rather than a leaf).\n */\nexport interface KjTreeNode<T = unknown> {\n /** The value represented by this node. Used for selection and identity. */\n readonly value: T;\n /** Human-readable display label shown in the tree. */\n readonly label: string;\n /** When `true`, the node cannot be selected or expanded by the user. */\n readonly disabled?: boolean;\n /** Child nodes. When present and non-empty, this node is a branch. */\n readonly children?: readonly KjTreeNode<T>[];\n}\n\n/**\n * Context interface exposed by `KjTreeSelect` to descendant directives\n * (panel, nodes, toggle buttons) via the `KJ_TREE_SELECT` injection token.\n *\n * Selection state (current value, membership checks, toggles) is **not**\n * part of this context — it lives on the shared `KjSelectionModel`\n * provided by the root and consumed by `KjListItem` via the\n * `KJ_LIST_NAVIGATOR_CONFIG` plumbing. This interface only carries the\n * **tree-specific** surface: node data, expansion state, and the public\n * `selectionMode` input value (used by panel ARIA to drive\n * `aria-multiselectable`).\n *\n * Open/close state lives on the overlay primitives and is not part of this\n * context — descendants that need it inject `KjOverlayController` directly.\n */\nexport interface KjTreeSelectContext<T = unknown> {\n /** Stable id for the panel element (used for `aria-controls`). */\n readonly panelId: string;\n /** Current selection mode: `'single'` or `'multiple'`. */\n readonly selectionMode: Signal<'single' | 'multiple'>;\n /** Set of node IDs that are currently expanded. */\n readonly expandedIds: Signal<ReadonlySet<string>>;\n /** Set of node **values** that are currently expanded. */\n readonly expandedValues: Signal<ReadonlySet<unknown>>;\n /** The full tree data. */\n readonly nodes: Signal<readonly KjTreeNode<T>[]>;\n\n /**\n * Toggle expand/collapse for the given node DOM id. Does nothing for leaf\n * nodes (those without children).\n */\n toggleNode(nodeId: string): void;\n /**\n * Toggle expand/collapse for a node identified by its **value**. Used by\n * wrapper components that track expansion by value rather than by DOM id.\n */\n toggleNodeByValue(value: T): void;\n /** Returns `true` when the node with the given DOM id is expanded. */\n isExpanded(nodeId: string): boolean;\n /** Returns `true` when the given value is in the expanded values set. */\n isValueExpanded(value: T): boolean;\n}\n\n/** Injection token providing the nearest `KjTreeSelect` context to descendants. */\nexport const KJ_TREE_SELECT = new InjectionToken<KjTreeSelectContext>('KjTreeSelect');\n","import {\n computed,\n contentChildren,\n Directive,\n effect,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n type Signal,\n type WritableSignal,\n} from '@angular/core';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_LIST_NAVIGATOR_CONFIG,\n KjListItem,\n KjSelectionModel,\n type KjCompareFn,\n type KjListNavigatorConfig,\n type KjListSelectionMode,\n type KjTreeShape,\n} from '../primitives/list';\nimport { KJ_TREE_SELECT, type KjTreeNode, type KjTreeSelectContext } from './tree-select.context';\n\nlet _treeSelectIdCounter = 0;\n\nfunction setsEqual(a: ReadonlySet<unknown>, b: ReadonlySet<unknown>): boolean {\n if (a.size !== b.size) return false;\n for (const v of a) if (!b.has(v)) return false;\n return true;\n}\n\n/**\n * Root Tree Select container. Owns selection model, expanded node state,\n * and the shared `KjOverlayController` so the trigger, content, and\n * individual nodes all wire to the same overlay state.\n *\n * Mirrors the `[kjSelect]` pattern: umbrella root holds context +\n * controller; leaf directives read from it via DI.\n *\n * Supports two selection modes:\n * - `'single'` (default) — selecting a node writes that value and closes the panel.\n * - `'multiple'` — selecting toggles the value in the selection set; the panel\n * stays open.\n *\n * Implements {@link KjListNavigatorConfig}: descendants (`KjListNavigator`,\n * `KjSelectionModel`) read the canonical `value`, `mode`, `compareBy`, and\n * optional `treeShape` from the same root via `KJ_LIST_NAVIGATOR_CONFIG`.\n * The legacy {@link KjTreeSelectContext} surface is preserved as a thin\n * delegate so existing node/toggle directives keep working.\n *\n * @example\n * ```html\n * <div kjTreeSelect [(kjValue)]=\"selected\" [kjNodes]=\"categories\">\n * <button kjTreeSelectTrigger #t=\"kjTreeSelectTrigger\">Select category</button>\n * <kj-tree-select-content [kjFor]=\"t\"></kj-tree-select-content>\n * </div>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name tree-select\n * @doc-is-main\n * @doc-description Unstyled tree-select root that holds the selection model and shares state with trigger, content, and nodes.\n */\n@Directive({\n selector: '[kjTreeSelect]',\n standalone: true,\n providers: [\n { provide: KJ_TREE_SELECT, useExisting: KjTreeSelect },\n { provide: KJ_LIST_NAVIGATOR_CONFIG, useExisting: forwardRef(() => KjTreeSelect) },\n KjSelectionModel,\n KjOverlayController,\n ],\n})\nexport class KjTreeSelect implements KjListNavigatorConfig, KjTreeSelectContext {\n // Note: selection state (current value, isSelected membership) lives\n // on the shared `KjSelectionModel` injected by `KjListItem`. The\n // tree-select context here only owns tree-specific surface:\n // expansion, the node-data signal, and the public `selectionMode`\n // input name. Programmatic selection routes through the same\n // `kjValue` signal that the selection model writes to — see\n // `afterSelect` below.\n /** @internal — shared overlay controller; trigger + content + nodes all see this same instance. */\n private readonly controller = inject(KjOverlayController);\n\n /** Tree node data. Each node may carry children, forming a hierarchy. */\n readonly kjNodes = input<readonly KjTreeNode[]>([]);\n\n /** Selection mode: `'single'` closes the panel on select; `'multiple'` toggles. */\n readonly kjSelectionMode = input<'single' | 'multiple'>('single');\n\n /**\n * Two-way model for the selected value(s). In `'single'` mode this holds\n * one value (or `undefined`); in `'multiple'` mode it holds an array.\n */\n readonly kjValue = model<unknown>(undefined);\n\n /**\n * Optional tree topology used by `KjSelectionModel` in `'leaf'` /\n * `'cascade'` selection modes. Exposed as a signal so the model can\n * follow it reactively without `KjTreeSelect` having to inject the\n * model (that would re-introduce the NG0200 cycle).\n */\n readonly kjTreeShape = input<KjTreeShape<unknown> | null>(null);\n\n /** Set of node IDs that are currently expanded (two-way bindable). */\n readonly kjExpandedKeys = model<readonly unknown[]>([]);\n\n /** Emitted when a node is selected. */\n readonly kjNodeSelect = output<unknown>();\n\n /** Emitted when a node branch is expanded. */\n readonly kjNodeExpand = output<unknown>();\n\n /** Emitted when a node branch is collapsed. */\n readonly kjNodeCollapse = output<unknown>();\n\n /** Stable panel id used for `aria-controls`. */\n readonly panelId = `kj-tree-select-panel-${++_treeSelectIdCounter}`;\n\n private readonly _expandedIds = signal<Set<string>>(new Set());\n private readonly _expandedValues = signal<Set<unknown>>(new Set());\n\n // ── KjListNavigatorConfig implementation ────────────────────────────\n\n /**\n * Items contributed by `KjListItem` instances under this root. Empty\n * until node-level wiring lands (Task 3 of the migration plan); kept\n * here now so the config contract is satisfied today.\n */\n readonly items = contentChildren(KjListItem, { descendants: true });\n\n /**\n * Single canonical value signal. Shared with the legacy `kjValue`\n * model — `KjSelectionModel` reads / writes through this signal.\n */\n readonly value = this.kjValue as unknown as WritableSignal<\n unknown | readonly unknown[] | null\n >;\n\n /**\n * `KjListSelectionMode` view of {@link kjSelectionMode}:\n * - `'single'` → `'single'` (one value, closes panel)\n * - `'multiple'` → `'cascade'` (tri-state tree selection: toggling a\n * parent selects/deselects every leaf descendant; parent renders\n * `aria-checked=\"mixed\"` when only some descendants are selected).\n *\n * Cascade mode requires a tree shape; {@link treeShape} falls back to\n * a shape auto-derived from {@link kjNodes} when the consumer does\n * not supply one.\n */\n readonly mode: Signal<KjListSelectionMode> = computed(() =>\n this.kjSelectionMode() === 'multiple' ? 'cascade' : 'single',\n );\n\n /** Equality fn used by `KjSelectionModel`. Defaults to `Object.is`. */\n readonly compareBy = signal<KjCompareFn<unknown>>(Object.is as KjCompareFn<unknown>);\n\n /**\n * Effective tree topology. Consumer-supplied `kjTreeShape` takes\n * precedence; otherwise an auto-built shape is derived from the\n * `kjNodes` input so cascade mode works out of the box for the\n * canonical data-driven usage.\n */\n readonly treeShape = computed<KjTreeShape<unknown> | null>(() =>\n this.kjTreeShape() ?? this._nodeShape(),\n );\n\n /**\n * @internal Tree shape built from the `kjNodes` data structure. Walks\n * each branch once to populate parent / children / leaf maps keyed by\n * `node.value`.\n */\n private readonly _nodeShape = computed<KjTreeShape<unknown> | null>(() => {\n const roots = this.kjNodes();\n if (roots.length === 0) return null;\n const parentOf = new Map<unknown, unknown | null>();\n const childrenOf = new Map<unknown, unknown[]>();\n const walk = (node: KjTreeNode, parent: unknown | null): void => {\n parentOf.set(node.value, parent);\n const kids = node.children ?? [];\n childrenOf.set(node.value, kids.map(c => c.value));\n for (const c of kids) walk(c, node.value);\n };\n for (const r of roots) walk(r, null);\n return {\n getParent: (n) => parentOf.get(n) ?? null,\n getChildren:(n) => childrenOf.get(n) ?? [],\n isLeaf: (n) => (childrenOf.get(n)?.length ?? 0) === 0,\n };\n });\n\n /**\n * Hook called by `KjListItem` after it toggles the shared selection\n * model. Re-emits the public `kjNodeSelect` output so consumers see\n * the same notification they saw before the migration (the legacy\n * per-node `handleClick` emitted it; activation now happens inside\n * `KjListItem._activate`, so the root is the only place left to\n * forward it). In single mode (the only mode that returns\n * `closeRequested: true`) we then close the overlay; multi keeps the\n * panel open.\n */\n afterSelect(value: unknown, closeRequested: boolean): void {\n if (value !== undefined) this.kjNodeSelect.emit(value);\n if (closeRequested) this.controller.close('programmatic');\n }\n\n // ── KjTreeSelectContext implementation ──────────────────────────────\n\n readonly selectionMode = computed(() => this.kjSelectionMode());\n readonly expandedIds = computed(() =>\n new Set(this._expandedIds()) as ReadonlySet<string>,\n );\n readonly expandedValues = computed(() =>\n new Set(this._expandedValues()) as ReadonlySet<unknown>,\n );\n readonly nodes = computed(() => this.kjNodes());\n\n /** Directly-injected selection model; wired via `bind()` below. */\n private readonly _selection = inject(KjSelectionModel);\n\n constructor() {\n this._selection.bind({\n value: this.value,\n items: this.items,\n mode: this.mode,\n compareBy: this.compareBy,\n treeShape: this.treeShape,\n });\n\n // Sync kjExpandedKeys (controlled input) → _expandedValues\n effect(() => {\n const keys = this.kjExpandedKeys();\n const next = new Set(keys);\n const current = untracked(this._expandedValues);\n if (!setsEqual(current, next)) {\n this._expandedValues.set(next);\n }\n });\n }\n\n // ── Expansion ops ────────────────────────────────────────────────────\n\n toggleNode(nodeId: string): void {\n const set = new Set(this._expandedIds());\n if (set.has(nodeId)) set.delete(nodeId);\n else set.add(nodeId);\n this._expandedIds.set(set);\n }\n\n toggleNodeByValue(value: unknown): void {\n const set = new Set(this._expandedValues());\n const wasExpanded = set.has(value);\n if (wasExpanded) set.delete(value);\n else set.add(value);\n this._expandedValues.set(set);\n this.kjExpandedKeys.set(Array.from(set));\n if (wasExpanded) this.kjNodeCollapse.emit(value);\n else this.kjNodeExpand.emit(value);\n }\n\n isExpanded(nodeId: string): boolean {\n return this._expandedIds().has(nodeId);\n }\n\n isValueExpanded(value: unknown): boolean {\n return this._expandedValues().has(value);\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n inject,\n input,\n} from '@angular/core';\nimport { KjListItem, injectListItem } from '../primitives/list';\nimport { KJ_TREE_SELECT } from './tree-select.context';\n\n/**\n * Individual tree node (treeitem). Composes `KjListItem` via\n * `hostDirectives` — the list item owns the stable id, the\n * click/Enter/Space activation, the `aria-selected` / `aria-disabled`\n * bindings, and the shared `KjSelectionModel` toggle. This directive\n * contributes only tree-specific semantics: `role=\"treeitem\"`,\n * `aria-level` / `aria-setsize` / `aria-posinset` from the parent's\n * derived metadata, `aria-expanded` from the tree context's\n * expanded-id set, and the `data-*` styling hooks.\n *\n * @example\n * ```html\n * <div\n * kjTreeSelectNode\n * [kjValue]=\"node.value\"\n * [kjLabel]=\"node.label\"\n * [kjNodeLevel]=\"1\"\n * [kjHasChildren]=\"true\"\n * >\n * <button kjTreeSelectToggle>▶</button>\n * <span>{{ node.label }}</span>\n * </div>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name tree-select\n * @doc-description Renders one tree node with accessible treeitem semantics; selection + activation owned by the composed KjListItem.\n */\n@Directive({\n selector: '[kjTreeSelectNode]',\n standalone: true,\n exportAs: 'kjTreeSelectNode',\n hostDirectives: [\n {\n directive: KjListItem,\n inputs: [\n 'kjItemValue:kjValue',\n 'kjItemLabel:kjLabel',\n 'kjDisabled:kjDisabled',\n ],\n },\n ],\n host: {\n 'class': 'kj-tree-select-node',\n 'role': 'treeitem',\n '[attr.aria-level]': 'kjNodeLevel()',\n '[attr.aria-setsize]': 'kjNodeSize()',\n '[attr.aria-posinset]': 'kjNodePos()',\n '[attr.aria-expanded]': 'kjHasChildren() ? (isExpanded() ? \"true\" : \"false\") : null',\n '[attr.data-expanded]': 'isExpanded() ? \"true\" : \"false\"',\n '[attr.data-has-children]': 'kjHasChildren() ? \"true\" : \"false\"',\n // `aria-selected` is owned by the composed `KjListItem` (it binds\n // off the shared `KjSelectionModel`). We surface it as a\n // `data-selected` styling hook here so consumer CSS doesn't have to\n // care that the source of truth is one directive layer down.\n '[attr.data-selected]': 'item.ariaSelected() === \"true\" ? \"\" : null',\n },\n})\nexport class KjTreeSelectNode {\n /** Nesting depth (1-based). Maps to `aria-level`. */\n readonly kjNodeLevel = input<number>(1);\n /** Number of sibling nodes at the same level. Maps to `aria-setsize`. */\n readonly kjNodeSize = input<number>(1);\n /** 1-based position among siblings. Maps to `aria-posinset`. */\n readonly kjNodePos = input<number>(1);\n /** Whether this node has child nodes (branch vs. leaf). */\n readonly kjHasChildren = input(false, { transform: booleanAttribute });\n\n private readonly ctx = inject(KJ_TREE_SELECT);\n /** @internal — composed list-item primitive providing id/value/disabled/activation. */\n readonly item = injectListItem<unknown>();\n\n /** Stable id minted by the composed `KjListItem` (used by toggle + aria refs). */\n get id(): string { return this.item.id; }\n /** Current value carried by this node (from the composed `KjListItem`). */\n get value(): unknown { return this.item.value(); }\n /** Whether this node is disabled (delegated to the composed `KjListItem`). */\n readonly disabled = this.item.disabled;\n /** Whether the node is currently expanded (reactive computed from context). */\n readonly isExpanded = computed(() => this.ctx.isExpanded(this.id));\n}\n\n/**\n * Expand/collapse toggle button inside a `KjTreeSelectNode`. Intercepts\n * clicks before they bubble to the node (preventing accidental\n * activation through the composed `KjListItem`) and toggles the\n * tree-context expansion state by both the node's id and its value.\n * Only meaningful on branch nodes (`[kjHasChildren]=\"true\"`).\n *\n * Carries `aria-label` that reflects the current state.\n *\n * @example\n * ```html\n * <button kjTreeSelectToggle aria-hidden=\"true\"></button>\n * ```\n * @doc-category Core/Inputs\n */\n@Directive({\n selector: '[kjTreeSelectToggle]',\n standalone: true,\n host: {\n '[attr.aria-label]': 'isExpanded() ? \"Collapse\" : \"Expand\"',\n '[attr.data-expanded]': 'isExpanded() ? \"true\" : \"false\"',\n '(click)': 'handleClick($event)',\n },\n})\nexport class KjTreeSelectToggle {\n private readonly ctx = inject(KJ_TREE_SELECT);\n /** @internal — parent node context */\n private readonly node = inject(KjTreeSelectNode);\n\n /** Whether the parent node is currently expanded (reactive computed). */\n readonly isExpanded = this.node.isExpanded;\n\n /** @internal */\n handleClick(event: Event): void {\n event.stopPropagation();\n if (this.node.disabled()) return;\n this.ctx.toggleNode(this.node.id);\n this.ctx.toggleNodeByValue(this.node.value);\n }\n}\n","import { Directive, booleanAttribute, inject, input } from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n type KjTriggerEventStrategy,\n} from '../primitives/overlay/tokens';\nimport { onClick } from '../primitives/overlay/strategies/trigger-event/on-click';\n\n/**\n * Wraps `onClick()` and forces `ariaHasPopup` to `'tree'` so the trigger\n * advertises its panel role to assistive tech.\n */\nfunction treeClickTrigger(): KjTriggerEventStrategy {\n const inner = onClick();\n return {\n ariaHasPopup: 'tree',\n attach: c => inner.attach(c),\n bindToggle: t => inner.bindToggle(t),\n onOpen: () => inner.onOpen?.(),\n onClose: () => inner.onClose?.(),\n detach: () => inner.detach(),\n };\n}\n\n/**\n * Trigger button that opens/closes the Tree Select panel. Composes the\n * overlay `KjOverlayTrigger` host directive (which wires `aria-expanded`,\n * `aria-controls`, `aria-haspopup`, and click handling) and forces\n * `role=\"combobox\"` on the host element.\n *\n * @example\n * ```html\n * <button kjTreeSelectTrigger>Select category</button>\n * ```\n * @doc-category Core/Inputs\n */\n@Directive({\n selector: '[kjTreeSelectTrigger]',\n exportAs: 'kjTreeSelectTrigger',\n standalone: true,\n hostDirectives: [\n KjFocusRing,\n { directive: KjOverlayTrigger, inputs: ['kjOpen'] },\n ],\n providers: [\n {\n provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n useFactory: () => treeClickTrigger(),\n },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'tree' as const },\n ],\n host: {\n 'role': 'combobox',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjTreeSelectTrigger {\n /** @internal */\n readonly controller = inject(KjOverlayController);\n\n /** Disabled state. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /** @internal */\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case ' ':\n case 'Enter':\n event.preventDefault();\n if (!this.controller.isOpen()) this.controller.open();\n break;\n case 'Escape':\n if (this.controller.isOpen()) {\n event.preventDefault();\n this.controller.close('programmatic');\n }\n break;\n }\n }\n\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n ViewEncapsulation,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport type { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport type { KjSide, KjAlign } from '../primitives/overlay/types';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\nimport {\n KJ_LIST_FOCUS_MODE,\n KjListNavigator,\n type KjListFocusMode,\n} from '../primitives/list';\nimport { KJ_TREE_SELECT } from './tree-select.context';\n\n// Token override below pins the focus mode to `'roving'` for descendant\n// `KjListItem`s. Defined at module scope so it can be referenced from\n// the `providers` array literal without a class capture.\nconst ROVING_FOCUS_MODE = signal<KjListFocusMode>('roving');\n\n/**\n * Tree panel container. Composes `KjOverlayPanel` for mount/position/role\n * wiring (carries `role=\"tree\"` from the panel role provider) and\n * `KjListNavigator` for the generic Up/Down / Home/End / Enter / Space /\n * type-ahead contract. The tree-specific ArrowLeft / ArrowRight keys\n * remain handled here because they carry expand/collapse +\n * parent/first-child semantics the generic navigator doesn't cover.\n *\n * Roving DOM focus is wired here (rather than via the navigator's own\n * `kjFocusMode=\"roving\"` mode) because Angular's `hostDirectives.inputs`\n * surface can only rename inputs — it can't push a static default into a\n * composed input signal. Instead this component (1) overrides the\n * `KJ_LIST_FOCUS_MODE` provider so child `KjListItem`s flip their\n * `tabindex` correctly, and (2) drives the active-item DOM focus via a\n * local effect on `KjListNavigator.activeId()`. The navigator itself\n * continues to run its keyboard / type-ahead state machine unchanged.\n *\n * @doc-category Core/Inputs\n */\n@Component({\n selector: 'kj-tree-select-content',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayPanel, inputs: ['kjFor'] },\n KjListNavigator,\n ],\n providers: [\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'tree' as const },\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => bodyPortal() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => anchoredTo() },\n // Pin items' focus model to `'roving'` (per WAI-ARIA APG tree). This\n // overrides the provider the navigator registers (which mirrors the\n // navigator's own `kjFocusMode` signal). The navigator's internal\n // seed / focus effects are skipped — both are driven here instead.\n { provide: KJ_LIST_FOCUS_MODE, useValue: ROVING_FOCUS_MODE },\n ],\n host: {\n '[attr.aria-multiselectable]':\n 'ctx?.selectionMode() === \"multiple\" ? \"true\" : null',\n '(keydown)': 'onKeydown($event)',\n '(document:keydown.escape)': 'controller?.close(\"esc\")',\n '(document:click)': 'onDocClick($event)',\n '(click)': '$event.stopPropagation()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n})\nexport class KjTreeSelectContent {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly _injector = inject(Injector);\n private _panelCache: KjOverlayPanel | null | undefined = undefined;\n private get _panel(): KjOverlayPanel | null {\n if (this._panelCache === undefined) {\n this._panelCache = this._injector.get(KjOverlayPanel, null);\n }\n return this._panelCache;\n }\n /** @internal */\n get controller(): KjOverlayController | null {\n return this._panel?.controller ?? null;\n }\n /** @internal */\n readonly ctx = inject(KJ_TREE_SELECT, { optional: true });\n // The composed `KjListNavigator` owns the generic Up/Down/Home/End/\n // Enter/Space/type-ahead contract. We read its `activeItem()` below to\n // anchor ArrowLeft / ArrowRight off the currently focused tree node\n // and to follow the active id with DOM focus (roving model).\n private readonly nav = inject(KjListNavigator);\n\n readonly kjSide = input<KjSide>('bottom');\n readonly kjAlign = input<KjAlign>('start');\n readonly kjOffset = input<number, unknown>(4, {\n transform: v => Number(v) || 4,\n });\n\n constructor() {\n const pos = inject(KJ_OVERLAY_POSITION_STRATEGY) as ReturnType<typeof anchoredTo>;\n pos.configure({ side: this.kjSide, align: this.kjAlign, offset: this.kjOffset, matchTriggerWidth: 'min' });\n\n // Roving focus follow: mirror the navigator's `activeId` to DOM\n // focus. Equivalent to `KjListNavigator`'s internal focus effect,\n // re-implemented here because the navigator's effect is gated on\n // `kjFocusMode() === 'roving'` and we can't statically push that\n // value into a hostDirective input signal.\n effect(() => {\n const item = this.nav.activeItem();\n if (!item) return;\n const host = item._host();\n if (host && document.activeElement !== host) host.focus();\n });\n }\n\n /** @internal */\n onDocClick(event: MouseEvent): void {\n const ctrl = this.controller;\n if (!ctrl?.isOpen()) return;\n const target = event.target as Node | null;\n if (!target) return;\n if (this.el.nativeElement.contains(target)) return;\n const trigger = ctrl.triggerEl();\n if (trigger && trigger.contains(target)) return;\n ctrl.close('outside');\n }\n\n /**\n * Tree-specific ArrowLeft / ArrowRight handling. Up/Down/Home/End/\n * Enter/Space/type-ahead all flow through the composed\n * `KjListNavigator` — they aren't reimplemented here.\n *\n * - ArrowRight on a collapsed branch → expand (toggle).\n * - ArrowRight on an expanded branch → move active to first child.\n * - ArrowLeft on an expanded branch → collapse (toggle).\n * - ArrowLeft elsewhere → move active to the parent (prior item with\n * `aria-level` less than current).\n *\n * @internal\n */\n onKeydown(event: KeyboardEvent): void {\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;\n const active = this.nav.activeItem();\n if (!active) return;\n const node = active._host();\n const items = this._domNodes();\n const idx = items.indexOf(node);\n if (idx === -1) return;\n const hasChildren = node.getAttribute('data-has-children') === 'true';\n const expanded = node.getAttribute('data-expanded') === 'true';\n\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n if (hasChildren && !expanded) {\n const toggle = node.querySelector('[kjTreeSelectToggle]') as HTMLElement | null;\n toggle?.click();\n } else if (hasChildren && expanded) {\n const next = items[idx + 1];\n if (next) this.nav.setActive(next.id);\n }\n return;\n }\n\n // ArrowLeft\n event.preventDefault();\n if (hasChildren && expanded) {\n const toggle = node.querySelector('[kjTreeSelectToggle]') as HTMLElement | null;\n toggle?.click();\n return;\n }\n const currentLevel = parseInt(node.getAttribute('aria-level') ?? '1', 10);\n for (let i = idx - 1; i >= 0; i--) {\n const lvl = parseInt(items[i]?.getAttribute('aria-level') ?? '1', 10);\n if (lvl < currentLevel) {\n this.nav.setActive(items[i].id);\n break;\n }\n }\n }\n\n /** DOM-order list of tree nodes scoped to this panel. */\n private _domNodes(): HTMLElement[] {\n return Array.from(\n this.el.nativeElement.querySelectorAll('[kjTreeSelectNode]'),\n ) as HTMLElement[];\n }\n}\n\n","import { InjectionToken, Signal } from '@angular/core';\nimport type { KjHourCycle, TimeParts } from './time-picker.format';\n\n/**\n * Shared state published by `[kjTimePicker]` (the wrapper) and consumed by\n * sibling segment / period directives.\n *\n * The wrapper owns the value, hour cycle, granularity and step config; each\n * segment is a thin spinbutton that reads and writes through this contract.\n */\nexport interface KjTimePickerContext {\n readonly value: Signal<TimeParts | null>;\n readonly hourCycle: Signal<KjHourCycle>;\n readonly showSeconds: Signal<boolean>;\n\n readonly hourStep: Signal<number>;\n readonly minuteStep: Signal<number>;\n readonly secondStep: Signal<number>;\n\n readonly min: Signal<TimeParts | null>;\n readonly max: Signal<TimeParts | null>;\n\n readonly disabled: Signal<boolean>;\n readonly readonly: Signal<boolean>;\n readonly invalid: Signal<boolean>;\n\n /** Apply `n` step units to a segment. Carries on overflow. */\n stepSegment(segment: 'hour' | 'minute' | 'second', units: number): void;\n /** Set a segment's value directly. Clamps + carries / wraps per config. */\n setSegment(segment: 'hour' | 'minute' | 'second', value: number): void;\n /** Toggle AM / PM (hour ± 12, mod 24). No-op when not in 12h mode. */\n togglePeriod(): void;\n /** Set the meridiem explicitly. No-op when not in 12h mode. */\n setMeridiem(period: 'am' | 'pm'): void;\n}\n\n/** DI token used to share the time-picker context with descendant directives. */\nexport const KJ_TIME_PICKER = new InjectionToken<KjTimePickerContext>('KjTimePicker');\n","/**\n * Internal time helpers for `[kjTimePicker]`.\n *\n * The component stores time-of-day as `TimeParts` and serialises to either\n * `Date` or `string` on the CVA boundary. All comparisons and arithmetic run\n * over `TimeParts`.\n */\n\n/** Internal time-of-day shape. Always 0-based hours (0–23). */\nexport interface TimeParts {\n hour: number; // 0–23\n minute: number; // 0–59\n second: number; // 0–59\n}\n\n/** Resolved hour cycle. `auto` is normalised away by the wrapper. */\nexport type KjHourCycle = 'h11' | 'h12' | 'h23' | 'h24';\n\n/** Zero-pad a non-negative integer to 2 digits. */\nexport function pad2(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n\n/** Resolve `'auto'` against a locale via `Intl.DateTimeFormat`. */\nexport function resolveHourCycle(\n cycle: KjHourCycle | 'auto',\n locale: string,\n): KjHourCycle {\n if (cycle !== 'auto') return cycle;\n try {\n const resolved = new Intl.DateTimeFormat(locale, { hour: 'numeric' })\n // hourCycle exists at runtime but is missing from TS lib types\n .resolvedOptions()['hourCycle' as keyof Intl.ResolvedDateTimeFormatOptions];\n if (resolved === 'h11' || resolved === 'h12' || resolved === 'h23' || resolved === 'h24') {\n return resolved;\n }\n } catch {\n /* fall through */\n }\n return 'h23';\n}\n\n/** Whether the cycle uses a 12-hour AM/PM presentation. */\nexport function is12Hour(cycle: KjHourCycle): boolean {\n return cycle === 'h11' || cycle === 'h12';\n}\n\n/** Convert internal 0–23 hour into the displayable hour for a cycle. */\nexport function toDisplayHour(hour24: number, cycle: KjHourCycle): number {\n switch (cycle) {\n case 'h11': return hour24 % 12; // 0–11\n case 'h12': return ((hour24 + 11) % 12) + 1; // 1–12\n case 'h24': return hour24 === 0 ? 24 : hour24; // 1–24\n case 'h23':\n default: return hour24; // 0–23\n }\n}\n\n/** Inverse of `toDisplayHour`, given the meridiem (`am`/`pm`) for h11/h12. */\nexport function fromDisplayHour(\n display: number,\n cycle: KjHourCycle,\n meridiem: 'am' | 'pm',\n): number {\n switch (cycle) {\n case 'h11': {\n const base = ((display % 12) + 12) % 12;\n return meridiem === 'pm' ? base + 12 : base;\n }\n case 'h12': {\n const base = ((display - 1 + 12) % 12);\n return meridiem === 'pm' ? base + 12 : base;\n }\n case 'h24':\n return display === 24 ? 0 : display;\n case 'h23':\n default:\n return display;\n }\n}\n\n/** Inclusive segment range for the cycle (display values). */\nexport function hourBounds(cycle: KjHourCycle): { min: number; max: number } {\n switch (cycle) {\n case 'h11': return { min: 0, max: 11 };\n case 'h12': return { min: 1, max: 12 };\n case 'h24': return { min: 1, max: 24 };\n case 'h23':\n default: return { min: 0, max: 23 };\n }\n}\n\n/** Modular add helper for an inclusive [0, mod) wrap. */\nexport function mod(n: number, m: number): number {\n return ((n % m) + m) % m;\n}\n\n/** Compare two `TimeParts` by total seconds-of-day. */\nexport function compareTime(a: TimeParts, b: TimeParts): number {\n const sa = a.hour * 3600 + a.minute * 60 + a.second;\n const sb = b.hour * 3600 + b.minute * 60 + b.second;\n return sa - sb;\n}\n\n/** Test whether `t` is inside [min, max], with overnight-range support. */\nexport function inRange(\n t: TimeParts,\n min: TimeParts | null,\n max: TimeParts | null,\n): boolean {\n if (min == null && max == null) return true;\n if (min == null) return compareTime(t, max!) <= 0;\n if (max == null) return compareTime(t, min) >= 0;\n if (compareTime(min, max) <= 0) {\n return compareTime(t, min) >= 0 && compareTime(t, max) <= 0;\n }\n // Overnight: outside [max, min].\n return compareTime(t, min) >= 0 || compareTime(t, max) <= 0;\n}\n\n/** Format `TimeParts` as `'HH:mm'` / `'HH:mm:ss'`. */\nexport function formatTimeString(t: TimeParts, withSeconds: boolean): string {\n const base = `${pad2(t.hour)}:${pad2(t.minute)}`;\n return withSeconds ? `${base}:${pad2(t.second)}` : base;\n}\n\n/** Parse `'HH:mm'` / `'HH:mm:ss'` (lenient: accepts missing seconds). */\nexport function parseTimeString(s: string): TimeParts | null {\n const m = /^(\\d{1,2}):(\\d{1,2})(?::(\\d{1,2}))?$/.exec(s.trim());\n if (!m) return null;\n const hour = Number(m[1]);\n const minute = Number(m[2]);\n const second = m[3] != null ? Number(m[3]) : 0;\n if (\n !Number.isFinite(hour) || hour < 0 || hour > 23 ||\n !Number.isFinite(minute) || minute < 0 || minute > 59 ||\n !Number.isFinite(second) || second < 0 || second > 59\n ) return null;\n return { hour, minute, second };\n}\n\n/** Convert any accepted value-shape into internal `TimeParts | null`. */\nexport function toParts(\n value: Date | string | TimeParts | null | undefined,\n): TimeParts | null {\n if (value == null) return null;\n if (value instanceof Date) {\n if (Number.isNaN(value.getTime())) return null;\n return {\n hour: value.getHours(),\n minute: value.getMinutes(),\n second: value.getSeconds(),\n };\n }\n if (typeof value === 'string') return parseTimeString(value);\n if (\n typeof value === 'object' &&\n typeof (value as TimeParts).hour === 'number' &&\n typeof (value as TimeParts).minute === 'number'\n ) {\n return {\n hour: (value as TimeParts).hour,\n minute: (value as TimeParts).minute,\n second: (value as TimeParts).second ?? 0,\n };\n }\n return null;\n}\n\n/** Project `TimeParts` onto a `Date`, copying the date part from `reference`. */\nexport function toDate(t: TimeParts, reference: Date): Date {\n const d = new Date(reference.getTime());\n d.setHours(t.hour, t.minute, t.second, 0);\n return d;\n}\n\n/** Snap a value to the closest lattice point of `step` from `0`. */\nexport function snapToStep(value: number, step: number): number {\n if (step <= 0) return value;\n return Math.round(value / step) * step;\n}\n","import {\n Directive,\n LOCALE_ID,\n Signal,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { KjDisabled, KjFormControl } from '../primitives';\nimport { KJ_TIME_PICKER, KjTimePickerContext } from './time-picker.context';\nimport {\n KjHourCycle,\n TimeParts,\n compareTime,\n formatTimeString,\n inRange,\n is12Hour,\n mod,\n resolveHourCycle,\n snapToStep,\n toDate,\n toParts,\n} from './time-picker.format';\n\n/**\n * Root directive for the time picker. Owns the time-of-day model, the resolved\n * hour cycle, segment bounds, the step config and the `KjFormControl` bridge.\n *\n * The directive renders no DOM of its own — it expects the consumer to project\n * a row of `[kjTimePickerHours]`, `[kjTimePickerMinutes]`, optional\n * `[kjTimePickerSeconds]`, and (when in 12h mode) `[kjTimePickerMeridiem]`\n * children. State flows through the `KJ_TIME_PICKER` context.\n *\n * @example\n * ```html\n * <div kjTimePicker [(kjValue)]=\"time\" [kjStep]=\"15\">\n * <input kjTimePickerHours />\n * <span aria-hidden=\"true\">:</span>\n * <input kjTimePickerMinutes />\n * <button kjTimePickerMeridiem></button>\n * </div>\n * ```\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name time-picker\n * @doc-description Unstyled time-picker root that holds the time-of-day model and shares state with segment inputs.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjTimePicker]',\n standalone: true,\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFormControl,\n ],\n providers: [{ provide: KJ_TIME_PICKER, useExisting: KjTimePicker }],\n exportAs: 'kjTimePicker',\n host: {\n 'role': 'group',\n '[attr.aria-disabled]': 'formCtrl.disabled() ? \"true\" : null',\n '[attr.aria-readonly]': 'kjReadonly() ? \"true\" : null',\n '[attr.aria-invalid]': 'ariaInvalid()',\n '[attr.data-hour-cycle]': 'hourCycle()',\n },\n})\nexport class KjTimePicker implements KjTimePickerContext {\n /** @internal */\n readonly formCtrl = inject(KjFormControl);\n private readonly localeId = inject(LOCALE_ID);\n\n /** Two-way bindable time value. Accepts `Date`, `'HH:mm[:ss]'`, or `null`. */\n readonly kjValue = model<Date | string | null>(null);\n\n /** Output value shape. `'date'` emits a `Date`; `'string'` emits `'HH:mm[:ss]'`. */\n readonly kjValueShape = input<'date' | 'string'>('date');\n\n /** When true, force 12-hour AM/PM mode regardless of locale. */\n readonly kj12Hour = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Explicit hour cycle; `'auto'` resolves from the locale (or `kj12Hour`). */\n readonly kjHourCycle = input<KjHourCycle | 'auto'>('auto');\n\n /** Show the seconds segment. */\n readonly kjShowSeconds = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Minute step (canonical); ArrowUp / ArrowDown on the minutes segment use it. */\n readonly kjStep = input<number, unknown>(1, { transform: numberAttribute });\n\n /** Per-segment step overrides. */\n readonly kjHourStep = input<number, unknown>(1, { transform: numberAttribute });\n readonly kjMinuteStep = input<number | undefined, unknown>(undefined, {\n transform: (v: unknown) => (v === undefined || v === null || v === '' ? undefined : numberAttribute(v)),\n });\n readonly kjSecondStep = input<number, unknown>(1, { transform: numberAttribute });\n\n /** Lower / upper time-of-day bounds. Accept `Date`, `'HH:mm[:ss]'`, or `null`. */\n readonly kjMin = input<Date | string | TimeParts | null>(null);\n readonly kjMax = input<Date | string | TimeParts | null>(null);\n\n /** Read-only state. */\n readonly kjReadonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** External invalid signal. OR'd with bounds for `aria-invalid`. */\n readonly kjInvalid = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** BCP-47 locale tag. Falls back to the injected `LOCALE_ID`. */\n readonly kjLocale = input<string | undefined>(undefined);\n\n /** Date used as the date part when emitting `Date` values. Defaults to `new Date()`. */\n readonly kjReferenceDate = input<Date | undefined>(undefined);\n\n // ── Internal state ────────────────────────────────────────────────────────\n\n private readonly _parts = signal<TimeParts | null>(null);\n /** Stable fallback reference Date when kjReferenceDate is undefined. */\n private readonly _refDate = new Date();\n\n /** @internal */\n readonly value: Signal<TimeParts | null> = this._parts.asReadonly();\n\n /** Resolved hour cycle (consumer-facing, via the context). */\n readonly hourCycle: Signal<KjHourCycle> = computed(() => {\n if (this.kj12Hour()) return 'h12';\n return resolveHourCycle(this.kjHourCycle(), this.kjLocale() ?? this.localeId);\n });\n\n readonly showSeconds: Signal<boolean> = computed(() => this.kjShowSeconds());\n\n readonly hourStep: Signal<number> = computed(() => Math.max(1, this.kjHourStep()));\n readonly minuteStep: Signal<number> = computed(() => Math.max(1, this.kjMinuteStep() ?? this.kjStep()));\n readonly secondStep: Signal<number> = computed(() => Math.max(1, this.kjSecondStep()));\n\n readonly min: Signal<TimeParts | null> = computed(() => toParts(this.kjMin()));\n readonly max: Signal<TimeParts | null> = computed(() => toParts(this.kjMax()));\n\n readonly disabled: Signal<boolean> = computed(() => this.formCtrl.disabled());\n readonly readonly: Signal<boolean> = computed(() => this.kjReadonly());\n readonly invalid: Signal<boolean> = computed(() => this.kjInvalid() || this.outOfRange());\n\n protected readonly outOfRange = computed(() => {\n const v = this._parts();\n if (v == null) return false;\n return !inRange(v, this.min(), this.max());\n });\n\n protected readonly ariaInvalid = computed(() => {\n const touched = this.formCtrl.touched();\n const invalid = this.kjInvalid() || this.outOfRange();\n return touched && invalid ? 'true' : null;\n });\n\n constructor() {\n // Bridge model ↔ internal parts.\n effect(() => {\n const next = toParts(this.kjValue());\n const cur = this._parts();\n if (!partsEqual(cur, next)) this._parts.set(next);\n });\n\n // Bridge KjFormControl ↔ model. Reactive forms write through `writeValue`.\n effect(() => {\n const cvaValue = this.formCtrl.value();\n if (cvaValue === undefined) return;\n const next = toParts(cvaValue as Date | string | null);\n if (!partsEqual(next, this._parts())) {\n this._parts.set(next);\n }\n });\n }\n\n // ── KjTimePickerContext implementation ────────────────────────────────────\n\n /** @internal */\n stepSegment(segment: 'hour' | 'minute' | 'second', units: number): void {\n if (this.formCtrl.disabled() || this.kjReadonly()) return;\n const cur = this._parts() ?? defaultParts();\n const step =\n segment === 'hour' ? this.hourStep() :\n segment === 'minute' ? this.minuteStep() :\n this.secondStep();\n let next: TimeParts;\n if (segment === 'hour') {\n next = { ...cur, hour: mod(cur.hour + units * step, 24) };\n } else if (segment === 'minute') {\n const total = cur.hour * 60 + cur.minute + units * step;\n const wrapped = mod(total, 24 * 60);\n next = { ...cur, hour: Math.floor(wrapped / 60), minute: wrapped % 60 };\n } else {\n const total = cur.hour * 3600 + cur.minute * 60 + cur.second + units * step;\n const wrapped = mod(total, 24 * 3600);\n next = {\n hour: Math.floor(wrapped / 3600),\n minute: Math.floor((wrapped % 3600) / 60),\n second: wrapped % 60,\n };\n }\n this.commit(next);\n }\n\n /** @internal */\n setSegment(segment: 'hour' | 'minute' | 'second', value: number): void {\n if (this.formCtrl.disabled() || this.kjReadonly()) return;\n const cur = this._parts() ?? defaultParts();\n const next: TimeParts = { ...cur };\n if (segment === 'hour') next.hour = clamp(value, 0, 23);\n else if (segment === 'minute') next.minute = clamp(value, 0, 59);\n else next.second = clamp(value, 0, 59);\n this.commit(next);\n }\n\n /** @internal */\n togglePeriod(): void {\n if (!is12Hour(this.hourCycle())) return;\n if (this.formCtrl.disabled() || this.kjReadonly()) return;\n const cur = this._parts() ?? defaultParts();\n this.commit({ ...cur, hour: mod(cur.hour + 12, 24) });\n }\n\n /** @internal */\n setMeridiem(period: 'am' | 'pm'): void {\n if (!is12Hour(this.hourCycle())) return;\n if (this.formCtrl.disabled() || this.kjReadonly()) return;\n const cur = this._parts() ?? defaultParts();\n const isPm = cur.hour >= 12;\n if ((period === 'pm' && isPm) || (period === 'am' && !isPm)) return;\n this.commit({ ...cur, hour: mod(cur.hour + 12, 24) });\n }\n\n // ── Internals ─────────────────────────────────────────────────────────────\n\n private commit(next: TimeParts): void {\n // Optionally snap step on commit. We only snap minutes / seconds when the\n // canonical step is > 1, mirroring PrimeNG's `stepMinute` clamping.\n let snapped = next;\n if (this.minuteStep() > 1) {\n snapped = { ...snapped, minute: clamp(snapToStep(snapped.minute, this.minuteStep()), 0, 59) };\n }\n if (this.secondStep() > 1) {\n snapped = { ...snapped, second: clamp(snapToStep(snapped.second, this.secondStep()), 0, 59) };\n }\n if (partsEqual(snapped, this._parts())) return;\n this._parts.set(snapped);\n const out = this.serialise(snapped);\n this.kjValue.set(out as Date | string | null);\n this.formCtrl.notifyChange(out);\n }\n\n private serialise(t: TimeParts): Date | string | null {\n if (this.kjValueShape() === 'string') {\n return formatTimeString(t, this.showSeconds());\n }\n return toDate(t, this.kjReferenceDate() ?? this._refDate);\n }\n}\n\nfunction partsEqual(a: TimeParts | null, b: TimeParts | null): boolean {\n if (a === b) return true;\n if (a == null || b == null) return false;\n return compareTime(a, b) === 0;\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, n));\n}\n\nfunction defaultParts(): TimeParts {\n return { hour: 0, minute: 0, second: 0 };\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n PLATFORM_ID,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KJ_TIME_PICKER, KjTimePickerContext } from './time-picker.context';\nimport {\n KjHourCycle,\n fromDisplayHour,\n hourBounds,\n is12Hour,\n pad2,\n toDisplayHour,\n} from './time-picker.format';\n\ntype SegmentKind = 'hour' | 'minute' | 'second';\n\n/**\n * Internal helper that wires a single time-segment `<input>` to the time-picker\n * context. Concrete segments (`hours`, `minutes`, `seconds`) each set their\n * `kind` and consume this base via composition through the directive class\n * hierarchy.\n *\n * Each segment exposes the WAI-ARIA `spinbutton` contract\n * (<https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/>) on its host:\n * `aria-valuemin` / `aria-valuemax` / `aria-valuenow` / `aria-valuetext`.\n * @doc\n * @doc-name time-picker\n */\n@Directive({ standalone: true })\nexport abstract class KjTimePickerSegmentBase {\n protected abstract readonly kind: SegmentKind;\n protected readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly doc = inject(DOCUMENT);\n /** @internal */\n readonly ctx = inject<KjTimePickerContext>(KJ_TIME_PICKER);\n\n /** Forwarded to `[attr.aria-label]`. Defaults to a sensible English label. */\n readonly kjAriaLabel = input<string | null>(null);\n\n /** Disable typing. Stepping still works via Arrow keys when the directive is focused. */\n readonly kjReadonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Display value (zero-padded 2-digit string for the segment). */\n readonly displayValue = computed(() => {\n const parts = this.ctx.value();\n if (parts == null) return '';\n if (this.kind === 'minute') return pad2(parts.minute);\n if (this.kind === 'second') return pad2(parts.second);\n return pad2(toDisplayHour(parts.hour, this.ctx.hourCycle()));\n });\n\n /** `aria-valuemin` / `aria-valuemax` for the segment. */\n readonly minBound = computed(() => {\n if (this.kind === 'minute' || this.kind === 'second') return 0;\n return hourBounds(this.ctx.hourCycle()).min;\n });\n readonly maxBound = computed(() => {\n if (this.kind === 'minute' || this.kind === 'second') return 59;\n return hourBounds(this.ctx.hourCycle()).max;\n });\n\n /** Current numeric value (display, in the segment's coordinate space). */\n readonly numericValue = computed(() => {\n const parts = this.ctx.value();\n if (parts == null) return null;\n if (this.kind === 'minute') return parts.minute;\n if (this.kind === 'second') return parts.second;\n return toDisplayHour(parts.hour, this.ctx.hourCycle());\n });\n\n readonly ariaValueText = computed(() => {\n const v = this.numericValue();\n if (v == null) return null;\n return pad2(v);\n });\n\n readonly resolvedAriaLabel = computed(() => {\n if (this.kjAriaLabel() != null) return this.kjAriaLabel();\n if (this.kind === 'hour') return 'Hours';\n if (this.kind === 'minute') return 'Minutes';\n return 'Seconds';\n });\n\n readonly disabled = computed(() => this.ctx.disabled());\n readonly effectiveReadonly = computed(() => this.kjReadonly() || this.ctx.readonly());\n\n constructor() {\n // Reflect numeric model to the input's text content.\n effect(() => {\n if (!isPlatformBrowser(this.platformId)) return;\n const next = this.displayValue();\n const el = this.el.nativeElement;\n if (el && this.doc.activeElement !== el && el.value !== next) {\n el.value = next;\n }\n });\n }\n\n /** @internal */\n onFocus(): void {\n const el = this.el.nativeElement;\n if (el) el.select?.();\n }\n\n /** @internal */\n onBlur(): void {\n this.commitFromBuffer();\n }\n\n /** @internal */\n onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n // Strip non-digits.\n const filtered = el.value.replace(/\\D+/g, '').slice(0, 2);\n if (filtered !== el.value) el.value = filtered;\n }\n\n /** @internal */\n onKeydown(event: KeyboardEvent): void {\n if (this.ctx.disabled()) return;\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.ctx.stepSegment(this.kind, 1);\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.ctx.stepSegment(this.kind, -1);\n break;\n case 'Home': {\n event.preventDefault();\n const min = this.minBound();\n const cycle = this.ctx.hourCycle();\n if (this.kind === 'hour') {\n const meridiem: 'am' | 'pm' = (this.ctx.value()?.hour ?? 0) >= 12 ? 'pm' : 'am';\n this.ctx.setSegment('hour', is12Hour(cycle) ? fromDisplayHour(min, cycle, meridiem) : min);\n } else {\n this.ctx.setSegment(this.kind, min);\n }\n break;\n }\n case 'End': {\n event.preventDefault();\n const max = this.maxBound();\n const cycle = this.ctx.hourCycle();\n if (this.kind === 'hour') {\n const meridiem: 'am' | 'pm' = (this.ctx.value()?.hour ?? 0) >= 12 ? 'pm' : 'am';\n this.ctx.setSegment('hour', is12Hour(cycle) ? fromDisplayHour(max, cycle, meridiem) : max);\n } else {\n this.ctx.setSegment(this.kind, max);\n }\n break;\n }\n case 'Enter':\n event.preventDefault();\n this.commitFromBuffer();\n break;\n }\n }\n\n protected commitFromBuffer(): void {\n if (this.effectiveReadonly() || this.ctx.disabled()) return;\n const el = this.el.nativeElement;\n if (!el) return;\n const raw = el.value.trim();\n if (raw === '') {\n // Restore display from current model.\n el.value = this.displayValue();\n return;\n }\n const n = Number(raw);\n if (!Number.isFinite(n)) {\n el.value = this.displayValue();\n return;\n }\n if (this.kind === 'minute' || this.kind === 'second') {\n this.ctx.setSegment(this.kind, n);\n } else {\n const cycle = this.ctx.hourCycle();\n if (is12Hour(cycle)) {\n const meridiem: 'am' | 'pm' = (this.ctx.value()?.hour ?? 0) >= 12 ? 'pm' : 'am';\n const hour24 = fromDisplayHour(n, cycle, meridiem);\n this.ctx.setSegment('hour', hour24);\n } else {\n this.ctx.setSegment('hour', cycle === 'h24' && n === 24 ? 0 : n);\n }\n }\n }\n}\n\n/**\n * Hours segment. `role=\"spinbutton\"` over a 2-digit hour value. Min/max depend\n * on the resolved hour cycle (`h11`: 0–11, `h12`: 1–12, `h23`: 0–23,\n * `h24`: 1–24).\n *\n * @example\n * ```html\n * <input kjTimePickerHours />\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name time-picker\n */\n@Directive({\n selector: '[kjTimePickerHours]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n '[attr.role]': '\"spinbutton\"',\n '[attr.inputmode]': '\"numeric\"',\n '[attr.aria-valuemin]': 'minBound()',\n '[attr.aria-valuemax]': 'maxBound()',\n '[attr.aria-valuenow]': 'numericValue() ?? null',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.aria-readonly]': 'effectiveReadonly() ? \"true\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.disabled]': 'disabled() ? \"\" : null',\n '[attr.readonly]': 'effectiveReadonly() ? \"\" : null',\n '[attr.maxlength]': '2',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(input)': 'onInput($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjTimePickerHours extends KjTimePickerSegmentBase {\n protected readonly kind = 'hour' as const;\n}\n\n/**\n * Minutes segment. `role=\"spinbutton\"`, range 0–59. ArrowUp / ArrowDown step\n * by `kjStep` minutes (defaults to `1`).\n *\n * @example\n * ```html\n * <input kjTimePickerMinutes />\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name time-picker\n */\n@Directive({\n selector: '[kjTimePickerMinutes]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n '[attr.role]': '\"spinbutton\"',\n '[attr.inputmode]': '\"numeric\"',\n '[attr.aria-valuemin]': 'minBound()',\n '[attr.aria-valuemax]': 'maxBound()',\n '[attr.aria-valuenow]': 'numericValue() ?? null',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.aria-readonly]': 'effectiveReadonly() ? \"true\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.disabled]': 'disabled() ? \"\" : null',\n '[attr.readonly]': 'effectiveReadonly() ? \"\" : null',\n '[attr.maxlength]': '2',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(input)': 'onInput($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjTimePickerMinutes extends KjTimePickerSegmentBase {\n protected readonly kind = 'minute' as const;\n}\n\n/**\n * Seconds segment (optional). `role=\"spinbutton\"`, range 0–59.\n *\n * @example\n * ```html\n * <input kjTimePickerSeconds />\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name time-picker\n */\n@Directive({\n selector: '[kjTimePickerSeconds]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n '[attr.role]': '\"spinbutton\"',\n '[attr.inputmode]': '\"numeric\"',\n '[attr.aria-valuemin]': 'minBound()',\n '[attr.aria-valuemax]': 'maxBound()',\n '[attr.aria-valuenow]': 'numericValue() ?? null',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.aria-readonly]': 'effectiveReadonly() ? \"true\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.disabled]': 'disabled() ? \"\" : null',\n '[attr.readonly]': 'effectiveReadonly() ? \"\" : null',\n '[attr.maxlength]': '2',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(input)': 'onInput($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjTimePickerSeconds extends KjTimePickerSegmentBase {\n protected readonly kind = 'second' as const;\n}\n\n/** Re-exported for the period directive's use. */\nexport type { KjHourCycle };\n","import {\n Directive,\n LOCALE_ID,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KJ_TIME_PICKER, KjTimePickerContext } from './time-picker.context';\nimport { is12Hour } from './time-picker.format';\n\n/**\n * AM/PM toggle directive. Only meaningful when the resolved hour cycle is\n * `h11` or `h12`. Reflects `role=\"button\"` + `aria-pressed` and toggles on\n * Enter / Space / ArrowUp / ArrowDown.\n *\n * Per the WAI-ARIA APG **Toggle Button** pattern\n * (<https://www.w3.org/WAI/ARIA/apg/patterns/button/>) the directive uses\n * `aria-pressed=\"true\"` for PM and `aria-pressed=\"false\"` for AM.\n *\n * @example\n * ```html\n * <button type=\"button\" kjTimePickerMeridiem></button>\n * ```\n * @doc-category Core/Inputs\n * @doc\n * @doc-name time-picker\n */\n@Directive({\n selector: '[kjTimePickerMeridiem]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n '[attr.type]': '\"button\"',\n '[attr.role]': '\"button\"',\n '[attr.aria-pressed]': 'isPm() ? \"true\" : \"false\"',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-meridiem]': 'isPm() ? \"pm\" : \"am\"',\n '[attr.disabled]': 'disabled() ? \"\" : null',\n '[attr.hidden]': 'is12() ? null : \"\"',\n '[textContent]': 'label()',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjTimePickerMeridiem {\n private readonly ctx = inject<KjTimePickerContext>(KJ_TIME_PICKER);\n private readonly localeId = inject(LOCALE_ID);\n\n /** Override the AM label. Defaults to a locale-derived string. */\n readonly kjAmLabel = input<string | null>(null);\n /** Override the PM label. Defaults to a locale-derived string. */\n readonly kjPmLabel = input<string | null>(null);\n /** Override the accessible label. */\n readonly kjAriaLabel = input<string | null>(null);\n /** Disable the toggle independently of the wrapper. */\n readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** @internal */\n readonly isPm = computed(() => (this.ctx.value()?.hour ?? 0) >= 12);\n /** @internal */\n readonly is12 = computed(() => is12Hour(this.ctx.hourCycle()));\n\n /** @internal */\n readonly disabled = computed(() => this.kjDisabled() || this.ctx.disabled() || this.ctx.readonly());\n\n /** @internal */\n readonly label = computed(() => {\n if (!this.is12()) return '';\n const am = this.kjAmLabel() ?? localeMeridiem(this.localeId, false);\n const pm = this.kjPmLabel() ?? localeMeridiem(this.localeId, true);\n return this.isPm() ? pm : am;\n });\n\n /** @internal */\n readonly resolvedAriaLabel = computed(() => this.kjAriaLabel() ?? 'Toggle AM/PM');\n\n /** @internal */\n onClick(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n return;\n }\n this.ctx.togglePeriod();\n }\n\n /** @internal */\n onKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'Spacebar':\n event.preventDefault();\n this.ctx.togglePeriod();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.ctx.setMeridiem('pm');\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.ctx.setMeridiem('am');\n break;\n }\n }\n}\n\nfunction localeMeridiem(locale: string, pm: boolean): string {\n try {\n const parts = new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n hour12: true,\n }).formatToParts(new Date(2000, 0, 1, pm ? 13 : 9, 0, 0));\n const dp = parts.find((p) => p.type === 'dayPeriod');\n if (dp && dp.value) return dp.value;\n } catch {\n /* ignore */\n }\n return pm ? 'PM' : 'AM';\n}\n","import { InjectionToken, Signal } from '@angular/core';\nimport type { KjHsl, KjHsv, KjRgb } from './color-picker.utils';\n\n/** Output formats supported by `KjColorPicker`. */\nexport type KjColorFormat = 'hex' | 'rgb' | 'hsl';\n\n/**\n * Public emitted value for `KjColorPicker`.\n * Concrete shape depends on the active `kjFormat`:\n * - `'hex'` → `string` (`'#rrggbb'` or `'#rrggbbaa'` when alpha is on).\n * - `'rgb'` → `[r, g, b]` or `[r, g, b, a]` when alpha is on.\n * - `'hsl'` → `{ h, s, l }` or `{ h, s, l, a }` when alpha is on.\n */\nexport type KjColorValue =\n | string\n | readonly [number, number, number]\n | readonly [number, number, number, number]\n | { h: number; s: number; l: number }\n | { h: number; s: number; l: number; a: number };\n\n/** A single preset swatch in the color picker's palette grid. */\nexport interface KjColorPreset {\n /** Any parseable hex color string. */\n readonly value: string;\n /** Optional accessible name announced to AT in place of the raw hex. */\n readonly label?: string;\n}\n\n/**\n * Shared state container exposed to every `KjColorPicker` sub-directive\n * via the `KJ_COLOR_PICKER` token. The root directive is the sole writer;\n * sub-directives read derived signals and call mutator methods.\n */\nexport interface KjColorPickerContext {\n // Canonical state\n readonly hue: Signal<number>;\n readonly saturation: Signal<number>;\n readonly value: Signal<number>;\n readonly alpha: Signal<number>;\n\n // Derived projections\n readonly hex: Signal<string>;\n readonly rgb: Signal<KjRgb>;\n readonly hsv: Signal<KjHsv>;\n readonly hsl: Signal<KjHsl>;\n\n // Mutators\n setHue(h: number): void;\n setSaturationValue(s: number, v: number): void;\n setAlpha(a: number): void;\n setHex(hex: string): boolean;\n setRgb(r: number, g: number, b: number, a?: number): void;\n\n // UI state\n readonly open: Signal<boolean>;\n readonly disabled: Signal<boolean>;\n readonly format: Signal<KjColorFormat>;\n readonly showAlpha: Signal<boolean>;\n readonly presets: Signal<readonly KjColorPreset[]>;\n setOpen(open: boolean): void;\n\n // Wiring ids\n readonly panelId: Signal<string>;\n readonly triggerId: Signal<string>;\n}\n\n/**\n * DI token consumed by every `KjColorPicker*` sub-directive. Provided by\n * the root `KjColorPicker` directive — sub-directives outside that\n * context throw at injection time in dev.\n */\nexport const KJ_COLOR_PICKER = new InjectionToken<KjColorPickerContext>(\n 'KjColorPicker',\n);\n","/**\n * Color-model conversion helpers used by `KjColorPicker`.\n *\n * The picker keeps its canonical state in HSV+alpha — every other\n * representation is derived from these via the helpers in this module.\n *\n * @internal\n */\n\n/** Clamp `n` into the inclusive `[lo, hi]` range. */\nexport function kjClamp(n: number, lo: number, hi: number): number {\n return n < lo ? lo : n > hi ? hi : n;\n}\n\n/** Round to `digits` decimal places without floating-point ugliness. */\nexport function kjRound(n: number, digits = 0): number {\n const f = Math.pow(10, digits);\n return Math.round(n * f) / f;\n}\n\n/** Pad a non-negative integer to two lowercase hex digits. */\nfunction toHex2(n: number): string {\n const v = kjClamp(Math.round(n), 0, 255);\n return v.toString(16).padStart(2, '0');\n}\n\nexport interface KjRgb {\n r: number; // 0..255\n g: number; // 0..255\n b: number; // 0..255\n a: number; // 0..1\n}\n\nexport interface KjHsv {\n h: number; // 0..360\n s: number; // 0..1\n v: number; // 0..1\n a: number; // 0..1\n}\n\nexport interface KjHsl {\n h: number; // 0..360\n s: number; // 0..1\n l: number; // 0..1\n a: number; // 0..1\n}\n\n/**\n * Convert HSV (with alpha) to RGB. Algorithm follows the standard\n * formulation from Smith 1978 / W3C CSS Color spec.\n */\nexport function kjHsvToRgb(hsv: KjHsv): KjRgb {\n const h = ((hsv.h % 360) + 360) % 360;\n const s = kjClamp(hsv.s, 0, 1);\n const v = kjClamp(hsv.v, 0, 1);\n const c = v * s;\n const hp = h / 60;\n const x = c * (1 - Math.abs((hp % 2) - 1));\n let r = 0, g = 0, b = 0;\n if (hp < 1) { r = c; g = x; }\n else if (hp < 2) { r = x; g = c; }\n else if (hp < 3) { g = c; b = x; }\n else if (hp < 4) { g = x; b = c; }\n else if (hp < 5) { r = x; b = c; }\n else { r = c; b = x; }\n const m = v - c;\n return {\n r: kjRound((r + m) * 255),\n g: kjRound((g + m) * 255),\n b: kjRound((b + m) * 255),\n a: kjClamp(hsv.a, 0, 1),\n };\n}\n\n/** Convert RGB (0..255) to HSV. */\nexport function kjRgbToHsv(rgb: KjRgb): KjHsv {\n const r = kjClamp(rgb.r, 0, 255) / 255;\n const g = kjClamp(rgb.g, 0, 255) / 255;\n const b = kjClamp(rgb.b, 0, 255) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n let h = 0;\n if (d !== 0) {\n if (max === r) h = ((g - b) / d) % 6;\n else if (max === g) h = (b - r) / d + 2;\n else h = (r - g) / d + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n const s = max === 0 ? 0 : d / max;\n const v = max;\n return { h, s, v, a: kjClamp(rgb.a, 0, 1) };\n}\n\n/** Convert HSV to HSL. */\nexport function kjHsvToHsl(hsv: KjHsv): KjHsl {\n const v = kjClamp(hsv.v, 0, 1);\n const s = kjClamp(hsv.s, 0, 1);\n const l = v * (1 - s / 2);\n const sl = (l === 0 || l === 1) ? 0 : (v - l) / Math.min(l, 1 - l);\n return { h: ((hsv.h % 360) + 360) % 360, s: sl, l, a: kjClamp(hsv.a, 0, 1) };\n}\n\n/** Format an RGB triple plus alpha as a `#rrggbb` or `#rrggbbaa` string. */\nexport function kjRgbToHex(rgb: KjRgb, includeAlpha: boolean): string {\n const base = '#' + toHex2(rgb.r) + toHex2(rgb.g) + toHex2(rgb.b);\n if (!includeAlpha) return base;\n return base + toHex2(rgb.a * 255);\n}\n\n/**\n * Parse a hex color string. Accepts `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`\n * with or without the leading `#`. Returns `null` on invalid input.\n */\nexport function kjParseHex(input: string): KjRgb | null {\n if (typeof input !== 'string') return null;\n let s = input.trim().toLowerCase();\n if (s.startsWith('#')) s = s.slice(1);\n if (!/^[0-9a-f]+$/.test(s)) return null;\n\n let r: string, g: string, b: string, a = 'ff';\n if (s.length === 3) {\n r = s[0] + s[0]; g = s[1] + s[1]; b = s[2] + s[2];\n } else if (s.length === 4) {\n r = s[0] + s[0]; g = s[1] + s[1]; b = s[2] + s[2]; a = s[3] + s[3];\n } else if (s.length === 6) {\n r = s.slice(0, 2); g = s.slice(2, 4); b = s.slice(4, 6);\n } else if (s.length === 8) {\n r = s.slice(0, 2); g = s.slice(2, 4); b = s.slice(4, 6); a = s.slice(6, 8);\n } else {\n return null;\n }\n return {\n r: parseInt(r, 16),\n g: parseInt(g, 16),\n b: parseInt(b, 16),\n a: parseInt(a, 16) / 255,\n };\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n} from '../primitives/overlay/tokens';\nimport type { KjSide, KjAlign } from '../primitives/overlay/types';\nimport { onClick } from '../primitives/overlay/strategies/trigger-event/on-click';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\nimport {\n KJ_COLOR_PICKER,\n type KjColorFormat,\n type KjColorPickerContext,\n type KjColorPreset,\n type KjColorValue,\n} from './color-picker.context';\nimport {\n kjClamp,\n kjHsvToHsl,\n kjHsvToRgb,\n kjParseHex,\n kjRgbToHex,\n kjRgbToHsv,\n kjRound,\n type KjHsv,\n} from './color-picker.utils';\n\nlet _kjColorPickerIdCounter = 0;\n\n/**\n * Root color-picker state container.\n *\n * Owns the canonical HSV+alpha state and Angular forms integration through\n * composed `KjFormControl`. Provides `KJ_COLOR_PICKER` so every sub-directive\n * (`KjColorPickerTrigger`, `KjColorPickerPanel`, `KjColorPickerArea`,\n * `KjColorPickerHueSlider`, `KjColorPickerAlphaSlider`,\n * `KjColorPickerInput`) reads the same derived signals and writes through\n * the same mutators. The open / closed UI flag and panel positioning are\n * delegated to the overlay primitives — the controller, the click trigger\n * strategy, the body-portal mount, and the anchored-to position strategy\n * are all provided here so the trigger and panel sub-directives share the\n * same overlay scope.\n *\n * ```html\n * <div kjColorPicker [(ngModel)]=\"brand\" kjFormat=\"hex\" kjShowAlpha>\n * <button kjColorPickerTrigger></button>\n * <div kjColorPickerPanel>\n * <div kjColorPickerArea></div>\n * <input kjColorPickerHueSlider />\n * <input kjColorPickerAlphaSlider />\n * <input kjColorPickerInput />\n * </div>\n * </div>\n * ```\n *\n * @doc\n * @doc-example Default\n * @doc-file color-picker.example.ts\n * @doc-category Core/Inputs\n * @doc-name color-picker\n * @doc-description Unstyled color-picker root that owns HSV+alpha state and emits hex, RGB, or HSL values.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjColorPicker]',\n standalone: true,\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n KjFormControl,\n ],\n providers: [\n { provide: KJ_COLOR_PICKER, useExisting: KjColorPicker },\n KjOverlayController,\n { provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY, useFactory: () => onClick() },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'dialog' as const },\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => bodyPortal() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => anchoredTo() },\n ],\n exportAs: 'kjColorPicker',\n})\nexport class KjColorPicker implements KjColorPickerContext {\n /** @internal */\n readonly formCtrl = inject(KjFormControl);\n private readonly disabledPrim = inject(KjDisabled);\n /** @internal */\n readonly overlay = inject(KjOverlayController);\n\n /** Output format. Determines the shape emitted via `ngModelChange` / `kjCommit`. */\n readonly kjFormat = input<KjColorFormat>('hex');\n\n /** When true, the alpha slider is mounted and hex emit flips to 8 chars when α<1. */\n readonly kjShowAlpha = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** When true and `kjShowAlpha=true`, hex always emits 8 chars (stable shape). */\n readonly kjAlwaysEmitAlpha = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Preset swatches; an empty array hides the preset row. */\n readonly kjPresets = input<readonly KjColorPreset[]>([]);\n\n /** Touched-gated invalid posture; mirrors `KjInput`. */\n readonly kjInvalid = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Override the default \"Color picker\" name on the trigger. */\n readonly kjAriaLabel = input<string | undefined>(undefined);\n\n /** Side the popup panel is anchored to relative to its trigger. */\n readonly kjSide = input<KjSide>('bottom');\n\n /** Alignment of the popup panel along its anchored side. */\n readonly kjAlign = input<KjAlign>('start');\n\n /** Fires whenever the panel transitions between open and closed. */\n readonly kjOpenChange = output<boolean>();\n\n /** Fires when the user commits a color (panel close, hex enter, preset click). */\n readonly kjCommit = output<KjColorValue>();\n\n // ── canonical state ────────────────────────────────────────────────\n private readonly _hue = signal(0);\n private readonly _saturation = signal(0);\n private readonly _value = signal(0);\n private readonly _alpha = signal(1);\n\n readonly hue = this._hue.asReadonly();\n readonly saturation = this._saturation.asReadonly();\n readonly value = this._value.asReadonly();\n readonly alpha = this._alpha.asReadonly();\n /** Bridged to the overlay controller's open state. */\n readonly open = this.overlay.isOpen;\n\n readonly disabled = this.disabledPrim.disabled;\n readonly format = computed(() => this.kjFormat());\n readonly showAlpha = computed(() => this.kjShowAlpha());\n readonly presets = computed(() => this.kjPresets());\n\n // Stable wiring ids used by the input / area / labels — the overlay\n // primitives mint their own ids on the trigger and panel hosts.\n private readonly _id = ++_kjColorPickerIdCounter;\n readonly panelId = signal(`kj-color-picker-panel-${this._id}`).asReadonly();\n readonly triggerId = signal(`kj-color-picker-trigger-${this._id}`).asReadonly();\n\n // ── derived projections ────────────────────────────────────────────\n readonly rgb = computed(() => kjHsvToRgb({\n h: this._hue(), s: this._saturation(), v: this._value(), a: this._alpha(),\n }));\n readonly hsv = computed<KjHsv>(() => ({\n h: this._hue(), s: this._saturation(), v: this._value(), a: this._alpha(),\n }));\n readonly hsl = computed(() => kjHsvToHsl(this.hsv()));\n readonly hex = computed(() => {\n const includeAlpha = this.kjShowAlpha()\n && (this.kjAlwaysEmitAlpha() || this._alpha() < 1);\n return kjRgbToHex(this.rgb(), includeAlpha);\n });\n\n /** The current value projected through the active `kjFormat`. */\n readonly currentValue = computed<KjColorValue>(() => projectValue(\n this.kjFormat(),\n this.hex(),\n this.rgb(),\n this.hsl(),\n this.kjShowAlpha(),\n ));\n\n // ── form integration ───────────────────────────────────────────────\n // Track the last value we *emitted* so writeValue → state → emit doesn't\n // loop. We compare against the currentValue projection.\n private _suppressEmit = false;\n // The state-projection effect runs once on subscription with the picker's\n // DEFAULT HSV state (which projects to `#000000`). That used to fire\n // `notifyChange` BEFORE the form's initial `writeValue(...)` reached us,\n // so a `[ngModel]`-bound consumer received `#000000` ahead of its real\n // value — corrupting the bound state. Swallow the bootstrap pass so\n // emissions only flow after either an external write or a real user\n // interaction.\n private _initialEmitConsumed = false;\n\n constructor() {\n const pos = inject(KJ_OVERLAY_POSITION_STRATEGY) as ReturnType<typeof anchoredTo>;\n pos.configure({ side: this.kjSide, align: this.kjAlign });\n // External writes (writeValue / setValue) parse into HSV state.\n effect(() => {\n const incoming = this.formCtrl.value();\n if (incoming === undefined || incoming === null || incoming === '') return;\n this._suppressEmit = true;\n try {\n this.applyExternal(incoming);\n } finally {\n this._suppressEmit = false;\n }\n });\n\n // Internal state changes propagate to the form layer.\n effect(() => {\n const next = this.currentValue();\n if (this._suppressEmit) return;\n if (!this._initialEmitConsumed) {\n this._initialEmitConsumed = true;\n return;\n }\n const current = this.formCtrl.value();\n // Avoid spamming when the value is structurally unchanged.\n if (sameValue(current, next)) return;\n this.formCtrl.notifyChange(next);\n });\n\n // Bridge overlay open/close transitions to the consumer-facing\n // outputs. Only emit when the state genuinely flips (the controller\n // exposes both open/opening and closed/closing — collapse to a\n // boolean and dedupe).\n let lastOpen = this.overlay.isOpen();\n effect(() => {\n const isOpen = this.overlay.isOpen();\n if (isOpen === lastOpen) return;\n lastOpen = isOpen;\n this.kjOpenChange.emit(isOpen);\n if (!isOpen) this.kjCommit.emit(this.currentValue());\n });\n }\n\n // ── mutators ───────────────────────────────────────────────────────\n setHue(h: number): void {\n if (this.disabled()) return;\n this._hue.set(((h % 360) + 360) % 360);\n }\n\n setSaturationValue(s: number, v: number): void {\n if (this.disabled()) return;\n this._saturation.set(kjClamp(s, 0, 1));\n this._value.set(kjClamp(v, 0, 1));\n }\n\n setAlpha(a: number): void {\n if (this.disabled()) return;\n if (!this.kjShowAlpha()) return;\n this._alpha.set(kjClamp(a, 0, 1));\n }\n\n setHex(hex: string): boolean {\n if (this.disabled()) return false;\n const rgb = kjParseHex(hex);\n if (!rgb) return false;\n const hsv = kjRgbToHsv(rgb);\n this._hue.set(hsv.h);\n this._saturation.set(hsv.s);\n this._value.set(hsv.v);\n if (this.kjShowAlpha()) this._alpha.set(rgb.a);\n return true;\n }\n\n setRgb(r: number, g: number, b: number, a?: number): void {\n if (this.disabled()) return;\n const rgb = {\n r: kjClamp(r, 0, 255),\n g: kjClamp(g, 0, 255),\n b: kjClamp(b, 0, 255),\n a: a === undefined ? this._alpha() : kjClamp(a, 0, 1),\n };\n const hsv = kjRgbToHsv(rgb);\n this._hue.set(hsv.h);\n this._saturation.set(hsv.s);\n this._value.set(hsv.v);\n if (this.kjShowAlpha() && a !== undefined) this._alpha.set(rgb.a);\n }\n\n setOpen(open: boolean): void {\n if (this.disabled() && open) return;\n if (this.overlay.isOpen() === open) return;\n if (open) this.overlay.open();\n else this.overlay.close('programmatic');\n }\n\n toggle(): void {\n this.setOpen(!this.overlay.isOpen());\n }\n\n /** @internal */\n private applyExternal(v: unknown): void {\n if (typeof v === 'string') {\n this.setHex(v);\n return;\n }\n if (Array.isArray(v) && v.length >= 3) {\n const [r, g, b, a] = v as number[];\n this.setRgb(r, g, b, a);\n return;\n }\n if (v && typeof v === 'object') {\n const o = v as Record<string, number>;\n if ('h' in o && 's' in o && 'l' in o) {\n // Convert HSL → HSV by way of RGB so alpha and round-tripping\n // are consistent with the rest of the pipeline.\n const hslToRgb = hslToRgbValue(o['h'], o['s'], o['l']);\n this.setRgb(hslToRgb.r, hslToRgb.g, hslToRgb.b, 'a' in o ? o['a'] : undefined);\n } else if ('r' in o && 'g' in o && 'b' in o) {\n this.setRgb(o['r'], o['g'], o['b'], 'a' in o ? o['a'] : undefined);\n }\n }\n }\n}\n\nfunction projectValue(\n fmt: KjColorFormat,\n hex: string,\n rgb: { r: number; g: number; b: number; a: number },\n hsl: { h: number; s: number; l: number; a: number },\n showAlpha: boolean,\n): KjColorValue {\n if (fmt === 'hex') return hex;\n if (fmt === 'rgb') {\n return showAlpha\n ? [rgb.r, rgb.g, rgb.b, kjRound(rgb.a, 2)] as const\n : [rgb.r, rgb.g, rgb.b] as const;\n }\n return showAlpha\n ? { h: kjRound(hsl.h, 1), s: kjRound(hsl.s, 3), l: kjRound(hsl.l, 3), a: kjRound(hsl.a, 2) }\n : { h: kjRound(hsl.h, 1), s: kjRound(hsl.s, 3), l: kjRound(hsl.l, 3) };\n}\n\nfunction sameValue(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a === 'string' || typeof b === 'string') return a === b;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n }\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n const ka = Object.keys(a as object);\n const kb = Object.keys(b as object);\n if (ka.length !== kb.length) return false;\n for (const k of ka) {\n if ((a as Record<string, unknown>)[k] !== (b as Record<string, unknown>)[k]) return false;\n }\n return true;\n }\n return false;\n}\n\nfunction hslToRgbValue(h: number, s: number, l: number): { r: number; g: number; b: number } {\n // Standard HSL → RGB; matches CSS Color spec.\n const C = (1 - Math.abs(2 * l - 1)) * s;\n const hp = (((h % 360) + 360) % 360) / 60;\n const X = C * (1 - Math.abs((hp % 2) - 1));\n let r = 0, g = 0, b = 0;\n if (hp < 1) { r = C; g = X; }\n else if (hp < 2) { r = X; g = C; }\n else if (hp < 3) { g = C; b = X; }\n else if (hp < 4) { g = X; b = C; }\n else if (hp < 5) { r = X; b = C; }\n else { r = C; b = X; }\n const m = l - C / 2;\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255),\n };\n}\n\n// ────────────────────────────────────────────────────────────────────\n// Sub-directives\n// ────────────────────────────────────────────────────────────────────\n\n/**\n * Trigger button that opens the color-picker panel and renders the\n * current color as its background. Composes `KjOverlayTrigger` for the\n * shared overlay state machine; the click strategy and panel role are\n * provided by the root `KjColorPicker` so the trigger and panel share\n * the same controller instance. `aria-haspopup=\"dialog\"`, `aria-expanded`\n * and `aria-controls` are wired by the overlay primitive.\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name color-picker\n */\n@Directive({\n selector: '[kjColorPickerTrigger]',\n standalone: true,\n hostDirectives: [\n KjFocusRing,\n { directive: KjOverlayTrigger, inputs: ['kjOpen'] },\n ],\n host: {\n 'type': 'button',\n '[id]': 'ctx.triggerId()',\n '[attr.aria-haspopup]': '\"dialog\"',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-disabled]': 'ctx.disabled() ? \"true\" : null',\n '[attr.data-disabled]': 'ctx.disabled() ? \"\" : null',\n '[style.--kj-color-picker-current]': 'ctx.hex()',\n },\n})\nexport class KjColorPickerTrigger {\n /** @internal */\n readonly ctx = inject(KJ_COLOR_PICKER);\n private readonly root = inject(KjColorPicker);\n\n /** @internal */\n readonly ariaLabel = computed(() =>\n this.root.kjAriaLabel() || `Color picker, current value ${this.ctx.hex()}`);\n\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n /** The controller of the composed `KjOverlayTrigger`, exposed for sibling `[kjFor]` panels. */\n get controller() {\n return this._overlayTrigger.controller;\n }\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n}\n\n/**\n * Popup panel container. Composes `KjOverlayPanel` for state-driven\n * mount/position and the standard `role=\"dialog\"` / `[hidden]` wiring;\n * the mount and position strategies are provided by the root\n * `KjColorPicker`.\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name color-picker\n */\n@Directive({\n selector: '[kjColorPickerPanel]',\n standalone: true,\n hostDirectives: [\n { directive: KjOverlayPanel, inputs: ['kjFor'] },\n ],\n providers: [\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'dialog' as const },\n ],\n host: {\n '[attr.aria-labelledby]': 'ctx.triggerId()',\n },\n})\nexport class KjColorPickerPanel {\n /** @internal */\n readonly ctx = inject(KJ_COLOR_PICKER);\n}\n\n/**\n * Two-axis saturation/value rectangle. Pointer drag updates both axes;\n * arrow keys step ±1% (Shift = ±10%). Single `role=\"slider\"` per the\n * APG color-picker pattern; full state announced via `aria-valuetext`.\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name color-picker\n */\n@Directive({\n selector: '[kjColorPickerArea]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n 'role': 'slider',\n 'tabindex': '0',\n '[attr.aria-label]': '\"Color saturation and value\"',\n '[attr.aria-orientation]': '\"horizontal\"',\n '[attr.aria-valuemin]': '0',\n '[attr.aria-valuemax]': '100',\n '[attr.aria-valuenow]': 'ariaValueNow()',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-disabled]': 'ctx.disabled() ? \"true\" : null',\n '[style.--kj-color-picker-hue]': 'ctx.hue()',\n '[style.--kj-color-picker-x]': 'ctx.saturation()',\n '[style.--kj-color-picker-y]': 'ctx.value()',\n '(pointerdown)': 'onPointerDown($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjColorPickerArea {\n /** @internal */\n readonly ctx = inject(KJ_COLOR_PICKER);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** @internal */\n readonly ariaValueNow = computed(() => Math.round(this.ctx.saturation() * 100));\n /** @internal */\n readonly ariaValueText = computed(() => {\n const s = Math.round(this.ctx.saturation() * 100);\n const v = Math.round(this.ctx.value() * 100);\n const h = Math.round(this.ctx.hue());\n return `Saturation ${s} percent, value ${v} percent, hue ${h} degrees`;\n });\n\n /** @internal */\n onPointerDown(event: PointerEvent): void {\n if (this.ctx.disabled()) return;\n const target = this.el.nativeElement;\n target.setPointerCapture?.(event.pointerId);\n this.update(event);\n const move = (e: PointerEvent) => this.update(e);\n const up = (e: PointerEvent) => {\n target.releasePointerCapture?.(e.pointerId);\n target.removeEventListener('pointermove', move);\n target.removeEventListener('pointerup', up);\n target.removeEventListener('pointercancel', up);\n };\n target.addEventListener('pointermove', move);\n target.addEventListener('pointerup', up);\n target.addEventListener('pointercancel', up);\n }\n\n private update(event: PointerEvent): void {\n const rect = this.el.nativeElement.getBoundingClientRect();\n if (rect.width === 0 || rect.height === 0) return;\n const x = kjClamp((event.clientX - rect.left) / rect.width, 0, 1);\n // Visual y=0 is value=1 (top of rectangle = brightest).\n const y = 1 - kjClamp((event.clientY - rect.top) / rect.height, 0, 1);\n this.ctx.setSaturationValue(x, y);\n }\n\n /** @internal */\n onKeydown(event: Event): void {\n if (this.ctx.disabled()) return;\n const ke = event as KeyboardEvent;\n const step = ke.shiftKey ? 0.1 : 0.01;\n let s = this.ctx.saturation();\n let v = this.ctx.value();\n let handled = true;\n switch (ke.key) {\n case 'ArrowRight': s = kjClamp(s + step, 0, 1); break;\n case 'ArrowLeft': s = kjClamp(s - step, 0, 1); break;\n case 'ArrowUp': v = kjClamp(v + step, 0, 1); break;\n case 'ArrowDown': v = kjClamp(v - step, 0, 1); break;\n case 'Home': s = 0; break;\n case 'End': s = 1; break;\n case 'PageUp': v = 1; break;\n case 'PageDown': v = 0; break;\n default: handled = false;\n }\n if (handled) {\n event.preventDefault();\n this.ctx.setSaturationValue(s, v);\n }\n }\n}\n\n/**\n * Hue slider. Renders as a native `<input type=\"range\">` so screen\n * readers and keyboard users get the standard `role=\"slider\"` model\n * for free; the visual track gradient is rendered via the wrapper\n * stylesheet.\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name color-picker\n */\n@Directive({\n selector: 'input[kjColorPickerHueSlider]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n 'type': 'range',\n 'min': '0',\n 'max': '360',\n 'step': '1',\n '[attr.aria-label]': '\"Hue\"',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-disabled]': 'ctx.disabled() ? \"true\" : null',\n '[disabled]': 'ctx.disabled() || null',\n '[value]': 'Math.round(ctx.hue())',\n '(input)': 'onInput($event)',\n },\n})\nexport class KjColorPickerHueSlider {\n /** @internal */\n readonly ctx = inject(KJ_COLOR_PICKER);\n /** @internal */\n protected readonly Math = Math;\n /** @internal */\n readonly ariaValueText = computed(() => `Hue ${Math.round(this.ctx.hue())} degrees`);\n\n /** @internal */\n onInput(event: Event): void {\n const v = Number((event.target as HTMLInputElement).value);\n if (Number.isFinite(v)) this.ctx.setHue(v);\n }\n}\n\n/**\n * Optional alpha slider. Mounts only when `KjColorPicker.kjShowAlpha`\n * is true; otherwise the wrapper hides it. Like the hue slider it\n * delegates to a native range input for AT support.\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name color-picker\n */\n@Directive({\n selector: 'input[kjColorPickerAlphaSlider]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n 'type': 'range',\n 'min': '0',\n 'max': '100',\n 'step': '1',\n '[attr.aria-label]': '\"Opacity\"',\n '[attr.aria-valuetext]': 'ariaValueText()',\n '[attr.aria-disabled]': 'ctx.disabled() ? \"true\" : null',\n '[disabled]': 'ctx.disabled() || !ctx.showAlpha() || null',\n '[value]': 'Math.round(ctx.alpha() * 100)',\n '(input)': 'onInput($event)',\n },\n})\nexport class KjColorPickerAlphaSlider {\n /** @internal */\n readonly ctx = inject(KJ_COLOR_PICKER);\n /** @internal */\n protected readonly Math = Math;\n /** @internal */\n readonly ariaValueText = computed(() =>\n `Opacity ${Math.round(this.ctx.alpha() * 100)} percent`);\n\n /** @internal */\n onInput(event: Event): void {\n const pct = Number((event.target as HTMLInputElement).value);\n if (Number.isFinite(pct)) this.ctx.setAlpha(pct / 100);\n }\n}\n\n/**\n * Hex / CSS-color text input. Commits on blur or Enter; reverts to the\n * canonical value on parse failure. Pattern attribute restricts to\n * 3 / 4 / 6 / 8 hex digits with optional leading hash.\n *\n * @doc-category Core/Inputs\n * @doc\n * @doc-name color-picker\n */\n@Directive({\n selector: 'input[kjColorPickerInput]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n 'type': 'text',\n 'autocomplete': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false',\n 'pattern': '^#?[0-9a-fA-F]{3,8}$',\n '[attr.aria-label]': '\"Hex color value\"',\n '[attr.aria-invalid]': 'invalid() ? \"true\" : null',\n '[attr.aria-disabled]': 'ctx.disabled() ? \"true\" : null',\n '[disabled]': 'ctx.disabled() || null',\n '[value]': 'displayValue()',\n '(blur)': 'commit($event)',\n '(keydown.enter)': 'commit($event)',\n '(input)': 'onInput($event)',\n },\n})\nexport class KjColorPickerInput {\n /** @internal */\n readonly ctx = inject(KJ_COLOR_PICKER);\n\n private readonly _draft = signal<string | null>(null);\n private readonly _invalid = signal(false);\n\n /** @internal */\n readonly invalid = this._invalid.asReadonly();\n /** @internal */\n readonly displayValue = computed(() => this._draft() ?? this.ctx.hex());\n\n /** @internal */\n onInput(event: Event): void {\n this._draft.set((event.target as HTMLInputElement).value);\n }\n\n /** @internal */\n commit(event: Event): void {\n const draft = this._draft();\n if (draft == null) return;\n const ok = this.ctx.setHex(draft);\n this._invalid.set(!ok);\n if (ok) {\n this._draft.set(null);\n } else if (event.type === 'blur') {\n // Revert on blur if invalid.\n this._draft.set(null);\n this._invalid.set(false);\n }\n }\n}\n","/**\n * Tiny date helpers used by the Calendar and Date Picker families.\n *\n * Native `Date` only — no third-party date library. Operations work in local\n * time zone (matching the user's runtime). Day-precision throughout —\n * comparisons strip the time portion via {@link startOfDay}.\n *\n * @doc-category Core/Data input\n */\n\n/** Returns a new `Date` set to `00:00:00.000` in local time. */\nexport function startOfDay(date: Date): Date {\n const out = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n return out;\n}\n\n/** Returns the first day of the month for `date`. */\nexport function startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\n/** Returns the last day of the month for `date`. */\nexport function endOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\n/** Adds `days` calendar days to `date`. Negative values subtract. */\nexport function addDays(date: Date, days: number): Date {\n const out = new Date(date);\n out.setDate(out.getDate() + days);\n return out;\n}\n\n/** Adds `months` calendar months. Day-of-month clamps when target month is shorter. */\nexport function addMonths(date: Date, months: number): Date {\n const day = date.getDate();\n const out = new Date(date.getFullYear(), date.getMonth() + months, 1);\n const dim = endOfMonth(out).getDate();\n out.setDate(Math.min(day, dim));\n return out;\n}\n\n/** Adds `years` calendar years. Feb 29 → Feb 28 on a non-leap target. */\nexport function addYears(date: Date, years: number): Date {\n return addMonths(date, years * 12);\n}\n\n/** Returns true if `a` and `b` represent the same day in local time. */\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear()\n && a.getMonth() === b.getMonth()\n && a.getDate() === b.getDate()\n );\n}\n\n/** Returns true if `a` and `b` are in the same month and year. */\nexport function isSameMonth(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\n/** Day-precision compare. Negative if `a < b`, positive if `a > b`, 0 if equal. */\nexport function compareDay(a: Date, b: Date): number {\n return startOfDay(a).getTime() - startOfDay(b).getTime();\n}\n\n/** True when `date` is within `[min, max]` (inclusive). `null` bounds are open. */\nexport function isInRange(date: Date, min: Date | null, max: Date | null): boolean {\n if (min && compareDay(date, min) < 0) return false;\n if (max && compareDay(date, max) > 0) return false;\n return true;\n}\n\n/**\n * Locale-aware first day of the week (0 = Sunday … 6 = Saturday).\n *\n * Reads `Intl.Locale.getWeekInfo()` when available (Chromium 99+, Safari 17+,\n * Firefox 130+); falls back to Sunday for `en` locales and Monday otherwise.\n */\nexport function firstDayOfWeek(locale: string): number {\n try {\n const loc = new Intl.Locale(locale);\n type LocWithWeek = Intl.Locale & { getWeekInfo?: () => { firstDay: number } };\n const info = (loc as LocWithWeek).getWeekInfo?.();\n if (info && typeof info.firstDay === 'number') {\n // Intl reports Mon=1 … Sun=7. Convert to 0..6 with Sun=0.\n return info.firstDay === 7 ? 0 : info.firstDay;\n }\n } catch {\n /* ignore */\n }\n return locale.startsWith('en') ? 0 : 1;\n}\n\n/**\n * Builds the 6×7 day-grid for `monthAnchor`. Always returns 42 cells —\n * leading/trailing days from neighbouring months fill the grid so callers\n * have a stable shape.\n *\n * @param monthAnchor — any `Date` whose month/year identifies the target month.\n * @param weekStart — `0..6` — first column of the grid.\n */\nexport function buildMonthMatrix(monthAnchor: Date, weekStart: number): Date[][] {\n const first = startOfMonth(monthAnchor);\n const firstDow = first.getDay();\n const offset = (firstDow - weekStart + 7) % 7;\n const gridStart = addDays(first, -offset);\n\n const weeks: Date[][] = [];\n for (let w = 0; w < 6; w += 1) {\n const row: Date[] = [];\n for (let d = 0; d < 7; d += 1) {\n row.push(addDays(gridStart, w * 7 + d));\n }\n weeks.push(row);\n }\n return weeks;\n}\n\n/** Locale-aware short weekday names starting from `weekStart`. */\nexport function weekdayShortNames(locale: string, weekStart: number): string[] {\n const fmt = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n // 1970-01-04 was a Sunday in UTC — anchor for stable iteration.\n const base = new Date(1970, 0, 4);\n const out: string[] = [];\n for (let i = 0; i < 7; i += 1) {\n out.push(fmt.format(addDays(base, (i + weekStart) % 7)));\n }\n return out;\n}\n\n/** Locale-aware long weekday names starting from `weekStart`. Used for `<th abbr>`. */\nexport function weekdayLongNames(locale: string, weekStart: number): string[] {\n const fmt = new Intl.DateTimeFormat(locale, { weekday: 'long' });\n const base = new Date(1970, 0, 4);\n const out: string[] = [];\n for (let i = 0; i < 7; i += 1) {\n out.push(fmt.format(addDays(base, (i + weekStart) % 7)));\n }\n return out;\n}\n\n/** Locale-aware \"April 2025\" for the calendar caption. */\nexport function formatMonthYear(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'long' }).format(date);\n}\n\n/** Locale-aware long form for cell `aria-label` — \"Tuesday, April 15, 2025\". */\nexport function formatDateLong(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n}\n\n/** Locale-aware short form for the Date Picker input — \"4/15/2025\" / \"15/04/2025\". */\nexport function formatDateShort(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n }).format(date);\n}\n\n/**\n * Best-effort parse of a typed date string. Tries:\n * 1. `Date.parse()` on ISO-ish input (`yyyy-MM-dd`).\n * 2. Splitting on `/` `-` `.` ` ` and inferring locale order from the\n * resolved options of `Intl.DateTimeFormat(locale, …)`.\n *\n * Returns `null` for empty / invalid input. Day-precision only.\n */\nexport function parseDate(value: string, locale: string): Date | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n // ISO 8601 (yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss)\n const iso = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(trimmed);\n if (iso) {\n const y = Number(iso[1]);\n const m = Number(iso[2]) - 1;\n const d = Number(iso[3]);\n const out = new Date(y, m, d);\n if (out.getFullYear() === y && out.getMonth() === m && out.getDate() === d) return out;\n return null;\n }\n\n const parts = trimmed.split(/[/\\-.\\s]+/).filter(Boolean);\n if (parts.length < 3) return null;\n const nums = parts.map((p) => Number(p));\n if (nums.some((n) => !Number.isFinite(n))) return null;\n\n // Determine locale order via resolved-options of DateTimeFormat parts.\n const order = inferDateOrder(locale);\n let y: number, m: number, d: number;\n if (order === 'dmy') {\n [d, m, y] = nums as [number, number, number];\n } else if (order === 'ymd') {\n [y, m, d] = nums as [number, number, number];\n } else {\n [m, d, y] = nums as [number, number, number];\n }\n if (y < 100) y += y < 50 ? 2000 : 1900;\n m -= 1;\n const out = new Date(y, m, d);\n if (out.getFullYear() !== y || out.getMonth() !== m || out.getDate() !== d) return null;\n return out;\n}\n\nfunction inferDateOrder(locale: string): 'mdy' | 'dmy' | 'ymd' {\n try {\n const parts = new Intl.DateTimeFormat(locale).formatToParts(new Date(2000, 0, 2));\n const order: string[] = [];\n for (const p of parts) {\n if (p.type === 'day' || p.type === 'month' || p.type === 'year') order.push(p.type);\n }\n if (order[0] === 'year') return 'ymd';\n if (order[0] === 'day') return 'dmy';\n return 'mdy';\n } catch {\n return 'mdy';\n }\n}\n","import { InjectionToken, type Signal, type WritableSignal } from '@angular/core';\n\n/**\n * Shared state contract for the Calendar family. Implemented by `KjCalendar`\n * and consumed by `KjCalendarHeader`, `KjCalendarGrid`, and `KjCalendarDay`\n * via DI. Headless directives never read each other's inputs directly — they\n * always go through this context.\n *\n * @doc-category Core/Data input\n */\nexport interface KjCalendarContext {\n /** Locale BCP-47 tag (e.g. `'en-US'`, `'fr-FR'`). Drives weekday and month names. */\n readonly locale: Signal<string>;\n\n /** Current selection. `null` when nothing is selected. */\n readonly value: Signal<Date | null>;\n\n /** The \"active\" date — the cell that owns `tabindex=0`. Drives keyboard focus. */\n readonly focusedDate: WritableSignal<Date>;\n\n /** Earliest selectable date (inclusive). `null` = open. */\n readonly minDate: Signal<Date | null>;\n\n /** Latest selectable date (inclusive). `null` = open. */\n readonly maxDate: Signal<Date | null>;\n\n /** Per-date predicate; `false` blocks selection / focus. */\n readonly disabledDates: Signal<((date: Date) => boolean) | null>;\n\n /** First day of the week (0=Sun … 6=Sat). Locale-derived if undefined. */\n readonly firstDayOfWeek: Signal<number>;\n\n /** Whether the entire calendar is disabled. */\n readonly disabled: Signal<boolean>;\n\n /** Auto-minted id of the header caption — used for `aria-labelledby` on the grid. */\n readonly captionId: Signal<string>;\n\n /** Combined disabled predicate (min/max/filter/global disabled). */\n isDisabled(date: Date): boolean;\n\n /** Selects a date. No-op if disabled. */\n selectDate(date: Date): void;\n\n /** Moves the focused date by `delta` of the given unit, skipping disabled dates. */\n moveFocus(unit: 'day' | 'week' | 'month' | 'year', delta: number): void;\n\n /** Snaps focus to the start or end of the focused week. */\n moveFocusToWeekBoundary(boundary: 'start' | 'end'): void;\n}\n\n/** DI token for the Calendar context. */\nexport const KJ_CALENDAR = new InjectionToken<KjCalendarContext>('KjCalendar');\n","import {\n Directive,\n LOCALE_ID,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { KjDisabled } from '../primitives/interaction/disabled';\nimport {\n addDays,\n addMonths,\n addYears,\n compareDay,\n endOfMonth,\n firstDayOfWeek as localeFirstDayOfWeek,\n isInRange,\n isSameDay,\n startOfDay,\n startOfMonth,\n} from './date-utils';\nimport { KJ_CALENDAR, type KjCalendarContext } from './calendar.context';\n\nlet _captionIdCounter = 0;\nfunction nextCaptionId(): string {\n _captionIdCounter += 1;\n return `kj-calendar-caption-${_captionIdCounter}`;\n}\n\n/**\n * Headless calendar root. Owns date selection state, the focused-date roving\n * signal, locale resolution, and the keyboard-navigation contract. Renders\n * nothing on its own — pair with `KjCalendarHeader`, `KjCalendarGrid`, and\n * `KjCalendarDay`.\n *\n * Composes `KjDisabled` for the global-disabled stance. Native `Date` only —\n * locale-aware via `Intl.DateTimeFormat`.\n *\n * **Keyboard contract** (when focus is on a day cell, per APG):\n * - `ArrowLeft` / `ArrowRight` — ±1 day\n * - `ArrowUp` / `ArrowDown` — ±1 week\n * - `Home` / `End` — first / last day of the focused week\n * - `PageUp` / `PageDown` — ±1 month\n * - `Shift+PageUp` / `Shift+PageDown` — ±1 year\n * - `Enter` / `Space` — select the focused date\n *\n * Disabled dates are skipped by keyboard navigation — pressing `ArrowRight`\n * lands on the next *selectable* day. Cells outside `kjMin` / `kjMax` carry\n * `aria-disabled=\"true\"` and can't receive focus.\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name calendar\n * @doc-description Unstyled calendar root for date selection with locale, bounds, and full keyboard navigation.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjCalendar]',\n standalone: true,\n exportAs: 'kjCalendar',\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n ],\n providers: [\n { provide: KJ_CALENDAR, useExisting: KjCalendar },\n ],\n host: {\n 'role': 'application',\n 'aria-roledescription': 'calendar',\n '[attr.aria-label]': 'computedAriaLabel()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n },\n})\nexport class KjCalendar implements KjCalendarContext {\n private readonly disabledHost = inject(KjDisabled);\n private readonly defaultLocale = inject(LOCALE_ID);\n\n /** Current value. Two-way bindable — `[(kjValue)]`. `null` clears. */\n readonly kjValue = model<Date | null>(null);\n\n /** Earliest selectable date (inclusive). `null` = open. */\n readonly kjMin = input<Date | null>(null);\n\n /** Latest selectable date (inclusive). `null` = open. */\n readonly kjMax = input<Date | null>(null);\n\n /** Predicate returning `false` to disable specific dates (e.g. weekends). */\n readonly kjDisabledDates = input<((date: Date) => boolean) | null>(null);\n\n /** BCP-47 locale tag. Defaults to Angular's `LOCALE_ID`. */\n readonly kjLocale = input<string>('');\n\n /** First day of the week (0=Sun … 6=Sat). Defaults to locale-derived. */\n readonly kjFirstDayOfWeek = input<number | null>(null);\n\n /** Optional accessible label override. Defaults to `\"Calendar\"`. */\n readonly kjAriaLabel = input<string>('Calendar');\n\n /** Initially-focused date when no value is selected. Defaults to today. */\n readonly kjStartAt = input<Date | null>(null);\n\n // ── Context shared with children ───────────────────────────────────\n\n readonly locale = computed(() => this.kjLocale() || this.defaultLocale);\n readonly value = this.kjValue.asReadonly();\n readonly minDate = computed(() => this.kjMin());\n readonly maxDate = computed(() => this.kjMax());\n readonly disabledDates = computed(() => this.kjDisabledDates());\n readonly firstDayOfWeek = computed(() => {\n const explicit = this.kjFirstDayOfWeek();\n if (explicit !== null && explicit >= 0 && explicit <= 6) return explicit;\n return localeFirstDayOfWeek(this.locale());\n });\n readonly disabled = this.disabledHost.disabled;\n\n /** Internal focused-date signal. Two-way exposed via `kjFocusedDate` model. */\n readonly kjFocusedDate = model<Date>(startOfDay(new Date()));\n readonly focusedDate = this.kjFocusedDate;\n\n /** Auto-minted caption id — used by the grid's `aria-labelledby`. */\n readonly captionId = signal<string>(nextCaptionId());\n\n /** Computed accessible name combining label + active selection (for SR clarity). */\n readonly computedAriaLabel = computed(() => this.kjAriaLabel());\n\n constructor() {\n // Seed focusedDate from kjStartAt or kjValue or today.\n const seed = this.kjStartAt() ?? this.kjValue() ?? new Date();\n this.kjFocusedDate.set(startOfDay(seed));\n\n // Whenever the value changes externally, follow with focus.\n effect(() => {\n const v = this.kjValue();\n if (v) this.kjFocusedDate.set(startOfDay(v));\n });\n }\n\n // ── KjCalendarContext methods ──────────────────────────────────────\n\n isDisabled(date: Date): boolean {\n if (this.disabled()) return true;\n if (!isInRange(date, this.minDate(), this.maxDate())) return true;\n const filter = this.disabledDates();\n if (filter && !filter(date)) return true;\n return false;\n }\n\n selectDate(date: Date): void {\n if (this.isDisabled(date)) return;\n const sod = startOfDay(date);\n this.kjValue.set(sod);\n this.kjFocusedDate.set(sod);\n }\n\n moveFocus(unit: 'day' | 'week' | 'month' | 'year', delta: number): void {\n const start = this.focusedDate();\n let candidate = this.advance(start, unit, delta);\n // Skip disabled by stepping in the same direction one day at a time, max 366.\n if (this.isDisabled(candidate)) {\n const step = delta >= 0 ? 1 : -1;\n for (let i = 0; i < 366; i += 1) {\n candidate = addDays(candidate, step);\n if (this.minDate() && compareDay(candidate, this.minDate() as Date) < 0) break;\n if (this.maxDate() && compareDay(candidate, this.maxDate() as Date) > 0) break;\n if (!this.isDisabled(candidate)) {\n this.kjFocusedDate.set(startOfDay(candidate));\n return;\n }\n }\n // Couldn't find one — leave focus alone.\n return;\n }\n this.kjFocusedDate.set(startOfDay(candidate));\n }\n\n moveFocusToWeekBoundary(boundary: 'start' | 'end'): void {\n const f = this.focusedDate();\n const ws = this.firstDayOfWeek();\n const offset = (f.getDay() - ws + 7) % 7;\n const target = boundary === 'start' ? addDays(f, -offset) : addDays(f, 6 - offset);\n if (!this.isDisabled(target)) {\n this.kjFocusedDate.set(startOfDay(target));\n }\n }\n\n /** Snap focus to a specific date (used by the day-cell click handler). */\n setFocusedDate(date: Date): void {\n this.kjFocusedDate.set(startOfDay(date));\n }\n\n /** Helper: month-anchor for the currently-rendered grid. */\n readonly viewMonth = computed(() => startOfMonth(this.focusedDate()));\n\n private advance(date: Date, unit: 'day' | 'week' | 'month' | 'year', delta: number): Date {\n switch (unit) {\n case 'day':\n return addDays(date, delta);\n case 'week':\n return addDays(date, delta * 7);\n case 'month': {\n const target = addMonths(date, delta);\n // Clamp day-of-month if necessary.\n const last = endOfMonth(target).getDate();\n if (target.getDate() !== Math.min(date.getDate(), last)) {\n target.setDate(Math.min(date.getDate(), last));\n }\n return target;\n }\n case 'year': {\n const target = addYears(date, delta);\n const last = endOfMonth(target).getDate();\n if (target.getDate() !== Math.min(date.getDate(), last)) {\n target.setDate(Math.min(date.getDate(), last));\n }\n return target;\n }\n }\n }\n\n /** True when `date` is the currently-selected value. */\n isSelected(date: Date): boolean {\n const v = this.value();\n return !!v && isSameDay(v, date);\n }\n\n /** True when `date` matches today's local day. */\n isToday(date: Date): boolean {\n return isSameDay(date, new Date());\n }\n}\n","import { Directive, computed, inject } from '@angular/core';\nimport { addMonths, formatMonthYear } from './date-utils';\nimport { KJ_CALENDAR } from './calendar.context';\n\n/**\n * Calendar header directive. Carries the auto-minted caption id so the grid's\n * `aria-labelledby` resolves automatically. Exposes computed `label` for the\n * caption text (locale-aware \"April 2025\") and `prev` / `next` methods that\n * advance the focused date by ±1 month.\n *\n * Buttons inside the header are the consumer's responsibility — wire\n * `(click)=\"header.prev()\"` and `(click)=\"header.next()\"` and read\n * `header.label()` for the caption text.\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name calendar\n */\n@Directive({\n selector: '[kjCalendarHeader]',\n standalone: true,\n exportAs: 'kjCalendarHeader',\n})\nexport class KjCalendarHeader {\n private readonly ctx = inject(KJ_CALENDAR);\n\n /** The id assigned to the header caption (mirror onto the caption's `id`). */\n readonly captionId = this.ctx.captionId;\n\n /** Locale-aware caption text — e.g. `\"April 2025\"`. */\n readonly label = computed(() =>\n formatMonthYear(this.ctx.focusedDate(), this.ctx.locale()),\n );\n\n /** Whether the previous-month button should be disabled (out-of-bounds month). */\n readonly prevDisabled = computed(() => {\n const min = this.ctx.minDate();\n if (!min) return false;\n const prevMonth = addMonths(this.ctx.focusedDate(), -1);\n // Disabled when the last day of the prev month is < min.\n const lastOfPrev = new Date(prevMonth.getFullYear(), prevMonth.getMonth() + 1, 0);\n return lastOfPrev.getTime() < min.getTime();\n });\n\n /** Whether the next-month button should be disabled. */\n readonly nextDisabled = computed(() => {\n const max = this.ctx.maxDate();\n if (!max) return false;\n const nextMonth = addMonths(this.ctx.focusedDate(), 1);\n const firstOfNext = new Date(nextMonth.getFullYear(), nextMonth.getMonth(), 1);\n return firstOfNext.getTime() > max.getTime();\n });\n\n /** Move focus to the previous month (same day-of-month, clamped). */\n prev(): void {\n if (this.prevDisabled()) return;\n this.ctx.moveFocus('month', -1);\n }\n\n /** Move focus to the next month. */\n next(): void {\n if (this.nextDisabled()) return;\n this.ctx.moveFocus('month', 1);\n }\n}\n","import { Directive, computed, inject } from '@angular/core';\nimport {\n buildMonthMatrix,\n weekdayLongNames,\n weekdayShortNames,\n} from './date-utils';\nimport { KJ_CALENDAR } from './calendar.context';\n\n/**\n * Calendar grid directive. Hosts the `<table role=\"grid\">` and exposes the\n * 6×7 day matrix plus locale-aware weekday headers. The `(keydown)` handler\n * implements the APG keyboard contract — see `KjCalendar` for the full key\n * map.\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name calendar\n */\n@Directive({\n selector: '[kjCalendarGrid]',\n standalone: true,\n exportAs: 'kjCalendarGrid',\n host: {\n 'role': 'grid',\n '[attr.aria-labelledby]': 'ctx.captionId()',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjCalendarGrid {\n /** @internal */\n readonly ctx = inject(KJ_CALENDAR);\n\n /** 6 weeks × 7 days for the focused month. */\n readonly weeks = computed(() =>\n buildMonthMatrix(this.ctx.focusedDate(), this.ctx.firstDayOfWeek()),\n );\n\n /** Localised short weekday names (`['Sun','Mon',…]`). */\n readonly weekdayShort = computed(() =>\n weekdayShortNames(this.ctx.locale(), this.ctx.firstDayOfWeek()),\n );\n\n /** Localised long weekday names (used for `<th abbr>`). */\n readonly weekdayLong = computed(() =>\n weekdayLongNames(this.ctx.locale(), this.ctx.firstDayOfWeek()),\n );\n\n /** @internal — APG keyboard contract for the grid. */\n onKeydown(event: KeyboardEvent): void {\n if (this.ctx.disabled()) return;\n const key = event.key;\n let handled = true;\n switch (key) {\n case 'ArrowLeft':\n this.ctx.moveFocus('day', -1);\n break;\n case 'ArrowRight':\n this.ctx.moveFocus('day', 1);\n break;\n case 'ArrowUp':\n this.ctx.moveFocus('week', -1);\n break;\n case 'ArrowDown':\n this.ctx.moveFocus('week', 1);\n break;\n case 'Home':\n this.ctx.moveFocusToWeekBoundary('start');\n break;\n case 'End':\n this.ctx.moveFocusToWeekBoundary('end');\n break;\n case 'PageUp':\n this.ctx.moveFocus(event.shiftKey ? 'year' : 'month', -1);\n break;\n case 'PageDown':\n this.ctx.moveFocus(event.shiftKey ? 'year' : 'month', 1);\n break;\n case 'Enter':\n case ' ':\n this.ctx.selectDate(this.ctx.focusedDate());\n break;\n default:\n handled = false;\n }\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n PLATFORM_ID,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { formatDateLong, isSameDay, isSameMonth } from './date-utils';\nimport { KJ_CALENDAR } from './calendar.context';\n\n/**\n * A single day cell in the calendar grid. Apply to a `<button>` (preferred —\n * native focusability) or a `<td>` containing a `<button>`. Exposes the\n * computed flags `isSelected`, `isToday`, `isDisabled`, `isOutsideMonth` as\n * `data-*` attributes so themes paint without re-deriving them.\n *\n * Roving `tabindex`: only the cell whose date matches `focusedDate()` carries\n * `tabindex=\"0\"`; all others are `tabindex=\"-1\"`. Clicking a cell calls\n * `selectDate()` on the context.\n *\n * The host's `aria-label` is auto-set to a locale-aware long form\n * (`\"Tuesday, April 15, 2025\"`) for SR clarity. Visible text is the\n * day-of-month only (consumer renders `{{ day.dayNumber() }}`).\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name calendar\n */\n@Directive({\n selector: '[kjCalendarDay]',\n standalone: true,\n exportAs: 'kjCalendarDay',\n host: {\n 'role': 'gridcell',\n 'type': 'button',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-selected]': 'isSelected() ? \"true\" : null',\n '[attr.aria-current]': 'isToday() ? \"date\" : null',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n '[attr.tabindex]': 'isFocused() ? \"0\" : \"-1\"',\n '[attr.disabled]': 'isDisabled() ? \"\" : null',\n '[attr.data-selected]': 'isSelected() ? \"\" : null',\n '[attr.data-today]': 'isToday() ? \"\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '[attr.data-outside-month]': 'isOutsideMonth() ? \"\" : null',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjCalendarDay {\n private readonly ctx = inject(KJ_CALENDAR);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly doc = inject(DOCUMENT);\n\n /** The date this cell represents. */\n readonly kjDate = input.required<Date>();\n\n readonly isSelected = computed(() => {\n const v = this.ctx.value();\n return !!v && isSameDay(v, this.kjDate());\n });\n\n readonly isToday = computed(() => isSameDay(this.kjDate(), new Date()));\n\n readonly isDisabled = computed(() => this.ctx.isDisabled(this.kjDate()));\n\n readonly isFocused = computed(() => isSameDay(this.kjDate(), this.ctx.focusedDate()));\n\n readonly isOutsideMonth = computed(\n () => !isSameMonth(this.kjDate(), this.ctx.focusedDate()),\n );\n\n readonly ariaLabel = computed(() => formatDateLong(this.kjDate(), this.ctx.locale()));\n\n /** Day-of-month number for the visible text. */\n readonly dayNumber = computed(() => this.kjDate().getDate());\n\n constructor() {\n // Whenever this cell becomes the focused one, request focus.\n effect(() => {\n if (!isPlatformBrowser(this.platformId)) return;\n if (this.isFocused() && this.doc.activeElement !== this.el.nativeElement) {\n // Defer so the DOM has the new tabindex.\n queueMicrotask(() => {\n if (this.isFocused()) {\n try { this.el.nativeElement.focus({ preventScroll: true }); } catch { /* noop */ }\n }\n });\n }\n });\n }\n\n /** @internal */\n onClick(event: MouseEvent): void {\n event.preventDefault();\n if (this.isDisabled()) return;\n this.ctx.selectDate(this.kjDate());\n }\n}\n","import { InjectionToken, type Signal, type WritableSignal } from '@angular/core';\n\n/**\n * Shared context for the Date Picker family. Implemented by `KjDatePicker`\n * (root) and consumed by `KjDatePickerTrigger` and `KjDatePickerCalendar`.\n *\n * @doc-category Core/Data input\n */\nexport interface KjDatePickerContext {\n /** Current value; `null` when empty. */\n readonly value: Signal<Date | null>;\n\n /** Open / closed state of the popover. */\n readonly open: WritableSignal<boolean>;\n\n /** Auto-minted id of the popover panel — consumers wire `aria-controls`. */\n readonly panelId: string;\n\n /** Earliest selectable date; `null` = open. */\n readonly minDate: Signal<Date | null>;\n\n /** Latest selectable date; `null` = open. */\n readonly maxDate: Signal<Date | null>;\n\n /** Per-date predicate. */\n readonly disabledDates: Signal<((d: Date) => boolean) | null>;\n\n /** BCP-47 locale tag. */\n readonly locale: Signal<string>;\n\n /** Whether the picker is disabled. */\n readonly disabled: Signal<boolean>;\n\n /** Whether the picker is read-only (no edits). */\n readonly readonly: Signal<boolean>;\n\n /** Selects a date and closes the popover. */\n selectDate(date: Date): void;\n\n /** Opens the popover. */\n show(): void;\n\n /** Closes the popover. */\n hide(): void;\n\n /** Toggles the popover open / closed. */\n toggle(): void;\n}\n\nexport const KJ_DATE_PICKER = new InjectionToken<KjDatePickerContext>('KjDatePicker');\n","import {\n Directive,\n LOCALE_ID,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { KjDisabled } from '../primitives/interaction/disabled';\nimport { startOfDay } from '../calendar/date-utils';\nimport { KJ_DATE_PICKER, type KjDatePickerContext } from './date-picker.context';\n\nlet _panelIdCounter = 0;\nfunction nextPanelId(): string {\n _panelIdCounter += 1;\n return `kj-date-picker-panel-${_panelIdCounter}`;\n}\n\n/**\n * Headless Date Picker root. Owns the value, the bounds / locale config, and\n * a two-way bindable `kjOpen` model. The actual show/hide wiring (and the\n * minted panel id) lives on the overlay primitives composed by\n * `KjDatePickerTrigger` (`KjOverlayTrigger`) and `KjDatePickerCalendar`\n * (`KjOverlayPanel`); the trigger bridges its overlay controller back into\n * this root's `kjOpen` model.\n *\n * Native `Date` only — locale-aware via `Intl.DateTimeFormat`.\n *\n * **Compound shape:**\n *\n * ```html\n * <div kjDatePicker [(kjValue)]=\"when\">\n * <input kjDatePickerTrigger #t=\"kjDatePickerTrigger\" />\n * <div kjDatePickerCalendar [kjFor]=\"t\"></div>\n * </div>\n * ```\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name date-picker\n * @doc-description Unstyled date-picker root that owns the selected date, popover state, locale, and bounds.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjDatePicker]',\n standalone: true,\n exportAs: 'kjDatePicker',\n hostDirectives: [\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n ],\n providers: [\n { provide: KJ_DATE_PICKER, useExisting: KjDatePicker },\n ],\n})\nexport class KjDatePicker implements KjDatePickerContext {\n private readonly disabledHost = inject(KjDisabled);\n private readonly defaultLocale = inject(LOCALE_ID);\n\n /** Current selected value. Two-way bindable — `[(kjValue)]`. */\n readonly kjValue = model<Date | null>(null);\n\n /** Earliest selectable date (inclusive). */\n readonly kjMin = input<Date | null>(null);\n\n /** Latest selectable date (inclusive). */\n readonly kjMax = input<Date | null>(null);\n\n /** Per-date predicate. */\n readonly kjDisabledDates = input<((d: Date) => boolean) | null>(null);\n\n /** BCP-47 locale tag. Defaults to Angular's `LOCALE_ID`. */\n readonly kjLocale = input<string>('');\n\n /** First day of the week override (0=Sun … 6=Sat). */\n readonly kjFirstDayOfWeek = input<number | null>(null);\n\n /** Read-only — value displays but cannot be edited. */\n readonly kjReadonly = input<boolean, boolean | string>(false, { transform: booleanAttribute });\n\n /**\n * Two-way bindable open state for the popover. Bridged to the trigger's\n * overlay controller — flipping this opens/closes the calendar.\n */\n readonly kjOpen = model<boolean>(false);\n\n // ── KjDatePickerContext implementation ─────────────────────────────\n\n readonly value = this.kjValue.asReadonly();\n readonly open = this.kjOpen;\n /**\n * @deprecated The real panel id is minted by the composed\n * `KjOverlayPanel` host directive on `KjDatePickerCalendar`. Retained as a\n * stable string so existing template references compile; consumers should\n * migrate to `[kjFor]=\"trigger\"` for `aria-controls` wiring.\n */\n readonly panelId = nextPanelId();\n readonly minDate = computed(() => this.kjMin());\n readonly maxDate = computed(() => this.kjMax());\n readonly disabledDates = computed(() => this.kjDisabledDates());\n readonly locale = computed(() => this.kjLocale() || this.defaultLocale);\n readonly disabled = this.disabledHost.disabled;\n readonly readonly = computed(() => this.kjReadonly());\n\n /** First-day-of-week override (re-exposed for the projected calendar). */\n readonly firstDayOfWeek = computed(() => this.kjFirstDayOfWeek());\n\n selectDate(date: Date): void {\n if (this.disabled() || this.readonly()) return;\n this.kjValue.set(startOfDay(date));\n this.kjOpen.set(false);\n }\n\n show(): void {\n if (this.disabled() || this.readonly()) return;\n this.kjOpen.set(true);\n }\n\n hide(): void {\n this.kjOpen.set(false);\n }\n\n toggle(): void {\n if (this.kjOpen()) this.hide();\n else this.show();\n }\n}\n","import { Directive, ElementRef, computed, effect, inject } from '@angular/core';\nimport { KjFormControl } from '../primitives/forms/form-control';\nimport { KjFocusRing } from '../primitives/interaction/focus-ring';\nimport { formatDateShort, parseDate } from '../calendar/date-utils';\nimport { KJ_DATE_PICKER } from './date-picker.context';\nimport { KjOverlayTrigger } from '../primitives/overlay/trigger';\nimport type { KjOverlayPanel } from '../primitives/overlay/panel';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport {\n KJ_OVERLAY_TRIGGER_EVENT_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n type KjTriggerEventStrategy,\n} from '../primitives/overlay/tokens';\nimport type { KjOverlayContext } from '../primitives/overlay/context';\nimport { onClick } from '../primitives/overlay/strategies/trigger-event/on-click';\nimport { onFocus } from '../primitives/overlay/strategies/trigger-event/on-focus';\n\n/**\n * Composite trigger-event strategy: opens the calendar on input focus AND on\n * click of the input (handy for icons inside the input). Mirrors the\n * `hoverOrFocus` factory used by the tooltip migration.\n *\n * Naïvely wiring both `onClick` and `onFocus` to the same `toggle()` is a\n * bug: clicking an unfocused input fires focus → toggle (opens), then\n * click → toggle (closes), so the calendar appears only while the mouse\n * button is held. We swallow any click toggle that fires within a short\n * window after a focus-driven open so the activating click reads as a\n * normal \"open\" instead of \"open-then-close\".\n */\nfunction clickOrFocus(): KjTriggerEventStrategy {\n const a = onClick();\n const b = onFocus();\n let userToggle: (() => void) | null = null;\n let suppressClickUntil = 0;\n const guardedClickToggle = () => {\n if (performance.now() < suppressClickUntil) return;\n userToggle?.();\n };\n const focusToggle = () => {\n suppressClickUntil = performance.now() + 300;\n userToggle?.();\n };\n return {\n ariaHasPopup: 'dialog',\n attach(ctx: KjOverlayContext) { a.attach(ctx); b.attach(ctx); },\n bindToggle(t) {\n userToggle = t;\n a.bindToggle(guardedClickToggle);\n b.bindToggle(focusToggle);\n },\n onOpen() { a.onOpen?.(); b.onOpen?.(); },\n onClose() { a.onClose?.(); b.onClose?.(); },\n detach() { a.detach(); b.detach(); },\n };\n}\n\n/**\n * Date Picker trigger directive. Apply to the `<input>` element. Combines:\n * - locale-aware **format on render** — when the value changes, the input's\n * text is overwritten with `Intl.DateTimeFormat`'s short form.\n * - locale-aware **parse on blur / Enter** — typed text is parsed (ISO,\n * locale-aware m/d/y or d/m/y) and committed to the picker's value.\n * - **combobox a11y** — `role=\"combobox\"`; `aria-haspopup`, `aria-expanded`,\n * and `aria-controls` are wired by the composed `KjOverlayTrigger` host\n * directive (APG combobox+dialog pattern).\n * - **keyboard** — `ArrowDown` / `Alt+ArrowDown` opens the popup;\n * `Escape` closes; `Enter` parses and (if valid) commits.\n * - **CVA** — composes `KjFormControl` so the input plays with\n * `formControl` / `[(ngModel)]` bindings on the host.\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name date-picker\n */\n@Directive({\n selector: 'input[kjDatePickerTrigger]',\n exportAs: 'kjDatePickerTrigger',\n standalone: true,\n hostDirectives: [\n KjFormControl,\n KjFocusRing,\n { directive: KjOverlayTrigger, inputs: ['kjOpen'] },\n ],\n providers: [\n KjOverlayController,\n { provide: KJ_OVERLAY_TRIGGER_EVENT_STRATEGY, useFactory: () => clickOrFocus() },\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'dialog' as const },\n ],\n host: {\n 'role': 'combobox',\n 'autocomplete': 'off',\n 'spellcheck': 'false',\n '[attr.aria-disabled]': 'ctx.disabled() ? \"true\" : null',\n '[attr.aria-readonly]': 'ctx.readonly() ? \"true\" : null',\n '[attr.disabled]': 'ctx.disabled() ? \"\" : null',\n '[attr.readonly]': 'ctx.readonly() ? \"\" : null',\n '(input)': 'onInput($event)',\n '(blur)': 'onBlur()',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class KjDatePickerTrigger {\n /** @internal */\n readonly ctx = inject(KJ_DATE_PICKER);\n /** @internal */\n readonly controller = inject(KjOverlayController);\n private readonly formCtrl = inject(KjFormControl);\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n /** Cached typed text — avoids overwriting mid-edit. */\n private editing = false;\n\n readonly displayValue = computed(() => {\n const v = this.ctx.value();\n return v ? formatDateShort(v, this.ctx.locale()) : '';\n });\n\n constructor() {\n // Reflect the value to the input element whenever the value or locale\n // changes — but only if the user isn't currently editing.\n effect(() => {\n const text = this.displayValue();\n if (this.editing) return;\n const inputEl = this.el.nativeElement;\n if (inputEl.value !== text) inputEl.value = text;\n });\n\n // Mirror the picker's value into the form control (for CVA consumers).\n effect(() => {\n const v = this.ctx.value();\n if (this.formCtrl.value() !== v) this.formCtrl.value.set(v);\n });\n\n // Bridge the root context's `open` (kjOpen model) with the overlay\n // controller so consumers reading or writing `picker.kjOpen` see the\n // same source of truth as the primitive.\n effect(() => {\n const isOpen = this.controller.isOpen();\n if (this.ctx.open() !== isOpen) this.ctx.open.set(isOpen);\n });\n effect(() => {\n const want = this.ctx.open();\n if (want && !this.controller.isOpen()) {\n if (!this.ctx.disabled() && !this.ctx.readonly()) this.controller.open();\n } else if (!want && this.controller.isOpen()) {\n this.controller.close('programmatic');\n }\n });\n }\n\n /** @internal */\n onInput(_event: Event): void {\n this.editing = true;\n this.formCtrl.notifyChange(this.el.nativeElement.value);\n }\n\n /** @internal */\n onBlur(): void {\n this.commitTyped();\n this.editing = false;\n this.formCtrl.notifyTouched();\n }\n\n /** @internal */\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' && (event.altKey || !this.controller.isOpen())) {\n event.preventDefault();\n if (!this.ctx.disabled() && !this.ctx.readonly()) this.controller.open();\n return;\n }\n if (event.key === 'Escape' && this.controller.isOpen()) {\n event.preventDefault();\n this.controller.close('esc');\n return;\n }\n if (event.key === 'Enter') {\n event.preventDefault();\n this.commitTyped();\n }\n }\n\n private commitTyped(): void {\n const text = this.el.nativeElement.value;\n if (!text.trim()) {\n // Clearing the input clears the value.\n if (this.ctx.value() !== null) {\n const picker = this.ctx as { kjValue?: { set(v: Date | null): void } };\n picker.kjValue?.set(null);\n }\n return;\n }\n const parsed = parseDate(text, this.ctx.locale());\n if (parsed && !this.isOutOfBounds(parsed)) {\n this.ctx.selectDate(parsed);\n } else {\n // Restore previous formatted value.\n this.el.nativeElement.value = this.displayValue();\n }\n }\n\n private readonly _overlayTrigger = inject(KjOverlayTrigger, { self: true });\n attachPanel(panel: KjOverlayPanel): void {\n this._overlayTrigger.attachPanel(panel);\n }\n\n private isOutOfBounds(d: Date): boolean {\n const min = this.ctx.minDate();\n const max = this.ctx.maxDate();\n if (min && d < min) return true;\n if (max && d > max) return true;\n const filter = this.ctx.disabledDates();\n if (filter && !filter(d)) return true;\n return false;\n }\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { KJ_DATE_PICKER } from './date-picker.context';\nimport { KjOverlayPanel } from '../primitives/overlay/panel';\nimport {\n KJ_OVERLAY_MOUNT_STRATEGY,\n KJ_OVERLAY_POSITION_STRATEGY,\n KJ_OVERLAY_FOCUS_TRAP_STRATEGY,\n KJ_OVERLAY_PANEL_ROLE,\n} from '../primitives/overlay/tokens';\nimport type { KjSide, KjAlign } from '../primitives/overlay/types';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\nimport { tabCycle } from '../primitives/overlay/strategies/focus-trap/tab-cycle';\n\n/**\n * Marker directive for the calendar slot of a Date Picker. Composes the\n * overlay `KjOverlayPanel` host directive — `role=\"dialog\"`,\n * `aria-modal=\"false\"`, mount/position/focus-trap strategies — and lets\n * consumers project a `KjCalendar` (or the `<kj-calendar>` wrapper) inside.\n *\n * Wire the panel to its trigger via `[kjFor]`:\n *\n * ```html\n * <input kjDatePickerTrigger #t=\"kjDatePickerTrigger\" />\n * <div kjDatePickerCalendar [kjFor]=\"t\"></div>\n * ```\n *\n * @doc-category Core/Data input\n * @doc\n * @doc-name date-picker\n */\n@Directive({\n selector: '[kjDatePickerCalendar]',\n standalone: true,\n exportAs: 'kjDatePickerCalendar',\n hostDirectives: [\n { directive: KjOverlayPanel, inputs: ['kjFor'] },\n ],\n providers: [\n { provide: KJ_OVERLAY_PANEL_ROLE, useValue: 'dialog' as const },\n { provide: KJ_OVERLAY_MOUNT_STRATEGY, useFactory: () => bodyPortal() },\n { provide: KJ_OVERLAY_POSITION_STRATEGY, useFactory: () => anchoredTo() },\n {\n provide: KJ_OVERLAY_FOCUS_TRAP_STRATEGY,\n useFactory: () => tabCycle({ returnFocus: true }),\n },\n ],\n host: {\n '[attr.aria-modal]': '\"false\"',\n '[attr.aria-label]': '\"Choose date\"',\n },\n})\nexport class KjDatePickerCalendar {\n /** @internal */\n readonly ctx = inject(KJ_DATE_PICKER);\n\n readonly kjSide = input<KjSide>('bottom');\n readonly kjAlign = input<KjAlign>('start');\n readonly kjOffset = input<number, unknown>(4, { transform: (v) => Number(v) || 4 });\n\n constructor() {\n const pos = inject(KJ_OVERLAY_POSITION_STRATEGY) as ReturnType<typeof anchoredTo>;\n pos.configure({ side: this.kjSide, align: this.kjAlign, offset: this.kjOffset });\n }\n}\n","import { Directive, DestroyRef, ElementRef, inject, input, afterNextRender, afterEveryRender } from '@angular/core';\nimport type { EChartsOption } from 'echarts';\n\n/**\n * Wraps Apache ECharts. Initializes after first render, updates reactively, disposes on destroy.\n * Always provide `kjChartLabel` for WCAG AAA compliance.\n *\n * @example\n * ```html\n * <div kjChart [kjChartOption]=\"chartOption()\" kjChartLabel=\"Monthly revenue\" style=\"height:300px\"></div>\n * ```\n * @doc-category Core/Data\n * @doc\n * @doc-name chart\n * @doc-description Renders a reactive ECharts chart on any sized element with an accessible label.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjChart]', standalone: true,\n host: { role: 'img', '[attr.aria-label]': 'kjChartLabel() || null' },\n})\nexport class KjChart {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n /** ECharts option object defining the chart. */\n kjChartOption = input.required<EChartsOption>();\n /** Accessible label for the chart. Required for WCAG AAA compliance. */\n kjChartLabel = input<string>('');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private chart: any;\n\n constructor() {\n afterNextRender(async () => {\n try {\n const echarts = await import('echarts');\n this.chart = echarts.init(this.el.nativeElement);\n this.chart.setOption(this.kjChartOption());\n this.destroyRef.onDestroy(() => this.chart?.dispose());\n } catch {\n // ECharts cannot initialize in non-browser environments (jsdom, SSR)\n }\n });\n\n afterEveryRender(() => {\n if (this.chart) {\n this.chart.setOption(this.kjChartOption());\n }\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { KjSize, KjVariant } from '../presets';\n\n/**\n * Orientation of the divider rule.\n */\nexport type KjDividerOrientation = 'horizontal' | 'vertical';\n\n/**\n * Alignment of the projected content within a with-content divider.\n */\nexport type KjDividerAlign = 'start' | 'center' | 'end';\n\n/**\n * Marks an element as a kouji divider / separator. Owns the small a11y opinion\n * (decorative-by-default vs. structural) and reflects data attributes that\n * theme CSS reads to render the rule (rule-only vs. with-content layout,\n * orientation, alignment, variant, size).\n *\n * The host element is consumer-supplied — `<hr kjDivider>` for the rule-only\n * case (recommended; native semantic, implicit `role=\"separator\"`) or\n * `<div kjDivider>Title</div>` for the with-content case (label projected in\n * the middle of the rule).\n *\n * **Decorative by default.** Most dividers in real templates are visual\n * punctuation between regions already demarcated by surrounding headings or\n * landmarks, so AT should not announce them. Set `kjStructural=true` when the\n * divider is the only thing demarcating two regions (e.g. an \"OR\" sign-in\n * divider with no surrounding heading).\n *\n * @example\n * ```html\n * <hr kjDivider />\n * <hr kjDivider [kjStructural]=\"true\" kjOrientation=\"vertical\" />\n * <div kjDivider [kjStructural]=\"true\">OR</div>\n * ```\n * @doc-category Core/Layout/Divider\n * @doc\n * @doc-name divider\n * @doc-description Unstyled divider for separating content with horizontal, vertical, and label-in-rule layouts.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjDivider]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n ],\n host: {\n '[attr.data-orientation]': 'kjOrientation()',\n '[attr.data-align]': 'kjAlign()',\n '[attr.data-with-content]': 'withContent() ? \"true\" : \"false\"',\n '[attr.role]': 'roleAttr()',\n '[attr.aria-orientation]': 'ariaOrientationAttr()',\n '[attr.aria-hidden]': 'ariaHiddenAttr()',\n },\n})\nexport class KjDivider {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Visual orientation of the rule. Reflects to `data-orientation`. When\n * `kjStructural=true` and orientation is `vertical`, also reflects\n * `aria-orientation=\"vertical\"`. The horizontal case omits `aria-orientation`\n * (the spec default; setting it explicitly is redundant noise).\n */\n readonly kjOrientation = input<KjDividerOrientation>('horizontal');\n\n /**\n * Whether the divider carries semantic weight (separates two regions that\n * are not already demarcated by surrounding heading or landmark structure).\n *\n * - `false` (default): host gets `aria-hidden=\"true\"`; AT skips the divider.\n * - `true`: host gets `role=\"separator\"` (suppressed if host is `<hr>`,\n * which has implicit role); when `kjOrientation='vertical'`, also gets\n * `aria-orientation=\"vertical\"`.\n */\n readonly kjStructural = input<boolean>(false);\n\n /**\n * Alignment of the projected content within a with-content divider.\n * Affects the with-content layout only; ignored when no content is present.\n * Reflects to `data-align`.\n */\n readonly kjAlign = input<KjDividerAlign>('center');\n\n /** Auto-detected from host child nodes (any text or element child). */\n protected readonly withContent = signal<boolean>(false);\n\n /** True when the host element is an `<hr>` (case-insensitive). */\n protected readonly isHr = signal<boolean>(false);\n\n protected readonly roleAttr = computed(() =>\n this.kjStructural() && !this.isHr() ? 'separator' : null,\n );\n\n protected readonly ariaOrientationAttr = computed(() =>\n this.kjStructural() && this.kjOrientation() === 'vertical' ? 'vertical' : null,\n );\n\n protected readonly ariaHiddenAttr = computed(() =>\n this.kjStructural() ? null : 'true',\n );\n\n constructor() {\n afterNextRender(() => {\n const host = this.el.nativeElement;\n this.isHr.set(host.tagName?.toLowerCase() === 'hr');\n // Detect with-content from any non-empty child nodes (text or elements).\n // Treat whitespace-only text nodes as no content so a multi-line template\n // with a self-closing-style divider doesn't accidentally light up.\n this.withContent.set(hasMeaningfulChildNodes(host));\n });\n }\n}\n\nfunction hasMeaningfulChildNodes(host: HTMLElement): boolean {\n const nodes = host.childNodes;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.nodeType === Node.ELEMENT_NODE) return true;\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.nodeValue ?? '';\n if (text.trim().length > 0) return true;\n }\n }\n return false;\n}\n","import { Directive, input } from '@angular/core';\n\n/**\n * Visual shape preset for a skeleton placeholder. Reflects to `data-shape`.\n */\nexport type KjSkeletonShape = 'rectangle' | 'circle' | 'text' | 'text-block';\n\n/**\n * Animation preset for a skeleton placeholder. Reflects to `data-animation`.\n */\nexport type KjSkeletonAnimation = 'shimmer' | 'pulse' | 'none';\n\n/**\n * Marks an element as a kouji skeleton — a decorative placeholder painted\n * while real content is loading. Forces `aria-hidden=\"true\"` on the host so\n * AT skips the placeholder (the *parent region* carries the loading\n * semantics, see [`skeleton.md`](./skeleton.md) § Accessibility), and\n * reflects `data-shape` / `data-animation` so theme CSS can pick the\n * chrome and animation. The directive owns no dimensions, no variant, no\n * size — sizing is consumer-driven and skeletons are tonally neutral by\n * design.\n *\n * @example\n * ```html\n * <span kjSkeleton kjSkeletonShape=\"text\" style=\"width: 12rem\"></span>\n * <div kjSkeleton kjSkeletonShape=\"circle\" style=\"width: 40px; height: 40px\"></div>\n * ```\n * @doc-category Core/Layout\n * @doc\n * @doc-name skeleton\n * @doc-description Marks an element as a decorative loading placeholder hidden from screen readers.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjSkeleton]',\n standalone: true,\n exportAs: 'kjSkeleton',\n host: {\n '[attr.aria-hidden]': '\"true\"',\n '[attr.data-shape]': 'kjSkeletonShape()',\n '[attr.data-animation]': 'kjSkeletonAnimation()',\n },\n})\nexport class KjSkeleton {\n /**\n * The visual shape of the skeleton. Reflects to `data-shape`. Defaults to\n * `'rectangle'`.\n */\n readonly kjSkeletonShape = input<KjSkeletonShape>('rectangle');\n\n /**\n * The animation style applied while the skeleton is on screen. Reflects to\n * `data-animation`. Defaults to `'shimmer'`.\n */\n readonly kjSkeletonAnimation = input<KjSkeletonAnimation>('shimmer');\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\nexport interface KjLinkConfig {\n variants: string[];\n sizes: string[];\n defaults: { variant: string; size: string };\n}\n\n/**\n * Default Link presets shipped by kouji-ui. Exported so consumers can spread\n * them when extending: `[...KJ_LINK_DEFAULTS.variants, 'brand']`.\n */\nexport const KJ_LINK_DEFAULTS: KjLinkConfig = {\n variants: ['primary', 'secondary', 'muted', 'destructive'],\n sizes: ['sm', 'md', 'lg', 'inherit'],\n defaults: { variant: 'primary', size: 'inherit' },\n};\n\n/**\n * DI token for the active Link presets. Default factory yields\n * `KJ_LINK_DEFAULTS`. Override via `provideKjLink(…)` at the application\n * scope (e.g. `bootstrapApplication`'s `providers` or a route's `providers`)\n * or at the component scope (a component's own `providers: […]`).\n */\nexport const KJ_LINK_CONFIG = new InjectionToken<KjLinkConfig>('kj.link.config', {\n factory: () => KJ_LINK_DEFAULTS,\n});\n\n/**\n * Configures the Link presets for the enclosing injector. Replaces (does not\n * merge) `variants` and `sizes`; spread `KJ_LINK_DEFAULTS.variants` to extend.\n *\n * Returns a `Provider[]` so it can be spread into either an environment\n * `providers` (`bootstrapApplication`, route config) or a component-level\n * `providers` array.\n */\nexport function provideKjLink(config: Partial<KjLinkConfig>): Provider[] {\n return [\n {\n provide: KJ_LINK_CONFIG,\n useValue: { ...KJ_LINK_DEFAULTS, ...config },\n },\n ];\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { KjFocusRing, KjDisabled } from '../primitives';\nimport { KjVariant, KjSize, bindPresets } from '../presets';\nimport { KJ_LINK_CONFIG } from './config';\n\n/** CSS class applied to the visually-hidden \"(opens in new tab)\" suffix span. */\nconst KJ_LINK_EXTERNAL_SUFFIX_CLASS = 'kj-link-external-suffix';\n\n/** AT suffix copy. English-only for v1; i18n is a v1.1 concern (see analysis §15). */\nconst KJ_LINK_EXTERNAL_SUFFIX_TEXT = '(opens in new tab)';\n\n/** Inline style string equivalent to `KjVisuallyHidden` — applied to the AT suffix span. */\nconst KJ_LINK_VISUALLY_HIDDEN_STYLE =\n 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0';\n\n/**\n * Enhances a native `<a>` (or any element used as a link) with kouji-ui\n * presets, focus-ring and disabled-link plumbing, and external-link\n * `rel` + AT suffix discipline.\n *\n * Composes `KjVariant`, `KjSize`, `KjFocusRing`, and `KjDisabled` via\n * `hostDirectives`. Variants and sizes are configurable via\n * `provideKjLink(…)`.\n *\n * Owns three behaviours that a CSS-only solution cannot deliver:\n *\n * 1. **External-link plumbing.** When `kjExternal` is `true` (or `undefined`\n * and the host carries `target=\"_blank\"`), the directive ensures `rel`\n * contains both `noopener` and `noreferrer` (additive — preserves any\n * consumer-supplied `rel` tokens like `nofollow`, `me`, `bookmark`) and\n * appends a visually-hidden `(opens in new tab)` `<span>` to the host's\n * accessible name. The suffix is suppressed when the consumer has set\n * their own `aria-label` (the consumer is presumed to have authored the\n * complete accessible name).\n *\n * 2. **Disabled-link bundle.** When `kjDisabled` is `true`, the directive\n * sets `aria-disabled=\"true\"`, `tabindex=\"-1\"`, and capture-phase\n * intercepts both `click` and `keydown.enter` to call `preventDefault()`\n * and `stopImmediatePropagation()`. Capture phase ensures the suppression\n * runs before any consumer-bound `(click)` handler and before Angular\n * Router's bubble-phase click handler — so `<a kjLink routerLink=\"/foo\"\n * [kjDisabled]=\"true\">` does not navigate either.\n *\n * 3. **Underline-mode reflection.** `kjUnderline: 'always' | 'hover' |\n * 'none'` reflects to `[attr.data-underline]` for the components-package\n * CSS to key off. The `kj-prose a` selector overrides only when the\n * directive's input is left at its default — explicit consumer values\n * win over the prose container's defaults.\n *\n * @example\n * ```html\n * <a kjLink href=\"/about\">Inline link</a>\n * <a kjLink href=\"https://example.com\" target=\"_blank\">External</a>\n * <a kjLink [kjDisabled]=\"!ready()\" routerLink=\"/billing\">Manage billing</a>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name link\n * @doc-description Adds disabled-link, external-link, and underline-mode handling to a native anchor.\n * @doc-is-main\n */\n@Directive({\n selector: 'a[kjLink], [kjLink]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n KjFocusRing,\n { directive: KjDisabled, inputs: ['kjDisabled'] },\n ],\n providers: [...bindPresets(KJ_LINK_CONFIG)],\n host: {\n '[attr.data-underline]': 'kjUnderline()',\n '[attr.data-external]': 'isExternal() ? \"true\" : null',\n '[attr.tabindex]': 'kjDisabled() ? \"-1\" : null',\n '[attr.rel]': 'relAttr()',\n },\n})\nexport class KjLink {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n\n /**\n * Disables the link. Forwarded to `KjDisabled` (which reflects\n * `aria-disabled` and `data-disabled`); the directive additionally sets\n * `tabindex=\"-1\"` and intercepts `click` + `keydown.enter` in the capture\n * phase.\n */\n readonly kjDisabled = input(false);\n\n /**\n * Underline policy. `'always'` for in-content links (WCAG 1.4.1 — colour\n * is not the only means); `'hover'` for standalone links sitting in a\n * group of links that already signals \"this is a link\" via layout;\n * `'none'` for the rare cases where the consumer wants to suppress the\n * underline entirely (e.g. icon-text links inside breadcrumb separators).\n * Reflects `[attr.data-underline]`.\n */\n readonly kjUnderline = input<'always' | 'hover' | 'none'>('hover');\n\n /**\n * External-link tri-state. `undefined` (default) auto-detects from the\n * host's `target` attribute (`target=\"_blank\"` → external). `true` forces\n * external treatment regardless of `target` (e.g. for cross-origin URLs\n * served through the app's router that still warrant the indicator).\n * `false` forces internal treatment even when `target=\"_blank\"` is\n * present (suppresses the icon and AT suffix).\n */\n readonly kjExternal = input<boolean | undefined>(undefined);\n\n /** Whether the host element currently carries `target=\"_blank\"`. */\n protected readonly hasBlankTarget = computed(() => this.targetSignal() === '_blank');\n\n /** Computed external state — explicit input wins, else target-based auto-detect. */\n protected readonly isExternal = computed(() => {\n const explicit = this.kjExternal();\n if (explicit !== undefined) return explicit;\n return this.hasBlankTarget();\n });\n\n /**\n * `rel` attribute computation. Additive: existing tokens (`nofollow`,\n * `me`, `bookmark`, …) are preserved; the directive only adds the missing\n * `noopener` / `noreferrer` security tokens when external. When not\n * external, the directive returns `null` so the consumer's literal `rel`\n * attribute (read at construction) is preserved as-is.\n */\n protected readonly relAttr = computed(() => {\n if (!this.isExternal()) return this.initialRel || null;\n const tokens = new Set<string>();\n if (this.initialRel) {\n for (const token of this.initialRel.split(/\\s+/u)) {\n if (token) tokens.add(token);\n }\n }\n tokens.add('noopener');\n tokens.add('noreferrer');\n return [...tokens].join(' ');\n });\n\n /**\n * Snapshot of the host's `target` attribute. Re-read after the host\n * renders — host bindings are evaluated synchronously on creation, so\n * the SSR HTML carries the right `[data-external]` / `[rel]` values\n * provided the consumer's `target` is set declaratively in the template\n * (the common case).\n */\n private readonly targetSignal = (() => {\n const initial = this.el.nativeElement.getAttribute('target');\n return computed(() => initial);\n })();\n\n /** Snapshot of the host's `rel` attribute at construction time. */\n private readonly initialRel: string | null = this.el.nativeElement.getAttribute('rel');\n\n /** Reference to the injected AT suffix span, if any. Cleaned up on toggle. */\n private suffixSpan: HTMLSpanElement | null = null;\n\n constructor() {\n // Capture-phase native listeners: fire BEFORE Angular's template-bound\n // bubble-phase (click) handlers and before Angular Router's bubble-phase\n // click handler on `<a routerLink>`, so `stopImmediatePropagation()`\n // actually prevents both navigation and any consumer (click) handlers.\n afterNextRender(() => {\n const node = this.el.nativeElement;\n\n const onClick = (event: Event) => {\n if (this.kjDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n\n const onKeydown = (event: KeyboardEvent) => {\n if (this.kjDisabled() && event.key === 'Enter') {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n\n node.addEventListener('click', onClick, { capture: true });\n node.addEventListener('keydown', onKeydown, { capture: true });\n });\n\n // External-link AT suffix injection. Runs reactively so the suffix\n // appears / disappears as `kjExternal` (or the host's `target`) changes.\n // The effect itself is created in injection context (constructor); its\n // first run happens after the first change-detection pass, by which\n // point the host element has been attached to the DOM in browser\n // contexts. Use injected DOCUMENT — prerender VMs may have no global `document`.\n effect(() => {\n const external = this.isExternal();\n const doc = this.document;\n if (!doc.createElement) return;\n\n const node = this.el.nativeElement;\n const consumerOwnsName = node.hasAttribute('aria-label');\n\n if (external && !consumerOwnsName) {\n if (!this.suffixSpan) {\n const span = doc.createElement('span');\n span.className = KJ_LINK_EXTERNAL_SUFFIX_CLASS;\n span.setAttribute('style', KJ_LINK_VISUALLY_HIDDEN_STYLE);\n // Leading space so AT reads \"Documentation (opens in new tab)\"\n // not \"Documentation(opens in new tab)\".\n span.textContent = ` ${KJ_LINK_EXTERNAL_SUFFIX_TEXT}`;\n node.appendChild(span);\n this.suffixSpan = span;\n }\n } else if (this.suffixSpan) {\n this.suffixSpan.remove();\n this.suffixSpan = null;\n }\n });\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\n/**\n * Configuration shape for the Breadcrumb directive family. Exposes preset\n * lists, default truncation policy, and the (mostly i18n-facing) labels the\n * directives reflect into the DOM.\n */\nexport interface KjBreadcrumbConfig {\n variants: string[];\n sizes: string[];\n defaults: {\n variant: string;\n size: string;\n /** `aria-label` on the root `<nav>` host element. */\n ariaLabel: string;\n /** Default separator glyph. */\n separator: string;\n /** Default `kjMaxItems`. `0` disables truncation. */\n maxItems: number;\n /** Default overflow mode. */\n overflow: 'truncate' | 'menu' | 'none';\n /** Default link variant for `KjBreadcrumbLink`. */\n linkVariant: string;\n /** Default link size for `KjBreadcrumbLink`. */\n linkSize: string;\n /** Default underline mode for `KjBreadcrumbLink`. */\n linkUnderline: 'always' | 'hover' | 'none';\n };\n /** Computes the `aria-label` for the `<nav>` when items are truncated. */\n truncatedAriaLabel: (visible: number, hidden: number) => string;\n /** Computes the `aria-label` for the ellipsis trigger button (menu mode). */\n ellipsisLabel: (hidden: number) => string;\n}\n\n/**\n * Default Breadcrumb presets shipped by kouji-ui. Exported so consumers can\n * spread when extending: `[...KJ_BREADCRUMB_DEFAULTS.sizes, 'xl']`.\n */\nexport const KJ_BREADCRUMB_DEFAULTS: KjBreadcrumbConfig = {\n variants: ['default'],\n sizes: ['sm', 'md', 'lg'],\n defaults: {\n variant: 'default',\n size: 'md',\n ariaLabel: 'Breadcrumb',\n separator: '/',\n maxItems: 4,\n overflow: 'truncate',\n linkVariant: 'muted',\n linkSize: 'sm',\n linkUnderline: 'hover',\n },\n truncatedAriaLabel: (_visible, hidden) =>\n hidden === 1 ? 'Breadcrumb (1 item hidden)' : `Breadcrumb (${hidden} items hidden)`,\n ellipsisLabel: (hidden) =>\n hidden === 1 ? 'Show 1 hidden breadcrumb' : `Show ${hidden} hidden breadcrumbs`,\n};\n\n/**\n * DI token for the active Breadcrumb presets. Default factory yields\n * `KJ_BREADCRUMB_DEFAULTS`. Override via `provideKjBreadcrumb(…)` at the\n * application or component scope.\n */\nexport const KJ_BREADCRUMB_CONFIG = new InjectionToken<KjBreadcrumbConfig>(\n 'kj.breadcrumb.config',\n { factory: () => KJ_BREADCRUMB_DEFAULTS },\n);\n\n/**\n * Configures the Breadcrumb presets / labels for the enclosing injector.\n * Shallow-merges over the defaults — pass only the fields you want to override.\n */\nexport function provideKjBreadcrumb(config: Partial<KjBreadcrumbConfig>): Provider[] {\n return [\n {\n provide: KJ_BREADCRUMB_CONFIG,\n useValue: {\n ...KJ_BREADCRUMB_DEFAULTS,\n ...config,\n defaults: { ...KJ_BREADCRUMB_DEFAULTS.defaults, ...(config.defaults ?? {}) },\n },\n },\n ];\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Public-facing token interface representing a registered crumb item. */\nexport interface KjBreadcrumbItemContext {\n /** Index of the item among registered items (0-based, document order). */\n readonly index: Signal<number>;\n /** Whether this item is currently the \"current page\" cell. */\n readonly current: Signal<boolean>;\n /** Whether this item is hidden by truncation. */\n readonly hidden: Signal<boolean>;\n}\n\n/** Public-facing token interface representing the root breadcrumb. */\nexport interface KjBreadcrumbContext {\n /** Configured separator glyph (or `undefined` to use the CSS default). */\n readonly separator: Signal<string | undefined>;\n /** `kjMaxItems` — `0` or `Infinity` disables truncation. */\n readonly maxItems: Signal<number>;\n /** Active overflow mode. */\n readonly overflow: Signal<'truncate' | 'menu' | 'none'>;\n /** Read-only count of registered items. */\n readonly itemCount: Signal<number>;\n /** Read-only count of registered explicit current cells. */\n readonly currentCount: Signal<number>;\n /** Indices that should render visibly. */\n readonly visibleIndices: Signal<readonly number[]>;\n /** Indices that should be hidden by truncation. */\n readonly hiddenIndices: Signal<readonly number[]>;\n /** Whether the consumer has rendered explicit `<li kjBreadcrumbSeparator>` cells. */\n readonly hasExplicitSeparators: Signal<boolean>;\n\n /** Register a freshly-created item directive; returns its assigned index signal. */\n registerItem(): KjBreadcrumbItemContext;\n /** Unregister an item directive (called from `ngOnDestroy`). */\n unregisterItem(item: KjBreadcrumbItemContext): void;\n /** Register / unregister an explicit current cell. */\n registerCurrent(): void;\n unregisterCurrent(): void;\n /** Register / unregister an explicit separator cell. */\n registerSeparator(): void;\n unregisterSeparator(): void;\n}\n\n/** Injection token for the root `KjBreadcrumb` directive context. */\nexport const KJ_BREADCRUMB = new InjectionToken<KjBreadcrumbContext>('KjBreadcrumb');\n","import {\n Directive,\n Signal,\n computed,\n effect,\n inject,\n input,\n isDevMode,\n signal,\n} from '@angular/core';\nimport { KjSize, bindPresets } from '../presets';\nimport { KJ_BREADCRUMB_CONFIG } from './config';\nimport {\n KJ_BREADCRUMB,\n KjBreadcrumbContext,\n KjBreadcrumbItemContext,\n} from './breadcrumb.context';\n\n/** @internal Internal entry stored in the items signal. */\ninterface KjBreadcrumbItemEntry {\n indexSignal: ReturnType<typeof signal<number>>;\n context?: KjBreadcrumbItemContext;\n}\n\n/**\n * Root of the Breadcrumb directive family. Owns the `<nav>` landmark, the\n * `aria-label`, the registered-items model, the truncation algorithm, and\n * the \"exactly one current crumb, last in document order\" invariant.\n *\n * Applied to a `<nav>` element. The selector restriction\n * (`nav[kjBreadcrumb]`) keeps the landmark's host element honest — attaching\n * `kjBreadcrumb` to a `<div>` will simply not match.\n *\n * Compose with `[kjBreadcrumbList]`, `[kjBreadcrumbItem]`, `[kjBreadcrumbLink]`,\n * and `[kjBreadcrumbCurrent]`. No styling is attached; `kjMaxItems` triggers\n * the ellipsis overflow strategy.\n *\n * @example\n * ```html\n * <nav kjBreadcrumb>\n * <ol kjBreadcrumbList>\n * <li kjBreadcrumbItem><a kjBreadcrumbLink href=\"/\">Home</a></li>\n * <li kjBreadcrumbItem><a kjBreadcrumbLink href=\"/library\">Library</a></li>\n * <li kjBreadcrumbItem><span kjBreadcrumbCurrent>Data</span></li>\n * </ol>\n * </nav>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name breadcrumb\n * @doc-description Unstyled breadcrumb root that owns the nav landmark, item registration, and truncation.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjBreadcrumb]',\n standalone: true,\n exportAs: 'kjBreadcrumb',\n hostDirectives: [{ directive: KjSize, inputs: ['kjSize'] }],\n providers: [\n { provide: KJ_BREADCRUMB, useExisting: KjBreadcrumb },\n ...bindPresets(KJ_BREADCRUMB_CONFIG),\n ],\n host: {\n '[attr.aria-label]': 'effectiveAriaLabel()',\n '[attr.data-overflow]': 'kjOverflow()',\n '[style.--kj-breadcrumb-separator-content]': 'separatorCss()',\n },\n})\nexport class KjBreadcrumb implements KjBreadcrumbContext {\n /** @internal */\n readonly config = inject(KJ_BREADCRUMB_CONFIG);\n\n /** Override for the `<nav>` `aria-label`. Defaults to `\"Breadcrumb\"`. */\n readonly kjAriaLabel = input<string | undefined>(undefined);\n\n /**\n * Separator glyph rendered by the CSS pseudo-element on each non-first\n * item. Defaults to `'/'`. When the consumer renders explicit\n * `<li kjBreadcrumbSeparator>` cells, the auto separator is suppressed.\n */\n readonly kjSeparator = input<string | undefined>(undefined);\n\n /**\n * Maximum number of items to render before truncation. Default `4`. Set\n * to `0` (or `Infinity`) to disable truncation regardless of item count.\n */\n readonly kjMaxItems = input<number>(this.config.defaults.maxItems);\n\n /**\n * Overflow strategy when item count exceeds `kjMaxItems`.\n *\n * - `'truncate'` (default): the ellipsis cell renders as plain `<span>`.\n * - `'menu'`: the ellipsis becomes a `<button>` (consumers wire a\n * `KjDropdownMenu` to expose the hidden crumbs).\n * - `'none'`: no truncation; all crumbs render.\n */\n readonly kjOverflow = input<'truncate' | 'menu' | 'none'>(this.config.defaults.overflow);\n\n // ── Registered children (item / current / separator counts) ─────────────\n private readonly _items = signal<readonly KjBreadcrumbItemEntry[]>([]);\n private readonly _currents = signal<number>(0);\n private readonly _separators = signal<number>(0);\n\n /** Read-only count of registered items. */\n readonly itemCount: Signal<number> = computed(() => this._items().length);\n\n /** Read-only count of registered explicit `KjBreadcrumbCurrent` cells. */\n readonly currentCount: Signal<number> = computed(() => this._currents());\n\n /** Whether the consumer has rendered explicit separator cells. */\n readonly hasExplicitSeparators: Signal<boolean> = computed(() => this._separators() > 0);\n\n /** The configured separator glyph (input wins over config default). */\n readonly separator: Signal<string | undefined> = computed(() => this.kjSeparator());\n\n /** Effective `kjMaxItems` exposed to descendants. */\n readonly maxItems: Signal<number> = computed(() => this.kjMaxItems());\n\n /** Effective overflow mode exposed to descendants. */\n readonly overflow: Signal<'truncate' | 'menu' | 'none'> = computed(() => this.kjOverflow());\n\n /** Indices that should render visibly. */\n readonly visibleIndices: Signal<readonly number[]> = computed(() => {\n const total = this._items().length;\n const max = this.kjMaxItems();\n if (total === 0) return [];\n if (this.kjOverflow() === 'none' || max <= 0 || !Number.isFinite(max) || total <= max) {\n return Array.from({ length: total }, (_, i) => i);\n }\n // First crumb + last (max - 2) crumbs visible (the rest collapse).\n const tailCount = Math.max(0, max - 2);\n const visible: number[] = [0];\n for (let i = total - tailCount; i < total; i++) {\n if (i > 0) visible.push(i);\n }\n return visible;\n });\n\n /** Indices hidden by truncation. */\n readonly hiddenIndices: Signal<readonly number[]> = computed(() => {\n const total = this._items().length;\n const visible = new Set(this.visibleIndices());\n const hidden: number[] = [];\n for (let i = 0; i < total; i++) {\n if (!visible.has(i)) hidden.push(i);\n }\n return hidden;\n });\n\n /**\n * The `aria-label` actually applied to the `<nav>`. When truncation is\n * active and overflow mode is `'truncate'`, the count of hidden items is\n * appended so AT users learn the truncation occurred.\n */\n protected readonly effectiveAriaLabel = computed(() => {\n const explicit = this.kjAriaLabel();\n const hidden = this.hiddenIndices().length;\n if (explicit) return explicit;\n if (hidden > 0 && this.kjOverflow() === 'truncate') {\n return this.config.truncatedAriaLabel(this.visibleIndices().length, hidden);\n }\n return this.config.defaults.ariaLabel;\n });\n\n /** CSS custom-property value for the separator (so the `::before` reads it). */\n protected readonly separatorCss = computed(() => {\n const sep = this.kjSeparator();\n return sep === undefined ? null : `'${sep.replace(/'/gu, \"\\\\'\")}'`;\n });\n\n constructor() {\n if (isDevMode()) {\n effect(() => {\n const total = this._items().length;\n const currents = this._currents();\n if (total === 0) return;\n if (currents > 1) {\n console.warn(\n `[kj] KjBreadcrumb: ${currents} KjBreadcrumbCurrent instances registered; expected 0 or 1. The first wins.`,\n );\n }\n });\n }\n }\n\n /** @internal */\n registerItem(): KjBreadcrumbItemContext {\n const indexSignal = signal<number>(this._items().length);\n const entry: KjBreadcrumbItemEntry = { indexSignal };\n this._items.update((arr) => [...arr, entry]);\n this._items().forEach((it, i) => it.indexSignal.set(i));\n\n const ctx: KjBreadcrumbItemContext = {\n index: indexSignal.asReadonly(),\n current: computed(() => this.computeItemCurrent(indexSignal())),\n hidden: computed(() => this.hiddenIndices().includes(indexSignal())),\n };\n entry.context = ctx;\n return ctx;\n }\n\n /** @internal */\n unregisterItem(item: KjBreadcrumbItemContext): void {\n this._items.update((arr) => arr.filter((e) => e.context !== item));\n this._items().forEach((it, i) => it.indexSignal.set(i));\n }\n\n /** @internal */\n registerCurrent(): void {\n this._currents.update((n) => n + 1);\n }\n\n /** @internal */\n unregisterCurrent(): void {\n this._currents.update((n) => Math.max(0, n - 1));\n }\n\n /** @internal */\n registerSeparator(): void {\n this._separators.update((n) => n + 1);\n }\n\n /** @internal */\n unregisterSeparator(): void {\n this._separators.update((n) => Math.max(0, n - 1));\n }\n\n /**\n * Auto-current rule: an item is current when it is the last item AND no\n * explicit `KjBreadcrumbCurrent` is registered anywhere in the tree.\n */\n private computeItemCurrent(index: number): boolean {\n const total = this._items().length;\n if (total === 0) return false;\n if (this._currents() > 0) return false;\n return index === total - 1;\n }\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { KJ_BREADCRUMB } from './breadcrumb.context';\n\n/**\n * The breadcrumb's ordered list. Selector restricted to `<ol>` to enforce\n * ordered-list semantics (a `<ul>` will not match).\n *\n * Reads the parent's `hasExplicitSeparators` and `overflow` signals to\n * reflect data attributes that key the CSS layer:\n * - `data-explicit-separators=\"\"` suppresses the auto pseudo-element.\n * - `data-overflow=\"truncate|menu|none\"` mirrors the root's overflow mode.\n * - `data-wrap=\"wrap|no-wrap|truncate\"` reflects this directive's wrap input.\n *\n * @example\n * ```html\n * <ol kjBreadcrumbList>…</ol>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Directive({\n selector: '[kjBreadcrumbList]',\n standalone: true,\n host: {\n '[attr.data-explicit-separators]': 'ctx.hasExplicitSeparators() ? \"\" : null',\n '[attr.data-overflow]': 'ctx.overflow()',\n '[attr.data-wrap]': 'kjWrap()',\n },\n})\nexport class KjBreadcrumbList {\n /** @internal */\n readonly ctx = inject(KJ_BREADCRUMB);\n\n /**\n * Wrapping policy. `'no-wrap'` keeps the row single-line (the truncation\n * does the long-path work); `'wrap'` allows the row to break across\n * lines; `'truncate'` reserved for future ellipsis-by-CSS support.\n */\n readonly kjWrap = input<'wrap' | 'no-wrap' | 'truncate'>('no-wrap');\n}\n","import { Directive, OnDestroy, inject } from '@angular/core';\nimport { KJ_BREADCRUMB, KjBreadcrumbItemContext } from './breadcrumb.context';\n\n/**\n * A single crumb cell. Registers itself with the parent breadcrumb on\n * construction (capturing its index) and exposes a `current` signal derived\n * from \"am I last + no explicit current cell?\".\n *\n * Selector restricted to `<li>` to keep the list semantics clean.\n *\n * @example\n * ```html\n * <li kjBreadcrumbItem>…</li>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Directive({\n selector: '[kjBreadcrumbItem]',\n standalone: true,\n host: {\n '[attr.data-hidden]': 'context.hidden() ? \"\" : null',\n '[attr.aria-current]': 'context.current() ? \"page\" : null',\n },\n})\nexport class KjBreadcrumbItem implements OnDestroy {\n private readonly root = inject(KJ_BREADCRUMB);\n\n /** Public context (index, current, hidden) for this item. */\n readonly context: KjBreadcrumbItemContext;\n\n constructor() {\n this.context = this.root.registerItem();\n }\n\n ngOnDestroy(): void {\n this.root.unregisterItem(this.context);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { KjLink } from '../link/link';\nimport { KJ_BREADCRUMB } from './breadcrumb.context';\n\n/**\n * Per-crumb anchor. Composes `KjLink` via `hostDirectives` so the per-crumb\n * `<a>` inherits external-link `rel` plumbing, focus-ring composition, and\n * disabled-link enforcement.\n *\n * The directive deliberately does **not** forward `KjLink`'s own inputs onto\n * its own selector — the components-package wrapper (`<kj-breadcrumb-link>`)\n * is the authoring surface for those, and consumers driving the directive\n * directly can apply `kjLink` inputs on the same element (since `KjLink` is\n * composed via `hostDirectives`, the inputs land on it through the host).\n *\n * The wrapper applies breadcrumb defaults: `muted` variant, `sm` size,\n * `hover` underline.\n *\n * @example\n * ```html\n * <a kjBreadcrumbLink href=\"/library\">Library</a>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Directive({\n selector: 'a[kjBreadcrumbLink], [kjBreadcrumbLink]',\n standalone: true,\n hostDirectives: [\n {\n directive: KjLink,\n inputs: ['kjUnderline', 'kjExternal', 'kjDisabled'],\n },\n ],\n host: {\n '[attr.data-breadcrumb-link]': '\"\"',\n },\n})\nexport class KjBreadcrumbLink {\n /** @internal */\n readonly ctx = inject(KJ_BREADCRUMB);\n}\n","import { Directive, OnDestroy, inject } from '@angular/core';\nimport { KJ_BREADCRUMB } from './breadcrumb.context';\n\n/**\n * The terminal \"current page\" cell. Emits `aria-current=\"page\"` and\n * registers with the parent so auto-current detection knows to step aside.\n *\n * The element is text — not focusable, not an anchor. Place inside the last\n * `<li kjBreadcrumbItem>` to mark the current page explicitly.\n *\n * @example\n * ```html\n * <span kjBreadcrumbCurrent>Data</span>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Directive({\n selector: 'span[kjBreadcrumbCurrent], [kjBreadcrumbCurrent]',\n standalone: true,\n host: {\n '[attr.aria-current]': '\"page\"',\n '[attr.data-breadcrumb-current]': '\"\"',\n },\n})\nexport class KjBreadcrumbCurrent implements OnDestroy {\n private readonly root = inject(KJ_BREADCRUMB);\n\n constructor() {\n this.root.registerCurrent();\n }\n\n ngOnDestroy(): void {\n this.root.unregisterCurrent();\n }\n}\n","import { Directive, OnDestroy, inject } from '@angular/core';\nimport { KJ_BREADCRUMB } from './breadcrumb.context';\n\n/**\n * Optional explicit separator cell. Used when a CSS pseudo-element will not\n * do — typically for an icon (SVG) separator that needs `currentColor`,\n * `width`, and `height` plumbing the pseudo-element cannot deliver.\n *\n * Registers with the parent so the auto separator (CSS `::before`) is\n * suppressed via the `data-explicit-separators=\"\"` attribute on the list.\n *\n * Selector restricted to `<li>` so the list semantics stay clean\n * (every direct child of `<ol>` must be `<li>`); the directive sets\n * `role=\"presentation\"` and `aria-hidden=\"true\"` so AT does not announce\n * the separator as a list item.\n *\n * @example\n * ```html\n * <li kjBreadcrumbSeparator><svg>…chevron…</svg></li>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Directive({\n selector: '[kjBreadcrumbSeparator]',\n standalone: true,\n host: {\n 'role': 'presentation',\n '[attr.aria-hidden]': '\"true\"',\n '[attr.data-breadcrumb-separator]': '\"\"',\n },\n})\nexport class KjBreadcrumbSeparator implements OnDestroy {\n private readonly root = inject(KJ_BREADCRUMB);\n\n constructor() {\n this.root.registerSeparator();\n }\n\n ngOnDestroy(): void {\n this.root.unregisterSeparator();\n }\n}\n","import {\n Directive,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KJ_BREADCRUMB } from './breadcrumb.context';\nimport { KJ_BREADCRUMB_CONFIG } from './config';\n\n/**\n * Overflow indicator rendered in place of truncated middle crumbs.\n *\n * - In `'truncate'` overflow mode: behaves like a static glyph,\n * `aria-hidden=\"true\"`.\n * - In `'menu'` overflow mode: an interactive cell with\n * `aria-haspopup=\"true\"`. Consumers wire a `KjDropdownMenu` to the host\n * to expose the hidden crumbs as menu items.\n *\n * Visible only when there are hidden crumbs (`ctx.hiddenIndices().length > 0`).\n * The host wrapper component conditionally renders the directive based on\n * this signal.\n *\n * @example\n * ```html\n * <li kjBreadcrumbItem><span kjBreadcrumbEllipsis>…</span></li>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name breadcrumb\n */\n@Directive({\n selector: '[kjBreadcrumbEllipsis]',\n standalone: true,\n hostDirectives: [KjFocusRing],\n host: {\n '[attr.aria-hidden]': 'isAriaHidden() ? \"true\" : null',\n '[attr.aria-label]': 'computedAriaLabel()',\n '[attr.aria-haspopup]': 'isMenu() ? \"true\" : null',\n '[attr.data-overflow]': 'ctx.overflow()',\n '[attr.data-hidden-count]': 'hiddenCount()',\n },\n})\nexport class KjBreadcrumbEllipsis {\n /** @internal */\n readonly ctx = inject(KJ_BREADCRUMB);\n private readonly config = inject(KJ_BREADCRUMB_CONFIG);\n\n /**\n * Mirrors a disabled bundle (currently advisory — the ellipsis menu\n * trigger composes `KjDropdownMenu` separately when wired by the\n * consumer).\n */\n readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Number of hidden crumbs the ellipsis represents. */\n readonly hiddenCount = computed(() => this.ctx.hiddenIndices().length);\n\n /** Whether the ellipsis is in menu (interactive) mode. */\n readonly isMenu = computed(() => this.ctx.overflow() === 'menu');\n\n /** Whether the ellipsis is purely decorative (truncate mode). */\n readonly isAriaHidden = computed(() => !this.isMenu());\n\n /** `aria-label` value — null in truncate mode (the cell is decorative). */\n readonly computedAriaLabel = computed(() =>\n this.isMenu() ? this.config.ellipsisLabel(this.hiddenCount()) : null,\n );\n}\n","import { InjectionToken, type Signal } from '@angular/core';\n\n/**\n * Surface a `[kjMenubarItem]` exposes to its parent `[kjMenubar]`.\n *\n * Keyboard navigation, roving tabindex, type-ahead and activation are all\n * owned by the composed list primitives (`KjListNavigator` + `KjListItem`),\n * so the context's surface is intentionally small.\n */\nexport interface KjMenubarItemContext {\n /** The bar item's host element. */\n readonly el: HTMLElement;\n /** Whether the item is disabled. */\n readonly disabled: Signal<boolean>;\n /** Whether this item's popup is currently open. */\n readonly open: Signal<boolean>;\n /** Open this item's submenu (if it has one). */\n openPopup(): void;\n /** Close this item's submenu. */\n closePopup(): void;\n}\n\n/**\n * Context provided by `[kjMenubar]` to all descendant `[kjMenubarItem]`s.\n */\nexport interface KjMenubarContext {\n /** The bar item whose popup is currently open, if any. */\n readonly openItem: Signal<KjMenubarItemContext | null>;\n /** Whether ArrowLeft / Right wraps at the bar ends. */\n readonly loop: Signal<boolean>;\n\n /** A bar item registers itself on construction. */\n registerItem(item: KjMenubarItemContext): void;\n /** A bar item unregisters itself on destruction. */\n unregisterItem(item: KjMenubarItemContext): void;\n /** A bar item reports that its popup opened. */\n notifyItemOpened(item: KjMenubarItemContext): void;\n /** A bar item reports that its popup closed. */\n notifyItemClosed(item: KjMenubarItemContext): void;\n}\n\n/** DI token for the menubar shared context. */\nexport const KJ_MENUBAR = new InjectionToken<KjMenubarContext>('KjMenubar');\n","import {\n Directive,\n Injector,\n booleanAttribute,\n contentChildren,\n effect,\n forwardRef,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n KJ_LIST_FOCUS_MODE,\n KJ_LIST_NAVIGATOR_CONFIG,\n KjListItem,\n KjListNavigator,\n KjTypeAhead,\n type KjCompareFn,\n type KjListFocusMode,\n type KjListNavigatorConfig,\n} from '../primitives/list';\nimport {\n KJ_MENUBAR,\n type KjMenubarContext,\n type KjMenubarItemContext,\n} from './menubar.context';\n\n/**\n * The application menubar — `role=\"menubar\"`, a horizontal row of top-level\n * menu disclosures (File / Edit / View / Help …). Each child\n * `[kjMenubarItem]` owns a submenu opened on activation.\n *\n * Composition:\n *\n * - Implements {@link KjListNavigatorConfig} (items + `afterSelect`) and\n * provides itself via `KJ_LIST_NAVIGATOR_CONFIG`.\n * - Composes `KjListNavigator` via `hostDirectives` so the navigator's\n * element-injector lives on the bar's host, giving `KjListItem`s under\n * the bar a navigator to register with.\n * - Forces `KJ_LIST_FOCUS_MODE = 'roving'` (host-directive inputs cannot\n * be defaulted from a composing directive — same workaround as\n * `KjDropdownMenuContent`). This makes `KjListItem.tabIndex` track the\n * navigator's active id.\n * - Provides `KjTypeAhead` so the navigator routes printable characters\n * to the matching bar item.\n * - The navigator's built-in keyboard handler defaults to vertical\n * orientation. Since defaulting host-directive inputs is impossible\n * from a composing directive, the menubar handles `ArrowLeft`,\n * `ArrowRight`, `Home`, `End`, `Escape` itself, delegating to\n * `KjListNavigator.moveBy / moveToFirst / moveToLast` — the navigator\n * remains the single source of truth for active id + skip-disabled.\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name menubar\n * @doc-description Unstyled application menubar with horizontal arrow-key navigation and roving focus.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjMenubar]',\n standalone: true,\n exportAs: 'kjMenubar',\n hostDirectives: [KjListNavigator],\n providers: [\n { provide: KJ_MENUBAR, useExisting: KjMenubar },\n { provide: KJ_LIST_NAVIGATOR_CONFIG, useExisting: forwardRef(() => KjMenubar) },\n {\n provide: KJ_LIST_FOCUS_MODE,\n useFactory: () => signal<KjListFocusMode>('roving'),\n },\n KjTypeAhead,\n ],\n host: {\n 'role': 'menubar',\n 'aria-orientation': 'horizontal',\n '[attr.aria-label]': 'kjAriaLabel() || null',\n '(keydown)': '_onKeydown($event)',\n '(focusin)': '_onFocusin($event)',\n },\n})\nexport class KjMenubar implements KjMenubarContext, KjListNavigatorConfig {\n /** When `true`, ArrowRight at the last item wraps to the first (and vice versa). */\n readonly kjLoop = input(false, { transform: booleanAttribute });\n readonly loop = this.kjLoop;\n\n /**\n * Deprecated. The pre-primitives bar shipped a \"roll-over\" hover auto-disclose\n * mode here; with the new composition, hover is opt-in per consumer (e.g. by\n * listening to `pointerenter` on `[kjMenubarItem]`). Kept as a no-op input\n * so existing template bindings don't break — remove in a major bump.\n * @deprecated\n */\n readonly kjAutoDisclose = input(true, { transform: booleanAttribute });\n\n /**\n * Deprecated. Roll-over dwell delay used by the old auto-disclose path —\n * unused in the primitives-based menubar. Kept as a no-op input to avoid\n * breaking existing template bindings.\n * @deprecated\n */\n readonly kjAutoDiscloseDelayMs = input(0, { transform: numberAttribute });\n\n /** Optional accessible name forwarded to the host as `aria-label`. */\n readonly kjAriaLabel = input<string | null>(null);\n\n /** Emits the bar item's id when its popup opens, or `null` when all are closed. */\n readonly kjOpenChange = output<string | null>();\n\n // ── KjListNavigatorConfig ────────────────────────────────────────────\n\n /** All `KjListItem`s composed by `KjMenubarItem` children. */\n readonly items = contentChildren(KjListItem, { descendants: true });\n /** No selection model on a menubar. Identity compare. */\n readonly compareBy = signal<KjCompareFn<unknown>>(Object.is as KjCompareFn<unknown>);\n\n /**\n * Required by `KjListNavigatorConfig`. The menubar has no selection\n * model and activation is wired item-side (`KjMenubarItem` subscribes\n * to its own composed `KjListItem.activate` and toggles its submenu)\n * because the bar's nav active id doesn't always identify the item\n * that was clicked (mouse click can fire before focusin). Kept as a\n * no-op stub to satisfy the contract.\n */\n afterSelect(_value: unknown, _closeRequested: boolean): void {\n /* no-op: each KjMenubarItem owns its own activation */\n }\n\n // ── KjMenubarContext ─────────────────────────────────────────────────\n\n private readonly _items = signal<KjMenubarItemContext[]>([]);\n /** @internal Used by `afterSelect` to resolve `KjListItem` ids back to bar items. */\n readonly _itemCtxs = this._items.asReadonly();\n\n private readonly _openItem = signal<KjMenubarItemContext | null>(null);\n readonly openItem = this._openItem.asReadonly();\n\n registerItem(item: KjMenubarItemContext): void {\n this._items.update((arr) => {\n if (arr.includes(item)) return arr;\n const next = [...arr, item];\n // Sort by DOM order so ArrowLeft / ArrowRight follow visual order\n // regardless of the order in which items happen to register.\n next.sort((a, b) => {\n const pos = a.el.compareDocumentPosition(b.el);\n if (pos & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (pos & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n return 0;\n });\n return next;\n });\n }\n\n unregisterItem(item: KjMenubarItemContext): void {\n this._items.update((arr) => arr.filter((i) => i !== item));\n if (this._openItem() === item) this._openItem.set(null);\n }\n\n notifyItemOpened(item: KjMenubarItemContext): void {\n const prev = this._openItem();\n if (prev && prev !== item) prev.closePopup();\n this._openItem.set(item);\n this.kjOpenChange.emit(item.el.id || null);\n }\n\n notifyItemClosed(item: KjMenubarItemContext): void {\n if (this._openItem() === item) {\n this._openItem.set(null);\n this.kjOpenChange.emit(null);\n }\n }\n\n // ── Keyboard ─────────────────────────────────────────────────────────\n\n /**\n * Horizontal navigation routes here because `KjListNavigator`'s\n * `kjOrientation` cannot be defaulted by a composing directive (it\n * stays at `'vertical'`, so its built-in ArrowLeft/Right would no-op).\n * `Home`, `End`, `Escape`, and `ArrowDown` (open submenu) are owned at\n * the menubar level too; `Enter` / `Space` reach the focused item's\n * `KjListItem._activate` directly and route through `afterSelect`.\n * Type-ahead is handled by the navigator via the provided `KjTypeAhead`\n * (printable keys → navigator's default handler matches haystacks).\n */\n protected _onKeydown(event: KeyboardEvent): void {\n const nav = this._nav();\n if (!nav) return;\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n this._move(nav, 1);\n return;\n case 'ArrowLeft':\n event.preventDefault();\n this._move(nav, -1);\n return;\n case 'Home':\n event.preventDefault();\n nav.moveToFirst();\n nav.activeItem()?._host()?.focus();\n return;\n case 'End':\n event.preventDefault();\n nav.moveToLast();\n nav.activeItem()?._host()?.focus();\n return;\n case 'ArrowDown': {\n // APG menubar: ArrowDown on a top-level item opens its submenu.\n const id = nav.activeId();\n if (!id) return;\n const ctx = this._items().find((c) => c.el.id === id);\n if (!ctx || ctx.disabled()) return;\n event.preventDefault();\n ctx.openPopup();\n return;\n }\n case 'Escape': {\n const open = this._openItem();\n if (!open) return;\n event.preventDefault();\n event.stopPropagation();\n open.closePopup();\n return;\n }\n }\n }\n\n /**\n * Wrap-aware move. `KjListNavigator.moveBy` always uses its own `kjWrap`\n * (default `true`), and that input can't be defaulted by a composing\n * directive — so the menubar clamps before delegating when `kjLoop()`\n * is `false`.\n */\n private _move(nav: KjListNavigator, delta: 1 | -1): void {\n if (!this.kjLoop()) {\n const navigable = this.items().filter((i) => !i.disabled());\n if (!navigable.length) return;\n const idx = navigable.findIndex((i) => i.id === nav.activeId());\n if (delta > 0 && idx >= navigable.length - 1) return;\n if (delta < 0 && idx <= 0) return;\n }\n nav.moveBy(delta);\n // Synchronously mirror the navigator's new active id into DOM focus.\n // The roving focus-follow effect (mounted in the constructor) also\n // does this, but with `vi.useFakeTimers({ toFake: ['queueMicrotask'] })`\n // active in the spec the effect can be deferred past the test's\n // assertion — drive focus here so keyboard navigation never depends\n // on microtask scheduling.\n nav.activeItem()?._host()?.focus();\n }\n\n /**\n * Keep the navigator's active id aligned with the actually-focused bar\n * item (e.g. user clicked on a different item, or Tabbed in). `focusin`\n * bubbles up to the menubar host, so we resolve which item caught\n * focus by walking up from the event target.\n */\n protected _onFocusin(event: FocusEvent): void {\n const target = event.target as HTMLElement | null;\n if (!target) return;\n const nav = this._nav();\n if (!nav) return;\n const item = this.items().find((i) => i._host() === target);\n if (item) nav.setActive(item.id);\n }\n\n // ── Navigator resolution + roving effects ────────────────────────────\n\n private readonly _injector = inject(Injector);\n private _navCache: KjListNavigator | null | undefined = undefined;\n private _nav(): KjListNavigator | null {\n if (this._navCache !== undefined) return this._navCache;\n this._navCache = this._injector.get(KjListNavigator, null, { self: true });\n return this._navCache;\n }\n\n constructor() {\n // Roving seed: set the navigator's active id to the first non-disabled\n // item so its `tabindex=0` makes the bar reachable by Tab on first\n // render (WAI-ARIA APG). Same pattern as `KjDropdownMenuContent`,\n // needed because `KjListNavigator`'s built-in seed gates on its\n // `kjFocusMode()` input (which defaults to `'activedescendant'` and\n // can't be defaulted from a composing directive).\n effect(() => {\n const nav = this._nav();\n if (!nav) return;\n const list = this.items();\n if (nav.activeId() !== null) return;\n const first = list.find((i) => !i.disabled());\n if (first) untracked(() => nav.setActive(first.id));\n });\n\n // Roving focus follow: mirror the navigator's `activeItem()` into DOM\n // focus. Same rationale as the seed — `KjListNavigator`'s built-in\n // focus-follow gates on its own `kjFocusMode()`.\n effect(() => {\n const nav = this._nav();\n if (!nav) return;\n const item = nav.activeItem();\n if (!item) return;\n const host = item._host();\n if (host && typeof document !== 'undefined' && document.activeElement !== host) {\n untracked(() => host.focus());\n }\n });\n }\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n Injector,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { KjListItem, injectListItem } from '../primitives/list';\nimport { KjOverlayController } from '../primitives/overlay/controller';\nimport { bodyPortal } from '../primitives/overlay/strategies/mount/body-portal';\nimport { anchoredTo } from '../primitives/overlay/strategies/position/anchored-to';\nimport { KJ_MENUBAR } from './menubar.context';\nimport type { KjMenubarItemContext } from './menubar.context';\n\nlet _menubarPanelId = 0;\n\n/**\n * A top-level item in a `[kjMenubar]` — `role=\"menuitem\"` with\n * `aria-haspopup=\"menu\"`. Composes `KjListItem` so id, click + Enter/Space\n * activation, `aria-disabled`, and (via the bar's `KjListNavigator` in\n * roving mode) `tabindex` are owned by the primitive layer.\n *\n * Optionally opens a submenu via `[kjDropdownMenuTriggerFor]` — a\n * `TemplateRef` pointing at a `[kjDropdownMenu]` panel. The bar's\n * `afterSelect` opens this item's submenu on activation.\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name menubar\n */\n@Directive({\n selector: '[kjMenubarItem]',\n standalone: true,\n exportAs: 'kjMenubarItem',\n hostDirectives: [\n { directive: KjListItem, inputs: ['kjDisabled:kjDisabled'] },\n ],\n providers: [KjOverlayController],\n host: {\n 'role': 'menuitem',\n 'aria-haspopup': 'menu',\n '[attr.aria-expanded]': 'open() ? \"true\" : \"false\"',\n '[attr.aria-controls]': 'panelId() || null',\n '[attr.data-state]': 'open() ? \"active\" : \"inactive\"',\n },\n})\nexport class KjMenubarItem implements KjMenubarItemContext {\n private readonly bar = inject(KJ_MENUBAR);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly vcr = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly controller = inject(KjOverlayController, { self: true });\n\n /** Disable the item. Reflects `aria-disabled`; popup never opens. */\n readonly kjDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * Template projecting the submenu panel. Activation renders the template\n * into a body portal anchored to this item's host element.\n */\n readonly kjDropdownMenuTriggerFor = input<TemplateRef<unknown> | null>(null);\n\n /**\n * Fires when the item is activated (click / Enter / Space), bridged from\n * the composed `KjListItem.activate` output. `KjListItem._activate` calls\n * `event.stopPropagation()` before this fires, so a `(click)` listener\n * placed on a parent element would not see the event — consumers wiring\n * an activation listener must use `(kjActivate)` instead.\n */\n readonly kjActivate = output<void>();\n\n // ── KjMenubarItemContext ─────────────────────────────────────────\n\n get el(): HTMLElement { return this.elRef.nativeElement; }\n readonly disabled = this.kjDisabled;\n readonly open = computed(() => this.controller.isOpen());\n readonly panelId = computed(() => this.controller.panelEl()?.id ?? null);\n\n private _view: EmbeddedViewRef<unknown> | null = null;\n private _strategiesReady = false;\n\n openPopup(): void {\n if (this.kjDisabled() || this.controller.isOpen()) return;\n if (!isPlatformBrowser(this.platformId)) return;\n const tpl = this.kjDropdownMenuTriggerFor();\n if (!tpl) return;\n this._ensurePanelMounted(tpl);\n this._ensureStrategiesAttached();\n this.controller.open();\n }\n\n closePopup(): void {\n if (this.controller.isOpen()) this.controller.close('programmatic');\n }\n\n constructor() {\n this.bar.registerItem(this);\n\n // Route this item's own activation (click / Enter / Space, surfaced\n // by the composed `KjListItem`) to its own submenu — the bar's\n // `afterSelect` only knows the currently-focused item, which doesn't\n // identify the item that was actually clicked (focus may not have\n // moved yet, e.g. mouse click before focusin handling).\n //\n // When `kjDropdownMenuTriggerFor` is unset the item owns no popup of\n // its own; skip the toggle entirely so that a sibling\n // `[kjDropdownMenuTrigger]` directive composed on the same element can\n // own the overlay state without us racing it. (Both directives provide\n // `KjOverlayController` and Angular merges them into a single per-\n // element instance — calling `controller.close()` here would\n // immediately undo the trigger's `open()` from the same click.)\n const listItem = injectListItem<unknown>();\n listItem.activate.subscribe(() => {\n this.kjActivate.emit();\n if (!this.kjDropdownMenuTriggerFor()) return;\n if (this.controller.isOpen()) this.closePopup();\n else this.openPopup();\n });\n\n // Mirror the controller's open/close state into the bar's tracker —\n // single source of truth for kjOpenChange and single-open invariant.\n // Tracked across two cycles so a stale 'closed' from before the first\n // open doesn't fire `notifyItemClosed` and clobber the bar's state.\n let last: boolean | null = null;\n effect(() => {\n const isOpen = this.controller.isOpen();\n if (last === isOpen) return;\n last = isOpen;\n if (isOpen) this.bar.notifyItemOpened(this);\n else this.bar.notifyItemClosed(this);\n // Tag the panel's overlay-surface marker only while open. The\n // body-portal mount strategy returns the panel to its original\n // parent on close — leaving `data-kj-overlay` on a hidden panel\n // would let test introspection + ARIA queries find a stale\n // \"open\" overlay that is in fact closed.\n const panel = this._panelRoot();\n if (panel) {\n if (isOpen) panel.setAttribute('data-kj-overlay', '');\n else panel.removeAttribute('data-kj-overlay');\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.bar.unregisterItem(this);\n try { this.controller.dispose(); } catch { /* already disposed */ }\n this._view?.destroy();\n this._view = null;\n });\n }\n\n // ── Internal — panel mount + strategy wiring ─────────────────────\n\n private _ensurePanelMounted(tpl: TemplateRef<unknown>): void {\n if (this._view) return;\n this._view = this.vcr.createEmbeddedView(tpl);\n this._view.detectChanges();\n const panel = this._panelRoot();\n if (!panel) return;\n // The projected `<div kjDropdownMenu>` is just a config provider — it\n // does not set `role=\"menu\"` (only the service-launched\n // `<kj-dropdown-menu-content>` does, via `KJ_OVERLAY_PANEL_ROLE`).\n // The menubar projects raw templates, so stamp the role + an id\n // here so consumers and `aria-controls` work out of the box.\n if (!panel.hasAttribute('role')) panel.setAttribute('role', 'menu');\n if (!panel.id) panel.id = `kj-menubar-panel-${++_menubarPanelId}`;\n this.controller.bindPanel(panel);\n }\n\n private _ensureStrategiesAttached(): void {\n if (this._strategiesReady) return;\n const triggerSig = signal<HTMLElement | null>(this.elRef.nativeElement);\n this.controller.bindTrigger(this.elRef.nativeElement);\n this.controller.attachStrategies({\n mount: bodyPortal(),\n position: anchoredTo({\n trigger: triggerSig,\n side: 'bottom',\n align: 'start',\n }),\n });\n this._strategiesReady = true;\n }\n\n private _panelRoot(): HTMLElement | null {\n if (!this._view) return null;\n for (const node of this._view.rootNodes) {\n if (node instanceof HTMLElement) return node;\n }\n return null;\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport type { KjLivePoliteness } from '../a11y/live-region';\n\n/**\n * Configuration shape for the Pagination directive family. Exposes preset\n * lists, default sliding-window sizes, and the (mostly i18n-facing) label\n * functions and templates the directives reflect into the DOM.\n */\nexport interface KjPaginationConfig {\n variants: string[];\n sizes: string[];\n defaults: {\n variant: string;\n size: string;\n siblingCount: number;\n boundaryCount: number;\n };\n /** `aria-label` on the root `<nav>` host element. */\n navigationLabel: string;\n /** `aria-label` on `KjPaginationPrevious` host. */\n previousLabel: string;\n /** `aria-label` on `KjPaginationNext` host. */\n nextLabel: string;\n /** `aria-label` on `KjPaginationFirst` host. */\n firstLabel: string;\n /** `aria-label` on `KjPaginationLast` host. */\n lastLabel: string;\n /** Visually-hidden text for the gap indicator's AT readout. */\n ellipsisLabel: string;\n /** Computes the per-item `aria-label` from `(page, totalPages)`. */\n pageItemLabel: (page: number, totalPages: number) => string;\n /** Renders the visible \"Page N of M\" text in `KjPaginationInfo`. */\n infoTemplate: (page: number, totalPages: number) => string;\n /** Live-region announcement template for page changes. */\n pageChangeAnnouncement: (page: number, totalPages: number) => string;\n /** ARIA politeness for the page-change live region. */\n pageChangeAnnouncementPoliteness: KjLivePoliteness;\n}\n\n/**\n * Default Pagination presets shipped by kouji-ui. Exported so consumers can\n * spread when extending: `[...KJ_PAGINATION_DEFAULTS.variants, 'brand']`.\n */\nexport const KJ_PAGINATION_DEFAULTS: KjPaginationConfig = {\n variants: ['default', 'outline', 'ghost'],\n sizes: ['xs', 'sm', 'md', 'lg'],\n defaults: { variant: 'default', size: 'md', siblingCount: 1, boundaryCount: 1 },\n navigationLabel: 'Pagination',\n previousLabel: 'Previous page',\n nextLabel: 'Next page',\n firstLabel: 'First page',\n lastLabel: 'Last page',\n ellipsisLabel: 'More pages',\n pageItemLabel: (page) => `Page ${page}`,\n infoTemplate: (page, totalPages) => `Page ${page} of ${totalPages}`,\n pageChangeAnnouncement: (page, totalPages) => `Page ${page} of ${totalPages}`,\n pageChangeAnnouncementPoliteness: 'polite',\n};\n\n/**\n * DI token for the active Pagination presets. Default factory yields\n * `KJ_PAGINATION_DEFAULTS`. Override via `provideKjPagination(…)` at the\n * application or component scope.\n */\nexport const KJ_PAGINATION_CONFIG = new InjectionToken<KjPaginationConfig>(\n 'kj.pagination.config',\n { factory: () => KJ_PAGINATION_DEFAULTS },\n);\n\n/**\n * Configures the Pagination presets / labels for the enclosing injector.\n * Shallow-merges over the defaults — pass only the fields you want to\n * override.\n */\nexport function provideKjPagination(config: Partial<KjPaginationConfig>): Provider[] {\n return [\n {\n provide: KJ_PAGINATION_CONFIG,\n useValue: { ...KJ_PAGINATION_DEFAULTS, ...config },\n },\n ];\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * A single token in the windowed page list produced by the page-token\n * algorithm. Numeric tokens render as page buttons (`KjPaginationItem`);\n * the two `'ellipsis-*'` variants are rendered as a `KjPaginationEllipsis`\n * gap indicator. The two ellipsis variants are kept distinct so Angular's\n * `@for (… ; track token)` can build stable, collision-free tracks.\n */\nexport type KjPageToken = number | 'ellipsis-left' | 'ellipsis-right';\n\n/**\n * Context exposed by `KjPagination` to its child directives\n * (`KjPaginationItem`, `KjPaginationPrevious`, `KjPaginationNext`,\n * `KjPaginationFirst`, `KjPaginationLast`, `KjPaginationEllipsis`,\n * `KjPaginationInfo`). Holds the page state, the algorithm output, the\n * boundary computeds, and the imperative navigation methods.\n *\n * Children are stateless reflectors of the root's state — every\n * derivation lives here so a single source of truth drives ARIA wiring,\n * `data-current` / `data-disabled` reflection, and the live-region\n * announcement.\n */\nexport interface KjPaginationContext {\n /** Current page (1-indexed). */\n readonly page: Signal<number>;\n /** Total number of pages. May be `0` (empty dataset). */\n readonly totalPages: Signal<number>;\n /** Output of the windowed page-token algorithm. */\n readonly pages: Signal<readonly KjPageToken[]>;\n /** True when the current page is `1` or the dataset is empty. */\n readonly isFirstPage: Signal<boolean>;\n /** True when the current page is `totalPages` or the dataset is empty. */\n readonly isLastPage: Signal<boolean>;\n /** Cascaded variant for children that did not set their own. */\n readonly variant: Signal<string>;\n /** Cascaded size for children that did not set their own. */\n readonly size: Signal<string>;\n /** Jump to a specific page (1-indexed); clamps to `[1, totalPages]`. */\n goToPage(page: number): void;\n /** Jump to page 1. No-op when already on page 1 / empty dataset. */\n goToFirst(): void;\n /** Jump to the last page. No-op when already there / empty dataset. */\n goToLast(): void;\n /** Advance one page. No-op when on the last page. */\n goToNext(): void;\n /** Retreat one page. No-op when on the first page. */\n goToPrevious(): void;\n}\n\n/** Injection token for the root `KjPagination` directive context. */\nexport const KJ_PAGINATION = new InjectionToken<KjPaginationContext>('KjPagination');\n","import type { KjPageToken } from './pagination.context';\n\n/**\n * Computes the windowed list of page tokens for a paginator.\n *\n * Given a `current` page (1-indexed), a `total` count, the `siblings`\n * count (pages adjacent to `current` on each side), and the `boundary`\n * count (pages anchored at the start and end), produces the array of\n * stable tokens that drives the rendered list — for example\n * `[1, 'ellipsis-left', 4, 5, 6, 'ellipsis-right', 10]`.\n *\n * Edge cases handled:\n *\n * - `total <= 0` → returns `[]` (the empty-dataset state).\n * - `boundary*2 + siblings*2 + 3 >= total` → no ellipses, every page\n * number rendered (small datasets).\n * - `current` near `1` → only the right ellipsis appears; the left\n * sibling window meets the boundary directly.\n * - `current` near `total` → mirror case; only the left ellipsis appears.\n * - `current` in the middle → both ellipses appear.\n * - Degenerate `siblings = 0` and/or `boundary = 0` are valid; the\n * sibling window collapses to `[current]` and the boundary anchors\n * disappear, with ellipses bridging whatever gap remains.\n *\n * @internal\n */\nexport function computePageTokens(\n current: number,\n total: number,\n siblings: number,\n boundary: number,\n): readonly KjPageToken[] {\n if (total <= 0) return [];\n\n const safeBoundary = Math.max(0, boundary);\n const safeSiblings = Math.max(0, siblings);\n const safeCurrent = Math.min(Math.max(1, current), total);\n\n // Total pages renderable without ellipses:\n // boundary + 1 (left ellipsis or filler) + (siblings*2 + 1) + 1 (right ellipsis) + boundary\n const totalNumbers = safeBoundary * 2 + safeSiblings * 2 + 3;\n\n if (totalNumbers >= total) {\n // No ellipses needed — render every page.\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const leftSiblingIndex = Math.max(safeCurrent - safeSiblings, safeBoundary + 2);\n const rightSiblingIndex = Math.min(safeCurrent + safeSiblings, total - safeBoundary - 1);\n const showLeftEllipsis = leftSiblingIndex > safeBoundary + 2;\n const showRightEllipsis = rightSiblingIndex < total - safeBoundary - 1;\n\n const tokens: KjPageToken[] = [];\n\n // Left boundary anchor.\n for (let i = 1; i <= safeBoundary; i++) tokens.push(i);\n\n if (!showLeftEllipsis) {\n // Sibling window meets the boundary — fill the gap with numbers.\n for (let i = safeBoundary + 1; i < leftSiblingIndex; i++) tokens.push(i);\n } else {\n tokens.push('ellipsis-left');\n }\n\n // Sibling window.\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) tokens.push(i);\n\n if (!showRightEllipsis) {\n for (let i = rightSiblingIndex + 1; i < total - safeBoundary + 1; i++) tokens.push(i);\n } else {\n tokens.push('ellipsis-right');\n }\n\n // Right boundary anchor.\n for (let i = total - safeBoundary + 1; i <= total; i++) tokens.push(i);\n\n return tokens;\n}\n","import {\n Directive,\n ElementRef,\n Signal,\n WritableSignal,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n isDevMode,\n linkedSignal,\n output,\n untracked,\n} from '@angular/core';\nimport { bindPresets } from '../presets';\nimport { KJ_PAGINATION_CONFIG } from './config';\nimport {\n KJ_PAGINATION,\n KjPageToken,\n KjPaginationContext,\n} from './pagination.context';\nimport { computePageTokens } from './page-tokens';\n\n/**\n * Root of the Pagination directive family. Owns the page-state model\n * (`kjPage`, `kjTotalPages`), the sliding-window algorithm\n * (`kjSiblingCount`, `kjBoundaryCount`), the `pages` computed, the\n * boundary-state computeds (`isFirstPage`, `isLastPage`), and a polite\n * live-region announcement on every page change. Provides\n * {@link KJ_PAGINATION} to descendants for ARIA wiring and selection\n * coordination.\n *\n * Applied to a `<nav>` element. Hosts `aria-label=\"Pagination\"` (the\n * navigation landmark's accessible name; configurable via\n * `KJ_PAGINATION_CONFIG.navigationLabel`).\n *\n * Page numbers are **1-indexed** and `kjPage` is clamped to\n * `[1, kjTotalPages()]` on every write. Out-of-range writes warn in dev\n * mode and silently clamp.\n *\n * @example\n * ```html\n * <nav kjPagination [(kjPage)]=\"page\" [kjTotalPages]=\"10\">\n * <button kjButton kjPaginationPrevious>Previous</button>\n * @for (token of pagination.pages(); track token) {\n * @if (token === 'ellipsis-left' || token === 'ellipsis-right') {\n * <span kjPaginationEllipsis>…</span>\n * } @else {\n * <button kjButton kjPaginationItem [kjPage]=\"token\">{{ token }}</button>\n * }\n * }\n * <button kjButton kjPaginationNext>Next</button>\n * </nav>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name pagination\n * @doc-description Unstyled pagination root that exposes the page model and announces page changes politely.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjPagination]',\n standalone: true,\n exportAs: 'kjPagination',\n providers: [\n { provide: KJ_PAGINATION, useExisting: KjPagination },\n ...bindPresets(KJ_PAGINATION_CONFIG),\n ],\n host: {\n '[attr.aria-label]': 'config.navigationLabel',\n '[attr.data-page]': 'page()',\n '[attr.data-total-pages]': 'totalPages()',\n },\n})\nexport class KjPagination implements KjPaginationContext {\n /** @internal */\n readonly config = inject(KJ_PAGINATION_CONFIG);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Current page (1-indexed). Two-way bound — the canonical surface is\n * `[(kjPage)]`. Out-of-range writes are clamped to `[1, kjTotalPages()]`\n * with a dev-mode console warning.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename -- alias keeps the public `kjPage` name distinct from this internal linkedSignal-backed property\n readonly kjPageInput = input<number>(1, { alias: 'kjPage' });\n readonly kjPage: WritableSignal<number> = linkedSignal(this.kjPageInput);\n\n /** Total number of pages. May be `0` (empty dataset). */\n readonly kjTotalPages = input.required<number>();\n\n /**\n * Pages adjacent to the current page on each side. Default `1`, so the\n * window includes `[current-1, current, current+1]`. `0` collapses the\n * window to `[current]`.\n */\n readonly kjSiblingCount = input<number>(this.config.defaults.siblingCount);\n\n /**\n * Pages anchored at the start and end. Default `1`, so `[1]` and\n * `[totalPages]` are always visible. `0` removes the boundary anchors.\n */\n readonly kjBoundaryCount = input<number>(this.config.defaults.boundaryCount);\n\n /**\n * Cascaded variant for child items / boundary controls that did not set\n * their own. Forwarded to each child's `KjVariant` host directive via\n * the `KJ_PAGINATION` context.\n */\n readonly kjVariant = input<string>(this.config.defaults.variant);\n\n /** Cascaded size for child items / boundary controls. */\n readonly kjSize = input<string>(this.config.defaults.size);\n\n /**\n * Page-change output. Mirrors `kjPage` writes; emitted whenever the\n * model value settles after a clamp / boundary navigation / item click.\n */\n readonly kjPageChange = output<number>();\n\n /** Read-only view of the current page. */\n readonly page: Signal<number> = computed(() => this.kjPage());\n\n /** Read-only view of the total page count. */\n readonly totalPages: Signal<number> = computed(() => this.kjTotalPages());\n\n /** Cascaded variant exposed via context for children. */\n readonly variant: Signal<string> = computed(() => this.kjVariant());\n\n /** Cascaded size exposed via context for children. */\n readonly size: Signal<string> = computed(() => this.kjSize());\n\n /** Output of the windowed page-token algorithm. */\n readonly pages: Signal<readonly KjPageToken[]> = computed(() =>\n computePageTokens(\n this.kjPage(),\n this.kjTotalPages(),\n this.kjSiblingCount(),\n this.kjBoundaryCount(),\n ),\n );\n\n /** True on page 1, or whenever the dataset is empty. */\n readonly isFirstPage: Signal<boolean> = computed(\n () => this.kjTotalPages() <= 0 || this.kjPage() <= 1,\n );\n\n /** True on the last page, or whenever the dataset is empty. */\n readonly isLastPage: Signal<boolean> = computed(\n () => this.kjTotalPages() <= 0 || this.kjPage() >= this.kjTotalPages(),\n );\n\n /** The visually-hidden live-region span injected at construction. */\n private liveRegion: HTMLSpanElement | null = null;\n\n constructor() {\n // Clamp out-of-range writes. The model can settle on a clamped value\n // in a single re-run — the effect is idempotent because clamping a\n // value that is already in-range is a no-op write that signals reject.\n effect(() => {\n const total = this.kjTotalPages();\n const v = this.kjPage();\n if (total <= 0) {\n // Empty dataset: lock to 1 so consumer state is well-defined; do\n // not emit page-change for the lock-in itself.\n if (v !== 1) untracked(() => this.kjPage.set(1));\n return;\n }\n if (v < 1) {\n if (isDevMode()) {\n console.warn(\n `[kj] kjPage=${v} is out of range; clamping to 1.`,\n );\n }\n untracked(() => this.kjPage.set(1));\n } else if (v > total) {\n if (isDevMode()) {\n console.warn(\n `[kj] kjPage=${v} exceeds kjTotalPages=${total}; clamping to ${total}.`,\n );\n }\n untracked(() => this.kjPage.set(total));\n }\n });\n\n // Emit kjPageChange on every settled page write. The output mirrors\n // the model so consumers using the explicit `(kjPageChange)` shape get\n // the same value regardless of whether the change came from a click,\n // a programmatic write, or the clamp.\n let lastEmitted: number | null = null;\n effect(() => {\n const v = this.kjPage();\n const total = this.kjTotalPages();\n // Skip emit while the value is mid-clamp — re-run will catch the\n // settled value on the next tick.\n if (total > 0 && (v < 1 || v > total)) return;\n if (v !== lastEmitted) {\n lastEmitted = v;\n this.kjPageChange.emit(v);\n }\n });\n\n // Inject the live region once the host has rendered. Polite by\n // default; the live region survives focus changes so AT users hear\n // \"Page 5 of 10\" even if the click moved focus elsewhere.\n afterNextRender(() => {\n if (typeof document === 'undefined') return;\n const span = document.createElement('span');\n span.setAttribute('aria-live', this.config.pageChangeAnnouncementPoliteness);\n span.setAttribute('aria-atomic', 'true');\n span.setAttribute('data-kj-pagination-live', '');\n span.setAttribute(\n 'style',\n 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0',\n );\n this.el.nativeElement.appendChild(span);\n this.liveRegion = span;\n });\n\n // Live-region announcement effect lives in injection context. The\n // first reactive run primes `lastAnnounced` so the initial render\n // does not produce a spurious announcement; subsequent changes\n // re-emit the configured template into the visually-hidden region.\n let lastAnnounced: number | null = null;\n effect(() => {\n const page = this.kjPage();\n const total = this.kjTotalPages();\n if (total > 0 && (page < 1 || page > total)) return;\n if (lastAnnounced === null) {\n lastAnnounced = page;\n return;\n }\n if (lastAnnounced === page) return;\n lastAnnounced = page;\n if (!this.liveRegion) return;\n // Brief clear-then-set so AT consistently picks up the change\n // even when the same string is announced repeatedly (e.g. on a\n // single-page dataset where every \"click\" yields \"Page 1 of 1\").\n const region = this.liveRegion;\n const message = this.config.pageChangeAnnouncement(page, total);\n region.textContent = '';\n // queueMicrotask makes the clear paint before the set; AT pickup\n // is more reliable than two synchronous writes back-to-back.\n queueMicrotask(() => {\n // Guard against the directive being torn down between writes.\n if (this.liveRegion === region) region.textContent = message;\n });\n });\n }\n\n /** Jump to a specific page. Clamped to `[1, totalPages]`. */\n goToPage(page: number): void {\n const total = this.kjTotalPages();\n if (total <= 0) return;\n const clamped = Math.min(Math.max(1, page), total);\n if (this.kjPage() !== clamped) this.kjPage.set(clamped);\n }\n\n /** Jump to page 1. */\n goToFirst(): void {\n if (this.kjTotalPages() <= 0) return;\n if (this.kjPage() !== 1) this.kjPage.set(1);\n }\n\n /** Jump to the last page. */\n goToLast(): void {\n const total = this.kjTotalPages();\n if (total <= 0) return;\n if (this.kjPage() !== total) this.kjPage.set(total);\n }\n\n /** Advance one page. No-op on the last page. */\n goToNext(): void {\n const total = this.kjTotalPages();\n if (total <= 0) return;\n const next = this.kjPage() + 1;\n if (next <= total) this.kjPage.set(next);\n }\n\n /** Retreat one page. No-op on page 1. */\n goToPrevious(): void {\n if (this.kjTotalPages() <= 0) return;\n const prev = this.kjPage() - 1;\n if (prev >= 1) this.kjPage.set(prev);\n }\n}\n","import { Directive, computed, inject, input } from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KjVariant, KjSize } from '../presets';\nimport { KJ_PAGINATION } from './pagination.context';\nimport { KJ_PAGINATION_CONFIG } from './config';\n\n/**\n * Per-page button within a `KjPagination`. Apply to `<button>` (in-page\n * state) or `<a>` (routing variant). Reflects `aria-current=\"page\"` /\n * `data-current=\"true\"` when the item's `kjPage` matches the parent's\n * current page; the directive is tag-agnostic.\n *\n * Click on an enabled item calls the parent's `goToPage(kjPage())`. The\n * directive does not call `preventDefault()` — when the host is an `<a>`\n * with `routerLink`, the route change is the navigation and the model\n * write either follows from the URL-driven binding or from this click.\n *\n * @example\n * ```html\n * <button kjButton kjPaginationItem [kjPage]=\"3\">3</button>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name pagination\n */\n@Directive({\n selector: '[kjPaginationItem]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n KjFocusRing,\n ],\n host: {\n '[attr.aria-current]': 'isCurrent() ? \"page\" : null',\n '[attr.data-current]': 'isCurrent() ? \"true\" : \"false\"',\n '[attr.aria-disabled]': 'kjDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'kjDisabled() ? \"\" : null',\n '[attr.aria-label]': 'ariaLabel()',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjPaginationItem {\n /** @internal */\n readonly pagination = inject(KJ_PAGINATION);\n private readonly config = inject(KJ_PAGINATION_CONFIG);\n\n /**\n * Page number this item navigates to (1-indexed). Required — the\n * directive cannot reflect `aria-current` or wire its click without\n * knowing which page it represents.\n */\n readonly kjPage = input.required<number>();\n\n /**\n * Per-item disabled state. Composes the boundary-style disabled bundle\n * (capture-phase click suppression) so consumer-driven \"this page is\n * loading and cannot be re-clicked\" affordances work consistently with\n * Previous / Next / First / Last.\n */\n readonly kjDisabled = input<boolean>(false);\n\n /** Whether this item represents the currently active page. */\n readonly isCurrent = computed(() => this.pagination.page() === this.kjPage());\n\n /** Computed `aria-label` string. */\n readonly ariaLabel = computed(() =>\n this.config.pageItemLabel(this.kjPage(), this.pagination.totalPages()),\n );\n\n /** @internal */\n onClick(event: Event): void {\n if (this.kjDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n this.pagination.goToPage(this.kjPage());\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n computed,\n inject,\n} from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KjVariant, KjSize } from '../presets';\nimport { KJ_PAGINATION } from './pagination.context';\nimport { KJ_PAGINATION_CONFIG } from './config';\n\n/**\n * Boundary control that retreats one page. Disabled (via `aria-disabled`,\n * not the native `disabled` attribute) when the parent is on the first\n * page or the dataset is empty. Stays in the focus ring even when\n * disabled (`tabindex=\"0\"`) — matches Button's `disabledInteractive`\n * stance so AT users discover the control and learn it is currently\n * inactive (kouji's WCAG 2.1 AAA stance).\n *\n * @example\n * ```html\n * <button kjButton kjPaginationPrevious>Previous</button>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name pagination\n */\n@Directive({\n selector: '[kjPaginationPrevious]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n KjFocusRing,\n ],\n host: {\n '[attr.aria-label]': 'config.previousLabel',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '[attr.tabindex]': '\"0\"',\n '[attr.data-pagination-action]': '\"previous\"',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjPaginationPrevious {\n /** @internal */\n readonly pagination = inject(KJ_PAGINATION);\n /** @internal */\n readonly config = inject(KJ_PAGINATION_CONFIG);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** True when the parent is on page 1 or the dataset is empty. */\n readonly isDisabled = computed(() => this.pagination.isFirstPage());\n\n constructor() {\n // Capture-phase listeners fire before any consumer template-bound\n // (click) / (keydown) handler and before native button activation,\n // so the suppression actually prevents downstream navigation.\n afterNextRender(() => {\n const node = this.el.nativeElement;\n const block = (event: Event) => {\n if (this.isDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n const blockKey = (event: KeyboardEvent) => {\n if (!this.isDisabled()) return;\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n node.addEventListener('click', block, { capture: true });\n node.addEventListener('keydown', blockKey, { capture: true });\n });\n }\n\n /** @internal */\n onClick(event: Event): void {\n if (this.isDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n this.pagination.goToPrevious();\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n computed,\n inject,\n} from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KjVariant, KjSize } from '../presets';\nimport { KJ_PAGINATION } from './pagination.context';\nimport { KJ_PAGINATION_CONFIG } from './config';\n\n/**\n * Boundary control that advances one page. Mirror of\n * {@link KjPaginationPrevious}: disabled (via `aria-disabled`, not the\n * native `disabled` attribute) when the parent is on the last page or\n * the dataset is empty; remains in the focus ring (`tabindex=\"0\"`) even\n * when disabled.\n *\n * @example\n * ```html\n * <button kjButton kjPaginationNext>Next</button>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name pagination\n */\n@Directive({\n selector: '[kjPaginationNext]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n KjFocusRing,\n ],\n host: {\n '[attr.aria-label]': 'config.nextLabel',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '[attr.tabindex]': '\"0\"',\n '[attr.data-pagination-action]': '\"next\"',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjPaginationNext {\n /** @internal */\n readonly pagination = inject(KJ_PAGINATION);\n /** @internal */\n readonly config = inject(KJ_PAGINATION_CONFIG);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** True when the parent is on the last page or the dataset is empty. */\n readonly isDisabled = computed(() => this.pagination.isLastPage());\n\n constructor() {\n afterNextRender(() => {\n const node = this.el.nativeElement;\n const block = (event: Event) => {\n if (this.isDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n const blockKey = (event: KeyboardEvent) => {\n if (!this.isDisabled()) return;\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n node.addEventListener('click', block, { capture: true });\n node.addEventListener('keydown', blockKey, { capture: true });\n });\n }\n\n /** @internal */\n onClick(event: Event): void {\n if (this.isDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n this.pagination.goToNext();\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n computed,\n inject,\n} from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KjVariant, KjSize } from '../presets';\nimport { KJ_PAGINATION } from './pagination.context';\nimport { KJ_PAGINATION_CONFIG } from './config';\n\n/**\n * Boundary control that jumps to page 1. Disabled when the parent is\n * already on the first page or the dataset is empty; remains focusable\n * (`tabindex=\"0\"`) so AT users can still discover the control.\n *\n * @example\n * ```html\n * <button kjButton kjPaginationFirst>«</button>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name pagination\n */\n@Directive({\n selector: '[kjPaginationFirst]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n KjFocusRing,\n ],\n host: {\n '[attr.aria-label]': 'config.firstLabel',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '[attr.tabindex]': '\"0\"',\n '[attr.data-pagination-action]': '\"first\"',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjPaginationFirst {\n /** @internal */\n readonly pagination = inject(KJ_PAGINATION);\n /** @internal */\n readonly config = inject(KJ_PAGINATION_CONFIG);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** True when on page 1 or the dataset is empty. */\n readonly isDisabled = computed(() => this.pagination.isFirstPage());\n\n constructor() {\n afterNextRender(() => {\n const node = this.el.nativeElement;\n const block = (event: Event) => {\n if (this.isDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n const blockKey = (event: KeyboardEvent) => {\n if (!this.isDisabled()) return;\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n node.addEventListener('click', block, { capture: true });\n node.addEventListener('keydown', blockKey, { capture: true });\n });\n }\n\n /** @internal */\n onClick(event: Event): void {\n if (this.isDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n this.pagination.goToFirst();\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n computed,\n inject,\n} from '@angular/core';\nimport { KjFocusRing } from '../primitives';\nimport { KjVariant, KjSize } from '../presets';\nimport { KJ_PAGINATION } from './pagination.context';\nimport { KJ_PAGINATION_CONFIG } from './config';\n\n/**\n * Boundary control that jumps to the last page. Mirror of\n * {@link KjPaginationFirst}: disabled when the parent is already on the\n * last page or the dataset is empty; remains focusable (`tabindex=\"0\"`)\n * even when disabled.\n *\n * @example\n * ```html\n * <button kjButton kjPaginationLast>»</button>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name pagination\n */\n@Directive({\n selector: '[kjPaginationLast]',\n standalone: true,\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n KjFocusRing,\n ],\n host: {\n '[attr.aria-label]': 'config.lastLabel',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '[attr.tabindex]': '\"0\"',\n '[attr.data-pagination-action]': '\"last\"',\n '(click)': 'onClick($event)',\n },\n})\nexport class KjPaginationLast {\n /** @internal */\n readonly pagination = inject(KJ_PAGINATION);\n /** @internal */\n readonly config = inject(KJ_PAGINATION_CONFIG);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** True when on the last page or the dataset is empty. */\n readonly isDisabled = computed(() => this.pagination.isLastPage());\n\n constructor() {\n afterNextRender(() => {\n const node = this.el.nativeElement;\n const block = (event: Event) => {\n if (this.isDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n const blockKey = (event: KeyboardEvent) => {\n if (!this.isDisabled()) return;\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n node.addEventListener('click', block, { capture: true });\n node.addEventListener('keydown', blockKey, { capture: true });\n });\n }\n\n /** @internal */\n onClick(event: Event): void {\n if (this.isDisabled()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n this.pagination.goToLast();\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n inject,\n} from '@angular/core';\nimport { KJ_PAGINATION_CONFIG } from './config';\n\n/** Inline style equivalent to `KjVisuallyHidden` — used for the AT label child span. */\nconst KJ_VISUALLY_HIDDEN_STYLE =\n 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0';\n\n/**\n * Gap indicator within a `KjPagination`. Apply to a `<span>`. The visible\n * `…` glyph is decorative and marked `aria-hidden=\"true\"`; the directive\n * appends a visually-hidden child span carrying the configured ellipsis\n * label (default `\"More pages\"`) so AT users hear a meaningful readout\n * (WCAG 1.3.1 — the ellipsis carries information, so it must have a\n * text equivalent).\n *\n * The host span itself is **not** `aria-hidden`; only the glyph wrapper\n * inside it is. This way the visually-hidden label survives in the AT\n * tree.\n *\n * @example\n * ```html\n * <span kjPaginationEllipsis>…</span>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name pagination\n */\n@Directive({\n selector: '[kjPaginationEllipsis]',\n standalone: true,\n host: {\n '[attr.data-pagination-ellipsis]': '\"\"',\n },\n})\nexport class KjPaginationEllipsis {\n /** @internal */\n readonly config = inject(KJ_PAGINATION_CONFIG);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n afterNextRender(() => {\n if (typeof document === 'undefined') return;\n\n const host = this.el.nativeElement;\n\n // Wrap any existing visible glyph children in a `aria-hidden=\"true\"`\n // span so the glyph is hidden from AT but visible to sighted users.\n const glyphWrapper = document.createElement('span');\n glyphWrapper.setAttribute('aria-hidden', 'true');\n // Move existing children into the glyph wrapper.\n while (host.firstChild) {\n glyphWrapper.appendChild(host.firstChild);\n }\n host.appendChild(glyphWrapper);\n\n // Append the visually-hidden AT label.\n const label = document.createElement('span');\n label.setAttribute('style', KJ_VISUALLY_HIDDEN_STYLE);\n label.textContent = this.config.ellipsisLabel;\n host.appendChild(label);\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n afterNextRender,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport { KJ_PAGINATION } from './pagination.context';\nimport { KJ_PAGINATION_CONFIG } from './config';\n\n/**\n * Renders the localised \"Page N of M\" status string. Apply to a\n * `<span>` (or any inline element) inside a `KjPagination`. The directive\n * sets `textContent` reactively on every page or total-pages change,\n * **only when the host is empty** at attach time — when the consumer\n * projects their own content (`<span kjPaginationInfo>Showing page {{ page }}</span>`),\n * the directive yields and the consumer's binding wins.\n *\n * The info span is AT-readable (no `aria-hidden`); AT users hear\n * \"Pagination, Page 2 of 10\" when they enter the navigation landmark.\n *\n * @example\n * ```html\n * <span kjPaginationInfo></span>\n * ```\n *\n * @doc-category Core/Navigation\n * @doc\n * @doc-name pagination\n */\n@Directive({\n selector: '[kjPaginationInfo]',\n standalone: true,\n host: {\n '[attr.data-pagination-info]': '\"\"',\n },\n})\nexport class KjPaginationInfo {\n /** @internal */\n readonly pagination = inject(KJ_PAGINATION);\n /** @internal */\n readonly config = inject(KJ_PAGINATION_CONFIG);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Latched true on first render; gates the `textContent` mutation. */\n private readonly attached = signal(false);\n /** Latched true if the consumer projected their own content. */\n private consumerOwnsContent = false;\n\n constructor() {\n afterNextRender(() => {\n const host = this.el.nativeElement;\n this.consumerOwnsContent = host.childNodes.length > 0;\n this.attached.set(true);\n });\n\n // Effect lives in injection context (constructor). It is reactive on\n // `attached`, `page`, and `totalPages`; the body is a no-op until the\n // host is attached and the consumer-content latch has been determined.\n effect(() => {\n if (!this.attached()) return;\n if (this.consumerOwnsContent) return;\n this.el.nativeElement.textContent = this.config.infoTemplate(\n this.pagination.page(),\n this.pagination.totalPages(),\n );\n });\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\n/**\n * Animation shape preset for `KjSpinner`. Reflected to `data-animation`;\n * themes own the keyframes.\n */\nexport type KjSpinnerAnimation = 'spin' | 'dots' | 'pulse' | 'bars';\n\nexport interface KjSpinnerConfig {\n variants: string[];\n sizes: string[];\n animations: string[];\n defaults: { variant: string; size: string; animation: string; ariaLabel: string };\n}\n\n/**\n * Default Spinner presets shipped by kouji-ui. Exported so consumers can\n * spread them when extending: `[...KJ_SPINNER_DEFAULTS.animations, 'ring']`.\n */\nexport const KJ_SPINNER_DEFAULTS: KjSpinnerConfig = {\n variants: ['neutral', 'primary', 'secondary', 'success', 'warning', 'error', 'info'],\n sizes: ['xs', 'sm', 'md', 'lg'],\n animations: ['spin', 'dots', 'pulse', 'bars'],\n defaults: { variant: 'neutral', size: 'md', animation: 'spin', ariaLabel: 'Loading' },\n};\n\n/**\n * DI token for the active Spinner presets. Default factory yields\n * `KJ_SPINNER_DEFAULTS`. Override via `provideKjSpinner(…)` at the\n * application scope or at a component scope.\n */\nexport const KJ_SPINNER_CONFIG = new InjectionToken<KjSpinnerConfig>('kj.spinner.config', {\n factory: () => KJ_SPINNER_DEFAULTS,\n});\n\n/**\n * Configures the Spinner presets for the enclosing injector. Replaces (does\n * not merge) `variants`, `sizes`, and `animations`; spread\n * `KJ_SPINNER_DEFAULTS.*` to extend.\n */\nexport function provideKjSpinner(config: Partial<KjSpinnerConfig>): Provider[] {\n return [\n {\n provide: KJ_SPINNER_CONFIG,\n useValue: { ...KJ_SPINNER_DEFAULTS, ...config },\n },\n ];\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n afterNextRender,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { KjSize, KjVariant, bindPresets } from '../presets';\nimport { KJ_SPINNER_CONFIG, KjSpinnerAnimation } from './config';\n\n/**\n * Marks an element as a kouji indeterminate spinner. Owns the small\n * accessibility contract (`role=\"status\"`, default `aria-label=\"Loading\"`,\n * `prefers-reduced-motion` reflection) and reflects `data-animation`,\n * `data-variant`, and `data-size` for the theme to render the visual glyph.\n *\n * The host element is consumer-supplied — usually a `<span kjSpinner>`. The\n * directive itself emits no markup; the surrounding wrapper / template is\n * responsible for the visually-hidden label fallback when no consumer label\n * is provided. The directive does set `aria-label` to the default when\n * neither `aria-label` nor `aria-labelledby` is already on the host.\n *\n * **Indeterminate-only.** A determinate \"x of y\" indicator is a Progress\n * Bar — different role, different ARIA contract; do not bend Spinner to fit.\n *\n * @example\n * ```html\n * <span kjSpinner></span>\n * <span kjSpinner kjAnimation=\"dots\" kjAriaLabel=\"Sending\"></span>\n * ```\n * @doc-category Core/Feedback\n * @doc\n * @doc-name spinner\n * @doc-description Marks an element as an indeterminate loading indicator with the right accessibility role and label.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjSpinner]',\n standalone: true,\n exportAs: 'kjSpinner',\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n ],\n providers: [...bindPresets(KJ_SPINNER_CONFIG)],\n host: {\n role: 'status',\n 'aria-live': 'polite',\n 'aria-atomic': 'true',\n '[attr.data-animation]': 'kjAnimation()',\n '[attr.data-reduced-motion]': 'reducedMotion() ? \"true\" : null',\n '[attr.aria-label]': 'ariaLabelAttr()',\n },\n})\nexport class KjSpinner {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly config = inject(KJ_SPINNER_CONFIG);\n\n /**\n * Animation shape preset. Reflects `data-animation`. Default `'spin'`.\n * Themes own the keyframes for each value.\n */\n readonly kjAnimation = input<KjSpinnerAnimation>(\n (this.config.defaults.animation as KjSpinnerAnimation) ?? 'spin',\n );\n\n /**\n * Accessible name announced by AT. Bound to `aria-label` when the host has\n * no `aria-label` attribute and no `aria-labelledby` attribute already set\n * (so a consumer-authored `aria-labelledby` wins, and a consumer-authored\n * `aria-label` is not double-bound).\n */\n readonly kjAriaLabel = input<string>(this.config.defaults.ariaLabel ?? 'Loading');\n\n /** True when the host had a consumer-authored `aria-labelledby` at mount. */\n protected readonly hasAriaLabelledBy: boolean;\n\n /**\n * Captured value of the consumer-authored `aria-label` HTML attribute at\n * mount, or `null` if none was set. We re-emit it through the host\n * binding so Angular doesn't strip the original (a host `[attr.aria-label]`\n * binding always wins over the static attribute, so leaving the binding\n * unconditional but echoing the captured value preserves the consumer\n * intent).\n */\n protected readonly nativeAriaLabel: string | null;\n\n /**\n * Reflects the user's `prefers-reduced-motion` preference. The directive\n * does not animate anything itself — it mirrors the boolean as\n * `data-reduced-motion=\"true\"` and themes own the alternate keyframe.\n */\n protected readonly reducedMotion = signal<boolean>(false);\n\n protected readonly ariaLabelAttr = computed(() => {\n if (this.hasAriaLabelledBy) return null;\n if (this.nativeAriaLabel !== null) return this.nativeAriaLabel;\n return this.kjAriaLabel();\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n // Read consumer-authored aria attributes synchronously in the\n // constructor — by the time `afterNextRender` runs, Angular's host\n // binding for `[attr.aria-label]` has already overwritten the original\n // attribute with the computed default, which would make the detection\n // see kouji's own value and ignore the consumer's.\n const host = this.el.nativeElement;\n this.hasAriaLabelledBy = host.hasAttribute('aria-labelledby');\n this.nativeAriaLabel = host.getAttribute('aria-label');\n\n afterNextRender(() => {\n // SSR-safe: matchMedia is only present in a real browser. The\n // server-rendered HTML carries no `data-reduced-motion`; the post-\n // hydrate read sets it on the client when the preference is active.\n if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n const mql = window.matchMedia('(prefers-reduced-motion: reduce)');\n this.reducedMotion.set(mql.matches);\n const onChange = (e: MediaQueryListEvent) => this.reducedMotion.set(e.matches);\n mql.addEventListener('change', onChange);\n destroyRef.onDestroy(() => mql.removeEventListener('change', onChange));\n }\n });\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\n/**\n * Configurable preset shape for `KjProgressBar`. Mirrors `KjButtonConfig` /\n * `KjAlertConfig`: variants and sizes are validated against the consumer\n * application's preset (or extended via `provideKjProgressBar`).\n */\nexport interface KjProgressBarConfig {\n variants: string[];\n sizes: string[];\n defaults: { variant: string; size: string };\n}\n\n/**\n * Default Progress Bar presets shipped by kouji-ui. Exported so consumers can\n * spread when extending: `[...KJ_PROGRESS_BAR_DEFAULTS.variants, 'brand']`.\n */\nexport const KJ_PROGRESS_BAR_DEFAULTS: KjProgressBarConfig = {\n variants: ['primary', 'success', 'warning', 'error'],\n sizes: ['xs', 'sm', 'md', 'lg'],\n defaults: { variant: 'primary', size: 'md' },\n};\n\n/**\n * DI token for the active Progress Bar presets. Default factory yields\n * `KJ_PROGRESS_BAR_DEFAULTS`. Override via `provideKjProgressBar(…)` at\n * application or component scope.\n */\nexport const KJ_PROGRESS_BAR_CONFIG = new InjectionToken<KjProgressBarConfig>(\n 'kj.progress-bar.config',\n { factory: () => KJ_PROGRESS_BAR_DEFAULTS },\n);\n\n/**\n * Configures the Progress Bar presets for the enclosing injector. Replaces\n * (does not merge) `variants` and `sizes`; spread\n * `KJ_PROGRESS_BAR_DEFAULTS.variants` to extend.\n */\nexport function provideKjProgressBar(\n config: Partial<KjProgressBarConfig>,\n): Provider[] {\n return [\n {\n provide: KJ_PROGRESS_BAR_CONFIG,\n useValue: { ...KJ_PROGRESS_BAR_DEFAULTS, ...config },\n },\n ];\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Shared state surfaced by `KjProgressBar` for `KjProgressBarFill` (and any\n * consumer-side child directives) to read.\n *\n * The root directive owns all derivations: `value` is the raw input,\n * `clampedValue` enforces `[min, max]`, `fraction` is the `0..1` reading the\n * fill consumes for CSS, and `valuenow` is the rounded integer the host emits\n * as `aria-valuenow`. `null` flows through every derived signal in\n * indeterminate mode so the fill knows to stop reading the fraction (and\n * themes can branch on `data-indeterminate`).\n */\nexport interface KjProgressBarContext {\n /** Raw value as provided, possibly null (indeterminate). */\n readonly value: Signal<number | null>;\n /** Clamped value in `[min, max]`, or `null` if indeterminate. */\n readonly clampedValue: Signal<number | null>;\n /** `0..1` fraction for CSS, or `null` if indeterminate. */\n readonly fraction: Signal<number | null>;\n /** Rounded integer for `aria-valuenow`, or `null` if indeterminate. */\n readonly valuenow: Signal<number | null>;\n /** True iff value is `null` (indeterminate mode). */\n readonly indeterminate: Signal<boolean>;\n /** `aria-valuemin` as provided. */\n readonly min: Signal<number>;\n /** `aria-valuemax` as provided. */\n readonly max: Signal<number>;\n}\n\n/** Injection token for `KjProgressBarContext`. */\nexport const KJ_PROGRESS_BAR = new InjectionToken<KjProgressBarContext>(\n 'KjProgressBar',\n);\n","import {\n DestroyRef,\n Directive,\n PLATFORM_ID,\n Signal,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n isDevMode,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { KjSize, KjVariant, bindPresets } from '../presets';\nimport { KJ_PROGRESS_BAR_CONFIG } from './config';\nimport {\n KJ_PROGRESS_BAR,\n KjProgressBarContext,\n} from './progress-bar.context';\n\n/**\n * Marks an element as a kouji progress bar. Owns `role=\"progressbar\"` and the\n * full ARIA value contract: `aria-valuemin` / `aria-valuemax` always, the\n * rounded integer `aria-valuenow` when determinate, and **omits**\n * `aria-valuenow` when indeterminate (the APG-correct behaviour for\n * *\"working, no measurable progress\"*).\n *\n * `kjValue: number | null` is the single mode switch — `null` is the explicit\n * indeterminate sentinel. Out-of-range values clamp to `[kjMin, kjMax]`; the\n * directive computes the `0..1` fraction (`--kj-progress-fraction`) for the\n * inner `[kjProgressBarFill]` to read, and rounds the value for AT so a\n * 47.0 → 47.4 jitter doesn't churn the attribute.\n *\n * Variants and sizes are configurable via `provideKjProgressBar(…)`. The\n * indeterminate stripe animation is theme-owned; the directive only reflects\n * `data-indeterminate` and `data-reduced-motion` so themes can collapse the\n * animation under `prefers-reduced-motion: reduce`.\n *\n * The progress bar itself is **not** a live region — APG is explicit that a\n * `role=\"progressbar\"` element should not carry `aria-live`. Milestone\n * announcements (25%, 50%, …) belong on a sibling `[kjLiveRegion]` composed\n * at the wrapper layer; the core directive does not own that wiring.\n *\n * @example\n * ```html\n * <div kjProgressBar [kjValue]=\"progress()\" kjAriaLabel=\"Upload progress\">\n * <div kjProgressBarFill></div>\n * </div>\n * ```\n * @doc-category Core/Feedback\n * @doc\n * @doc-name progress-bar\n * @doc-description Marks an element as an accessible progress bar with determinate or indeterminate value.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjProgressBar]',\n standalone: true,\n exportAs: 'kjProgressBar',\n hostDirectives: [\n { directive: KjVariant, inputs: ['kjVariant'] },\n { directive: KjSize, inputs: ['kjSize'] },\n ],\n providers: [\n ...bindPresets(KJ_PROGRESS_BAR_CONFIG),\n { provide: KJ_PROGRESS_BAR, useExisting: KjProgressBar },\n ],\n host: {\n 'role': 'progressbar',\n '[attr.aria-valuemin]': 'min()',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-valuenow]': 'valuenow()',\n '[attr.aria-valuetext]': 'kjAriaValuetext() ?? null',\n '[attr.data-indeterminate]': 'indeterminate() ? \"true\" : null',\n '[attr.data-reduced-motion]': 'reducedMotion() ? \"reduce\" : null',\n '[style.--kj-progress-fraction]': 'fraction()',\n },\n})\nexport class KjProgressBar implements KjProgressBarContext {\n private readonly platformId = inject(PLATFORM_ID);\n\n /**\n * Current progress value. `null` is the explicit indeterminate sentinel —\n * the directive omits `aria-valuenow` and reflects `data-indeterminate`.\n * Out-of-range values clamp to `[kjMin, kjMax]` (with a dev-mode warning).\n * @default null\n */\n readonly kjValue = input<number | null>(null);\n\n /**\n * Lower bound, bound to `aria-valuemin`. Most consumers leave this at `0`\n * and pass a percentage; for absolute units (`bytesUploaded` /\n * `bytesTotal`), pass both `kjMin` and `kjMax`.\n * @default 0\n */\n readonly kjMin = input<number>(0);\n\n /**\n * Upper bound, bound to `aria-valuemax`. Must be `> kjMin` (dev-mode\n * throw otherwise).\n * @default 100\n */\n readonly kjMax = input<number>(100);\n\n /**\n * Human-readable phrasing reflected to `aria-valuetext`. Use for cases\n * where the raw percentage is less meaningful — `\"Step 3 of 5\"`,\n * `\"1.2 MB of 2.5 MB\"`, `\"3 minutes remaining\"`. AT typically reads\n * `aria-valuetext` exclusively when both attributes are set.\n */\n readonly kjAriaValuetext = input<string | undefined>(undefined);\n\n /** True when the user prefers reduced motion. Reflects `data-reduced-motion`. */\n protected readonly reducedMotion = signal<boolean>(false);\n\n /** Raw value (passes through `null` for indeterminate). */\n readonly value: Signal<number | null> = computed(() => this.kjValue());\n\n /** True iff `kjValue()` is `null`. */\n readonly indeterminate: Signal<boolean> = computed(\n () => this.kjValue() === null,\n );\n\n readonly min: Signal<number> = computed(() => this.kjMin());\n readonly max: Signal<number> = computed(() => this.kjMax());\n\n /**\n * Clamped value in `[min, max]`, or `null` when indeterminate. Applies\n * even when the consumer passes `min >= max` (degenerate config —\n * dev-mode throws but production still flows through with clamping).\n */\n readonly clampedValue: Signal<number | null> = computed(() => {\n const v = this.kjValue();\n if (v === null) return null;\n const lo = this.kjMin();\n const hi = this.kjMax();\n if (Number.isNaN(v)) return null;\n return Math.min(Math.max(v, lo), hi);\n });\n\n /** `0..1` fraction for CSS, or `null` when indeterminate. */\n readonly fraction: Signal<number | null> = computed(() => {\n const v = this.clampedValue();\n if (v === null) return null;\n const lo = this.kjMin();\n const hi = this.kjMax();\n const span = hi - lo;\n if (span <= 0) return 0;\n return (v - lo) / span;\n });\n\n /**\n * Rounded integer for `aria-valuenow`, or `null` when indeterminate. The\n * rounding stabilises the attribute when consumers drive `kjValue` from a\n * high-frequency source (rAF-rate observables) — a 47.0 → 47.4 update no\n * longer triggers an attribute write that some AT engines could announce.\n */\n readonly valuenow: Signal<number | null> = computed(() => {\n const v = this.clampedValue();\n return v === null ? null : Math.round(v);\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n if (!isPlatformBrowser(this.platformId)) return;\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n\n const mql = window.matchMedia('(prefers-reduced-motion: reduce)');\n this.reducedMotion.set(mql.matches);\n\n const onChange = (event: MediaQueryListEvent) => {\n this.reducedMotion.set(event.matches);\n };\n mql.addEventListener('change', onChange);\n destroyRef.onDestroy(() => mql.removeEventListener('change', onChange));\n });\n\n if (isDevMode()) {\n effect(() => {\n const lo = this.kjMin();\n const hi = this.kjMax();\n if (lo >= hi) {\n throw new Error(\n `[kj] KjProgressBar: kjMin (${lo}) must be less than kjMax (${hi}).`,\n );\n }\n });\n\n let outOfRangeWarned = false;\n effect(() => {\n const v = this.kjValue();\n if (v === null) return;\n const lo = this.kjMin();\n const hi = this.kjMax();\n if ((v < lo || v > hi) && !outOfRangeWarned) {\n outOfRangeWarned = true;\n console.warn(\n `[kj] KjProgressBar: kjValue ${v} is outside [${lo}, ${hi}]; clamping.`,\n );\n }\n });\n\n effect(() => {\n if (this.kjValue() === null && this.kjAriaValuetext() !== undefined) {\n console.warn(\n '[kj] KjProgressBar: kjAriaValuetext is set while kjValue is null (indeterminate). ' +\n 'aria-valuetext describes a value; consider moving the phrasing to a sibling text element.',\n );\n }\n });\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\n\nimport { KJ_PROGRESS_BAR } from './progress-bar.context';\n\n/**\n * Inner fill / indicator child for `[kjProgressBar]`. Reads\n * `KJ_PROGRESS_BAR.fraction` and re-emits `--kj-progress-fraction` plus\n * `data-indeterminate` on its own host so themes can target the inner\n * element directly without traversing the parent.\n *\n * The directive sets nothing visual — themes own the actual `transform` /\n * `width` and the indeterminate stripe animation. Re-exposing the CSS\n * variable (and the `data-indeterminate` branch attribute) at the named\n * fill element saves consumers a CSS selector hop and gives themes a\n * stable hook for the inner node.\n *\n * @example\n * ```html\n * <div kjProgressBar [kjValue]=\"progress()\">\n * <div kjProgressBarFill></div>\n * </div>\n * ```\n * @doc-category Core/Feedback\n * @doc\n * @doc-name progress-bar\n */\n@Directive({\n selector: '[kjProgressBarFill]',\n standalone: true,\n host: {\n '[style.--kj-progress-fraction]': 'ctx.fraction()',\n '[attr.data-indeterminate]': 'ctx.indeterminate() ? \"true\" : null',\n },\n})\nexport class KjProgressBarFill {\n protected readonly ctx = inject(KJ_PROGRESS_BAR);\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Resolved alert mode after applying the matrix. See `alert.md` for the\n * full role/aria-live mapping.\n */\nexport type KjAlertMode = 'assertive' | 'polite' | 'static' | 'off';\n\n/**\n * Context exposed by `KjAlert` to its descendant directives via the\n * `KJ_ALERT` injection token. Title/description register their generated\n * ids so the root can reflect `aria-labelledby` / `aria-describedby`.\n */\nexport interface KjAlertContext {\n readonly alertId: Signal<string>;\n readonly variant: Signal<string>;\n readonly mode: Signal<KjAlertMode>;\n readonly titleId: Signal<string | null>;\n readonly descriptionId: Signal<string | null>;\n registerTitle(id: string): void;\n unregisterTitle(id: string): void;\n registerDescription(id: string): void;\n unregisterDescription(id: string): void;\n dismiss(): void;\n}\n\n/** DI token for the alert context — provided by `KjAlert`. */\nexport const KJ_ALERT = new InjectionToken<KjAlertContext>('KjAlert');\n","import { InjectionToken, Provider } from '@angular/core';\n\n/**\n * Shape of the Alert preset configuration. Mirrors `KjButtonConfig` —\n * `bindPresets(KJ_ALERT_CONFIG)` translates this into the shared\n * `KJ_VARIANT_PRESET` / `KJ_SIZE_PRESET` tokens consumed by the\n * `KjVariant` / `KjSize` host directives composed on `KjAlert`.\n */\nexport interface KjAlertConfig {\n variants: string[];\n sizes: string[];\n defaults: { variant: string; size: string };\n}\n\n/**\n * Default Alert presets shipped by kouji-ui. Severities follow the APG /\n * shadcn / daisyUI taxonomy. Spread to extend:\n * `[...KJ_ALERT_DEFAULTS.variants, 'brand']`.\n */\nexport const KJ_ALERT_DEFAULTS: KjAlertConfig = {\n variants: ['info', 'success', 'warning', 'error', 'neutral'],\n sizes: ['sm', 'md', 'lg'],\n defaults: { variant: 'info', size: 'md' },\n};\n\n/**\n * DI token for the active Alert presets. Default factory yields\n * `KJ_ALERT_DEFAULTS`. Override via `provideKjAlert(…)`.\n */\nexport const KJ_ALERT_CONFIG = new InjectionToken<KjAlertConfig>('kj.alert.config', {\n factory: () => KJ_ALERT_DEFAULTS,\n});\n\n/**\n * Configures the Alert presets for the enclosing injector. Replaces\n * (does not merge) `variants` / `sizes`; spread `KJ_ALERT_DEFAULTS.variants`\n * to extend.\n */\nexport function provideKjAlert(config: Partial<KjAlertConfig>): Provider[] {\n return [\n {\n provide: KJ_ALERT_CONFIG,\n useValue: { ...KJ_ALERT_DEFAULTS, ...config },\n },\n ];\n}\n","import {\n Directive,\n ElementRef,\n InputSignalWithTransform,\n type OnDestroy,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n isDevMode,\n output,\n signal,\n} from '@angular/core';\nimport { KjButton } from '../button/button';\nimport { KJ_ALERT, KjAlertContext, KjAlertMode } from './alert.context';\nimport { KJ_ALERT_CONFIG } from './config';\n\nlet _alertIdCounter = 0;\n\n/**\n * Persistent, in-flow notification (also known as a banner). Owns the\n * `role` / `aria-live` matrix described in `docs/component-analyses/feedback/alert.md`:\n * `kjAlertMode='assertive'` → `role=\"alert\"` + `aria-live=\"assertive\"`;\n * `'polite'` → `role=\"status\"` + `aria-live=\"polite\"`;\n * `'static'` → `role=\"region\"` (no live, requires `aria-label` /\n * `aria-labelledby`); `'off'` → no role, no live region.\n *\n * When `kjAlertMode` is unset, the directive resolves the matrix from\n * `kjAlertStatic` and `kjVariant`:\n *\n * 1. `kjAlertStatic === true` → `'static'`\n * 2. `kjVariant === 'error'` → `'assertive'`\n * 3. otherwise → `'polite'`\n *\n * Visibility is consumer-managed: `KjAlertDismiss` (or programmatic\n * `dismiss()`) fires `kjAlertDismissed` and the parent `*ngIf` / `@if`\n * unmounts. The directive itself is stateless beyond exposing\n * `data-dismissed=\"true\"` for the brief render window before unmount,\n * so themes can run an exit animation.\n *\n * @example\n * ```html\n * <div kjAlert kjVariant=\"error\" #a=\"kjAlert\">\n * <h3 kjAlertTitle>Could not save draft</h3>\n * <p kjAlertDescription>Network request timed out — retry?</p>\n * <div kjAlertActions>\n * <button kjButton (click)=\"retry()\">Retry</button>\n * </div>\n * <button kjAlertDismiss>×</button>\n * </div>\n * ```\n * @doc-category Core/Feedback\n * @doc\n * @doc-name alert\n * @doc-description Unstyled in-flow alert that picks the right ARIA live-region role for its severity.\n * @doc-is-main\n */\n@Directive({\n selector: '[kjAlert]',\n standalone: true,\n exportAs: 'kjAlert',\n providers: [\n { provide: KJ_ALERT, useExisting: KjAlert },\n ],\n host: {\n '[attr.role]': 'role()',\n '[attr.aria-live]': 'live()',\n '[attr.aria-atomic]': 'live() ? \"true\" : null',\n '[attr.aria-labelledby]': 'titleId()',\n '[attr.aria-describedby]': 'descriptionId()',\n '[attr.data-variant]': 'variant()',\n '[attr.data-size]': 'size()',\n '[attr.data-dismissed]': 'dismissed() ? \"true\" : null',\n '[attr.data-mode]': 'mode()',\n '[id]': 'alertId()',\n },\n})\nexport class KjAlert implements KjAlertContext {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly preset = inject(KJ_ALERT_CONFIG);\n\n /**\n * Stable, deterministic id for the alert root. Used to derive\n * `${alertId}-title` / `${alertId}-description` ids from descendant\n * directives. The host's `[id]` is set so descendants can reference it\n * via `aria-labelledby` / `aria-describedby` cross-references.\n */\n readonly alertId = signal(`kj-alert-${++_alertIdCounter}`);\n\n /**\n * Severity variant (validated against `KJ_ALERT_CONFIG.variants` in dev).\n * Reflects to `data-variant`. Drives the default `kjAlertMode` resolution\n * (error → assertive, others → polite).\n *\n * Field-annotated explicitly so ng-packagr does not narrow the emitted\n * `.d.ts` write-side to `string` (dropping `string | undefined` flow-through\n * — same trick as `KjButton.kjPressed` and `KjVariant.kjVariant`).\n */\n readonly kjVariant: InputSignalWithTransform<string, string | undefined> = input(\n this.preset.defaults.variant,\n { transform: (v?: string) => v || this.preset.defaults.variant },\n );\n\n /** Size token validated against `KJ_ALERT_CONFIG.sizes`. Reflects to `data-size`. */\n readonly kjSize: InputSignalWithTransform<string, string | undefined> = input(\n this.preset.defaults.size,\n { transform: (v?: string) => v || this.preset.defaults.size },\n );\n\n /**\n * Explicit override for the role/live matrix. Leave unset to let the\n * directive resolve from `kjAlertStatic` / `kjVariant`.\n */\n readonly kjAlertMode = input<KjAlertMode | undefined>(undefined);\n\n /**\n * Marks the alert as a static page-level banner. When `true` and\n * `kjAlertMode` is unset, resolves to `'static'` (`role=\"region\"`,\n * no `aria-live`). The host MUST also carry an accessible name —\n * either `aria-label`, `aria-labelledby`, or a projected\n * `[kjAlertTitle]` (validated in dev mode).\n */\n readonly kjAlertStatic = input(false, { transform: booleanAttribute });\n\n /**\n * Last-resort override for the host `role` attribute. Discouraged —\n * prefer `kjAlertMode`. Only honoured when the resolved mode is\n * `'off'`. Kept for consumers who need a non-standard role\n * (e.g., `role=\"alertdialog\"` is wrong here, but `role=\"status\"`\n * forced on a non-error is valid).\n */\n readonly kjAlertRole = input<string | undefined>(undefined);\n\n /** Fired when the dismiss button (or programmatic `dismiss()`) runs. */\n readonly kjAlertDismissed = output<void>();\n\n private readonly _titleIds = signal<readonly string[]>([]);\n private readonly _descriptionIds = signal<readonly string[]>([]);\n private readonly _dismissed = signal(false);\n\n /** Resolved variant for context consumers (`KjAlertIcon`, etc.). */\n readonly variant = this.kjVariant;\n\n /** Resolved size signal exposed for symmetry — currently used only as `data-size`. */\n readonly size = this.kjSize;\n\n /**\n * Resolved mode following the matrix:\n * 1. explicit `kjAlertMode`,\n * 2. `kjAlertStatic` → `'static'`,\n * 3. `error` variant → `'assertive'`,\n * 4. else `'polite'`.\n */\n readonly mode = computed<KjAlertMode>(() => {\n const explicit = this.kjAlertMode();\n if (explicit) return explicit;\n if (this.kjAlertStatic()) return 'static';\n if (this.variant() === 'error') return 'assertive';\n return 'polite';\n });\n\n /** Resolved `role` attribute value (or `null` when in `'off'` mode without a `kjAlertRole`). */\n readonly role = computed<string | null>(() => {\n switch (this.mode()) {\n case 'assertive': return 'alert';\n case 'polite': return 'status';\n case 'static': return 'region';\n case 'off': return this.kjAlertRole() ?? null;\n }\n });\n\n /** Resolved `aria-live` value, or `null` for static / off. */\n readonly live = computed<'assertive' | 'polite' | null>(() => {\n const m = this.mode();\n return m === 'assertive' ? 'assertive'\n : m === 'polite' ? 'polite'\n : null;\n });\n\n /** First registered title id (most recent registration wins, but only one is expected). */\n readonly titleId = computed<string | null>(() => this._titleIds()[0] ?? null);\n\n /** First registered description id. */\n readonly descriptionId = computed<string | null>(() => this._descriptionIds()[0] ?? null);\n\n /** Brief flag set on `dismiss()` so themes can animate exit. */\n readonly dismissed = this._dismissed.asReadonly();\n\n registerTitle(id: string): void {\n this._titleIds.update(ids => ids.includes(id) ? ids : [...ids, id]);\n }\n unregisterTitle(id: string): void {\n this._titleIds.update(ids => ids.filter(x => x !== id));\n }\n registerDescription(id: string): void {\n this._descriptionIds.update(ids => ids.includes(id) ? ids : [...ids, id]);\n }\n unregisterDescription(id: string): void {\n this._descriptionIds.update(ids => ids.filter(x => x !== id));\n }\n\n /**\n * Marks the alert as dismissed and emits `kjAlertDismissed`. The consumer\n * is responsible for unmounting (this directive does not remove itself).\n */\n dismiss(): void {\n if (this._dismissed()) return;\n this._dismissed.set(true);\n this.kjAlertDismissed.emit();\n }\n\n constructor() {\n if (isDevMode()) {\n effect(() => {\n const v = this.kjVariant();\n if (!this.preset.variants.includes(v)) {\n console.warn(\n `[kj-alert] unknown variant \"${v}\". Allowed values: ${this.preset.variants.join(', ')}.`,\n );\n }\n });\n effect(() => {\n const s = this.kjSize();\n if (!this.preset.sizes.includes(s)) {\n console.warn(\n `[kj-alert] unknown size \"${s}\". Allowed values: ${this.preset.sizes.join(', ')}.`,\n );\n }\n });\n\n effect(() => {\n const m = this.mode();\n const node = this.el.nativeElement;\n\n // 1. Static mode without an accessible name → unlabelled region.\n if (m === 'static') {\n const hasAriaLabel = node.hasAttribute('aria-label');\n const hasAriaLabelledby = node.hasAttribute('aria-labelledby') || this.titleId() != null;\n if (!hasAriaLabel && !hasAriaLabelledby) {\n console.warn(\n '[kj-alert] static mode requires an accessible name — add aria-label, ' +\n 'aria-labelledby, or a [kjAlertTitle] child.',\n );\n }\n }\n\n // 2. No accessible content at all.\n if (this.titleId() == null && this.descriptionId() == null && !node.textContent?.trim()) {\n console.warn('[kj-alert] alert has no accessible content (no title, description, or text).');\n }\n\n // 3. Assertive + success — almost certainly a misuse.\n if (m === 'assertive' && this.variant() === 'success') {\n console.warn(\n '[kj-alert] assertive mode with success variant is unusual — success messages ' +\n 'should not interrupt screen reader speech.',\n );\n }\n });\n }\n }\n}\n\n/**\n * Marks an element as the alert title. Generates `${alertId}-title`,\n * registers with the `KJ_ALERT` context so the root reflects\n * `aria-labelledby`. Apply to a heading element (`<h3 kjAlertTitle>`)\n * when the alert is in a content region.\n *\n * @doc-category Core/Feedback\n * @doc\n * @doc-name alert\n */\n@Directive({\n selector: '[kjAlertTitle]',\n standalone: true,\n host: {\n '[attr.id]': 'titleId',\n },\n})\nexport class KjAlertTitle implements OnDestroy {\n private readonly ctx = inject(KJ_ALERT);\n readonly titleId = `${this.ctx.alertId()}-title`;\n\n constructor() {\n this.ctx.registerTitle(this.titleId);\n inject(ElementRef); // ensure host element is bound before destroy\n }\n\n ngOnDestroy(): void {\n this.ctx.unregisterTitle(this.titleId);\n }\n}\n\n/**\n * Marks an element as the alert description. Generates\n * `${alertId}-description`, registers with `KJ_ALERT` for\n * `aria-describedby`. Same id-registration pattern as `KjAlertTitle`.\n *\n * @doc-category Core/Feedback\n * @doc\n * @doc-name alert\n */\n@Directive({\n selector: '[kjAlertDescription]',\n standalone: true,\n host: {\n '[attr.id]': 'descriptionId',\n },\n})\nexport class KjAlertDescription implements OnDestroy {\n private readonly ctx = inject(KJ_ALERT);\n readonly descriptionId = `${this.ctx.alertId()}-description`;\n\n constructor() {\n this.ctx.registerDescription(this.descriptionId);\n }\n\n ngOnDestroy(): void {\n this.ctx.unregisterDescription(this.descriptionId);\n }\n}\n\n/**\n * Decorative icon slot for an alert. Sets `aria-hidden=\"true\"` (the\n * meaning is carried by the title/description) and mirrors the\n * resolved variant as `data-variant` so themes can swap glyphs without\n * the consumer re-typing it.\n *\n * @doc-category Core/Feedback\n * @doc\n * @doc-name alert\n */\n@Directive({\n selector: '[kjAlertIcon]',\n standalone: true,\n host: {\n '[attr.aria-hidden]': '\"true\"',\n '[attr.data-variant]': 'variant()',\n },\n})\nexport class KjAlertIcon {\n private readonly ctx = inject(KJ_ALERT);\n readonly variant = this.ctx.variant;\n}\n\n/**\n * Semantic group for action buttons inside an alert. Sets\n * `role=\"group\"` on the host and an overridable\n * `aria-label=\"Alert actions\"` so AT users can skip past the\n * actions container as a unit.\n *\n * @doc-category Core/Feedback\n * @doc\n * @doc-name alert\n */\n@Directive({\n selector: '[kjAlertActions]',\n standalone: true,\n host: {\n 'role': 'group',\n '[attr.aria-label]': 'kjAlertActionsLabel()',\n },\n})\nexport class KjAlertActions {\n /** AT label for the group. Localisable. */\n readonly kjAlertActionsLabel = input<string>('Alert actions');\n}\n\n/**\n * Dismiss button for an alert. Composes `KjButton` via host directives\n * so the button gets the full focus-ring / aria-disabled / capture-phase\n * click contract. Calls `KJ_ALERT.dismiss()` on click — the consumer's\n * own `(click)` listener still fires (e.g. for analytics).\n *\n * Aliased inputs: `kjAlertDismissLabel` → `KjButton.kjAriaLabel`,\n * `kjAlertDismissVariant` → `KjButton.kjVariant`,\n * `kjAlertDismissSize` → `KjButton.kjSize`.\n *\n * @doc-category Core/Feedback\n * @doc\n * @doc-name alert\n */\n@Directive({\n selector: '[kjAlertDismiss]',\n standalone: true,\n hostDirectives: [KjButton],\n host: {\n '[attr.aria-label]': 'kjAlertDismissLabel()',\n '[attr.data-variant]': 'kjAlertDismissVariant()',\n '[attr.data-size]': 'kjAlertDismissSize()',\n '(click)': 'onClick()',\n },\n})\nexport class KjAlertDismiss {\n private readonly ctx = inject(KJ_ALERT);\n\n /** AT label for the dismiss button. */\n readonly kjAlertDismissLabel = input<string>('Dismiss');\n\n /**\n * Variant token mirrored as `data-variant`. Defaults to `'ghost'` so themes\n * pick up the unobtrusive close-button surface. Mirrored directly rather\n * than aliased through `KjButton`'s host-directive `kjVariant` input\n * because Angular does not let `hostDirectives.inputs` alias an input that\n * is itself only exposed via a nested host directive.\n */\n readonly kjAlertDismissVariant = input<string>('ghost');\n\n /** Size token mirrored as `data-size`. Defaults to `'icon'` for the 44×44 touch target. */\n readonly kjAlertDismissSize = input<string>('icon');\n\n onClick(): void {\n this.ctx.dismiss();\n }\n}\n","// Public API for @kouji-ui/core\n\n// -- Primitives --\nexport * from './primitives/index';\n\n// -- Accessibility utilities --\nexport * from './a11y/index';\n\n// -- Internal presets (composed via hostDirectives; filtered from docs) --\nexport * from './presets/index';\n\n// -- Foundation components --\nexport * from './button/index';\nexport * from './button-group/index';\nexport * from './input/index';\nexport * from './input-group/index';\nexport * from './input-mask/index';\nexport * from './input-otp/index';\nexport * from './number-input/index';\nexport * from './slider/index';\nexport * from './password-input/index';\nexport * from './textarea/index';\nexport * from './checkbox/index';\nexport * from './radio/index';\nexport * from './toggle/index';\nexport * from './badge/index';\nexport * from './overlay-badge/index';\nexport * from './avatar/index';\nexport * from './kbd/index';\nexport * from './icon/index';\n\n// -- Data display --\nexport * from './list/index';\nexport * from './carousel/index';\nexport * from './chat/index';\nexport * from './typography/index';\nexport * from './tag/index';\n\n// -- Overlay components --\nexport * from './dialog/index';\nexport * from './drawer/index';\nexport * from './tooltip/index';\nexport * from './popover/index';\nexport * from './confirm-popup/index';\nexport * from './dropdown-menu/index';\nexport * from './speed-dial/index';\nexport * from './toast/index';\nexport * from './command-palette/index';\n\n// -- Data components --\nexport * from './table/index';\nexport * from './field/index';\nexport * from './file-upload/index';\nexport * from './form/index';\nexport * from './tabs/index';\nexport * from './accordion/index';\nexport * from './stepper/index';\nexport * from './select/index';\nexport * from './combobox/index';\nexport * from './cascade-select/index';\nexport * from './tree-select/index';\nexport * from './time-picker/index';\nexport * from './color-picker/index';\nexport * from './calendar/index';\nexport * from './date-picker/index';\n\n// -- Charts --\nexport * from './chart/index';\n\n// -- Layout components --\nexport * from './divider/index';\nexport * from './skeleton/index';\n\n// -- Navigation --\nexport * from './link/index';\nexport * from './breadcrumb/index';\nexport * from './menubar/index';\nexport * from './pagination/index';\n\n// -- Feedback components --\nexport * from './spinner/index';\nexport * from './progress-bar/index';\n\nexport * from './alert/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["read","FOCUSABLE","_count","i1.KjVariant","i2.KjSize","i3.KjFocusRing","i1.KjDisabled","i2.KjFocusRing","i3.KjFormControl","i3.KjDisabled","i1.KjInput","i2.KjFormControl","i3.KjLiveRegion","i4.KjFocusRing","clamp","snapToStep","nextId","optionalNumber","i5.KjFormControl","i1.KjBadge","i1.KjSize","i3.KjRovingTabindex","nextSeed","i1.KjFocusRing","i2.KjRovingTabindex","i2.KjRovingTabindexItemDirective","i1.KjButton","i1.KjRovingTabindex","KjDialog","i1.KjOverlayTrigger","i1.KjOverlayPanel","i1.KjPopoverTrigger","i1.KjListItem","i1.KjListSeparator","i1.KjListGroupLabel","i1.KjListGroup","i1.KjListNavigator","i1.KjLiveRegion","i1.KjRovingTabindexItemDirective","setsEqual","i2.KjOverlayTrigger","i2.KjListNavigator","_idCounter","i4.KjOverlayTrigger","i5.KjListNavigator","DOCUMENT","i5.KjOverlayPanel","localeFirstDayOfWeek","i1.KjFormControl","i3.KjOverlayTrigger","i4.KjDisabled","i1.KjLink"],"mappings":"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"}