@fairfox/polly 0.74.1 → 0.75.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/polly-ui/Collapsible.d.ts +3 -1
- package/dist/src/polly-ui/Dropdown.d.ts +3 -1
- package/dist/src/polly-ui/FileInput.d.ts +25 -0
- package/dist/src/polly-ui/Html.d.ts +21 -0
- package/dist/src/polly-ui/Layout.d.ts +2 -1
- package/dist/src/polly-ui/Link.d.ts +25 -0
- package/dist/src/polly-ui/Output.d.ts +26 -0
- package/dist/src/polly-ui/Surface.d.ts +20 -3
- package/dist/src/polly-ui/Text.d.ts +2 -0
- package/dist/src/polly-ui/index.css +118 -11
- package/dist/src/polly-ui/index.d.ts +4 -0
- package/dist/src/polly-ui/index.js +168 -42
- package/dist/src/polly-ui/index.js.map +13 -9
- package/dist/src/polly-ui/internal/passthrough.d.ts +8 -4
- package/dist/src/polly-ui/markdown.d.ts +4 -0
- package/dist/src/polly-ui/markdown.js +3 -1
- package/dist/src/polly-ui/markdown.js.map +3 -3
- package/dist/src/polly-ui/styles.css +127 -11
- package/dist/src/polly-ui/theme.css +9 -0
- package/package.json +1 -1
|
@@ -1,39 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/polly-ui/ActionForm.tsx", "../src/polly-ui/ActionInput.tsx", "../src/polly-ui/internal/dispatch-action.ts", "../src/polly-ui/internal/passthrough.ts", "../src/polly-ui/ActionSelect.tsx", "../src/polly-ui/Dropdown.tsx", "../src/polly-ui/Layout.tsx", "../src/polly-ui/Badge.tsx", "../src/polly-ui/Button.tsx", "../src/polly-ui/Surface.tsx", "../src/polly-ui/Card.tsx", "../src/polly-ui/Checkbox.tsx", "../src/polly-ui/Cluster.tsx", "../src/polly-ui/Code.tsx", "../src/polly-ui/Collapsible.tsx", "../src/polly-ui/ConfirmDialog.tsx", "../src/polly-ui/Modal.tsx", "../src/actions/overlay.ts", "../src/polly-ui/internal/focus-trap.ts", "../src/polly-ui/OverlayRoot.tsx", "../src/polly-ui/internal/scroll-lock.ts", "../src/polly-ui/Select.tsx", "../src/polly-ui/Skeleton.tsx", "../src/polly-ui/Tabs.tsx", "../src/polly-ui/Text.tsx", "../src/polly-ui/internal/input-base.ts", "../src/polly-ui/TextInput.tsx", "../src/polly-ui/Toast.tsx", "../src/actions/error.ts", "../src/polly-ui/Toggle.tsx"],
|
|
3
|
+
"sources": ["../src/polly-ui/ActionForm.tsx", "../src/polly-ui/ActionInput.tsx", "../src/polly-ui/internal/dispatch-action.ts", "../src/polly-ui/internal/passthrough.ts", "../src/polly-ui/ActionSelect.tsx", "../src/polly-ui/Dropdown.tsx", "../src/polly-ui/Layout.tsx", "../src/polly-ui/Badge.tsx", "../src/polly-ui/Button.tsx", "../src/polly-ui/Surface.tsx", "../src/polly-ui/Card.tsx", "../src/polly-ui/Checkbox.tsx", "../src/polly-ui/Cluster.tsx", "../src/polly-ui/Code.tsx", "../src/polly-ui/Collapsible.tsx", "../src/polly-ui/ConfirmDialog.tsx", "../src/polly-ui/Modal.tsx", "../src/actions/overlay.ts", "../src/polly-ui/internal/focus-trap.ts", "../src/polly-ui/OverlayRoot.tsx", "../src/polly-ui/internal/scroll-lock.ts", "../src/polly-ui/FileInput.tsx", "../src/polly-ui/Html.tsx", "../src/polly-ui/Link.tsx", "../src/polly-ui/Output.tsx", "../src/polly-ui/Select.tsx", "../src/polly-ui/Skeleton.tsx", "../src/polly-ui/Tabs.tsx", "../src/polly-ui/Text.tsx", "../src/polly-ui/internal/input-base.ts", "../src/polly-ui/TextInput.tsx", "../src/polly-ui/Toast.tsx", "../src/actions/error.ts", "../src/polly-ui/Toggle.tsx"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * ActionForm — wraps a native <form> with the action pattern.\n *\n * Renders <form data-action=\"{form.name}:submit\"> so the installed\n * event delegation catches the submit event and dispatches to the\n * form's auto-registered :submit handler. `aria-busy` mirrors the\n * `isSubmitting` signal so consumer styling can respond without extra\n * wiring. The form element also exposes `data-polly-action-form` for\n * stable selector hooks.\n */\n\nimport type { ComponentChildren, JSX } from \"preact\";\nimport type { FormStore } from \"../actions/form.ts\";\nimport classes from \"./ActionForm.module.css\";\n\nexport type ActionFormProps<TValues extends Record<string, string>, TStores> = {\n form: FormStore<TValues, TStores>;\n children: ComponentChildren;\n className?: string;\n id?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n};\n\nexport function ActionForm<TValues extends Record<string, string>, TStores>(\n props: ActionFormProps<TValues, TStores>\n): JSX.Element {\n const { form, children, className, id } = props;\n const combined = className ? `${classes[\"form\"]} ${className}` : classes[\"form\"];\n return (\n <form\n id={id}\n class={combined}\n data-polly-ui\n data-polly-action-form={form.name}\n data-action={`${form.name}:submit`}\n aria-busy={form.isSubmitting.value}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n noValidate\n >\n {children}\n </form>\n );\n}\n",
|
|
6
6
|
"/**\n * ActionInput — dual-mode view/edit input with action dispatch on commit.\n *\n * View mode renders the current value as text (optionally through a\n * caller-supplied `renderView` for markdown, rich formatting, etc.).\n * Click, Enter, or Space enters edit mode. Edit mode is a native input\n * or textarea; commit fires the configured action with `data-action-value`\n * and `data-action-field` set from FormData-shape semantics, so the\n * existing event delegation handles it with no extra wiring.\n *\n * `saveOn` picks the commit trigger:\n * \"blur\" commit when the field loses focus\n * \"enter\" commit on Enter (single-line) or Cmd/Ctrl+Enter (multi-line)\n * \"cmd-enter\" commit only on Cmd/Ctrl+Enter\n * \"explicit\" never auto-commit — caller wires a save button with data-action\n * \"input\" commit on every keystroke — for filter-as-you-type fields;\n * the field stays in edit mode rather than toggling to view\n *\n * `inputType` sets the native input type for the single-line variant —\n * \"text\" (default), \"date\", \"time\", \"number\", and friends — so a date\n * or numeric field commits through the action system like any other.\n *\n * Layout-shift-free: view and edit modes share padding, border width,\n * font, and line-height so the toggle causes no reflow.\n */\n\nimport type { JSX } from \"preact\";\nimport { useCallback, useEffect, useRef, useState } from \"preact/hooks\";\nimport classes from \"./ActionInput.module.css\";\nimport { dispatchAction } from \"./internal/dispatch-action.ts\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\n\nexport type ActionInputSaveOn = \"blur\" | \"enter\" | \"cmd-enter\" | \"explicit\" | \"input\";\nexport type ActionInputVariant = \"single\" | \"multi\";\nexport type ActionInputType =\n | \"text\"\n | \"date\"\n | \"datetime-local\"\n | \"time\"\n | \"month\"\n | \"week\"\n | \"number\"\n | \"email\"\n | \"url\"\n | \"tel\";\n\nexport type ActionInputProps = PassthroughAttrs & {\n /** Current value to render in view mode and seed the edit buffer. */\n value: string;\n /** Action name to dispatch on commit. Receives data-action-value=<new value>. */\n action: string;\n /** Commit trigger. Default: \"blur\". */\n saveOn?: ActionInputSaveOn;\n variant?: ActionInputVariant;\n /** Native input type for the single-line variant. Default: \"text\". */\n inputType?: ActionInputType;\n placeholder?: string;\n disabled?: boolean;\n /** Extra data-action-* attributes to include at commit (e.g. entity id). */\n actionData?: Record<string, string>;\n /** Custom view renderer — receives value, returns VNode. */\n renderView?: (value: string) => JSX.Element | string;\n /** Label announced by screen readers for the edit affordance. */\n ariaLabel?: string;\n className?: string;\n};\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: two render branches times two variants times five saveOn triggers; branching is inherent to the primitive.\nexport function ActionInput(props: ActionInputProps): JSX.Element {\n const variant = props.variant ?? \"single\";\n const saveOn = props.saveOn ?? \"blur\";\n // \"input\" mode is a permanently-editable filter field — it never has a\n // view mode to toggle back to, so it starts in edit.\n const live = saveOn === \"input\";\n const [mode, setMode] = useState<\"view\" | \"edit\">(live ? \"edit\" : \"view\");\n const [draft, setDraft] = useState(props.value);\n const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n\n useEffect(() => {\n if (mode === \"view\") setDraft(props.value);\n }, [props.value, mode]);\n\n useEffect(() => {\n // Don't steal focus on mount for a live filter field; only pull focus\n // when the user has explicitly toggled a view field into edit mode.\n if (mode === \"edit\" && !live && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select?.();\n }\n }, [mode, live]);\n\n const enterEdit = useCallback(() => {\n if (props.disabled) return;\n setDraft(props.value);\n setMode(\"edit\");\n }, [props.disabled, props.value]);\n\n const commit = useCallback(\n (next: string) => {\n if (next !== props.value) {\n dispatchAction(props.action, { ...(props.actionData ?? {}), value: next });\n }\n // A live filter field stays editable; every other trigger returns\n // to view mode once the value is committed.\n if (!live) setMode(\"view\");\n },\n [props.action, props.actionData, props.value, live]\n );\n\n const cancel = useCallback(() => {\n setDraft(props.value);\n if (!live) setMode(\"view\");\n }, [props.value, live]);\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: keyboard handler encodes the saveOn × variant matrix.\n const onKeyDown = (event: JSX.TargetedKeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n cancel();\n return;\n }\n if (event.key === \"Enter\") {\n const cmd = event.metaKey || event.ctrlKey;\n if (saveOn === \"enter\" && variant === \"single\") {\n event.preventDefault();\n commit(draft);\n } else if ((saveOn === \"enter\" && variant === \"multi\" && cmd) || saveOn === \"cmd-enter\") {\n if (cmd) {\n event.preventDefault();\n commit(draft);\n }\n }\n }\n };\n\n const className = props.className ? `${classes[\"root\"]} ${props.className}` : classes[\"root\"];\n\n // Consumer data-*/aria-* forwarded onto whichever element is the root\n // for the current mode; the primitive's own attributes win on collision.\n const passthrough = collectPassthrough(props);\n\n if (mode === \"view\") {\n const rendered = props.renderView ? props.renderView(props.value) : props.value;\n const isEmpty = props.value.length === 0;\n return (\n // biome-ignore lint/a11y/useSemanticElements: <button> would swallow text selection and add default styling; div with role=button is the inline-edit idiom.\n <div\n {...passthrough}\n class={`${className} ${classes[\"view\"]}`}\n data-polly-ui\n data-polly-action-input\n data-polly-interactive\n data-state={isEmpty ? \"empty\" : \"filled\"}\n data-variant={variant}\n tabIndex={props.disabled ? -1 : 0}\n role=\"button\"\n aria-label={props.ariaLabel ?? \"Edit\"}\n aria-disabled={props.disabled ? \"true\" : undefined}\n onClick={enterEdit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n enterEdit();\n }\n }}\n >\n {isEmpty && props.placeholder ? (\n <span class={classes[\"placeholder\"]}>{props.placeholder}</span>\n ) : (\n rendered\n )}\n </div>\n );\n }\n\n const common = {\n ...passthrough,\n class: `${classes[\"edit\"]} ${classes[\"root\"]}`,\n \"data-polly-ui\": true,\n \"data-polly-action-input\": true,\n \"data-state\": \"editing\",\n \"data-variant\": variant,\n placeholder: props.placeholder,\n value: draft,\n onInput: (e: JSX.TargetedEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const next = e.currentTarget.value;\n setDraft(next);\n if (live) commit(next);\n },\n onBlur: () => {\n if (saveOn === \"blur\") commit(draft);\n else if (!live) cancel();\n },\n onKeyDown,\n \"aria-label\": props.ariaLabel ?? \"Edit\",\n disabled: props.disabled,\n };\n\n if (variant === \"multi\") {\n return (\n <textarea\n ref={(el) => {\n inputRef.current = el;\n }}\n {...(common as unknown as JSX.HTMLAttributes<HTMLTextAreaElement>)}\n />\n );\n }\n return (\n <input\n ref={(el) => {\n inputRef.current = el;\n }}\n type={props.inputType ?? \"text\"}\n {...(common as unknown as JSX.HTMLAttributes<HTMLInputElement>)}\n />\n );\n}\n",
|
|
7
7
|
"/**\n * Fire a named action through the global event-delegation registry.\n *\n * The Action* primitives (<ActionInput>, <ActionSelect>) commit by\n * clicking a detached `<button data-action=\"…\">` carrying data-action-*\n * attributes; the delegated click listener routes it into the\n * consumer's action registry with no extra wiring. Centralised here so\n * every Action* primitive dispatches identically.\n *\n * Keys in `data` are camelCase and converted to dash-case attribute\n * names — `actionData={{ taskId }}` becomes `data-action-task-id`.\n */\n\nexport function dispatchAction(action: string, data: Record<string, string>): void {\n const hidden = document.createElement(\"button\");\n hidden.setAttribute(\"data-action\", action);\n for (const [key, value] of Object.entries(data)) {\n const dashKey = key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n hidden.setAttribute(`data-action-${dashKey}`, value);\n }\n hidden.style.position = \"fixed\";\n hidden.style.opacity = \"0\";\n hidden.style.pointerEvents = \"none\";\n hidden.tabIndex = -1;\n document.body.appendChild(hidden);\n try {\n hidden.click();\n } finally {\n hidden.remove();\n }\n}\n",
|
|
8
|
-
"/**\n * polly#125: data-* / aria-* attribute passthrough for UI primitives.\n *\n * Primitives accept a fixed prop set. Without passthrough, a consumer\n * that needs a `data-*` test hook or an `aria-*` attribute on the\n * primitive's own element has to wrap it in an extra DOM node — a smell.\n *\n * {@link PassthroughAttrs} widens a primitive's props to accept any\n * `data-*` / `aria-*` key; {@link collectPassthrough} gathers them for\n * spreading onto the rendered root element. Spread the result *before*\n * the primitive's own attributes so a consumer key can never override\n * one the primitive sets itself (`data-polly-*`, etc.).\n */\n\n/** Index signatures letting a primitive's props accept arbitrary\n * `data-*` and `aria-*` attributes. */\nexport type PassthroughAttrs = {\n [dataAttr: `data-${string}`]: string | number | boolean | undefined;\n [ariaAttr: `aria-${string}`]: string | number | boolean | undefined;\n};\n\n/**\n * Collect `data-*`
|
|
8
|
+
"/**\n * polly#125: data-* / aria-* attribute passthrough for UI primitives.\n *\n * Primitives accept a fixed prop set. Without passthrough, a consumer\n * that needs a `data-*` test hook or an `aria-*` attribute on the\n * primitive's own element has to wrap it in an extra DOM node — a smell.\n *\n * {@link PassthroughAttrs} widens a primitive's props to accept any\n * `data-*` / `aria-*` key; {@link collectPassthrough} gathers them for\n * spreading onto the rendered root element. Spread the result *before*\n * the primitive's own attributes so a consumer key can never override\n * one the primitive sets itself (`data-polly-*`, etc.).\n */\n\n/** Index signatures letting a primitive's props accept arbitrary\n * `data-*` and `aria-*` attributes, plus the standard `title`\n * attribute — a native tooltip is a DOM hook, not styling, so it\n * rides the same passthrough path (polly#135). */\nexport type PassthroughAttrs = {\n [dataAttr: `data-${string}`]: string | number | boolean | undefined;\n [ariaAttr: `aria-${string}`]: string | number | boolean | undefined;\n /** Native tooltip text, forwarded to the rendered root element. */\n title?: string;\n};\n\n/** Keys, beyond the `data-*` / `aria-*` prefixes, that pass through. */\nfunction isPassthroughKey(key: string): boolean {\n return key.startsWith(\"data-\") || key.startsWith(\"aria-\") || key === \"title\";\n}\n\n/**\n * Collect `data-*` / `aria-*` / `title` attributes from a props object\n * so they can be spread onto a primitive's root element. `undefined`\n * values and non-attribute value types (functions, objects) are dropped.\n */\nexport function collectPassthrough(\n props: Record<string, unknown>\n): Record<string, string | number | boolean> {\n const out: Record<string, string | number | boolean> = {};\n for (const key of Object.keys(props)) {\n if (!isPassthroughKey(key)) continue;\n const value = props[key];\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n out[key] = value;\n }\n }\n return out;\n}\n",
|
|
9
9
|
"/**\n * ActionSelect — single-select dropdown that commits via the action system.\n *\n * The action-dispatching sibling of <Select>. Where <Select> binds a\n * `Signal<Set<T>>` and is built for in-memory filter UIs, ActionSelect\n * takes the current `value` as a plain string and fires `action` with\n * `data-action-value` set to the chosen option — so editing a\n * server-backed field commits through the same event delegation as\n * <ActionInput> and <ActionForm>, with no synthetic signal or bridging\n * `effect` required.\n *\n * Composes <Dropdown> for the menu. The trigger styling is applied\n * directly to Dropdown's own <button> via `triggerClassName`, so the\n * visible box and the interactive element are one and the same node —\n * no styled <span> nested inside an unstyled <button>. A disabled\n * ActionSelect renders as static text without a caret.\n */\n\nimport { useSignal } from \"@preact/signals\";\nimport type { JSX } from \"preact\";\nimport { Dropdown } from \"./Dropdown.tsx\";\nimport { dispatchAction } from \"./internal/dispatch-action.ts\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\nimport classes from \"./Select.module.css\";\nimport type { SelectOption } from \"./Select.tsx\";\n\nexport type ActionSelectProps = PassthroughAttrs & {\n /** Current value — matched against `options` to render the trigger label. */\n value: string;\n /** Selectable options. */\n options: SelectOption<string>[];\n /** Action name to dispatch on selection. Receives data-action-value=<option value>. */\n action: string;\n /** Extra data-action-* attributes to include on commit (e.g. entity id). */\n actionData?: Record<string, string>;\n /** Visible field label rendered above the trigger. */\n label?: string;\n /** Trigger text shown when `value` matches no option. Default: \"Select…\". */\n placeholder?: string;\n disabled?: boolean;\n /** Apply a comfortable minimum width to the trigger. Default: sizes to content. */\n wide?: boolean;\n className?: string;\n id?: string;\n};\n\nfunction labelFor(options: SelectOption<string>[], value: string): string | undefined {\n for (const opt of options) {\n if (opt.value === value) return opt.label;\n }\n return undefined;\n}\n\nexport function ActionSelect(props: ActionSelectProps): JSX.Element {\n const {\n value,\n options,\n action,\n actionData,\n label,\n placeholder = \"Select…\",\n disabled = false,\n wide = false,\n className,\n id,\n } = props;\n\n const isOpen = useSignal(false);\n\n const current = labelFor(options, value);\n const isEmpty = current === undefined;\n const displayText = current ?? placeholder;\n\n const commit = (next: string): void => {\n isOpen.value = false;\n if (next === value) return;\n dispatchAction(action, { ...(actionData ?? {}), value: next });\n };\n\n const triggerParts = [classes[\"trigger\"] ?? \"\"];\n if (isEmpty) triggerParts.push(classes[\"placeholder\"] ?? \"\");\n if (wide) triggerParts.push(classes[\"triggerWide\"] ?? \"\");\n const triggerClass = triggerParts.filter(Boolean).join(\" \");\n\n const parts = [classes[\"select\"] ?? \"\"];\n if (className) parts.push(className);\n\n return (\n <div\n {...collectPassthrough(props)}\n id={id}\n class={parts.filter(Boolean).join(\" \")}\n data-polly-ui\n data-polly-action-select\n data-state={isEmpty ? \"empty\" : \"filled\"}\n >\n {label !== undefined && <span class={classes[\"label\"]}>{label}</span>}\n {disabled ? (\n <span class={triggerClass} aria-disabled=\"true\">\n <span class={classes[\"triggerLabel\"]}>{displayText}</span>\n </span>\n ) : (\n <Dropdown\n isOpen={isOpen}\n triggerClassName={triggerClass}\n trigger={\n <>\n <span class={classes[\"triggerLabel\"]}>{displayText}</span>\n <span class={classes[\"caret\"]} aria-hidden=\"true\" />\n </>\n }\n >\n {options.map((opt) => {\n const isSelected = opt.value === value;\n const optClass = isSelected\n ? `${classes[\"option\"]} ${classes[\"optionSelected\"]}`\n : classes[\"option\"];\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"option\"\n class={optClass}\n aria-selected={isSelected ? \"true\" : \"false\"}\n onClick={() => commit(opt.value)}\n >\n <span>{opt.label}</span>\n </button>\n );\n })}\n </Dropdown>\n )}\n </div>\n );\n}\n",
|
|
10
|
-
"/**\n * Dropdown — trigger button + popover menu using the native Popover API.\n *\n * A shown popover is promoted to the browser's top layer, where CSS\n * positioning resolves against the viewport rather than the `.dropdown`\n * wrapper — so the menu cannot be placed with `position: absolute`\n * alone. Instead it is pinned with `position: fixed` and coordinates\n * measured from the trigger; see `positionMenu` below (issue #128).\n *\n * The menu element gets `popover=\"auto\"` and a unique `data-overlay-id`.\n * `closeTopOverlay()` from @fairfox/polly/actions finds the topmost\n * `[data-overlay-id]` element and dispatches `overlay:close` — the\n * Dropdown listens for that event and mirrors it onto the `isOpen`\n * signal. In single-select mode, clicking the menu closes it; in\n * multi-select mode, the menu stays open so the consumer can pick\n * several items.\n */\n\nimport { type Signal, useSignalEffect } from \"@preact/signals\";\nimport type { ComponentChildren, JSX } from \"preact\";\nimport { useEffect, useRef } from \"preact/hooks\";\nimport classes from \"./Dropdown.module.css\";\nimport { Layout } from \"./Layout.tsx\";\n\nexport type DropdownProps = {\n isOpen: Signal<boolean>;\n trigger: ComponentChildren;\n children: ComponentChildren;\n align?: \"left\" | \"right\";\n multiSelect?: boolean;\n className?: string;\n /**\n * Class applied to the trigger <button> in place of Dropdown's own\n * default. Lets a composing component (Select, ActionSelect) style\n * the single interactive element directly, with no styled node\n * nested inside the button.\n */\n triggerClassName?: string;\n /** Disables the trigger <button>. */\n triggerDisabled?: boolean;\n id?: string;\n};\n\nlet dropdownCounter = 0;\n\n/** Gap in px the menu leaves between itself and the trigger. */\nconst MENU_GAP = 4;\n/** Minimum gap in px the menu keeps from every viewport edge. */\nconst VIEWPORT_PADDING = 8;\n\nexport function Dropdown(props: DropdownProps): JSX.Element {\n const {\n isOpen,\n trigger,\n children,\n align = \"left\",\n multiSelect = false,\n className,\n triggerClassName,\n triggerDisabled = false,\n id,\n } = props;\n\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const idRef = useRef(`polly-dropdown-${++dropdownCounter}`);\n const popoverId = idRef.current;\n\n useEffect(() => {\n triggerRef.current?.setAttribute(\"popovertarget\", popoverId);\n }, [popoverId]);\n\n useEffect(() => {\n const menu = menuRef.current;\n if (!menu) return;\n const onOverlayClose = (e: Event): void => {\n if (e instanceof CustomEvent && e.detail?.id === popoverId) {\n isOpen.value = false;\n }\n };\n menu.addEventListener(\"overlay:close\", onOverlayClose);\n return () => {\n menu.removeEventListener(\"overlay:close\", onOverlayClose);\n };\n }, [popoverId, isOpen]);\n\n useEffect(() => {\n const menu = menuRef.current;\n const trigger = triggerRef.current;\n if (!menu || !trigger) return;\n\n // Pin the top-layer menu to its trigger with viewport coordinates.\n // Run from `beforetoggle` this happens synchronously before the\n // popover paints, so the menu is correct on its first frame — no\n // flash. Run from scroll/resize it keeps the menu pinned.\n const positionMenu = (): void => {\n const t = trigger.getBoundingClientRect();\n\n // A not-yet-shown popover is `display: none` and has no box to\n // measure. Force layout for the duration of the (synchronous)\n // read, then restore — nothing paints in between. Clearing the\n // inline max-height first measures the menu's natural size.\n const prevDisplay = menu.style.display;\n menu.style.maxHeight = \"\";\n menu.style.display = \"block\";\n const menuWidth = menu.offsetWidth;\n const menuHeight = menu.offsetHeight;\n menu.style.display = prevDisplay;\n\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n // Horizontal: align left edges (right edges when align=\"right\"),\n // then clamp so the menu never overflows a viewport edge.\n let left = align === \"right\" ? t.right - menuWidth : t.left;\n const maxLeft = Math.max(VIEWPORT_PADDING, viewportWidth - menuWidth - VIEWPORT_PADDING);\n left = Math.min(Math.max(left, VIEWPORT_PADDING), maxLeft);\n\n // Vertical: below the trigger by default; flip above when that\n // leaves more room. Cap the height to the space available so the\n // menu always stays on-screen.\n const spaceBelow = viewportHeight - t.bottom - MENU_GAP - VIEWPORT_PADDING;\n const spaceAbove = t.top - MENU_GAP - VIEWPORT_PADDING;\n let top: number;\n if (menuHeight <= spaceBelow || spaceBelow >= spaceAbove) {\n top = t.bottom + MENU_GAP;\n if (menuHeight > spaceBelow) {\n menu.style.maxHeight = `${Math.max(spaceBelow, 0)}px`;\n }\n } else {\n const available = Math.max(spaceAbove, 0);\n menu.style.maxHeight = `${available}px`;\n top = t.top - MENU_GAP - Math.min(menuHeight, available);\n }\n\n menu.style.position = \"fixed\";\n menu.style.margin = \"0\";\n menu.style.left = `${left}px`;\n menu.style.top = `${top}px`;\n };\n\n const onBeforeToggle = (e: Event): void => {\n if ((e as Event & { newState?: string }).newState === \"open\") {\n positionMenu();\n }\n };\n const onReposition = (): void => {\n if (menu.matches(\":popover-open\")) positionMenu();\n };\n\n menu.addEventListener(\"beforetoggle\", onBeforeToggle);\n window.addEventListener(\"scroll\", onReposition, true);\n window.addEventListener(\"resize\", onReposition);\n return () => {\n menu.removeEventListener(\"beforetoggle\", onBeforeToggle);\n window.removeEventListener(\"scroll\", onReposition, true);\n window.removeEventListener(\"resize\", onReposition);\n };\n }, [align]);\n\n useSignalEffect(() => {\n const menu = menuRef.current;\n if (!menu) return;\n if (isOpen.value && !menu.matches(\":popover-open\")) {\n menu.showPopover();\n } else if (!isOpen.value && menu.matches(\":popover-open\")) {\n menu.hidePopover();\n }\n });\n\n const handleToggle = (e: Event): void => {\n if (\"newState\" in e) {\n isOpen.value = (e as unknown as { newState: string }).newState === \"open\";\n }\n };\n\n const handleMenuClick = (): void => {\n if (!multiSelect) {\n isOpen.value = false;\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent): void => {\n if (e.key === \"Escape\") {\n isOpen.value = false;\n }\n };\n\n const parts = [classes[\"dropdown\"] ?? \"\"];\n if (className) parts.push(className);\n\n return (\n <div id={id} class={parts.filter(Boolean).join(\" \")} data-polly-ui data-polly-dropdown>\n <button\n ref={triggerRef}\n type=\"button\"\n class={triggerClassName ?? classes[\"trigger\"] ?? \"\"}\n disabled={triggerDisabled}\n >\n {trigger}\n </button>\n <div\n ref={menuRef}\n id={popoverId}\n role=\"listbox\"\n class={classes[\"menu\"] ?? \"\"}\n data-align={align}\n popover=\"auto\"\n data-overlay-id={popoverId}\n onToggle={handleToggle}\n onClick={handleMenuClick}\n onKeyDown={handleKeyDown}\n >\n <Layout rows=\"auto\" gap=\"0\">\n {children}\n </Layout>\n </div>\n </div>\n );\n}\n",
|
|
11
|
-
"/**\n * Layout — the one primitive that owns layouting concerns.\n *\n * Every other component in @fairfox/polly/ui (and every consumer app\n * that runs `polly quality css-layout`) routes flex/grid decisions\n * through this component. Props map to CSS custom properties so the\n * stylesheet can read them uniformly and so consumers can override\n * any of them in media queries without touching specificity.\n */\n\nimport { type ComponentChildren, createElement, type JSX } from \"preact\";\nimport classes from \"./Layout.module.css\";\n\nexport type LayoutProps = {\n children: ComponentChildren;\n\n /** Polymorphic element (div, section, header, nav, …). Defaults to 'div'. */\n as?: keyof JSX.IntrinsicElements;\n\n /** CSS grid structure. */\n rows?: string;\n columns?: string;\n autoFlow?: string;\n autoRows?: string;\n autoColumns?: string;\n\n /** display: contents — lets children participate in an ancestor grid. */\n contents?: boolean;\n /** Inherit parent grid tracks via CSS subgrid. */\n subgrid?: boolean;\n\n /** Spacing. */\n gap?: string;\n padding?: string;\n\n /** Sizing. */\n height?: string;\n minHeight?: string;\n /**\n * Cap the inline size and centre within the parent. Typical values use the\n * `--polly-measure-*` tokens (e.g. \"var(--polly-measure-page)\" for an app\n * shell, \"var(--polly-measure-prose)\" for body copy). Any CSS length works.\n */\n maxInlineSize?: string;\n\n /** Container alignment. */\n justifyItems?: string;\n alignItems?: string;\n justifyContent?: string;\n alignContent?: string;\n\n /** Self alignment (when this Layout is an item in a parent grid). */\n justifySelf?: string;\n alignSelf?: string;\n\n /** Collapse to a single column at ≤640px. */\n stackOnMobile?: boolean;\n\n /** Render as display: inline-grid so the Layout flows inline with surrounding text/controls. */\n inline?: boolean;\n\n className?: string;\n onClick?: JSX.MouseEventHandler<HTMLElement>;\n onKeyDown?: JSX.KeyboardEventHandler<HTMLElement>;\n\n role?: JSX.AriaRole;\n tabIndex?: number;\n id?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n};\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: sixteen optional prop-to-custom-property mappings; flat and linear.\nexport function Layout(props: LayoutProps): JSX.Element {\n const {\n children,\n as = \"div\",\n rows,\n columns,\n contents,\n subgrid,\n gap,\n padding,\n height,\n minHeight,\n maxInlineSize,\n justifyItems,\n alignItems,\n justifyContent,\n alignContent,\n justifySelf,\n alignSelf,\n autoFlow,\n autoRows,\n autoColumns,\n stackOnMobile,\n inline,\n className,\n onClick,\n onKeyDown,\n role,\n tabIndex,\n id,\n } = props;\n\n const style: Record<string, string> = {};\n\n if (contents) {\n style[\"display\"] = \"contents\";\n } else if (subgrid) {\n style[\"--l-col\"] = \"1 / -1\";\n style[\"--l-cols\"] = \"subgrid\";\n if (padding) style[\"--l-p\"] = padding;\n if (alignItems) style[\"--l-ai\"] = alignItems;\n if (gap) style[\"--l-gap\"] = gap;\n } else {\n if (padding) style[\"--l-p\"] = padding;\n if (height) style[\"--l-h\"] = height;\n if (minHeight) style[\"--l-mh\"] = minHeight;\n if (maxInlineSize) style[\"--l-mis\"] = maxInlineSize;\n if (rows) style[\"--l-rows\"] = rows;\n if (columns) style[\"--l-cols\"] = columns;\n if (gap) style[\"--l-gap\"] = gap;\n if (justifyItems) style[\"--l-ji\"] = justifyItems;\n if (alignItems) style[\"--l-ai\"] = alignItems;\n if (justifyContent) style[\"--l-jc\"] = justifyContent;\n if (alignContent) style[\"--l-ac\"] = alignContent;\n if (autoFlow) style[\"--l-flow\"] = autoFlow;\n if (autoRows) style[\"--l-arows\"] = autoRows;\n if (autoColumns) style[\"--l-acols\"] = autoColumns;\n }\n if (justifySelf) style[\"--l-js\"] = justifySelf;\n if (alignSelf) style[\"--l-as\"] = alignSelf;\n\n const baseParts = [classes[\"layout\"]];\n if (inline) baseParts.push(classes[\"inline\"]);\n if (stackOnMobile) baseParts.push(classes[\"stackOnMobile\"]);\n const baseClass = baseParts.filter(Boolean).join(\" \");\n const combined = contents ? className : className ? `${baseClass} ${className}` : baseClass;\n\n return createElement(\n as,\n {\n id,\n className: combined,\n style,\n onClick,\n onKeyDown,\n role,\n tabIndex,\n \"aria-label\": props[\"aria-label\"],\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"],\n \"data-polly-layout\": true,\n },\n children\n );\n}\n",
|
|
10
|
+
"/**\n * Dropdown — trigger button + popover menu using the native Popover API.\n *\n * A shown popover is promoted to the browser's top layer, where CSS\n * positioning resolves against the viewport rather than the `.dropdown`\n * wrapper — so the menu cannot be placed with `position: absolute`\n * alone. Instead it is pinned with `position: fixed` and coordinates\n * measured from the trigger; see `positionMenu` below (issue #128).\n *\n * The menu element gets `popover=\"auto\"` and a unique `data-overlay-id`.\n * `closeTopOverlay()` from @fairfox/polly/actions finds the topmost\n * `[data-overlay-id]` element and dispatches `overlay:close` — the\n * Dropdown listens for that event and mirrors it onto the `isOpen`\n * signal. In single-select mode, clicking the menu closes it; in\n * multi-select mode, the menu stays open so the consumer can pick\n * several items.\n */\n\nimport { type Signal, useSignalEffect } from \"@preact/signals\";\nimport type { ComponentChildren, JSX } from \"preact\";\nimport { useEffect, useRef } from \"preact/hooks\";\nimport classes from \"./Dropdown.module.css\";\nimport { Layout } from \"./Layout.tsx\";\n\nexport type DropdownProps = {\n isOpen: Signal<boolean>;\n trigger: ComponentChildren;\n children: ComponentChildren;\n align?: \"left\" | \"right\";\n multiSelect?: boolean;\n className?: string;\n /**\n * Class applied to the trigger <button> in place of Dropdown's own\n * default. Lets a composing component (Select, ActionSelect) style\n * the single interactive element directly, with no styled node\n * nested inside the button. The trigger also carries a\n * `data-open=\"true|false\"` attribute mirroring `isOpen`, so the\n * class can style open-state affordances (e.g. a rotating caret).\n */\n triggerClassName?: string;\n /** Disables the trigger <button>. */\n triggerDisabled?: boolean;\n id?: string;\n};\n\nlet dropdownCounter = 0;\n\n/** Gap in px the menu leaves between itself and the trigger. */\nconst MENU_GAP = 4;\n/** Minimum gap in px the menu keeps from every viewport edge. */\nconst VIEWPORT_PADDING = 8;\n\nexport function Dropdown(props: DropdownProps): JSX.Element {\n const {\n isOpen,\n trigger,\n children,\n align = \"left\",\n multiSelect = false,\n className,\n triggerClassName,\n triggerDisabled = false,\n id,\n } = props;\n\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const idRef = useRef(`polly-dropdown-${++dropdownCounter}`);\n const popoverId = idRef.current;\n\n useEffect(() => {\n triggerRef.current?.setAttribute(\"popovertarget\", popoverId);\n }, [popoverId]);\n\n useEffect(() => {\n const menu = menuRef.current;\n if (!menu) return;\n const onOverlayClose = (e: Event): void => {\n if (e instanceof CustomEvent && e.detail?.id === popoverId) {\n isOpen.value = false;\n }\n };\n menu.addEventListener(\"overlay:close\", onOverlayClose);\n return () => {\n menu.removeEventListener(\"overlay:close\", onOverlayClose);\n };\n }, [popoverId, isOpen]);\n\n useEffect(() => {\n const menu = menuRef.current;\n const trigger = triggerRef.current;\n if (!menu || !trigger) return;\n\n // Pin the top-layer menu to its trigger with viewport coordinates.\n // Run from `beforetoggle` this happens synchronously before the\n // popover paints, so the menu is correct on its first frame — no\n // flash. Run from scroll/resize it keeps the menu pinned.\n const positionMenu = (): void => {\n const t = trigger.getBoundingClientRect();\n\n // A not-yet-shown popover is `display: none` and has no box to\n // measure. Force layout for the duration of the (synchronous)\n // read, then restore — nothing paints in between. Clearing the\n // inline max-height first measures the menu's natural size.\n const prevDisplay = menu.style.display;\n menu.style.maxHeight = \"\";\n menu.style.display = \"block\";\n const menuWidth = menu.offsetWidth;\n const menuHeight = menu.offsetHeight;\n menu.style.display = prevDisplay;\n\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n // Horizontal: align left edges (right edges when align=\"right\"),\n // then clamp so the menu never overflows a viewport edge.\n let left = align === \"right\" ? t.right - menuWidth : t.left;\n const maxLeft = Math.max(VIEWPORT_PADDING, viewportWidth - menuWidth - VIEWPORT_PADDING);\n left = Math.min(Math.max(left, VIEWPORT_PADDING), maxLeft);\n\n // Vertical: below the trigger by default; flip above when that\n // leaves more room. Cap the height to the space available so the\n // menu always stays on-screen.\n const spaceBelow = viewportHeight - t.bottom - MENU_GAP - VIEWPORT_PADDING;\n const spaceAbove = t.top - MENU_GAP - VIEWPORT_PADDING;\n let top: number;\n if (menuHeight <= spaceBelow || spaceBelow >= spaceAbove) {\n top = t.bottom + MENU_GAP;\n if (menuHeight > spaceBelow) {\n menu.style.maxHeight = `${Math.max(spaceBelow, 0)}px`;\n }\n } else {\n const available = Math.max(spaceAbove, 0);\n menu.style.maxHeight = `${available}px`;\n top = t.top - MENU_GAP - Math.min(menuHeight, available);\n }\n\n menu.style.position = \"fixed\";\n menu.style.margin = \"0\";\n menu.style.left = `${left}px`;\n menu.style.top = `${top}px`;\n };\n\n const onBeforeToggle = (e: Event): void => {\n if ((e as Event & { newState?: string }).newState === \"open\") {\n positionMenu();\n }\n };\n const onReposition = (): void => {\n if (menu.matches(\":popover-open\")) positionMenu();\n };\n\n menu.addEventListener(\"beforetoggle\", onBeforeToggle);\n window.addEventListener(\"scroll\", onReposition, true);\n window.addEventListener(\"resize\", onReposition);\n return () => {\n menu.removeEventListener(\"beforetoggle\", onBeforeToggle);\n window.removeEventListener(\"scroll\", onReposition, true);\n window.removeEventListener(\"resize\", onReposition);\n };\n }, [align]);\n\n useSignalEffect(() => {\n const menu = menuRef.current;\n if (!menu) return;\n if (isOpen.value && !menu.matches(\":popover-open\")) {\n menu.showPopover();\n } else if (!isOpen.value && menu.matches(\":popover-open\")) {\n menu.hidePopover();\n }\n });\n\n const handleToggle = (e: Event): void => {\n if (\"newState\" in e) {\n isOpen.value = (e as unknown as { newState: string }).newState === \"open\";\n }\n };\n\n const handleMenuClick = (): void => {\n if (!multiSelect) {\n isOpen.value = false;\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent): void => {\n if (e.key === \"Escape\") {\n isOpen.value = false;\n }\n };\n\n const parts = [classes[\"dropdown\"] ?? \"\"];\n if (className) parts.push(className);\n\n return (\n <div id={id} class={parts.filter(Boolean).join(\" \")} data-polly-ui data-polly-dropdown>\n <button\n ref={triggerRef}\n type=\"button\"\n class={triggerClassName ?? classes[\"trigger\"] ?? \"\"}\n disabled={triggerDisabled}\n data-open={isOpen.value ? \"true\" : \"false\"}\n >\n {trigger}\n </button>\n <div\n ref={menuRef}\n id={popoverId}\n role=\"listbox\"\n class={classes[\"menu\"] ?? \"\"}\n data-align={align}\n popover=\"auto\"\n data-overlay-id={popoverId}\n onToggle={handleToggle}\n onClick={handleMenuClick}\n onKeyDown={handleKeyDown}\n >\n <Layout rows=\"auto\" gap=\"0\">\n {children}\n </Layout>\n </div>\n </div>\n );\n}\n",
|
|
11
|
+
"/**\n * Layout — the one primitive that owns layouting concerns.\n *\n * Every other component in @fairfox/polly/ui (and every consumer app\n * that runs `polly quality css-layout`) routes flex/grid decisions\n * through this component. Props map to CSS custom properties so the\n * stylesheet can read them uniformly and so consumers can override\n * any of them in media queries without touching specificity.\n */\n\nimport { type ComponentChildren, createElement, type JSX } from \"preact\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\nimport classes from \"./Layout.module.css\";\n\nexport type LayoutProps = PassthroughAttrs & {\n children: ComponentChildren;\n\n /** Polymorphic element (div, section, header, nav, …). Defaults to 'div'. */\n as?: keyof JSX.IntrinsicElements;\n\n /** CSS grid structure. */\n rows?: string;\n columns?: string;\n autoFlow?: string;\n autoRows?: string;\n autoColumns?: string;\n\n /** display: contents — lets children participate in an ancestor grid. */\n contents?: boolean;\n /** Inherit parent grid tracks via CSS subgrid. */\n subgrid?: boolean;\n\n /** Spacing. */\n gap?: string;\n padding?: string;\n\n /** Sizing. */\n height?: string;\n minHeight?: string;\n /**\n * Cap the inline size and centre within the parent. Typical values use the\n * `--polly-measure-*` tokens (e.g. \"var(--polly-measure-page)\" for an app\n * shell, \"var(--polly-measure-prose)\" for body copy). Any CSS length works.\n */\n maxInlineSize?: string;\n\n /** Container alignment. */\n justifyItems?: string;\n alignItems?: string;\n justifyContent?: string;\n alignContent?: string;\n\n /** Self alignment (when this Layout is an item in a parent grid). */\n justifySelf?: string;\n alignSelf?: string;\n\n /** Collapse to a single column at ≤640px. */\n stackOnMobile?: boolean;\n\n /** Render as display: inline-grid so the Layout flows inline with surrounding text/controls. */\n inline?: boolean;\n\n className?: string;\n onClick?: JSX.MouseEventHandler<HTMLElement>;\n onKeyDown?: JSX.KeyboardEventHandler<HTMLElement>;\n\n role?: JSX.AriaRole;\n tabIndex?: number;\n id?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n};\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: sixteen optional prop-to-custom-property mappings; flat and linear.\nexport function Layout(props: LayoutProps): JSX.Element {\n const {\n children,\n as = \"div\",\n rows,\n columns,\n contents,\n subgrid,\n gap,\n padding,\n height,\n minHeight,\n maxInlineSize,\n justifyItems,\n alignItems,\n justifyContent,\n alignContent,\n justifySelf,\n alignSelf,\n autoFlow,\n autoRows,\n autoColumns,\n stackOnMobile,\n inline,\n className,\n onClick,\n onKeyDown,\n role,\n tabIndex,\n id,\n } = props;\n\n const style: Record<string, string> = {};\n\n if (contents) {\n style[\"display\"] = \"contents\";\n } else if (subgrid) {\n style[\"--l-col\"] = \"1 / -1\";\n style[\"--l-cols\"] = \"subgrid\";\n if (padding) style[\"--l-p\"] = padding;\n if (alignItems) style[\"--l-ai\"] = alignItems;\n if (gap) style[\"--l-gap\"] = gap;\n } else {\n if (padding) style[\"--l-p\"] = padding;\n if (height) style[\"--l-h\"] = height;\n if (minHeight) style[\"--l-mh\"] = minHeight;\n if (maxInlineSize) style[\"--l-mis\"] = maxInlineSize;\n if (rows) style[\"--l-rows\"] = rows;\n if (columns) style[\"--l-cols\"] = columns;\n if (gap) style[\"--l-gap\"] = gap;\n if (justifyItems) style[\"--l-ji\"] = justifyItems;\n if (alignItems) style[\"--l-ai\"] = alignItems;\n if (justifyContent) style[\"--l-jc\"] = justifyContent;\n if (alignContent) style[\"--l-ac\"] = alignContent;\n if (autoFlow) style[\"--l-flow\"] = autoFlow;\n if (autoRows) style[\"--l-arows\"] = autoRows;\n if (autoColumns) style[\"--l-acols\"] = autoColumns;\n }\n if (justifySelf) style[\"--l-js\"] = justifySelf;\n if (alignSelf) style[\"--l-as\"] = alignSelf;\n\n const baseParts = [classes[\"layout\"]];\n if (inline) baseParts.push(classes[\"inline\"]);\n if (stackOnMobile) baseParts.push(classes[\"stackOnMobile\"]);\n const baseClass = baseParts.filter(Boolean).join(\" \");\n const combined = contents ? className : className ? `${baseClass} ${className}` : baseClass;\n\n return createElement(\n as,\n {\n // Consumer data-*/aria-*/title first; the primitive's own\n // attributes below win on any collision.\n ...collectPassthrough(props),\n id,\n className: combined,\n style,\n onClick,\n onKeyDown,\n role,\n tabIndex,\n \"aria-label\": props[\"aria-label\"],\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"],\n \"data-polly-layout\": true,\n },\n children\n );\n}\n",
|
|
12
12
|
"/**\n * Badge — small inline status chip.\n *\n * Renders as a passive <span> with tinted background and on-tint text\n * from the `--polly-status-*` token family. The default variant uses\n * surface-sunken + muted text for a neutral pill. Consumers style\n * placement via className; the primitive owns size, shape, and colour.\n */\n\nimport type { ComponentChildren, JSX } from \"preact\";\nimport classes from \"./Badge.module.css\";\n\nexport type BadgeVariant = \"default\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport type BadgeProps = {\n children: ComponentChildren;\n variant?: BadgeVariant;\n className?: string;\n id?: string;\n};\n\nfunction variantClass(variant: BadgeVariant): string | undefined {\n if (variant === \"info\") return classes[\"info\"];\n if (variant === \"success\") return classes[\"success\"];\n if (variant === \"warning\") return classes[\"warning\"];\n if (variant === \"danger\") return classes[\"danger\"];\n return undefined;\n}\n\nexport function Badge(props: BadgeProps): JSX.Element {\n const { children, variant = \"default\", className, id } = props;\n const parts = [classes[\"badge\"]];\n const v = variantClass(variant);\n if (v) parts.push(v);\n if (className) parts.push(className);\n return (\n <span id={id} class={parts.join(\" \")} data-polly-ui data-polly-badge={variant}>\n {children}\n </span>\n );\n}\n",
|
|
13
13
|
"/**\n * Button — interactive control with tier, semantic colour, and size.\n *\n * Renders as a <button> by default; switches to an <a> when given an\n * `href`. Tier sets visual importance (primary/secondary/tertiary),\n * color overlays semantic meaning (info/success/warning/danger),\n * size picks the padding + font scale (small/normal/large). Icon +\n * label are arranged with a nested inline <Layout>.\n *\n * Action wiring is declared via data-* attributes consumed by the\n * global event delegator in @fairfox/polly/actions — Button does not\n * accept an onClick prop.\n */\n\nimport type { ComponentChildren, JSX, VNode } from \"preact\";\nimport classes from \"./Button.module.css\";\nimport { Layout } from \"./Layout.tsx\";\n\nexport type ButtonTier = \"primary\" | \"secondary\" | \"tertiary\";\nexport type ButtonColor = \"default\" | \"info\" | \"success\" | \"warning\" | \"danger\";\nexport type ButtonSize = \"small\" | \"normal\" | \"large\";\n\ntype BaseButtonProps = {\n id?: string;\n tier?: ButtonTier;\n color?: ButtonColor;\n size?: ButtonSize;\n disabled?: boolean;\n fullWidth?: boolean;\n circle?: boolean;\n className?: string;\n title?: string;\n icon?: VNode;\n label: ComponentChildren;\n \"data-action\"?: string;\n \"aria-label\"?: string;\n /** Additional action-payload attributes the event delegator parses\n * into `ctx.data`. `data-action-tid=\"t-17\"` becomes `{ tid: \"t-17\" }`,\n * `data-action-item-id=\"…\"` becomes `{ itemId: \"…\" }`, and so on.\n * Typed as an index signature so every `data-action-*` key the\n * consumer cares about type-checks without a Button-side enumeration. */\n [actionDataAttr: `data-action-${string}`]: string | undefined;\n};\n\ntype ButtonAsButton = BaseButtonProps & {\n href?: never;\n target?: never;\n rel?: never;\n download?: never;\n type?: \"button\" | \"submit\" | \"reset\";\n};\n\ntype ButtonAsLink = BaseButtonProps & {\n href: string;\n target?: string;\n rel?: string;\n /** Forwarded to the rendered <a> so a Button-as-link can offer a file\n * download. An empty string uses the resource's own filename. */\n download?: string;\n type?: never;\n};\n\nexport type ButtonProps = ButtonAsButton | ButtonAsLink;\n\nfunction tierClass(tier: ButtonTier): string | undefined {\n if (tier === \"primary\") return classes[\"tierPrimary\"];\n if (tier === \"tertiary\") return classes[\"tierTertiary\"];\n return classes[\"tierSecondary\"];\n}\n\nfunction colorClass(color: ButtonColor): string | undefined {\n if (color === \"info\") return classes[\"colorInfo\"];\n if (color === \"success\") return classes[\"colorSuccess\"];\n if (color === \"warning\") return classes[\"colorWarning\"];\n if (color === \"danger\") return classes[\"colorDanger\"];\n return undefined;\n}\n\nfunction sizeClass(size: ButtonSize): string | undefined {\n if (size === \"small\") return classes[\"btnSmall\"];\n if (size === \"large\") return classes[\"btnLarge\"];\n return undefined;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: flat prop-to-class composition plus one anchor/button branch; splitting would just hide the mapping.\nexport function Button(props: ButtonProps): JSX.Element {\n const {\n id,\n tier = \"secondary\",\n color = \"default\",\n size = \"normal\",\n disabled = false,\n fullWidth = false,\n circle = false,\n className,\n title,\n icon,\n label,\n } = props;\n\n const parts = [classes[\"btn\"] ?? \"\"];\n const tc = tierClass(tier);\n if (tc) parts.push(tc);\n const cc = colorClass(color);\n if (cc) parts.push(cc);\n const sc = sizeClass(size);\n if (sc) parts.push(sc);\n if (circle) parts.push(classes[\"btnCircle\"] ?? \"\");\n if (fullWidth) parts.push(classes[\"btnFullWidth\"] ?? \"\");\n if (className) parts.push(className);\n const buttonClass = parts.filter(Boolean).join(\" \");\n\n const content = icon ? (\n <Layout inline columns=\"auto auto\" gap=\"0.5em\" alignItems=\"center\">\n {icon}\n <span>{label}</span>\n </Layout>\n ) : (\n label\n );\n\n const dataAction = props[\"data-action\"];\n const ariaLabel = props[\"aria-label\"];\n // Collect every `data-action-*` extra the consumer passed so the\n // event delegator can read them off the rendered element. Without\n // this, anything beyond `data-action` is silently dropped and\n // handlers fire with an empty `ctx.data`.\n const actionDataAttrs: Record<string, string> = {};\n for (const key of Object.keys(props)) {\n if (key.startsWith(\"data-action-\")) {\n const value = (props as unknown as Record<string, unknown>)[key];\n if (typeof value === \"string\") {\n actionDataAttrs[key] = value;\n }\n }\n }\n\n if (\"href\" in props && props.href) {\n return (\n <a\n id={id}\n class={buttonClass}\n title={title}\n href={disabled ? undefined : props.href}\n target={\"target\" in props ? props.target : undefined}\n rel={\"rel\" in props ? props.rel : undefined}\n download={\"download\" in props ? props.download : undefined}\n aria-disabled={disabled}\n aria-label={ariaLabel}\n data-polly-ui\n data-polly-button={tier}\n data-action={dataAction}\n {...actionDataAttrs}\n >\n {content}\n </a>\n );\n }\n\n const resolvedType: \"button\" | \"submit\" | \"reset\" =\n \"type\" in props && props.type ? props.type : \"button\";\n\n return (\n <button\n id={id}\n class={buttonClass}\n title={title}\n type={resolvedType}\n disabled={disabled}\n aria-label={ariaLabel}\n data-polly-ui\n data-polly-button={tier}\n data-action={dataAction}\n {...actionDataAttrs}\n >\n {content}\n </button>\n );\n}\n",
|
|
14
|
-
"/**\n * Surface — the one primitive that owns visual-surface concerns.\n *\n * Where Layout governs spatial concerns (grid, flex, gap, alignment),\n * Surface governs the chrome that sits on top of layout: padding,\n * background, border, radius, shadow, and the narrow positioning idioms\n * (sticky strips, fixed floating panes) that consumers reach for inline\n * styles to express. Every prop maps to a `--polly-*` token through a\n * local `--s-*` custom property, so consumers can retheme an individual\n * Surface by overriding the polly token in `style` without touching the\n * primitive's CSS.\n */\n\nimport { type ComponentChildren, createElement, type JSX } from \"preact\";\nimport classes from \"./Surface.module.css\";\n\nexport type SurfaceVariant =\n | \"plain\"\n | \"raised\"\n | \"sunken\"\n | \"bubble\"\n | \"chip\"\n | \"callout\"\n | \"floating\"\n | \"sticky-bar\";\n\ntype Background = \"raised\" | \"sunken\" | \"transparent\" | (string & {});\ntype Radius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\ntype Border = \"none\" | \"default\" | \"strong\";\ntype BorderWidth = \"none\" | \"default\" | \"medium\" | \"thick\";\ntype BorderSides =\n | \"all\"\n | \"block-start\"\n | \"block-end\"\n | \"inline-start\"\n | \"inline-end\"\n | \"block\"\n | \"inline\";\ntype Shadow = \"none\" | \"sm\" | \"md\" | \"lg\";\ntype Position = \"static\" | \"relative\" | \"absolute\" | \"sticky\" | \"fixed\";\ntype BorderStyle = \"solid\" | \"dashed\";\ntype Overflow = \"visible\" | \"hidden\" | \"auto\" | \"scroll\";\n\n/**\n * Arbitrary `data-*` and `aria-*` attributes forwarded to the rendered element\n * so consumers (Modal, Toast, Card, etc.) can compose Surface without losing\n * DOM hooks or ARIA semantics.\n */\nexport type SurfaceDataAttrs = {\n [dataAttr: `data-${string}`]: string | number | boolean | undefined;\n [ariaAttr: `aria-${string}`]: string | number | boolean | undefined;\n};\n\nexport type SurfaceProps = SurfaceDataAttrs & {\n children?: ComponentChildren;\n\n /** Polymorphic element (div, section, article, aside, header, …). Defaults to 'div'. */\n as?: keyof JSX.IntrinsicElements;\n\n /** Named preset that resolves to a default bundle of the props below. Explicit props override. */\n variant?: SurfaceVariant;\n\n /** Any CSS length, typically `var(--polly-space-*)`. */\n padding?: string;\n\n /** Named values map to `var(--polly-surface-*)`; raw strings pass through for one-off colours. */\n background?: Background;\n\n radius?: Radius;\n border?: Border;\n borderWidth?: BorderWidth;\n borderSides?: BorderSides;\n /** Border line style. Default: `'solid'`. */\n borderStyle?: BorderStyle;\n shadow?: Shadow;\n\n /** display: inline-block — Surface flows inline with surrounding text. */\n inline?: boolean;\n width?: string;\n height?: string;\n minHeight?: string;\n /** Maximum block size — a Surface that shrinks to content but is capped. */\n maxHeight?: string;\n maxInlineSize?: string;\n\n /** Overflow behaviour. `'auto'` makes a height-capped Surface scroll. */\n overflow?: Overflow;\n\n position?: Position;\n /** Any CSS inset value (`'0'`, `'auto auto 1rem 1rem'`, `'1rem'`, …). */\n inset?: string;\n /** CSS transform — e.g. `'translateX(-50%)'` to centre a fixed banner\n * paired with `inset: '… auto … 50%'`. The sanctioned transform escape. */\n transform?: string;\n zIndex?: number;\n\n className?: string;\n /**\n * Per-instance overrides. The supported retint path is to set polly tokens\n * here, e.g. `style={{ \"--polly-surface-raised\": \"#fef3c7\" }}`. Surface\n * merges this into its own computed style.\n */\n style?: JSX.CSSProperties;\n\n id?: string;\n role?: JSX.AriaRole;\n tabIndex?: number;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n onClick?: JSX.MouseEventHandler<HTMLElement>;\n onKeyDown?: JSX.KeyboardEventHandler<HTMLElement>;\n};\n\ntype VariantDefaults = Partial<\n Pick<\n SurfaceProps,\n | \"padding\"\n | \"background\"\n | \"radius\"\n | \"border\"\n | \"borderWidth\"\n | \"borderSides\"\n | \"shadow\"\n | \"inline\"\n | \"width\"\n | \"height\"\n | \"minHeight\"\n | \"maxInlineSize\"\n | \"position\"\n | \"inset\"\n | \"zIndex\"\n >\n>;\n\nconst variantDefaults: Record<SurfaceVariant, VariantDefaults> = {\n plain: {},\n raised: {\n background: \"raised\",\n radius: \"md\",\n shadow: \"md\",\n border: \"default\",\n },\n sunken: {\n background: \"sunken\",\n radius: \"md\",\n border: \"default\",\n },\n bubble: {\n radius: \"md\",\n border: \"default\",\n padding: \"var(--polly-space-sm) var(--polly-space-md)\",\n },\n chip: {\n inline: true,\n radius: \"full\",\n padding: \"var(--polly-space-xs) var(--polly-space-sm)\",\n border: \"default\",\n },\n callout: {\n border: \"default\",\n radius: \"sm\",\n padding: \"var(--polly-space-sm) var(--polly-space-md)\",\n },\n floating: {\n position: \"fixed\",\n radius: \"lg\",\n shadow: \"lg\",\n border: \"default\",\n background: \"raised\",\n zIndex: 9999,\n },\n \"sticky-bar\": {\n position: \"sticky\",\n inset: \"0 0 auto 0\",\n borderSides: \"block-end\",\n border: \"default\",\n },\n};\n\nfunction bgValue(b: Background): string {\n if (b === \"raised\") return \"var(--polly-surface-raised)\";\n if (b === \"sunken\") return \"var(--polly-surface-sunken)\";\n if (b === \"transparent\") return \"transparent\";\n return b;\n}\n\nfunction radiusValue(r: Radius): string {\n if (r === \"none\") return \"0\";\n return `var(--polly-radius-${r})`;\n}\n\nfunction borderColorValue(b: Border): string {\n if (b === \"none\") return \"transparent\";\n if (b === \"strong\") return \"var(--polly-border-strong)\";\n return \"var(--polly-border)\";\n}\n\nfunction borderWidthValue(w: BorderWidth): string {\n if (w === \"none\") return \"0\";\n return `var(--polly-border-width-${w})`;\n}\n\nfunction shadowValue(s: Shadow): string {\n if (s === \"none\") return \"none\";\n return `var(--polly-shadow-${s})`;\n}\n\nfunction borderSidesClass(sides: BorderSides): string | undefined {\n if (sides === \"all\") return undefined;\n if (sides === \"block-start\") return classes[\"sides-block-start\"];\n if (sides === \"block-end\") return classes[\"sides-block-end\"];\n if (sides === \"inline-start\") return classes[\"sides-inline-start\"];\n if (sides === \"inline-end\") return classes[\"sides-inline-end\"];\n if (sides === \"block\") return classes[\"sides-block\"];\n if (sides === \"inline\") return classes[\"sides-inline\"];\n return undefined;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: prop-to-custom-property mapping; flat and linear, mirrors Layout.tsx.\nexport function Surface(props: SurfaceProps): JSX.Element {\n const { variant = \"plain\" } = props;\n const v = variantDefaults[variant];\n\n const as = props.as ?? \"div\";\n const padding = props.padding ?? v.padding;\n const background = props.background ?? v.background;\n const radius = props.radius ?? v.radius;\n const border = props.border ?? v.border;\n const borderSides = props.borderSides ?? v.borderSides ?? \"all\";\n const shadow = props.shadow ?? v.shadow;\n const inline = props.inline ?? v.inline;\n const width = props.width ?? v.width;\n const height = props.height ?? v.height;\n const minHeight = props.minHeight ?? v.minHeight;\n const maxInlineSize = props.maxInlineSize ?? v.maxInlineSize;\n const position = props.position ?? v.position;\n const inset = props.inset ?? v.inset;\n const zIndex = props.zIndex ?? v.zIndex;\n // polly#126: no variant sets these, so they resolve straight from props.\n const { maxHeight, overflow, borderStyle, transform } = props;\n\n // A bordered surface needs a width. If the consumer asked for a border but\n // didn't pick a width, infer 'default' so the border renders.\n const borderWidth =\n props.borderWidth ?? v.borderWidth ?? (border && border !== \"none\" ? \"default\" : undefined);\n\n const style: Record<string, string> = {};\n if (padding) style[\"--s-p\"] = padding;\n if (background) style[\"--s-bg\"] = bgValue(background);\n if (radius) style[\"--s-radius\"] = radiusValue(radius);\n if (border) style[\"--s-border-color\"] = borderColorValue(border);\n if (borderWidth) style[\"--s-border-width\"] = borderWidthValue(borderWidth);\n if (shadow) style[\"--s-shadow\"] = shadowValue(shadow);\n if (borderStyle) style[\"--s-border-style\"] = borderStyle;\n if (width) style[\"--s-w\"] = width;\n if (height) style[\"--s-h\"] = height;\n if (minHeight) style[\"--s-mh\"] = minHeight;\n if (maxHeight) style[\"--s-maxh\"] = maxHeight;\n if (maxInlineSize) style[\"--s-mis\"] = maxInlineSize;\n if (overflow) style[\"--s-overflow\"] = overflow;\n if (position) style[\"--s-position\"] = position;\n if (inset) style[\"--s-inset\"] = inset;\n if (transform) style[\"--s-transform\"] = transform;\n if (zIndex !== undefined) style[\"--s-z\"] = String(zIndex);\n\n if (props.style) {\n Object.assign(style, props.style as unknown as Record<string, string>);\n }\n\n const parts: (string | undefined)[] = [classes[\"surface\"]];\n if (inline) parts.push(classes[\"inline\"]);\n parts.push(borderSidesClass(borderSides));\n if (props.className) parts.push(props.className);\n const className = parts.filter(Boolean).join(\" \");\n\n const passthrough: Record<string, string | number | boolean> = {};\n for (const key of Object.keys(props)) {\n const isData = key.startsWith(\"data-\");\n const isAria = key.startsWith(\"aria-\");\n if (!isData && !isAria) continue;\n if (key === \"data-polly-surface\") continue;\n if (key === \"aria-label\" || key === \"aria-labelledby\" || key === \"aria-describedby\") continue;\n const value = (props as unknown as Record<string, unknown>)[key];\n if (value === undefined) continue;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n passthrough[key] = value;\n }\n }\n\n return createElement(\n as,\n {\n id: props.id,\n className,\n style,\n onClick: props.onClick,\n onKeyDown: props.onKeyDown,\n role: props.role,\n tabIndex: props.tabIndex,\n \"aria-label\": props[\"aria-label\"],\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"],\n \"data-polly-surface\": variant,\n ...passthrough,\n },\n props.children\n );\n}\n",
|
|
14
|
+
"/**\n * Surface — the one primitive that owns visual-surface concerns.\n *\n * Where Layout governs spatial concerns (grid, flex, gap, alignment),\n * Surface governs the chrome that sits on top of layout: padding,\n * background, border, radius, shadow, and the narrow positioning idioms\n * (sticky strips, fixed floating panes) that consumers reach for inline\n * styles to express. Every prop maps to a `--polly-*` token through a\n * local `--s-*` custom property, so consumers can retheme an individual\n * Surface by overriding the polly token in `style` without touching the\n * primitive's CSS.\n */\n\nimport { type ComponentChildren, createElement, type JSX } from \"preact\";\nimport classes from \"./Surface.module.css\";\n\nexport type SurfaceVariant =\n | \"plain\"\n | \"raised\"\n | \"sunken\"\n | \"bubble\"\n | \"chip\"\n | \"callout\"\n | \"floating\"\n | \"sticky-bar\";\n\ntype Background = \"raised\" | \"sunken\" | \"transparent\" | (string & {});\ntype Radius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\ntype Border = \"none\" | \"default\" | \"strong\";\ntype BorderWidth = \"none\" | \"default\" | \"medium\" | \"thick\";\ntype BorderSides =\n | \"all\"\n | \"block-start\"\n | \"block-end\"\n | \"inline-start\"\n | \"inline-end\"\n | \"block\"\n | \"inline\";\ntype Shadow = \"none\" | \"sm\" | \"md\" | \"lg\";\ntype Position = \"static\" | \"relative\" | \"absolute\" | \"sticky\" | \"fixed\";\ntype BorderStyle = \"solid\" | \"dashed\";\ntype Overflow = \"visible\" | \"hidden\" | \"auto\" | \"scroll\";\ntype Scheme = \"dark\" | \"light\";\n\n/**\n * Arbitrary `data-*`, `aria-*`, and `title` attributes forwarded to the\n * rendered element so consumers (Modal, Toast, Card, etc.) can compose\n * Surface without losing DOM hooks, ARIA semantics, or a native tooltip.\n */\nexport type SurfaceDataAttrs = {\n [dataAttr: `data-${string}`]: string | number | boolean | undefined;\n [ariaAttr: `aria-${string}`]: string | number | boolean | undefined;\n title?: string;\n};\n\nexport type SurfaceProps = SurfaceDataAttrs & {\n children?: ComponentChildren;\n\n /** Polymorphic element (div, section, article, aside, header, …). Defaults to 'div'. */\n as?: keyof JSX.IntrinsicElements;\n\n /** Named preset that resolves to a default bundle of the props below. Explicit props override. */\n variant?: SurfaceVariant;\n\n /** Any CSS length, typically `var(--polly-space-*)`. */\n padding?: string;\n\n /** Named values map to `var(--polly-surface-*)`; raw strings pass through for one-off colours. */\n background?: Background;\n\n radius?: Radius;\n border?: Border;\n borderWidth?: BorderWidth;\n borderSides?: BorderSides;\n /** Border line style. Default: `'solid'`. */\n borderStyle?: BorderStyle;\n /** Any CSS colour, overriding the token the `border` prop would pick.\n * For one-off rings (a cutout ring, a focus halo) that no semantic\n * border token expresses. Implies a border width when none is set. */\n borderColor?: string;\n shadow?: Shadow;\n\n /**\n * Retint the token subtree so descendant `Text`/`Button` read the\n * right contrast on a dark (or forced-light) Surface — error\n * banners, camera overlays, chat bubbles. Sets `data-polly-theme`,\n * so every `--polly-*` colour token flips for the subtree; no inline\n * `--polly-text` override needed (polly#135).\n */\n scheme?: Scheme;\n\n /** `'none'` makes a decorative Surface (a scan-frame overlay) ignore\n * the pointer so clicks fall through to what is behind it. */\n pointerEvents?: \"none\" | \"auto\";\n\n /** display: inline-block — Surface flows inline with surrounding text. */\n inline?: boolean;\n width?: string;\n height?: string;\n minHeight?: string;\n /** Maximum block size — a Surface that shrinks to content but is capped. */\n maxHeight?: string;\n maxInlineSize?: string;\n\n /** Overflow behaviour. `'auto'` makes a height-capped Surface scroll. */\n overflow?: Overflow;\n\n position?: Position;\n /** Any CSS inset value (`'0'`, `'auto auto 1rem 1rem'`, `'1rem'`, …). */\n inset?: string;\n /** CSS transform — e.g. `'translateX(-50%)'` to centre a fixed banner\n * paired with `inset: '… auto … 50%'`. The sanctioned transform escape. */\n transform?: string;\n zIndex?: number;\n\n className?: string;\n /**\n * Per-instance overrides. The supported retint path is to set polly tokens\n * here, e.g. `style={{ \"--polly-surface-raised\": \"#fef3c7\" }}`. Surface\n * merges this into its own computed style.\n */\n style?: JSX.CSSProperties;\n\n id?: string;\n role?: JSX.AriaRole;\n tabIndex?: number;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n onClick?: JSX.MouseEventHandler<HTMLElement>;\n onKeyDown?: JSX.KeyboardEventHandler<HTMLElement>;\n};\n\ntype VariantDefaults = Partial<\n Pick<\n SurfaceProps,\n | \"padding\"\n | \"background\"\n | \"radius\"\n | \"border\"\n | \"borderWidth\"\n | \"borderSides\"\n | \"shadow\"\n | \"inline\"\n | \"width\"\n | \"height\"\n | \"minHeight\"\n | \"maxInlineSize\"\n | \"position\"\n | \"inset\"\n | \"zIndex\"\n >\n>;\n\nconst variantDefaults: Record<SurfaceVariant, VariantDefaults> = {\n plain: {},\n raised: {\n background: \"raised\",\n radius: \"md\",\n shadow: \"md\",\n border: \"default\",\n },\n sunken: {\n background: \"sunken\",\n radius: \"md\",\n border: \"default\",\n },\n bubble: {\n radius: \"md\",\n border: \"default\",\n padding: \"var(--polly-space-sm) var(--polly-space-md)\",\n },\n chip: {\n inline: true,\n radius: \"full\",\n padding: \"var(--polly-space-xs) var(--polly-space-sm)\",\n border: \"default\",\n },\n callout: {\n border: \"default\",\n radius: \"sm\",\n padding: \"var(--polly-space-sm) var(--polly-space-md)\",\n },\n floating: {\n position: \"fixed\",\n radius: \"lg\",\n shadow: \"lg\",\n border: \"default\",\n background: \"raised\",\n zIndex: 9999,\n },\n \"sticky-bar\": {\n position: \"sticky\",\n inset: \"0 0 auto 0\",\n borderSides: \"block-end\",\n border: \"default\",\n },\n};\n\nfunction bgValue(b: Background): string {\n if (b === \"raised\") return \"var(--polly-surface-raised)\";\n if (b === \"sunken\") return \"var(--polly-surface-sunken)\";\n if (b === \"transparent\") return \"transparent\";\n return b;\n}\n\nfunction radiusValue(r: Radius): string {\n if (r === \"none\") return \"0\";\n return `var(--polly-radius-${r})`;\n}\n\nfunction borderColorValue(b: Border): string {\n if (b === \"none\") return \"transparent\";\n if (b === \"strong\") return \"var(--polly-border-strong)\";\n return \"var(--polly-border)\";\n}\n\nfunction borderWidthValue(w: BorderWidth): string {\n if (w === \"none\") return \"0\";\n return `var(--polly-border-width-${w})`;\n}\n\nfunction shadowValue(s: Shadow): string {\n if (s === \"none\") return \"none\";\n return `var(--polly-shadow-${s})`;\n}\n\nfunction borderSidesClass(sides: BorderSides): string | undefined {\n if (sides === \"all\") return undefined;\n if (sides === \"block-start\") return classes[\"sides-block-start\"];\n if (sides === \"block-end\") return classes[\"sides-block-end\"];\n if (sides === \"inline-start\") return classes[\"sides-inline-start\"];\n if (sides === \"inline-end\") return classes[\"sides-inline-end\"];\n if (sides === \"block\") return classes[\"sides-block\"];\n if (sides === \"inline\") return classes[\"sides-inline\"];\n return undefined;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: prop-to-custom-property mapping; flat and linear, mirrors Layout.tsx.\nexport function Surface(props: SurfaceProps): JSX.Element {\n const { variant = \"plain\" } = props;\n const v = variantDefaults[variant];\n\n const as = props.as ?? \"div\";\n const padding = props.padding ?? v.padding;\n const background = props.background ?? v.background;\n const radius = props.radius ?? v.radius;\n const border = props.border ?? v.border;\n const borderSides = props.borderSides ?? v.borderSides ?? \"all\";\n const shadow = props.shadow ?? v.shadow;\n const inline = props.inline ?? v.inline;\n const width = props.width ?? v.width;\n const height = props.height ?? v.height;\n const minHeight = props.minHeight ?? v.minHeight;\n const maxInlineSize = props.maxInlineSize ?? v.maxInlineSize;\n const position = props.position ?? v.position;\n const inset = props.inset ?? v.inset;\n const zIndex = props.zIndex ?? v.zIndex;\n // polly#126/#135: no variant sets these, so they resolve straight from props.\n const { maxHeight, overflow, borderStyle, transform, borderColor, scheme, pointerEvents } = props;\n\n // A bordered surface needs a width. If the consumer asked for a border —\n // by name or by raw colour — but didn't pick a width, infer 'default'\n // so the border renders.\n const wantsBorder = (border !== undefined && border !== \"none\") || borderColor !== undefined;\n const borderWidth = props.borderWidth ?? v.borderWidth ?? (wantsBorder ? \"default\" : undefined);\n\n const style: Record<string, string> = {};\n if (padding) style[\"--s-p\"] = padding;\n if (background) style[\"--s-bg\"] = bgValue(background);\n if (radius) style[\"--s-radius\"] = radiusValue(radius);\n if (border) style[\"--s-border-color\"] = borderColorValue(border);\n // A raw borderColor wins over whatever token `border` resolved to.\n if (borderColor) style[\"--s-border-color\"] = borderColor;\n if (borderWidth) style[\"--s-border-width\"] = borderWidthValue(borderWidth);\n if (shadow) style[\"--s-shadow\"] = shadowValue(shadow);\n if (borderStyle) style[\"--s-border-style\"] = borderStyle;\n if (pointerEvents) style[\"--s-pe\"] = pointerEvents;\n if (width) style[\"--s-w\"] = width;\n if (height) style[\"--s-h\"] = height;\n if (minHeight) style[\"--s-mh\"] = minHeight;\n if (maxHeight) style[\"--s-maxh\"] = maxHeight;\n if (maxInlineSize) style[\"--s-mis\"] = maxInlineSize;\n if (overflow) style[\"--s-overflow\"] = overflow;\n if (position) style[\"--s-position\"] = position;\n if (inset) style[\"--s-inset\"] = inset;\n if (transform) style[\"--s-transform\"] = transform;\n if (zIndex !== undefined) style[\"--s-z\"] = String(zIndex);\n\n if (props.style) {\n Object.assign(style, props.style as unknown as Record<string, string>);\n }\n\n const parts: (string | undefined)[] = [classes[\"surface\"]];\n if (inline) parts.push(classes[\"inline\"]);\n parts.push(borderSidesClass(borderSides));\n if (props.className) parts.push(props.className);\n const className = parts.filter(Boolean).join(\" \");\n\n const passthrough: Record<string, string | number | boolean> = {};\n for (const key of Object.keys(props)) {\n const isData = key.startsWith(\"data-\");\n const isAria = key.startsWith(\"aria-\");\n if (!isData && !isAria && key !== \"title\") continue;\n if (key === \"data-polly-surface\") continue;\n if (key === \"aria-label\" || key === \"aria-labelledby\" || key === \"aria-describedby\") continue;\n const value = (props as unknown as Record<string, unknown>)[key];\n if (value === undefined) continue;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n passthrough[key] = value;\n }\n }\n\n return createElement(\n as,\n {\n id: props.id,\n className,\n style,\n onClick: props.onClick,\n onKeyDown: props.onKeyDown,\n role: props.role,\n tabIndex: props.tabIndex,\n \"aria-label\": props[\"aria-label\"],\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"],\n \"data-polly-surface\": variant,\n \"data-polly-theme\": scheme,\n ...passthrough,\n },\n props.children\n );\n}\n",
|
|
15
15
|
"/**\n * Card — compound primitive that composes Surface for each named slot.\n *\n * Card is the first compound that is purely a re-skin of Surface — no\n * behavioural layer. Header, Body, and Footer are each Surfaces with\n * sensible defaults; Root is a raised Surface that wraps them. Every\n * slot accepts the full SurfaceProps, so consumers retint, override, or\n * reach for raw padding without reaching past the primitive.\n */\n\nimport type { JSX } from \"preact\";\nimport { Surface, type SurfaceProps } from \"./Surface.tsx\";\n\nexport type CardProps = SurfaceProps;\nexport type CardSlotProps = SurfaceProps;\n\nfunction Root(props: CardProps): JSX.Element {\n const { variant = \"raised\", radius = \"md\", ...rest } = props;\n return (\n <Surface variant={variant} radius={radius} data-polly-card {...rest}>\n {props.children}\n </Surface>\n );\n}\n\nfunction Header(props: CardSlotProps): JSX.Element {\n const {\n padding = \"var(--polly-space-md) var(--polly-space-lg)\",\n border = \"default\",\n borderSides = \"block-end\",\n ...rest\n } = props;\n return (\n <Surface\n padding={padding}\n border={border}\n borderSides={borderSides}\n data-polly-card-header\n {...rest}\n >\n {props.children}\n </Surface>\n );\n}\n\nfunction Body(props: CardSlotProps): JSX.Element {\n const { padding = \"var(--polly-space-lg)\", ...rest } = props;\n return (\n <Surface padding={padding} data-polly-card-body {...rest}>\n {props.children}\n </Surface>\n );\n}\n\nfunction Footer(props: CardSlotProps): JSX.Element {\n const {\n padding = \"var(--polly-space-md) var(--polly-space-lg)\",\n border = \"default\",\n borderSides = \"block-start\",\n ...rest\n } = props;\n return (\n <Surface\n padding={padding}\n border={border}\n borderSides={borderSides}\n data-polly-card-footer\n {...rest}\n >\n {props.children}\n </Surface>\n );\n}\n\nexport const Card = { Root, Header, Body, Footer };\n",
|
|
16
16
|
"/**\n * Checkbox — native checkbox wrapped in a label.\n *\n * Pass a plain boolean for controlled use (caller listens elsewhere),\n * or a Signal<boolean> to have the primitive bind its own change\n * listener and mutate the signal directly. The label wraps the input\n * so clicks anywhere in the target area toggle it.\n */\n\nimport type { Signal } from \"@preact/signals\";\nimport type { JSX } from \"preact\";\nimport classes from \"./Checkbox.module.css\";\n\nexport type CheckboxProps = {\n checked?: boolean | Signal<boolean>;\n defaultChecked?: boolean;\n name?: string;\n disabled?: boolean;\n label?: string;\n className?: string;\n id?: string;\n};\n\nfunction isSignal(value: unknown): value is Signal<boolean> {\n return typeof value === \"object\" && value !== null && \"value\" in value && \"peek\" in value;\n}\n\nexport function Checkbox(props: CheckboxProps): JSX.Element {\n const { checked, defaultChecked, name, disabled = false, label, className, id } = props;\n\n const handleChange = (e: JSX.TargetedEvent<HTMLInputElement>): void => {\n if (isSignal(checked)) {\n checked.value = e.currentTarget.checked;\n }\n };\n\n const checkedValue = isSignal(checked) ? checked.value : checked;\n\n const parts = [classes[\"checkbox\"]];\n if (disabled) parts.push(classes[\"disabled\"] ?? \"\");\n if (className) parts.push(className);\n\n return (\n <label class={parts.filter(Boolean).join(\" \")} data-polly-ui data-polly-checkbox>\n <input\n id={id}\n type=\"checkbox\"\n class={classes[\"input\"]}\n checked={checkedValue}\n defaultChecked={defaultChecked}\n name={name}\n disabled={disabled}\n onChange={handleChange}\n />\n {label !== undefined && <span class={classes[\"label\"]}>{label}</span>}\n </label>\n );\n}\n",
|
|
17
17
|
"/**\n * Cluster — wrapping row of variable-width items.\n *\n * The flex-wrap counterpart to <Layout>. Where Layout owns CSS grid\n * tracks, Cluster owns a row of items that differ in width and must\n * reflow as space runs out — filter chips, tag and badge lists, groups\n * of small buttons. Items keep even spacing on both axes via `gap`; the\n * row wraps automatically at narrow widths. Like Layout, props map to\n * CSS custom properties so consumers can override any of them in a\n * media query without touching specificity.\n *\n * This is the second (and final) layout primitive: a consumer never\n * writes `display: flex` or `display: grid` themselves — grid goes\n * through <Layout>, a wrapping cluster goes through <Cluster>.\n */\n\nimport { type ComponentChildren, createElement, type JSX } from \"preact\";\nimport classes from \"./Cluster.module.css\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\n\nexport type ClusterProps = PassthroughAttrs & {\n children: ComponentChildren;\n\n /** Polymorphic element (div, nav, ul, …). Defaults to 'div'. */\n as?: keyof JSX.IntrinsicElements;\n\n /** Space between items, both axes. Typically a `--polly-space-*` token. */\n gap?: string;\n padding?: string;\n\n /** Main-axis distribution — maps to justify-content. Default: start. */\n justify?: string;\n /** Cross-axis alignment within a wrapped row — maps to align-items. Default: center. */\n align?: string;\n\n /** Render as inline-flex so the cluster flows inline with surrounding text. */\n inline?: boolean;\n\n className?: string;\n id?: string;\n role?: JSX.AriaRole;\n \"aria-label\"?: string;\n};\n\nexport function Cluster(props: ClusterProps): JSX.Element {\n const { children, as = \"div\", gap, padding, justify, align, inline, className, id, role } = props;\n\n const style: Record<string, string> = {};\n if (gap) style[\"--c-gap\"] = gap;\n if (padding) style[\"--c-p\"] = padding;\n if (justify) style[\"--c-jc\"] = justify;\n if (align) style[\"--c-ai\"] = align;\n\n const parts = [classes[\"cluster\"]];\n if (inline) parts.push(classes[\"inline\"]);\n if (className) parts.push(className);\n\n return createElement(\n as,\n {\n // Consumer data-*/aria-* first; the primitive's own attributes win.\n ...collectPassthrough(props),\n id,\n class: parts.filter(Boolean).join(\" \"),\n style,\n role,\n \"aria-label\": props[\"aria-label\"],\n \"data-polly-ui\": true,\n \"data-polly-cluster\": true,\n },\n children\n );\n}\n",
|
|
18
18
|
"/**\n * Code — inline monospace code span.\n *\n * Renders a `<code>` with the `--polly-font-mono` stack, a faint sunken\n * tint, and snug padding so a consumer never hand-rolls a `.mono` class\n * for inline code, identifiers, or keyboard hints. For multi-line code\n * blocks, pass `block`, which switches to a pre-wrapped <pre><code>.\n */\n\nimport type { ComponentChildren, JSX } from \"preact\";\nimport classes from \"./Code.module.css\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\n\nexport type CodeProps = PassthroughAttrs & {\n children: ComponentChildren;\n /** Render as a block (<pre><code>) instead of an inline span. */\n block?: boolean;\n className?: string;\n id?: string;\n};\n\nexport function Code(props: CodeProps): JSX.Element {\n const { children, block, className, id } = props;\n\n // Consumer data-*/aria-* spread first; the explicit attributes after\n // win on any collision.\n const passthrough = collectPassthrough(props);\n\n if (block) {\n const parts = [classes[\"block\"]];\n if (className) parts.push(className);\n return (\n <pre\n {...passthrough}\n id={id}\n class={parts.filter(Boolean).join(\" \")}\n data-polly-ui\n data-polly-code=\"block\"\n >\n <code>{children}</code>\n </pre>\n );\n }\n\n const parts = [classes[\"code\"]];\n if (className) parts.push(className);\n return (\n <code\n {...passthrough}\n id={id}\n class={parts.filter(Boolean).join(\" \")}\n data-polly-ui\n data-polly-code=\"inline\"\n >\n {children}\n </code>\n );\n}\n",
|
|
19
|
-
"/**\n * Collapsible — native <details>/<summary> wrapper.\n *\n * Uses the browser's built-in disclosure semantics so keyboard and\n * screen-reader behaviour come free. A ::before arrow rotates on open.\n * Colors, spacing, and motion come from tokens; `prefers-reduced-motion`\n * zeroes the rotation via the motion token.\n */\n\nimport type { ComponentChildren, JSX } from \"preact\";\nimport classes from \"./Collapsible.module.css\";\n\nexport type CollapsibleProps = {\n summary:
|
|
19
|
+
"/**\n * Collapsible — native <details>/<summary> wrapper.\n *\n * Uses the browser's built-in disclosure semantics so keyboard and\n * screen-reader behaviour come free. A ::before arrow rotates on open.\n * Colors, spacing, and motion come from tokens; `prefers-reduced-motion`\n * zeroes the rotation via the motion token.\n */\n\nimport type { ComponentChildren, JSX } from \"preact\";\nimport classes from \"./Collapsible.module.css\";\n\nexport type CollapsibleProps = {\n /** Disclosure header. A string for the common case, or any node —\n * e.g. a muted, small <Text> — when the header needs styling. */\n summary: ComponentChildren;\n children: ComponentChildren;\n defaultOpen?: boolean;\n className?: string;\n id?: string;\n};\n\nexport function Collapsible(props: CollapsibleProps): JSX.Element {\n const { summary, children, defaultOpen = false, className, id } = props;\n const parts = [classes[\"collapsible\"]];\n if (className) parts.push(className);\n return (\n <details\n id={id}\n class={parts.join(\" \")}\n open={defaultOpen}\n data-polly-ui\n data-polly-collapsible\n >\n <summary class={classes[\"summary\"]}>{summary}</summary>\n <div class={classes[\"content\"]}>{children}</div>\n </details>\n );\n}\n",
|
|
20
20
|
"/**\n * ConfirmDialog — Promise-returning confirmation primitive.\n *\n * `confirm({ title, body, danger })` returns Promise<boolean>. Opens the\n * rendered `<ConfirmDialog.Host />` modal (which must be mounted once at\n * the app root). User picking confirm or cancel resolves the promise.\n * Escape, backdrop click, and explicit `.dismiss()` resolve false.\n */\n\nimport { signal } from \"@preact/signals\";\nimport type { JSX } from \"preact\";\nimport classes from \"./ConfirmDialog.module.css\";\nimport { Modal } from \"./Modal.tsx\";\n\ntype ConfirmRequest = {\n id: number;\n title: string;\n body?: string;\n danger?: boolean;\n confirmLabel?: string;\n cancelLabel?: string;\n resolve: (value: boolean) => void;\n};\n\nconst pending = signal<ConfirmRequest | null>(null);\nconst isOpen = signal(false);\nlet nextId = 0;\n\nexport type ConfirmOptions = {\n title: string;\n body?: string;\n danger?: boolean;\n confirmLabel?: string;\n cancelLabel?: string;\n};\n\nexport function confirm(options: ConfirmOptions): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n nextId += 1;\n pending.value = {\n id: nextId,\n title: options.title,\n body: options.body,\n danger: options.danger,\n confirmLabel: options.confirmLabel,\n cancelLabel: options.cancelLabel,\n resolve,\n };\n isOpen.value = true;\n });\n}\n\nfunction close(result: boolean): void {\n const current = pending.value;\n if (!current) return;\n isOpen.value = false;\n pending.value = null;\n current.resolve(result);\n}\n\n/** Renders the active confirm dialog. Mount once near the app root. */\nfunction Host(): JSX.Element | null {\n const current = pending.value;\n if (!current) return null;\n return (\n <Modal.Root when={isOpen} onClose={() => close(false)}>\n <Modal.Backdrop />\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>{current.title}</Modal.Title>\n </Modal.Header>\n {current.body ? <Modal.Body>{current.body}</Modal.Body> : null}\n <Modal.Footer>\n <div class={classes[\"actions\"]} data-polly-confirm-actions>\n <button\n type=\"button\"\n class={classes[\"cancel\"]}\n data-polly-ui\n data-polly-interactive\n data-polly-confirm-cancel\n onClick={() => close(false)}\n >\n {current.cancelLabel ?? \"Cancel\"}\n </button>\n <button\n type=\"button\"\n class={current.danger ? classes[\"confirmDanger\"] : classes[\"confirm\"]}\n data-polly-ui\n data-polly-interactive\n data-polly-confirm-ok\n onClick={() => close(true)}\n >\n {current.confirmLabel ?? \"OK\"}\n </button>\n </div>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n}\n\nexport const ConfirmDialog = { Host, confirm };\n",
|
|
21
21
|
"/**\n * Modal — compound dialog with focus trap, Escape handling, portal,\n * and overlay-stack integration.\n *\n * Root takes a `when` signal (or boolean). When truthy the content mounts\n * into the OverlayRoot portal, focus moves inside, Tab is trapped, Escape\n * fires `data-action=\"modal:close\"` (or the overlay registry's onClose\n * callback), and the body scroll locks.\n */\n\nimport type { ReadonlySignal } from \"@preact/signals\";\nimport { type ComponentChildren, createContext, type JSX } from \"preact\";\nimport { createPortal } from \"preact/compat\";\nimport { useContext, useEffect, useId, useRef, useState } from \"preact/hooks\";\nimport { popOverlay, pushOverlay } from \"../actions/overlay.ts\";\nimport { installFocusTrap } from \"./internal/focus-trap.ts\";\nimport classes from \"./Modal.module.css\";\nimport { getOverlayRootNode } from \"./OverlayRoot.tsx\";\nimport { Surface } from \"./Surface.tsx\";\n\ntype ModalContext = {\n id: string;\n titleId: string;\n descId: string;\n close: () => void;\n};\n\nconst Ctx = createContext<ModalContext | null>(null);\n\nfunction useModal(): ModalContext {\n const ctx = useContext(Ctx);\n if (!ctx) throw new Error(\"Modal sub-components must render inside <Modal.Root>\");\n return ctx;\n}\n\ntype RootProps = {\n when: ReadonlySignal<boolean> | boolean;\n onClose?: () => void;\n children: ComponentChildren;\n /** Accessible label source: \"title\" uses the <Modal.Title> id, or pass an explicit label. */\n \"aria-label\"?: string;\n};\n\nfunction Root({ when, onClose, children, \"aria-label\": ariaLabel }: RootProps) {\n const id = useId();\n const titleId = `${id}-title`;\n const descId = `${id}-desc`;\n const mountRef = useRef<HTMLDivElement | null>(null);\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n\n const isOpen = typeof when === \"boolean\" ? when : when.value;\n\n useEffect(() => {\n if (!isOpen) {\n setPortalNode(null);\n return;\n }\n setPortalNode(getOverlayRootNode());\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen || !portalNode) return;\n const entry = { id, onClose };\n pushOverlay(entry);\n const el = mountRef.current;\n const cleanup = el\n ? installFocusTrap(el)\n : () => {\n /* no ref yet */\n };\n return () => {\n cleanup();\n popOverlay(id);\n };\n }, [isOpen, portalNode, id, onClose]);\n\n if (!isOpen || !portalNode) return null;\n\n const close = () => {\n onClose?.();\n };\n\n const ctx: ModalContext = { id, titleId, descId, close };\n\n const content = (\n <Ctx.Provider value={ctx}>\n <div\n ref={mountRef}\n class={classes[\"container\"]}\n data-polly-ui\n data-polly-modal-content\n data-overlay-id={id}\n data-state=\"open\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={ariaLabel ? undefined : titleId}\n aria-label={ariaLabel}\n aria-describedby={descId}\n >\n {children}\n </div>\n </Ctx.Provider>\n );\n\n return createPortal(content, portalNode);\n}\n\nfunction Backdrop() {\n const { close } = useModal();\n return (\n <div class={classes[\"backdrop\"]} data-polly-modal-backdrop onClick={close} aria-hidden=\"true\" />\n );\n}\n\ntype ContentProps = {\n children: ComponentChildren;\n className?: string;\n style?: JSX.CSSProperties;\n};\n\nfunction Content({ children, className, style }: ContentProps) {\n const cls = className ? `${classes[\"surface\"]} ${className}` : classes[\"surface\"];\n return (\n <Surface\n variant=\"raised\"\n radius=\"lg\"\n shadow=\"lg\"\n position=\"relative\"\n className={cls}\n style={style}\n data-polly-modal-surface\n >\n {children}\n </Surface>\n );\n}\n\nfunction Header({ children }: { children: ComponentChildren }) {\n return (\n <header class={classes[\"header\"]} data-polly-modal-header>\n {children}\n </header>\n );\n}\n\nfunction Title({ children }: { children: ComponentChildren }) {\n const { titleId } = useModal();\n return (\n <h2 id={titleId} class={classes[\"title\"]} data-polly-modal-title>\n {children}\n </h2>\n );\n}\n\nfunction Body({ children }: { children: ComponentChildren }) {\n const { descId } = useModal();\n return (\n <div id={descId} class={classes[\"body\"]} data-polly-modal-body>\n {children}\n </div>\n );\n}\n\nfunction Footer({ children }: { children: ComponentChildren }) {\n return (\n <footer class={classes[\"footer\"]} data-polly-modal-footer>\n {children}\n </footer>\n );\n}\n\ntype CloseProps = {\n children: ComponentChildren;\n /** Fire a registered data-action instead of calling the onClose callback. */\n action?: string;\n};\n\nfunction Close({ children, action }: CloseProps) {\n const { close } = useModal();\n if (action) {\n return (\n <button\n type=\"button\"\n class={classes[\"close\"]}\n data-polly-ui\n data-polly-interactive\n data-polly-modal-close\n data-action={action}\n >\n {children}\n </button>\n );\n }\n return (\n <button\n type=\"button\"\n class={classes[\"close\"]}\n data-polly-ui\n data-polly-interactive\n data-polly-modal-close\n onClick={close}\n >\n {children}\n </button>\n );\n}\n\nexport const Modal = {\n Root,\n Backdrop,\n Content,\n Header,\n Title,\n Body,\n Footer,\n Close,\n};\n",
|
|
22
22
|
"/**\n * Overlay registry.\n *\n * Tracks the stack of open overlays (modals, popovers, confirm dialogs) so\n * Escape can close the topmost and `data-overlay-id`-based DOM scans have\n * a mirror in memory. Each entry stores an id plus an optional close\n * callback; `closeTopOverlay` invokes the callback and pops the entry.\n */\n\nimport { signal } from \"@preact/signals\";\n\nexport type OverlayEntry = {\n id: string;\n onClose?: () => void;\n};\n\nconst stack = signal<OverlayEntry[]>([]);\n\n/** Current overlay stack as a read-only snapshot. */\nexport function overlayStack(): readonly OverlayEntry[] {\n return stack.value;\n}\n\n/** Is any overlay currently open? */\nexport function hasOpenOverlay(): boolean {\n return stack.value.length > 0;\n}\n\n/** The top of the stack, or undefined if empty. */\nexport function topOverlay(): OverlayEntry | undefined {\n const s = stack.value;\n return s[s.length - 1];\n}\n\n/** Push an overlay onto the stack. Returns the popped entry when closed. */\nexport function pushOverlay(entry: OverlayEntry): void {\n stack.value = [...stack.value, entry];\n}\n\n/** Pop a specific overlay by id (or the top if no id given). */\nexport function popOverlay(id?: string): OverlayEntry | undefined {\n const s = stack.value;\n if (s.length === 0) return undefined;\n if (id === undefined) {\n const top = s[s.length - 1];\n stack.value = s.slice(0, -1);\n return top;\n }\n const idx = s.findIndex((e) => e.id === id);\n if (idx === -1) return undefined;\n const entry = s[idx];\n stack.value = [...s.slice(0, idx), ...s.slice(idx + 1)];\n return entry;\n}\n\n/** Close the top overlay by calling its onClose and popping it. */\nexport function closeTopOverlay(): OverlayEntry | undefined {\n const top = topOverlay();\n if (!top) return undefined;\n top.onClose?.();\n return popOverlay(top.id);\n}\n\n/** Reset the stack. Intended for tests. */\nexport function resetOverlayStack(): void {\n stack.value = [];\n}\n",
|
|
23
23
|
"/**\n * Focus trap.\n *\n * Keeps Tab / Shift+Tab inside a root element. Returns a cleanup that\n * restores focus to the element that was active before the trap mounted.\n * Simple and synchronous — assumes a single active trap per OverlayRoot\n * and lets the overlay registry in `@fairfox/polly/actions` enforce that\n * at the stack level.\n */\n\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"area[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled]):not([type=hidden])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"iframe\",\n \"object\",\n \"embed\",\n '[tabindex]:not([tabindex=\"-1\"])',\n \"[contenteditable]\",\n].join(\",\");\n\nfunction getFocusable(root: HTMLElement): HTMLElement[] {\n const nodes = Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n return nodes.filter(\n (el) => !el.hasAttribute(\"disabled\") && el.getAttribute(\"aria-hidden\") !== \"true\"\n );\n}\n\nexport function installFocusTrap(root: HTMLElement): () => void {\n const previousActive = (\n document.activeElement instanceof HTMLElement ? document.activeElement : null\n ) as HTMLElement | null;\n\n // Move focus into the root if it's not already.\n const focusable = getFocusable(root);\n const first = focusable[0] ?? root;\n if (!root.contains(document.activeElement)) {\n first.focus();\n }\n\n function handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== \"Tab\") return;\n const items = getFocusable(root);\n if (items.length === 0) {\n event.preventDefault();\n return;\n }\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n if (!firstItem || !lastItem) return;\n const active = document.activeElement;\n if (event.shiftKey) {\n if (active === firstItem || !root.contains(active)) {\n event.preventDefault();\n lastItem.focus();\n }\n } else if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n }\n\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n if (previousActive && document.contains(previousActive)) {\n previousActive.focus();\n }\n };\n}\n",
|
|
24
24
|
"/**\n * OverlayRoot — portal target for stacked overlays.\n *\n * Apps render <OverlayRoot /> once, typically as the last child of the\n * app root. Modal, ConfirmDialog, and Toast portal into this element;\n * the scroll lock toggles based on the overlay registry count.\n */\n\nimport { effect } from \"@preact/signals\";\nimport { useEffect, useRef } from \"preact/hooks\";\nimport { hasOpenOverlay } from \"../actions/overlay.ts\";\nimport { acquireScrollLock } from \"./internal/scroll-lock.ts\";\nimport classes from \"./OverlayRoot.module.css\";\n\nexport function OverlayRoot() {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n let release: (() => void) | null = null;\n const dispose = effect(() => {\n if (hasOpenOverlay()) {\n if (!release) release = acquireScrollLock();\n } else if (release) {\n release();\n release = null;\n }\n });\n return () => {\n dispose();\n release?.();\n };\n }, []);\n\n return <div ref={ref} class={classes[\"root\"]} data-polly-ui data-polly-overlay-root />;\n}\n\n/** Get the mount node for portaled overlays. Returns null before mount. */\nexport function getOverlayRootNode(): HTMLElement | null {\n return document.querySelector<HTMLElement>(\"[data-polly-overlay-root]\");\n}\n",
|
|
25
25
|
"/**\n * Scroll lock.\n *\n * Reference-counted. Multiple overlays can request a lock; the body\n * stays locked until every request releases. A scrollbar-gutter token\n * is written at acquire time so content behind the overlay doesn't\n * reflow when the bar disappears.\n */\n\nlet count = 0;\n\nexport function acquireScrollLock(): () => void {\n if (count === 0) {\n const html = document.documentElement;\n const gutter = window.innerWidth - html.clientWidth;\n html.style.setProperty(\"--polly-scrollbar-gutter\", `${gutter}px`);\n html.setAttribute(\"data-polly-scroll-locked\", \"true\");\n }\n count += 1;\n let released = false;\n return () => {\n if (released) return;\n released = true;\n count -= 1;\n if (count <= 0) {\n count = 0;\n const html = document.documentElement;\n html.removeAttribute(\"data-polly-scroll-locked\");\n html.style.removeProperty(\"--polly-scrollbar-gutter\");\n }\n };\n}\n",
|
|
26
|
+
"/**\n * FileInput — a styled trigger for the native file picker.\n *\n * A file is a binary object: it cannot ride a `data-action` attribute\n * the way a string value does, so FileInput is the one input primitive\n * that takes a callback. `onFiles` fires with the chosen FileList. The\n * native <input type=\"file\"> stays in the DOM — visually hidden inside\n * the <label> — so the whole control opens the picker and remains\n * keyboard-accessible (polly#135).\n */\n\nimport type { JSX } from \"preact\";\nimport classes from \"./FileInput.module.css\";\n\nexport type FileInputProps = {\n /** Fired with the chosen files whenever the selection changes. */\n onFiles: (files: FileList) => void;\n /** Visible trigger text. Default: 'Choose file'. */\n label?: string;\n /** `accept` filter forwarded to the native input (e.g. 'image/*'). */\n accept?: string;\n /** Allow selecting more than one file. */\n multiple?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n};\n\nexport function FileInput(props: FileInputProps): JSX.Element {\n const { onFiles, label = \"Choose file\", accept, multiple, disabled, className, id } = props;\n\n const handleChange = (e: JSX.TargetedEvent<HTMLInputElement>): void => {\n const { files } = e.currentTarget;\n if (files && files.length > 0) onFiles(files);\n };\n\n const parts = [classes[\"fileInput\"]];\n if (disabled) parts.push(classes[\"disabled\"]);\n if (className) parts.push(className);\n\n return (\n <label id={id} class={parts.filter(Boolean).join(\" \")} data-polly-ui data-polly-file-input>\n <input\n type=\"file\"\n class={classes[\"native\"]}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleChange}\n />\n <span>{label}</span>\n </label>\n );\n}\n",
|
|
27
|
+
"/**\n * Html — render trusted, already-sanitised raw markup.\n *\n * The deliberate escape hatch for the rare thing polly-ui cannot\n * express: a locally generated, already-safe SVG (a QR code), a\n * pre-rendered diagram. The caller owns safety — `html` goes straight\n * into `dangerouslySetInnerHTML`, so it MUST be trusted or sanitised\n * first. For untrusted markdown use `renderMarkdown`, which sanitises;\n * for anything a primitive already covers, use the primitive.\n */\n\nimport { createElement, type JSX } from \"preact\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\n\nexport type HtmlProps = PassthroughAttrs & {\n /** Trusted, already-sanitised HTML. The caller owns its safety. */\n html: string;\n /** Polymorphic wrapper element (div, span, figure, …). Defaults to 'div'. */\n as?: keyof JSX.IntrinsicElements;\n className?: string;\n id?: string;\n};\n\nexport function Html(props: HtmlProps): JSX.Element {\n const { html, as = \"div\", className, id } = props;\n\n return createElement(as, {\n // Consumer data-*/aria-*/title first; the primitive's own\n // attributes below win on any collision.\n ...collectPassthrough(props),\n id,\n class: className,\n \"data-polly-ui\": true,\n \"data-polly-html\": true,\n dangerouslySetInnerHTML: { __html: html },\n });\n}\n",
|
|
28
|
+
"/**\n * Link — token-styled navigational anchor.\n *\n * The primitive for plain hyperlinks: hub app-grid cards, a file\n * download, an external reference. <Button href> is for link-shaped\n * BUTTONS — a call to action wearing button chrome; <Link> is for\n * inline, textual links that read as links. `external` opens a new tab\n * with `rel=\"noopener noreferrer\"`; `download` offers the target as a\n * file (an empty string keeps the resource's own filename).\n */\n\nimport type { ComponentChildren, JSX } from \"preact\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\nimport classes from \"./Link.module.css\";\n\nexport type LinkProps = PassthroughAttrs & {\n children: ComponentChildren;\n href: string;\n /** Open in a new tab with rel=\"noopener noreferrer\". */\n external?: boolean;\n /** Offer the href as a download; an empty string keeps its filename. */\n download?: string;\n /** Drop the underline until hover — for link grids and card links. */\n subtle?: boolean;\n className?: string;\n id?: string;\n};\n\nexport function Link(props: LinkProps): JSX.Element {\n const { children, href, external, download, subtle, className, id } = props;\n\n const parts = [classes[\"link\"]];\n if (subtle) parts.push(classes[\"subtle\"]);\n if (className) parts.push(className);\n\n return (\n <a\n {...collectPassthrough(props)}\n id={id}\n class={parts.filter(Boolean).join(\" \")}\n href={href}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n download={download}\n data-polly-ui\n data-polly-link\n >\n {children}\n </a>\n );\n}\n",
|
|
29
|
+
"/**\n * Output — read-only, multi-line diagnostic text.\n *\n * For program output a consumer must SHOW but not edit: a mesh-state\n * snapshot, a per-peer sync table, a recovery blob. <TextInput> and\n * <ActionInput> are single-line and editable; <Code> is for code\n * samples and never wraps. <Output> renders a monospace <pre> that\n * wraps long lines by default — a diagnostic dump should stay on\n * screen — with `scroll` to switch to a horizontal scrollbar instead.\n *\n * It carries the polly#125 passthrough surface, so a `data-action`\n * for a tap-to-select-all gesture rides straight onto the <pre>\n * (polly#135).\n */\n\nimport type { ComponentChildren, JSX } from \"preact\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\nimport classes from \"./Output.module.css\";\n\nexport type OutputProps = PassthroughAttrs & {\n children: ComponentChildren;\n /** Scroll long unbreakable lines horizontally instead of wrapping. */\n scroll?: boolean;\n /** Make the block focusable — pair with a `data-action` tap gesture. */\n tabIndex?: number;\n className?: string;\n id?: string;\n};\n\nexport function Output(props: OutputProps): JSX.Element {\n const { children, scroll, tabIndex, className, id } = props;\n\n const parts = [classes[\"output\"]];\n if (scroll) parts.push(classes[\"scroll\"]);\n if (className) parts.push(className);\n\n return (\n <pre\n {...collectPassthrough(props)}\n id={id}\n class={parts.filter(Boolean).join(\" \")}\n tabIndex={tabIndex}\n data-polly-ui\n data-polly-output\n >\n {children}\n </pre>\n );\n}\n",
|
|
26
30
|
"/**\n * Select — dropdown of options with single- or multi-select semantics.\n *\n * Composes Dropdown for the menu and a native checkbox in each option\n * row for multi-select. The `selected` state is a Signal<Set<T>>;\n * single-select replaces the set, multi-select toggles membership.\n * Multi-select mode also shows Select All / Clear action buttons at\n * the top of the menu.\n */\n\nimport { type Signal, useComputed, useSignal } from \"@preact/signals\";\nimport type { JSX } from \"preact\";\nimport { Dropdown } from \"./Dropdown.tsx\";\nimport { Layout } from \"./Layout.tsx\";\nimport classes from \"./Select.module.css\";\n\nexport type SelectOption<T = string> = { value: T; label: string };\n\nexport type SelectProps<T = string> = {\n options: SelectOption<T>[];\n selected: Signal<Set<T>>;\n label?: string;\n placeholder?: string;\n multiSelect?: boolean;\n disabled?: boolean;\n /** Apply a comfortable minimum width to the trigger. Default: sizes to content. */\n wide?: boolean;\n className?: string;\n id?: string;\n};\n\nfunction formatSelected<T>(options: SelectOption<T>[], selected: Set<T>): string {\n if (selected.size === 0) return \"\";\n const labels: string[] = [];\n for (const opt of options) {\n if (selected.has(opt.value)) labels.push(opt.label);\n }\n return labels.join(\", \");\n}\n\nexport function Select<T = string>(props: SelectProps<T>): JSX.Element {\n const {\n options,\n selected,\n label,\n placeholder = \"Select\\u2026\",\n multiSelect = false,\n disabled = false,\n wide = false,\n className,\n id,\n } = props;\n\n const isOpen = useSignal(false);\n\n const displayText = useComputed(() => {\n const text = formatSelected(options, selected.value);\n return text.length > 0 ? text : placeholder;\n });\n\n const isEmpty = useComputed(() => selected.value.size === 0);\n\n const handleOptionClick = (value: T): void => {\n if (multiSelect) {\n const next = new Set(selected.value);\n if (next.has(value)) next.delete(value);\n else next.add(value);\n selected.value = next;\n } else {\n selected.value = new Set([value]);\n isOpen.value = false;\n }\n };\n\n const handleSelectAll = (): void => {\n selected.value = new Set(options.map((o) => o.value));\n };\n\n const handleClear = (): void => {\n selected.value = new Set();\n };\n\n const triggerParts = [classes[\"trigger\"] ?? \"\"];\n if (isEmpty.value) triggerParts.push(classes[\"placeholder\"] ?? \"\");\n if (wide) triggerParts.push(classes[\"triggerWide\"] ?? \"\");\n const triggerClass = triggerParts.filter(Boolean).join(\" \");\n const triggerContent = (\n <>\n <span class={classes[\"triggerLabel\"]}>{displayText.value}</span>\n <span class={classes[\"caret\"]} aria-hidden=\"true\" />\n </>\n );\n\n const parts = [classes[\"select\"] ?? \"\"];\n if (className) parts.push(className);\n\n return (\n <div id={id} class={parts.filter(Boolean).join(\" \")} data-polly-ui data-polly-select>\n {label !== undefined && <span class={classes[\"label\"]}>{label}</span>}\n <Dropdown\n isOpen={isOpen}\n trigger={triggerContent}\n triggerClassName={triggerClass}\n triggerDisabled={disabled}\n multiSelect={multiSelect}\n >\n {multiSelect && (\n <div class={classes[\"actions\"]}>\n <Layout columns=\"1fr 1fr\" gap=\"var(--polly-space-xs)\">\n <button type=\"button\" class={classes[\"actionBtn\"]} onClick={handleSelectAll}>\n Select All\n </button>\n <button type=\"button\" class={classes[\"actionBtn\"]} onClick={handleClear}>\n Clear\n </button>\n </Layout>\n </div>\n )}\n {options.map((opt) => {\n const isSelected = selected.value.has(opt.value);\n const optClass = isSelected\n ? `${classes[\"option\"]} ${classes[\"optionSelected\"]}`\n : classes[\"option\"];\n return (\n <button\n key={String(opt.value)}\n type=\"button\"\n class={optClass}\n onClick={() => handleOptionClick(opt.value)}\n >\n {multiSelect && (\n <input\n type=\"checkbox\"\n class={classes[\"optionCheck\"]}\n checked={isSelected}\n tabIndex={-1}\n readOnly={true}\n />\n )}\n <span>{opt.label}</span>\n </button>\n );\n })}\n </Dropdown>\n </div>\n );\n}\n",
|
|
27
31
|
"/**\n * Skeleton — shimmering placeholder for loading states.\n *\n * Three variants: text (full-width, 1em tall), rect (full-width, 100px\n * tall), circle (40x40). A CSS gradient animates left-to-right over\n * 1.5s. `prefers-reduced-motion` zeroes the animation via the token\n * system. Consumers size via width/height props (px numbers or CSS\n * strings); default sizing comes from the variant.\n */\n\nimport type { JSX } from \"preact\";\nimport classes from \"./Skeleton.module.css\";\n\nexport type SkeletonVariant = \"text\" | \"rect\" | \"circle\";\n\nexport type SkeletonProps = {\n variant?: SkeletonVariant;\n width?: string | number;\n height?: string | number;\n className?: string;\n};\n\nfunction resolveSize(value: string | number | undefined): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return `${value}px`;\n return value;\n}\n\nfunction variantClass(variant: SkeletonVariant): string | undefined {\n if (variant === \"circle\") return classes[\"circle\"];\n if (variant === \"rect\") return classes[\"rect\"];\n return classes[\"text\"];\n}\n\nexport function Skeleton(props: SkeletonProps): JSX.Element {\n const { variant = \"text\", width, height, className } = props;\n\n const style: Record<string, string> = {};\n const w = resolveSize(width);\n const h = resolveSize(height);\n if (w !== undefined) style[\"width\"] = w;\n if (h !== undefined) style[\"height\"] = h;\n\n const parts: string[] = [];\n const base = classes[\"skeleton\"];\n if (base) parts.push(base);\n const vClass = variantClass(variant);\n if (vClass) parts.push(vClass);\n if (className) parts.push(className);\n\n return (\n <span\n class={parts.join(\" \")}\n style={style}\n data-polly-ui\n data-polly-skeleton={variant}\n aria-hidden=\"true\"\n />\n );\n}\n",
|
|
28
32
|
"/**\n * Tabs — horizontal nav with active-tab accent.\n *\n * Each button carries `data-action` (the consumer-provided action name)\n * and `data-action-id={tab.id}` so the event delegator resolves the\n * activated tab. The active tab gets `aria-current=\"page\"` and a\n * bottom-border accent. The nav scrolls horizontally with a hidden\n * scrollbar for overflow. Internal arrangement uses <Layout>.\n */\n\nimport type { JSX } from \"preact\";\nimport { Layout } from \"./Layout.tsx\";\nimport classes from \"./Tabs.module.css\";\n\nexport type Tab = { id: string; label: string; disabled?: boolean };\n\nexport type TabsProps = {\n tabs: Tab[];\n activeTab: string;\n action?: string;\n className?: string;\n id?: string;\n \"aria-label\"?: string;\n};\n\nexport function Tabs(props: TabsProps): JSX.Element {\n const { tabs, activeTab, action, className, id } = props;\n const parts = [classes[\"tabs\"] ?? \"\"];\n if (className) parts.push(className);\n return (\n <nav\n id={id}\n class={parts.filter(Boolean).join(\" \")}\n aria-label={props[\"aria-label\"]}\n data-polly-ui\n data-polly-tabs\n >\n <Layout columns={`repeat(${tabs.length}, auto)`} gap=\"0\" alignItems=\"end\">\n {tabs.map((tab) => {\n const isActive = activeTab === tab.id;\n const tabClass = isActive ? `${classes[\"tab\"]} ${classes[\"active\"]}` : classes[\"tab\"];\n return (\n <button\n key={tab.id}\n type=\"button\"\n class={tabClass}\n disabled={tab.disabled}\n aria-current={isActive ? \"page\" : undefined}\n data-action={action}\n data-action-id={tab.id}\n >\n {tab.label}\n </button>\n );\n })}\n </Layout>\n </nav>\n );\n}\n",
|
|
29
|
-
"/**\n * Text — typographic primitive for secondary, sized, and status copy.\n *\n * Renders subtitles, captions, field labels, empty-state copy, and\n * error/warning messages without the consumer reaching for a `style`\n * attribute or a hand-rolled class. `tone` maps to the semantic\n * `--polly-text-*` and `--polly-status-*` token families; `size`,\n * `weight`, `italic`, and `leading` cover the remaining typographic\n * axes. `as` keeps the element polymorphic so the same primitive backs a\n * <span>, <p>, <label>, or <figcaption>. A no-prop <Text> is an ordinary\n * <span> at body size and default colour.\n *\n * polly#125: arbitrary `data-*` / `aria-*` attributes are forwarded to\n * the rendered element, so a Text that also needs a test hook or an\n * a11y attribute stays a single element.\n */\n\nimport { type ComponentChildren, createElement, type JSX } from \"preact\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\nimport classes from \"./Text.module.css\";\n\nexport type TextTone = \"default\" | \"muted\" | \"danger\" | \"warning\" | \"success\";\nexport type TextSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type TextWeight = \"normal\" | \"medium\" | \"bold\";\nexport type TextLeading = \"tight\" | \"base\" | \"loose\";\n\nexport type TextProps = PassthroughAttrs & {\n children: ComponentChildren;\n\n /** Polymorphic element (span, p, label, figcaption, …). Defaults to 'span'. */\n as?: keyof JSX.IntrinsicElements;\n\n /** Colour role. 'muted' de-emphasises; 'danger'/'warning'/'success'\n * render status copy from the `--polly-status-*` tokens. Default: 'default'. */\n tone?: TextTone;\n\n /** Token-backed font size. Default: inherit from context. */\n size?: TextSize;\n\n /** Token-backed font weight. Default: inherit from context. */\n weight?: TextWeight;\n\n /** Italic emphasis — for hints and asides — without an inline style. */\n italic?: boolean;\n\n /** Token-backed line height. 'loose' suits multi-line body copy. */\n leading?: TextLeading;\n\n className?: string;\n id?: string;\n /** Forwarded so <Text as=\"label\"> can point at a control. */\n htmlFor?: string;\n};\n\nexport function Text(props: TextProps): JSX.Element {\n const {\n children,\n as = \"span\",\n tone = \"default\",\n size,\n weight,\n italic,\n leading,\n className,\n id,\n } = props;\n\n const parts = [classes[\"text\"]];\n if (tone !== \"default\") parts.push(classes[tone]);\n if (size) parts.push(classes[size]);\n if (weight) parts.push(classes[weight]);\n if (italic) parts.push(classes[\"italic\"]);\n if (leading) parts.push(classes[leading]);\n if (className) parts.push(className);\n\n return createElement(\n as,\n {\n // Consumer data-*/aria-* first; the primitive's own attributes\n // below win on any collision.\n ...collectPassthrough(props),\n id,\n class: parts.filter(Boolean).join(\" \"),\n for: props.htmlFor,\n \"data-polly-ui\": true,\n \"data-polly-text\": tone,\n },\n children\n );\n}\n",
|
|
33
|
+
"/**\n * Text — typographic primitive for secondary, sized, and status copy.\n *\n * Renders subtitles, captions, field labels, empty-state copy, and\n * error/warning messages without the consumer reaching for a `style`\n * attribute or a hand-rolled class. `tone` maps to the semantic\n * `--polly-text-*` and `--polly-status-*` token families; `size`,\n * `weight`, `italic`, and `leading` cover the remaining typographic\n * axes. `as` keeps the element polymorphic so the same primitive backs a\n * <span>, <p>, <label>, or <figcaption>. A no-prop <Text> is an ordinary\n * <span> at body size and default colour.\n *\n * polly#125: arbitrary `data-*` / `aria-*` attributes are forwarded to\n * the rendered element, so a Text that also needs a test hook or an\n * a11y attribute stays a single element.\n */\n\nimport { type ComponentChildren, createElement, type JSX } from \"preact\";\nimport { collectPassthrough, type PassthroughAttrs } from \"./internal/passthrough.ts\";\nimport classes from \"./Text.module.css\";\n\nexport type TextTone = \"default\" | \"muted\" | \"danger\" | \"warning\" | \"success\";\nexport type TextSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type TextWeight = \"normal\" | \"medium\" | \"bold\";\nexport type TextLeading = \"tight\" | \"base\" | \"loose\";\n\nexport type TextProps = PassthroughAttrs & {\n children: ComponentChildren;\n\n /** Polymorphic element (span, p, label, figcaption, …). Defaults to 'span'. */\n as?: keyof JSX.IntrinsicElements;\n\n /** Colour role. 'muted' de-emphasises; 'danger'/'warning'/'success'\n * render status copy from the `--polly-status-*` tokens. Default: 'default'. */\n tone?: TextTone;\n\n /** Token-backed font size. Default: inherit from context. */\n size?: TextSize;\n\n /** Token-backed font weight. Default: inherit from context. */\n weight?: TextWeight;\n\n /** Italic emphasis — for hints and asides — without an inline style. */\n italic?: boolean;\n\n /** Line-through — for completed todo items and superseded copy. */\n strikethrough?: boolean;\n\n /** Token-backed line height. 'loose' suits multi-line body copy. */\n leading?: TextLeading;\n\n className?: string;\n id?: string;\n /** Forwarded so <Text as=\"label\"> can point at a control. */\n htmlFor?: string;\n};\n\nexport function Text(props: TextProps): JSX.Element {\n const {\n children,\n as = \"span\",\n tone = \"default\",\n size,\n weight,\n italic,\n strikethrough,\n leading,\n className,\n id,\n } = props;\n\n const parts = [classes[\"text\"]];\n if (tone !== \"default\") parts.push(classes[tone]);\n if (size) parts.push(classes[size]);\n if (weight) parts.push(classes[weight]);\n if (italic) parts.push(classes[\"italic\"]);\n if (strikethrough) parts.push(classes[\"strikethrough\"]);\n if (leading) parts.push(classes[leading]);\n if (className) parts.push(className);\n\n return createElement(\n as,\n {\n // Consumer data-*/aria-* first; the primitive's own attributes\n // below win on any collision.\n ...collectPassthrough(props),\n id,\n class: parts.filter(Boolean).join(\" \"),\n for: props.htmlFor,\n \"data-polly-ui\": true,\n \"data-polly-text\": tone,\n },\n children\n );\n}\n",
|
|
30
34
|
"/**\n * Shared input a11y wiring.\n *\n * Returns a common set of attributes that TextInput, ActionInput, and\n * any consumer-built input can splat onto its native element. Keeps\n * aria-* and data-polly-* names consistent across the family.\n */\n\nexport type InputA11yProps = {\n name?: string;\n id?: string;\n required?: boolean;\n invalid?: boolean;\n describedBy?: string;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n};\n\nexport function buildInputA11y(props: InputA11yProps) {\n const attrs: Record<string, unknown> = {\n \"data-polly-ui\": true,\n \"data-polly-input\": true,\n \"aria-invalid\": props.invalid ? \"true\" : undefined,\n \"aria-required\": props.required ? \"true\" : undefined,\n \"aria-describedby\": props.describedBy,\n name: props.name,\n id: props.id,\n placeholder: props.placeholder,\n disabled: props.disabled,\n readOnly: props.readOnly,\n };\n if (props.invalid) attrs[\"data-state\"] = \"invalid\";\n return attrs;\n}\n",
|
|
31
35
|
"/**\n * TextInput — passive, signal-friendly native input wrapper.\n *\n * Designed to live inside <ActionForm>. Pass a plain string for\n * uncontrolled mode (FormData-on-submit picks up the value) or a\n * Signal<string> for controlled mode. Either way, a11y attributes are\n * wired by the shared input-base, the stable `[data-polly-input]` hook\n * is applied for styling, and `invalid` flips `aria-invalid` and\n * `data-state=\"invalid\"` for consumer selectors.\n */\n\nimport type { Signal } from \"@preact/signals\";\nimport type { JSX } from \"preact\";\nimport { buildInputA11y } from \"./internal/input-base.ts\";\nimport classes from \"./TextInput.module.css\";\n\ntype Variant = \"single\" | \"multi\";\n\nexport type TextInputProps = {\n name: string;\n /** Signal<string> for controlled, string for uncontrolled default. */\n value?: Signal<string> | string;\n variant?: Variant;\n placeholder?: string;\n invalid?: boolean;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n id?: string;\n describedBy?: string;\n rows?: number;\n autoFocus?: boolean;\n className?: string;\n};\n\nfunction isSignal<T>(v: Signal<T> | T | undefined): v is Signal<T> {\n return typeof v === \"object\" && v !== null && \"value\" in v && \"peek\" in (v as unknown as object);\n}\n\nexport function TextInput(props: TextInputProps): JSX.Element {\n const variant = props.variant ?? \"single\";\n const a11y = buildInputA11y({\n name: props.name,\n id: props.id,\n required: props.required,\n invalid: props.invalid,\n describedBy: props.describedBy,\n placeholder: props.placeholder,\n disabled: props.disabled,\n readOnly: props.readOnly,\n });\n\n const controlled = isSignal(props.value);\n const stringValue = controlled ? (props.value as unknown as Signal<string>).value : undefined;\n const defaultValue = controlled\n ? undefined\n : ((props.value as unknown as string | undefined) ?? \"\");\n\n const className = props.className ? `${classes[\"input\"]} ${props.className}` : classes[\"input\"];\n\n if (variant === \"multi\") {\n return (\n <textarea\n {...(a11y as unknown as JSX.HTMLAttributes<HTMLTextAreaElement>)}\n class={className}\n data-polly-input-variant=\"multi\"\n rows={props.rows}\n // biome-ignore lint/a11y/noAutofocus: opt-in prop — caller requests autofocus explicitly (e.g. form opens to this field).\n autoFocus={props.autoFocus}\n value={stringValue}\n defaultValue={defaultValue}\n onInput={(e) => {\n if (controlled) {\n (props.value as unknown as Signal<string>).value = e.currentTarget.value;\n }\n }}\n />\n );\n }\n\n return (\n <input\n {...(a11y as unknown as JSX.HTMLAttributes<HTMLInputElement>)}\n type=\"text\"\n class={className}\n data-polly-input-variant=\"single\"\n // biome-ignore lint/a11y/noAutofocus: opt-in prop — caller requests autofocus explicitly (e.g. form opens to this field).\n autoFocus={props.autoFocus}\n value={stringValue}\n defaultValue={defaultValue}\n onInput={(e) => {\n if (controlled) {\n (props.value as unknown as Signal<string>).value = e.currentTarget.value;\n }\n }}\n />\n );\n}\n",
|
|
32
36
|
"/**\n * Toast — consumer-facing surface for the global errorState.\n *\n * Renders every entry of the `errorState` signal into a viewport mounted\n * inside OverlayRoot. `aria-live` is polite for info/warning and\n * assertive for error severity. Each item auto-dismisses after\n * `autoDismissMs` unless the user hovers the viewport. Clicking a\n * toast or its close button removes that single entry.\n */\n\nimport type { JSX } from \"preact\";\nimport { createPortal } from \"preact/compat\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { clearError, type ErrorEntry, errorState } from \"../actions/error.ts\";\nimport { getOverlayRootNode } from \"./OverlayRoot.tsx\";\nimport { Surface } from \"./Surface.tsx\";\nimport classes from \"./Toast.module.css\";\n\nexport type ToastViewportProps = {\n autoDismissMs?: number;\n className?: string;\n};\n\nfunction Viewport(props: ToastViewportProps): JSX.Element | null {\n const autoDismissMs = props.autoDismissMs ?? 5000;\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n const [paused, setPaused] = useState(false);\n const entries = errorState.value;\n\n useEffect(() => {\n setPortalNode(getOverlayRootNode());\n }, []);\n\n useEffect(() => {\n if (paused || entries.length === 0) return;\n const head = entries[0];\n if (!head) return;\n const timer = window.setTimeout(() => {\n clearError(head.id);\n }, autoDismissMs);\n return () => window.clearTimeout(timer);\n }, [paused, entries, autoDismissMs]);\n\n if (!portalNode) return null;\n\n const content = (\n // biome-ignore lint/a11y/noStaticElementInteractions: viewport pauses auto-dismiss on hover; it is a container, not an interactive control itself.\n <div\n class={`${classes[\"viewport\"]} ${props.className ?? \"\"}`.trim()}\n data-polly-ui\n data-polly-toast-viewport\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n >\n {entries.map((entry) => (\n <ToastItem key={entry.id} entry={entry} />\n ))}\n </div>\n );\n return createPortal(content, portalNode);\n}\n\nfunction ToastItem({ entry }: { entry: ErrorEntry }): JSX.Element {\n const liveness = entry.severity === \"error\" ? \"assertive\" : \"polite\";\n return (\n <Surface\n variant=\"raised\"\n padding=\"var(--polly-space-md) var(--polly-space-lg)\"\n className={classes[\"item\"]}\n data-polly-ui\n data-polly-toast-item\n data-severity={entry.severity}\n role={entry.severity === \"error\" ? \"alert\" : \"status\"}\n aria-live={liveness}\n >\n <span class={classes[\"message\"]}>{entry.message}</span>\n <button\n type=\"button\"\n class={classes[\"close\"]}\n data-polly-ui\n data-polly-interactive\n data-polly-toast-close\n onClick={() => clearError(entry.id)}\n aria-label=\"Dismiss\"\n >\n ×\n </button>\n </Surface>\n );\n}\n\nexport const Toast = { Viewport };\n",
|
|
33
37
|
"/**\n * Global error surface for action handlers.\n *\n * Actions that fail set the errorState signal via `submitError`; a `<Toast>`\n * component consumes that signal and renders a dismissable message. Handlers\n * that catch expected failures (validation, quota) may call `setError` directly.\n */\n\nimport { signal } from \"@preact/signals\";\n\nexport type ErrorSeverity = \"error\" | \"warning\" | \"info\";\n\nexport type ErrorEntry = {\n id: string;\n message: string;\n severity: ErrorSeverity;\n action?: string;\n createdAt: number;\n};\n\nexport const errorState = signal<ErrorEntry[]>([]);\n\nlet nextId = 0;\nfunction allocId(): string {\n nextId += 1;\n return `polly-err-${nextId}`;\n}\n\nexport function setError(\n message: string,\n opts: { severity?: ErrorSeverity; action?: string } = {}\n): string {\n const entry: ErrorEntry = {\n id: allocId(),\n message,\n severity: opts.severity ?? \"error\",\n action: opts.action,\n createdAt: Date.now(),\n };\n errorState.value = [...errorState.value, entry];\n return entry.id;\n}\n\nexport function clearError(id?: string): void {\n if (id === undefined) {\n errorState.value = [];\n return;\n }\n errorState.value = errorState.value.filter((e) => e.id !== id);\n}\n\n/**\n * Convenience wrapper for an action's catch block.\n * Logs the action name + error and surfaces a user-visible message.\n */\nexport function submitError(action: string, err: unknown): string {\n const message = err instanceof Error ? err.message : String(err);\n return setError(message, { action, severity: \"error\" });\n}\n",
|
|
34
38
|
"/**\n * Toggle — switch-role checkbox.\n *\n * A visually-hidden <input role=\"switch\"> paired with a styled track\n * and thumb inside a <label>. Passive: the caller drives `checked` and\n * handles state changes via the action registry (wrap the Toggle in a\n * <label data-action=\"...\"> or bind a parent form's submit). a11y\n * attributes come from the native input; the label wraps so clicks\n * anywhere in the control toggle the input.\n */\n\nimport type { JSX } from \"preact\";\nimport classes from \"./Toggle.module.css\";\n\nexport type ToggleProps = {\n checked?: boolean;\n disabled?: boolean;\n label?: string;\n name?: string;\n className?: string;\n id?: string;\n};\n\nexport function Toggle(props: ToggleProps): JSX.Element {\n const { checked = false, disabled = false, label, name, className, id } = props;\n const parts = [classes[\"toggle\"]];\n if (disabled) parts.push(classes[\"disabled\"]);\n if (className) parts.push(className);\n return (\n <label class={parts.join(\" \")} data-polly-ui data-polly-toggle>\n <input\n id={id}\n type=\"checkbox\"\n role=\"switch\"\n name={name}\n aria-checked={checked}\n class={classes[\"input\"]}\n checked={checked}\n disabled={disabled}\n />\n <span class={checked ? `${classes[\"track\"]} ${classes[\"trackChecked\"]}` : classes[\"track\"]}>\n <span\n class={checked ? `${classes[\"thumb\"]} ${classes[\"thumbChecked\"]}` : classes[\"thumb\"]}\n />\n </span>\n {label !== undefined && <span class={classes[\"label\"]}>{label}</span>}\n </label>\n );\n}\n"
|
|
35
39
|
],
|
|
36
|
-
"mappings": "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",
|
|
37
|
-
"debugId": "
|
|
40
|
+
"mappings": "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",
|
|
41
|
+
"debugId": "5574312029A6A13F64756E2164756E21",
|
|
38
42
|
"names": []
|
|
39
43
|
}
|