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 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, 16–20px box, 1.3–1.4px stroke, round caps and joins, `currentColor`. No fills — except a checkmark on a completed item.
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
 
@@ -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;
@@ -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.5.0 | MIT | https://github.com/JacobKnaack/fernwell */
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 V(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)||!Tn(o)?te(`ignoring invalid value for token "${n}"`):t[Lt(n)]=o.trim():te(`ignoring token with invalid name "${n}"`);return t}function xn(e){return Object.values(e).some(t=>t!==null&&typeof t=="object")}function Ln(e){let t=[],n=0,o="",r=0;for(let s=0;s<e.length;s++){let i=e[s];i==="\\"?s++:o?i===o&&(o=""):i==='"'||i==="'"?o=i:i==="("||i==="["?n++:i===")"||i==="]"?n--:i===","&&n===0&&(t.push(e.slice(r,s).trim()),r=s+1)}return t.push(e.slice(r).trim()),t.filter(Boolean)}function gn(e){return e===oe?'[data-theme="dark"]':Ln(e).map(t=>`[data-theme="dark"] ${t}, ${t}[data-theme="dark"]`).join(", ")}function vt(e){return Object.entries(e).map(([t,n])=>`${t}:${n};`).join("")}function ht(e,t){let n=new Set(Object.keys(e).map(bn)),o=new Set(n),r={};for(let s=!0;s;){s=!1;for(let i of ft)n.has(i.name)||`${K}${i.name}`in r||i.deps.some(l=>o.has(l))&&(r[`${K}${i.name}`]=i[t],o.add(i.name),s=!0)}return r}function Se(e){let t=[];return e.forEach(({light:n,dark:o},r)=>{let s=r===oe,i=s?n:{...ht(n,"light"),...n},l=s?o:{...ht(o,"dark"),...o};Object.keys(i).length&&t.push(`${r}{${vt(i)}}`),Object.keys(l).length&&t.push(`${gn(r)}{${vt(l)}}`)}),t}function wt(e){let t=document.head.querySelector(`style[${mt}]`);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(mt,""),document.head.appendChild(n),n}function Oe(){let e=xt();if(e)try{if(k.size===0){e.removeItem(Ae),e.removeItem(pt);return}let t={};k.forEach((n,o)=>t[o]=n),e.setItem(Ae,JSON.stringify({v:1,scopes:t})),e.setItem(pt,Se(k).join(`
4
- `))}catch{}}function ne(e){var n;let t=[...Se(k),...Se(ee)];t.length===0?(n=wt(!1))==null||n.remove():wt(!0).textContent=t.join(`
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=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[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=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[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