@kraft.stitch/angular 0.0.4-beta.1 → 0.0.4-beta.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 (56) hide show
  1. package/fesm2022/kraft.stitch-angular.mjs +3043 -0
  2. package/fesm2022/kraft.stitch-angular.mjs.map +1 -0
  3. package/package.json +17 -16
  4. package/types/kraft.stitch-angular.d.ts +2395 -0
  5. package/.github/workflows/npm-publish.yml +0 -41
  6. package/ng-package.json +0 -10
  7. package/src/lib/Buttons/button/button.ts +0 -152
  8. package/src/lib/Buttons/button-group/button-group.ts +0 -129
  9. package/src/lib/Buttons/chips/chips.ts +0 -131
  10. package/src/lib/Buttons/fab/fab.ts +0 -96
  11. package/src/lib/Buttons/split-button/split-button.ts +0 -111
  12. package/src/lib/Calendars/datepicker/datepicker.ts +0 -105
  13. package/src/lib/Calendars/daterange/daterange.ts +0 -112
  14. package/src/lib/Calendars/timepicker/timepicker.ts +0 -117
  15. package/src/lib/Dropdowns/dropdown/dropdown.ts +0 -121
  16. package/src/lib/Dropdowns/listbox/listbox.ts +0 -116
  17. package/src/lib/Inputs/checkbox/checkbox.ts +0 -126
  18. package/src/lib/Inputs/colour-picker/colour-picker.ts +0 -101
  19. package/src/lib/Inputs/input/input.ts +0 -139
  20. package/src/lib/Inputs/otp-input/otp-input.ts +0 -113
  21. package/src/lib/Inputs/radio/radio.ts +0 -115
  22. package/src/lib/Inputs/rating/rating.ts +0 -104
  23. package/src/lib/Inputs/rolling-number/rolling-number.ts +0 -136
  24. package/src/lib/Inputs/slider/slider.ts +0 -121
  25. package/src/lib/Inputs/switch/switch.ts +0 -100
  26. package/src/lib/Inputs/textarea/textarea.ts +0 -129
  27. package/src/lib/Inputs/theme-switch/theme-switch.ts +0 -61
  28. package/src/lib/Inputs/uploader/uploader.ts +0 -97
  29. package/src/lib/Layout/avatar/avatar.ts +0 -66
  30. package/src/lib/Layout/card/card.ts +0 -88
  31. package/src/lib/Layout/code-view/code-view.ts +0 -77
  32. package/src/lib/Layout/dialog/dialog.ts +0 -80
  33. package/src/lib/Layout/not-found/not-found.ts +0 -73
  34. package/src/lib/Layout/sidebar/sidebar.ts +0 -97
  35. package/src/lib/Layout/table/table.ts +0 -81
  36. package/src/lib/Layout/tooltip/tooltip.ts +0 -48
  37. package/src/lib/Navigation/accordion/accordion.ts +0 -80
  38. package/src/lib/Navigation/breadcrumb/breadcrumb.ts +0 -58
  39. package/src/lib/Navigation/carousel/carousel.ts +0 -70
  40. package/src/lib/Navigation/context-menu/context-menu.ts +0 -79
  41. package/src/lib/Navigation/nav-bar/nav-bar.ts +0 -72
  42. package/src/lib/Navigation/pagination/pagination.ts +0 -82
  43. package/src/lib/Navigation/stepper/stepper.ts +0 -77
  44. package/src/lib/Navigation/tab/tab.ts +0 -71
  45. package/src/lib/Navigation/toolbar/toolbar.ts +0 -60
  46. package/src/lib/Navigation/top-nav-bar/top-nav-bar.ts +0 -71
  47. package/src/lib/Navigation/tree-view/tree-view.ts +0 -75
  48. package/src/lib/Notification/badge/badge.ts +0 -55
  49. package/src/lib/Notification/loader/loader.ts +0 -41
  50. package/src/lib/Notification/message/message.ts +0 -60
  51. package/src/lib/Notification/progress/progress.ts +0 -65
  52. package/src/lib/Notification/spinner/spinner.ts +0 -50
  53. package/src/lib/Notification/toast/toast.ts +0 -56
  54. package/src/public-api.ts +0 -68
  55. package/src/utils/theme-service.ts +0 -11
  56. package/tsconfig.json +0 -23
@@ -0,0 +1,3043 @@
1
+ import '@kraft.stitch/core/dist/components/ks-button.js';
2
+ import * as i0 from '@angular/core';
3
+ import { input, output, effect, inject, DestroyRef, ChangeDetectionStrategy, Component, model, provideAppInitializer } from '@angular/core';
4
+ import '@kraft.stitch/core/dist/components/ks-button-group.js';
5
+ import '@kraft.stitch/core/dist/components/ks-chips.js';
6
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
7
+ import '@kraft.stitch/core/dist/components/ks-fab.js';
8
+ import '@kraft.stitch/core/dist/components/ks-split-button.js';
9
+ import '@kraft.stitch/core/dist/components/ks-datepicker.js';
10
+ import '@kraft.stitch/core/dist/components/ks-daterange.js';
11
+ import '@kraft.stitch/core/dist/components/ks-timepicker.js';
12
+ import '@kraft.stitch/core/dist/components/ks-dropdown.js';
13
+ import '@kraft.stitch/core/dist/components/ks-listbox.js';
14
+ import '@kraft.stitch/core/dist/components/ks-checkbox.js';
15
+ import '@kraft.stitch/core/dist/components/ks-colour-picker.js';
16
+ import '@kraft.stitch/core/dist/components/ks-input.js';
17
+ import '@kraft.stitch/core/dist/components/ks-otp-input.js';
18
+ import '@kraft.stitch/core/dist/components/ks-radio.js';
19
+ import '@kraft.stitch/core/dist/components/ks-rating.js';
20
+ import '@kraft.stitch/core/dist/components/ks-slider.js';
21
+ import '@kraft.stitch/core/dist/components/ks-switch.js';
22
+ import '@kraft.stitch/core/dist/components/ks-textarea.js';
23
+ import '@kraft.stitch/core/dist/components/ks-theme-switch.js';
24
+ import { ThemeMode, LoaderStateEnum, themeService } from '@kraft.stitch/core';
25
+ export { toastStore } from '@kraft.stitch/core';
26
+ import '@kraft.stitch/core/dist/components/ks-uploader.js';
27
+ import '@kraft.stitch/core/dist/components/ks-rolling-number.js';
28
+ import '@kraft.stitch/core/dist/components/ks-avatar.js';
29
+ import '@kraft.stitch/core/dist/components/ks-card.js';
30
+ import '@kraft.stitch/core/dist/components/ks-code-view.js';
31
+ import '@kraft.stitch/core/dist/components/ks-dialog.js';
32
+ import '@kraft.stitch/core/dist/components/ks-not-found.js';
33
+ import '@kraft.stitch/core/dist/components/ks-sidebar.js';
34
+ import '@kraft.stitch/core/dist/components/ks-table.js';
35
+ import '@kraft.stitch/core/dist/components/ks-tooltip.js';
36
+ import '@kraft.stitch/core/dist/components/ks-accordion.js';
37
+ import '@kraft.stitch/core/dist/components/ks-breadcrumb.js';
38
+ import '@kraft.stitch/core/dist/components/ks-carousel.js';
39
+ import '@kraft.stitch/core/dist/components/ks-context-menu.js';
40
+ import '@kraft.stitch/core/dist/components/ks-nav-bar.js';
41
+ import '@kraft.stitch/core/dist/components/ks-pagination.js';
42
+ import '@kraft.stitch/core/dist/components/ks-stepper.js';
43
+ import '@kraft.stitch/core/dist/components/ks-tab.js';
44
+ import '@kraft.stitch/core/dist/components/ks-toolbar.js';
45
+ import '@kraft.stitch/core/dist/components/ks-top-nav-bar.js';
46
+ import '@kraft.stitch/core/dist/components/ks-tree-view.js';
47
+ import '@kraft.stitch/core/dist/components/ks-badge.js';
48
+ import '@kraft.stitch/core/dist/components/ks-loader.js';
49
+ import '@kraft.stitch/core/dist/components/ks-message.js';
50
+ import '@kraft.stitch/core/dist/components/ks-progress.js';
51
+ import '@kraft.stitch/core/dist/components/ks-spinner.js';
52
+ import '@kraft.stitch/core/dist/components/ks-toast-outlet.js';
53
+
54
+ // Side-effect import: registers the `ks-button` tag in the browser's
55
+ // CustomElementRegistry (via Stencil's `auto-define-custom-elements`
56
+ // behavior in `core/stencil.config.ts`). Nothing in THIS file renders the
57
+ // button — see the class doc comment below for exactly what does.
58
+ /**
59
+ * Angular wrapper around the `<ks-button>` Stencil custom element.
60
+ *
61
+ * ## How this actually renders a button (no markup lives in this file)
62
+ *
63
+ * 1. A parent template writes `<ks-button name="Save" (ksClick)="save()">`.
64
+ * 2. Angular's renderer creates that host node with
65
+ * `document.createElement('ks-button')`. Because the side-effect import
66
+ * above already ran `customElements.define('ks-button', ...)`, the
67
+ * **browser itself** immediately upgrades that node into an instance of
68
+ * Stencil's compiled `KsButton` class — this is standard Custom Elements
69
+ * behavior, nothing Angular-specific.
70
+ * 3. That upgrade runs Stencil's `connectedCallback` → `render()`, which
71
+ * injects the real `<button>…</button>` markup as children of the host
72
+ * node. This happens **regardless of Angular** — it's the same thing
73
+ * that would happen if you dropped `<ks-button>` in a plain HTML file.
74
+ * 4. `KsButtonComponent` (this class) is a *second, independent* thing
75
+ * attached to that same host node — Angular doesn't care that the node
76
+ * is also a custom element instance. Its only job is translation:
77
+ * push signal-input values onto the element's real DOM properties, and
78
+ * re-emit the native `clicked` DOM event as an Angular `output()`.
79
+ *
80
+ * `template: ''` (no `<ng-content>`) is intentional: `ks-button`'s Stencil
81
+ * `render()` has no `<slot>`, so there is nothing to project — content
82
+ * written between `<ks-button>` tags wouldn't be displayed by the real
83
+ * component anyway. Content projection would only make sense here if the
84
+ * wrapped Stencil component actually declared a `<slot>`.
85
+ *
86
+ * ## Why the output is called `ksClick`, NOT `clicked`
87
+ *
88
+ * `<ks-button>` (the Stencil element) dispatches a **native** DOM
89
+ * `CustomEvent` literally named `clicked` on the host node. It is tempting
90
+ * to expose the wrapper's own output using that exact same name so the
91
+ * public API "mirrors" the native event — but doing so creates a **name
92
+ * collision** that makes the event fire twice from a parent template such
93
+ * as `<ks-button (clicked)="log($event)">`:
94
+ *
95
+ * For *any* event binding in a template, Ivy's `ɵɵlistener` instruction
96
+ * does two things whenever the bound name also happens to match a
97
+ * directive/component **output** on that element (`tNode.outputs[name]`):
98
+ * 1. It subscribes the template's handler to that output (`output.emit()`
99
+ * calls it).
100
+ * 2. It **also** attaches a genuine `addEventListener(name, …)` straight
101
+ * onto the host DOM node for that same literal name, independent of
102
+ * step 1 — Ivy can't know whether the name is "just" an output or also
103
+ * a real DOM event some element in the tree might dispatch, so it wires
104
+ * both to be safe.
105
+ *
106
+ * If the output were named `clicked`, both of those fire for the *same*
107
+ * underlying interaction here: (1) our own `this.ksClick.emit(...)` call
108
+ * below invokes the template handler once, and (2) the raw native
109
+ * `clicked` `CustomEvent` that `<ks-button>` dispatches on the host node
110
+ * is picked up by Ivy's own native listener from step 2 and invokes the
111
+ * *same* template handler a second time — with a different, unwrapped
112
+ * event object. (An earlier attempt at fixing this used
113
+ * `@HostListener('clicked', ['$event'])`, which hits the same
114
+ * `tNode.outputs['clicked']` check and instead causes *infinite emit
115
+ * recursion*, since the host listener itself becomes a subscriber of the
116
+ * output it emits on.)
117
+ *
118
+ * Naming the output `ksClick` (no relation to any real DOM event name)
119
+ * removes the collision entirely: a parent writes
120
+ * `<ks-button (ksClick)="log($event)">`, Ivy subscribes that to our
121
+ * output, and the phantom native `addEventListener('ksClick', …)` it also
122
+ * attaches never fires because no such DOM event exists. Only the manual
123
+ * `addEventListener('clicked', …)` below — on the *internal* native event
124
+ * name, never referenced in any template — observes the real click and
125
+ * re-emits it once through `ksClick`. (This mirrors how libraries like
126
+ * Ionic prefix outputs, e.g. `ionChange` instead of `change`, for exactly
127
+ * this reason.)
128
+ */
129
+ class KsButtonComponent {
130
+ el;
131
+ /** Icon class string (e.g. Material Icon or Font Awesome class) */
132
+ icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
133
+ /** Button label text */
134
+ name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
135
+ /** Visual style variant */
136
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
137
+ /** Size */
138
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
139
+ /** Renders the button with fully-rounded pill corners */
140
+ isRounded = input(false, ...(ngDevMode ? [{ debugName: "isRounded" }] : /* istanbul ignore next */ []));
141
+ /** Disables the button */
142
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
143
+ /**
144
+ * Emits the `MouseEvent` from the native `clicked` `CustomEvent`
145
+ * dispatched by `<ks-button>`. Deliberately NOT named `clicked` — see
146
+ * the class doc comment above for why that would fire this event twice.
147
+ */
148
+ ksClick = output();
149
+ constructor(ref) {
150
+ this.el = ref.nativeElement;
151
+ // Each signal input gets its own effect so only the properties that
152
+ // actually changed are written back to the DOM. Stencil's own
153
+ // `@Prop()` watchers take it from there and re-render the button.
154
+ effect(() => (this.el.icon = this.icon()));
155
+ effect(() => (this.el.name = this.name()));
156
+ effect(() => (this.el.variant = this.variant()));
157
+ effect(() => (this.el.size = this.size()));
158
+ effect(() => (this.el.isRounded = this.isRounded()));
159
+ effect(() => (this.el.disabled = this.disabled()));
160
+ // Attached manually (NOT `@HostListener`) to the *internal* native
161
+ // event name `clicked`, which is never referenced by name in any
162
+ // Angular template (`ksClick` is what templates bind to instead) — so
163
+ // there is no `tNode.outputs` name collision for Ivy to double-wire.
164
+ // zone.js's patched `addEventListener` means this still runs inside
165
+ // the Angular zone, so no manual `NgZone.run()` is needed, and change
166
+ // detection still runs after `emit()` below.
167
+ const onNativeClicked = (event) => {
168
+ this.ksClick.emit(event.detail);
169
+ event.preventDefault();
170
+ };
171
+ this.el.addEventListener('clicked', onNativeClicked);
172
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('clicked', onNativeClicked));
173
+ }
174
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsButtonComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
175
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsButtonComponent, isStandalone: true, selector: "ks-button", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, isRounded: { classPropertyName: "isRounded", publicName: "isRounded", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksClick: "ksClick" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
176
+ }
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsButtonComponent, decorators: [{
178
+ type: Component,
179
+ args: [{
180
+ selector: 'ks-button',
181
+ standalone: true,
182
+ template: '',
183
+ changeDetection: ChangeDetectionStrategy.OnPush,
184
+ }]
185
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], isRounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "isRounded", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ksClick: [{ type: i0.Output, args: ["ksClick"] }] } });
186
+
187
+ // Side-effect import: registers the `ks-button-group` tag in the browser's
188
+ // CustomElementRegistry — see `button/button.ts` for the full explanation of
189
+ // this pattern (Stencil owns rendering, this class only translates
190
+ // Angular-idiomatic Input/Output into DOM property writes + event listeners).
191
+ /**
192
+ * Angular wrapper around the `<ks-button-group>` Stencil custom element.
193
+ *
194
+ * `template: ''` — the Stencil `render()` for this element has no `<slot>`,
195
+ * so there is nothing for this wrapper to project; every button is
196
+ * generated from the `buttons` input.
197
+ *
198
+ * ## Output naming
199
+ * The native element dispatches DOM `CustomEvent`s named `clicked` and
200
+ * `selectionChanged`. Both outputs below are renamed with a `ks` prefix
201
+ * (`ksClick`, `ksSelectionChange`) rather than reusing those exact strings.
202
+ * Doing so is required, not just cosmetic: for a template binding such as
203
+ * `<ks-button-group (clicked)="...">`, Angular's `ɵɵlistener` instruction
204
+ * *always* attaches a raw `addEventListener('clicked', …)` to the host
205
+ * element in addition to subscribing to a same-named component output —
206
+ * this is unconditional for element nodes (see
207
+ * `packages/core/src/render3/instructions/listener.ts` →
208
+ * `listenerInternal`), not something a custom-elements schema can opt out
209
+ * of. With a same-named output, the parent handler would therefore run
210
+ * *twice* per interaction — once via our own unwrapped `.emit()` call, once
211
+ * via Angular's own raw listener receiving the untouched `CustomEvent`
212
+ * (defeating the "no `event.detail`" requirement). Prefixing every output
213
+ * with `ks` guarantees the literal name never matches a real DOM event, so
214
+ * only our manual listener (below) ever observes it. See `button/button.ts`
215
+ * for the original write-up of this same issue.
216
+ */
217
+ class KsButtonGroupComponent {
218
+ el;
219
+ /** The buttons to render */
220
+ buttons = input([], ...(ngDevMode ? [{ debugName: "buttons" }] : /* istanbul ignore next */ []));
221
+ /** Visual variant */
222
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
223
+ /** Size */
224
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
225
+ /** Display style: 'default' (filled/outlined) or 'switch' (pill toggle) */
226
+ displayStyle = input('default', ...(ngDevMode ? [{ debugName: "displayStyle" }] : /* istanbul ignore next */ []));
227
+ /** Allow multiple selected buttons (toggle mode) */
228
+ multi = input(false, ...(ngDevMode ? [{ debugName: "multi" }] : /* istanbul ignore next */ []));
229
+ /** Toggle/selection mode — shows active state on click */
230
+ selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
231
+ /** Disables the entire group */
232
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
233
+ /** Emits the clicked button's `key`. From the native `clicked` event. */
234
+ ksClick = output();
235
+ /** Emits the current selection when `selectable`. From the native `selectionChanged` event. */
236
+ ksSelectionChange = output();
237
+ constructor(ref) {
238
+ this.el = ref.nativeElement;
239
+ effect(() => (this.el.buttons = this.buttons()));
240
+ effect(() => (this.el.variant = this.variant()));
241
+ effect(() => (this.el.size = this.size()));
242
+ effect(() => (this.el.displayStyle = this.displayStyle()));
243
+ effect(() => (this.el.multi = this.multi()));
244
+ effect(() => (this.el.selectable = this.selectable()));
245
+ effect(() => (this.el.disabled = this.disabled()));
246
+ const onNativeClicked = (event) => {
247
+ this.ksClick.emit(event.detail);
248
+ };
249
+ const onNativeSelectionChanged = (event) => {
250
+ this.ksSelectionChange.emit(event.detail);
251
+ };
252
+ this.el.addEventListener('clicked', onNativeClicked);
253
+ this.el.addEventListener('selectionChanged', onNativeSelectionChanged);
254
+ inject(DestroyRef).onDestroy(() => {
255
+ this.el.removeEventListener('clicked', onNativeClicked);
256
+ this.el.removeEventListener('selectionChanged', onNativeSelectionChanged);
257
+ });
258
+ }
259
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsButtonGroupComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
260
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsButtonGroupComponent, isStandalone: true, selector: "ks-button-group", inputs: { buttons: { classPropertyName: "buttons", publicName: "buttons", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, displayStyle: { classPropertyName: "displayStyle", publicName: "displayStyle", isSignal: true, isRequired: false, transformFunction: null }, multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksClick: "ksClick", ksSelectionChange: "ksSelectionChange" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
261
+ }
262
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsButtonGroupComponent, decorators: [{
263
+ type: Component,
264
+ args: [{
265
+ selector: 'ks-button-group',
266
+ standalone: true,
267
+ template: '',
268
+ changeDetection: ChangeDetectionStrategy.OnPush,
269
+ }]
270
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { buttons: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttons", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], displayStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayStyle", required: false }] }], multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ksClick: [{ type: i0.Output, args: ["ksClick"] }], ksSelectionChange: [{ type: i0.Output, args: ["ksSelectionChange"] }] } });
271
+
272
+ // Side-effect import: registers the `ks-chips` tag — see `button/button.ts`
273
+ // for the full explanation of this pattern.
274
+ /**
275
+ * Angular wrapper around the `<ks-chips>` Stencil custom element.
276
+ *
277
+ * ## Two-way binding
278
+ * The Stencil source's own doc comment says Angular forms integration
279
+ * (`ngModel`/`formControl`) would be "provided later by the generated
280
+ * output-target wrappers" — this is that wrapper. Rather than trying to
281
+ * reuse Angular's `[(value)]` banana-box sugar (which would require an
282
+ * output literally named `valueChange`, colliding with the native
283
+ * `valueChange` `CustomEvent` the element already dispatches — see
284
+ * `button/button.ts` for why that double-fires), two-way binding is
285
+ * implemented the idiomatic Angular way: `ControlValueAccessor`. Bind with
286
+ * `[(ngModel)]="fruit"` or `formControlName="fruit"` and it Just Works,
287
+ * because `NgModel`/`FormControlDirective` talk to `writeValue` /
288
+ * `registerOnChange` directly through DI — no template event-name matching
289
+ * involved, so there's no collision to worry about.
290
+ *
291
+ * For plain (non-forms) two-way use, bind explicitly instead:
292
+ * `[value]="fruit" (ksValueChange)="fruit = $event"`.
293
+ *
294
+ * `template: ''` — no `<slot>` in the wrapped Stencil render, nothing to project.
295
+ */
296
+ class KsChipsComponent {
297
+ el;
298
+ onChange = () => { };
299
+ onTouched = () => { };
300
+ /** Full list of chip options */
301
+ options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
302
+ /** Allow selecting multiple chips */
303
+ multi = input(false, ...(ngDevMode ? [{ debugName: "multi" }] : /* istanbul ignore next */ []));
304
+ /** Field label */
305
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
306
+ /** Size */
307
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
308
+ /** Renders chips with fully-rounded pill corners */
309
+ isRounded = input(true, ...(ngDevMode ? [{ debugName: "isRounded" }] : /* istanbul ignore next */ []));
310
+ /** Disabled state */
311
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
312
+ /** Initial/controlled value for plain (non-forms) usage. Prefer `[(ngModel)]` / `formControlName` when inside a form. */
313
+ value = input(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
314
+ /** Emits the newly-selected value(s). From the native `valueChange` event. */
315
+ ksValueChange = output();
316
+ constructor(ref) {
317
+ this.el = ref.nativeElement;
318
+ effect(() => (this.el.options = this.options()));
319
+ effect(() => (this.el.multi = this.multi()));
320
+ effect(() => (this.el.label = this.label()));
321
+ effect(() => (this.el.size = this.size()));
322
+ effect(() => (this.el.isRounded = this.isRounded()));
323
+ effect(() => (this.el.disabled = this.disabled()));
324
+ effect(() => void this.el.writeValue(this.value()));
325
+ const onNativeValueChange = (event) => {
326
+ const detail = event.detail;
327
+ this.ksValueChange.emit(detail);
328
+ this.onChange(detail);
329
+ this.onTouched();
330
+ };
331
+ this.el.addEventListener('valueChange', onNativeValueChange);
332
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('valueChange', onNativeValueChange));
333
+ }
334
+ /** `ControlValueAccessor` — called by `ngModel`/`formControl` to push a value in. */
335
+ writeValue(value) {
336
+ void this.el.writeValue(value ?? null);
337
+ }
338
+ registerOnChange(fn) {
339
+ this.onChange = fn;
340
+ }
341
+ registerOnTouched(fn) {
342
+ this.onTouched = fn;
343
+ }
344
+ setDisabledState(isDisabled) {
345
+ this.el.disabled = isDisabled;
346
+ }
347
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsChipsComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
348
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsChipsComponent, isStandalone: true, selector: "ks-chips", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, isRounded: { classPropertyName: "isRounded", publicName: "isRounded", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksValueChange: "ksValueChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsChipsComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
349
+ }
350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsChipsComponent, decorators: [{
351
+ type: Component,
352
+ args: [{
353
+ selector: 'ks-chips',
354
+ standalone: true,
355
+ template: '',
356
+ changeDetection: ChangeDetectionStrategy.OnPush,
357
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsChipsComponent, multi: true }],
358
+ }]
359
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], isRounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "isRounded", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ksValueChange: [{ type: i0.Output, args: ["ksValueChange"] }] } });
360
+
361
+ // Side-effect import: registers the `ks-fab` tag — see `button/button.ts`
362
+ // for the full explanation of this pattern.
363
+ /**
364
+ * Angular wrapper around the `<ks-fab>` Stencil custom element.
365
+ *
366
+ * `ksClick` is renamed away from the native `clicked` event name for the
367
+ * same double-fire reason documented in `button/button.ts` and
368
+ * `button-group/button-group.ts`. `template: ''` — no `<slot>` in the
369
+ * wrapped Stencil render.
370
+ */
371
+ class KsFabComponent {
372
+ el;
373
+ /** Icon for the main FAB button */
374
+ icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
375
+ /** Accessible label / tooltip */
376
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
377
+ /** Variant */
378
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
379
+ /** Size */
380
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
381
+ /** Speed-dial actions shown on expand */
382
+ actions = input([], ...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
383
+ /** Disabled */
384
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
385
+ /** Corner to anchor the FAB inside its nearest positioned container */
386
+ position = input('bottom-right', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
387
+ /** When true (default), positions `absolute` inside the nearest positioned ancestor; when false, `fixed` to the viewport */
388
+ appendToParent = input(true, ...(ngDevMode ? [{ debugName: "appendToParent" }] : /* istanbul ignore next */ []));
389
+ /** Emits `'main'` for the main button, or a speed-dial action's `key`. From the native `clicked` event. */
390
+ ksClick = output();
391
+ constructor(ref) {
392
+ this.el = ref.nativeElement;
393
+ effect(() => (this.el.icon = this.icon()));
394
+ effect(() => (this.el.label = this.label()));
395
+ effect(() => (this.el.variant = this.variant()));
396
+ effect(() => (this.el.size = this.size()));
397
+ effect(() => (this.el.actions = this.actions()));
398
+ effect(() => (this.el.disabled = this.disabled()));
399
+ effect(() => (this.el.position = this.position()));
400
+ effect(() => (this.el.appendToParent = this.appendToParent()));
401
+ const onNativeClicked = (event) => {
402
+ this.ksClick.emit(event.detail);
403
+ };
404
+ this.el.addEventListener('clicked', onNativeClicked);
405
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('clicked', onNativeClicked));
406
+ }
407
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsFabComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
408
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsFabComponent, isStandalone: true, selector: "ks-fab", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, appendToParent: { classPropertyName: "appendToParent", publicName: "appendToParent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksClick: "ksClick" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
409
+ }
410
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsFabComponent, decorators: [{
411
+ type: Component,
412
+ args: [{
413
+ selector: 'ks-fab',
414
+ standalone: true,
415
+ template: '',
416
+ changeDetection: ChangeDetectionStrategy.OnPush,
417
+ }]
418
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], appendToParent: [{ type: i0.Input, args: [{ isSignal: true, alias: "appendToParent", required: false }] }], ksClick: [{ type: i0.Output, args: ["ksClick"] }] } });
419
+
420
+ // Side-effect import: registers the `ks-split-button` tag (and its `ks-icon`
421
+ // dependency) — see `button/button.ts` for the full explanation of this
422
+ // pattern (Stencil owns rendering, this class only translates
423
+ // Angular-idiomatic Input/Output into DOM property writes + event listeners).
424
+ /**
425
+ * Angular wrapper around the `<ks-split-button>` Stencil custom element.
426
+ *
427
+ * Outputs are prefixed with `ks` (`ksClick`, `ksItemSelected`) instead of
428
+ * reusing the native event names `clicked` / `itemSelected` — see
429
+ * `button/button.ts` for why a same-named output would fire twice.
430
+ * `template: ''` — the wrapped Stencil `render()` has no `<slot>`.
431
+ *
432
+ * @example
433
+ * ```html
434
+ * <ks-split-button
435
+ * label="Save"
436
+ * [items]="items"
437
+ * (ksClick)="save()"
438
+ * (ksItemSelected)="onSelect($event)"
439
+ * ></ks-split-button>
440
+ * ```
441
+ */
442
+ class KsSplitButtonComponent {
443
+ el;
444
+ /** Main button label */
445
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
446
+ /** Main button icon class */
447
+ icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
448
+ /** Visual style variant */
449
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
450
+ /** Size */
451
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
452
+ /** Disables both buttons */
453
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
454
+ /** Menu entries */
455
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
456
+ /** Emits the `MouseEvent` when the main button is clicked. From the native `clicked` event. */
457
+ ksClick = output();
458
+ /** Emits the selected item's `key`. From the native `itemSelected` event. */
459
+ ksItemSelected = output();
460
+ constructor(ref) {
461
+ this.el = ref.nativeElement;
462
+ effect(() => (this.el.label = this.label()));
463
+ effect(() => (this.el.icon = this.icon()));
464
+ effect(() => (this.el.variant = this.variant()));
465
+ effect(() => (this.el.size = this.size()));
466
+ effect(() => (this.el.disabled = this.disabled()));
467
+ effect(() => (this.el.items = this.items()));
468
+ const onNativeClicked = (event) => {
469
+ this.ksClick.emit(event.detail);
470
+ };
471
+ const onNativeItemSelected = (event) => {
472
+ this.ksItemSelected.emit(event.detail);
473
+ };
474
+ this.el.addEventListener('clicked', onNativeClicked);
475
+ this.el.addEventListener('itemSelected', onNativeItemSelected);
476
+ inject(DestroyRef).onDestroy(() => {
477
+ this.el.removeEventListener('clicked', onNativeClicked);
478
+ this.el.removeEventListener('itemSelected', onNativeItemSelected);
479
+ });
480
+ }
481
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSplitButtonComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
482
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsSplitButtonComponent, isStandalone: true, selector: "ks-split-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksClick: "ksClick", ksItemSelected: "ksItemSelected" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
483
+ }
484
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSplitButtonComponent, decorators: [{
485
+ type: Component,
486
+ args: [{
487
+ selector: 'ks-split-button',
488
+ standalone: true,
489
+ template: '',
490
+ changeDetection: ChangeDetectionStrategy.OnPush,
491
+ }]
492
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], ksClick: [{ type: i0.Output, args: ["ksClick"] }], ksItemSelected: [{ type: i0.Output, args: ["ksItemSelected"] }] } });
493
+
494
+ // Side-effect import: registers the `ks-datepicker` tag — see
495
+ // `button/button.ts` for the full explanation of this pattern.
496
+ /**
497
+ * Angular wrapper around the `<ks-datepicker>` Stencil custom element.
498
+ *
499
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
500
+ * `formControlName` and it works through DI (`writeValue` /
501
+ * `registerOnChange`), with no template event-name collision to worry
502
+ * about. See `chips/chips.ts` for the full rationale (same pattern, same
503
+ * reason the native `selectedDateChange` event can't be reused verbatim as
504
+ * an Angular output name).
505
+ *
506
+ * For plain (non-forms) two-way use, bind explicitly instead:
507
+ * `[selectedDate]="d" (ksSelectedDateChange)="d = $event"`.
508
+ *
509
+ * `template: ''` — the projected panel content in the Stencil render is
510
+ * internal (calendar grid projected into the shared `<ks-overlay-field>`
511
+ * default slot); there is no slot exposed on `<ks-datepicker>` itself for
512
+ * a consumer to project into.
513
+ */
514
+ class KsDatepickerComponent {
515
+ el;
516
+ onChange = () => { };
517
+ onTouched = () => { };
518
+ /** Field label */
519
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
520
+ /** Placeholder text */
521
+ placeholder = input('Select date', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
522
+ /** Min selectable date */
523
+ minDate = input(null, ...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
524
+ /** Max selectable date */
525
+ maxDate = input(null, ...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
526
+ /** Disabled state */
527
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
528
+ /** Initial/controlled value for plain (non-forms) usage. Prefer `[(ngModel)]` / `formControlName` when inside a form. */
529
+ selectedDate = input(null, ...(ngDevMode ? [{ debugName: "selectedDate" }] : /* istanbul ignore next */ []));
530
+ /** Emits the newly-picked date. From the native `selectedDateChange` event. */
531
+ ksSelectedDateChange = output();
532
+ constructor(ref) {
533
+ this.el = ref.nativeElement;
534
+ effect(() => (this.el.label = this.label()));
535
+ effect(() => (this.el.placeholder = this.placeholder()));
536
+ effect(() => (this.el.minDate = this.minDate()));
537
+ effect(() => (this.el.maxDate = this.maxDate()));
538
+ effect(() => (this.el.disabled = this.disabled()));
539
+ effect(() => void this.el.writeValue(this.selectedDate()));
540
+ const onNativeSelectedDateChange = (event) => {
541
+ const detail = event.detail;
542
+ this.ksSelectedDateChange.emit(detail);
543
+ this.onChange(detail);
544
+ this.onTouched();
545
+ };
546
+ this.el.addEventListener('selectedDateChange', onNativeSelectedDateChange);
547
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('selectedDateChange', onNativeSelectedDateChange));
548
+ }
549
+ writeValue(value) {
550
+ void this.el.writeValue(value ?? null);
551
+ }
552
+ registerOnChange(fn) {
553
+ this.onChange = fn;
554
+ }
555
+ registerOnTouched(fn) {
556
+ this.onTouched = fn;
557
+ }
558
+ setDisabledState(isDisabled) {
559
+ this.el.disabled = isDisabled;
560
+ }
561
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsDatepickerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
562
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsDatepickerComponent, isStandalone: true, selector: "ks-datepicker", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksSelectedDateChange: "ksSelectedDateChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsDatepickerComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
563
+ }
564
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsDatepickerComponent, decorators: [{
565
+ type: Component,
566
+ args: [{
567
+ selector: 'ks-datepicker',
568
+ standalone: true,
569
+ template: '',
570
+ changeDetection: ChangeDetectionStrategy.OnPush,
571
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsDatepickerComponent, multi: true }],
572
+ }]
573
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], selectedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedDate", required: false }] }], ksSelectedDateChange: [{ type: i0.Output, args: ["ksSelectedDateChange"] }] } });
574
+
575
+ // Side-effect import: registers the `ks-daterange` tag — see
576
+ // `button/button.ts` for the full explanation of this pattern.
577
+ /**
578
+ * Angular wrapper around the `<ks-daterange>` Stencil custom element.
579
+ *
580
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
581
+ * `formControlName`. See `chips/chips.ts` for the full rationale (the
582
+ * native `rangeChange` event can't be reused verbatim as an Angular output
583
+ * name without a double-fire risk).
584
+ *
585
+ * For plain (non-forms) two-way use, bind explicitly instead:
586
+ * `[range]="r" (ksRangeChange)="r = $event"`.
587
+ *
588
+ * `template: ''` — no slot is exposed on `<ks-daterange>` itself.
589
+ */
590
+ class KsDaterangeComponent {
591
+ el;
592
+ onChange = () => { };
593
+ onTouched = () => { };
594
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
595
+ placeholder = input('Select date range…', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
596
+ minDate = input(null, ...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
597
+ maxDate = input(null, ...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
598
+ presets = input([], ...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
599
+ showPresets = input(true, ...(ngDevMode ? [{ debugName: "showPresets" }] : /* istanbul ignore next */ []));
600
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
601
+ /** Initial/controlled value for plain (non-forms) usage. Prefer `[(ngModel)]` / `formControlName` when inside a form. */
602
+ range = input({ start: null, end: null }, ...(ngDevMode ? [{ debugName: "range" }] : /* istanbul ignore next */ []));
603
+ /** Emits the newly-picked range. From the native `rangeChange` event. */
604
+ ksRangeChange = output();
605
+ constructor(ref) {
606
+ this.el = ref.nativeElement;
607
+ effect(() => (this.el.label = this.label()));
608
+ effect(() => (this.el.placeholder = this.placeholder()));
609
+ effect(() => (this.el.minDate = this.minDate()));
610
+ effect(() => (this.el.maxDate = this.maxDate()));
611
+ effect(() => (this.el.presets = this.presets()));
612
+ effect(() => (this.el.showPresets = this.showPresets()));
613
+ effect(() => (this.el.disabled = this.disabled()));
614
+ effect(() => void this.el.writeValue(this.range()));
615
+ const onNativeRangeChange = (event) => {
616
+ const detail = event.detail;
617
+ this.ksRangeChange.emit(detail);
618
+ this.onChange(detail);
619
+ this.onTouched();
620
+ };
621
+ this.el.addEventListener('rangeChange', onNativeRangeChange);
622
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('rangeChange', onNativeRangeChange));
623
+ }
624
+ writeValue(value) {
625
+ void this.el.writeValue(value ?? { start: null, end: null });
626
+ }
627
+ registerOnChange(fn) {
628
+ this.onChange = fn;
629
+ }
630
+ registerOnTouched(fn) {
631
+ this.onTouched = fn;
632
+ }
633
+ setDisabledState(isDisabled) {
634
+ this.el.disabled = isDisabled;
635
+ }
636
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsDaterangeComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
637
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsDaterangeComponent, isStandalone: true, selector: "ks-daterange", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null }, showPresets: { classPropertyName: "showPresets", publicName: "showPresets", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksRangeChange: "ksRangeChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsDaterangeComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
638
+ }
639
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsDaterangeComponent, decorators: [{
640
+ type: Component,
641
+ args: [{
642
+ selector: 'ks-daterange',
643
+ standalone: true,
644
+ template: '',
645
+ changeDetection: ChangeDetectionStrategy.OnPush,
646
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsDaterangeComponent, multi: true }],
647
+ }]
648
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], presets: [{ type: i0.Input, args: [{ isSignal: true, alias: "presets", required: false }] }], showPresets: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPresets", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], range: [{ type: i0.Input, args: [{ isSignal: true, alias: "range", required: false }] }], ksRangeChange: [{ type: i0.Output, args: ["ksRangeChange"] }] } });
649
+
650
+ // Side-effect import: registers the `ks-timepicker` tag — see
651
+ // `button/button.ts` for the full explanation of this pattern.
652
+ /**
653
+ * Angular wrapper around the `<ks-timepicker>` Stencil custom element.
654
+ *
655
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
656
+ * `formControlName`. See `chips/chips.ts` for the full rationale (the
657
+ * native `valueChange` event can't be reused verbatim as an Angular output
658
+ * name without a double-fire risk).
659
+ *
660
+ * For plain (non-forms) two-way use, bind explicitly instead:
661
+ * `[value]="t" (ksValueChange)="t = $event"`.
662
+ *
663
+ * `template: ''` — no slot is exposed on `<ks-timepicker>` itself.
664
+ */
665
+ class KsTimepickerComponent {
666
+ el;
667
+ onChange = () => { };
668
+ onTouched = () => { };
669
+ /** Field label */
670
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
671
+ /** Placeholder */
672
+ placeholder = input('Select time…', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
673
+ /** Use 12-hour clock (AM/PM) */
674
+ use12Hour = input(false, ...(ngDevMode ? [{ debugName: "use12Hour" }] : /* istanbul ignore next */ []));
675
+ /** Show seconds */
676
+ showSeconds = input(false, ...(ngDevMode ? [{ debugName: "showSeconds" }] : /* istanbul ignore next */ []));
677
+ /** Disabled */
678
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
679
+ /** Error message */
680
+ error = input('', ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
681
+ /** Initial/controlled value for plain (non-forms) usage. Prefer `[(ngModel)]` / `formControlName` when inside a form. */
682
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
683
+ /** Emits the confirmed time. From the native `valueChange` event. */
684
+ ksValueChange = output();
685
+ constructor(ref) {
686
+ this.el = ref.nativeElement;
687
+ effect(() => (this.el.label = this.label()));
688
+ effect(() => (this.el.placeholder = this.placeholder()));
689
+ effect(() => (this.el.use12Hour = this.use12Hour()));
690
+ effect(() => (this.el.showSeconds = this.showSeconds()));
691
+ effect(() => (this.el.disabled = this.disabled()));
692
+ effect(() => (this.el.error = this.error()));
693
+ effect(() => void this.el.writeValue(this.value()));
694
+ const onNativeValueChange = (event) => {
695
+ const detail = event.detail;
696
+ this.ksValueChange.emit(detail);
697
+ this.onChange(detail);
698
+ this.onTouched();
699
+ };
700
+ this.el.addEventListener('valueChange', onNativeValueChange);
701
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('valueChange', onNativeValueChange));
702
+ }
703
+ writeValue(value) {
704
+ void this.el.writeValue(value ?? null);
705
+ }
706
+ registerOnChange(fn) {
707
+ this.onChange = fn;
708
+ }
709
+ registerOnTouched(fn) {
710
+ this.onTouched = fn;
711
+ }
712
+ setDisabledState(isDisabled) {
713
+ this.el.disabled = isDisabled;
714
+ }
715
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTimepickerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
716
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsTimepickerComponent, isStandalone: true, selector: "ks-timepicker", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, use12Hour: { classPropertyName: "use12Hour", publicName: "use12Hour", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", ksValueChange: "ksValueChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsTimepickerComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
717
+ }
718
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTimepickerComponent, decorators: [{
719
+ type: Component,
720
+ args: [{
721
+ selector: 'ks-timepicker',
722
+ standalone: true,
723
+ template: '',
724
+ changeDetection: ChangeDetectionStrategy.OnPush,
725
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsTimepickerComponent, multi: true }],
726
+ }]
727
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], use12Hour: [{ type: i0.Input, args: [{ isSignal: true, alias: "use12Hour", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], ksValueChange: [{ type: i0.Output, args: ["ksValueChange"] }] } });
728
+
729
+ // Side-effect import: registers the `ks-dropdown` tag — see
730
+ // `button/button.ts` for the full explanation of this pattern.
731
+ /**
732
+ * Angular wrapper around the `<ks-dropdown>` Stencil custom element.
733
+ *
734
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
735
+ * `formControlName`. See `chips/chips.ts` for the full rationale (the
736
+ * native `selectedValuesChange` event can't be reused verbatim as an
737
+ * Angular output name without a double-fire risk).
738
+ *
739
+ * For plain (non-forms) two-way use, bind explicitly instead:
740
+ * `[selectedValues]="v" (ksSelectedValuesChange)="v = $event"`.
741
+ *
742
+ * `template: ''` — the option list / search box in the Stencil render are
743
+ * projected into the shared, internal `<ks-overlay-field>` slot; there is
744
+ * no slot exposed on `<ks-dropdown>` itself for a consumer to project into.
745
+ */
746
+ class KsDropdownComponent {
747
+ el;
748
+ onChange = () => { };
749
+ onTouched = () => { };
750
+ /** Full list of options */
751
+ options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
752
+ /** Placeholder text shown when nothing is selected */
753
+ placeholder = input('Select…', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
754
+ /** Allow selecting multiple options */
755
+ multi = input(false, ...(ngDevMode ? [{ debugName: "multi" }] : /* istanbul ignore next */ []));
756
+ /** Show a search box inside the dropdown */
757
+ searchable = input(false, ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
758
+ /** Field label */
759
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
760
+ /** Disabled state */
761
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
762
+ /** Initial/controlled selected value(s) for plain (non-forms) usage. Prefer `[(ngModel)]` / `formControlName` when inside a form. */
763
+ selectedValues = input([], ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
764
+ /** Emits the new selection — an array when `multi`, otherwise a single value. From the native `selectedValuesChange` event. */
765
+ ksSelectedValuesChange = output();
766
+ constructor(ref) {
767
+ this.el = ref.nativeElement;
768
+ effect(() => (this.el.options = this.options()));
769
+ effect(() => (this.el.placeholder = this.placeholder()));
770
+ effect(() => (this.el.multi = this.multi()));
771
+ effect(() => (this.el.searchable = this.searchable()));
772
+ effect(() => (this.el.label = this.label()));
773
+ effect(() => (this.el.disabled = this.disabled()));
774
+ effect(() => void this.el.writeValue(this.selectedValues()));
775
+ const onNativeSelectedValuesChange = (event) => {
776
+ const detail = event.detail;
777
+ this.ksSelectedValuesChange.emit(detail);
778
+ this.onChange(detail);
779
+ this.onTouched();
780
+ };
781
+ this.el.addEventListener('selectedValuesChange', onNativeSelectedValuesChange);
782
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('selectedValuesChange', onNativeSelectedValuesChange));
783
+ }
784
+ writeValue(value) {
785
+ void this.el.writeValue(value ?? null);
786
+ }
787
+ registerOnChange(fn) {
788
+ this.onChange = fn;
789
+ }
790
+ registerOnTouched(fn) {
791
+ this.onTouched = fn;
792
+ }
793
+ setDisabledState(isDisabled) {
794
+ this.el.disabled = isDisabled;
795
+ }
796
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsDropdownComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
797
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsDropdownComponent, isStandalone: true, selector: "ks-dropdown", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksSelectedValuesChange: "ksSelectedValuesChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsDropdownComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
798
+ }
799
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsDropdownComponent, decorators: [{
800
+ type: Component,
801
+ args: [{
802
+ selector: 'ks-dropdown',
803
+ standalone: true,
804
+ template: '',
805
+ changeDetection: ChangeDetectionStrategy.OnPush,
806
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsDropdownComponent, multi: true }],
807
+ }]
808
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], ksSelectedValuesChange: [{ type: i0.Output, args: ["ksSelectedValuesChange"] }] } });
809
+
810
+ // Side-effect import: registers the `ks-listbox` tag — see
811
+ // `button/button.ts` for the full explanation of this pattern.
812
+ /**
813
+ * Angular wrapper around the `<ks-listbox>` Stencil custom element.
814
+ *
815
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
816
+ * `formControlName`. See `chips/chips.ts` for the full rationale (the
817
+ * native `selectedChange` event can't be reused verbatim as an Angular
818
+ * output name without a double-fire risk).
819
+ *
820
+ * For plain (non-forms) two-way use, bind explicitly instead:
821
+ * `[selected]="v" (ksSelectedChange)="v = $event"`.
822
+ *
823
+ * `template: ''` — no slot is exposed on `<ks-listbox>` itself.
824
+ */
825
+ class KsListBoxComponent {
826
+ el;
827
+ onChange = () => { };
828
+ onTouched = () => { };
829
+ /** Options list */
830
+ options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
831
+ /** Allow multi-select */
832
+ multi = input(false, ...(ngDevMode ? [{ debugName: "multi" }] : /* istanbul ignore next */ []));
833
+ /** Show search box */
834
+ searchable = input(false, ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
835
+ /** Disabled */
836
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
837
+ /** Enable group headers using the `group` field on each option */
838
+ groupBy = input(false, ...(ngDevMode ? [{ debugName: "groupBy" }] : /* istanbul ignore next */ []));
839
+ /** Initial/controlled selected value(s) for plain (non-forms) usage. Prefer `[(ngModel)]` / `formControlName` when inside a form. */
840
+ selected = input([], ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
841
+ /** Emits the new selection — an array when `multi`, otherwise a single value. From the native `selectedChange` event. */
842
+ ksSelectedChange = output();
843
+ constructor(ref) {
844
+ this.el = ref.nativeElement;
845
+ effect(() => (this.el.options = this.options()));
846
+ effect(() => (this.el.multi = this.multi()));
847
+ effect(() => (this.el.searchable = this.searchable()));
848
+ effect(() => (this.el.disabled = this.disabled()));
849
+ effect(() => (this.el.groupBy = this.groupBy()));
850
+ effect(() => void this.el.writeValue(this.selected()));
851
+ const onNativeSelectedChange = (event) => {
852
+ const detail = event.detail;
853
+ this.ksSelectedChange.emit(detail);
854
+ this.onChange(detail);
855
+ this.onTouched();
856
+ };
857
+ this.el.addEventListener('selectedChange', onNativeSelectedChange);
858
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('selectedChange', onNativeSelectedChange));
859
+ }
860
+ writeValue(value) {
861
+ void this.el.writeValue(value ?? null);
862
+ }
863
+ registerOnChange(fn) {
864
+ this.onChange = fn;
865
+ }
866
+ registerOnTouched(fn) {
867
+ this.onTouched = fn;
868
+ }
869
+ setDisabledState(isDisabled) {
870
+ this.el.disabled = isDisabled;
871
+ }
872
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsListBoxComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
873
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsListBoxComponent, isStandalone: true, selector: "ks-listbox", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, groupBy: { classPropertyName: "groupBy", publicName: "groupBy", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksSelectedChange: "ksSelectedChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsListBoxComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
874
+ }
875
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsListBoxComponent, decorators: [{
876
+ type: Component,
877
+ args: [{
878
+ selector: 'ks-listbox',
879
+ standalone: true,
880
+ template: '',
881
+ changeDetection: ChangeDetectionStrategy.OnPush,
882
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsListBoxComponent, multi: true }],
883
+ }]
884
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], groupBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupBy", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], ksSelectedChange: [{ type: i0.Output, args: ["ksSelectedChange"] }] } });
885
+
886
+ // Side-effect import: registers the `ks-checkbox` tag — see
887
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
888
+ /**
889
+ * Angular wrapper around the `<ks-checkbox>` Stencil custom element.
890
+ *
891
+ * Supports two modes, mirroring the Stencil source:
892
+ * - **Single** mode (no `options`): two-way bind `checked` (boolean).
893
+ * - **Group** mode (`options` set): two-way bind `selected` (string[]).
894
+ *
895
+ * Two-way binding for either mode is via `ControlValueAccessor` — use
896
+ * `[(ngModel)]`/`formControlName` and it works for whichever mode is
897
+ * active (see `Buttons/chips/chips.ts` for the full rationale on why CVA
898
+ * is used instead of reusing a native event name as an Angular output).
899
+ *
900
+ * For plain (non-forms) two-way use, bind explicitly instead:
901
+ * `[checked]="c" (ksCheckedChange)="c = $event"` or
902
+ * `[selected]="s" (ksSelectedChange)="s = $event"`.
903
+ *
904
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
905
+ */
906
+ class KsCheckboxComponent {
907
+ el;
908
+ onChange = () => { };
909
+ onTouched = () => { };
910
+ /** Label shown next to the control (single mode) */
911
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
912
+ /** Optional set of multiple options (multi-select / group mode) */
913
+ options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
914
+ /** Disabled state */
915
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
916
+ /** Single mode: initial/controlled checked value. Prefer `[(ngModel)]` / `formControlName`. */
917
+ checked = input(false, ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
918
+ /** Group mode: initial/controlled selected values. Prefer `[(ngModel)]` / `formControlName`. */
919
+ selected = input([], ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
920
+ /** Emits whenever `checked` changes (single mode). From the native `checkedChange` event. */
921
+ ksCheckedChange = output();
922
+ /** Emits whenever `selected` changes (group mode). From the native `selectedChange` event. */
923
+ ksSelectedChange = output();
924
+ constructor(ref) {
925
+ this.el = ref.nativeElement;
926
+ effect(() => (this.el.label = this.label()));
927
+ effect(() => (this.el.options = this.options()));
928
+ effect(() => (this.el.disabled = this.disabled()));
929
+ effect(() => (this.el.checked = this.checked()));
930
+ effect(() => (this.el.selected = this.selected()));
931
+ const onNativeCheckedChange = (event) => {
932
+ const detail = event.detail;
933
+ this.ksCheckedChange.emit(detail);
934
+ this.onChange(detail);
935
+ this.onTouched();
936
+ };
937
+ const onNativeSelectedChange = (event) => {
938
+ const detail = event.detail;
939
+ this.ksSelectedChange.emit(detail);
940
+ this.onChange(detail);
941
+ this.onTouched();
942
+ };
943
+ this.el.addEventListener('checkedChange', onNativeCheckedChange);
944
+ this.el.addEventListener('selectedChange', onNativeSelectedChange);
945
+ inject(DestroyRef).onDestroy(() => {
946
+ this.el.removeEventListener('checkedChange', onNativeCheckedChange);
947
+ this.el.removeEventListener('selectedChange', onNativeSelectedChange);
948
+ });
949
+ }
950
+ /** `ControlValueAccessor` — called by `ngModel`/`formControl` to push a value in (either mode). */
951
+ writeValue(value) {
952
+ void this.el.writeValue(value);
953
+ }
954
+ registerOnChange(fn) {
955
+ this.onChange = fn;
956
+ }
957
+ registerOnTouched(fn) {
958
+ this.onTouched = fn;
959
+ }
960
+ setDisabledState(isDisabled) {
961
+ this.el.disabled = isDisabled;
962
+ }
963
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsCheckboxComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
964
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsCheckboxComponent, isStandalone: true, selector: "ks-checkbox", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksCheckedChange: "ksCheckedChange", ksSelectedChange: "ksSelectedChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsCheckboxComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
965
+ }
966
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsCheckboxComponent, decorators: [{
967
+ type: Component,
968
+ args: [{
969
+ selector: 'ks-checkbox',
970
+ standalone: true,
971
+ template: '',
972
+ changeDetection: ChangeDetectionStrategy.OnPush,
973
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsCheckboxComponent, multi: true }],
974
+ }]
975
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], ksCheckedChange: [{ type: i0.Output, args: ["ksCheckedChange"] }], ksSelectedChange: [{ type: i0.Output, args: ["ksSelectedChange"] }] } });
976
+
977
+ // Side-effect import: registers the `ks-colour-picker` tag — see
978
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
979
+ const DEFAULT_SWATCHES = ['#ef4444', '#f97316', '#eab308', '#22c55e', '#3b82f6', '#8b5cf6', '#ec4899', '#64748b', '#000000', '#ffffff'];
980
+ /**
981
+ * Angular wrapper around the `<ks-colour-picker>` Stencil custom element.
982
+ *
983
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
984
+ * `formControlName`. See `Buttons/chips/chips.ts` for the full rationale
985
+ * (the native `valueChange` event can't be reused verbatim as an Angular
986
+ * output name without a double-fire risk).
987
+ *
988
+ * For plain (non-forms) two-way use, bind explicitly instead:
989
+ * `[value]="hex" (ksValueChange)="hex = $event"`.
990
+ *
991
+ * `template: ''` — the panel is rendered into the internal
992
+ * `<ks-overlay-field>`; there is no slot on `<ks-colour-picker>` itself.
993
+ */
994
+ class KsColourPickerComponent {
995
+ el;
996
+ onChange = () => { };
997
+ onTouched = () => { };
998
+ /** Field label */
999
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1000
+ /** Picker UI variant */
1001
+ variant = input('input', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1002
+ /** Preset swatch colours */
1003
+ swatches = input(DEFAULT_SWATCHES, ...(ngDevMode ? [{ debugName: "swatches" }] : /* istanbul ignore next */ []));
1004
+ /** Disabled */
1005
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1006
+ /** Initial/controlled hex value. Prefer `[(ngModel)]` / `formControlName`. */
1007
+ value = input('#3b82f6', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1008
+ /** Emits the newly-picked hex colour. From the native `valueChange` event. */
1009
+ ksValueChange = output();
1010
+ constructor(ref) {
1011
+ this.el = ref.nativeElement;
1012
+ effect(() => (this.el.label = this.label()));
1013
+ effect(() => (this.el.variant = this.variant()));
1014
+ effect(() => (this.el.swatches = this.swatches()));
1015
+ effect(() => (this.el.disabled = this.disabled()));
1016
+ effect(() => void this.el.writeValue(this.value()));
1017
+ const onNativeValueChange = (event) => {
1018
+ const detail = event.detail;
1019
+ this.ksValueChange.emit(detail);
1020
+ this.onChange(detail);
1021
+ this.onTouched();
1022
+ };
1023
+ this.el.addEventListener('valueChange', onNativeValueChange);
1024
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('valueChange', onNativeValueChange));
1025
+ }
1026
+ writeValue(value) {
1027
+ void this.el.writeValue(value ?? '#3b82f6');
1028
+ }
1029
+ registerOnChange(fn) {
1030
+ this.onChange = fn;
1031
+ }
1032
+ registerOnTouched(fn) {
1033
+ this.onTouched = fn;
1034
+ }
1035
+ setDisabledState(isDisabled) {
1036
+ this.el.disabled = isDisabled;
1037
+ }
1038
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsColourPickerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1039
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsColourPickerComponent, isStandalone: true, selector: "ks-colour-picker", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, swatches: { classPropertyName: "swatches", publicName: "swatches", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksValueChange: "ksValueChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsColourPickerComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1040
+ }
1041
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsColourPickerComponent, decorators: [{
1042
+ type: Component,
1043
+ args: [{
1044
+ selector: 'ks-colour-picker',
1045
+ standalone: true,
1046
+ template: '',
1047
+ changeDetection: ChangeDetectionStrategy.OnPush,
1048
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsColourPickerComponent, multi: true }],
1049
+ }]
1050
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], swatches: [{ type: i0.Input, args: [{ isSignal: true, alias: "swatches", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ksValueChange: [{ type: i0.Output, args: ["ksValueChange"] }] } });
1051
+
1052
+ // Side-effect import: registers the `ks-input` tag — see
1053
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1054
+ /**
1055
+ * Angular wrapper around the `<ks-input>` Stencil custom element.
1056
+ *
1057
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
1058
+ * `formControlName`. `<ks-input>` has no `@Method() writeValue()` of its
1059
+ * own (unlike `chips`/`dropdown`/…), so this wrapper's `writeValue` sets
1060
+ * `el.value` directly instead of delegating to a Stencil method.
1061
+ *
1062
+ * The native `ksBlur` event is already prefixed `ks` by the Stencil
1063
+ * author, so re-using that exact name here as the Angular output would
1064
+ * still hit the double-fire collision described in `Buttons/button.ts`
1065
+ * (Ivy's `tNode.outputs` match is purely by literal name, `ks`-prefix or
1066
+ * not) — hence `ksBlurred` (distinct spelling) instead.
1067
+ *
1068
+ * For plain (non-forms) two-way use, bind explicitly instead:
1069
+ * `[value]="v" (ksValueChange)="v = $event"`.
1070
+ *
1071
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
1072
+ */
1073
+ class KsInputComponent {
1074
+ el;
1075
+ onChange = () => { };
1076
+ onTouched = () => { };
1077
+ /** HTML input type */
1078
+ type = input('text', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
1079
+ /** Placeholder text */
1080
+ placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
1081
+ /** Field label */
1082
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1083
+ /** Helper / hint text shown below the input */
1084
+ hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
1085
+ /** Error message — also triggers the error state */
1086
+ error = input('', ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
1087
+ /** Leading icon class (e.g. Material Symbol name) */
1088
+ prefixIcon = input('', ...(ngDevMode ? [{ debugName: "prefixIcon" }] : /* istanbul ignore next */ []));
1089
+ /** Trailing icon class */
1090
+ suffixIcon = input('', ...(ngDevMode ? [{ debugName: "suffixIcon" }] : /* istanbul ignore next */ []));
1091
+ /** Size variant */
1092
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1093
+ /** Initial/controlled value. Prefer `[(ngModel)]` / `formControlName`. */
1094
+ value = model('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1095
+ /** Disabled state */
1096
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1097
+ /** Emits the newly-typed value. From the native `valueChange` event. */
1098
+ ksValueChange = output();
1099
+ /** Emitted on native blur (mirrors Angular's onTouched callback). From the native `ksBlur` event. */
1100
+ ksBlurred = output();
1101
+ constructor(ref) {
1102
+ this.el = ref.nativeElement;
1103
+ effect(() => (this.el.type = this.type()));
1104
+ effect(() => (this.el.placeholder = this.placeholder()));
1105
+ effect(() => (this.el.label = this.label()));
1106
+ effect(() => (this.el.hint = this.hint()));
1107
+ effect(() => (this.el.error = this.error()));
1108
+ effect(() => (this.el.prefixIcon = this.prefixIcon()));
1109
+ effect(() => (this.el.suffixIcon = this.suffixIcon()));
1110
+ effect(() => (this.el.size = this.size()));
1111
+ effect(() => (this.el.disabled = this.disabled()));
1112
+ effect(() => (this.el.value = this.value()));
1113
+ const onNativeValueChange = (event) => {
1114
+ const detail = event.detail;
1115
+ this.ksValueChange.emit(detail);
1116
+ this.onChange(detail);
1117
+ };
1118
+ const onNativeBlur = () => {
1119
+ this.ksBlurred.emit();
1120
+ this.onTouched();
1121
+ };
1122
+ this.el.addEventListener('valueChange', onNativeValueChange);
1123
+ this.el.addEventListener('ksBlur', onNativeBlur);
1124
+ inject(DestroyRef).onDestroy(() => {
1125
+ this.el.removeEventListener('valueChange', onNativeValueChange);
1126
+ this.el.removeEventListener('ksBlur', onNativeBlur);
1127
+ });
1128
+ }
1129
+ writeValue(value) {
1130
+ this.el.value = value ?? '';
1131
+ }
1132
+ registerOnChange(fn) {
1133
+ this.onChange = fn;
1134
+ }
1135
+ registerOnTouched(fn) {
1136
+ this.onTouched = fn;
1137
+ }
1138
+ setDisabledState(isDisabled) {
1139
+ this.el.disabled = isDisabled;
1140
+ }
1141
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsInputComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1142
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsInputComponent, isStandalone: true, selector: "ks-input", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: true, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", ksValueChange: "ksValueChange", ksBlurred: "ksBlurred" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsInputComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1143
+ }
1144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsInputComponent, decorators: [{
1145
+ type: Component,
1146
+ args: [{
1147
+ selector: 'ks-input',
1148
+ standalone: true,
1149
+ template: '',
1150
+ changeDetection: ChangeDetectionStrategy.OnPush,
1151
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsInputComponent, multi: true }],
1152
+ }]
1153
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], prefixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefixIcon", required: false }] }], suffixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffixIcon", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ksValueChange: [{ type: i0.Output, args: ["ksValueChange"] }], ksBlurred: [{ type: i0.Output, args: ["ksBlurred"] }] } });
1154
+
1155
+ // Side-effect import: registers the `ks-otp-input` tag — see
1156
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1157
+ /**
1158
+ * Angular wrapper around the `<ks-otp-input>` Stencil custom element.
1159
+ *
1160
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
1161
+ * `formControlName`. See `Buttons/chips/chips.ts` for the full rationale.
1162
+ *
1163
+ * For plain (non-forms) two-way use, bind explicitly instead:
1164
+ * `[value]="v" (ksValueChange)="v = $event"`.
1165
+ *
1166
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
1167
+ */
1168
+ class KsOtpInputComponent {
1169
+ el;
1170
+ onChange = () => { };
1171
+ onTouched = () => { };
1172
+ /** Number of digits */
1173
+ length = input(6, ...(ngDevMode ? [{ debugName: "length" }] : /* istanbul ignore next */ []));
1174
+ /** Input type: 'number' | 'text' */
1175
+ inputType = input('number', ...(ngDevMode ? [{ debugName: "inputType" }] : /* istanbul ignore next */ []));
1176
+ /** Field label */
1177
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1178
+ /** Error message */
1179
+ error = input('', ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
1180
+ /** Mask the input (like a password) */
1181
+ masked = input(false, ...(ngDevMode ? [{ debugName: "masked" }] : /* istanbul ignore next */ []));
1182
+ /** Disabled */
1183
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1184
+ /** Initial/controlled value. Prefer `[(ngModel)]` / `formControlName`. */
1185
+ value = input('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1186
+ /** Emits whenever `value` changes. From the native `valueChange` event. */
1187
+ ksValueChange = output();
1188
+ /** Emits the full OTP string when all digits are filled. From the native `completed` event. */
1189
+ ksCompleted = output();
1190
+ constructor(ref) {
1191
+ this.el = ref.nativeElement;
1192
+ effect(() => (this.el.length = this.length()));
1193
+ effect(() => (this.el.inputType = this.inputType()));
1194
+ effect(() => (this.el.label = this.label()));
1195
+ effect(() => (this.el.error = this.error()));
1196
+ effect(() => (this.el.masked = this.masked()));
1197
+ effect(() => (this.el.disabled = this.disabled()));
1198
+ effect(() => void this.el.writeValue(this.value()));
1199
+ const onNativeValueChange = (event) => {
1200
+ const detail = event.detail;
1201
+ this.ksValueChange.emit(detail);
1202
+ this.onChange(detail);
1203
+ this.onTouched();
1204
+ };
1205
+ const onNativeCompleted = (event) => {
1206
+ this.ksCompleted.emit(event.detail);
1207
+ };
1208
+ this.el.addEventListener('valueChange', onNativeValueChange);
1209
+ this.el.addEventListener('completed', onNativeCompleted);
1210
+ inject(DestroyRef).onDestroy(() => {
1211
+ this.el.removeEventListener('valueChange', onNativeValueChange);
1212
+ this.el.removeEventListener('completed', onNativeCompleted);
1213
+ });
1214
+ }
1215
+ writeValue(value) {
1216
+ void this.el.writeValue(value ?? '');
1217
+ }
1218
+ registerOnChange(fn) {
1219
+ this.onChange = fn;
1220
+ }
1221
+ registerOnTouched(fn) {
1222
+ this.onTouched = fn;
1223
+ }
1224
+ setDisabledState(isDisabled) {
1225
+ this.el.disabled = isDisabled;
1226
+ }
1227
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsOtpInputComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1228
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsOtpInputComponent, isStandalone: true, selector: "ks-otp-input", inputs: { length: { classPropertyName: "length", publicName: "length", isSignal: true, isRequired: false, transformFunction: null }, inputType: { classPropertyName: "inputType", publicName: "inputType", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, masked: { classPropertyName: "masked", publicName: "masked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksValueChange: "ksValueChange", ksCompleted: "ksCompleted" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsOtpInputComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1229
+ }
1230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsOtpInputComponent, decorators: [{
1231
+ type: Component,
1232
+ args: [{
1233
+ selector: 'ks-otp-input',
1234
+ standalone: true,
1235
+ template: '',
1236
+ changeDetection: ChangeDetectionStrategy.OnPush,
1237
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsOtpInputComponent, multi: true }],
1238
+ }]
1239
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { length: [{ type: i0.Input, args: [{ isSignal: true, alias: "length", required: false }] }], inputType: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputType", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], masked: [{ type: i0.Input, args: [{ isSignal: true, alias: "masked", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ksValueChange: [{ type: i0.Output, args: ["ksValueChange"] }], ksCompleted: [{ type: i0.Output, args: ["ksCompleted"] }] } });
1240
+
1241
+ // Side-effect import: registers the `ks-radio` tag — see
1242
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1243
+ /**
1244
+ * Angular wrapper around the `<ks-radio>` Stencil custom element.
1245
+ *
1246
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
1247
+ * `formControlName`. See `Buttons/chips/chips.ts` for the full rationale.
1248
+ *
1249
+ * For plain (non-forms) two-way use, bind explicitly instead:
1250
+ * `[value]="v" (ksValueChange)="v = $event"`.
1251
+ *
1252
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
1253
+ */
1254
+ class KsRadioComponent {
1255
+ el;
1256
+ onChange = () => { };
1257
+ onTouched = () => { };
1258
+ /** List of options — the component renders a radio group */
1259
+ options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
1260
+ /** Label shown above the group */
1261
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1262
+ /** Name attribute shared across all radio inputs in the group */
1263
+ name = input('ks-radio', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
1264
+ /** Colour variant applied to the selected indicator */
1265
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1266
+ /** Size variant — affects label text size */
1267
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1268
+ /** Disabled state */
1269
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1270
+ /** Initial/controlled selected value. Prefer `[(ngModel)]` / `formControlName`. */
1271
+ value = input('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1272
+ /** Emits the selected value on every change. From the native `valueChange` event. */
1273
+ ksValueChange = output();
1274
+ constructor(ref) {
1275
+ this.el = ref.nativeElement;
1276
+ effect(() => (this.el.options = this.options()));
1277
+ effect(() => (this.el.label = this.label()));
1278
+ effect(() => (this.el.name = this.name()));
1279
+ effect(() => (this.el.variant = this.variant()));
1280
+ effect(() => (this.el.size = this.size()));
1281
+ effect(() => (this.el.disabled = this.disabled()));
1282
+ effect(() => void this.el.writeValue(this.value()));
1283
+ const onNativeValueChange = (event) => {
1284
+ const detail = event.detail;
1285
+ this.ksValueChange.emit(detail);
1286
+ this.onChange(detail);
1287
+ this.onTouched();
1288
+ };
1289
+ this.el.addEventListener('valueChange', onNativeValueChange);
1290
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('valueChange', onNativeValueChange));
1291
+ }
1292
+ writeValue(value) {
1293
+ void this.el.writeValue(value ?? '');
1294
+ }
1295
+ registerOnChange(fn) {
1296
+ this.onChange = fn;
1297
+ }
1298
+ registerOnTouched(fn) {
1299
+ this.onTouched = fn;
1300
+ }
1301
+ setDisabledState(isDisabled) {
1302
+ this.el.disabled = isDisabled;
1303
+ }
1304
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsRadioComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1305
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsRadioComponent, isStandalone: true, selector: "ks-radio", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksValueChange: "ksValueChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsRadioComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1306
+ }
1307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsRadioComponent, decorators: [{
1308
+ type: Component,
1309
+ args: [{
1310
+ selector: 'ks-radio',
1311
+ standalone: true,
1312
+ template: '',
1313
+ changeDetection: ChangeDetectionStrategy.OnPush,
1314
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsRadioComponent, multi: true }],
1315
+ }]
1316
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ksValueChange: [{ type: i0.Output, args: ["ksValueChange"] }] } });
1317
+
1318
+ // Side-effect import: registers the `ks-rating` tag — see
1319
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1320
+ /**
1321
+ * Angular wrapper around the `<ks-rating>` Stencil custom element.
1322
+ *
1323
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
1324
+ * `formControlName`. See `Buttons/chips/chips.ts` for the full rationale.
1325
+ *
1326
+ * For plain (non-forms) two-way use, bind explicitly instead:
1327
+ * `[value]="v" (ksValueChange)="v = $event"`.
1328
+ *
1329
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
1330
+ */
1331
+ class KsRatingComponent {
1332
+ el;
1333
+ onChange = () => { };
1334
+ onTouched = () => { };
1335
+ /** Total number of stars */
1336
+ max = input(5, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
1337
+ /** Size */
1338
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1339
+ /** Read-only / non-interactive */
1340
+ readOnly = input(false, ...(ngDevMode ? [{ debugName: "readOnly" }] : /* istanbul ignore next */ []));
1341
+ /** Show numeric label */
1342
+ showLabel = input(false, ...(ngDevMode ? [{ debugName: "showLabel" }] : /* istanbul ignore next */ []));
1343
+ /** Field label */
1344
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1345
+ /** Disabled */
1346
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1347
+ /** Initial/controlled value. Prefer `[(ngModel)]` / `formControlName`. */
1348
+ value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1349
+ /** Emits the newly-picked rating. From the native `valueChange` event. */
1350
+ ksValueChange = output();
1351
+ constructor(ref) {
1352
+ this.el = ref.nativeElement;
1353
+ effect(() => (this.el.max = this.max()));
1354
+ effect(() => (this.el.size = this.size()));
1355
+ effect(() => (this.el.readOnly = this.readOnly()));
1356
+ effect(() => (this.el.showLabel = this.showLabel()));
1357
+ effect(() => (this.el.label = this.label()));
1358
+ effect(() => (this.el.disabled = this.disabled()));
1359
+ effect(() => void this.el.writeValue(this.value()));
1360
+ const onNativeValueChange = (event) => {
1361
+ const detail = event.detail;
1362
+ this.ksValueChange.emit(detail);
1363
+ this.onChange(detail);
1364
+ this.onTouched();
1365
+ };
1366
+ this.el.addEventListener('valueChange', onNativeValueChange);
1367
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('valueChange', onNativeValueChange));
1368
+ }
1369
+ writeValue(value) {
1370
+ void this.el.writeValue(value ?? 0);
1371
+ }
1372
+ registerOnChange(fn) {
1373
+ this.onChange = fn;
1374
+ }
1375
+ registerOnTouched(fn) {
1376
+ this.onTouched = fn;
1377
+ }
1378
+ setDisabledState(isDisabled) {
1379
+ this.el.disabled = isDisabled;
1380
+ }
1381
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsRatingComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1382
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsRatingComponent, isStandalone: true, selector: "ks-rating", inputs: { max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksValueChange: "ksValueChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsRatingComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1383
+ }
1384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsRatingComponent, decorators: [{
1385
+ type: Component,
1386
+ args: [{
1387
+ selector: 'ks-rating',
1388
+ standalone: true,
1389
+ template: '',
1390
+ changeDetection: ChangeDetectionStrategy.OnPush,
1391
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsRatingComponent, multi: true }],
1392
+ }]
1393
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ksValueChange: [{ type: i0.Output, args: ["ksValueChange"] }] } });
1394
+
1395
+ // Side-effect import: registers the `ks-slider` tag — see
1396
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1397
+ /**
1398
+ * Angular wrapper around the `<ks-slider>` Stencil custom element.
1399
+ *
1400
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
1401
+ * `formControlName`. See `Buttons/chips/chips.ts` for the full rationale.
1402
+ * The native `ksBlur` event (already `ks`-prefixed by the Stencil author)
1403
+ * is re-exposed as `ksBlurred` — see `Inputs/input/input.ts` for why the
1404
+ * literal name can't be reused.
1405
+ *
1406
+ * For plain (non-forms) two-way use, bind explicitly instead:
1407
+ * `[value]="v" (ksValueChange)="v = $event"`.
1408
+ *
1409
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
1410
+ */
1411
+ class KsSliderComponent {
1412
+ el;
1413
+ onChange = () => { };
1414
+ onTouched = () => { };
1415
+ /** Minimum value */
1416
+ min = input(0, ...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
1417
+ /** Maximum value */
1418
+ max = input(100, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
1419
+ /** Step increment */
1420
+ step = input(1, ...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
1421
+ /** Show value tooltip */
1422
+ showTooltip = input(true, ...(ngDevMode ? [{ debugName: "showTooltip" }] : /* istanbul ignore next */ []));
1423
+ /** Show min/max labels */
1424
+ showLabels = input(false, ...(ngDevMode ? [{ debugName: "showLabels" }] : /* istanbul ignore next */ []));
1425
+ /** Field label */
1426
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1427
+ /** Disabled state */
1428
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1429
+ /** Initial/controlled value. Prefer `[(ngModel)]` / `formControlName`. */
1430
+ value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1431
+ /** Emits the newly-picked value. From the native `valueChange` event. */
1432
+ ksValueChange = output();
1433
+ /** Emitted on native blur. From the native `ksBlur` event. */
1434
+ ksBlurred = output();
1435
+ constructor(ref) {
1436
+ this.el = ref.nativeElement;
1437
+ effect(() => (this.el.min = this.min()));
1438
+ effect(() => (this.el.max = this.max()));
1439
+ effect(() => (this.el.step = this.step()));
1440
+ effect(() => (this.el.showTooltip = this.showTooltip()));
1441
+ effect(() => (this.el.showLabels = this.showLabels()));
1442
+ effect(() => (this.el.label = this.label()));
1443
+ effect(() => (this.el.disabled = this.disabled()));
1444
+ effect(() => void this.el.writeValue(this.value()));
1445
+ const onNativeValueChange = (event) => {
1446
+ const detail = event.detail;
1447
+ this.ksValueChange.emit(detail);
1448
+ this.onChange(detail);
1449
+ };
1450
+ const onNativeBlur = () => {
1451
+ this.ksBlurred.emit();
1452
+ this.onTouched();
1453
+ };
1454
+ this.el.addEventListener('valueChange', onNativeValueChange);
1455
+ this.el.addEventListener('ksBlur', onNativeBlur);
1456
+ inject(DestroyRef).onDestroy(() => {
1457
+ this.el.removeEventListener('valueChange', onNativeValueChange);
1458
+ this.el.removeEventListener('ksBlur', onNativeBlur);
1459
+ });
1460
+ }
1461
+ writeValue(value) {
1462
+ void this.el.writeValue(value ?? 0);
1463
+ }
1464
+ registerOnChange(fn) {
1465
+ this.onChange = fn;
1466
+ }
1467
+ registerOnTouched(fn) {
1468
+ this.onTouched = fn;
1469
+ }
1470
+ setDisabledState(isDisabled) {
1471
+ this.el.disabled = isDisabled;
1472
+ }
1473
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSliderComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1474
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsSliderComponent, isStandalone: true, selector: "ks-slider", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, showTooltip: { classPropertyName: "showTooltip", publicName: "showTooltip", isSignal: true, isRequired: false, transformFunction: null }, showLabels: { classPropertyName: "showLabels", publicName: "showLabels", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksValueChange: "ksValueChange", ksBlurred: "ksBlurred" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsSliderComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1475
+ }
1476
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSliderComponent, decorators: [{
1477
+ type: Component,
1478
+ args: [{
1479
+ selector: 'ks-slider',
1480
+ standalone: true,
1481
+ template: '',
1482
+ changeDetection: ChangeDetectionStrategy.OnPush,
1483
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsSliderComponent, multi: true }],
1484
+ }]
1485
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], showTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTooltip", required: false }] }], showLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabels", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ksValueChange: [{ type: i0.Output, args: ["ksValueChange"] }], ksBlurred: [{ type: i0.Output, args: ["ksBlurred"] }] } });
1486
+
1487
+ // Side-effect import: registers the `ks-switch` tag — see
1488
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1489
+ /**
1490
+ * Angular wrapper around the `<ks-switch>` Stencil custom element.
1491
+ *
1492
+ * Two-way binding is via `ControlValueAccessor` — use `[(ngModel)]` or
1493
+ * `formControlName`. Unlike most other form-control wrappers here,
1494
+ * `<ks-switch>` has no `@Method() writeValue()`, so `writeValue` below
1495
+ * sets `el.checked` directly; it DOES expose a real
1496
+ * `@Method() setDisabledState()` (mirroring CVA exactly), which
1497
+ * `setDisabledState` below delegates to instead of setting a plain prop.
1498
+ *
1499
+ * For plain (non-forms) two-way use, bind explicitly instead:
1500
+ * `[checked]="c" (ksCheckedChange)="c = $event"`.
1501
+ *
1502
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
1503
+ */
1504
+ class KsSwitchComponent {
1505
+ el;
1506
+ onChange = () => { };
1507
+ onTouched = () => { };
1508
+ /** Label text */
1509
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1510
+ /** Colour variant */
1511
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1512
+ /** Disabled */
1513
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1514
+ /** Initial/controlled checked value. Prefer `[(ngModel)]` / `formControlName`. */
1515
+ checked = input(false, ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
1516
+ /** Label position relative to the switch track */
1517
+ labelPosition = input('left', ...(ngDevMode ? [{ debugName: "labelPosition" }] : /* istanbul ignore next */ []));
1518
+ /** Emits whenever `checked` changes. From the native `checkedChange` event. */
1519
+ ksCheckedChange = output();
1520
+ constructor(ref) {
1521
+ this.el = ref.nativeElement;
1522
+ effect(() => (this.el.label = this.label()));
1523
+ effect(() => (this.el.variant = this.variant()));
1524
+ effect(() => (this.el.disabled = this.disabled()));
1525
+ effect(() => (this.el.checked = this.checked()));
1526
+ effect(() => (this.el.labelPosition = this.labelPosition()));
1527
+ const onNativeCheckedChange = (event) => {
1528
+ const detail = event.detail;
1529
+ this.ksCheckedChange.emit(detail);
1530
+ this.onChange(detail);
1531
+ this.onTouched();
1532
+ };
1533
+ this.el.addEventListener('checkedChange', onNativeCheckedChange);
1534
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('checkedChange', onNativeCheckedChange));
1535
+ }
1536
+ writeValue(value) {
1537
+ this.el.checked = value ?? false;
1538
+ }
1539
+ registerOnChange(fn) {
1540
+ this.onChange = fn;
1541
+ }
1542
+ registerOnTouched(fn) {
1543
+ this.onTouched = fn;
1544
+ }
1545
+ /** Delegates to `<ks-switch>`'s own `@Method() setDisabledState()`. */
1546
+ setDisabledState(isDisabled) {
1547
+ void this.el.setDisabledState(isDisabled);
1548
+ }
1549
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSwitchComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1550
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsSwitchComponent, isStandalone: true, selector: "ks-switch", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, labelPosition: { classPropertyName: "labelPosition", publicName: "labelPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksCheckedChange: "ksCheckedChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsSwitchComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1551
+ }
1552
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSwitchComponent, decorators: [{
1553
+ type: Component,
1554
+ args: [{
1555
+ selector: 'ks-switch',
1556
+ standalone: true,
1557
+ template: '',
1558
+ changeDetection: ChangeDetectionStrategy.OnPush,
1559
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsSwitchComponent, multi: true }],
1560
+ }]
1561
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], labelPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelPosition", required: false }] }], ksCheckedChange: [{ type: i0.Output, args: ["ksCheckedChange"] }] } });
1562
+
1563
+ // Side-effect import: registers the `ks-textarea` tag — see
1564
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1565
+ /**
1566
+ * Angular wrapper around the `<ks-textarea>` Stencil custom element.
1567
+ *
1568
+ * Two-way binding is via `ControlValueAccessor` (see `Inputs/input/input.ts`
1569
+ * for the equivalent no-`writeValue()`-method pattern this follows —
1570
+ * `writeValue` here sets `el.value` directly). The native `ksBlur` event
1571
+ * is re-exposed as `ksBlurred` for the same reason.
1572
+ *
1573
+ * For plain (non-forms) two-way use, bind explicitly instead:
1574
+ * `[value]="v" (ksValueChange)="v = $event"`.
1575
+ *
1576
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
1577
+ */
1578
+ class KsTextareaComponent {
1579
+ el;
1580
+ onChange = () => { };
1581
+ onTouched = () => { };
1582
+ /** Textarea label */
1583
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1584
+ /** Placeholder text */
1585
+ placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
1586
+ /** Number of visible rows */
1587
+ rows = input(3, ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
1588
+ /** Maximum character count */
1589
+ maxLength = input(500, ...(ngDevMode ? [{ debugName: "maxLength" }] : /* istanbul ignore next */ []));
1590
+ /** Show character counter */
1591
+ showCounter = input(false, ...(ngDevMode ? [{ debugName: "showCounter" }] : /* istanbul ignore next */ []));
1592
+ /** Auto-resize based on content */
1593
+ autoResize = input(false, ...(ngDevMode ? [{ debugName: "autoResize" }] : /* istanbul ignore next */ []));
1594
+ /** Disabled state */
1595
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1596
+ /** Error state */
1597
+ error = input('', ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
1598
+ /** Helper/error text */
1599
+ hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
1600
+ /** Initial/controlled value. Prefer `[(ngModel)]` / `formControlName`. */
1601
+ value = input('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1602
+ /** Emits the newly-typed value. From the native `valueChange` event. */
1603
+ ksValueChange = output();
1604
+ /** Emitted on native blur. From the native `ksBlur` event. */
1605
+ ksBlurred = output();
1606
+ constructor(ref) {
1607
+ this.el = ref.nativeElement;
1608
+ effect(() => (this.el.label = this.label()));
1609
+ effect(() => (this.el.placeholder = this.placeholder()));
1610
+ effect(() => (this.el.rows = this.rows()));
1611
+ effect(() => (this.el.maxLength = this.maxLength()));
1612
+ effect(() => (this.el.showCounter = this.showCounter()));
1613
+ effect(() => (this.el.autoResize = this.autoResize()));
1614
+ effect(() => (this.el.disabled = this.disabled()));
1615
+ effect(() => (this.el.error = this.error()));
1616
+ effect(() => (this.el.hint = this.hint()));
1617
+ effect(() => (this.el.value = this.value()));
1618
+ const onNativeValueChange = (event) => {
1619
+ const detail = event.detail;
1620
+ this.ksValueChange.emit(detail);
1621
+ this.onChange(detail);
1622
+ };
1623
+ const onNativeBlur = () => {
1624
+ this.ksBlurred.emit();
1625
+ this.onTouched();
1626
+ };
1627
+ this.el.addEventListener('valueChange', onNativeValueChange);
1628
+ this.el.addEventListener('ksBlur', onNativeBlur);
1629
+ inject(DestroyRef).onDestroy(() => {
1630
+ this.el.removeEventListener('valueChange', onNativeValueChange);
1631
+ this.el.removeEventListener('ksBlur', onNativeBlur);
1632
+ });
1633
+ }
1634
+ writeValue(value) {
1635
+ this.el.value = value ?? '';
1636
+ }
1637
+ registerOnChange(fn) {
1638
+ this.onChange = fn;
1639
+ }
1640
+ registerOnTouched(fn) {
1641
+ this.onTouched = fn;
1642
+ }
1643
+ setDisabledState(isDisabled) {
1644
+ this.el.disabled = isDisabled;
1645
+ }
1646
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTextareaComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1647
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsTextareaComponent, isStandalone: true, selector: "ks-textarea", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, showCounter: { classPropertyName: "showCounter", publicName: "showCounter", isSignal: true, isRequired: false, transformFunction: null }, autoResize: { classPropertyName: "autoResize", publicName: "autoResize", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksValueChange: "ksValueChange", ksBlurred: "ksBlurred" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsTextareaComponent, multi: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1648
+ }
1649
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTextareaComponent, decorators: [{
1650
+ type: Component,
1651
+ args: [{
1652
+ selector: 'ks-textarea',
1653
+ standalone: true,
1654
+ template: '',
1655
+ changeDetection: ChangeDetectionStrategy.OnPush,
1656
+ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: KsTextareaComponent, multi: true }],
1657
+ }]
1658
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], showCounter: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCounter", required: false }] }], autoResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoResize", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ksValueChange: [{ type: i0.Output, args: ["ksValueChange"] }], ksBlurred: [{ type: i0.Output, args: ["ksBlurred"] }] } });
1659
+
1660
+ // Side-effect import: registers the `ks-theme-switch` tag — see
1661
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1662
+ /**
1663
+ * Angular wrapper around the `<ks-theme-switch>` Stencil custom element.
1664
+ *
1665
+ * Purely presentational — it drives the shared `themeService` singleton
1666
+ * (see `core/src/utils/ks-theme.util.ts`) directly and dispatches no
1667
+ * events of its own, so this wrapper has plain inputs only, no outputs
1668
+ * and no `ControlValueAccessor`.
1669
+ *
1670
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
1671
+ */
1672
+ class KsThemeSwitchComponent {
1673
+ el;
1674
+ /** When true the mode-toggle shows three options: System | Light | Dark. */
1675
+ includeSystem = input(true, ...(ngDevMode ? [{ debugName: "includeSystem" }] : /* istanbul ignore next */ []));
1676
+ /** When true the colour-palette switcher is shown. */
1677
+ includePalette = input(false, ...(ngDevMode ? [{ debugName: "includePalette" }] : /* istanbul ignore next */ []));
1678
+ /** When true only icons are shown in the mode-toggle switch. */
1679
+ onlyIcon = input(false, ...(ngDevMode ? [{ debugName: "onlyIcon" }] : /* istanbul ignore next */ []));
1680
+ /** The palette that should be active on init. */
1681
+ palette = input('ForestGreen', ...(ngDevMode ? [{ debugName: "palette" }] : /* istanbul ignore next */ []));
1682
+ /** The mode that should be active on init. */
1683
+ mode = input(ThemeMode.Light, ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
1684
+ constructor(ref) {
1685
+ this.el = ref.nativeElement;
1686
+ effect(() => (this.el.includeSystem = this.includeSystem()));
1687
+ effect(() => (this.el.includePalette = this.includePalette()));
1688
+ effect(() => (this.el.onlyIcon = this.onlyIcon()));
1689
+ effect(() => (this.el.palette = this.palette()));
1690
+ effect(() => (this.el.mode = this.mode()));
1691
+ }
1692
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsThemeSwitchComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1693
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsThemeSwitchComponent, isStandalone: true, selector: "ks-theme-switch", inputs: { includeSystem: { classPropertyName: "includeSystem", publicName: "includeSystem", isSignal: true, isRequired: false, transformFunction: null }, includePalette: { classPropertyName: "includePalette", publicName: "includePalette", isSignal: true, isRequired: false, transformFunction: null }, onlyIcon: { classPropertyName: "onlyIcon", publicName: "onlyIcon", isSignal: true, isRequired: false, transformFunction: null }, palette: { classPropertyName: "palette", publicName: "palette", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1694
+ }
1695
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsThemeSwitchComponent, decorators: [{
1696
+ type: Component,
1697
+ args: [{
1698
+ selector: 'ks-theme-switch',
1699
+ standalone: true,
1700
+ template: '',
1701
+ changeDetection: ChangeDetectionStrategy.OnPush,
1702
+ }]
1703
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { includeSystem: [{ type: i0.Input, args: [{ isSignal: true, alias: "includeSystem", required: false }] }], includePalette: [{ type: i0.Input, args: [{ isSignal: true, alias: "includePalette", required: false }] }], onlyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "onlyIcon", required: false }] }], palette: [{ type: i0.Input, args: [{ isSignal: true, alias: "palette", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }] } });
1704
+
1705
+ // Side-effect import: registers the `ks-uploader` tag — see
1706
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1707
+ /**
1708
+ * Angular wrapper around the `<ks-uploader>` Stencil custom element.
1709
+ *
1710
+ * No two-way "value" here — the Stencil source has no `writeValue()`
1711
+ * method and no single controlled prop, just a plain `filesChange`/
1712
+ * `filesRejected` event pair, so no `ControlValueAccessor` is implemented
1713
+ * (unlike the other `Inputs/*` wrappers).
1714
+ *
1715
+ * `template: ''` — no `<slot>` in the wrapped Stencil render.
1716
+ */
1717
+ class KsUploaderComponent {
1718
+ el;
1719
+ /** Accepted MIME types / extensions, e.g. "image/*,.pdf" */
1720
+ accept = input('', ...(ngDevMode ? [{ debugName: "accept" }] : /* istanbul ignore next */ []));
1721
+ /** Allow selecting multiple files */
1722
+ multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
1723
+ /** Maximum file size in bytes (0 = no limit) */
1724
+ maxSize = input(0, ...(ngDevMode ? [{ debugName: "maxSize" }] : /* istanbul ignore next */ []));
1725
+ /** Show image thumbnails for image/* files */
1726
+ previewImages = input(true, ...(ngDevMode ? [{ debugName: "previewImages" }] : /* istanbul ignore next */ []));
1727
+ /** Custom drop-zone label */
1728
+ label = input('or Drop files here', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1729
+ /** Disabled state */
1730
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1731
+ /** Emits the accepted files whenever the selection changes. From the native `filesChange` event. */
1732
+ ksFilesChange = output();
1733
+ /** Emits rejected files (wrong type / over size limit). From the native `filesRejected` event. */
1734
+ ksFilesRejected = output();
1735
+ constructor(ref) {
1736
+ this.el = ref.nativeElement;
1737
+ effect(() => (this.el.accept = this.accept()));
1738
+ effect(() => (this.el.multiple = this.multiple()));
1739
+ effect(() => (this.el.maxSize = this.maxSize()));
1740
+ effect(() => (this.el.previewImages = this.previewImages()));
1741
+ effect(() => (this.el.label = this.label()));
1742
+ effect(() => (this.el.disabled = this.disabled()));
1743
+ const onNativeFilesChange = (event) => {
1744
+ this.ksFilesChange.emit(event.detail);
1745
+ };
1746
+ const onNativeFilesRejected = (event) => {
1747
+ this.ksFilesRejected.emit(event.detail);
1748
+ };
1749
+ this.el.addEventListener('filesChange', onNativeFilesChange);
1750
+ this.el.addEventListener('filesRejected', onNativeFilesRejected);
1751
+ inject(DestroyRef).onDestroy(() => {
1752
+ this.el.removeEventListener('filesChange', onNativeFilesChange);
1753
+ this.el.removeEventListener('filesRejected', onNativeFilesRejected);
1754
+ });
1755
+ }
1756
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsUploaderComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1757
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsUploaderComponent, isStandalone: true, selector: "ks-uploader", inputs: { accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, maxSize: { classPropertyName: "maxSize", publicName: "maxSize", isSignal: true, isRequired: false, transformFunction: null }, previewImages: { classPropertyName: "previewImages", publicName: "previewImages", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksFilesChange: "ksFilesChange", ksFilesRejected: "ksFilesRejected" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1758
+ }
1759
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsUploaderComponent, decorators: [{
1760
+ type: Component,
1761
+ args: [{
1762
+ selector: 'ks-uploader',
1763
+ standalone: true,
1764
+ template: '',
1765
+ changeDetection: ChangeDetectionStrategy.OnPush,
1766
+ }]
1767
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], maxSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSize", required: false }] }], previewImages: [{ type: i0.Input, args: [{ isSignal: true, alias: "previewImages", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ksFilesChange: [{ type: i0.Output, args: ["ksFilesChange"] }], ksFilesRejected: [{ type: i0.Output, args: ["ksFilesRejected"] }] } });
1768
+
1769
+ // Side-effect import: registers the `ks-rolling-number` tag (and its
1770
+ // `ks-rolling-digit` dependency) — see `Buttons/button/button.ts` for the full
1771
+ // explanation of this pattern.
1772
+ /**
1773
+ * Angular wrapper around the `<ks-rolling-number>` Stencil custom element.
1774
+ * Purely presentational — no events, no `<slot>`, plain inputs only.
1775
+ *
1776
+ * @example
1777
+ * ```html
1778
+ * <ks-rolling-number [value]="total()" prefix="$" [decimals]="2" design="finance" />
1779
+ * ```
1780
+ */
1781
+ class KsRollingNumberComponent {
1782
+ el;
1783
+ /** Target value. Use a string or bigint for numbers beyond 2^53 */
1784
+ value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1785
+ /** Shown before the number ($, €, ₹ …) */
1786
+ prefix = input('', ...(ngDevMode ? [{ debugName: "prefix" }] : /* istanbul ignore next */ []));
1787
+ /** Shown after the number (K, M, %, " users" …). Leading spaces are preserved */
1788
+ suffix = input('', ...(ngDevMode ? [{ debugName: "suffix" }] : /* istanbul ignore next */ []));
1789
+ /** Value the reels roll from on first render */
1790
+ startValue = input(0, ...(ngDevMode ? [{ debugName: "startValue" }] : /* istanbul ignore next */ []));
1791
+ /** Fixed decimal places. Leave unset to infer from the value */
1792
+ decimals = input(null, ...(ngDevMode ? [{ debugName: "decimals" }] : /* istanbul ignore next */ []));
1793
+ /** Thousands separator. Empty string disables grouping */
1794
+ separator = input(',', ...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
1795
+ /** Decimal separator */
1796
+ decimalSeparator = input('.', ...(ngDevMode ? [{ debugName: "decimalSeparator" }] : /* istanbul ignore next */ []));
1797
+ /** Digit grouping style (`indian` gives 12,34,567) */
1798
+ grouping = input('standard', ...(ngDevMode ? [{ debugName: "grouping" }] : /* istanbul ignore next */ []));
1799
+ /** Total roll time in ms, including the cascade between digits */
1800
+ duration = input(2000, ...(ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []));
1801
+ /** Delay before rolling starts, in ms */
1802
+ delay = input(0, ...(ngDevMode ? [{ debugName: "delay" }] : /* istanbul ignore next */ []));
1803
+ /** Any CSS easing. The default decelerates gently into place */
1804
+ easing = input('cubic-bezier(0.22, 1, 0.36, 1)', ...(ngDevMode ? [{ debugName: "easing" }] : /* istanbul ignore next */ []));
1805
+ /** Gap in ms between neighbouring digits stopping. Unset = automatic */
1806
+ stagger = input(null, ...(ngDevMode ? [{ debugName: "stagger" }] : /* istanbul ignore next */ []));
1807
+ /** Extra full revolutions each reel makes on the first roll */
1808
+ spins = input(1, ...(ngDevMode ? [{ debugName: "spins" }] : /* istanbul ignore next */ []));
1809
+ /** `auto` rolls up when the value grows and down when it shrinks */
1810
+ direction = input('auto', ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
1811
+ /** Visual style */
1812
+ design = input('default', ...(ngDevMode ? [{ debugName: "design" }] : /* istanbul ignore next */ []));
1813
+ /** Size */
1814
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1815
+ /** Text colour */
1816
+ tone = input('primary', ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
1817
+ /** Set false to skip animation entirely */
1818
+ animate = input(true, ...(ngDevMode ? [{ debugName: "animate" }] : /* istanbul ignore next */ []));
1819
+ /** Accessible name. Defaults to the formatted value */
1820
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1821
+ constructor(ref) {
1822
+ this.el = ref.nativeElement;
1823
+ effect(() => (this.el.value = this.value()));
1824
+ effect(() => (this.el.prefixText = this.prefix()));
1825
+ effect(() => (this.el.suffixText = this.suffix()));
1826
+ effect(() => (this.el.startValue = this.startValue()));
1827
+ effect(() => (this.el.decimals = this.decimals()));
1828
+ effect(() => (this.el.separator = this.separator()));
1829
+ effect(() => (this.el.decimalSeparator = this.decimalSeparator()));
1830
+ effect(() => (this.el.grouping = this.grouping()));
1831
+ effect(() => (this.el.duration = this.duration()));
1832
+ effect(() => (this.el.delay = this.delay()));
1833
+ effect(() => (this.el.easing = this.easing()));
1834
+ effect(() => (this.el.stagger = this.stagger()));
1835
+ effect(() => (this.el.spins = this.spins()));
1836
+ effect(() => (this.el.direction = this.direction()));
1837
+ effect(() => (this.el.design = this.design()));
1838
+ effect(() => (this.el.size = this.size()));
1839
+ effect(() => (this.el.tone = this.tone()));
1840
+ effect(() => (this.el.animated = this.animate()));
1841
+ effect(() => (this.el.label = this.label()));
1842
+ }
1843
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsRollingNumberComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1844
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsRollingNumberComponent, isStandalone: true, selector: "ks-rolling-number", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, startValue: { classPropertyName: "startValue", publicName: "startValue", isSignal: true, isRequired: false, transformFunction: null }, decimals: { classPropertyName: "decimals", publicName: "decimals", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, decimalSeparator: { classPropertyName: "decimalSeparator", publicName: "decimalSeparator", isSignal: true, isRequired: false, transformFunction: null }, grouping: { classPropertyName: "grouping", publicName: "grouping", isSignal: true, isRequired: false, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, easing: { classPropertyName: "easing", publicName: "easing", isSignal: true, isRequired: false, transformFunction: null }, stagger: { classPropertyName: "stagger", publicName: "stagger", isSignal: true, isRequired: false, transformFunction: null }, spins: { classPropertyName: "spins", publicName: "spins", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, design: { classPropertyName: "design", publicName: "design", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, animate: { classPropertyName: "animate", publicName: "animate", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1845
+ }
1846
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsRollingNumberComponent, decorators: [{
1847
+ type: Component,
1848
+ args: [{
1849
+ selector: 'ks-rolling-number',
1850
+ standalone: true,
1851
+ template: '',
1852
+ changeDetection: ChangeDetectionStrategy.OnPush,
1853
+ }]
1854
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }], startValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "startValue", required: false }] }], decimals: [{ type: i0.Input, args: [{ isSignal: true, alias: "decimals", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }], decimalSeparator: [{ type: i0.Input, args: [{ isSignal: true, alias: "decimalSeparator", required: false }] }], grouping: [{ type: i0.Input, args: [{ isSignal: true, alias: "grouping", required: false }] }], duration: [{ type: i0.Input, args: [{ isSignal: true, alias: "duration", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], easing: [{ type: i0.Input, args: [{ isSignal: true, alias: "easing", required: false }] }], stagger: [{ type: i0.Input, args: [{ isSignal: true, alias: "stagger", required: false }] }], spins: [{ type: i0.Input, args: [{ isSignal: true, alias: "spins", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], design: [{ type: i0.Input, args: [{ isSignal: true, alias: "design", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], animate: [{ type: i0.Input, args: [{ isSignal: true, alias: "animate", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
1855
+
1856
+ // Side-effect import: registers the `ks-avatar` tag — see
1857
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1858
+ /**
1859
+ * Angular wrapper around the `<ks-avatar>` Stencil custom element.
1860
+ *
1861
+ * Purely presentational — no events, no `<slot>` in the wrapped Stencil
1862
+ * render, plain inputs only (same shape as `Inputs/theme-switch/theme-switch.ts`).
1863
+ */
1864
+ class KsAvatarComponent {
1865
+ el;
1866
+ /** Image URL — takes priority over initials */
1867
+ src = input('', ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
1868
+ /** Alt text for the image */
1869
+ alt = input('', ...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
1870
+ /** Initials shown when no image (e.g. "KS") */
1871
+ initials = input('', ...(ngDevMode ? [{ debugName: "initials" }] : /* istanbul ignore next */ []));
1872
+ /** Icon class shown when neither src nor initials */
1873
+ icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
1874
+ /** Size */
1875
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1876
+ /** Colour variant — used when showing initials or icon */
1877
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1878
+ /** Circular (default) or rounded-square */
1879
+ square = input(false, ...(ngDevMode ? [{ debugName: "square" }] : /* istanbul ignore next */ []));
1880
+ constructor(ref) {
1881
+ this.el = ref.nativeElement;
1882
+ effect(() => (this.el.src = this.src()));
1883
+ effect(() => (this.el.alt = this.alt()));
1884
+ effect(() => (this.el.initials = this.initials()));
1885
+ effect(() => (this.el.icon = this.icon()));
1886
+ effect(() => (this.el.size = this.size()));
1887
+ effect(() => (this.el.variant = this.variant()));
1888
+ effect(() => (this.el.square = this.square()));
1889
+ }
1890
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsAvatarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1891
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsAvatarComponent, isStandalone: true, selector: "ks-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, initials: { classPropertyName: "initials", publicName: "initials", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, square: { classPropertyName: "square", publicName: "square", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1892
+ }
1893
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsAvatarComponent, decorators: [{
1894
+ type: Component,
1895
+ args: [{
1896
+ selector: 'ks-avatar',
1897
+ standalone: true,
1898
+ template: '',
1899
+ changeDetection: ChangeDetectionStrategy.OnPush,
1900
+ }]
1901
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], initials: [{ type: i0.Input, args: [{ isSignal: true, alias: "initials", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], square: [{ type: i0.Input, args: [{ isSignal: true, alias: "square", required: false }] }] } });
1902
+
1903
+ // Side-effect import: registers the `ks-card` tag — see
1904
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1905
+ /**
1906
+ * Angular wrapper around the `<ks-card>` Stencil custom element.
1907
+ *
1908
+ * ## Slots
1909
+ * Unlike the Buttons/Calendars/Dropdowns wrappers, `<ks-card>` renders
1910
+ * real, consumer-facing `<slot name="header" />`, `<slot />` (default) and
1911
+ * `<slot name="footer" />` in its scoped (non-shadow) Stencil `render()`.
1912
+ * `template: '<ng-content></ng-content>'` (a single unfiltered pass-through,
1913
+ * not per-slot `<ng-content select="...">`) projects ALL of this Angular
1914
+ * component's content as real light-DOM children of the `<ks-card>` host
1915
+ * node; Stencil's own scoped-slot relocation logic (see `shadow: false,
1916
+ * scoped: true` on the Stencil class) then places each child into the
1917
+ * right native `<slot>` based on that child's own `slot="header"` /
1918
+ * `slot="footer"` attribute — same as plain HTML, nothing Angular-specific
1919
+ * needed beyond forwarding the projected content through untouched.
1920
+ * Usage: `<ks-card><ks-header slot="header">…</ks-header>Body<ks-footer slot="footer">…</ks-footer></ks-card>`.
1921
+ */
1922
+ class KsCardComponent {
1923
+ el;
1924
+ /** Card title */
1925
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1926
+ /** Card title (Angular input name was `title`; aliased to avoid clashing with the native `title` attribute/tooltip). */
1927
+ cardTitle = input('', ...(ngDevMode ? [{ debugName: "cardTitle" }] : /* istanbul ignore next */ []));
1928
+ /** Subtitle / subheading */
1929
+ subtitle = input('', ...(ngDevMode ? [{ debugName: "subtitle" }] : /* istanbul ignore next */ []));
1930
+ /** URL for header image */
1931
+ imageUrl = input('', ...(ngDevMode ? [{ debugName: "imageUrl" }] : /* istanbul ignore next */ []));
1932
+ /** Alt text for image */
1933
+ imageAlt = input('', ...(ngDevMode ? [{ debugName: "imageAlt" }] : /* istanbul ignore next */ []));
1934
+ /** SVG icon class */
1935
+ iconClass = input('', ...(ngDevMode ? [{ debugName: "iconClass" }] : /* istanbul ignore next */ []));
1936
+ /** Card visual variant */
1937
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1938
+ /** Emits when clicked (only when clickable). From the native `cardClick` event. */
1939
+ ksCardClick = output();
1940
+ constructor(ref) {
1941
+ this.el = ref.nativeElement;
1942
+ effect(() => (this.el.label = this.label()));
1943
+ effect(() => (this.el.cardTitle = this.cardTitle()));
1944
+ effect(() => (this.el.subtitle = this.subtitle()));
1945
+ effect(() => (this.el.imageUrl = this.imageUrl()));
1946
+ effect(() => (this.el.imageAlt = this.imageAlt()));
1947
+ effect(() => (this.el.iconClass = this.iconClass()));
1948
+ effect(() => (this.el.variant = this.variant()));
1949
+ const onNativeCardClick = (event) => {
1950
+ this.ksCardClick.emit(event.detail);
1951
+ };
1952
+ this.el.addEventListener('cardClick', onNativeCardClick);
1953
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('cardClick', onNativeCardClick));
1954
+ }
1955
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsCardComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1956
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsCardComponent, isStandalone: true, selector: "ks-card", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, cardTitle: { classPropertyName: "cardTitle", publicName: "cardTitle", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, imageUrl: { classPropertyName: "imageUrl", publicName: "imageUrl", isSignal: true, isRequired: false, transformFunction: null }, imageAlt: { classPropertyName: "imageAlt", publicName: "imageAlt", isSignal: true, isRequired: false, transformFunction: null }, iconClass: { classPropertyName: "iconClass", publicName: "iconClass", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksCardClick: "ksCardClick" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1957
+ }
1958
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsCardComponent, decorators: [{
1959
+ type: Component,
1960
+ args: [{
1961
+ selector: 'ks-card',
1962
+ standalone: true,
1963
+ template: '<ng-content></ng-content>',
1964
+ changeDetection: ChangeDetectionStrategy.OnPush,
1965
+ }]
1966
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], cardTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardTitle", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], imageUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageUrl", required: false }] }], imageAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageAlt", required: false }] }], iconClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconClass", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], ksCardClick: [{ type: i0.Output, args: ["ksCardClick"] }] } });
1967
+
1968
+ // Side-effect import: registers the `ks-code-view` tag — see
1969
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
1970
+ /**
1971
+ * Angular wrapper around the `<ks-code-view>` Stencil custom element.
1972
+ * Purely presentational — no events, no `<slot>` in the wrapped Stencil
1973
+ * render, plain inputs only.
1974
+ */
1975
+ class KsCodeViewComponent {
1976
+ el;
1977
+ /** The source code string to display */
1978
+ code = input('', ...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
1979
+ /** Language hint shown in the header badge */
1980
+ language = input('html', ...(ngDevMode ? [{ debugName: "language" }] : /* istanbul ignore next */ []));
1981
+ /** Optional title shown in the header */
1982
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1983
+ /** Max visible height before scroll kicks in (CSS value, e.g. '20rem') */
1984
+ maxHeight = input('24rem', ...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
1985
+ /** Show the header bar with language badge & copy button */
1986
+ showHeader = input(true, ...(ngDevMode ? [{ debugName: "showHeader" }] : /* istanbul ignore next */ []));
1987
+ /** Whether the code block is currently collapsed */
1988
+ collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
1989
+ /** Whether the code block is to show and hide buttons */
1990
+ actionButtonConfig = input({ expand: true, code: true }, ...(ngDevMode ? [{ debugName: "actionButtonConfig" }] : /* istanbul ignore next */ []));
1991
+ constructor(ref) {
1992
+ this.el = ref.nativeElement;
1993
+ effect(() => (this.el.code = this.code()));
1994
+ effect(() => (this.el.language = this.language()));
1995
+ effect(() => (this.el.label = this.label()));
1996
+ effect(() => (this.el.maxHeight = this.maxHeight()));
1997
+ effect(() => (this.el.showHeader = this.showHeader()));
1998
+ effect(() => (this.el.collapsed = this.collapsed()));
1999
+ effect(() => (this.el.actionButtonConfig = this.actionButtonConfig()));
2000
+ }
2001
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsCodeViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2002
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsCodeViewComponent, isStandalone: true, selector: "ks-code-view", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, actionButtonConfig: { classPropertyName: "actionButtonConfig", publicName: "actionButtonConfig", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2003
+ }
2004
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsCodeViewComponent, decorators: [{
2005
+ type: Component,
2006
+ args: [{
2007
+ selector: 'ks-code-view',
2008
+ standalone: true,
2009
+ template: '',
2010
+ changeDetection: ChangeDetectionStrategy.OnPush,
2011
+ }]
2012
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: false }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], showHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHeader", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], actionButtonConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionButtonConfig", required: false }] }] } });
2013
+
2014
+ // Side-effect import: registers the `ks-dialog` tag — see
2015
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2016
+ /**
2017
+ * Angular wrapper around the `<ks-dialog>` Stencil custom element.
2018
+ *
2019
+ * `open` is a plain input, not `ControlValueAccessor` — a dialog's open
2020
+ * state isn't form data. For the same reason described throughout this
2021
+ * repo, the output can't be named `openChange` (it would collide with the
2022
+ * native `openChange`-style close event — see below), so bind explicitly:
2023
+ * `[open]="isOpen" (ksCloseDialog)="isOpen = false"`.
2024
+ *
2025
+ * ## Slots
2026
+ * `<ks-dialog>` renders real, consumer-facing `<slot />` (default) and
2027
+ * `<slot name="footer" />`. Same single unfiltered `<ng-content>`
2028
+ * pass-through as `Layout/card/card.ts` — see that file's doc comment for
2029
+ * the full explanation of how native `slot="footer"` attributes on
2030
+ * projected children route into the right Stencil `<slot>`.
2031
+ */
2032
+ class KsDialogComponent {
2033
+ el;
2034
+ /** Whether the dialog is open */
2035
+ open = input(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
2036
+ /** Dialog title */
2037
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
2038
+ /** Hide the built-in close (✕) button */
2039
+ hideClose = input(false, ...(ngDevMode ? [{ debugName: "hideClose" }] : /* istanbul ignore next */ []));
2040
+ /** Prevent closing by clicking the backdrop */
2041
+ persistent = input(false, ...(ngDevMode ? [{ debugName: "persistent" }] : /* istanbul ignore next */ []));
2042
+ /** Panel size */
2043
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2044
+ /** Target element id (without #), or '' to use `<body>`. When set, the overlay covers only that element and the dialog is centred inside it. */
2045
+ target = input('', ...(ngDevMode ? [{ debugName: "target" }] : /* istanbul ignore next */ []));
2046
+ /** Emits when the dialog requests close. From the native `closeDialog` event. */
2047
+ ksCloseDialog = output();
2048
+ constructor(ref) {
2049
+ this.el = ref.nativeElement;
2050
+ effect(() => (this.el.open = this.open()));
2051
+ effect(() => (this.el.label = this.label()));
2052
+ effect(() => (this.el.hideClose = this.hideClose()));
2053
+ effect(() => (this.el.persistent = this.persistent()));
2054
+ effect(() => (this.el.size = this.size()));
2055
+ effect(() => (this.el.target = this.target()));
2056
+ const onNativeCloseDialog = () => this.ksCloseDialog.emit();
2057
+ this.el.addEventListener('closeDialog', onNativeCloseDialog);
2058
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('closeDialog', onNativeCloseDialog));
2059
+ }
2060
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsDialogComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2061
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsDialogComponent, isStandalone: true, selector: "ks-dialog", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, hideClose: { classPropertyName: "hideClose", publicName: "hideClose", isSignal: true, isRequired: false, transformFunction: null }, persistent: { classPropertyName: "persistent", publicName: "persistent", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksCloseDialog: "ksCloseDialog" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2062
+ }
2063
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsDialogComponent, decorators: [{
2064
+ type: Component,
2065
+ args: [{
2066
+ selector: 'ks-dialog',
2067
+ standalone: true,
2068
+ template: '<ng-content></ng-content>',
2069
+ changeDetection: ChangeDetectionStrategy.OnPush,
2070
+ }]
2071
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], hideClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideClose", required: false }] }], persistent: [{ type: i0.Input, args: [{ isSignal: true, alias: "persistent", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }], ksCloseDialog: [{ type: i0.Output, args: ["ksCloseDialog"] }] } });
2072
+
2073
+ // Side-effect import: registers the `ks-not-found` tag — see
2074
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2075
+ /**
2076
+ * Angular wrapper around the `<ks-not-found>` Stencil custom element.
2077
+ *
2078
+ * `<ks-not-found>` renders a real, consumer-facing default `<slot />`.
2079
+ * Same single unfiltered `<ng-content>` pass-through as
2080
+ * `Layout/card/card.ts` — see that file's doc comment for the full
2081
+ * explanation of how projected content routes into the Stencil `<slot>`.
2082
+ */
2083
+ class KsNotFoundComponent {
2084
+ el;
2085
+ /** Label shown on the redirect button (default: "Go to Home") */
2086
+ buttonLabel = input('Go to Home', ...(ngDevMode ? [{ debugName: "buttonLabel" }] : /* istanbul ignore next */ []));
2087
+ /** href the button and auto-redirect navigate to (default: "./") */
2088
+ homeHref = input('./', ...(ngDevMode ? [{ debugName: "homeHref" }] : /* istanbul ignore next */ []));
2089
+ /** Seconds before auto-redirect fires. Set to `0` to disable the countdown. */
2090
+ countdown = input(30, ...(ngDevMode ? [{ debugName: "countdown" }] : /* istanbul ignore next */ []));
2091
+ showActionButtons = input(true, ...(ngDevMode ? [{ debugName: "showActionButtons" }] : /* istanbul ignore next */ []));
2092
+ /** Custom heading (default: "404") */
2093
+ code = input('404', ...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
2094
+ /** Custom sub-heading (default: "Page not found") */
2095
+ message = input('Page not found', ...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
2096
+ /** Custom description below the heading */
2097
+ description = input("The page you're looking for doesn't exist or has been moved.", ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
2098
+ /** Emitted just before the auto-redirect navigates away. From the native `redirecting` event. */
2099
+ ksRedirecting = output();
2100
+ constructor(ref) {
2101
+ this.el = ref.nativeElement;
2102
+ effect(() => (this.el.buttonLabel = this.buttonLabel()));
2103
+ effect(() => (this.el.homeHref = this.homeHref()));
2104
+ effect(() => (this.el.countdown = this.countdown()));
2105
+ effect(() => (this.el.showActionButtons = this.showActionButtons()));
2106
+ effect(() => (this.el.code = this.code()));
2107
+ effect(() => (this.el.message = this.message()));
2108
+ effect(() => (this.el.description = this.description()));
2109
+ const onNativeRedirecting = () => this.ksRedirecting.emit();
2110
+ this.el.addEventListener('redirecting', onNativeRedirecting);
2111
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('redirecting', onNativeRedirecting));
2112
+ }
2113
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsNotFoundComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2114
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsNotFoundComponent, isStandalone: true, selector: "ks-not-found", inputs: { buttonLabel: { classPropertyName: "buttonLabel", publicName: "buttonLabel", isSignal: true, isRequired: false, transformFunction: null }, homeHref: { classPropertyName: "homeHref", publicName: "homeHref", isSignal: true, isRequired: false, transformFunction: null }, countdown: { classPropertyName: "countdown", publicName: "countdown", isSignal: true, isRequired: false, transformFunction: null }, showActionButtons: { classPropertyName: "showActionButtons", publicName: "showActionButtons", isSignal: true, isRequired: false, transformFunction: null }, code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksRedirecting: "ksRedirecting" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2115
+ }
2116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsNotFoundComponent, decorators: [{
2117
+ type: Component,
2118
+ args: [{
2119
+ selector: 'ks-not-found',
2120
+ standalone: true,
2121
+ template: '<ng-content></ng-content>',
2122
+ changeDetection: ChangeDetectionStrategy.OnPush,
2123
+ }]
2124
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { buttonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonLabel", required: false }] }], homeHref: [{ type: i0.Input, args: [{ isSignal: true, alias: "homeHref", required: false }] }], countdown: [{ type: i0.Input, args: [{ isSignal: true, alias: "countdown", required: false }] }], showActionButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "showActionButtons", required: false }] }], code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], ksRedirecting: [{ type: i0.Output, args: ["ksRedirecting"] }] } });
2125
+
2126
+ // Side-effect import: registers the `ks-sidebar` tag — see
2127
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2128
+ /**
2129
+ * Angular wrapper around the `<ks-sidebar>` Stencil custom element.
2130
+ *
2131
+ * `open` is a plain input/output pair, not `ControlValueAccessor` — panel
2132
+ * open state isn't form data. The native event is literally `openChange`,
2133
+ * so (per the double-fire rule in `Buttons/button.ts`) the Angular output
2134
+ * can't reuse that name; bind explicitly instead:
2135
+ * `[open]="isOpen" (ksOpenChange)="isOpen = $event"`.
2136
+ *
2137
+ * `<ks-sidebar>`'s own `@Method()`s (`openPanel`/`close`/`toggle`) are
2138
+ * exposed here as real passthrough methods — grab the component instance
2139
+ * with `@ViewChild(KsSidebarComponent)` and call them directly.
2140
+ *
2141
+ * ## Slots
2142
+ * Renders real `<slot name="header" />`, `<slot />` (default) and
2143
+ * `<slot name="footer" />`. Same single unfiltered `<ng-content>`
2144
+ * pass-through as `Layout/card/card.ts`.
2145
+ */
2146
+ class KsSidebarComponent {
2147
+ el;
2148
+ /** Which side the panel appears on */
2149
+ position = input('left', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
2150
+ /** Behaviour type */
2151
+ type = input('over', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
2152
+ /** Initial/controlled open state. Bind explicitly: `[open]="isOpen" (ksOpenChange)="isOpen = $event"`. */
2153
+ open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
2154
+ /** Width of the sidebar panel */
2155
+ width = input('18rem', ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
2156
+ /** Target element id (without #) or '' to use the page. */
2157
+ target = input('', ...(ngDevMode ? [{ debugName: "target" }] : /* istanbul ignore next */ []));
2158
+ /** Fires whenever `open` changes. From the native `openChange` event. */
2159
+ ksOpenChange = output();
2160
+ constructor(ref) {
2161
+ this.el = ref.nativeElement;
2162
+ effect(() => (this.el.position = this.position()));
2163
+ effect(() => (this.el.type = this.type()));
2164
+ effect(() => (this.el.open = this.open()));
2165
+ effect(() => (this.el.width = this.width()));
2166
+ effect(() => (this.el.target = this.target()));
2167
+ const onNativeOpenChange = (event) => {
2168
+ this.ksOpenChange.emit(event.detail);
2169
+ };
2170
+ this.el.addEventListener('openChange', onNativeOpenChange);
2171
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('openChange', onNativeOpenChange));
2172
+ }
2173
+ /** Passthrough to `<ks-sidebar>`'s own `@Method() openPanel()`. */
2174
+ openPanel() {
2175
+ return this.el.openPanel();
2176
+ }
2177
+ /** Passthrough to `<ks-sidebar>`'s own `@Method() close()`. */
2178
+ close() {
2179
+ return this.el.close();
2180
+ }
2181
+ /** Passthrough to `<ks-sidebar>`'s own `@Method() toggle()`. */
2182
+ toggle() {
2183
+ return this.el.toggle();
2184
+ }
2185
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSidebarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2186
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsSidebarComponent, isStandalone: true, selector: "ks-sidebar", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", ksOpenChange: "ksOpenChange" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2187
+ }
2188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSidebarComponent, decorators: [{
2189
+ type: Component,
2190
+ args: [{
2191
+ selector: 'ks-sidebar',
2192
+ standalone: true,
2193
+ template: '<ng-content></ng-content>',
2194
+ changeDetection: ChangeDetectionStrategy.OnPush,
2195
+ }]
2196
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }], ksOpenChange: [{ type: i0.Output, args: ["ksOpenChange"] }] } });
2197
+
2198
+ // Side-effect import: registers the `ks-table` tag — see
2199
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2200
+ /**
2201
+ * Angular wrapper around the `<ks-table>` Stencil custom element.
2202
+ * No `<slot>` in the wrapped Stencil render — data-driven only.
2203
+ */
2204
+ class KsTableComponent {
2205
+ el;
2206
+ /** Array of objects to render as table rows */
2207
+ data = input([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
2208
+ /** Optional explicit column order; defaults to keys of the first row */
2209
+ columns = input([], ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
2210
+ /** Optional custom column header labels: { key: 'Display Label' } */
2211
+ columnLabels = input({}, ...(ngDevMode ? [{ debugName: "columnLabels" }] : /* istanbul ignore next */ []));
2212
+ /** Visual variant */
2213
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2214
+ /** Row size */
2215
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2216
+ /** Show a caption / title above the table */
2217
+ caption = input('', ...(ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []));
2218
+ /** Make the table horizontally scrollable on overflow */
2219
+ scrollable = input(true, ...(ngDevMode ? [{ debugName: "scrollable" }] : /* istanbul ignore next */ []));
2220
+ /** Highlight row on hover */
2221
+ hoverable = input(true, ...(ngDevMode ? [{ debugName: "hoverable" }] : /* istanbul ignore next */ []));
2222
+ /** Emits the clicked row's data. From the native `rowClick` event. */
2223
+ ksRowClick = output();
2224
+ constructor(ref) {
2225
+ this.el = ref.nativeElement;
2226
+ effect(() => (this.el.data = this.data()));
2227
+ effect(() => (this.el.columns = this.columns()));
2228
+ effect(() => (this.el.columnLabels = this.columnLabels()));
2229
+ effect(() => (this.el.variant = this.variant()));
2230
+ effect(() => (this.el.size = this.size()));
2231
+ effect(() => (this.el.caption = this.caption()));
2232
+ effect(() => (this.el.scrollable = this.scrollable()));
2233
+ effect(() => (this.el.hoverable = this.hoverable()));
2234
+ const onNativeRowClick = (event) => {
2235
+ this.ksRowClick.emit(event.detail);
2236
+ };
2237
+ this.el.addEventListener('rowClick', onNativeRowClick);
2238
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('rowClick', onNativeRowClick));
2239
+ }
2240
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTableComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2241
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsTableComponent, isStandalone: true, selector: "ks-table", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, columnLabels: { classPropertyName: "columnLabels", publicName: "columnLabels", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, hoverable: { classPropertyName: "hoverable", publicName: "hoverable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksRowClick: "ksRowClick" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2242
+ }
2243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTableComponent, decorators: [{
2244
+ type: Component,
2245
+ args: [{
2246
+ selector: 'ks-table',
2247
+ standalone: true,
2248
+ template: '',
2249
+ changeDetection: ChangeDetectionStrategy.OnPush,
2250
+ }]
2251
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], columnLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnLabels", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], caption: [{ type: i0.Input, args: [{ isSignal: true, alias: "caption", required: false }] }], scrollable: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollable", required: false }] }], hoverable: [{ type: i0.Input, args: [{ isSignal: true, alias: "hoverable", required: false }] }], ksRowClick: [{ type: i0.Output, args: ["ksRowClick"] }] } });
2252
+
2253
+ // Side-effect import: registers the `ks-tooltip` tag — see
2254
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2255
+ /**
2256
+ * Angular wrapper around the `<ks-tooltip>` Stencil custom element.
2257
+ *
2258
+ * `<ks-tooltip>` renders a real, consumer-facing default `<slot />` for
2259
+ * the element the tooltip is attached to. Same single unfiltered
2260
+ * `<ng-content>` pass-through as `Layout/card/card.ts` — wrap the
2261
+ * trigger element as `<ks-tooltip text="Hi"><button>Hover me</button></ks-tooltip>`.
2262
+ */
2263
+ class KsTooltipComponent {
2264
+ el;
2265
+ /** Tooltip text */
2266
+ text = input('', ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
2267
+ /** Preferred placement */
2268
+ position = input('top', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
2269
+ /** Show tooltip on demand (true = always visible) — leave false for hover behaviour */
2270
+ visible = input(false, ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
2271
+ constructor(ref) {
2272
+ this.el = ref.nativeElement;
2273
+ effect(() => (this.el.text = this.text()));
2274
+ effect(() => (this.el.position = this.position()));
2275
+ effect(() => (this.el.visible = this.visible()));
2276
+ }
2277
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTooltipComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2278
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsTooltipComponent, isStandalone: true, selector: "ks-tooltip", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2279
+ }
2280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTooltipComponent, decorators: [{
2281
+ type: Component,
2282
+ args: [{
2283
+ selector: 'ks-tooltip',
2284
+ standalone: true,
2285
+ template: '<ng-content></ng-content>',
2286
+ changeDetection: ChangeDetectionStrategy.OnPush,
2287
+ }]
2288
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }] } });
2289
+
2290
+ // Side-effect import: registers the `ks-accordion` tag — see
2291
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2292
+ /**
2293
+ * Angular wrapper around the `<ks-accordion>` Stencil custom element.
2294
+ *
2295
+ * ## Panel content — `ksPanel`, NOT a native `slot` attribute
2296
+ * The Stencil source maps each light-DOM child carrying a `ksPanel="key"`
2297
+ * attribute to a matching named `<slot>` internally (see
2298
+ * `core/src/utils/ks-slots.util.ts`'s `getKsPanelMap()`) — it does NOT use
2299
+ * the browser-native `slot="..."` attribute consumers would use for
2300
+ * `Layout/card/card.ts`-style components. `template: '<ng-content></ng-content>'`
2301
+ * still applies the same way: it's a single, unfiltered pass-through of
2302
+ * whatever this Angular component's own template projects, as real
2303
+ * light-DOM children of the `<ks-accordion>` host — the wrapper does no
2304
+ * filtering itself, it just needs to exist so the projected content
2305
+ * becomes real children for Stencil's `getKsPanelMap()` scan to find.
2306
+ * Usage:
2307
+ * `<ks-accordion [items]="items">
2308
+ * <div ksPanel="profile">Profile body…</div>
2309
+ * <div ksPanel="settings">Settings body…</div>
2310
+ * </ks-accordion>`
2311
+ */
2312
+ class KsAccordionComponent {
2313
+ el;
2314
+ /** List of accordion panel definitions */
2315
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
2316
+ /** Allow multiple panels open simultaneously */
2317
+ multi = input(false, ...(ngDevMode ? [{ debugName: "multi" }] : /* istanbul ignore next */ []));
2318
+ /** Keys that should be open by default */
2319
+ openKeys = input([], ...(ngDevMode ? [{ debugName: "openKeys" }] : /* istanbul ignore next */ []));
2320
+ /** Emits the key that was toggled. From the native `toggled` event. */
2321
+ ksToggled = output();
2322
+ constructor(ref) {
2323
+ this.el = ref.nativeElement;
2324
+ effect(() => (this.el.items = this.items()));
2325
+ effect(() => (this.el.multi = this.multi()));
2326
+ effect(() => (this.el.openKeys = this.openKeys()));
2327
+ const onNativeToggled = (event) => {
2328
+ this.ksToggled.emit(event.detail);
2329
+ };
2330
+ this.el.addEventListener('toggled', onNativeToggled);
2331
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('toggled', onNativeToggled));
2332
+ }
2333
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsAccordionComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2334
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsAccordionComponent, isStandalone: true, selector: "ks-accordion", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null }, openKeys: { classPropertyName: "openKeys", publicName: "openKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksToggled: "ksToggled" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2335
+ }
2336
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsAccordionComponent, decorators: [{
2337
+ type: Component,
2338
+ args: [{
2339
+ selector: 'ks-accordion',
2340
+ standalone: true,
2341
+ template: '<ng-content></ng-content>',
2342
+ changeDetection: ChangeDetectionStrategy.OnPush,
2343
+ }]
2344
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }], openKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "openKeys", required: false }] }], ksToggled: [{ type: i0.Output, args: ["ksToggled"] }] } });
2345
+
2346
+ // Side-effect import: registers the `ks-breadcrumb` tag — see
2347
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2348
+ /**
2349
+ * Angular wrapper around the `<ks-breadcrumb>` Stencil custom element.
2350
+ * Purely presentational — no events, no `<slot>` in the wrapped Stencil
2351
+ * render, plain inputs only.
2352
+ */
2353
+ class KsBreadcrumbComponent {
2354
+ el;
2355
+ /** Ordered list of breadcrumb items */
2356
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
2357
+ /** Separator character or symbol */
2358
+ separator = input('/', ...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
2359
+ /** Size */
2360
+ size = input('lg', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2361
+ constructor(ref) {
2362
+ this.el = ref.nativeElement;
2363
+ effect(() => (this.el.items = this.items()));
2364
+ effect(() => (this.el.separator = this.separator()));
2365
+ effect(() => (this.el.size = this.size()));
2366
+ }
2367
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsBreadcrumbComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2368
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsBreadcrumbComponent, isStandalone: true, selector: "ks-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2369
+ }
2370
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsBreadcrumbComponent, decorators: [{
2371
+ type: Component,
2372
+ args: [{
2373
+ selector: 'ks-breadcrumb',
2374
+ standalone: true,
2375
+ template: '',
2376
+ changeDetection: ChangeDetectionStrategy.OnPush,
2377
+ }]
2378
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
2379
+
2380
+ // Side-effect import: registers the `ks-carousel` tag — see
2381
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2382
+ /**
2383
+ * Angular wrapper around the `<ks-carousel>` Stencil custom element.
2384
+ * No `<slot>` in the wrapped Stencil render — data-driven only.
2385
+ */
2386
+ class KsCarouselComponent {
2387
+ el;
2388
+ /** Slides to display */
2389
+ slides = input([], ...(ngDevMode ? [{ debugName: "slides" }] : /* istanbul ignore next */ []));
2390
+ /** Auto-play interval in ms (0 = disabled) */
2391
+ autoPlay = input(0, ...(ngDevMode ? [{ debugName: "autoPlay" }] : /* istanbul ignore next */ []));
2392
+ /** Show prev/next arrow controls */
2393
+ showControls = input(true, ...(ngDevMode ? [{ debugName: "showControls" }] : /* istanbul ignore next */ []));
2394
+ /** Show dot indicators */
2395
+ showDots = input(true, ...(ngDevMode ? [{ debugName: "showDots" }] : /* istanbul ignore next */ []));
2396
+ /** Emits the current slide index on change. From the native `slideChange` event. */
2397
+ ksSlideChange = output();
2398
+ constructor(ref) {
2399
+ this.el = ref.nativeElement;
2400
+ effect(() => (this.el.slides = this.slides()));
2401
+ effect(() => (this.el.autoPlay = this.autoPlay()));
2402
+ effect(() => (this.el.showControls = this.showControls()));
2403
+ effect(() => (this.el.showDots = this.showDots()));
2404
+ const onNativeSlideChange = (event) => {
2405
+ this.ksSlideChange.emit(event.detail);
2406
+ };
2407
+ this.el.addEventListener('slideChange', onNativeSlideChange);
2408
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('slideChange', onNativeSlideChange));
2409
+ }
2410
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsCarouselComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2411
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsCarouselComponent, isStandalone: true, selector: "ks-carousel", inputs: { slides: { classPropertyName: "slides", publicName: "slides", isSignal: true, isRequired: false, transformFunction: null }, autoPlay: { classPropertyName: "autoPlay", publicName: "autoPlay", isSignal: true, isRequired: false, transformFunction: null }, showControls: { classPropertyName: "showControls", publicName: "showControls", isSignal: true, isRequired: false, transformFunction: null }, showDots: { classPropertyName: "showDots", publicName: "showDots", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksSlideChange: "ksSlideChange" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2412
+ }
2413
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsCarouselComponent, decorators: [{
2414
+ type: Component,
2415
+ args: [{
2416
+ selector: 'ks-carousel',
2417
+ standalone: true,
2418
+ template: '',
2419
+ changeDetection: ChangeDetectionStrategy.OnPush,
2420
+ }]
2421
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { slides: [{ type: i0.Input, args: [{ isSignal: true, alias: "slides", required: false }] }], autoPlay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPlay", required: false }] }], showControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "showControls", required: false }] }], showDots: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDots", required: false }] }], ksSlideChange: [{ type: i0.Output, args: ["ksSlideChange"] }] } });
2422
+
2423
+ // Side-effect import: registers the `ks-context-menu` tag — see
2424
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2425
+ /**
2426
+ * Angular wrapper around the `<ks-context-menu>` Stencil custom element.
2427
+ *
2428
+ * `<ks-context-menu>`'s own `@Method()`s (`open(pos)`/`close()`) are
2429
+ * exposed here as real passthrough methods — grab the component instance
2430
+ * with `@ViewChild(KsContextMenuComponent)` and call them directly, e.g.
2431
+ * `onContextMenu(e: MouseEvent) { menu.open({ x: e.clientX, y: e.clientY }); }`.
2432
+ *
2433
+ * No `<slot>` in the wrapped Stencil render — data-driven only.
2434
+ */
2435
+ class KsContextMenuComponent {
2436
+ el;
2437
+ /** Menu items */
2438
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
2439
+ /** Emits the clicked item key. From the native `itemClicked` event. */
2440
+ ksItemClicked = output();
2441
+ constructor(ref) {
2442
+ this.el = ref.nativeElement;
2443
+ effect(() => (this.el.items = this.items()));
2444
+ const onNativeItemClicked = (event) => {
2445
+ this.ksItemClicked.emit(event.detail);
2446
+ };
2447
+ this.el.addEventListener('itemClicked', onNativeItemClicked);
2448
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('itemClicked', onNativeItemClicked));
2449
+ }
2450
+ /** Passthrough to `<ks-context-menu>`'s own `@Method() open(pos)`. */
2451
+ open(pos) {
2452
+ return this.el.open(pos);
2453
+ }
2454
+ /** Passthrough to `<ks-context-menu>`'s own `@Method() close()`. */
2455
+ close() {
2456
+ return this.el.close();
2457
+ }
2458
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsContextMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2459
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsContextMenuComponent, isStandalone: true, selector: "ks-context-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksItemClicked: "ksItemClicked" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2460
+ }
2461
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsContextMenuComponent, decorators: [{
2462
+ type: Component,
2463
+ args: [{
2464
+ selector: 'ks-context-menu',
2465
+ standalone: true,
2466
+ template: '',
2467
+ changeDetection: ChangeDetectionStrategy.OnPush,
2468
+ }]
2469
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], ksItemClicked: [{ type: i0.Output, args: ["ksItemClicked"] }] } });
2470
+
2471
+ // Side-effect import: registers the `ks-nav-bar` tag — see
2472
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2473
+ /**
2474
+ * Angular wrapper around the `<ks-nav-bar>` Stencil custom element.
2475
+ * Renders a real, consumer-facing default `<slot />` — same single
2476
+ * unfiltered `<ng-content>` pass-through as `Layout/card/card.ts`.
2477
+ */
2478
+ class KsNavBarComponent {
2479
+ el;
2480
+ /** All nav items with their section assignment */
2481
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
2482
+ /** Expansion mode */
2483
+ mode = input('iconOnly', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
2484
+ /** Width of the icon-only rail */
2485
+ iconWidth = input('3.5rem', ...(ngDevMode ? [{ debugName: "iconWidth" }] : /* istanbul ignore next */ []));
2486
+ /** Width of the expanded label panel */
2487
+ expandedWidth = input('13rem', ...(ngDevMode ? [{ debugName: "expandedWidth" }] : /* istanbul ignore next */ []));
2488
+ constructor(ref) {
2489
+ this.el = ref.nativeElement;
2490
+ effect(() => (this.el.items = this.items()));
2491
+ effect(() => (this.el.mode = this.mode()));
2492
+ effect(() => (this.el.iconWidth = this.iconWidth()));
2493
+ effect(() => (this.el.expandedWidth = this.expandedWidth()));
2494
+ }
2495
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsNavBarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2496
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsNavBarComponent, isStandalone: true, selector: "ks-nav-bar", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, iconWidth: { classPropertyName: "iconWidth", publicName: "iconWidth", isSignal: true, isRequired: false, transformFunction: null }, expandedWidth: { classPropertyName: "expandedWidth", publicName: "expandedWidth", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2497
+ }
2498
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsNavBarComponent, decorators: [{
2499
+ type: Component,
2500
+ args: [{
2501
+ selector: 'ks-nav-bar',
2502
+ standalone: true,
2503
+ template: '<ng-content></ng-content>',
2504
+ changeDetection: ChangeDetectionStrategy.OnPush,
2505
+ }]
2506
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], iconWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconWidth", required: false }] }], expandedWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedWidth", required: false }] }] } });
2507
+
2508
+ // Side-effect import: registers the `ks-pagination` tag — see
2509
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2510
+ /**
2511
+ * Angular wrapper around the `<ks-pagination>` Stencil custom element.
2512
+ * No `<slot>` in the wrapped Stencil render — data-driven only.
2513
+ */
2514
+ class KsPaginationComponent {
2515
+ el;
2516
+ /** Total number of items */
2517
+ total = input(0, ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
2518
+ /** Items per page */
2519
+ pageSize = input(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
2520
+ /** Current page (1-indexed) */
2521
+ currentPage = input(1, ...(ngDevMode ? [{ debugName: "currentPage" }] : /* istanbul ignore next */ []));
2522
+ /** Show page size selector */
2523
+ showPageSize = input(false, ...(ngDevMode ? [{ debugName: "showPageSize" }] : /* istanbul ignore next */ []));
2524
+ /** Available page sizes */
2525
+ pageSizeOptions = input([10, 20, 50, 100], ...(ngDevMode ? [{ debugName: "pageSizeOptions" }] : /* istanbul ignore next */ []));
2526
+ /** Show quick jumper */
2527
+ showQuickJumper = input(false, ...(ngDevMode ? [{ debugName: "showQuickJumper" }] : /* istanbul ignore next */ []));
2528
+ /** Maximum number of page buttons to show */
2529
+ maxPageButtons = input(7, ...(ngDevMode ? [{ debugName: "maxPageButtons" }] : /* istanbul ignore next */ []));
2530
+ /** Emits when page changes. From the native `pageChange` event. */
2531
+ ksPageChange = output();
2532
+ /** Emits when page size changes. From the native `pageSizeChange` event. */
2533
+ ksPageSizeChange = output();
2534
+ constructor(ref) {
2535
+ this.el = ref.nativeElement;
2536
+ effect(() => (this.el.total = this.total()));
2537
+ effect(() => (this.el.pageSize = this.pageSize()));
2538
+ effect(() => (this.el.currentPage = this.currentPage()));
2539
+ effect(() => (this.el.showPageSize = this.showPageSize()));
2540
+ effect(() => (this.el.pageSizeOptions = this.pageSizeOptions()));
2541
+ effect(() => (this.el.showQuickJumper = this.showQuickJumper()));
2542
+ effect(() => (this.el.maxPageButtons = this.maxPageButtons()));
2543
+ const onNativePageChange = (event) => {
2544
+ this.ksPageChange.emit(event.detail);
2545
+ };
2546
+ const onNativePageSizeChange = (event) => {
2547
+ this.ksPageSizeChange.emit(event.detail);
2548
+ };
2549
+ this.el.addEventListener('pageChange', onNativePageChange);
2550
+ this.el.addEventListener('pageSizeChange', onNativePageSizeChange);
2551
+ inject(DestroyRef).onDestroy(() => {
2552
+ this.el.removeEventListener('pageChange', onNativePageChange);
2553
+ this.el.removeEventListener('pageSizeChange', onNativePageSizeChange);
2554
+ });
2555
+ }
2556
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsPaginationComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2557
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsPaginationComponent, isStandalone: true, selector: "ks-pagination", inputs: { total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, showPageSize: { classPropertyName: "showPageSize", publicName: "showPageSize", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, showQuickJumper: { classPropertyName: "showQuickJumper", publicName: "showQuickJumper", isSignal: true, isRequired: false, transformFunction: null }, maxPageButtons: { classPropertyName: "maxPageButtons", publicName: "maxPageButtons", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksPageChange: "ksPageChange", ksPageSizeChange: "ksPageSizeChange" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2558
+ }
2559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsPaginationComponent, decorators: [{
2560
+ type: Component,
2561
+ args: [{
2562
+ selector: 'ks-pagination',
2563
+ standalone: true,
2564
+ template: '',
2565
+ changeDetection: ChangeDetectionStrategy.OnPush,
2566
+ }]
2567
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { total: [{ type: i0.Input, args: [{ isSignal: true, alias: "total", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], currentPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPage", required: false }] }], showPageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPageSize", required: false }] }], pageSizeOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeOptions", required: false }] }], showQuickJumper: [{ type: i0.Input, args: [{ isSignal: true, alias: "showQuickJumper", required: false }] }], maxPageButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxPageButtons", required: false }] }], ksPageChange: [{ type: i0.Output, args: ["ksPageChange"] }], ksPageSizeChange: [{ type: i0.Output, args: ["ksPageSizeChange"] }] } });
2568
+
2569
+ // Side-effect import: registers the `ks-stepper` tag — see
2570
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2571
+ /**
2572
+ * Angular wrapper around the `<ks-stepper>` Stencil custom element.
2573
+ * No `<slot>` in the wrapped Stencil render — data-driven only.
2574
+ */
2575
+ class KsStepperComponent {
2576
+ el;
2577
+ /** Step definitions */
2578
+ steps = input([], ...(ngDevMode ? [{ debugName: "steps" }] : /* istanbul ignore next */ []));
2579
+ /** Currently active step index (0-based) */
2580
+ activeStep = input(0, ...(ngDevMode ? [{ debugName: "activeStep" }] : /* istanbul ignore next */ []));
2581
+ /** Layout orientation */
2582
+ orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
2583
+ /** Allow clicking steps to navigate */
2584
+ clickable = input(false, ...(ngDevMode ? [{ debugName: "clickable" }] : /* istanbul ignore next */ []));
2585
+ /** Marks completed steps */
2586
+ completedSteps = input([], ...(ngDevMode ? [{ debugName: "completedSteps" }] : /* istanbul ignore next */ []));
2587
+ /** Emits the new step index. From the native `stepChange` event. */
2588
+ ksStepChange = output();
2589
+ constructor(ref) {
2590
+ this.el = ref.nativeElement;
2591
+ effect(() => (this.el.steps = this.steps()));
2592
+ effect(() => (this.el.activeStep = this.activeStep()));
2593
+ effect(() => (this.el.orientation = this.orientation()));
2594
+ effect(() => (this.el.clickable = this.clickable()));
2595
+ effect(() => (this.el.completedSteps = this.completedSteps()));
2596
+ const onNativeStepChange = (event) => {
2597
+ this.ksStepChange.emit(event.detail);
2598
+ };
2599
+ this.el.addEventListener('stepChange', onNativeStepChange);
2600
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('stepChange', onNativeStepChange));
2601
+ }
2602
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsStepperComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2603
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsStepperComponent, isStandalone: true, selector: "ks-stepper", inputs: { steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: false, transformFunction: null }, activeStep: { classPropertyName: "activeStep", publicName: "activeStep", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, completedSteps: { classPropertyName: "completedSteps", publicName: "completedSteps", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksStepChange: "ksStepChange" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2604
+ }
2605
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsStepperComponent, decorators: [{
2606
+ type: Component,
2607
+ args: [{
2608
+ selector: 'ks-stepper',
2609
+ standalone: true,
2610
+ template: '',
2611
+ changeDetection: ChangeDetectionStrategy.OnPush,
2612
+ }]
2613
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { steps: [{ type: i0.Input, args: [{ isSignal: true, alias: "steps", required: false }] }], activeStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeStep", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], completedSteps: [{ type: i0.Input, args: [{ isSignal: true, alias: "completedSteps", required: false }] }], ksStepChange: [{ type: i0.Output, args: ["ksStepChange"] }] } });
2614
+
2615
+ // Side-effect import: registers the `ks-tab` tag — see
2616
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2617
+ /**
2618
+ * Angular wrapper around the `<ks-tab>` Stencil custom element.
2619
+ *
2620
+ * Same `ksPanel="key"` → named-`<slot>` strategy as
2621
+ * `Navigation/accordion/accordion.ts` (NOT the native `slot="..."`
2622
+ * attribute) — see that file's doc comment for the full explanation.
2623
+ * Usage:
2624
+ * `<ks-tab [tabs]="tabs" activeKey="tab1">
2625
+ * <div ksPanel="tab1">Tab 1 content</div>
2626
+ * <div ksPanel="tab2">Tab 2 content</div>
2627
+ * </ks-tab>`
2628
+ */
2629
+ class KsTabComponent {
2630
+ el;
2631
+ /** List of tab definitions */
2632
+ tabs = input([], ...(ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []));
2633
+ /** Key of the initially active tab */
2634
+ activeKey = input('', ...(ngDevMode ? [{ debugName: "activeKey" }] : /* istanbul ignore next */ []));
2635
+ tabHeaderStyle = input('default', ...(ngDevMode ? [{ debugName: "tabHeaderStyle" }] : /* istanbul ignore next */ []));
2636
+ /** Emits the key of the newly selected tab. From the native `tabChange` event. */
2637
+ ksTabChange = output();
2638
+ constructor(ref) {
2639
+ this.el = ref.nativeElement;
2640
+ effect(() => (this.el.tabs = this.tabs()));
2641
+ effect(() => (this.el.activeKey = this.activeKey()));
2642
+ effect(() => (this.el.tabHeaderStyle = this.tabHeaderStyle()));
2643
+ const onNativeTabChange = (event) => {
2644
+ this.ksTabChange.emit(event.detail);
2645
+ };
2646
+ this.el.addEventListener('tabChange', onNativeTabChange);
2647
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('tabChange', onNativeTabChange));
2648
+ }
2649
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTabComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2650
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsTabComponent, isStandalone: true, selector: "ks-tab", inputs: { tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, activeKey: { classPropertyName: "activeKey", publicName: "activeKey", isSignal: true, isRequired: false, transformFunction: null }, tabHeaderStyle: { classPropertyName: "tabHeaderStyle", publicName: "tabHeaderStyle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksTabChange: "ksTabChange" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2651
+ }
2652
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTabComponent, decorators: [{
2653
+ type: Component,
2654
+ args: [{
2655
+ selector: 'ks-tab',
2656
+ standalone: true,
2657
+ template: '<ng-content></ng-content>',
2658
+ changeDetection: ChangeDetectionStrategy.OnPush,
2659
+ }]
2660
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { tabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabs", required: false }] }], activeKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeKey", required: false }] }], tabHeaderStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabHeaderStyle", required: false }] }], ksTabChange: [{ type: i0.Output, args: ["ksTabChange"] }] } });
2661
+
2662
+ // Side-effect import: registers the `ks-toolbar` tag — see
2663
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2664
+ /**
2665
+ * Angular wrapper around the `<ks-toolbar>` Stencil custom element.
2666
+ * Renders a real, consumer-facing default `<slot />` for extra trailing
2667
+ * content — same single unfiltered `<ng-content>` pass-through as
2668
+ * `Layout/card/card.ts`.
2669
+ */
2670
+ class KsToolbarComponent {
2671
+ el;
2672
+ /** Toolbar items */
2673
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
2674
+ /** Emits the clicked item key. From the native `itemClicked` event. */
2675
+ ksItemClicked = output();
2676
+ constructor(ref) {
2677
+ this.el = ref.nativeElement;
2678
+ effect(() => (this.el.items = this.items()));
2679
+ const onNativeItemClicked = (event) => {
2680
+ this.ksItemClicked.emit(event.detail);
2681
+ };
2682
+ this.el.addEventListener('itemClicked', onNativeItemClicked);
2683
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('itemClicked', onNativeItemClicked));
2684
+ }
2685
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsToolbarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2686
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsToolbarComponent, isStandalone: true, selector: "ks-toolbar", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksItemClicked: "ksItemClicked" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2687
+ }
2688
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsToolbarComponent, decorators: [{
2689
+ type: Component,
2690
+ args: [{
2691
+ selector: 'ks-toolbar',
2692
+ standalone: true,
2693
+ template: '<ng-content></ng-content>',
2694
+ changeDetection: ChangeDetectionStrategy.OnPush,
2695
+ }]
2696
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], ksItemClicked: [{ type: i0.Output, args: ["ksItemClicked"] }] } });
2697
+
2698
+ // Side-effect import: registers the `ks-top-nav-bar` tag — see
2699
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2700
+ /**
2701
+ * Angular wrapper around the `<ks-top-nav-bar>` Stencil custom element.
2702
+ * Renders a real, consumer-facing default `<slot />` — same single
2703
+ * unfiltered `<ng-content>` pass-through as `Layout/card/card.ts`.
2704
+ */
2705
+ class KsTopNavBarComponent {
2706
+ el;
2707
+ /** Navigation items */
2708
+ items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
2709
+ /** Visual style of the active indicator */
2710
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2711
+ /** Show icon alongside label */
2712
+ showIcons = input(true, ...(ngDevMode ? [{ debugName: "showIcons" }] : /* istanbul ignore next */ []));
2713
+ /** Show label text */
2714
+ showLabels = input(true, ...(ngDevMode ? [{ debugName: "showLabels" }] : /* istanbul ignore next */ []));
2715
+ /** Aria label for the nav element */
2716
+ label = input('Top navigation', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
2717
+ constructor(ref) {
2718
+ this.el = ref.nativeElement;
2719
+ effect(() => (this.el.items = this.items()));
2720
+ effect(() => (this.el.variant = this.variant()));
2721
+ effect(() => (this.el.showIcons = this.showIcons()));
2722
+ effect(() => (this.el.showLabels = this.showLabels()));
2723
+ effect(() => (this.el.label = this.label()));
2724
+ }
2725
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTopNavBarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2726
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsTopNavBarComponent, isStandalone: true, selector: "ks-top-nav-bar", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: "showIcons", publicName: "showIcons", isSignal: true, isRequired: false, transformFunction: null }, showLabels: { classPropertyName: "showLabels", publicName: "showLabels", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2727
+ }
2728
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTopNavBarComponent, decorators: [{
2729
+ type: Component,
2730
+ args: [{
2731
+ selector: 'ks-top-nav-bar',
2732
+ standalone: true,
2733
+ template: '<ng-content></ng-content>',
2734
+ changeDetection: ChangeDetectionStrategy.OnPush,
2735
+ }]
2736
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcons", required: false }] }], showLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabels", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
2737
+
2738
+ // Side-effect import: registers the `ks-tree-view` tag — see
2739
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2740
+ /**
2741
+ * Angular wrapper around the `<ks-tree-view>` Stencil custom element.
2742
+ * No `<slot>` in the wrapped Stencil render — data-driven only.
2743
+ */
2744
+ class KsTreeViewComponent {
2745
+ el;
2746
+ /** Tree data */
2747
+ nodes = input([], ...(ngDevMode ? [{ debugName: "nodes" }] : /* istanbul ignore next */ []));
2748
+ /** Keys of nodes that start expanded */
2749
+ expandedKeys = input([], ...(ngDevMode ? [{ debugName: "expandedKeys" }] : /* istanbul ignore next */ []));
2750
+ /** Allow selecting multiple nodes */
2751
+ multi = input(false, ...(ngDevMode ? [{ debugName: "multi" }] : /* istanbul ignore next */ []));
2752
+ /** Emits key(s) when selection changes. From the native `selectionChanged` event. */
2753
+ ksSelectionChanged = output();
2754
+ /** Emits when a node is expanded/collapsed. From the native `expandChange` event. */
2755
+ ksExpandChange = output();
2756
+ constructor(ref) {
2757
+ this.el = ref.nativeElement;
2758
+ effect(() => (this.el.nodes = this.nodes()));
2759
+ effect(() => (this.el.expandedKeys = this.expandedKeys()));
2760
+ effect(() => (this.el.multi = this.multi()));
2761
+ const onNativeSelectionChanged = (event) => {
2762
+ this.ksSelectionChanged.emit(event.detail);
2763
+ };
2764
+ const onNativeExpandChange = (event) => {
2765
+ this.ksExpandChange.emit(event.detail);
2766
+ };
2767
+ this.el.addEventListener('selectionChanged', onNativeSelectionChanged);
2768
+ this.el.addEventListener('expandChange', onNativeExpandChange);
2769
+ inject(DestroyRef).onDestroy(() => {
2770
+ this.el.removeEventListener('selectionChanged', onNativeSelectionChanged);
2771
+ this.el.removeEventListener('expandChange', onNativeExpandChange);
2772
+ });
2773
+ }
2774
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTreeViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2775
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsTreeViewComponent, isStandalone: true, selector: "ks-tree-view", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, expandedKeys: { classPropertyName: "expandedKeys", publicName: "expandedKeys", isSignal: true, isRequired: false, transformFunction: null }, multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksSelectionChanged: "ksSelectionChanged", ksExpandChange: "ksExpandChange" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2776
+ }
2777
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsTreeViewComponent, decorators: [{
2778
+ type: Component,
2779
+ args: [{
2780
+ selector: 'ks-tree-view',
2781
+ standalone: true,
2782
+ template: '',
2783
+ changeDetection: ChangeDetectionStrategy.OnPush,
2784
+ }]
2785
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodes", required: false }] }], expandedKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedKeys", required: false }] }], multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }], ksSelectionChanged: [{ type: i0.Output, args: ["ksSelectionChanged"] }], ksExpandChange: [{ type: i0.Output, args: ["ksExpandChange"] }] } });
2786
+
2787
+ // Side-effect import: registers the `ks-badge` tag — see
2788
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2789
+ /**
2790
+ * Angular wrapper around the `<ks-badge>` Stencil custom element.
2791
+ * Purely presentational — no events, no `<slot>` in the wrapped Stencil
2792
+ * render, plain inputs only.
2793
+ */
2794
+ class KsBadgeComponent {
2795
+ el;
2796
+ /** Display text */
2797
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
2798
+ /** Colour variant */
2799
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2800
+ /** Size */
2801
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2802
+ /** Show a dot instead of text */
2803
+ dot = input(false, ...(ngDevMode ? [{ debugName: "dot" }] : /* istanbul ignore next */ []));
2804
+ /** Pill (fully rounded) shape */
2805
+ pill = input(true, ...(ngDevMode ? [{ debugName: "pill" }] : /* istanbul ignore next */ []));
2806
+ constructor(ref) {
2807
+ this.el = ref.nativeElement;
2808
+ effect(() => (this.el.label = this.label()));
2809
+ effect(() => (this.el.variant = this.variant()));
2810
+ effect(() => (this.el.size = this.size()));
2811
+ effect(() => (this.el.dot = this.dot()));
2812
+ effect(() => (this.el.pill = this.pill()));
2813
+ }
2814
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsBadgeComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2815
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsBadgeComponent, isStandalone: true, selector: "ks-badge", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, dot: { classPropertyName: "dot", publicName: "dot", isSignal: true, isRequired: false, transformFunction: null }, pill: { classPropertyName: "pill", publicName: "pill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2816
+ }
2817
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsBadgeComponent, decorators: [{
2818
+ type: Component,
2819
+ args: [{
2820
+ selector: 'ks-badge',
2821
+ standalone: true,
2822
+ template: '',
2823
+ changeDetection: ChangeDetectionStrategy.OnPush,
2824
+ }]
2825
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], dot: [{ type: i0.Input, args: [{ isSignal: true, alias: "dot", required: false }] }], pill: [{ type: i0.Input, args: [{ isSignal: true, alias: "pill", required: false }] }] } });
2826
+
2827
+ // Side-effect import: registers the `ks-loader` tag — see
2828
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2829
+ /**
2830
+ * Angular wrapper around the `<ks-loader>` Stencil custom element.
2831
+ *
2832
+ * Renders real, consumer-facing named slots — `loading`, `empty`,
2833
+ * `empty-action`, `error`, `error-action` — plus a default (unnamed)
2834
+ * slot for the `Success` state. Same single unfiltered
2835
+ * `<ng-content>` pass-through as `Layout/card/card.ts`: give each
2836
+ * projected child its own native `slot="loading"` / `slot="empty"` /
2837
+ * `slot="empty-action"` / `slot="error"` / `slot="error-action"`
2838
+ * attribute (or none, for the default/success slot).
2839
+ */
2840
+ class KsLoaderComponent {
2841
+ el;
2842
+ /** Current state */
2843
+ state = input(LoaderStateEnum.Loading, ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
2844
+ constructor(ref) {
2845
+ this.el = ref.nativeElement;
2846
+ effect(() => (this.el.state = this.state()));
2847
+ }
2848
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsLoaderComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2849
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsLoaderComponent, isStandalone: true, selector: "ks-loader", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2850
+ }
2851
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsLoaderComponent, decorators: [{
2852
+ type: Component,
2853
+ args: [{
2854
+ selector: 'ks-loader',
2855
+ standalone: true,
2856
+ template: '<ng-content></ng-content>',
2857
+ changeDetection: ChangeDetectionStrategy.OnPush,
2858
+ }]
2859
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }] } });
2860
+
2861
+ // Side-effect import: registers the `ks-message` tag — see
2862
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2863
+ /**
2864
+ * Angular wrapper around the `<ks-message>` Stencil custom element.
2865
+ *
2866
+ * `<ks-message>` renders a default `<slot />` only as a fallback when
2867
+ * `text` is empty — same single unfiltered `<ng-content>` pass-through as
2868
+ * `Layout/card/card.ts`; omit `text` and project content instead if
2869
+ * richer markup is needed.
2870
+ */
2871
+ class KsMessageComponent {
2872
+ el;
2873
+ /** Main message text */
2874
+ text = input('', ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
2875
+ /** Optional icon class (e.g. Material Icon or Font Awesome) */
2876
+ icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
2877
+ /** Colour variant */
2878
+ variant = input('info', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2879
+ /** Show a dismiss (×) button */
2880
+ dismissible = input(false, ...(ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []));
2881
+ /** Emits when the message is dismissed. From the native `dismissed` event. */
2882
+ ksDismissed = output();
2883
+ constructor(ref) {
2884
+ this.el = ref.nativeElement;
2885
+ effect(() => (this.el.text = this.text()));
2886
+ effect(() => (this.el.icon = this.icon()));
2887
+ effect(() => (this.el.variant = this.variant()));
2888
+ effect(() => (this.el.dismissible = this.dismissible()));
2889
+ const onNativeDismissed = () => this.ksDismissed.emit();
2890
+ this.el.addEventListener('dismissed', onNativeDismissed);
2891
+ inject(DestroyRef).onDestroy(() => this.el.removeEventListener('dismissed', onNativeDismissed));
2892
+ }
2893
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsMessageComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2894
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsMessageComponent, isStandalone: true, selector: "ks-message", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ksDismissed: "ksDismissed" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2895
+ }
2896
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsMessageComponent, decorators: [{
2897
+ type: Component,
2898
+ args: [{
2899
+ selector: 'ks-message',
2900
+ standalone: true,
2901
+ template: '<ng-content></ng-content>',
2902
+ changeDetection: ChangeDetectionStrategy.OnPush,
2903
+ }]
2904
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], ksDismissed: [{ type: i0.Output, args: ["ksDismissed"] }] } });
2905
+
2906
+ // Side-effect import: registers the `ks-progress` tag — see
2907
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2908
+ /**
2909
+ * Angular wrapper around the `<ks-progress>` Stencil custom element.
2910
+ * Purely presentational — no events, no `<slot>` in the wrapped Stencil
2911
+ * render, plain inputs only.
2912
+ */
2913
+ class KsProgressComponent {
2914
+ el;
2915
+ /** Progress value (0-100) */
2916
+ value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
2917
+ /** Maximum value */
2918
+ max = input(100, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
2919
+ /** Show percentage label */
2920
+ showLabel = input(false, ...(ngDevMode ? [{ debugName: "showLabel" }] : /* istanbul ignore next */ []));
2921
+ /** Progress variant */
2922
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2923
+ /** Progress size */
2924
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2925
+ /** Indeterminate/loading state */
2926
+ indeterminate = input(false, ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
2927
+ /** Optional label text */
2928
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
2929
+ constructor(ref) {
2930
+ this.el = ref.nativeElement;
2931
+ effect(() => (this.el.value = this.value()));
2932
+ effect(() => (this.el.max = this.max()));
2933
+ effect(() => (this.el.showLabel = this.showLabel()));
2934
+ effect(() => (this.el.variant = this.variant()));
2935
+ effect(() => (this.el.size = this.size()));
2936
+ effect(() => (this.el.indeterminate = this.indeterminate()));
2937
+ effect(() => (this.el.label = this.label()));
2938
+ }
2939
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsProgressComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2940
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsProgressComponent, isStandalone: true, selector: "ks-progress", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2941
+ }
2942
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsProgressComponent, decorators: [{
2943
+ type: Component,
2944
+ args: [{
2945
+ selector: 'ks-progress',
2946
+ standalone: true,
2947
+ template: '',
2948
+ changeDetection: ChangeDetectionStrategy.OnPush,
2949
+ }]
2950
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
2951
+
2952
+ // Side-effect import: registers the `ks-spinner` tag — see
2953
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2954
+ /**
2955
+ * Angular wrapper around the `<ks-spinner>` Stencil custom element.
2956
+ * Purely presentational — no events, no `<slot>` in the wrapped Stencil
2957
+ * render, plain inputs only.
2958
+ */
2959
+ class KsSpinnerComponent {
2960
+ el;
2961
+ /** Spinner size */
2962
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
2963
+ /** Spinner variant/color */
2964
+ variant = input('brand', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
2965
+ /** Optional text to display */
2966
+ text = input('', ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
2967
+ /** Center the spinner in container */
2968
+ centered = input(false, ...(ngDevMode ? [{ debugName: "centered" }] : /* istanbul ignore next */ []));
2969
+ constructor(ref) {
2970
+ this.el = ref.nativeElement;
2971
+ effect(() => (this.el.size = this.size()));
2972
+ effect(() => (this.el.variant = this.variant()));
2973
+ effect(() => (this.el.text = this.text()));
2974
+ effect(() => (this.el.centered = this.centered()));
2975
+ }
2976
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSpinnerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2977
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsSpinnerComponent, isStandalone: true, selector: "ks-spinner", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, centered: { classPropertyName: "centered", publicName: "centered", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2978
+ }
2979
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsSpinnerComponent, decorators: [{
2980
+ type: Component,
2981
+ args: [{
2982
+ selector: 'ks-spinner',
2983
+ standalone: true,
2984
+ template: '',
2985
+ changeDetection: ChangeDetectionStrategy.OnPush,
2986
+ }]
2987
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], centered: [{ type: i0.Input, args: [{ isSignal: true, alias: "centered", required: false }] }] } });
2988
+
2989
+ // Side-effect import: registers the `ks-toast-outlet` tag — see
2990
+ // `Buttons/button/button.ts` for the full explanation of this pattern.
2991
+ /**
2992
+ * Angular wrapper around the `<ks-toast-outlet>` Stencil custom element.
2993
+ * Named `KsToastOutletComponent` (matching the literal tag, not just
2994
+ * `KsToastComponent`) for consistency with the React wrapper, which must
2995
+ * avoid colliding with the re-exported `KsToast` *data* interface above
2996
+ * (TypeScript disallows a value and a type export sharing one identifier
2997
+ * from the same module) — see `react/src/components/Notification/toast/toast.tsx`.
2998
+ * `<ks-toast-outlet position="top-right" />` is all a consumer needs; add
2999
+ * one per screen corner they want to stack toasts in.
3000
+ *
3001
+ * No `<slot>`, no events — it purely subscribes to the shared
3002
+ * `toastStore` singleton (re-exported above) and renders whatever's
3003
+ * enqueued.
3004
+ */
3005
+ class KsToastOutletComponent {
3006
+ el;
3007
+ /** Where on screen to stack toasts */
3008
+ position = input('top-right', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
3009
+ constructor(ref) {
3010
+ this.el = ref.nativeElement;
3011
+ effect(() => (this.el.position = this.position()));
3012
+ }
3013
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsToastOutletComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
3014
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.26", type: KsToastOutletComponent, isStandalone: true, selector: "ks-toast-outlet", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
3015
+ }
3016
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.26", ngImport: i0, type: KsToastOutletComponent, decorators: [{
3017
+ type: Component,
3018
+ args: [{
3019
+ selector: 'ks-toast-outlet',
3020
+ standalone: true,
3021
+ template: '',
3022
+ changeDetection: ChangeDetectionStrategy.OnPush,
3023
+ }]
3024
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }] } });
3025
+
3026
+ function provideInBuildTheme(themeName, startUpMode) {
3027
+ return provideAppInitializer(() => {
3028
+ themeService.applyInBuildTheme(themeName);
3029
+ themeService.setMode(startUpMode);
3030
+ });
3031
+ }
3032
+
3033
+ /**
3034
+ * Public API surface of `@ks/wc-angular`.
3035
+ */
3036
+ /* ================= Buttons ================= */
3037
+
3038
+ /**
3039
+ * Generated bundle index. Do not edit.
3040
+ */
3041
+
3042
+ export { KsAccordionComponent, KsAvatarComponent, KsBadgeComponent, KsBreadcrumbComponent, KsButtonComponent, KsButtonGroupComponent, KsCardComponent, KsCarouselComponent, KsCheckboxComponent, KsChipsComponent, KsCodeViewComponent, KsColourPickerComponent, KsContextMenuComponent, KsDatepickerComponent, KsDaterangeComponent, KsDialogComponent, KsDropdownComponent, KsFabComponent, KsInputComponent, KsListBoxComponent, KsLoaderComponent, KsMessageComponent, KsNavBarComponent, KsNotFoundComponent, KsOtpInputComponent, KsPaginationComponent, KsProgressComponent, KsRadioComponent, KsRatingComponent, KsRollingNumberComponent, KsSidebarComponent, KsSliderComponent, KsSpinnerComponent, KsSplitButtonComponent, KsStepperComponent, KsSwitchComponent, KsTabComponent, KsTableComponent, KsTextareaComponent, KsThemeSwitchComponent, KsTimepickerComponent, KsToastOutletComponent, KsToolbarComponent, KsTooltipComponent, KsTopNavBarComponent, KsTreeViewComponent, KsUploaderComponent, provideInBuildTheme };
3043
+ //# sourceMappingURL=kraft.stitch-angular.mjs.map