fernwell 0.5.0 → 0.6.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/CHANGELOG.md +12 -0
- package/README.md +5 -1
- package/dist/_tokenData.d.cts +1 -1
- package/dist/_tokenData.d.ts +1 -1
- package/dist/fernwell.cjs +5 -5
- package/dist/fernwell.cjs.map +4 -4
- package/dist/fernwell.css +211 -5
- package/dist/fernwell.esm.js +5 -5
- package/dist/fernwell.esm.js.map +4 -4
- package/dist/fernwell.iife.js +5 -5
- package/dist/fernwell.iife.js.map +4 -4
- package/dist/fernwell.min.css +2 -2
- package/dist/fernwell.tokens.css +22 -1
- package/dist/icon.d.cts +14 -0
- package/dist/icon.d.ts +14 -0
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/number.d.cts +31 -0
- package/dist/number.d.ts +31 -0
- package/dist/tokens.json +12 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ All notable changes to this project are documented here. The format follows [Kee
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.6.0] — 2026-10-15
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Number input** (`src/js/number.ts`, `src/css/components/number.css`, exported as `numberInput` / `Fernwell.numberInput`): `input[data-fw-number]` in two modes via `data-fw-number-mode`. `stepper` (default) wraps a native `type="number"` input in `.fw-number` with `−` / `+` buttons either side that step by `data-fw-number-step`, clamp to `-min` / `-max`, avoid float drift, repeat while held, and support ↑ ↓ and PageUp / PageDown on the input; the buttons use `aria-disabled` at the limits so focus is kept. `slider` turns the input into `type="range"` with a live `<output>` readout (`data-fw-number-unit`), `aria-valuetext`, and a filled track driven by `--fw-number-fill`. Both emit native bubbling `input` + `change` and `fw:number-change` (`{ value, mode }`). Programmatic API: `numberInput(input, opts)` → `{ getValue, setValue, stepUp, stepDown, destroy }`. Types `NumberMode`, `NumberOptions`, `NumberInstance`, `NumberChangeDetail` exported.
|
|
12
|
+
- **Icon size & stroke scale**: new `icon` token group — `--fw-icon-size-{xs,sm,md,lg,xl}` (14/18/22/28/36px below 640px, 12/16/20/24/32px from 640px up, emitted as a `min-width` block by `scripts/gen-tokens.mjs` from a `wide` value in `tokens.json`) and paired `--fw-icon-stroke-{xs..xl}` (1.75 → 1.2 grid units, so small icons don't thin out and large ones don't look heavy). Opt in with `data-fw-icon-size` or `.fw-icon-xs…xl`; override weight with `data-fw-icon-stroke` (`thin` `regular` `bold` or a number) or `.fw-icon-stroke-*`. Per-icon knobs `--fw-icon-size` / `--fw-icon-stroke` work on the element or any ancestor. Types `IconSize`, `IconStroke` exported.
|
|
13
|
+
- `minus` icon.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- `.fw-icon svg` stroke width is now CSS-driven (`--fw-icon-stroke`, default 1.4 — unchanged) and `.fw-icon` width/height read `--fw-icon-size` (default `1em` — unchanged). `.fw-icon-btn svg` reads `--fw-icon-size` too (default 15px — unchanged).
|
|
18
|
+
|
|
7
19
|
## [0.5.0] — 2026-09-29
|
|
8
20
|
|
|
9
21
|
### Added
|
package/README.md
CHANGED
|
@@ -207,6 +207,8 @@ All class names are prefixed `fw-`; state classes are `is-*`. Each stylesheet in
|
|
|
207
207
|
| Field | `.fw-field` (`.fw-field-full`), `.fw-label`, `.fw-input`, `.fw-hint`, `.fw-error-msg`, `.fw-required`; `.is-error`, `.is-disabled` |
|
|
208
208
|
| Selection | `.fw-checkbox` / `.fw-radio` (`<input>` + `.fw-box`; checkbox styles `:indeterminate`), `.fw-toggle` (`<input>` + `.fw-track > .fw-thumb`), `.fw-option-group` (`-inline`) |
|
|
209
209
|
| Combobox | `.fw-combobox` wrapper, `input[data-fw-combobox][list]` + `<datalist>` |
|
|
210
|
+
| Number input | `.fw-number` (`-stepper`, `-slider`) wrapper, `.fw-number-btn`, `.fw-number-input`, `.fw-number-value`; built by `input[data-fw-number]` |
|
|
211
|
+
| Icon | `.fw-icon` + size `-xs` `-sm` `-md` `-lg` `-xl` and weight `.fw-icon-stroke-thin` `-regular` `-bold` |
|
|
210
212
|
| Alert | `.fw-alert` + `-success` `-error` `-pending` `-info` `-with-action`; `.fw-alert-dot` `-title` `-body` |
|
|
211
213
|
| Progress | `.fw-progress` (`-sm`, `.is-indeterminate`, `.is-success`) > `.fw-progress-fill`; `.fw-progress-label` |
|
|
212
214
|
| Spinner | `.fw-spinner` + `-sm` `-md` `-lg` (colour from `currentColor`) |
|
|
@@ -231,6 +233,8 @@ Everything is progressive enhancement over plain HTML. `init(root?)` is idempote
|
|
|
231
233
|
|
|
232
234
|
| Hook | What it does |
|
|
233
235
|
| --- | --- |
|
|
236
|
+
| `input[data-fw-number]` (+ `-mode`, `-min`, `-max`, `-step`, `-unit`) | number input: `stepper` (− / + buttons, hold to repeat, ↑ ↓ / PageUp / PageDown) or `slider` (range + live readout); emits `input`, `change`, `fw:number-change` |
|
|
237
|
+
| `[data-fw-icon]` (+ `-size`, `-stroke`) | named SVG icon; optional size scale `xs`–`xl` and stroke weight |
|
|
234
238
|
| `[data-fw-theme-toggle]` | flips `data-theme`, persists to `localStorage['fw-theme']`, sets `aria-pressed` |
|
|
235
239
|
| `input[data-fw-combobox]` | typeahead over the `<datalist>` in `list=` (↑ ↓ Enter Esc, `aria-activedescendant`) |
|
|
236
240
|
| `[data-fw-open-modal="id"]` / `[data-fw-close-modal]` | modal with backdrop-click (drag-safe), Escape, focus return, scroll lock |
|
|
@@ -291,7 +295,7 @@ Events: `fw:themechange` on `document` (detail: `'light' | 'dark'`), `fw:tokensc
|
|
|
291
295
|
|
|
292
296
|
**Voice.** Buttons name the action ("Send invoice", not "Submit"). Errors say what happened and what to do next, without apologising. Empty states are invitations. Confirmations echo the verb on the button.
|
|
293
297
|
|
|
294
|
-
**Icons.** Outline only,
|
|
298
|
+
**Icons.** Outline only, 12–32px box from the `--fw-icon-size-*` scale (larger below 640px) with the paired `--fw-icon-stroke-*` (1.2–1.75 units, heavier when small), ~1.3–1.4px rendered stroke, round caps and joins, `currentColor`. No fills — except a checkmark on a completed item.
|
|
295
299
|
|
|
296
300
|
## Development
|
|
297
301
|
|
package/dist/_tokenData.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Every token name, without the `--fw-` prefix. */
|
|
2
|
-
export type TokenName = 'text' | 'text-soft' | 'bg' | 'bg-dim' | 'surface' | 'primary' | 'primary-hover' | 'primary-soft' | 'secondary' | 'secondary-hover' | 'secondary-bg' | 'success' | 'success-bg' | 'warning' | 'warning-bg' | 'danger' | 'danger-bg' | 'info' | 'info-bg' | 'on-primary' | 'on-secondary' | 'on-secondary-soft' | 'on-secondary-fill' | 'on-secondary-line' | 'overlay' | 'overlay-soft' | 'focus-ring' | 'scrollbar-thumb' | 'scrollbar-thumb-hover' | 'scrollbar-track' | 'font-display' | 'font-body' | 'font-mono' | 'sp-1' | 'sp-2' | 'sp-3' | 'sp-4' | 'sp-5' | 'sp-6' | 'sp-7' | 'sp-8' | 'sp-9' | 'r-sm' | 'r-md' | 'r-lg' | 'r-xl' | 'r-full' | 'shadow-sm' | 'shadow-md' | 'shadow-lg' | 'shadow-primary' | 'shadow-success' | 'border-w' | 'motion-fast' | 'motion-base' | 'motion-ease';
|
|
2
|
+
export type TokenName = 'text' | 'text-soft' | 'bg' | 'bg-dim' | 'surface' | 'primary' | 'primary-hover' | 'primary-soft' | 'secondary' | 'secondary-hover' | 'secondary-bg' | 'success' | 'success-bg' | 'warning' | 'warning-bg' | 'danger' | 'danger-bg' | 'info' | 'info-bg' | 'on-primary' | 'on-secondary' | 'on-secondary-soft' | 'on-secondary-fill' | 'on-secondary-line' | 'overlay' | 'overlay-soft' | 'focus-ring' | 'scrollbar-thumb' | 'scrollbar-thumb-hover' | 'scrollbar-track' | 'font-display' | 'font-body' | 'font-mono' | 'sp-1' | 'sp-2' | 'sp-3' | 'sp-4' | 'sp-5' | 'sp-6' | 'sp-7' | 'sp-8' | 'sp-9' | 'r-sm' | 'r-md' | 'r-lg' | 'r-xl' | 'r-full' | 'shadow-sm' | 'shadow-md' | 'shadow-lg' | 'shadow-primary' | 'shadow-success' | 'icon-size-xs' | 'icon-size-sm' | 'icon-size-md' | 'icon-size-lg' | 'icon-size-xl' | 'icon-stroke-xs' | 'icon-stroke-sm' | 'icon-stroke-md' | 'icon-stroke-lg' | 'icon-stroke-xl' | 'border-w' | 'motion-fast' | 'motion-base' | 'motion-ease';
|
|
3
3
|
/** A token whose value is computed from other tokens (hovers, tints, focus ring, glows). */
|
|
4
4
|
export interface DerivedToken {
|
|
5
5
|
readonly name: TokenName;
|
package/dist/_tokenData.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Every token name, without the `--fw-` prefix. */
|
|
2
|
-
export type TokenName = 'text' | 'text-soft' | 'bg' | 'bg-dim' | 'surface' | 'primary' | 'primary-hover' | 'primary-soft' | 'secondary' | 'secondary-hover' | 'secondary-bg' | 'success' | 'success-bg' | 'warning' | 'warning-bg' | 'danger' | 'danger-bg' | 'info' | 'info-bg' | 'on-primary' | 'on-secondary' | 'on-secondary-soft' | 'on-secondary-fill' | 'on-secondary-line' | 'overlay' | 'overlay-soft' | 'focus-ring' | 'scrollbar-thumb' | 'scrollbar-thumb-hover' | 'scrollbar-track' | 'font-display' | 'font-body' | 'font-mono' | 'sp-1' | 'sp-2' | 'sp-3' | 'sp-4' | 'sp-5' | 'sp-6' | 'sp-7' | 'sp-8' | 'sp-9' | 'r-sm' | 'r-md' | 'r-lg' | 'r-xl' | 'r-full' | 'shadow-sm' | 'shadow-md' | 'shadow-lg' | 'shadow-primary' | 'shadow-success' | 'border-w' | 'motion-fast' | 'motion-base' | 'motion-ease';
|
|
2
|
+
export type TokenName = 'text' | 'text-soft' | 'bg' | 'bg-dim' | 'surface' | 'primary' | 'primary-hover' | 'primary-soft' | 'secondary' | 'secondary-hover' | 'secondary-bg' | 'success' | 'success-bg' | 'warning' | 'warning-bg' | 'danger' | 'danger-bg' | 'info' | 'info-bg' | 'on-primary' | 'on-secondary' | 'on-secondary-soft' | 'on-secondary-fill' | 'on-secondary-line' | 'overlay' | 'overlay-soft' | 'focus-ring' | 'scrollbar-thumb' | 'scrollbar-thumb-hover' | 'scrollbar-track' | 'font-display' | 'font-body' | 'font-mono' | 'sp-1' | 'sp-2' | 'sp-3' | 'sp-4' | 'sp-5' | 'sp-6' | 'sp-7' | 'sp-8' | 'sp-9' | 'r-sm' | 'r-md' | 'r-lg' | 'r-xl' | 'r-full' | 'shadow-sm' | 'shadow-md' | 'shadow-lg' | 'shadow-primary' | 'shadow-success' | 'icon-size-xs' | 'icon-size-sm' | 'icon-size-md' | 'icon-size-lg' | 'icon-size-xl' | 'icon-stroke-xs' | 'icon-stroke-sm' | 'icon-stroke-md' | 'icon-stroke-lg' | 'icon-stroke-xl' | 'border-w' | 'motion-fast' | 'motion-base' | 'motion-ease';
|
|
3
3
|
/** A token whose value is computed from other tokens (hovers, tints, focus ring, glows). */
|
|
4
4
|
export interface DerivedToken {
|
|
5
5
|
readonly name: TokenName;
|
package/dist/fernwell.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/*! fernwell v0.
|
|
2
|
-
"use strict";var ke=Object.defineProperty;var fn=Object.getOwnPropertyDescriptor;var mn=Object.getOwnPropertyNames;var pn=Object.prototype.hasOwnProperty;var b=(e,t)=>{for(var n in t)ke(e,n,{get:t[n],enumerable:!0})},vn=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of mn(t))!pn.call(e,r)&&r!==n&&ke(e,r,{get:()=>t[r],enumerable:!(o=fn(t,r))||o.enumerable});return e};var hn=e=>vn(ke({},"__esModule",{value:!0}),e);var io={};b(io,{combobox:()=>le,default:()=>ro,icon:()=>Q,init:()=>dn,loading:()=>fe,menu:()=>ye,modal:()=>ce,nav:()=>ue,popover:()=>Te,table:()=>ve,tabs:()=>Me,theme:()=>ae,toast:()=>me,tokens:()=>ie,tooltip:()=>Le,version:()=>cn});module.exports=hn(io);var ae={};b(ae,{get:()=>Re,getToken:()=>Ie,init:()=>$e,resetTokens:()=>De,set:()=>se,setTokens:()=>W,toggle:()=>Ht});var Q={};b(Q,{init:()=>He,render:()=>X});var wn={add:'<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>',close:'<line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/>',check:'<polyline points="5,13 10,18 19,7"/>',edit:'<path d="M16.8 3.5a2.1 2.1 0 0 1 3 3L8.5 17.8 4 19l1.2-4.5Z"/><line x1="14.5" y1="5.8" x2="17.7" y2="9"/>',trash:'<path d="M4 7h16"/><path d="M9 7V4.6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1V7"/><path d="M6.5 7l.8 12.4A2 2 0 0 0 9.3 21h5.4a2 2 0 0 0 2-1.6L18 7"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/>',save:'<path d="M5 4a1 1 0 0 1 1-1h9.2a1 1 0 0 1 .7.3l2.8 2.8a1 1 0 0 1 .3.7V20a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4Z"/><path d="M8 3v5h7V3"/><path d="M8 21v-6h8v6"/>',search:'<circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.6" y2="16.6"/>',settings:'<circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/>',download:'<line x1="12" y1="3" x2="12" y2="15"/><polyline points="7,10 12,15 17,10"/><line x1="5" y1="21" x2="19" y2="21"/>',upload:'<line x1="12" y1="15" x2="12" y2="3"/><polyline points="7,8 12,3 17,8"/><line x1="5" y1="21" x2="19" y2="21"/>',share:'<circle cx="6" cy="12" r="2.3"/><circle cx="18" cy="6" r="2.3"/><circle cx="18" cy="18" r="2.3"/><line x1="8.1" y1="10.8" x2="15.9" y2="7.2"/><line x1="8.1" y1="13.2" x2="15.9" y2="16.8"/>',copy:'<rect x="9" y="9" width="12" height="12" rx="2"/><path d="M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1"/>',menu:'<line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="20" y2="18"/>',more:'<circle cx="5" cy="12" r="1.4" fill="currentColor" stroke="none"/><circle cx="12" cy="12" r="1.4" fill="currentColor" stroke="none"/><circle cx="19" cy="12" r="1.4" fill="currentColor" stroke="none"/>',user:'<circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/>',bell:'<path d="M6 8a6 6 0 0 1 12 0c0 5 2 6 2 6H4s2-1 2-6"/><path d="M10 20a2 2 0 0 0 4 0"/>',heart:'<path d="M12 20s-7-4.4-9.5-8.5C.8 8 2 4.5 5.5 4.5c2 0 3.5 1 6.5 4 3-3 4.5-4 6.5-4 3.5 0 4.7 3.5 3 7-2.5 4.1-9.5 8.5-9.5 8.5Z"/>',star:'<polygon points="12,3 14.6,9.1 21.2,9.3 16,13.4 17.8,19.8 12,16.3 6.2,19.8 8,13.4 2.8,9.3 9.4,9.1"/>',calendar:'<rect x="3" y="5" width="18" height="16" rx="2"/><line x1="8" y1="3" x2="8" y2="7"/><line x1="16" y1="3" x2="16" y2="7"/><line x1="3" y1="10" x2="21" y2="10"/>',refresh:'<path d="M20 11A8 8 0 0 0 6.3 6.3L4 8.6"/><path d="M4 4v5h5"/><path d="M4 13a8 8 0 0 0 13.7 4.7L20 15.4"/><path d="M20 20v-5h-5"/>',filter:'<polygon points="4,4 20,4 14,12 14,19 10,21 10,12"/>',info:'<circle cx="12" cy="12" r="9"/><line x1="12" y1="11" x2="12" y2="16"/><circle cx="12" cy="8" r="1" fill="currentColor" stroke="none"/>',warning:'<path d="M12 3 22 20H2Z"/><line x1="12" y1="9.5" x2="12" y2="14.5"/><circle cx="12" cy="17.3" r="1" fill="currentColor" stroke="none"/>',lock:'<rect x="5" y="11" width="14" height="10" rx="2"/><path d="M8 11V7a4 4 0 0 1 8 0v4"/>',eye:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/>',"chevron-down":'<polyline points="6,9 12,15 18,9"/>',"arrow-left":'<line x1="19" y1="12" x2="5" y2="12"/><polyline points="12,5 5,12 12,19"/>',"arrow-right":'<line x1="5" y1="12" x2="19" y2="12"/><polyline points="12,5 19,12 12,19"/>',folder:'<path d="M3.5 6.5a1 1 0 0 1 1-1H10l2 2.2h7.5a1 1 0 0 1 1 1V18a1 1 0 0 1-1 1H4.5a1 1 0 0 1-1-1Z"/>',bookmark:'<path d="M6 3h12a1 1 0 0 1 1 1v17l-7-4-7 4V4a1 1 0 0 1 1-1Z"/>',home:'<path d="M4 11.5 12 4l8 7.5"/><path d="M6 10v10a1 1 0 0 0 1 1h3.5v-6h2.8v6H17a1 1 0 0 0 1-1V10"/>',logout:'<path d="M9 4H5.5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1H9"/><line x1="14" y1="12" x2="21" y2="12"/><polyline points="17.5,8.5 21,12 17.5,15.5"/>',paperclip:'<path d="M21 11.5 12.4 20a4.3 4.3 0 0 1-6-6.1L15 5.3a2.9 2.9 0 0 1 4.1 4.1l-8.6 8.6a1.4 1.4 0 0 1-2-2l7.9-7.9"/>',envelope:'<rect x="3" y="5" width="18" height="14" rx="2"/><path d="M4 6.5 12 13l8-6.5"/>',"chevron-up":'<polyline points="6,15 12,9 18,15"/>',"chevron-left":'<polyline points="15,6 9,12 15,18"/>',"chevron-right":'<polyline points="9,6 15,12 9,18"/>',"arrow-up":'<line x1="12" y1="19" x2="12" y2="5"/><polyline points="5,12 12,5 19,12"/>',"arrow-down":'<line x1="12" y1="5" x2="12" y2="19"/><polyline points="5,12 12,19 19,12"/>',unlock:'<rect x="5" y="11" width="14" height="10" rx="2"/><path d="M8 11V7a4 4 0 0 1 7.8-1.3"/>',"thumbs-up":'<path d="M7 11v9H4.5a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1H7Z"/><path d="M7 11l4.3-7.3a1.4 1.4 0 0 1 2.6.8L13 9h5.6a2 2 0 0 1 1.9 2.6l-2 6.5A2 2 0 0 1 16.6 19.5H10a3 3 0 0 1-3-3"/>',"thumbs-down":'<path d="M7 13V4h2.5a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H7Z"/><path d="M7 13l4.3 7.3a1.4 1.4 0 0 0 2.6-.8L13 15h5.6a2 2 0 0 0 1.9-2.6l-2-6.5A2 2 0 0 0 16.6 4.5H10a3 3 0 0 0-3 3"/>',"eye-closed":'<path d="M3.5 12S7 6 12 6s8.5 6 8.5 6-3.5 6-8.5 6-8.5-6-8.5-6Z"/><line x1="4" y1="19" x2="20" y2="5"/>',"help-circle":'<circle cx="12" cy="12" r="9"/><path d="M9.2 9.2a2.8 2.8 0 1 1 4.3 2.4c-.9.6-1.5 1.1-1.5 2.2"/><circle cx="12" cy="17" r="1" fill="currentColor" stroke="none"/>',chat:'<path d="M4 5.5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H9.5L5 20.5V16.5H5a1 1 0 0 1-1-1Z"/>',kebab:'<circle cx="12" cy="5" r="1.4" fill="currentColor" stroke="none"/><circle cx="12" cy="12" r="1.4" fill="currentColor" stroke="none"/><circle cx="12" cy="19" r="1.4" fill="currentColor" stroke="none"/>',sun:'<circle cx="12" cy="12" r="4"/><line x1="12" y1="2" x2="12" y2="4.5"/><line x1="12" y1="19.5" x2="12" y2="22"/><line x1="2" y1="12" x2="4.5" y2="12"/><line x1="19.5" y1="12" x2="22" y2="12"/><line x1="4.9" y1="4.9" x2="6.6" y2="6.6"/><line x1="17.4" y1="17.4" x2="19.1" y2="19.1"/><line x1="4.9" y1="19.1" x2="6.6" y2="17.4"/><line x1="17.4" y1="6.6" x2="19.1" y2="4.9"/>',moon:'<path d="M20.5 14.2A8.5 8.5 0 1 1 9.8 3.5a7 7 0 0 0 10.7 10.7Z"/>'};function X(e){let t=wn[e];return t?`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${t}</svg>`:""}function He(e=document){e.querySelectorAll("[data-fw-icon]").forEach(t=>{var r;if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=(r=t.dataset.fwIcon)!=null?r:"",o=X(n);o||console.warn(`fernwell: unknown icon "${n}"`),t.innerHTML=o,t.classList.add("fw-icon")})}var ie={};b(ie,{getToken:()=>Ie,init:()=>Pe,resetTokens:()=>De,restoreTokens:()=>Mt,setTokens:()=>W});var ft=[{name:"primary-hover",light:"color-mix(in srgb, var(--fw-primary), var(--fw-text) 12%)",dark:"color-mix(in srgb, var(--fw-primary), var(--fw-text) 12%)",deps:["primary","text"]},{name:"primary-soft",light:"color-mix(in srgb, var(--fw-primary), white 35%)",dark:"color-mix(in srgb, var(--fw-primary), white 35%)",deps:["primary"]},{name:"secondary-hover",light:"color-mix(in srgb, var(--fw-secondary), var(--fw-text) 15%)",dark:"color-mix(in srgb, var(--fw-secondary), var(--fw-text) 15%)",deps:["secondary","text"]},{name:"secondary-bg",light:"color-mix(in srgb, var(--fw-secondary) 10%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-secondary) 16%, transparent)",deps:["secondary","surface"]},{name:"success-bg",light:"color-mix(in srgb, var(--fw-success) 12%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-success) 14%, transparent)",deps:["success","surface"]},{name:"warning-bg",light:"color-mix(in srgb, var(--fw-warning) 14%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-warning) 16%, transparent)",deps:["warning","surface"]},{name:"danger-bg",light:"color-mix(in srgb, var(--fw-danger) 13%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-danger) 14%, transparent)",deps:["danger","surface"]},{name:"info-bg",light:"color-mix(in srgb, var(--fw-info) 12%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-info) 14%, transparent)",deps:["info","surface"]},{name:"on-secondary-soft",light:"color-mix(in srgb, var(--fw-on-secondary) 72%, transparent)",dark:"color-mix(in srgb, var(--fw-on-secondary) 72%, transparent)",deps:["on-secondary"]},{name:"on-secondary-fill",light:"color-mix(in srgb, var(--fw-on-secondary) 10%, transparent)",dark:"color-mix(in srgb, var(--fw-on-secondary) 10%, transparent)",deps:["on-secondary"]},{name:"on-secondary-line",light:"color-mix(in srgb, var(--fw-on-secondary) 16%, transparent)",dark:"color-mix(in srgb, var(--fw-on-secondary) 16%, transparent)",deps:["on-secondary"]},{name:"focus-ring",light:"0 0 0 4px color-mix(in srgb, var(--fw-primary) 25%, transparent)",dark:"0 0 0 4px color-mix(in srgb, var(--fw-primary) 25%, transparent)",deps:["primary"]},{name:"scrollbar-thumb",light:"var(--fw-text-soft)",dark:"var(--fw-text-soft)",deps:["text-soft"]},{name:"scrollbar-thumb-hover",light:"color-mix(in srgb, var(--fw-text-soft), var(--fw-text) 15%)",dark:"color-mix(in srgb, var(--fw-text-soft), var(--fw-text) 15%)",deps:["text-soft","text"]},{name:"shadow-primary",light:"0 6px 16px color-mix(in srgb, var(--fw-primary) 35%, transparent)",dark:"0 6px 16px color-mix(in srgb, var(--fw-primary) 22%, transparent)",deps:["primary"]},{name:"shadow-success",light:"0 6px 16px color-mix(in srgb, var(--fw-success) 28%, transparent)",dark:"0 6px 16px color-mix(in srgb, var(--fw-success) 22%, transparent)",deps:["success"]}];var K="--fw-",mt="data-fw-tokens",Ae="fw-tokens",pt="fw-tokens-css",yn="fw:tokenschange",oe=":root",k=new Map,ee=new Map,re=!1,En=0,_=new Map,Ce=new WeakSet;function xt(){try{return window.localStorage}catch{return null}}function Lt(e){return e.startsWith("--")?e:`${K}${e}`}function bn(e){return e.startsWith(K)?e.slice(K.length):e}function te(e){console.warn(`fernwell: ${e}`)}function gt(e){try{return document.querySelector(e),!0}catch{return!1}}function Tn(e){let t=0,n="";for(let o=0;o<e.length;o++){let r=e[o];if(r==="\\")o++;else if(n){if(r===n)n="";else if(r===`
|
|
3
|
-
`)return!1}else if(r==='"'||r==="'")n=r;else if(r==="(")t++;else if(r===")"&&--t<0)return!1}return t===0&&!n}function
|
|
4
|
-
`))}catch{}}function
|
|
5
|
-
`),document.dispatchEvent(new CustomEvent(yn,{detail:{scope:e}}))}function yt(e,t){let n=new Map(Object.keys(t).map(o=>[o,o in e?e[o]:void 0]));return Object.assign(e,t),()=>n.forEach((o,r)=>{e[r]===t[r]&&(o===void 0?delete e[r]:e[r]=o)})}function W(e,t={}){var a,u;let n=(a=t.scope)!=null?a:oe;if(!gt(n))return te(`ignoring tokens for invalid scope "${n}"`),()=>{};re||Ne();let o,r;xn(e)?(o=V(e.light),r=V(e.dark)):(o=V(e),r={...o});let s=t.persist?k:ee,i=(u=s.get(n))!=null?u:{light:{},dark:{}},l=yt(i.light,o),c=yt(i.dark,r);s.set(n,i),t.persist&&Oe(),ne(n);let d=!1;return()=>{d||(d=!0,l(),c(),!Object.keys(i.light).length&&!Object.keys(i.dark).length&&s.get(n)===i&&s.delete(n),s===k&&Oe(),ne(n))}}function De(e){re||Ne(),_.forEach((n,o)=>{(!e||n.scope===e)&&_.delete(o)});let t=e?k.delete(e):k.size>0;e?ee.delete(e):(k.clear(),ee.clear()),t&&Oe(),ne(e)}function Mt(){Ne(),ne()}function Ne(){var n;re=!0,k.clear();let e=null;try{let o=(n=xt())==null?void 0:n.getItem(Ae);o&&(e=JSON.parse(o))}catch{}let t=e==null?void 0:e.scopes;if((e==null?void 0:e.v)===1&&t&&typeof t=="object")for(let[o,r]of Object.entries(t)){if(!gt(o))continue;let s=V(r==null?void 0:r.light),i=V(r==null?void 0:r.dark);(Object.keys(s).length||Object.keys(i).length)&&k.set(o,{light:s,dark:i})}}function Ie(e,t=document.documentElement){return getComputedStyle(t).getPropertyValue(Lt(e)).trim()}function Et(e,t){try{let n=JSON.parse(e!=null?e:"");if(n!==null&&typeof n=="object"&&!Array.isArray(n))return n}catch{}return te(`${t} must be a JSON object of tokens`),null}function Mn(){_.forEach((e,t)=>{t.isConnected||(_.delete(t),Ce.add(t),e.undo())})}function bt(e){return!!e.dataset.fwTokensBound&&!Ce.has(e)}function Tt(e,t,n){e.dataset.fwTokensBound="1",Ce.delete(e),e.isConnected&&_.set(e,{scope:t,undo:n})}function Pe(e=document){re||Mt(),Mn(),e.querySelectorAll('script[type="application/json"][data-fw-theme-tokens]').forEach(t=>{var i;if(bt(t))return;let n=Et(t.textContent,"data-fw-theme-tokens");if(t.dataset.fwTokensBound="1",!n)return;let o=t.hasAttribute("data-fw-persist"),r=(i=t.dataset.fwScope)!=null?i:oe,s=W(n,{scope:r,persist:o});o||Tt(t,r,s)}),e.querySelectorAll("[data-fw-theme-scope]").forEach(t=>{var s;if(bt(t))return;let n=Et(t.getAttribute("data-fw-theme-scope"),"data-fw-theme-scope");if(t.dataset.fwTokensBound="1",!n)return;let o=(s=t.getAttribute("data-fw-scope-id"))!=null?s:`fw-s${++En}`;t.setAttribute("data-fw-scope-id",o);let r=`[data-fw-scope-id="${o}"]`;Tt(t,r,W(n,{scope:r}))})}var Be="fw-theme",kn="fw:themechange",kt="data-fw-theme-init";function qe(){try{return window.localStorage}catch{return null}}function Re(){var t;let e=document.documentElement.getAttribute("data-theme");return e==="dark"||e==="light"?e:(t=window.matchMedia)!=null&&t.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"}function se(e,{persist:t=!0}={}){var n;document.documentElement.setAttribute("data-theme",e),t&&((n=qe())==null||n.setItem(Be,e)),document.querySelectorAll("[data-fw-theme-toggle]").forEach(o=>At(o,e)),document.dispatchEvent(new CustomEvent(kn,{detail:e}))}function Ht(){let e=Re()==="dark"?"light":"dark";return se(e),e}function At(e,t){e.setAttribute("aria-pressed",String(t==="dark"));let n=t==="dark"?e.dataset.fwThemeIconDark:e.dataset.fwThemeIconLight,o=t==="dark"?e.dataset.fwThemeLabelDark:e.dataset.fwThemeLabelLight;if(n!==void 0){let r=`<span class="fw-icon" aria-hidden="true">${X(n)}</span>`;e.innerHTML=o!==void 0?`${r} ${o}`:r}else o!==void 0&&(e.textContent=o)}function Hn(e){let t=typeof requestAnimationFrame=="function"?requestAnimationFrame:n=>setTimeout(n,16);t(()=>t(e))}function $e(e=document){var r,s,i,l;let t=(r=qe())==null?void 0:r.getItem(Be),n=t==="dark"||t==="light"?t:Re(),o=document.documentElement;o.setAttribute(kt,""),se(n,{persist:!1}),Hn(()=>o.removeAttribute(kt)),e.querySelectorAll("[data-fw-theme-toggle]").forEach(c=>{c.dataset.fwBound||(c.dataset.fwBound="1",At(c,n),c.addEventListener("click",()=>Ht()))}),(l=(s=window.matchMedia)==null?void 0:(i=s.call(window,"(prefers-color-scheme: dark)")).addEventListener)==null||l.call(i,"change",c=>{var d;(d=qe())!=null&&d.getItem(Be)||se(c.matches?"dark":"light",{persist:!1})})}var le={};b(le,{combobox:()=>St,init:()=>Fe});var An=0;function Z(e){return e.replace(/[&<>"']/g,t=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[t])}function St(e,t={}){var w,B,C,ut;let n=(w=t.filter)!=null?w:((f,y)=>f.toLowerCase().includes(y)),o=(B=t.emptyText)!=null?B:"No matches",r=(C=t.options)!=null?C:Sn(e),s=[],i=-1,l=!1,c=e.getAttribute("list");c&&(e.dataset.fwList=c,e.removeAttribute("list"));let d=(ut=e.closest(".fw-combobox"))!=null?ut:On(e),a=document.createElement("ul"),u=`fw-combobox-${++An}`;a.className="fw-combobox-list",a.id=u,a.setAttribute("role","listbox"),d.appendChild(a),e.setAttribute("role","combobox"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-controls",u),e.autocomplete="off";function h(f){s=f,i=-1;let y=e.value.trim().toLowerCase();if(f.length===0){a.innerHTML=`<li class="fw-combobox-empty">${Z(o)}</li>`;return}a.innerHTML=f.map((M,F)=>{let j=y?M.toLowerCase().indexOf(y):-1,un=j>-1?`${Z(M.slice(0,j))}<b>${Z(M.slice(j,j+y.length))}</b>${Z(M.slice(j+y.length))}`:Z(M);return`<li class="fw-combobox-option" role="option" id="${u}-${F}" data-index="${F}" aria-selected="false">${un}</li>`}).join("")}function m(){let f=e.value.trim().toLowerCase();h(f?r.filter(y=>n(y,f)):r),a.classList.add("is-open"),e.setAttribute("aria-expanded","true")}function p(){a.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),e.removeAttribute("aria-activedescendant"),i=-1}function v(f){let y=a.querySelectorAll(".fw-combobox-option");y.forEach(F=>{F.classList.remove("is-active"),F.setAttribute("aria-selected","false")});let M=y[f];M&&(M.classList.add("is-active"),M.setAttribute("aria-selected","true"),M.scrollIntoView({block:"nearest"}),e.setAttribute("aria-activedescendant",M.id)),i=f}function x(f){var y;e.value=f,p(),l=!0,e.focus(),e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0})),l=!1,(y=t.onSelect)==null||y.call(t,f)}let g=()=>{l||m()},E=()=>{l||m()},S=f=>{f.key==="ArrowDown"?(f.preventDefault(),a.classList.contains("is-open")||m(),v(Math.min(i+1,s.length-1))):f.key==="ArrowUp"?(f.preventDefault(),v(Math.max(i-1,0))):f.key==="Enter"?i>-1&&s[i]!==void 0&&(f.preventDefault(),x(s[i])):f.key==="Escape"&&p()},O=f=>{let y=f.target.closest(".fw-combobox-option");y&&(f.preventDefault(),x(s[Number(y.dataset.index)]))},$=f=>{d.contains(f.target)||p()};return e.addEventListener("input",g),e.addEventListener("focus",E),e.addEventListener("keydown",S),a.addEventListener("mousedown",O),document.addEventListener("click",$),{open:m,close:p,setOptions(f){r=f,a.classList.contains("is-open")&&m()},destroy(){e.removeEventListener("input",g),e.removeEventListener("focus",E),e.removeEventListener("keydown",S),a.removeEventListener("mousedown",O),document.removeEventListener("click",$),a.remove(),e.dataset.fwList&&e.setAttribute("list",e.dataset.fwList),delete e.dataset.fwBound}}}function Sn(e){var o;let t=(o=e.getAttribute("list"))!=null?o:e.dataset.fwList,n=t?document.getElementById(t):null;return n?Array.from(n.querySelectorAll("option")).map(r=>r.value||r.textContent||""):[]}function On(e){var n;let t=document.createElement("div");return t.className="fw-combobox",(n=e.parentNode)==null||n.insertBefore(t,e),t.appendChild(e),t}function Fe(e=document){e.querySelectorAll("input[data-fw-combobox]").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",St(t))})}var ce={};b(ce,{bindOutsideClickToClose:()=>Ve,close:()=>D,init:()=>Ze,open:()=>We,toggle:()=>Dn});var N="is-open",Ct="fw-scroll-lock",I=[],je=new WeakMap,Cn='a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';function Ke(e){return typeof e=="string"?document.getElementById(e):e}function _e(e){if(e.classList.contains("fw-modal-overlay"))return e;let t=e.id?document.querySelector(`[data-fw-drawer-overlay="${e.id}"]`):null;if(t)return t;let n=e.previousElementSibling;return n instanceof HTMLElement&&n.classList.contains("fw-drawer-overlay")?n:null}function We(e,t=(n=>(n=document.activeElement)!=null?n:null)()){var s;let o=Ke(e);if(!o||o.classList.contains(N))return;o.classList.add(N),(s=_e(o))==null||s.classList.add(N),je.set(o,t),I.push(o),document.body.classList.add(Ct),o.dispatchEvent(new CustomEvent("fw:open",{bubbles:!0}));let r=o.querySelector(Cn);r?r.focus({preventScroll:!0}):(o.hasAttribute("tabindex")||o.setAttribute("tabindex","-1"),o.focus({preventScroll:!0}))}function D(e){var o,r,s;let t=Ke(e);if(!t||!t.classList.contains(N))return;t.classList.remove(N),(o=_e(t))==null||o.classList.remove(N);let n=I.indexOf(t);n>-1&&I.splice(n,1),I.length===0&&document.body.classList.remove(Ct),t.dispatchEvent(new CustomEvent("fw:close",{bubbles:!0})),(s=(r=je.get(t))==null?void 0:r.focus)==null||s.call(r,{preventScroll:!0}),je.delete(t)}function Dn(e){let t=Ke(e);t&&(t.classList.contains(N)?D:We)(t)}function Ve(e,t){let n=!1;e.addEventListener("mousedown",o=>{n=o.target===e}),e.addEventListener("click",o=>{o.target===e&&n&&t()})}var Ot=!1;function Ze(e=document){e.querySelectorAll("[data-fw-open-modal], [data-fw-open-drawer]").forEach(t=>{var o,r;if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=(r=(o=t.dataset.fwOpenModal)!=null?o:t.dataset.fwOpenDrawer)!=null?r:"";t.addEventListener("click",()=>We(n,t))}),e.querySelectorAll(".fw-modal-overlay").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",Ve(t,()=>D(t)),t.querySelectorAll("[data-fw-close-modal]").forEach(n=>n.addEventListener("click",()=>D(t))))}),e.querySelectorAll(".fw-drawer").forEach(t=>{if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=_e(t);n&&Ve(n,()=>D(t)),t.querySelectorAll("[data-fw-close-drawer]").forEach(o=>o.addEventListener("click",()=>D(t)))}),Ot||(Ot=!0,document.addEventListener("keydown",t=>{t.key==="Escape"&&I.length&&D(I[I.length-1])}))}var ue={};b(ue,{close:()=>de,init:()=>ze,open:()=>Dt});var Ue="is-open";function Dt(e){let t=Ge(e);t&&(t.classList.add(Ue),e.setAttribute("aria-expanded","true"))}function de(e){let t=Ge(e);t&&(t.classList.remove(Ue),e.setAttribute("aria-expanded","false"))}function Ge(e){let t=e.getAttribute("aria-controls");return t?document.getElementById(t):null}function ze(e=document){e.querySelectorAll("[data-fw-nav-toggle]").forEach(t=>{var r,s;if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=Ge(t);if(!n)return;let o=(s=(r=t.closest(".fw-nav"))!=null?r:t.parentElement)!=null?s:t;t.addEventListener("click",i=>{i.stopPropagation(),(n.classList.contains(Ue)?de:Dt)(t)}),document.addEventListener("click",i=>{!o.contains(i.target)&&!n.contains(i.target)&&de(t)}),document.addEventListener("keydown",i=>{i.key==="Escape"&&de(t)})})}var fe={};b(fe,{init:()=>Je,resetAll:()=>Bt,resetButtonLoading:()=>Pt,setButtonLoading:()=>It});var U="fw-btn-loading";function It(e,t){var o,r;if(!e||e.classList.contains(U))return;e.dataset.fwOriginalHtml=e.innerHTML,e.disabled=!0,e.setAttribute("aria-busy","true"),e.classList.add(U);let n=(r=(o=t!=null?t:e.dataset.fwLoadingText)!=null?o:e.textContent)!=null?r:"";e.innerHTML='<span class="fw-spinner fw-spinner-sm" aria-hidden="true"></span>',e.appendChild(document.createTextNode(n))}function Pt(e){!e||!e.classList.contains(U)||(e.disabled=!1,e.removeAttribute("aria-busy"),e.classList.remove(U),e.dataset.fwOriginalHtml!==void 0&&(e.innerHTML=e.dataset.fwOriginalHtml,delete e.dataset.fwOriginalHtml))}function Bt(e=document){e.querySelectorAll(`.${U}`).forEach(Pt)}var Nt=!1;function Je(e=document){e.querySelectorAll("form[data-fw-loading]").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",t.addEventListener("submit",()=>{let n=t.querySelector('button[type="submit"], button:not([type])');It(n)}))}),Nt||(Nt=!0,window.addEventListener("pageshow",t=>{t.persisted&&Bt()}))}var me={};b(me,{hide:()=>qt,show:()=>In});var T=null,q=null;function Nn(){return T&&T.isConnected||(T=document.createElement("div"),T.className="fw-toast",T.setAttribute("role","status"),T.setAttribute("aria-live","polite"),T.innerHTML='<span class="fw-toast-dot" aria-hidden="true"></span><span class="fw-toast-text"></span>',document.body.appendChild(T)),T}function In(e,{variant:t="success",duration:n=4e3}={}){let o=Nn();return o.className=`fw-toast${t==="success"?"":` fw-toast-${t}`}`,o.querySelector(".fw-toast-text").textContent=e,q&&clearTimeout(q),o.classList.remove("is-show"),o.offsetWidth,o.classList.add("is-show"),n>0&&(q=setTimeout(qt,n)),o}function qt(){T==null||T.classList.remove("is-show"),q&&clearTimeout(q),q=null}var ve={};b(ve,{getSelected:()=>tt,init:()=>nt,selectAll:()=>Vt,setRowSelected:()=>jt,sort:()=>Ye});var Pn="is-selected";function Xe(e,t,n){e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:n}))}function Rt(e,t){var o,r,s;let n=e.cells[t];return(s=(r=n==null?void 0:n.dataset.fwSortValue)!=null?r:(o=n==null?void 0:n.textContent)==null?void 0:o.trim())!=null?s:""}function Bn(e,t){let n=Number(e),o=Number(t);return e!==""&&t!==""&&Number.isFinite(n)&&Number.isFinite(o)?n-o:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"})}function Ft(e){var t,n;return Array.from((n=(t=e.tHead)==null?void 0:t.querySelectorAll("th[data-fw-sort]"))!=null?n:[])}function $t(e){return e.getAttribute("aria-sort")==="ascending"?"descending":"ascending"}function Ye(e,t,n){let o=e.tBodies[0];if(!o)return;let r=Array.from(o.rows),s=r.filter(d=>d.cells.length>t),i=r.filter(d=>d.cells.length<=t),l=n==="ascending"?1:-1;s.sort((d,a)=>l*Bn(Rt(d,t),Rt(a,t))),[...s,...i].forEach(d=>o.appendChild(d));let c=null;Ft(e).forEach(d=>{let a=d.cellIndex===t;d.setAttribute("aria-sort",a?n:"none"),a&&(c=d)}),c&&Xe(e,"fw:sort",{column:t,direction:n,th:c})}function pe(e){return Array.from(e.querySelectorAll("tbody input[data-fw-select-row]"))}function Qe(e,t){e.classList.toggle(Pn,t),e.setAttribute("aria-selected",t?"true":"false")}function et(e){let t=e.querySelector("[data-fw-select-all]");if(!t)return;let n=pe(e),o=n.filter(r=>r.checked).length;t.checked=o>0&&o===n.length,t.indeterminate=o>0&&o<n.length}function tt(e){return pe(e).filter(t=>t.checked).map(t=>t.closest("tr")).filter(t=>t!==null)}function jt(e,t){let n=e.querySelector("input[data-fw-select-row]");n&&(n.checked=t),Qe(e,t);let o=e.closest("table");o&&(et(o),Xe(o,"fw:select",{rows:tt(o),all:!1}))}function Vt(e,t){pe(e).forEach(n=>{n.checked=t;let o=n.closest("tr");o&&Qe(o,t)}),et(e),Xe(e,"fw:select",{rows:tt(e),all:!0})}function nt(e=document){e.querySelectorAll("table[data-fw-table]").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",Ft(t).forEach(n=>{n.hasAttribute("aria-sort")||n.setAttribute("aria-sort","none")}),t.addEventListener("click",n=>{let o=n.target.closest("th[data-fw-sort]");o&&t.contains(o)&&Ye(t,o.cellIndex,$t(o))}),t.addEventListener("keydown",n=>{if(n.key!=="Enter"&&n.key!==" ")return;let o=n.target;if(!o.matches("th[data-fw-sort], th[data-fw-sort] .fw-table-sort"))return;let r=o.closest("th[data-fw-sort]");r&&(n.preventDefault(),Ye(t,r.cellIndex,$t(r)))}),t.addEventListener("change",n=>{let o=n.target;if(o.matches("[data-fw-select-all]"))Vt(t,o.checked);else if(o.matches("[data-fw-select-row]")){let r=o.closest("tr");r&&jt(r,o.checked)}}),pe(t).forEach(n=>{let o=n.closest("tr");o&&n.checked&&Qe(o,!0)}),et(t))})}var ye={};b(ye,{close:()=>we,collapseAll:()=>jn,expandAll:()=>Fn,init:()=>ot,open:()=>he,reveal:()=>Wt,toggle:()=>$n});var H=".fw-menu-group",_t=".fw-menu-link, .fw-menu-summary",qn="is-current";function Rn(e,t){e.dispatchEvent(new CustomEvent("fw:toggle",{bubbles:!0,detail:t}))}function he(e){e.open=!0}function we(e){e.open=!1}function $n(e,t){e.open=t!=null?t:!e.open}function Fn(e){e.querySelectorAll(H).forEach(he)}function jn(e){e.querySelectorAll(H).forEach(we)}function Wt(e){var n,o,r,s;let t=(o=(n=e.parentElement)==null?void 0:n.closest(H))!=null?o:null;for(;t;)he(t),t=(s=(r=t.parentElement)==null?void 0:r.closest(H))!=null?s:null}function Kt(e){e.querySelectorAll(H).forEach(t=>{let n=t.querySelector(":scope > .fw-menu-summary");if(!n)return;let o=!t.open&&t.querySelector("[aria-current]")!==null;n.classList.toggle(qn,o)})}function Zt(e){return e.matches(".fw-menu-summary")?e.closest(H):null}function Ut(e){var n,o,r;return(r=(o=((n=Zt(e))!=null?n:e).parentElement)==null?void 0:o.closest(H))!=null?r:null}function Vn(e){var t,n;for(let o=Ut(e);o;o=(n=(t=o.parentElement)==null?void 0:t.closest(H))!=null?n:null)if(!o.open)return!1;return!0}function Kn(e){return Array.from(e.querySelectorAll(_t)).filter(Vn)}function P(e){return e?(e.focus(),!0):!1}function _n(e){var n;let t=e.closest(".fw-menu-split");return(n=t==null?void 0:t.querySelector(":scope > .fw-menu-group > .fw-menu-summary"))!=null?n:null}function Wn(e,t){var l;if(t.altKey||t.ctrlKey||t.metaKey||t.shiftKey)return;let n=t.target instanceof HTMLElement&&t.target.matches(_t)?t.target:null;if(!n||!e.contains(n))return;let o=Kn(e),r=o.indexOf(n),s=Zt(n),i=!0;switch(t.key){case"ArrowDown":P(o[r+1]);break;case"ArrowUp":P(o[r-1]);break;case"Home":P(o[0]);break;case"End":P(o[o.length-1]);break;case"ArrowRight":s?s.open?s.contains((l=o[r+1])!=null?l:e)&&P(o[r+1]):he(s):P(_n(n));break;case"ArrowLeft":if(s!=null&&s.open)we(s);else{let c=Ut(n);P(c==null?void 0:c.querySelector(":scope > .fw-menu-summary"))}break;default:i=!1}i&&t.preventDefault()}function ot(e=document){e.querySelectorAll("[data-fw-menu]").forEach(t=>{if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=t.hasAttribute("data-fw-menu-exclusive");t.addEventListener("toggle",o=>{let r=o.target;!(r instanceof HTMLDetailsElement)||!r.matches(H)||(n&&r.open&&r.parentElement&&Array.from(r.parentElement.children).forEach(s=>{s!==r&&s instanceof HTMLDetailsElement&&s.matches(H)&&we(s)}),Kt(t),Rn(r,{group:r,open:r.open}))},!0),t.addEventListener("keydown",o=>Wn(t,o)),t.querySelectorAll("[aria-current]").forEach(Wt),Kt(t)})}var Te={};b(Te,{init:()=>it,popover:()=>Yt});var Zn={top:"bottom",bottom:"top",left:"right",right:"left"},R=10;function Un(e){switch(e){case"top-left":return{side:"top",align:"end"};case"top-right":return{side:"top",align:"start"};case"bottom-left":return{side:"bottom",align:"end"};case"bottom-right":return{side:"bottom",align:"start"};default:return{side:e,align:"center"}}}var Gn={start:"right",end:"left"};function zn(e,t){return t==="center"?e:`${e}-${Gn[t]}`}function rt(e,t,n,o){switch(e){case"top":return t.top;case"bottom":return o-t.bottom;case"left":return t.left;case"right":return n-t.right}}function Gt(e,t,n,o){switch(e){case"top":return t.top-o-n.height;case"bottom":return t.bottom+o;case"left":return t.left-o-n.width;case"right":return t.right+o}}function zt(e,t,n,o){switch(e){case"start":return t;case"end":return t+n-o;case"center":return t+n/2-o/2}}function Ee(e,t,n){return Math.min(Math.max(e,t),n>t?n:t)}function be(e,t,n={}){var E,S,O;let o=(E=n.placement)!=null?E:"bottom",r=(S=n.offset)!=null?S:8,s=(O=n.padding)!=null?O:8,i=e.getBoundingClientRect(),l=t.getBoundingClientRect(),c=window.innerWidth,d=window.innerHeight,{side:a,align:u}=Un(o),h=Zn[a],m=a==="top"||a==="bottom"?l.height:l.width,p=rt(a,i,c,d)-r<m&&rt(h,i,c,d)-r>rt(a,i,c,d)-r?h:a,v,x,g;return p==="top"||p==="bottom"?(v=Gt(p,i,l,r),x=Ee(zt(u,i.left,i.width,l.width),s,c-l.width-s),g=Ee(i.left+i.width/2-x,R,Math.max(l.width-R,R))):(x=Gt(p,i,l,r),v=Ee(zt("center",i.top,i.height,l.height),s,d-l.height-s),g=Ee(i.top+i.height/2-v,R,Math.max(l.height-R,R))),{placement:zn(p,u),top:v,left:x,arrowOffset:g}}function Jt(e,t){let n=i=>!e.some(l=>l.contains(i)),o=!1,r=i=>{o=n(i.target)},s=i=>{o&&n(i.target)&&t()};return document.addEventListener("mousedown",r,!0),document.addEventListener("click",s,!0),()=>{document.removeEventListener("mousedown",r,!0),document.removeEventListener("click",s,!0)}}var Jn='a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';function Yt(e,t,n={}){var O,$;let o=(O=n.placement)!=null?O:"bottom",r=($=n.offset)!=null?$:8;e.setAttribute("aria-haspopup","dialog"),e.setAttribute("aria-controls",t.id),e.setAttribute("aria-expanded","false"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","false"),t.classList.add("fw-popover");let s=t.parentNode,i=t.nextSibling,l=!1,c=null,d=0;function a(){let w=be(e,t,{placement:o,offset:r});t.style.top=`${w.top}px`,t.style.left=`${w.left}px`,t.setAttribute("data-placement",w.placement)}function u(){cancelAnimationFrame(d),d=requestAnimationFrame(a)}function h(w){w.key==="Escape"&&(w.stopPropagation(),v())}function m(w){let B=w.relatedTarget;B&&(t.contains(B)||e.contains(B))||setTimeout(()=>{if(!l)return;let C=document.activeElement;C===document.body||C===null||t.contains(C)||e.contains(C)||v()},0)}function p(){if(l)return;l=!0,t.parentNode!==document.body&&document.body.appendChild(t),a(),t.classList.add("is-open"),e.setAttribute("aria-expanded","true");let w=t.querySelector(Jn);w?w.focus({preventScroll:!0}):(t.hasAttribute("tabindex")||t.setAttribute("tabindex","-1"),t.focus({preventScroll:!0})),c=Jt([e,t],v),window.addEventListener("scroll",u,!0),window.addEventListener("resize",u),t.addEventListener("keydown",h),t.addEventListener("focusout",m),t.dispatchEvent(new CustomEvent("fw:open",{bubbles:!0}))}function v(){if(!l)return;l=!1,t.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),c==null||c(),c=null,window.removeEventListener("scroll",u,!0),window.removeEventListener("resize",u),t.removeEventListener("keydown",h),t.removeEventListener("focusout",m),cancelAnimationFrame(d),i===null||i.parentNode===s?s.insertBefore(t,i):s.appendChild(t),t.dispatchEvent(new CustomEvent("fw:close",{bubbles:!0})),e.focus({preventScroll:!0})}function x(){(l?v:p)()}let g=()=>x(),E=Array.from(t.querySelectorAll("[data-fw-popover-close]")),S=()=>v();return e.addEventListener("click",g),E.forEach(w=>w.addEventListener("click",S)),{open:p,close:v,toggle:x,destroy(){l&&v(),e.removeEventListener("click",g),E.forEach(w=>w.removeEventListener("click",S)),delete e.dataset.fwBound}}}function it(e=document){e.querySelectorAll("[data-fw-popover-trigger]").forEach(t=>{var r;if(t.dataset.fwBound)return;let n=(r=t.dataset.fwPopoverTrigger)!=null?r:"",o=document.getElementById(n);if(!o){console.warn(`fernwell: popover trigger references missing panel #${n}`);return}t.dataset.fwBound="1",Yt(t,o,{placement:t.dataset.fwPopoverPlacement||void 0,offset:t.dataset.fwPopoverOffset?Number(t.dataset.fwPopoverOffset):void 0})})}var Le={};b(Le,{init:()=>lt,tooltip:()=>on});var Yn=400,Xn=300,Qn=100,z=new WeakMap,L=null,A=null,J=0,Y=0,at=0,Qt=0;function eo(){if(L&&L.isConnected)return L;let e=document.createElement("div");return e.className="fw-tooltip",e.id="fw-tooltip",e.setAttribute("role","tooltip"),document.body.appendChild(e),e.addEventListener("mouseenter",en),e.addEventListener("mouseleave",()=>nn()),L=e,e}function en(){clearTimeout(Y)}function tn(){if(!A||!L)return;let e=z.get(A);if(!e)return;let t=be(A,L,{placement:e.placement,offset:e.offset});L.style.top=`${t.top}px`,L.style.left=`${t.left}px`,L.style.setProperty("--fw-tooltip-arrow-pos",`${t.arrowOffset}px`),L.setAttribute("data-placement",t.placement)}function xe(){cancelAnimationFrame(at),at=requestAnimationFrame(tn)}function Xt(e){var o;if(clearTimeout(J),en(),!z.get(e))return;A=e;let n=eo();n.textContent=(o=e.dataset.fwTooltipText)!=null?o:"",tn(),n.classList.add("is-open"),window.addEventListener("scroll",xe,!0),window.addEventListener("resize",xe)}function G(){clearTimeout(J),clearTimeout(Y),L&&L.classList.remove("is-open"),window.removeEventListener("scroll",xe,!0),window.removeEventListener("resize",xe),cancelAnimationFrame(at),A&&(Qt=performance.now()),A=null}function st(e,t){clearTimeout(Y),clearTimeout(J);let n=z.get(e);n&&(t||performance.now()-Qt<Xn?Xt(e):J=window.setTimeout(()=>Xt(e),n.delay))}function nn(){clearTimeout(J),clearTimeout(Y),Y=window.setTimeout(G,Qn)}function on(e,t={}){var d,a,u;let n={placement:(d=t.placement)!=null?d:"top",offset:(a=t.offset)!=null?a:6,delay:(u=t.delay)!=null?u:Yn};z.set(e,n);let o=e.getAttribute("title");o!==null&&(e.dataset.fwTooltipText=o,e.removeAttribute("title")),e.setAttribute("aria-describedby","fw-tooltip");let r=()=>st(e,!1),s=()=>nn(),i=()=>st(e,!0),l=()=>{A===e&&G()},c=h=>{h.key==="Escape"&&A===e&&G()};return e.addEventListener("mouseenter",r),e.addEventListener("mouseleave",s),e.addEventListener("focus",i),e.addEventListener("blur",l),e.addEventListener("keydown",c),{show:()=>st(e,!0),hide:()=>{A===e&&G()},destroy(){A===e&&G(),e.removeEventListener("mouseenter",r),e.removeEventListener("mouseleave",s),e.removeEventListener("focus",i),e.removeEventListener("blur",l),e.removeEventListener("keydown",c),e.removeAttribute("aria-describedby"),e.dataset.fwTooltipText!==void 0&&(e.setAttribute("title",e.dataset.fwTooltipText),delete e.dataset.fwTooltipText),z.delete(e),delete e.dataset.fwBound}}}function lt(e=document){e.querySelectorAll("[data-fw-tooltip]").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",on(t,{placement:t.dataset.fwTooltipPlacement||void 0,offset:t.dataset.fwTooltipOffset?Number(t.dataset.fwTooltipOffset):void 0,delay:t.dataset.fwTooltipDelay?Number(t.dataset.fwTooltipDelay):void 0}))})}var Me={};b(Me,{init:()=>dt,tabs:()=>ln});function to(e,t){e.dispatchEvent(new CustomEvent("fw:tabs-change",{bubbles:!0,detail:t}))}function ge(e){return e.getAttribute("aria-disabled")==="true"}function ct(e){let t=e.getAttribute("aria-controls");return t?document.getElementById(t):null}function rn(e){return e instanceof Element?e.closest('[role="tab"]'):null}function sn(e,t,n){for(let o=1;o<=e.length;o++){let r=((t+n*o)%e.length+e.length)%e.length;if(!ge(e[r]))return e[r]}}function an(e){return e.find(t=>!ge(t))}function no(e){for(let t=e.length-1;t>=0;t--)if(!ge(e[t]))return e[t]}function ln(e,t={}){var d;let n=(d=t.activation)!=null?d:"automatic";function o(){return Array.from(e.querySelectorAll('[role="tab"]'))}function r(a,u=!1){if(ge(a))return;o().forEach(m=>{let p=m===a;m.setAttribute("aria-selected",String(p)),m.tabIndex=p?0:-1;let v=ct(m);v&&(v.hidden=!p)}),u&&a.focus();let h=ct(a);h&&to(e,{tab:a,panel:h})}function s(a){o().forEach(u=>{u.tabIndex=u===a?0:-1}),a.focus()}function i(){var h;let a=o(),u=(h=a.find(m=>m.getAttribute("aria-selected")==="true"))!=null?h:an(a);a.forEach(m=>{let p=m===u;m.setAttribute("aria-selected",String(p)),m.tabIndex=p?0:-1;let v=ct(m);v&&(v.hidden=!p)})}function l(a){let u=rn(a.target);u&&e.contains(u)&&r(u,!1)}function c(a){let u=rn(a.target);if(!u)return;let h=o(),m=h.indexOf(u);if(m===-1)return;if(a.key===" "||a.key==="Enter"){n==="manual"&&(a.preventDefault(),r(u,!1));return}let p=e.getAttribute("aria-orientation")==="vertical",v=getComputedStyle(e).direction==="rtl",x=p?"ArrowDown":v?"ArrowLeft":"ArrowRight",g=p?"ArrowUp":v?"ArrowRight":"ArrowLeft",E;if(a.key===x)E=sn(h,m,1);else if(a.key===g)E=sn(h,m,-1);else if(a.key==="Home")E=an(h);else if(a.key==="End")E=no(h);else return;E&&(a.preventDefault(),n==="manual"?s(E):r(E,!0))}return e.addEventListener("click",l),e.addEventListener("keydown",c),i(),{activate:r,destroy(){e.removeEventListener("click",l),e.removeEventListener("keydown",c),delete e.dataset.fwBound}}}function dt(e=document){e.querySelectorAll('[role="tablist"][data-fw-tabs]').forEach(t=>{if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=t.dataset.fwTabsActivation==="manual"?"manual":"automatic";ln(t,{activation:n})})}var cn="0.5.0";function dn(e=document){$e(e),Pe(e),Fe(e),Ze(e),ze(e),Je(e),nt(e),ot(e),He(e),it(e),lt(e),dt(e)}var oo={version:cn,init:dn,theme:ae,tokens:ie,combobox:le,modal:ce,nav:ue,loading:fe,toast:me,table:ve,menu:ye,icon:Q,popover:Te,tooltip:Le,tabs:Me},ro=oo;
|
|
1
|
+
/*! fernwell v0.6.0 | MIT | https://github.com/JacobKnaack/fernwell */
|
|
2
|
+
"use strict";var De=Object.defineProperty;var Dn=Object.getOwnPropertyDescriptor;var Bn=Object.getOwnPropertyNames;var Pn=Object.prototype.hasOwnProperty;var g=(e,t)=>{for(var n in t)De(e,n,{get:t[n],enumerable:!0})},$n=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Bn(t))!Pn.call(e,r)&&r!==n&&De(e,r,{get:()=>t[r],enumerable:!(o=Dn(t,r))||o.enumerable});return e};var qn=e=>$n(De({},"__esModule",{value:!0}),e);var Do={};g(Do,{combobox:()=>ve,default:()=>Io,icon:()=>se,init:()=>Nn,loading:()=>ye,menu:()=>Me,modal:()=>be,nav:()=>he,numberInput:()=>Ie,popover:()=>Ae,table:()=>Te,tabs:()=>Ce,theme:()=>pe,toast:()=>Ee,tokens:()=>fe,tooltip:()=>Oe,version:()=>On});module.exports=qn(Do);var pe={};g(pe,{get:()=>Ue,getToken:()=>Ve,init:()=>We,resetTokens:()=>Fe,set:()=>me,setTokens:()=>Q,toggle:()=>Ut});var se={};g(se,{init:()=>Be,render:()=>F});var Rn={add:'<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>',minus:'<line x1="5" y1="12" x2="19" y2="12"/>',close:'<line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/>',check:'<polyline points="5,13 10,18 19,7"/>',edit:'<path d="M16.8 3.5a2.1 2.1 0 0 1 3 3L8.5 17.8 4 19l1.2-4.5Z"/><line x1="14.5" y1="5.8" x2="17.7" y2="9"/>',trash:'<path d="M4 7h16"/><path d="M9 7V4.6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1V7"/><path d="M6.5 7l.8 12.4A2 2 0 0 0 9.3 21h5.4a2 2 0 0 0 2-1.6L18 7"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/>',save:'<path d="M5 4a1 1 0 0 1 1-1h9.2a1 1 0 0 1 .7.3l2.8 2.8a1 1 0 0 1 .3.7V20a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4Z"/><path d="M8 3v5h7V3"/><path d="M8 21v-6h8v6"/>',search:'<circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.6" y2="16.6"/>',settings:'<circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1"/>',download:'<line x1="12" y1="3" x2="12" y2="15"/><polyline points="7,10 12,15 17,10"/><line x1="5" y1="21" x2="19" y2="21"/>',upload:'<line x1="12" y1="15" x2="12" y2="3"/><polyline points="7,8 12,3 17,8"/><line x1="5" y1="21" x2="19" y2="21"/>',share:'<circle cx="6" cy="12" r="2.3"/><circle cx="18" cy="6" r="2.3"/><circle cx="18" cy="18" r="2.3"/><line x1="8.1" y1="10.8" x2="15.9" y2="7.2"/><line x1="8.1" y1="13.2" x2="15.9" y2="16.8"/>',copy:'<rect x="9" y="9" width="12" height="12" rx="2"/><path d="M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1"/>',menu:'<line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="20" y2="18"/>',more:'<circle cx="5" cy="12" r="1.4" fill="currentColor" stroke="none"/><circle cx="12" cy="12" r="1.4" fill="currentColor" stroke="none"/><circle cx="19" cy="12" r="1.4" fill="currentColor" stroke="none"/>',user:'<circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/>',bell:'<path d="M6 8a6 6 0 0 1 12 0c0 5 2 6 2 6H4s2-1 2-6"/><path d="M10 20a2 2 0 0 0 4 0"/>',heart:'<path d="M12 20s-7-4.4-9.5-8.5C.8 8 2 4.5 5.5 4.5c2 0 3.5 1 6.5 4 3-3 4.5-4 6.5-4 3.5 0 4.7 3.5 3 7-2.5 4.1-9.5 8.5-9.5 8.5Z"/>',star:'<polygon points="12,3 14.6,9.1 21.2,9.3 16,13.4 17.8,19.8 12,16.3 6.2,19.8 8,13.4 2.8,9.3 9.4,9.1"/>',calendar:'<rect x="3" y="5" width="18" height="16" rx="2"/><line x1="8" y1="3" x2="8" y2="7"/><line x1="16" y1="3" x2="16" y2="7"/><line x1="3" y1="10" x2="21" y2="10"/>',refresh:'<path d="M20 11A8 8 0 0 0 6.3 6.3L4 8.6"/><path d="M4 4v5h5"/><path d="M4 13a8 8 0 0 0 13.7 4.7L20 15.4"/><path d="M20 20v-5h-5"/>',filter:'<polygon points="4,4 20,4 14,12 14,19 10,21 10,12"/>',info:'<circle cx="12" cy="12" r="9"/><line x1="12" y1="11" x2="12" y2="16"/><circle cx="12" cy="8" r="1" fill="currentColor" stroke="none"/>',warning:'<path d="M12 3 22 20H2Z"/><line x1="12" y1="9.5" x2="12" y2="14.5"/><circle cx="12" cy="17.3" r="1" fill="currentColor" stroke="none"/>',lock:'<rect x="5" y="11" width="14" height="10" rx="2"/><path d="M8 11V7a4 4 0 0 1 8 0v4"/>',eye:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/>',"chevron-down":'<polyline points="6,9 12,15 18,9"/>',"arrow-left":'<line x1="19" y1="12" x2="5" y2="12"/><polyline points="12,5 5,12 12,19"/>',"arrow-right":'<line x1="5" y1="12" x2="19" y2="12"/><polyline points="12,5 19,12 12,19"/>',folder:'<path d="M3.5 6.5a1 1 0 0 1 1-1H10l2 2.2h7.5a1 1 0 0 1 1 1V18a1 1 0 0 1-1 1H4.5a1 1 0 0 1-1-1Z"/>',bookmark:'<path d="M6 3h12a1 1 0 0 1 1 1v17l-7-4-7 4V4a1 1 0 0 1 1-1Z"/>',home:'<path d="M4 11.5 12 4l8 7.5"/><path d="M6 10v10a1 1 0 0 0 1 1h3.5v-6h2.8v6H17a1 1 0 0 0 1-1V10"/>',logout:'<path d="M9 4H5.5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1H9"/><line x1="14" y1="12" x2="21" y2="12"/><polyline points="17.5,8.5 21,12 17.5,15.5"/>',paperclip:'<path d="M21 11.5 12.4 20a4.3 4.3 0 0 1-6-6.1L15 5.3a2.9 2.9 0 0 1 4.1 4.1l-8.6 8.6a1.4 1.4 0 0 1-2-2l7.9-7.9"/>',envelope:'<rect x="3" y="5" width="18" height="14" rx="2"/><path d="M4 6.5 12 13l8-6.5"/>',"chevron-up":'<polyline points="6,15 12,9 18,15"/>',"chevron-left":'<polyline points="15,6 9,12 15,18"/>',"chevron-right":'<polyline points="9,6 15,12 9,18"/>',"arrow-up":'<line x1="12" y1="19" x2="12" y2="5"/><polyline points="5,12 12,5 19,12"/>',"arrow-down":'<line x1="12" y1="5" x2="12" y2="19"/><polyline points="5,12 12,19 19,12"/>',unlock:'<rect x="5" y="11" width="14" height="10" rx="2"/><path d="M8 11V7a4 4 0 0 1 7.8-1.3"/>',"thumbs-up":'<path d="M7 11v9H4.5a1 1 0 0 1-1-1v-7a1 1 0 0 1 1-1H7Z"/><path d="M7 11l4.3-7.3a1.4 1.4 0 0 1 2.6.8L13 9h5.6a2 2 0 0 1 1.9 2.6l-2 6.5A2 2 0 0 1 16.6 19.5H10a3 3 0 0 1-3-3"/>',"thumbs-down":'<path d="M7 13V4h2.5a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H7Z"/><path d="M7 13l4.3 7.3a1.4 1.4 0 0 0 2.6-.8L13 15h5.6a2 2 0 0 0 1.9-2.6l-2-6.5A2 2 0 0 0 16.6 4.5H10a3 3 0 0 0-3 3"/>',"eye-closed":'<path d="M3.5 12S7 6 12 6s8.5 6 8.5 6-3.5 6-8.5 6-8.5-6-8.5-6Z"/><line x1="4" y1="19" x2="20" y2="5"/>',"help-circle":'<circle cx="12" cy="12" r="9"/><path d="M9.2 9.2a2.8 2.8 0 1 1 4.3 2.4c-.9.6-1.5 1.1-1.5 2.2"/><circle cx="12" cy="17" r="1" fill="currentColor" stroke="none"/>',chat:'<path d="M4 5.5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H9.5L5 20.5V16.5H5a1 1 0 0 1-1-1Z"/>',kebab:'<circle cx="12" cy="5" r="1.4" fill="currentColor" stroke="none"/><circle cx="12" cy="12" r="1.4" fill="currentColor" stroke="none"/><circle cx="12" cy="19" r="1.4" fill="currentColor" stroke="none"/>',sun:'<circle cx="12" cy="12" r="4"/><line x1="12" y1="2" x2="12" y2="4.5"/><line x1="12" y1="19.5" x2="12" y2="22"/><line x1="2" y1="12" x2="4.5" y2="12"/><line x1="19.5" y1="12" x2="22" y2="12"/><line x1="4.9" y1="4.9" x2="6.6" y2="6.6"/><line x1="17.4" y1="17.4" x2="19.1" y2="19.1"/><line x1="4.9" y1="19.1" x2="6.6" y2="17.4"/><line x1="17.4" y1="6.6" x2="19.1" y2="4.9"/>',moon:'<path d="M20.5 14.2A8.5 8.5 0 1 1 9.8 3.5a7 7 0 0 0 10.7 10.7Z"/>'},St=["xs","sm","md","lg","xl"],Ot=["thin","regular","bold"];function F(e){let t=Rn[e];return t?`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${t}</svg>`:""}function Fn(e,t){if(t){if(!St.includes(t)){console.warn(`fernwell: unknown icon size "${t}" (expected ${St.join(", ")})`);return}e.classList.add(`fw-icon-${t}`)}}function jn(e,t){if(!t)return;if(Ot.includes(t)){e.classList.add(`fw-icon-stroke-${t}`);return}let n=Number(t);if(!Number.isFinite(n)||n<=0){console.warn(`fernwell: unknown icon stroke "${t}" (expected ${Ot.join(", ")} or a positive number)`);return}e.style.setProperty("--fw-icon-stroke",String(n))}function Be(e=document){e.querySelectorAll("[data-fw-icon]").forEach(t=>{var r;if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=(r=t.dataset.fwIcon)!=null?r:"",o=F(n);o||console.warn(`fernwell: unknown icon "${n}"`),t.innerHTML=o,t.classList.add("fw-icon"),Fn(t,t.dataset.fwIconSize),jn(t,t.dataset.fwIconStroke)})}var fe={};g(fe,{getToken:()=>Ve,init:()=>Ke,resetTokens:()=>Fe,restoreTokens:()=>_t,setTokens:()=>Q});var Nt=[{name:"primary-hover",light:"color-mix(in srgb, var(--fw-primary), var(--fw-text) 12%)",dark:"color-mix(in srgb, var(--fw-primary), var(--fw-text) 12%)",deps:["primary","text"]},{name:"primary-soft",light:"color-mix(in srgb, var(--fw-primary), white 35%)",dark:"color-mix(in srgb, var(--fw-primary), white 35%)",deps:["primary"]},{name:"secondary-hover",light:"color-mix(in srgb, var(--fw-secondary), var(--fw-text) 15%)",dark:"color-mix(in srgb, var(--fw-secondary), var(--fw-text) 15%)",deps:["secondary","text"]},{name:"secondary-bg",light:"color-mix(in srgb, var(--fw-secondary) 10%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-secondary) 16%, transparent)",deps:["secondary","surface"]},{name:"success-bg",light:"color-mix(in srgb, var(--fw-success) 12%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-success) 14%, transparent)",deps:["success","surface"]},{name:"warning-bg",light:"color-mix(in srgb, var(--fw-warning) 14%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-warning) 16%, transparent)",deps:["warning","surface"]},{name:"danger-bg",light:"color-mix(in srgb, var(--fw-danger) 13%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-danger) 14%, transparent)",deps:["danger","surface"]},{name:"info-bg",light:"color-mix(in srgb, var(--fw-info) 12%, var(--fw-surface))",dark:"color-mix(in srgb, var(--fw-info) 14%, transparent)",deps:["info","surface"]},{name:"on-secondary-soft",light:"color-mix(in srgb, var(--fw-on-secondary) 72%, transparent)",dark:"color-mix(in srgb, var(--fw-on-secondary) 72%, transparent)",deps:["on-secondary"]},{name:"on-secondary-fill",light:"color-mix(in srgb, var(--fw-on-secondary) 10%, transparent)",dark:"color-mix(in srgb, var(--fw-on-secondary) 10%, transparent)",deps:["on-secondary"]},{name:"on-secondary-line",light:"color-mix(in srgb, var(--fw-on-secondary) 16%, transparent)",dark:"color-mix(in srgb, var(--fw-on-secondary) 16%, transparent)",deps:["on-secondary"]},{name:"focus-ring",light:"0 0 0 4px color-mix(in srgb, var(--fw-primary) 25%, transparent)",dark:"0 0 0 4px color-mix(in srgb, var(--fw-primary) 25%, transparent)",deps:["primary"]},{name:"scrollbar-thumb",light:"var(--fw-text-soft)",dark:"var(--fw-text-soft)",deps:["text-soft"]},{name:"scrollbar-thumb-hover",light:"color-mix(in srgb, var(--fw-text-soft), var(--fw-text) 15%)",dark:"color-mix(in srgb, var(--fw-text-soft), var(--fw-text) 15%)",deps:["text-soft","text"]},{name:"shadow-primary",light:"0 6px 16px color-mix(in srgb, var(--fw-primary) 35%, transparent)",dark:"0 6px 16px color-mix(in srgb, var(--fw-primary) 22%, transparent)",deps:["primary"]},{name:"shadow-success",light:"0 6px 16px color-mix(in srgb, var(--fw-success) 28%, transparent)",dark:"0 6px 16px color-mix(in srgb, var(--fw-success) 22%, transparent)",deps:["success"]}];var Y="--fw-",Ct="data-fw-tokens",Pe="fw-tokens",It="fw-tokens-css",Vn="fw:tokenschange",de=":root",N=new Map,ae=new Map,ue=!1,Kn=0,X=new Map,Re=new WeakSet;function jt(){try{return window.localStorage}catch{return null}}function Vt(e){return e.startsWith("--")?e:`${Y}${e}`}function _n(e){return e.startsWith(Y)?e.slice(Y.length):e}function le(e){console.warn(`fernwell: ${e}`)}function Kt(e){try{return document.querySelector(e),!0}catch{return!1}}function zn(e){let t=0,n="";for(let o=0;o<e.length;o++){let r=e[o];if(r==="\\")o++;else if(n){if(r===n)n="";else if(r===`
|
|
3
|
+
`)return!1}else if(r==='"'||r==="'")n=r;else if(r==="(")t++;else if(r===")"&&--t<0)return!1}return t===0&&!n}function J(e){let t={};if(e===null||typeof e!="object")return t;for(let[n,o]of Object.entries(e))/^(--)?[\w-]+$/.test(n)?typeof o!="string"||/[{};]|\/\*/.test(o)||!zn(o)?le(`ignoring invalid value for token "${n}"`):t[Vt(n)]=o.trim():le(`ignoring token with invalid name "${n}"`);return t}function Un(e){return Object.values(e).some(t=>t!==null&&typeof t=="object")}function Wn(e){let t=[],n=0,o="",r=0;for(let i=0;i<e.length;i++){let s=e[i];s==="\\"?i++:o?s===o&&(o=""):s==='"'||s==="'"?o=s:s==="("||s==="["?n++:s===")"||s==="]"?n--:s===","&&n===0&&(t.push(e.slice(r,i).trim()),r=i+1)}return t.push(e.slice(r).trim()),t.filter(Boolean)}function Zn(e){return e===de?'[data-theme="dark"]':Wn(e).map(t=>`[data-theme="dark"] ${t}, ${t}[data-theme="dark"]`).join(", ")}function Dt(e){return Object.entries(e).map(([t,n])=>`${t}:${n};`).join("")}function Bt(e,t){let n=new Set(Object.keys(e).map(_n)),o=new Set(n),r={};for(let i=!0;i;){i=!1;for(let s of Nt)n.has(s.name)||`${Y}${s.name}`in r||s.deps.some(c=>o.has(c))&&(r[`${Y}${s.name}`]=s[t],o.add(s.name),i=!0)}return r}function $e(e){let t=[];return e.forEach(({light:n,dark:o},r)=>{let i=r===de,s=i?n:{...Bt(n,"light"),...n},c=i?o:{...Bt(o,"dark"),...o};Object.keys(s).length&&t.push(`${r}{${Dt(s)}}`),Object.keys(c).length&&t.push(`${Zn(r)}{${Dt(c)}}`)}),t}function Pt(e){let t=document.head.querySelector(`style[${Ct}]`);if(t)return e&&t!==document.head.lastElementChild&&document.head.appendChild(t),t;if(!e)return null;let n=document.createElement("style");return n.setAttribute(Ct,""),document.head.appendChild(n),n}function qe(){let e=jt();if(e)try{if(N.size===0){e.removeItem(Pe),e.removeItem(It);return}let t={};N.forEach((n,o)=>t[o]=n),e.setItem(Pe,JSON.stringify({v:1,scopes:t})),e.setItem(It,$e(N).join(`
|
|
4
|
+
`))}catch{}}function ce(e){var n;let t=[...$e(N),...$e(ae)];t.length===0?(n=Pt(!1))==null||n.remove():Pt(!0).textContent=t.join(`
|
|
5
|
+
`),document.dispatchEvent(new CustomEvent(Vn,{detail:{scope:e}}))}function $t(e,t){let n=new Map(Object.keys(t).map(o=>[o,o in e?e[o]:void 0]));return Object.assign(e,t),()=>n.forEach((o,r)=>{e[r]===t[r]&&(o===void 0?delete e[r]:e[r]=o)})}function Q(e,t={}){var a,m;let n=(a=t.scope)!=null?a:de;if(!Kt(n))return le(`ignoring tokens for invalid scope "${n}"`),()=>{};ue||je();let o,r;Un(e)?(o=J(e.light),r=J(e.dark)):(o=J(e),r={...o});let i=t.persist?N:ae,s=(m=i.get(n))!=null?m:{light:{},dark:{}},c=$t(s.light,o),d=$t(s.dark,r);i.set(n,s),t.persist&&qe(),ce(n);let u=!1;return()=>{u||(u=!0,c(),d(),!Object.keys(s.light).length&&!Object.keys(s.dark).length&&i.get(n)===s&&i.delete(n),i===N&&qe(),ce(n))}}function Fe(e){ue||je(),X.forEach((n,o)=>{(!e||n.scope===e)&&X.delete(o)});let t=e?N.delete(e):N.size>0;e?ae.delete(e):(N.clear(),ae.clear()),t&&qe(),ce(e)}function _t(){je(),ce()}function je(){var n;ue=!0,N.clear();let e=null;try{let o=(n=jt())==null?void 0:n.getItem(Pe);o&&(e=JSON.parse(o))}catch{}let t=e==null?void 0:e.scopes;if((e==null?void 0:e.v)===1&&t&&typeof t=="object")for(let[o,r]of Object.entries(t)){if(!Kt(o))continue;let i=J(r==null?void 0:r.light),s=J(r==null?void 0:r.dark);(Object.keys(i).length||Object.keys(s).length)&&N.set(o,{light:i,dark:s})}}function Ve(e,t=document.documentElement){return getComputedStyle(t).getPropertyValue(Vt(e)).trim()}function qt(e,t){try{let n=JSON.parse(e!=null?e:"");if(n!==null&&typeof n=="object"&&!Array.isArray(n))return n}catch{}return le(`${t} must be a JSON object of tokens`),null}function Gn(){X.forEach((e,t)=>{t.isConnected||(X.delete(t),Re.add(t),e.undo())})}function Rt(e){return!!e.dataset.fwTokensBound&&!Re.has(e)}function Ft(e,t,n){e.dataset.fwTokensBound="1",Re.delete(e),e.isConnected&&X.set(e,{scope:t,undo:n})}function Ke(e=document){ue||_t(),Gn(),e.querySelectorAll('script[type="application/json"][data-fw-theme-tokens]').forEach(t=>{var s;if(Rt(t))return;let n=qt(t.textContent,"data-fw-theme-tokens");if(t.dataset.fwTokensBound="1",!n)return;let o=t.hasAttribute("data-fw-persist"),r=(s=t.dataset.fwScope)!=null?s:de,i=Q(n,{scope:r,persist:o});o||Ft(t,r,i)}),e.querySelectorAll("[data-fw-theme-scope]").forEach(t=>{var i;if(Rt(t))return;let n=qt(t.getAttribute("data-fw-theme-scope"),"data-fw-theme-scope");if(t.dataset.fwTokensBound="1",!n)return;let o=(i=t.getAttribute("data-fw-scope-id"))!=null?i:`fw-s${++Kn}`;t.setAttribute("data-fw-scope-id",o);let r=`[data-fw-scope-id="${o}"]`;Ft(t,r,Q(n,{scope:r}))})}var _e="fw-theme",Jn="fw:themechange",zt="data-fw-theme-init";function ze(){try{return window.localStorage}catch{return null}}function Ue(){var t;let e=document.documentElement.getAttribute("data-theme");return e==="dark"||e==="light"?e:(t=window.matchMedia)!=null&&t.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"}function me(e,{persist:t=!0}={}){var n;document.documentElement.setAttribute("data-theme",e),t&&((n=ze())==null||n.setItem(_e,e)),document.querySelectorAll("[data-fw-theme-toggle]").forEach(o=>Wt(o,e)),document.dispatchEvent(new CustomEvent(Jn,{detail:e}))}function Ut(){let e=Ue()==="dark"?"light":"dark";return me(e),e}function Wt(e,t){e.setAttribute("aria-pressed",String(t==="dark"));let n=t==="dark"?e.dataset.fwThemeIconDark:e.dataset.fwThemeIconLight,o=t==="dark"?e.dataset.fwThemeLabelDark:e.dataset.fwThemeLabelLight;if(n!==void 0){let r=`<span class="fw-icon" aria-hidden="true">${F(n)}</span>`;e.innerHTML=o!==void 0?`${r} ${o}`:r}else o!==void 0&&(e.textContent=o)}function Yn(e){let t=typeof requestAnimationFrame=="function"?requestAnimationFrame:n=>setTimeout(n,16);t(()=>t(e))}function We(e=document){var r,i,s,c;let t=(r=ze())==null?void 0:r.getItem(_e),n=t==="dark"||t==="light"?t:Ue(),o=document.documentElement;o.setAttribute(zt,""),me(n,{persist:!1}),Yn(()=>o.removeAttribute(zt)),e.querySelectorAll("[data-fw-theme-toggle]").forEach(d=>{d.dataset.fwBound||(d.dataset.fwBound="1",Wt(d,n),d.addEventListener("click",()=>Ut()))}),(c=(i=window.matchMedia)==null?void 0:(s=i.call(window,"(prefers-color-scheme: dark)")).addEventListener)==null||c.call(s,"change",d=>{var u;(u=ze())!=null&&u.getItem(_e)||me(d.matches?"dark":"light",{persist:!1})})}var ve={};g(ve,{combobox:()=>Zt,init:()=>Ze});var Xn=0;function ee(e){return e.replace(/[&<>"']/g,t=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[t])}function Zt(e,t={}){var b,B,C,z;let n=(b=t.filter)!=null?b:((p,y)=>p.toLowerCase().includes(y)),o=(B=t.emptyText)!=null?B:"No matches",r=(C=t.options)!=null?C:Qn(e),i=[],s=-1,c=!1,d=e.getAttribute("list");d&&(e.dataset.fwList=d,e.removeAttribute("list"));let u=(z=e.closest(".fw-combobox"))!=null?z:eo(e),a=document.createElement("ul"),m=`fw-combobox-${++Xn}`;a.className="fw-combobox-list",a.id=m,a.setAttribute("role","listbox"),u.appendChild(a),e.setAttribute("role","combobox"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-controls",m),e.autocomplete="off";function E(p){i=p,s=-1;let y=e.value.trim().toLowerCase();if(p.length===0){a.innerHTML=`<li class="fw-combobox-empty">${ee(o)}</li>`;return}a.innerHTML=p.map((A,$)=>{let P=y?A.toLowerCase().indexOf(y):-1,G=P>-1?`${ee(A.slice(0,P))}<b>${ee(A.slice(P,P+y.length))}</b>${ee(A.slice(P+y.length))}`:ee(A);return`<li class="fw-combobox-option" role="option" id="${m}-${$}" data-index="${$}" aria-selected="false">${G}</li>`}).join("")}function w(){let p=e.value.trim().toLowerCase();E(p?r.filter(y=>n(y,p)):r),a.classList.add("is-open"),e.setAttribute("aria-expanded","true")}function v(){a.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),e.removeAttribute("aria-activedescendant"),s=-1}function f(p){let y=a.querySelectorAll(".fw-combobox-option");y.forEach($=>{$.classList.remove("is-active"),$.setAttribute("aria-selected","false")});let A=y[p];A&&(A.classList.add("is-active"),A.setAttribute("aria-selected","true"),A.scrollIntoView({block:"nearest"}),e.setAttribute("aria-activedescendant",A.id)),s=p}function M(p){var y;e.value=p,v(),c=!0,e.focus(),e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0})),c=!1,(y=t.onSelect)==null||y.call(t,p)}let k=()=>{c||w()},T=()=>{c||w()},H=p=>{p.key==="ArrowDown"?(p.preventDefault(),a.classList.contains("is-open")||w(),f(Math.min(s+1,i.length-1))):p.key==="ArrowUp"?(p.preventDefault(),f(Math.max(s-1,0))):p.key==="Enter"?s>-1&&i[s]!==void 0&&(p.preventDefault(),M(i[s])):p.key==="Escape"&&v()},x=p=>{let y=p.target.closest(".fw-combobox-option");y&&(p.preventDefault(),M(i[Number(y.dataset.index)]))},L=p=>{u.contains(p.target)||v()};return e.addEventListener("input",k),e.addEventListener("focus",T),e.addEventListener("keydown",H),a.addEventListener("mousedown",x),document.addEventListener("click",L),{open:w,close:v,setOptions(p){r=p,a.classList.contains("is-open")&&w()},destroy(){e.removeEventListener("input",k),e.removeEventListener("focus",T),e.removeEventListener("keydown",H),a.removeEventListener("mousedown",x),document.removeEventListener("click",L),a.remove(),e.dataset.fwList&&e.setAttribute("list",e.dataset.fwList),delete e.dataset.fwBound}}}function Qn(e){var o;let t=(o=e.getAttribute("list"))!=null?o:e.dataset.fwList,n=t?document.getElementById(t):null;return n?Array.from(n.querySelectorAll("option")).map(r=>r.value||r.textContent||""):[]}function eo(e){var n;let t=document.createElement("div");return t.className="fw-combobox",(n=e.parentNode)==null||n.insertBefore(t,e),t.appendChild(e),t}function Ze(e=document){e.querySelectorAll("input[data-fw-combobox]").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",Zt(t))})}var be={};g(be,{bindOutsideClickToClose:()=>Je,close:()=>j,init:()=>et,open:()=>Qe,toggle:()=>no});var V="is-open",Jt="fw-scroll-lock",K=[],Ge=new WeakMap,to='a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';function Ye(e){return typeof e=="string"?document.getElementById(e):e}function Xe(e){if(e.classList.contains("fw-modal-overlay"))return e;let t=e.id?document.querySelector(`[data-fw-drawer-overlay="${e.id}"]`):null;if(t)return t;let n=e.previousElementSibling;return n instanceof HTMLElement&&n.classList.contains("fw-drawer-overlay")?n:null}function Qe(e,t=(n=>(n=document.activeElement)!=null?n:null)()){var i;let o=Ye(e);if(!o||o.classList.contains(V))return;o.classList.add(V),(i=Xe(o))==null||i.classList.add(V),Ge.set(o,t),K.push(o),document.body.classList.add(Jt),o.dispatchEvent(new CustomEvent("fw:open",{bubbles:!0}));let r=o.querySelector(to);r?r.focus({preventScroll:!0}):(o.hasAttribute("tabindex")||o.setAttribute("tabindex","-1"),o.focus({preventScroll:!0}))}function j(e){var o,r,i;let t=Ye(e);if(!t||!t.classList.contains(V))return;t.classList.remove(V),(o=Xe(t))==null||o.classList.remove(V);let n=K.indexOf(t);n>-1&&K.splice(n,1),K.length===0&&document.body.classList.remove(Jt),t.dispatchEvent(new CustomEvent("fw:close",{bubbles:!0})),(i=(r=Ge.get(t))==null?void 0:r.focus)==null||i.call(r,{preventScroll:!0}),Ge.delete(t)}function no(e){let t=Ye(e);t&&(t.classList.contains(V)?j:Qe)(t)}function Je(e,t){let n=!1;e.addEventListener("mousedown",o=>{n=o.target===e}),e.addEventListener("click",o=>{o.target===e&&n&&t()})}var Gt=!1;function et(e=document){e.querySelectorAll("[data-fw-open-modal], [data-fw-open-drawer]").forEach(t=>{var o,r;if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=(r=(o=t.dataset.fwOpenModal)!=null?o:t.dataset.fwOpenDrawer)!=null?r:"";t.addEventListener("click",()=>Qe(n,t))}),e.querySelectorAll(".fw-modal-overlay").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",Je(t,()=>j(t)),t.querySelectorAll("[data-fw-close-modal]").forEach(n=>n.addEventListener("click",()=>j(t))))}),e.querySelectorAll(".fw-drawer").forEach(t=>{if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=Xe(t);n&&Je(n,()=>j(t)),t.querySelectorAll("[data-fw-close-drawer]").forEach(o=>o.addEventListener("click",()=>j(t)))}),Gt||(Gt=!0,document.addEventListener("keydown",t=>{t.key==="Escape"&&K.length&&j(K[K.length-1])}))}var he={};g(he,{close:()=>we,init:()=>ot,open:()=>Yt});var tt="is-open";function Yt(e){let t=nt(e);t&&(t.classList.add(tt),e.setAttribute("aria-expanded","true"))}function we(e){let t=nt(e);t&&(t.classList.remove(tt),e.setAttribute("aria-expanded","false"))}function nt(e){let t=e.getAttribute("aria-controls");return t?document.getElementById(t):null}function ot(e=document){e.querySelectorAll("[data-fw-nav-toggle]").forEach(t=>{var r,i;if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=nt(t);if(!n)return;let o=(i=(r=t.closest(".fw-nav"))!=null?r:t.parentElement)!=null?i:t;t.addEventListener("click",s=>{s.stopPropagation(),(n.classList.contains(tt)?we:Yt)(t)}),document.addEventListener("click",s=>{!o.contains(s.target)&&!n.contains(s.target)&&we(t)}),document.addEventListener("keydown",s=>{s.key==="Escape"&&we(t)})})}var ye={};g(ye,{init:()=>rt,resetAll:()=>tn,resetButtonLoading:()=>en,setButtonLoading:()=>Qt});var te="fw-btn-loading";function Qt(e,t){var o,r;if(!e||e.classList.contains(te))return;e.dataset.fwOriginalHtml=e.innerHTML,e.disabled=!0,e.setAttribute("aria-busy","true"),e.classList.add(te);let n=(r=(o=t!=null?t:e.dataset.fwLoadingText)!=null?o:e.textContent)!=null?r:"";e.innerHTML='<span class="fw-spinner fw-spinner-sm" aria-hidden="true"></span>',e.appendChild(document.createTextNode(n))}function en(e){!e||!e.classList.contains(te)||(e.disabled=!1,e.removeAttribute("aria-busy"),e.classList.remove(te),e.dataset.fwOriginalHtml!==void 0&&(e.innerHTML=e.dataset.fwOriginalHtml,delete e.dataset.fwOriginalHtml))}function tn(e=document){e.querySelectorAll(`.${te}`).forEach(en)}var Xt=!1;function rt(e=document){e.querySelectorAll("form[data-fw-loading]").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",t.addEventListener("submit",()=>{let n=t.querySelector('button[type="submit"], button:not([type])');Qt(n)}))}),Xt||(Xt=!0,window.addEventListener("pageshow",t=>{t.persisted&&tn()}))}var Ee={};g(Ee,{hide:()=>nn,show:()=>ro});var S=null,W=null;function oo(){return S&&S.isConnected||(S=document.createElement("div"),S.className="fw-toast",S.setAttribute("role","status"),S.setAttribute("aria-live","polite"),S.innerHTML='<span class="fw-toast-dot" aria-hidden="true"></span><span class="fw-toast-text"></span>',document.body.appendChild(S)),S}function ro(e,{variant:t="success",duration:n=4e3}={}){let o=oo();return o.className=`fw-toast${t==="success"?"":` fw-toast-${t}`}`,o.querySelector(".fw-toast-text").textContent=e,W&&clearTimeout(W),o.classList.remove("is-show"),o.offsetWidth,o.classList.add("is-show"),n>0&&(W=setTimeout(nn,n)),o}function nn(){S==null||S.classList.remove("is-show"),W&&clearTimeout(W),W=null}var Te={};g(Te,{getSelected:()=>ct,init:()=>dt,selectAll:()=>ln,setRowSelected:()=>an,sort:()=>it});var io="is-selected";function st(e,t,n){e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:n}))}function on(e,t){var o,r,i;let n=e.cells[t];return(i=(r=n==null?void 0:n.dataset.fwSortValue)!=null?r:(o=n==null?void 0:n.textContent)==null?void 0:o.trim())!=null?i:""}function so(e,t){let n=Number(e),o=Number(t);return e!==""&&t!==""&&Number.isFinite(n)&&Number.isFinite(o)?n-o:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"})}function sn(e){var t,n;return Array.from((n=(t=e.tHead)==null?void 0:t.querySelectorAll("th[data-fw-sort]"))!=null?n:[])}function rn(e){return e.getAttribute("aria-sort")==="ascending"?"descending":"ascending"}function it(e,t,n){let o=e.tBodies[0];if(!o)return;let r=Array.from(o.rows),i=r.filter(u=>u.cells.length>t),s=r.filter(u=>u.cells.length<=t),c=n==="ascending"?1:-1;i.sort((u,a)=>c*so(on(u,t),on(a,t))),[...i,...s].forEach(u=>o.appendChild(u));let d=null;sn(e).forEach(u=>{let a=u.cellIndex===t;u.setAttribute("aria-sort",a?n:"none"),a&&(d=u)}),d&&st(e,"fw:sort",{column:t,direction:n,th:d})}function xe(e){return Array.from(e.querySelectorAll("tbody input[data-fw-select-row]"))}function at(e,t){e.classList.toggle(io,t),e.setAttribute("aria-selected",t?"true":"false")}function lt(e){let t=e.querySelector("[data-fw-select-all]");if(!t)return;let n=xe(e),o=n.filter(r=>r.checked).length;t.checked=o>0&&o===n.length,t.indeterminate=o>0&&o<n.length}function ct(e){return xe(e).filter(t=>t.checked).map(t=>t.closest("tr")).filter(t=>t!==null)}function an(e,t){let n=e.querySelector("input[data-fw-select-row]");n&&(n.checked=t),at(e,t);let o=e.closest("table");o&&(lt(o),st(o,"fw:select",{rows:ct(o),all:!1}))}function ln(e,t){xe(e).forEach(n=>{n.checked=t;let o=n.closest("tr");o&&at(o,t)}),lt(e),st(e,"fw:select",{rows:ct(e),all:!0})}function dt(e=document){e.querySelectorAll("table[data-fw-table]").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",sn(t).forEach(n=>{n.hasAttribute("aria-sort")||n.setAttribute("aria-sort","none")}),t.addEventListener("click",n=>{let o=n.target.closest("th[data-fw-sort]");o&&t.contains(o)&&it(t,o.cellIndex,rn(o))}),t.addEventListener("keydown",n=>{if(n.key!=="Enter"&&n.key!==" ")return;let o=n.target;if(!o.matches("th[data-fw-sort], th[data-fw-sort] .fw-table-sort"))return;let r=o.closest("th[data-fw-sort]");r&&(n.preventDefault(),it(t,r.cellIndex,rn(r)))}),t.addEventListener("change",n=>{let o=n.target;if(o.matches("[data-fw-select-all]"))ln(t,o.checked);else if(o.matches("[data-fw-select-row]")){let r=o.closest("tr");r&&an(r,o.checked)}}),xe(t).forEach(n=>{let o=n.closest("tr");o&&n.checked&&at(o,!0)}),lt(t))})}var Me={};g(Me,{close:()=>ge,collapseAll:()=>fo,expandAll:()=>uo,init:()=>ut,open:()=>Le,reveal:()=>un,toggle:()=>co});var I=".fw-menu-group",dn=".fw-menu-link, .fw-menu-summary",ao="is-current";function lo(e,t){e.dispatchEvent(new CustomEvent("fw:toggle",{bubbles:!0,detail:t}))}function Le(e){e.open=!0}function ge(e){e.open=!1}function co(e,t){e.open=t!=null?t:!e.open}function uo(e){e.querySelectorAll(I).forEach(Le)}function fo(e){e.querySelectorAll(I).forEach(ge)}function un(e){var n,o,r,i;let t=(o=(n=e.parentElement)==null?void 0:n.closest(I))!=null?o:null;for(;t;)Le(t),t=(i=(r=t.parentElement)==null?void 0:r.closest(I))!=null?i:null}function cn(e){e.querySelectorAll(I).forEach(t=>{let n=t.querySelector(":scope > .fw-menu-summary");if(!n)return;let o=!t.open&&t.querySelector("[aria-current]")!==null;n.classList.toggle(ao,o)})}function fn(e){return e.matches(".fw-menu-summary")?e.closest(I):null}function mn(e){var n,o,r;return(r=(o=((n=fn(e))!=null?n:e).parentElement)==null?void 0:o.closest(I))!=null?r:null}function mo(e){var t,n;for(let o=mn(e);o;o=(n=(t=o.parentElement)==null?void 0:t.closest(I))!=null?n:null)if(!o.open)return!1;return!0}function po(e){return Array.from(e.querySelectorAll(dn)).filter(mo)}function _(e){return e?(e.focus(),!0):!1}function vo(e){var n;let t=e.closest(".fw-menu-split");return(n=t==null?void 0:t.querySelector(":scope > .fw-menu-group > .fw-menu-summary"))!=null?n:null}function bo(e,t){var c;if(t.altKey||t.ctrlKey||t.metaKey||t.shiftKey)return;let n=t.target instanceof HTMLElement&&t.target.matches(dn)?t.target:null;if(!n||!e.contains(n))return;let o=po(e),r=o.indexOf(n),i=fn(n),s=!0;switch(t.key){case"ArrowDown":_(o[r+1]);break;case"ArrowUp":_(o[r-1]);break;case"Home":_(o[0]);break;case"End":_(o[o.length-1]);break;case"ArrowRight":i?i.open?i.contains((c=o[r+1])!=null?c:e)&&_(o[r+1]):Le(i):_(vo(n));break;case"ArrowLeft":if(i!=null&&i.open)ge(i);else{let d=mn(n);_(d==null?void 0:d.querySelector(":scope > .fw-menu-summary"))}break;default:s=!1}s&&t.preventDefault()}function ut(e=document){e.querySelectorAll("[data-fw-menu]").forEach(t=>{if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=t.hasAttribute("data-fw-menu-exclusive");t.addEventListener("toggle",o=>{let r=o.target;!(r instanceof HTMLDetailsElement)||!r.matches(I)||(n&&r.open&&r.parentElement&&Array.from(r.parentElement.children).forEach(i=>{i!==r&&i instanceof HTMLDetailsElement&&i.matches(I)&&ge(i)}),cn(t),lo(r,{group:r,open:r.open}))},!0),t.addEventListener("keydown",o=>bo(t,o)),t.querySelectorAll("[aria-current]").forEach(un),cn(t)})}var Ae={};g(Ae,{init:()=>mt,popover:()=>wn});var wo={top:"bottom",bottom:"top",left:"right",right:"left"},Z=10;function ho(e){switch(e){case"top-left":return{side:"top",align:"end"};case"top-right":return{side:"top",align:"start"};case"bottom-left":return{side:"bottom",align:"end"};case"bottom-right":return{side:"bottom",align:"start"};default:return{side:e,align:"center"}}}var yo={start:"right",end:"left"};function Eo(e,t){return t==="center"?e:`${e}-${yo[t]}`}function ft(e,t,n,o){switch(e){case"top":return t.top;case"bottom":return o-t.bottom;case"left":return t.left;case"right":return n-t.right}}function pn(e,t,n,o){switch(e){case"top":return t.top-o-n.height;case"bottom":return t.bottom+o;case"left":return t.left-o-n.width;case"right":return t.right+o}}function vn(e,t,n,o){switch(e){case"start":return t;case"end":return t+n-o;case"center":return t+n/2-o/2}}function ke(e,t,n){return Math.min(Math.max(e,t),n>t?n:t)}function He(e,t,n={}){var T,H,x;let o=(T=n.placement)!=null?T:"bottom",r=(H=n.offset)!=null?H:8,i=(x=n.padding)!=null?x:8,s=e.getBoundingClientRect(),c=t.getBoundingClientRect(),d=window.innerWidth,u=window.innerHeight,{side:a,align:m}=ho(o),E=wo[a],w=a==="top"||a==="bottom"?c.height:c.width,v=ft(a,s,d,u)-r<w&&ft(E,s,d,u)-r>ft(a,s,d,u)-r?E:a,f,M,k;return v==="top"||v==="bottom"?(f=pn(v,s,c,r),M=ke(vn(m,s.left,s.width,c.width),i,d-c.width-i),k=ke(s.left+s.width/2-M,Z,Math.max(c.width-Z,Z))):(M=pn(v,s,c,r),f=ke(vn("center",s.top,s.height,c.height),i,u-c.height-i),k=ke(s.top+s.height/2-f,Z,Math.max(c.height-Z,Z))),{placement:Eo(v,m),top:f,left:M,arrowOffset:k}}function bn(e,t){let n=s=>!e.some(c=>c.contains(s)),o=!1,r=s=>{o=n(s.target)},i=s=>{o&&n(s.target)&&t()};return document.addEventListener("mousedown",r,!0),document.addEventListener("click",i,!0),()=>{document.removeEventListener("mousedown",r,!0),document.removeEventListener("click",i,!0)}}var xo='a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';function wn(e,t,n={}){var x,L;let o=(x=n.placement)!=null?x:"bottom",r=(L=n.offset)!=null?L:8;e.setAttribute("aria-haspopup","dialog"),e.setAttribute("aria-controls",t.id),e.setAttribute("aria-expanded","false"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","false"),t.classList.add("fw-popover");let i=t.parentNode,s=t.nextSibling,c=!1,d=null,u=0;function a(){let b=He(e,t,{placement:o,offset:r});t.style.top=`${b.top}px`,t.style.left=`${b.left}px`,t.setAttribute("data-placement",b.placement)}function m(){cancelAnimationFrame(u),u=requestAnimationFrame(a)}function E(b){b.key==="Escape"&&(b.stopPropagation(),f())}function w(b){let B=b.relatedTarget;B&&(t.contains(B)||e.contains(B))||setTimeout(()=>{if(!c)return;let C=document.activeElement;C===document.body||C===null||t.contains(C)||e.contains(C)||f()},0)}function v(){if(c)return;c=!0,t.parentNode!==document.body&&document.body.appendChild(t),a(),t.classList.add("is-open"),e.setAttribute("aria-expanded","true");let b=t.querySelector(xo);b?b.focus({preventScroll:!0}):(t.hasAttribute("tabindex")||t.setAttribute("tabindex","-1"),t.focus({preventScroll:!0})),d=bn([e,t],f),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m),t.addEventListener("keydown",E),t.addEventListener("focusout",w),t.dispatchEvent(new CustomEvent("fw:open",{bubbles:!0}))}function f(){if(!c)return;c=!1,t.classList.remove("is-open"),e.setAttribute("aria-expanded","false"),d==null||d(),d=null,window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m),t.removeEventListener("keydown",E),t.removeEventListener("focusout",w),cancelAnimationFrame(u),s===null||s.parentNode===i?i.insertBefore(t,s):i.appendChild(t),t.dispatchEvent(new CustomEvent("fw:close",{bubbles:!0})),e.focus({preventScroll:!0})}function M(){(c?f:v)()}let k=()=>M(),T=Array.from(t.querySelectorAll("[data-fw-popover-close]")),H=()=>f();return e.addEventListener("click",k),T.forEach(b=>b.addEventListener("click",H)),{open:v,close:f,toggle:M,destroy(){c&&f(),e.removeEventListener("click",k),T.forEach(b=>b.removeEventListener("click",H)),delete e.dataset.fwBound}}}function mt(e=document){e.querySelectorAll("[data-fw-popover-trigger]").forEach(t=>{var r;if(t.dataset.fwBound)return;let n=(r=t.dataset.fwPopoverTrigger)!=null?r:"",o=document.getElementById(n);if(!o){console.warn(`fernwell: popover trigger references missing panel #${n}`);return}t.dataset.fwBound="1",wn(t,o,{placement:t.dataset.fwPopoverPlacement||void 0,offset:t.dataset.fwPopoverOffset?Number(t.dataset.fwPopoverOffset):void 0})})}var Oe={};g(Oe,{init:()=>bt,tooltip:()=>Ln});var To=400,Lo=300,go=100,oe=new WeakMap,O=null,D=null,re=0,ie=0,vt=0,yn=0;function Mo(){if(O&&O.isConnected)return O;let e=document.createElement("div");return e.className="fw-tooltip",e.id="fw-tooltip",e.setAttribute("role","tooltip"),document.body.appendChild(e),e.addEventListener("mouseenter",En),e.addEventListener("mouseleave",()=>Tn()),O=e,e}function En(){clearTimeout(ie)}function xn(){if(!D||!O)return;let e=oe.get(D);if(!e)return;let t=He(D,O,{placement:e.placement,offset:e.offset});O.style.top=`${t.top}px`,O.style.left=`${t.left}px`,O.style.setProperty("--fw-tooltip-arrow-pos",`${t.arrowOffset}px`),O.setAttribute("data-placement",t.placement)}function Se(){cancelAnimationFrame(vt),vt=requestAnimationFrame(xn)}function hn(e){var o;if(clearTimeout(re),En(),!oe.get(e))return;D=e;let n=Mo();n.textContent=(o=e.dataset.fwTooltipText)!=null?o:"",xn(),n.classList.add("is-open"),window.addEventListener("scroll",Se,!0),window.addEventListener("resize",Se)}function ne(){clearTimeout(re),clearTimeout(ie),O&&O.classList.remove("is-open"),window.removeEventListener("scroll",Se,!0),window.removeEventListener("resize",Se),cancelAnimationFrame(vt),D&&(yn=performance.now()),D=null}function pt(e,t){clearTimeout(ie),clearTimeout(re);let n=oe.get(e);n&&(t||performance.now()-yn<Lo?hn(e):re=window.setTimeout(()=>hn(e),n.delay))}function Tn(){clearTimeout(re),clearTimeout(ie),ie=window.setTimeout(ne,go)}function Ln(e,t={}){var u,a,m;let n={placement:(u=t.placement)!=null?u:"top",offset:(a=t.offset)!=null?a:6,delay:(m=t.delay)!=null?m:To};oe.set(e,n);let o=e.getAttribute("title");o!==null&&(e.dataset.fwTooltipText=o,e.removeAttribute("title")),e.setAttribute("aria-describedby","fw-tooltip");let r=()=>pt(e,!1),i=()=>Tn(),s=()=>pt(e,!0),c=()=>{D===e&&ne()},d=E=>{E.key==="Escape"&&D===e&&ne()};return e.addEventListener("mouseenter",r),e.addEventListener("mouseleave",i),e.addEventListener("focus",s),e.addEventListener("blur",c),e.addEventListener("keydown",d),{show:()=>pt(e,!0),hide:()=>{D===e&&ne()},destroy(){D===e&&ne(),e.removeEventListener("mouseenter",r),e.removeEventListener("mouseleave",i),e.removeEventListener("focus",s),e.removeEventListener("blur",c),e.removeEventListener("keydown",d),e.removeAttribute("aria-describedby"),e.dataset.fwTooltipText!==void 0&&(e.setAttribute("title",e.dataset.fwTooltipText),delete e.dataset.fwTooltipText),oe.delete(e),delete e.dataset.fwBound}}}function bt(e=document){e.querySelectorAll("[data-fw-tooltip]").forEach(t=>{t.dataset.fwBound||(t.dataset.fwBound="1",Ln(t,{placement:t.dataset.fwTooltipPlacement||void 0,offset:t.dataset.fwTooltipOffset?Number(t.dataset.fwTooltipOffset):void 0,delay:t.dataset.fwTooltipDelay?Number(t.dataset.fwTooltipDelay):void 0}))})}var Ce={};g(Ce,{init:()=>ht,tabs:()=>Hn});function ko(e,t){e.dispatchEvent(new CustomEvent("fw:tabs-change",{bubbles:!0,detail:t}))}function Ne(e){return e.getAttribute("aria-disabled")==="true"}function wt(e){let t=e.getAttribute("aria-controls");return t?document.getElementById(t):null}function gn(e){return e instanceof Element?e.closest('[role="tab"]'):null}function Mn(e,t,n){for(let o=1;o<=e.length;o++){let r=((t+n*o)%e.length+e.length)%e.length;if(!Ne(e[r]))return e[r]}}function kn(e){return e.find(t=>!Ne(t))}function Ho(e){for(let t=e.length-1;t>=0;t--)if(!Ne(e[t]))return e[t]}function Hn(e,t={}){var u;let n=(u=t.activation)!=null?u:"automatic";function o(){return Array.from(e.querySelectorAll('[role="tab"]'))}function r(a,m=!1){if(Ne(a))return;o().forEach(w=>{let v=w===a;w.setAttribute("aria-selected",String(v)),w.tabIndex=v?0:-1;let f=wt(w);f&&(f.hidden=!v)}),m&&a.focus();let E=wt(a);E&&ko(e,{tab:a,panel:E})}function i(a){o().forEach(m=>{m.tabIndex=m===a?0:-1}),a.focus()}function s(){var E;let a=o(),m=(E=a.find(w=>w.getAttribute("aria-selected")==="true"))!=null?E:kn(a);a.forEach(w=>{let v=w===m;w.setAttribute("aria-selected",String(v)),w.tabIndex=v?0:-1;let f=wt(w);f&&(f.hidden=!v)})}function c(a){let m=gn(a.target);m&&e.contains(m)&&r(m,!1)}function d(a){let m=gn(a.target);if(!m)return;let E=o(),w=E.indexOf(m);if(w===-1)return;if(a.key===" "||a.key==="Enter"){n==="manual"&&(a.preventDefault(),r(m,!1));return}let v=e.getAttribute("aria-orientation")==="vertical",f=getComputedStyle(e).direction==="rtl",M=v?"ArrowDown":f?"ArrowLeft":"ArrowRight",k=v?"ArrowUp":f?"ArrowRight":"ArrowLeft",T;if(a.key===M)T=Mn(E,w,1);else if(a.key===k)T=Mn(E,w,-1);else if(a.key==="Home")T=kn(E);else if(a.key==="End")T=Ho(E);else return;T&&(a.preventDefault(),n==="manual"?i(T):r(T,!0))}return e.addEventListener("click",c),e.addEventListener("keydown",d),s(),{activate:r,destroy(){e.removeEventListener("click",c),e.removeEventListener("keydown",d),delete e.dataset.fwBound}}}function ht(e=document){e.querySelectorAll('[role="tablist"][data-fw-tabs]').forEach(t=>{if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=t.dataset.fwTabsActivation==="manual"?"manual":"automatic";Hn(t,{activation:n})})}var Ie={};g(Ie,{init:()=>xt,numberInput:()=>Sn});var Ao=400,So=60,Oo=0;function yt(e){if(e==null||e.trim()==="")return;let t=Number(e);return Number.isFinite(t)?t:void 0}function An(e){if(e===void 0)return 0;let t=String(e),n=t.indexOf(".");return n<0?0:t.length-n-1}function Sn(e,t={}){var Lt,gt,Mt,kt,Ht,At;let n=t.mode==="slider"?"slider":"stepper",o=n==="slider",r=(Lt=t.min)!=null?Lt:o?0:void 0,i=(gt=t.max)!=null?gt:o?100:void 0,s=(Mt=t.step)!=null?Mt:1,c=Number.isFinite(s)&&s>0?s:1,d=(kt=t.unit)!=null?kt:"",u=Math.max(An(c),An(r)),a=e.type,m=e.getAttribute("min"),E=e.getAttribute("max"),w=e.getAttribute("step");e.type=o?"range":"number",r!==void 0&&(e.min=String(r)),i!==void 0&&(e.max=String(i)),e.step=String(c),e.id||(e.id=`fw-number-${++Oo}`);let v=e.closest(".fw-number"),f=v!=null?v:No(e),M=!v;f.classList.add(o?"fw-number-slider":"fw-number-stepper"),e.classList.add("fw-number-input");let k=l=>Math.min(i!=null?i:1/0,Math.max(r!=null?r:-1/0,l)),T=l=>Number(l.toFixed(u)),H=()=>e.value.trim()===""?NaN:Number(e.value),x,L,b;if(o)b=document.createElement("output"),b.className="fw-number-value",b.setAttribute("for",e.id),f.appendChild(b);else{let l=e.getAttribute("aria-label");x=B("dec",F("minus"),(Ht=t.decreaseLabel)!=null?Ht:l?`Decrease ${l}`:"Decrease"),L=B("inc",F("add"),(At=t.increaseLabel)!=null?At:l?`Increase ${l}`:"Increase"),x.setAttribute("aria-controls",e.id),L.setAttribute("aria-controls",e.id),f.insertBefore(x,e),f.appendChild(L)}function B(l,h,q){let R=document.createElement("button");return R.type="button",R.className=`fw-number-btn fw-number-${l}`,R.setAttribute("aria-label",q),R.innerHTML=`<span class="fw-icon" aria-hidden="true">${h}</span>`,R}function C(){let l=H();if(o&&b){let h=Number.isFinite(l)?`${l}${d}`:"";b.textContent=h,e.setAttribute("aria-valuetext",h);let q=(i!=null?i:100)-(r!=null?r:0),R=Number.isFinite(l)&&q>0?(l-(r!=null?r:0))/q*100:0;e.style.setProperty("--fw-number-fill",`${Math.min(100,Math.max(0,R))}%`)}if(x&&L){let h=Number.isFinite(l)?l:void 0;x.setAttribute("aria-disabled",String(e.disabled||h!==void 0&&r!==void 0&&h<=r)),L.setAttribute("aria-disabled",String(e.disabled||h!==void 0&&i!==void 0&&h>=i))}}function z(l){return l.getAttribute("aria-disabled")==="true"}function p(l){if(!Number.isFinite(l))return;let h=T(k(l));h!==H()&&(e.value=String(h),e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0})))}function y(l){if(e.disabled||e.readOnly)return;let h=H();p((Number.isFinite(h)?h:k(0))+l*c)}let A=()=>{var h;C();let l=H();f.dispatchEvent(new CustomEvent("fw:number-change",{bubbles:!0,detail:{value:l,mode:n}})),(h=t.onChange)==null||h.call(t,l)},$=l=>{if(l.altKey||l.ctrlKey||l.metaKey)return;let h=!0;switch(l.key){case"ArrowUp":y(1);break;case"ArrowDown":y(-1);break;case"PageUp":y(10);break;case"PageDown":y(-10);break;default:h=!1}h&&l.preventDefault()},P,G,U=()=>{clearTimeout(P),clearInterval(G),P=G=void 0},Tt=l=>l===x?-1:1,Cn=l=>{let h=l.currentTarget;if(l.button>0||z(h))return;let q=Tt(h);y(q),U(),P=setTimeout(()=>{G=setInterval(()=>{if(z(h))return U();y(q)},So)},Ao)},In=l=>{let h=l.currentTarget;l.detail!==0||z(h)||y(Tt(h))};if(e.addEventListener("input",A),!o){e.addEventListener("keydown",$);for(let l of[x,L])l&&(l.addEventListener("pointerdown",Cn),l.addEventListener("pointerup",U),l.addEventListener("pointerleave",U),l.addEventListener("pointercancel",U),l.addEventListener("click",In))}return C(),{getValue:H,setValue:p,stepUp:(l=1)=>y(l),stepDown:(l=1)=>y(-l),destroy(){U(),e.removeEventListener("input",A),e.removeEventListener("keydown",$),x==null||x.remove(),L==null||L.remove(),b==null||b.remove(),e.style.removeProperty("--fw-number-fill"),e.removeAttribute("aria-valuetext"),e.classList.remove("fw-number-input"),f.classList.remove("fw-number-slider","fw-number-stepper"),e.type=a,Et(e,"min",m),Et(e,"max",E),Et(e,"step",w),M&&f.parentNode&&(f.parentNode.insertBefore(e,f),f.remove()),delete e.dataset.fwBound}}}function Et(e,t,n){n===null?e.removeAttribute(t):e.setAttribute(t,n)}function No(e){var n;let t=document.createElement("div");return t.className="fw-number",(n=e.parentNode)==null||n.insertBefore(t,e),t.appendChild(e),t}function xt(e=document){e.querySelectorAll("input[data-fw-number]").forEach(t=>{var o,r,i;if(t.dataset.fwBound)return;t.dataset.fwBound="1";let n=t.dataset;Sn(t,{mode:n.fwNumberMode==="slider"?"slider":"stepper",min:yt((o=n.fwNumberMin)!=null?o:t.getAttribute("min")),max:yt((r=n.fwNumberMax)!=null?r:t.getAttribute("max")),step:yt((i=n.fwNumberStep)!=null?i:t.getAttribute("step")),unit:n.fwNumberUnit})})}var On="0.6.0";function Nn(e=document){We(e),Ke(e),Ze(e),et(e),ot(e),rt(e),dt(e),ut(e),Be(e),mt(e),bt(e),ht(e),xt(e)}var Co={version:On,init:Nn,theme:pe,tokens:fe,combobox:ve,modal:be,nav:he,loading:ye,toast:Ee,table:Te,menu:Me,icon:se,popover:Ae,tooltip:Oe,tabs:Ce,numberInput:Ie},Io=Co;
|
|
6
6
|
//# sourceMappingURL=fernwell.cjs.map
|