@egose/shadcn-theme-ng-tw 0.0.28 → 0.2.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 +130 -13
- package/accordion/README.md +376 -34
- package/accordion/fesm2022/accordion.mjs +20 -20
- package/alert/README.md +343 -34
- package/alert/fesm2022/alert.mjs +18 -18
- package/alert-dialog/README.md +471 -5
- package/alert-dialog/fesm2022/alert-dialog.mjs +48 -48
- package/alert-dialog/types/alert-dialog.d.ts +1 -1
- package/aspect-ratio/README.md +272 -5
- package/aspect-ratio/fesm2022/aspect-ratio.mjs +9 -9
- package/autocomplete/README.md +473 -34
- package/autocomplete/fesm2022/autocomplete.mjs +54 -54
- package/autocomplete/types/autocomplete.d.ts +1 -1
- package/avatar/README.md +357 -5
- package/avatar/fesm2022/avatar.mjs +32 -32
- package/badge/README.md +289 -34
- package/badge/fesm2022/badge.mjs +4 -4
- package/basic-alert/README.md +324 -34
- package/basic-alert/fesm2022/basic-alert.mjs +4 -4
- package/basic-alert/types/basic-alert.d.ts +1 -1
- package/breadcrumb/README.md +406 -5
- package/breadcrumb/fesm2022/breadcrumb.mjs +34 -34
- package/button/README.md +453 -34
- package/button/fesm2022/button.mjs +96 -118
- package/button/types/button.d.ts +7 -10
- package/button-group/README.md +318 -5
- package/button-group/fesm2022/button-group.mjs +20 -20
- package/calendar/README.md +328 -34
- package/calendar/fesm2022/calendar.mjs +154 -154
- package/card/README.md +331 -5
- package/card/fesm2022/card.mjs +33 -33
- package/carousel/README.md +333 -5
- package/carousel/fesm2022/carousel.mjs +47 -44
- package/carousel/types/carousel.d.ts +1 -1
- package/checkbox/README.md +291 -34
- package/checkbox/fesm2022/checkbox.mjs +22 -20
- package/checkbox/types/checkbox.d.ts +5 -4
- package/collapsible/README.md +332 -5
- package/collapsible/fesm2022/collapsible.mjs +15 -15
- package/combobox/README.md +507 -5
- package/combobox/fesm2022/combobox.mjs +95 -92
- package/combobox/types/combobox.d.ts +1 -1
- package/command/README.md +435 -5
- package/command/fesm2022/command.mjs +56 -56
- package/confirmation-dialog/README.md +272 -34
- package/confirmation-dialog/fesm2022/confirmation-dialog.mjs +13 -12
- package/confirmation-dialog/types/confirmation-dialog.d.ts +9 -5
- package/context-menu/README.md +366 -5
- package/context-menu/fesm2022/context-menu.mjs +9 -9
- package/date-picker/README.md +436 -34
- package/date-picker/fesm2022/date-picker.mjs +79 -68
- package/date-picker/types/date-picker.d.ts +8 -4
- package/dialog/README.md +419 -34
- package/dialog/fesm2022/dialog.mjs +48 -48
- package/drawer/README.md +395 -5
- package/drawer/fesm2022/drawer.mjs +45 -45
- package/dropdown-menu/README.md +417 -5
- package/dropdown-menu/fesm2022/dropdown-menu.mjs +85 -73
- package/dropdown-menu/types/dropdown-menu.d.ts +4 -0
- package/empty/README.md +329 -5
- package/empty/fesm2022/empty.mjs +31 -31
- package/field/README.md +385 -5
- package/field/fesm2022/field.mjs +59 -59
- package/field/types/field.d.ts +1 -1
- package/form-checkbox/README.md +283 -34
- package/form-checkbox/fesm2022/form-checkbox.mjs +37 -19
- package/form-checkbox/types/form-checkbox.d.ts +7 -1
- package/form-date-picker/README.md +293 -34
- package/form-date-picker/fesm2022/form-date-picker.mjs +59 -24
- package/form-date-picker/types/form-date-picker.d.ts +7 -1
- package/form-field/README.md +327 -34
- package/form-field/fesm2022/form-field.mjs +30 -16
- package/form-field/types/form-field.d.ts +28 -20
- package/form-field-simple/README.md +311 -34
- package/form-field-simple/fesm2022/form-field-simple.mjs +4 -4
- package/form-searchable-multiselect/README.md +332 -34
- package/form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs +41 -21
- package/form-searchable-multiselect/types/form-searchable-multiselect.d.ts +8 -2
- package/form-select/README.md +321 -34
- package/form-select/fesm2022/form-select.mjs +62 -29
- package/form-select/types/form-select.d.ts +7 -1
- package/form-text-input/README.md +342 -34
- package/form-text-input/fesm2022/form-text-input.mjs +43 -55
- package/form-text-input/types/form-text-input.d.ts +9 -12
- package/form-textarea/README.md +318 -34
- package/form-textarea/fesm2022/form-textarea.mjs +42 -23
- package/form-textarea/types/form-textarea.d.ts +8 -1
- package/hover-card/README.md +256 -5
- package/hover-card/fesm2022/hover-card.mjs +19 -19
- package/icon/README.md +210 -34
- package/icon/fesm2022/icon.mjs +8 -8
- package/input/README.md +240 -34
- package/input/fesm2022/input.mjs +17 -12
- package/input/types/input.d.ts +2 -1
- package/input-group/README.md +335 -5
- package/input-group/fesm2022/input-group.mjs +37 -37
- package/input-group/types/input-group.d.ts +3 -3
- package/input-otp/README.md +375 -5
- package/input-otp/fesm2022/input-otp.mjs +27 -27
- package/item/README.md +385 -5
- package/item/fesm2022/item.mjs +54 -54
- package/kbd/README.md +291 -5
- package/kbd/fesm2022/kbd.mjs +13 -13
- package/label/README.md +243 -34
- package/label/fesm2022/label.mjs +9 -9
- package/label/types/label.d.ts +1 -1
- package/layout-simple/README.md +174 -44
- package/layout-simple/fesm2022/layout-simple.mjs +917 -398
- package/layout-simple/types/layout-simple.d.ts +180 -129
- package/menu/README.md +418 -0
- package/menu/fesm2022/menu.mjs +461 -0
- package/menu/package.json +24 -0
- package/menu/types/menu.d.ts +137 -0
- package/menubar/README.md +343 -5
- package/menubar/fesm2022/menubar.mjs +13 -13
- package/native-select/README.md +323 -5
- package/native-select/fesm2022/native-select.mjs +19 -19
- package/navigation-menu/README.md +369 -5
- package/navigation-menu/fesm2022/navigation-menu.mjs +37 -37
- package/package.json +183 -154
- package/pagination/README.md +388 -5
- package/pagination/fesm2022/pagination.mjs +63 -63
- package/popover/README.md +302 -34
- package/popover/fesm2022/popover.mjs +30 -30
- package/progress/README.md +311 -5
- package/progress/fesm2022/progress.mjs +13 -13
- package/radio-group/README.md +335 -34
- package/radio-group/fesm2022/radio-group.mjs +26 -19
- package/resizable/README.md +269 -5
- package/resizable/fesm2022/resizable.mjs +19 -19
- package/scroll-area/README.md +233 -5
- package/scroll-area/fesm2022/scroll-area.mjs +9 -9
- package/searchable-multiselect/README.md +294 -34
- package/searchable-multiselect/fesm2022/searchable-multiselect.mjs +63 -16
- package/searchable-multiselect/types/searchable-multiselect.d.ts +8 -2
- package/select/README.md +408 -34
- package/select/fesm2022/select.mjs +80 -72
- package/select/types/select.d.ts +3 -1
- package/separator/README.md +193 -34
- package/separator/fesm2022/separator.mjs +9 -9
- package/separator/types/separator.d.ts +1 -1
- package/sheet/README.md +282 -34
- package/sheet/fesm2022/sheet.mjs +30 -30
- package/sidebar/README.md +457 -5
- package/sidebar/fesm2022/sidebar.mjs +136 -134
- package/sidebar/types/sidebar.d.ts +3 -3
- package/skeleton/README.md +217 -5
- package/skeleton/fesm2022/skeleton.mjs +9 -9
- package/slider/README.md +273 -5
- package/slider/fesm2022/slider.mjs +29 -25
- package/sonner/README.md +317 -34
- package/sonner/fesm2022/sonner.mjs +9 -9
- package/spinner/README.md +255 -34
- package/spinner/fesm2022/spinner.mjs +8 -8
- package/switch/README.md +281 -34
- package/switch/fesm2022/switch.mjs +12 -14
- package/table/README.md +423 -5
- package/table/fesm2022/table.mjs +41 -41
- package/tabs/README.md +382 -34
- package/tabs/fesm2022/tabs.mjs +48 -38
- package/textarea/README.md +282 -5
- package/textarea/fesm2022/textarea.mjs +9 -9
- package/toggle/README.md +270 -5
- package/toggle/fesm2022/toggle.mjs +14 -14
- package/toggle-group/README.md +340 -5
- package/toggle-group/fesm2022/toggle-group.mjs +13 -13
- package/toggle-group/types/toggle-group.d.ts +13 -7
- package/tooltip/README.md +240 -34
- package/tooltip/fesm2022/tooltip.mjs +14 -14
- package/typography/README.md +271 -5
- package/typography/fesm2022/typography.mjs +53 -53
- package/typography/types/typography.d.ts +12 -12
- package/utils/README.md +274 -34
- package/utils/fesm2022/utils.mjs +68 -44
- package/accordion/fesm2022/accordion.mjs.map +0 -1
- package/alert/fesm2022/alert.mjs.map +0 -1
- package/alert-dialog/fesm2022/alert-dialog.mjs.map +0 -1
- package/aspect-ratio/fesm2022/aspect-ratio.mjs.map +0 -1
- package/autocomplete/fesm2022/autocomplete.mjs.map +0 -1
- package/avatar/fesm2022/avatar.mjs.map +0 -1
- package/badge/fesm2022/badge.mjs.map +0 -1
- package/basic-alert/fesm2022/basic-alert.mjs.map +0 -1
- package/breadcrumb/fesm2022/breadcrumb.mjs.map +0 -1
- package/button/fesm2022/button.mjs.map +0 -1
- package/button-group/fesm2022/button-group.mjs.map +0 -1
- package/calendar/fesm2022/calendar.mjs.map +0 -1
- package/card/fesm2022/card.mjs.map +0 -1
- package/carousel/fesm2022/carousel.mjs.map +0 -1
- package/checkbox/fesm2022/checkbox.mjs.map +0 -1
- package/collapsible/fesm2022/collapsible.mjs.map +0 -1
- package/combobox/fesm2022/combobox.mjs.map +0 -1
- package/command/fesm2022/command.mjs.map +0 -1
- package/confirmation-dialog/fesm2022/confirmation-dialog.mjs.map +0 -1
- package/context-menu/fesm2022/context-menu.mjs.map +0 -1
- package/date-picker/fesm2022/date-picker.mjs.map +0 -1
- package/dialog/fesm2022/dialog.mjs.map +0 -1
- package/drawer/fesm2022/drawer.mjs.map +0 -1
- package/dropdown-menu/fesm2022/dropdown-menu.mjs.map +0 -1
- package/empty/fesm2022/empty.mjs.map +0 -1
- package/field/fesm2022/field.mjs.map +0 -1
- package/form-checkbox/fesm2022/form-checkbox.mjs.map +0 -1
- package/form-date-picker/fesm2022/form-date-picker.mjs.map +0 -1
- package/form-field/fesm2022/form-field.mjs.map +0 -1
- package/form-field-simple/fesm2022/form-field-simple.mjs.map +0 -1
- package/form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs.map +0 -1
- package/form-select/fesm2022/form-select.mjs.map +0 -1
- package/form-text-input/fesm2022/form-text-input.mjs.map +0 -1
- package/form-textarea/fesm2022/form-textarea.mjs.map +0 -1
- package/hover-card/fesm2022/hover-card.mjs.map +0 -1
- package/icon/fesm2022/icon.mjs.map +0 -1
- package/input/fesm2022/input.mjs.map +0 -1
- package/input-group/fesm2022/input-group.mjs.map +0 -1
- package/input-otp/fesm2022/input-otp.mjs.map +0 -1
- package/item/fesm2022/item.mjs.map +0 -1
- package/kbd/fesm2022/kbd.mjs.map +0 -1
- package/label/fesm2022/label.mjs.map +0 -1
- package/layout-simple/fesm2022/layout-simple.mjs.map +0 -1
- package/menubar/fesm2022/menubar.mjs.map +0 -1
- package/native-select/fesm2022/native-select.mjs.map +0 -1
- package/navigation-menu/fesm2022/navigation-menu.mjs.map +0 -1
- package/pagination/fesm2022/pagination.mjs.map +0 -1
- package/popover/fesm2022/popover.mjs.map +0 -1
- package/progress/fesm2022/progress.mjs.map +0 -1
- package/radio-group/fesm2022/radio-group.mjs.map +0 -1
- package/resizable/fesm2022/resizable.mjs.map +0 -1
- package/scroll-area/fesm2022/scroll-area.mjs.map +0 -1
- package/searchable-multiselect/fesm2022/searchable-multiselect.mjs.map +0 -1
- package/select/fesm2022/select.mjs.map +0 -1
- package/separator/fesm2022/separator.mjs.map +0 -1
- package/sheet/fesm2022/sheet.mjs.map +0 -1
- package/sidebar/fesm2022/sidebar.mjs.map +0 -1
- package/skeleton/fesm2022/skeleton.mjs.map +0 -1
- package/slider/fesm2022/slider.mjs.map +0 -1
- package/sonner/fesm2022/sonner.mjs.map +0 -1
- package/spinner/fesm2022/spinner.mjs.map +0 -1
- package/switch/fesm2022/switch.mjs.map +0 -1
- package/table/fesm2022/table.mjs.map +0 -1
- package/tabs/fesm2022/tabs.mjs.map +0 -1
- package/textarea/fesm2022/textarea.mjs.map +0 -1
- package/toggle/fesm2022/toggle.mjs.map +0 -1
- package/toggle-group/fesm2022/toggle-group.mjs.map +0 -1
- package/tooltip/fesm2022/tooltip.mjs.map +0 -1
- package/typography/fesm2022/typography.mjs.map +0 -1
- package/utils/fesm2022/utils.mjs.map +0 -1
package/radio-group/README.md
CHANGED
|
@@ -1,64 +1,365 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Radio Group (`@egose/shadcn-theme-ng/radio-group`)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A shadcn/ui-style **Radio Group** for Angular — a set of mutually exclusive options where exactly one can be selected. This is the Angular equivalent of shadcn/ui `RadioGroup` / `RadioGroupItem`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The primitives come from **spartan-ng/brain** (`BrnRadioGroup`, `BrnRadio`, `BrnFieldControlDescribedBy`): keyboard navigation (arrow keys), roving tabindex, and form integration are handled by `BrnRadioGroup`/`BrnRadio`, while this package adds the shadcn look (grid layout, circular indicator, focus ring, error styling).
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
> **Ships as:** `@egose/shadcn-theme-ng/radio-group` and `@egose/shadcn-theme-ng-tw/radio-group` (the `tw:`-prefixed Tailwind variant — same API, class strings prefixed with `tw:`).
|
|
8
|
+
> See the [package README](../../README.md) for installation, peer dependencies, and Tailwind setup. Do not publish this project directory independently.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
8
11
|
|
|
9
12
|
```bash
|
|
10
|
-
|
|
13
|
+
# Plain Tailwind (no prefix)
|
|
14
|
+
npm install @egose/shadcn-theme-ng
|
|
15
|
+
|
|
16
|
+
# Or the tw:-prefixed variant
|
|
17
|
+
npm install @egose/shadcn-theme-ng-tw
|
|
11
18
|
```
|
|
12
19
|
|
|
13
|
-
|
|
20
|
+
Import from the subpath (not the package root):
|
|
14
21
|
|
|
15
|
-
```
|
|
16
|
-
|
|
22
|
+
```ts
|
|
23
|
+
import { HlmRadioGroupImports } from '@egose/shadcn-theme-ng/radio-group';
|
|
24
|
+
// tw variant:
|
|
25
|
+
// import { HlmRadioGroupImports } from '@egose/shadcn-theme-ng-tw/radio-group';
|
|
17
26
|
```
|
|
18
27
|
|
|
19
|
-
|
|
28
|
+
Peer dependencies (see [package README](../../README.md) for versions): `@angular/core`, `@angular/common`, `@spartan-ng/brain`. `@angular/cdk` is required transitively by `HlmRadio` (boolean coercion).
|
|
20
29
|
|
|
21
|
-
|
|
30
|
+
## Imports
|
|
22
31
|
|
|
23
|
-
|
|
24
|
-
|
|
32
|
+
Real exported symbols (from `src/public-api.ts`):
|
|
33
|
+
|
|
34
|
+
| Symbol | Kind | Description |
|
|
35
|
+
| ---------------------- | ------------- | ----------------------------------------------------------------- |
|
|
36
|
+
| `HlmRadioGroup` | Directive | Group container; forwards `BrnRadioGroup` |
|
|
37
|
+
| `HlmRadio` | Component | Single radio item (`hlm-radio`), wraps `BrnRadio` |
|
|
38
|
+
| `HlmRadioIndicator` | Component | Circular visual indicator dot |
|
|
39
|
+
| `HlmRadioGroupImports` | `const` array | `[HlmRadioGroup, HlmRadio, HlmRadioIndicator]` standalone imports |
|
|
40
|
+
| `HlmRadioGroupModule` | `NgModule` | NgModule wrapper re-exporting the three above |
|
|
41
|
+
|
|
42
|
+
Standalone usage:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { Component } from '@angular/core';
|
|
46
|
+
import { HlmRadioGroupImports } from '@egose/shadcn-theme-ng/radio-group';
|
|
47
|
+
|
|
48
|
+
@Component({
|
|
49
|
+
selector: 'app-demo',
|
|
50
|
+
standalone: true,
|
|
51
|
+
imports: [HlmRadioGroupImports],
|
|
52
|
+
template: `...`,
|
|
53
|
+
})
|
|
54
|
+
export class DemoComponent {}
|
|
25
55
|
```
|
|
26
56
|
|
|
27
|
-
|
|
57
|
+
NgModule usage:
|
|
28
58
|
|
|
29
|
-
|
|
59
|
+
```ts
|
|
60
|
+
import { NgModule } from '@angular/core';
|
|
61
|
+
import { HlmRadioGroupModule } from '@egose/shadcn-theme-ng/radio-group';
|
|
30
62
|
|
|
31
|
-
|
|
63
|
+
@NgModule({ imports: [HlmRadioGroupModule] })
|
|
64
|
+
export class DemoModule {}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
You can also import the pieces individually (`import { HlmRadioGroup, HlmRadio, HlmRadioIndicator } from '...'`).
|
|
32
68
|
|
|
33
|
-
|
|
69
|
+
## Anatomy / Structure
|
|
34
70
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
71
|
+
```html
|
|
72
|
+
<!-- Attribute form on a div -->
|
|
73
|
+
<div hlmRadioGroup name="plan" [value]="plan()" (valueChange)="plan.set($event)">
|
|
74
|
+
<hlm-radio value="free" inputId="plan-free">
|
|
75
|
+
<hlm-radio-indicator />
|
|
76
|
+
Free
|
|
77
|
+
</hlm-radio>
|
|
38
78
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
79
|
+
<hlm-radio value="pro" inputId="plan-pro">
|
|
80
|
+
<hlm-radio-indicator />
|
|
81
|
+
Pro
|
|
82
|
+
</hlm-radio>
|
|
83
|
+
</div>
|
|
43
84
|
|
|
44
|
-
|
|
85
|
+
<!-- Element form also works -->
|
|
86
|
+
<hlm-radio-group name="plan">
|
|
87
|
+
<hlm-radio value="free"><hlm-radio-indicator />Free</hlm-radio>
|
|
88
|
+
</hlm-radio-group>
|
|
89
|
+
```
|
|
45
90
|
|
|
46
|
-
|
|
91
|
+
Real selectors:
|
|
47
92
|
|
|
48
|
-
|
|
49
|
-
|
|
93
|
+
| Selector | Class | Notes |
|
|
94
|
+
| ------------------------------------ | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
95
|
+
| `[hlmRadioGroup]`, `hlm-radio-group` | `HlmRadioGroup` | Group host; `data-slot="radio-group"` |
|
|
96
|
+
| `hlm-radio` | `HlmRadio<T>` | Item host; `data-slot="radio-group-item"`; projects `[target],[indicator],hlm-radio-indicator` into the indicator slot, everything else as label content |
|
|
97
|
+
| `hlm-radio-indicator` | `HlmRadioIndicator` | Visual dot; `data-slot="radio-group-indicator"` |
|
|
98
|
+
|
|
99
|
+
## API reference
|
|
100
|
+
|
|
101
|
+
### HlmRadioGroup (directive)
|
|
102
|
+
|
|
103
|
+
Thin directive wrapper over `BrnRadioGroup` (plus `BrnFieldControlDescribedBy` for form-field `aria-describedby` wiring). Own inputs:
|
|
104
|
+
|
|
105
|
+
| Input | Type | Default | Description |
|
|
106
|
+
| --------------------- | ------------ | ------- | -------------------------------------------- |
|
|
107
|
+
| `class` (`userClass`) | `ClassValue` | `''` | Extra classes appended to `tw:grid tw:gap-3` |
|
|
108
|
+
|
|
109
|
+
Forwarded `BrnRadioGroup` host-directive bindings:
|
|
110
|
+
|
|
111
|
+
| Binding | Kind | Description |
|
|
112
|
+
| ------------- | ------ | ---------------------------------------- |
|
|
113
|
+
| `name` | input | Radio group name (native input grouping) |
|
|
114
|
+
| `value` | input | Currently selected value |
|
|
115
|
+
| `disabled` | input | Disables the whole group |
|
|
116
|
+
| `required` | input | Marks the group as required |
|
|
117
|
+
| `valueChange` | output | Emits the newly selected value |
|
|
118
|
+
|
|
119
|
+
The host also reflects form state as attributes: `aria-invalid`/`data-invalid` when the bound control is invalid, plus `data-dirty` and `data-touched`.
|
|
120
|
+
|
|
121
|
+
### HlmRadio\<T\> (component)
|
|
122
|
+
|
|
123
|
+
| Input | Type | Default | Description |
|
|
124
|
+
| -------------------------------------- | --------------------- | ------------ | -------------------------------------------------------------------------------------------------- |
|
|
125
|
+
| `value` | `T` | **required** | The value this item represents |
|
|
126
|
+
| `inputId` | `string \| undefined` | `undefined` | `id` placed on the underlying `brn-radio` element; also used to find an associated `<label [for]>` |
|
|
127
|
+
| `aria-label` (`ariaLabel`) | `string \| undefined` | `undefined` | Accessible name when there is no visible label |
|
|
128
|
+
| `aria-labelledby` (`ariaLabelledby`) | `string \| undefined` | `undefined` | Id(s) of labelling element(s) |
|
|
129
|
+
| `aria-describedby` (`ariaDescribedby`) | `string \| undefined` | `undefined` | Id(s) of describing element(s) |
|
|
130
|
+
| `required` | `boolean` | `false` | Native required flag (boolean-coerced) |
|
|
131
|
+
| `disabled` | `boolean` | `false` | Disables this item (boolean-coerced); mirrors `data-disabled` onto an associated `<label>` |
|
|
132
|
+
| `class` (`userClass`) | `ClassValue` | `''` | Extra classes |
|
|
133
|
+
|
|
134
|
+
| Output | Type | Description |
|
|
135
|
+
| -------- | ------------------- | ---------------------------------------------- |
|
|
136
|
+
| `change` | `BrnRadioChange<T>` | Emitted when this item's checked state changes |
|
|
137
|
+
|
|
138
|
+
Label association detail: on init the component looks for `closest('label')`, falling back to `document.querySelector('label[for=inputId]')`, and mirrors `data-disabled="true"/"false"` onto that label so label styling follows the disabled state. IDs containing special characters (e.g. quotes/brackets) are matched safely via `htmlFor` comparison, not a CSS selector.
|
|
139
|
+
|
|
140
|
+
### HlmRadioIndicator (component)
|
|
141
|
+
|
|
142
|
+
No inputs/outputs. Renders the styled outer circle; the inner dot fills via `group-data-[checked=true]` when the parent `brn-radio` reports checked. Always place it inside `hlm-radio` (it matches the `hlm-radio-indicator` content slot).
|
|
143
|
+
|
|
144
|
+
## Examples
|
|
145
|
+
|
|
146
|
+
### 1. Basic usage
|
|
147
|
+
|
|
148
|
+
```ts
|
|
149
|
+
import { Component, signal } from '@angular/core';
|
|
150
|
+
import { HlmRadioGroupImports } from '@egose/shadcn-theme-ng/radio-group';
|
|
151
|
+
|
|
152
|
+
@Component({
|
|
153
|
+
selector: 'app-basic-radio',
|
|
154
|
+
standalone: true,
|
|
155
|
+
imports: [HlmRadioGroupImports],
|
|
156
|
+
template: `
|
|
157
|
+
<div hlmRadioGroup name="fruit" [value]="fruit()" (valueChange)="fruit.set($event)">
|
|
158
|
+
<hlm-radio value="apple" inputId="fruit-apple">
|
|
159
|
+
<hlm-radio-indicator />
|
|
160
|
+
Apple
|
|
161
|
+
</hlm-radio>
|
|
162
|
+
<hlm-radio value="banana" inputId="fruit-banana">
|
|
163
|
+
<hlm-radio-indicator />
|
|
164
|
+
Banana
|
|
165
|
+
</hlm-radio>
|
|
166
|
+
<hlm-radio value="orange" inputId="fruit-orange">
|
|
167
|
+
<hlm-radio-indicator />
|
|
168
|
+
Orange
|
|
169
|
+
</hlm-radio>
|
|
170
|
+
</div>
|
|
171
|
+
<p>Selected: {{ fruit() }}</p>
|
|
172
|
+
`,
|
|
173
|
+
})
|
|
174
|
+
export class BasicRadioComponent {
|
|
175
|
+
readonly fruit = signal('apple');
|
|
176
|
+
}
|
|
50
177
|
```
|
|
51
178
|
|
|
52
|
-
|
|
179
|
+
### 2. Element selector form + external labels
|
|
53
180
|
|
|
54
|
-
|
|
181
|
+
`hlm-radio-group` works as an element, and labels can live outside the item via `for`/`inputId`:
|
|
55
182
|
|
|
56
|
-
```
|
|
57
|
-
|
|
183
|
+
```ts
|
|
184
|
+
import { Component, signal } from '@angular/core';
|
|
185
|
+
import { HlmRadioGroupImports } from '@egose/shadcn-theme-ng/radio-group';
|
|
186
|
+
|
|
187
|
+
@Component({
|
|
188
|
+
selector: 'app-labelled-radio',
|
|
189
|
+
standalone: true,
|
|
190
|
+
imports: [HlmRadioGroupImports],
|
|
191
|
+
template: `
|
|
192
|
+
<hlm-radio-group name="contact">
|
|
193
|
+
<label for="c-email">Email me</label>
|
|
194
|
+
<hlm-radio value="email" inputId="c-email"><hlm-radio-indicator /></hlm-radio>
|
|
195
|
+
|
|
196
|
+
<label for="c-sms">Text me</label>
|
|
197
|
+
<hlm-radio value="sms" inputId="c-sms"><hlm-radio-indicator /></hlm-radio>
|
|
198
|
+
</hlm-radio-group>
|
|
199
|
+
`,
|
|
200
|
+
})
|
|
201
|
+
export class LabelledRadioComponent {}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Wrapping the item in a `<label>` also works — the item finds it with `closest('label')`:
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<hlm-radio-group name="contact">
|
|
208
|
+
<label>
|
|
209
|
+
<hlm-radio value="email"><hlm-radio-indicator /></hlm-radio>
|
|
210
|
+
Email me
|
|
211
|
+
</label>
|
|
212
|
+
</hlm-radio-group>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 3. Reactive forms
|
|
216
|
+
|
|
217
|
+
`BrnRadioGroup` is a `ControlValueAccessor`, so `formControlName`/`formControl` bind on the group host:
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
import { Component } from '@angular/core';
|
|
221
|
+
import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
222
|
+
import { HlmRadioGroupImports } from '@egose/shadcn-theme-ng/radio-group';
|
|
223
|
+
|
|
224
|
+
@Component({
|
|
225
|
+
selector: 'app-reactive-radio',
|
|
226
|
+
standalone: true,
|
|
227
|
+
imports: [HlmRadioGroupImports, ReactiveFormsModule],
|
|
228
|
+
template: `
|
|
229
|
+
<form [formGroup]="form" (ngSubmit)="submit()">
|
|
230
|
+
<div hlmRadioGroup formControlName="plan">
|
|
231
|
+
<hlm-radio value="hobby"><hlm-radio-indicator />Hobby</hlm-radio>
|
|
232
|
+
<hlm-radio value="pro"><hlm-radio-indicator />Pro</hlm-radio>
|
|
233
|
+
<hlm-radio value="enterprise"><hlm-radio-indicator />Enterprise</hlm-radio>
|
|
234
|
+
</div>
|
|
235
|
+
@if (form.controls.plan.invalid && form.controls.plan.touched) {
|
|
236
|
+
<p class="tw:text-destructive tw:text-sm">Please pick a plan.</p>
|
|
237
|
+
}
|
|
238
|
+
<button type="submit">Continue</button>
|
|
239
|
+
</form>
|
|
240
|
+
`,
|
|
241
|
+
})
|
|
242
|
+
export class ReactiveRadioComponent {
|
|
243
|
+
readonly form = new FormGroup({
|
|
244
|
+
plan: new FormControl<string | null>(null, Validators.required),
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
submit(): void {
|
|
248
|
+
this.form.markAllAsTouched();
|
|
249
|
+
console.log(this.form.value);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
When the control is invalid + touched, the group automatically gets `data-invalid="true"` (and destructive text styling) via the forwarded control state — no manual class juggling needed.
|
|
255
|
+
|
|
256
|
+
### 4. Disabled states (group vs item)
|
|
257
|
+
|
|
258
|
+
```ts
|
|
259
|
+
import { Component, signal } from '@angular/core';
|
|
260
|
+
import { HlmRadioGroupImports } from '@egose/shadcn-theme-ng/radio-group';
|
|
261
|
+
|
|
262
|
+
@Component({
|
|
263
|
+
selector: 'app-disabled-radio',
|
|
264
|
+
standalone: true,
|
|
265
|
+
imports: [HlmRadioGroupImports],
|
|
266
|
+
template: `
|
|
267
|
+
<!-- Whole group disabled -->
|
|
268
|
+
<div hlmRadioGroup name="a" value="one" disabled>
|
|
269
|
+
<hlm-radio value="one"><hlm-radio-indicator />One</hlm-radio>
|
|
270
|
+
<hlm-radio value="two"><hlm-radio-indicator />Two</hlm-radio>
|
|
271
|
+
</div>
|
|
272
|
+
|
|
273
|
+
<!-- Single item disabled; its <label> gets data-disabled="true" -->
|
|
274
|
+
<div hlmRadioGroup name="b" [value]="choice()" (valueChange)="choice.set($event)">
|
|
275
|
+
<label for="b-one">One (soon unavailable)</label>
|
|
276
|
+
<hlm-radio value="one" inputId="b-one" disabled><hlm-radio-indicator /></hlm-radio>
|
|
277
|
+
<label for="b-two">Two</label>
|
|
278
|
+
<hlm-radio value="two" inputId="b-two"><hlm-radio-indicator /></hlm-radio>
|
|
279
|
+
</div>
|
|
280
|
+
`,
|
|
281
|
+
})
|
|
282
|
+
export class DisabledRadioComponent {
|
|
283
|
+
readonly choice = signal('two');
|
|
284
|
+
}
|
|
58
285
|
```
|
|
59
286
|
|
|
60
|
-
|
|
287
|
+
### 5. Per-item change events + typed values
|
|
288
|
+
|
|
289
|
+
`HlmRadio` is generic — `value` can be any type, and `change` emits `BrnRadioChange<T>`:
|
|
290
|
+
|
|
291
|
+
```ts
|
|
292
|
+
import { Component, signal } from '@angular/core';
|
|
293
|
+
import { HlmRadioGroupImports } from '@egose/shadcn-theme-ng/radio-group';
|
|
294
|
+
import type { BrnRadioChange } from '@spartan-ng/brain/radio-group';
|
|
295
|
+
|
|
296
|
+
interface Tier {
|
|
297
|
+
id: string;
|
|
298
|
+
price: number;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
@Component({
|
|
302
|
+
selector: 'app-typed-radio',
|
|
303
|
+
standalone: true,
|
|
304
|
+
imports: [HlmRadioGroupImports],
|
|
305
|
+
template: `
|
|
306
|
+
<div hlmRadioGroup name="tier" (valueChange)="onGroupChange($event)">
|
|
307
|
+
@for (tier of tiers; track tier.id) {
|
|
308
|
+
<hlm-radio [value]="tier" (change)="onItemChange($event)">
|
|
309
|
+
<hlm-radio-indicator />
|
|
310
|
+
{{ tier.id }} — ${{ tier.price }}/mo
|
|
311
|
+
</hlm-radio>
|
|
312
|
+
}
|
|
313
|
+
</div>
|
|
314
|
+
`,
|
|
315
|
+
})
|
|
316
|
+
export class TypedRadioComponent {
|
|
317
|
+
readonly tiers: Tier[] = [
|
|
318
|
+
{ id: 'starter', price: 0 },
|
|
319
|
+
{ id: 'growth', price: 29 },
|
|
320
|
+
];
|
|
321
|
+
|
|
322
|
+
onGroupChange(value: Tier): void {
|
|
323
|
+
console.log('group selected:', value.id);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
onItemChange(event: BrnRadioChange<Tier>): void {
|
|
327
|
+
console.log('item checked:', event.value.id, event.checked);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### 6. Custom indicator content (target slot)
|
|
333
|
+
|
|
334
|
+
Anything projected with `[target]` or `[indicator]` goes into the indicator slot instead of the default label position:
|
|
335
|
+
|
|
336
|
+
```html
|
|
337
|
+
<div hlmRadioGroup name="layout">
|
|
338
|
+
<hlm-radio value="grid">
|
|
339
|
+
<span target class="tw:flex tw:items-center tw:gap-2">
|
|
340
|
+
<hlm-radio-indicator />
|
|
341
|
+
<strong>Grid</strong>
|
|
342
|
+
</span>
|
|
343
|
+
<span class="tw:text-muted-foreground tw:text-sm">Cards in a grid</span>
|
|
344
|
+
</hlm-radio>
|
|
345
|
+
</div>
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## Accessibility notes
|
|
349
|
+
|
|
350
|
+
- The group uses the native `radiogroup` semantics from `BrnRadioGroup`, including arrow-key navigation and roving tabindex — keep all `hlm-radio` items inside one group container.
|
|
351
|
+
- Always provide `name` so assistive tech (and native form serialization) treats the items as one group.
|
|
352
|
+
- Prefer visible text content inside `hlm-radio`; use `aria-label`/`aria-labelledby` only when the item has no visible label.
|
|
353
|
+
- Disabled items expose `data-disabled` (and the native disabled state on the inner input) and are skipped in keyboard navigation.
|
|
354
|
+
- Invalid form state is announced via `aria-invalid="true"` on the group host.
|
|
355
|
+
|
|
356
|
+
## Theming / CSS variables
|
|
357
|
+
|
|
358
|
+
Styling is class-driven (no component-specific CSS variables). Override via the `class` input on any of the three pieces; the indicator's checked dot keys off `group-data-[checked=true]`, and the group invalid state off `data-[invalid=true]`.
|
|
61
359
|
|
|
62
|
-
##
|
|
360
|
+
## Related subpaths
|
|
63
361
|
|
|
64
|
-
|
|
362
|
+
- `@egose/shadcn-theme-ng/label` — labelling radio items and form rows
|
|
363
|
+
- `@egose/shadcn-theme-ng/field` / `form-field` — form rows, descriptions, and error text wired via `BrnFieldControlDescribedBy`
|
|
364
|
+
- `@egose/shadcn-theme-ng/checkbox` — multi-select counterpart
|
|
365
|
+
- `@egose/shadcn-theme-ng/form-field-simple` — lightweight wrapper for reactive-form controls
|
|
@@ -24,7 +24,7 @@ class HlmRadio {
|
|
|
24
24
|
_errorStateClass = computed(() => (this._groupSpartanInvalid() ? 'text-destructive' : ''), /* @ts-ignore */
|
|
25
25
|
...(ngDevMode ? [{ debugName: "_errorStateClass" }] : /* istanbul ignore next */ []));
|
|
26
26
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
27
|
-
_computedClass = computed(() => hlm('group relative flex items-center gap-x-3', 'data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50', this.userClass(), this._errorStateClass()), /* @ts-ignore */
|
|
27
|
+
_computedClass = computed(() => hlm('tw:group tw:relative tw:flex tw:items-center tw:gap-x-3', 'tw:data-[disabled=true]:cursor-not-allowed tw:data-[disabled=true]:opacity-50', this.userClass(), this._errorStateClass()), /* @ts-ignore */
|
|
28
28
|
...(ngDevMode ? [{ debugName: "_computedClass" }] : /* istanbul ignore next */ []));
|
|
29
29
|
/** Used to set the id on the underlying brn element. */
|
|
30
30
|
inputId = input(undefined, /* @ts-ignore */
|
|
@@ -54,15 +54,18 @@ class HlmRadio {
|
|
|
54
54
|
const isDisabled = this.disabled();
|
|
55
55
|
if (!this._elementRef.nativeElement || !this._isBrowser)
|
|
56
56
|
return;
|
|
57
|
+
const inputId = this.inputId();
|
|
57
58
|
const labelElement = this._elementRef.nativeElement.closest('label') ??
|
|
58
|
-
|
|
59
|
+
(inputId
|
|
60
|
+
? Array.from(this._document.getElementsByTagName('label')).find((label) => label.htmlFor === inputId)
|
|
61
|
+
: undefined);
|
|
59
62
|
if (!labelElement)
|
|
60
63
|
return;
|
|
61
64
|
this._renderer.setAttribute(labelElement, 'data-disabled', isDisabled ? 'true' : 'false');
|
|
62
65
|
});
|
|
63
66
|
}
|
|
64
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
65
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.
|
|
67
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmRadio, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
68
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.3", type: HlmRadio, isStandalone: true, selector: "hlm-radio", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", 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: true, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { attributes: { "data-slot": "radio-group-item" }, properties: { "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null", "attr.data-disabled": "disabled() ? \"\" : null" } }, ngImport: i0, template: `
|
|
66
69
|
<brn-radio
|
|
67
70
|
[id]="inputId()"
|
|
68
71
|
[class]="_computedClass()"
|
|
@@ -84,7 +87,7 @@ class HlmRadio {
|
|
|
84
87
|
</brn-radio>
|
|
85
88
|
`, isInline: true, dependencies: [{ kind: "component", type: BrnRadio, selector: "brn-radio", inputs: ["disabled", "id", "aria-label", "aria-labelledby", "aria-describedby", "value", "inputStyles", "required"], outputs: ["change"], exportAs: ["brnRadio"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
86
89
|
}
|
|
87
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
90
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmRadio, decorators: [{
|
|
88
91
|
type: Component,
|
|
89
92
|
args: [{
|
|
90
93
|
selector: 'hlm-radio',
|
|
@@ -133,12 +136,16 @@ class HlmRadioGroup {
|
|
|
133
136
|
_errorState = computed(() => this._brnRadioGroup.controlState?.()?.spartanInvalid, /* @ts-ignore */
|
|
134
137
|
...(ngDevMode ? [{ debugName: "_errorState" }] : /* istanbul ignore next */ []));
|
|
135
138
|
constructor() {
|
|
136
|
-
classes(() => [
|
|
139
|
+
classes(() => [
|
|
140
|
+
'tw:grid tw:gap-3',
|
|
141
|
+
this.userClass(),
|
|
142
|
+
this._errorState() ? 'tw:data-[invalid=true]:text-destructive' : '',
|
|
143
|
+
]);
|
|
137
144
|
}
|
|
138
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
139
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.
|
|
145
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
146
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.3", type: HlmRadioGroup, isStandalone: true, selector: "[hlmRadioGroup],hlm-radio-group", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "radio-group" }, properties: { "attr.aria-invalid": "_ariaInvalid() ? \"true\" : null", "attr.data-invalid": "_ariaInvalid() ? \"true\" : null", "attr.data-dirty": "_dirty() ? \"true\" : null", "attr.data-touched": "_touched() ? \"true\" : null" } }, hostDirectives: [{ directive: i1.BrnRadioGroup, inputs: ["name", "name", "value", "value", "disabled", "disabled", "required", "required"], outputs: ["valueChange", "valueChange"] }, { directive: i2.BrnFieldControlDescribedBy }], ngImport: i0 });
|
|
140
147
|
}
|
|
141
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmRadioGroup, decorators: [{
|
|
142
149
|
type: Directive,
|
|
143
150
|
args: [{
|
|
144
151
|
selector: '[hlmRadioGroup],hlm-radio-group',
|
|
@@ -162,12 +169,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
162
169
|
|
|
163
170
|
class HlmRadioIndicator {
|
|
164
171
|
constructor() {
|
|
165
|
-
classes(() => 'border-input text-primary group-has-[:focus-visible]:border-ring group-has-[:focus-visible]:ring-ring/50 dark:bg-input/30 group-data
|
|
172
|
+
classes(() => 'tw:border-input tw:text-primary tw:group-has-[:focus-visible]:border-ring tw:group-has-[:focus-visible]:ring-ring/50 tw:dark:bg-input/30 tw:group-data-[disabled=true]:cursor-not-allowed tw:group-data-[disabled=true]:opacity-50 tw:relative tw:flex tw:aspect-square tw:size-4 tw:shrink-0 tw:items-center tw:justify-center tw:rounded-full tw:border tw:shadow-xs tw:transition-[color,box-shadow] tw:outline-none tw:group-has-[:focus-visible]:ring-[3px]');
|
|
166
173
|
}
|
|
167
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
168
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.
|
|
174
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmRadioIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
175
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.3", type: HlmRadioIndicator, isStandalone: true, selector: "hlm-radio-indicator", host: { attributes: { "data-slot": "radio-group-indicator" } }, ngImport: i0, template: ` <div class="tw:group-data-[checked=true]:bg-primary tw:size-2 tw:rounded-full tw:bg-transparent"></div> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
169
176
|
}
|
|
170
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmRadioIndicator, decorators: [{
|
|
171
178
|
type: Component,
|
|
172
179
|
args: [{
|
|
173
180
|
selector: 'hlm-radio-indicator',
|
|
@@ -175,7 +182,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
175
182
|
host: {
|
|
176
183
|
'data-slot': 'radio-group-indicator',
|
|
177
184
|
},
|
|
178
|
-
template: ` <div class="group-data-[checked=true]:bg-primary size-2 rounded-full bg-transparent"></div> `,
|
|
185
|
+
template: ` <div class="tw:group-data-[checked=true]:bg-primary tw:size-2 tw:rounded-full tw:bg-transparent"></div> `,
|
|
179
186
|
}]
|
|
180
187
|
}], ctorParameters: () => [] });
|
|
181
188
|
|
|
@@ -184,11 +191,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
184
191
|
*/
|
|
185
192
|
const HlmRadioGroupImports = [HlmRadioGroup, HlmRadio, HlmRadioIndicator];
|
|
186
193
|
class HlmRadioGroupModule {
|
|
187
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
188
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.
|
|
189
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.
|
|
194
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmRadioGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
195
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.3", ngImport: i0, type: HlmRadioGroupModule, imports: [HlmRadioGroup, HlmRadio, HlmRadioIndicator], exports: [HlmRadioGroup, HlmRadio, HlmRadioIndicator] });
|
|
196
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmRadioGroupModule, imports: [HlmRadio] });
|
|
190
197
|
}
|
|
191
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmRadioGroupModule, decorators: [{
|
|
192
199
|
type: NgModule,
|
|
193
200
|
args: [{
|
|
194
201
|
imports: [...HlmRadioGroupImports],
|
|
@@ -201,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
201
208
|
*/
|
|
202
209
|
|
|
203
210
|
export { HlmRadio, HlmRadioGroup, HlmRadioGroupImports, HlmRadioGroupModule, HlmRadioIndicator };
|
|
204
|
-
|
|
211
|
+
|