@cdevhub/ngx-tw 0.2.0 → 0.3.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.
- package/README.md +264 -49
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
- package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-button.mjs +35 -22
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs +416 -216
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs +152 -81
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs +42 -29
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +205 -110
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +141 -74
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
- package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +395 -149
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
- package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
- package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +142 -72
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
- package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
- package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-select.mjs +227 -122
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
- package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sort.mjs +47 -25
- package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
- package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
- package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
- package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs +102 -52
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs +16 -8
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
- package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +100 -55
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
- package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
- package/package.json +45 -17
- package/theme/_dark.css +16 -12
- package/theme/_semantic.css +3 -2
- package/theme/index.css +10 -2
- package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
- package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
- package/types/cdevhub-ngx-tw-code-block.d.ts +8 -7
- package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
- package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
- package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
- package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
- package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
- package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
- package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
- package/types/cdevhub-ngx-tw-select.d.ts +1 -1
- package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
- package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
- package/types/cdevhub-ngx-tw-table.d.ts +30 -1
- package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
- package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
- package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
- package/types/cdevhub-ngx-tw-toast.d.ts +1 -1
- package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
- package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
- package/types/cdevhub-ngx-tw.d.ts +7 -0
|
@@ -86,10 +86,10 @@ const emptyState = tv({
|
|
|
86
86
|
* ```
|
|
87
87
|
*/
|
|
88
88
|
class EmptyStateIconDirective {
|
|
89
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
90
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
89
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
90
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: EmptyStateIconDirective, isStandalone: true, selector: "[twEmptyStateIcon]", ngImport: i0 });
|
|
91
91
|
}
|
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateIconDirective, decorators: [{
|
|
93
93
|
type: Directive,
|
|
94
94
|
args: [{
|
|
95
95
|
selector: '[twEmptyStateIcon]',
|
|
@@ -108,10 +108,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
108
108
|
*/
|
|
109
109
|
class EmptyStateTitleDirective {
|
|
110
110
|
templateRef = inject(TemplateRef);
|
|
111
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
112
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
111
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
112
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: EmptyStateTitleDirective, isStandalone: true, selector: "[twEmptyStateTitle]", ngImport: i0 });
|
|
113
113
|
}
|
|
114
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateTitleDirective, decorators: [{
|
|
115
115
|
type: Directive,
|
|
116
116
|
args: [{
|
|
117
117
|
selector: '[twEmptyStateTitle]',
|
|
@@ -130,10 +130,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
130
130
|
*/
|
|
131
131
|
class EmptyStateDescriptionDirective {
|
|
132
132
|
templateRef = inject(TemplateRef);
|
|
133
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
134
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
133
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
134
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: EmptyStateDescriptionDirective, isStandalone: true, selector: "[twEmptyStateDescription]", ngImport: i0 });
|
|
135
135
|
}
|
|
136
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateDescriptionDirective, decorators: [{
|
|
137
137
|
type: Directive,
|
|
138
138
|
args: [{
|
|
139
139
|
selector: '[twEmptyStateDescription]',
|
|
@@ -143,10 +143,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
143
143
|
class EmptyStateActionsDirective {
|
|
144
144
|
emptyStateRef = inject(EmptyStateComponent);
|
|
145
145
|
classes = this.emptyStateRef.actionsClasses;
|
|
146
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
147
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
146
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
147
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: EmptyStateActionsDirective, isStandalone: true, selector: "[twEmptyStateActions]", host: { properties: { "class": "classes()" } }, ngImport: i0 });
|
|
148
148
|
}
|
|
149
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateActionsDirective, decorators: [{
|
|
150
150
|
type: Directive,
|
|
151
151
|
args: [{
|
|
152
152
|
selector: '[twEmptyStateActions]',
|
|
@@ -166,23 +166,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
166
166
|
*/
|
|
167
167
|
class EmptyStateComponent {
|
|
168
168
|
/** Controls overall spacing and icon scale. Defaults to `'md'`. */
|
|
169
|
-
size = input('md',
|
|
169
|
+
size = input('md', /* @ts-ignore */
|
|
170
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
170
171
|
/** Layout style. `'centered'` stacks icon/title/description/actions vertically with center alignment for full-region usage; `'inline'` arranges them horizontally for compact rows. Defaults to `'centered'`. */
|
|
171
|
-
variant = input('centered',
|
|
172
|
+
variant = input('centered', /* @ts-ignore */
|
|
173
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
172
174
|
/** Primary heading text. Projected `*twEmptyStateTitle` content takes precedence. Defaults to `undefined`. */
|
|
173
|
-
title = input(
|
|
175
|
+
title = input(/* @ts-ignore */
|
|
176
|
+
...(ngDevMode ? [undefined, { debugName: "title" }] : /* istanbul ignore next */ []));
|
|
174
177
|
/** Secondary descriptive text. Projected `*twEmptyStateDescription` content takes precedence. Defaults to `undefined`. */
|
|
175
|
-
description = input(
|
|
178
|
+
description = input(/* @ts-ignore */
|
|
179
|
+
...(ngDevMode ? [undefined, { debugName: "description" }] : /* istanbul ignore next */ []));
|
|
176
180
|
/** Heading level used for the title element. Set to match the surrounding document outline. Defaults to `3`. */
|
|
177
|
-
titleLevel = input(3,
|
|
181
|
+
titleLevel = input(3, /* @ts-ignore */
|
|
182
|
+
...(ngDevMode ? [{ debugName: "titleLevel" }] : /* istanbul ignore next */ []));
|
|
178
183
|
/** @internal */
|
|
179
|
-
titleSlot = contentChild(EmptyStateTitleDirective,
|
|
184
|
+
titleSlot = contentChild(EmptyStateTitleDirective, /* @ts-ignore */
|
|
185
|
+
...(ngDevMode ? [{ debugName: "titleSlot" }] : /* istanbul ignore next */ []));
|
|
180
186
|
/** @internal */
|
|
181
|
-
descriptionSlot = contentChild(EmptyStateDescriptionDirective,
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
187
|
+
descriptionSlot = contentChild(EmptyStateDescriptionDirective, /* @ts-ignore */
|
|
188
|
+
...(ngDevMode ? [{ debugName: "descriptionSlot" }] : /* istanbul ignore next */ []));
|
|
189
|
+
hasTitleSlot = computed(() => !!this.titleSlot(), /* @ts-ignore */
|
|
190
|
+
...(ngDevMode ? [{ debugName: "hasTitleSlot" }] : /* istanbul ignore next */ []));
|
|
191
|
+
hasDescriptionSlot = computed(() => !!this.descriptionSlot(), /* @ts-ignore */
|
|
192
|
+
...(ngDevMode ? [{ debugName: "hasDescriptionSlot" }] : /* istanbul ignore next */ []));
|
|
193
|
+
hasTitle = computed(() => this.hasTitleSlot() || !!this.title()?.trim(), /* @ts-ignore */
|
|
194
|
+
...(ngDevMode ? [{ debugName: "hasTitle" }] : /* istanbul ignore next */ []));
|
|
195
|
+
hasDescription = computed(() => this.hasDescriptionSlot() || !!this.description()?.trim(), /* @ts-ignore */
|
|
196
|
+
...(ngDevMode ? [{ debugName: "hasDescription" }] : /* istanbul ignore next */ []));
|
|
186
197
|
/** Size passed to the fallback `<tw-icon>` per CLAUDE.md glyph sub-scale. */
|
|
187
198
|
iconSize = computed(() => {
|
|
188
199
|
const size = this.size();
|
|
@@ -202,15 +213,22 @@ class EmptyStateComponent {
|
|
|
202
213
|
case 'lg': return 'xl';
|
|
203
214
|
case 'xl': return 'xl';
|
|
204
215
|
}
|
|
205
|
-
},
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
216
|
+
}, /* @ts-ignore */
|
|
217
|
+
...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
|
|
218
|
+
variantResult = computed(() => emptyState({ variant: this.variant(), size: this.size() }), /* @ts-ignore */
|
|
219
|
+
...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
|
|
220
|
+
rootClasses = computed(() => this.variantResult().root(), /* @ts-ignore */
|
|
221
|
+
...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
|
|
222
|
+
iconWrapperClasses = computed(() => this.variantResult().iconWrapper(), /* @ts-ignore */
|
|
223
|
+
...(ngDevMode ? [{ debugName: "iconWrapperClasses" }] : /* istanbul ignore next */ []));
|
|
224
|
+
titleClasses = computed(() => this.variantResult().title(), /* @ts-ignore */
|
|
225
|
+
...(ngDevMode ? [{ debugName: "titleClasses" }] : /* istanbul ignore next */ []));
|
|
226
|
+
descriptionClasses = computed(() => this.variantResult().description(), /* @ts-ignore */
|
|
227
|
+
...(ngDevMode ? [{ debugName: "descriptionClasses" }] : /* istanbul ignore next */ []));
|
|
228
|
+
actionsClasses = computed(() => this.variantResult().actions(), /* @ts-ignore */
|
|
229
|
+
...(ngDevMode ? [{ debugName: "actionsClasses" }] : /* istanbul ignore next */ []));
|
|
230
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
231
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: EmptyStateComponent, isStandalone: true, selector: "tw-empty-state", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, titleLevel: { classPropertyName: "titleLevel", publicName: "titleLevel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "rootClasses()" } }, queries: [{ propertyName: "titleSlot", first: true, predicate: EmptyStateTitleDirective, descendants: true, isSignal: true }, { propertyName: "descriptionSlot", first: true, predicate: EmptyStateDescriptionDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
214
232
|
<ng-template #titleBody>
|
|
215
233
|
@if (titleSlot(); as slot) {
|
|
216
234
|
<ng-container [ngTemplateOutlet]="slot.templateRef" />
|
|
@@ -261,7 +279,7 @@ class EmptyStateComponent {
|
|
|
261
279
|
<ng-content select="[twEmptyStateActions]" />
|
|
262
280
|
`, isInline: true, dependencies: [{ kind: "component", type: IconComponent, selector: "tw-icon", inputs: ["name", "img", "color", "size", "ariaLabel", "svg"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
263
281
|
}
|
|
264
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: EmptyStateComponent, decorators: [{
|
|
265
283
|
type: Component,
|
|
266
284
|
args: [{
|
|
267
285
|
selector: 'tw-empty-state',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdevhub-ngx-tw-empty-state.mjs","sources":["../../../projects/ngx-tw/empty-state/empty-state.ts","../../../projects/ngx-tw/empty-state/cdevhub-ngx-tw-empty-state.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n inject,\n input,\n TemplateRef,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\nimport type { TwSize } from '@cdevhub/ngx-tw/core';\nimport { IconComponent } from '@cdevhub/ngx-tw/icon';\n\n/** Layout style of the empty state. */\nexport type EmptyStateVariant = 'centered' | 'inline';\n\n/** Heading level for the title element. Matches native `<h1>`–`<h6>`. */\nexport type EmptyStateTitleLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nconst emptyState = tv({\n slots: {\n root: 'text-fg',\n iconWrapper: 'text-fg-subtle shrink-0',\n // Title typography is constant across all sizes per CLAUDE.md typography\n // rules: `text-base` is permitted only for the codified tw-item lg\n // exception. Consumers wanting a larger heading project\n // `*twEmptyStateTitle` with their own typography.\n title: 'text-sm font-semibold text-fg',\n description: 'text-fg-muted',\n actions: 'flex flex-wrap items-center gap-2',\n },\n variants: {\n variant: {\n centered: {\n root: 'flex flex-col items-center justify-center text-center',\n actions: 'justify-center',\n },\n inline: {\n root: 'flex flex-row items-center text-left',\n actions: 'ml-auto',\n },\n },\n size: {\n xs: {\n root: 'p-2 gap-1.5',\n description: 'text-xs',\n },\n sm: {\n root: 'p-3 gap-2',\n description: 'text-sm',\n },\n md: {\n root: 'p-4 gap-3',\n description: 'text-sm',\n },\n lg: {\n root: 'p-6 gap-3',\n description: 'text-sm',\n },\n xl: {\n root: 'p-8 gap-3',\n description: 'text-sm',\n },\n },\n },\n compoundVariants: [\n // Inline variant tightens vertical padding regardless of size so the\n // empty state can act as a table row without dominating row height. The\n // horizontal padding still comes from the size's root entry.\n //\n // The py-1.5 → py-2 → py-3 → py-4 → py-5 progression is design-specified\n // off the canonical inline-padding scale: each step keeps the inline\n // empty state visually distinct from adjacent rows without jumping a\n // full container-padding step (py-6 / py-8) and crowding the row.\n // py-1.5 matches the sm inline-padding density; py-5 is the in-between\n // step before xl rows take a container-padding step.\n { variant: 'inline', size: 'xs', class: { root: 'py-1.5 gap-2' } },\n { variant: 'inline', size: 'sm', class: { root: 'py-2 gap-3' } },\n { variant: 'inline', size: 'md', class: { root: 'py-3 gap-3' } },\n { variant: 'inline', size: 'lg', class: { root: 'py-4 gap-3' } },\n { variant: 'inline', size: 'xl', class: { root: 'py-5 gap-3' } },\n ],\n defaultVariants: {\n variant: 'centered',\n size: 'md',\n },\n}, {\n twMerge: true,\n});\n\n/**\n * Icon-slot marker. Project an icon element with `twEmptyStateIcon` to\n * replace the fallback `<tw-icon name=\"inbox\">`.\n *\n * @example\n * ```html\n * <tw-empty-state>\n * <tw-icon twEmptyStateIcon name=\"search\" />\n * </tw-empty-state>\n * ```\n */\n@Directive({\n selector: '[twEmptyStateIcon]',\n})\nexport class EmptyStateIconDirective {}\n\n/**\n * Structural title slot. Captures a `TemplateRef` so the heading can be\n * rendered into the dynamic `<h1>`–`<h6>` wrapper at runtime.\n *\n * @example\n * ```html\n * <tw-empty-state>\n * <span *twEmptyStateTitle>No results <tw-badge>0</tw-badge></span>\n * </tw-empty-state>\n * ```\n */\n@Directive({\n selector: '[twEmptyStateTitle]',\n})\nexport class EmptyStateTitleDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * Structural description slot. Captures a `TemplateRef` so the content can\n * be rendered into the `<p>` wrapper.\n *\n * @example\n * ```html\n * <tw-empty-state>\n * <span *twEmptyStateDescription>Try a <a href=\"…\">different search</a>.</span>\n * </tw-empty-state>\n * ```\n */\n@Directive({\n selector: '[twEmptyStateDescription]',\n})\nexport class EmptyStateDescriptionDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/** Actions-slot directive. Carries the actions row classes (`flex gap-2` etc.) on its host. */\n@Directive({\n selector: '[twEmptyStateActions]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class EmptyStateActionsDirective {\n private readonly emptyStateRef = inject(EmptyStateComponent);\n readonly classes = this.emptyStateRef.actionsClasses;\n}\n\n/**\n * Zero-data layout primitive. Renders an icon, title, description, and\n * actions for surfaces that have nothing to display.\n *\n * The component is intentionally neutral — accent comes from projected\n * action buttons. It does not announce itself: consumers that want a live\n * announcement (e.g. \"no search results found\") wrap the component with\n * `<div role=\"status\" aria-live=\"polite\">…</div>` themselves.\n */\n@Component({\n selector: 'tw-empty-state',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [IconComponent, NgTemplateOutlet],\n host: {\n '[class]': 'rootClasses()',\n },\n template: `\n <ng-template #titleBody>\n @if (titleSlot(); as slot) {\n <ng-container [ngTemplateOutlet]=\"slot.templateRef\" />\n } @else {\n {{ title() }}\n }\n </ng-template>\n\n <ng-template #descriptionBody>\n @if (descriptionSlot(); as slot) {\n <ng-container [ngTemplateOutlet]=\"slot.templateRef\" />\n } @else {\n {{ description() }}\n }\n </ng-template>\n\n <ng-template #titleBlock>\n @switch (titleLevel()) {\n @case (1) { <h1 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h1> }\n @case (2) { <h2 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h2> }\n @case (4) { <h4 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h4> }\n @case (5) { <h5 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h5> }\n @case (6) { <h6 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h6> }\n @default { <h3 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h3> }\n }\n </ng-template>\n\n <ng-template #descriptionBlock>\n <p [class]=\"descriptionClasses()\"><ng-container [ngTemplateOutlet]=\"descriptionBody\" /></p>\n </ng-template>\n\n <div [class]=\"iconWrapperClasses()\">\n <ng-content select=\"[twEmptyStateIcon]\">\n <tw-icon name=\"inbox\" [size]=\"iconSize()\" aria-hidden=\"true\" />\n </ng-content>\n </div>\n\n @if (variant() === 'inline' && (hasTitle() || hasDescription())) {\n <div class=\"min-w-0 flex-1\">\n @if (hasTitle()) { <ng-container [ngTemplateOutlet]=\"titleBlock\" /> }\n @if (hasDescription()) { <ng-container [ngTemplateOutlet]=\"descriptionBlock\" /> }\n </div>\n } @else {\n @if (hasTitle()) { <ng-container [ngTemplateOutlet]=\"titleBlock\" /> }\n @if (hasDescription()) { <ng-container [ngTemplateOutlet]=\"descriptionBlock\" /> }\n }\n\n <ng-content select=\"[twEmptyStateActions]\" />\n `,\n})\nexport class EmptyStateComponent {\n /** Controls overall spacing and icon scale. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Layout style. `'centered'` stacks icon/title/description/actions vertically with center alignment for full-region usage; `'inline'` arranges them horizontally for compact rows. Defaults to `'centered'`. */\n readonly variant = input<EmptyStateVariant>('centered');\n\n /** Primary heading text. Projected `*twEmptyStateTitle` content takes precedence. Defaults to `undefined`. */\n readonly title = input<string>();\n\n /** Secondary descriptive text. Projected `*twEmptyStateDescription` content takes precedence. Defaults to `undefined`. */\n readonly description = input<string>();\n\n /** Heading level used for the title element. Set to match the surrounding document outline. Defaults to `3`. */\n readonly titleLevel = input<EmptyStateTitleLevel>(3);\n\n /** @internal */\n readonly titleSlot = contentChild(EmptyStateTitleDirective);\n /** @internal */\n readonly descriptionSlot = contentChild(EmptyStateDescriptionDirective);\n\n readonly hasTitleSlot = computed(() => !!this.titleSlot());\n readonly hasDescriptionSlot = computed(() => !!this.descriptionSlot());\n\n readonly hasTitle = computed(\n () => this.hasTitleSlot() || !!this.title()?.trim(),\n );\n readonly hasDescription = computed(\n () => this.hasDescriptionSlot() || !!this.description()?.trim(),\n );\n\n /** Size passed to the fallback `<tw-icon>` per CLAUDE.md glyph sub-scale. */\n readonly iconSize = computed<TwSize>(() => {\n const size = this.size();\n if (this.variant() === 'inline') {\n switch (size) {\n case 'xs': return 'xs';\n case 'sm': return 'sm';\n case 'md': return 'md';\n case 'lg': return 'lg';\n case 'xl': return 'lg';\n }\n }\n switch (size) {\n case 'xs': return 'sm';\n case 'sm': return 'md';\n case 'md': return 'xl';\n case 'lg': return 'xl';\n case 'xl': return 'xl';\n }\n });\n\n private readonly variantResult = computed(() =>\n emptyState({ variant: this.variant(), size: this.size() }),\n );\n\n readonly rootClasses = computed(() => this.variantResult().root());\n readonly iconWrapperClasses = computed(() => this.variantResult().iconWrapper());\n readonly titleClasses = computed(() => this.variantResult().title());\n readonly descriptionClasses = computed(() => this.variantResult().description());\n readonly actionsClasses = computed(() => this.variantResult().actions());\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdevhub-ngx-tw-empty-state.mjs","sources":["../../../projects/ngx-tw/empty-state/empty-state.ts","../../../projects/ngx-tw/empty-state/cdevhub-ngx-tw-empty-state.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n inject,\n input,\n TemplateRef,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\nimport type { TwSize } from '@cdevhub/ngx-tw/core';\nimport { IconComponent } from '@cdevhub/ngx-tw/icon';\n\n/** Layout style of the empty state. */\nexport type EmptyStateVariant = 'centered' | 'inline';\n\n/** Heading level for the title element. Matches native `<h1>`–`<h6>`. */\nexport type EmptyStateTitleLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nconst emptyState = tv({\n slots: {\n root: 'text-fg',\n iconWrapper: 'text-fg-subtle shrink-0',\n // Title typography is constant across all sizes per CLAUDE.md typography\n // rules: `text-base` is permitted only for the codified tw-item lg\n // exception. Consumers wanting a larger heading project\n // `*twEmptyStateTitle` with their own typography.\n title: 'text-sm font-semibold text-fg',\n description: 'text-fg-muted',\n actions: 'flex flex-wrap items-center gap-2',\n },\n variants: {\n variant: {\n centered: {\n root: 'flex flex-col items-center justify-center text-center',\n actions: 'justify-center',\n },\n inline: {\n root: 'flex flex-row items-center text-left',\n actions: 'ml-auto',\n },\n },\n size: {\n xs: {\n root: 'p-2 gap-1.5',\n description: 'text-xs',\n },\n sm: {\n root: 'p-3 gap-2',\n description: 'text-sm',\n },\n md: {\n root: 'p-4 gap-3',\n description: 'text-sm',\n },\n lg: {\n root: 'p-6 gap-3',\n description: 'text-sm',\n },\n xl: {\n root: 'p-8 gap-3',\n description: 'text-sm',\n },\n },\n },\n compoundVariants: [\n // Inline variant tightens vertical padding regardless of size so the\n // empty state can act as a table row without dominating row height. The\n // horizontal padding still comes from the size's root entry.\n //\n // The py-1.5 → py-2 → py-3 → py-4 → py-5 progression is design-specified\n // off the canonical inline-padding scale: each step keeps the inline\n // empty state visually distinct from adjacent rows without jumping a\n // full container-padding step (py-6 / py-8) and crowding the row.\n // py-1.5 matches the sm inline-padding density; py-5 is the in-between\n // step before xl rows take a container-padding step.\n { variant: 'inline', size: 'xs', class: { root: 'py-1.5 gap-2' } },\n { variant: 'inline', size: 'sm', class: { root: 'py-2 gap-3' } },\n { variant: 'inline', size: 'md', class: { root: 'py-3 gap-3' } },\n { variant: 'inline', size: 'lg', class: { root: 'py-4 gap-3' } },\n { variant: 'inline', size: 'xl', class: { root: 'py-5 gap-3' } },\n ],\n defaultVariants: {\n variant: 'centered',\n size: 'md',\n },\n}, {\n twMerge: true,\n});\n\n/**\n * Icon-slot marker. Project an icon element with `twEmptyStateIcon` to\n * replace the fallback `<tw-icon name=\"inbox\">`.\n *\n * @example\n * ```html\n * <tw-empty-state>\n * <tw-icon twEmptyStateIcon name=\"search\" />\n * </tw-empty-state>\n * ```\n */\n@Directive({\n selector: '[twEmptyStateIcon]',\n})\nexport class EmptyStateIconDirective {}\n\n/**\n * Structural title slot. Captures a `TemplateRef` so the heading can be\n * rendered into the dynamic `<h1>`–`<h6>` wrapper at runtime.\n *\n * @example\n * ```html\n * <tw-empty-state>\n * <span *twEmptyStateTitle>No results <tw-badge>0</tw-badge></span>\n * </tw-empty-state>\n * ```\n */\n@Directive({\n selector: '[twEmptyStateTitle]',\n})\nexport class EmptyStateTitleDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * Structural description slot. Captures a `TemplateRef` so the content can\n * be rendered into the `<p>` wrapper.\n *\n * @example\n * ```html\n * <tw-empty-state>\n * <span *twEmptyStateDescription>Try a <a href=\"…\">different search</a>.</span>\n * </tw-empty-state>\n * ```\n */\n@Directive({\n selector: '[twEmptyStateDescription]',\n})\nexport class EmptyStateDescriptionDirective {\n readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/** Actions-slot directive. Carries the actions row classes (`flex gap-2` etc.) on its host. */\n@Directive({\n selector: '[twEmptyStateActions]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class EmptyStateActionsDirective {\n private readonly emptyStateRef = inject(EmptyStateComponent);\n readonly classes = this.emptyStateRef.actionsClasses;\n}\n\n/**\n * Zero-data layout primitive. Renders an icon, title, description, and\n * actions for surfaces that have nothing to display.\n *\n * The component is intentionally neutral — accent comes from projected\n * action buttons. It does not announce itself: consumers that want a live\n * announcement (e.g. \"no search results found\") wrap the component with\n * `<div role=\"status\" aria-live=\"polite\">…</div>` themselves.\n */\n@Component({\n selector: 'tw-empty-state',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [IconComponent, NgTemplateOutlet],\n host: {\n '[class]': 'rootClasses()',\n },\n template: `\n <ng-template #titleBody>\n @if (titleSlot(); as slot) {\n <ng-container [ngTemplateOutlet]=\"slot.templateRef\" />\n } @else {\n {{ title() }}\n }\n </ng-template>\n\n <ng-template #descriptionBody>\n @if (descriptionSlot(); as slot) {\n <ng-container [ngTemplateOutlet]=\"slot.templateRef\" />\n } @else {\n {{ description() }}\n }\n </ng-template>\n\n <ng-template #titleBlock>\n @switch (titleLevel()) {\n @case (1) { <h1 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h1> }\n @case (2) { <h2 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h2> }\n @case (4) { <h4 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h4> }\n @case (5) { <h5 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h5> }\n @case (6) { <h6 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h6> }\n @default { <h3 [class]=\"titleClasses()\"><ng-container [ngTemplateOutlet]=\"titleBody\" /></h3> }\n }\n </ng-template>\n\n <ng-template #descriptionBlock>\n <p [class]=\"descriptionClasses()\"><ng-container [ngTemplateOutlet]=\"descriptionBody\" /></p>\n </ng-template>\n\n <div [class]=\"iconWrapperClasses()\">\n <ng-content select=\"[twEmptyStateIcon]\">\n <tw-icon name=\"inbox\" [size]=\"iconSize()\" aria-hidden=\"true\" />\n </ng-content>\n </div>\n\n @if (variant() === 'inline' && (hasTitle() || hasDescription())) {\n <div class=\"min-w-0 flex-1\">\n @if (hasTitle()) { <ng-container [ngTemplateOutlet]=\"titleBlock\" /> }\n @if (hasDescription()) { <ng-container [ngTemplateOutlet]=\"descriptionBlock\" /> }\n </div>\n } @else {\n @if (hasTitle()) { <ng-container [ngTemplateOutlet]=\"titleBlock\" /> }\n @if (hasDescription()) { <ng-container [ngTemplateOutlet]=\"descriptionBlock\" /> }\n }\n\n <ng-content select=\"[twEmptyStateActions]\" />\n `,\n})\nexport class EmptyStateComponent {\n /** Controls overall spacing and icon scale. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Layout style. `'centered'` stacks icon/title/description/actions vertically with center alignment for full-region usage; `'inline'` arranges them horizontally for compact rows. Defaults to `'centered'`. */\n readonly variant = input<EmptyStateVariant>('centered');\n\n /** Primary heading text. Projected `*twEmptyStateTitle` content takes precedence. Defaults to `undefined`. */\n readonly title = input<string>();\n\n /** Secondary descriptive text. Projected `*twEmptyStateDescription` content takes precedence. Defaults to `undefined`. */\n readonly description = input<string>();\n\n /** Heading level used for the title element. Set to match the surrounding document outline. Defaults to `3`. */\n readonly titleLevel = input<EmptyStateTitleLevel>(3);\n\n /** @internal */\n readonly titleSlot = contentChild(EmptyStateTitleDirective);\n /** @internal */\n readonly descriptionSlot = contentChild(EmptyStateDescriptionDirective);\n\n readonly hasTitleSlot = computed(() => !!this.titleSlot());\n readonly hasDescriptionSlot = computed(() => !!this.descriptionSlot());\n\n readonly hasTitle = computed(\n () => this.hasTitleSlot() || !!this.title()?.trim(),\n );\n readonly hasDescription = computed(\n () => this.hasDescriptionSlot() || !!this.description()?.trim(),\n );\n\n /** Size passed to the fallback `<tw-icon>` per CLAUDE.md glyph sub-scale. */\n readonly iconSize = computed<TwSize>(() => {\n const size = this.size();\n if (this.variant() === 'inline') {\n switch (size) {\n case 'xs': return 'xs';\n case 'sm': return 'sm';\n case 'md': return 'md';\n case 'lg': return 'lg';\n case 'xl': return 'lg';\n }\n }\n switch (size) {\n case 'xs': return 'sm';\n case 'sm': return 'md';\n case 'md': return 'xl';\n case 'lg': return 'xl';\n case 'xl': return 'xl';\n }\n });\n\n private readonly variantResult = computed(() =>\n emptyState({ variant: this.variant(), size: this.size() }),\n );\n\n readonly rootClasses = computed(() => this.variantResult().root());\n readonly iconWrapperClasses = computed(() => this.variantResult().iconWrapper());\n readonly titleClasses = computed(() => this.variantResult().title());\n readonly descriptionClasses = computed(() => this.variantResult().description());\n readonly actionsClasses = computed(() => this.variantResult().actions());\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|