panelize 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/LICENSE +21 -0
- package/README.md +617 -2
- package/dist/index.d.cts +1815 -0
- package/dist/index.d.ts +1815 -0
- package/dist/panelize.cjs +858 -0
- package/dist/panelize.cjs.map +1 -0
- package/dist/panelize.es.js +3011 -0
- package/dist/panelize.es.js.map +1 -0
- package/docs/accessibility.md +43 -0
- package/docs/components.md +61 -0
- package/docs/composition.md +138 -0
- package/docs/controls.md +47 -0
- package/docs/forms.md +64 -0
- package/docs/layout.md +59 -0
- package/docs/recipes.md +170 -0
- package/docs/shell.md +57 -0
- package/docs/text.md +26 -0
- package/docs/theme.md +121 -0
- package/examples/AGENTS.md +9 -0
- package/examples/cursor-rule.mdc +17 -0
- package/examples/panelize.theme.md +312 -0
- package/llms-full.txt +1206 -0
- package/llms.txt +51 -0
- package/package.json +105 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panelize.es.js","names":["StyledOption","_Fragment","_Fragment","panelVariants","panelTextRoles","colorSchemeTokens","brandTokens","statusTokens","brandStateTokens","spaceTokens","alignValues","scrollValues","breakpointTokens","fontSizeTokens","fontWeightTokens","fontFamilyTokens","headingLevels","defaultSpace","isSpaceToken","value","resolveScaleValue","resolved","fallback","scale","resolveSide","end","axis","all","space","resolveBoxEdges","paddingAll","props","marginAll","takeBoxLayout","rest","resolveSizeLimits","resolveBoxSize","fallbacks","sizeCss","width","size","fill","height","sizeLimitCss","limits","boxEdgesCss","edges","defaultBorderWidths","defaultRadii","isPaintStepsRecord","resolveBorderSide","widths","resolveBorderEdges","resolvePaintValue","override","surface","colors","role","brand","step","status","resolvePaintSteps","token","resolveBorderColor","variant","defaultBreakpoints","isBreakpointToken","resolveBreakpointValue","stackGridQueryCss","cols","stackedCols","columns","maxWidth","stackQueryCss","stackedJustify","gridItemAlignCss","alignX","alignY","gridSelfAlignCss","defaultFlexAlign","column","flexAlignCss","justify","align","resolveAlignValue","flexItemCss","flex","shrinkZeroUntilFlex","stackedMainAlign","scrollCss","scroll","y","x","TrackContext","createContext","TrackProvider","kind","useTrackKind","useContext","selfAlignCss","grayTokens","grayRampTokens","grayRamp","palette","parseHex","raw","hex","short","full","toHex","r","g","b","n","mixChannel","from","to","amount","mixHex","rgb","toward","expandBrandHex","base","defaultFontSizes","defaultFontWeights","defaultFontFamilies","defaultLineHeight","noneSpacing","noneLayout","defaultRow","defaultCol","defaultRows","defaultCols","defaultGrid","defaultDarkColors","defaultTheme","mergeTokenScale","next","overrides","tokens","mergeScale","mergeBreakpoints","mergeSpacingDefaults","mergeLayoutDefaults","mergeRowDefaults","mergeColDefaults","mergePanelsDefaults","mergeTextDefaults","mergeHeadingDefaults","level","mergeTextLinkDefaults","mergeChipDefaults","mergeInputDefaults","mergeTextareaDefaults","mergeSelectDefaults","mergeSwitchDefaults","mergeCheckboxDefaults","mergeRadioDefaults","mergeButtonDefaults","mergeBrandSlot","current","derived","mergeStatus","mergeBrand","primary","followPrimary","mergeFlexDefaults","mergePanelText","mergePanelColors","mergeSchemeColors","app","applyColorScheme","theme","mode","createPanelizeTheme","colorSchemes","input","isResolvedTheme","appCssVars","PanelizeThemeContext","AppCanvas","$colorScheme","$background","$text","PanelizeProvider","built","useMemo","usePanelizeTheme","panelCssVars","StyledPanel","$edges","$size","$fill","$borderWidth","$borderRadius","$colors","$borderColor","$flex","$scroll","$trackKind","$alignX","$alignY","$customCss","Panel","customCss","dom","trackKind","spacing","defaults","borderWidths","borderRadius","radii","borderColor","isBrandToken","color","isStatusToken","isChromaToken","resolveChromaSlot","resolveFocusColor","resolveTextColor","highlighted","muted","resolveLinkHover","restSlot","restToken","hover","ink","slot","StyledButton","$gap","$family","$weight","$lineHeight","$paddingY","$paddingX","$restBorder","$restBg","$restFg","$hoverBg","$hoverFg","$hoverBorder","$activeBg","$activeFg","$activeBorder","$italic","$uppercase","resolveSlotStep","filledHoverFill","Button","familyToken","filled","outline","hoverTheme","filledHoverFg","paint","fillAt","background","inkAt","restBg","hoverBg","activeBg","restFg","hoverFg","activeFg","restBorder","hoverBorder","activeBorder","fontFamilies","fontSizes","weight","fontWeights","lineHeight","paddingX","padding","paddingY","borderWidth","italic","uppercase","children","label","StyledChip","$bg","$fg","Chip","chip","chroma","tinted","bg","fg","stroke","assignRef","ref","node","StyledCheckbox","$width","$height","$radius","$off","$on","$hoverOn","$activeOn","$ink","Checkbox","box","off","markInk","typeSize","edge","boxWidth","boxHeight","hideCheckIcon","indeterminate","fieldChromeCss","$focus","$invalid","StyledInput","Input","TextStyleContext","useTextStyle","textTypographyCss","$color","$underlined","controlSel","StyledLabel","$clickable","Label","family","resolvedSize","resolvedWeight","underlined","onClick","lockWheel","event","NumberInput","onWheel","StyledRadio","$inset","$dot","$hoverDot","$activeDot","Radio","disc","discHover","discActive","radius","Option","optionCaption","isOptionElement","isValidElement","child","collectItems","map","item","options","Children","withEmptyOption","spec","required","items","placeholder","withSelectedAtTop","enabled","i","picked","withSelectedSetAtTop","selected","set","top","firstEnabledIndex","lastEnabledIndex","stepEnabled","dir","matchTypeahead","q","query","start","hit","panelVarsFrom","cs","name","cssLengthToPx","root","emPx","computeListBox","rect","em","maxPx","listMaxHeight","gap","listOffset","below","above","flip","maxHeight","useListboxMenu","openProp","isOpenControlled","uncontrolledOpen","setUncontrolledOpen","useState","isOpen","activeIndex","setActiveIndex","setBox","listVars","setListVars","triggerRef","useRef","wrapRef","listRef","typeRef","activeValueRef","pinActive","index","setOpen","highlight","activeOnOpen","onOpenChange","moveActive","placeList","useEffect","typeState","useLayoutEffect","onReposition","el","onDoc","runListboxKeyDown","opts","key","openHighlightUp","openHighlightDown","showClear","onClear","readOnly","closedTypeaheadFrom","onClosedTypeahead","onCommit","TriggerWrap","ClearButton","$end","$hoverInk","TriggerLabel","StyledTrigger","$clearable","$muted","$open","StyledList","$zIndex","$top","$left","$maxHeight","$shadow","StyledOption$1","$padY","$padX","$disabled","$selected","$chroma","$active","CheckHit","MultiSelect","sel","isValueControlled","uncontrolledValue","setUncontrolledValue","defaultValue","selectedSet","selectedAtTop","firstSelectedIndex","listId","useId","assignTriggerRef","focus","invalid","padX","padY","textInk","empty","clearable","disabled","mutedInk","labelInk","caption","optionPadX","optionPadY","typeWeight","typeFamily","checkColor","emit","onChange","toggle","entry","clear","blur","onTriggerKeyDown","onKeyDown","row","activeId","Fragment","onBlur","createPortal","id","on","StyledOption","Select","emptyOption","selectedIndex","pick","StyledSwitch","$thumb","Switch","sw","thumbInk","trackHeight","trackWidth","inset","thumb","StyledTextarea","$resize","Textarea","textarea","rows","resize","spanCss","count","span","StyledCell","$spanX","$spanY","Cell","spanX","spanY","StyledCol","Col","StyledCols","$wrap","$stackMax","$stackedJustify","Cols","wrap","stack","breakpoints","StyledDiv","Div","repeatTracks","StyledGrid","$columns","$rows","$stackCols","Grid","numCols","numRows","stackCols","panelsSizeCss","relative","insetX","insetY","StyledPanels","$horizontal","$relative","Panels","fallbackAlign","horizontal","StyledRow","Row","StyledRows","Rows","headingTags","StyledHeading","Heading","levelSize","StyledSpan","Span","parent","resolvedLineHeight","resolvedColor","StyledText","Text","linkLineCss","StyledTextLink","$hover","$hoverUnderline","TextLink","active"],"sources":["../src/theme/types.ts","../src/theme/space.ts","../src/theme/borders.ts","../src/theme/breakpoints.ts","../src/theme/flex.ts","../src/theme/overflow.ts","../src/theme/track.tsx","../src/theme/color.ts","../src/theme/brand.ts","../src/theme/font.ts","../src/theme/defaults.ts","../src/theme/PanelizeProvider.tsx","../src/components/layout/Panel.tsx","../src/components/text/color.ts","../src/components/buttons/Button.tsx","../src/components/chips/Chip.tsx","../src/components/forms/Checkbox.tsx","../src/components/forms/field.ts","../src/components/forms/Input.tsx","../src/components/text/typography.ts","../src/components/forms/Label.tsx","../src/components/forms/NumberInput.tsx","../src/components/forms/Radio.tsx","../src/components/forms/selects/listbox.ts","../src/components/forms/selects/listboxChrome.ts","../src/components/forms/selects/MultiSelect.tsx","../src/components/forms/selects/Select.tsx","../src/components/forms/Switch.tsx","../src/components/forms/Textarea.tsx","../src/components/layout/Cell.tsx","../src/components/layout/Col.tsx","../src/components/layout/Cols.tsx","../src/components/layout/Div.tsx","../src/components/layout/Grid.tsx","../src/components/layout/Panels.tsx","../src/components/layout/Row.tsx","../src/components/layout/Rows.tsx","../src/components/text/Heading.tsx","../src/components/text/Span.tsx","../src/components/text/Text.tsx","../src/components/text/TextLink.tsx"],"sourcesContent":["export const panelVariants = ['muted', 'base', 'highlighted'] as const\n\nexport type PanelVariant = (typeof panelVariants)[number]\n\n/** Type roles on a panel surface. Brand and status chromas are global, not per variant. */\nexport const panelTextRoles = ['base', 'muted', 'highlighted'] as const\n\nexport type PanelTextRole = (typeof panelTextRoles)[number]\n\nexport type PanelTextColors = Record<PanelTextRole, string>\n\nexport type PanelColors = {\n background: string\n text: PanelTextColors\n border: string\n}\n\nexport type AppColors = {\n background?: string\n text?: string\n}\n\nexport type ThemeColors = Record<PanelVariant, PanelColors> & {\n app?: AppColors\n}\n\n/** Runtime / authoring schemes. Surfaces stay `muted` / `base` / `highlighted`. */\nexport const colorSchemeTokens = ['dark', 'light'] as const\n\nexport type ColorScheme = (typeof colorSchemeTokens)[number]\n\nexport type ColorSchemes = Record<ColorScheme, ThemeColors>\n\n/** App brand chromas. Use on `Text` as `color=\"primary\"`. Not panel variants. */\nexport const brandTokens = ['primary', 'secondary', 'accent'] as const\n\nexport type BrandToken = (typeof brandTokens)[number]\n\n/** Meaning chromas. Shared across schemes. Not brand. No `subtle` — mix into `--panelize-bg`. */\nexport const statusTokens = ['danger', 'warning', 'success', 'info'] as const\n\nexport type StatusToken = (typeof statusTokens)[number]\n\nexport const brandStateTokens = ['base', 'hover', 'active'] as const\n\nexport type BrandStateToken = (typeof brandStateTokens)[number]\n\n/** Resolved brand slot. `color=\"primary\"` uses `base`. */\nexport type BrandState = Record<BrandStateToken, string>\n\n/** Same `{ base, hover, active }` as brand. Status uses this too. */\nexport type ChromaState = BrandState\n\nexport type BrandColors = Record<BrandToken, ChromaState>\n\n/** Hex (`#ff9f2e`) expands to base/hover/active, or set those keys. */\nexport type BrandSlotOverride = string | Partial<BrandState>\n\nexport type BrandOverrides = Partial<Record<BrandToken, BrandSlotOverride>>\n\nexport type StatusColors = Record<StatusToken, ChromaState>\n\nexport type StatusOverrides = Partial<Record<StatusToken, BrandSlotOverride>>\n\n/** Brand (`primary`), status (`danger`), or raw CSS. Token → that slot’s `.base`. */\nexport type ColorValue = BrandToken | StatusToken | (string & {})\n\nexport const spaceTokens = ['none', 'extraSmall', 'small', 'base', 'large', 'extraLarge'] as const\n\nexport type SpaceToken = (typeof spaceTokens)[number]\n\nexport type SpaceScale = Record<SpaceToken, string>\n\n/** A space token (`small`), `auto`, or a raw CSS length (`1rem`, `100%`). */\nexport type SpaceValue = SpaceToken | (string & {})\n\nexport type SpacingDefaults = {\n padding: SpaceToken\n margin: SpaceToken\n}\n\nexport type LayoutDefaults = SpacingDefaults & {\n borderWidth: SpaceToken\n borderRadius: SpaceToken\n}\n\nexport type RowDefaults = LayoutDefaults & {\n height: SpaceValue\n}\n\nexport type ColDefaults = LayoutDefaults & {\n width: SpaceValue\n}\n\nexport const alignValues = [\n 'start',\n 'end',\n 'center',\n 'stretch',\n 'baseline',\n 'space-between',\n 'space-around',\n 'space-evenly',\n] as const\n\nexport type AlignValue = (typeof alignValues)[number]\n\nexport const scrollValues = ['vertical', 'horizontal', 'both'] as const\n\nexport type ScrollValue = (typeof scrollValues)[number]\n\nexport type FlexDefaults = SpacingDefaults & {\n gap: SpaceToken\n alignX: AlignValue\n alignY: AlignValue\n}\n\nexport type PanelsDefaults = SpacingDefaults & {\n gap: SpaceToken\n}\n\nexport type ThemeDefaults = {\n panel: LayoutDefaults\n /** Spacing and gap. Align is instance-only because `Panels` is row or column. */\n panels: PanelsDefaults\n rows: FlexDefaults\n row: RowDefaults\n cols: FlexDefaults\n col: ColDefaults\n /** Gap and item align (`stretch` / `stretch`). Track counts are instance-only (`numCols` / `numRows`). */\n grid: FlexDefaults\n cell: LayoutDefaults\n div: LayoutDefaults\n text: TextDefaults\n heading: HeadingDefaults\n textLink: TextLinkDefaults\n button: ButtonDefaults\n chip: ChipDefaults\n input: InputDefaults\n textarea: TextareaDefaults\n select: SelectDefaults\n switch: SwitchDefaults\n checkbox: CheckboxDefaults\n radio: RadioDefaults\n}\n\nexport const breakpointTokens = ['sm', 'md', 'lg'] as const\n\nexport type BreakpointToken = (typeof breakpointTokens)[number]\n\nexport type BreakpointScale = Record<BreakpointToken, string>\n\n/** A breakpoint token (`sm`) or a raw CSS length (`40rem`). */\nexport type StackValue = BreakpointToken | (string & {})\n\nexport const fontSizeTokens = ['extraSmall', 'small', 'base', 'large', 'extraLarge'] as const\n\nexport type FontSizeToken = (typeof fontSizeTokens)[number]\n\nexport type FontSizeScale = Record<FontSizeToken, string>\n\n/** A font size token (`small`) or a raw CSS size (`1.125rem`). */\nexport type FontSizeValue = FontSizeToken | (string & {})\n\nexport const fontWeightTokens = ['thin', 'base', 'bold', 'heavy'] as const\n\nexport type FontWeightToken = (typeof fontWeightTokens)[number]\n\nexport type FontWeightScale = Record<FontWeightToken, string>\n\n/** A font weight token (`thin` / `base` / `bold` / `heavy`) or a raw CSS weight (`600`). */\nexport type FontWeightValue = FontWeightToken | (string & {})\n\nexport const fontFamilyTokens = ['base', 'display', 'mono'] as const\n\nexport type FontFamilyToken = (typeof fontFamilyTokens)[number]\n\nexport type FontFamilyScale = Record<FontFamilyToken, string>\n\nexport type TextDefaults = {\n size: FontSizeToken\n /** Default `base` (`400`) so `Text` does not inherit a parent’s weight. */\n weight: FontWeightToken\n}\n\nexport const headingLevels = [1, 2, 3, 4, 5, 6] as const\n\nexport type HeadingLevel = (typeof headingLevels)[number]\n\n/** UA-like `h1`–`h6` sizes (`2rem` … `0.67rem`). Instance `size` overrides. */\nexport type HeadingSizeScale = Record<HeadingLevel, string>\n\nexport type HeadingDefaults = {\n size: HeadingSizeScale\n /** Default `bold` (browser headings). */\n weight: FontWeightToken\n /** Default `display`. Instance `family` overrides. */\n family: FontFamilyToken\n}\n\n/** `hover: 'primary'` with rest `primary` uses that slot’s `.hover`. `inherit` = panel `text.base`. */\nexport type TextLinkHoverValue = ColorValue | 'inherit'\n\nexport type TextLinkDefaults = {\n /** Rest color. Default `primary` (that slot’s `.base`). */\n color: ColorValue\n /** Hover color. Default `primary` (that slot’s `.hover` when rest is also `primary`). */\n hover: TextLinkHoverValue\n /** Underline on `:hover`. Default `false`. Rest `underlined` still stays underlined on hover. */\n hoverUnderline: boolean\n}\n\n/**\n * Filled hover paints. Instance `color` owns chroma (`.hover` / `.active`).\n * `background` is only a raw CSS override for the filled hover fill.\n */\nexport type ButtonHoverDefaults = {\n /** Filled hover/active label. Brand/status token → that slot’s `.base`. Default `palette.black`. */\n color: ColorValue\n /** Omit = instance slot `.hover`. Raw CSS replaces filled hover/active fill. Brand/status tokens are ignored. */\n background?: string\n}\n\n/** Badge chrome. Fill is `color-mix` of chroma into `--panelize-bg` at `tint`. */\nexport type ChipDefaults = {\n /** Brand or status slot. Default `primary`. */\n color: ColorValue\n /** Default `extraSmall` (`0.75rem`). */\n size: FontSizeValue\n weight: FontWeightToken\n /** Share of chroma in `color-mix` against the panel background. Default `12%`. */\n tint: string\n paddingX: SpaceValue\n paddingY: SpaceValue\n gap: SpaceValue\n /** Capsule. Default `999px`. */\n borderRadius: SpaceValue\n /** Default `true`. */\n uppercase: boolean\n}\n\n/** Chrome for `Input` / `NumberInput`. Rest is panel vars; `color` is focus chroma (not ink). */\nexport type InputDefaults = {\n /** Brand or status slot for focus border, glow, and caret. Default `primary`. */\n color: ColorValue\n size: FontSizeToken\n /** Default `base` (`400`). */\n weight: FontWeightToken\n paddingX: SpaceValue\n paddingY: SpaceValue\n borderWidth: SpaceToken\n borderRadius: SpaceToken\n}\n\n/** Chrome for `Textarea`. Field keys inherit merged `defaults.input` unless overridden here. */\nexport type TextareaDefaults = InputDefaults & {\n /** Vertical resize handle. Default `false`. */\n resize: boolean\n /** Native `rows`. Default `3`. */\n rows: number\n}\n\n/** Chrome for `Select`. Field keys inherit merged `defaults.input` unless overridden here. */\nexport type SelectDefaults = InputDefaults & {\n /** Menu max height (CSS). Default `16rem`. */\n listMaxHeight: string\n /** Gap between trigger and menu. Default `extraSmall`. */\n listOffset: SpaceToken\n /** Option row padding X. Default `base`. */\n optionPaddingX: SpaceToken\n /** Option row padding Y. Default `extraSmall`. */\n optionPaddingY: SpaceToken\n /** Menu stacking order. Default `1100`. */\n listZIndex: number\n /** Menu drop shadow. Default `0 8px 24px rgb(0 0 0 / 35%)`. */\n listShadow: string\n}\n\n/** Chrome for `Switch`. Track height is type size × `lineHeight`. */\nexport type SwitchDefaults = {\n /** Brand or status slot for the on track. Default `primary`. */\n color: ColorValue\n /** Type size the track is built for. Default `base`. */\n size: FontSizeToken\n /** Thumb fill. Default `palette.white`. */\n ink: string\n /** Track width as a multiple of the type size. Default `2`. */\n widthFactor: number\n /** Inset on every edge as a multiple of the type size. Default `0.2`. Thumb is height − 2×this. */\n insetFactor: number\n /** Track radius. Default `999px` (capsule). Instance `borderRadius` overrides. Thumb follows `min(this, 50%)`. */\n borderRadius: SpaceValue\n}\n\n/** Chrome for `Checkbox`. Box is the type size (`1em`), square. */\nexport type CheckboxDefaults = {\n /** Brand or status slot for the on fill. Default `primary`. */\n color: ColorValue\n /** Type size the box is built for. Default `base`. */\n size: FontSizeToken\n /** Check / dash on the on fill. Default `palette.black` (same as filled `Button`). */\n ink: string\n /** Rest stroke. Default `extraSmall` (`1px`). */\n borderWidth: SpaceToken\n /** Box radius. Default `small`. */\n borderRadius: SpaceValue\n}\n\n/** Chrome for `Radio`. Box is the type size (`1em`), circle. */\nexport type RadioDefaults = {\n /** Brand or status slot for the checked ring and inner disc. Default `primary`. */\n color: ColorValue\n /** Type size the box is built for. Default `base`. */\n size: FontSizeToken\n /** Rest stroke. Default `extraSmall` (`1px`). */\n borderWidth: SpaceToken\n /** Box radius. Default `999px` (circle). Instance `borderRadius` overrides. Inner disc follows `min(this, 50%)`. */\n borderRadius: SpaceValue\n /** Gap from the inner edge of the ring to the disc, as a multiple of the type size. Default `0.22`. */\n insetFactor: number\n}\n\n/** Chrome for `Button`. `color` is the chroma slot; `ink` is the filled rest label. */\nexport type ButtonDefaults = {\n /** Brand or status slot. Default `primary`. */\n color: ColorValue\n size: FontSizeToken\n weight: FontWeightToken\n /** Filled rest label. Outline rest uses the chroma slot instead. Default `palette.black`. */\n ink: string\n hover: ButtonHoverDefaults\n paddingX: SpaceValue\n paddingY: SpaceValue\n /** Flex gap between children (icon + label). Default `extraSmall`. */\n gap: SpaceValue\n borderWidth: SpaceValue\n borderRadius: SpaceValue\n}\n\nexport type PanelizeTheme = {\n /** Active scheme. Default `dark`. Set on `PanelizeProvider`, not in `createPanelizeTheme`. */\n mode: ColorScheme\n /** Both scheme maps. Input is `createPanelizeTheme({ colors: { dark, light } })`. */\n colorSchemes: ColorSchemes\n /**\n * Active surfaces only (`muted` / `base` / `highlighted` / `app`). Not `{ dark, light }`.\n * `Panel` / `usePanelizeTheme().colors` read this. Both maps are `colorSchemes`.\n */\n colors: ThemeColors\n /** Global brand chromas. Shared across schemes. `Text` `color=\"primary\"` reads `brand.primary.base`. */\n brand: BrandColors\n /** Meaning chromas. Shared across schemes. `Text` `color=\"danger\"` reads `status.danger.base`. */\n status: StatusColors\n space: SpaceScale\n borderWidths: SpaceScale\n radii: SpaceScale\n breakpoints: BreakpointScale\n fontSizes: FontSizeScale\n fontWeights: FontWeightScale\n fontFamilies: FontFamilyScale\n /**\n * Unitless `line-height` on `Text` (`font-size × this`). Default `1.2`.\n * `Checkbox` / `Radio` use the type size (`1em`), not this. `Switch` track height is type × this.\n */\n lineHeight: number | string\n defaults: ThemeDefaults\n}\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K]\n}\n\n/** `createPanelizeTheme` input. `colors.dark` / `colors.light` are scheme maps. `mode` is a provider prop. */\nexport type PanelizeThemeOverrides = Omit<\n DeepPartial<PanelizeTheme>,\n 'brand' | 'status' | 'colors' | 'colorSchemes' | 'mode'\n> & {\n brand?: BrandOverrides\n status?: StatusOverrides\n /**\n * Scheme maps (`dark` / `light`), each with `muted` / `base` / `highlighted` / `app`.\n * Top-level `muted` (old shape) is ignored. `dark` here is a scheme, not a panel variant.\n */\n colors?: Partial<Record<ColorScheme, DeepPartial<ThemeColors>>>\n}\n","import { css } from 'styled-components'\n\nimport { type SpaceScale, type SpaceToken, spaceTokens, type SpaceValue } from '~/src/theme/types'\n\nexport type { SpaceValue }\n\nexport const defaultSpace: SpaceScale = {\n none: '0rem',\n extraSmall: '0.25rem',\n small: '0.5rem',\n base: '1rem',\n large: '1.5rem',\n extraLarge: '2rem',\n}\n\nexport type DirectionalSpacingProps = {\n /** Horizontal padding (left and right). Overrides `padding`. */\n paddingX?: SpaceValue\n /** Vertical padding (top and bottom). Overrides `padding`. */\n paddingY?: SpaceValue\n /** Overrides `padding` and `paddingY` on this side. */\n paddingTop?: SpaceValue\n /** Overrides `padding` and `paddingX` on this side. */\n paddingRight?: SpaceValue\n /** Overrides `padding` and `paddingY` on this side. */\n paddingBottom?: SpaceValue\n /** Overrides `padding` and `paddingX` on this side. */\n paddingLeft?: SpaceValue\n /** Horizontal margin (left and right). Overrides `margin`. */\n marginX?: SpaceValue\n /** Vertical margin (top and bottom). Overrides `margin`. */\n marginY?: SpaceValue\n /** Overrides `margin` and `marginY` on this side. */\n marginTop?: SpaceValue\n /** Overrides `margin` and `marginX` on this side. */\n marginRight?: SpaceValue\n /** Overrides `margin` and `marginY` on this side. */\n marginBottom?: SpaceValue\n /** Overrides `margin` and `marginX` on this side. */\n marginLeft?: SpaceValue\n}\n\nexport type BoxSpacingProps = DirectionalSpacingProps & {\n /** Padding on all sides. Space token or CSS length. Theme default if omitted. */\n padding?: SpaceValue\n /** Margin on all sides. Space token or CSS length. Theme default if omitted. */\n margin?: SpaceValue\n}\n\nexport type BoxEdges = {\n paddingTop: string\n paddingRight: string\n paddingBottom: string\n paddingLeft: string\n marginTop: string\n marginRight: string\n marginBottom: string\n marginLeft: string\n}\n\nfunction isSpaceToken(value: string): value is SpaceToken {\n return (spaceTokens as readonly string[]).includes(value)\n}\n\nexport function resolveScaleValue(\n value: string | undefined,\n fallback: string,\n scale: Record<string, string>,\n): string {\n const resolved = value ?? fallback\n return Object.hasOwn(scale, resolved) ? scale[resolved] : resolved\n}\n\nfunction resolveSide(\n end: SpaceValue | undefined,\n axis: SpaceValue | undefined,\n all: string,\n space: SpaceScale,\n): string {\n if (end !== undefined) {\n return isSpaceToken(end) ? space[end] : end\n }\n\n if (axis !== undefined) {\n return isSpaceToken(axis) ? space[axis] : axis\n }\n\n return all\n}\n\nexport function resolveBoxEdges(\n props: BoxSpacingProps,\n fallback: { padding: SpaceToken; margin: SpaceToken },\n space: SpaceScale,\n): BoxEdges {\n const paddingAll = resolveScaleValue(props.padding, fallback.padding, space)\n const marginAll = resolveScaleValue(props.margin, fallback.margin, space)\n\n return {\n paddingTop: resolveSide(props.paddingTop, props.paddingY, paddingAll, space),\n paddingRight: resolveSide(props.paddingRight, props.paddingX, paddingAll, space),\n paddingBottom: resolveSide(props.paddingBottom, props.paddingY, paddingAll, space),\n paddingLeft: resolveSide(props.paddingLeft, props.paddingX, paddingAll, space),\n marginTop: resolveSide(props.marginTop, props.marginY, marginAll, space),\n marginRight: resolveSide(props.marginRight, props.marginX, marginAll, space),\n marginBottom: resolveSide(props.marginBottom, props.marginY, marginAll, space),\n marginLeft: resolveSide(props.marginLeft, props.marginX, marginAll, space),\n }\n}\n\nexport type SizeLimitProps = {\n /** Minimum width. Space token or CSS. Omitted means no min. */\n minWidth?: SpaceValue\n /** Maximum width. Space token or CSS. Omitted means no max. */\n maxWidth?: SpaceValue\n /** Minimum height. Space token or CSS. Omitted means no min. */\n minHeight?: SpaceValue\n /** Maximum height. Space token or CSS. Omitted means no max. */\n maxHeight?: SpaceValue\n}\n\nexport type SizeProps = SizeLimitProps & {\n /**\n * Width. Space token or CSS (`auto`, `4rem`, `100%`). Omitted: unset, except `Col` uses\n * theme `defaults.col.width` (`auto`). Overrides `fill` on this axis. Not on `Cell`.\n */\n width?: SpaceValue\n /**\n * Height. Space token or CSS (`auto`, `4rem`, `100%`). Omitted: unset, except `Row` uses\n * theme `defaults.row.height` (`auto`). Overrides `fill` on this axis. Not on `Cell`.\n */\n height?: SpaceValue\n}\n\nexport type ResolvedSizeLimits = {\n minWidth?: string\n maxWidth?: string\n minHeight?: string\n maxHeight?: string\n}\n\nexport type ResolvedBoxSize = ResolvedSizeLimits & {\n width?: string\n height?: string\n}\n\nexport function takeBoxLayout<T extends BoxSpacingProps & SizeProps>(props: T) {\n const {\n padding,\n margin,\n paddingX,\n paddingY,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n marginX,\n marginY,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n width,\n height,\n ...rest\n } = props\n\n return {\n spacing: {\n padding,\n margin,\n paddingX,\n paddingY,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n marginX,\n marginY,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n },\n size: { minWidth, maxWidth, minHeight, maxHeight, width, height },\n rest,\n }\n}\n\nexport function resolveSizeLimits(props: SizeLimitProps, space: SpaceScale): ResolvedSizeLimits {\n return {\n minWidth:\n props.minWidth === undefined ? undefined : resolveScaleValue(props.minWidth, 'none', space),\n maxWidth:\n props.maxWidth === undefined ? undefined : resolveScaleValue(props.maxWidth, 'none', space),\n minHeight:\n props.minHeight === undefined ? undefined : resolveScaleValue(props.minHeight, 'none', space),\n maxHeight:\n props.maxHeight === undefined ? undefined : resolveScaleValue(props.maxHeight, 'none', space),\n }\n}\n\nexport function resolveBoxSize(\n props: SizeProps,\n space: SpaceScale,\n fallbacks?: { width?: SpaceValue; height?: SpaceValue },\n): ResolvedBoxSize {\n return {\n ...resolveSizeLimits(props, space),\n width:\n props.width === undefined && fallbacks?.width === undefined\n ? undefined\n : resolveScaleValue(props.width, fallbacks?.width ?? 'auto', space),\n height:\n props.height === undefined && fallbacks?.height === undefined\n ? undefined\n : resolveScaleValue(props.height, fallbacks?.height ?? 'auto', space),\n }\n}\n\nexport function sizeCss(size: ResolvedBoxSize, fill?: boolean) {\n const width = size.width ?? (fill ? '100%' : undefined)\n const height = size.height ?? (fill ? '100%' : undefined)\n\n return css`\n box-sizing: border-box;\n ${\n width !== undefined\n ? css`\n width: ${width};\n `\n : ''\n }\n ${\n height !== undefined\n ? css`\n height: ${height};\n `\n : ''\n }\n ${sizeLimitCss(size)}\n `\n}\n\nexport function sizeLimitCss(limits: ResolvedSizeLimits) {\n return css`\n ${\n limits.minWidth !== undefined\n ? css`\n min-width: ${limits.minWidth};\n `\n : ''\n }\n ${\n limits.maxWidth !== undefined\n ? css`\n max-width: ${limits.maxWidth};\n `\n : ''\n }\n ${\n limits.minHeight !== undefined\n ? css`\n min-height: ${limits.minHeight};\n `\n : ''\n }\n ${\n limits.maxHeight !== undefined\n ? css`\n max-height: ${limits.maxHeight};\n `\n : ''\n }\n `\n}\n\nexport function boxEdgesCss(edges: BoxEdges) {\n return css`\n padding-top: ${edges.paddingTop};\n padding-right: ${edges.paddingRight};\n padding-bottom: ${edges.paddingBottom};\n padding-left: ${edges.paddingLeft};\n margin-top: ${edges.marginTop};\n margin-right: ${edges.marginRight};\n margin-bottom: ${edges.marginBottom};\n margin-left: ${edges.marginLeft};\n `\n}\n","import { resolveScaleValue } from '~/src/theme/space'\nimport {\n type BrandColors,\n type BrandStateToken,\n type BrandToken,\n brandTokens,\n type PanelVariant,\n panelVariants,\n type SpaceScale,\n type SpaceToken,\n type SpaceValue,\n type StatusColors,\n type StatusToken,\n statusTokens,\n type ThemeColors,\n} from '~/src/theme/types'\n\nexport const defaultBorderWidths: SpaceScale = {\n none: '0',\n extraSmall: '1px',\n small: '2px',\n base: '4px',\n large: '8px',\n extraLarge: '12px',\n}\n\nexport const defaultRadii: SpaceScale = {\n none: '0',\n extraSmall: '0.125rem',\n small: '0.25rem',\n base: '0.5rem',\n large: '0.75rem',\n extraLarge: '1rem',\n}\n\n/**\n * Panel surface (`muted` / `base` / `highlighted`), brand (`primary`), status (`danger`),\n * or raw CSS. `base` is the panel `base` surface, not a brand slot.\n */\nexport type PaintValue = PanelVariant | BrandToken | StatusToken | (string & {})\n\n/** Same tokens as `PaintValue`. `base` is the panel `base` border, not a brand slot. */\nexport type BorderColorValue = PaintValue\n\nexport type PaintRole = 'background' | 'text' | 'border'\n\n/** Token/CSS for every step, or per-step overrides. Omitted keys fall through to the control default. */\nexport type PaintSteps = PaintValue | Partial<Record<BrandStateToken, PaintValue>>\n\nfunction isPaintStepsRecord(\n value: PaintSteps,\n): value is Partial<Record<BrandStateToken, PaintValue>> {\n return typeof value === 'object' && value !== null\n}\n\n/** Width cascade: `borderWidth` → `borderX` / `borderY` → `borderTop` / … Same tokens as `borderWidth`. */\nexport type DirectionalBorderProps = {\n /** All sides. Token (`extraSmall` = 1px) or CSS. Theme default `none`. */\n borderWidth?: SpaceValue\n /** Left and right. Overrides `borderWidth`. */\n borderX?: SpaceValue\n /** Top and bottom. Overrides `borderWidth`. */\n borderY?: SpaceValue\n /** Overrides `borderWidth` and `borderY` on this side. */\n borderTop?: SpaceValue\n /** Overrides `borderWidth` and `borderX` on this side. */\n borderRight?: SpaceValue\n /** Overrides `borderWidth` and `borderY` on this side. */\n borderBottom?: SpaceValue\n /** Overrides `borderWidth` and `borderX` on this side. */\n borderLeft?: SpaceValue\n}\n\nfunction resolveBorderSide(\n end: SpaceValue | undefined,\n axis: SpaceValue | undefined,\n all: string,\n widths: SpaceScale,\n): string {\n if (end !== undefined) {\n return resolveScaleValue(end, all, widths)\n }\n\n if (axis !== undefined) {\n return resolveScaleValue(axis, all, widths)\n }\n\n return all\n}\n\n/** CSS `border-width` as `top right bottom left`. */\nexport function resolveBorderEdges(\n props: DirectionalBorderProps,\n fallback: SpaceToken,\n widths: SpaceScale,\n): string {\n const all = resolveScaleValue(props.borderWidth, fallback, widths)\n\n return [\n resolveBorderSide(props.borderTop, props.borderY, all, widths),\n resolveBorderSide(props.borderRight, props.borderX, all, widths),\n resolveBorderSide(props.borderBottom, props.borderY, all, widths),\n resolveBorderSide(props.borderLeft, props.borderX, all, widths),\n ].join(' ')\n}\n\nexport function resolvePaintValue(\n override: PaintValue | undefined,\n role: PaintRole,\n colors: ThemeColors,\n brand: BrandColors,\n status: StatusColors,\n step: BrandStateToken = 'base',\n): string | undefined {\n if (override === undefined) {\n return undefined\n }\n\n if ((panelVariants as readonly string[]).includes(override)) {\n const surface = colors[override as PanelVariant]\n if (role === 'background') {\n return surface.background\n }\n if (role === 'text') {\n return surface.text.base\n }\n return surface.border\n }\n\n if ((brandTokens as readonly string[]).includes(override)) {\n return brand[override as BrandToken][step]\n }\n\n if ((statusTokens as readonly string[]).includes(override)) {\n return status[override as StatusToken][step]\n }\n\n return override\n}\n\n/** Flat token → all steps (`.base`). Object key → that step (chroma uses `.hover` / `.active`). */\nexport function resolvePaintSteps(\n value: PaintSteps | undefined,\n role: PaintRole,\n step: BrandStateToken,\n colors: ThemeColors,\n brand: BrandColors,\n status: StatusColors,\n): string | undefined {\n if (value === undefined) {\n return undefined\n }\n\n if (isPaintStepsRecord(value)) {\n const token = value[step]\n if (token === undefined) {\n return undefined\n }\n return resolvePaintValue(token, role, colors, brand, status, step)\n }\n\n return resolvePaintValue(value, role, colors, brand, status, 'base')\n}\n\nexport function resolveBorderColor(\n override: BorderColorValue | undefined,\n variant: PanelVariant,\n colors: ThemeColors,\n brand: BrandColors,\n status: StatusColors,\n): string {\n return resolvePaintValue(override, 'border', colors, brand, status) ?? colors[variant].border\n}\n","import { css } from 'styled-components'\n\nimport {\n type BreakpointScale,\n type BreakpointToken,\n breakpointTokens,\n type StackValue,\n} from '~/src/theme/types'\n\n/** Tailwind `sm` / `md` / `lg` widths, in rem (16px root). */\nexport const defaultBreakpoints: BreakpointScale = {\n sm: '40rem',\n md: '48rem',\n lg: '64rem',\n}\n\nfunction isBreakpointToken(value: string): value is BreakpointToken {\n return (breakpointTokens as readonly string[]).includes(value)\n}\n\nexport function resolveBreakpointValue(\n value: StackValue | undefined,\n scale: BreakpointScale,\n): string | undefined {\n if (value === undefined) {\n return undefined\n }\n\n return isBreakpointToken(value) ? scale[value] : value\n}\n\n/**\n * Collapse to a column at `max-width` (inclusive). Not Tailwind `md:` (min-width / and-up).\n * Forces `align-items: stretch` and `width: auto` on children, so `alignX=\"center\"` does not apply while stacked.\n */\n/**\n * Collapse a `Grid` at `max-width` to `stackedCols` equal tracks (default 1).\n * Child `spanX` becomes 1 only when stacked to a single column.\n */\nexport function stackGridQueryCss(maxWidth: string, stackedCols: number = 1) {\n const cols = Number.isFinite(stackedCols) && stackedCols >= 1 ? Math.floor(stackedCols) : 1\n const columns = `repeat(${cols}, minmax(0, 1fr))`\n\n return css`\n container-type: inline-size;\n @container (max-width: ${maxWidth}) {\n grid-template-columns: ${columns};\n justify-items: stretch;\n align-items: stretch;\n ${\n cols === 1\n ? css`\n & > * {\n grid-column: auto / span 1;\n }\n `\n : ''\n }\n }\n `\n}\n\nexport function stackQueryCss(maxWidth: string, stackedJustify: string = 'start') {\n return css`\n container-type: inline-size;\n @container (max-width: ${maxWidth}) {\n flex-direction: column;\n flex-wrap: nowrap;\n align-items: stretch;\n justify-content: ${stackedJustify};\n & > * {\n width: auto;\n max-width: 100%;\n }\n }\n `\n}\n","import { css } from 'styled-components'\n\nimport { type AlignValue } from '~/src/theme/types'\n\nexport type GridAlignProps = {\n /**\n * Left–right alignment of items in their cells (`justify-items`).\n * Omitted: `stretch` (theme `defaults.grid`). Not flex packing — `space-*` does not apply.\n */\n alignX?: AlignValue\n /**\n * Top–bottom alignment of items in their cells (`align-items`).\n * Omitted: `stretch` (theme `defaults.grid`). Not flex packing — `space-*` does not apply.\n */\n alignY?: AlignValue\n}\n\nexport function gridItemAlignCss(alignX: AlignValue, alignY: AlignValue) {\n return css`\n justify-items: ${alignX};\n align-items: ${alignY};\n `\n}\n\nexport type SelfAlignProps = {\n /**\n * Left–right alignment of this box in its parent track (`align-self` in a column flex /\n * `justify-self` on a grid). Omitted: inherit. No-op in a row flex (`Cols`, `horizontal` `Panels`).\n * `space-*` does not apply.\n */\n alignX?: AlignValue\n /**\n * Top–bottom alignment of this box in its parent track (`align-self` in a row flex /\n * `align-self` on a grid). Omitted: inherit. No-op in a column flex (`Rows`, default `Panels`).\n * `space-*` does not apply.\n */\n alignY?: AlignValue\n}\n\nexport function gridSelfAlignCss(alignX?: AlignValue, alignY?: AlignValue) {\n if (!alignX && !alignY) {\n return\n }\n\n return css`\n ${\n alignX\n ? css`\n justify-self: ${alignX};\n `\n : ''\n }\n ${\n alignY\n ? css`\n align-self: ${alignY};\n `\n : ''\n }\n `\n}\n\nexport type FlexAlignProps = {\n /**\n * Left–right alignment. Same meaning on `Panels`, `Rows`, and `Cols`.\n * Omitted: cross-axis `stretch`, main-axis `start` (CSS flex initials for this direction).\n * `Rows` / `Cols` load that pair from `defaults.rows` / `defaults.cols`.\n * `Panels` uses the same initials for the current direction (column vs `horizontal`).\n * `space-*` only does something when X is the main axis (`horizontal` `Panels` / `Cols`).\n * `baseline` only does something when X is the cross axis (default `Panels` / `Rows`).\n */\n alignX?: AlignValue\n /**\n * Top–bottom alignment. Same meaning on `Panels`, `Rows`, and `Cols`.\n * Omitted: same initials as `alignX` (cross `stretch`, main `start`).\n * `space-*` only does something when Y is the main axis (default `Panels` / `Rows`).\n * `baseline` only does something when Y is the cross axis (`horizontal` `Panels` / `Cols`).\n */\n alignY?: AlignValue\n}\n\n/** CSS flex initials as screen axes: column → X stretch / Y start; row → X start / Y stretch. */\nexport function defaultFlexAlign(column: boolean | undefined): {\n alignX: AlignValue\n alignY: AlignValue\n} {\n return column ? { alignX: 'stretch', alignY: 'start' } : { alignX: 'start', alignY: 'stretch' }\n}\n\nexport function flexAlignCss(\n column: boolean | undefined,\n alignX?: AlignValue,\n alignY?: AlignValue,\n) {\n const justify = column ? alignY : alignX\n const align = column ? alignX : alignY\n if (!justify && !align) {\n return\n }\n\n return css`\n ${\n justify\n ? css`\n justify-content: ${justify};\n `\n : ''\n }\n ${\n align\n ? css`\n align-items: ${align};\n `\n : ''\n }\n `\n}\n\nexport function resolveAlignValue(value: AlignValue | undefined, fallback: AlignValue): AlignValue {\n return value ?? fallback\n}\n\n/**\n * `flex` grows (`1 1 0%`) and can shrink below intrinsic content (`min-width` / `min-height` 0)\n * so a nested scrolling pane works in a split. Items (`Panel`, `Row`, `Col`, `Div`) pass\n * `shrinkZeroUntilFlex` so they do not collapse until `flex`.\n */\nexport function flexItemCss(flex?: boolean, shrinkZeroUntilFlex?: boolean) {\n if (flex) {\n return css`\n flex: 1 1 0%;\n min-width: 0;\n min-height: 0;\n `\n }\n if (shrinkZeroUntilFlex) {\n return css`\n flex-shrink: 0;\n `\n }\n return\n}\n\n/**\n * Main-axis pack after `stack` (column). Explicit `alignY` wins.\n * Omitted is `start` — not the row cross-axis theme default (`stretch`).\n */\nexport function stackedMainAlign(alignY?: AlignValue): AlignValue {\n return alignY ?? 'start'\n}\n","import { css } from 'styled-components'\n\nimport { type ScrollValue } from '~/src/theme/types'\n\nexport type ScrollProps = {\n /**\n * Scroll this box when content overflows. Opt in on `Panels` and `Panel` only\n * (`Rows` / `Cols` are stacks, not scrollports).\n * `vertical` / `horizontal` / `both`. Omit for no clip.\n * Horizontal still needs inner content wider than this box (`width` / `minWidth` on children).\n */\n scroll?: ScrollValue\n}\n\nexport function scrollCss(scroll?: ScrollValue) {\n if (!scroll) {\n return\n }\n\n const y = scroll === 'vertical' || scroll === 'both'\n const x = scroll === 'horizontal' || scroll === 'both'\n\n return css`\n overflow-x: ${x ? 'auto' : 'hidden'};\n overflow-y: ${y ? 'auto' : 'hidden'};\n ${\n y\n ? css`\n min-height: 0;\n `\n : ''\n }\n ${\n x\n ? css`\n min-width: 0;\n `\n : ''\n }\n `\n}\n","import { createContext, type ReactNode, useContext } from 'react'\nimport { css } from 'styled-components'\n\nimport { type AlignValue } from '~/src/theme/types'\n\nexport type TrackKind = 'row' | 'column' | 'grid'\n\nconst TrackContext = createContext<TrackKind | undefined>(undefined)\n\nexport function TrackProvider({ kind, children }: { kind: TrackKind; children: ReactNode }) {\n return <TrackContext.Provider value={kind}>{children}</TrackContext.Provider>\n}\n\nexport function useTrackKind() {\n return useContext(TrackContext)\n}\n\n/**\n * Screen-axis self alignment. Omit = inherit.\n * `grid` / unknown: `justify-self` / `align-self`.\n * Flex row: `alignY` → `align-self` (`alignX` no-op).\n * Flex column: `alignX` → `align-self` (`alignY` no-op).\n */\nexport function selfAlignCss(\n kind: TrackKind | undefined,\n alignX?: AlignValue,\n alignY?: AlignValue,\n) {\n if (kind === 'column') {\n if (!alignX) {\n return\n }\n\n return css`\n align-self: ${alignX};\n `\n }\n\n if (kind === 'row') {\n if (!alignY) {\n return\n }\n\n return css`\n align-self: ${alignY};\n `\n }\n\n if (!alignX && !alignY) {\n return\n }\n\n return css`\n ${\n alignX\n ? css`\n justify-self: ${alignX};\n `\n : ''\n }\n ${\n alignY\n ? css`\n align-self: ${alignY};\n `\n : ''\n }\n `\n}\n","/** Named aliases on the 7-step ramp. Same names as later hue ramps (`palette.red.dark`, …). */\nexport const grayTokens = ['extraDark', 'dark', 'base', 'light', 'extraLight'] as const\n\nexport type GrayToken = (typeof grayTokens)[number]\n\n/** Even-L* grayscale including black (`0`) and white (`6`). */\nexport const grayRampTokens = [0, 1, 2, 3, 4, 5, 6] as const\n\nexport type GrayRampToken = (typeof grayRampTokens)[number]\n\nexport type GrayScale = Record<GrayToken | GrayRampToken, string>\n\nconst grayRamp = [\n '#000000',\n '#292929',\n '#4e4e4e',\n '#777777',\n '#a2a2a2',\n '#d0d0d0',\n '#ffffff',\n] as const\n\n/**\n * Importable color bank. Not a `createPanelizeTheme` key.\n * `palette.gray[0]`–`[6]` is the CVD-spaced ramp. Names alias those steps.\n * Adjacent steps are not a text-on-fill pair — skip at least one.\n */\nexport const palette = {\n black: grayRamp[0],\n white: grayRamp[6],\n gray: {\n 0: grayRamp[0],\n 1: grayRamp[1],\n 2: grayRamp[2],\n 3: grayRamp[3],\n 4: grayRamp[4],\n 5: grayRamp[5],\n 6: grayRamp[6],\n extraDark: grayRamp[1],\n dark: grayRamp[2],\n base: grayRamp[3],\n light: grayRamp[4],\n extraLight: grayRamp[5],\n } satisfies GrayScale,\n} as const\n\nexport type Palette = typeof palette\n","import { type BrandState } from '~/src/theme/types'\n\nfunction parseHex(hex: string): [number, number, number] | null {\n const raw = hex.trim()\n const short = /^#([\\da-fA-F])([\\da-fA-F])([\\da-fA-F])$/.exec(raw)\n if (short) {\n return [\n Number.parseInt(short[1] + short[1], 16),\n Number.parseInt(short[2] + short[2], 16),\n Number.parseInt(short[3] + short[3], 16),\n ]\n }\n\n const full = /^#([\\da-fA-F]{2})([\\da-fA-F]{2})([\\da-fA-F]{2})$/.exec(raw)\n if (!full) {\n return null\n }\n\n return [Number.parseInt(full[1], 16), Number.parseInt(full[2], 16), Number.parseInt(full[3], 16)]\n}\n\nfunction toHex(r: number, g: number, b: number): string {\n return `#${[r, g, b].map((n) => n.toString(16).padStart(2, '0')).join('')}`\n}\n\nfunction mixChannel(from: number, to: number, amount: number): number {\n return Math.round(from + (to - from) * amount)\n}\n\nfunction mixHex(hex: string, toward: number, amount: number): string | null {\n const rgb = parseHex(hex)\n if (!rgb) {\n return null\n }\n\n return toHex(\n mixChannel(rgb[0], toward, amount),\n mixChannel(rgb[1], toward, amount),\n mixChannel(rgb[2], toward, amount),\n )\n}\n\n/** Hover: mix toward white. Active: mix toward black. Non-hex `base` copies into hover/active. */\nexport function expandBrandHex(base: string): BrandState {\n return {\n base,\n hover: mixHex(base, 255, 0.25) ?? base,\n active: mixHex(base, 0, 0.055) ?? base,\n }\n}\n","import { type FontFamilyScale, type FontSizeScale, type FontWeightScale } from '~/src/theme/types'\n\n/** Tailwind-adjacent rem scale (16px root). */\nexport const defaultFontSizes: FontSizeScale = {\n extraSmall: '0.75rem',\n small: '0.875rem',\n base: '1rem',\n large: '1.25rem',\n extraLarge: '1.5rem',\n}\n\n/** CSS `font-weight`. `Text` defaults to `base` so parent weight does not leak. Host must load `thin` (100). */\nexport const defaultFontWeights: FontWeightScale = {\n thin: '100',\n base: '400',\n bold: '700',\n heavy: '800',\n}\n\n/** Host apps must load these files. The library only sets `font-family`. */\nexport const defaultFontFamilies: FontFamilyScale = {\n base: '\"Open Sans\", sans-serif',\n display: 'Montserrat, sans-serif',\n mono: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n}\n\n/** Unitless UI leading (`font-size × this`). Tight so flex centers the glyphs, not extra leading. */\nexport const defaultLineHeight = 1.2\n","import { defaultBorderWidths, defaultRadii } from '~/src/theme/borders'\nimport { expandBrandHex } from '~/src/theme/brand'\nimport { defaultBreakpoints } from '~/src/theme/breakpoints'\nimport { palette } from '~/src/theme/color'\nimport {\n defaultFontFamilies,\n defaultFontSizes,\n defaultFontWeights,\n defaultLineHeight,\n} from '~/src/theme/font'\nimport { defaultSpace } from '~/src/theme/space'\nimport {\n type BrandColors,\n type BrandOverrides,\n type BrandSlotOverride,\n type BrandState,\n type BreakpointScale,\n breakpointTokens,\n type ButtonDefaults,\n type CheckboxDefaults,\n type ChipDefaults,\n type ColDefaults,\n type ColorScheme,\n type ColorSchemes,\n type DeepPartial,\n type FlexDefaults,\n fontFamilyTokens,\n fontSizeTokens,\n fontWeightTokens,\n type HeadingDefaults,\n headingLevels,\n type InputDefaults,\n type LayoutDefaults,\n type PanelColors,\n type PanelizeTheme,\n type PanelizeThemeOverrides,\n type PanelsDefaults,\n type PanelTextColors,\n panelTextRoles,\n panelVariants,\n type RadioDefaults,\n type RowDefaults,\n type SelectDefaults,\n type SpaceScale,\n spaceTokens,\n type SpacingDefaults,\n type StatusColors,\n type StatusOverrides,\n type SwitchDefaults,\n type TextareaDefaults,\n type TextDefaults,\n type TextLinkDefaults,\n type ThemeColors,\n} from '~/src/theme/types'\n\nconst noneSpacing: SpacingDefaults = {\n padding: 'none',\n margin: 'none',\n}\n\nconst noneLayout: LayoutDefaults = {\n ...noneSpacing,\n borderWidth: 'none',\n borderRadius: 'none',\n}\n\nconst defaultRow: RowDefaults = {\n ...noneLayout,\n height: 'auto',\n}\n\nconst defaultCol: ColDefaults = {\n ...noneLayout,\n width: 'auto',\n}\n\nconst defaultRows: FlexDefaults = {\n ...noneSpacing,\n gap: 'none',\n alignX: 'stretch',\n alignY: 'start',\n}\n\nconst defaultCols: FlexDefaults = {\n ...noneSpacing,\n gap: 'none',\n alignX: 'start',\n alignY: 'stretch',\n}\n\nconst defaultGrid: FlexDefaults = {\n ...noneSpacing,\n gap: 'none',\n alignX: 'stretch',\n alignY: 'stretch',\n}\n\nconst defaultDarkColors: ThemeColors = {\n muted: {\n background: '#222222',\n text: {\n base: palette.gray.extraLight,\n muted: palette.gray.base,\n highlighted: palette.white,\n },\n border: palette.gray.dark,\n },\n base: {\n background: '#333333',\n text: {\n base: palette.gray.extraLight,\n muted: palette.gray.light,\n highlighted: palette.white,\n },\n border: palette.gray.base,\n },\n highlighted: {\n background: palette.gray.dark,\n text: {\n base: palette.white,\n muted: palette.gray.light,\n highlighted: palette.white,\n },\n border: palette.gray.base,\n },\n}\n\nconst defaultLightColors: ThemeColors = {\n muted: {\n background: '#f2f2f2',\n text: {\n base: '#222222',\n muted: palette.gray.base,\n highlighted: palette.black,\n },\n border: palette.gray.light,\n },\n base: {\n background: '#f7f7f7',\n text: {\n base: '#333333',\n muted: palette.gray.base,\n highlighted: palette.black,\n },\n border: palette.gray.base,\n },\n highlighted: {\n background: palette.white,\n text: {\n base: palette.gray.dark,\n muted: palette.gray.base,\n highlighted: palette.black,\n },\n border: palette.gray.base,\n },\n}\n\nexport const defaultTheme: PanelizeTheme = {\n mode: 'dark',\n colorSchemes: { dark: defaultDarkColors, light: defaultLightColors },\n colors: defaultDarkColors,\n brand: {\n primary: expandBrandHex('#ff9f2e'),\n secondary: expandBrandHex('#ff9f2e'),\n accent: expandBrandHex('#ff9f2e'),\n },\n status: {\n danger: expandBrandHex('#f2555a'),\n warning: expandBrandHex('#ffd60a'),\n success: expandBrandHex('#4ade80'),\n info: expandBrandHex('#38bdf8'),\n },\n space: defaultSpace,\n borderWidths: defaultBorderWidths,\n radii: defaultRadii,\n breakpoints: { ...defaultBreakpoints },\n fontSizes: defaultFontSizes,\n fontWeights: defaultFontWeights,\n fontFamilies: defaultFontFamilies,\n lineHeight: defaultLineHeight,\n defaults: {\n panel: { ...noneLayout },\n panels: { ...noneSpacing, gap: 'none' },\n rows: { ...defaultRows },\n row: { ...defaultRow },\n cols: { ...defaultCols },\n col: { ...defaultCol },\n grid: { ...defaultGrid },\n cell: { ...noneLayout },\n div: { ...noneLayout },\n text: { size: 'base', weight: 'base' },\n heading: {\n size: {\n 1: '2rem',\n 2: '1.5rem',\n 3: '1.17rem',\n 4: '1rem',\n 5: '0.83rem',\n 6: '0.67rem',\n },\n weight: 'bold',\n family: 'display',\n },\n textLink: { color: 'primary', hover: 'primary', hoverUnderline: false },\n button: {\n color: 'primary',\n size: 'small',\n weight: 'bold',\n ink: palette.black,\n hover: {\n color: palette.black,\n },\n paddingX: 'base',\n paddingY: 'small',\n gap: 'extraSmall',\n borderWidth: 'extraSmall',\n borderRadius: 'base',\n },\n chip: {\n color: 'primary',\n size: 'extraSmall',\n weight: 'bold',\n tint: '12%',\n paddingX: 'base',\n paddingY: 'extraSmall',\n gap: 'extraSmall',\n borderRadius: '999px',\n uppercase: true,\n },\n input: {\n color: 'primary',\n size: 'small',\n weight: 'base',\n paddingX: 'base',\n paddingY: 'small',\n borderWidth: 'extraSmall',\n borderRadius: 'base',\n },\n textarea: {\n color: 'primary',\n size: 'small',\n weight: 'base',\n paddingX: 'base',\n paddingY: 'small',\n borderWidth: 'extraSmall',\n borderRadius: 'base',\n resize: false,\n rows: 3,\n },\n select: {\n color: 'primary',\n size: 'small',\n weight: 'base',\n paddingX: 'base',\n paddingY: 'small',\n borderWidth: 'extraSmall',\n borderRadius: 'base',\n listMaxHeight: '16rem',\n listOffset: 'extraSmall',\n optionPaddingX: 'base',\n optionPaddingY: 'extraSmall',\n listZIndex: 1100,\n listShadow: '0 8px 24px rgb(0 0 0 / 35%)',\n },\n switch: {\n color: 'primary',\n size: 'base',\n ink: palette.white,\n widthFactor: 2,\n insetFactor: 0.2,\n borderRadius: '999px',\n },\n checkbox: {\n color: 'primary',\n size: 'base',\n ink: palette.black,\n borderWidth: 'extraSmall',\n borderRadius: 'small',\n },\n radio: {\n color: 'primary',\n size: 'base',\n borderWidth: 'extraSmall',\n borderRadius: '999px',\n insetFactor: 0.22,\n },\n },\n}\n\nfunction mergeTokenScale<T extends string>(\n tokens: readonly T[],\n base: Record<T, string>,\n overrides?: Partial<Record<T, string>>,\n): Record<T, string> {\n const next = { ...base }\n\n if (!overrides) {\n return next\n }\n\n for (const token of tokens) {\n const value = overrides[token]\n if (value !== undefined) {\n next[token] = value\n }\n }\n\n return next\n}\n\nfunction mergeScale(base: SpaceScale, overrides?: DeepPartial<SpaceScale>): SpaceScale {\n return mergeTokenScale(spaceTokens, base, overrides)\n}\n\nfunction mergeBreakpoints(\n base: BreakpointScale,\n overrides?: DeepPartial<BreakpointScale>,\n): BreakpointScale {\n return mergeTokenScale(breakpointTokens, base, overrides)\n}\n\nfunction mergeSpacingDefaults(\n base: SpacingDefaults,\n overrides?: DeepPartial<SpacingDefaults>,\n): SpacingDefaults {\n return {\n padding: overrides?.padding ?? base.padding,\n margin: overrides?.margin ?? base.margin,\n }\n}\n\nfunction mergeLayoutDefaults(\n base: LayoutDefaults,\n overrides?: DeepPartial<LayoutDefaults>,\n): LayoutDefaults {\n return {\n ...mergeSpacingDefaults(base, overrides),\n borderWidth: overrides?.borderWidth ?? base.borderWidth,\n borderRadius: overrides?.borderRadius ?? base.borderRadius,\n }\n}\n\nfunction mergeRowDefaults(base: RowDefaults, overrides?: DeepPartial<RowDefaults>): RowDefaults {\n return {\n ...mergeLayoutDefaults(base, overrides),\n height: overrides?.height ?? base.height,\n }\n}\n\nfunction mergeColDefaults(base: ColDefaults, overrides?: DeepPartial<ColDefaults>): ColDefaults {\n return {\n ...mergeLayoutDefaults(base, overrides),\n width: overrides?.width ?? base.width,\n }\n}\n\nfunction mergePanelsDefaults(\n base: PanelsDefaults,\n overrides?: DeepPartial<PanelsDefaults>,\n): PanelsDefaults {\n return {\n ...mergeSpacingDefaults(base, overrides),\n gap: overrides?.gap ?? base.gap,\n }\n}\n\nfunction mergeTextDefaults(\n base: TextDefaults,\n overrides?: DeepPartial<TextDefaults>,\n): TextDefaults {\n return {\n size: overrides?.size ?? base.size,\n weight: overrides?.weight ?? base.weight,\n }\n}\n\nfunction mergeHeadingDefaults(\n base: HeadingDefaults,\n overrides?: DeepPartial<HeadingDefaults>,\n): HeadingDefaults {\n const size = { ...base.size }\n for (const level of headingLevels) {\n const value = overrides?.size?.[level]\n if (value !== undefined) {\n size[level] = value\n }\n }\n return {\n size,\n weight: overrides?.weight ?? base.weight,\n family: overrides?.family ?? base.family,\n }\n}\n\nfunction mergeTextLinkDefaults(\n base: TextLinkDefaults,\n overrides?: DeepPartial<TextLinkDefaults>,\n): TextLinkDefaults {\n return {\n color: overrides?.color ?? base.color,\n hover: overrides?.hover ?? base.hover,\n hoverUnderline: overrides?.hoverUnderline ?? base.hoverUnderline,\n }\n}\n\nfunction mergeChipDefaults(\n base: ChipDefaults,\n overrides?: DeepPartial<ChipDefaults>,\n): ChipDefaults {\n return {\n color: overrides?.color ?? base.color,\n size: overrides?.size ?? base.size,\n weight: overrides?.weight ?? base.weight,\n tint: overrides?.tint ?? base.tint,\n paddingX: overrides?.paddingX ?? base.paddingX,\n paddingY: overrides?.paddingY ?? base.paddingY,\n gap: overrides?.gap ?? base.gap,\n borderRadius: overrides?.borderRadius ?? base.borderRadius,\n uppercase: overrides?.uppercase ?? base.uppercase,\n }\n}\n\nfunction mergeInputDefaults(\n base: InputDefaults,\n overrides?: DeepPartial<InputDefaults>,\n): InputDefaults {\n return {\n color: overrides?.color ?? base.color,\n size: overrides?.size ?? base.size,\n weight: overrides?.weight ?? base.weight,\n paddingX: overrides?.paddingX ?? base.paddingX,\n paddingY: overrides?.paddingY ?? base.paddingY,\n borderWidth: overrides?.borderWidth ?? base.borderWidth,\n borderRadius: overrides?.borderRadius ?? base.borderRadius,\n }\n}\n\nfunction mergeTextareaDefaults(\n base: TextareaDefaults,\n overrides?: DeepPartial<TextareaDefaults>,\n): TextareaDefaults {\n return {\n ...mergeInputDefaults(base, overrides),\n resize: overrides?.resize ?? base.resize,\n rows: overrides?.rows ?? base.rows,\n }\n}\n\nfunction mergeSelectDefaults(\n base: SelectDefaults,\n overrides?: DeepPartial<SelectDefaults>,\n): SelectDefaults {\n return {\n ...mergeInputDefaults(base, overrides),\n listMaxHeight: overrides?.listMaxHeight ?? base.listMaxHeight,\n listOffset: overrides?.listOffset ?? base.listOffset,\n optionPaddingX: overrides?.optionPaddingX ?? base.optionPaddingX,\n optionPaddingY: overrides?.optionPaddingY ?? base.optionPaddingY,\n listZIndex: overrides?.listZIndex ?? base.listZIndex,\n listShadow: overrides?.listShadow ?? base.listShadow,\n }\n}\n\nfunction mergeSwitchDefaults(\n base: SwitchDefaults,\n overrides?: DeepPartial<SwitchDefaults>,\n): SwitchDefaults {\n return {\n color: overrides?.color ?? base.color,\n size: overrides?.size ?? base.size,\n ink: overrides?.ink ?? base.ink,\n widthFactor: overrides?.widthFactor ?? base.widthFactor,\n insetFactor: overrides?.insetFactor ?? base.insetFactor,\n borderRadius: overrides?.borderRadius ?? base.borderRadius,\n }\n}\n\nfunction mergeCheckboxDefaults(\n base: CheckboxDefaults,\n overrides?: DeepPartial<CheckboxDefaults>,\n): CheckboxDefaults {\n return {\n color: overrides?.color ?? base.color,\n size: overrides?.size ?? base.size,\n ink: overrides?.ink ?? base.ink,\n borderWidth: overrides?.borderWidth ?? base.borderWidth,\n borderRadius: overrides?.borderRadius ?? base.borderRadius,\n }\n}\n\nfunction mergeRadioDefaults(\n base: RadioDefaults,\n overrides?: DeepPartial<RadioDefaults>,\n): RadioDefaults {\n return {\n color: overrides?.color ?? base.color,\n size: overrides?.size ?? base.size,\n borderWidth: overrides?.borderWidth ?? base.borderWidth,\n borderRadius: overrides?.borderRadius ?? base.borderRadius,\n insetFactor: overrides?.insetFactor ?? base.insetFactor,\n }\n}\n\nfunction mergeButtonDefaults(\n base: ButtonDefaults,\n overrides?: DeepPartial<ButtonDefaults>,\n): ButtonDefaults {\n return {\n color: overrides?.color ?? base.color,\n size: overrides?.size ?? base.size,\n weight: overrides?.weight ?? base.weight,\n ink: overrides?.ink ?? base.ink,\n hover: {\n color: overrides?.hover?.color ?? base.hover.color,\n background: overrides?.hover?.background ?? base.hover.background,\n },\n paddingX: overrides?.paddingX ?? base.paddingX,\n paddingY: overrides?.paddingY ?? base.paddingY,\n gap: overrides?.gap ?? base.gap,\n borderWidth: overrides?.borderWidth ?? base.borderWidth,\n borderRadius: overrides?.borderRadius ?? base.borderRadius,\n }\n}\n\nfunction mergeBrandSlot(current: BrandState, override?: BrandSlotOverride): BrandState {\n if (override === undefined) {\n return { ...current }\n }\n\n if (typeof override === 'string') {\n return expandBrandHex(override)\n }\n\n const base = override.base ?? current.base\n const derived = expandBrandHex(base)\n\n return {\n base,\n hover: override.hover ?? (override.base !== undefined ? derived.hover : current.hover),\n active: override.active ?? (override.base !== undefined ? derived.active : current.active),\n }\n}\n\nfunction mergeStatus(base: StatusColors, overrides?: StatusOverrides): StatusColors {\n return {\n danger: mergeBrandSlot(base.danger, overrides?.danger),\n warning: mergeBrandSlot(base.warning, overrides?.warning),\n success: mergeBrandSlot(base.success, overrides?.success),\n info: mergeBrandSlot(base.info, overrides?.info),\n }\n}\n\nfunction mergeBrand(base: BrandColors, overrides?: BrandOverrides): BrandColors {\n const primary = mergeBrandSlot(base.primary, overrides?.primary)\n const followPrimary = overrides?.primary !== undefined\n\n return {\n primary,\n secondary: mergeBrandSlot(followPrimary ? primary : base.secondary, overrides?.secondary),\n accent: mergeBrandSlot(followPrimary ? primary : base.accent, overrides?.accent),\n }\n}\n\nfunction mergeFlexDefaults(\n base: FlexDefaults,\n overrides?: DeepPartial<FlexDefaults>,\n): FlexDefaults {\n return {\n ...mergeSpacingDefaults(base, overrides),\n gap: overrides?.gap ?? base.gap,\n alignX: overrides?.alignX ?? base.alignX,\n alignY: overrides?.alignY ?? base.alignY,\n }\n}\n\nfunction mergePanelText(\n base: PanelTextColors,\n overrides?: DeepPartial<PanelTextColors>,\n): PanelTextColors {\n return mergeTokenScale(panelTextRoles, base, overrides)\n}\n\nfunction mergePanelColors(base: PanelColors, overrides?: DeepPartial<PanelColors>): PanelColors {\n return {\n background: overrides?.background ?? base.background,\n border: overrides?.border ?? base.border,\n text: mergePanelText(base.text, overrides?.text),\n }\n}\n\nfunction mergeSchemeColors(base: ThemeColors, overrides?: DeepPartial<ThemeColors>): ThemeColors {\n const colors: ThemeColors = { ...base }\n\n for (const variant of panelVariants) {\n colors[variant] = mergePanelColors(base[variant], overrides?.[variant])\n }\n\n const app = overrides?.app\n if (app?.background || app?.text) {\n colors.app = { ...base.app, ...app }\n } else if (base.app) {\n colors.app = { ...base.app }\n }\n\n return colors\n}\n\nexport function applyColorScheme(theme: PanelizeTheme, mode: ColorScheme): PanelizeTheme {\n return {\n ...theme,\n mode,\n colors: theme.colorSchemes[mode],\n }\n}\n\n/**\n * Merge overrides onto library defaults. Author `colors.dark` / `colors.light`.\n * The returned `colors` is the **dark slice**; both maps are `colorSchemes`.\n * Pass `mode` to `PanelizeProvider`, not here. Export a stable object and wrap with\n * `PanelizeProvider`. Full keys: `examples/panelize.theme.md`.\n */\nexport function createPanelizeTheme(overrides?: PanelizeThemeOverrides): PanelizeTheme {\n const colorSchemes: ColorSchemes = {\n dark: mergeSchemeColors(defaultTheme.colorSchemes.dark, overrides?.colors?.dark),\n light: mergeSchemeColors(defaultTheme.colorSchemes.light, overrides?.colors?.light),\n }\n const input = mergeInputDefaults(defaultTheme.defaults.input, overrides?.defaults?.input)\n\n return {\n mode: 'dark',\n colorSchemes,\n colors: colorSchemes.dark,\n brand: mergeBrand(defaultTheme.brand, overrides?.brand),\n status: mergeStatus(defaultTheme.status, overrides?.status),\n space: mergeScale(defaultTheme.space, overrides?.space),\n borderWidths: mergeScale(defaultTheme.borderWidths, overrides?.borderWidths),\n radii: mergeScale(defaultTheme.radii, overrides?.radii),\n breakpoints: mergeBreakpoints(defaultTheme.breakpoints, overrides?.breakpoints),\n fontSizes: mergeTokenScale(fontSizeTokens, defaultTheme.fontSizes, overrides?.fontSizes),\n fontWeights: mergeTokenScale(\n fontWeightTokens,\n defaultTheme.fontWeights,\n overrides?.fontWeights,\n ),\n fontFamilies: mergeTokenScale(\n fontFamilyTokens,\n defaultTheme.fontFamilies,\n overrides?.fontFamilies,\n ),\n lineHeight: overrides?.lineHeight ?? defaultTheme.lineHeight,\n defaults: {\n panel: mergeLayoutDefaults(defaultTheme.defaults.panel, overrides?.defaults?.panel),\n panels: mergePanelsDefaults(defaultTheme.defaults.panels, overrides?.defaults?.panels),\n rows: mergeFlexDefaults(defaultTheme.defaults.rows, overrides?.defaults?.rows),\n row: mergeRowDefaults(defaultTheme.defaults.row, overrides?.defaults?.row),\n cols: mergeFlexDefaults(defaultTheme.defaults.cols, overrides?.defaults?.cols),\n col: mergeColDefaults(defaultTheme.defaults.col, overrides?.defaults?.col),\n grid: mergeFlexDefaults(defaultTheme.defaults.grid, overrides?.defaults?.grid),\n cell: mergeLayoutDefaults(defaultTheme.defaults.cell, overrides?.defaults?.cell),\n div: mergeLayoutDefaults(defaultTheme.defaults.div, overrides?.defaults?.div),\n text: mergeTextDefaults(defaultTheme.defaults.text, overrides?.defaults?.text),\n heading: mergeHeadingDefaults(defaultTheme.defaults.heading, overrides?.defaults?.heading),\n textLink: mergeTextLinkDefaults(\n defaultTheme.defaults.textLink,\n overrides?.defaults?.textLink,\n ),\n button: mergeButtonDefaults(defaultTheme.defaults.button, overrides?.defaults?.button),\n chip: mergeChipDefaults(defaultTheme.defaults.chip, overrides?.defaults?.chip),\n input,\n textarea: mergeTextareaDefaults(\n {\n ...input,\n resize: defaultTheme.defaults.textarea.resize,\n rows: defaultTheme.defaults.textarea.rows,\n },\n overrides?.defaults?.textarea,\n ),\n select: mergeSelectDefaults(\n {\n ...input,\n listMaxHeight: defaultTheme.defaults.select.listMaxHeight,\n listOffset: defaultTheme.defaults.select.listOffset,\n optionPaddingX: defaultTheme.defaults.select.optionPaddingX,\n optionPaddingY: defaultTheme.defaults.select.optionPaddingY,\n listZIndex: defaultTheme.defaults.select.listZIndex,\n listShadow: defaultTheme.defaults.select.listShadow,\n },\n overrides?.defaults?.select,\n ),\n switch: mergeSwitchDefaults(defaultTheme.defaults.switch, overrides?.defaults?.switch),\n checkbox: mergeCheckboxDefaults(\n defaultTheme.defaults.checkbox,\n overrides?.defaults?.checkbox,\n ),\n radio: mergeRadioDefaults(defaultTheme.defaults.radio, overrides?.defaults?.radio),\n },\n }\n}\n","import { createContext, type ReactNode, useContext, useMemo } from 'react'\nimport { css, styled } from 'styled-components'\n\nimport { applyColorScheme, createPanelizeTheme, defaultTheme } from '~/src/theme/defaults'\nimport type { ColorScheme, PanelizeTheme, PanelizeThemeOverrides } from '~/src/theme/types'\n\nfunction isResolvedTheme(\n theme: PanelizeTheme | PanelizeThemeOverrides | undefined,\n): theme is PanelizeTheme {\n return (\n !!theme &&\n 'colorSchemes' in theme &&\n theme.colorSchemes?.dark?.muted != null &&\n theme.colorSchemes?.light?.muted != null\n )\n}\n\nexport const appCssVars = {\n background: '--panelize-app-bg',\n text: '--panelize-app-text',\n} as const\n\nconst PanelizeThemeContext = createContext<PanelizeTheme>(defaultTheme)\n\nconst AppCanvas = styled.div<{\n $colorScheme: ColorScheme\n $background?: string\n $text?: string\n}>`\n position: relative;\n min-height: 100%;\n height: 100%;\n color-scheme: ${({ $colorScheme }) => $colorScheme};\n ${({ $background }) =>\n $background\n ? css`\n ${appCssVars.background}: ${$background};\n background: var(${appCssVars.background});\n `\n : ''}\n ${({ $text }) =>\n $text\n ? css`\n ${appCssVars.text}: ${$text};\n color: var(${appCssVars.text});\n `\n : ''}\n`\n\n/**\n * Puts the theme on the tree. Wrap the host once. Does not replace the host’s styled-components\n * `ThemeProvider`. Does not set `html` / `body`. `mode` selects `dark` / `light`.\n *\n * @example\n * ```tsx\n * <PanelizeProvider theme={panelizeTheme} mode={mode}>\n * <App />\n * </PanelizeProvider>\n * ```\n */\nexport function PanelizeProvider({\n theme,\n mode = 'dark',\n children,\n}: {\n theme?: PanelizeTheme | PanelizeThemeOverrides\n /**\n * Active color scheme. Default `dark`. Hosts toggle by passing the other value.\n * Sets CSS `color-scheme` on the canvas wrapper (native scrollbars / form controls).\n */\n mode?: ColorScheme\n children: ReactNode\n}) {\n const built = useMemo(\n () => (isResolvedTheme(theme) ? theme : createPanelizeTheme(theme)),\n [theme],\n )\n const value = useMemo(() => applyColorScheme(built, mode), [built, mode])\n const app = value.colors.app\n\n return (\n <PanelizeThemeContext.Provider value={value}>\n <AppCanvas $colorScheme={mode} $background={app?.background} $text={app?.text}>\n {children}\n </AppCanvas>\n </PanelizeThemeContext.Provider>\n )\n}\n\n/**\n * Active theme for views and custom components. `.colors` is the current scheme’s surfaces\n * (`muted` / `base` / `highlighted` / `app`), not `{ dark, light }`. `.mode` is the scheme name.\n * `.brand` / `.status` are shared. Prefer inheriting `--panelize-*` from the nearest `Panel`\n * when you only need surface paint.\n *\n * @example\n * ```tsx\n * const { colors, space } = usePanelizeTheme()\n * ```\n */\nexport function usePanelizeTheme() {\n return useContext(PanelizeThemeContext)\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { css, styled } from 'styled-components'\n\nimport {\n type BoxEdges,\n boxEdgesCss,\n flexItemCss,\n resolveBorderColor,\n resolveBorderEdges,\n resolveBoxEdges,\n resolveBoxSize,\n type ResolvedBoxSize,\n resolveScaleValue,\n scrollCss,\n selfAlignCss,\n sizeCss,\n takeBoxLayout,\n type TrackKind,\n useTrackKind,\n} from '~/src/theme/internal'\n\nimport {\n type AlignValue,\n type BorderColorValue,\n type BoxSpacingProps,\n type DirectionalBorderProps,\n type PanelColors,\n type PanelVariant,\n type ScrollProps,\n type ScrollValue,\n type SelfAlignProps,\n type SizeProps,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nexport const panelCssVars = {\n background: '--panelize-bg',\n text: '--panelize-text',\n textMuted: '--panelize-text-muted',\n textHighlighted: '--panelize-text-highlighted',\n border: '--panelize-border',\n} as const\n\ntype StyledPanelProps = {\n $flex?: boolean\n $colors: PanelColors\n $edges: BoxEdges\n $size: ResolvedBoxSize\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $scroll?: ScrollValue\n $fill?: boolean\n $alignX?: AlignValue\n $alignY?: AlignValue\n $trackKind?: TrackKind\n $customCss?: string\n}\n\nconst StyledPanel = styled.div<StyledPanelProps>`\n position: relative;\n ${({ $edges }) => boxEdgesCss($edges)}\n ${({ $size, $fill }) => sizeCss($size, $fill)}\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n background: var(${panelCssVars.background});\n color: var(${panelCssVars.text});\n border-color: var(${panelCssVars.border});\n ${({ $colors, $borderColor }) => css`\n ${panelCssVars.background}: ${$colors.background};\n ${panelCssVars.text}: ${$colors.text.base};\n ${panelCssVars.textMuted}: ${$colors.text.muted};\n ${panelCssVars.textHighlighted}: ${$colors.text.highlighted};\n ${panelCssVars.border}: ${$borderColor};\n `}\n ${({ $flex }) => flexItemCss($flex, true)}\n ${({ $scroll }) => scrollCss($scroll)}\n ${({ $trackKind, $alignX, $alignY }) => selfAlignCss($trackKind, $alignX, $alignY)}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type PanelProps = ComponentPropsWithoutRef<'div'> &\n BoxSpacingProps &\n SizeProps &\n SelfAlignProps &\n ScrollProps &\n DirectionalBorderProps & {\n /**\n * Grow to fill remaining flex space (`flex: 1 1 0%`, `min-width` / `min-height` 0 so nested\n * `scroll` can shrink). Until then this box is `flex-shrink: 0` so a column of panels does not\n * collapse.\n */\n flex?: boolean\n /**\n * Size to the parent (`height` and `width` 100%). Explicit `width` / `height` win on that axis.\n * Do not use on the inner surface of a scrolling shell — that locks height and the paint\n * will not grow. Use `minHeight=\"100%\"` instead.\n */\n fill?: boolean\n /** Color palette: `muted`, `base`, or `highlighted`. Default `base`. */\n variant?: PanelVariant\n /** Border radius token (`small`) or CSS length. Default `none`. */\n borderRadius?: SpaceValue\n /**\n * Panel surface (`muted` / `base` / `highlighted`), brand (`primary`), status (`danger`), or CSS.\n * Default is this panel’s variant border. `base` is the surface, not a brand slot.\n */\n borderColor?: BorderColorValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n }\n\n/**\n * Section surface. Direct child of `Panels` only. Open inside: tracks, `Div`, type, controls,\n * nested `Panels`, custom components. Not a stray `Row` / `Col` / `Cell`. `variant` paints\n * `--panelize-*` for descendants.\n *\n * @example\n * ```tsx\n * <Panels fill>\n * <Panel variant='base' padding='base'>\n * <Heading level={2}>Account</Heading>\n * </Panel>\n * </Panels>\n * ```\n */\nexport function Panel(props: PanelProps) {\n const { spacing, size, rest } = takeBoxLayout(props)\n const {\n flex,\n fill,\n alignX,\n alignY,\n variant = 'base',\n css: customCss,\n borderWidth,\n borderX,\n borderY,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderRadius,\n borderColor,\n scroll,\n ...dom\n } = rest\n const { colors, space, borderWidths, radii, defaults, brand, status } = usePanelizeTheme()\n const trackKind = useTrackKind()\n\n return (\n <StyledPanel\n $flex={flex}\n $fill={fill}\n $colors={colors[variant]}\n $edges={resolveBoxEdges(spacing, defaults.panel, space)}\n $size={resolveBoxSize(size, space)}\n $borderWidth={resolveBorderEdges(\n { borderWidth, borderX, borderY, borderTop, borderRight, borderBottom, borderLeft },\n defaults.panel.borderWidth,\n borderWidths,\n )}\n $borderRadius={resolveScaleValue(borderRadius, defaults.panel.borderRadius, radii)}\n $borderColor={resolveBorderColor(borderColor, variant, colors, brand, status)}\n $scroll={scroll}\n $alignX={alignX}\n $alignY={alignY}\n $trackKind={trackKind}\n $customCss={customCss}\n {...dom}\n />\n )\n}\n","import {\n type BrandColors,\n type BrandToken,\n brandTokens,\n type ChromaState,\n type ColorValue,\n type StatusColors,\n type StatusToken,\n statusTokens,\n} from '~/src/theme'\n\nimport { panelCssVars } from '~/src/components/layout/Panel'\n\nexport function isBrandToken(color: string | undefined): color is BrandToken {\n return !!color && (brandTokens as readonly string[]).includes(color)\n}\n\nexport function isStatusToken(color: string | undefined): color is StatusToken {\n return !!color && (statusTokens as readonly string[]).includes(color)\n}\n\nexport function isChromaToken(color: string | undefined): color is BrandToken | StatusToken {\n return isBrandToken(color) || isStatusToken(color)\n}\n\nexport function resolveChromaSlot(\n color: ColorValue,\n brand: BrandColors,\n status: StatusColors,\n): ChromaState {\n if (isBrandToken(color)) {\n return brand[color]\n }\n\n if (isStatusToken(color)) {\n return status[color]\n }\n\n return { base: color, hover: color, active: color }\n}\n\n/** Field `color` prop: focus border / glow / caret — not glyph ink. */\nexport function resolveFocusColor(\n color: ColorValue,\n brand: BrandColors,\n status: StatusColors,\n): string {\n return resolveChromaSlot(color, brand, status).base\n}\n\nexport function resolveTextColor(\n color: ColorValue | undefined,\n highlighted: boolean | undefined,\n muted: boolean | undefined,\n brand: BrandColors,\n status: StatusColors,\n): string {\n if (color !== undefined && isChromaToken(color)) {\n return resolveChromaSlot(color, brand, status).base\n }\n\n if (color) {\n return color\n }\n\n if (highlighted) {\n return `var(${panelCssVars.textHighlighted})`\n }\n\n if (muted) {\n return `var(${panelCssVars.textMuted})`\n }\n\n return `var(${panelCssVars.text})`\n}\n\n/** Rest `primary` + hover `primary` → `.hover`. Rest white + hover `primary` → `.base`. */\nexport function resolveLinkHover(\n restToken: ColorValue | undefined,\n hover: ColorValue | 'inherit',\n brand: BrandColors,\n status: StatusColors,\n): { hover: string; active: string } {\n const restSlot =\n restToken !== undefined && isChromaToken(restToken)\n ? resolveChromaSlot(restToken, brand, status)\n : undefined\n\n if (hover === 'inherit') {\n const ink = `var(${panelCssVars.text})`\n return { hover: ink, active: restSlot?.active ?? ink }\n }\n\n if (isChromaToken(hover)) {\n const slot = resolveChromaSlot(hover, brand, status)\n const useHoverStep = restToken === hover\n return {\n hover: useHoverStep ? slot.hover : slot.base,\n active: slot.active,\n }\n }\n\n return { hover, active: restSlot?.active ?? hover }\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { css, styled } from 'styled-components'\n\nimport { resolvePaintSteps, resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type BrandColors,\n type BrandState,\n type BrandStateToken,\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n type PaintSteps,\n type SpaceValue,\n type StatusColors,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { isChromaToken, resolveChromaSlot } from '~/src/components/text/color'\n\ntype StyledButtonProps = {\n $size: string\n $weight: string\n $family: string\n $lineHeight: number | string\n $paddingX: string\n $paddingY: string\n $gap: string\n $borderWidth: string\n $borderRadius: string\n $restBg: string\n $restFg: string\n $restBorder: string\n $hoverBg: string\n $hoverFg: string\n $hoverBorder: string\n $activeBg: string\n $activeFg: string\n $activeBorder: string\n $italic?: boolean\n $uppercase?: boolean\n $fill?: boolean\n $customCss?: string\n}\n\nconst StyledButton = styled.button<StyledButtonProps>`\n appearance: none;\n display: ${({ $fill }) => ($fill ? 'flex' : 'inline-flex')};\n align-items: center;\n justify-content: center;\n gap: ${({ $gap }) => $gap};\n ${({ $fill }) =>\n $fill\n ? css`\n width: 100%;\n height: 100%;\n `\n : ''}\n margin: 0;\n box-sizing: border-box;\n cursor: pointer;\n font-family: ${({ $family }) => $family};\n font-size: ${({ $size }) => $size};\n font-weight: ${({ $weight }) => $weight};\n line-height: ${({ $lineHeight }) => $lineHeight};\n padding: ${({ $paddingY, $paddingX }) => `${$paddingY} ${$paddingX}`};\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $restBorder }) => $restBorder};\n background: ${({ $restBg }) => $restBg};\n color: ${({ $restFg }) => $restFg};\n &:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n }\n &:hover:not(:disabled) {\n background: ${({ $hoverBg }) => $hoverBg};\n color: ${({ $hoverFg }) => $hoverFg};\n border-color: ${({ $hoverBorder }) => $hoverBorder};\n }\n &:active:not(:disabled) {\n background: ${({ $activeBg }) => $activeBg};\n color: ${({ $activeFg }) => $activeFg};\n border-color: ${({ $activeBorder }) => $activeBorder};\n }\n &:disabled {\n cursor: not-allowed;\n opacity: 0.45;\n }\n ${({ $italic }) =>\n $italic\n ? css`\n font-style: italic;\n `\n : ''}\n ${({ $uppercase }) =>\n $uppercase\n ? css`\n text-transform: uppercase;\n `\n : ''}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type ButtonProps = ComponentPropsWithoutRef<'button'> & {\n /**\n * Brand (`primary` / `secondary` / `accent`), status (`danger` / `warning` / `success` / `info`), or raw CSS.\n * Theme default `primary`. Rest, hover, and active stay on that slot.\n */\n color?: ColorValue\n /** Border + slot label, panel shows through. Omit = filled. */\n outline?: boolean\n /** Font size token (`small`) or CSS — not the control box. Theme default `small`. Stretch with `fill`. */\n size?: FontSizeValue\n /** Font weight token (`thin` / `base` / `bold` / `heavy`) or CSS. Theme default `bold`. */\n weight?: FontWeightValue\n /** `fontFamilies` token. Omit uses `base`. */\n family?: FontFamilyToken\n /** Italic. Default off. */\n italic?: boolean\n /** `text-transform: uppercase`. Default off. */\n uppercase?: boolean\n /**\n * Width and height 100% of the parent. Height `%` only applies when the parent has a\n * definite height. Same idea as layout `fill`.\n */\n fill?: boolean\n /**\n * Visible caption. Preferred over a string as `children`.\n * Custom insides (`Cols` / `Text` / host icons) go in `children`; those win if both are set.\n * No visible text: set `aria-label`.\n */\n label?: string\n /** Extra CSS appended to this component’s styles. */\n css?: string\n /** Padding on all axes. Space token or CSS. Overrides theme `paddingX` / `paddingY` until those props are set. */\n padding?: SpaceValue\n /** Horizontal padding. Space token or CSS. Overrides `padding` and theme `paddingX`. */\n paddingX?: SpaceValue\n /** Vertical padding. Space token or CSS. Overrides `padding` and theme `paddingY`. */\n paddingY?: SpaceValue\n /** Border width token or CSS. Theme default `extraSmall`. */\n borderWidth?: SpaceValue\n /** Border radius token or CSS. Theme default `base`. */\n borderRadius?: SpaceValue\n /**\n * Fill. Token/CSS → all steps (`.base`). `{ base, hover, active }` for a one-off; omitted keys\n * keep the `color` slot (filled) or stay transparent (`outline`). Passing this on `outline` opts in to fill.\n */\n background?: PaintSteps\n /**\n * Label. Token/CSS → all steps (`.base`). `{ base, hover, active }` for a one-off; omitted keys\n * keep filled `defaults.button.ink` / hover label, or the `color` slot on `outline`.\n */\n ink?: PaintSteps\n}\n\nfunction resolveSlotStep(\n color: ColorValue,\n brand: BrandColors,\n status: StatusColors,\n step: BrandStateToken,\n): string {\n if (isChromaToken(color)) {\n return resolveChromaSlot(color, brand, status)[step]\n }\n\n return color\n}\n\nfunction filledHoverFill(\n slot: BrandState,\n override: string | undefined,\n step: 'hover' | 'active',\n): string {\n if (override !== undefined && !isChromaToken(override)) {\n return override\n }\n\n return slot[step]\n}\n\n/**\n * Control (`<button>`). Caption: `label` (preferred); `children` win. Place it in a `Col` /\n * `Row` / `Panel` — the wrapper positions it. `fill` stretches the button, not a panel.\n *\n * @example\n * ```tsx\n * <Cols gap='small'>\n * <Col>\n * <Button label='Save' />\n * </Col>\n * <Col>\n * <Button outline label='Cancel' />\n * </Col>\n * </Cols>\n * ```\n */\nexport function Button(props: ButtonProps) {\n const {\n color,\n outline,\n size,\n weight,\n family: familyToken,\n italic,\n uppercase,\n fill,\n label,\n css: customCss,\n padding,\n paddingX,\n paddingY,\n borderWidth,\n borderRadius,\n background,\n ink,\n type = 'button',\n children,\n ...dom\n } = props\n const {\n fontSizes,\n fontWeights,\n fontFamilies,\n lineHeight,\n space,\n borderWidths,\n radii,\n defaults,\n brand,\n status,\n colors,\n } = usePanelizeTheme()\n const slot = resolveChromaSlot(color ?? defaults.button.color, brand, status)\n const filled = !outline\n const hoverTheme = defaults.button.hover\n const filledHoverFg = resolveSlotStep(hoverTheme.color, brand, status, 'base')\n const paint = (\n value: PaintSteps | undefined,\n role: 'background' | 'text',\n step: BrandStateToken,\n ) => resolvePaintSteps(value, role, step, colors, brand, status)\n\n const fillAt = (step: BrandStateToken) => {\n const override = paint(background, 'background', step)\n if (override !== undefined) {\n return override\n }\n if (!filled) {\n return 'transparent'\n }\n if (step === 'base') {\n return slot.base\n }\n return filledHoverFill(slot, hoverTheme.background, step)\n }\n\n const inkAt = (step: BrandStateToken) => {\n const override = paint(ink, 'text', step)\n if (override !== undefined) {\n return override\n }\n if (!filled) {\n return slot[step]\n }\n return step === 'base' ? defaults.button.ink : filledHoverFg\n }\n\n const restBg = fillAt('base')\n const hoverBg = fillAt('hover')\n const activeBg = fillAt('active')\n const restFg = inkAt('base')\n const hoverFg = inkAt('hover')\n const activeFg = inkAt('active')\n const restBorder = filled ? restBg : slot.base\n const hoverBorder = filled ? hoverBg : slot.hover\n const activeBorder = filled ? activeBg : slot.active\n\n return (\n <StyledButton\n type={type}\n $family={fontFamilies[familyToken ?? 'base']}\n $size={resolveScaleValue(size, defaults.button.size, fontSizes)}\n $weight={resolveScaleValue(weight, defaults.button.weight, fontWeights)}\n $lineHeight={lineHeight}\n $paddingX={resolveScaleValue(paddingX ?? padding, defaults.button.paddingX, space)}\n $paddingY={resolveScaleValue(paddingY ?? padding, defaults.button.paddingY, space)}\n $gap={resolveScaleValue(undefined, defaults.button.gap, space)}\n $borderWidth={resolveScaleValue(borderWidth, defaults.button.borderWidth, borderWidths)}\n $borderRadius={resolveScaleValue(borderRadius, defaults.button.borderRadius, radii)}\n $restBg={restBg}\n $restFg={restFg}\n $restBorder={restBorder}\n $hoverBg={hoverBg}\n $hoverFg={hoverFg}\n $hoverBorder={hoverBorder}\n $activeBg={activeBg}\n $activeFg={activeFg}\n $activeBorder={activeBorder}\n $italic={italic}\n $uppercase={uppercase}\n $fill={fill}\n $customCss={customCss}\n {...dom}\n >\n {children ?? label}\n </StyledButton>\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolvePaintValue, resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n type PaintValue,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { panelCssVars } from '~/src/components/layout/Panel'\nimport { resolveChromaSlot } from '~/src/components/text/color'\n\ntype StyledChipProps = {\n $size: string\n $weight: string\n $family: string\n $lineHeight: number | string\n $paddingX: string\n $paddingY: string\n $gap: string\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $bg: string\n $fg: string\n $uppercase?: boolean\n $customCss?: string\n}\n\nconst StyledChip = styled.span<StyledChipProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${({ $gap }) => $gap};\n margin: 0;\n box-sizing: border-box;\n white-space: nowrap;\n font-family: ${({ $family }) => $family};\n font-size: ${({ $size }) => $size};\n font-weight: ${({ $weight }) => $weight};\n line-height: ${({ $lineHeight }) => $lineHeight};\n padding: ${({ $paddingY, $paddingX }) => `${$paddingY} ${$paddingX}`};\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-color: ${({ $borderColor }) => $borderColor};\n border-radius: ${({ $borderRadius }) => $borderRadius};\n background: ${({ $bg }) => $bg};\n color: ${({ $fg }) => $fg};\n ${({ $uppercase }) => ($uppercase ? 'text-transform: uppercase;' : '')}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type ChipProps = ComponentPropsWithoutRef<'span'> & {\n /**\n * Brand (`primary` / `secondary` / `accent`), status (`danger` / …), or raw CSS.\n * Omit `ink` = this chroma on the label. Omit `background` = 12% mix into `--panelize-bg`.\n * Theme default `primary`.\n */\n color?: ColorValue\n /** Font size token or CSS. Theme default `extraSmall`. */\n size?: FontSizeValue\n /** Font weight token or CSS. Theme default `bold`. */\n weight?: FontWeightValue\n /** `fontFamilies` token. Omit uses `base`. */\n family?: FontFamilyToken\n /** `text-transform: uppercase`. Theme default `true`. */\n uppercase?: boolean\n /**\n * Visible caption. Preferred over a string as `children`.\n * Custom insides go in `children`; those win if both are set.\n */\n label?: string\n /** Extra CSS appended to this component’s styles. */\n css?: string\n /** Padding on all axes. Space token or CSS. Overrides theme until `paddingX` / `paddingY`. */\n padding?: SpaceValue\n /** Horizontal padding. Overrides `padding`. */\n paddingX?: SpaceValue\n /** Vertical padding. Overrides `padding`. */\n paddingY?: SpaceValue\n /** Border width token or CSS. Theme default `none` (no stroke). */\n borderWidth?: SpaceValue\n /** Border radius token or CSS. Theme default `999px` (capsule). */\n borderRadius?: SpaceValue\n /**\n * Rest fill. Surface, brand, status, or CSS. Omit = tint of `color` into `--panelize-bg`.\n */\n background?: PaintValue\n /**\n * Label ink. Surface, brand, status, or CSS. Omit = `color` chroma (`.base`).\n */\n ink?: PaintValue\n /**\n * Rest border. Surface, brand, status, or CSS. Omit = label chroma. Invisible until `borderWidth`.\n */\n borderColor?: PaintValue\n}\n\n/**\n * Badge (`<span>`), not a button. Label uses the chroma slot until `ink`. Place it with layout\n * — no hover, no `alignX`.\n *\n * @example\n * ```tsx\n * <Chip color='accent' label='New' />\n * ```\n */\nexport function Chip(props: ChipProps) {\n const {\n color,\n size,\n weight,\n family: familyToken,\n uppercase,\n label,\n css: customCss,\n padding,\n paddingX,\n paddingY,\n borderWidth,\n borderRadius,\n background,\n ink,\n borderColor,\n children,\n ...dom\n } = props\n const {\n fontSizes,\n fontWeights,\n fontFamilies,\n lineHeight,\n space,\n borderWidths,\n radii,\n defaults,\n brand,\n status,\n colors,\n } = usePanelizeTheme()\n const chip = defaults.chip\n const chroma = resolveChromaSlot(color ?? chip.color, brand, status).base\n const tint = chip.tint\n const tinted = `color-mix(in srgb, ${chroma} ${tint}, var(${panelCssVars.background}, transparent))`\n const bg = resolvePaintValue(background, 'background', colors, brand, status) ?? tinted\n const fg = resolvePaintValue(ink, 'text', colors, brand, status) ?? chroma\n const stroke = resolvePaintValue(borderColor, 'border', colors, brand, status) ?? chroma\n\n return (\n <StyledChip\n $family={fontFamilies[familyToken ?? 'base']}\n $size={resolveScaleValue(size, chip.size, fontSizes)}\n $weight={resolveScaleValue(weight, chip.weight, fontWeights)}\n $lineHeight={lineHeight}\n $paddingX={resolveScaleValue(paddingX ?? padding, chip.paddingX, space)}\n $paddingY={resolveScaleValue(paddingY ?? padding, chip.paddingY, space)}\n $gap={resolveScaleValue(undefined, chip.gap, space)}\n $borderWidth={resolveScaleValue(borderWidth, 'none', borderWidths)}\n $borderRadius={resolveScaleValue(borderRadius, chip.borderRadius, radii)}\n $borderColor={stroke}\n $bg={bg}\n $fg={fg}\n $uppercase={uppercase ?? chip.uppercase}\n $customCss={customCss}\n {...dom}\n >\n {children ?? label}\n </StyledChip>\n )\n}\n","import { type ComponentPropsWithRef, type Ref } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolvePaintSteps, resolvePaintValue, resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontSizeValue,\n type PaintSteps,\n type PaintValue,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { resolveChromaSlot } from '~/src/components/text/color'\n\ntype StyledCheckboxProps = {\n $width: string\n $height: string\n $size: string\n $radius: string\n $borderWidth: string\n $borderColor: string\n $hoverBorder: string\n $activeBorder: string\n $off: string\n $on: string\n $hoverOn: string\n $activeOn: string\n $ink: string\n $hideCheckIcon: boolean\n $customCss?: string\n}\n\nfunction assignRef(ref: Ref<HTMLInputElement> | undefined, node: HTMLInputElement | null) {\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n}\n\nconst StyledCheckbox = styled.input<StyledCheckboxProps>`\n appearance: none;\n margin: 0;\n flex-shrink: 0;\n box-sizing: border-box;\n position: relative;\n display: inline-block;\n vertical-align: middle;\n color: inherit;\n width: ${({ $width }) => $width};\n height: ${({ $height }) => $height};\n font-size: ${({ $size }) => $size};\n padding: 0;\n border: ${({ $borderWidth }) => $borderWidth} solid ${({ $borderColor }) => $borderColor};\n border-radius: ${({ $radius }) => $radius};\n background: ${({ $off }) => $off};\n cursor: pointer;\n transition:\n background 120ms ease,\n border-color 120ms ease,\n box-shadow 120ms ease;\n &::after {\n content: '';\n position: absolute;\n box-sizing: border-box;\n pointer-events: none;\n opacity: 0;\n }\n &:hover:not(:disabled):not(:checked):not(:indeterminate) {\n border-color: ${({ $hoverBorder }) => $hoverBorder};\n }\n &:active:not(:disabled):not(:checked):not(:indeterminate) {\n border-color: ${({ $activeBorder }) => $activeBorder};\n }\n &:checked,\n &:indeterminate {\n background: ${({ $on }) => $on};\n border-color: ${({ $on }) => $on};\n }\n &:is(:checked, :indeterminate):hover:not(:disabled) {\n background: ${({ $hoverOn }) => $hoverOn};\n border-color: ${({ $hoverOn }) => $hoverOn};\n }\n &:is(:checked, :indeterminate):active:not(:disabled) {\n background: ${({ $activeOn }) => $activeOn};\n border-color: ${({ $activeOn }) => $activeOn};\n }\n &:checked:not(:indeterminate)::after {\n opacity: ${({ $hideCheckIcon }) => ($hideCheckIcon ? 0 : 1)};\n left: 50%;\n top: 42%;\n width: 0.3em;\n height: 0.52em;\n border: solid ${({ $ink }) => $ink};\n border-width: 0 0.17em 0.17em 0;\n transform: translate(-50%, -50%) rotate(45deg);\n }\n &:indeterminate::after {\n opacity: 1;\n left: 50%;\n top: 50%;\n width: 50%;\n height: 0.17em;\n border: none;\n border-radius: 999px;\n background: ${({ $ink }) => $ink};\n transform: translate(-50%, -50%);\n }\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px color-mix(in srgb, ${({ $on }) => $on} 18%, transparent);\n }\n &:disabled {\n cursor: not-allowed;\n }\n &:disabled:is(:checked, :indeterminate) {\n opacity: 0.45;\n }\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type CheckboxProps = Omit<ComponentPropsWithRef<'input'>, 'size' | 'type'> & {\n /**\n * Brand (`primary` / `secondary` / `accent`), status (`danger` / …), or raw CSS.\n * Theme default `primary`. Checked / indeterminate fill uses this slot’s `.base` / `.hover` /\n * `.active` (same steps as `Button`). Empty rest / hover / active stroke is `currentColor`\n * (wrapping `Label` ink, else panel `text.base`) until `borderColor`.\n */\n color?: ColorValue\n /**\n * Type size token or CSS. Box is this size (`1em`), square. Theme default `base`. Native HTML\n * `size` is omitted. Use the same `size` on the paired `Label`.\n */\n size?: FontSizeValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n /**\n * Rest fill. Surface, brand, status, or CSS. Omit = transparent (panel shows through).\n */\n background?: PaintValue\n /**\n * Check / dash. Token/CSS → `.base` (same as filled `Button` `ink`). `{ base, hover, active }`\n * for a one-off; omitted keys keep `defaults.checkbox.ink`. Hover/active are unused (no hover\n * on the mark). Theme default `palette.black`.\n */\n ink?: PaintSteps\n /**\n * Rest (empty) border. Surface, brand, status, or CSS. Omit = `currentColor` (same as the\n * wrapping `Label`, else panel `text.base`). Checked stroke follows the fill.\n */\n borderColor?: PaintValue\n /** Border width token or CSS. Theme default `extraSmall` (`1px`). */\n borderWidth?: SpaceValue\n /** Box radius. Space token or CSS. Theme default `small`. */\n borderRadius?: SpaceValue\n /** Box width. Space token or CSS (not `fontSizes`). Overrides `size` on this axis. */\n width?: SpaceValue\n /** Box height. Space token or CSS (not `fontSizes`). Overrides `size` on this axis. */\n height?: SpaceValue\n /**\n * Native `indeterminate` property (dash). Not an HTML attribute. Host owns it. Does not set\n * `checked`. The dash still draws when `hideCheckIcon`.\n */\n indeterminate?: boolean\n /**\n * Hide the check glyph when `checked`. Default `false`. `true` = fill-only (chroma well, no\n * check). Does not hide the indeterminate dash.\n */\n hideCheckIcon?: boolean\n}\n\n/**\n * Native checkbox. `color` is the checked fill. Empty stroke follows wrapping `Label`\n * (`currentColor`). Wrap with `Label` (same `size`).\n *\n * @example\n * ```tsx\n * <Label htmlFor='email' label='Email' />\n * <Checkbox id='email' checked={on} onChange={(e) => setOn(e.target.checked)} />\n * ```\n */\nexport function Checkbox(props: CheckboxProps) {\n const {\n color,\n size,\n css: customCss,\n background,\n ink,\n borderColor,\n borderWidth,\n borderRadius,\n width,\n height,\n indeterminate = false,\n hideCheckIcon = false,\n ref,\n ...dom\n } = props\n const { space, radii, fontSizes, borderWidths, defaults, brand, status, colors } =\n usePanelizeTheme()\n const box = defaults.checkbox\n const slot = resolveChromaSlot(color ?? box.color, brand, status)\n const off = resolvePaintValue(background, 'background', colors, brand, status) ?? 'transparent'\n const markInk = resolvePaintSteps(ink, 'text', 'base', colors, brand, status) ?? box.ink\n const restBorder =\n resolvePaintValue(borderColor, 'border', colors, brand, status) ?? 'currentColor'\n const typeSize = resolveScaleValue(size, box.size, fontSizes)\n const edge = typeSize\n const boxWidth = width !== undefined ? resolveScaleValue(width, typeSize, space) : edge\n const boxHeight = height !== undefined ? resolveScaleValue(height, typeSize, space) : edge\n\n return (\n <StyledCheckbox\n $width={boxWidth}\n $height={boxHeight}\n $size={typeSize}\n $radius={resolveScaleValue(borderRadius, box.borderRadius, radii)}\n $borderWidth={resolveScaleValue(borderWidth, box.borderWidth, borderWidths)}\n $borderColor={restBorder}\n $hoverBorder={restBorder}\n $activeBorder={restBorder}\n $off={off}\n $on={slot.base}\n $hoverOn={slot.hover}\n $activeOn={slot.active}\n $ink={markInk}\n $hideCheckIcon={hideCheckIcon}\n $customCss={customCss}\n {...dom}\n ref={(node) => {\n if (node) {\n node.indeterminate = indeterminate\n }\n assignRef(ref, node)\n }}\n type='checkbox'\n />\n )\n}\n\nCheckbox.displayName = 'Checkbox'\n","import { css } from 'styled-components'\n\nimport { panelCssVars } from '~/src/components/layout/Panel'\n\nexport type FieldChromeVars = {\n $size: string\n $weight: string\n $family: string\n $lineHeight: number | string\n $paddingX: string\n $paddingY: string\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $bg: string\n $ink: string\n $focus: string\n $invalid: string\n $italic?: boolean\n $uppercase?: boolean\n $fill?: boolean\n $customCss?: string\n}\n\n/** Shared Input / Textarea / Select / MultiSelect chrome. Instance `color` is focus chroma, not ink. */\nexport const fieldChromeCss = css<FieldChromeVars>`\n appearance: none;\n margin: 0;\n box-sizing: border-box;\n min-width: 0;\n ${({ $fill }) =>\n $fill\n ? css`\n display: block;\n width: 100%;\n height: 100%;\n `\n : ''}\n font-family: ${({ $family }) => $family};\n font-size: ${({ $size }) => $size};\n font-weight: ${({ $weight }) => $weight};\n line-height: ${({ $lineHeight }) => $lineHeight};\n padding: ${({ $paddingY, $paddingX }) => `${$paddingY} ${$paddingX}`};\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $borderColor }) => $borderColor};\n background: ${({ $bg }) => $bg};\n color: ${({ $ink }) => $ink};\n caret-color: ${({ $focus }) => $focus};\n &::placeholder {\n color: var(${panelCssVars.textMuted});\n opacity: 1;\n }\n ${({ $focus, $invalid }) => css`\n &:focus {\n outline: none;\n border-color: ${$focus};\n box-shadow: 0 0 0 2px color-mix(in srgb, ${$focus} 18%, transparent);\n }\n &:user-invalid,\n &[aria-invalid='true'] {\n border-color: ${$invalid};\n box-shadow: 0 0 0 2px color-mix(in srgb, ${$invalid} 18%, transparent);\n caret-color: ${$invalid};\n }\n &:user-invalid:focus,\n &[aria-invalid='true']:focus {\n border-color: ${$invalid};\n box-shadow: 0 0 0 2px color-mix(in srgb, ${$invalid} 18%, transparent);\n caret-color: ${$invalid};\n }\n `}\n &:disabled {\n cursor: not-allowed;\n opacity: 0.45;\n }\n &:is(input, textarea):read-only {\n opacity: 0.45;\n }\n ${({ $italic }) =>\n $italic\n ? css`\n font-style: italic;\n `\n : ''}\n ${({ $uppercase }) =>\n $uppercase\n ? css`\n text-transform: uppercase;\n `\n : ''}\n`\n","import { type ComponentPropsWithRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolvePaintValue, resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n type PaintValue,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { fieldChromeCss, type FieldChromeVars } from '~/src/components/forms/field'\nimport { panelCssVars } from '~/src/components/layout/Panel'\nimport { resolveFocusColor } from '~/src/components/text/color'\n\nconst StyledInput = styled.input<FieldChromeVars>`\n ${fieldChromeCss}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type InputProps = Omit<ComponentPropsWithRef<'input'>, 'size'> & {\n /**\n * Focus chroma only (border, glow, caret). Not glyph ink — use `ink` (omit = `--panelize-text`).\n * Brand (`primary` / `secondary` / `accent`), status (`danger` / …), or raw CSS. Theme default `primary`.\n */\n color?: ColorValue\n /** Font size token or CSS. Theme default `small`. Native HTML `size` is omitted — use `fill` or a layout parent. */\n size?: FontSizeValue\n /** Font weight token or CSS. Theme default `base`. */\n weight?: FontWeightValue\n /** `fontFamilies` token. Omit uses `base`. */\n family?: FontFamilyToken\n /** Italic. Default off. */\n italic?: boolean\n /** `text-transform: uppercase`. Default off. */\n uppercase?: boolean\n /**\n * Width and height 100% of the parent. Height `%` only applies when the parent has a\n * definite height. Same idea as layout `fill`.\n */\n fill?: boolean\n /** Extra CSS appended to this component’s styles. */\n css?: string\n /** Padding on all axes. Space token or CSS. Overrides theme until `paddingX` / `paddingY`. */\n padding?: SpaceValue\n /** Horizontal padding. Overrides `padding`. */\n paddingX?: SpaceValue\n /** Vertical padding. Overrides `padding`. */\n paddingY?: SpaceValue\n /** Border width token or CSS. Theme default `extraSmall`. */\n borderWidth?: SpaceValue\n /** Border radius token or CSS. Theme default `base`. */\n borderRadius?: SpaceValue\n /**\n * Rest fill. Surface (`muted` / `base` / `highlighted`), brand, status, or CSS.\n * Omit = nearest panel `--panelize-bg`.\n */\n background?: PaintValue\n /**\n * Glyph ink. Surface (`muted` / `base` / `highlighted` → that text.base), brand, status, or CSS.\n * Omit = `--panelize-text`. Not focus chroma (`color`).\n */\n ink?: PaintValue\n /**\n * Rest border. Surface (`muted` / `base` / `highlighted` → that border), brand, status, or CSS.\n * Omit = `--panelize-border`. Focus / `:user-invalid` still own the stroke.\n */\n borderColor?: PaintValue\n}\n\n/**\n * Native text field. Instance `color` is focus chroma (border / glow / caret), not glyph ink\n * (`ink`). Prefer `Label` + `htmlFor`. Place with layout; `fill` stretches the field.\n *\n * @example\n * ```tsx\n * <Label htmlFor='name' label='Name' />\n * <Input id='name' placeholder='Name' />\n * ```\n */\nexport function Input(props: InputProps) {\n const {\n color,\n size,\n weight,\n family: familyToken,\n italic,\n uppercase,\n fill,\n css: customCss,\n padding,\n paddingX,\n paddingY,\n borderWidth,\n borderRadius,\n background,\n ink,\n borderColor,\n type = 'text',\n ...dom\n } = props\n const {\n fontSizes,\n fontWeights,\n fontFamilies,\n lineHeight,\n space,\n borderWidths,\n radii,\n defaults,\n brand,\n status,\n colors,\n } = usePanelizeTheme()\n const input = defaults.input\n\n return (\n <StyledInput\n type={type}\n $family={fontFamilies[familyToken ?? 'base']}\n $size={resolveScaleValue(size, input.size, fontSizes)}\n $weight={resolveScaleValue(weight, input.weight, fontWeights)}\n $lineHeight={lineHeight}\n $paddingX={resolveScaleValue(paddingX ?? padding, input.paddingX, space)}\n $paddingY={resolveScaleValue(paddingY ?? padding, input.paddingY, space)}\n $borderWidth={resolveScaleValue(borderWidth, input.borderWidth, borderWidths)}\n $borderRadius={resolveScaleValue(borderRadius, input.borderRadius, radii)}\n $bg={\n resolvePaintValue(background, 'background', colors, brand, status) ??\n `var(${panelCssVars.background})`\n }\n $ink={resolvePaintValue(ink, 'text', colors, brand, status) ?? `var(${panelCssVars.text})`}\n $borderColor={\n resolvePaintValue(borderColor, 'border', colors, brand, status) ??\n `var(${panelCssVars.border})`\n }\n $focus={resolveFocusColor(color ?? input.color, brand, status)}\n $invalid={status.danger.base}\n $italic={italic}\n $uppercase={uppercase}\n $fill={fill}\n $customCss={customCss}\n {...dom}\n />\n )\n}\n","import { createContext, useContext } from 'react'\nimport { css } from 'styled-components'\n\nexport type TextStyleValue = {\n family: string\n size: string\n weight: string\n lineHeight: number | string\n}\n\nexport const TextStyleContext = createContext<TextStyleValue | null>(null)\n\nexport function useTextStyle() {\n return useContext(TextStyleContext)\n}\n\nexport type TextTypographyVars = {\n $family: string\n $size: string\n $color: string\n $weight: string\n $lineHeight: number | string\n $italic?: boolean\n $underlined?: boolean\n $uppercase?: boolean\n $customCss?: string\n}\n\nexport const textTypographyCss = css<TextTypographyVars>`\n margin: 0;\n padding: 0;\n font-family: ${({ $family }) => $family};\n font-size: ${({ $size }) => $size};\n color: ${({ $color }) => $color};\n font-weight: ${({ $weight }) => $weight};\n line-height: ${({ $lineHeight }) => $lineHeight};\n ${({ $italic }) =>\n $italic\n ? css`\n font-style: italic;\n `\n : ''}\n ${({ $underlined }) =>\n $underlined\n ? css`\n text-decoration: underline;\n `\n : ''}\n ${({ $uppercase }) =>\n $uppercase\n ? css`\n text-transform: uppercase;\n `\n : ''}\n`\n","import { type ComponentPropsWithRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { resolveTextColor } from '~/src/components/text/color'\nimport {\n TextStyleContext,\n textTypographyCss,\n type TextTypographyVars,\n} from '~/src/components/text/typography'\n\ntype StyledLabelProps = TextTypographyVars & {\n $clickable?: boolean\n}\n\nconst controlSel = ':is(button, input, select, textarea)'\n\nconst StyledLabel = styled.label<StyledLabelProps>`\n display: inline-block;\n cursor: ${({ $clickable }) => ($clickable ? 'pointer' : 'default')};\n ${textTypographyCss}\n line-height: 1;\n text-box: trim-both cap alphabetic;\n &[for],\n &:has(${controlSel}) {\n cursor: pointer;\n }\n &:has(${controlSel}:disabled) {\n cursor: not-allowed;\n }\n &:has(${controlSel}) {\n text-box: unset;\n }\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type LabelProps = ComponentPropsWithRef<'label'> & {\n /** Font size token or CSS. Theme default `base` (`defaults.text`). */\n size?: FontSizeValue\n /**\n * Glyph ink. Brand, status, or raw CSS. Wins over `muted` / `highlighted`.\n * Omit = panel `text.base`. Fields use `ink` for glyphs (`color` there is focus).\n */\n color?: ColorValue\n /** Use the nearest `Panel`’s `text.muted`. Ignored if `color` or `highlighted` is set. */\n muted?: boolean\n /** Use the nearest `Panel`’s `text.highlighted`. Ignored if `color` is set. Wins over `muted`. */\n highlighted?: boolean\n /** Font weight token or CSS. Theme default `base`. */\n weight?: FontWeightValue\n /** `fontFamilies` token. Omit uses `base`. */\n family?: FontFamilyToken\n /** Italic. Default off. */\n italic?: boolean\n /** Underline. Default off. */\n underlined?: boolean\n /** `text-transform: uppercase`. Default off. */\n uppercase?: boolean\n /**\n * Visible caption. Preferred over a string as `children`.\n * Custom insides (`Span` / host icons) go in `children`; those win if both are set.\n */\n label?: string\n /** Extra CSS appended to this component’s styles. */\n css?: string\n}\n\n/**\n * Caption (`<label>`). Ink like `Text`. Prefer `label` + `htmlFor` at a control `id`. Wrap\n * `Switch` / `Checkbox` / `Radio` (same `size`). Not a layout shell.\n *\n * @example\n * ```tsx\n * <Label htmlFor='email' label='Email' />\n * <Input id='email' />\n * ```\n */\nexport function Label(props: LabelProps) {\n const {\n size,\n color,\n muted,\n highlighted,\n weight,\n family: familyToken,\n italic,\n underlined,\n uppercase,\n label,\n css: customCss,\n children,\n onClick,\n ...dom\n } = props\n const { fontSizes, fontWeights, fontFamilies, defaults, brand, status } = usePanelizeTheme()\n const family = fontFamilies[familyToken ?? 'base']\n const resolvedSize = resolveScaleValue(size, defaults.text.size, fontSizes)\n const resolvedWeight = resolveScaleValue(weight, defaults.text.weight, fontWeights)\n\n return (\n <TextStyleContext.Provider\n value={{\n family,\n size: resolvedSize,\n weight: resolvedWeight,\n lineHeight: 1,\n }}\n >\n <StyledLabel\n $family={family}\n $size={resolvedSize}\n $color={resolveTextColor(color, highlighted, muted, brand, status)}\n $weight={resolvedWeight}\n $lineHeight={1}\n $italic={italic}\n $underlined={underlined}\n $uppercase={uppercase}\n $clickable={typeof onClick === 'function'}\n $customCss={customCss}\n onClick={onClick}\n {...dom}\n >\n {children ?? label}\n </StyledLabel>\n </TextStyleContext.Provider>\n )\n}\n\nLabel.displayName = 'Label'\n","import { type WheelEvent } from 'react'\n\nimport { Input, type InputProps } from '~/src/components/forms/Input'\n\n/** Same chrome as `Input` (`css`, `background`, `ink`, `borderColor`, …). No `type`. */\nexport type NumberInputProps = Omit<InputProps, 'type'> & {\n /** Native `min`. Number or string. */\n min?: number | string\n /** Native `max`. Number or string. */\n max?: number | string\n /** Native `step`. Number, string, or `'any'`. */\n step?: number | string\n}\n\nfunction lockWheel(event: WheelEvent<HTMLInputElement>) {\n event.preventDefault()\n event.currentTarget.blur()\n}\n\n/**\n * `Input` locked to `type='number'`. Same chrome. `onChange` value is a string — use\n * `event.currentTarget.valueAsNumber`. Wheel blurs so the value does not nudge.\n *\n * @example\n * ```tsx\n * <Label htmlFor='count' label='Count' />\n * <NumberInput id='count' min={0} step={1} />\n * ```\n */\nexport function NumberInput(props: NumberInputProps) {\n const { onWheel, ...rest } = props\n return (\n <Input\n {...rest}\n type='number'\n onWheel={(event) => {\n lockWheel(event)\n onWheel?.(event)\n }}\n />\n )\n}\n\nNumberInput.displayName = 'NumberInput'\n","import { type ComponentPropsWithRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolvePaintSteps, resolvePaintValue, resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontSizeValue,\n type PaintSteps,\n type PaintValue,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { resolveChromaSlot } from '~/src/components/text/color'\n\ntype StyledRadioProps = {\n $width: string\n $height: string\n $size: string\n $radius: string\n $borderWidth: string\n $borderColor: string\n $hoverBorder: string\n $activeBorder: string\n $off: string\n $on: string\n $hoverOn: string\n $activeOn: string\n $dot: string\n $hoverDot: string\n $activeDot: string\n $inset: string\n $customCss?: string\n}\n\nconst StyledRadio = styled.input<StyledRadioProps>`\n appearance: none;\n margin: 0;\n flex-shrink: 0;\n box-sizing: border-box;\n position: relative;\n display: inline-block;\n vertical-align: middle;\n color: inherit;\n width: ${({ $width }) => $width};\n height: ${({ $height }) => $height};\n font-size: ${({ $size }) => $size};\n padding: 0;\n border: ${({ $borderWidth }) => $borderWidth} solid ${({ $borderColor }) => $borderColor};\n border-radius: ${({ $radius }) => $radius};\n background: ${({ $off }) => $off};\n cursor: pointer;\n transition:\n background 120ms ease,\n border-color 120ms ease,\n box-shadow 120ms ease;\n &::after {\n content: '';\n position: absolute;\n box-sizing: border-box;\n pointer-events: none;\n opacity: 0;\n left: 50%;\n top: 50%;\n width: calc(100% - 2 * ${({ $inset }) => $inset});\n height: calc(100% - 2 * ${({ $inset }) => $inset});\n border-radius: min(${({ $radius }) => $radius}, 50%);\n background: ${({ $dot }) => $dot};\n transform: translate(-50%, -50%);\n transition: background 120ms ease;\n }\n &:hover:not(:disabled):not(:checked) {\n border-color: ${({ $hoverBorder }) => $hoverBorder};\n }\n &:active:not(:disabled):not(:checked) {\n border-color: ${({ $activeBorder }) => $activeBorder};\n }\n &:checked {\n border-color: ${({ $on }) => $on};\n }\n &:checked::after {\n opacity: 1;\n }\n &:checked:hover:not(:disabled) {\n border-color: ${({ $hoverOn }) => $hoverOn};\n }\n &:checked:hover:not(:disabled)::after {\n background: ${({ $hoverDot }) => $hoverDot};\n }\n &:checked:active:not(:disabled) {\n border-color: ${({ $activeOn }) => $activeOn};\n }\n &:checked:active:not(:disabled)::after {\n background: ${({ $activeDot }) => $activeDot};\n }\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px color-mix(in srgb, ${({ $on }) => $on} 18%, transparent);\n }\n &:disabled {\n cursor: not-allowed;\n }\n &:disabled:checked {\n opacity: 0.45;\n }\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n &::after {\n transition: none;\n }\n }\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type RadioProps = Omit<ComponentPropsWithRef<'input'>, 'size' | 'type'> & {\n /**\n * Brand (`primary` / `secondary` / `accent`), status (`danger` / …), or raw CSS.\n * Theme default `primary`. Checked ring / inner disc use this slot’s `.base` / `.hover` /\n * `.active` (same steps as `Button`). Empty rest / hover / active stroke is `currentColor`\n * (wrapping `Label` ink, else panel `text.base`) until `borderColor`. Rest fill stays\n * transparent until `background` (the disc is the on mark, not a filled well).\n */\n color?: ColorValue\n /**\n * Type size token or CSS. Box is this size (`1em`), circle. Theme default `base`. Native HTML\n * `size` is omitted. Use the same `size` on the paired `Label`.\n */\n size?: FontSizeValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n /**\n * Rest fill (the ring’s interior). Surface, brand, status, or CSS. Omit = transparent (panel\n * shows through around the disc).\n */\n background?: PaintValue\n /**\n * Inner disc. Token/CSS → `.base` (same as `Checkbox` `ink`). `{ base, hover, active }` for a\n * one-off; omitted keys keep the `color` slot. Omit entirely = disc follows the `color` slot\n * (lockstep with the ring, including hover/active).\n */\n ink?: PaintSteps\n /**\n * Rest (empty) border. Surface, brand, status, or CSS. Omit = `currentColor` (same as the\n * wrapping `Label`, else panel `text.base`). Checked stroke follows the `color` slot.\n */\n borderColor?: PaintValue\n /** Border width token or CSS. Theme default `extraSmall` (`1px`). */\n borderWidth?: SpaceValue\n /** Box radius. Space token or CSS. Theme default `999px` (circle). Inner disc uses `min(this, 50%)`. */\n borderRadius?: SpaceValue\n /** Box width. Space token or CSS (not `fontSizes`). Overrides `size` on this axis. */\n width?: SpaceValue\n /** Box height. Space token or CSS (not `fontSizes`). Overrides `size` on this axis. */\n height?: SpaceValue\n}\n\n/**\n * Native radio. `color` is the checked ring and disc. Empty stroke follows wrapping `Label`.\n * Wrap with `Label` (same `size`). Share `name` across the group.\n *\n * @example\n * ```tsx\n * <Label htmlFor='hobby' label='Hobby' />\n * <Radio id='hobby' name='plan' value='hobby' checked={plan === 'hobby'} onChange={(e) => setPlan(e.target.value)} />\n * ```\n */\nexport function Radio(props: RadioProps) {\n const {\n color,\n size,\n css: customCss,\n background,\n ink,\n borderColor,\n borderWidth,\n borderRadius,\n width,\n height,\n ...dom\n } = props\n const { space, radii, fontSizes, borderWidths, defaults, brand, status, colors } =\n usePanelizeTheme()\n const box = defaults.radio\n const slot = resolveChromaSlot(color ?? box.color, brand, status)\n const off = resolvePaintValue(background, 'background', colors, brand, status) ?? 'transparent'\n const disc = resolvePaintSteps(ink, 'text', 'base', colors, brand, status)\n const discHover = resolvePaintSteps(ink, 'text', 'hover', colors, brand, status)\n const discActive = resolvePaintSteps(ink, 'text', 'active', colors, brand, status)\n const restBorder =\n resolvePaintValue(borderColor, 'border', colors, brand, status) ?? 'currentColor'\n const typeSize = resolveScaleValue(size, box.size, fontSizes)\n const edge = typeSize\n const boxWidth = width !== undefined ? resolveScaleValue(width, typeSize, space) : edge\n const boxHeight = height !== undefined ? resolveScaleValue(height, typeSize, space) : edge\n const radius = resolveScaleValue(borderRadius, box.borderRadius, radii)\n\n return (\n <StyledRadio\n $width={boxWidth}\n $height={boxHeight}\n $size={typeSize}\n $radius={radius}\n $borderWidth={resolveScaleValue(borderWidth, box.borderWidth, borderWidths)}\n $borderColor={restBorder}\n $hoverBorder={restBorder}\n $activeBorder={restBorder}\n $off={off}\n $on={slot.base}\n $hoverOn={slot.hover}\n $activeOn={slot.active}\n $dot={disc ?? slot.base}\n $hoverDot={discHover ?? disc ?? slot.hover}\n $activeDot={discActive ?? disc ?? slot.active}\n $inset={`calc(${typeSize} * ${box.insetFactor})`}\n $customCss={customCss}\n {...dom}\n type='radio'\n />\n )\n}\n\nRadio.displayName = 'Radio'\n","import {\n Children,\n type CSSProperties,\n isValidElement,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\n\nimport { resolveScaleValue } from '~/src/theme/internal'\n\nimport { type SpaceScale, type SpaceToken } from '~/src/theme'\n\nimport { panelCssVars } from '~/src/components/layout/Panel'\n\nexport type SelectOptionData = {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport type OptionProps = {\n /** Value written to `Select` / `MultiSelect` state. */\n value: string\n /** Visible caption. Omit = string `children`, else `value`. */\n label?: string\n /** Skip pointer / keyboard pick. Default `false`. */\n disabled?: boolean\n children?: ReactNode\n}\n\n/** Marker for `Select` / `MultiSelect` children. Not rendered on its own. */\nexport function Option(props: OptionProps) {\n void props\n return null\n}\n\nOption.displayName = 'Option'\n\nfunction optionCaption(props: OptionProps) {\n if (props.label !== undefined) {\n return props.label\n }\n if (typeof props.children === 'string') {\n return props.children\n }\n return props.value\n}\n\nfunction isOptionElement(child: ReactNode): child is ReactElement<OptionProps> {\n return isValidElement(child) && child.type === Option\n}\n\nexport function collectItems(\n options: SelectOptionData[] | undefined,\n children: ReactNode,\n): SelectOptionData[] {\n const map = new Map<string, SelectOptionData>()\n for (const item of options ?? []) {\n map.set(item.value, {\n value: item.value,\n label: item.label,\n disabled: item.disabled,\n })\n }\n Children.forEach(children, (child) => {\n if (!isOptionElement(child)) {\n return\n }\n const { value, disabled } = child.props\n map.set(value, { value, label: optionCaption(child.props), disabled })\n })\n return [...map.values()]\n}\n\nexport function withEmptyOption(\n items: SelectOptionData[],\n spec: boolean | string | undefined,\n placeholder: string | undefined,\n required: boolean | undefined,\n) {\n if (!spec || required) {\n return items\n }\n if (items.some((item) => item.value === '')) {\n return items\n }\n const label = typeof spec === 'string' ? spec : (placeholder ?? '')\n return [{ value: '', label }, ...items]\n}\n\nexport function withSelectedAtTop(items: SelectOptionData[], current: string, enabled: boolean) {\n if (!enabled || current === '') {\n return items\n }\n const i = items.findIndex((item) => item.value === current)\n if (i <= 0) {\n return items\n }\n const next = items.slice()\n const [picked] = next.splice(i, 1)\n if (picked) {\n next.unshift(picked)\n }\n return next\n}\n\nexport function withSelectedSetAtTop(\n items: SelectOptionData[],\n selected: readonly string[],\n enabled: boolean,\n) {\n if (!enabled || selected.length === 0) {\n return items\n }\n const set = new Set(selected)\n const top: SelectOptionData[] = []\n const rest: SelectOptionData[] = []\n for (const item of items) {\n if (set.has(item.value)) {\n top.push(item)\n } else {\n rest.push(item)\n }\n }\n return [...top, ...rest]\n}\n\nexport function firstEnabledIndex(items: SelectOptionData[]) {\n return items.findIndex((item) => !item.disabled)\n}\n\nexport function lastEnabledIndex(items: SelectOptionData[]) {\n for (let i = items.length - 1; i >= 0; i -= 1) {\n if (!items[i]?.disabled) {\n return i\n }\n }\n return -1\n}\n\nexport function stepEnabled(items: SelectOptionData[], from: number, dir: 1 | -1) {\n if (items.length === 0) {\n return -1\n }\n let i = from\n for (let n = 0; n < items.length; n += 1) {\n i = (i + dir + items.length) % items.length\n if (!items[i]?.disabled) {\n return i\n }\n }\n return from\n}\n\nexport function matchTypeahead(items: SelectOptionData[], query: string, from: number) {\n const q = query.toLowerCase()\n const start = from < 0 ? 0 : from\n const order = [...items.slice(start), ...items.slice(0, start)]\n const hit = order.find((item) => !item.disabled && item.label.toLowerCase().startsWith(q))\n return hit ? items.indexOf(hit) : -1\n}\n\nexport function panelVarsFrom(node: HTMLElement): CSSProperties {\n const cs = getComputedStyle(node)\n const next: Record<string, string> = {}\n for (const name of Object.values(panelCssVars)) {\n next[name] = cs.getPropertyValue(name).trim()\n }\n return next\n}\n\nexport function cssLengthToPx(value: string, emPx = 16) {\n const n = Number.parseFloat(value)\n if (!Number.isFinite(n)) {\n return 256\n }\n if (value.endsWith('rem')) {\n const root = Number.parseFloat(getComputedStyle(document.documentElement).fontSize)\n return n * (Number.isFinite(root) ? root : 16)\n }\n if (value.endsWith('em')) {\n return n * emPx\n }\n return n\n}\n\nexport type ListBox = { top: number; left: number; width: number; maxHeight: number }\n\nexport function computeListBox(\n node: HTMLElement,\n listMaxHeight: string,\n listOffset: SpaceToken,\n space: SpaceScale,\n): { box: ListBox; vars: CSSProperties } {\n const rect = node.getBoundingClientRect()\n const emPx = Number.parseFloat(getComputedStyle(node).fontSize)\n const em = Number.isFinite(emPx) ? emPx : 16\n const maxPx = cssLengthToPx(listMaxHeight, em)\n const gap = cssLengthToPx(resolveScaleValue(undefined, listOffset, space), em)\n const below = window.innerHeight - rect.bottom - gap\n const above = rect.top - gap\n const flip = below < Math.min(maxPx, 120) && above > below\n const maxHeight = Math.max(8, Math.min(maxPx, flip ? above : below))\n return {\n vars: panelVarsFrom(node),\n box: {\n top: flip ? rect.top - maxHeight - gap : rect.bottom + gap,\n left: rect.left,\n width: rect.width,\n maxHeight,\n },\n }\n}\n\nexport function useListboxMenu({\n items,\n open: openProp,\n onOpenChange,\n activeOnOpen,\n listMaxHeight,\n listOffset,\n space,\n}: {\n items: SelectOptionData[]\n open?: boolean\n onOpenChange?: (open: boolean) => void\n activeOnOpen: number\n listMaxHeight: string\n listOffset: SpaceToken\n space: SpaceScale\n}) {\n const isOpenControlled = openProp !== undefined\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false)\n const isOpen = isOpenControlled ? openProp : uncontrolledOpen\n const [activeIndex, setActiveIndex] = useState(-1)\n const [box, setBox] = useState<ListBox | null>(null)\n const [listVars, setListVars] = useState<CSSProperties>({})\n const triggerRef = useRef<HTMLButtonElement>(null)\n const wrapRef = useRef<HTMLSpanElement>(null)\n const listRef = useRef<HTMLUListElement>(null)\n const typeRef = useRef({ buffer: '', timer: 0 })\n const activeValueRef = useRef<string | undefined>(undefined)\n\n const pinActive = (index: number) => {\n setActiveIndex(index)\n activeValueRef.current = index >= 0 ? items[index]?.value : undefined\n }\n\n const setOpen = (next: boolean, highlight?: number) => {\n if (next) {\n pinActive(highlight ?? activeOnOpen)\n } else {\n pinActive(-1)\n }\n if (!isOpenControlled) {\n setUncontrolledOpen(next)\n }\n onOpenChange?.(next)\n }\n\n const moveActive = (index: number) => {\n if (index >= 0) {\n pinActive(index)\n }\n }\n\n const placeList = () => {\n const node = triggerRef.current\n if (!node) {\n return\n }\n const next = computeListBox(node, listMaxHeight, listOffset, space)\n setListVars(next.vars)\n setBox(next.box)\n }\n\n useEffect(() => {\n const typeState = typeRef.current\n return () => window.clearTimeout(typeState.timer)\n }, [])\n\n useLayoutEffect(() => {\n if (!isOpen) {\n return\n }\n const value = activeValueRef.current\n if (value === undefined) {\n return\n }\n const i = items.findIndex((item) => item.value === value)\n if (i >= 0 && i !== activeIndex) {\n setActiveIndex(i)\n }\n }, [items, isOpen, activeIndex])\n\n useLayoutEffect(() => {\n if (!isOpen) {\n return\n }\n placeList()\n const onReposition = () => placeList()\n window.addEventListener('resize', onReposition)\n window.addEventListener('scroll', onReposition, true)\n return () => {\n window.removeEventListener('resize', onReposition)\n window.removeEventListener('scroll', onReposition, true)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- placeList reads layout, not render inputs\n }, [isOpen, listMaxHeight, listOffset, space])\n\n useLayoutEffect(() => {\n if (!isOpen) {\n return\n }\n const el = listRef.current?.querySelector('[data-active=\"true\"]')\n if (el instanceof HTMLElement) {\n el.scrollIntoView?.({ block: 'nearest' })\n }\n }, [isOpen, activeIndex])\n\n useEffect(() => {\n if (!isOpen) {\n return\n }\n const onDoc = (event: globalThis.MouseEvent) => {\n const t = event.target\n if (!(t instanceof Node)) {\n return\n }\n if (wrapRef.current?.contains(t) || listRef.current?.contains(t)) {\n return\n }\n setOpen(false)\n triggerRef.current?.blur()\n }\n document.addEventListener('mousedown', onDoc)\n return () => {\n document.removeEventListener('mousedown', onDoc)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- setOpen reads items from this render\n }, [isOpen, isOpenControlled, onOpenChange, items, activeOnOpen])\n\n return {\n isOpen,\n activeIndex,\n box,\n listVars,\n triggerRef,\n wrapRef,\n listRef,\n typeRef,\n setOpen,\n moveActive,\n placeList,\n }\n}\n\nexport function runListboxKeyDown(\n event: KeyboardEvent<HTMLButtonElement>,\n opts: {\n disabled?: boolean\n readOnly?: boolean\n isOpen: boolean\n items: SelectOptionData[]\n activeIndex: number\n showClear: boolean\n typeRef: { current: { buffer: string; timer: number } }\n placeList: () => void\n setOpen: (open: boolean, highlight?: number) => void\n moveActive: (index: number) => void\n openHighlightDown: number\n openHighlightUp: number\n onCommit: (item: SelectOptionData) => void\n onClear: () => void\n onClosedTypeahead: (item: SelectOptionData) => void\n /** Index to start closed type-ahead from (`selectedIndex`; `-1` → wrap from 0). */\n closedTypeaheadFrom: number\n },\n) {\n if (event.defaultPrevented || opts.disabled) {\n return\n }\n const key = event.key\n const {\n isOpen,\n items,\n activeIndex,\n showClear,\n readOnly,\n typeRef,\n placeList,\n setOpen,\n moveActive,\n openHighlightDown,\n openHighlightUp,\n onCommit,\n onClear,\n onClosedTypeahead,\n closedTypeaheadFrom,\n } = opts\n if (!isOpen && (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter' || key === ' ')) {\n event.preventDefault()\n placeList()\n if (key === 'ArrowUp') {\n setOpen(true, openHighlightUp)\n } else {\n setOpen(true, openHighlightDown)\n }\n return\n }\n if (!isOpen) {\n if ((key === 'Backspace' || key === 'Delete') && showClear) {\n event.preventDefault()\n onClear()\n return\n }\n if (key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey && !readOnly) {\n const i = matchTypeahead(items, key, closedTypeaheadFrom + 1)\n if (i >= 0 && items[i]) {\n onClosedTypeahead(items[i])\n }\n }\n return\n }\n if (key === 'Escape') {\n event.preventDefault()\n setOpen(false)\n return\n }\n if (key === 'ArrowDown') {\n event.preventDefault()\n moveActive(stepEnabled(items, activeIndex, 1))\n return\n }\n if (key === 'ArrowUp') {\n event.preventDefault()\n moveActive(stepEnabled(items, activeIndex, -1))\n return\n }\n if (key === 'Home') {\n event.preventDefault()\n moveActive(firstEnabledIndex(items))\n return\n }\n if (key === 'End') {\n event.preventDefault()\n moveActive(lastEnabledIndex(items))\n return\n }\n if (key === 'Enter' || key === ' ') {\n event.preventDefault()\n const item = items[activeIndex]\n if (item && !item.disabled) {\n onCommit(item)\n }\n return\n }\n if (key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {\n event.preventDefault()\n window.clearTimeout(typeRef.current.timer)\n typeRef.current.buffer += key\n typeRef.current.timer = window.setTimeout(() => {\n typeRef.current.buffer = ''\n }, 400)\n const i = matchTypeahead(items, typeRef.current.buffer, activeIndex)\n if (i >= 0) {\n moveActive(i)\n }\n }\n}\n","import { css, styled } from 'styled-components'\n\nimport { fieldChromeCss, type FieldChromeVars } from '~/src/components/forms/field'\nimport { panelCssVars } from '~/src/components/layout/Panel'\n\nexport const TriggerWrap = styled.span<{ $fill?: boolean }>`\n position: relative;\n display: ${({ $fill }) => ($fill ? 'block' : 'inline-block')};\n ${({ $fill }) =>\n $fill\n ? css`\n width: 100%;\n `\n : ''}\n min-width: 0;\n vertical-align: top;\n`\n\nexport const ClearButton = styled.button<{ $end: string; $ink: string; $hoverInk: string }>`\n position: absolute;\n z-index: 1;\n top: 50%;\n inset-inline-end: ${({ $end }) => $end};\n box-sizing: border-box;\n width: 1.375rem;\n height: 1.375rem;\n margin: 0;\n padding: 0.1875rem;\n transform: translateY(-50%);\n border: 0;\n border-radius: 50%;\n background: transparent;\n background-clip: content-box;\n cursor: pointer;\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0.58em;\n height: 0.12em;\n background: ${({ $ink }) => $ink};\n }\n &::before {\n transform: translate(-50%, -50%) rotate(45deg);\n }\n &::after {\n transform: translate(-50%, -50%) rotate(-45deg);\n }\n &:hover {\n background: color-mix(\n in srgb,\n var(${panelCssVars.textHighlighted}) 16%,\n var(${panelCssVars.background})\n );\n background-clip: content-box;\n &::before,\n &::after {\n background: ${({ $hoverInk }) => $hoverInk};\n }\n }\n &:disabled {\n cursor: not-allowed;\n opacity: 0.45;\n }\n`\n\ntype StyledTriggerProps = FieldChromeVars & {\n $open: boolean\n $clearable?: boolean\n $muted: string\n}\n\nexport const TriggerLabel = styled.span<{ $ink: string }>`\n min-width: 0;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: ${({ $ink }) => $ink};\n -webkit-text-fill-color: ${({ $ink }) => $ink};\n`\n\nexport const StyledTrigger = styled.button<StyledTriggerProps>`\n ${fieldChromeCss}\n position: relative;\n display: ${({ $fill }) => ($fill ? 'flex' : 'inline-flex')};\n align-items: center;\n justify-content: flex-start;\n text-align: left;\n cursor: pointer;\n color: ${({ $ink }) => $ink};\n -webkit-text-fill-color: ${({ $ink }) => $ink};\n border: ${({ $borderWidth, $borderColor }) => `${$borderWidth} solid ${$borderColor}`};\n background-color: ${({ $bg }) => $bg};\n padding-inline-end: calc(\n ${({ $paddingX, $clearable }) =>\n $clearable ? `${$paddingX} + 2.15em` : `${$paddingX} + 1.15em`}\n );\n ${({ $focus, $invalid }) => css`\n &:focus,\n &[aria-expanded='true'] {\n outline: none;\n border-color: ${$focus};\n box-shadow: 0 0 0 2px color-mix(in srgb, ${$focus} 18%, transparent);\n }\n &[aria-invalid='true'],\n &[aria-invalid='true']:focus,\n &[aria-invalid='true'][aria-expanded='true'] {\n border-color: ${$invalid};\n box-shadow: 0 0 0 2px color-mix(in srgb, ${$invalid} 18%, transparent);\n }\n `}\n &::after {\n content: '';\n position: absolute;\n inset-inline-end: ${({ $paddingX }) => $paddingX};\n top: 50%;\n width: 0.4em;\n height: 0.4em;\n box-sizing: border-box;\n border-right: 0.12em solid ${({ $muted }) => $muted};\n border-bottom: 0.12em solid ${({ $muted }) => $muted};\n transform: ${({ $open }) =>\n $open\n ? 'translateY(calc(-50% + 0.06em)) rotate(-135deg)'\n : 'translateY(calc(-50% - 0.06em)) rotate(45deg)'};\n pointer-events: none;\n }\n &:disabled {\n cursor: not-allowed;\n }\n ${({ $customCss }) => $customCss ?? ''}\n`\n\ntype StyledListProps = {\n $top: number\n $left: number\n $width: number\n $maxHeight: number\n $zIndex: number\n $shadow: string\n $radius: string\n $borderWidth: string\n $borderColor: string\n $bg: string\n $ink: string\n $size: string\n $weight: string\n $family: string\n $lineHeight: number | string\n}\n\nexport const StyledList = styled.ul<StyledListProps>`\n box-sizing: border-box;\n position: fixed;\n z-index: ${({ $zIndex }) => $zIndex};\n top: ${({ $top }) => `${$top}px`};\n left: ${({ $left }) => `${$left}px`};\n width: ${({ $width }) => `${$width}px`};\n max-height: ${({ $maxHeight }) => `${$maxHeight}px`};\n margin: 0;\n padding: 0.25rem 0;\n overflow: auto;\n list-style: none;\n font-family: ${({ $family }) => $family};\n font-size: ${({ $size }) => $size};\n font-weight: ${({ $weight }) => $weight};\n line-height: ${({ $lineHeight }) => $lineHeight};\n color: ${({ $ink }) => $ink};\n -webkit-text-fill-color: ${({ $ink }) => $ink};\n border: ${({ $borderWidth }) => $borderWidth} solid ${({ $borderColor }) => $borderColor};\n border-radius: ${({ $radius }) => $radius};\n background: ${({ $bg }) => $bg};\n box-shadow: ${({ $shadow }) => $shadow};\n`\n","import {\n type ComponentPropsWithRef,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n useId,\n useState,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { styled } from 'styled-components'\n\nimport { resolvePaintValue, resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n type PaintValue,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { Checkbox } from '~/src/components/forms/Checkbox'\nimport {\n collectItems,\n firstEnabledIndex,\n lastEnabledIndex,\n runListboxKeyDown,\n type SelectOptionData,\n useListboxMenu,\n withSelectedSetAtTop,\n} from '~/src/components/forms/selects/listbox'\nimport {\n ClearButton,\n StyledList,\n StyledTrigger,\n TriggerLabel,\n TriggerWrap,\n} from '~/src/components/forms/selects/listboxChrome'\nimport { panelCssVars } from '~/src/components/layout/Panel'\nimport { resolveFocusColor } from '~/src/components/text/color'\n\nconst StyledOption = styled.li<{\n $padX: string\n $padY: string\n $chroma: string\n $ink: string\n $selected: boolean\n $active: boolean\n $disabled: boolean\n}>`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 0.5em;\n padding: ${({ $padY, $padX }) => `${$padY} ${$padX}`};\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n opacity: ${({ $disabled }) => ($disabled ? 0.45 : 1)};\n color: ${({ $selected, $chroma, $ink }) => ($selected ? $chroma : $ink)};\n -webkit-text-fill-color: ${({ $selected, $chroma, $ink }) => ($selected ? $chroma : $ink)};\n background: ${({ $active, $disabled }) =>\n $active && !$disabled\n ? `color-mix(in srgb, var(${panelCssVars.textHighlighted}) 18%, var(${panelCssVars.background}))`\n : 'transparent'};\n`\n\nconst CheckHit = styled.span`\n display: flex;\n flex-shrink: 0;\n pointer-events: none;\n`\n\nexport type MultiSelectProps = Omit<\n ComponentPropsWithRef<'button'>,\n 'type' | 'onChange' | 'value'\n> & {\n /**\n * Focus chroma (open ring) and checked-option ink. Brand / status / CSS.\n * Theme default `primary`. Glyph on the trigger is `ink` (omit = panel highlighted text).\n */\n color?: ColorValue\n /** Type size token or CSS. Theme default `small`. Native HTML `size` is omitted. */\n size?: FontSizeValue\n weight?: FontWeightValue\n family?: FontFamilyToken\n italic?: boolean\n uppercase?: boolean\n fill?: boolean\n css?: string\n padding?: SpaceValue\n /** Horizontal padding. Overrides `padding`. */\n paddingX?: SpaceValue\n /** Vertical padding. Overrides `padding`. */\n paddingY?: SpaceValue\n borderWidth?: SpaceValue\n borderRadius?: SpaceValue\n background?: PaintValue\n ink?: PaintValue\n borderColor?: PaintValue\n /**\n * Menu open. Omit = internal (click / keyboard / outside / Escape). Pass with\n * `onOpenChange` to control.\n */\n open?: boolean\n onOpenChange?: (open: boolean) => void\n /** Options. Merged with child `Option` (children win on the same `value`). */\n options?: SelectOptionData[]\n /** Shown when nothing is selected. Muted ink. */\n placeholder?: string\n /** Hidden input `name` for native form submit (one input per selected value). */\n name?: string\n /**\n * When true, the value cannot be cleared to empty (no clear-all, last check cannot\n * uncheck). Default `false`.\n */\n required?: boolean\n /**\n * Show a clear-all control when there is a value. Default `false`. Ignored when `required`.\n */\n clearable?: boolean\n /**\n * When true, checked options are listed first (original order within each group).\n * Default `false`.\n */\n selectedAtTop?: boolean\n /**\n * Open to inspect; no toggle / clear / type-ahead commit. Not dimmed (`disabled` is).\n * Default `false`.\n */\n readOnly?: boolean\n /** Selected values. Omit with `defaultValue` for uncontrolled. */\n value?: string[]\n defaultValue?: string[]\n /** Called with the selected values when the set changes. Empty array when cleared. */\n onChange?: (value: string[]) => void\n children?: ReactNode\n}\n\n/**\n * Custom multi listbox. Host `value` / `onChange` are `string[]`. Trigger shows a count\n * (`N selected`), not chips. Menu stays open while toggling. Place with layout.\n *\n * @example\n * ```tsx\n * <Label htmlFor='tags' label='Tags' />\n * <MultiSelect id='tags' value={tags} onChange={setTags} clearable>\n * <Option value='a' label='Alpha' />\n * <Option value='b' label='Beta' />\n * </MultiSelect>\n * ```\n */\nexport function MultiSelect(props: MultiSelectProps) {\n const {\n ref,\n color,\n size,\n weight,\n family: familyToken,\n italic,\n uppercase,\n fill,\n css: customCss,\n padding,\n paddingX,\n paddingY,\n borderWidth,\n borderRadius,\n background,\n ink,\n borderColor,\n value,\n defaultValue,\n onChange,\n open: openProp,\n onOpenChange,\n options,\n placeholder,\n name,\n required,\n clearable,\n selectedAtTop,\n children,\n disabled,\n readOnly,\n id,\n onKeyDown,\n onClick,\n onBlur,\n ...dom\n } = props\n const {\n fontSizes,\n fontWeights,\n fontFamilies,\n lineHeight,\n space,\n borderWidths,\n radii,\n defaults,\n brand,\n status,\n colors,\n } = usePanelizeTheme()\n const sel = defaults.select\n const isValueControlled = value !== undefined\n const [uncontrolledValue, setUncontrolledValue] = useState<string[]>(() => defaultValue ?? [])\n const current = isValueControlled ? (value ?? []) : uncontrolledValue\n const selectedSet = new Set(current)\n const items = withSelectedSetAtTop(\n collectItems(options, children),\n current,\n Boolean(selectedAtTop),\n )\n const firstSelectedIndex = items.findIndex((item) => selectedSet.has(item.value))\n const activeOnOpen = firstSelectedIndex >= 0 ? firstSelectedIndex : firstEnabledIndex(items)\n const {\n isOpen,\n activeIndex,\n box,\n listVars,\n triggerRef,\n wrapRef,\n listRef,\n typeRef,\n setOpen,\n moveActive,\n placeList,\n } = useListboxMenu({\n items,\n open: openProp,\n onOpenChange,\n activeOnOpen,\n listMaxHeight: sel.listMaxHeight,\n listOffset: sel.listOffset,\n space,\n })\n const listId = useId()\n const assignTriggerRef = (node: HTMLButtonElement | null) => {\n triggerRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }\n\n const focus = resolveFocusColor(color ?? sel.color, brand, status)\n const invalid = status.danger.base\n const typeSize = resolveScaleValue(size, sel.size, fontSizes)\n const padX = resolveScaleValue(paddingX ?? padding, sel.paddingX, space)\n const padY = resolveScaleValue(paddingY ?? padding, sel.paddingY, space)\n const radius = resolveScaleValue(borderRadius, sel.borderRadius, radii)\n const stroke = resolveScaleValue(borderWidth, sel.borderWidth, borderWidths)\n const bg =\n resolvePaintValue(background, 'background', colors, brand, status) ??\n `var(${panelCssVars.background})`\n const textInk =\n resolvePaintValue(ink, 'text', colors, brand, status) ?? `var(${panelCssVars.textHighlighted})`\n const restBorder =\n resolvePaintValue(borderColor, 'border', colors, brand, status) ?? `var(${panelCssVars.border})`\n const empty = current.length === 0\n const showClear = Boolean(clearable) && !required && !empty && !disabled && !readOnly\n const mutedInk = `var(${panelCssVars.textMuted})`\n const labelInk = empty ? mutedInk : textInk\n const caption = empty ? (placeholder ?? '') : `${current.length} selected`\n const optionPadX = resolveScaleValue(undefined, sel.optionPaddingX, space)\n const optionPadY = resolveScaleValue(undefined, sel.optionPaddingY, space)\n const typeWeight = resolveScaleValue(weight, sel.weight, fontWeights)\n const typeFamily = fontFamilies[familyToken ?? 'base']\n const checkColor = color ?? sel.color\n\n const emit = (next: string[]) => {\n if (!isValueControlled) {\n setUncontrolledValue(next)\n }\n onChange?.(next)\n }\n\n const toggle = (entry: string) => {\n if (readOnly) {\n return\n }\n if (selectedSet.has(entry)) {\n if (required && current.length <= 1) {\n return\n }\n emit(current.filter((value) => value !== entry))\n return\n }\n emit([...current, entry])\n }\n\n const clear = (blur: boolean) => {\n if (readOnly || required || empty) {\n return\n }\n emit([])\n setOpen(false)\n if (blur) {\n triggerRef.current?.blur()\n }\n }\n\n const onTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event)\n runListboxKeyDown(event, {\n disabled,\n readOnly,\n isOpen,\n items,\n activeIndex,\n showClear,\n typeRef,\n placeList,\n setOpen,\n moveActive,\n openHighlightDown: activeOnOpen,\n openHighlightUp: firstSelectedIndex >= 0 ? firstSelectedIndex : lastEnabledIndex(items),\n closedTypeaheadFrom: firstSelectedIndex,\n onCommit: (item) => toggle(item.value),\n onClear: () => clear(false),\n onClosedTypeahead: (item) => {\n const i = items.findIndex((row) => row.value === item.value)\n placeList()\n setOpen(true, i >= 0 ? i : undefined)\n },\n })\n }\n\n const activeId =\n isOpen && activeIndex >= 0 && items[activeIndex]\n ? `${listId}-${items[activeIndex].value}`\n : undefined\n\n return (\n <>\n {name !== undefined ? (\n empty ? (\n <input\n type='hidden'\n name={name}\n value=''\n required={required || undefined}\n disabled={disabled || undefined}\n />\n ) : (\n current.map((entry) => (\n <input\n key={entry}\n type='hidden'\n name={name}\n value={entry}\n disabled={disabled || undefined}\n />\n ))\n )\n ) : null}\n <TriggerWrap ref={wrapRef} $fill={fill}>\n <StyledTrigger\n {...dom}\n ref={assignTriggerRef}\n id={id}\n type='button'\n disabled={disabled}\n role='combobox'\n aria-haspopup='listbox'\n aria-autocomplete='none'\n aria-expanded={isOpen}\n aria-controls={isOpen ? listId : undefined}\n aria-activedescendant={activeId}\n aria-required={required || undefined}\n aria-readonly={readOnly || undefined}\n $family={typeFamily}\n $size={typeSize}\n $weight={typeWeight}\n $lineHeight={lineHeight}\n $paddingX={padX}\n $paddingY={padY}\n $borderWidth={stroke}\n $borderRadius={radius}\n $bg={bg}\n $ink={textInk}\n $muted={mutedInk}\n $borderColor={restBorder}\n $focus={focus}\n $invalid={invalid}\n $italic={italic}\n $uppercase={uppercase}\n $fill={fill}\n $open={isOpen}\n $clearable={showClear}\n $customCss={customCss}\n onKeyDown={onTriggerKeyDown}\n onBlur={(event: FocusEvent<HTMLButtonElement>) => {\n onBlur?.(event)\n if (event.defaultPrevented) {\n return\n }\n const next = event.relatedTarget\n if (next instanceof Node) {\n if (wrapRef.current?.contains(next) || listRef.current?.contains(next)) {\n return\n }\n }\n if (isOpen) {\n setOpen(false)\n }\n }}\n onClick={(event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (event.defaultPrevented || disabled) {\n return\n }\n if (!isOpen) {\n placeList()\n setOpen(true)\n return\n }\n setOpen(false)\n triggerRef.current?.blur()\n }}\n >\n <TriggerLabel $ink={labelInk}>{caption}</TriggerLabel>\n </StyledTrigger>\n {showClear ? (\n <ClearButton\n type='button'\n tabIndex={-1}\n aria-label='Clear'\n $end={`calc(${padX} + 0.95em)`}\n $ink={mutedInk}\n $hoverInk={textInk}\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => {\n event.stopPropagation()\n clear(true)\n }}\n />\n ) : null}\n </TriggerWrap>\n {isOpen && box && typeof document !== 'undefined'\n ? createPortal(\n <StyledList\n ref={listRef}\n id={listId}\n role='listbox'\n aria-multiselectable\n aria-labelledby={id || undefined}\n style={listVars}\n $top={box.top}\n $left={box.left}\n $width={box.width}\n $maxHeight={box.maxHeight}\n $zIndex={sel.listZIndex}\n $shadow={sel.listShadow}\n $radius={radius}\n $borderWidth={stroke}\n $borderColor={restBorder}\n $bg={bg}\n $ink={textInk}\n $size={typeSize}\n $weight={typeWeight}\n $family={typeFamily}\n $lineHeight={lineHeight}\n >\n {items.map((item, index) => {\n const on = selectedSet.has(item.value)\n return (\n <StyledOption\n key={item.value}\n id={`${listId}-${item.value}`}\n role='option'\n aria-selected={on}\n aria-disabled={item.disabled || undefined}\n data-active={index === activeIndex ? 'true' : undefined}\n $padX={optionPadX}\n $padY={optionPadY}\n $chroma={focus}\n $ink={textInk}\n $selected={on}\n $active={index === activeIndex}\n $disabled={Boolean(item.disabled)}\n onMouseEnter={() => {\n if (!item.disabled) {\n moveActive(index)\n }\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n if (!item.disabled) {\n moveActive(index)\n toggle(item.value)\n }\n }}\n >\n <CheckHit aria-hidden>\n <Checkbox\n tabIndex={-1}\n checked={on}\n disabled={item.disabled}\n color={checkColor}\n size={size ?? sel.size}\n onChange={() => undefined}\n />\n </CheckHit>\n {item.label}\n </StyledOption>\n )\n })}\n </StyledList>,\n document.body,\n )\n : null}\n </>\n )\n}\n\nMultiSelect.displayName = 'MultiSelect'\n","import {\n type ComponentPropsWithRef,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n useId,\n useState,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { styled } from 'styled-components'\n\nimport { resolvePaintValue, resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n type PaintValue,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport {\n collectItems,\n firstEnabledIndex,\n lastEnabledIndex,\n Option,\n type OptionProps,\n runListboxKeyDown,\n type SelectOptionData,\n useListboxMenu,\n withEmptyOption,\n withSelectedAtTop,\n} from '~/src/components/forms/selects/listbox'\nimport {\n ClearButton,\n StyledList,\n StyledTrigger,\n TriggerLabel,\n TriggerWrap,\n} from '~/src/components/forms/selects/listboxChrome'\nimport { panelCssVars } from '~/src/components/layout/Panel'\nimport { resolveFocusColor } from '~/src/components/text/color'\n\nexport { Option, type OptionProps, type SelectOptionData }\n\nconst StyledOption = styled.li<{\n $padX: string\n $padY: string\n $chroma: string\n $ink: string\n $selected: boolean\n $active: boolean\n $disabled: boolean\n}>`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.75em;\n padding: ${({ $padY, $padX }) => `${$padY} ${$padX}`};\n cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n opacity: ${({ $disabled }) => ($disabled ? 0.45 : 1)};\n color: ${({ $selected, $chroma, $ink }) => ($selected ? $chroma : $ink)};\n -webkit-text-fill-color: ${({ $selected, $chroma, $ink }) => ($selected ? $chroma : $ink)};\n background: ${({ $active, $disabled }) =>\n $active && !$disabled\n ? `color-mix(in srgb, var(${panelCssVars.textHighlighted}) 18%, var(${panelCssVars.background}))`\n : 'transparent'};\n ${({ $selected, $chroma }) =>\n $selected\n ? `\n &::after {\n content: '';\n flex-shrink: 0;\n width: 0.28em;\n height: 0.48em;\n box-sizing: border-box;\n border: solid ${$chroma};\n border-width: 0 0.14em 0.14em 0;\n transform: translateY(-12%) rotate(45deg);\n }\n `\n : ''}\n`\n\nexport type SelectProps = Omit<ComponentPropsWithRef<'button'>, 'type' | 'onChange' | 'value'> & {\n /**\n * Focus chroma (open ring) and selected-option ink. Brand / status / CSS.\n * Theme default `primary`. Glyph on the trigger is `ink` (omit = panel highlighted text).\n */\n color?: ColorValue\n /** Type size token or CSS. Theme default `small`. Native HTML `size` is omitted. */\n size?: FontSizeValue\n weight?: FontWeightValue\n family?: FontFamilyToken\n italic?: boolean\n uppercase?: boolean\n fill?: boolean\n css?: string\n padding?: SpaceValue\n /** Horizontal padding. Overrides `padding`. */\n paddingX?: SpaceValue\n /** Vertical padding. Overrides `padding`. */\n paddingY?: SpaceValue\n borderWidth?: SpaceValue\n borderRadius?: SpaceValue\n background?: PaintValue\n ink?: PaintValue\n borderColor?: PaintValue\n /**\n * Menu open. Omit = internal (click / keyboard / outside / Escape). Pass with\n * `onOpenChange` to control.\n */\n open?: boolean\n onOpenChange?: (open: boolean) => void\n /** Options. Merged with child `Option` (children win on the same `value`). */\n options?: SelectOptionData[]\n /** Shown when nothing is selected. Muted ink until a value is set. */\n placeholder?: string\n /** Hidden input `name` for native form submit. */\n name?: string\n /**\n * When true, the value cannot be cleared to empty (no clear control, clicking the\n * selected option does not deselect). Default `false`.\n */\n required?: boolean\n /**\n * Show a clear control when there is a value. Default `false`. Ignored when `required`.\n */\n clearable?: boolean\n /**\n * When true and a known value is selected, that option is listed first in the menu.\n * Default `false`. The empty row from `emptyOption` stays first.\n */\n selectedAtTop?: boolean\n /**\n * First menu row with value `''` (visible “none”). `true` uses `placeholder` as the\n * caption; a string is a custom caption. Ignored when `required`, or when an option\n * already has value `''`. Default off.\n */\n emptyOption?: boolean | string\n /**\n * Open to inspect; no pick / clear / type-ahead commit. Not dimmed (`disabled` is).\n * Default `false`.\n */\n readOnly?: boolean\n /** Selected value. Omit with `defaultValue` for uncontrolled. */\n value?: string\n defaultValue?: string\n /** Called with the option `value` when the selection changes. Empty string when cleared. */\n onChange?: (value: string) => void\n children?: ReactNode\n}\n\n/**\n * Custom listbox (not a native `<select>`). Host `value` / `onChange`. Place the trigger with\n * layout; `fill` stretches the trigger. Prefer `Label` + `htmlFor`.\n *\n * @example\n * ```tsx\n * <Label htmlFor='country' label='Country' />\n * <Select id='country' value={country} onChange={setCountry} placeholder='Select'>\n * <Option value='us' label='United States' />\n * <Option value='ca' label='Canada' />\n * </Select>\n * ```\n */\nexport function Select(props: SelectProps) {\n const {\n ref,\n color,\n size,\n weight,\n family: familyToken,\n italic,\n uppercase,\n fill,\n css: customCss,\n padding,\n paddingX,\n paddingY,\n borderWidth,\n borderRadius,\n background,\n ink,\n borderColor,\n value,\n defaultValue,\n onChange,\n open: openProp,\n onOpenChange,\n options,\n placeholder,\n name,\n required,\n clearable,\n selectedAtTop,\n emptyOption,\n children,\n disabled,\n readOnly,\n id,\n onKeyDown,\n onClick,\n onBlur,\n ...dom\n } = props\n const {\n fontSizes,\n fontWeights,\n fontFamilies,\n lineHeight,\n space,\n borderWidths,\n radii,\n defaults,\n brand,\n status,\n colors,\n } = usePanelizeTheme()\n const sel = defaults.select\n const isValueControlled = value !== undefined\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? '')\n const current = isValueControlled ? (value ?? '') : uncontrolledValue\n const items = withEmptyOption(\n withSelectedAtTop(collectItems(options, children), current, Boolean(selectedAtTop)),\n emptyOption,\n placeholder,\n required,\n )\n const selectedIndex = items.findIndex((item) => item.value === current)\n const activeOnOpen = selectedIndex >= 0 ? selectedIndex : firstEnabledIndex(items)\n const {\n isOpen,\n activeIndex,\n box,\n listVars,\n triggerRef,\n wrapRef,\n listRef,\n typeRef,\n setOpen,\n moveActive,\n placeList,\n } = useListboxMenu({\n items,\n open: openProp,\n onOpenChange,\n activeOnOpen,\n listMaxHeight: sel.listMaxHeight,\n listOffset: sel.listOffset,\n space,\n })\n const listId = useId()\n const assignTriggerRef = (node: HTMLButtonElement | null) => {\n triggerRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }\n\n const focus = resolveFocusColor(color ?? sel.color, brand, status)\n const invalid = status.danger.base\n const typeSize = resolveScaleValue(size, sel.size, fontSizes)\n const padX = resolveScaleValue(paddingX ?? padding, sel.paddingX, space)\n const padY = resolveScaleValue(paddingY ?? padding, sel.paddingY, space)\n const radius = resolveScaleValue(borderRadius, sel.borderRadius, radii)\n const stroke = resolveScaleValue(borderWidth, sel.borderWidth, borderWidths)\n const bg =\n resolvePaintValue(background, 'background', colors, brand, status) ??\n `var(${panelCssVars.background})`\n const textInk =\n resolvePaintValue(ink, 'text', colors, brand, status) ?? `var(${panelCssVars.textHighlighted})`\n const restBorder =\n resolvePaintValue(borderColor, 'border', colors, brand, status) ?? `var(${panelCssVars.border})`\n const selected = items.find((item) => item.value === current)\n const empty = current === ''\n const showClear = Boolean(clearable) && !required && !empty && !disabled && !readOnly\n const mutedInk = `var(${panelCssVars.textMuted})`\n const labelInk = empty ? mutedInk : textInk\n const caption = empty ? selected?.label || placeholder || '' : (selected?.label ?? current)\n const optionPadX = resolveScaleValue(undefined, sel.optionPaddingX, space)\n const optionPadY = resolveScaleValue(undefined, sel.optionPaddingY, space)\n const typeWeight = resolveScaleValue(weight, sel.weight, fontWeights)\n const typeFamily = fontFamilies[familyToken ?? 'base']\n\n const emit = (next: string) => {\n if (!isValueControlled) {\n setUncontrolledValue(next)\n }\n onChange?.(next)\n }\n\n const pick = (entry: string, blur: boolean) => {\n if (readOnly) {\n if (isOpen) {\n setOpen(false)\n if (blur) {\n triggerRef.current?.blur()\n }\n }\n return\n }\n if (!required && current === entry) {\n emit('')\n setOpen(false)\n if (blur) {\n triggerRef.current?.blur()\n }\n return\n }\n emit(entry)\n setOpen(false)\n if (blur) {\n triggerRef.current?.blur()\n }\n }\n\n const clear = (blur: boolean) => {\n if (readOnly || required || empty) {\n return\n }\n emit('')\n setOpen(false)\n if (blur) {\n triggerRef.current?.blur()\n }\n }\n\n const onTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event)\n runListboxKeyDown(event, {\n disabled,\n readOnly,\n isOpen,\n items,\n activeIndex,\n showClear,\n typeRef,\n placeList,\n setOpen,\n moveActive,\n openHighlightDown: activeOnOpen,\n openHighlightUp: selectedIndex >= 0 ? selectedIndex : lastEnabledIndex(items),\n closedTypeaheadFrom: selectedIndex,\n onCommit: (item) => pick(item.value, false),\n onClear: () => clear(false),\n onClosedTypeahead: (item) => pick(item.value, false),\n })\n }\n\n const activeId =\n isOpen && activeIndex >= 0 && items[activeIndex]\n ? `${listId}-${items[activeIndex].value}`\n : undefined\n\n return (\n <>\n {name !== undefined ? (\n <input\n type='hidden'\n name={name}\n value={current}\n required={required || undefined}\n disabled={disabled || undefined}\n />\n ) : null}\n <TriggerWrap ref={wrapRef} $fill={fill}>\n <StyledTrigger\n {...dom}\n ref={assignTriggerRef}\n id={id}\n type='button'\n disabled={disabled}\n role='combobox'\n aria-haspopup='listbox'\n aria-autocomplete='none'\n aria-expanded={isOpen}\n aria-controls={isOpen ? listId : undefined}\n aria-activedescendant={activeId}\n aria-required={required || undefined}\n aria-readonly={readOnly || undefined}\n $family={typeFamily}\n $size={typeSize}\n $weight={typeWeight}\n $lineHeight={lineHeight}\n $paddingX={padX}\n $paddingY={padY}\n $borderWidth={stroke}\n $borderRadius={radius}\n $bg={bg}\n $ink={textInk}\n $muted={mutedInk}\n $borderColor={restBorder}\n $focus={focus}\n $invalid={invalid}\n $italic={italic}\n $uppercase={uppercase}\n $fill={fill}\n $open={isOpen}\n $clearable={showClear}\n $customCss={customCss}\n onKeyDown={onTriggerKeyDown}\n onBlur={(event: FocusEvent<HTMLButtonElement>) => {\n onBlur?.(event)\n if (event.defaultPrevented) {\n return\n }\n const next = event.relatedTarget\n if (next instanceof Node) {\n if (wrapRef.current?.contains(next) || listRef.current?.contains(next)) {\n return\n }\n }\n if (isOpen) {\n setOpen(false)\n }\n }}\n onClick={(event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (event.defaultPrevented || disabled) {\n return\n }\n if (!isOpen) {\n placeList()\n setOpen(true)\n return\n }\n setOpen(false)\n triggerRef.current?.blur()\n }}\n >\n <TriggerLabel $ink={labelInk}>{caption}</TriggerLabel>\n </StyledTrigger>\n {showClear ? (\n <ClearButton\n type='button'\n tabIndex={-1}\n aria-label='Clear'\n $end={`calc(${padX} + 0.95em)`}\n $ink={mutedInk}\n $hoverInk={textInk}\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => {\n event.stopPropagation()\n clear(true)\n }}\n />\n ) : null}\n </TriggerWrap>\n {isOpen && box && typeof document !== 'undefined'\n ? createPortal(\n <StyledList\n ref={listRef}\n id={listId}\n role='listbox'\n aria-labelledby={id || undefined}\n style={listVars}\n $top={box.top}\n $left={box.left}\n $width={box.width}\n $maxHeight={box.maxHeight}\n $zIndex={sel.listZIndex}\n $shadow={sel.listShadow}\n $radius={radius}\n $borderWidth={stroke}\n $borderColor={restBorder}\n $bg={bg}\n $ink={textInk}\n $size={typeSize}\n $weight={typeWeight}\n $family={typeFamily}\n $lineHeight={lineHeight}\n >\n {items.map((item, index) => (\n <StyledOption\n key={item.value}\n id={`${listId}-${item.value}`}\n role='option'\n aria-selected={item.value === current}\n aria-disabled={item.disabled || undefined}\n data-active={index === activeIndex ? 'true' : undefined}\n $padX={optionPadX}\n $padY={optionPadY}\n $chroma={focus}\n $ink={textInk}\n $selected={item.value === current}\n $active={index === activeIndex}\n $disabled={Boolean(item.disabled)}\n onMouseEnter={() => {\n if (!item.disabled) {\n moveActive(index)\n }\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n if (!item.disabled) {\n pick(item.value, true)\n }\n }}\n >\n {item.label}\n </StyledOption>\n ))}\n </StyledList>,\n document.body,\n )\n : null}\n </>\n )\n}\n\nSelect.displayName = 'Select'\n","import { type ComponentPropsWithRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolvePaintValue, resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontSizeValue,\n type PaintValue,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { panelCssVars } from '~/src/components/layout/Panel'\nimport { resolveChromaSlot } from '~/src/components/text/color'\n\ntype StyledSwitchProps = {\n $width: string\n $height: string\n $size: string\n $thumb: string\n $inset: string\n $radius: string\n $off: string\n $on: string\n $hoverOn: string\n $activeOn: string\n $ink: string\n $customCss?: string\n}\n\nconst StyledSwitch = styled.input<StyledSwitchProps>`\n appearance: none;\n margin: 0;\n flex-shrink: 0;\n box-sizing: border-box;\n position: relative;\n display: inline-block;\n vertical-align: middle;\n width: ${({ $width }) => $width};\n height: ${({ $height }) => $height};\n font-size: ${({ $size }) => $size};\n padding: 0;\n border: none;\n border-radius: ${({ $radius }) => $radius};\n background: ${({ $off }) => $off};\n cursor: pointer;\n transition:\n background 120ms ease,\n box-shadow 120ms ease;\n &::before {\n content: '';\n position: absolute;\n top: 50%;\n left: ${({ $inset }) => $inset};\n width: ${({ $thumb }) => $thumb};\n height: ${({ $thumb }) => $thumb};\n margin-top: calc(${({ $thumb }) => $thumb} / -2);\n border-radius: min(${({ $radius }) => $radius}, 50%);\n background: ${({ $ink }) => $ink};\n box-shadow: 0 1px 2px rgb(0 0 0 / 35%);\n transition: left 120ms ease;\n }\n &:checked {\n background: ${({ $on }) => $on};\n }\n &:checked:hover:not(:disabled) {\n background: ${({ $hoverOn }) => $hoverOn};\n }\n &:checked:active:not(:disabled) {\n background: ${({ $activeOn }) => $activeOn};\n }\n &:checked::before {\n left: calc(100% - ${({ $inset, $thumb }) => `${$inset} - ${$thumb}`});\n }\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px color-mix(in srgb, ${({ $on }) => $on} 18%, transparent);\n }\n &:disabled {\n cursor: not-allowed;\n opacity: 0.45;\n }\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n &::before {\n transition: none;\n }\n }\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type SwitchProps = Omit<ComponentPropsWithRef<'input'>, 'size' | 'type'> & {\n /**\n * On-track chroma. Brand (`primary` / `secondary` / `accent`), status (`danger` / …), or raw CSS.\n * Theme default `primary`. Off-track is not this slot — use `background`.\n */\n color?: ColorValue\n /**\n * Type size token or CSS. Track height is this size × theme `lineHeight` (keep `lineHeight`\n * unitless). Width is this size × `defaults.switch.widthFactor`. Theme default `base`. Native\n * HTML `size` is omitted. Use the same `size` on the paired `Label`.\n */\n size?: FontSizeValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n /**\n * Off-track fill. Surface, brand, status, or CSS.\n * Omit = mix of `--panelize-text` into `--panelize-bg`.\n */\n background?: PaintValue\n /**\n * Thumb fill. Surface, brand, status, or CSS. Theme default `palette.white`.\n */\n ink?: PaintValue\n /** Track width. Space token or CSS (not `fontSizes`). Overrides `size` on this axis. */\n width?: SpaceValue\n /** Track height. Space token or CSS (not `fontSizes`). Overrides `size` on this axis. */\n height?: SpaceValue\n /**\n * Track radius. Space token or CSS. Theme default `999px` (capsule). Thumb uses\n * `min(this, 50%)` so a capsule stays round and a token like `small` squares both pieces.\n */\n borderRadius?: SpaceValue\n}\n\n/**\n * Native switch (`role='switch'`). On-track is `color` chroma; thumb is `ink`. Wrap with\n * `Label` (same `size`). No `fill` / `label` / `children`.\n *\n * @example\n * ```tsx\n * <Label htmlFor='air'>\n * <Cols gap='small' alignY='center'>\n * <Col>\n * <Switch id='air' checked={on} onChange={(e) => setOn(e.target.checked)} />\n * </Col>\n * <Col>\n * <Text>Airplane mode</Text>\n * </Col>\n * </Cols>\n * </Label>\n * ```\n */\nexport function Switch(props: SwitchProps) {\n const {\n color,\n size,\n css: customCss,\n background,\n ink,\n width,\n height,\n borderRadius,\n ...dom\n } = props\n const { space, radii, fontSizes, defaults, brand, status, colors, lineHeight } =\n usePanelizeTheme()\n const sw = defaults.switch\n const slot = resolveChromaSlot(color ?? sw.color, brand, status)\n const off =\n resolvePaintValue(background, 'background', colors, brand, status) ??\n `color-mix(in srgb, var(${panelCssVars.text}) 28%, var(${panelCssVars.background}))`\n const thumbInk = resolvePaintValue(ink, 'text', colors, brand, status) ?? sw.ink\n const typeSize = resolveScaleValue(size, sw.size, fontSizes)\n const trackHeight =\n height !== undefined\n ? resolveScaleValue(height, typeSize, space)\n : `calc(${typeSize} * ${lineHeight})`\n const trackWidth =\n width !== undefined\n ? resolveScaleValue(width, typeSize, space)\n : `calc(${typeSize} * ${sw.widthFactor})`\n const inset = `calc(${typeSize} * ${sw.insetFactor})`\n const thumb = `calc(${trackHeight} - 2 * ${inset})`\n\n return (\n <StyledSwitch\n $width={trackWidth}\n $height={trackHeight}\n $size={typeSize}\n $thumb={thumb}\n $inset={inset}\n $radius={resolveScaleValue(borderRadius, sw.borderRadius, radii)}\n $off={off}\n $on={slot.base}\n $hoverOn={slot.hover}\n $activeOn={slot.active}\n $ink={thumbInk}\n $customCss={customCss}\n {...dom}\n type='checkbox'\n role='switch'\n />\n )\n}\n\nSwitch.displayName = 'Switch'\n","import { type ComponentPropsWithRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolvePaintValue, resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n type PaintValue,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { fieldChromeCss, type FieldChromeVars } from '~/src/components/forms/field'\nimport { panelCssVars } from '~/src/components/layout/Panel'\nimport { resolveFocusColor } from '~/src/components/text/color'\n\ntype StyledTextareaProps = FieldChromeVars & {\n $resize: boolean\n}\n\nconst StyledTextarea = styled.textarea<StyledTextareaProps>`\n ${fieldChromeCss}\n vertical-align: top;\n overflow: auto;\n resize: ${({ $resize }) => ($resize ? 'vertical' : 'none')};\n &:disabled {\n resize: none;\n }\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type TextareaProps = ComponentPropsWithRef<'textarea'> & {\n /**\n * Focus chroma only (border, glow, caret). Not glyph ink — use `ink` (omit = `--panelize-text`).\n * Brand (`primary` / `secondary` / `accent`), status (`danger` / …), or raw CSS. Theme default `primary`.\n */\n color?: ColorValue\n /** Font size token or CSS. Theme default `small`. */\n size?: FontSizeValue\n /** Font weight token or CSS. Theme default `base`. */\n weight?: FontWeightValue\n /** `fontFamilies` token. Omit uses `base`. */\n family?: FontFamilyToken\n /** Italic. Default off. */\n italic?: boolean\n /** `text-transform: uppercase`. Default off. */\n uppercase?: boolean\n /**\n * Width and height 100% of the parent. Height `%` only applies when the parent has a\n * definite height. Same idea as layout `fill`.\n */\n fill?: boolean\n /** Vertical resize handle. Theme default `false`. `true` opts in; does not depend on `fill`. */\n resize?: boolean\n /** Extra CSS appended to this component’s styles. */\n css?: string\n /** Padding on all axes. Space token or CSS. Overrides theme until `paddingX` / `paddingY`. */\n padding?: SpaceValue\n /** Horizontal padding. Overrides `padding`. */\n paddingX?: SpaceValue\n /** Vertical padding. Overrides `padding`. */\n paddingY?: SpaceValue\n /** Border width token or CSS. Theme default `extraSmall`. */\n borderWidth?: SpaceValue\n /** Border radius token or CSS. Theme default `base`. */\n borderRadius?: SpaceValue\n /**\n * Rest fill. Surface (`muted` / `base` / `highlighted`), brand, status, or CSS.\n * Omit = nearest panel `--panelize-bg`.\n */\n background?: PaintValue\n /**\n * Glyph ink. Surface (`muted` / `base` / `highlighted` → that text.base), brand, status, or CSS.\n * Omit = `--panelize-text`. Not focus chroma (`color`).\n */\n ink?: PaintValue\n /**\n * Rest border. Surface (`muted` / `base` / `highlighted` → that border), brand, status, or CSS.\n * Omit = `--panelize-border`. Focus / `:user-invalid` still own the stroke.\n */\n borderColor?: PaintValue\n}\n\n/**\n * Multiline field. Same chrome as `Input`. Theme starts from merged `defaults.input`. Default\n * `resize` off, `rows` 3. Place with layout.\n *\n * @example\n * ```tsx\n * <Label htmlFor='notes' label='Notes' />\n * <Textarea id='notes' placeholder='Notes' />\n * ```\n */\nexport function Textarea(props: TextareaProps) {\n const {\n color,\n size,\n weight,\n family: familyToken,\n italic,\n uppercase,\n fill,\n resize,\n css: customCss,\n padding,\n paddingX,\n paddingY,\n borderWidth,\n borderRadius,\n background,\n ink,\n borderColor,\n rows,\n ...dom\n } = props\n const {\n fontSizes,\n fontWeights,\n fontFamilies,\n lineHeight,\n space,\n borderWidths,\n radii,\n defaults,\n brand,\n status,\n colors,\n } = usePanelizeTheme()\n const textarea = defaults.textarea\n\n return (\n <StyledTextarea\n rows={rows ?? textarea.rows}\n $family={fontFamilies[familyToken ?? 'base']}\n $size={resolveScaleValue(size, textarea.size, fontSizes)}\n $weight={resolveScaleValue(weight, textarea.weight, fontWeights)}\n $lineHeight={lineHeight}\n $paddingX={resolveScaleValue(paddingX ?? padding, textarea.paddingX, space)}\n $paddingY={resolveScaleValue(paddingY ?? padding, textarea.paddingY, space)}\n $borderWidth={resolveScaleValue(borderWidth, textarea.borderWidth, borderWidths)}\n $borderRadius={resolveScaleValue(borderRadius, textarea.borderRadius, radii)}\n $bg={\n resolvePaintValue(background, 'background', colors, brand, status) ??\n `var(${panelCssVars.background})`\n }\n $ink={resolvePaintValue(ink, 'text', colors, brand, status) ?? `var(${panelCssVars.text})`}\n $borderColor={\n resolvePaintValue(borderColor, 'border', colors, brand, status) ??\n `var(${panelCssVars.border})`\n }\n $focus={resolveFocusColor(color ?? textarea.color, brand, status)}\n $invalid={status.danger.base}\n $resize={resize ?? textarea.resize}\n $italic={italic}\n $uppercase={uppercase}\n $fill={fill}\n $customCss={customCss}\n {...dom}\n />\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { css, styled } from 'styled-components'\n\nimport {\n type BoxEdges,\n boxEdgesCss,\n gridSelfAlignCss,\n resolveBorderColor,\n resolveBorderEdges,\n resolveBoxEdges,\n type ResolvedSizeLimits,\n resolveScaleValue,\n resolveSizeLimits,\n sizeLimitCss,\n takeBoxLayout,\n} from '~/src/theme/internal'\n\nimport {\n type AlignValue,\n type BorderColorValue,\n type BoxSpacingProps,\n type DirectionalBorderProps,\n type SizeLimitProps,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\ntype StyledCellProps = {\n $spanX?: number\n $spanY?: number\n $alignX?: AlignValue\n $alignY?: AlignValue\n $edges: BoxEdges\n $size: ResolvedSizeLimits\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $customCss?: string\n}\n\nfunction spanCss(axis: 'column' | 'row', count: number | undefined) {\n if (count === undefined || !Number.isFinite(count) || count < 1 || Math.floor(count) === 1) {\n return\n }\n\n const span = Math.floor(count)\n return axis === 'column'\n ? css`\n grid-column: span ${span};\n `\n : css`\n grid-row: span ${span};\n `\n}\n\nconst StyledCell = styled.div<StyledCellProps>`\n position: relative;\n min-width: 0;\n min-height: 0;\n ${({ $edges }) => boxEdgesCss($edges)}\n ${({ $size }) => sizeLimitCss($size)}\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $borderColor }) => $borderColor};\n ${({ $spanX }) => spanCss('column', $spanX)}\n ${({ $spanY }) => spanCss('row', $spanY)}\n ${({ $alignX, $alignY }) => gridSelfAlignCss($alignX, $alignY)}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type CellProps = ComponentPropsWithoutRef<'div'> &\n BoxSpacingProps &\n SizeLimitProps &\n DirectionalBorderProps & {\n /** How many column tracks this cell covers. Default `1`. Becomes 1 when the parent `Grid` is stacked to one column. */\n spanX?: number\n /** How many row tracks this cell covers. Default `1`. */\n spanY?: number\n /**\n * Left–right alignment in this cell (`justify-self`).\n * Omitted: inherit the parent `Grid` `alignX`.\n */\n alignX?: AlignValue\n /**\n * Top–bottom alignment in this cell (`align-self`).\n * Omitted: inherit the parent `Grid` `alignY`.\n */\n alignY?: AlignValue\n /** Border radius token or CSS length. Default `none`. */\n borderRadius?: SpaceValue\n /**\n * Panel surface (`muted` / `base` / `highlighted`), brand (`primary`), status (`danger`), or CSS.\n * Default is `base` border. `base` is the surface, not a brand slot.\n */\n borderColor?: BorderColorValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n }\n\n/**\n * One cell in a `Grid`. Direct child of `Grid` only. No `width` / `height` / `fill` — span\n * tracks with `spanX` / `spanY`. Place content here.\n *\n * @example\n * ```tsx\n * <Grid numCols={3} gap='small'>\n * <Cell>\n * <Text>A</Text>\n * </Cell>\n * <Cell spanX={2}>\n * <Text>B</Text>\n * </Cell>\n * </Grid>\n * ```\n */\nexport function Cell(props: CellProps) {\n const { spacing, size, rest } = takeBoxLayout(props)\n const {\n spanX,\n spanY,\n alignX,\n alignY,\n css: customCss,\n borderWidth,\n borderX,\n borderY,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderRadius,\n borderColor,\n ...dom\n } = rest\n const { colors, space, borderWidths, radii, defaults, brand, status } = usePanelizeTheme()\n\n return (\n <StyledCell\n $spanX={spanX}\n $spanY={spanY}\n $alignX={alignX}\n $alignY={alignY}\n $edges={resolveBoxEdges(spacing, defaults.cell, space)}\n $size={resolveSizeLimits(size, space)}\n $borderWidth={resolveBorderEdges(\n { borderWidth, borderX, borderY, borderTop, borderRight, borderBottom, borderLeft },\n defaults.cell.borderWidth,\n borderWidths,\n )}\n $borderRadius={resolveScaleValue(borderRadius, defaults.cell.borderRadius, radii)}\n $borderColor={resolveBorderColor(borderColor, 'base', colors, brand, status)}\n $customCss={customCss}\n {...dom}\n />\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport {\n type BoxEdges,\n boxEdgesCss,\n flexItemCss,\n resolveBorderColor,\n resolveBorderEdges,\n resolveBoxEdges,\n resolveBoxSize,\n type ResolvedBoxSize,\n resolveScaleValue,\n selfAlignCss,\n sizeCss,\n takeBoxLayout,\n type TrackKind,\n useTrackKind,\n} from '~/src/theme/internal'\n\nimport {\n type AlignValue,\n type BorderColorValue,\n type BoxSpacingProps,\n type DirectionalBorderProps,\n type SelfAlignProps,\n type SizeProps,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\ntype StyledColProps = {\n $flex?: boolean\n $fill?: boolean\n $edges: BoxEdges\n $size: ResolvedBoxSize\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $alignX?: AlignValue\n $alignY?: AlignValue\n $trackKind?: TrackKind\n $customCss?: string\n}\n\nconst StyledCol = styled.div<StyledColProps>`\n position: relative;\n ${({ $edges }) => boxEdgesCss($edges)}\n ${({ $size, $fill }) => sizeCss($size, $fill)}\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $borderColor }) => $borderColor};\n ${({ $flex }) => flexItemCss($flex, true)}\n ${({ $trackKind, $alignX, $alignY }) => selfAlignCss($trackKind, $alignX, $alignY)}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type ColProps = ComponentPropsWithoutRef<'div'> &\n BoxSpacingProps &\n SizeProps &\n SelfAlignProps &\n DirectionalBorderProps & {\n /**\n * Grow in a flex parent (`flex: 1 1 0%`, `min-width` / `min-height` 0). Until then this box is\n * `flex-shrink: 0` (same as `Panel`).\n */\n flex?: boolean\n /**\n * Size to the parent on axes without a size. Theme `width` is `auto`, so omit `width` → height\n * 100% only. Explicit `width` / `height` win.\n */\n fill?: boolean\n /** Border radius token or CSS length. Default `none`. */\n borderRadius?: SpaceValue\n /**\n * Panel surface (`muted` / `base` / `highlighted`), brand (`primary`), status (`danger`), or CSS.\n * Default is `base` border. `base` is the surface, not a brand slot.\n */\n borderColor?: BorderColorValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n }\n\n/**\n * One column in a `Cols` track. Direct child of `Cols` only. Place content here. This box owns\n * `flex` / `width` / `alignY` — children do not position themselves.\n *\n * @example\n * ```tsx\n * <Cols gap='small'>\n * <Col>\n * <Button label='Save' />\n * </Col>\n * <Col>\n * <Button outline label='Cancel' />\n * </Col>\n * </Cols>\n * ```\n */\nexport function Col(props: ColProps) {\n const { spacing, size, rest } = takeBoxLayout(props)\n const {\n flex,\n fill,\n alignX,\n alignY,\n css: customCss,\n borderWidth,\n borderX,\n borderY,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderRadius,\n borderColor,\n ...dom\n } = rest\n const { colors, space, borderWidths, radii, defaults, brand, status } = usePanelizeTheme()\n const trackKind = useTrackKind()\n\n return (\n <StyledCol\n $flex={flex}\n $fill={fill}\n $edges={resolveBoxEdges(spacing, defaults.col, space)}\n $size={resolveBoxSize(size, space, { width: defaults.col.width })}\n $borderWidth={resolveBorderEdges(\n { borderWidth, borderX, borderY, borderTop, borderRight, borderBottom, borderLeft },\n defaults.col.borderWidth,\n borderWidths,\n )}\n $borderRadius={resolveScaleValue(borderRadius, defaults.col.borderRadius, radii)}\n $borderColor={resolveBorderColor(borderColor, 'base', colors, brand, status)}\n $alignX={alignX}\n $alignY={alignY}\n $trackKind={trackKind}\n $customCss={customCss}\n {...dom}\n />\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport {\n type BoxEdges,\n boxEdgesCss,\n flexAlignCss,\n flexItemCss,\n resolveAlignValue,\n resolveBorderColor,\n resolveBorderEdges,\n resolveBoxEdges,\n resolveBoxSize,\n resolveBreakpointValue,\n type ResolvedBoxSize,\n resolveScaleValue,\n sizeCss,\n stackedMainAlign,\n stackQueryCss,\n takeBoxLayout,\n TrackProvider,\n} from '~/src/theme/internal'\n\nimport {\n type AlignValue,\n type BorderColorValue,\n type BoxSpacingProps,\n type DirectionalBorderProps,\n type FlexAlignProps,\n type SizeProps,\n type SpaceValue,\n type StackValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\ntype StyledColsProps = {\n $flex?: boolean\n $fill?: boolean\n $gap: string\n $alignX: AlignValue\n $alignY: AlignValue\n $wrap?: boolean\n $stackMax?: string\n $stackedJustify: AlignValue\n $edges: BoxEdges\n $size: ResolvedBoxSize\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $customCss?: string\n}\n\nconst StyledCols = styled.div<StyledColsProps>`\n display: flex;\n flex-direction: row;\n position: relative;\n flex-wrap: ${({ $wrap }) => ($wrap ? 'wrap' : 'nowrap')};\n gap: ${({ $gap }) => $gap};\n ${({ $alignX, $alignY }) => flexAlignCss(false, $alignX, $alignY)}\n ${({ $edges }) => boxEdgesCss($edges)}\n ${({ $size, $fill }) => sizeCss($size, $fill)}\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $borderColor }) => $borderColor};\n ${({ $flex }) => flexItemCss($flex)}\n ${({ $stackMax, $stackedJustify }) =>\n $stackMax ? stackQueryCss($stackMax, $stackedJustify) : ''}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type ColsProps = ComponentPropsWithoutRef<'div'> &\n BoxSpacingProps &\n SizeProps &\n FlexAlignProps &\n DirectionalBorderProps & {\n /** Grow in a flex parent (`flex: 1 1 0%`, `min-width` / `min-height` 0). */\n flex?: boolean\n /** Size to the parent (`height` and `width` 100%). Explicit `width` / `height` win on that axis. */\n fill?: boolean\n /** Space between child `Col`s. Token or CSS length. Theme default is `none`. */\n gap?: SpaceValue\n /** Allow child `Col`s to wrap onto the next line. Default is no wrap. */\n wrap?: boolean\n /**\n * Become a column when this box is at most this wide (`sm` / `md` / `lg`, or CSS).\n * Measures this `Cols`, not the viewport. `stack=\"md\"` is not Tailwind `md:` (that is and-up).\n * While stacked, children stretch full width (`alignX` centering is ignored).\n * Column packing uses explicit `alignY`, or `start` if `alignY` was omitted (not row `stretch`).\n */\n stack?: StackValue\n /** Border radius token or CSS length. Default `none`. */\n borderRadius?: SpaceValue\n /**\n * Panel surface (`muted` / `base` / `highlighted`), brand (`primary`), status (`danger`), or CSS.\n * Default is `base` border. Does not paint a panel background.\n */\n borderColor?: BorderColorValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n }\n\n/**\n * Row track. Direct children must be `Col`, two or more. Do not wrap a single column — use\n * the parent `Panel` or a `Div`. `stack` collapses this row when the box is at most that wide.\n *\n * @example\n * ```tsx\n * <Cols gap='small' stack='sm'>\n * <Col width='12rem'>\n * <Text>Side</Text>\n * </Col>\n * <Col flex>\n * <Text>Main</Text>\n * </Col>\n * </Cols>\n * ```\n */\nexport function Cols(props: ColsProps) {\n const { spacing, size, rest } = takeBoxLayout(props)\n const {\n flex,\n fill,\n gap,\n alignX,\n alignY,\n wrap,\n stack,\n css: customCss,\n borderWidth,\n borderX,\n borderY,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderRadius,\n borderColor,\n ...dom\n } = rest\n const { space, breakpoints, defaults, colors, borderWidths, radii, brand, status } =\n usePanelizeTheme()\n\n return (\n <TrackProvider kind='row'>\n <StyledCols\n $flex={flex}\n $fill={fill}\n $gap={resolveScaleValue(gap, defaults.cols.gap, space)}\n $alignX={resolveAlignValue(alignX, defaults.cols.alignX)}\n $alignY={resolveAlignValue(alignY, defaults.cols.alignY)}\n $wrap={wrap}\n $stackMax={resolveBreakpointValue(stack, breakpoints)}\n $stackedJustify={stackedMainAlign(alignY)}\n $edges={resolveBoxEdges(spacing, defaults.cols, space)}\n $size={resolveBoxSize(size, space)}\n $borderWidth={resolveBorderEdges(\n { borderWidth, borderX, borderY, borderTop, borderRight, borderBottom, borderLeft },\n 'none',\n borderWidths,\n )}\n $borderRadius={resolveScaleValue(borderRadius, 'none', radii)}\n $borderColor={resolveBorderColor(borderColor, 'base', colors, brand, status)}\n $customCss={customCss}\n {...dom}\n />\n </TrackProvider>\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport {\n type BoxEdges,\n boxEdgesCss,\n flexItemCss,\n resolveBorderColor,\n resolveBorderEdges,\n resolveBoxEdges,\n resolveBoxSize,\n type ResolvedBoxSize,\n resolveScaleValue,\n selfAlignCss,\n sizeCss,\n takeBoxLayout,\n type TrackKind,\n useTrackKind,\n} from '~/src/theme/internal'\n\nimport {\n type AlignValue,\n type BorderColorValue,\n type BoxSpacingProps,\n type DirectionalBorderProps,\n type SelfAlignProps,\n type SizeProps,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { panelCssVars } from '~/src/components/layout/Panel'\n\ntype StyledDivProps = {\n $flex?: boolean\n $fill?: boolean\n $edges: BoxEdges\n $size: ResolvedBoxSize\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $alignX?: AlignValue\n $alignY?: AlignValue\n $trackKind?: TrackKind\n $customCss?: string\n}\n\nconst StyledDiv = styled.div<StyledDivProps>`\n position: relative;\n ${({ $edges }) => boxEdgesCss($edges)}\n ${({ $size, $fill }) => sizeCss($size, $fill)}\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $borderColor }) => $borderColor};\n ${({ $flex }) => flexItemCss($flex, true)}\n ${({ $trackKind, $alignX, $alignY }) => selfAlignCss($trackKind, $alignX, $alignY)}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type DivProps = ComponentPropsWithoutRef<'div'> &\n BoxSpacingProps &\n SizeProps &\n SelfAlignProps &\n DirectionalBorderProps & {\n /**\n * Grow in a flex parent (`flex: 1 1 0%`, `min-width` / `min-height` 0). Until then this box is\n * `flex-shrink: 0` (same as `Panel`).\n */\n flex?: boolean\n /** Size to the parent (`height` and `width` 100%). Explicit `width` / `height` win on that axis. */\n fill?: boolean\n /** Border radius token or CSS length. Default `none`. */\n borderRadius?: SpaceValue\n /**\n * Panel surface, brand (`primary`), status (`danger`), or raw CSS.\n * Omitted uses the parent `Panel` border (`var(--panelize-border)`).\n * Does not paint a panel background.\n */\n borderColor?: BorderColorValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n }\n\n/**\n * Catch-all box (spacing, size, border, `fill` / `flex`). No surface paint. Use when a single\n * wrapper is enough — not a substitute for `Row` / `Col` / `Cell` (those still belong under\n * their tracks).\n *\n * @example\n * ```tsx\n * <Panel padding='base'>\n * <Div maxWidth='24rem'>\n * <Heading level={2}>Card</Heading>\n * <Text muted>Body</Text>\n * </Div>\n * </Panel>\n * ```\n */\nexport function Div(props: DivProps) {\n const { spacing, size, rest } = takeBoxLayout(props)\n const {\n flex,\n fill,\n alignX,\n alignY,\n css: customCss,\n borderWidth,\n borderX,\n borderY,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderRadius,\n borderColor,\n ...dom\n } = rest\n const { colors, space, borderWidths, radii, defaults, brand, status } = usePanelizeTheme()\n const trackKind = useTrackKind()\n\n return (\n <StyledDiv\n $flex={flex}\n $fill={fill}\n $edges={resolveBoxEdges(spacing, defaults.div, space)}\n $size={resolveBoxSize(size, space)}\n $borderWidth={resolveBorderEdges(\n { borderWidth, borderX, borderY, borderTop, borderRight, borderBottom, borderLeft },\n defaults.div.borderWidth,\n borderWidths,\n )}\n $borderRadius={resolveScaleValue(borderRadius, defaults.div.borderRadius, radii)}\n $borderColor={\n borderColor === undefined\n ? `var(${panelCssVars.border})`\n : resolveBorderColor(borderColor, 'base', colors, brand, status)\n }\n $alignX={alignX}\n $alignY={alignY}\n $trackKind={trackKind}\n $customCss={customCss}\n {...dom}\n />\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { css, styled } from 'styled-components'\n\nimport {\n type BoxEdges,\n boxEdgesCss,\n flexItemCss,\n gridItemAlignCss,\n resolveAlignValue,\n resolveBorderColor,\n resolveBorderEdges,\n resolveBoxEdges,\n resolveBoxSize,\n resolveBreakpointValue,\n type ResolvedBoxSize,\n resolveScaleValue,\n sizeCss,\n stackGridQueryCss,\n takeBoxLayout,\n TrackProvider,\n} from '~/src/theme/internal'\n\nimport {\n type AlignValue,\n type BorderColorValue,\n type BoxSpacingProps,\n type DirectionalBorderProps,\n type GridAlignProps,\n type SizeProps,\n type SpaceValue,\n type StackValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nfunction repeatTracks(count: number | undefined): string | undefined {\n if (count === undefined || !Number.isFinite(count) || count < 1) {\n return undefined\n }\n\n return `repeat(${Math.floor(count)}, minmax(0, 1fr))`\n}\n\ntype StyledGridProps = {\n $flex?: boolean\n $fill?: boolean\n $gap: string\n $columns?: string\n $rows?: string\n $alignX: AlignValue\n $alignY: AlignValue\n $stackMax?: string\n $stackCols: number\n $edges: BoxEdges\n $size: ResolvedBoxSize\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $customCss?: string\n}\n\nconst StyledGrid = styled.div<StyledGridProps>`\n display: grid;\n position: relative;\n gap: ${({ $gap }) => $gap};\n ${({ $columns }) =>\n $columns\n ? css`\n grid-template-columns: ${$columns};\n `\n : ''}\n ${({ $rows }) =>\n $rows\n ? css`\n grid-template-rows: ${$rows};\n `\n : ''}\n ${({ $alignX, $alignY }) => gridItemAlignCss($alignX, $alignY)}\n ${({ $edges }) => boxEdgesCss($edges)}\n ${({ $size, $fill }) => sizeCss($size, $fill)}\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $borderColor }) => $borderColor};\n ${({ $flex }) => flexItemCss($flex)}\n ${({ $stackMax, $stackCols }) => ($stackMax ? stackGridQueryCss($stackMax, $stackCols) : '')}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type GridProps = ComponentPropsWithoutRef<'div'> &\n BoxSpacingProps &\n SizeProps &\n GridAlignProps &\n DirectionalBorderProps & {\n /** Grow in a flex parent (`flex: 1 1 0%`, `min-width` / `min-height` 0). */\n flex?: boolean\n /** Size to the parent (`height` and `width` 100%). Explicit `width` / `height` win on that axis. */\n fill?: boolean\n /** Space between cells. Token or CSS length. Theme default is `none`. */\n gap?: SpaceValue\n /** Column track count. Each track is `minmax(0, 1fr)`. Omit for implicit auto columns. */\n numCols?: number\n /** Row track count. Each track is `minmax(0, 1fr)`. Omit for implicit content-sized rows. */\n numRows?: number\n /**\n * Reduce columns when this box is at most this wide (`sm` / `md` / `lg`, or CSS).\n * Measures this `Grid`, not the viewport. `stack=\"md\"` is not Tailwind `md:` (that is and-up).\n * Track count while stacked is `stackCols` (default 1). Items stretch. Child `spanX`\n * becomes 1 only when stacked to one column.\n */\n stack?: StackValue\n /** Column tracks while `stack`ed. Default `1`. Ignored if `stack` is omitted. */\n stackCols?: number\n /** Border radius token or CSS length. Default `none`. */\n borderRadius?: SpaceValue\n /**\n * Panel surface (`muted` / `base` / `highlighted`), brand (`primary`), status (`danger`), or CSS.\n * Default is `base` border. Does not paint a panel background.\n */\n borderColor?: BorderColorValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n }\n\n/**\n * Grid track. Direct children must be `Cell`, two or more. `numCols` / `numRows` are equal\n * `minmax(0, 1fr)` tracks. `stack` reduces columns when this box is at most that wide.\n *\n * @example\n * ```tsx\n * <Grid numCols={2} gap='small'>\n * <Cell>\n * <Text>A</Text>\n * </Cell>\n * <Cell>\n * <Text>B</Text>\n * </Cell>\n * </Grid>\n * ```\n */\nexport function Grid(props: GridProps) {\n const { spacing, size, rest } = takeBoxLayout(props)\n const {\n flex,\n fill,\n gap,\n alignX,\n alignY,\n numCols,\n numRows,\n stack,\n stackCols,\n css: customCss,\n borderWidth,\n borderX,\n borderY,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderRadius,\n borderColor,\n ...dom\n } = rest\n const { space, breakpoints, defaults, colors, borderWidths, radii, brand, status } =\n usePanelizeTheme()\n\n return (\n <TrackProvider kind='grid'>\n <StyledGrid\n $flex={flex}\n $fill={fill}\n $gap={resolveScaleValue(gap, defaults.grid.gap, space)}\n $columns={repeatTracks(numCols)}\n $rows={repeatTracks(numRows)}\n $alignX={resolveAlignValue(alignX, defaults.grid.alignX)}\n $alignY={resolveAlignValue(alignY, defaults.grid.alignY)}\n $stackMax={resolveBreakpointValue(stack, breakpoints)}\n $stackCols={\n stackCols !== undefined && Number.isFinite(stackCols) && stackCols >= 1\n ? Math.floor(stackCols)\n : 1\n }\n $edges={resolveBoxEdges(spacing, defaults.grid, space)}\n $size={resolveBoxSize(size, space)}\n $borderWidth={resolveBorderEdges(\n { borderWidth, borderX, borderY, borderTop, borderRight, borderBottom, borderLeft },\n 'none',\n borderWidths,\n )}\n $borderRadius={resolveScaleValue(borderRadius, 'none', radii)}\n $borderColor={resolveBorderColor(borderColor, 'base', colors, brand, status)}\n $customCss={customCss}\n {...dom}\n />\n </TrackProvider>\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { css, styled } from 'styled-components'\n\nimport {\n type BoxEdges,\n boxEdgesCss,\n defaultFlexAlign,\n flexAlignCss,\n flexItemCss,\n resolveAlignValue,\n resolveBorderColor,\n resolveBorderEdges,\n resolveBoxEdges,\n resolveBoxSize,\n resolveBreakpointValue,\n type ResolvedBoxSize,\n resolveScaleValue,\n scrollCss,\n sizeCss,\n stackedMainAlign,\n stackQueryCss,\n takeBoxLayout,\n TrackProvider,\n} from '~/src/theme/internal'\n\nimport {\n type AlignValue,\n type BorderColorValue,\n type BoxSpacingProps,\n type DirectionalBorderProps,\n type FlexAlignProps,\n type ScrollProps,\n type ScrollValue,\n type SizeProps,\n type SpaceValue,\n type StackValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\ntype StyledPanelsProps = {\n $horizontal?: boolean\n $flex?: boolean\n $fill?: boolean\n $relative?: boolean\n $gap: string\n $stackMax?: string\n $stackedJustify: AlignValue\n $scroll?: ScrollValue\n $alignX: AlignValue\n $alignY: AlignValue\n $edges: BoxEdges\n $size: ResolvedBoxSize\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $customCss?: string\n}\n\n/** Absolute `fill` stretches to the containing block. `width`/`height: 100%` overflows the page by a pixel. */\nfunction panelsSizeCss(size: ResolvedBoxSize, fill?: boolean, relative?: boolean) {\n if (!fill || relative) {\n return sizeCss(size, fill)\n }\n\n const insetX = size.width === undefined\n const insetY = size.height === undefined\n\n return css`\n ${\n insetY\n ? css`\n top: 0;\n bottom: 0;\n `\n : ''\n }\n ${\n insetX\n ? css`\n left: 0;\n right: 0;\n `\n : ''\n }\n ${sizeCss(size, false)}\n `\n}\n\nconst StyledPanels = styled.div<StyledPanelsProps>`\n display: flex;\n flex-direction: ${({ $horizontal }) => ($horizontal ? 'row' : 'column')};\n position: ${({ $relative }) => ($relative ? 'relative' : 'absolute')};\n gap: ${({ $gap }) => $gap};\n ${({ $edges }) => boxEdgesCss($edges)}\n ${({ $size, $fill, $relative }) => panelsSizeCss($size, $fill, $relative)}\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $borderColor }) => $borderColor};\n ${({ $flex }) => flexItemCss($flex)}\n ${({ $horizontal, $alignX, $alignY }) => flexAlignCss(!$horizontal, $alignX, $alignY)}\n ${({ $stackMax, $stackedJustify }) =>\n $stackMax ? stackQueryCss($stackMax, $stackedJustify) : ''}\n ${({ $scroll }) => scrollCss($scroll)}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type PanelsProps = ComponentPropsWithoutRef<'div'> &\n BoxSpacingProps &\n SizeProps &\n FlexAlignProps &\n ScrollProps &\n DirectionalBorderProps & {\n /** Lay children out in a row. Default is a column. */\n horizontal?: boolean\n /** Grow in a flex parent (`flex: 1 1 0%`, `min-width` / `min-height` 0). */\n flex?: boolean\n /**\n * Size to the parent. Default (absolute): `inset: 0` on axes without explicit `width` / `height`.\n * `relative`: `height` / `width` 100% instead. Explicit size still wins on that axis.\n * Does not change position (`absolute` unless `relative`).\n * Page: `<Panels fill scroll=\"vertical\">` with inner `Panel minHeight=\"100%\"` (not `fill`).\n * Split: `<Panels horizontal fill>` — `scroll` on the pane, not here.\n * Center in the window: `alignX=\"center\"` `alignY=\"center\"`, no `flex` on children, no `scroll` here.\n */\n fill?: boolean\n /** Stay in document flow (`position: relative`). Default is `absolute`. */\n relative?: boolean\n /** Space between child `Panel`s. Token or CSS length. Theme default is `none`. */\n gap?: SpaceValue\n /**\n * For `horizontal` `Panels` only (ignored on the default column).\n * Become a column when this box is at most this wide (`sm` / `md` / `lg`, or CSS).\n * Measures this `Panels`, not the viewport. `stack=\"md\"` is not Tailwind `md:` (that is and-up).\n * While stacked, children stretch full width (`alignX` centering is ignored).\n * Column packing uses explicit `alignY`, or `start` if `alignY` was omitted (not row `stretch`).\n */\n stack?: StackValue\n /** Border radius token or CSS length. Default `none`. */\n borderRadius?: SpaceValue\n /**\n * Panel surface (`muted` / `base` / `highlighted`), brand (`primary`), status (`danger`), or CSS.\n * Default is `base` border. Does not paint a panel background.\n */\n borderColor?: BorderColorValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n }\n\n/**\n * Outer shell of a view. Direct children must be `Panel` (one is allowed).\n * Default is an absolute column. `relative` stays in flow. `horizontal` is a row (sidebar + main).\n *\n * @example\n * ```tsx\n * <Panels fill scroll='vertical'>\n * <Panel variant='muted' minHeight='100%'>\n * <Heading level={1}>Title</Heading>\n * </Panel>\n * </Panels>\n * ```\n */\nexport function Panels(props: PanelsProps) {\n const { spacing, size, rest } = takeBoxLayout(props)\n const {\n horizontal,\n flex,\n fill,\n relative,\n stack,\n scroll,\n alignX,\n alignY,\n gap,\n css: customCss,\n borderWidth,\n borderX,\n borderY,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderRadius,\n borderColor,\n ...dom\n } = rest\n const { space, breakpoints, defaults, colors, borderWidths, radii, brand, status } =\n usePanelizeTheme()\n const fallbackAlign = defaultFlexAlign(!horizontal)\n\n return (\n <TrackProvider kind={horizontal ? 'row' : 'column'}>\n <StyledPanels\n $horizontal={horizontal}\n $flex={flex}\n $fill={fill}\n $relative={relative}\n $gap={resolveScaleValue(gap, defaults.panels.gap, space)}\n $stackMax={horizontal ? resolveBreakpointValue(stack, breakpoints) : undefined}\n $stackedJustify={stackedMainAlign(alignY)}\n $scroll={scroll}\n $alignX={resolveAlignValue(alignX, fallbackAlign.alignX)}\n $alignY={resolveAlignValue(alignY, fallbackAlign.alignY)}\n $edges={resolveBoxEdges(spacing, defaults.panels, space)}\n $size={resolveBoxSize(size, space)}\n $borderWidth={resolveBorderEdges(\n { borderWidth, borderX, borderY, borderTop, borderRight, borderBottom, borderLeft },\n 'none',\n borderWidths,\n )}\n $borderRadius={resolveScaleValue(borderRadius, 'none', radii)}\n $borderColor={resolveBorderColor(borderColor, 'base', colors, brand, status)}\n $customCss={customCss}\n {...dom}\n />\n </TrackProvider>\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport {\n type BoxEdges,\n boxEdgesCss,\n flexItemCss,\n resolveBorderColor,\n resolveBorderEdges,\n resolveBoxEdges,\n resolveBoxSize,\n type ResolvedBoxSize,\n resolveScaleValue,\n selfAlignCss,\n sizeCss,\n takeBoxLayout,\n type TrackKind,\n useTrackKind,\n} from '~/src/theme/internal'\n\nimport {\n type AlignValue,\n type BorderColorValue,\n type BoxSpacingProps,\n type DirectionalBorderProps,\n type SelfAlignProps,\n type SizeProps,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\ntype StyledRowProps = {\n $flex?: boolean\n $fill?: boolean\n $edges: BoxEdges\n $size: ResolvedBoxSize\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $alignX?: AlignValue\n $alignY?: AlignValue\n $trackKind?: TrackKind\n $customCss?: string\n}\n\nconst StyledRow = styled.div<StyledRowProps>`\n position: relative;\n ${({ $edges }) => boxEdgesCss($edges)}\n ${({ $size, $fill }) => sizeCss($size, $fill)}\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $borderColor }) => $borderColor};\n ${({ $flex }) => flexItemCss($flex, true)}\n ${({ $trackKind, $alignX, $alignY }) => selfAlignCss($trackKind, $alignX, $alignY)}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type RowProps = ComponentPropsWithoutRef<'div'> &\n BoxSpacingProps &\n SizeProps &\n SelfAlignProps &\n DirectionalBorderProps & {\n /**\n * Grow in a flex parent (`flex: 1 1 0%`, `min-width` / `min-height` 0). Until then this box is\n * `flex-shrink: 0` (same as `Panel`).\n */\n flex?: boolean\n /**\n * Size to the parent on axes without a size. Theme `height` is `auto`, so omit `height` → width\n * 100% only. Explicit `width` / `height` win.\n */\n fill?: boolean\n /** Border radius token or CSS length. Default `none`. */\n borderRadius?: SpaceValue\n /**\n * Panel surface (`muted` / `base` / `highlighted`), brand (`primary`), status (`danger`), or CSS.\n * Default is `base` border. `base` is the surface, not a brand slot.\n */\n borderColor?: BorderColorValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n }\n\n/**\n * One band in a `Rows` track. Direct child of `Rows` only. Place content here (`Text`, `Cols`,\n * controls). This box owns `alignX` / `fill` / size — children do not position themselves.\n *\n * @example\n * ```tsx\n * <Rows gap='small'>\n * <Row>\n * <Text>One</Text>\n * </Row>\n * <Row>\n * <Text>Two</Text>\n * </Row>\n * </Rows>\n * ```\n */\nexport function Row(props: RowProps) {\n const { spacing, size, rest } = takeBoxLayout(props)\n const {\n flex,\n fill,\n alignX,\n alignY,\n css: customCss,\n borderWidth,\n borderX,\n borderY,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderRadius,\n borderColor,\n ...dom\n } = rest\n const { colors, space, borderWidths, radii, defaults, brand, status } = usePanelizeTheme()\n const trackKind = useTrackKind()\n\n return (\n <StyledRow\n $flex={flex}\n $fill={fill}\n $edges={resolveBoxEdges(spacing, defaults.row, space)}\n $size={resolveBoxSize(size, space, { height: defaults.row.height })}\n $borderWidth={resolveBorderEdges(\n { borderWidth, borderX, borderY, borderTop, borderRight, borderBottom, borderLeft },\n defaults.row.borderWidth,\n borderWidths,\n )}\n $borderRadius={resolveScaleValue(borderRadius, defaults.row.borderRadius, radii)}\n $borderColor={resolveBorderColor(borderColor, 'base', colors, brand, status)}\n $alignX={alignX}\n $alignY={alignY}\n $trackKind={trackKind}\n $customCss={customCss}\n {...dom}\n />\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport {\n type BoxEdges,\n boxEdgesCss,\n flexAlignCss,\n flexItemCss,\n resolveAlignValue,\n resolveBorderColor,\n resolveBorderEdges,\n resolveBoxEdges,\n resolveBoxSize,\n type ResolvedBoxSize,\n resolveScaleValue,\n sizeCss,\n takeBoxLayout,\n TrackProvider,\n} from '~/src/theme/internal'\n\nimport {\n type AlignValue,\n type BorderColorValue,\n type BoxSpacingProps,\n type DirectionalBorderProps,\n type FlexAlignProps,\n type SizeProps,\n type SpaceValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\ntype StyledRowsProps = {\n $flex?: boolean\n $fill?: boolean\n $gap: string\n $alignX: AlignValue\n $alignY: AlignValue\n $wrap?: boolean\n $edges: BoxEdges\n $size: ResolvedBoxSize\n $borderWidth: string\n $borderRadius: string\n $borderColor: string\n $customCss?: string\n}\n\nconst StyledRows = styled.div<StyledRowsProps>`\n display: flex;\n flex-direction: column;\n position: relative;\n flex-wrap: ${({ $wrap }) => ($wrap ? 'wrap' : 'nowrap')};\n gap: ${({ $gap }) => $gap};\n ${({ $alignX, $alignY }) => flexAlignCss(true, $alignX, $alignY)}\n ${({ $edges }) => boxEdgesCss($edges)}\n ${({ $size, $fill }) => sizeCss($size, $fill)}\n border-width: ${({ $borderWidth }) => $borderWidth};\n border-style: solid;\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border-color: ${({ $borderColor }) => $borderColor};\n ${({ $flex }) => flexItemCss($flex)}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type RowsProps = ComponentPropsWithoutRef<'div'> &\n BoxSpacingProps &\n SizeProps &\n FlexAlignProps &\n DirectionalBorderProps & {\n /** Grow in a flex parent (`flex: 1 1 0%`, `min-width` / `min-height` 0). */\n flex?: boolean\n /** Size to the parent (`height` and `width` 100%). Explicit `width` / `height` win on that axis. */\n fill?: boolean\n /** Space between child `Row`s. Token or CSS length. Theme default is `none`. */\n gap?: SpaceValue\n /**\n * Allow child `Row`s to wrap onto the next line. Default is no wrap.\n * No `stack`: `Rows` is already a column. Use `Cols` or `Panels` `stack` to collapse a row.\n */\n wrap?: boolean\n /** Border radius token or CSS length. Default `none`. */\n borderRadius?: SpaceValue\n /**\n * Panel surface (`muted` / `base` / `highlighted`), brand (`primary`), status (`danger`), or CSS.\n * Default is `base` border. Does not paint a panel background.\n */\n borderColor?: BorderColorValue\n /** Extra CSS appended to this component’s styles. */\n css?: string\n }\n\n/**\n * Column track. Direct children must be `Row`, two or more. Do not wrap a single band — use\n * the parent `Panel` or a `Div`.\n *\n * @example\n * ```tsx\n * <Rows gap='base'>\n * <Row>\n * <Heading level={1}>Title</Heading>\n * </Row>\n * <Row>\n * <Text muted>Caption</Text>\n * </Row>\n * </Rows>\n * ```\n */\nexport function Rows(props: RowsProps) {\n const { spacing, size, rest } = takeBoxLayout(props)\n const {\n flex,\n fill,\n gap,\n alignX,\n alignY,\n wrap,\n css: customCss,\n borderWidth,\n borderX,\n borderY,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderRadius,\n borderColor,\n ...dom\n } = rest\n const { space, defaults, colors, borderWidths, radii, brand, status } = usePanelizeTheme()\n\n return (\n <TrackProvider kind='column'>\n <StyledRows\n $flex={flex}\n $fill={fill}\n $gap={resolveScaleValue(gap, defaults.rows.gap, space)}\n $alignX={resolveAlignValue(alignX, defaults.rows.alignX)}\n $alignY={resolveAlignValue(alignY, defaults.rows.alignY)}\n $wrap={wrap}\n $edges={resolveBoxEdges(spacing, defaults.rows, space)}\n $size={resolveBoxSize(size, space)}\n $borderWidth={resolveBorderEdges(\n { borderWidth, borderX, borderY, borderTop, borderRight, borderBottom, borderLeft },\n 'none',\n borderWidths,\n )}\n $borderRadius={resolveScaleValue(borderRadius, 'none', radii)}\n $borderColor={resolveBorderColor(borderColor, 'base', colors, brand, status)}\n $customCss={customCss}\n {...dom}\n />\n </TrackProvider>\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n type HeadingLevel,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { resolveTextColor } from '~/src/components/text/color'\nimport {\n TextStyleContext,\n textTypographyCss,\n type TextTypographyVars,\n} from '~/src/components/text/typography'\n\ntype HeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n\nconst headingTags: Record<HeadingLevel, HeadingTag> = {\n 1: 'h1',\n 2: 'h2',\n 3: 'h3',\n 4: 'h4',\n 5: 'h5',\n 6: 'h6',\n}\n\nconst StyledHeading = styled.h1<TextTypographyVars>`\n ${textTypographyCss}\n line-height: 1;\n text-box: trim-both cap alphabetic;\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type HeadingProps = ComponentPropsWithoutRef<'h1'> & {\n /**\n * HTML heading level (`h1`–`h6`). Required. Size comes from `defaults.heading.size` unless `size` is set.\n * No UA margin/padding. Line box hugs cap height (`line-height: 1` + `text-box` trim). Gap belongs on a layout parent.\n */\n level: HeadingLevel\n /** Font size token or CSS. Omit uses `defaults.heading.size[level]`. */\n size?: FontSizeValue\n /**\n * Brand (`primary` → `brand.primary.base`), status (`danger` → `status.danger.base`), or raw CSS.\n * Wins over `muted` / `highlighted`. Omit with no flags = that panel’s `text.base`.\n */\n color?: ColorValue\n /** Use the nearest `Panel`’s `text.muted`. Ignored if `color` or `highlighted` is set. */\n muted?: boolean\n /** Use the nearest `Panel`’s `text.highlighted`. Ignored if `color` is set. Wins over `muted`. */\n highlighted?: boolean\n /** Font weight token (`thin` / `base` / `bold` / `heavy`) or CSS (`600`). Theme default `bold`. */\n weight?: FontWeightValue\n /** `fontFamilies` token. Theme default `display`. */\n family?: FontFamilyToken\n /** Italic. Default off. */\n italic?: boolean\n /** Underline. Default off. */\n underlined?: boolean\n /** `text-transform: uppercase`. Default off. */\n uppercase?: boolean\n /** Extra CSS appended to this component’s styles. */\n css?: string\n}\n\n/**\n * Heading (`h1`–`h6`). Required `level`. Omit `size` → theme size for that level. Not a layout\n * shell — put gap on `Rows` / `Cols`.\n *\n * @example\n * ```tsx\n * <Heading level={1} uppercase color='primary'>\n * Panelize\n * </Heading>\n * ```\n */\nexport function Heading(props: HeadingProps) {\n const {\n level,\n size,\n color,\n muted,\n highlighted,\n weight,\n family: familyToken,\n italic,\n underlined,\n uppercase,\n css: customCss,\n ...dom\n } = props\n const { fontSizes, fontWeights, fontFamilies, defaults, brand, status } = usePanelizeTheme()\n const family = fontFamilies[familyToken ?? defaults.heading.family]\n const levelSize = defaults.heading.size[level]\n const resolvedSize =\n size === undefined ? levelSize : resolveScaleValue(size, levelSize, fontSizes)\n const resolvedWeight = resolveScaleValue(weight, defaults.heading.weight, fontWeights)\n const headingLineHeight = 1\n\n return (\n <TextStyleContext.Provider\n value={{\n family,\n size: resolvedSize,\n weight: resolvedWeight,\n lineHeight: headingLineHeight,\n }}\n >\n <StyledHeading\n as={headingTags[level]}\n $family={family}\n $size={resolvedSize}\n $color={resolveTextColor(color, highlighted, muted, brand, status)}\n $weight={resolvedWeight}\n $lineHeight={headingLineHeight}\n $italic={italic}\n $underlined={underlined}\n $uppercase={uppercase}\n $customCss={customCss}\n {...dom}\n />\n </TextStyleContext.Provider>\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { resolveTextColor } from '~/src/components/text/color'\nimport {\n TextStyleContext,\n textTypographyCss,\n type TextTypographyVars,\n useTextStyle,\n} from '~/src/components/text/typography'\n\nconst StyledSpan = styled.span<TextTypographyVars>`\n ${textTypographyCss}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type SpanProps = ComponentPropsWithoutRef<'span'> & {\n /** Font size token (`small`) or CSS. Nested in `Text` with omit = inherit that `Text`. Else theme `base`. */\n size?: FontSizeValue\n /**\n * Brand (`primary` → `brand.primary.base`), status (`danger` → `status.danger.base`), or raw CSS.\n * Wins over `muted` / `highlighted`. Omit = inherit parent color (panel `text.base` if none).\n */\n color?: ColorValue\n /** Use the nearest `Panel`’s `text.muted`. Ignored if `color` or `highlighted` is set. */\n muted?: boolean\n /** Use the nearest `Panel`’s `text.highlighted`. Ignored if `color` is set. Wins over `muted`. */\n highlighted?: boolean\n /** Font weight token or CSS. Nested omit = inherit parent `Text`. Else theme `base` (`400`). */\n weight?: FontWeightValue\n /** `fontFamilies` token. Nested omit = inherit parent `Text`. Else `base`. */\n family?: FontFamilyToken\n /** Italic. Default off (inherits parent `font-style`). */\n italic?: boolean\n /** Underline. Default off. */\n underlined?: boolean\n /** `text-transform: uppercase`. Default off (inherits parent transform). */\n uppercase?: boolean\n /** Extra CSS appended to this component’s styles. */\n css?: string\n}\n\n/**\n * Inline run (`<span>`). Nested in `Text` / `Span`: omit size/weight/`family` → inherit that\n * line; omit color → CSS `inherit`. Not a layout shell.\n *\n * @example\n * ```tsx\n * <Text>\n * Nested <Span weight='bold'>bold</Span>\n * </Text>\n * ```\n */\nexport function Span(props: SpanProps) {\n const {\n size,\n color,\n muted,\n highlighted,\n weight,\n family: familyToken,\n italic,\n underlined,\n uppercase,\n css: customCss,\n ...dom\n } = props\n const { fontSizes, fontWeights, fontFamilies, lineHeight, defaults, brand, status } =\n usePanelizeTheme()\n const parent = useTextStyle()\n const family =\n familyToken !== undefined ? fontFamilies[familyToken] : (parent?.family ?? fontFamilies.base)\n const resolvedSize =\n size !== undefined\n ? resolveScaleValue(size, defaults.text.size, fontSizes)\n : (parent?.size ?? resolveScaleValue(undefined, defaults.text.size, fontSizes))\n const resolvedWeight =\n weight !== undefined\n ? resolveScaleValue(weight, defaults.text.weight, fontWeights)\n : (parent?.weight ?? resolveScaleValue(undefined, defaults.text.weight, fontWeights))\n const resolvedLineHeight = parent?.lineHeight ?? lineHeight\n const resolvedColor =\n color !== undefined || highlighted || muted\n ? resolveTextColor(color, highlighted, muted, brand, status)\n : 'inherit'\n\n return (\n <TextStyleContext.Provider\n value={{\n family,\n size: resolvedSize,\n weight: resolvedWeight,\n lineHeight: resolvedLineHeight,\n }}\n >\n <StyledSpan\n $family={family}\n $size={resolvedSize}\n $color={resolvedColor}\n $weight={resolvedWeight}\n $lineHeight={resolvedLineHeight}\n $italic={italic}\n $underlined={underlined}\n $uppercase={uppercase}\n $customCss={customCss}\n {...dom}\n />\n </TextStyleContext.Provider>\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { styled } from 'styled-components'\n\nimport { resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { resolveTextColor } from '~/src/components/text/color'\nimport {\n TextStyleContext,\n textTypographyCss,\n type TextTypographyVars,\n} from '~/src/components/text/typography'\n\nconst StyledText = styled.p<TextTypographyVars>`\n ${textTypographyCss}\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type TextProps = ComponentPropsWithoutRef<'p'> & {\n /** Font size token (`small`) or CSS. Theme default `base`. */\n size?: FontSizeValue\n /**\n * Brand (`primary` → `brand.primary.base`), status (`danger` → `status.danger.base`), or raw CSS.\n * Wins over `muted` / `highlighted`. Omit with no flags = that panel’s `text.base`.\n */\n color?: ColorValue\n /** Use the nearest `Panel`’s `text.muted`. Ignored if `color` or `highlighted` is set. */\n muted?: boolean\n /** Use the nearest `Panel`’s `text.highlighted`. Ignored if `color` is set. Wins over `muted`. */\n highlighted?: boolean\n /** Font weight token (`thin` / `base` / `bold` / `heavy`) or CSS (`600`). Theme default `base` (`400`). */\n weight?: FontWeightValue\n /** `fontFamilies` token. Omit uses `base`. */\n family?: FontFamilyToken\n /** Italic. Default off. */\n italic?: boolean\n /** Underline. Default off. */\n underlined?: boolean\n /** `text-transform: uppercase`. Default off. */\n uppercase?: boolean\n /** Extra CSS appended to this component’s styles. */\n css?: string\n}\n\n/**\n * Body copy (`<p>`). Use this (or `Heading` / `Span` / `TextLink` / `Label`) for visible writing\n * so it inherits the nearest `Panel` text tokens. Not a layout shell.\n *\n * @example\n * ```tsx\n * <Text muted>A React panel layout library.</Text>\n * ```\n */\nexport function Text(props: TextProps) {\n const {\n size,\n color,\n muted,\n highlighted,\n weight,\n family: familyToken,\n italic,\n underlined,\n uppercase,\n css: customCss,\n ...dom\n } = props\n const { fontSizes, fontWeights, fontFamilies, lineHeight, defaults, brand, status } =\n usePanelizeTheme()\n const family = fontFamilies[familyToken ?? 'base']\n const resolvedSize = resolveScaleValue(size, defaults.text.size, fontSizes)\n const resolvedWeight = resolveScaleValue(weight, defaults.text.weight, fontWeights)\n\n return (\n <TextStyleContext.Provider\n value={{\n family,\n size: resolvedSize,\n weight: resolvedWeight,\n lineHeight,\n }}\n >\n <StyledText\n $family={family}\n $size={resolvedSize}\n $color={resolveTextColor(color, highlighted, muted, brand, status)}\n $weight={resolvedWeight}\n $lineHeight={lineHeight}\n $italic={italic}\n $underlined={underlined}\n $uppercase={uppercase}\n $customCss={customCss}\n {...dom}\n />\n </TextStyleContext.Provider>\n )\n}\n","import { type ComponentPropsWithoutRef } from 'react'\nimport { css, styled } from 'styled-components'\n\nimport { resolveScaleValue } from '~/src/theme/internal'\n\nimport {\n type ColorValue,\n type FontFamilyToken,\n type FontSizeValue,\n type FontWeightValue,\n usePanelizeTheme,\n} from '~/src/theme'\n\nimport { isChromaToken, resolveLinkHover, resolveTextColor } from '~/src/components/text/color'\nimport {\n textTypographyCss,\n type TextTypographyVars,\n useTextStyle,\n} from '~/src/components/text/typography'\n\ntype StyledTextLinkProps = TextTypographyVars & {\n $hover: string\n $active: string\n $hoverUnderline?: boolean\n}\n\nconst linkLineCss = css`\n text-decoration: underline;\n`\n\nconst StyledTextLink = styled.a<StyledTextLinkProps>`\n padding: 0;\n border: 0;\n background: none;\n cursor: pointer;\n text-decoration: none;\n ${textTypographyCss}\n &:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n }\n &:hover {\n color: ${({ $hover }) => $hover};\n ${({ $hoverUnderline, $underlined }) => ($hoverUnderline || $underlined ? linkLineCss : '')}\n }\n &:active {\n color: ${({ $active }) => $active};\n ${({ $hoverUnderline, $underlined }) => ($hoverUnderline || $underlined ? linkLineCss : '')}\n }\n ${({ $customCss }) => $customCss ?? ''}\n`\n\nexport type TextLinkProps = ComponentPropsWithoutRef<'a'> & {\n /** Font size token (`small`) or CSS. Nested in `Text` / `Span` with omit = inherit. Else theme `base`. */\n size?: FontSizeValue\n /**\n * Brand (`primary` → `brand.primary.base`), status (`danger` → `status.danger.base`), or raw CSS.\n * Theme default `primary`. Wins over `muted` / `highlighted`.\n */\n color?: ColorValue\n /** Use the nearest `Panel`’s `text.muted`. Ignored if `color` or `highlighted` is set. */\n muted?: boolean\n /** Use the nearest `Panel`’s `text.highlighted`. Ignored if `color` is set. Wins over `muted`. */\n highlighted?: boolean\n /** Font weight token or CSS. Nested omit = inherit parent `Text` / `Span`. Else theme `base`. */\n weight?: FontWeightValue\n /** `fontFamilies` token. Nested omit = inherit parent `Text` / `Span`. Else `base`. */\n family?: FontFamilyToken\n /** Italic. Default off. */\n italic?: boolean\n /** Underline at rest. Default off. */\n underlined?: boolean\n /** `text-transform: uppercase`. Default off. */\n uppercase?: boolean\n /** Extra CSS appended to this component’s styles. */\n css?: string\n}\n\n/**\n * Inline link (`<a>`). Default chroma `primary`. Nested omit size/weight/`family` → inherit.\n * Not a layout shell.\n *\n * @example\n * ```tsx\n * <Text>\n * See <TextLink href='/docs'>docs</TextLink>\n * </Text>\n * ```\n */\nexport function TextLink(props: TextLinkProps) {\n const {\n size,\n color,\n muted,\n highlighted,\n weight,\n family: familyToken,\n italic,\n underlined,\n uppercase,\n css: customCss,\n ...dom\n } = props\n const { fontSizes, fontWeights, fontFamilies, lineHeight, defaults, brand, status } =\n usePanelizeTheme()\n const parent = useTextStyle()\n const restToken = color ?? (muted || highlighted ? undefined : defaults.textLink.color)\n const hoverToken =\n defaults.textLink.hover === 'inherit'\n ? 'inherit'\n : isChromaToken(color)\n ? color\n : defaults.textLink.hover\n const { hover, active } = resolveLinkHover(restToken, hoverToken, brand, status)\n const family =\n familyToken !== undefined ? fontFamilies[familyToken] : (parent?.family ?? fontFamilies.base)\n const resolvedSize =\n size !== undefined\n ? resolveScaleValue(size, defaults.text.size, fontSizes)\n : (parent?.size ?? resolveScaleValue(undefined, defaults.text.size, fontSizes))\n const resolvedWeight =\n weight !== undefined\n ? resolveScaleValue(weight, defaults.text.weight, fontWeights)\n : (parent?.weight ?? resolveScaleValue(undefined, defaults.text.weight, fontWeights))\n\n return (\n <StyledTextLink\n $family={family}\n $size={resolvedSize}\n $color={resolveTextColor(restToken, highlighted, muted, brand, status)}\n $hover={hover}\n $active={active}\n $weight={resolvedWeight}\n $lineHeight={parent?.lineHeight ?? lineHeight}\n $italic={italic}\n $underlined={underlined}\n $hoverUnderline={defaults.textLink.hoverUnderline}\n $uppercase={uppercase}\n $customCss={customCss}\n {...dom}\n />\n )\n}\n"],"mappings":"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"}
|