@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/input-group/README.md
CHANGED
|
@@ -1,11 +1,341 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Input Group (`@egose/shadcn-theme-ng/input-group`)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The input group joins an input (or textarea) with prefixes, suffixes, and inline action buttons into a single bordered control — the shadcn/ui _InputGroup_ equivalent (currency prefix + amount + Apply, URL slug builder, message composer with block add-ons). The outer directive owns the border/focus ring; the inner pieces are borderless so the group reads as one field.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> **Ships as:** `@egose/shadcn-theme-ng/input-group` (plain Tailwind) and `@egose/shadcn-theme-ng-tw/input-group` (`tw:`-prefixed variant). See the [package README](../../README.md) for installation, peer dependencies, and the Tailwind-variant contract. Do not publish this project directory independently.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Installation
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
|
|
10
|
+
# Plain Tailwind (no prefix)
|
|
11
|
+
npm install @egose/shadcn-theme-ng
|
|
12
|
+
|
|
13
|
+
# Or the tw:-prefixed variant
|
|
14
|
+
npm install @egose/shadcn-theme-ng-tw
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Peer dependencies (Angular, CDK, `@spartan-ng/brain`, `rxjs`) are documented in the [package README](../../README.md#peer-dependencies).
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { HlmInputGroupImports } from '@egose/shadcn-theme-ng/input-group';
|
|
21
|
+
// tw variant:
|
|
22
|
+
// import { HlmInputGroupImports } from '@egose/shadcn-theme-ng-tw/input-group';
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Imports
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
// Standalone component — spread the imports array:
|
|
29
|
+
import { HlmInputGroupImports } from '@egose/shadcn-theme-ng/input-group';
|
|
30
|
+
|
|
31
|
+
@Component({
|
|
32
|
+
standalone: true,
|
|
33
|
+
imports: [HlmInputGroupImports],
|
|
34
|
+
template: `
|
|
35
|
+
<div hlmInputGroup>
|
|
36
|
+
<span hlmInputGroupText>$</span>
|
|
37
|
+
<input hlmInputGroupInput placeholder="0.00" aria-label="Amount in dollars" />
|
|
38
|
+
</div>
|
|
39
|
+
`,
|
|
40
|
+
})
|
|
41
|
+
export class MyComp {}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
// NgModule-based — import the module:
|
|
46
|
+
import { HlmInputGroupModule } from '@egose/shadcn-theme-ng/input-group';
|
|
47
|
+
|
|
48
|
+
@NgModule({ imports: [HlmInputGroupModule] })
|
|
49
|
+
export class MyModule {}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Exported from `src/public-api.ts`: `HlmInputGroup`, `HlmInputGroupAddon`, `HlmInputGroupButton`, `HlmInputGroupInput`, `HlmInputGroupText`, `HlmInputGroupTextarea`, plus `HlmInputGroupImports` and `HlmInputGroupModule`.
|
|
53
|
+
|
|
54
|
+
## Anatomy / Structure
|
|
55
|
+
|
|
56
|
+
```html
|
|
57
|
+
<div hlmInputGroup>
|
|
58
|
+
<!-- inline prefix -->
|
|
59
|
+
<span hlmInputGroupText>$</span>
|
|
60
|
+
|
|
61
|
+
<!-- the actual control (borderless, flex-1) -->
|
|
62
|
+
<input hlmInputGroupInput placeholder="Monthly budget" aria-label="Monthly budget" />
|
|
63
|
+
|
|
64
|
+
<!-- inline action -->
|
|
65
|
+
<button hlmInputGroupButton type="button">Apply</button>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<!-- block layout for composers -->
|
|
69
|
+
<div hlmInputGroup>
|
|
70
|
+
<div hlmInputGroupAddon align="block-start">Message to #general</div>
|
|
71
|
+
<textarea hlmInputGroupTextarea rows="3" aria-label="Message"></textarea>
|
|
72
|
+
<div hlmInputGroupAddon align="block-end">…</div>
|
|
73
|
+
</div>
|
|
11
74
|
```
|
|
75
|
+
|
|
76
|
+
Real selectors: `[hlmInputGroup]` / `hlm-input-group` (container, `role="group"`); `input[hlmInputGroupInput]` (input, `hostDirectives: [HlmInput]`, `data-slot="input-group-control"`); `textarea[hlmInputGroupTextarea]` (`hostDirectives: [HlmTextarea]`, same control slot); `[hlmInputGroupAddon]` / `hlm-input-group-addon` (alignable addon, `align` = `inline-start` | `inline-end` | `block-start` | `block-end`, default `inline-start`); `[hlmInputGroupText]` / `hlm-input-group-text` (plain inline text); `button[hlmInputGroupButton]` (action button, ghost variant preset, `hostDirectives: [HlmBtn]`).
|
|
77
|
+
|
|
78
|
+
## API reference
|
|
79
|
+
|
|
80
|
+
### `[hlmInputGroup]` — `HlmInputGroup`
|
|
81
|
+
|
|
82
|
+
Container. No inputs/outputs. `role="group"`, `data-slot="input-group"`. Carries the border, `h-9` height, shadow, and the `:focus-visible` / invalid ring logic that reacts to the inner `[data-slot=input-group-control]` and disabled state (`group-data-[disabled=true]/input-group` dims addons).
|
|
83
|
+
|
|
84
|
+
### `input[hlmInputGroupInput]` — `HlmInputGroupInput`
|
|
85
|
+
|
|
86
|
+
Borderless input (`hostDirectives: [HlmInput]`). No inputs of its own — all native input attributes and `HlmInput` inputs (`ariaDescribedby`, `id`, `forceInvalid`) apply directly on the element.
|
|
87
|
+
|
|
88
|
+
### `textarea[hlmInputGroupTextarea]` — `HlmInputGroupTextarea`
|
|
89
|
+
|
|
90
|
+
Borderless textarea (`hostDirectives: [HlmTextarea]`, `resize-none`). No inputs of its own; native textarea attributes apply directly.
|
|
91
|
+
|
|
92
|
+
### `[hlmInputGroupAddon]` — `HlmInputGroupAddon`
|
|
93
|
+
|
|
94
|
+
| Input | Type | Default | Description |
|
|
95
|
+
| ------- | ---------------------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------- |
|
|
96
|
+
| `align` | `'inline-start' \| 'inline-end' \| 'block-start' \| 'block-end'` | `'inline-start'` | Placement: inline prefixes/suffixes vs full-width block rows (reflected as `data-align`). |
|
|
97
|
+
|
|
98
|
+
Inline addons order themselves first/last automatically; block addons stack the group vertically (`flex-col`).
|
|
99
|
+
|
|
100
|
+
### `[hlmInputGroupText]` — `HlmInputGroupText`
|
|
101
|
+
|
|
102
|
+
Static inline text (currency symbols, units, URL fragments). No inputs/outputs.
|
|
103
|
+
|
|
104
|
+
### `button[hlmInputGroupButton]` — `HlmInputGroupButton`
|
|
105
|
+
|
|
106
|
+
| Input | Type | Default | Description |
|
|
107
|
+
| --------- | ---------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------- |
|
|
108
|
+
| `size` | `'xs' \| 'sm' \| 'icon-xs' \| 'icon-sm'` | `'xs'` | Button density; `icon-*` variants are square for glyph-only buttons (reflected as `data-size`). |
|
|
109
|
+
| `variant` | (via `HlmBtn`) | `'ghost'` | Forwarded to `HlmBtn`; the group presets the brain button config to `ghost`. |
|
|
110
|
+
| `type` | `'button' \| 'submit' \| 'reset'` | `'button'` | Native button type (bound as `[type]`). |
|
|
111
|
+
|
|
112
|
+
## Examples
|
|
113
|
+
|
|
114
|
+
### 1. Currency prefix + action button
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
import { Component, signal } from '@angular/core';
|
|
118
|
+
import { HlmInputGroupImports } from '@egose/shadcn-theme-ng/input-group';
|
|
119
|
+
|
|
120
|
+
@Component({
|
|
121
|
+
standalone: true,
|
|
122
|
+
imports: [HlmInputGroupImports],
|
|
123
|
+
template: `
|
|
124
|
+
<div hlmInputGroup>
|
|
125
|
+
<span hlmInputGroupText>$</span>
|
|
126
|
+
<input hlmInputGroupInput type="number" placeholder="Monthly budget" aria-label="Monthly budget" />
|
|
127
|
+
<button hlmInputGroupButton type="button" (click)="apply()">Apply</button>
|
|
128
|
+
</div>
|
|
129
|
+
@if (message()) {
|
|
130
|
+
<p role="status" class="tw:mt-2 tw:text-sm">{{ message() }}</p>
|
|
131
|
+
}
|
|
132
|
+
`,
|
|
133
|
+
})
|
|
134
|
+
export class CurrencyExample {
|
|
135
|
+
readonly message = signal<string | null>(null);
|
|
136
|
+
|
|
137
|
+
apply() {
|
|
138
|
+
this.message.set('Budget applied.');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 2. URL slug builder (prefix + input + suffix)
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
import { Component } from '@angular/core';
|
|
147
|
+
import { FormsModule } from '@angular/forms';
|
|
148
|
+
import { HlmInputGroupImports } from '@egose/shadcn-theme-ng/input-group';
|
|
149
|
+
|
|
150
|
+
@Component({
|
|
151
|
+
standalone: true,
|
|
152
|
+
imports: [FormsModule, HlmInputGroupImports],
|
|
153
|
+
template: `
|
|
154
|
+
<div hlmInputGroup>
|
|
155
|
+
<span hlmInputGroupText>https://egose.dev/</span>
|
|
156
|
+
<input
|
|
157
|
+
hlmInputGroupInput
|
|
158
|
+
[(ngModel)]="slug"
|
|
159
|
+
name="slug"
|
|
160
|
+
placeholder="campaign-spring"
|
|
161
|
+
aria-label="Campaign slug"
|
|
162
|
+
/>
|
|
163
|
+
<span hlmInputGroupText>.html</span>
|
|
164
|
+
</div>
|
|
165
|
+
<p class="tw:mt-2 tw:text-sm tw:text-slate-500">Preview: https://egose.dev/{{ slug || '…' }}.html</p>
|
|
166
|
+
`,
|
|
167
|
+
})
|
|
168
|
+
export class SlugExample {
|
|
169
|
+
slug = 'angular-standard';
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 3. Search with icon addon + keyboard shortcut hint
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
import { Component } from '@angular/core';
|
|
177
|
+
import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
178
|
+
import { lucideSearch } from '@ng-icons/lucide';
|
|
179
|
+
import { HlmIcon } from '@egose/shadcn-theme-ng/icon';
|
|
180
|
+
import { HlmInputGroupImports } from '@egose/shadcn-theme-ng/input-group';
|
|
181
|
+
import { HlmKbd } from '@egose/shadcn-theme-ng/kbd';
|
|
182
|
+
|
|
183
|
+
@Component({
|
|
184
|
+
standalone: true,
|
|
185
|
+
imports: [NgIcon, HlmIcon, HlmInputGroupImports, HlmKbd],
|
|
186
|
+
providers: [provideIcons({ lucideSearch })],
|
|
187
|
+
template: `
|
|
188
|
+
<div hlmInputGroup>
|
|
189
|
+
<span hlmInputGroupText><ng-icon hlm name="lucideSearch" size="sm" /></span>
|
|
190
|
+
<input hlmInputGroupInput placeholder="Search docs…" aria-label="Search docs" />
|
|
191
|
+
<div hlmInputGroupAddon align="inline-end"><kbd hlmKbd>⌘K</kbd></div>
|
|
192
|
+
</div>
|
|
193
|
+
`,
|
|
194
|
+
})
|
|
195
|
+
export class SearchExample {}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 4. Icon-only buttons (`icon-xs` / `icon-sm`)
|
|
199
|
+
|
|
200
|
+
```ts
|
|
201
|
+
import { Component, signal } from '@angular/core';
|
|
202
|
+
import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
203
|
+
import { lucideCopy, lucideCheck } from '@ng-icons/lucide';
|
|
204
|
+
import { HlmIcon } from '@egose/shadcn-theme-ng/icon';
|
|
205
|
+
import { HlmInputGroupImports } from '@egose/shadcn-theme-ng/input-group';
|
|
206
|
+
|
|
207
|
+
@Component({
|
|
208
|
+
standalone: true,
|
|
209
|
+
imports: [NgIcon, HlmIcon, HlmInputGroupImports],
|
|
210
|
+
providers: [provideIcons({ lucideCopy, lucideCheck })],
|
|
211
|
+
template: `
|
|
212
|
+
<div hlmInputGroup>
|
|
213
|
+
<input hlmInputGroupInput [value]="token()" readonly aria-label="API token" />
|
|
214
|
+
<button
|
|
215
|
+
hlmInputGroupButton
|
|
216
|
+
size="icon-xs"
|
|
217
|
+
type="button"
|
|
218
|
+
(click)="copy()"
|
|
219
|
+
[attr.aria-label]="copied() ? 'Copied' : 'Copy token'"
|
|
220
|
+
>
|
|
221
|
+
<ng-icon hlm [name]="copied() ? 'lucideCheck' : 'lucideCopy'" size="sm" />
|
|
222
|
+
</button>
|
|
223
|
+
</div>
|
|
224
|
+
`,
|
|
225
|
+
})
|
|
226
|
+
export class CopyExample {
|
|
227
|
+
readonly token = signal('sk-live-abc123');
|
|
228
|
+
readonly copied = signal(false);
|
|
229
|
+
|
|
230
|
+
async copy() {
|
|
231
|
+
await navigator.clipboard.writeText(this.token());
|
|
232
|
+
this.copied.set(true);
|
|
233
|
+
setTimeout(() => this.copied.set(false), 1500);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### 5. Block composer (textarea + block addons)
|
|
239
|
+
|
|
240
|
+
```ts
|
|
241
|
+
import { Component, signal } from '@angular/core';
|
|
242
|
+
import { FormsModule } from '@angular/forms';
|
|
243
|
+
import { HlmInputGroupImports } from '@egose/shadcn-theme-ng/input-group';
|
|
244
|
+
|
|
245
|
+
@Component({
|
|
246
|
+
standalone: true,
|
|
247
|
+
imports: [FormsModule, HlmInputGroupImports],
|
|
248
|
+
template: `
|
|
249
|
+
<div hlmInputGroup>
|
|
250
|
+
<div hlmInputGroupAddon align="block-start">Message to #design-review</div>
|
|
251
|
+
<textarea
|
|
252
|
+
hlmInputGroupTextarea
|
|
253
|
+
rows="4"
|
|
254
|
+
[(ngModel)]="draft"
|
|
255
|
+
name="draft"
|
|
256
|
+
aria-label="Message to the design-review channel"
|
|
257
|
+
placeholder="Describe the behavior you want to change…"
|
|
258
|
+
></textarea>
|
|
259
|
+
<div hlmInputGroupAddon align="block-end" class="tw:flex tw:items-center tw:justify-between">
|
|
260
|
+
<span role="status">{{ status() }}</span>
|
|
261
|
+
<button hlmInputGroupButton type="button" (click)="send()">Send</button>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
`,
|
|
265
|
+
})
|
|
266
|
+
export class ComposerExample {
|
|
267
|
+
draft = '';
|
|
268
|
+
readonly status = signal('Draft autosaved just now');
|
|
269
|
+
|
|
270
|
+
send() {
|
|
271
|
+
this.status.set('Message sent just now.');
|
|
272
|
+
this.draft = '';
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### 6. Reactive form + validation (forceInvalid + error text)
|
|
278
|
+
|
|
279
|
+
```ts
|
|
280
|
+
import { Component } from '@angular/core';
|
|
281
|
+
import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
282
|
+
import { HlmInputGroupImports } from '@egose/shadcn-theme-ng/input-group';
|
|
283
|
+
import { HlmError } from '@egose/shadcn-theme-ng/form-field';
|
|
284
|
+
|
|
285
|
+
@Component({
|
|
286
|
+
standalone: true,
|
|
287
|
+
imports: [ReactiveFormsModule, HlmInputGroupImports, HlmError],
|
|
288
|
+
template: `
|
|
289
|
+
<form [formGroup]="form" (ngSubmit)="submit()">
|
|
290
|
+
<div hlmInputGroup>
|
|
291
|
+
<span hlmInputGroupText>€</span>
|
|
292
|
+
<input
|
|
293
|
+
hlmInputGroupInput
|
|
294
|
+
type="number"
|
|
295
|
+
formControlName="price"
|
|
296
|
+
placeholder="0.00"
|
|
297
|
+
aria-label="Price in euros"
|
|
298
|
+
aria-describedby="price-error"
|
|
299
|
+
[forceInvalid]="showError()"
|
|
300
|
+
/>
|
|
301
|
+
</div>
|
|
302
|
+
@if (showError()) {
|
|
303
|
+
<hlm-error id="price-error">Enter a price greater than 0.</hlm-error>
|
|
304
|
+
}
|
|
305
|
+
<button type="submit">Save</button>
|
|
306
|
+
</form>
|
|
307
|
+
`,
|
|
308
|
+
})
|
|
309
|
+
export class ValidationExample {
|
|
310
|
+
readonly form = new FormGroup({
|
|
311
|
+
price: new FormControl<number | null>(null, { validators: [Validators.required, Validators.min(0.01)] }),
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
showError(): boolean {
|
|
315
|
+
const c = this.form.controls.price;
|
|
316
|
+
return c.invalid && (c.dirty || c.touched);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
submit() {
|
|
320
|
+
if (this.form.invalid) this.form.markAllAsTouched();
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
## Accessibility notes
|
|
326
|
+
|
|
327
|
+
- The container has `role="group"` — give the inner control an `aria-label` (or visible `<label>`) since add-on text is not automatically associated.
|
|
328
|
+
- Add-on text (`$`, `https://…`) is visual context; repeat the essential unit in the input's accessible name (`aria-label="Monthly budget in dollars"`), not just the placeholder.
|
|
329
|
+
- Icon-only `hlmInputGroupButton`s need an `aria-label` (`Copy token`, `Send`).
|
|
330
|
+
- Validation messages live outside the group — link them with `aria-describedby` + `forceInvalid` as in example 6 so the error ring and announcement stay in sync.
|
|
331
|
+
|
|
332
|
+
## Theming / CSS variables
|
|
333
|
+
|
|
334
|
+
No component-specific CSS variables; borders, rings, and muted text come from the shared tokens (`--input`, `--ring`, `--muted-foreground`, `--destructive`, `--radius`). Width/height adapt to content — constrain with `tw:max-w-*` on the group.
|
|
335
|
+
|
|
336
|
+
## Related subpaths
|
|
337
|
+
|
|
338
|
+
- `@egose/shadcn-theme-ng/input` — standalone `HlmInput` (what the group input extends).
|
|
339
|
+
- `@egose/shadcn-theme-ng/textarea` — `HlmTextarea` (what the group textarea extends).
|
|
340
|
+
- `@egose/shadcn-theme-ng/button` — `HlmBtn` variants behind the group button.
|
|
341
|
+
- `@egose/shadcn-theme-ng/kbd` — shortcut hints inside addons.
|
|
@@ -11,12 +11,12 @@ import { HlmTextarea } from '@egose/shadcn-theme-ng-tw/textarea';
|
|
|
11
11
|
|
|
12
12
|
class HlmInputGroup {
|
|
13
13
|
constructor() {
|
|
14
|
-
classes(() => 'border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/20 has-[[data-slot][data-matches-spartan-invalid=true]]:border-destructive dark:has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/40 h-9 rounded-md border shadow-xs transition-[color,box-shadow] in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][data-matches-spartan-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pe-1.5 has-[>[data-align=inline-start]]:[&>input]:ps-1.5 group/input-group relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto');
|
|
14
|
+
classes(() => 'tw:border-input tw:dark:bg-input/30 tw:has-[[data-slot=input-group-control]:focus-visible]:border-ring tw:has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 tw:has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/20 tw:has-[[data-slot][data-matches-spartan-invalid=true]]:border-destructive tw:dark:has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/40 tw:h-9 tw:rounded-md tw:border tw:shadow-xs tw:transition-[color,box-shadow] tw:in-data-[slot=combobox-content]:focus-within:border-inherit tw:in-data-[slot=combobox-content]:focus-within:ring-0 tw:has-[[data-slot=input-group-control]:focus-visible]:ring-3 tw:has-[[data-slot][data-matches-spartan-invalid=true]]:ring-3 tw:has-[>[data-align=block-end]]:h-auto tw:has-[>[data-align=block-end]]:flex-col tw:has-[>[data-align=block-start]]:h-auto tw:has-[>[data-align=block-start]]:flex-col tw:has-[>[data-align=block-end]]:[&>input]:pt-3 tw:has-[>[data-align=block-start]]:[&>input]:pb-3 tw:has-[>[data-align=inline-end]]:[&>input]:pe-1.5 tw:has-[>[data-align=inline-start]]:[&>input]:ps-1.5 tw:group/input-group tw:relative tw:flex tw:w-full tw:min-w-0 tw:max-w-full tw:items-center tw:outline-none tw:has-[>textarea]:h-auto');
|
|
15
15
|
}
|
|
16
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
17
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.
|
|
16
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
17
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.3", type: HlmInputGroup, isStandalone: true, selector: "[hlmInputGroup],hlm-input-group", host: { attributes: { "data-slot": "input-group", "role": "group" } }, ngImport: i0 });
|
|
18
18
|
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroup, decorators: [{
|
|
20
20
|
type: Directive,
|
|
21
21
|
args: [{
|
|
22
22
|
selector: '[hlmInputGroup],hlm-input-group',
|
|
@@ -27,17 +27,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
27
27
|
}]
|
|
28
28
|
}], ctorParameters: () => [] });
|
|
29
29
|
|
|
30
|
-
const inputGroupAddonVariants$1 = cva("text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] flex cursor-text items-center justify-center select-none", {
|
|
30
|
+
const inputGroupAddonVariants$1 = cva("tw:text-muted-foreground tw:h-auto tw:gap-2 tw:py-1.5 tw:text-sm tw:font-medium tw:group-data-[disabled=true]/input-group:opacity-50 tw:[&>kbd]:rounded-[calc(var(--radius)-5px)] tw:[&>ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] tw:flex tw:shrink-0 tw:cursor-text tw:items-center tw:justify-center tw:select-none", {
|
|
31
31
|
variants: {
|
|
32
32
|
align: {
|
|
33
|
-
'inline-start': 'ps-2 has-[>button]:-ms-1 has-[>kbd]:ms-[-0.15rem] order-first',
|
|
34
|
-
'inline-end': 'pe-2 has-[>button]
|
|
35
|
-
'block-start': 'px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2 order-first w-full justify-start',
|
|
36
|
-
'block-end': 'px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2 order-last w-full justify-start',
|
|
33
|
+
'inline-start': 'tw:ps-2 tw:has-[>button]:-ms-1 tw:has-[>kbd]:ms-[-0.15rem] tw:order-first',
|
|
34
|
+
'inline-end': 'tw:pe-2 tw:has-[>button]:pe-1 tw:has-[>kbd]:me-[-0.15rem] tw:order-last',
|
|
35
|
+
'block-start': 'tw:px-2.5 tw:pt-2 tw:group-has-[>input]/input-group:pt-2 tw:[.border-b]:pb-2 tw:order-first tw:w-full tw:justify-start',
|
|
36
|
+
'block-end': 'tw:px-2.5 tw:pb-2 tw:group-has-[>input]/input-group:pb-2 tw:[.border-t]:pt-2 tw:order-last tw:w-full tw:justify-start',
|
|
37
37
|
},
|
|
38
38
|
},
|
|
39
39
|
defaultVariants: {
|
|
40
|
-
align:
|
|
40
|
+
align: "tw:inline-start",
|
|
41
41
|
},
|
|
42
42
|
});
|
|
43
43
|
class HlmInputGroupAddon {
|
|
@@ -46,10 +46,10 @@ class HlmInputGroupAddon {
|
|
|
46
46
|
constructor() {
|
|
47
47
|
classes(() => inputGroupAddonVariants$1({ align: this.align() }));
|
|
48
48
|
}
|
|
49
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
50
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.
|
|
49
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupAddon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
50
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.3", type: HlmInputGroupAddon, isStandalone: true, selector: "[hlmInputGroupAddon],hlm-input-group-addon", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group", "data-slot": "input-group-addon" }, properties: { "attr.data-align": "align()" } }, ngImport: i0 });
|
|
51
51
|
}
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupAddon, decorators: [{
|
|
53
53
|
type: Directive,
|
|
54
54
|
args: [{
|
|
55
55
|
selector: '[hlmInputGroupAddon],hlm-input-group-addon',
|
|
@@ -61,13 +61,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
61
61
|
}]
|
|
62
62
|
}], ctorParameters: () => [], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }] } });
|
|
63
63
|
|
|
64
|
-
const inputGroupAddonVariants = cva('gap-2 text-sm flex items-center shadow-none', {
|
|
64
|
+
const inputGroupAddonVariants = cva('tw:gap-2 tw:text-sm tw:flex tw:items-center tw:shadow-none', {
|
|
65
65
|
variants: {
|
|
66
66
|
size: {
|
|
67
|
-
xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>ng-icon:not([class*='text-'])]:text-[length:--spacing(3.5)]",
|
|
67
|
+
xs: "tw:h-6 tw:gap-1 tw:rounded-[calc(var(--radius)-5px)] tw:px-1.5 tw:[&>ng-icon:not([class*='text-'])]:text-[length:--spacing(3.5)]",
|
|
68
68
|
sm: '',
|
|
69
|
-
'icon-xs': 'size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>ng-icon]:p-0',
|
|
70
|
-
'icon-sm': 'size-8 p-0 has-[>ng-icon]:p-0',
|
|
69
|
+
'icon-xs': 'tw:size-6 tw:rounded-[calc(var(--radius)-5px)] tw:p-0 tw:has-[>ng-icon]:p-0',
|
|
70
|
+
'icon-sm': 'tw:size-8 tw:p-0 tw:has-[>ng-icon]:p-0',
|
|
71
71
|
},
|
|
72
72
|
},
|
|
73
73
|
defaultVariants: {
|
|
@@ -82,14 +82,14 @@ class HlmInputGroupButton {
|
|
|
82
82
|
constructor() {
|
|
83
83
|
classes(() => inputGroupAddonVariants({ size: this.size() }));
|
|
84
84
|
}
|
|
85
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
86
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.
|
|
85
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupButton, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
86
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.3", type: HlmInputGroupButton, isStandalone: true, selector: "button[hlmInputGroupButton]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "type": "type()" } }, providers: [
|
|
87
87
|
provideBrnButtonConfig({
|
|
88
88
|
variant: 'ghost',
|
|
89
89
|
}),
|
|
90
90
|
], hostDirectives: [{ directive: i1.HlmBtn, inputs: ["variant", "variant"] }], ngImport: i0 });
|
|
91
91
|
}
|
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupButton, decorators: [{
|
|
93
93
|
type: Directive,
|
|
94
94
|
args: [{
|
|
95
95
|
selector: 'button[hlmInputGroupButton]',
|
|
@@ -113,12 +113,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
113
113
|
|
|
114
114
|
class HlmInputGroupInput {
|
|
115
115
|
constructor() {
|
|
116
|
-
classes(() => `rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 data-[matches-spartan-invalid=true]:ring-0 dark:bg-transparent flex-1`);
|
|
116
|
+
classes(() => `tw:rounded-none tw:border-0 tw:bg-transparent tw:shadow-none tw:ring-0 tw:focus-visible:ring-0 tw:data-[matches-spartan-invalid=true]:ring-0 tw:dark:bg-transparent tw:flex-1`);
|
|
117
117
|
}
|
|
118
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
119
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.
|
|
118
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupInput, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
119
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.3", type: HlmInputGroupInput, isStandalone: true, selector: "input[hlmInputGroupInput]", host: { attributes: { "data-slot": "input-group-control" } }, hostDirectives: [{ directive: i1$1.HlmInput }], ngImport: i0 });
|
|
120
120
|
}
|
|
121
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupInput, decorators: [{
|
|
122
122
|
type: Directive,
|
|
123
123
|
args: [{
|
|
124
124
|
selector: 'input[hlmInputGroupInput]',
|
|
@@ -129,12 +129,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
129
129
|
|
|
130
130
|
class HlmInputGroupText {
|
|
131
131
|
constructor() {
|
|
132
|
-
classes(() => "text-muted-foreground gap-2 text-sm [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] flex items-center [&_ng-icon]:pointer-events-none");
|
|
132
|
+
classes(() => "tw:text-muted-foreground tw:gap-2 tw:text-sm tw:[&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)] tw:flex tw:items-center tw:[&_ng-icon]:pointer-events-none");
|
|
133
133
|
}
|
|
134
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
135
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.
|
|
134
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupText, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
135
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.3", type: HlmInputGroupText, isStandalone: true, selector: "[hlmInputGroupText],hlm-input-group-text", ngImport: i0 });
|
|
136
136
|
}
|
|
137
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupText, decorators: [{
|
|
138
138
|
type: Directive,
|
|
139
139
|
args: [{
|
|
140
140
|
selector: '[hlmInputGroupText],hlm-input-group-text',
|
|
@@ -143,12 +143,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
143
143
|
|
|
144
144
|
class HlmInputGroupTextarea {
|
|
145
145
|
constructor() {
|
|
146
|
-
classes(() => 'rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 data-[matches-spartan-invalid=true]:ring-0 dark:bg-transparent flex-1 resize-none');
|
|
146
|
+
classes(() => 'tw:rounded-none tw:border-0 tw:bg-transparent tw:py-2 tw:shadow-none tw:ring-0 tw:focus-visible:ring-0 tw:data-[matches-spartan-invalid=true]:ring-0 tw:dark:bg-transparent tw:flex-1 tw:resize-none');
|
|
147
147
|
}
|
|
148
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
149
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupTextarea, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
149
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.3", type: HlmInputGroupTextarea, isStandalone: true, selector: "textarea[hlmInputGroupTextarea]", host: { attributes: { "data-slot": "input-group-control" } }, hostDirectives: [{ directive: i1$2.HlmTextarea }], ngImport: i0 });
|
|
150
150
|
}
|
|
151
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupTextarea, decorators: [{
|
|
152
152
|
type: Directive,
|
|
153
153
|
args: [{
|
|
154
154
|
selector: 'textarea[hlmInputGroupTextarea]',
|
|
@@ -169,8 +169,8 @@ const HlmInputGroupImports = [
|
|
|
169
169
|
HlmInputGroupTextarea,
|
|
170
170
|
];
|
|
171
171
|
class HlmInputGroupModule {
|
|
172
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
173
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.
|
|
172
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
173
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupModule, imports: [HlmInputGroup,
|
|
174
174
|
HlmInputGroupAddon,
|
|
175
175
|
HlmInputGroupButton,
|
|
176
176
|
HlmInputGroupInput,
|
|
@@ -181,9 +181,9 @@ class HlmInputGroupModule {
|
|
|
181
181
|
HlmInputGroupInput,
|
|
182
182
|
HlmInputGroupText,
|
|
183
183
|
HlmInputGroupTextarea] });
|
|
184
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.
|
|
184
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupModule });
|
|
185
185
|
}
|
|
186
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
186
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: HlmInputGroupModule, decorators: [{
|
|
187
187
|
type: NgModule,
|
|
188
188
|
args: [{
|
|
189
189
|
imports: [...HlmInputGroupImports],
|
|
@@ -196,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
196
196
|
*/
|
|
197
197
|
|
|
198
198
|
export { HlmInputGroup, HlmInputGroupAddon, HlmInputGroupButton, HlmInputGroupImports, HlmInputGroupInput, HlmInputGroupModule, HlmInputGroupText, HlmInputGroupTextarea };
|
|
199
|
-
|
|
199
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import * as i1 from '@egose/shadcn-theme-ng/button';
|
|
3
|
-
import * as i1$1 from '@egose/shadcn-theme-ng/input';
|
|
4
|
-
import * as i1$2 from '@egose/shadcn-theme-ng/textarea';
|
|
2
|
+
import * as i1 from '@egose/shadcn-theme-ng-tw/button';
|
|
3
|
+
import * as i1$1 from '@egose/shadcn-theme-ng-tw/input';
|
|
4
|
+
import * as i1$2 from '@egose/shadcn-theme-ng-tw/textarea';
|
|
5
5
|
|
|
6
6
|
declare class HlmInputGroup {
|
|
7
7
|
constructor();
|