@kouji-ui/components 0.4.2 → 0.4.4

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.
@@ -1,11 +1,15 @@
1
1
  import * as i1 from '@kouji-ui/core';
2
- import { KjAlertMode, KjAvatarShape, KjBadgeVariant, KjButtonGroupOrientation, KjCarousel, KjLiveRegion, KjCarouselSlide, KjCarouselAlign, KjColorFormat, KjColorPreset, KjColorValue, KjColorPicker, KjCombobox, KjOverlayTriggerLike, KjDatePicker, KjFileRejection, KjUploadableFile, KjFileUpload, KjInput, KjDividerOrientation, KjDividerAlign, KjListAs, KjListOrientation, KjPasswordAutocomplete, KjPasswordScore, KjSkeletonShape, KjSkeletonAnimation, KjSpinnerAnimation, KjResourceResult, KjStorageAdapter, KjTableState, KjTable, KjNumberFilterType, KjTabPanel, KjTextareaResize, KjTextareaAutoresize, KjHourCycle, TimeParts, KjToastVariant, KjCascadeSelectOption, KjTreeSelect, KjTreeNode } from '@kouji-ui/core';
3
- export { KJ_DROPDOWN_MENU, KjAvatarGroupAriaLabelFormat, KjBlockquote, KjCarouselAlign, KjCarouselControlPattern, KjCarouselOrientation, KjChatRole, KjChatSide, KjChatState, KjCode, KjColorFormat, KjColorPreset, KjColorValue, KjDialog, KjDialogOpenOptions, KjDialogRef, KjDialogService, KjDrawer, KjDrawerOpenOptions, KjDrawerRef, KjDrawerService, KjDrawerSide, KjDropdownMenuCloseReason, KjDropdownMenuContent, KjDropdownMenuContext, KjDropdownMenuGroup, KjDropdownMenuItem, KjDropdownMenuLabel, KjDropdownMenuMount, KjDropdownMenuSeparator, KjDropdownMenuTrigger, KjDropdownMenuTriggerKind, KjLead, KjMuted, KjPopoverArrow, KjPopoverClose, KjPopoverContent, KjPopoverTitle, KjPopoverTrigger, KjSpeedDialDirection, KjTooltipArrow, KjTooltipContent, KjTooltipGroup, KjTooltipTrigger, KjTruncate } from '@kouji-ui/core';
2
+ import { KjAlertMode, KjAvatarShape, KjBadgeVariant, KjButtonGroupOrientation, KjCarousel, KjLiveRegion, KjCarouselSlide, KjCarouselAlign, KjChatStore, KjChatAnnouncer, KjChatMessageData, KjSlashCommand, KjColorFormat, KjColorPreset, KjColorValue, KjColorPicker, KjCombobox, KjOverlayTriggerLike, KjDatePicker, KjDateRange as KjDateRange$1, KjDateRangePreset, KjEditorLanguage, KjEditorLineNumbers, KjEditorWordWrap, KjEditorInstance, KjFileRejection, KjUploadableFile, KjFileUpload, KjInput, KjDividerOrientation, KjDividerAlign, KjListAs, KjListOrientation, KjPasswordAutocomplete, KjPasswordScore, KjRichTextFeature, KjRichTextEditor, KjRteToolbarItem, KjActiveOverlay, KjSkeletonShape, KjSkeletonAnimation, KjSpinnerAnimation, KjResourceResult, KjStorageAdapter, KjTableState, KjTable, KjNumberFilterType, KjTabPanel, KjTextareaResize, KjTextareaAutoresize, KjHourCycle, TimeParts, KjToastVariant, KjCascadeSelectOption, KjTreeSelect, KjTreeNode } from '@kouji-ui/core';
3
+ export { KJ_DROPDOWN_MENU, KjAvatarGroupAriaLabelFormat, KjBlockquote, KjCarouselAlign, KjCarouselControlPattern, KjCarouselOrientation, KjChatRole, KjChatSide, KjChatState, KjCode, KjColorFormat, KjColorPreset, KjColorValue, KjDialog, KjDialogOpenOptions, KjDialogRef, KjDialogService, KjDrawer, KjDrawerOpenOptions, KjDrawerRef, KjDrawerService, KjDrawerSide, KjDropdownMenuCloseReason, KjDropdownMenuContent, KjDropdownMenuContext, KjDropdownMenuGroup, KjDropdownMenuItem, KjDropdownMenuLabel, KjDropdownMenuMount, KjDropdownMenuSeparator, KjDropdownMenuTrigger, KjDropdownMenuTriggerKind, KjLead, KjMuted, KjOverlayPanel, KjOverlayTriggerLike, KjPopoverArrow, KjPopoverClose, KjPopoverContent, KjPopoverTitle, KjPopoverTrigger, KjSheet, KjSheetDetent, KjSheetOpenOptions, KjSheetRef, KjSheetService, KjSpeedDialDirection, KjTooltipArrow, KjTooltipContent, KjTooltipGroup, KjTooltipTrigger, KjTruncate, SHEET_ARIA_LABEL, SHEET_DATA, SHEET_DETENT, SHEET_DISMISSIBLE } from '@kouji-ui/core';
4
4
  import * as _angular_core from '@angular/core';
5
- import { TemplateRef, ModelSignal, AfterViewInit, OnDestroy, EventEmitter, EnvironmentProviders, ElementRef, OnInit, ResourceRef, Type, InjectionToken } from '@angular/core';
5
+ import { TemplateRef, ModelSignal, AfterViewInit, ElementRef, OnDestroy, EventEmitter, EnvironmentProviders, OnInit, Injector, ResourceRef, Type, InjectionToken } from '@angular/core';
6
6
  import { ControlValueAccessor, FormControl } from '@angular/forms';
7
7
  import * as _tanstack_angular_table from '@tanstack/angular-table';
8
8
  import { RowData, Cell, Row, Header, Column, Table } from '@tanstack/angular-table';
9
+ import { Observable } from 'rxjs';
10
+ import { EChartsOption } from 'echarts';
11
+ import { SafeHtml } from '@angular/platform-browser';
12
+ import * as monaco_editor from 'monaco-editor';
9
13
  import { VirtualItem } from '@tanstack/virtual-core';
10
14
 
11
15
  /**
@@ -116,6 +120,142 @@ declare class KjAccordionContentComponent {
116
120
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjAccordionContentComponent, "kj-accordion-content", never, {}, {}, never, ["*"], true, never>;
117
121
  }
118
122
 
123
+ /** Presentation role of an action-sheet row. */
124
+ type KjActionSheetRole = 'default' | 'destructive';
125
+ /** A single selectable action in an action sheet. */
126
+ interface KjActionSheetAction<V = unknown> {
127
+ /** Visible label. */
128
+ label: string;
129
+ /** Value resolved through the ref when this action is chosen. */
130
+ value: V;
131
+ /** Optional leading lucide icon name. */
132
+ icon?: string;
133
+ /** `'destructive'` renders danger styling. Defaults to `'default'`. */
134
+ role?: KjActionSheetRole;
135
+ /** Whether the row is non-interactive. */
136
+ disabled?: boolean;
137
+ }
138
+ /** Configuration for {@link KjActionSheetService.open}. */
139
+ interface KjActionSheetOptions<V = unknown> {
140
+ /** Optional heading shown above the actions. */
141
+ title?: string;
142
+ /** Optional supporting text below the title. */
143
+ description?: string;
144
+ /** The selectable actions, top to bottom. */
145
+ actions: KjActionSheetAction<V>[];
146
+ /** Label for the separated cancel row. Defaults to `'Cancel'`. Pass `null` to omit. */
147
+ cancelLabel?: string | null;
148
+ }
149
+ /**
150
+ * Reference returned by {@link KjActionSheetService.open}. Resolves the chosen
151
+ * action's `value`, or `undefined` when dismissed (Escape / backdrop / cancel).
152
+ *
153
+ * @doc-category Library/Overlay
154
+ */
155
+ declare class KjActionSheetRef<V = unknown> {
156
+ private readonly sheetRef;
157
+ /** Emits the selected value (or `undefined`) once the sheet has closed. */
158
+ readonly afterClosed$: Observable<V | undefined>;
159
+ /** Promise resolving with the selected value (or `undefined`). */
160
+ readonly result: Promise<V | undefined>;
161
+ constructor(sheetRef: {
162
+ afterClosed$: Observable<V | undefined>;
163
+ result: Promise<V | undefined>;
164
+ close(result?: V): void;
165
+ });
166
+ /** Dismiss the action sheet programmatically. */
167
+ close(result?: V): void;
168
+ }
169
+ /**
170
+ * Programmatic service for opening an **action sheet** — a data-driven,
171
+ * iOS-style list of actions presented in a bottom sheet. Built on
172
+ * {@link KjSheetService}; it adds no new overlay surface, only a styled
173
+ * `role="menu"` action list on top of the bottom-sheet primitive.
174
+ *
175
+ * @doc-category Library/Overlay
176
+ */
177
+ declare class KjActionSheetService {
178
+ private readonly sheet;
179
+ /**
180
+ * Open an action sheet.
181
+ *
182
+ * @param opts - Title, description, actions, and cancel label.
183
+ * @returns A {@link KjActionSheetRef} resolving the selected value.
184
+ */
185
+ open<V = unknown>(opts: KjActionSheetOptions<V>): KjActionSheetRef<V>;
186
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjActionSheetService, never>;
187
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<KjActionSheetService>;
188
+ }
189
+
190
+ /**
191
+ * Render body for an action sheet. Rendered programmatically by
192
+ * {@link import('./action-sheet.service').KjActionSheetService} inside the
193
+ * bottom-sheet primitive; reads its config from `SHEET_DATA` and resolves the
194
+ * chosen action's `value` through the {@link KjSheetRef}.
195
+ *
196
+ * The action list is `role="menu"` with `role="menuitem"` rows; each row is a
197
+ * ≥ 44px touch target.
198
+ *
199
+ * @internal
200
+ */
201
+ declare class KjActionSheet<V = unknown> {
202
+ /** Config injected via `SHEET_DATA` by the action-sheet service. */
203
+ protected readonly config: KjActionSheetOptions<V>;
204
+ private readonly ref;
205
+ protected get cancelLabel(): string | null;
206
+ /** Resolve the chosen action's value and close. */
207
+ protected select(action: KjActionSheetAction<V>): void;
208
+ /** Dismiss with `undefined`. */
209
+ protected cancel(): void;
210
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjActionSheet<any>, never>;
211
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjActionSheet<any>, "kj-action-sheet", never, {}, {}, never, never, true, never>;
212
+ }
213
+ /**
214
+ * Service-launched **action sheet** — a data-driven, iOS-style list of actions
215
+ * presented in a bottom sheet. Inject `KjActionSheetService` and call `open()`
216
+ * with a list of actions; selecting one resolves its `value`. Built entirely
217
+ * on the bottom-sheet primitive, so it inherits the same focus trap, scroll
218
+ * lock, drag-to-dismiss, and Escape handling. The wrapper component exists to
219
+ * host this documentation page.
220
+ *
221
+ * @doc
222
+ * @doc-name action-sheet
223
+ * @doc-is-main
224
+ * @doc-example Default
225
+ * A titled action sheet with a destructive action and a cancel row.
226
+ * @doc-file action-sheet.example.ts
227
+ * @doc-example With icons
228
+ * Actions with leading icons; the selected value resolves through the ref.
229
+ * @doc-file action-sheet.icons.example.ts
230
+ *
231
+ * @doc-keyboard
232
+ * Escape — Dismisses the sheet (resolves undefined)
233
+ * Tab / Shift+Tab — Cycles focus across the action rows (focus trap)
234
+ * Enter / Space — Activates the focused action row
235
+ *
236
+ * @doc-aria
237
+ * role — Panel is "dialog"; the action list is "menu" with "menuitem" rows
238
+ * aria-label — The sheet is named by its title (or "Actions" fallback)
239
+ *
240
+ * @doc-touch
241
+ * Every action row and the cancel row is a ≥ 44px touch target (WCAG 2.5.5).
242
+ * The bottom sheet's grab handle dismisses via drag.
243
+ *
244
+ * @doc-a11y
245
+ * Inherits the bottom sheet's a11y contract: focus trapped and restored to
246
+ * the trigger on close, siblings inert while open, only the topmost overlay
247
+ * receives Escape and outside-click. Destructive rows use `--kj-danger-*`
248
+ * tokens which meet AAA contrast in both themes.
249
+ *
250
+ * @doc-related sheet,dialog,dropdown-menu
251
+ *
252
+ * @doc-category Library/Overlay
253
+ */
254
+ declare class KjActionSheetComponent {
255
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjActionSheetComponent, never>;
256
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjActionSheetComponent, "kj-action-sheet-shell", never, {}, {}, never, ["*"], true, never>;
257
+ }
258
+
119
259
  /**
120
260
  * Styled wrapper around the `KjAlert` directive family. Provides the
121
261
  * persistent in-flow notification surface (severity-aware chrome, severity
@@ -1326,6 +1466,92 @@ declare class KjCarouselPauseComponent {
1326
1466
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjCarouselPauseComponent, "kj-carousel-pause", never, { "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1327
1467
  }
1328
1468
 
1469
+ /**
1470
+ * Reusable charting surface wrapping Apache ECharts.
1471
+ *
1472
+ * SSR-safe: the ECharts instance is created lazily in the browser only, after
1473
+ * the host element has rendered. `option` changes are pushed through
1474
+ * `setOption`, and a `ResizeObserver` keeps the chart sized to its container.
1475
+ *
1476
+ * ECharts paints into an opaque `<canvas>` that assistive technology cannot
1477
+ * read. The host therefore carries `role="img"` plus a required-in-practice
1478
+ * `ariaLabel`, giving screen readers a one-line description. Pass `caption`
1479
+ * for a longer summary — it renders in a visually-hidden `<span>` wired to the
1480
+ * host via `aria-describedby`, so it is announced even though the host is an
1481
+ * image (a leaf) to AT.
1482
+ *
1483
+ * @example
1484
+ * ```html
1485
+ * <kj-chart [option]="chartOption" height="320px" ariaLabel="Revenue by month" />
1486
+ * ```
1487
+ *
1488
+ * @doc-example Default
1489
+ * The default playground — a labelled bar chart with auto-resize.
1490
+ * @doc-file chart.example.ts
1491
+ * @doc-example Usage
1492
+ * A bar chart and a donut, side by side, each with an accessible name and
1493
+ * summary. Use this as the copy-paste starting point.
1494
+ * @doc-file chart.usage.example.ts
1495
+ * @doc-example Donut
1496
+ * A pie series with an inner radius for part-to-whole breakdowns.
1497
+ * @doc-file chart.donut.example.ts
1498
+ *
1499
+ * @doc-aria
1500
+ * role — Always `img`; the canvas is decorative-with-label
1501
+ * aria-label — Bound from `ariaLabel`; the chart's accessible name
1502
+ * aria-describedby — Present only when `caption` is set; points at the sr-only summary
1503
+ *
1504
+ * @doc-a11y
1505
+ * Screen readers get the `ariaLabel` as the accessible name and, when set,
1506
+ * the `caption` as the accessible description. The host is never focusable
1507
+ * and the canvas takes no tab stop, so keyboard users are not trapped. For
1508
+ * dense data, mirror the series in an adjacent `<table>` or export link.
1509
+ *
1510
+ * @doc-related card,table
1511
+ *
1512
+ * @doc-css-var
1513
+ * --kj-chart-height — Container height. Bound from the `height` input.
1514
+ *
1515
+ * @doc-category Library/Data display
1516
+ * @doc
1517
+ * @doc-name chart
1518
+ * @doc-description Accessible Apache ECharts wrapper with reactive options, auto-resize, and SSR-safe lazy init.
1519
+ * @doc-is-main
1520
+ */
1521
+ declare class KjChartComponent {
1522
+ /** The ECharts option object driving the chart. */
1523
+ readonly option: _angular_core.InputSignal<EChartsOption | undefined>;
1524
+ /** Container height — number is treated as pixels. Default `'280px'`. */
1525
+ readonly height: _angular_core.InputSignal<string | number>;
1526
+ /** Optional registered ECharts theme name. */
1527
+ readonly theme: _angular_core.InputSignal<string | undefined>;
1528
+ /**
1529
+ * Accessible name for the chart — required in practice. Surfaced via
1530
+ * `role="img"` + `aria-label` so screen readers describe the opaque canvas.
1531
+ * Keep it to a short phrase, e.g. `"Revenue by month"`.
1532
+ */
1533
+ readonly ariaLabel: _angular_core.InputSignal<string>;
1534
+ /**
1535
+ * Optional longer summary read to screen readers. Rendered in a
1536
+ * visually-hidden `<span>` and linked via `aria-describedby`. Use it to
1537
+ * spell out the takeaway a sighted user gets from the shape of the data.
1538
+ */
1539
+ readonly caption: _angular_core.InputSignal<string>;
1540
+ /** Stable id linking the sr-only caption span to `aria-describedby`. */
1541
+ protected readonly captionId: string;
1542
+ private readonly host;
1543
+ private readonly platformId;
1544
+ private readonly destroyRef;
1545
+ private chart;
1546
+ private observer;
1547
+ protected readonly resolvedHeight: () => string;
1548
+ constructor();
1549
+ private init;
1550
+ private dispose;
1551
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjChartComponent, never>;
1552
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjChartComponent, "kj-chart", never, { "option": { "alias": "option"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1553
+ }
1554
+
1329
1555
  /**
1330
1556
  * Typed bubble variant set. Mirrors the analysis preset list so consumer
1331
1557
  * templates get IDE autocomplete; the underlying `KjVariant` widens to
@@ -1495,6 +1721,186 @@ declare class KjChatFooterComponent {
1495
1721
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjChatFooterComponent, "kj-chat-footer", never, {}, {}, never, ["*"], true, [{ directive: typeof i1.KjChatFooter; inputs: { "kjState": "kjState"; }; outputs: {}; }]>;
1496
1722
  }
1497
1723
 
1724
+ /**
1725
+ * The AI thread surface: a scrollable message log driven by a {@link KjChatStore}.
1726
+ *
1727
+ * **Reuses `KjChatLog`** (core) for the `role="log"` message-log container, but
1728
+ * sets `kjChatLogLive="off"` because streamed tokens mutate an *existing*
1729
+ * message node — announcing every mutation would spam AT. Instead a single
1730
+ * dedicated **visually-hidden `aria-live="polite"` region** carries
1731
+ * announcements, fed by {@link KjChatAnnouncer}'s **coalescer** so the reply is
1732
+ * announced as whole sentences (never char-by-char, never duplicated). This is
1733
+ * the kit's accessibility differentiator.
1734
+ *
1735
+ * Provider-agnostic: pair with `KjPromptInput` and drive `KjChatStore` from any
1736
+ * model / stream — the kit ships **no** LLM SDK or backend.
1737
+ *
1738
+ * @doc-example Streaming (simulated)
1739
+ * A full send → simulated-stream → reply loop with slash commands, a Stop
1740
+ * button, tool-call cards and citations. No backend — a fake token generator
1741
+ * feeds the store on a timer.
1742
+ * @doc-file ai-chat.example.ts
1743
+ *
1744
+ * @doc-keyboard
1745
+ * Enter — Send the message
1746
+ * Shift+Enter — Insert a newline
1747
+ * Esc — Stop generating (while streaming) / close the slash menu
1748
+ * ArrowUp/Down — Move the slash-command selection
1749
+ *
1750
+ * @doc-aria
1751
+ * role — `log` on the thread container (reuses `KjChatLog`)
1752
+ * aria-live — `off` on the visible log; a dedicated visually-hidden
1753
+ * `polite` region carries coalesced sentence announcements
1754
+ * article — each message is an `article` (via `KjChat`) named by its role
1755
+ *
1756
+ * @doc-a11y
1757
+ * Streaming replies are announced by a coalesced polite live region on
1758
+ * sentence boundaries — never char-by-char — so screen-reader users hear
1759
+ * whole sentences once each. Keyboard send/stop, reduced-motion typing dots,
1760
+ * and ≥44px controls complete the AAA story.
1761
+ *
1762
+ * @doc-related chat,command-palette,textarea
1763
+ *
1764
+ * @doc-category Library/AI
1765
+ * @doc
1766
+ * @doc-name ai-chat
1767
+ * @doc-is-main
1768
+ * @doc-description Provider-agnostic AI chat thread with streaming append, coalesced live-region announcements, slash commands, tool-call cards, and citations.
1769
+ */
1770
+ declare class KjChatThread {
1771
+ /** The store driving this thread. */
1772
+ readonly store: _angular_core.InputSignal<KjChatStore>;
1773
+ /** Accessible label for the log landmark. */
1774
+ readonly kjLabel: _angular_core.InputSignal<string | undefined>;
1775
+ /** @internal — the coalescing announcer for the polite live region. */
1776
+ readonly announcer: KjChatAnnouncer;
1777
+ private readonly injector;
1778
+ private readonly logEl;
1779
+ private lastId;
1780
+ private lastLen;
1781
+ private prevStatus;
1782
+ constructor();
1783
+ private scrollToBottom;
1784
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjChatThread, never>;
1785
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjChatThread, "kj-chat-thread", never, { "store": { "alias": "store"; "required": true; "isSignal": true; }; "kjLabel": { "alias": "kjLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1786
+ }
1787
+
1788
+ /**
1789
+ * A parsed markdown block. Prose blocks carry a **pre-sanitised** HTML string
1790
+ * (escaped first, then a whitelist of inline tags applied); code blocks are
1791
+ * kept structural so the view can render a `<pre><code>` with a copy button.
1792
+ */
1793
+ type KjMdBlock = {
1794
+ readonly kind: 'prose';
1795
+ readonly html: string;
1796
+ } | {
1797
+ readonly kind: 'code';
1798
+ readonly lang: string;
1799
+ readonly code: string;
1800
+ };
1801
+ /**
1802
+ * Parse a lightweight markdown subset into blocks: fenced code blocks
1803
+ * (```lang) become structural `code` blocks; everything else becomes `prose`
1804
+ * blocks with sanitised inline HTML.
1805
+ *
1806
+ * Deliberately minimal (no tables / nested lists) and **self-contained** — the
1807
+ * repo ships no markdown engine on `main`. Swap in a full parser later without
1808
+ * touching the view.
1809
+ */
1810
+ declare function renderMarkdown(src: string): KjMdBlock[];
1811
+
1812
+ /**
1813
+ * Renders a single AI-thread message. Reuses the core `KjChat` row directive
1814
+ * for `role="article"` + side semantics, and renders the body per role:
1815
+ * user/assistant get a bubble with **safe markdown** (code blocks carry a copy
1816
+ * button), system gets a centered note, tool gets a tool-call card. Assistant
1817
+ * turns also surface tool-call cards, citations, and a reduced-motion typing
1818
+ * indicator while streaming.
1819
+ *
1820
+ * The message is given an `aria-label` (its role name) so AT announces
1821
+ * "Assistant, article" rather than an anonymous region — the visible content is
1822
+ * the message text itself.
1823
+ *
1824
+ * @doc
1825
+ * @doc-name ai-chat
1826
+ */
1827
+ declare class KjChatMessage {
1828
+ private readonly sanitizer;
1829
+ /** The message to render. */
1830
+ readonly message: _angular_core.InputSignal<KjChatMessageData>;
1831
+ /** User messages sit on the `end` side; everyone else on `start`. */
1832
+ readonly side: _angular_core.Signal<"start" | "end">;
1833
+ readonly roleLabel: _angular_core.Signal<string>;
1834
+ readonly avatarGlyph: _angular_core.Signal<string>;
1835
+ readonly showAvatar: _angular_core.Signal<boolean>;
1836
+ /** Parsed markdown blocks for the body. */
1837
+ readonly blocks: _angular_core.Signal<KjMdBlock[]>;
1838
+ private readonly _copied;
1839
+ readonly copiedIndex: _angular_core.Signal<number | null>;
1840
+ safe(html: string): SafeHtml;
1841
+ copy(code: string, index: number): Promise<void>;
1842
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjChatMessage, never>;
1843
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjChatMessage, "kj-chat-message", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1844
+ }
1845
+
1846
+ /**
1847
+ * Prompt composer for an AI thread: an auto-growing textarea with send / stop
1848
+ * controls, an optional attachment slot (`[kjPromptAttachments]`), and a
1849
+ * slash-command menu.
1850
+ *
1851
+ * **Keyboard:** `Enter` sends, `Shift+Enter` inserts a newline, `Esc` stops the
1852
+ * stream (when streaming) or closes the slash menu; `↑/↓` move the slash
1853
+ * selection and `Enter` picks it. The menu is a `role="listbox"`; the textarea
1854
+ * keeps DOM focus and points `aria-activedescendant` at the active option.
1855
+ *
1856
+ * **Slash matching reuses the command-palette engine** via
1857
+ * `matchSlashCommands` (backed by the palette's `kjSubstringFilter`).
1858
+ *
1859
+ * @doc
1860
+ * @doc-name ai-chat
1861
+ */
1862
+ declare class KjPromptInput {
1863
+ private readonly uid;
1864
+ readonly textareaId: string;
1865
+ readonly listboxId: string;
1866
+ /** Two-way bound draft text. */
1867
+ readonly kjValue: _angular_core.ModelSignal<string>;
1868
+ /** Placeholder text. */
1869
+ readonly kjPlaceholder: _angular_core.InputSignal<string>;
1870
+ /** Accessible label for the textarea. */
1871
+ readonly kjLabel: _angular_core.InputSignal<string>;
1872
+ /** When true, show the Stop button instead of Send. */
1873
+ readonly kjStreaming: _angular_core.InputSignal<boolean>;
1874
+ /** Disable the composer entirely. */
1875
+ readonly kjDisabled: _angular_core.InputSignal<boolean>;
1876
+ /** Available slash commands. */
1877
+ readonly kjSlashCommands: _angular_core.InputSignal<readonly KjSlashCommand[]>;
1878
+ /** Emits the trimmed message text on send. */
1879
+ readonly kjSend: _angular_core.OutputEmitterRef<string>;
1880
+ /** Emits when the user requests a stop. */
1881
+ readonly kjStop: _angular_core.OutputEmitterRef<void>;
1882
+ /** Emits the picked slash command. */
1883
+ readonly kjSlashSelect: _angular_core.OutputEmitterRef<KjSlashCommand>;
1884
+ private readonly ta;
1885
+ private readonly _active;
1886
+ readonly activeIndex: _angular_core.Signal<number>;
1887
+ private readonly slash;
1888
+ readonly slashMatches: _angular_core.Signal<KjSlashCommand[]>;
1889
+ readonly slashOpen: _angular_core.Signal<boolean>;
1890
+ constructor();
1891
+ optionId(i: number): string;
1892
+ onInput(ev: Event): void;
1893
+ onKeydown(ev: KeyboardEvent): void;
1894
+ onSubmit(ev: Event): void;
1895
+ onStop(): void;
1896
+ pickSlash(ev: Event, cmd: KjSlashCommand): void;
1897
+ private commitSlash;
1898
+ private send;
1899
+ private autogrow;
1900
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjPromptInput, never>;
1901
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjPromptInput, "kj-prompt-input", never, { "kjValue": { "alias": "kjValue"; "required": false; "isSignal": true; }; "kjPlaceholder": { "alias": "kjPlaceholder"; "required": false; "isSignal": true; }; "kjLabel": { "alias": "kjLabel"; "required": false; "isSignal": true; }; "kjStreaming": { "alias": "kjStreaming"; "required": false; "isSignal": true; }; "kjDisabled": { "alias": "kjDisabled"; "required": false; "isSignal": true; }; "kjSlashCommands": { "alias": "kjSlashCommands"; "required": false; "isSignal": true; }; }, { "kjValue": "kjValueChange"; "kjSend": "kjSend"; "kjStop": "kjStop"; "kjSlashSelect": "kjSlashSelect"; }, never, ["[kjPromptAttachments]"], true, never>;
1902
+ }
1903
+
1498
1904
  /**
1499
1905
  * Styled wrapper around the headless `KjCheckbox` directive.
1500
1906
  *
@@ -2077,6 +2483,70 @@ declare class KjDatePickerComponent {
2077
2483
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjDatePickerComponent, "kj-date-picker", never, { "kjValue": { "alias": "kjValue"; "required": false; "isSignal": true; }; "kjOpen": { "alias": "kjOpen"; "required": false; "isSignal": true; }; "kjMin": { "alias": "kjMin"; "required": false; "isSignal": true; }; "kjMax": { "alias": "kjMax"; "required": false; "isSignal": true; }; "kjDisabledDates": { "alias": "kjDisabledDates"; "required": false; "isSignal": true; }; "kjLocale": { "alias": "kjLocale"; "required": false; "isSignal": true; }; "kjFirstDayOfWeek": { "alias": "kjFirstDayOfWeek"; "required": false; "isSignal": true; }; "kjPlaceholder": { "alias": "kjPlaceholder"; "required": false; "isSignal": true; }; "kjReadonly": { "alias": "kjReadonly"; "required": false; "isSignal": true; }; "kjDisabled": { "alias": "kjDisabled"; "required": false; "isSignal": true; }; "kjSize": { "alias": "kjSize"; "required": false; "isSignal": true; }; }, { "kjValue": "kjValueChange"; "kjOpen": "kjOpenChange"; }, never, never, true, never>;
2078
2484
  }
2079
2485
 
2486
+ /**
2487
+ * Styled Date Range Presets — a compact, keyboard-navigable list of named
2488
+ * quick-selects ("Today", "Last 7 days", "This quarter", …). Picking one
2489
+ * resolves its inclusive `{ start, end }` range and commits the two-way
2490
+ * `kjValue`.
2491
+ *
2492
+ * Built as the reusable presets primitive from the date/time roadmap slice:
2493
+ * it slots beside a range calendar, but works standalone against any
2494
+ * `signal<KjDateRange | null>`.
2495
+ *
2496
+ * **Accessibility (WCAG 2.1 AAA):**
2497
+ * - the list is `role="listbox"` with an accessible name; each preset is a
2498
+ * `role="option"` `<button>` carrying `aria-selected`.
2499
+ * - roving tabindex — one tab stop; Up/Down (and Home/End) move between
2500
+ * options; Enter / Space select (native button activation).
2501
+ * - the selected preset is conveyed by `aria-selected`, not color alone.
2502
+ *
2503
+ * @doc-example Default
2504
+ * The ten built-in presets bound to a `signal<KjDateRange | null>`.
2505
+ * @doc-file date-range-presets.example.ts
2506
+ * @doc-example Custom presets
2507
+ * Spread `defaultDateRangePresets()` and append your own `getRange`.
2508
+ * @doc-file date-range-presets.custom.example.ts
2509
+ *
2510
+ * @doc-keyboard
2511
+ * ArrowDown|ArrowUp — Moves between presets
2512
+ * Home|End — Jumps to the first / last preset
2513
+ * Enter|Space — Selects the focused preset
2514
+ *
2515
+ * @doc-aria
2516
+ * role="listbox" — On the container; `aria-orientation="vertical"`
2517
+ * aria-label — Names the list ("Date range presets" by default)
2518
+ * role="option" — On each preset button
2519
+ * aria-selected — Reflects the chosen preset
2520
+ *
2521
+ * @doc-css-var
2522
+ * --kj-date-range-presets-min-width — Min width of the list. Default 12rem.
2523
+ *
2524
+ * @doc-touch
2525
+ * Preset rows are 44px tall to meet the WCAG 2.5.5 target size.
2526
+ *
2527
+ * @doc-related date-picker,calendar
2528
+ *
2529
+ * @doc-category Library/Data input
2530
+ * @doc
2531
+ * @doc-name date-range-presets
2532
+ * @doc-description Themed listbox of date-range quick-selects that resolve to an inclusive start/end range.
2533
+ * @doc-is-main
2534
+ */
2535
+ declare class KjDateRangePresetsComponent {
2536
+ /** Selected range. Two-way bindable — `[(kjValue)]`. `null` clears. */
2537
+ readonly kjValue: _angular_core.ModelSignal<KjDateRange$1 | null>;
2538
+ /** Presets to render. Defaults to the ten built-ins. */
2539
+ readonly kjPresets: _angular_core.InputSignal<readonly KjDateRangePreset[]>;
2540
+ /** Accessible name for the list. */
2541
+ readonly kjLabel: _angular_core.InputSignal<string>;
2542
+ /** Injectable "now" for the preset math. Defaults to the current instant. */
2543
+ readonly kjNow: _angular_core.InputSignal<Date | null>;
2544
+ /** Disable the whole list. */
2545
+ readonly kjDisabled: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
2546
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjDateRangePresetsComponent, never>;
2547
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjDateRangePresetsComponent, "kj-date-range-presets", never, { "kjValue": { "alias": "kjValue"; "required": false; "isSignal": true; }; "kjPresets": { "alias": "kjPresets"; "required": false; "isSignal": true; }; "kjLabel": { "alias": "kjLabel"; "required": false; "isSignal": true; }; "kjNow": { "alias": "kjNow"; "required": false; "isSignal": true; }; "kjDisabled": { "alias": "kjDisabled"; "required": false; "isSignal": true; }; }, { "kjValue": "kjValueChange"; }, never, never, true, never>;
2548
+ }
2549
+
2080
2550
  /** Format a Date as a locale short date + HH:mm time. */
2081
2551
  declare function formatDateTime(d: Date, locale: string): string;
2082
2552
  /**
@@ -2210,6 +2680,79 @@ declare class KjDialogComponent {
2210
2680
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjDialogComponent, "kj-dialog-shell", never, {}, {}, never, ["*"], true, never>;
2211
2681
  }
2212
2682
 
2683
+ /**
2684
+ * A visible, keyboard-native control that flips the application's logical text
2685
+ * direction between `ltr` and `rtl`.
2686
+ *
2687
+ * It is the concrete UI the locale provider pointed at: it reads
2688
+ * `KjLocale.isRtl()` and calls `KjLocale.setDirection(...)`. Paired with
2689
+ * `provideKjDocumentDirection()`, one click mirrors the whole page —
2690
+ * `<html dir>` flips and every logical-property layout follows.
2691
+ *
2692
+ * Renders a real `<button type="button">` so it is reachable by Tab and
2693
+ * operable with Enter / Space for free. `aria-pressed` reflects the RTL state
2694
+ * (pressed = RTL), and an accessible name is always present via
2695
+ * `[kjAriaLabel]`. Project custom content to replace the default `LTR` / `RTL`
2696
+ * text label.
2697
+ *
2698
+ * @example
2699
+ * ```html
2700
+ * <kj-direction-toggle />
2701
+ * <kj-direction-toggle kjAriaLabel="Toggle Arabic layout">اتجاه</kj-direction-toggle>
2702
+ * ```
2703
+ *
2704
+ * @doc-example Default
2705
+ * The toggle wired to `KjLocale` — click to flip `<html dir>` and mirror the page.
2706
+ * @doc-file direction-toggle.example.ts
2707
+ *
2708
+ * @doc-keyboard
2709
+ * Enter — Toggles the direction (native button activation)
2710
+ * Space — Toggles the direction (native button activation)
2711
+ * Tab — Moves focus to / from the toggle
2712
+ *
2713
+ * @doc-aria
2714
+ * aria-pressed — Reflects the RTL state (true when direction is rtl)
2715
+ * aria-label — Accessible name; defaults to "Toggle right-to-left layout"
2716
+ * data-direction — Mirrors the resolved direction (ltr | rtl) for theme CSS
2717
+ *
2718
+ * @doc-touch
2719
+ * The button reserves a 44×44px hit area (WCAG 2.5.5) regardless of label size.
2720
+ *
2721
+ * @doc-a11y
2722
+ * A native `<button>` with `aria-pressed` — AT announces "toggle button,
2723
+ * pressed/not pressed". Because mirroring is CSS-logical only, DOM and tab
2724
+ * order are unchanged in both directions (WCAG 1.3.2).
2725
+ *
2726
+ * @doc-related locale
2727
+ *
2728
+ * @doc-css-var
2729
+ * --kj-direction-toggle-bg — Background at rest.
2730
+ * --kj-direction-toggle-fg — Text color.
2731
+ * --kj-direction-toggle-border-color — Border color.
2732
+ * --kj-direction-toggle-radius — Corner radius.
2733
+ * --kj-direction-toggle-padding-x — Inline padding.
2734
+ * --kj-direction-toggle-padding-y — Block padding.
2735
+ *
2736
+ * @doc-category Library/Navigation
2737
+ * @doc
2738
+ * @doc-name direction-toggle
2739
+ * @doc-description Accessible LTR/RTL toggle button that drives KjLocale.direction and mirrors the page.
2740
+ * @doc-is-main
2741
+ */
2742
+ declare class KjDirectionToggle {
2743
+ private readonly locale;
2744
+ /** Resolved logical direction from the shared `KjLocale`. */
2745
+ readonly direction: _angular_core.Signal<i1.KjDirection>;
2746
+ /** `true` when the resolved direction is `rtl`. Drives `aria-pressed`. */
2747
+ readonly isRtl: _angular_core.Signal<boolean>;
2748
+ /** Accessible name for the toggle button. */
2749
+ readonly kjAriaLabel: _angular_core.InputSignal<string>;
2750
+ /** Flip the direction: `ltr` ⇄ `rtl`. */
2751
+ toggle(): void;
2752
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjDirectionToggle, never>;
2753
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjDirectionToggle, "kj-direction-toggle", never, { "kjAriaLabel": { "alias": "kjAriaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2754
+ }
2755
+
2213
2756
  /**
2214
2757
  * Service-launched drawer (edge-anchored panel). Inject `KjDrawerService` and
2215
2758
  * call `open()` with a template; the drawer absorbs the bottom-sheet pattern
@@ -2368,6 +2911,109 @@ declare class KjDropdownMenuComponent {
2368
2911
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjDropdownMenuComponent, "kj-dropdown-menu", never, {}, {}, never, ["*"], true, never>;
2369
2912
  }
2370
2913
 
2914
+ /**
2915
+ * Styled code editor — a themed `<kj-editor>` wrapping the headless `KjEditor`
2916
+ * directive (which wraps Monaco). Adds a kj-token-synced Monaco theme that
2917
+ * re-applies on theme switch, an optional toolbar (language badge + copy) and
2918
+ * status bar (cursor position + a keyboard-escape hint), reduced-motion, and a
2919
+ * loading region.
2920
+ *
2921
+ * Monaco is browser-only and heavy; it loads lazily after first render via
2922
+ * `KjEditorLoader`. Configure the source app-wide with `provideMonaco()`
2923
+ * (defaults to a CDN loader so the base bundle stays lean).
2924
+ *
2925
+ * @example
2926
+ * ```html
2927
+ * <kj-editor [(kjValue)]="code" kjLanguage="typescript" style="height:340px" />
2928
+ * ```
2929
+ * @doc-category Components/Data
2930
+ * @doc
2931
+ * @doc-name editor
2932
+ * @doc-is-main
2933
+ * @doc-description Themed Monaco code editor — syntax highlighting, two-way value, kj-theme sync, and AAA keyboard access.
2934
+ * @doc-example Default [full]
2935
+ * A TypeScript editor with the toolbar and status bar, two-way bound to a signal.
2936
+ * @doc-file editor.example.ts
2937
+ * @doc-example Languages [full]
2938
+ * Switch the `kjLanguage` to re-tokenise the same buffer across TS / HTML / CSS / JSON.
2939
+ * @doc-file editor.languages.example.ts
2940
+ * @doc-example Read-only [full]
2941
+ * A read-only viewer with the minimap enabled and line numbers on.
2942
+ * @doc-file editor.readonly.example.ts
2943
+ * @doc-example Options [full]
2944
+ * Toggle readonly, minimap, word wrap, line numbers and font size live.
2945
+ * @doc-file editor.options.example.ts
2946
+ *
2947
+ * @doc-keyboard
2948
+ * Tab Inserts a tab / indents (Monaco default)
2949
+ * Ctrl+M Toggles Tab-trapping — flips Tab to move focus in/out (no keyboard trap)
2950
+ * Alt+F1 Opens Monaco's accessibility help
2951
+ * Standard editing keys Arrow / Home / End / PageUp-Down / selection / undo-redo
2952
+ *
2953
+ * @doc-aria
2954
+ * aria-label Monaco's textarea is labelled from kjAriaLabel (defaults to "Code editor")
2955
+ * role=status The loading region announces the editor is loading
2956
+ */
2957
+ declare class KjEditorComponent {
2958
+ private readonly hostRef;
2959
+ private readonly destroyRef;
2960
+ private readonly loader;
2961
+ readonly editorHost: _angular_core.Signal<ElementRef<HTMLDivElement>>;
2962
+ /** Two-way editor text. */
2963
+ readonly kjValue: _angular_core.ModelSignal<string>;
2964
+ /** Code language — friendly name or Monaco id; short aliases (`ts`, `md`) normalised. */
2965
+ readonly kjLanguage: _angular_core.InputSignal<KjEditorLanguage>;
2966
+ /** Read-only mode. */
2967
+ readonly kjReadonly: _angular_core.InputSignal<boolean>;
2968
+ /** Show the minimap. */
2969
+ readonly kjMinimap: _angular_core.InputSignal<boolean>;
2970
+ /** Gutter line-number mode. */
2971
+ readonly kjLineNumbers: _angular_core.InputSignal<KjEditorLineNumbers>;
2972
+ /** Soft wrap. */
2973
+ readonly kjWordWrap: _angular_core.InputSignal<KjEditorWordWrap>;
2974
+ /** Font size in px. */
2975
+ readonly kjFontSize: _angular_core.InputSignal<number>;
2976
+ /** Grow to fit content instead of filling the container (great for code snippets). */
2977
+ readonly kjAutoHeight: _angular_core.InputSignal<boolean>;
2978
+ /** Cap for `kjAutoHeight` in px (content scrolls past it). Uncapped when unset. */
2979
+ readonly kjMaxHeight: _angular_core.InputSignal<number | undefined>;
2980
+ /** Accessible name for the editor. */
2981
+ readonly kjAriaLabel: _angular_core.InputSignal<string>;
2982
+ /** Start with Tab moving focus out instead of indenting. */
2983
+ readonly kjTabFocusMode: _angular_core.InputSignal<boolean>;
2984
+ /** Escape hatch — merged last into Monaco's construction options. */
2985
+ readonly kjOptions: _angular_core.InputSignal<monaco_editor.editor.IStandaloneEditorConstructionOptions>;
2986
+ /** Show the toolbar (language badge + copy button). */
2987
+ readonly kjShowToolbar: _angular_core.InputSignal<boolean>;
2988
+ /** Show the status bar (cursor position + keyboard hint). */
2989
+ readonly kjShowStatusBar: _angular_core.InputSignal<boolean>;
2990
+ /** True until Monaco has mounted. */
2991
+ readonly loading: _angular_core.WritableSignal<boolean>;
2992
+ /** Cursor position for the status bar. */
2993
+ readonly line: _angular_core.WritableSignal<number>;
2994
+ readonly column: _angular_core.WritableSignal<number>;
2995
+ readonly copied: _angular_core.WritableSignal<boolean>;
2996
+ /** Current kj-derived Monaco theme id, bound onto the directive. */
2997
+ readonly themeId: _angular_core.WritableSignal<string>;
2998
+ /** Human label for the platform-appropriate tab-escape shortcut. */
2999
+ readonly escapeHint: _angular_core.Signal<string>;
3000
+ private monaco;
3001
+ constructor();
3002
+ /** Wired from the directive's `kjReady` output. */
3003
+ onReady(editor: KjEditorInstance): void;
3004
+ copy(): Promise<void>;
3005
+ /**
3006
+ * Read the resolved `--kj-*` surface tokens off the host, derive the scheme
3007
+ * from background luminance (theme-agnostic — works for any kj theme), define
3008
+ * a Monaco theme tinted with those tokens, and apply it globally.
3009
+ */
3010
+ private syncTheme;
3011
+ /** Resolve a CSS custom property to [r,g,b] via a probe element. */
3012
+ private resolveColor;
3013
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjEditorComponent, never>;
3014
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjEditorComponent, "kj-editor", never, { "kjValue": { "alias": "kjValue"; "required": false; "isSignal": true; }; "kjLanguage": { "alias": "kjLanguage"; "required": false; "isSignal": true; }; "kjReadonly": { "alias": "kjReadonly"; "required": false; "isSignal": true; }; "kjMinimap": { "alias": "kjMinimap"; "required": false; "isSignal": true; }; "kjLineNumbers": { "alias": "kjLineNumbers"; "required": false; "isSignal": true; }; "kjWordWrap": { "alias": "kjWordWrap"; "required": false; "isSignal": true; }; "kjFontSize": { "alias": "kjFontSize"; "required": false; "isSignal": true; }; "kjAutoHeight": { "alias": "kjAutoHeight"; "required": false; "isSignal": true; }; "kjMaxHeight": { "alias": "kjMaxHeight"; "required": false; "isSignal": true; }; "kjAriaLabel": { "alias": "kjAriaLabel"; "required": false; "isSignal": true; }; "kjTabFocusMode": { "alias": "kjTabFocusMode"; "required": false; "isSignal": true; }; "kjOptions": { "alias": "kjOptions"; "required": false; "isSignal": true; }; "kjShowToolbar": { "alias": "kjShowToolbar"; "required": false; "isSignal": true; }; "kjShowStatusBar": { "alias": "kjShowStatusBar"; "required": false; "isSignal": true; }; }, { "kjValue": "kjValueChange"; }, never, never, true, never>;
3015
+ }
3016
+
2371
3017
  /** Tonal variant for the empty state. */
2372
3018
  type KjEmptyStateVariant = 'neutral' | 'error';
2373
3019
  /** Live-region politeness setting. `false` opts out entirely. */
@@ -2981,7 +3627,7 @@ declare class KjFormSummaryComponent {
2981
3627
  * ```
2982
3628
  *
2983
3629
  * @doc-example Gallery
2984
- * @doc-file ../icon.gallery.example.ts
3630
+ * @doc-file ../_examples/icon.gallery.example.ts
2985
3631
  *
2986
3632
  * @doc-css-var
2987
3633
  * --kj-icon — Resolved icon value (url("...") or "glyph"). Set by the directive — read by the rendered .kj-icon.
@@ -5069,6 +5715,150 @@ declare class KjRadioComponent {
5069
5715
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjRadioComponent, "kj-radio", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
5070
5716
  }
5071
5717
 
5718
+ /**
5719
+ * Styled, accessible rich-text editor composing the headless
5720
+ * {@link KjRichTextEditor} core directive with a **dynamic** `role="toolbar"`
5721
+ * that renders whatever the active features contribute (sorted by group then
5722
+ * order) — no hardcoded buttons. Feature overlays (link/image editors) render in
5723
+ * an accessible `role="dialog"` popover.
5724
+ *
5725
+ * Zero-config gives the full editor via {@link defaultFeatures}; pass a subset to
5726
+ * `kjFeatures` (or `provideKjRichText(...)`) to load only the packages you need.
5727
+ *
5728
+ * @example
5729
+ * ```html
5730
+ * <kj-rich-text-editor kjLabel="Message" [(kjValue)]="html" />
5731
+ * <kj-rich-text-editor [kjFeatures]="[bold(), italic(), link()]" />
5732
+ * ```
5733
+ * @doc-category Library/Forms
5734
+ * @doc
5735
+ * @doc-name rich-text-editor
5736
+ * @doc-is-main
5737
+ * @doc-description Accessible, feature-composed rich-text editor wrapping Lexical with a dynamic toolbar.
5738
+ * @doc-example Default [full]
5739
+ * The full editor: the toolbar renders every default feature's contribution.
5740
+ * @doc-file rich-text-editor.example.ts
5741
+ * @doc-example Minimal (subset of features) [full]
5742
+ * Only bold, italic and link — the toolbar and loaded packages shrink to match.
5743
+ * @doc-file rich-text-editor.minimal.example.ts
5744
+ * @doc-example Custom feature [full]
5745
+ * A feature contributing its own toolbar button + node in a few lines.
5746
+ * @doc-file rich-text-editor.custom-node.example.ts
5747
+ * @doc-example Readonly [full]
5748
+ * Renders existing content without editing affordances.
5749
+ * @doc-file rich-text-editor.readonly.example.ts
5750
+ * @doc-aria role="textbox" — the editable surface, with aria-multiline="true".
5751
+ * @doc-aria role="toolbar" — the formatting controls, arrow-key navigable.
5752
+ * @doc-a11y Toggle items expose aria-pressed; feature actions announce via an aria-live region.
5753
+ * @doc-css-var --kj-rte-bg — Editor background.
5754
+ * @doc-css-var --kj-rte-border-color — Border colour.
5755
+ * @doc-css-var --kj-rte-radius — Corner radius.
5756
+ * @doc-css-var --kj-rte-min-height — Minimum height of the editable area.
5757
+ * @doc-related input,form,field
5758
+ */
5759
+ declare class KjRichTextEditorComponent {
5760
+ private readonly env;
5761
+ /** Active features. Defaults to the full {@link defaultFeatures} bundle. */
5762
+ readonly kjFeatures: _angular_core.InputSignal<readonly KjRichTextFeature[]>;
5763
+ /** Initial HTML content. */
5764
+ readonly kjValue: _angular_core.InputSignal<string>;
5765
+ /** Accessible label for the editable region (ignored when `kjLabelledBy` is set). */
5766
+ readonly kjLabel: _angular_core.InputSignal<string>;
5767
+ /** ID of an external element that labels the editable region. */
5768
+ readonly kjLabelledBy: _angular_core.InputSignal<string>;
5769
+ /** Placeholder shown while the editor is empty. */
5770
+ readonly kjPlaceholder: _angular_core.InputSignal<string>;
5771
+ /** Render read-only (non-editable) content. */
5772
+ readonly kjReadonly: _angular_core.InputSignal<boolean>;
5773
+ /** Accessible label for the toolbar. */
5774
+ readonly kjToolbarLabel: _angular_core.InputSignal<string>;
5775
+ /** Whether the formatting toolbar is shown. */
5776
+ readonly kjShowToolbar: _angular_core.InputSignal<boolean>;
5777
+ /** Emits the serialized HTML whenever the content changes. */
5778
+ readonly valueChange: _angular_core.OutputEmitterRef<string>;
5779
+ /** Emits the plain text whenever the content changes. */
5780
+ readonly textChange: _angular_core.OutputEmitterRef<string>;
5781
+ /** Emits the Lexical serialized state whenever the content changes. */
5782
+ readonly jsonChange: _angular_core.OutputEmitterRef<unknown>;
5783
+ /** @internal Stable id used for aria-controls / labelledby wiring. */
5784
+ protected readonly contentId: string;
5785
+ private readonly live;
5786
+ private readonly overlayInjectors;
5787
+ /** Run a toolbar item and announce toggle state changes to AT. */
5788
+ protected onRun(ed: KjRichTextEditor, item: KjRteToolbarItem): void;
5789
+ /** Announce a message via the live region (also handles feature announcements). */
5790
+ protected announce(message: string): void;
5791
+ /** Injector that exposes the overlay's data via KJ_RTE_OVERLAY_DATA. */
5792
+ protected overlayInjector(active: KjActiveOverlay): Injector;
5793
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjRichTextEditorComponent, never>;
5794
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjRichTextEditorComponent, "kj-rich-text-editor", never, { "kjFeatures": { "alias": "kjFeatures"; "required": false; "isSignal": true; }; "kjValue": { "alias": "kjValue"; "required": false; "isSignal": true; }; "kjLabel": { "alias": "kjLabel"; "required": false; "isSignal": true; }; "kjLabelledBy": { "alias": "kjLabelledBy"; "required": false; "isSignal": true; }; "kjPlaceholder": { "alias": "kjPlaceholder"; "required": false; "isSignal": true; }; "kjReadonly": { "alias": "kjReadonly"; "required": false; "isSignal": true; }; "kjToolbarLabel": { "alias": "kjToolbarLabel"; "required": false; "isSignal": true; }; "kjShowToolbar": { "alias": "kjShowToolbar"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "textChange": "textChange"; "jsonChange": "jsonChange"; }, never, never, true, never>;
5795
+ }
5796
+
5797
+ /** Bold (Ctrl/Cmd+B). */
5798
+ declare function bold(): KjRichTextFeature;
5799
+ /** Italic (Ctrl/Cmd+I). */
5800
+ declare function italic(): KjRichTextFeature;
5801
+ /** Underline (Ctrl/Cmd+U). */
5802
+ declare function underline(): KjRichTextFeature;
5803
+ /** Strikethrough. */
5804
+ declare function strike(): KjRichTextFeature;
5805
+ /** Inline code. */
5806
+ declare function inlineCode(): KjRichTextFeature;
5807
+
5808
+ /** Heading levels this feature can contribute. */
5809
+ type KjHeadingLevel = 1 | 2 | 3;
5810
+ /**
5811
+ * Heading feature. Lazily loads `@lexical/rich-text` for the heading node +
5812
+ * creator, and contributes one toolbar toggle per configured level.
5813
+ */
5814
+ declare function heading(options?: {
5815
+ levels?: readonly KjHeadingLevel[];
5816
+ }): KjRichTextFeature;
5817
+
5818
+ /** Bullet (unordered) list. Lazily loads `@lexical/list`. */
5819
+ declare function bulletList(): KjRichTextFeature;
5820
+ /** Ordered (numbered) list. Lazily loads `@lexical/list`. */
5821
+ declare function orderedList(): KjRichTextFeature;
5822
+
5823
+ /** Blockquote feature. Lazily loads `@lexical/rich-text` for the quote node. */
5824
+ declare function quote(): KjRichTextFeature;
5825
+
5826
+ /** Code block feature. Lazily loads `@lexical/code` (and its Prism grammars). */
5827
+ declare function codeBlock(): KjRichTextFeature;
5828
+
5829
+ /**
5830
+ * Link feature. Lazily loads core `lexical` (for selection reads) and
5831
+ * `@lexical/link`. Contributes the link node, a Ctrl/Cmd+K shortcut, a toolbar
5832
+ * toggle, and the link-editor overlay.
5833
+ */
5834
+ declare function link(): KjRichTextFeature;
5835
+
5836
+ /**
5837
+ * Image feature. Lazily loads core `lexical` and builds a self-rendering image
5838
+ * node via `createKjImageNode`. Contributes a toolbar button + the image-editor
5839
+ * overlay (which collects URL + alt text).
5840
+ */
5841
+ declare function image(): KjRichTextFeature;
5842
+
5843
+ /**
5844
+ * Markdown shortcuts (`# `, `- `, `1. `, `> `, `` ``` ``, `**bold**`, …). Lazily
5845
+ * loads `@lexical/markdown`. No toolbar UI — it's a typing behaviour.
5846
+ */
5847
+ declare function markdownShortcuts(): KjRichTextFeature;
5848
+
5849
+ /**
5850
+ * Undo/redo history. Lazily loads `@lexical/history` and contributes undo/redo
5851
+ * toolbar buttons (disabled until the respective action is available).
5852
+ */
5853
+ declare function history(): KjRichTextFeature;
5854
+
5855
+ /**
5856
+ * The full default feature bundle, so a zero-config `<kj-rich-text-editor>`
5857
+ * still gives a complete editor. Compose your own subset with the individual
5858
+ * factories to load only the packages you need.
5859
+ */
5860
+ declare function defaultFeatures(): KjRichTextFeature[];
5861
+
5072
5862
  /**
5073
5863
  * Select root. Two-way bind via `[(value)]`.
5074
5864
  *
@@ -5183,6 +5973,73 @@ declare class KjOptionComponent {
5183
5973
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjOptionComponent, "kj-option", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "kjLabel": { "alias": "kjLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
5184
5974
  }
5185
5975
 
5976
+ /**
5977
+ * Service-launched **bottom sheet** — a mobile-first, bottom-anchored modal
5978
+ * surface with a grab handle and drag-to-dismiss. Inject `KjSheetService` and
5979
+ * call `open()` with a body component; the sheet slides up from the bottom
5980
+ * edge, traps focus, and locks background scroll. It reuses the same overlay
5981
+ * primitive stack as the drawer and dialog — bottom sheet is the mobile
5982
+ * composition of that engine, not a new one. The wrapper component exists to
5983
+ * host this documentation page.
5984
+ *
5985
+ * @doc
5986
+ * @doc-name sheet
5987
+ * @doc-is-main
5988
+ * @doc-example Default
5989
+ * A service-launched bottom sheet with a grab handle and drag-to-dismiss.
5990
+ * @doc-file sheet.example.ts
5991
+ * @doc-example Detents
5992
+ * `detent` sets the initial resting height — auto / half / full.
5993
+ * @doc-file sheet.detents.example.ts
5994
+ * @doc-example Scrollable
5995
+ * A tall body scrolls inside the sheet while the grab handle stays pinned.
5996
+ * @doc-file sheet.scrollable.example.ts
5997
+ *
5998
+ * @doc-keyboard
5999
+ * Escape — Closes the sheet (only the topmost overlay when stacked)
6000
+ * Enter / Space — Dismisses when the grab handle is focused
6001
+ * Tab — Cycles focus within the sheet (focus trap via `tabCycle({ returnFocus: true })`)
6002
+ * Shift+Tab — Cycles backward
6003
+ *
6004
+ * @doc-aria
6005
+ * role — "dialog"; `aria-modal="true"` while the backdrop is active
6006
+ * aria-label — Set via the `ariaLabel` option when no heading is projected
6007
+ * aria-labelledby — Wire to the id of your sheet heading for the accessible name
6008
+ * data-state — "open" / "closed" — drives the slide-up transform
6009
+ * data-kj-detent — Mirrors the resolved initial height for theming hooks
6010
+ *
6011
+ * @doc-css-var
6012
+ * --kj-sheet-bg — Panel background fill. Defaults to --kj-bg-elevated.
6013
+ * --kj-sheet-fg — Foreground text color. Defaults to --kj-fg-default.
6014
+ * --kj-sheet-shadow — Box shadow off the panel. Defaults to --kj-shadow-lg.
6015
+ * --kj-sheet-radius — Top corner radius. Defaults to --kj-radius-box.
6016
+ * --kj-sheet-max-height — Cap on the sheet height. Defaults to 92vh.
6017
+ * --kj-sheet-grip-color — Grab-handle pill color. Defaults to --kj-border-strong.
6018
+ *
6019
+ * @doc-touch
6020
+ * The grab handle is a ≥ 44px-tall touch target (WCAG 2.5.5) even though the
6021
+ * visible grip pill is small. Downward drag past 40% of the sheet height (or
6022
+ * 600 px/s) dismisses. Footer action buttons should use `kj-button`
6023
+ * `size="lg"` (≥ 44px).
6024
+ *
6025
+ * @doc-a11y
6026
+ * Focus is trapped inside the sheet while open and returned to the triggering
6027
+ * element on close (`returnFocus: true`). Siblings outside the sheet are
6028
+ * marked `inert` while it is open. Stacking is safe — only the topmost overlay
6029
+ * receives Escape and outside-click. The wrapper does not generate an
6030
+ * accessible name; provide one via `aria-labelledby` (a visible heading) or
6031
+ * the `ariaLabel` option. Slide transitions respect
6032
+ * `prefers-reduced-motion`, falling back to an opacity fade.
6033
+ *
6034
+ * @doc-related drawer,dialog,action-sheet
6035
+ *
6036
+ * @doc-category Library/Overlay
6037
+ */
6038
+ declare class KjSheetComponent {
6039
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjSheetComponent, never>;
6040
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjSheetComponent, "kj-sheet-shell", never, {}, {}, never, ["*"], true, never>;
6041
+ }
6042
+
5186
6043
  /**
5187
6044
  * Styled wrapper around the headless `KjSkeleton` directive.
5188
6045
  *
@@ -5293,6 +6150,74 @@ declare class KjSkeletonComponent {
5293
6150
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjSkeletonComponent, "kj-skeleton", never, { "kjSkeletonShape": { "alias": "kjSkeletonShape"; "required": false; "isSignal": true; }; "kjSkeletonAnimation": { "alias": "kjSkeletonAnimation"; "required": false; "isSignal": true; }; "kjWidth": { "alias": "kjWidth"; "required": false; "isSignal": true; }; "kjHeight": { "alias": "kjHeight"; "required": false; "isSignal": true; }; "kjLines": { "alias": "kjLines"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.KjSkeleton; inputs: { "kjSkeletonShape": "kjSkeletonShape"; "kjSkeletonAnimation": "kjSkeletonAnimation"; }; outputs: {}; }]>;
5294
6151
  }
5295
6152
 
6153
+ /**
6154
+ * Themed "skip to content" link — the styled wrapper around the headless
6155
+ * `KjSkipLink` directive. Implements [WCAG 2.4.1 Bypass
6156
+ * Blocks](https://www.w3.org/TR/WCAG21/#bypass-blocks): a keyboard user's first
6157
+ * Tab reveals it, and Enter jumps focus past the navbar / sidebar to the main
6158
+ * content landmark.
6159
+ *
6160
+ * Place it as the **first focusable element** of the app shell and give the main
6161
+ * landmark a matching `id` (default `main-content`):
6162
+ *
6163
+ * ```html
6164
+ * <kj-skip-link />
6165
+ * <kj-navbar />
6166
+ * <main id="main-content" tabindex="-1"><router-outlet /></main>
6167
+ * ```
6168
+ *
6169
+ * The visible label is projected content and defaults to "Skip to main content".
6170
+ * The link is visually hidden (parked above the viewport) until focused, then
6171
+ * slides into view with a solid high-contrast background so it is legible over
6172
+ * any page chrome.
6173
+ *
6174
+ * @example
6175
+ * ```html
6176
+ * <kj-skip-link />
6177
+ * <kj-skip-link kjTarget="page-body">Skip to article</kj-skip-link>
6178
+ * ```
6179
+ *
6180
+ * @doc-example Default
6181
+ * The shell-level skip link. Tab into the demo frame to reveal it, then
6182
+ * activate it to move focus to the demo's main region.
6183
+ * @doc-file skip-link.example.ts
6184
+ *
6185
+ * @doc-keyboard
6186
+ * Tab — Reveals the link when it receives focus (it is the first focusable element)
6187
+ * Enter — Activates it; keyboard focus moves to the target landmark
6188
+ *
6189
+ * @doc-aria
6190
+ * role=link — Native `<a>` semantics; accessible name from the projected label
6191
+ * href — Reflects `#<target>` so it works before hydration and is bookmarkable
6192
+ * tabindex=-1 — Applied to the target on activation so `focus()` lands and the
6193
+ * next Tab continues from the content, not the navigation
6194
+ *
6195
+ * @doc-a11y
6196
+ * Satisfies WCAG 2.4.1 Bypass Blocks. Hidden-until-focused (not
6197
+ * `display:none`, so it stays in the tab order), fully on-screen and
6198
+ * high-contrast when focused, and moves real keyboard focus — not just scroll.
6199
+ *
6200
+ * @doc-css-var
6201
+ * --kj-skip-link-bg — Background when focused. Defaults to the theme's primary surface.
6202
+ * --kj-skip-link-fg — Text color when focused. Pairs with the background for AAA contrast.
6203
+ * --kj-skip-link-radius — Corner radius of the focused pill.
6204
+ * --kj-skip-link-shadow — Elevation shadow when focused.
6205
+ * --kj-skip-link-offset — Inset from the top-left corner when focused.
6206
+ * --kj-skip-link-z — Stacking order. Must sit above the navbar and overlays.
6207
+ *
6208
+ * @doc-category Library/Navigation
6209
+ * @doc
6210
+ * @doc-name skip-link
6211
+ * @doc-description Themed, focus-moving "skip to main content" link for the app shell (WCAG 2.4.1).
6212
+ * @doc-is-main
6213
+ */
6214
+ declare class KjSkipLinkComponent {
6215
+ /** `id` of the main-content landmark to move focus to. Defaults to `'main-content'`. */
6216
+ readonly kjTarget: _angular_core.InputSignal<string>;
6217
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjSkipLinkComponent, never>;
6218
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KjSkipLinkComponent, "kj-skip-link", never, { "kjTarget": { "alias": "kjTarget"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
6219
+ }
6220
+
5296
6221
  /**
5297
6222
  * Styled wrapper around the headless `KjSlider` directive family.
5298
6223
  *
@@ -5378,11 +6303,11 @@ declare class KjSliderComponent {
5378
6303
  readonly kjPageStep: _angular_core.InputSignal<number>;
5379
6304
  readonly kjStepBase: _angular_core.InputSignal<number>;
5380
6305
  readonly kjOrientation: _angular_core.InputSignal<"horizontal" | "vertical">;
5381
- readonly kjDirection: _angular_core.InputSignal<"ltr" | "rtl" | "auto">;
6306
+ readonly kjDirection: _angular_core.InputSignal<"auto" | "ltr" | "rtl">;
5382
6307
  readonly kjInverted: _angular_core.InputSignalWithTransform<boolean, unknown>;
5383
6308
  readonly kjMinDistance: _angular_core.InputSignal<number>;
5384
6309
  readonly kjAllowThumbCross: _angular_core.InputSignalWithTransform<boolean, unknown>;
5385
- readonly kjTicks: _angular_core.InputSignal<false | readonly number[] | "auto">;
6310
+ readonly kjTicks: _angular_core.InputSignal<false | "auto" | readonly number[]>;
5386
6311
  readonly kjDisplayWith: _angular_core.InputSignal<(value: number, thumbIndex: number) => string>;
5387
6312
  readonly kjReadonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
5388
6313
  readonly kjDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -6167,10 +7092,8 @@ declare class KjBulkAction {
6167
7092
  * The toolbar must sit inside a `<kj-table>` (or any element hosting
6168
7093
  * the `KJ_TABLE` token) so it can resolve the table instance via DI.
6169
7094
  *
6170
- * @doc-category Components/Data
6171
- * @doc
6172
- * @doc-name table-toolbar
6173
- * @doc-description Toolbar chrome above the data table — quick filter, density, column visibility, export, and bulk-action slot.
7095
+ * Documented as part of the data table on the `table` page — not a standalone
7096
+ * docs entry.
6174
7097
  */
6175
7098
  declare class KjTableToolbarComponent {
6176
7099
  /** The host table — resolved through `KJ_TABLE` injected from any ancestor. */
@@ -6222,10 +7145,8 @@ declare class KjTableToolbarComponent {
6222
7145
  * </kj-table>
6223
7146
  * ```
6224
7147
  *
6225
- * @doc-category Components/Data
6226
- * @doc
6227
- * @doc-name table-pagination
6228
- * @doc-description Page-size selector, First/Prev/Next/Last nav, and "Showing N–M of total" summary bound to the parent table.
7148
+ * Documented as part of the data table on the `table` page — not a standalone
7149
+ * docs entry.
6229
7150
  */
6230
7151
  declare class KjTablePaginationComponent {
6231
7152
  /** Available page sizes for the selector. */
@@ -6308,10 +7229,8 @@ declare class KjTableSidePanelContent {
6308
7229
  * </kj-table>
6309
7230
  * ```
6310
7231
  *
6311
- * @doc-category Components/Data
6312
- * @doc
6313
- * @doc-name table-side-panel
6314
- * @doc-description Service-launched drawer listing every column with visibility, pin, and group controls.
7232
+ * Documented as part of the data table on the `table` page — not a standalone
7233
+ * docs entry.
6315
7234
  */
6316
7235
  declare class KjTableSidePanelComponent {
6317
7236
  /** Whether the side panel is visible. Two-way bindable. */
@@ -6343,10 +7262,8 @@ declare class KjTableSidePanelComponent {
6343
7262
  * </table>
6344
7263
  * ```
6345
7264
  *
6346
- * @doc-category Components/Data
6347
- * @doc
6348
- * @doc-name table-status-bar
6349
- * @doc-description Counts strip showing row count, selected count, and filtered indicator.
7265
+ * Documented as part of the data table on the `table` page — not a standalone
7266
+ * docs entry.
6350
7267
  */
6351
7268
  declare class KjTableStatusBarComponent {
6352
7269
  private readonly table;
@@ -6406,10 +7323,8 @@ declare function copyToClipboard(text: string): Promise<void>;
6406
7323
  * </div>
6407
7324
  * ```
6408
7325
  *
6409
- * @doc-category Components/Data
6410
- * @doc
6411
- * @doc-name table-virtual
6412
- * @doc-description Row virtualization adapter on @tanstack/virtual-core. Exposes virtualRows / paddingTop / paddingBottom / totalSize signals for the styled data table.
7326
+ * Documented as part of the data table on the `table` page — not a standalone
7327
+ * docs entry.
6413
7328
  */
6414
7329
  declare class KjTableVirtual {
6415
7330
  /** Total number of rows in the underlying dataset. */
@@ -7801,10 +8716,10 @@ declare class KjCascadeSubPanelComponent {
7801
8716
  * --kj-command-item-align — Cross-axis alignment of row contents. Defaults to `center`.
7802
8717
  * --kj-command-item-gap — Gap between icon and label inside a row. Defaults to --kj-space-md.
7803
8718
  *
8719
+ * @doc-category Library/Actions
7804
8720
  * @doc
7805
8721
  * @doc-name command-palette
7806
8722
  * @doc-description Themed Cmd-K modal command palette with fuzzy filtering, grouped results, and keyboard navigation.
7807
- * @doc-is-main
7808
8723
  */
7809
8724
  declare class KjCommandPaletteFooter {
7810
8725
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KjCommandPaletteFooter, never>;
@@ -7895,6 +8810,7 @@ declare class KjCommandPaletteItemTemplate<T = unknown> {
7895
8810
  * @doc-category Library/Actions
7896
8811
  * @doc
7897
8812
  * @doc-name command-palette
8813
+ * @doc-is-main
7898
8814
  */
7899
8815
  declare class KjCommandPaletteComponent {
7900
8816
  /** Input placeholder text. */
@@ -7919,6 +8835,8 @@ declare class KjCommandPaletteComponent {
7919
8835
  protected readonly customFooter: _angular_core.Signal<KjCommandPaletteFooter | undefined>;
7920
8836
  private readonly destroyRef;
7921
8837
  private readonly platformId;
8838
+ /** The composed headless palette (host directive) — owns query + active state. */
8839
+ private readonly palette;
7922
8840
  constructor();
7923
8841
  /** Programmatically close the palette. */
7924
8842
  close(): void;
@@ -8159,5 +9077,5 @@ declare class KjTreeSelectComponent {
8159
9077
 
8160
9078
  declare const KJ_COMPONENTS_VERSION = "0.0.1";
8161
9079
 
8162
- export { KJ_COMPONENTS_VERSION, KJ_EDITOR_CONTRACT, KJ_FILTER_CONTEXT, KjAccordionComponent, KjAccordionContentComponent, KjAccordionItemComponent, KjAccordionTriggerComponent, KjAlertActionsComponent, KjAlertComponent, KjAlertDescriptionComponent, KjAlertDismissComponent, KjAlertIconComponent, KjAlertTitleComponent, KjAvatarComponent, KjAvatarGroupComponent, KjBadgeComponent, KjBooleanEditor, KjBreadcrumbComponent, KjBreadcrumbCurrentComponent, KjBreadcrumbEllipsisComponent, KjBreadcrumbItemComponent, KjBreadcrumbLinkComponent, KjBreadcrumbListComponent, KjBreadcrumbSeparatorComponent, KjBulkAction, KjButtonComponent, KjButtonGroupComponent, KjCalendarComponent, KjCardComponent, KjCardContentComponent, KjCardCoverComponent, KjCardFooterComponent, KjCardHeaderComponent, KjCardSubtitleComponent, KjCardTitleComponent, KjCarouselAutoplayComponent, KjCarouselComponent, KjCarouselIndicatorsComponent, KjCarouselNextComponent, KjCarouselPauseComponent, KjCarouselPreviousComponent, KjCarouselSlideComponent, KjCarouselViewportComponent, KjCascadeOptionComponent, KjCascadeSelectComponent, KjCascadeSubPanelComponent, KjCellEditorOutlet, KjCellTemplateDirective, KjChatAvatarComponent, KjChatBubbleComponent, KjChatComponent, KjChatFooterComponent, KjChatHeaderComponent, KjChatLogComponent, KjCheckboxComponent, KjColorPickerComponent, KjComboboxComponent, KjComboboxEmptyComponent, KjComboboxLoadingComponent, KjComboboxOptionComponent, KjCommandEmptyComponent, KjCommandGroupComponent, KjCommandInputComponent, KjCommandItemComponent, KjCommandPaletteComponent, KjCommandPaletteFooter, KjCommandPaletteItemTemplate, KjCommandSeparatorComponent, KjConfirmPopupActionComponent, KjConfirmPopupActionsComponent, KjConfirmPopupCancelComponent, KjConfirmPopupComponent, KjConfirmPopupContentComponent, KjConfirmPopupMessageComponent, KjConfirmPopupTriggerComponent, KjDateEditor, KjDateFilter, KjDatePickerComponent, KjDatetimePickerComponent, KjDialogComponent, KjDividerComponent, KjDrawerComponent, KjDropdownMenuComponent, KjEmptyStateActionsComponent, KjEmptyStateComponent, KjEmptyStateDescriptionComponent, KjEmptyStateIconComponent, KjEmptyStateTitleComponent, KjFieldComponent, KjFieldErrorComponent, KjFieldGroupComponent, KjFieldHelpComponent, KjFieldLabelComponent, KjFileUploadComponent, KjFilterCellOutlet, KjFormActionsComponent, KjFormComponent, KjFormSummaryComponent, KjIconGalleryExample, KjIconUsageExample, KjInputComponent, KjInputGroupAddonComponent, KjInputGroupComponent, KjInputMaskComponent, KjInputMaskCreditCardExample, KjInputMaskCustomTokensExample, KjInputMaskDateExample, KjInputMaskExample, KjInputMaskUsageExample, KjInputMaskValidationExample, KjInputOtpComponent, KjKbdComponent, KjLinkComponent, KjListComponent, KjListItemComponent, KjMenubarComponent, KjMenubarItemComponent, KjNumberEditor, KjNumberFilter, KjNumberInputComponent, KjOptionComponent, KjOverlayBadgeComponent, KjOverlayBadgeContentComponent, KjPaginationComponent, KjPaginationDefaultComponent, KjPaginationEllipsisComponent, KjPaginationFirstComponent, KjPaginationInfoComponent, KjPaginationItemComponent, KjPaginationLastComponent, KjPaginationNextComponent, KjPaginationPreviousComponent, KjPasswordInputComponent, KjPopoverComponent, KjProgressBarComponent, KjRadioComponent, KjRadioGroupComponent, KjSelectComponent, KjSelectEditor, KjSelectFilter, KjSkeletonComponent, KjSliderComponent, KjSpeedDialActionComponent, KjSpeedDialActionsComponent, KjSpeedDialComponent, KjSpeedDialTriggerComponent, KjSpinnerComponent, KjStepComponent, KjStepContentComponent, KjStepLabelComponent, KjStepperComponent, KjStepperNextComponent, KjStepperPreviousComponent, KjStepperResetComponent, KjTabComponent, KjTabListComponent, KjTabPanelComponent, KjTableComponent, KjTablePaginationComponent, KjTableSidePanelComponent, KjTableSidePanelContent, KjTableStatusBarComponent, KjTableToolbarComponent, KjTableVirtual, KjTabsComponent, KjTagComponent, KjTagListComponent, KjTagRemoveComponent, KjTextEditor, KjTextFilter, KjTextareaComponent, KjTimePickerComponent, KjToastCloseComponent, KjToastComponent, KjToastViewportComponent, KjToastWrapperComponent, KjToggleComponent, KjTooltipComponent, KjTreeSelectComponent, KjTreeSelectNodeComponent, LUCIDE_ICON_NAMES, copyToClipboard, downloadString, exportCsv, exportJson, provideLucideIcons, toTsv };
8163
- export type { ExportOptions, KjCellEditEvent, KjCellTemplateContext, KjChatBubbleSize, KjChatBubbleVariant, KjDateRange, KjEditorContract, KjEmptyStateLevel, KjEmptyStateLive, KjEmptyStateVariant, KjFilterContext, KjInputSize, KjInputType, KjInputVariant, KjNumberRange, KjRowClickEvent, KjSelectEditorOption, KjSelectFilterOption, KjSpeedDialPosition, KjTableDensity, KjTableExportFormat };
9080
+ export { KJ_COMPONENTS_VERSION, KJ_EDITOR_CONTRACT, KJ_FILTER_CONTEXT, KjAccordionComponent, KjAccordionContentComponent, KjAccordionItemComponent, KjAccordionTriggerComponent, KjActionSheet, KjActionSheetComponent, KjActionSheetRef, KjActionSheetService, KjAlertActionsComponent, KjAlertComponent, KjAlertDescriptionComponent, KjAlertDismissComponent, KjAlertIconComponent, KjAlertTitleComponent, KjAvatarComponent, KjAvatarGroupComponent, KjBadgeComponent, KjBooleanEditor, KjBreadcrumbComponent, KjBreadcrumbCurrentComponent, KjBreadcrumbEllipsisComponent, KjBreadcrumbItemComponent, KjBreadcrumbLinkComponent, KjBreadcrumbListComponent, KjBreadcrumbSeparatorComponent, KjBulkAction, KjButtonComponent, KjButtonGroupComponent, KjCalendarComponent, KjCardComponent, KjCardContentComponent, KjCardCoverComponent, KjCardFooterComponent, KjCardHeaderComponent, KjCardSubtitleComponent, KjCardTitleComponent, KjCarouselAutoplayComponent, KjCarouselComponent, KjCarouselIndicatorsComponent, KjCarouselNextComponent, KjCarouselPauseComponent, KjCarouselPreviousComponent, KjCarouselSlideComponent, KjCarouselViewportComponent, KjCascadeOptionComponent, KjCascadeSelectComponent, KjCascadeSubPanelComponent, KjCellEditorOutlet, KjCellTemplateDirective, KjChartComponent, KjChatAvatarComponent, KjChatBubbleComponent, KjChatComponent, KjChatFooterComponent, KjChatHeaderComponent, KjChatLogComponent, KjChatMessage, KjChatThread, KjCheckboxComponent, KjColorPickerComponent, KjComboboxComponent, KjComboboxEmptyComponent, KjComboboxLoadingComponent, KjComboboxOptionComponent, KjCommandEmptyComponent, KjCommandGroupComponent, KjCommandInputComponent, KjCommandItemComponent, KjCommandPaletteComponent, KjCommandPaletteFooter, KjCommandPaletteItemTemplate, KjCommandSeparatorComponent, KjConfirmPopupActionComponent, KjConfirmPopupActionsComponent, KjConfirmPopupCancelComponent, KjConfirmPopupComponent, KjConfirmPopupContentComponent, KjConfirmPopupMessageComponent, KjConfirmPopupTriggerComponent, KjDateEditor, KjDateFilter, KjDatePickerComponent, KjDateRangePresetsComponent, KjDatetimePickerComponent, KjDialogComponent, KjDirectionToggle, KjDividerComponent, KjDrawerComponent, KjDropdownMenuComponent, KjEditorComponent, KjEmptyStateActionsComponent, KjEmptyStateComponent, KjEmptyStateDescriptionComponent, KjEmptyStateIconComponent, KjEmptyStateTitleComponent, KjFieldComponent, KjFieldErrorComponent, KjFieldGroupComponent, KjFieldHelpComponent, KjFieldLabelComponent, KjFileUploadComponent, KjFilterCellOutlet, KjFormActionsComponent, KjFormComponent, KjFormSummaryComponent, KjIconGalleryExample, KjIconUsageExample, KjInputComponent, KjInputGroupAddonComponent, KjInputGroupComponent, KjInputMaskComponent, KjInputMaskCreditCardExample, KjInputMaskCustomTokensExample, KjInputMaskDateExample, KjInputMaskExample, KjInputMaskUsageExample, KjInputMaskValidationExample, KjInputOtpComponent, KjKbdComponent, KjLinkComponent, KjListComponent, KjListItemComponent, KjMenubarComponent, KjMenubarItemComponent, KjNumberEditor, KjNumberFilter, KjNumberInputComponent, KjOptionComponent, KjOverlayBadgeComponent, KjOverlayBadgeContentComponent, KjPaginationComponent, KjPaginationDefaultComponent, KjPaginationEllipsisComponent, KjPaginationFirstComponent, KjPaginationInfoComponent, KjPaginationItemComponent, KjPaginationLastComponent, KjPaginationNextComponent, KjPaginationPreviousComponent, KjPasswordInputComponent, KjPopoverComponent, KjProgressBarComponent, KjPromptInput, KjRadioComponent, KjRadioGroupComponent, KjRichTextEditorComponent, KjSelectComponent, KjSelectEditor, KjSelectFilter, KjSheetComponent, KjSkeletonComponent, KjSkipLinkComponent, KjSliderComponent, KjSpeedDialActionComponent, KjSpeedDialActionsComponent, KjSpeedDialComponent, KjSpeedDialTriggerComponent, KjSpinnerComponent, KjStepComponent, KjStepContentComponent, KjStepLabelComponent, KjStepperComponent, KjStepperNextComponent, KjStepperPreviousComponent, KjStepperResetComponent, KjTabComponent, KjTabListComponent, KjTabPanelComponent, KjTableComponent, KjTablePaginationComponent, KjTableSidePanelComponent, KjTableSidePanelContent, KjTableStatusBarComponent, KjTableToolbarComponent, KjTableVirtual, KjTabsComponent, KjTagComponent, KjTagListComponent, KjTagRemoveComponent, KjTextEditor, KjTextFilter, KjTextareaComponent, KjTimePickerComponent, KjToastCloseComponent, KjToastComponent, KjToastViewportComponent, KjToastWrapperComponent, KjToggleComponent, KjTooltipComponent, KjTreeSelectComponent, KjTreeSelectNodeComponent, LUCIDE_ICON_NAMES, bold, bulletList, codeBlock, copyToClipboard, defaultFeatures, downloadString, exportCsv, exportJson, heading, history, image, inlineCode, italic, link, markdownShortcuts, orderedList, provideLucideIcons, quote, renderMarkdown, strike, toTsv, underline };
9081
+ export type { ExportOptions, KjActionSheetAction, KjActionSheetOptions, KjActionSheetRole, KjCellEditEvent, KjCellTemplateContext, KjChatBubbleSize, KjChatBubbleVariant, KjDateRange, KjEditorContract, KjEmptyStateLevel, KjEmptyStateLive, KjEmptyStateVariant, KjFilterContext, KjHeadingLevel, KjInputSize, KjInputType, KjInputVariant, KjMdBlock, KjNumberRange, KjRowClickEvent, KjSelectEditorOption, KjSelectFilterOption, KjSpeedDialPosition, KjTableDensity, KjTableExportFormat };