@cdevhub/ngx-tw 0.2.1 → 0.4.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 +24 -15
- 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 +408 -215
- 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 +144 -79
- 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 +34 -20
- 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 +195 -110
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
- 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 +393 -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 +137 -71
- 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 +217 -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 +44 -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 +101 -51
- 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 +11 -7
- 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 +89 -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/index.json +1 -0
- package/package.json +45 -20
- 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-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-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-transfer.d.ts +330 -0
- package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
- package/types/cdevhub-ngx-tw.d.ts +7 -0
|
@@ -139,23 +139,32 @@ let nextRadioId = 0;
|
|
|
139
139
|
// ── RadioComponent ───────────────────────────────────────────────
|
|
140
140
|
class RadioComponent {
|
|
141
141
|
/** The value this radio contributes when selected inside a `tw-radio-group`. Required when nested in a group; ignored when used standalone. */
|
|
142
|
-
value = input(undefined,
|
|
142
|
+
value = input(undefined, /* @ts-ignore */
|
|
143
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
143
144
|
/** Overrides the parent group's color for this radio. When undefined, inherits from the group (or defaults to `'primary'` standalone). */
|
|
144
|
-
color = input(undefined,
|
|
145
|
+
color = input(undefined, /* @ts-ignore */
|
|
146
|
+
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
145
147
|
/** Overrides the parent group's size for this radio. When undefined, inherits from the group (or defaults to `'md'` standalone). */
|
|
146
|
-
size = input(undefined,
|
|
148
|
+
size = input(undefined, /* @ts-ignore */
|
|
149
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
147
150
|
/** Overrides the parent group's variant for this radio. When undefined, inherits from the group (or defaults to `'solid'` standalone). */
|
|
148
|
-
variant = input(undefined,
|
|
151
|
+
variant = input(undefined, /* @ts-ignore */
|
|
152
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
149
153
|
/** When true, disables this radio regardless of the group's state. Group-disabled always wins as an OR. Defaults to `false`. */
|
|
150
|
-
disabled = input(false,
|
|
154
|
+
disabled = input(false, /* @ts-ignore */
|
|
155
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
151
156
|
/** Optional inline label rendered next to the radio. Use default content projection for rich label content instead. */
|
|
152
|
-
label = input(undefined,
|
|
157
|
+
label = input(undefined, /* @ts-ignore */
|
|
158
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
153
159
|
/** Optional secondary description rendered under the label. Use `[slot="description"]` content projection for rich content instead. */
|
|
154
|
-
description = input(undefined,
|
|
160
|
+
description = input(undefined, /* @ts-ignore */
|
|
161
|
+
...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
|
|
155
162
|
/** Position of the label/description relative to the radio. Defaults to `'after'`. */
|
|
156
|
-
labelPosition = input('after',
|
|
163
|
+
labelPosition = input('after', /* @ts-ignore */
|
|
164
|
+
...(ngDevMode ? [{ debugName: "labelPosition" }] : /* istanbul ignore next */ []));
|
|
157
165
|
/** Optional name attribute for standalone use. Ignored when the parent group provides a name. */
|
|
158
|
-
name = input(undefined,
|
|
166
|
+
name = input(undefined, /* @ts-ignore */
|
|
167
|
+
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
159
168
|
/** Accessible name when no visible label is provided. Mirrored to `aria-label`. */
|
|
160
169
|
ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
161
170
|
/** ID of an external element that labels the radio. Mirrored to `aria-labelledby`. */
|
|
@@ -163,9 +172,11 @@ class RadioComponent {
|
|
|
163
172
|
/** ID of an external element that describes the radio. Mirrored to `aria-describedby`. */
|
|
164
173
|
ariaDescribedby = input(undefined, { ...(ngDevMode ? { debugName: "ariaDescribedby" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
|
|
165
174
|
/** Two-way bound checked state. Authoritative only in standalone mode; when inside a `tw-radio-group`, this model reflects group selection but does NOT drive it. */
|
|
166
|
-
checked = model(false,
|
|
175
|
+
checked = model(false, /* @ts-ignore */
|
|
176
|
+
...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
|
|
167
177
|
/** Per-instance override of the {@link ErrorStateMatcher}. When omitted, the radio uses the `TW_ERROR_STATE_MATCHER` token's value. */
|
|
168
|
-
errorStateMatcher = input(undefined,
|
|
178
|
+
errorStateMatcher = input(undefined, /* @ts-ignore */
|
|
179
|
+
...(ngDevMode ? [{ debugName: "errorStateMatcher" }] : /* istanbul ignore next */ []));
|
|
169
180
|
/** Fires after the checked state changes from a user interaction on this radio. In grouped mode only fires when this radio becomes the selected one. Does not fire when selection is updated programmatically. */
|
|
170
181
|
change = output();
|
|
171
182
|
focusMonitor = inject(FocusMonitor);
|
|
@@ -178,30 +189,40 @@ class RadioComponent {
|
|
|
178
189
|
defaultMatcher = inject(TW_ERROR_STATE_MATCHER);
|
|
179
190
|
onChange = () => { };
|
|
180
191
|
onTouched = () => { };
|
|
181
|
-
cvaDisabled = signal(false,
|
|
182
|
-
|
|
183
|
-
|
|
192
|
+
cvaDisabled = signal(false, /* @ts-ignore */
|
|
193
|
+
...(ngDevMode ? [{ debugName: "cvaDisabled" }] : /* istanbul ignore next */ []));
|
|
194
|
+
_ngControlRev = signal(0, /* @ts-ignore */
|
|
195
|
+
...(ngDevMode ? [{ debugName: "_ngControlRev" }] : /* istanbul ignore next */ []));
|
|
196
|
+
_formSubmitRev = signal(0, /* @ts-ignore */
|
|
197
|
+
...(ngDevMode ? [{ debugName: "_formSubmitRev" }] : /* istanbul ignore next */ []));
|
|
184
198
|
uid = nextRadioId++;
|
|
185
199
|
hostId = `tw-radio-${this.uid}`;
|
|
186
200
|
labelId = `${this.hostId}-label`;
|
|
187
201
|
descriptionId = `${this.hostId}-description`;
|
|
188
|
-
internalChecked = linkedSignal(() => this.checked(),
|
|
202
|
+
internalChecked = linkedSignal(() => this.checked(), /* @ts-ignore */
|
|
203
|
+
...(ngDevMode ? [{ debugName: "internalChecked" }] : /* istanbul ignore next */ []));
|
|
189
204
|
/** Resolved color — radio's own color wins, then group's, then `'primary'`. */
|
|
190
|
-
effectiveColor = computed(() => this.color() ?? this.parent?.color() ?? 'primary',
|
|
205
|
+
effectiveColor = computed(() => this.color() ?? this.parent?.color() ?? 'primary', /* @ts-ignore */
|
|
206
|
+
...(ngDevMode ? [{ debugName: "effectiveColor" }] : /* istanbul ignore next */ []));
|
|
191
207
|
/** Resolved size — radio's own size wins, then group's, then `'md'`. */
|
|
192
|
-
effectiveSize = computed(() => this.size() ?? this.parent?.size() ?? 'md',
|
|
208
|
+
effectiveSize = computed(() => this.size() ?? this.parent?.size() ?? 'md', /* @ts-ignore */
|
|
209
|
+
...(ngDevMode ? [{ debugName: "effectiveSize" }] : /* istanbul ignore next */ []));
|
|
193
210
|
/** Resolved variant — radio's own variant wins, then group's, then `'solid'`. */
|
|
194
|
-
effectiveVariant = computed(() => this.variant() ?? this.parent?.variant() ?? 'solid',
|
|
211
|
+
effectiveVariant = computed(() => this.variant() ?? this.parent?.variant() ?? 'solid', /* @ts-ignore */
|
|
212
|
+
...(ngDevMode ? [{ debugName: "effectiveVariant" }] : /* istanbul ignore next */ []));
|
|
195
213
|
/** Resolved name attribute — parent group's name wins for HTML form semantics. */
|
|
196
|
-
effectiveName = computed(() => this.parent?.name() ?? this.name(),
|
|
214
|
+
effectiveName = computed(() => this.parent?.name() ?? this.name(), /* @ts-ignore */
|
|
215
|
+
...(ngDevMode ? [{ debugName: "effectiveName" }] : /* istanbul ignore next */ []));
|
|
197
216
|
/** Whether this radio is currently selected (grouped: parent.value === this.value; standalone: internal checked). */
|
|
198
217
|
isSelected = computed(() => {
|
|
199
218
|
if (this.parent)
|
|
200
219
|
return this.parent.value() === this.value();
|
|
201
220
|
return this.internalChecked();
|
|
202
|
-
},
|
|
221
|
+
}, /* @ts-ignore */
|
|
222
|
+
...(ngDevMode ? [{ debugName: "isSelected" }] : /* istanbul ignore next */ []));
|
|
203
223
|
/** Whether this radio is disabled (own disabled OR parent's disabled OR CVA-disabled). */
|
|
204
|
-
isDisabled = computed(() => this.disabled() || this.cvaDisabled() || (this.parent?.isDisabled() ?? false),
|
|
224
|
+
isDisabled = computed(() => this.disabled() || this.cvaDisabled() || (this.parent?.isDisabled() ?? false), /* @ts-ignore */
|
|
225
|
+
...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
205
226
|
/** Whether the radio is in an error state per the configured `ErrorStateMatcher`. Inherits from the parent group when wrapped; falls back to its own NgControl when standalone. */
|
|
206
227
|
errorState = computed(() => {
|
|
207
228
|
this._ngControlRev();
|
|
@@ -212,7 +233,8 @@ class RadioComponent {
|
|
|
212
233
|
const form = this.parentFormGroup ??
|
|
213
234
|
this.parentForm;
|
|
214
235
|
return matcher.isErrorState(this.ngControl?.control ?? null, form);
|
|
215
|
-
},
|
|
236
|
+
}, /* @ts-ignore */
|
|
237
|
+
...(ngDevMode ? [{ debugName: "errorState" }] : /* istanbul ignore next */ []));
|
|
216
238
|
/** Roving tabindex: in a group, only the selected (or first enabled if none selected) radio is focusable. Standalone radios are always focusable unless disabled. */
|
|
217
239
|
isFocusable = computed(() => {
|
|
218
240
|
if (this.isDisabled())
|
|
@@ -229,7 +251,8 @@ class RadioComponent {
|
|
|
229
251
|
return firstEnabled === this;
|
|
230
252
|
}
|
|
231
253
|
return false;
|
|
232
|
-
},
|
|
254
|
+
}, /* @ts-ignore */
|
|
255
|
+
...(ngDevMode ? [{ debugName: "isFocusable" }] : /* istanbul ignore next */ []));
|
|
233
256
|
effectiveAriaLabelledby = computed(() => {
|
|
234
257
|
const external = this.ariaLabelledby();
|
|
235
258
|
if (external)
|
|
@@ -237,38 +260,49 @@ class RadioComponent {
|
|
|
237
260
|
if (this.ariaLabel())
|
|
238
261
|
return undefined;
|
|
239
262
|
return this.labelId;
|
|
240
|
-
},
|
|
263
|
+
}, /* @ts-ignore */
|
|
264
|
+
...(ngDevMode ? [{ debugName: "effectiveAriaLabelledby" }] : /* istanbul ignore next */ []));
|
|
241
265
|
effectiveAriaDescribedby = computed(() => {
|
|
242
266
|
const external = this.ariaDescribedby();
|
|
243
267
|
if (external)
|
|
244
268
|
return external;
|
|
245
269
|
return this.descriptionId;
|
|
246
|
-
},
|
|
270
|
+
}, /* @ts-ignore */
|
|
271
|
+
...(ngDevMode ? [{ debugName: "effectiveAriaDescribedby" }] : /* istanbul ignore next */ []));
|
|
247
272
|
variantResult = computed(() => radioVariants({
|
|
248
273
|
size: this.effectiveSize(),
|
|
249
274
|
labelPosition: this.labelPosition(),
|
|
250
275
|
checked: this.isSelected(),
|
|
251
276
|
disabled: this.isDisabled(),
|
|
252
277
|
errorState: this.errorState(),
|
|
253
|
-
}),
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
278
|
+
}), /* @ts-ignore */
|
|
279
|
+
...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
|
|
280
|
+
rootClasses = computed(() => this.variantResult().root(), /* @ts-ignore */
|
|
281
|
+
...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
|
|
282
|
+
circleWrapClasses = computed(() => this.variantResult().circleWrap(), /* @ts-ignore */
|
|
283
|
+
...(ngDevMode ? [{ debugName: "circleWrapClasses" }] : /* istanbul ignore next */ []));
|
|
284
|
+
labelWrapClasses = computed(() => this.variantResult().labelWrap(), /* @ts-ignore */
|
|
285
|
+
...(ngDevMode ? [{ debugName: "labelWrapClasses" }] : /* istanbul ignore next */ []));
|
|
286
|
+
labelClasses = computed(() => this.variantResult().label(), /* @ts-ignore */
|
|
287
|
+
...(ngDevMode ? [{ debugName: "labelClasses" }] : /* istanbul ignore next */ []));
|
|
288
|
+
descriptionClasses = computed(() => this.variantResult().description(), /* @ts-ignore */
|
|
289
|
+
...(ngDevMode ? [{ debugName: "descriptionClasses" }] : /* istanbul ignore next */ []));
|
|
290
|
+
dotWrapClasses = computed(() => this.variantResult().dotWrap(), /* @ts-ignore */
|
|
291
|
+
...(ngDevMode ? [{ debugName: "dotWrapClasses" }] : /* istanbul ignore next */ []));
|
|
260
292
|
circleClasses = computed(() => {
|
|
261
293
|
const base = this.variantResult().circle();
|
|
262
294
|
if (!this.isSelected())
|
|
263
295
|
return base;
|
|
264
296
|
const ringLookup = this.effectiveVariant() === 'solid' ? SOLID_RING : OUTLINE_RING;
|
|
265
297
|
return `${base} ${ringLookup[this.effectiveColor()]}`;
|
|
266
|
-
},
|
|
298
|
+
}, /* @ts-ignore */
|
|
299
|
+
...(ngDevMode ? [{ debugName: "circleClasses" }] : /* istanbul ignore next */ []));
|
|
267
300
|
dotClasses = computed(() => {
|
|
268
301
|
const base = this.variantResult().dot();
|
|
269
302
|
const dotLookup = this.effectiveVariant() === 'solid' ? SOLID_DOT : OUTLINE_DOT;
|
|
270
303
|
return `${base} ${dotLookup[this.effectiveColor()]}`;
|
|
271
|
-
},
|
|
304
|
+
}, /* @ts-ignore */
|
|
305
|
+
...(ngDevMode ? [{ debugName: "dotClasses" }] : /* istanbul ignore next */ []));
|
|
272
306
|
constructor() {
|
|
273
307
|
// Material-style CVA wiring for standalone `<tw-radio>` use. Mirrors
|
|
274
308
|
// `checkbox.ts` / `slider.ts` — avoids the circular-DI a static
|
|
@@ -374,8 +408,8 @@ class RadioComponent {
|
|
|
374
408
|
const host = this.elementRef.nativeElement;
|
|
375
409
|
return host.textContent !== null && host.textContent.trim().length > 0;
|
|
376
410
|
}
|
|
377
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
378
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
411
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
412
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RadioComponent, isStandalone: true, selector: "tw-radio", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, labelPosition: { classPropertyName: "labelPosition", publicName: "labelPosition", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", change: "change" }, host: { attributes: { "role": "radio" }, listeners: { "click": "onActivate()", "keydown": "onKeydown($event)", "blur": "onBlur()" }, properties: { "id": "hostId", "class": "rootClasses()", "attr.data-checked": "isSelected()", "attr.aria-checked": "isSelected() ? \"true\" : \"false\"", "attr.aria-disabled": "isDisabled() || null", "attr.aria-invalid": "errorState() || null", "attr.aria-label": "ariaLabel() || null", "attr.aria-labelledby": "effectiveAriaLabelledby() || null", "attr.aria-describedby": "effectiveAriaDescribedby() || null", "attr.tabindex": "isFocusable() ? 0 : -1", "attr.name": "effectiveName() || null" } }, ngImport: i0, template: `
|
|
379
413
|
<span [class]="circleWrapClasses()">
|
|
380
414
|
<span [class]="circleClasses()">
|
|
381
415
|
@if (isSelected()) {
|
|
@@ -404,7 +438,7 @@ class RadioComponent {
|
|
|
404
438
|
</span>
|
|
405
439
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
406
440
|
}
|
|
407
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
441
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RadioComponent, decorators: [{
|
|
408
442
|
type: Component,
|
|
409
443
|
args: [{
|
|
410
444
|
selector: 'tw-radio',
|
|
@@ -485,19 +519,26 @@ let nextGroupId = 0;
|
|
|
485
519
|
*/
|
|
486
520
|
class RadioGroupComponent {
|
|
487
521
|
/** Sets the semantic color applied to the selected radio's dot/ring. Propagated to children unless a child overrides it. Defaults to `'primary'`. */
|
|
488
|
-
color = input('primary',
|
|
522
|
+
color = input('primary', /* @ts-ignore */
|
|
523
|
+
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
489
524
|
/** Controls the overall scale of radios inside the group. Propagated to children unless a child overrides it. Defaults to `'md'`. */
|
|
490
|
-
size = input('md',
|
|
525
|
+
size = input('md', /* @ts-ignore */
|
|
526
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
491
527
|
/** Visual style of the selected indicator. `'solid'` fills the dot with the color against a colored ring; `'outline'` keeps a transparent fill with a colored ring and colored dot. Propagated to children unless a child overrides it. Defaults to `'solid'`. */
|
|
492
|
-
variant = input('solid',
|
|
528
|
+
variant = input('solid', /* @ts-ignore */
|
|
529
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
493
530
|
/** Layout direction of the group. Drives `aria-orientation` and the arrow-key model. Defaults to `'vertical'`. */
|
|
494
|
-
orientation = input('vertical',
|
|
531
|
+
orientation = input('vertical', /* @ts-ignore */
|
|
532
|
+
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
495
533
|
/** When true, disables every radio in the group and blocks keyboard interaction. Defaults to `false`. */
|
|
496
|
-
disabled = input(false,
|
|
534
|
+
disabled = input(false, /* @ts-ignore */
|
|
535
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
497
536
|
/** When true, sets `aria-required="true"` on the group for assistive tech. Defaults to `false`. */
|
|
498
|
-
required = input(false,
|
|
537
|
+
required = input(false, /* @ts-ignore */
|
|
538
|
+
...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
499
539
|
/** Optional form-association name. Propagated to each child radio's host `name` attribute so standard HTML form semantics still apply. */
|
|
500
|
-
name = input(undefined,
|
|
540
|
+
name = input(undefined, /* @ts-ignore */
|
|
541
|
+
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
501
542
|
/** Accessible name for the group when no visible label is provided. Mirrored to `aria-label`. */
|
|
502
543
|
ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
503
544
|
/** ID of an external element that labels the group. Mirrored to `aria-labelledby`. */
|
|
@@ -505,9 +546,11 @@ class RadioGroupComponent {
|
|
|
505
546
|
/** ID of an external element that describes the group. Mirrored to `aria-describedby`. */
|
|
506
547
|
ariaDescribedby = input(undefined, { ...(ngDevMode ? { debugName: "ariaDescribedby" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
|
|
507
548
|
/** Two-way bound selected value. Updates when the user picks a radio; fires `valueChange`. `null` means no selection. */
|
|
508
|
-
value = model(null,
|
|
549
|
+
value = model(null, /* @ts-ignore */
|
|
550
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
509
551
|
/** Per-instance override of the {@link ErrorStateMatcher}. When omitted, the group uses the `TW_ERROR_STATE_MATCHER` token's value. */
|
|
510
|
-
errorStateMatcher = input(undefined,
|
|
552
|
+
errorStateMatcher = input(undefined, /* @ts-ignore */
|
|
553
|
+
...(ngDevMode ? [{ debugName: "errorStateMatcher" }] : /* istanbul ignore next */ []));
|
|
511
554
|
/** Fires after the selected value changes from a user interaction. Does not fire when the value is updated programmatically via `writeValue`. */
|
|
512
555
|
change = output();
|
|
513
556
|
/** @internal Child radios discovered via content projection. */
|
|
@@ -522,11 +565,15 @@ class RadioGroupComponent {
|
|
|
522
565
|
hostId = `tw-radio-group-${nextGroupId++}`;
|
|
523
566
|
onChange = () => { };
|
|
524
567
|
onTouched = () => { };
|
|
525
|
-
cvaDisabled = signal(false,
|
|
526
|
-
|
|
527
|
-
|
|
568
|
+
cvaDisabled = signal(false, /* @ts-ignore */
|
|
569
|
+
...(ngDevMode ? [{ debugName: "cvaDisabled" }] : /* istanbul ignore next */ []));
|
|
570
|
+
_ngControlRev = signal(0, /* @ts-ignore */
|
|
571
|
+
...(ngDevMode ? [{ debugName: "_ngControlRev" }] : /* istanbul ignore next */ []));
|
|
572
|
+
_formSubmitRev = signal(0, /* @ts-ignore */
|
|
573
|
+
...(ngDevMode ? [{ debugName: "_formSubmitRev" }] : /* istanbul ignore next */ []));
|
|
528
574
|
/** Effective disabled state — input OR CVA disabled. */
|
|
529
|
-
isDisabled = computed(() => this.disabled() || this.cvaDisabled(),
|
|
575
|
+
isDisabled = computed(() => this.disabled() || this.cvaDisabled(), /* @ts-ignore */
|
|
576
|
+
...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
530
577
|
/** Group-level error state per the configured `ErrorStateMatcher`. Reads the bound `NgControl.invalid` through the matcher; child radios inherit from this when wrapped in the group. */
|
|
531
578
|
errorState = computed(() => {
|
|
532
579
|
this._ngControlRev();
|
|
@@ -535,13 +582,17 @@ class RadioGroupComponent {
|
|
|
535
582
|
const form = this.parentFormGroup ??
|
|
536
583
|
this.parentForm;
|
|
537
584
|
return matcher.isErrorState(this.ngControl?.control ?? null, form);
|
|
538
|
-
},
|
|
539
|
-
|
|
585
|
+
}, /* @ts-ignore */
|
|
586
|
+
...(ngDevMode ? [{ debugName: "errorState" }] : /* istanbul ignore next */ []));
|
|
587
|
+
activeValue = linkedSignal(() => this.value(), /* @ts-ignore */
|
|
588
|
+
...(ngDevMode ? [{ debugName: "activeValue" }] : /* istanbul ignore next */ []));
|
|
540
589
|
variantResult = computed(() => radioGroupVariants({
|
|
541
590
|
orientation: this.orientation(),
|
|
542
591
|
disabled: this.isDisabled(),
|
|
543
|
-
}),
|
|
544
|
-
|
|
592
|
+
}), /* @ts-ignore */
|
|
593
|
+
...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
|
|
594
|
+
rootClasses = computed(() => this.variantResult(), /* @ts-ignore */
|
|
595
|
+
...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
|
|
545
596
|
constructor() {
|
|
546
597
|
// Material-style CVA wiring: declare ourselves as the value accessor on any
|
|
547
598
|
// host-level `NgControl` (FormControlDirective, NgModel, etc.). This avoids
|
|
@@ -675,10 +726,10 @@ class RadioGroupComponent {
|
|
|
675
726
|
.subscribe(() => this._formSubmitRev.update((n) => n + 1));
|
|
676
727
|
}
|
|
677
728
|
}
|
|
678
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
679
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "
|
|
729
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
730
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: RadioGroupComponent, isStandalone: true, selector: "tw-radio-group", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", change: "change" }, host: { attributes: { "role": "radiogroup" }, listeners: { "keydown": "onKeydown($event)" }, properties: { "id": "hostId", "class": "rootClasses()", "attr.aria-orientation": "orientation()", "attr.aria-disabled": "isDisabled() || null", "attr.aria-required": "required() || null", "attr.aria-invalid": "errorState() || null", "attr.aria-label": "ariaLabel() || null", "attr.aria-labelledby": "ariaLabelledby() || null", "attr.aria-describedby": "ariaDescribedby() || null" } }, queries: [{ propertyName: "radios", predicate: RadioComponent, descendants: true, isSignal: true }], ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
680
731
|
}
|
|
681
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
732
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RadioGroupComponent, decorators: [{
|
|
682
733
|
type: Component,
|
|
683
734
|
args: [{
|
|
684
735
|
selector: 'tw-radio-group',
|