@kodaris/krubble-components 1.0.0

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 (46) hide show
  1. package/custom-elements.json +2156 -0
  2. package/dist/accordion/accordion.d.ts +35 -0
  3. package/dist/accordion/accordion.d.ts.map +1 -0
  4. package/dist/accordion/accordion.js +120 -0
  5. package/dist/accordion/accordion.js.map +1 -0
  6. package/dist/alert.d.ts +35 -0
  7. package/dist/alert.d.ts.map +1 -0
  8. package/dist/alert.js +204 -0
  9. package/dist/alert.js.map +1 -0
  10. package/dist/button/button.d.ts +30 -0
  11. package/dist/button/button.d.ts.map +1 -0
  12. package/dist/button/button.js +133 -0
  13. package/dist/button/button.js.map +1 -0
  14. package/dist/code-demo/code-demo.d.ts +44 -0
  15. package/dist/code-demo/code-demo.d.ts.map +1 -0
  16. package/dist/code-demo/code-demo.js +277 -0
  17. package/dist/code-demo/code-demo.js.map +1 -0
  18. package/dist/context-menu/context-menu.d.ts +54 -0
  19. package/dist/context-menu/context-menu.d.ts.map +1 -0
  20. package/dist/context-menu/context-menu.js +179 -0
  21. package/dist/context-menu/context-menu.js.map +1 -0
  22. package/dist/dialog/dialog.d.ts +58 -0
  23. package/dist/dialog/dialog.d.ts.map +1 -0
  24. package/dist/dialog/dialog.js +142 -0
  25. package/dist/dialog/dialog.js.map +1 -0
  26. package/dist/form/index.d.ts +2 -0
  27. package/dist/form/index.d.ts.map +1 -0
  28. package/dist/form/index.js +3 -0
  29. package/dist/form/index.js.map +1 -0
  30. package/dist/form/text-field/text-field.d.ts +91 -0
  31. package/dist/form/text-field/text-field.d.ts.map +1 -0
  32. package/dist/form/text-field/text-field.js +281 -0
  33. package/dist/form/text-field/text-field.js.map +1 -0
  34. package/dist/index.d.ts +10 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +10 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/krubble.bundled.js +1402 -0
  39. package/dist/krubble.bundled.js.map +1 -0
  40. package/dist/krubble.bundled.min.js +739 -0
  41. package/dist/krubble.bundled.min.js.map +1 -0
  42. package/dist/krubble.umd.js +1411 -0
  43. package/dist/krubble.umd.js.map +1 -0
  44. package/dist/krubble.umd.min.js +739 -0
  45. package/dist/krubble.umd.min.js.map +1 -0
  46. package/package.json +51 -0
@@ -0,0 +1,142 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, css } from 'lit';
8
+ import { customElement, state } from 'lit/decorators.js';
9
+ export class DialogRef {
10
+ constructor() {
11
+ this.resolvePromise = null;
12
+ this.dialogElement = null;
13
+ this.promise = new Promise((resolve) => {
14
+ this.resolvePromise = resolve;
15
+ });
16
+ }
17
+ /** @internal */
18
+ setDialogElement(el) {
19
+ this.dialogElement = el;
20
+ }
21
+ close(result) {
22
+ if (this.resolvePromise) {
23
+ this.resolvePromise(result);
24
+ this.resolvePromise = null;
25
+ }
26
+ this.dialogElement?.remove();
27
+ }
28
+ afterClosed() {
29
+ return this.promise;
30
+ }
31
+ }
32
+ /**
33
+ * Generic dialog component that renders a Lit component inside a dialog shell.
34
+ *
35
+ * Usage:
36
+ * ```ts
37
+ * // Define your dialog content component
38
+ * class EditItemDialog extends LitElement {
39
+ * // Injected by KRDialog
40
+ * dialogRef: DialogRef<{ label: string }>;
41
+ * data: { label: string };
42
+ *
43
+ * save() {
44
+ * this.dialogRef.close({ label: this.label });
45
+ * }
46
+ * }
47
+ *
48
+ * // Open the dialog
49
+ * const dialogRef = KRDialog.open(EditItemDialog, {
50
+ * data: { label: 'Dashboard' }
51
+ * });
52
+ *
53
+ * const result = await dialogRef.afterClosed();
54
+ * if (result) {
55
+ * console.log('Saved:', result.label);
56
+ * }
57
+ * ```
58
+ */
59
+ let KRDialog = class KRDialog extends LitElement {
60
+ constructor() {
61
+ super(...arguments);
62
+ this.contentElement = null;
63
+ this.dialogRef = null;
64
+ this.boundHandleKeyDown = this.handleKeyDown.bind(this);
65
+ }
66
+ static open(component, config) {
67
+ const existing = document.querySelector('kr-dialog');
68
+ if (existing) {
69
+ existing.remove();
70
+ }
71
+ const dialogRef = new DialogRef();
72
+ const dialog = document.createElement('kr-dialog');
73
+ dialogRef.setDialogElement(dialog);
74
+ dialog.dialogRef = dialogRef;
75
+ // Create the content component
76
+ const content = new component();
77
+ content.dialogRef = dialogRef;
78
+ if (config?.data) {
79
+ content.data = config.data;
80
+ }
81
+ dialog.contentElement = content;
82
+ document.body.appendChild(dialog);
83
+ document.addEventListener('keydown', dialog.boundHandleKeyDown);
84
+ return dialogRef;
85
+ }
86
+ handleKeyDown(e) {
87
+ if (e.key === 'Escape') {
88
+ this.dialogRef?.close(undefined);
89
+ }
90
+ }
91
+ handleBackdropClick(e) {
92
+ if (e.target.classList.contains('backdrop')) {
93
+ this.dialogRef?.close(undefined);
94
+ }
95
+ }
96
+ disconnectedCallback() {
97
+ super.disconnectedCallback();
98
+ document.removeEventListener('keydown', this.boundHandleKeyDown);
99
+ }
100
+ render() {
101
+ return html `
102
+ <div class="backdrop" @click=${this.handleBackdropClick}></div>
103
+ <div class="dialog">
104
+ ${this.contentElement}
105
+ </div>
106
+ `;
107
+ }
108
+ };
109
+ KRDialog.styles = css `
110
+ :host {
111
+ position: fixed;
112
+ inset: 0;
113
+ z-index: 10000;
114
+ display: flex;
115
+ align-items: center;
116
+ justify-content: center;
117
+ }
118
+
119
+ .backdrop {
120
+ position: absolute;
121
+ inset: 0;
122
+ background: rgba(0, 0, 0, 0.5);
123
+ }
124
+
125
+ .dialog {
126
+ position: relative;
127
+ background: #1a1a2e;
128
+ border: 1px solid rgba(255, 255, 255, 0.1);
129
+ border-radius: 12px;
130
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5);
131
+ max-height: 90vh;
132
+ overflow: auto;
133
+ }
134
+ `;
135
+ __decorate([
136
+ state()
137
+ ], KRDialog.prototype, "contentElement", void 0);
138
+ KRDialog = __decorate([
139
+ customElement('kr-dialog')
140
+ ], KRDialog);
141
+ export { KRDialog };
142
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/dialog/dialog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { KRTextField } from './text-field/text-field.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/form/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Form components
2
+ export { KRTextField } from './text-field/text-field.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/form/index.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,91 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * A text field component that works with native browser forms.
4
+ *
5
+ * Uses ElementInternals for form association, allowing the component
6
+ * to participate in form submission, validation, and reset.
7
+ *
8
+ * Native input and change events bubble up from the inner input element.
9
+ */
10
+ export declare class KRTextField extends LitElement {
11
+ static styles: import("lit").CSSResult;
12
+ static formAssociated: boolean;
13
+ private _internals;
14
+ constructor();
15
+ /**
16
+ * The input label text
17
+ */
18
+ label: string;
19
+ /**
20
+ * The input name for form submission
21
+ */
22
+ name: string;
23
+ /**
24
+ * The current value
25
+ */
26
+ value: string;
27
+ /**
28
+ * Placeholder text
29
+ */
30
+ placeholder: string;
31
+ /**
32
+ * Input type (text, email, password, tel, url, search)
33
+ */
34
+ type: 'text' | 'email' | 'password' | 'tel' | 'url' | 'search';
35
+ /**
36
+ * Whether the field is required
37
+ */
38
+ required: boolean;
39
+ /**
40
+ * Whether the field is disabled
41
+ */
42
+ disabled: boolean;
43
+ /**
44
+ * Whether the field is readonly
45
+ */
46
+ readonly: boolean;
47
+ /**
48
+ * Minimum length for the value
49
+ */
50
+ minlength?: number;
51
+ /**
52
+ * Maximum length for the value
53
+ */
54
+ maxlength?: number;
55
+ /**
56
+ * Pattern for validation (regex)
57
+ */
58
+ pattern?: string;
59
+ /**
60
+ * Autocomplete attribute value
61
+ */
62
+ autocomplete: string;
63
+ /**
64
+ * Helper text shown below the input
65
+ */
66
+ hint: string;
67
+ private _input;
68
+ private _touched;
69
+ private _dirty;
70
+ get form(): HTMLFormElement | null;
71
+ get validity(): ValidityState;
72
+ get validationMessage(): string;
73
+ get willValidate(): boolean;
74
+ checkValidity(): boolean;
75
+ reportValidity(): boolean;
76
+ formResetCallback(): void;
77
+ formStateRestoreCallback(state: string): void;
78
+ private _handleInput;
79
+ private _handleChange;
80
+ private _handleBlur;
81
+ render(): import("lit-html").TemplateResult<1>;
82
+ focus(): void;
83
+ blur(): void;
84
+ select(): void;
85
+ }
86
+ declare global {
87
+ interface HTMLElementTagNameMap {
88
+ 'kr-text-field': KRTextField;
89
+ }
90
+ }
91
+ //# sourceMappingURL=text-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../../src/form/text-field/text-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C;;;;;;;GAOG;AACH,qBACa,WAAY,SAAQ,UAAU;IACzC,OAAgB,MAAM,0BAmEpB;IAGF,MAAM,CAAC,cAAc,UAAQ;IAE7B,OAAO,CAAC,UAAU,CAAmB;;IAOrC;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,IAAI,SAAM;IAEV;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,WAAW,SAAM;IAEjB;;OAEG;IAEH,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAU;IAExE;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IAEH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IAEH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IAEH,YAAY,SAAM;IAElB;;OAEG;IAEH,IAAI,SAAM;IAGV,OAAO,CAAC,MAAM,CAAoB;IAGlC,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,MAAM,CAAS;IAGvB,IAAI,IAAI,2BAEP;IAED,IAAI,QAAQ,kBAEX;IAED,IAAI,iBAAiB,WAEpB;IAED,IAAI,YAAY,YAEf;IAED,aAAa;IAIb,cAAc;IAId,iBAAiB;IAQjB,wBAAwB,CAAC,KAAK,EAAE,MAAM;IAItC,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,WAAW;IAKV,MAAM;IA2Cf,KAAK;IAIL,IAAI;IAIJ,MAAM;CAGP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,WAAW,CAAC;KAC9B;CACF"}
@@ -0,0 +1,281 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, css } from 'lit';
8
+ import { customElement, property, query, state } from 'lit/decorators.js';
9
+ import { live } from 'lit/directives/live.js';
10
+ /**
11
+ * A text field component that works with native browser forms.
12
+ *
13
+ * Uses ElementInternals for form association, allowing the component
14
+ * to participate in form submission, validation, and reset.
15
+ *
16
+ * Native input and change events bubble up from the inner input element.
17
+ */
18
+ let KRTextField = class KRTextField extends LitElement {
19
+ constructor() {
20
+ super();
21
+ /**
22
+ * The input label text
23
+ */
24
+ this.label = '';
25
+ /**
26
+ * The input name for form submission
27
+ */
28
+ this.name = '';
29
+ /**
30
+ * The current value
31
+ */
32
+ this.value = '';
33
+ /**
34
+ * Placeholder text
35
+ */
36
+ this.placeholder = '';
37
+ /**
38
+ * Input type (text, email, password, tel, url, search)
39
+ */
40
+ this.type = 'text';
41
+ /**
42
+ * Whether the field is required
43
+ */
44
+ this.required = false;
45
+ /**
46
+ * Whether the field is disabled
47
+ */
48
+ this.disabled = false;
49
+ /**
50
+ * Whether the field is readonly
51
+ */
52
+ this.readonly = false;
53
+ /**
54
+ * Autocomplete attribute value
55
+ */
56
+ this.autocomplete = '';
57
+ /**
58
+ * Helper text shown below the input
59
+ */
60
+ this.hint = '';
61
+ this._touched = false;
62
+ this._dirty = false;
63
+ this._internals = this.attachInternals();
64
+ }
65
+ // Form-associated custom element callbacks
66
+ get form() {
67
+ return this._internals.form;
68
+ }
69
+ get validity() {
70
+ return this._internals.validity;
71
+ }
72
+ get validationMessage() {
73
+ return this._internals.validationMessage;
74
+ }
75
+ get willValidate() {
76
+ return this._internals.willValidate;
77
+ }
78
+ checkValidity() {
79
+ return this._internals.checkValidity();
80
+ }
81
+ reportValidity() {
82
+ return this._internals.reportValidity();
83
+ }
84
+ formResetCallback() {
85
+ this.value = '';
86
+ this._touched = false;
87
+ this._dirty = false;
88
+ this._internals.setFormValue('');
89
+ this._internals.setValidity({});
90
+ }
91
+ formStateRestoreCallback(state) {
92
+ this.value = state;
93
+ }
94
+ _handleInput(e) {
95
+ this.value = e.target.value;
96
+ this._dirty = true;
97
+ this._internals.setFormValue(this.value);
98
+ this._internals.setValidity(this._input.validity, this._input.validationMessage, this._input);
99
+ }
100
+ _handleChange(e) {
101
+ this.value = e.target.value;
102
+ this._internals.setFormValue(this.value);
103
+ }
104
+ _handleBlur() {
105
+ this._touched = true;
106
+ this._internals.setValidity(this._input.validity, this._input.validationMessage, this._input);
107
+ }
108
+ render() {
109
+ let validationMessage = '';
110
+ if (this._touched && this._input && !this._input.validity.valid) {
111
+ validationMessage = this._input.validationMessage;
112
+ }
113
+ return html `
114
+ <div class="wrapper">
115
+ ${this.label
116
+ ? html `
117
+ <label for="input">
118
+ ${this.label}
119
+ ${this.required ? html `<span class="required" aria-hidden="true">*</span>` : ''}
120
+ </label>
121
+ `
122
+ : ''}
123
+ <input
124
+ id="input"
125
+ type=${this.type}
126
+ name=${this.name}
127
+ .value=${live(this.value)}
128
+ placeholder=${this.placeholder}
129
+ ?required=${this.required}
130
+ ?disabled=${this.disabled}
131
+ ?readonly=${this.readonly}
132
+ minlength=${this.minlength ?? ''}
133
+ maxlength=${this.maxlength ?? ''}
134
+ pattern=${this.pattern ?? ''}
135
+ autocomplete=${this.autocomplete}
136
+ @input=${this._handleInput}
137
+ @change=${this._handleChange}
138
+ @blur=${this._handleBlur}
139
+ />
140
+ ${validationMessage
141
+ ? html `<div class="validation-message">${validationMessage}</div>`
142
+ : this.hint
143
+ ? html `<div class="hint">${this.hint}</div>`
144
+ : ''}
145
+ </div>
146
+ `;
147
+ }
148
+ // Public methods for programmatic control
149
+ focus() {
150
+ this._input?.focus();
151
+ }
152
+ blur() {
153
+ this._input?.blur();
154
+ }
155
+ select() {
156
+ this._input?.select();
157
+ }
158
+ };
159
+ KRTextField.styles = css `
160
+ :host {
161
+ display: block;
162
+ font-family: inherit;
163
+ }
164
+
165
+ .wrapper {
166
+ display: flex;
167
+ flex-direction: column;
168
+ gap: 0.25rem;
169
+ }
170
+
171
+ label {
172
+ font-size: 13px;
173
+ font-weight: 500;
174
+ color: var(--kr-text-field-label-color, #374151);
175
+ }
176
+
177
+ .required {
178
+ color: var(--kr-text-field-required-color, #ef4444);
179
+ margin-left: 0.125rem;
180
+ }
181
+
182
+ input {
183
+ font-family: inherit;
184
+ font-size: 14px;
185
+ padding: 0.5rem 0.75rem;
186
+ border: 1px solid var(--kr-text-field-border-color, #d1d5db);
187
+ border-radius: 4px;
188
+ background-color: var(--kr-text-field-bg, #fff);
189
+ color: var(--kr-text-field-color, #111827);
190
+ transition: border-color 0.2s, box-shadow 0.2s;
191
+ }
192
+
193
+ input:focus {
194
+ outline: none;
195
+ border-color: var(--kr-text-field-focus-border-color, #2563eb);
196
+ box-shadow: 0 0 0 3px var(--kr-text-field-focus-ring-color, rgba(37, 99, 235, 0.1));
197
+ }
198
+
199
+ input:disabled {
200
+ background-color: var(--kr-text-field-disabled-bg, #f3f4f6);
201
+ color: var(--kr-text-field-disabled-color, #9ca3af);
202
+ cursor: not-allowed;
203
+ }
204
+
205
+ input::placeholder {
206
+ color: var(--kr-text-field-placeholder-color, #9ca3af);
207
+ }
208
+
209
+ :host(:invalid) input {
210
+ border-color: var(--kr-text-field-error-border-color, #ef4444);
211
+ }
212
+
213
+ :host(:invalid) input:focus {
214
+ box-shadow: 0 0 0 3px var(--kr-text-field-error-ring-color, rgba(239, 68, 68, 0.1));
215
+ }
216
+
217
+ .validation-message {
218
+ font-size: 0.75rem;
219
+ color: var(--kr-text-field-error-color, #ef4444);
220
+ }
221
+
222
+ .hint {
223
+ font-size: 0.75rem;
224
+ color: var(--kr-text-field-helper-color, #6b7280);
225
+ }
226
+ `;
227
+ // Enable form association
228
+ KRTextField.formAssociated = true;
229
+ __decorate([
230
+ property({ type: String })
231
+ ], KRTextField.prototype, "label", void 0);
232
+ __decorate([
233
+ property({ type: String })
234
+ ], KRTextField.prototype, "name", void 0);
235
+ __decorate([
236
+ property({ type: String })
237
+ ], KRTextField.prototype, "value", void 0);
238
+ __decorate([
239
+ property({ type: String })
240
+ ], KRTextField.prototype, "placeholder", void 0);
241
+ __decorate([
242
+ property({ type: String })
243
+ ], KRTextField.prototype, "type", void 0);
244
+ __decorate([
245
+ property({ type: Boolean })
246
+ ], KRTextField.prototype, "required", void 0);
247
+ __decorate([
248
+ property({ type: Boolean })
249
+ ], KRTextField.prototype, "disabled", void 0);
250
+ __decorate([
251
+ property({ type: Boolean })
252
+ ], KRTextField.prototype, "readonly", void 0);
253
+ __decorate([
254
+ property({ type: Number })
255
+ ], KRTextField.prototype, "minlength", void 0);
256
+ __decorate([
257
+ property({ type: Number })
258
+ ], KRTextField.prototype, "maxlength", void 0);
259
+ __decorate([
260
+ property({ type: String })
261
+ ], KRTextField.prototype, "pattern", void 0);
262
+ __decorate([
263
+ property({ type: String })
264
+ ], KRTextField.prototype, "autocomplete", void 0);
265
+ __decorate([
266
+ property({ type: String })
267
+ ], KRTextField.prototype, "hint", void 0);
268
+ __decorate([
269
+ query('input')
270
+ ], KRTextField.prototype, "_input", void 0);
271
+ __decorate([
272
+ state()
273
+ ], KRTextField.prototype, "_touched", void 0);
274
+ __decorate([
275
+ state()
276
+ ], KRTextField.prototype, "_dirty", void 0);
277
+ KRTextField = __decorate([
278
+ customElement('kr-text-field')
279
+ ], KRTextField);
280
+ export { KRTextField };
281
+ //# sourceMappingURL=text-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.js","sourceRoot":"","sources":["../../../src/form/text-field/text-field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { KRAccordion } from './accordion/accordion.js';
2
+ export { KRAlert } from './alert.js';
3
+ export { KRButton } from './button/button.js';
4
+ export { KRCodeDemo } from './code-demo/code-demo.js';
5
+ export { KRContextMenu } from './context-menu/context-menu.js';
6
+ export { KRDialog, DialogRef } from './dialog/dialog.js';
7
+ export { KRTextField } from './form/index.js';
8
+ export type { ContextMenuItem, ContextMenuOptions } from './context-menu/context-menu.js';
9
+ export type { DialogConfig } from './dialog/dialog.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ // Components
2
+ export { KRAccordion } from './accordion/accordion.js';
3
+ export { KRAlert } from './alert.js';
4
+ export { KRButton } from './button/button.js';
5
+ export { KRCodeDemo } from './code-demo/code-demo.js';
6
+ export { KRContextMenu } from './context-menu/context-menu.js';
7
+ export { KRDialog, DialogRef } from './dialog/dialog.js';
8
+ // Form components
9
+ export { KRTextField } from './form/index.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEzD,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}