@cdevhub/ngx-tw 0.2.1 → 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.
Files changed (139) hide show
  1. package/README.md +264 -49
  2. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
  4. package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
  5. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
  6. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
  7. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
  8. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
  9. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
  10. package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
  11. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  12. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
  13. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
  15. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  16. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
  17. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
  19. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
  20. package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
  21. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
  23. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
  24. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
  25. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  26. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
  27. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
  28. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
  29. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  30. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
  33. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
  34. package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
  35. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
  37. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  38. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
  39. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  40. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
  41. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
  43. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
  44. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
  45. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
  46. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
  47. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
  48. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
  49. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  50. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
  51. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
  52. package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
  53. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
  54. package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
  55. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  56. package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
  57. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  58. package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
  59. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
  60. package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
  61. package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
  62. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
  63. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  64. package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
  65. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  66. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
  67. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
  68. package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
  69. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  70. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
  71. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
  72. package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
  73. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  74. package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
  75. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
  76. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
  77. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
  78. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
  79. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
  80. package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
  81. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  82. package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
  83. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
  84. package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
  85. package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
  86. package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
  87. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
  88. package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
  89. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
  90. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
  91. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
  92. package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
  93. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  94. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
  95. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
  96. package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
  97. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
  98. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
  99. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  100. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
  101. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
  102. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
  103. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
  104. package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
  105. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  106. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
  107. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  108. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
  109. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
  110. package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
  111. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
  112. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
  113. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
  114. package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
  115. package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
  116. package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
  117. package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
  118. package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
  119. package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
  120. package/package.json +45 -20
  121. package/theme/index.css +10 -2
  122. package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
  123. package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
  124. package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
  125. package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
  126. package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
  127. package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
  128. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
  129. package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
  130. package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
  131. package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
  132. package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
  133. package/types/cdevhub-ngx-tw-table.d.ts +30 -1
  134. package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
  135. package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
  136. package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
  137. package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
  138. package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
  139. 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: "21.2.14", ngImport: i0, type: EmptyStateIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
90
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: EmptyStateIconDirective, isStandalone: true, selector: "[twEmptyStateIcon]", ngImport: i0 });
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: "21.2.14", ngImport: i0, type: EmptyStateIconDirective, decorators: [{
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: "21.2.14", ngImport: i0, type: EmptyStateTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
112
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: EmptyStateTitleDirective, isStandalone: true, selector: "[twEmptyStateTitle]", ngImport: i0 });
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: "21.2.14", ngImport: i0, type: EmptyStateTitleDirective, decorators: [{
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: "21.2.14", ngImport: i0, type: EmptyStateDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
134
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: EmptyStateDescriptionDirective, isStandalone: true, selector: "[twEmptyStateDescription]", ngImport: i0 });
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: "21.2.14", ngImport: i0, type: EmptyStateDescriptionDirective, decorators: [{
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: "21.2.14", ngImport: i0, type: EmptyStateActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
147
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: EmptyStateActionsDirective, isStandalone: true, selector: "[twEmptyStateActions]", host: { properties: { "class": "classes()" } }, ngImport: i0 });
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: "21.2.14", ngImport: i0, type: EmptyStateActionsDirective, decorators: [{
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', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
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', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
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(...(ngDevMode ? [undefined, { debugName: "title" }] : /* istanbul ignore next */ []));
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(...(ngDevMode ? [undefined, { debugName: "description" }] : /* istanbul ignore next */ []));
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, ...(ngDevMode ? [{ debugName: "titleLevel" }] : /* istanbul ignore next */ []));
181
+ titleLevel = input(3, /* @ts-ignore */
182
+ ...(ngDevMode ? [{ debugName: "titleLevel" }] : /* istanbul ignore next */ []));
178
183
  /** @internal */
179
- titleSlot = contentChild(EmptyStateTitleDirective, ...(ngDevMode ? [{ debugName: "titleSlot" }] : /* istanbul ignore next */ []));
184
+ titleSlot = contentChild(EmptyStateTitleDirective, /* @ts-ignore */
185
+ ...(ngDevMode ? [{ debugName: "titleSlot" }] : /* istanbul ignore next */ []));
180
186
  /** @internal */
181
- descriptionSlot = contentChild(EmptyStateDescriptionDirective, ...(ngDevMode ? [{ debugName: "descriptionSlot" }] : /* istanbul ignore next */ []));
182
- hasTitleSlot = computed(() => !!this.titleSlot(), ...(ngDevMode ? [{ debugName: "hasTitleSlot" }] : /* istanbul ignore next */ []));
183
- hasDescriptionSlot = computed(() => !!this.descriptionSlot(), ...(ngDevMode ? [{ debugName: "hasDescriptionSlot" }] : /* istanbul ignore next */ []));
184
- hasTitle = computed(() => this.hasTitleSlot() || !!this.title()?.trim(), ...(ngDevMode ? [{ debugName: "hasTitle" }] : /* istanbul ignore next */ []));
185
- hasDescription = computed(() => this.hasDescriptionSlot() || !!this.description()?.trim(), ...(ngDevMode ? [{ debugName: "hasDescription" }] : /* istanbul ignore next */ []));
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
- }, ...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
206
- variantResult = computed(() => emptyState({ variant: this.variant(), size: this.size() }), ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
207
- rootClasses = computed(() => this.variantResult().root(), ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
208
- iconWrapperClasses = computed(() => this.variantResult().iconWrapper(), ...(ngDevMode ? [{ debugName: "iconWrapperClasses" }] : /* istanbul ignore next */ []));
209
- titleClasses = computed(() => this.variantResult().title(), ...(ngDevMode ? [{ debugName: "titleClasses" }] : /* istanbul ignore next */ []));
210
- descriptionClasses = computed(() => this.variantResult().description(), ...(ngDevMode ? [{ debugName: "descriptionClasses" }] : /* istanbul ignore next */ []));
211
- actionsClasses = computed(() => this.variantResult().actions(), ...(ngDevMode ? [{ debugName: "actionsClasses" }] : /* istanbul ignore next */ []));
212
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
213
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", 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: `
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: "21.2.14", ngImport: i0, type: EmptyStateComponent, decorators: [{
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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"}