@auldrant/ui 0.6.0 → 0.8.1
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/CHANGELOG.md +116 -0
- package/NOTICES +49 -0
- package/README.md +25 -3
- package/dist/auldrant-ui.css +1 -1
- package/dist/auldrant-ui.js +434 -337
- package/package.json +8 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
|
+
|
|
8
|
+
## [0.8.0] - 2026-02-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- feat(deps): add lucide-preact icon library ([#44](https://github.com/coloneljade/auldrant-ui/pull/44))
|
|
13
|
+
- feat(password-input): replace text toggle with icon overlay ([#44](https://github.com/coloneljade/auldrant-ui/pull/44))
|
|
14
|
+
- chore(dev): add missing error variants to test page ([#44](https://github.com/coloneljade/auldrant-ui/pull/44))
|
|
15
|
+
|
|
16
|
+
## [0.7.0] - 2026-02-27
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Change default primary from blue to green (hue 160) ([#40](https://github.com/coloneljade/auldrant-ui/pull/40))
|
|
21
|
+
- Ship 6 AAA-verified preset CSS classes (aui-blue, aui-purple, aui-teal, aui-red, aui-orange, aui-yellow) ([#40](https://github.com/coloneljade/auldrant-ui/pull/40))
|
|
22
|
+
- Expand contrast test coverage to all hues × all recommended pairs × both modes × raw + hover states ([#40](https://github.com/coloneljade/auldrant-ui/pull/40))
|
|
23
|
+
- Update README with green default and pre-built palette reference ([#40](https://github.com/coloneljade/auldrant-ui/pull/40))
|
|
24
|
+
|
|
25
|
+
## [0.6.0] - 2026-02-26
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- feat(a11y): theme contrast system with color-mix() derivation ([#34](https://github.com/coloneljade/auldrant-ui/pull/34))
|
|
30
|
+
- test: automated WCAG contrast validation ([#34](https://github.com/coloneljade/auldrant-ui/pull/34))
|
|
31
|
+
- feat: dev test page for visual testing (#19) ([#34](https://github.com/coloneljade/auldrant-ui/pull/34))
|
|
32
|
+
- docs: rewrite theming section with contrast guidance ([#34](https://github.com/coloneljade/auldrant-ui/pull/34))
|
|
33
|
+
- chore: align PR template with /pr skill format ([#34](https://github.com/coloneljade/auldrant-ui/pull/34))
|
|
34
|
+
- docs: rewrite CONTRIBUTING.md with DCO, dev test page, and merge bot workflow ([#34](https://github.com/coloneljade/auldrant-ui/pull/34))
|
|
35
|
+
|
|
36
|
+
## [0.5.2] - 2026-02-26
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- Add `homepage` and `bugs` fields to `package.json` ([#31](https://github.com/coloneljade/auldrant-ui/pull/31))
|
|
41
|
+
- npm renders these as links on the public package page ([#31](https://github.com/coloneljade/auldrant-ui/pull/31))
|
|
42
|
+
|
|
43
|
+
## [0.5.1] - 2026-02-26
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- Add `repository` field to `package.json` with the GitHub repo URL ([#30](https://github.com/coloneljade/auldrant-ui/pull/30))
|
|
48
|
+
- Required by Sigstore provenance verification during `npm publish --provenance` ([#30](https://github.com/coloneljade/auldrant-ui/pull/30))
|
|
49
|
+
- Without it, publish fails with E422: `repository.url is "", expected to match` ([#30](https://github.com/coloneljade/auldrant-ui/pull/30))
|
|
50
|
+
|
|
51
|
+
## [0.5.0] - 2026-02-26
|
|
52
|
+
|
|
53
|
+
### Added
|
|
54
|
+
|
|
55
|
+
- Add `error` prop to all form field components with `aria-invalid`, `aria-describedby`, and `role="alert"` error messages ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
56
|
+
- Add required `caption` prop to Table for accessible name via `<caption>` ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
57
|
+
- Add `status` prop to Form rendered as `<output>` for submission feedback ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
58
|
+
- Add `aria-live` character limit announcements to Textarea at threshold breakpoints ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
59
|
+
- Add `describeBy()` utility and shared `field-error` CSS class ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
60
|
+
- Remove 11 duplicate behavioral tests already covered by a11y tests with better query patterns ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
61
|
+
- Replace `querySelector` calls with accessible queries (`getByRole`, `getByLabelText`) in behavioral tests ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
62
|
+
- Add AAA section comments (`// Arrange`, `// Act`, `// Assert`) to all behavioral tests ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
63
|
+
- Configure coverage to exclude test infrastructure (`coverageSkipTestFiles`, `coveragePathIgnorePatterns`) ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
64
|
+
- Fix publishing config: correct CHANGELOG format, remove CHANGELOG from package files ([#28](https://github.com/coloneljade/auldrant-ui/pull/28))
|
|
65
|
+
|
|
66
|
+
## [0.4.0] - 2026-02-26
|
|
67
|
+
|
|
68
|
+
### Added
|
|
69
|
+
|
|
70
|
+
- **feat(test)**: add axe-core a11y test suite (19 files, setup helpers, 18 test files) ([#20](https://github.com/coloneljade/auldrant-ui/pull/20))
|
|
71
|
+
- **refactor(test)**: migrate a11y assertions out of behavioral tests (cleanup + deletions) ([#20](https://github.com/coloneljade/auldrant-ui/pull/20))
|
|
72
|
+
- **docs(rules)**: mandate AAA comments and WCAG SC references in tests ([#20](https://github.com/coloneljade/auldrant-ui/pull/20))
|
|
73
|
+
|
|
74
|
+
## [0.3.0] - 2026-02-25
|
|
75
|
+
|
|
76
|
+
### Added
|
|
77
|
+
|
|
78
|
+
- Configure Vite, TypeScript, Biome, devcontainer, and test setup ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
79
|
+
- Add routing and title signals for SPA navigation ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
80
|
+
- Shared types, utilities, and composable CSS classes ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
81
|
+
- Semantic HTML-first — native elements before ARIA ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
82
|
+
- CSS Grid layout, em-based spacing, CSS modules ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
83
|
+
- Accessible form field management (`FormField` wrapper) ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
84
|
+
- SkipLink and Nav for keyboard navigation ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
85
|
+
- Type-safe component props (TypeScript strict mode) ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
86
|
+
- Comprehensive test coverage (114 tests) ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
87
|
+
- Pit of success design principle for component APIs ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
88
|
+
- Binary tools principle (Biome fixes, not manual edits) ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
89
|
+
- Mandatory skills workflow (staging, pushing, PRs) ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
90
|
+
- Import aliases (`@components`, `@scripts`, `@signals`, `@styles`) ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
91
|
+
- **Head component** — meta/document head management (issue #18) ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
92
|
+
- **Form data typing** — generic type parameter for typed onSubmit (issue #8) ([#7](https://github.com/coloneljade/auldrant-ui/pull/7))
|
|
93
|
+
|
|
94
|
+
## [0.2.0] - 2026-02-24
|
|
95
|
+
|
|
96
|
+
### Added
|
|
97
|
+
|
|
98
|
+
- Remove CJS output and UMD name — ESM-only library ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
99
|
+
- Fix CI publish failure by skipping lefthook in CI environment ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
100
|
+
- Add `@components` and `@styles` import path aliases (tsconfig + vite) ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
101
|
+
- Add GitHub CLI feature and YAML extension to devcontainer ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
102
|
+
- Create VSCode tasks for all project scripts (test, build, check, typecheck, storybook) ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
103
|
+
- Add component base types (BaseProps, FieldProps) and cx() class utility ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
104
|
+
|
|
105
|
+
## [0.1.0] - 2026-02-24
|
|
106
|
+
|
|
107
|
+
### Added
|
|
108
|
+
|
|
109
|
+
- Remove CJS output and UMD name — ESM-only library ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
110
|
+
- Fix CI publish failure by skipping lefthook in CI environment ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
111
|
+
- Add `@components` and `@styles` import path aliases (tsconfig + vite) ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
112
|
+
- Add GitHub CLI feature and YAML extension to devcontainer ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
113
|
+
- Create VSCode tasks for all project scripts (test, build, check, typecheck, storybook) ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
114
|
+
- Add component base types (BaseProps, FieldProps) and cx() class utility ([#6](https://github.com/coloneljade/auldrant-ui/pull/6))
|
|
115
|
+
|
|
116
|
+
## [0.0.0]
|
package/NOTICES
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
This project includes third-party software. Their licenses and copyright
|
|
2
|
+
notices are reproduced below.
|
|
3
|
+
|
|
4
|
+
================================================================================
|
|
5
|
+
|
|
6
|
+
lucide-preact — https://github.com/lucide-icons/lucide
|
|
7
|
+
Icons used in component library UI.
|
|
8
|
+
|
|
9
|
+
ISC License
|
|
10
|
+
|
|
11
|
+
Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2026 as part
|
|
12
|
+
of Feather (MIT). All other copyright (c) for Lucide are held by Lucide
|
|
13
|
+
Contributors 2026.
|
|
14
|
+
|
|
15
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
16
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
17
|
+
copyright notice and this permission notice appear in all copies.
|
|
18
|
+
|
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
20
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
21
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
22
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
23
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
24
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
25
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
The MIT License (MIT) (for portions derived from Feather)
|
|
30
|
+
|
|
31
|
+
Copyright (c) 2013-2026 Cole Bemis
|
|
32
|
+
|
|
33
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
34
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
35
|
+
in the Software without restriction, including without limitation the rights
|
|
36
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
37
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
38
|
+
furnished to do so, subject to the following conditions:
|
|
39
|
+
|
|
40
|
+
The above copyright notice and this permission notice shall be included in all
|
|
41
|
+
copies or substantial portions of the Software.
|
|
42
|
+
|
|
43
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
44
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
45
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
46
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
47
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
48
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
49
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -113,7 +113,7 @@ Override primary, white, and black for complete control:
|
|
|
113
113
|
|
|
114
114
|
| Token | Default | Description |
|
|
115
115
|
|-------|---------|-------------|
|
|
116
|
-
| `--aui-base-primary` | `oklch(0.78 0.18
|
|
116
|
+
| `--aui-base-primary` | `oklch(0.78 0.18 160)` | Brand accent color (green) |
|
|
117
117
|
| `--aui-base-white` | `#f5f5f5` | Light endpoint (light-mode background, dark-mode text) |
|
|
118
118
|
| `--aui-base-black` | `#1a1a1a` | Dark endpoint (dark-mode background, light-mode text) |
|
|
119
119
|
| `--aui-base-error` | `oklch(0.78 0.22 27)` | Error/danger semantic color |
|
|
@@ -155,9 +155,31 @@ Custom white/black pairs with lower inherent contrast (e.g. `#e8e8e8` / `#2a2a2a
|
|
|
155
155
|
|
|
156
156
|
### Primary color guidance
|
|
157
157
|
|
|
158
|
-
Use oklch lightness **0.75–0.80** and chroma **0.15–0.22** for the primary color.
|
|
158
|
+
Use oklch lightness **0.75–0.80** and chroma **0.15–0.22** for the primary color. All verified hue families are available as pre-built palettes (see below). Custom hues at these ranges generally pass AAA — verify with a [contrast checker](https://webaim.org/resources/contrastchecker/) if using untested values.
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
### Pre-built palettes
|
|
161
|
+
|
|
162
|
+
AAA-verified preset classes — apply directly on `<Theme>`:
|
|
163
|
+
|
|
164
|
+
| Class | Value | Notes |
|
|
165
|
+
|-------|-------|-------|
|
|
166
|
+
| *(default)* | `oklch(0.78 0.18 160)` | Green — no class needed |
|
|
167
|
+
| `aui-blue` | `oklch(0.78 0.18 260)` | |
|
|
168
|
+
| `aui-purple` | `oklch(0.78 0.18 300)` | |
|
|
169
|
+
| `aui-teal` | `oklch(0.78 0.15 195)` | Lower chroma for teal gamut |
|
|
170
|
+
| `aui-red` | `oklch(0.78 0.22 27)` | Higher chroma for red vibrancy |
|
|
171
|
+
| `aui-orange` | `oklch(0.78 0.18 55)` | |
|
|
172
|
+
| `aui-yellow` | `oklch(0.78 0.18 95)` | Light mode shifts toward olive/amber (expected) |
|
|
173
|
+
|
|
174
|
+
```tsx
|
|
175
|
+
<Theme class="aui-blue"> {/* override default green with blue */}
|
|
176
|
+
<App />
|
|
177
|
+
</Theme>
|
|
178
|
+
|
|
179
|
+
<Theme> {/* green — the default, no class needed */}
|
|
180
|
+
<App />
|
|
181
|
+
</Theme>
|
|
182
|
+
```
|
|
161
183
|
|
|
162
184
|
### Nestable themes
|
|
163
185
|
|
package/dist/auldrant-ui.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--aui-base-primary: oklch(.78 .18
|
|
1
|
+
:root{--aui-base-primary: oklch(.78 .18 160);--aui-base-white: #f5f5f5;--aui-base-black: #1a1a1a;--aui-base-error: oklch(.78 .22 27);--aui-base-success: oklch(.78 .18 145);--_aui-fg: var(--aui-base-white);--_aui-bg: var(--aui-base-black);--aui-color-text: var(--_aui-fg);--aui-color-text-muted: color-mix(in oklch, var(--_aui-fg) 82%, var(--_aui-bg));--aui-color-background: var(--_aui-bg);--aui-color-background-hover: color-mix(in oklch, var(--_aui-bg) 92%, var(--_aui-fg));--aui-color-surface: color-mix(in oklch, var(--_aui-bg) 97%, var(--_aui-fg));--aui-color-border: color-mix(in oklch, var(--_aui-bg) 50%, var(--_aui-fg));--aui-color-primary: var(--aui-base-primary);--aui-color-primary-hover: color-mix(in oklch, var(--aui-base-primary) 85%, var(--_aui-fg));--aui-color-focus-ring: var(--aui-base-primary);--aui-color-error: var(--aui-base-error);--aui-color-success: var(--aui-base-success)}@media(prefers-color-scheme:light){:root{--_aui-fg: var(--aui-base-black);--_aui-bg: var(--aui-base-white);--aui-color-primary: color-mix(in oklch, var(--aui-base-primary) 33%, var(--_aui-fg));--aui-color-primary-hover: color-mix(in oklch, var(--aui-base-primary) 25%, var(--_aui-fg));--aui-color-focus-ring: color-mix(in oklch, var(--aui-base-primary) 33%, var(--_aui-fg));--aui-color-error: color-mix(in oklch, var(--aui-base-error) 33%, var(--_aui-fg));--aui-color-success: color-mix(in oklch, var(--aui-base-success) 33%, var(--_aui-fg))}}.aui-blue{--aui-base-primary: oklch(.78 .18 260)}.aui-purple{--aui-base-primary: oklch(.78 .18 300)}.aui-teal{--aui-base-primary: oklch(.78 .15 195)}.aui-red{--aui-base-primary: oklch(.78 .22 27)}.aui-orange{--aui-base-primary: oklch(.78 .18 55)}.aui-yellow{--aui-base-primary: oklch(.78 .18 95)}._button_4gn7y_1{padding:.5em 1em;border:1px solid var(--aui-color-border);border-radius:.25em;background:var(--aui-color-primary);color:var(--aui-color-background);font:inherit;cursor:pointer}._button_4gn7y_1:hover{background:var(--aui-color-primary-hover)}._card_awzw5_1{display:grid;gap:.5em;padding:1em;border:1px solid var(--aui-color-border);border-radius:.25em;background:var(--aui-color-surface)}._field_17xwz_1{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:.5em}._error_17xwz_12{grid-column:2}._form_jr324_1{display:grid;gap:1em}._actions_jr324_6{display:grid;grid-auto-flow:column;justify-content:start;gap:.5em}._status_jr324_13{margin:0;font-size:.875em;color:var(--aui-color-text-muted)}._field_7l9ux_1{display:grid;grid-template-columns:auto 1fr;align-items:start;gap:.5em}._label_7l9ux_8{padding-top:.25em}._required_7l9ux_12{color:var(--aui-color-error)}._error_7l9ux_16{grid-column:2}._nav_778nl_1{display:grid;gap:.5em}._title_778nl_6{font-weight:700}._wrapper_16zfv_1{position:relative}._input_16zfv_5{width:100%;padding-right:2.5em}._toggle_16zfv_11{position:absolute;right:.5em;top:50%;transform:translateY(-50%);display:grid;place-items:center;padding:.25em;border:none;background:none;color:var(--aui-color-text);cursor:pointer}._fieldset_lymkd_1{border:none;padding:0}._legend_lymkd_6{font-weight:700;margin-bottom:.5em}._option_lymkd_11{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:.5em;margin-bottom:.25em}._section_4nogy_1{display:grid;gap:1em}._skip_xbsul_1{position:absolute;top:-100%;left:0;padding:.5em 1em;background:var(--aui-color-background);color:var(--aui-color-primary);z-index:1000}._skip_xbsul_1:focus{top:0}._table_dls60_1{width:100%;border-collapse:collapse}._caption_dls60_6{text-align:left;padding:.5em 0;font-weight:700}._table_dls60_1 th,._table_dls60_1 td{padding:.5em;text-align:left;border-bottom:1px solid var(--aui-color-border)}._table_dls60_1 th{font-weight:700;color:var(--aui-color-text)}._table_dls60_1 td{color:var(--aui-color-text)}._focus-ring_4u8pk_3:focus-visible{outline:2px solid var(--aui-color-focus-ring);outline-offset:2px}._disabled_4u8pk_8:disabled{opacity:.5;cursor:not-allowed}._text-input_4u8pk_13{padding:.375em .5em;border:1px solid var(--aui-color-border);border-radius:.25em;background:var(--aui-color-background);color:var(--aui-color-text);font:inherit}._link_4u8pk_22{color:var(--aui-color-primary);text-decoration:underline;cursor:pointer}._link_4u8pk_22:hover{color:var(--aui-color-primary-hover)}._check-input_4u8pk_32{accent-color:var(--aui-color-primary)}._field-error_4u8pk_36{margin:0;font-size:.875em;color:var(--aui-color-error)}._visually-hidden_4u8pk_42{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}._wrapper_1kyv1_1{display:grid;gap:.25em}._textarea_1kyv1_6{resize:vertical}._counter_1kyv1_11{justify-self:end;font-size:.875em;color:var(--aui-color-text-muted)}._theme_1x47p_11{display:contents;--aui-color-text: var(--_aui-fg);--aui-color-text-muted: color-mix(in oklch, var(--_aui-fg) 82%, var(--_aui-bg));--aui-color-background: var(--_aui-bg);--aui-color-background-hover: color-mix(in oklch, var(--_aui-bg) 92%, var(--_aui-fg));--aui-color-surface: color-mix(in oklch, var(--_aui-bg) 97%, var(--_aui-fg));--aui-color-border: color-mix(in oklch, var(--_aui-bg) 50%, var(--_aui-fg));--aui-color-primary: var(--aui-base-primary);--aui-color-primary-hover: color-mix(in oklch, var(--aui-base-primary) 85%, var(--_aui-fg));--aui-color-focus-ring: var(--aui-base-primary);--aui-color-error: var(--aui-base-error);--aui-color-success: var(--aui-base-success)}
|
package/dist/auldrant-ui.js
CHANGED
|
@@ -1,545 +1,642 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useId as
|
|
3
|
-
import { signal as
|
|
4
|
-
|
|
1
|
+
import { jsx as l, jsxs as m, Fragment as V } from "preact/jsx-runtime";
|
|
2
|
+
import { useId as v } from "preact/hooks";
|
|
3
|
+
import { signal as A, useSignal as $, effect as J } from "@preact/signals";
|
|
4
|
+
import { h as T, toChildArray as Q } from "preact";
|
|
5
|
+
function b(...t) {
|
|
5
6
|
return t.filter(Boolean).join(" ");
|
|
6
7
|
}
|
|
7
8
|
function g(...t) {
|
|
8
9
|
return t.filter(Boolean).join(" ") || void 0;
|
|
9
10
|
}
|
|
10
|
-
const
|
|
11
|
-
button:
|
|
12
|
-
},
|
|
13
|
-
const { label: e, onClick:
|
|
14
|
-
return /* @__PURE__ */
|
|
15
|
-
},
|
|
16
|
-
card:
|
|
17
|
-
},
|
|
18
|
-
const { children: e, class:
|
|
19
|
-
return /* @__PURE__ */
|
|
20
|
-
},
|
|
21
|
-
field:
|
|
22
|
-
input:
|
|
23
|
-
error:
|
|
24
|
-
},
|
|
25
|
-
const { label: e, name:
|
|
26
|
-
return /* @__PURE__ */
|
|
27
|
-
/* @__PURE__ */
|
|
11
|
+
const X = "_button_4gn7y_1 _focus-ring_4u8pk_3 _disabled_4u8pk_8", Y = {
|
|
12
|
+
button: X
|
|
13
|
+
}, O = (t) => {
|
|
14
|
+
const { label: e, onClick: s, type: n = "button", disabled: r, class: o } = t;
|
|
15
|
+
return /* @__PURE__ */ l("button", { type: n, class: b(Y.button, o), onClick: s, disabled: r, children: e });
|
|
16
|
+
}, ee = "_card_awzw5_1", te = {
|
|
17
|
+
card: ee
|
|
18
|
+
}, ut = (t) => {
|
|
19
|
+
const { children: e, class: s } = t;
|
|
20
|
+
return /* @__PURE__ */ l("div", { class: b(te.card, s), children: e });
|
|
21
|
+
}, se = "_field_17xwz_1", ne = "_input_17xwz_8 _check-input_4u8pk_32 _focus-ring_4u8pk_3 _disabled_4u8pk_8", re = "_error_17xwz_12 _field-error_4u8pk_36", L = {
|
|
22
|
+
field: se,
|
|
23
|
+
input: ne,
|
|
24
|
+
error: re
|
|
25
|
+
}, _t = (t) => {
|
|
26
|
+
const { label: e, name: s, checked: n, required: r, disabled: o, error: a, onChange: c, class: i } = t, p = v(), h = `${p}-error`;
|
|
27
|
+
return /* @__PURE__ */ m("div", { class: b(L.field, i), children: [
|
|
28
|
+
/* @__PURE__ */ l(
|
|
28
29
|
"input",
|
|
29
30
|
{
|
|
30
|
-
id:
|
|
31
|
-
class:
|
|
31
|
+
id: p,
|
|
32
|
+
class: L.input,
|
|
32
33
|
type: "checkbox",
|
|
33
|
-
name:
|
|
34
|
-
checked:
|
|
35
|
-
required:
|
|
36
|
-
disabled:
|
|
34
|
+
name: s,
|
|
35
|
+
checked: n,
|
|
36
|
+
required: r,
|
|
37
|
+
disabled: o,
|
|
37
38
|
"aria-invalid": !!a || void 0,
|
|
38
|
-
"aria-describedby": g(a &&
|
|
39
|
-
onChange:
|
|
39
|
+
"aria-describedby": g(a && h),
|
|
40
|
+
onChange: c && ((u) => c(u.target.checked))
|
|
40
41
|
}
|
|
41
42
|
),
|
|
42
|
-
/* @__PURE__ */
|
|
43
|
-
a && /* @__PURE__ */
|
|
43
|
+
/* @__PURE__ */ l("label", { for: p, children: e }),
|
|
44
|
+
a && /* @__PURE__ */ l("p", { id: h, class: L.error, role: "alert", children: a })
|
|
44
45
|
] });
|
|
45
|
-
},
|
|
46
|
-
link:
|
|
47
|
-
},
|
|
48
|
-
const { href: e, fileName:
|
|
49
|
-
return /* @__PURE__ */
|
|
50
|
-
},
|
|
51
|
-
form:
|
|
52
|
-
actions:
|
|
53
|
-
status:
|
|
54
|
-
},
|
|
46
|
+
}, le = "_link_7wgic_1 _link_4u8pk_22 _focus-ring_4u8pk_3", ae = {
|
|
47
|
+
link: le
|
|
48
|
+
}, pt = (t) => {
|
|
49
|
+
const { href: e, fileName: s, label: n, class: r } = t;
|
|
50
|
+
return /* @__PURE__ */ l("a", { href: e, download: s, class: b(ae.link, r), children: n });
|
|
51
|
+
}, oe = "_form_jr324_1", ce = "_actions_jr324_6", ie = "_status_jr324_13", j = {
|
|
52
|
+
form: oe,
|
|
53
|
+
actions: ce,
|
|
54
|
+
status: ie
|
|
55
|
+
}, ht = (t) => {
|
|
55
56
|
const {
|
|
56
57
|
onSubmit: e,
|
|
57
|
-
submitLabel:
|
|
58
|
-
resetLabel:
|
|
59
|
-
status:
|
|
60
|
-
children:
|
|
58
|
+
submitLabel: s = "Submit",
|
|
59
|
+
resetLabel: n,
|
|
60
|
+
status: r,
|
|
61
|
+
children: o,
|
|
61
62
|
class: a
|
|
62
63
|
} = t;
|
|
63
|
-
return /* @__PURE__ */
|
|
64
|
+
return /* @__PURE__ */ m(
|
|
64
65
|
"form",
|
|
65
66
|
{
|
|
66
|
-
class:
|
|
67
|
-
onSubmit: (
|
|
68
|
-
|
|
69
|
-
const i = new FormData(
|
|
67
|
+
class: b(j.form, a),
|
|
68
|
+
onSubmit: (c) => {
|
|
69
|
+
c.preventDefault();
|
|
70
|
+
const i = new FormData(c.currentTarget);
|
|
70
71
|
e(i);
|
|
71
72
|
},
|
|
72
73
|
children: [
|
|
73
|
-
|
|
74
|
-
/* @__PURE__ */
|
|
75
|
-
/* @__PURE__ */
|
|
76
|
-
|
|
74
|
+
o,
|
|
75
|
+
/* @__PURE__ */ m("div", { class: j.actions, children: [
|
|
76
|
+
/* @__PURE__ */ l(O, { type: "submit", label: s }),
|
|
77
|
+
n && /* @__PURE__ */ l(O, { type: "reset", label: n })
|
|
77
78
|
] }),
|
|
78
|
-
|
|
79
|
+
r && /* @__PURE__ */ l("output", { class: j.status, children: r })
|
|
79
80
|
]
|
|
80
81
|
}
|
|
81
82
|
);
|
|
82
|
-
},
|
|
83
|
-
field:
|
|
84
|
-
label:
|
|
85
|
-
required:
|
|
86
|
-
error:
|
|
87
|
-
},
|
|
88
|
-
const { for: e, label:
|
|
89
|
-
return /* @__PURE__ */
|
|
90
|
-
/* @__PURE__ */
|
|
91
|
-
|
|
83
|
+
}, de = "_field_7l9ux_1", ue = "_label_7l9ux_8", _e = "_required_7l9ux_12", pe = "_error_7l9ux_16 _field-error_4u8pk_36", S = {
|
|
84
|
+
field: de,
|
|
85
|
+
label: ue,
|
|
86
|
+
required: _e,
|
|
87
|
+
error: pe
|
|
88
|
+
}, x = (t) => {
|
|
89
|
+
const { for: e, label: s, required: n, error: r, errorId: o, children: a, class: c } = t;
|
|
90
|
+
return /* @__PURE__ */ m("div", { class: b(S.field, c), children: [
|
|
91
|
+
/* @__PURE__ */ m("label", { class: S.label, for: e, children: [
|
|
92
|
+
s,
|
|
92
93
|
":",
|
|
93
|
-
|
|
94
|
+
n && /* @__PURE__ */ m("span", { class: S.required, "aria-hidden": "true", children: [
|
|
94
95
|
" ",
|
|
95
96
|
"*"
|
|
96
97
|
] })
|
|
97
98
|
] }),
|
|
98
99
|
a,
|
|
99
|
-
|
|
100
|
+
r && /* @__PURE__ */ l("p", { id: o, class: S.error, role: "alert", children: r })
|
|
100
101
|
] });
|
|
101
|
-
},
|
|
102
|
-
input:
|
|
103
|
-
},
|
|
102
|
+
}, he = "_input_1j10x_1 _text-input_4u8pk_13 _focus-ring_4u8pk_3 _disabled_4u8pk_8", me = {
|
|
103
|
+
input: he
|
|
104
|
+
}, be = {
|
|
104
105
|
email: "email",
|
|
105
106
|
tel: "tel",
|
|
106
107
|
url: "url"
|
|
107
|
-
},
|
|
108
|
+
}, mt = (t) => {
|
|
108
109
|
const {
|
|
109
110
|
label: e,
|
|
110
|
-
name:
|
|
111
|
-
type:
|
|
112
|
-
value:
|
|
113
|
-
placeholder:
|
|
111
|
+
name: s,
|
|
112
|
+
type: n = "text",
|
|
113
|
+
value: r,
|
|
114
|
+
placeholder: o,
|
|
114
115
|
maxLength: a,
|
|
115
|
-
autocomplete:
|
|
116
|
+
autocomplete: c,
|
|
116
117
|
readOnly: i,
|
|
117
|
-
pattern:
|
|
118
|
-
required:
|
|
118
|
+
pattern: p,
|
|
119
|
+
required: h,
|
|
119
120
|
disabled: u,
|
|
120
121
|
error: _,
|
|
121
|
-
onInput:
|
|
122
|
-
class:
|
|
123
|
-
} = t, k =
|
|
124
|
-
return /* @__PURE__ */
|
|
125
|
-
|
|
122
|
+
onInput: d,
|
|
123
|
+
class: f
|
|
124
|
+
} = t, k = v(), y = `${k}-error`;
|
|
125
|
+
return /* @__PURE__ */ l(
|
|
126
|
+
x,
|
|
126
127
|
{
|
|
127
128
|
label: e,
|
|
128
129
|
for: k,
|
|
129
|
-
required:
|
|
130
|
+
required: h,
|
|
130
131
|
error: _,
|
|
131
132
|
errorId: y,
|
|
132
|
-
class:
|
|
133
|
-
children: /* @__PURE__ */
|
|
133
|
+
class: f,
|
|
134
|
+
children: /* @__PURE__ */ l(
|
|
134
135
|
"input",
|
|
135
136
|
{
|
|
136
137
|
id: k,
|
|
137
|
-
class:
|
|
138
|
-
type:
|
|
139
|
-
name:
|
|
140
|
-
value:
|
|
141
|
-
placeholder:
|
|
138
|
+
class: me.input,
|
|
139
|
+
type: n,
|
|
140
|
+
name: s,
|
|
141
|
+
value: r,
|
|
142
|
+
placeholder: o,
|
|
142
143
|
maxLength: a,
|
|
143
|
-
autoComplete:
|
|
144
|
+
autoComplete: c ?? be[n],
|
|
144
145
|
readOnly: i,
|
|
145
|
-
pattern:
|
|
146
|
-
required:
|
|
146
|
+
pattern: p,
|
|
147
|
+
required: h,
|
|
147
148
|
disabled: u,
|
|
148
149
|
"aria-invalid": !!_ || void 0,
|
|
149
150
|
"aria-describedby": g(_ && y),
|
|
150
|
-
onInput:
|
|
151
|
+
onInput: d && ((C) => d(C.target.value))
|
|
151
152
|
}
|
|
152
153
|
)
|
|
153
154
|
}
|
|
154
155
|
);
|
|
155
|
-
}, P =
|
|
156
|
-
function
|
|
156
|
+
}, P = A(window.location.pathname), G = A(window.location.hash.slice(1));
|
|
157
|
+
function fe(t) {
|
|
157
158
|
const e = t.indexOf("#");
|
|
158
|
-
let
|
|
159
|
-
e >= 0 && (
|
|
160
|
-
const
|
|
161
|
-
let
|
|
162
|
-
return
|
|
159
|
+
let s = "", n = t;
|
|
160
|
+
e >= 0 && (s = t.slice(e + 1), n = t.slice(0, e));
|
|
161
|
+
const r = n.indexOf("?");
|
|
162
|
+
let o = "", a = n;
|
|
163
|
+
return r >= 0 && (o = n.slice(r), a = n.slice(0, r)), { pathname: a || "/", search: o, hash: s };
|
|
163
164
|
}
|
|
164
|
-
function
|
|
165
|
-
const { pathname:
|
|
166
|
-
e?.replace ? history.replaceState(null, "",
|
|
165
|
+
function ve(t, e) {
|
|
166
|
+
const { pathname: s, search: n, hash: r } = fe(t), o = s + n + (r ? `#${r}` : "");
|
|
167
|
+
e?.replace ? history.replaceState(null, "", o) : history.pushState(null, "", o), P.value = s, G.value = r;
|
|
167
168
|
}
|
|
168
169
|
window.addEventListener("popstate", () => {
|
|
169
|
-
P.value = window.location.pathname,
|
|
170
|
+
P.value = window.location.pathname, G.value = window.location.hash.slice(1);
|
|
170
171
|
});
|
|
171
|
-
const
|
|
172
|
-
link:
|
|
172
|
+
const ke = "_link_7wgic_1 _link_4u8pk_22 _focus-ring_4u8pk_3", H = {
|
|
173
|
+
link: ke
|
|
173
174
|
};
|
|
174
|
-
function
|
|
175
|
+
function ge(t) {
|
|
175
176
|
try {
|
|
176
177
|
return new URL(t, window.location.href).origin !== window.location.origin;
|
|
177
178
|
} catch {
|
|
178
179
|
return !1;
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
|
-
const
|
|
182
|
-
const { href: e, children:
|
|
183
|
-
return
|
|
182
|
+
const bt = (t) => {
|
|
183
|
+
const { href: e, children: s, external: n, class: r } = t;
|
|
184
|
+
return n ?? ge(e) ? /* @__PURE__ */ l("a", { href: e, class: b(H.link, r), rel: "noopener noreferrer", children: s }) : /* @__PURE__ */ l(
|
|
184
185
|
"a",
|
|
185
186
|
{
|
|
186
187
|
href: e,
|
|
187
|
-
class:
|
|
188
|
+
class: b(H.link, r),
|
|
188
189
|
onClick: (a) => {
|
|
189
|
-
a.preventDefault(),
|
|
190
|
+
a.preventDefault(), ve(e);
|
|
190
191
|
},
|
|
191
|
-
children:
|
|
192
|
+
children: s
|
|
192
193
|
}
|
|
193
194
|
);
|
|
194
|
-
},
|
|
195
|
-
nav:
|
|
196
|
-
title:
|
|
197
|
-
},
|
|
198
|
-
const { title: e, children:
|
|
199
|
-
return /* @__PURE__ */
|
|
200
|
-
e && /* @__PURE__ */
|
|
201
|
-
|
|
195
|
+
}, ye = "_nav_778nl_1", we = "_title_778nl_6", D = {
|
|
196
|
+
nav: ye,
|
|
197
|
+
title: we
|
|
198
|
+
}, ft = (t) => {
|
|
199
|
+
const { title: e, children: s, class: n } = t, r = v();
|
|
200
|
+
return /* @__PURE__ */ m("nav", { class: b(D.nav, n), "aria-labelledby": e ? r : void 0, children: [
|
|
201
|
+
e && /* @__PURE__ */ l("h2", { id: r, class: D.title, children: e }),
|
|
202
|
+
s
|
|
202
203
|
] });
|
|
203
|
-
},
|
|
204
|
-
input:
|
|
205
|
-
},
|
|
204
|
+
}, $e = "_input_1j10x_1 _text-input_4u8pk_13 _focus-ring_4u8pk_3 _disabled_4u8pk_8", xe = {
|
|
205
|
+
input: $e
|
|
206
|
+
}, vt = (t) => {
|
|
206
207
|
const {
|
|
207
208
|
label: e,
|
|
208
|
-
name:
|
|
209
|
-
min:
|
|
210
|
-
max:
|
|
211
|
-
step:
|
|
209
|
+
name: s,
|
|
210
|
+
min: n,
|
|
211
|
+
max: r,
|
|
212
|
+
step: o,
|
|
212
213
|
value: a,
|
|
213
|
-
placeholder:
|
|
214
|
+
placeholder: c,
|
|
214
215
|
required: i,
|
|
215
|
-
disabled:
|
|
216
|
-
error:
|
|
216
|
+
disabled: p,
|
|
217
|
+
error: h,
|
|
217
218
|
onInput: u,
|
|
218
219
|
class: _
|
|
219
|
-
} = t,
|
|
220
|
-
return /* @__PURE__ */
|
|
221
|
-
|
|
220
|
+
} = t, d = v(), f = `${d}-error`;
|
|
221
|
+
return /* @__PURE__ */ l(
|
|
222
|
+
x,
|
|
222
223
|
{
|
|
223
224
|
label: e,
|
|
224
|
-
for:
|
|
225
|
+
for: d,
|
|
225
226
|
required: i,
|
|
226
|
-
error:
|
|
227
|
-
errorId:
|
|
227
|
+
error: h,
|
|
228
|
+
errorId: f,
|
|
228
229
|
class: _,
|
|
229
|
-
children: /* @__PURE__ */
|
|
230
|
+
children: /* @__PURE__ */ l(
|
|
230
231
|
"input",
|
|
231
232
|
{
|
|
232
|
-
id:
|
|
233
|
-
class:
|
|
233
|
+
id: d,
|
|
234
|
+
class: xe.input,
|
|
234
235
|
type: "number",
|
|
235
|
-
name:
|
|
236
|
-
min:
|
|
237
|
-
max:
|
|
238
|
-
step:
|
|
236
|
+
name: s,
|
|
237
|
+
min: n,
|
|
238
|
+
max: r,
|
|
239
|
+
step: o,
|
|
239
240
|
value: a,
|
|
240
|
-
placeholder:
|
|
241
|
+
placeholder: c,
|
|
241
242
|
required: i,
|
|
242
|
-
disabled:
|
|
243
|
-
"aria-invalid": !!
|
|
244
|
-
"aria-describedby": g(
|
|
243
|
+
disabled: p,
|
|
244
|
+
"aria-invalid": !!h || void 0,
|
|
245
|
+
"aria-describedby": g(h && f),
|
|
245
246
|
onInput: u && ((k) => u(k.target.valueAsNumber))
|
|
246
247
|
}
|
|
247
248
|
)
|
|
248
249
|
}
|
|
249
250
|
);
|
|
250
|
-
},
|
|
251
|
-
wrapper:
|
|
252
|
-
input:
|
|
253
|
-
toggle:
|
|
254
|
-
}
|
|
251
|
+
}, Ce = "_wrapper_16zfv_1", Ie = "_input_16zfv_5 _text-input_4u8pk_13 _focus-ring_4u8pk_3 _disabled_4u8pk_8", Ne = "_toggle_16zfv_11 _focus-ring_4u8pk_3 _disabled_4u8pk_8", q = {
|
|
252
|
+
wrapper: Ce,
|
|
253
|
+
input: Ie,
|
|
254
|
+
toggle: Ne
|
|
255
|
+
};
|
|
256
|
+
const Se = (...t) => t.filter((e, s, n) => !!e && e.trim() !== "" && n.indexOf(e) === s).join(" ").trim();
|
|
257
|
+
const F = (t) => t.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
258
|
+
const Le = (t) => t.replace(
|
|
259
|
+
/^([A-Z])|[\s-_]+(\w)/g,
|
|
260
|
+
(e, s, n) => n ? n.toUpperCase() : s.toLowerCase()
|
|
261
|
+
);
|
|
262
|
+
const R = (t) => {
|
|
263
|
+
const e = Le(t);
|
|
264
|
+
return e.charAt(0).toUpperCase() + e.slice(1);
|
|
265
|
+
};
|
|
266
|
+
var je = {
|
|
267
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
268
|
+
width: 24,
|
|
269
|
+
height: 24,
|
|
270
|
+
viewBox: "0 0 24 24",
|
|
271
|
+
fill: "none",
|
|
272
|
+
stroke: "currentColor",
|
|
273
|
+
"stroke-width": "2",
|
|
274
|
+
"stroke-linecap": "round",
|
|
275
|
+
"stroke-linejoin": "round"
|
|
276
|
+
};
|
|
277
|
+
const qe = (t) => {
|
|
278
|
+
for (const e in t)
|
|
279
|
+
if (e.startsWith("aria-") || e === "role" || e === "title")
|
|
280
|
+
return !0;
|
|
281
|
+
return !1;
|
|
282
|
+
};
|
|
283
|
+
const Ee = ({
|
|
284
|
+
color: t = "currentColor",
|
|
285
|
+
size: e = 24,
|
|
286
|
+
strokeWidth: s = 2,
|
|
287
|
+
absoluteStrokeWidth: n,
|
|
288
|
+
children: r,
|
|
289
|
+
iconNode: o,
|
|
290
|
+
class: a = "",
|
|
291
|
+
...c
|
|
292
|
+
}) => T(
|
|
293
|
+
"svg",
|
|
294
|
+
{
|
|
295
|
+
...je,
|
|
296
|
+
width: String(e),
|
|
297
|
+
height: e,
|
|
298
|
+
stroke: t,
|
|
299
|
+
"stroke-width": n ? Number(s) * 24 / Number(e) : s,
|
|
300
|
+
class: ["lucide", a].join(" "),
|
|
301
|
+
...!r && !qe(c) && { "aria-hidden": "true" },
|
|
302
|
+
...c
|
|
303
|
+
},
|
|
304
|
+
[...o.map(([i, p]) => T(i, p)), ...Q(r)]
|
|
305
|
+
);
|
|
306
|
+
const W = (t, e) => {
|
|
307
|
+
const s = ({ class: n = "", className: r = "", children: o, ...a }) => T(
|
|
308
|
+
Ee,
|
|
309
|
+
{
|
|
310
|
+
...a,
|
|
311
|
+
iconNode: e,
|
|
312
|
+
class: Se(
|
|
313
|
+
`lucide-${F(R(t))}`,
|
|
314
|
+
`lucide-${F(t)}`,
|
|
315
|
+
n,
|
|
316
|
+
r
|
|
317
|
+
)
|
|
318
|
+
},
|
|
319
|
+
o
|
|
320
|
+
);
|
|
321
|
+
return s.displayName = R(t), s;
|
|
322
|
+
};
|
|
323
|
+
const Te = W("eye-off", [
|
|
324
|
+
[
|
|
325
|
+
"path",
|
|
326
|
+
{
|
|
327
|
+
d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
|
|
328
|
+
key: "ct8e1f"
|
|
329
|
+
}
|
|
330
|
+
],
|
|
331
|
+
["path", { d: "M14.084 14.158a3 3 0 0 1-4.242-4.242", key: "151rxh" }],
|
|
332
|
+
[
|
|
333
|
+
"path",
|
|
334
|
+
{
|
|
335
|
+
d: "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",
|
|
336
|
+
key: "13bj9a"
|
|
337
|
+
}
|
|
338
|
+
],
|
|
339
|
+
["path", { d: "m2 2 20 20", key: "1ooewy" }]
|
|
340
|
+
]);
|
|
341
|
+
const Ae = W("eye", [
|
|
342
|
+
[
|
|
343
|
+
"path",
|
|
344
|
+
{
|
|
345
|
+
d: "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",
|
|
346
|
+
key: "1nclc0"
|
|
347
|
+
}
|
|
348
|
+
],
|
|
349
|
+
["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
|
|
350
|
+
]), Pe = {
|
|
255
351
|
current: "current-password",
|
|
256
352
|
new: "new-password"
|
|
257
|
-
},
|
|
353
|
+
}, kt = (t) => {
|
|
258
354
|
const {
|
|
259
355
|
label: e,
|
|
260
|
-
name:
|
|
261
|
-
purpose:
|
|
262
|
-
value:
|
|
263
|
-
placeholder:
|
|
356
|
+
name: s,
|
|
357
|
+
purpose: n,
|
|
358
|
+
value: r,
|
|
359
|
+
placeholder: o,
|
|
264
360
|
required: a,
|
|
265
|
-
disabled:
|
|
361
|
+
disabled: c,
|
|
266
362
|
error: i,
|
|
267
|
-
onInput:
|
|
268
|
-
class:
|
|
269
|
-
} = t, u =
|
|
270
|
-
return /* @__PURE__ */
|
|
271
|
-
|
|
363
|
+
onInput: p,
|
|
364
|
+
class: h
|
|
365
|
+
} = t, u = v(), _ = `${u}-error`, d = $(!1);
|
|
366
|
+
return /* @__PURE__ */ l(
|
|
367
|
+
x,
|
|
272
368
|
{
|
|
273
369
|
label: e,
|
|
274
370
|
for: u,
|
|
275
371
|
required: a,
|
|
276
372
|
error: i,
|
|
277
373
|
errorId: _,
|
|
278
|
-
class:
|
|
279
|
-
children: /* @__PURE__ */
|
|
280
|
-
/* @__PURE__ */
|
|
374
|
+
class: h,
|
|
375
|
+
children: /* @__PURE__ */ m("div", { class: q.wrapper, children: [
|
|
376
|
+
/* @__PURE__ */ l(
|
|
281
377
|
"input",
|
|
282
378
|
{
|
|
283
379
|
id: u,
|
|
284
|
-
class:
|
|
285
|
-
type:
|
|
286
|
-
name:
|
|
287
|
-
value:
|
|
288
|
-
placeholder:
|
|
289
|
-
autoComplete:
|
|
380
|
+
class: q.input,
|
|
381
|
+
type: d.value ? "text" : "password",
|
|
382
|
+
name: s,
|
|
383
|
+
value: r,
|
|
384
|
+
placeholder: o,
|
|
385
|
+
autoComplete: Pe[n],
|
|
290
386
|
required: a,
|
|
291
|
-
disabled:
|
|
387
|
+
disabled: c,
|
|
292
388
|
"aria-invalid": !!i || void 0,
|
|
293
389
|
"aria-describedby": g(i && _),
|
|
294
|
-
onInput:
|
|
390
|
+
onInput: p && ((f) => p(f.target.value))
|
|
295
391
|
}
|
|
296
392
|
),
|
|
297
|
-
/* @__PURE__ */
|
|
393
|
+
/* @__PURE__ */ l(
|
|
298
394
|
"button",
|
|
299
395
|
{
|
|
300
396
|
type: "button",
|
|
301
|
-
class:
|
|
302
|
-
disabled:
|
|
397
|
+
class: q.toggle,
|
|
398
|
+
disabled: c,
|
|
399
|
+
"aria-label": d.value ? "Hide password" : "Show password",
|
|
303
400
|
onClick: () => {
|
|
304
|
-
|
|
401
|
+
d.value = !d.value;
|
|
305
402
|
},
|
|
306
|
-
children:
|
|
403
|
+
children: d.value ? /* @__PURE__ */ l(Te, { size: "1em" }) : /* @__PURE__ */ l(Ae, { size: "1em" })
|
|
307
404
|
}
|
|
308
405
|
)
|
|
309
406
|
] })
|
|
310
407
|
}
|
|
311
408
|
);
|
|
312
|
-
},
|
|
313
|
-
fieldset:
|
|
314
|
-
legend:
|
|
315
|
-
option:
|
|
316
|
-
input:
|
|
317
|
-
error:
|
|
318
|
-
},
|
|
409
|
+
}, ze = "_fieldset_lymkd_1", Be = "_legend_lymkd_6", Oe = "_option_lymkd_11", He = "_input_lymkd_19 _check-input_4u8pk_32 _focus-ring_4u8pk_3", De = "_error_lymkd_23 _field-error_4u8pk_36", w = {
|
|
410
|
+
fieldset: ze,
|
|
411
|
+
legend: Be,
|
|
412
|
+
option: Oe,
|
|
413
|
+
input: He,
|
|
414
|
+
error: De
|
|
415
|
+
}, gt = (t) => {
|
|
319
416
|
const {
|
|
320
417
|
legend: e,
|
|
321
|
-
name:
|
|
322
|
-
options:
|
|
323
|
-
value:
|
|
324
|
-
required:
|
|
418
|
+
name: s,
|
|
419
|
+
options: n,
|
|
420
|
+
value: r,
|
|
421
|
+
required: o,
|
|
325
422
|
disabled: a,
|
|
326
|
-
error:
|
|
423
|
+
error: c,
|
|
327
424
|
onChange: i,
|
|
328
|
-
class:
|
|
329
|
-
} = t,
|
|
330
|
-
return /* @__PURE__ */
|
|
425
|
+
class: p
|
|
426
|
+
} = t, h = v(), u = `${h}-error`;
|
|
427
|
+
return /* @__PURE__ */ m(
|
|
331
428
|
"fieldset",
|
|
332
429
|
{
|
|
333
|
-
class:
|
|
334
|
-
"aria-invalid": !!
|
|
335
|
-
"aria-describedby": g(
|
|
430
|
+
class: b(w.fieldset, p),
|
|
431
|
+
"aria-invalid": !!c || void 0,
|
|
432
|
+
"aria-describedby": g(c && u),
|
|
336
433
|
children: [
|
|
337
|
-
/* @__PURE__ */
|
|
338
|
-
|
|
339
|
-
const
|
|
340
|
-
return /* @__PURE__ */
|
|
341
|
-
/* @__PURE__ */
|
|
434
|
+
/* @__PURE__ */ l("legend", { class: w.legend, children: e }),
|
|
435
|
+
n.map((_) => {
|
|
436
|
+
const d = `${h}-${_.value}`;
|
|
437
|
+
return /* @__PURE__ */ m("div", { class: w.option, children: [
|
|
438
|
+
/* @__PURE__ */ l(
|
|
342
439
|
"input",
|
|
343
440
|
{
|
|
344
|
-
id:
|
|
345
|
-
class:
|
|
441
|
+
id: d,
|
|
442
|
+
class: w.input,
|
|
346
443
|
type: "radio",
|
|
347
|
-
name:
|
|
444
|
+
name: s,
|
|
348
445
|
value: _.value,
|
|
349
|
-
checked:
|
|
350
|
-
required:
|
|
446
|
+
checked: r === _.value,
|
|
447
|
+
required: o,
|
|
351
448
|
disabled: a,
|
|
352
449
|
onChange: i && (() => i(_.value))
|
|
353
450
|
}
|
|
354
451
|
),
|
|
355
|
-
/* @__PURE__ */
|
|
452
|
+
/* @__PURE__ */ l("label", { for: d, children: _.label })
|
|
356
453
|
] }, _.value);
|
|
357
454
|
}),
|
|
358
|
-
|
|
455
|
+
c && /* @__PURE__ */ l("p", { id: u, class: w.error, role: "alert", children: c })
|
|
359
456
|
]
|
|
360
457
|
}
|
|
361
458
|
);
|
|
362
|
-
},
|
|
363
|
-
const { path: e, children:
|
|
459
|
+
}, yt = (t) => {
|
|
460
|
+
const { path: e, children: s } = t, n = P.value;
|
|
364
461
|
if (e.endsWith("/*")) {
|
|
365
|
-
const
|
|
366
|
-
if (!
|
|
462
|
+
const r = e.slice(0, -1);
|
|
463
|
+
if (!n.startsWith(r) && n !== r.slice(0, -1))
|
|
367
464
|
return null;
|
|
368
|
-
} else if (
|
|
465
|
+
} else if (n !== e)
|
|
369
466
|
return null;
|
|
370
|
-
return /* @__PURE__ */
|
|
371
|
-
},
|
|
372
|
-
section:
|
|
373
|
-
},
|
|
374
|
-
const { title: e, level:
|
|
375
|
-
return /* @__PURE__ */
|
|
376
|
-
/* @__PURE__ */
|
|
377
|
-
|
|
467
|
+
return /* @__PURE__ */ l(V, { children: s });
|
|
468
|
+
}, Fe = "_section_4nogy_1", Re = {
|
|
469
|
+
section: Fe
|
|
470
|
+
}, wt = (t) => {
|
|
471
|
+
const { title: e, level: s = 2, children: n, class: r } = t, o = v(), a = `h${s}`;
|
|
472
|
+
return /* @__PURE__ */ m("section", { class: b(Re.section, r), "aria-labelledby": o, children: [
|
|
473
|
+
/* @__PURE__ */ l(a, { id: o, children: e }),
|
|
474
|
+
n
|
|
378
475
|
] });
|
|
379
|
-
},
|
|
380
|
-
select:
|
|
381
|
-
},
|
|
476
|
+
}, Me = "_select_1cxnx_1 _text-input_4u8pk_13 _focus-ring_4u8pk_3 _disabled_4u8pk_8", Ue = {
|
|
477
|
+
select: Me
|
|
478
|
+
}, Ge = (t) => "options" in t, $t = (t) => {
|
|
382
479
|
const {
|
|
383
480
|
label: e,
|
|
384
|
-
name:
|
|
385
|
-
value:
|
|
386
|
-
placeholder:
|
|
387
|
-
options:
|
|
481
|
+
name: s,
|
|
482
|
+
value: n,
|
|
483
|
+
placeholder: r,
|
|
484
|
+
options: o,
|
|
388
485
|
required: a,
|
|
389
|
-
disabled:
|
|
486
|
+
disabled: c,
|
|
390
487
|
error: i,
|
|
391
|
-
onChange:
|
|
392
|
-
class:
|
|
393
|
-
} = t, u =
|
|
394
|
-
return /* @__PURE__ */
|
|
395
|
-
|
|
488
|
+
onChange: p,
|
|
489
|
+
class: h
|
|
490
|
+
} = t, u = v(), _ = `${u}-error`;
|
|
491
|
+
return /* @__PURE__ */ l(
|
|
492
|
+
x,
|
|
396
493
|
{
|
|
397
494
|
label: e,
|
|
398
495
|
for: u,
|
|
399
496
|
required: a,
|
|
400
497
|
error: i,
|
|
401
498
|
errorId: _,
|
|
402
|
-
class:
|
|
403
|
-
children: /* @__PURE__ */
|
|
499
|
+
class: h,
|
|
500
|
+
children: /* @__PURE__ */ m(
|
|
404
501
|
"select",
|
|
405
502
|
{
|
|
406
503
|
id: u,
|
|
407
|
-
class:
|
|
408
|
-
name:
|
|
409
|
-
value:
|
|
504
|
+
class: Ue.select,
|
|
505
|
+
name: s,
|
|
506
|
+
value: n,
|
|
410
507
|
required: a,
|
|
411
|
-
disabled:
|
|
508
|
+
disabled: c,
|
|
412
509
|
"aria-invalid": !!i || void 0,
|
|
413
510
|
"aria-describedby": g(i && _),
|
|
414
|
-
onChange:
|
|
511
|
+
onChange: p && ((d) => p(d.target.value)),
|
|
415
512
|
children: [
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
(
|
|
513
|
+
r && /* @__PURE__ */ l("option", { value: "", disabled: !0, children: r }),
|
|
514
|
+
o.map(
|
|
515
|
+
(d) => Ge(d) ? /* @__PURE__ */ l("optgroup", { label: d.label, children: d.options.map((f) => /* @__PURE__ */ l("option", { value: f.value, children: f.label }, f.value)) }, d.label) : /* @__PURE__ */ l("option", { value: d.value, children: d.label }, d.value)
|
|
419
516
|
)
|
|
420
517
|
]
|
|
421
518
|
}
|
|
422
519
|
)
|
|
423
520
|
}
|
|
424
521
|
);
|
|
425
|
-
},
|
|
426
|
-
skip:
|
|
427
|
-
},
|
|
428
|
-
const { target: e = "#main", label:
|
|
429
|
-
return /* @__PURE__ */
|
|
430
|
-
},
|
|
431
|
-
table:
|
|
432
|
-
caption:
|
|
433
|
-
},
|
|
434
|
-
const { caption: e, headers:
|
|
435
|
-
return /* @__PURE__ */
|
|
436
|
-
/* @__PURE__ */
|
|
437
|
-
/* @__PURE__ */
|
|
438
|
-
/* @__PURE__ */
|
|
522
|
+
}, We = "_skip_xbsul_1 _focus-ring_4u8pk_3", Ze = {
|
|
523
|
+
skip: We
|
|
524
|
+
}, xt = (t) => {
|
|
525
|
+
const { target: e = "#main", label: s = "Skip to main content", class: n } = t;
|
|
526
|
+
return /* @__PURE__ */ l("a", { href: e, class: b(Ze.skip, n), children: s });
|
|
527
|
+
}, Ke = "_table_dls60_1", Ve = "_caption_dls60_6", M = {
|
|
528
|
+
table: Ke,
|
|
529
|
+
caption: Ve
|
|
530
|
+
}, Ct = (t) => {
|
|
531
|
+
const { caption: e, headers: s, data: n, class: r } = t;
|
|
532
|
+
return /* @__PURE__ */ m("table", { class: b(M.table, r), children: [
|
|
533
|
+
/* @__PURE__ */ l("caption", { class: M.caption, children: e }),
|
|
534
|
+
/* @__PURE__ */ l("thead", { children: /* @__PURE__ */ l("tr", { children: s.map((o, a) => /* @__PURE__ */ l("th", { scope: "col", children: o }, `${o}-${a}`)) }) }),
|
|
535
|
+
/* @__PURE__ */ l("tbody", { children: n.map((o, a) => /* @__PURE__ */ l("tr", { children: o.map((c, i) => /* @__PURE__ */ l("td", { children: c }, `${s[i]}-${a}-${i}`)) }, a)) })
|
|
439
536
|
] });
|
|
440
|
-
},
|
|
441
|
-
hidden:
|
|
442
|
-
},
|
|
537
|
+
}, Je = "_hidden_19nib_1 _visually-hidden_4u8pk_42", Qe = {
|
|
538
|
+
hidden: Je
|
|
539
|
+
}, Xe = (t) => {
|
|
443
540
|
const { children: e } = t;
|
|
444
|
-
return /* @__PURE__ */
|
|
445
|
-
},
|
|
446
|
-
wrapper:
|
|
447
|
-
textarea:
|
|
448
|
-
counter:
|
|
449
|
-
},
|
|
450
|
-
function
|
|
451
|
-
for (let e =
|
|
452
|
-
const
|
|
453
|
-
if (
|
|
454
|
-
return
|
|
541
|
+
return /* @__PURE__ */ l("span", { class: Qe.hidden, children: e });
|
|
542
|
+
}, Ye = "_wrapper_1kyv1_1", et = "_textarea_1kyv1_6 _text-input_4u8pk_13 _focus-ring_4u8pk_3 _disabled_4u8pk_8", tt = "_counter_1kyv1_11", E = {
|
|
543
|
+
wrapper: Ye,
|
|
544
|
+
textarea: et,
|
|
545
|
+
counter: tt
|
|
546
|
+
}, U = [75, 90, 100], st = 10;
|
|
547
|
+
function nt(t) {
|
|
548
|
+
for (let e = U.length - 1; e >= 0; e--) {
|
|
549
|
+
const s = U[e];
|
|
550
|
+
if (s !== void 0 && t >= s)
|
|
551
|
+
return s;
|
|
455
552
|
}
|
|
456
553
|
return 0;
|
|
457
554
|
}
|
|
458
|
-
const
|
|
555
|
+
const It = (t) => {
|
|
459
556
|
const {
|
|
460
557
|
label: e,
|
|
461
|
-
name:
|
|
462
|
-
maxChars:
|
|
463
|
-
value:
|
|
464
|
-
placeholder:
|
|
558
|
+
name: s,
|
|
559
|
+
maxChars: n,
|
|
560
|
+
value: r,
|
|
561
|
+
placeholder: o,
|
|
465
562
|
required: a,
|
|
466
|
-
disabled:
|
|
563
|
+
disabled: c,
|
|
467
564
|
error: i,
|
|
468
|
-
onInput:
|
|
469
|
-
class:
|
|
470
|
-
} = t, u =
|
|
471
|
-
return /* @__PURE__ */
|
|
472
|
-
|
|
565
|
+
onInput: p,
|
|
566
|
+
class: h
|
|
567
|
+
} = t, u = v(), _ = `${u}-error`, d = `${u}-counter`, f = $(r?.length ?? 0), k = $(""), y = $(0), C = $(!1);
|
|
568
|
+
return /* @__PURE__ */ l(
|
|
569
|
+
x,
|
|
473
570
|
{
|
|
474
571
|
label: e,
|
|
475
572
|
for: u,
|
|
476
573
|
required: a,
|
|
477
574
|
error: i,
|
|
478
575
|
errorId: _,
|
|
479
|
-
class:
|
|
480
|
-
children: /* @__PURE__ */
|
|
481
|
-
/* @__PURE__ */
|
|
576
|
+
class: h,
|
|
577
|
+
children: /* @__PURE__ */ m("div", { class: E.wrapper, children: [
|
|
578
|
+
/* @__PURE__ */ l(
|
|
482
579
|
"textarea",
|
|
483
580
|
{
|
|
484
581
|
id: u,
|
|
485
582
|
class: E.textarea,
|
|
486
|
-
name:
|
|
487
|
-
maxLength:
|
|
488
|
-
placeholder:
|
|
583
|
+
name: s,
|
|
584
|
+
maxLength: n,
|
|
585
|
+
placeholder: o,
|
|
489
586
|
required: a,
|
|
490
|
-
disabled:
|
|
587
|
+
disabled: c,
|
|
491
588
|
"aria-invalid": !!i || void 0,
|
|
492
|
-
"aria-describedby": g(i && _,
|
|
493
|
-
onInput: (
|
|
494
|
-
const
|
|
495
|
-
|
|
496
|
-
const
|
|
497
|
-
(
|
|
589
|
+
"aria-describedby": g(i && _, d),
|
|
590
|
+
onInput: (Z) => {
|
|
591
|
+
const I = Z.target.value;
|
|
592
|
+
f.value = I.length;
|
|
593
|
+
const N = n - I.length, K = I.length / n * 100, z = nt(K), B = !C.value && N <= st && N > 0;
|
|
594
|
+
(z > y.value || B) && (k.value = `${N} character${N === 1 ? "" : "s"} remaining`, y.value = z, B && (C.value = !0)), p?.(I);
|
|
498
595
|
},
|
|
499
|
-
children:
|
|
596
|
+
children: r
|
|
500
597
|
}
|
|
501
598
|
),
|
|
502
|
-
/* @__PURE__ */
|
|
503
|
-
|
|
599
|
+
/* @__PURE__ */ m("span", { id: d, class: E.counter, children: [
|
|
600
|
+
f,
|
|
504
601
|
" / ",
|
|
505
|
-
|
|
602
|
+
n
|
|
506
603
|
] }),
|
|
507
|
-
/* @__PURE__ */
|
|
604
|
+
/* @__PURE__ */ l(Xe, { children: /* @__PURE__ */ l("span", { "aria-live": "polite", children: k }) })
|
|
508
605
|
] })
|
|
509
606
|
}
|
|
510
607
|
);
|
|
511
|
-
},
|
|
512
|
-
theme:
|
|
513
|
-
},
|
|
514
|
-
const { children: e, class:
|
|
515
|
-
return /* @__PURE__ */
|
|
516
|
-
},
|
|
517
|
-
|
|
518
|
-
document.title =
|
|
608
|
+
}, rt = "_theme_1x47p_11", lt = {
|
|
609
|
+
theme: rt
|
|
610
|
+
}, Nt = (t) => {
|
|
611
|
+
const { children: e, class: s } = t;
|
|
612
|
+
return /* @__PURE__ */ l("div", { class: b(lt.theme, s), children: e });
|
|
613
|
+
}, at = A(document.title);
|
|
614
|
+
J(() => {
|
|
615
|
+
document.title = at.value;
|
|
519
616
|
});
|
|
520
617
|
export {
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
618
|
+
O as Button,
|
|
619
|
+
ut as Card,
|
|
620
|
+
_t as Checkbox,
|
|
621
|
+
pt as DownloadLink,
|
|
622
|
+
ht as Form,
|
|
623
|
+
mt as Input,
|
|
624
|
+
bt as Link,
|
|
625
|
+
ft as Nav,
|
|
626
|
+
vt as NumberInput,
|
|
627
|
+
kt as PasswordInput,
|
|
628
|
+
gt as RadioGroup,
|
|
629
|
+
yt as Route,
|
|
630
|
+
wt as Section,
|
|
631
|
+
$t as Select,
|
|
632
|
+
xt as SkipLink,
|
|
633
|
+
Ct as Table,
|
|
634
|
+
It as Textarea,
|
|
635
|
+
Nt as Theme,
|
|
636
|
+
Xe as VisuallyHidden,
|
|
637
|
+
b as cx,
|
|
638
|
+
G as hash,
|
|
542
639
|
P as location,
|
|
543
|
-
|
|
544
|
-
|
|
640
|
+
ve as navigate,
|
|
641
|
+
at as title
|
|
545
642
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@auldrant/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Accessible Preact component library with design tokens and CSS modules",
|
|
6
6
|
"author": "Colonel Jade",
|
|
@@ -37,7 +37,9 @@
|
|
|
37
37
|
"files": [
|
|
38
38
|
"dist",
|
|
39
39
|
"README.md",
|
|
40
|
-
"LICENSE"
|
|
40
|
+
"LICENSE",
|
|
41
|
+
"NOTICES",
|
|
42
|
+
"CHANGELOG.md"
|
|
41
43
|
],
|
|
42
44
|
"sideEffects": [
|
|
43
45
|
"**/*.css"
|
|
@@ -53,7 +55,7 @@
|
|
|
53
55
|
"test:watch": "bun test --watch",
|
|
54
56
|
"typecheck": "tsc --noEmit",
|
|
55
57
|
"prepublishOnly": "bun run build",
|
|
56
|
-
"dev": "vite",
|
|
58
|
+
"dev": "vite --host",
|
|
57
59
|
"storybook": "storybook dev -p 6006",
|
|
58
60
|
"build-storybook": "storybook build",
|
|
59
61
|
"prepare": "test -n \"$CI\" || lefthook install"
|
|
@@ -78,5 +80,8 @@
|
|
|
78
80
|
"peerDependencies": {
|
|
79
81
|
"@preact/signals": "^2.8.1",
|
|
80
82
|
"preact": "^10.28.4"
|
|
83
|
+
},
|
|
84
|
+
"dependencies": {
|
|
85
|
+
"lucide-preact": "^0.575.0"
|
|
81
86
|
}
|
|
82
87
|
}
|