@mason-ds/react 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -28,6 +28,7 @@ __export(index_exports, {
28
28
  Divider: () => Divider,
29
29
  Link: () => Link,
30
30
  MasonProvider: () => MasonProvider,
31
+ Radio: () => Radio,
31
32
  Select: () => Select,
32
33
  Spinner: () => Spinner,
33
34
  Stack: () => Stack,
@@ -637,6 +638,21 @@ function fieldErrorStyle() {
637
638
  ...typographyStyle("body.sm")
638
639
  };
639
640
  }
641
+ function visuallyHiddenControlStyle() {
642
+ return {
643
+ position: "absolute",
644
+ width: 1,
645
+ height: 1,
646
+ padding: 0,
647
+ margin: -1,
648
+ overflow: "hidden",
649
+ clip: "rect(0, 0, 0, 0)",
650
+ whiteSpace: "nowrap",
651
+ borderWidth: 0,
652
+ borderStyle: "solid",
653
+ borderColor: "transparent"
654
+ };
655
+ }
640
656
 
641
657
  // src/field.tsx
642
658
  var import_jsx_runtime11 = require("react/jsx-runtime");
@@ -806,6 +822,7 @@ function Select({
806
822
  }
807
823
 
808
824
  // src/checkboxStyles.ts
825
+ var CONTROL_SIZE = "1.125rem";
809
826
  function checkboxRootStyle() {
810
827
  return {
811
828
  display: "flex",
@@ -824,14 +841,19 @@ function checkboxLabelStyle(disabled = false) {
824
841
  ...typographyStyle("body.md")
825
842
  };
826
843
  }
827
- function checkboxControlStyle() {
844
+ function checkboxIndicatorStyle() {
828
845
  return {
829
- width: "1em",
830
- height: "1em",
831
- margin: 0,
832
- marginBlockStart: "0.15em",
833
- accentColor: cssVar("color.action.primary.bg"),
834
- flexShrink: 0
846
+ display: "inline-flex",
847
+ alignItems: "center",
848
+ justifyContent: "center",
849
+ width: CONTROL_SIZE,
850
+ height: CONTROL_SIZE,
851
+ marginBlockStart: "0.2em",
852
+ flexShrink: 0,
853
+ boxSizing: "border-box",
854
+ borderRadius: radiusVar("sm"),
855
+ borderStyle: "solid",
856
+ borderWidth: "1.5px"
835
857
  };
836
858
  }
837
859
 
@@ -876,9 +898,10 @@ function Checkbox({
876
898
  disabled,
877
899
  "aria-invalid": isInvalid || void 0,
878
900
  "aria-describedby": ids.describedBy,
879
- style: checkboxControlStyle()
901
+ style: visuallyHiddenControlStyle()
880
902
  }
881
903
  ),
904
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { "data-mason-slot": "indicator", "aria-hidden": "true", style: checkboxIndicatorStyle() }),
882
905
  label ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { "data-mason-slot": "label-text", children: label }) : null
883
906
  ]
884
907
  }
@@ -906,6 +929,115 @@ function Checkbox({
906
929
  }
907
930
  );
908
931
  }
932
+
933
+ // src/radioStyles.ts
934
+ var CONTROL_SIZE2 = "1.125rem";
935
+ function radioRootStyle() {
936
+ return {
937
+ display: "flex",
938
+ flexDirection: "column",
939
+ gap: spacingVar("stack", "sm"),
940
+ minWidth: 0
941
+ };
942
+ }
943
+ function radioLabelStyle(disabled = false) {
944
+ return {
945
+ display: "inline-flex",
946
+ alignItems: "flex-start",
947
+ gap: spacingVar("inline", "sm"),
948
+ cursor: disabled ? "not-allowed" : "pointer",
949
+ color: disabled ? cssVar("color.text.disabled") : cssVar("color.text.primary"),
950
+ ...typographyStyle("body.md")
951
+ };
952
+ }
953
+ function radioIndicatorStyle() {
954
+ return {
955
+ display: "inline-flex",
956
+ alignItems: "center",
957
+ justifyContent: "center",
958
+ width: CONTROL_SIZE2,
959
+ height: CONTROL_SIZE2,
960
+ marginBlockStart: "0.2em",
961
+ flexShrink: 0,
962
+ boxSizing: "border-box",
963
+ borderRadius: "999px",
964
+ borderStyle: "solid",
965
+ borderWidth: "1.5px"
966
+ };
967
+ }
968
+
969
+ // src/Radio.tsx
970
+ var import_jsx_runtime15 = require("react/jsx-runtime");
971
+ function Radio({
972
+ label,
973
+ description,
974
+ error,
975
+ invalid,
976
+ id,
977
+ disabled = false,
978
+ className,
979
+ style,
980
+ ...rest
981
+ }) {
982
+ const ids = useFieldIds({ id, description, error });
983
+ const isInvalid = invalid ?? Boolean(error);
984
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
985
+ "div",
986
+ {
987
+ "data-mason-component": "radio",
988
+ "data-invalid": isInvalid || void 0,
989
+ "data-disabled": disabled || void 0,
990
+ className: mergeClassName(className),
991
+ style: { ...radioRootStyle(), ...style },
992
+ children: [
993
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
994
+ "label",
995
+ {
996
+ "data-mason-slot": "label",
997
+ htmlFor: ids.controlId,
998
+ style: radioLabelStyle(disabled),
999
+ children: [
1000
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1001
+ "input",
1002
+ {
1003
+ ...rest,
1004
+ type: "radio",
1005
+ id: ids.controlId,
1006
+ "data-mason-slot": "control",
1007
+ disabled,
1008
+ "aria-invalid": isInvalid || void 0,
1009
+ "aria-describedby": ids.describedBy,
1010
+ style: visuallyHiddenControlStyle()
1011
+ }
1012
+ ),
1013
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { "data-mason-slot": "indicator", "aria-hidden": "true", style: radioIndicatorStyle() }),
1014
+ label ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { "data-mason-slot": "label-text", children: label }) : null
1015
+ ]
1016
+ }
1017
+ ),
1018
+ description ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1019
+ "p",
1020
+ {
1021
+ "data-mason-slot": "description",
1022
+ id: ids.descriptionId,
1023
+ style: fieldDescriptionStyle(),
1024
+ children: description
1025
+ }
1026
+ ) : null,
1027
+ error ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1028
+ "p",
1029
+ {
1030
+ "data-mason-slot": "error",
1031
+ id: ids.errorId,
1032
+ role: "alert",
1033
+ style: fieldErrorStyle(),
1034
+ children: error
1035
+ }
1036
+ ) : null
1037
+ ]
1038
+ }
1039
+ );
1040
+ }
909
1041
  // Annotate the CommonJS export names for ESM import in node:
910
1042
  0 && (module.exports = {
911
1043
  Badge,
@@ -916,6 +1048,7 @@ function Checkbox({
916
1048
  Divider,
917
1049
  Link,
918
1050
  MasonProvider,
1051
+ Radio,
919
1052
  Select,
920
1053
  Spinner,
921
1054
  Stack,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/provider.tsx","../src/styles.ts","../src/textStyles.ts","../src/Text.tsx","../src/stackStyles.ts","../src/Stack.tsx","../src/cardStyles.ts","../src/Card.tsx","../src/dividerStyles.ts","../src/Divider.tsx","../src/linkStyles.ts","../src/Link.tsx","../src/spinnerStyles.ts","../src/Spinner.tsx","../src/buttonStyles.ts","../src/Button.tsx","../src/badgeStyles.ts","../src/Badge.tsx","../src/calloutStyles.ts","../src/Callout.tsx","../src/field.tsx","../src/fieldStyles.ts","../src/TextField.tsx","../src/Select.tsx","../src/checkboxStyles.ts","../src/Checkbox.tsx"],"sourcesContent":["export { MasonProvider, type MasonProviderProps, type MasonTheme } from './provider.js'\n\n// Token-derived prop unions shared by the components\nexport type {\n FeedbackTone,\n Level,\n RadiusLevel,\n ShadowLevel,\n TextTone,\n TextVariant,\n} from './styles.js'\n\n// Primitives\nexport { Text, type TextAlign, type TextElement, type TextProps } from './Text.js'\nexport {\n Stack,\n type StackAlign,\n type StackDirection,\n type StackJustify,\n type StackProps,\n} from './Stack.js'\nexport { Card, type CardProps, type CardTone } from './Card.js'\nexport { Divider, type DividerOrientation, type DividerProps } from './Divider.js'\nexport { Link, type LinkProps, type LinkTone, type LinkUnderline } from './Link.js'\n\n// Actions & status\nexport { Button, type ButtonProps, type ButtonSize, type ButtonVariant } from './Button.js'\nexport { Spinner, type SpinnerProps, type SpinnerSize } from './Spinner.js'\nexport { Badge, type BadgeProps, type BadgeSize, type BadgeTone } from './Badge.js'\nexport { Callout, type CalloutProps } from './Callout.js'\n\n// Form controls\nexport { TextField, type FieldSize, type TextFieldProps } from './TextField.js'\nexport { Select, type SelectProps } from './Select.js'\nexport { Checkbox, type CheckboxProps } from './Checkbox.js'\n","import type { ReactNode } from 'react'\n\nexport type MasonTheme = 'light' | 'dark' | 'system'\n\nexport interface MasonProviderProps {\n children: ReactNode\n theme?: MasonTheme\n}\n\n/** Root provider for mason-ds React apps. */\nexport function MasonProvider({ children, theme = 'light' }: MasonProviderProps) {\n return <div data-mason-provider data-mason-theme={theme}>{children}</div>\n}\n","import { getSemanticCssVar, type SemanticTokenPath } from '@mason-ds/tokens'\n\n/**\n * Prop unions are derived from the semantic token paths, so adding or removing\n * a token role changes the component API instead of silently drifting from it.\n */\ntype FontRoleOf<Path> = Path extends `font.${infer Role}.family` ? Role : never\ntype TextToneOf<Path> = Path extends `color.text.${infer Tone}` ? Tone : never\ntype FeedbackToneOf<Path> = Path extends `color.feedback.${infer Tone}.bg` ? Tone : never\ntype LevelOf<Path> = Path extends `spacing.inset.${infer Level}` ? Level : never\ntype RadiusOf<Path> = Path extends `radius.${infer Level}` ? Level : never\ntype ShadowOf<Path> = Path extends `shadow.${infer Level}` ? Level : never\n\n/** Typography roles, e.g. `heading.h2`, `body.md`, `code.md`. */\nexport type TextVariant = FontRoleOf<SemanticTokenPath>\n/** Text color roles, e.g. `primary`, `secondary`, `link`, `danger`. */\nexport type TextTone = TextToneOf<SemanticTokenPath>\n/** Status roles shared by Badge / Callout. */\nexport type FeedbackTone = FeedbackToneOf<SemanticTokenPath>\n/** Spacing steps — sm / md / lg. */\nexport type Level = LevelOf<SemanticTokenPath>\nexport type RadiusLevel = RadiusOf<SemanticTokenPath>\nexport type ShadowLevel = ShadowOf<SemanticTokenPath>\n\n/** Reference a semantic token as `var(--mason-*)`. */\nexport function cssVar(path: SemanticTokenPath): string {\n return `var(${getSemanticCssVar(path)})`\n}\n\nexport function spacingVar(axis: 'inset' | 'stack' | 'inline', level: Level): string {\n return cssVar(`spacing.${axis}.${level}`)\n}\n\nexport function radiusVar(level: RadiusLevel): string {\n return cssVar(`radius.${level}`)\n}\n\nexport function shadowVar(level: ShadowLevel): string {\n return cssVar(`shadow.${level}`)\n}\n\nexport function textColorVar(tone: TextTone): string {\n return cssVar(`color.text.${tone}`)\n}\n\nexport function typographyStyle(variant: TextVariant): {\n fontFamily: string\n fontSize: string\n fontWeight: string\n lineHeight: string\n letterSpacing: string\n} {\n return {\n fontFamily: cssVar(`font.${variant}.family`),\n fontSize: cssVar(`font.${variant}.size`),\n fontWeight: cssVar(`font.${variant}.weight`),\n lineHeight: cssVar(`font.${variant}.lineHeight`),\n letterSpacing: cssVar(`font.${variant}.letterSpacing`),\n }\n}\n\nexport function mergeClassName(...parts: (string | undefined)[]): string | undefined {\n const merged = parts.filter(Boolean).join(' ')\n return merged.length > 0 ? merged : undefined\n}\n","import type { CSSProperties } from 'react'\nimport { textColorVar, typographyStyle, type TextTone, type TextVariant } from './styles.js'\n\nexport type TextAlign = 'start' | 'center' | 'end'\n\nexport function textStyle({\n variant = 'body.md',\n tone = 'primary',\n align,\n truncate = false,\n}: {\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\n}): CSSProperties {\n return {\n margin: 0,\n color: textColorVar(tone),\n ...typographyStyle(variant),\n ...(align ? { textAlign: align } : null),\n ...(truncate\n ? { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }\n : null),\n }\n}\n","import type { ElementType, HTMLAttributes } from 'react'\nimport { mergeClassName, type TextTone, type TextVariant } from './styles.js'\nimport { textStyle, type TextAlign } from './textStyles.js'\n\nexport type { TextAlign } from './textStyles.js'\n\nexport type TextElement =\n | 'p'\n | 'span'\n | 'div'\n | 'label'\n | 'strong'\n | 'code'\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n\nexport interface TextProps extends HTMLAttributes<HTMLElement> {\n as?: TextElement\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\n}\n\n/**\n * Typography primitive. `variant` covers every font role in the token set,\n * `tone` every `color.text.*` role.\n *\n * Pick `as` for semantics (a heading role does not imply an `<h2>`).\n */\nexport function Text({\n as = 'p',\n variant = 'body.md',\n tone = 'primary',\n align,\n truncate = false,\n className,\n style,\n children,\n ...rest\n}: TextProps) {\n const Component: ElementType = as\n\n return (\n <Component\n data-mason-component=\"text\"\n data-variant={variant}\n className={mergeClassName(className)}\n style={{ ...textStyle({ variant, tone, align, truncate }), ...style }}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { spacingVar, type Level } from './styles.js'\n\nexport type StackDirection = 'row' | 'column'\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline'\nexport type StackJustify = 'start' | 'center' | 'end' | 'between'\n\nconst FLEX_ALIGN = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n} as const satisfies Record<StackAlign, string>\n\nconst FLEX_JUSTIFY = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n} as const satisfies Record<StackJustify, string>\n\n/** Row gaps come from `spacing.inline`, column gaps from `spacing.stack`. */\nexport function stackStyle({\n direction = 'column',\n gap = 'md',\n align,\n justify,\n wrap = false,\n inline = false,\n}: {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}): CSSProperties {\n return {\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: spacingVar(direction === 'row' ? 'inline' : 'stack', gap),\n flexWrap: wrap ? 'wrap' : 'nowrap',\n minWidth: 0,\n ...(align ? { alignItems: FLEX_ALIGN[align] } : null),\n ...(justify ? { justifyContent: FLEX_JUSTIFY[justify] } : null),\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName, type Level } from './styles.js'\nimport {\n stackStyle,\n type StackAlign,\n type StackDirection,\n type StackJustify,\n} from './stackStyles.js'\n\nexport type {\n StackAlign,\n StackDirection,\n StackJustify,\n} from './stackStyles.js'\n\nexport interface StackProps extends HTMLAttributes<HTMLDivElement> {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}\n\n/** Layout primitive — flex row/column with token gaps. */\nexport function Stack({\n direction = 'column',\n gap = 'md',\n align,\n justify,\n wrap = false,\n inline = false,\n className,\n style,\n children,\n ...rest\n}: StackProps) {\n return (\n <div\n data-mason-component=\"stack\"\n data-direction={direction}\n className={mergeClassName(className)}\n style={{\n ...stackStyle({ direction, gap, align, justify, wrap, inline }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n shadowVar,\n spacingVar,\n type Level,\n type RadiusLevel,\n type ShadowLevel,\n} from './styles.js'\n\nexport type CardTone = 'surface' | 'canvas' | 'elevated'\n\nconst TONE_BG = {\n surface: 'color.bg.surface',\n canvas: 'color.bg.canvas',\n elevated: 'color.bg.elevated',\n} as const\n\nexport function cardStyle({\n padding = 'md',\n elevation = 'sm',\n radius = 'md',\n tone = 'surface',\n bordered = true,\n}: {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}): CSSProperties {\n return {\n display: 'block',\n padding: spacingVar('inset', padding),\n backgroundColor: cssVar(TONE_BG[tone]),\n color: cssVar('color.text.primary'),\n border: bordered ? `1px solid ${cssVar('color.border.subtle')}` : 'none',\n borderRadius: radiusVar(radius),\n boxShadow: shadowVar(elevation),\n boxSizing: 'border-box',\n minWidth: 0,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport {\n mergeClassName,\n type Level,\n type RadiusLevel,\n type ShadowLevel,\n} from './styles.js'\nimport { cardStyle, type CardTone } from './cardStyles.js'\n\nexport type { CardTone } from './cardStyles.js'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}\n\n/** Surface primitive — background, border, radius and shadow from tokens. */\nexport function Card({\n padding = 'md',\n elevation = 'sm',\n radius = 'md',\n tone = 'surface',\n bordered = true,\n className,\n style,\n children,\n ...rest\n}: CardProps) {\n return (\n <div\n data-mason-component=\"card\"\n data-tone={tone}\n className={mergeClassName(className)}\n style={{\n ...cardStyle({ padding, elevation, radius, tone, bordered }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar } from './styles.js'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport function dividerStyle(orientation: DividerOrientation = 'horizontal'): CSSProperties {\n const line = `1px solid ${cssVar('color.border.subtle')}`\n\n if (orientation === 'vertical') {\n return {\n alignSelf: 'stretch',\n width: 0,\n minHeight: '1em',\n margin: 0,\n border: 'none',\n borderInlineStart: line,\n }\n }\n\n return {\n width: '100%',\n height: 0,\n margin: 0,\n border: 'none',\n borderBlockStart: line,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { dividerStyle, type DividerOrientation } from './dividerStyles.js'\n\nexport type { DividerOrientation } from './dividerStyles.js'\n\nexport interface DividerProps extends HTMLAttributes<HTMLHRElement> {\n orientation?: DividerOrientation\n}\n\n/** Separator line. `<hr>` already carries the separator role. */\nexport function Divider({\n orientation = 'horizontal',\n className,\n style,\n ...rest\n}: DividerProps) {\n return (\n <hr\n data-mason-component=\"divider\"\n data-orientation={orientation}\n aria-orientation={orientation === 'vertical' ? 'vertical' : undefined}\n className={mergeClassName(className)}\n style={{ ...dividerStyle(orientation), ...style }}\n {...rest}\n />\n )\n}\n","import type { CSSProperties } from 'react'\nimport { radiusVar, textColorVar } from './styles.js'\n\nexport type LinkTone = 'link' | 'inherit'\nexport type LinkUnderline = 'hover' | 'always' | 'none'\n\n/** Link inherits typography from its container so it can sit inside Text. */\nexport function linkStyle({\n tone = 'link',\n underline = 'hover',\n}: {\n tone?: LinkTone\n underline?: LinkUnderline\n}): CSSProperties {\n return {\n color: tone === 'inherit' ? 'inherit' : textColorVar('link'),\n textDecoration: underline === 'always' ? 'underline' : 'none',\n textUnderlineOffset: '0.15em',\n borderRadius: radiusVar('sm'),\n cursor: 'pointer',\n }\n}\n","import type { AnchorHTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { linkStyle, type LinkTone, type LinkUnderline } from './linkStyles.js'\n\nexport type { LinkTone, LinkUnderline } from './linkStyles.js'\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n tone?: LinkTone\n underline?: LinkUnderline\n /** Adds `target=\"_blank\"` and a safe `rel`. */\n external?: boolean\n}\n\n/**\n * Navigational anchor. Typography is inherited, so it composes inside Text.\n *\n * For client-side routing, pass the router's component via `asChild`-style\n * composition on the consumer side (`<Link href>` stays a plain `<a>`).\n */\nexport function Link({\n tone = 'link',\n underline = 'hover',\n external = false,\n className,\n style,\n children,\n ...rest\n}: LinkProps) {\n const externalProps = external\n ? { target: '_blank', rel: 'noreferrer noopener' }\n : null\n\n return (\n <a\n data-mason-component=\"link\"\n data-tone={tone}\n data-underline={underline}\n className={mergeClassName(className)}\n style={{ ...linkStyle({ tone, underline }), ...style }}\n {...externalProps}\n {...rest}\n >\n {children}\n </a>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar } from './styles.js'\n\n/** `inherit` follows the surrounding font size — used inside Button. */\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | 'inherit'\n\nconst SIZE_DIMENSION = {\n sm: cssVar('font.body.sm.size'),\n md: cssVar('font.body.md.size'),\n lg: cssVar('font.display.lg.size'),\n inherit: '1em',\n} as const satisfies Record<SpinnerSize, string>\n\nexport function spinnerStyle(size: SpinnerSize = 'md'): CSSProperties {\n const dimension = SIZE_DIMENSION[size]\n\n return {\n width: dimension,\n height: dimension,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n display: 'inline-block',\n flexShrink: 0,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { spinnerStyle, type SpinnerSize } from './spinnerStyles.js'\n\nexport type { SpinnerSize } from './spinnerStyles.js'\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: SpinnerSize\n /** Announced while loading. Without it the spinner is `aria-hidden`. */\n label?: string\n}\n\n/** Indeterminate loading indicator. The rotation lives in `tokens.css`. */\nexport function Spinner({\n size = 'md',\n label,\n className,\n style,\n ...rest\n}: SpinnerProps) {\n return (\n <span\n data-mason-component=\"spinner\"\n data-size={size}\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={mergeClassName(className)}\n style={{ ...spinnerStyle(size), ...style }}\n {...rest}\n />\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar, typographyStyle, type TextVariant } from './styles.js'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger'\nexport type ButtonSize = 'sm' | 'md' | 'lg'\n\ntype ActionColorPath =\n | `color.action.${ButtonVariant | 'disabled'}.${'bg' | 'text' | 'border'}`\n\nfunction actionColors(variant: ButtonVariant | 'disabled'): {\n bg: ActionColorPath\n text: ActionColorPath\n border: ActionColorPath\n} {\n return {\n bg: `color.action.${variant}.bg`,\n text: `color.action.${variant}.text`,\n border: `color.action.${variant}.border`,\n }\n}\n\n/**\n * Size ladder — padding / radius / type. Height comes from content, not min-height.\n */\nconst sizeStyles = {\n sm: {\n paddingBlock: cssVar('spacing.inset.sm'),\n paddingInline: cssVar('spacing.inset.md'),\n gap: cssVar('spacing.inline.sm'),\n radius: cssVar('radius.sm'),\n font: 'label.sm' as TextVariant,\n },\n md: {\n paddingBlock: cssVar('spacing.inset.md'),\n paddingInline: cssVar('spacing.inset.lg'),\n gap: cssVar('spacing.inline.md'),\n radius: cssVar('radius.md'),\n font: 'label.md' as TextVariant,\n },\n lg: {\n paddingBlock: cssVar('spacing.inset.lg'),\n paddingInline: `calc(${cssVar('spacing.inset.lg')} + ${cssVar('spacing.inset.md')})`,\n gap: cssVar('spacing.inline.md'),\n radius: cssVar('radius.lg'),\n font: 'label.lg' as TextVariant,\n },\n} as const satisfies Record<\n ButtonSize,\n {\n paddingBlock: string\n paddingInline: string\n gap: string\n radius: string\n font: TextVariant\n }\n>\n\nexport function buttonStyle({\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n}: {\n variant?: ButtonVariant\n size?: ButtonSize\n disabled?: boolean\n loading?: boolean\n}): CSSProperties {\n const inactive = disabled || loading\n const colors = actionColors(inactive ? 'disabled' : variant)\n const sizing = sizeStyles[size]\n\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: sizing.gap,\n paddingBlock: sizing.paddingBlock,\n paddingInline: sizing.paddingInline,\n margin: 0,\n backgroundColor: cssVar(colors.bg),\n color: cssVar(colors.text),\n border: `1px solid ${cssVar(colors.border)}`,\n borderRadius: sizing.radius,\n boxSizing: 'border-box',\n ...typographyStyle(sizing.font),\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n }\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { Spinner } from './Spinner.js'\nimport { buttonStyle, type ButtonSize, type ButtonVariant } from './buttonStyles.js'\n\nexport type { ButtonSize, ButtonVariant } from './buttonStyles.js'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n leadingSlot?: ReactNode\n trailingSlot?: ReactNode\n}\n\n/**\n * Primary action component. Native `<button>` with token-backed styles.\n *\n * Icon-only usage requires an `aria-label`.\n */\nexport function Button({\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n leadingSlot,\n trailingSlot,\n className,\n style,\n children,\n type = 'button',\n ...rest\n}: ButtonProps) {\n const isDisabled = disabled || loading\n\n return (\n <button\n type={type}\n data-mason-component=\"button\"\n data-variant={variant}\n data-size={size}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n className={mergeClassName(className)}\n style={{\n ...buttonStyle({ variant, size, disabled, loading }),\n ...style,\n }}\n {...rest}\n >\n {loading ? (\n <Spinner size=\"inherit\" data-mason-slot=\"spinner\" />\n ) : leadingSlot ? (\n <span data-mason-slot=\"leading\">{leadingSlot}</span>\n ) : null}\n {children ? <span data-mason-slot=\"label\">{children}</span> : null}\n {trailingSlot && !loading ? (\n <span data-mason-slot=\"trailing\">{trailingSlot}</span>\n ) : null}\n </button>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport type BadgeTone = FeedbackTone | 'neutral'\nexport type BadgeSize = 'sm' | 'md'\n\nexport function badgeStyle({\n tone = 'neutral',\n size = 'sm',\n}: {\n tone?: BadgeTone\n size?: BadgeSize\n}): CSSProperties {\n const colors =\n tone === 'neutral'\n ? {\n bg: cssVar('color.bg.canvas'),\n text: cssVar('color.text.secondary'),\n border: cssVar('color.border.subtle'),\n }\n : {\n bg: cssVar(`color.feedback.${tone}.bg`),\n text: cssVar(`color.feedback.${tone}.text`),\n border: cssVar(`color.feedback.${tone}.border`),\n }\n\n return {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacingVar('inline', 'sm'),\n paddingBlock: '0.125em',\n paddingInline: spacingVar('inset', 'sm'),\n backgroundColor: colors.bg,\n color: colors.text,\n border: `1px solid ${colors.border}`,\n borderRadius: radiusVar('full'),\n ...typographyStyle(size === 'sm' ? 'label.sm' : 'label.md'),\n whiteSpace: 'nowrap',\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { badgeStyle, type BadgeSize, type BadgeTone } from './badgeStyles.js'\n\nexport type { BadgeSize, BadgeTone } from './badgeStyles.js'\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n tone?: BadgeTone\n size?: BadgeSize\n}\n\n/**\n * Compact status chip. Colour carries no meaning on its own — keep the label\n * readable (`활성`, not just a green dot).\n */\nexport function Badge({\n tone = 'neutral',\n size = 'sm',\n className,\n style,\n children,\n ...rest\n}: BadgeProps) {\n return (\n <span\n data-mason-component=\"badge\"\n data-tone={tone}\n data-size={size}\n className={mergeClassName(className)}\n style={{ ...badgeStyle({ tone, size }), ...style }}\n {...rest}\n >\n {children}\n </span>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport function calloutStyle(tone: FeedbackTone = 'info'): CSSProperties {\n return {\n display: 'flex',\n gap: spacingVar('inline', 'md'),\n padding: spacingVar('inset', 'md'),\n backgroundColor: cssVar(`color.feedback.${tone}.bg`),\n color: cssVar(`color.feedback.${tone}.text`),\n border: `1px solid ${cssVar(`color.feedback.${tone}.border`)}`,\n borderRadius: radiusVar('md'),\n boxSizing: 'border-box',\n ...typographyStyle('body.md'),\n }\n}\n\nexport function calloutContentStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function calloutTitleStyle(): CSSProperties {\n return { margin: 0, ...typographyStyle('label.md') }\n}\n\nexport function calloutBodyStyle(): CSSProperties {\n return { margin: 0, ...typographyStyle('body.sm') }\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { mergeClassName, type FeedbackTone } from './styles.js'\nimport {\n calloutBodyStyle,\n calloutContentStyle,\n calloutStyle,\n calloutTitleStyle,\n} from './calloutStyles.js'\n\n/** `title` is the heading slot, so the native tooltip attribute is not available. */\nexport interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n tone?: FeedbackTone\n title?: ReactNode\n iconSlot?: ReactNode\n}\n\n/**\n * Inline message block for page-level feedback.\n *\n * It is static content by default — for something that appears in response to\n * an action, pass `role=\"status\"` (or `\"alert\"` when it must interrupt).\n */\nexport function Callout({\n tone = 'info',\n title,\n iconSlot,\n className,\n style,\n children,\n ...rest\n}: CalloutProps) {\n return (\n <div\n data-mason-component=\"callout\"\n data-tone={tone}\n className={mergeClassName(className)}\n style={{ ...calloutStyle(tone), ...style }}\n {...rest}\n >\n {iconSlot ? (\n <span data-mason-slot=\"icon\" aria-hidden=\"true\">\n {iconSlot}\n </span>\n ) : null}\n <div data-mason-slot=\"content\" style={calloutContentStyle()}>\n {title ? (\n <p data-mason-slot=\"title\" style={calloutTitleStyle()}>\n {title}\n </p>\n ) : null}\n {children ? (\n <div data-mason-slot=\"body\" style={calloutBodyStyle()}>\n {children}\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import { useId, type CSSProperties, type ReactNode } from 'react'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n fieldLabelStyle,\n fieldRootStyle,\n type FieldSize,\n} from './fieldStyles.js'\n\nexport interface FieldIds {\n controlId: string\n descriptionId: string\n errorId: string\n /** `aria-describedby` value, or undefined when there is nothing to describe. */\n describedBy: string | undefined\n}\n\n/** Stable ids wiring a control to its label, description and error. */\nexport function useFieldIds({\n id,\n description,\n error,\n}: {\n id?: string\n description?: ReactNode\n error?: ReactNode\n}): FieldIds {\n const generated = useId()\n const controlId = id ?? `mason-field-${generated}`\n const descriptionId = `${controlId}-description`\n const errorId = `${controlId}-error`\n const describedBy =\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n\n return { controlId, descriptionId, errorId, describedBy }\n}\n\nexport interface FieldFrameProps {\n /** `data-mason-component` value of the wrapper, e.g. `text-field`. */\n component: string\n ids: FieldIds\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n className?: string\n style?: CSSProperties\n children: ReactNode\n}\n\n/**\n * Shared label / description / error chrome for form controls.\n * Internal — consumers use TextField, Select or Checkbox.\n */\nexport function FieldFrame({\n component,\n ids,\n label,\n description,\n error,\n size = 'md',\n invalid = false,\n disabled = false,\n className,\n style,\n children,\n}: FieldFrameProps) {\n return (\n <div\n data-mason-component={component}\n data-size={size}\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...fieldRootStyle(), ...style }}\n >\n {label ? (\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={fieldLabelStyle(size)}\n >\n {label}\n </label>\n ) : null}\n {children}\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type Level,\n type TextVariant,\n} from './styles.js'\n\n/** Field sizes reuse the spacing ladder — sm / md / lg. */\nexport type FieldSize = Level\n\nconst CONTROL_FONT = {\n sm: 'body.sm',\n md: 'body.md',\n lg: 'body.lg',\n} as const satisfies Record<FieldSize, TextVariant>\n\nconst LABEL_FONT = {\n sm: 'label.sm',\n md: 'label.md',\n lg: 'label.lg',\n} as const satisfies Record<FieldSize, TextVariant>\n\nconst CONTROL_PADDING_BLOCK = { sm: 'sm', md: 'sm', lg: 'md' } as const satisfies Record<\n FieldSize,\n Level\n>\n\nconst CONTROL_PADDING_INLINE = { sm: 'sm', md: 'md', lg: 'md' } as const satisfies Record<\n FieldSize,\n Level\n>\n\nexport function fieldRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function fieldLabelStyle(size: FieldSize = 'md'): CSSProperties {\n return {\n color: cssVar('color.text.primary'),\n ...typographyStyle(LABEL_FONT[size]),\n }\n}\n\nexport function fieldControlStyle({\n size = 'md',\n invalid = false,\n disabled = false,\n}: {\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n}): CSSProperties {\n return {\n width: '100%',\n boxSizing: 'border-box',\n margin: 0,\n paddingBlock: spacingVar('inset', CONTROL_PADDING_BLOCK[size]),\n paddingInline: spacingVar('inset', CONTROL_PADDING_INLINE[size]),\n backgroundColor: disabled\n ? cssVar('color.action.disabled.bg')\n : cssVar('color.field.bg'),\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.field.text'),\n border: `1px solid ${cssVar(\n invalid ? 'color.field.borderInvalid' : 'color.field.border',\n )}`,\n borderRadius: radiusVar('md'),\n ...typographyStyle(CONTROL_FONT[size]),\n }\n}\n\nexport function fieldDescriptionStyle(): CSSProperties {\n return {\n margin: 0,\n color: cssVar('color.text.secondary'),\n ...typographyStyle('body.sm'),\n }\n}\n\nexport function fieldErrorStyle(): CSSProperties {\n return {\n margin: 0,\n color: cssVar('color.text.danger'),\n ...typographyStyle('body.sm'),\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { FieldFrame, useFieldIds } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport type { FieldSize } from './fieldStyles.js'\n\nexport interface TextFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: ReactNode\n description?: ReactNode\n /** Present error text switches the field to its invalid styling. */\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n}\n\n/**\n * Labelled text input. `className` / `style` apply to the wrapper; every other\n * prop goes to the native `<input>`.\n */\nexport function TextField({\n label,\n description,\n error,\n size = 'md',\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: TextFieldProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <FieldFrame\n component=\"text-field\"\n ids={ids}\n label={label}\n description={description}\n error={error}\n size={size}\n invalid={isInvalid}\n disabled={disabled}\n className={className}\n style={style}\n >\n <input\n {...rest}\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={fieldControlStyle({ size, invalid: isInvalid, disabled })}\n />\n </FieldFrame>\n )\n}\n","import type { ReactNode, SelectHTMLAttributes } from 'react'\nimport { FieldFrame, useFieldIds } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport interface SelectProps\n extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n /** Rendered as a leading empty `<option>`. */\n placeholder?: string\n}\n\n/**\n * Labelled native `<select>`. Children are the `<option>` elements, so the\n * browser's own popup and keyboard behaviour is preserved.\n */\nexport function Select({\n label,\n description,\n error,\n size = 'md',\n invalid,\n placeholder,\n id,\n disabled = false,\n className,\n style,\n children,\n ...rest\n}: SelectProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <FieldFrame\n component=\"select\"\n ids={ids}\n label={label}\n description={description}\n error={error}\n size={size}\n invalid={isInvalid}\n disabled={disabled}\n className={className}\n style={style}\n >\n <select\n {...rest}\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={fieldControlStyle({ size, invalid: isInvalid, disabled })}\n >\n {placeholder ? <option value=\"\">{placeholder}</option> : null}\n {children}\n </select>\n </FieldFrame>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar, spacingVar, typographyStyle } from './styles.js'\n\nexport function checkboxRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function checkboxLabelStyle(disabled = false): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: spacingVar('inline', 'sm'),\n cursor: disabled ? 'not-allowed' : 'pointer',\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.text.primary'),\n ...typographyStyle('body.md'),\n }\n}\n\nexport function checkboxControlStyle(): CSSProperties {\n return {\n width: '1em',\n height: '1em',\n margin: 0,\n marginBlockStart: '0.15em',\n accentColor: cssVar('color.action.primary.bg'),\n flexShrink: 0,\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { useFieldIds } from './field.js'\nimport { mergeClassName } from './styles.js'\nimport { fieldDescriptionStyle, fieldErrorStyle } from './fieldStyles.js'\nimport {\n checkboxControlStyle,\n checkboxLabelStyle,\n checkboxRootStyle,\n} from './checkboxStyles.js'\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n invalid?: boolean\n}\n\n/**\n * Native checkbox with a token-backed label row.\n * The check mark uses `accent-color`, so platform behaviour is untouched.\n */\nexport function Checkbox({\n label,\n description,\n error,\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: CheckboxProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <div\n data-mason-component=\"checkbox\"\n data-invalid={isInvalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...checkboxRootStyle(), ...style }}\n >\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={checkboxLabelStyle(disabled)}\n >\n <input\n {...rest}\n type=\"checkbox\"\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={checkboxControlStyle()}\n />\n {label ? <span data-mason-slot=\"label-text\">{label}</span> : null}\n </label>\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/provider.tsx","../src/styles.ts","../src/textStyles.ts","../src/Text.tsx","../src/stackStyles.ts","../src/Stack.tsx","../src/cardStyles.ts","../src/Card.tsx","../src/dividerStyles.ts","../src/Divider.tsx","../src/linkStyles.ts","../src/Link.tsx","../src/spinnerStyles.ts","../src/Spinner.tsx","../src/buttonStyles.ts","../src/Button.tsx","../src/badgeStyles.ts","../src/Badge.tsx","../src/calloutStyles.ts","../src/Callout.tsx","../src/field.tsx","../src/fieldStyles.ts","../src/TextField.tsx","../src/Select.tsx","../src/checkboxStyles.ts","../src/Checkbox.tsx","../src/radioStyles.ts","../src/Radio.tsx"],"sourcesContent":["export { MasonProvider, type MasonProviderProps, type MasonTheme } from './provider.js'\n\n// Token-derived prop unions shared by the components\nexport type {\n FeedbackTone,\n Level,\n RadiusLevel,\n ShadowLevel,\n TextTone,\n TextVariant,\n} from './styles.js'\n\n// Primitives\nexport { Text, type TextAlign, type TextElement, type TextProps } from './Text.js'\nexport {\n Stack,\n type StackAlign,\n type StackDirection,\n type StackJustify,\n type StackProps,\n} from './Stack.js'\nexport { Card, type CardProps, type CardTone } from './Card.js'\nexport { Divider, type DividerOrientation, type DividerProps } from './Divider.js'\nexport { Link, type LinkProps, type LinkTone, type LinkUnderline } from './Link.js'\n\n// Actions & status\nexport { Button, type ButtonProps, type ButtonSize, type ButtonVariant } from './Button.js'\nexport { Spinner, type SpinnerProps, type SpinnerSize } from './Spinner.js'\nexport { Badge, type BadgeProps, type BadgeSize, type BadgeTone } from './Badge.js'\nexport { Callout, type CalloutProps } from './Callout.js'\n\n// Form controls\nexport { TextField, type FieldSize, type TextFieldProps } from './TextField.js'\nexport { Select, type SelectProps } from './Select.js'\nexport { Checkbox, type CheckboxProps } from './Checkbox.js'\nexport { Radio, type RadioProps } from './Radio.js'\n","import type { ReactNode } from 'react'\n\nexport type MasonTheme = 'light' | 'dark' | 'system'\n\nexport interface MasonProviderProps {\n children: ReactNode\n theme?: MasonTheme\n}\n\n/** Root provider for mason-ds React apps. */\nexport function MasonProvider({ children, theme = 'light' }: MasonProviderProps) {\n return <div data-mason-provider data-mason-theme={theme}>{children}</div>\n}\n","import { getSemanticCssVar, type SemanticTokenPath } from '@mason-ds/tokens'\n\n/**\n * Prop unions are derived from the semantic token paths, so adding or removing\n * a token role changes the component API instead of silently drifting from it.\n */\ntype FontRoleOf<Path> = Path extends `font.${infer Role}.family` ? Role : never\ntype TextToneOf<Path> = Path extends `color.text.${infer Tone}` ? Tone : never\ntype FeedbackToneOf<Path> = Path extends `color.feedback.${infer Tone}.bg` ? Tone : never\ntype LevelOf<Path> = Path extends `spacing.inset.${infer Level}` ? Level : never\ntype RadiusOf<Path> = Path extends `radius.${infer Level}` ? Level : never\ntype ShadowOf<Path> = Path extends `shadow.${infer Level}` ? Level : never\n\n/** Typography roles, e.g. `heading.h2`, `body.md`, `code.md`. */\nexport type TextVariant = FontRoleOf<SemanticTokenPath>\n/** Text color roles, e.g. `primary`, `secondary`, `link`, `danger`. */\nexport type TextTone = TextToneOf<SemanticTokenPath>\n/** Status roles shared by Badge / Callout. */\nexport type FeedbackTone = FeedbackToneOf<SemanticTokenPath>\n/** Spacing steps — sm / md / lg. */\nexport type Level = LevelOf<SemanticTokenPath>\nexport type RadiusLevel = RadiusOf<SemanticTokenPath>\nexport type ShadowLevel = ShadowOf<SemanticTokenPath>\n\n/** Reference a semantic token as `var(--mason-*)`. */\nexport function cssVar(path: SemanticTokenPath): string {\n return `var(${getSemanticCssVar(path)})`\n}\n\nexport function spacingVar(axis: 'inset' | 'stack' | 'inline', level: Level): string {\n return cssVar(`spacing.${axis}.${level}`)\n}\n\nexport function radiusVar(level: RadiusLevel): string {\n return cssVar(`radius.${level}`)\n}\n\nexport function shadowVar(level: ShadowLevel): string {\n return cssVar(`shadow.${level}`)\n}\n\nexport function textColorVar(tone: TextTone): string {\n return cssVar(`color.text.${tone}`)\n}\n\nexport function typographyStyle(variant: TextVariant): {\n fontFamily: string\n fontSize: string\n fontWeight: string\n lineHeight: string\n letterSpacing: string\n} {\n return {\n fontFamily: cssVar(`font.${variant}.family`),\n fontSize: cssVar(`font.${variant}.size`),\n fontWeight: cssVar(`font.${variant}.weight`),\n lineHeight: cssVar(`font.${variant}.lineHeight`),\n letterSpacing: cssVar(`font.${variant}.letterSpacing`),\n }\n}\n\nexport function mergeClassName(...parts: (string | undefined)[]): string | undefined {\n const merged = parts.filter(Boolean).join(' ')\n return merged.length > 0 ? merged : undefined\n}\n","import type { CSSProperties } from 'react'\nimport { textColorVar, typographyStyle, type TextTone, type TextVariant } from './styles.js'\n\nexport type TextAlign = 'start' | 'center' | 'end'\n\nexport function textStyle({\n variant = 'body.md',\n tone = 'primary',\n align,\n truncate = false,\n}: {\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\n}): CSSProperties {\n return {\n margin: 0,\n color: textColorVar(tone),\n ...typographyStyle(variant),\n ...(align ? { textAlign: align } : null),\n ...(truncate\n ? { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }\n : null),\n }\n}\n","import type { ElementType, HTMLAttributes } from 'react'\nimport { mergeClassName, type TextTone, type TextVariant } from './styles.js'\nimport { textStyle, type TextAlign } from './textStyles.js'\n\nexport type { TextAlign } from './textStyles.js'\n\nexport type TextElement =\n | 'p'\n | 'span'\n | 'div'\n | 'label'\n | 'strong'\n | 'code'\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n\nexport interface TextProps extends HTMLAttributes<HTMLElement> {\n as?: TextElement\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\n}\n\n/**\n * Typography primitive. `variant` covers every font role in the token set,\n * `tone` every `color.text.*` role.\n *\n * Pick `as` for semantics (a heading role does not imply an `<h2>`).\n */\nexport function Text({\n as = 'p',\n variant = 'body.md',\n tone = 'primary',\n align,\n truncate = false,\n className,\n style,\n children,\n ...rest\n}: TextProps) {\n const Component: ElementType = as\n\n return (\n <Component\n data-mason-component=\"text\"\n data-variant={variant}\n className={mergeClassName(className)}\n style={{ ...textStyle({ variant, tone, align, truncate }), ...style }}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { spacingVar, type Level } from './styles.js'\n\nexport type StackDirection = 'row' | 'column'\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline'\nexport type StackJustify = 'start' | 'center' | 'end' | 'between'\n\nconst FLEX_ALIGN = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n} as const satisfies Record<StackAlign, string>\n\nconst FLEX_JUSTIFY = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n} as const satisfies Record<StackJustify, string>\n\n/** Row gaps come from `spacing.inline`, column gaps from `spacing.stack`. */\nexport function stackStyle({\n direction = 'column',\n gap = 'md',\n align,\n justify,\n wrap = false,\n inline = false,\n}: {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}): CSSProperties {\n return {\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: spacingVar(direction === 'row' ? 'inline' : 'stack', gap),\n flexWrap: wrap ? 'wrap' : 'nowrap',\n minWidth: 0,\n ...(align ? { alignItems: FLEX_ALIGN[align] } : null),\n ...(justify ? { justifyContent: FLEX_JUSTIFY[justify] } : null),\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName, type Level } from './styles.js'\nimport {\n stackStyle,\n type StackAlign,\n type StackDirection,\n type StackJustify,\n} from './stackStyles.js'\n\nexport type {\n StackAlign,\n StackDirection,\n StackJustify,\n} from './stackStyles.js'\n\nexport interface StackProps extends HTMLAttributes<HTMLDivElement> {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}\n\n/** Layout primitive — flex row/column with token gaps. */\nexport function Stack({\n direction = 'column',\n gap = 'md',\n align,\n justify,\n wrap = false,\n inline = false,\n className,\n style,\n children,\n ...rest\n}: StackProps) {\n return (\n <div\n data-mason-component=\"stack\"\n data-direction={direction}\n className={mergeClassName(className)}\n style={{\n ...stackStyle({ direction, gap, align, justify, wrap, inline }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n shadowVar,\n spacingVar,\n type Level,\n type RadiusLevel,\n type ShadowLevel,\n} from './styles.js'\n\nexport type CardTone = 'surface' | 'canvas' | 'elevated'\n\nconst TONE_BG = {\n surface: 'color.bg.surface',\n canvas: 'color.bg.canvas',\n elevated: 'color.bg.elevated',\n} as const\n\nexport function cardStyle({\n padding = 'md',\n elevation = 'sm',\n radius = 'md',\n tone = 'surface',\n bordered = true,\n}: {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}): CSSProperties {\n return {\n display: 'block',\n padding: spacingVar('inset', padding),\n backgroundColor: cssVar(TONE_BG[tone]),\n color: cssVar('color.text.primary'),\n border: bordered ? `1px solid ${cssVar('color.border.subtle')}` : 'none',\n borderRadius: radiusVar(radius),\n boxShadow: shadowVar(elevation),\n boxSizing: 'border-box',\n minWidth: 0,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport {\n mergeClassName,\n type Level,\n type RadiusLevel,\n type ShadowLevel,\n} from './styles.js'\nimport { cardStyle, type CardTone } from './cardStyles.js'\n\nexport type { CardTone } from './cardStyles.js'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}\n\n/** Surface primitive — background, border, radius and shadow from tokens. */\nexport function Card({\n padding = 'md',\n elevation = 'sm',\n radius = 'md',\n tone = 'surface',\n bordered = true,\n className,\n style,\n children,\n ...rest\n}: CardProps) {\n return (\n <div\n data-mason-component=\"card\"\n data-tone={tone}\n className={mergeClassName(className)}\n style={{\n ...cardStyle({ padding, elevation, radius, tone, bordered }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar } from './styles.js'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport function dividerStyle(orientation: DividerOrientation = 'horizontal'): CSSProperties {\n const line = `1px solid ${cssVar('color.border.subtle')}`\n\n if (orientation === 'vertical') {\n return {\n alignSelf: 'stretch',\n width: 0,\n minHeight: '1em',\n margin: 0,\n border: 'none',\n borderInlineStart: line,\n }\n }\n\n return {\n width: '100%',\n height: 0,\n margin: 0,\n border: 'none',\n borderBlockStart: line,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { dividerStyle, type DividerOrientation } from './dividerStyles.js'\n\nexport type { DividerOrientation } from './dividerStyles.js'\n\nexport interface DividerProps extends HTMLAttributes<HTMLHRElement> {\n orientation?: DividerOrientation\n}\n\n/** Separator line. `<hr>` already carries the separator role. */\nexport function Divider({\n orientation = 'horizontal',\n className,\n style,\n ...rest\n}: DividerProps) {\n return (\n <hr\n data-mason-component=\"divider\"\n data-orientation={orientation}\n aria-orientation={orientation === 'vertical' ? 'vertical' : undefined}\n className={mergeClassName(className)}\n style={{ ...dividerStyle(orientation), ...style }}\n {...rest}\n />\n )\n}\n","import type { CSSProperties } from 'react'\nimport { radiusVar, textColorVar } from './styles.js'\n\nexport type LinkTone = 'link' | 'inherit'\nexport type LinkUnderline = 'hover' | 'always' | 'none'\n\n/** Link inherits typography from its container so it can sit inside Text. */\nexport function linkStyle({\n tone = 'link',\n underline = 'hover',\n}: {\n tone?: LinkTone\n underline?: LinkUnderline\n}): CSSProperties {\n return {\n color: tone === 'inherit' ? 'inherit' : textColorVar('link'),\n textDecoration: underline === 'always' ? 'underline' : 'none',\n textUnderlineOffset: '0.15em',\n borderRadius: radiusVar('sm'),\n cursor: 'pointer',\n }\n}\n","import type { AnchorHTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { linkStyle, type LinkTone, type LinkUnderline } from './linkStyles.js'\n\nexport type { LinkTone, LinkUnderline } from './linkStyles.js'\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n tone?: LinkTone\n underline?: LinkUnderline\n /** Adds `target=\"_blank\"` and a safe `rel`. */\n external?: boolean\n}\n\n/**\n * Navigational anchor. Typography is inherited, so it composes inside Text.\n *\n * For client-side routing, pass the router's component via `asChild`-style\n * composition on the consumer side (`<Link href>` stays a plain `<a>`).\n */\nexport function Link({\n tone = 'link',\n underline = 'hover',\n external = false,\n className,\n style,\n children,\n ...rest\n}: LinkProps) {\n const externalProps = external\n ? { target: '_blank', rel: 'noreferrer noopener' }\n : null\n\n return (\n <a\n data-mason-component=\"link\"\n data-tone={tone}\n data-underline={underline}\n className={mergeClassName(className)}\n style={{ ...linkStyle({ tone, underline }), ...style }}\n {...externalProps}\n {...rest}\n >\n {children}\n </a>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar } from './styles.js'\n\n/** `inherit` follows the surrounding font size — used inside Button. */\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | 'inherit'\n\nconst SIZE_DIMENSION = {\n sm: cssVar('font.body.sm.size'),\n md: cssVar('font.body.md.size'),\n lg: cssVar('font.display.lg.size'),\n inherit: '1em',\n} as const satisfies Record<SpinnerSize, string>\n\nexport function spinnerStyle(size: SpinnerSize = 'md'): CSSProperties {\n const dimension = SIZE_DIMENSION[size]\n\n return {\n width: dimension,\n height: dimension,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n display: 'inline-block',\n flexShrink: 0,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { spinnerStyle, type SpinnerSize } from './spinnerStyles.js'\n\nexport type { SpinnerSize } from './spinnerStyles.js'\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: SpinnerSize\n /** Announced while loading. Without it the spinner is `aria-hidden`. */\n label?: string\n}\n\n/** Indeterminate loading indicator. The rotation lives in `tokens.css`. */\nexport function Spinner({\n size = 'md',\n label,\n className,\n style,\n ...rest\n}: SpinnerProps) {\n return (\n <span\n data-mason-component=\"spinner\"\n data-size={size}\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={mergeClassName(className)}\n style={{ ...spinnerStyle(size), ...style }}\n {...rest}\n />\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar, typographyStyle, type TextVariant } from './styles.js'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger'\nexport type ButtonSize = 'sm' | 'md' | 'lg'\n\ntype ActionColorPath =\n | `color.action.${ButtonVariant | 'disabled'}.${'bg' | 'text' | 'border'}`\n\nfunction actionColors(variant: ButtonVariant | 'disabled'): {\n bg: ActionColorPath\n text: ActionColorPath\n border: ActionColorPath\n} {\n return {\n bg: `color.action.${variant}.bg`,\n text: `color.action.${variant}.text`,\n border: `color.action.${variant}.border`,\n }\n}\n\n/**\n * Size ladder — padding / radius / type. Height comes from content, not min-height.\n */\nconst sizeStyles = {\n sm: {\n paddingBlock: cssVar('spacing.inset.sm'),\n paddingInline: cssVar('spacing.inset.md'),\n gap: cssVar('spacing.inline.sm'),\n radius: cssVar('radius.sm'),\n font: 'label.sm' as TextVariant,\n },\n md: {\n paddingBlock: cssVar('spacing.inset.md'),\n paddingInline: cssVar('spacing.inset.lg'),\n gap: cssVar('spacing.inline.md'),\n radius: cssVar('radius.md'),\n font: 'label.md' as TextVariant,\n },\n lg: {\n paddingBlock: cssVar('spacing.inset.lg'),\n paddingInline: `calc(${cssVar('spacing.inset.lg')} + ${cssVar('spacing.inset.md')})`,\n gap: cssVar('spacing.inline.md'),\n radius: cssVar('radius.lg'),\n font: 'label.lg' as TextVariant,\n },\n} as const satisfies Record<\n ButtonSize,\n {\n paddingBlock: string\n paddingInline: string\n gap: string\n radius: string\n font: TextVariant\n }\n>\n\nexport function buttonStyle({\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n}: {\n variant?: ButtonVariant\n size?: ButtonSize\n disabled?: boolean\n loading?: boolean\n}): CSSProperties {\n const inactive = disabled || loading\n const colors = actionColors(inactive ? 'disabled' : variant)\n const sizing = sizeStyles[size]\n\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: sizing.gap,\n paddingBlock: sizing.paddingBlock,\n paddingInline: sizing.paddingInline,\n margin: 0,\n backgroundColor: cssVar(colors.bg),\n color: cssVar(colors.text),\n border: `1px solid ${cssVar(colors.border)}`,\n borderRadius: sizing.radius,\n boxSizing: 'border-box',\n ...typographyStyle(sizing.font),\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n }\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { Spinner } from './Spinner.js'\nimport { buttonStyle, type ButtonSize, type ButtonVariant } from './buttonStyles.js'\n\nexport type { ButtonSize, ButtonVariant } from './buttonStyles.js'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n leadingSlot?: ReactNode\n trailingSlot?: ReactNode\n}\n\n/**\n * Primary action component. Native `<button>` with token-backed styles.\n *\n * Icon-only usage requires an `aria-label`.\n */\nexport function Button({\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n leadingSlot,\n trailingSlot,\n className,\n style,\n children,\n type = 'button',\n ...rest\n}: ButtonProps) {\n const isDisabled = disabled || loading\n\n return (\n <button\n type={type}\n data-mason-component=\"button\"\n data-variant={variant}\n data-size={size}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n className={mergeClassName(className)}\n style={{\n ...buttonStyle({ variant, size, disabled, loading }),\n ...style,\n }}\n {...rest}\n >\n {loading ? (\n <Spinner size=\"inherit\" data-mason-slot=\"spinner\" />\n ) : leadingSlot ? (\n <span data-mason-slot=\"leading\">{leadingSlot}</span>\n ) : null}\n {children ? <span data-mason-slot=\"label\">{children}</span> : null}\n {trailingSlot && !loading ? (\n <span data-mason-slot=\"trailing\">{trailingSlot}</span>\n ) : null}\n </button>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport type BadgeTone = FeedbackTone | 'neutral'\nexport type BadgeSize = 'sm' | 'md'\n\nexport function badgeStyle({\n tone = 'neutral',\n size = 'sm',\n}: {\n tone?: BadgeTone\n size?: BadgeSize\n}): CSSProperties {\n const colors =\n tone === 'neutral'\n ? {\n bg: cssVar('color.bg.canvas'),\n text: cssVar('color.text.secondary'),\n border: cssVar('color.border.subtle'),\n }\n : {\n bg: cssVar(`color.feedback.${tone}.bg`),\n text: cssVar(`color.feedback.${tone}.text`),\n border: cssVar(`color.feedback.${tone}.border`),\n }\n\n return {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacingVar('inline', 'sm'),\n paddingBlock: '0.125em',\n paddingInline: spacingVar('inset', 'sm'),\n backgroundColor: colors.bg,\n color: colors.text,\n border: `1px solid ${colors.border}`,\n borderRadius: radiusVar('full'),\n ...typographyStyle(size === 'sm' ? 'label.sm' : 'label.md'),\n whiteSpace: 'nowrap',\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { badgeStyle, type BadgeSize, type BadgeTone } from './badgeStyles.js'\n\nexport type { BadgeSize, BadgeTone } from './badgeStyles.js'\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n tone?: BadgeTone\n size?: BadgeSize\n}\n\n/**\n * Compact status chip. Colour carries no meaning on its own — keep the label\n * readable (`활성`, not just a green dot).\n */\nexport function Badge({\n tone = 'neutral',\n size = 'sm',\n className,\n style,\n children,\n ...rest\n}: BadgeProps) {\n return (\n <span\n data-mason-component=\"badge\"\n data-tone={tone}\n data-size={size}\n className={mergeClassName(className)}\n style={{ ...badgeStyle({ tone, size }), ...style }}\n {...rest}\n >\n {children}\n </span>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport function calloutStyle(tone: FeedbackTone = 'info'): CSSProperties {\n return {\n display: 'flex',\n gap: spacingVar('inline', 'md'),\n padding: spacingVar('inset', 'md'),\n backgroundColor: cssVar(`color.feedback.${tone}.bg`),\n color: cssVar(`color.feedback.${tone}.text`),\n border: `1px solid ${cssVar(`color.feedback.${tone}.border`)}`,\n borderRadius: radiusVar('md'),\n boxSizing: 'border-box',\n ...typographyStyle('body.md'),\n }\n}\n\nexport function calloutContentStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function calloutTitleStyle(): CSSProperties {\n return { margin: 0, ...typographyStyle('label.md') }\n}\n\nexport function calloutBodyStyle(): CSSProperties {\n return { margin: 0, ...typographyStyle('body.sm') }\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { mergeClassName, type FeedbackTone } from './styles.js'\nimport {\n calloutBodyStyle,\n calloutContentStyle,\n calloutStyle,\n calloutTitleStyle,\n} from './calloutStyles.js'\n\n/** `title` is the heading slot, so the native tooltip attribute is not available. */\nexport interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n tone?: FeedbackTone\n title?: ReactNode\n iconSlot?: ReactNode\n}\n\n/**\n * Inline message block for page-level feedback.\n *\n * It is static content by default — for something that appears in response to\n * an action, pass `role=\"status\"` (or `\"alert\"` when it must interrupt).\n */\nexport function Callout({\n tone = 'info',\n title,\n iconSlot,\n className,\n style,\n children,\n ...rest\n}: CalloutProps) {\n return (\n <div\n data-mason-component=\"callout\"\n data-tone={tone}\n className={mergeClassName(className)}\n style={{ ...calloutStyle(tone), ...style }}\n {...rest}\n >\n {iconSlot ? (\n <span data-mason-slot=\"icon\" aria-hidden=\"true\">\n {iconSlot}\n </span>\n ) : null}\n <div data-mason-slot=\"content\" style={calloutContentStyle()}>\n {title ? (\n <p data-mason-slot=\"title\" style={calloutTitleStyle()}>\n {title}\n </p>\n ) : null}\n {children ? (\n <div data-mason-slot=\"body\" style={calloutBodyStyle()}>\n {children}\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import { useId, type CSSProperties, type ReactNode } from 'react'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n fieldLabelStyle,\n fieldRootStyle,\n type FieldSize,\n} from './fieldStyles.js'\n\nexport interface FieldIds {\n controlId: string\n descriptionId: string\n errorId: string\n /** `aria-describedby` value, or undefined when there is nothing to describe. */\n describedBy: string | undefined\n}\n\n/** Stable ids wiring a control to its label, description and error. */\nexport function useFieldIds({\n id,\n description,\n error,\n}: {\n id?: string\n description?: ReactNode\n error?: ReactNode\n}): FieldIds {\n const generated = useId()\n const controlId = id ?? `mason-field-${generated}`\n const descriptionId = `${controlId}-description`\n const errorId = `${controlId}-error`\n const describedBy =\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n\n return { controlId, descriptionId, errorId, describedBy }\n}\n\nexport interface FieldFrameProps {\n /** `data-mason-component` value of the wrapper, e.g. `text-field`. */\n component: string\n ids: FieldIds\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n className?: string\n style?: CSSProperties\n children: ReactNode\n}\n\n/**\n * Shared label / description / error chrome for form controls.\n * Internal — consumers use TextField, Select or Checkbox.\n */\nexport function FieldFrame({\n component,\n ids,\n label,\n description,\n error,\n size = 'md',\n invalid = false,\n disabled = false,\n className,\n style,\n children,\n}: FieldFrameProps) {\n return (\n <div\n data-mason-component={component}\n data-size={size}\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...fieldRootStyle(), ...style }}\n >\n {label ? (\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={fieldLabelStyle(size)}\n >\n {label}\n </label>\n ) : null}\n {children}\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type Level,\n type TextVariant,\n} from './styles.js'\n\n/** Field sizes reuse the spacing ladder — sm / md / lg. */\nexport type FieldSize = Level\n\nconst CONTROL_FONT = {\n sm: 'body.sm',\n md: 'body.md',\n lg: 'body.lg',\n} as const satisfies Record<FieldSize, TextVariant>\n\nconst LABEL_FONT = {\n sm: 'label.sm',\n md: 'label.md',\n lg: 'label.lg',\n} as const satisfies Record<FieldSize, TextVariant>\n\nconst CONTROL_PADDING_BLOCK = { sm: 'sm', md: 'sm', lg: 'md' } as const satisfies Record<\n FieldSize,\n Level\n>\n\nconst CONTROL_PADDING_INLINE = { sm: 'sm', md: 'md', lg: 'md' } as const satisfies Record<\n FieldSize,\n Level\n>\n\nexport function fieldRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function fieldLabelStyle(size: FieldSize = 'md'): CSSProperties {\n return {\n color: cssVar('color.text.primary'),\n ...typographyStyle(LABEL_FONT[size]),\n }\n}\n\nexport function fieldControlStyle({\n size = 'md',\n invalid = false,\n disabled = false,\n}: {\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n}): CSSProperties {\n return {\n width: '100%',\n boxSizing: 'border-box',\n margin: 0,\n paddingBlock: spacingVar('inset', CONTROL_PADDING_BLOCK[size]),\n paddingInline: spacingVar('inset', CONTROL_PADDING_INLINE[size]),\n backgroundColor: disabled\n ? cssVar('color.action.disabled.bg')\n : cssVar('color.field.bg'),\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.field.text'),\n border: `1px solid ${cssVar(\n invalid ? 'color.field.borderInvalid' : 'color.field.border',\n )}`,\n borderRadius: radiusVar('md'),\n ...typographyStyle(CONTROL_FONT[size]),\n }\n}\n\nexport function fieldDescriptionStyle(): CSSProperties {\n return {\n margin: 0,\n color: cssVar('color.text.secondary'),\n ...typographyStyle('body.sm'),\n }\n}\n\nexport function fieldErrorStyle(): CSSProperties {\n return {\n margin: 0,\n color: cssVar('color.text.danger'),\n ...typographyStyle('body.sm'),\n }\n}\n\n/** Native input kept for a11y; the visible chrome is a sibling indicator. */\nexport function visuallyHiddenControlStyle(): CSSProperties {\n return {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n borderWidth: 0,\n borderStyle: 'solid',\n borderColor: 'transparent',\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { FieldFrame, useFieldIds } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport type { FieldSize } from './fieldStyles.js'\n\nexport interface TextFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: ReactNode\n description?: ReactNode\n /** Present error text switches the field to its invalid styling. */\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n}\n\n/**\n * Labelled text input. `className` / `style` apply to the wrapper; every other\n * prop goes to the native `<input>`.\n */\nexport function TextField({\n label,\n description,\n error,\n size = 'md',\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: TextFieldProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <FieldFrame\n component=\"text-field\"\n ids={ids}\n label={label}\n description={description}\n error={error}\n size={size}\n invalid={isInvalid}\n disabled={disabled}\n className={className}\n style={style}\n >\n <input\n {...rest}\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={fieldControlStyle({ size, invalid: isInvalid, disabled })}\n />\n </FieldFrame>\n )\n}\n","import type { ReactNode, SelectHTMLAttributes } from 'react'\nimport { FieldFrame, useFieldIds } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport interface SelectProps\n extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n /** Rendered as a leading empty `<option>`. */\n placeholder?: string\n}\n\n/**\n * Labelled native `<select>`. Children are the `<option>` elements, so the\n * browser's own popup and keyboard behaviour is preserved.\n */\nexport function Select({\n label,\n description,\n error,\n size = 'md',\n invalid,\n placeholder,\n id,\n disabled = false,\n className,\n style,\n children,\n ...rest\n}: SelectProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <FieldFrame\n component=\"select\"\n ids={ids}\n label={label}\n description={description}\n error={error}\n size={size}\n invalid={isInvalid}\n disabled={disabled}\n className={className}\n style={style}\n >\n <select\n {...rest}\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={fieldControlStyle({ size, invalid: isInvalid, disabled })}\n >\n {placeholder ? <option value=\"\">{placeholder}</option> : null}\n {children}\n </select>\n </FieldFrame>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { radiusVar, spacingVar, typographyStyle, cssVar } from './styles.js'\n\nconst CONTROL_SIZE = '1.125rem'\n\nexport function checkboxRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function checkboxLabelStyle(disabled = false): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: spacingVar('inline', 'sm'),\n cursor: disabled ? 'not-allowed' : 'pointer',\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.text.primary'),\n ...typographyStyle('body.md'),\n }\n}\n\n/** Geometry only — colors / check mark live in foundationsCss. */\nexport function checkboxIndicatorStyle(): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: CONTROL_SIZE,\n height: CONTROL_SIZE,\n marginBlockStart: '0.2em',\n flexShrink: 0,\n boxSizing: 'border-box',\n borderRadius: radiusVar('sm'),\n borderStyle: 'solid',\n borderWidth: '1.5px',\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { useFieldIds } from './field.js'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n visuallyHiddenControlStyle,\n} from './fieldStyles.js'\nimport {\n checkboxIndicatorStyle,\n checkboxLabelStyle,\n checkboxRootStyle,\n} from './checkboxStyles.js'\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n invalid?: boolean\n}\n\n/**\n * Token-backed checkbox with a drawn indicator.\n * A visually hidden native input keeps form / keyboard behaviour.\n * The check mark is painted with `::after` in foundationsCss.\n */\nexport function Checkbox({\n label,\n description,\n error,\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: CheckboxProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <div\n data-mason-component=\"checkbox\"\n data-invalid={isInvalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...checkboxRootStyle(), ...style }}\n >\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={checkboxLabelStyle(disabled)}\n >\n <input\n {...rest}\n type=\"checkbox\"\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={visuallyHiddenControlStyle()}\n />\n <span data-mason-slot=\"indicator\" aria-hidden=\"true\" style={checkboxIndicatorStyle()} />\n {label ? <span data-mason-slot=\"label-text\">{label}</span> : null}\n </label>\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar, spacingVar, typographyStyle } from './styles.js'\n\nconst CONTROL_SIZE = '1.125rem'\n\nexport function radioRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function radioLabelStyle(disabled = false): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: spacingVar('inline', 'sm'),\n cursor: disabled ? 'not-allowed' : 'pointer',\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.text.primary'),\n ...typographyStyle('body.md'),\n }\n}\n\n/** Geometry only — colors / selected dot live in foundationsCss. */\nexport function radioIndicatorStyle(): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: CONTROL_SIZE,\n height: CONTROL_SIZE,\n marginBlockStart: '0.2em',\n flexShrink: 0,\n boxSizing: 'border-box',\n borderRadius: '999px',\n borderStyle: 'solid',\n borderWidth: '1.5px',\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { useFieldIds } from './field.js'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n visuallyHiddenControlStyle,\n} from './fieldStyles.js'\nimport {\n radioIndicatorStyle,\n radioLabelStyle,\n radioRootStyle,\n} from './radioStyles.js'\n\nexport interface RadioProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n invalid?: boolean\n}\n\n/**\n * Token-backed radio with a drawn indicator.\n * A visually hidden native input keeps form / keyboard behaviour.\n * The selected dot is painted with `::after` in foundationsCss.\n */\nexport function Radio({\n label,\n description,\n error,\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: RadioProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <div\n data-mason-component=\"radio\"\n data-invalid={isInvalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...radioRootStyle(), ...style }}\n >\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={radioLabelStyle(disabled)}\n >\n <input\n {...rest}\n type=\"radio\"\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={visuallyHiddenControlStyle()}\n />\n <span data-mason-slot=\"indicator\" aria-hidden=\"true\" style={radioIndicatorStyle()} />\n {label ? <span data-mason-slot=\"label-text\">{label}</span> : null}\n </label>\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACWS;AADF,SAAS,cAAc,EAAE,UAAU,QAAQ,QAAQ,GAAuB;AAC/E,SAAO,4CAAC,SAAI,uBAAmB,MAAC,oBAAkB,OAAQ,UAAS;AACrE;;;ACZA,oBAA0D;AAyBnD,SAAS,OAAO,MAAiC;AACtD,SAAO,WAAO,iCAAkB,IAAI,CAAC;AACvC;AAEO,SAAS,WAAW,MAAoC,OAAsB;AACnF,SAAO,OAAO,WAAW,IAAI,IAAI,KAAK,EAAE;AAC1C;AAEO,SAAS,UAAU,OAA4B;AACpD,SAAO,OAAO,UAAU,KAAK,EAAE;AACjC;AAEO,SAAS,UAAU,OAA4B;AACpD,SAAO,OAAO,UAAU,KAAK,EAAE;AACjC;AAEO,SAAS,aAAa,MAAwB;AACnD,SAAO,OAAO,cAAc,IAAI,EAAE;AACpC;AAEO,SAAS,gBAAgB,SAM9B;AACA,SAAO;AAAA,IACL,YAAY,OAAO,QAAQ,OAAO,SAAS;AAAA,IAC3C,UAAU,OAAO,QAAQ,OAAO,OAAO;AAAA,IACvC,YAAY,OAAO,QAAQ,OAAO,SAAS;AAAA,IAC3C,YAAY,OAAO,QAAQ,OAAO,aAAa;AAAA,IAC/C,eAAe,OAAO,QAAQ,OAAO,gBAAgB;AAAA,EACvD;AACF;AAEO,SAAS,kBAAkB,OAAmD;AACnF,QAAM,SAAS,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG;AAC7C,SAAO,OAAO,SAAS,IAAI,SAAS;AACtC;;;AC3DO,SAAS,UAAU;AAAA,EACxB,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA,WAAW;AACb,GAKkB;AAChB,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,OAAO,aAAa,IAAI;AAAA,IACxB,GAAG,gBAAgB,OAAO;AAAA,IAC1B,GAAI,QAAQ,EAAE,WAAW,MAAM,IAAI;AAAA,IACnC,GAAI,WACA,EAAE,UAAU,UAAU,cAAc,YAAY,YAAY,SAAS,IACrE;AAAA,EACN;AACF;;;ACqBI,IAAAA,sBAAA;AAdG,SAAS,KAAK;AAAA,EACnB,KAAK;AAAA,EACL,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAc;AACZ,QAAM,YAAyB;AAE/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,gBAAc;AAAA,MACd,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO,EAAE,GAAG,UAAU,EAAE,SAAS,MAAM,OAAO,SAAS,CAAC,GAAG,GAAG,MAAM;AAAA,MACnE,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ACjDA,IAAM,aAAa;AAAA,EACjB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,UAAU;AACZ;AAEA,IAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AACX;AAGO,SAAS,WAAW;AAAA,EACzB,YAAY;AAAA,EACZ,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,SAAS;AACX,GAOkB;AAChB,SAAO;AAAA,IACL,SAAS,SAAS,gBAAgB;AAAA,IAClC,eAAe;AAAA,IACf,KAAK,WAAW,cAAc,QAAQ,WAAW,SAAS,GAAG;AAAA,IAC7D,UAAU,OAAO,SAAS;AAAA,IAC1B,UAAU;AAAA,IACV,GAAI,QAAQ,EAAE,YAAY,WAAW,KAAK,EAAE,IAAI;AAAA,IAChD,GAAI,UAAU,EAAE,gBAAgB,aAAa,OAAO,EAAE,IAAI;AAAA,EAC5D;AACF;;;ACTI,IAAAC,sBAAA;AAbG,SAAS,MAAM;AAAA,EACpB,YAAY;AAAA,EACZ,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAe;AACb,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,kBAAgB;AAAA,MAChB,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,GAAG,WAAW,EAAE,WAAW,KAAK,OAAO,SAAS,MAAM,OAAO,CAAC;AAAA,QAC9D,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ACtCA,IAAM,UAAU;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AACZ;AAEO,SAAS,UAAU;AAAA,EACxB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AACb,GAMkB;AAChB,SAAO;AAAA,IACL,SAAS;AAAA,IACT,SAAS,WAAW,SAAS,OAAO;AAAA,IACpC,iBAAiB,OAAO,QAAQ,IAAI,CAAC;AAAA,IACrC,OAAO,OAAO,oBAAoB;AAAA,IAClC,QAAQ,WAAW,aAAa,OAAO,qBAAqB,CAAC,KAAK;AAAA,IAClE,cAAc,UAAU,MAAM;AAAA,IAC9B,WAAW,UAAU,SAAS;AAAA,IAC9B,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AACF;;;ACXI,IAAAC,sBAAA;AAZG,SAAS,KAAK;AAAA,EACnB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAc;AACZ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,aAAW;AAAA,MACX,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,GAAG,UAAU,EAAE,SAAS,WAAW,QAAQ,MAAM,SAAS,CAAC;AAAA,QAC3D,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ACxCO,SAAS,aAAa,cAAkC,cAA6B;AAC1F,QAAM,OAAO,aAAa,OAAO,qBAAqB,CAAC;AAEvD,MAAI,gBAAgB,YAAY;AAC9B,WAAO;AAAA,MACL,WAAW;AAAA,MACX,OAAO;AAAA,MACP,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,mBAAmB;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACpB;AACF;;;ACRI,IAAAC,sBAAA;AAPG,SAAS,QAAQ;AAAA,EACtB,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAiB;AACf,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,oBAAkB;AAAA,MAClB,oBAAkB,gBAAgB,aAAa,aAAa;AAAA,MAC5D,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO,EAAE,GAAG,aAAa,WAAW,GAAG,GAAG,MAAM;AAAA,MAC/C,GAAG;AAAA;AAAA,EACN;AAEJ;;;ACpBO,SAAS,UAAU;AAAA,EACxB,OAAO;AAAA,EACP,YAAY;AACd,GAGkB;AAChB,SAAO;AAAA,IACL,OAAO,SAAS,YAAY,YAAY,aAAa,MAAM;AAAA,IAC3D,gBAAgB,cAAc,WAAW,cAAc;AAAA,IACvD,qBAAqB;AAAA,IACrB,cAAc,UAAU,IAAI;AAAA,IAC5B,QAAQ;AAAA,EACV;AACF;;;ACYI,IAAAC,sBAAA;AAdG,SAAS,KAAK;AAAA,EACnB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAc;AACZ,QAAM,gBAAgB,WAClB,EAAE,QAAQ,UAAU,KAAK,sBAAsB,IAC/C;AAEJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,aAAW;AAAA,MACX,kBAAgB;AAAA,MAChB,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO,EAAE,GAAG,UAAU,EAAE,MAAM,UAAU,CAAC,GAAG,GAAG,MAAM;AAAA,MACpD,GAAG;AAAA,MACH,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ACvCA,IAAM,iBAAiB;AAAA,EACrB,IAAI,OAAO,mBAAmB;AAAA,EAC9B,IAAI,OAAO,mBAAmB;AAAA,EAC9B,IAAI,OAAO,sBAAsB;AAAA,EACjC,SAAS;AACX;AAEO,SAAS,aAAa,OAAoB,MAAqB;AACpE,QAAM,YAAY,eAAe,IAAI;AAErC,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AACF;;;ACJI,IAAAC,sBAAA;AARG,SAAS,QAAQ;AAAA,EACtB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAiB;AACf,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,aAAW;AAAA,MACX,MAAM,QAAQ,WAAW;AAAA,MACzB,cAAY;AAAA,MACZ,eAAa,QAAQ,SAAY;AAAA,MACjC,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO,EAAE,GAAG,aAAa,IAAI,GAAG,GAAG,MAAM;AAAA,MACxC,GAAG;AAAA;AAAA,EACN;AAEJ;;;ACvBA,SAAS,aAAa,SAIpB;AACA,SAAO;AAAA,IACL,IAAI,gBAAgB,OAAO;AAAA,IAC3B,MAAM,gBAAgB,OAAO;AAAA,IAC7B,QAAQ,gBAAgB,OAAO;AAAA,EACjC;AACF;AAKA,IAAM,aAAa;AAAA,EACjB,IAAI;AAAA,IACF,cAAc,OAAO,kBAAkB;AAAA,IACvC,eAAe,OAAO,kBAAkB;AAAA,IACxC,KAAK,OAAO,mBAAmB;AAAA,IAC/B,QAAQ,OAAO,WAAW;AAAA,IAC1B,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,cAAc,OAAO,kBAAkB;AAAA,IACvC,eAAe,OAAO,kBAAkB;AAAA,IACxC,KAAK,OAAO,mBAAmB;AAAA,IAC/B,QAAQ,OAAO,WAAW;AAAA,IAC1B,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,cAAc,OAAO,kBAAkB;AAAA,IACvC,eAAe,QAAQ,OAAO,kBAAkB,CAAC,MAAM,OAAO,kBAAkB,CAAC;AAAA,IACjF,KAAK,OAAO,mBAAmB;AAAA,IAC/B,QAAQ,OAAO,WAAW;AAAA,IAC1B,MAAM;AAAA,EACR;AACF;AAWO,SAAS,YAAY;AAAA,EAC1B,UAAU;AAAA,EACV,OAAO;AAAA,EACP,WAAW;AAAA,EACX,UAAU;AACZ,GAKkB;AAChB,QAAM,WAAW,YAAY;AAC7B,QAAM,SAAS,aAAa,WAAW,aAAa,OAAO;AAC3D,QAAM,SAAS,WAAW,IAAI;AAE9B,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAK,OAAO;AAAA,IACZ,cAAc,OAAO;AAAA,IACrB,eAAe,OAAO;AAAA,IACtB,QAAQ;AAAA,IACR,iBAAiB,OAAO,OAAO,EAAE;AAAA,IACjC,OAAO,OAAO,OAAO,IAAI;AAAA,IACzB,QAAQ,aAAa,OAAO,OAAO,MAAM,CAAC;AAAA,IAC1C,cAAc,OAAO;AAAA,IACrB,WAAW;AAAA,IACX,GAAG,gBAAgB,OAAO,IAAI;AAAA,IAC9B,gBAAgB;AAAA,IAChB,YAAY;AAAA,EACd;AACF;;;ACrDI,IAAAC,sBAAA;AAhBG,SAAS,OAAO;AAAA,EACrB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,WAAW;AAAA,EACX,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAgB;AACd,QAAM,aAAa,YAAY;AAE/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,wBAAqB;AAAA,MACrB,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAW,WAAW;AAAA,MACtB,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,GAAG,YAAY,EAAE,SAAS,MAAM,UAAU,QAAQ,CAAC;AAAA,QACnD,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,kBACC,6CAAC,WAAQ,MAAK,WAAU,mBAAgB,WAAU,IAChD,cACF,6CAAC,UAAK,mBAAgB,WAAW,uBAAY,IAC3C;AAAA,QACH,WAAW,6CAAC,UAAK,mBAAgB,SAAS,UAAS,IAAU;AAAA,QAC7D,gBAAgB,CAAC,UAChB,6CAAC,UAAK,mBAAgB,YAAY,wBAAa,IAC7C;AAAA;AAAA;AAAA,EACN;AAEJ;;;ACjDO,SAAS,WAAW;AAAA,EACzB,OAAO;AAAA,EACP,OAAO;AACT,GAGkB;AAChB,QAAM,SACJ,SAAS,YACL;AAAA,IACE,IAAI,OAAO,iBAAiB;AAAA,IAC5B,MAAM,OAAO,sBAAsB;AAAA,IACnC,QAAQ,OAAO,qBAAqB;AAAA,EACtC,IACA;AAAA,IACE,IAAI,OAAO,kBAAkB,IAAI,KAAK;AAAA,IACtC,MAAM,OAAO,kBAAkB,IAAI,OAAO;AAAA,IAC1C,QAAQ,OAAO,kBAAkB,IAAI,SAAS;AAAA,EAChD;AAEN,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK,WAAW,UAAU,IAAI;AAAA,IAC9B,cAAc;AAAA,IACd,eAAe,WAAW,SAAS,IAAI;AAAA,IACvC,iBAAiB,OAAO;AAAA,IACxB,OAAO,OAAO;AAAA,IACd,QAAQ,aAAa,OAAO,MAAM;AAAA,IAClC,cAAc,UAAU,MAAM;AAAA,IAC9B,GAAG,gBAAgB,SAAS,OAAO,aAAa,UAAU;AAAA,IAC1D,YAAY;AAAA,EACd;AACF;;;ACrBI,IAAAC,sBAAA;AATG,SAAS,MAAM;AAAA,EACpB,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAe;AACb,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,aAAW;AAAA,MACX,aAAW;AAAA,MACX,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO,EAAE,GAAG,WAAW,EAAE,MAAM,KAAK,CAAC,GAAG,GAAG,MAAM;AAAA,MAChD,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;AC1BO,SAAS,aAAa,OAAqB,QAAuB;AACvE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,KAAK,WAAW,UAAU,IAAI;AAAA,IAC9B,SAAS,WAAW,SAAS,IAAI;AAAA,IACjC,iBAAiB,OAAO,kBAAkB,IAAI,KAAK;AAAA,IACnD,OAAO,OAAO,kBAAkB,IAAI,OAAO;AAAA,IAC3C,QAAQ,aAAa,OAAO,kBAAkB,IAAI,SAAS,CAAC;AAAA,IAC5D,cAAc,UAAU,IAAI;AAAA,IAC5B,WAAW;AAAA,IACX,GAAG,gBAAgB,SAAS;AAAA,EAC9B;AACF;AAEO,SAAS,sBAAqC;AACnD,SAAO;AAAA,IACL,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK,WAAW,SAAS,IAAI;AAAA,IAC7B,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,oBAAmC;AACjD,SAAO,EAAE,QAAQ,GAAG,GAAG,gBAAgB,UAAU,EAAE;AACrD;AAEO,SAAS,mBAAkC;AAChD,SAAO,EAAE,QAAQ,GAAG,GAAG,gBAAgB,SAAS,EAAE;AACpD;;;ACEQ,IAAAC,uBAAA;AAlBD,SAAS,QAAQ;AAAA,EACtB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAiB;AACf,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,aAAW;AAAA,MACX,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO,EAAE,GAAG,aAAa,IAAI,GAAG,GAAG,MAAM;AAAA,MACxC,GAAG;AAAA,MAEH;AAAA,mBACC,8CAAC,UAAK,mBAAgB,QAAO,eAAY,QACtC,oBACH,IACE;AAAA,QACJ,+CAAC,SAAI,mBAAgB,WAAU,OAAO,oBAAoB,GACvD;AAAA,kBACC,8CAAC,OAAE,mBAAgB,SAAQ,OAAO,kBAAkB,GACjD,iBACH,IACE;AAAA,UACH,WACC,8CAAC,SAAI,mBAAgB,QAAO,OAAO,iBAAiB,GACjD,UACH,IACE;AAAA,WACN;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC1DA,mBAA0D;;;ACa1D,IAAM,eAAe;AAAA,EACnB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,aAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,wBAAwB,EAAE,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK;AAK7D,IAAM,yBAAyB,EAAE,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK;AAKvD,SAAS,iBAAgC;AAC9C,SAAO;AAAA,IACL,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK,WAAW,SAAS,IAAI;AAAA,IAC7B,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,gBAAgB,OAAkB,MAAqB;AACrE,SAAO;AAAA,IACL,OAAO,OAAO,oBAAoB;AAAA,IAClC,GAAG,gBAAgB,WAAW,IAAI,CAAC;AAAA,EACrC;AACF;AAEO,SAAS,kBAAkB;AAAA,EAChC,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAW;AACb,GAIkB;AAChB,SAAO;AAAA,IACL,OAAO;AAAA,IACP,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,cAAc,WAAW,SAAS,sBAAsB,IAAI,CAAC;AAAA,IAC7D,eAAe,WAAW,SAAS,uBAAuB,IAAI,CAAC;AAAA,IAC/D,iBAAiB,WACb,OAAO,0BAA0B,IACjC,OAAO,gBAAgB;AAAA,IAC3B,OAAO,WAAW,OAAO,qBAAqB,IAAI,OAAO,kBAAkB;AAAA,IAC3E,QAAQ,aAAa;AAAA,MACnB,UAAU,8BAA8B;AAAA,IAC1C,CAAC;AAAA,IACD,cAAc,UAAU,IAAI;AAAA,IAC5B,GAAG,gBAAgB,aAAa,IAAI,CAAC;AAAA,EACvC;AACF;AAEO,SAAS,wBAAuC;AACrD,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,OAAO,OAAO,sBAAsB;AAAA,IACpC,GAAG,gBAAgB,SAAS;AAAA,EAC9B;AACF;AAEO,SAAS,kBAAiC;AAC/C,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,OAAO,OAAO,mBAAmB;AAAA,IACjC,GAAG,gBAAgB,SAAS;AAAA,EAC9B;AACF;AAGO,SAAS,6BAA4C;AAC1D,SAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF;;;ADpCI,IAAAC,uBAAA;AAtDG,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAIa;AACX,QAAM,gBAAY,oBAAM;AACxB,QAAM,YAAY,MAAM,eAAe,SAAS;AAChD,QAAM,gBAAgB,GAAG,SAAS;AAClC,QAAM,UAAU,GAAG,SAAS;AAC5B,QAAM,cACJ,CAAC,cAAc,gBAAgB,MAAM,QAAQ,UAAU,IAAI,EACxD,OAAO,OAAO,EACd,KAAK,GAAG,KAAK;AAElB,SAAO,EAAE,WAAW,eAAe,SAAS,YAAY;AAC1D;AAqBO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAAoB;AAClB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAsB;AAAA,MACtB,aAAW;AAAA,MACX,gBAAc,WAAW;AAAA,MACzB,iBAAe,YAAY;AAAA,MAC3B,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO,EAAE,GAAG,eAAe,GAAG,GAAG,MAAM;AAAA,MAEtC;AAAA,gBACC;AAAA,UAAC;AAAA;AAAA,YACC,mBAAgB;AAAA,YAChB,SAAS,IAAI;AAAA,YACb,OAAO,gBAAgB,IAAI;AAAA,YAE1B;AAAA;AAAA,QACH,IACE;AAAA,QACH;AAAA,QACA,cACC;AAAA,UAAC;AAAA;AAAA,YACC,mBAAgB;AAAA,YAChB,IAAI,IAAI;AAAA,YACR,OAAO,sBAAsB;AAAA,YAE5B;AAAA;AAAA,QACH,IACE;AAAA,QACH,QACC;AAAA,UAAC;AAAA;AAAA,YACC,mBAAgB;AAAA,YAChB,IAAI,IAAI;AAAA,YACR,MAAK;AAAA,YACL,OAAO,gBAAgB;AAAA,YAEtB;AAAA;AAAA,QACH,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;;;AEhEM,IAAAC,uBAAA;AA5BC,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAmB;AACjB,QAAM,MAAM,YAAY,EAAE,IAAI,aAAa,MAAM,CAAC;AAClD,QAAM,YAAY,WAAW,QAAQ,KAAK;AAE1C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,IAAI,IAAI;AAAA,UACR,mBAAgB;AAAA,UAChB;AAAA,UACA,gBAAc,aAAa;AAAA,UAC3B,oBAAkB,IAAI;AAAA,UACtB,OAAO,kBAAkB,EAAE,MAAM,SAAS,WAAW,SAAS,CAAC;AAAA;AAAA,MACjE;AAAA;AAAA,EACF;AAEJ;;;ACVM,IAAAC,uBAAA;AA9BC,SAAS,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAgB;AACd,QAAM,MAAM,YAAY,EAAE,IAAI,aAAa,MAAM,CAAC;AAClD,QAAM,YAAY,WAAW,QAAQ,KAAK;AAE1C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,IAAI,IAAI;AAAA,UACR,mBAAgB;AAAA,UAChB;AAAA,UACA,gBAAc,aAAa;AAAA,UAC3B,oBAAkB,IAAI;AAAA,UACtB,OAAO,kBAAkB,EAAE,MAAM,SAAS,WAAW,SAAS,CAAC;AAAA,UAE9D;AAAA,0BAAc,8CAAC,YAAO,OAAM,IAAI,uBAAY,IAAY;AAAA,YACxD;AAAA;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;;;AC5DA,IAAM,eAAe;AAEd,SAAS,oBAAmC;AACjD,SAAO;AAAA,IACL,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK,WAAW,SAAS,IAAI;AAAA,IAC7B,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,mBAAmB,WAAW,OAAsB;AAClE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK,WAAW,UAAU,IAAI;AAAA,IAC9B,QAAQ,WAAW,gBAAgB;AAAA,IACnC,OAAO,WAAW,OAAO,qBAAqB,IAAI,OAAO,oBAAoB;AAAA,IAC7E,GAAG,gBAAgB,SAAS;AAAA,EAC9B;AACF;AAGO,SAAS,yBAAwC;AACtD,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc,UAAU,IAAI;AAAA,IAC5B,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF;;;ACSM,IAAAC,uBAAA;AAtBC,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,QAAM,MAAM,YAAY,EAAE,IAAI,aAAa,MAAM,CAAC;AAClD,QAAM,YAAY,WAAW,QAAQ,KAAK;AAE1C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,gBAAc,aAAa;AAAA,MAC3B,iBAAe,YAAY;AAAA,MAC3B,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO,EAAE,GAAG,kBAAkB,GAAG,GAAG,MAAM;AAAA,MAE1C;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,mBAAgB;AAAA,YAChB,SAAS,IAAI;AAAA,YACb,OAAO,mBAAmB,QAAQ;AAAA,YAElC;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACE,GAAG;AAAA,kBACJ,MAAK;AAAA,kBACL,IAAI,IAAI;AAAA,kBACR,mBAAgB;AAAA,kBAChB;AAAA,kBACA,gBAAc,aAAa;AAAA,kBAC3B,oBAAkB,IAAI;AAAA,kBACtB,OAAO,2BAA2B;AAAA;AAAA,cACpC;AAAA,cACA,8CAAC,UAAK,mBAAgB,aAAY,eAAY,QAAO,OAAO,uBAAuB,GAAG;AAAA,cACrF,QAAQ,8CAAC,UAAK,mBAAgB,cAAc,iBAAM,IAAU;AAAA;AAAA;AAAA,QAC/D;AAAA,QACC,cACC;AAAA,UAAC;AAAA;AAAA,YACC,mBAAgB;AAAA,YAChB,IAAI,IAAI;AAAA,YACR,OAAO,sBAAsB;AAAA,YAE5B;AAAA;AAAA,QACH,IACE;AAAA,QACH,QACC;AAAA,UAAC;AAAA;AAAA,YACC,mBAAgB;AAAA,YAChB,IAAI,IAAI;AAAA,YACR,MAAK;AAAA,YACL,OAAO,gBAAgB;AAAA,YAEtB;AAAA;AAAA,QACH,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;;;ACrFA,IAAMC,gBAAe;AAEd,SAAS,iBAAgC;AAC9C,SAAO;AAAA,IACL,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK,WAAW,SAAS,IAAI;AAAA,IAC7B,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,gBAAgB,WAAW,OAAsB;AAC/D,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK,WAAW,UAAU,IAAI;AAAA,IAC9B,QAAQ,WAAW,gBAAgB;AAAA,IACnC,OAAO,WAAW,OAAO,qBAAqB,IAAI,OAAO,oBAAoB;AAAA,IAC7E,GAAG,gBAAgB,SAAS;AAAA,EAC9B;AACF;AAGO,SAAS,sBAAqC;AACnD,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAOA;AAAA,IACP,QAAQA;AAAA,IACR,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF;;;ACSM,IAAAC,uBAAA;AAtBC,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAe;AACb,QAAM,MAAM,YAAY,EAAE,IAAI,aAAa,MAAM,CAAC;AAClD,QAAM,YAAY,WAAW,QAAQ,KAAK;AAE1C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,wBAAqB;AAAA,MACrB,gBAAc,aAAa;AAAA,MAC3B,iBAAe,YAAY;AAAA,MAC3B,WAAW,eAAe,SAAS;AAAA,MACnC,OAAO,EAAE,GAAG,eAAe,GAAG,GAAG,MAAM;AAAA,MAEvC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,mBAAgB;AAAA,YAChB,SAAS,IAAI;AAAA,YACb,OAAO,gBAAgB,QAAQ;AAAA,YAE/B;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACE,GAAG;AAAA,kBACJ,MAAK;AAAA,kBACL,IAAI,IAAI;AAAA,kBACR,mBAAgB;AAAA,kBAChB;AAAA,kBACA,gBAAc,aAAa;AAAA,kBAC3B,oBAAkB,IAAI;AAAA,kBACtB,OAAO,2BAA2B;AAAA;AAAA,cACpC;AAAA,cACA,8CAAC,UAAK,mBAAgB,aAAY,eAAY,QAAO,OAAO,oBAAoB,GAAG;AAAA,cAClF,QAAQ,8CAAC,UAAK,mBAAgB,cAAc,iBAAM,IAAU;AAAA;AAAA;AAAA,QAC/D;AAAA,QACC,cACC;AAAA,UAAC;AAAA;AAAA,YACC,mBAAgB;AAAA,YAChB,IAAI,IAAI;AAAA,YACR,OAAO,sBAAsB;AAAA,YAE5B;AAAA;AAAA,QACH,IACE;AAAA,QACH,QACC;AAAA,UAAC;AAAA;AAAA,YACC,mBAAgB;AAAA,YAChB,IAAI,IAAI;AAAA,YACR,MAAK;AAAA,YACL,OAAO,gBAAgB;AAAA,YAEtB;AAAA;AAAA,QACH,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","CONTROL_SIZE","import_jsx_runtime"]}
package/dist/index.d.cts CHANGED
@@ -195,9 +195,23 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'typ
195
195
  invalid?: boolean;
196
196
  }
197
197
  /**
198
- * Native checkbox with a token-backed label row.
199
- * The check mark uses `accent-color`, so platform behaviour is untouched.
198
+ * Token-backed checkbox with a drawn indicator.
199
+ * A visually hidden native input keeps form / keyboard behaviour.
200
+ * The check mark is painted with `::after` in foundationsCss.
200
201
  */
201
202
  declare function Checkbox({ label, description, error, invalid, id, disabled, className, style, ...rest }: CheckboxProps): react.JSX.Element;
202
203
 
203
- export { Badge, type BadgeProps, type BadgeSize, type BadgeTone, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Callout, type CalloutProps, Card, type CardProps, type CardTone, Checkbox, type CheckboxProps, Divider, type DividerOrientation, type DividerProps, type FeedbackTone, type FieldSize, type Level, Link, type LinkProps, type LinkTone, type LinkUnderline, MasonProvider, type MasonProviderProps, type MasonTheme, type RadiusLevel, Select, type SelectProps, type ShadowLevel, Spinner, type SpinnerProps, type SpinnerSize, Stack, type StackAlign, type StackDirection, type StackJustify, type StackProps, Text, type TextAlign, type TextElement, TextField, type TextFieldProps, type TextProps, type TextTone, type TextVariant };
204
+ interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
205
+ label?: ReactNode;
206
+ description?: ReactNode;
207
+ error?: ReactNode;
208
+ invalid?: boolean;
209
+ }
210
+ /**
211
+ * Token-backed radio with a drawn indicator.
212
+ * A visually hidden native input keeps form / keyboard behaviour.
213
+ * The selected dot is painted with `::after` in foundationsCss.
214
+ */
215
+ declare function Radio({ label, description, error, invalid, id, disabled, className, style, ...rest }: RadioProps): react.JSX.Element;
216
+
217
+ export { Badge, type BadgeProps, type BadgeSize, type BadgeTone, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Callout, type CalloutProps, Card, type CardProps, type CardTone, Checkbox, type CheckboxProps, Divider, type DividerOrientation, type DividerProps, type FeedbackTone, type FieldSize, type Level, Link, type LinkProps, type LinkTone, type LinkUnderline, MasonProvider, type MasonProviderProps, type MasonTheme, Radio, type RadioProps, type RadiusLevel, Select, type SelectProps, type ShadowLevel, Spinner, type SpinnerProps, type SpinnerSize, Stack, type StackAlign, type StackDirection, type StackJustify, type StackProps, Text, type TextAlign, type TextElement, TextField, type TextFieldProps, type TextProps, type TextTone, type TextVariant };
package/dist/index.d.ts CHANGED
@@ -195,9 +195,23 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'typ
195
195
  invalid?: boolean;
196
196
  }
197
197
  /**
198
- * Native checkbox with a token-backed label row.
199
- * The check mark uses `accent-color`, so platform behaviour is untouched.
198
+ * Token-backed checkbox with a drawn indicator.
199
+ * A visually hidden native input keeps form / keyboard behaviour.
200
+ * The check mark is painted with `::after` in foundationsCss.
200
201
  */
201
202
  declare function Checkbox({ label, description, error, invalid, id, disabled, className, style, ...rest }: CheckboxProps): react.JSX.Element;
202
203
 
203
- export { Badge, type BadgeProps, type BadgeSize, type BadgeTone, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Callout, type CalloutProps, Card, type CardProps, type CardTone, Checkbox, type CheckboxProps, Divider, type DividerOrientation, type DividerProps, type FeedbackTone, type FieldSize, type Level, Link, type LinkProps, type LinkTone, type LinkUnderline, MasonProvider, type MasonProviderProps, type MasonTheme, type RadiusLevel, Select, type SelectProps, type ShadowLevel, Spinner, type SpinnerProps, type SpinnerSize, Stack, type StackAlign, type StackDirection, type StackJustify, type StackProps, Text, type TextAlign, type TextElement, TextField, type TextFieldProps, type TextProps, type TextTone, type TextVariant };
204
+ interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
205
+ label?: ReactNode;
206
+ description?: ReactNode;
207
+ error?: ReactNode;
208
+ invalid?: boolean;
209
+ }
210
+ /**
211
+ * Token-backed radio with a drawn indicator.
212
+ * A visually hidden native input keeps form / keyboard behaviour.
213
+ * The selected dot is painted with `::after` in foundationsCss.
214
+ */
215
+ declare function Radio({ label, description, error, invalid, id, disabled, className, style, ...rest }: RadioProps): react.JSX.Element;
216
+
217
+ export { Badge, type BadgeProps, type BadgeSize, type BadgeTone, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Callout, type CalloutProps, Card, type CardProps, type CardTone, Checkbox, type CheckboxProps, Divider, type DividerOrientation, type DividerProps, type FeedbackTone, type FieldSize, type Level, Link, type LinkProps, type LinkTone, type LinkUnderline, MasonProvider, type MasonProviderProps, type MasonTheme, Radio, type RadioProps, type RadiusLevel, Select, type SelectProps, type ShadowLevel, Spinner, type SpinnerProps, type SpinnerSize, Stack, type StackAlign, type StackDirection, type StackJustify, type StackProps, Text, type TextAlign, type TextElement, TextField, type TextFieldProps, type TextProps, type TextTone, type TextVariant };
package/dist/index.js CHANGED
@@ -599,6 +599,21 @@ function fieldErrorStyle() {
599
599
  ...typographyStyle("body.sm")
600
600
  };
601
601
  }
602
+ function visuallyHiddenControlStyle() {
603
+ return {
604
+ position: "absolute",
605
+ width: 1,
606
+ height: 1,
607
+ padding: 0,
608
+ margin: -1,
609
+ overflow: "hidden",
610
+ clip: "rect(0, 0, 0, 0)",
611
+ whiteSpace: "nowrap",
612
+ borderWidth: 0,
613
+ borderStyle: "solid",
614
+ borderColor: "transparent"
615
+ };
616
+ }
602
617
 
603
618
  // src/field.tsx
604
619
  import { jsx as jsx11, jsxs as jsxs3 } from "react/jsx-runtime";
@@ -768,6 +783,7 @@ function Select({
768
783
  }
769
784
 
770
785
  // src/checkboxStyles.ts
786
+ var CONTROL_SIZE = "1.125rem";
771
787
  function checkboxRootStyle() {
772
788
  return {
773
789
  display: "flex",
@@ -786,14 +802,19 @@ function checkboxLabelStyle(disabled = false) {
786
802
  ...typographyStyle("body.md")
787
803
  };
788
804
  }
789
- function checkboxControlStyle() {
805
+ function checkboxIndicatorStyle() {
790
806
  return {
791
- width: "1em",
792
- height: "1em",
793
- margin: 0,
794
- marginBlockStart: "0.15em",
795
- accentColor: cssVar("color.action.primary.bg"),
796
- flexShrink: 0
807
+ display: "inline-flex",
808
+ alignItems: "center",
809
+ justifyContent: "center",
810
+ width: CONTROL_SIZE,
811
+ height: CONTROL_SIZE,
812
+ marginBlockStart: "0.2em",
813
+ flexShrink: 0,
814
+ boxSizing: "border-box",
815
+ borderRadius: radiusVar("sm"),
816
+ borderStyle: "solid",
817
+ borderWidth: "1.5px"
797
818
  };
798
819
  }
799
820
 
@@ -838,9 +859,10 @@ function Checkbox({
838
859
  disabled,
839
860
  "aria-invalid": isInvalid || void 0,
840
861
  "aria-describedby": ids.describedBy,
841
- style: checkboxControlStyle()
862
+ style: visuallyHiddenControlStyle()
842
863
  }
843
864
  ),
865
+ /* @__PURE__ */ jsx14("span", { "data-mason-slot": "indicator", "aria-hidden": "true", style: checkboxIndicatorStyle() }),
844
866
  label ? /* @__PURE__ */ jsx14("span", { "data-mason-slot": "label-text", children: label }) : null
845
867
  ]
846
868
  }
@@ -868,6 +890,115 @@ function Checkbox({
868
890
  }
869
891
  );
870
892
  }
893
+
894
+ // src/radioStyles.ts
895
+ var CONTROL_SIZE2 = "1.125rem";
896
+ function radioRootStyle() {
897
+ return {
898
+ display: "flex",
899
+ flexDirection: "column",
900
+ gap: spacingVar("stack", "sm"),
901
+ minWidth: 0
902
+ };
903
+ }
904
+ function radioLabelStyle(disabled = false) {
905
+ return {
906
+ display: "inline-flex",
907
+ alignItems: "flex-start",
908
+ gap: spacingVar("inline", "sm"),
909
+ cursor: disabled ? "not-allowed" : "pointer",
910
+ color: disabled ? cssVar("color.text.disabled") : cssVar("color.text.primary"),
911
+ ...typographyStyle("body.md")
912
+ };
913
+ }
914
+ function radioIndicatorStyle() {
915
+ return {
916
+ display: "inline-flex",
917
+ alignItems: "center",
918
+ justifyContent: "center",
919
+ width: CONTROL_SIZE2,
920
+ height: CONTROL_SIZE2,
921
+ marginBlockStart: "0.2em",
922
+ flexShrink: 0,
923
+ boxSizing: "border-box",
924
+ borderRadius: "999px",
925
+ borderStyle: "solid",
926
+ borderWidth: "1.5px"
927
+ };
928
+ }
929
+
930
+ // src/Radio.tsx
931
+ import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
932
+ function Radio({
933
+ label,
934
+ description,
935
+ error,
936
+ invalid,
937
+ id,
938
+ disabled = false,
939
+ className,
940
+ style,
941
+ ...rest
942
+ }) {
943
+ const ids = useFieldIds({ id, description, error });
944
+ const isInvalid = invalid ?? Boolean(error);
945
+ return /* @__PURE__ */ jsxs6(
946
+ "div",
947
+ {
948
+ "data-mason-component": "radio",
949
+ "data-invalid": isInvalid || void 0,
950
+ "data-disabled": disabled || void 0,
951
+ className: mergeClassName(className),
952
+ style: { ...radioRootStyle(), ...style },
953
+ children: [
954
+ /* @__PURE__ */ jsxs6(
955
+ "label",
956
+ {
957
+ "data-mason-slot": "label",
958
+ htmlFor: ids.controlId,
959
+ style: radioLabelStyle(disabled),
960
+ children: [
961
+ /* @__PURE__ */ jsx15(
962
+ "input",
963
+ {
964
+ ...rest,
965
+ type: "radio",
966
+ id: ids.controlId,
967
+ "data-mason-slot": "control",
968
+ disabled,
969
+ "aria-invalid": isInvalid || void 0,
970
+ "aria-describedby": ids.describedBy,
971
+ style: visuallyHiddenControlStyle()
972
+ }
973
+ ),
974
+ /* @__PURE__ */ jsx15("span", { "data-mason-slot": "indicator", "aria-hidden": "true", style: radioIndicatorStyle() }),
975
+ label ? /* @__PURE__ */ jsx15("span", { "data-mason-slot": "label-text", children: label }) : null
976
+ ]
977
+ }
978
+ ),
979
+ description ? /* @__PURE__ */ jsx15(
980
+ "p",
981
+ {
982
+ "data-mason-slot": "description",
983
+ id: ids.descriptionId,
984
+ style: fieldDescriptionStyle(),
985
+ children: description
986
+ }
987
+ ) : null,
988
+ error ? /* @__PURE__ */ jsx15(
989
+ "p",
990
+ {
991
+ "data-mason-slot": "error",
992
+ id: ids.errorId,
993
+ role: "alert",
994
+ style: fieldErrorStyle(),
995
+ children: error
996
+ }
997
+ ) : null
998
+ ]
999
+ }
1000
+ );
1001
+ }
871
1002
  export {
872
1003
  Badge,
873
1004
  Button,
@@ -877,6 +1008,7 @@ export {
877
1008
  Divider,
878
1009
  Link,
879
1010
  MasonProvider,
1011
+ Radio,
880
1012
  Select,
881
1013
  Spinner,
882
1014
  Stack,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/provider.tsx","../src/styles.ts","../src/textStyles.ts","../src/Text.tsx","../src/stackStyles.ts","../src/Stack.tsx","../src/cardStyles.ts","../src/Card.tsx","../src/dividerStyles.ts","../src/Divider.tsx","../src/linkStyles.ts","../src/Link.tsx","../src/spinnerStyles.ts","../src/Spinner.tsx","../src/buttonStyles.ts","../src/Button.tsx","../src/badgeStyles.ts","../src/Badge.tsx","../src/calloutStyles.ts","../src/Callout.tsx","../src/field.tsx","../src/fieldStyles.ts","../src/TextField.tsx","../src/Select.tsx","../src/checkboxStyles.ts","../src/Checkbox.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport type MasonTheme = 'light' | 'dark' | 'system'\n\nexport interface MasonProviderProps {\n children: ReactNode\n theme?: MasonTheme\n}\n\n/** Root provider for mason-ds React apps. */\nexport function MasonProvider({ children, theme = 'light' }: MasonProviderProps) {\n return <div data-mason-provider data-mason-theme={theme}>{children}</div>\n}\n","import { getSemanticCssVar, type SemanticTokenPath } from '@mason-ds/tokens'\n\n/**\n * Prop unions are derived from the semantic token paths, so adding or removing\n * a token role changes the component API instead of silently drifting from it.\n */\ntype FontRoleOf<Path> = Path extends `font.${infer Role}.family` ? Role : never\ntype TextToneOf<Path> = Path extends `color.text.${infer Tone}` ? Tone : never\ntype FeedbackToneOf<Path> = Path extends `color.feedback.${infer Tone}.bg` ? Tone : never\ntype LevelOf<Path> = Path extends `spacing.inset.${infer Level}` ? Level : never\ntype RadiusOf<Path> = Path extends `radius.${infer Level}` ? Level : never\ntype ShadowOf<Path> = Path extends `shadow.${infer Level}` ? Level : never\n\n/** Typography roles, e.g. `heading.h2`, `body.md`, `code.md`. */\nexport type TextVariant = FontRoleOf<SemanticTokenPath>\n/** Text color roles, e.g. `primary`, `secondary`, `link`, `danger`. */\nexport type TextTone = TextToneOf<SemanticTokenPath>\n/** Status roles shared by Badge / Callout. */\nexport type FeedbackTone = FeedbackToneOf<SemanticTokenPath>\n/** Spacing steps — sm / md / lg. */\nexport type Level = LevelOf<SemanticTokenPath>\nexport type RadiusLevel = RadiusOf<SemanticTokenPath>\nexport type ShadowLevel = ShadowOf<SemanticTokenPath>\n\n/** Reference a semantic token as `var(--mason-*)`. */\nexport function cssVar(path: SemanticTokenPath): string {\n return `var(${getSemanticCssVar(path)})`\n}\n\nexport function spacingVar(axis: 'inset' | 'stack' | 'inline', level: Level): string {\n return cssVar(`spacing.${axis}.${level}`)\n}\n\nexport function radiusVar(level: RadiusLevel): string {\n return cssVar(`radius.${level}`)\n}\n\nexport function shadowVar(level: ShadowLevel): string {\n return cssVar(`shadow.${level}`)\n}\n\nexport function textColorVar(tone: TextTone): string {\n return cssVar(`color.text.${tone}`)\n}\n\nexport function typographyStyle(variant: TextVariant): {\n fontFamily: string\n fontSize: string\n fontWeight: string\n lineHeight: string\n letterSpacing: string\n} {\n return {\n fontFamily: cssVar(`font.${variant}.family`),\n fontSize: cssVar(`font.${variant}.size`),\n fontWeight: cssVar(`font.${variant}.weight`),\n lineHeight: cssVar(`font.${variant}.lineHeight`),\n letterSpacing: cssVar(`font.${variant}.letterSpacing`),\n }\n}\n\nexport function mergeClassName(...parts: (string | undefined)[]): string | undefined {\n const merged = parts.filter(Boolean).join(' ')\n return merged.length > 0 ? merged : undefined\n}\n","import type { CSSProperties } from 'react'\nimport { textColorVar, typographyStyle, type TextTone, type TextVariant } from './styles.js'\n\nexport type TextAlign = 'start' | 'center' | 'end'\n\nexport function textStyle({\n variant = 'body.md',\n tone = 'primary',\n align,\n truncate = false,\n}: {\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\n}): CSSProperties {\n return {\n margin: 0,\n color: textColorVar(tone),\n ...typographyStyle(variant),\n ...(align ? { textAlign: align } : null),\n ...(truncate\n ? { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }\n : null),\n }\n}\n","import type { ElementType, HTMLAttributes } from 'react'\nimport { mergeClassName, type TextTone, type TextVariant } from './styles.js'\nimport { textStyle, type TextAlign } from './textStyles.js'\n\nexport type { TextAlign } from './textStyles.js'\n\nexport type TextElement =\n | 'p'\n | 'span'\n | 'div'\n | 'label'\n | 'strong'\n | 'code'\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n\nexport interface TextProps extends HTMLAttributes<HTMLElement> {\n as?: TextElement\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\n}\n\n/**\n * Typography primitive. `variant` covers every font role in the token set,\n * `tone` every `color.text.*` role.\n *\n * Pick `as` for semantics (a heading role does not imply an `<h2>`).\n */\nexport function Text({\n as = 'p',\n variant = 'body.md',\n tone = 'primary',\n align,\n truncate = false,\n className,\n style,\n children,\n ...rest\n}: TextProps) {\n const Component: ElementType = as\n\n return (\n <Component\n data-mason-component=\"text\"\n data-variant={variant}\n className={mergeClassName(className)}\n style={{ ...textStyle({ variant, tone, align, truncate }), ...style }}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { spacingVar, type Level } from './styles.js'\n\nexport type StackDirection = 'row' | 'column'\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline'\nexport type StackJustify = 'start' | 'center' | 'end' | 'between'\n\nconst FLEX_ALIGN = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n} as const satisfies Record<StackAlign, string>\n\nconst FLEX_JUSTIFY = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n} as const satisfies Record<StackJustify, string>\n\n/** Row gaps come from `spacing.inline`, column gaps from `spacing.stack`. */\nexport function stackStyle({\n direction = 'column',\n gap = 'md',\n align,\n justify,\n wrap = false,\n inline = false,\n}: {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}): CSSProperties {\n return {\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: spacingVar(direction === 'row' ? 'inline' : 'stack', gap),\n flexWrap: wrap ? 'wrap' : 'nowrap',\n minWidth: 0,\n ...(align ? { alignItems: FLEX_ALIGN[align] } : null),\n ...(justify ? { justifyContent: FLEX_JUSTIFY[justify] } : null),\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName, type Level } from './styles.js'\nimport {\n stackStyle,\n type StackAlign,\n type StackDirection,\n type StackJustify,\n} from './stackStyles.js'\n\nexport type {\n StackAlign,\n StackDirection,\n StackJustify,\n} from './stackStyles.js'\n\nexport interface StackProps extends HTMLAttributes<HTMLDivElement> {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}\n\n/** Layout primitive — flex row/column with token gaps. */\nexport function Stack({\n direction = 'column',\n gap = 'md',\n align,\n justify,\n wrap = false,\n inline = false,\n className,\n style,\n children,\n ...rest\n}: StackProps) {\n return (\n <div\n data-mason-component=\"stack\"\n data-direction={direction}\n className={mergeClassName(className)}\n style={{\n ...stackStyle({ direction, gap, align, justify, wrap, inline }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n shadowVar,\n spacingVar,\n type Level,\n type RadiusLevel,\n type ShadowLevel,\n} from './styles.js'\n\nexport type CardTone = 'surface' | 'canvas' | 'elevated'\n\nconst TONE_BG = {\n surface: 'color.bg.surface',\n canvas: 'color.bg.canvas',\n elevated: 'color.bg.elevated',\n} as const\n\nexport function cardStyle({\n padding = 'md',\n elevation = 'sm',\n radius = 'md',\n tone = 'surface',\n bordered = true,\n}: {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}): CSSProperties {\n return {\n display: 'block',\n padding: spacingVar('inset', padding),\n backgroundColor: cssVar(TONE_BG[tone]),\n color: cssVar('color.text.primary'),\n border: bordered ? `1px solid ${cssVar('color.border.subtle')}` : 'none',\n borderRadius: radiusVar(radius),\n boxShadow: shadowVar(elevation),\n boxSizing: 'border-box',\n minWidth: 0,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport {\n mergeClassName,\n type Level,\n type RadiusLevel,\n type ShadowLevel,\n} from './styles.js'\nimport { cardStyle, type CardTone } from './cardStyles.js'\n\nexport type { CardTone } from './cardStyles.js'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}\n\n/** Surface primitive — background, border, radius and shadow from tokens. */\nexport function Card({\n padding = 'md',\n elevation = 'sm',\n radius = 'md',\n tone = 'surface',\n bordered = true,\n className,\n style,\n children,\n ...rest\n}: CardProps) {\n return (\n <div\n data-mason-component=\"card\"\n data-tone={tone}\n className={mergeClassName(className)}\n style={{\n ...cardStyle({ padding, elevation, radius, tone, bordered }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar } from './styles.js'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport function dividerStyle(orientation: DividerOrientation = 'horizontal'): CSSProperties {\n const line = `1px solid ${cssVar('color.border.subtle')}`\n\n if (orientation === 'vertical') {\n return {\n alignSelf: 'stretch',\n width: 0,\n minHeight: '1em',\n margin: 0,\n border: 'none',\n borderInlineStart: line,\n }\n }\n\n return {\n width: '100%',\n height: 0,\n margin: 0,\n border: 'none',\n borderBlockStart: line,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { dividerStyle, type DividerOrientation } from './dividerStyles.js'\n\nexport type { DividerOrientation } from './dividerStyles.js'\n\nexport interface DividerProps extends HTMLAttributes<HTMLHRElement> {\n orientation?: DividerOrientation\n}\n\n/** Separator line. `<hr>` already carries the separator role. */\nexport function Divider({\n orientation = 'horizontal',\n className,\n style,\n ...rest\n}: DividerProps) {\n return (\n <hr\n data-mason-component=\"divider\"\n data-orientation={orientation}\n aria-orientation={orientation === 'vertical' ? 'vertical' : undefined}\n className={mergeClassName(className)}\n style={{ ...dividerStyle(orientation), ...style }}\n {...rest}\n />\n )\n}\n","import type { CSSProperties } from 'react'\nimport { radiusVar, textColorVar } from './styles.js'\n\nexport type LinkTone = 'link' | 'inherit'\nexport type LinkUnderline = 'hover' | 'always' | 'none'\n\n/** Link inherits typography from its container so it can sit inside Text. */\nexport function linkStyle({\n tone = 'link',\n underline = 'hover',\n}: {\n tone?: LinkTone\n underline?: LinkUnderline\n}): CSSProperties {\n return {\n color: tone === 'inherit' ? 'inherit' : textColorVar('link'),\n textDecoration: underline === 'always' ? 'underline' : 'none',\n textUnderlineOffset: '0.15em',\n borderRadius: radiusVar('sm'),\n cursor: 'pointer',\n }\n}\n","import type { AnchorHTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { linkStyle, type LinkTone, type LinkUnderline } from './linkStyles.js'\n\nexport type { LinkTone, LinkUnderline } from './linkStyles.js'\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n tone?: LinkTone\n underline?: LinkUnderline\n /** Adds `target=\"_blank\"` and a safe `rel`. */\n external?: boolean\n}\n\n/**\n * Navigational anchor. Typography is inherited, so it composes inside Text.\n *\n * For client-side routing, pass the router's component via `asChild`-style\n * composition on the consumer side (`<Link href>` stays a plain `<a>`).\n */\nexport function Link({\n tone = 'link',\n underline = 'hover',\n external = false,\n className,\n style,\n children,\n ...rest\n}: LinkProps) {\n const externalProps = external\n ? { target: '_blank', rel: 'noreferrer noopener' }\n : null\n\n return (\n <a\n data-mason-component=\"link\"\n data-tone={tone}\n data-underline={underline}\n className={mergeClassName(className)}\n style={{ ...linkStyle({ tone, underline }), ...style }}\n {...externalProps}\n {...rest}\n >\n {children}\n </a>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar } from './styles.js'\n\n/** `inherit` follows the surrounding font size — used inside Button. */\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | 'inherit'\n\nconst SIZE_DIMENSION = {\n sm: cssVar('font.body.sm.size'),\n md: cssVar('font.body.md.size'),\n lg: cssVar('font.display.lg.size'),\n inherit: '1em',\n} as const satisfies Record<SpinnerSize, string>\n\nexport function spinnerStyle(size: SpinnerSize = 'md'): CSSProperties {\n const dimension = SIZE_DIMENSION[size]\n\n return {\n width: dimension,\n height: dimension,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n display: 'inline-block',\n flexShrink: 0,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { spinnerStyle, type SpinnerSize } from './spinnerStyles.js'\n\nexport type { SpinnerSize } from './spinnerStyles.js'\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: SpinnerSize\n /** Announced while loading. Without it the spinner is `aria-hidden`. */\n label?: string\n}\n\n/** Indeterminate loading indicator. The rotation lives in `tokens.css`. */\nexport function Spinner({\n size = 'md',\n label,\n className,\n style,\n ...rest\n}: SpinnerProps) {\n return (\n <span\n data-mason-component=\"spinner\"\n data-size={size}\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={mergeClassName(className)}\n style={{ ...spinnerStyle(size), ...style }}\n {...rest}\n />\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar, typographyStyle, type TextVariant } from './styles.js'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger'\nexport type ButtonSize = 'sm' | 'md' | 'lg'\n\ntype ActionColorPath =\n | `color.action.${ButtonVariant | 'disabled'}.${'bg' | 'text' | 'border'}`\n\nfunction actionColors(variant: ButtonVariant | 'disabled'): {\n bg: ActionColorPath\n text: ActionColorPath\n border: ActionColorPath\n} {\n return {\n bg: `color.action.${variant}.bg`,\n text: `color.action.${variant}.text`,\n border: `color.action.${variant}.border`,\n }\n}\n\n/**\n * Size ladder — padding / radius / type. Height comes from content, not min-height.\n */\nconst sizeStyles = {\n sm: {\n paddingBlock: cssVar('spacing.inset.sm'),\n paddingInline: cssVar('spacing.inset.md'),\n gap: cssVar('spacing.inline.sm'),\n radius: cssVar('radius.sm'),\n font: 'label.sm' as TextVariant,\n },\n md: {\n paddingBlock: cssVar('spacing.inset.md'),\n paddingInline: cssVar('spacing.inset.lg'),\n gap: cssVar('spacing.inline.md'),\n radius: cssVar('radius.md'),\n font: 'label.md' as TextVariant,\n },\n lg: {\n paddingBlock: cssVar('spacing.inset.lg'),\n paddingInline: `calc(${cssVar('spacing.inset.lg')} + ${cssVar('spacing.inset.md')})`,\n gap: cssVar('spacing.inline.md'),\n radius: cssVar('radius.lg'),\n font: 'label.lg' as TextVariant,\n },\n} as const satisfies Record<\n ButtonSize,\n {\n paddingBlock: string\n paddingInline: string\n gap: string\n radius: string\n font: TextVariant\n }\n>\n\nexport function buttonStyle({\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n}: {\n variant?: ButtonVariant\n size?: ButtonSize\n disabled?: boolean\n loading?: boolean\n}): CSSProperties {\n const inactive = disabled || loading\n const colors = actionColors(inactive ? 'disabled' : variant)\n const sizing = sizeStyles[size]\n\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: sizing.gap,\n paddingBlock: sizing.paddingBlock,\n paddingInline: sizing.paddingInline,\n margin: 0,\n backgroundColor: cssVar(colors.bg),\n color: cssVar(colors.text),\n border: `1px solid ${cssVar(colors.border)}`,\n borderRadius: sizing.radius,\n boxSizing: 'border-box',\n ...typographyStyle(sizing.font),\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n }\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { Spinner } from './Spinner.js'\nimport { buttonStyle, type ButtonSize, type ButtonVariant } from './buttonStyles.js'\n\nexport type { ButtonSize, ButtonVariant } from './buttonStyles.js'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n leadingSlot?: ReactNode\n trailingSlot?: ReactNode\n}\n\n/**\n * Primary action component. Native `<button>` with token-backed styles.\n *\n * Icon-only usage requires an `aria-label`.\n */\nexport function Button({\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n leadingSlot,\n trailingSlot,\n className,\n style,\n children,\n type = 'button',\n ...rest\n}: ButtonProps) {\n const isDisabled = disabled || loading\n\n return (\n <button\n type={type}\n data-mason-component=\"button\"\n data-variant={variant}\n data-size={size}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n className={mergeClassName(className)}\n style={{\n ...buttonStyle({ variant, size, disabled, loading }),\n ...style,\n }}\n {...rest}\n >\n {loading ? (\n <Spinner size=\"inherit\" data-mason-slot=\"spinner\" />\n ) : leadingSlot ? (\n <span data-mason-slot=\"leading\">{leadingSlot}</span>\n ) : null}\n {children ? <span data-mason-slot=\"label\">{children}</span> : null}\n {trailingSlot && !loading ? (\n <span data-mason-slot=\"trailing\">{trailingSlot}</span>\n ) : null}\n </button>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport type BadgeTone = FeedbackTone | 'neutral'\nexport type BadgeSize = 'sm' | 'md'\n\nexport function badgeStyle({\n tone = 'neutral',\n size = 'sm',\n}: {\n tone?: BadgeTone\n size?: BadgeSize\n}): CSSProperties {\n const colors =\n tone === 'neutral'\n ? {\n bg: cssVar('color.bg.canvas'),\n text: cssVar('color.text.secondary'),\n border: cssVar('color.border.subtle'),\n }\n : {\n bg: cssVar(`color.feedback.${tone}.bg`),\n text: cssVar(`color.feedback.${tone}.text`),\n border: cssVar(`color.feedback.${tone}.border`),\n }\n\n return {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacingVar('inline', 'sm'),\n paddingBlock: '0.125em',\n paddingInline: spacingVar('inset', 'sm'),\n backgroundColor: colors.bg,\n color: colors.text,\n border: `1px solid ${colors.border}`,\n borderRadius: radiusVar('full'),\n ...typographyStyle(size === 'sm' ? 'label.sm' : 'label.md'),\n whiteSpace: 'nowrap',\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { badgeStyle, type BadgeSize, type BadgeTone } from './badgeStyles.js'\n\nexport type { BadgeSize, BadgeTone } from './badgeStyles.js'\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n tone?: BadgeTone\n size?: BadgeSize\n}\n\n/**\n * Compact status chip. Colour carries no meaning on its own — keep the label\n * readable (`활성`, not just a green dot).\n */\nexport function Badge({\n tone = 'neutral',\n size = 'sm',\n className,\n style,\n children,\n ...rest\n}: BadgeProps) {\n return (\n <span\n data-mason-component=\"badge\"\n data-tone={tone}\n data-size={size}\n className={mergeClassName(className)}\n style={{ ...badgeStyle({ tone, size }), ...style }}\n {...rest}\n >\n {children}\n </span>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport function calloutStyle(tone: FeedbackTone = 'info'): CSSProperties {\n return {\n display: 'flex',\n gap: spacingVar('inline', 'md'),\n padding: spacingVar('inset', 'md'),\n backgroundColor: cssVar(`color.feedback.${tone}.bg`),\n color: cssVar(`color.feedback.${tone}.text`),\n border: `1px solid ${cssVar(`color.feedback.${tone}.border`)}`,\n borderRadius: radiusVar('md'),\n boxSizing: 'border-box',\n ...typographyStyle('body.md'),\n }\n}\n\nexport function calloutContentStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function calloutTitleStyle(): CSSProperties {\n return { margin: 0, ...typographyStyle('label.md') }\n}\n\nexport function calloutBodyStyle(): CSSProperties {\n return { margin: 0, ...typographyStyle('body.sm') }\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { mergeClassName, type FeedbackTone } from './styles.js'\nimport {\n calloutBodyStyle,\n calloutContentStyle,\n calloutStyle,\n calloutTitleStyle,\n} from './calloutStyles.js'\n\n/** `title` is the heading slot, so the native tooltip attribute is not available. */\nexport interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n tone?: FeedbackTone\n title?: ReactNode\n iconSlot?: ReactNode\n}\n\n/**\n * Inline message block for page-level feedback.\n *\n * It is static content by default — for something that appears in response to\n * an action, pass `role=\"status\"` (or `\"alert\"` when it must interrupt).\n */\nexport function Callout({\n tone = 'info',\n title,\n iconSlot,\n className,\n style,\n children,\n ...rest\n}: CalloutProps) {\n return (\n <div\n data-mason-component=\"callout\"\n data-tone={tone}\n className={mergeClassName(className)}\n style={{ ...calloutStyle(tone), ...style }}\n {...rest}\n >\n {iconSlot ? (\n <span data-mason-slot=\"icon\" aria-hidden=\"true\">\n {iconSlot}\n </span>\n ) : null}\n <div data-mason-slot=\"content\" style={calloutContentStyle()}>\n {title ? (\n <p data-mason-slot=\"title\" style={calloutTitleStyle()}>\n {title}\n </p>\n ) : null}\n {children ? (\n <div data-mason-slot=\"body\" style={calloutBodyStyle()}>\n {children}\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import { useId, type CSSProperties, type ReactNode } from 'react'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n fieldLabelStyle,\n fieldRootStyle,\n type FieldSize,\n} from './fieldStyles.js'\n\nexport interface FieldIds {\n controlId: string\n descriptionId: string\n errorId: string\n /** `aria-describedby` value, or undefined when there is nothing to describe. */\n describedBy: string | undefined\n}\n\n/** Stable ids wiring a control to its label, description and error. */\nexport function useFieldIds({\n id,\n description,\n error,\n}: {\n id?: string\n description?: ReactNode\n error?: ReactNode\n}): FieldIds {\n const generated = useId()\n const controlId = id ?? `mason-field-${generated}`\n const descriptionId = `${controlId}-description`\n const errorId = `${controlId}-error`\n const describedBy =\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n\n return { controlId, descriptionId, errorId, describedBy }\n}\n\nexport interface FieldFrameProps {\n /** `data-mason-component` value of the wrapper, e.g. `text-field`. */\n component: string\n ids: FieldIds\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n className?: string\n style?: CSSProperties\n children: ReactNode\n}\n\n/**\n * Shared label / description / error chrome for form controls.\n * Internal — consumers use TextField, Select or Checkbox.\n */\nexport function FieldFrame({\n component,\n ids,\n label,\n description,\n error,\n size = 'md',\n invalid = false,\n disabled = false,\n className,\n style,\n children,\n}: FieldFrameProps) {\n return (\n <div\n data-mason-component={component}\n data-size={size}\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...fieldRootStyle(), ...style }}\n >\n {label ? (\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={fieldLabelStyle(size)}\n >\n {label}\n </label>\n ) : null}\n {children}\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type Level,\n type TextVariant,\n} from './styles.js'\n\n/** Field sizes reuse the spacing ladder — sm / md / lg. */\nexport type FieldSize = Level\n\nconst CONTROL_FONT = {\n sm: 'body.sm',\n md: 'body.md',\n lg: 'body.lg',\n} as const satisfies Record<FieldSize, TextVariant>\n\nconst LABEL_FONT = {\n sm: 'label.sm',\n md: 'label.md',\n lg: 'label.lg',\n} as const satisfies Record<FieldSize, TextVariant>\n\nconst CONTROL_PADDING_BLOCK = { sm: 'sm', md: 'sm', lg: 'md' } as const satisfies Record<\n FieldSize,\n Level\n>\n\nconst CONTROL_PADDING_INLINE = { sm: 'sm', md: 'md', lg: 'md' } as const satisfies Record<\n FieldSize,\n Level\n>\n\nexport function fieldRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function fieldLabelStyle(size: FieldSize = 'md'): CSSProperties {\n return {\n color: cssVar('color.text.primary'),\n ...typographyStyle(LABEL_FONT[size]),\n }\n}\n\nexport function fieldControlStyle({\n size = 'md',\n invalid = false,\n disabled = false,\n}: {\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n}): CSSProperties {\n return {\n width: '100%',\n boxSizing: 'border-box',\n margin: 0,\n paddingBlock: spacingVar('inset', CONTROL_PADDING_BLOCK[size]),\n paddingInline: spacingVar('inset', CONTROL_PADDING_INLINE[size]),\n backgroundColor: disabled\n ? cssVar('color.action.disabled.bg')\n : cssVar('color.field.bg'),\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.field.text'),\n border: `1px solid ${cssVar(\n invalid ? 'color.field.borderInvalid' : 'color.field.border',\n )}`,\n borderRadius: radiusVar('md'),\n ...typographyStyle(CONTROL_FONT[size]),\n }\n}\n\nexport function fieldDescriptionStyle(): CSSProperties {\n return {\n margin: 0,\n color: cssVar('color.text.secondary'),\n ...typographyStyle('body.sm'),\n }\n}\n\nexport function fieldErrorStyle(): CSSProperties {\n return {\n margin: 0,\n color: cssVar('color.text.danger'),\n ...typographyStyle('body.sm'),\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { FieldFrame, useFieldIds } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport type { FieldSize } from './fieldStyles.js'\n\nexport interface TextFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: ReactNode\n description?: ReactNode\n /** Present error text switches the field to its invalid styling. */\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n}\n\n/**\n * Labelled text input. `className` / `style` apply to the wrapper; every other\n * prop goes to the native `<input>`.\n */\nexport function TextField({\n label,\n description,\n error,\n size = 'md',\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: TextFieldProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <FieldFrame\n component=\"text-field\"\n ids={ids}\n label={label}\n description={description}\n error={error}\n size={size}\n invalid={isInvalid}\n disabled={disabled}\n className={className}\n style={style}\n >\n <input\n {...rest}\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={fieldControlStyle({ size, invalid: isInvalid, disabled })}\n />\n </FieldFrame>\n )\n}\n","import type { ReactNode, SelectHTMLAttributes } from 'react'\nimport { FieldFrame, useFieldIds } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport interface SelectProps\n extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n /** Rendered as a leading empty `<option>`. */\n placeholder?: string\n}\n\n/**\n * Labelled native `<select>`. Children are the `<option>` elements, so the\n * browser's own popup and keyboard behaviour is preserved.\n */\nexport function Select({\n label,\n description,\n error,\n size = 'md',\n invalid,\n placeholder,\n id,\n disabled = false,\n className,\n style,\n children,\n ...rest\n}: SelectProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <FieldFrame\n component=\"select\"\n ids={ids}\n label={label}\n description={description}\n error={error}\n size={size}\n invalid={isInvalid}\n disabled={disabled}\n className={className}\n style={style}\n >\n <select\n {...rest}\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={fieldControlStyle({ size, invalid: isInvalid, disabled })}\n >\n {placeholder ? <option value=\"\">{placeholder}</option> : null}\n {children}\n </select>\n </FieldFrame>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar, spacingVar, typographyStyle } from './styles.js'\n\nexport function checkboxRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function checkboxLabelStyle(disabled = false): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: spacingVar('inline', 'sm'),\n cursor: disabled ? 'not-allowed' : 'pointer',\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.text.primary'),\n ...typographyStyle('body.md'),\n }\n}\n\nexport function checkboxControlStyle(): CSSProperties {\n return {\n width: '1em',\n height: '1em',\n margin: 0,\n marginBlockStart: '0.15em',\n accentColor: cssVar('color.action.primary.bg'),\n flexShrink: 0,\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { useFieldIds } from './field.js'\nimport { mergeClassName } from './styles.js'\nimport { fieldDescriptionStyle, fieldErrorStyle } from './fieldStyles.js'\nimport {\n checkboxControlStyle,\n checkboxLabelStyle,\n checkboxRootStyle,\n} from './checkboxStyles.js'\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n invalid?: boolean\n}\n\n/**\n * Native checkbox with a token-backed label row.\n * The check mark uses `accent-color`, so platform behaviour is untouched.\n */\nexport function Checkbox({\n label,\n description,\n error,\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: CheckboxProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <div\n data-mason-component=\"checkbox\"\n data-invalid={isInvalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...checkboxRootStyle(), ...style }}\n >\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={checkboxLabelStyle(disabled)}\n >\n <input\n {...rest}\n type=\"checkbox\"\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={checkboxControlStyle()}\n />\n {label ? <span data-mason-slot=\"label-text\">{label}</span> : null}\n </label>\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n"],"mappings":"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","names":["jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/provider.tsx","../src/styles.ts","../src/textStyles.ts","../src/Text.tsx","../src/stackStyles.ts","../src/Stack.tsx","../src/cardStyles.ts","../src/Card.tsx","../src/dividerStyles.ts","../src/Divider.tsx","../src/linkStyles.ts","../src/Link.tsx","../src/spinnerStyles.ts","../src/Spinner.tsx","../src/buttonStyles.ts","../src/Button.tsx","../src/badgeStyles.ts","../src/Badge.tsx","../src/calloutStyles.ts","../src/Callout.tsx","../src/field.tsx","../src/fieldStyles.ts","../src/TextField.tsx","../src/Select.tsx","../src/checkboxStyles.ts","../src/Checkbox.tsx","../src/radioStyles.ts","../src/Radio.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport type MasonTheme = 'light' | 'dark' | 'system'\n\nexport interface MasonProviderProps {\n children: ReactNode\n theme?: MasonTheme\n}\n\n/** Root provider for mason-ds React apps. */\nexport function MasonProvider({ children, theme = 'light' }: MasonProviderProps) {\n return <div data-mason-provider data-mason-theme={theme}>{children}</div>\n}\n","import { getSemanticCssVar, type SemanticTokenPath } from '@mason-ds/tokens'\n\n/**\n * Prop unions are derived from the semantic token paths, so adding or removing\n * a token role changes the component API instead of silently drifting from it.\n */\ntype FontRoleOf<Path> = Path extends `font.${infer Role}.family` ? Role : never\ntype TextToneOf<Path> = Path extends `color.text.${infer Tone}` ? Tone : never\ntype FeedbackToneOf<Path> = Path extends `color.feedback.${infer Tone}.bg` ? Tone : never\ntype LevelOf<Path> = Path extends `spacing.inset.${infer Level}` ? Level : never\ntype RadiusOf<Path> = Path extends `radius.${infer Level}` ? Level : never\ntype ShadowOf<Path> = Path extends `shadow.${infer Level}` ? Level : never\n\n/** Typography roles, e.g. `heading.h2`, `body.md`, `code.md`. */\nexport type TextVariant = FontRoleOf<SemanticTokenPath>\n/** Text color roles, e.g. `primary`, `secondary`, `link`, `danger`. */\nexport type TextTone = TextToneOf<SemanticTokenPath>\n/** Status roles shared by Badge / Callout. */\nexport type FeedbackTone = FeedbackToneOf<SemanticTokenPath>\n/** Spacing steps — sm / md / lg. */\nexport type Level = LevelOf<SemanticTokenPath>\nexport type RadiusLevel = RadiusOf<SemanticTokenPath>\nexport type ShadowLevel = ShadowOf<SemanticTokenPath>\n\n/** Reference a semantic token as `var(--mason-*)`. */\nexport function cssVar(path: SemanticTokenPath): string {\n return `var(${getSemanticCssVar(path)})`\n}\n\nexport function spacingVar(axis: 'inset' | 'stack' | 'inline', level: Level): string {\n return cssVar(`spacing.${axis}.${level}`)\n}\n\nexport function radiusVar(level: RadiusLevel): string {\n return cssVar(`radius.${level}`)\n}\n\nexport function shadowVar(level: ShadowLevel): string {\n return cssVar(`shadow.${level}`)\n}\n\nexport function textColorVar(tone: TextTone): string {\n return cssVar(`color.text.${tone}`)\n}\n\nexport function typographyStyle(variant: TextVariant): {\n fontFamily: string\n fontSize: string\n fontWeight: string\n lineHeight: string\n letterSpacing: string\n} {\n return {\n fontFamily: cssVar(`font.${variant}.family`),\n fontSize: cssVar(`font.${variant}.size`),\n fontWeight: cssVar(`font.${variant}.weight`),\n lineHeight: cssVar(`font.${variant}.lineHeight`),\n letterSpacing: cssVar(`font.${variant}.letterSpacing`),\n }\n}\n\nexport function mergeClassName(...parts: (string | undefined)[]): string | undefined {\n const merged = parts.filter(Boolean).join(' ')\n return merged.length > 0 ? merged : undefined\n}\n","import type { CSSProperties } from 'react'\nimport { textColorVar, typographyStyle, type TextTone, type TextVariant } from './styles.js'\n\nexport type TextAlign = 'start' | 'center' | 'end'\n\nexport function textStyle({\n variant = 'body.md',\n tone = 'primary',\n align,\n truncate = false,\n}: {\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\n}): CSSProperties {\n return {\n margin: 0,\n color: textColorVar(tone),\n ...typographyStyle(variant),\n ...(align ? { textAlign: align } : null),\n ...(truncate\n ? { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }\n : null),\n }\n}\n","import type { ElementType, HTMLAttributes } from 'react'\nimport { mergeClassName, type TextTone, type TextVariant } from './styles.js'\nimport { textStyle, type TextAlign } from './textStyles.js'\n\nexport type { TextAlign } from './textStyles.js'\n\nexport type TextElement =\n | 'p'\n | 'span'\n | 'div'\n | 'label'\n | 'strong'\n | 'code'\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n\nexport interface TextProps extends HTMLAttributes<HTMLElement> {\n as?: TextElement\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\n}\n\n/**\n * Typography primitive. `variant` covers every font role in the token set,\n * `tone` every `color.text.*` role.\n *\n * Pick `as` for semantics (a heading role does not imply an `<h2>`).\n */\nexport function Text({\n as = 'p',\n variant = 'body.md',\n tone = 'primary',\n align,\n truncate = false,\n className,\n style,\n children,\n ...rest\n}: TextProps) {\n const Component: ElementType = as\n\n return (\n <Component\n data-mason-component=\"text\"\n data-variant={variant}\n className={mergeClassName(className)}\n style={{ ...textStyle({ variant, tone, align, truncate }), ...style }}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { spacingVar, type Level } from './styles.js'\n\nexport type StackDirection = 'row' | 'column'\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline'\nexport type StackJustify = 'start' | 'center' | 'end' | 'between'\n\nconst FLEX_ALIGN = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n} as const satisfies Record<StackAlign, string>\n\nconst FLEX_JUSTIFY = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n} as const satisfies Record<StackJustify, string>\n\n/** Row gaps come from `spacing.inline`, column gaps from `spacing.stack`. */\nexport function stackStyle({\n direction = 'column',\n gap = 'md',\n align,\n justify,\n wrap = false,\n inline = false,\n}: {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}): CSSProperties {\n return {\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: spacingVar(direction === 'row' ? 'inline' : 'stack', gap),\n flexWrap: wrap ? 'wrap' : 'nowrap',\n minWidth: 0,\n ...(align ? { alignItems: FLEX_ALIGN[align] } : null),\n ...(justify ? { justifyContent: FLEX_JUSTIFY[justify] } : null),\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName, type Level } from './styles.js'\nimport {\n stackStyle,\n type StackAlign,\n type StackDirection,\n type StackJustify,\n} from './stackStyles.js'\n\nexport type {\n StackAlign,\n StackDirection,\n StackJustify,\n} from './stackStyles.js'\n\nexport interface StackProps extends HTMLAttributes<HTMLDivElement> {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}\n\n/** Layout primitive — flex row/column with token gaps. */\nexport function Stack({\n direction = 'column',\n gap = 'md',\n align,\n justify,\n wrap = false,\n inline = false,\n className,\n style,\n children,\n ...rest\n}: StackProps) {\n return (\n <div\n data-mason-component=\"stack\"\n data-direction={direction}\n className={mergeClassName(className)}\n style={{\n ...stackStyle({ direction, gap, align, justify, wrap, inline }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n shadowVar,\n spacingVar,\n type Level,\n type RadiusLevel,\n type ShadowLevel,\n} from './styles.js'\n\nexport type CardTone = 'surface' | 'canvas' | 'elevated'\n\nconst TONE_BG = {\n surface: 'color.bg.surface',\n canvas: 'color.bg.canvas',\n elevated: 'color.bg.elevated',\n} as const\n\nexport function cardStyle({\n padding = 'md',\n elevation = 'sm',\n radius = 'md',\n tone = 'surface',\n bordered = true,\n}: {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}): CSSProperties {\n return {\n display: 'block',\n padding: spacingVar('inset', padding),\n backgroundColor: cssVar(TONE_BG[tone]),\n color: cssVar('color.text.primary'),\n border: bordered ? `1px solid ${cssVar('color.border.subtle')}` : 'none',\n borderRadius: radiusVar(radius),\n boxShadow: shadowVar(elevation),\n boxSizing: 'border-box',\n minWidth: 0,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport {\n mergeClassName,\n type Level,\n type RadiusLevel,\n type ShadowLevel,\n} from './styles.js'\nimport { cardStyle, type CardTone } from './cardStyles.js'\n\nexport type { CardTone } from './cardStyles.js'\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}\n\n/** Surface primitive — background, border, radius and shadow from tokens. */\nexport function Card({\n padding = 'md',\n elevation = 'sm',\n radius = 'md',\n tone = 'surface',\n bordered = true,\n className,\n style,\n children,\n ...rest\n}: CardProps) {\n return (\n <div\n data-mason-component=\"card\"\n data-tone={tone}\n className={mergeClassName(className)}\n style={{\n ...cardStyle({ padding, elevation, radius, tone, bordered }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar } from './styles.js'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport function dividerStyle(orientation: DividerOrientation = 'horizontal'): CSSProperties {\n const line = `1px solid ${cssVar('color.border.subtle')}`\n\n if (orientation === 'vertical') {\n return {\n alignSelf: 'stretch',\n width: 0,\n minHeight: '1em',\n margin: 0,\n border: 'none',\n borderInlineStart: line,\n }\n }\n\n return {\n width: '100%',\n height: 0,\n margin: 0,\n border: 'none',\n borderBlockStart: line,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { dividerStyle, type DividerOrientation } from './dividerStyles.js'\n\nexport type { DividerOrientation } from './dividerStyles.js'\n\nexport interface DividerProps extends HTMLAttributes<HTMLHRElement> {\n orientation?: DividerOrientation\n}\n\n/** Separator line. `<hr>` already carries the separator role. */\nexport function Divider({\n orientation = 'horizontal',\n className,\n style,\n ...rest\n}: DividerProps) {\n return (\n <hr\n data-mason-component=\"divider\"\n data-orientation={orientation}\n aria-orientation={orientation === 'vertical' ? 'vertical' : undefined}\n className={mergeClassName(className)}\n style={{ ...dividerStyle(orientation), ...style }}\n {...rest}\n />\n )\n}\n","import type { CSSProperties } from 'react'\nimport { radiusVar, textColorVar } from './styles.js'\n\nexport type LinkTone = 'link' | 'inherit'\nexport type LinkUnderline = 'hover' | 'always' | 'none'\n\n/** Link inherits typography from its container so it can sit inside Text. */\nexport function linkStyle({\n tone = 'link',\n underline = 'hover',\n}: {\n tone?: LinkTone\n underline?: LinkUnderline\n}): CSSProperties {\n return {\n color: tone === 'inherit' ? 'inherit' : textColorVar('link'),\n textDecoration: underline === 'always' ? 'underline' : 'none',\n textUnderlineOffset: '0.15em',\n borderRadius: radiusVar('sm'),\n cursor: 'pointer',\n }\n}\n","import type { AnchorHTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { linkStyle, type LinkTone, type LinkUnderline } from './linkStyles.js'\n\nexport type { LinkTone, LinkUnderline } from './linkStyles.js'\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n tone?: LinkTone\n underline?: LinkUnderline\n /** Adds `target=\"_blank\"` and a safe `rel`. */\n external?: boolean\n}\n\n/**\n * Navigational anchor. Typography is inherited, so it composes inside Text.\n *\n * For client-side routing, pass the router's component via `asChild`-style\n * composition on the consumer side (`<Link href>` stays a plain `<a>`).\n */\nexport function Link({\n tone = 'link',\n underline = 'hover',\n external = false,\n className,\n style,\n children,\n ...rest\n}: LinkProps) {\n const externalProps = external\n ? { target: '_blank', rel: 'noreferrer noopener' }\n : null\n\n return (\n <a\n data-mason-component=\"link\"\n data-tone={tone}\n data-underline={underline}\n className={mergeClassName(className)}\n style={{ ...linkStyle({ tone, underline }), ...style }}\n {...externalProps}\n {...rest}\n >\n {children}\n </a>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar } from './styles.js'\n\n/** `inherit` follows the surrounding font size — used inside Button. */\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | 'inherit'\n\nconst SIZE_DIMENSION = {\n sm: cssVar('font.body.sm.size'),\n md: cssVar('font.body.md.size'),\n lg: cssVar('font.display.lg.size'),\n inherit: '1em',\n} as const satisfies Record<SpinnerSize, string>\n\nexport function spinnerStyle(size: SpinnerSize = 'md'): CSSProperties {\n const dimension = SIZE_DIMENSION[size]\n\n return {\n width: dimension,\n height: dimension,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n display: 'inline-block',\n flexShrink: 0,\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { spinnerStyle, type SpinnerSize } from './spinnerStyles.js'\n\nexport type { SpinnerSize } from './spinnerStyles.js'\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: SpinnerSize\n /** Announced while loading. Without it the spinner is `aria-hidden`. */\n label?: string\n}\n\n/** Indeterminate loading indicator. The rotation lives in `tokens.css`. */\nexport function Spinner({\n size = 'md',\n label,\n className,\n style,\n ...rest\n}: SpinnerProps) {\n return (\n <span\n data-mason-component=\"spinner\"\n data-size={size}\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={mergeClassName(className)}\n style={{ ...spinnerStyle(size), ...style }}\n {...rest}\n />\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar, typographyStyle, type TextVariant } from './styles.js'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger'\nexport type ButtonSize = 'sm' | 'md' | 'lg'\n\ntype ActionColorPath =\n | `color.action.${ButtonVariant | 'disabled'}.${'bg' | 'text' | 'border'}`\n\nfunction actionColors(variant: ButtonVariant | 'disabled'): {\n bg: ActionColorPath\n text: ActionColorPath\n border: ActionColorPath\n} {\n return {\n bg: `color.action.${variant}.bg`,\n text: `color.action.${variant}.text`,\n border: `color.action.${variant}.border`,\n }\n}\n\n/**\n * Size ladder — padding / radius / type. Height comes from content, not min-height.\n */\nconst sizeStyles = {\n sm: {\n paddingBlock: cssVar('spacing.inset.sm'),\n paddingInline: cssVar('spacing.inset.md'),\n gap: cssVar('spacing.inline.sm'),\n radius: cssVar('radius.sm'),\n font: 'label.sm' as TextVariant,\n },\n md: {\n paddingBlock: cssVar('spacing.inset.md'),\n paddingInline: cssVar('spacing.inset.lg'),\n gap: cssVar('spacing.inline.md'),\n radius: cssVar('radius.md'),\n font: 'label.md' as TextVariant,\n },\n lg: {\n paddingBlock: cssVar('spacing.inset.lg'),\n paddingInline: `calc(${cssVar('spacing.inset.lg')} + ${cssVar('spacing.inset.md')})`,\n gap: cssVar('spacing.inline.md'),\n radius: cssVar('radius.lg'),\n font: 'label.lg' as TextVariant,\n },\n} as const satisfies Record<\n ButtonSize,\n {\n paddingBlock: string\n paddingInline: string\n gap: string\n radius: string\n font: TextVariant\n }\n>\n\nexport function buttonStyle({\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n}: {\n variant?: ButtonVariant\n size?: ButtonSize\n disabled?: boolean\n loading?: boolean\n}): CSSProperties {\n const inactive = disabled || loading\n const colors = actionColors(inactive ? 'disabled' : variant)\n const sizing = sizeStyles[size]\n\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: sizing.gap,\n paddingBlock: sizing.paddingBlock,\n paddingInline: sizing.paddingInline,\n margin: 0,\n backgroundColor: cssVar(colors.bg),\n color: cssVar(colors.text),\n border: `1px solid ${cssVar(colors.border)}`,\n borderRadius: sizing.radius,\n boxSizing: 'border-box',\n ...typographyStyle(sizing.font),\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n }\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { Spinner } from './Spinner.js'\nimport { buttonStyle, type ButtonSize, type ButtonVariant } from './buttonStyles.js'\n\nexport type { ButtonSize, ButtonVariant } from './buttonStyles.js'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n leadingSlot?: ReactNode\n trailingSlot?: ReactNode\n}\n\n/**\n * Primary action component. Native `<button>` with token-backed styles.\n *\n * Icon-only usage requires an `aria-label`.\n */\nexport function Button({\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n leadingSlot,\n trailingSlot,\n className,\n style,\n children,\n type = 'button',\n ...rest\n}: ButtonProps) {\n const isDisabled = disabled || loading\n\n return (\n <button\n type={type}\n data-mason-component=\"button\"\n data-variant={variant}\n data-size={size}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n className={mergeClassName(className)}\n style={{\n ...buttonStyle({ variant, size, disabled, loading }),\n ...style,\n }}\n {...rest}\n >\n {loading ? (\n <Spinner size=\"inherit\" data-mason-slot=\"spinner\" />\n ) : leadingSlot ? (\n <span data-mason-slot=\"leading\">{leadingSlot}</span>\n ) : null}\n {children ? <span data-mason-slot=\"label\">{children}</span> : null}\n {trailingSlot && !loading ? (\n <span data-mason-slot=\"trailing\">{trailingSlot}</span>\n ) : null}\n </button>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport type BadgeTone = FeedbackTone | 'neutral'\nexport type BadgeSize = 'sm' | 'md'\n\nexport function badgeStyle({\n tone = 'neutral',\n size = 'sm',\n}: {\n tone?: BadgeTone\n size?: BadgeSize\n}): CSSProperties {\n const colors =\n tone === 'neutral'\n ? {\n bg: cssVar('color.bg.canvas'),\n text: cssVar('color.text.secondary'),\n border: cssVar('color.border.subtle'),\n }\n : {\n bg: cssVar(`color.feedback.${tone}.bg`),\n text: cssVar(`color.feedback.${tone}.text`),\n border: cssVar(`color.feedback.${tone}.border`),\n }\n\n return {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacingVar('inline', 'sm'),\n paddingBlock: '0.125em',\n paddingInline: spacingVar('inset', 'sm'),\n backgroundColor: colors.bg,\n color: colors.text,\n border: `1px solid ${colors.border}`,\n borderRadius: radiusVar('full'),\n ...typographyStyle(size === 'sm' ? 'label.sm' : 'label.md'),\n whiteSpace: 'nowrap',\n }\n}\n","import type { HTMLAttributes } from 'react'\nimport { mergeClassName } from './styles.js'\nimport { badgeStyle, type BadgeSize, type BadgeTone } from './badgeStyles.js'\n\nexport type { BadgeSize, BadgeTone } from './badgeStyles.js'\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n tone?: BadgeTone\n size?: BadgeSize\n}\n\n/**\n * Compact status chip. Colour carries no meaning on its own — keep the label\n * readable (`활성`, not just a green dot).\n */\nexport function Badge({\n tone = 'neutral',\n size = 'sm',\n className,\n style,\n children,\n ...rest\n}: BadgeProps) {\n return (\n <span\n data-mason-component=\"badge\"\n data-tone={tone}\n data-size={size}\n className={mergeClassName(className)}\n style={{ ...badgeStyle({ tone, size }), ...style }}\n {...rest}\n >\n {children}\n </span>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport function calloutStyle(tone: FeedbackTone = 'info'): CSSProperties {\n return {\n display: 'flex',\n gap: spacingVar('inline', 'md'),\n padding: spacingVar('inset', 'md'),\n backgroundColor: cssVar(`color.feedback.${tone}.bg`),\n color: cssVar(`color.feedback.${tone}.text`),\n border: `1px solid ${cssVar(`color.feedback.${tone}.border`)}`,\n borderRadius: radiusVar('md'),\n boxSizing: 'border-box',\n ...typographyStyle('body.md'),\n }\n}\n\nexport function calloutContentStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function calloutTitleStyle(): CSSProperties {\n return { margin: 0, ...typographyStyle('label.md') }\n}\n\nexport function calloutBodyStyle(): CSSProperties {\n return { margin: 0, ...typographyStyle('body.sm') }\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { mergeClassName, type FeedbackTone } from './styles.js'\nimport {\n calloutBodyStyle,\n calloutContentStyle,\n calloutStyle,\n calloutTitleStyle,\n} from './calloutStyles.js'\n\n/** `title` is the heading slot, so the native tooltip attribute is not available. */\nexport interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n tone?: FeedbackTone\n title?: ReactNode\n iconSlot?: ReactNode\n}\n\n/**\n * Inline message block for page-level feedback.\n *\n * It is static content by default — for something that appears in response to\n * an action, pass `role=\"status\"` (or `\"alert\"` when it must interrupt).\n */\nexport function Callout({\n tone = 'info',\n title,\n iconSlot,\n className,\n style,\n children,\n ...rest\n}: CalloutProps) {\n return (\n <div\n data-mason-component=\"callout\"\n data-tone={tone}\n className={mergeClassName(className)}\n style={{ ...calloutStyle(tone), ...style }}\n {...rest}\n >\n {iconSlot ? (\n <span data-mason-slot=\"icon\" aria-hidden=\"true\">\n {iconSlot}\n </span>\n ) : null}\n <div data-mason-slot=\"content\" style={calloutContentStyle()}>\n {title ? (\n <p data-mason-slot=\"title\" style={calloutTitleStyle()}>\n {title}\n </p>\n ) : null}\n {children ? (\n <div data-mason-slot=\"body\" style={calloutBodyStyle()}>\n {children}\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","import { useId, type CSSProperties, type ReactNode } from 'react'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n fieldLabelStyle,\n fieldRootStyle,\n type FieldSize,\n} from './fieldStyles.js'\n\nexport interface FieldIds {\n controlId: string\n descriptionId: string\n errorId: string\n /** `aria-describedby` value, or undefined when there is nothing to describe. */\n describedBy: string | undefined\n}\n\n/** Stable ids wiring a control to its label, description and error. */\nexport function useFieldIds({\n id,\n description,\n error,\n}: {\n id?: string\n description?: ReactNode\n error?: ReactNode\n}): FieldIds {\n const generated = useId()\n const controlId = id ?? `mason-field-${generated}`\n const descriptionId = `${controlId}-description`\n const errorId = `${controlId}-error`\n const describedBy =\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n\n return { controlId, descriptionId, errorId, describedBy }\n}\n\nexport interface FieldFrameProps {\n /** `data-mason-component` value of the wrapper, e.g. `text-field`. */\n component: string\n ids: FieldIds\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n className?: string\n style?: CSSProperties\n children: ReactNode\n}\n\n/**\n * Shared label / description / error chrome for form controls.\n * Internal — consumers use TextField, Select or Checkbox.\n */\nexport function FieldFrame({\n component,\n ids,\n label,\n description,\n error,\n size = 'md',\n invalid = false,\n disabled = false,\n className,\n style,\n children,\n}: FieldFrameProps) {\n return (\n <div\n data-mason-component={component}\n data-size={size}\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...fieldRootStyle(), ...style }}\n >\n {label ? (\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={fieldLabelStyle(size)}\n >\n {label}\n </label>\n ) : null}\n {children}\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type Level,\n type TextVariant,\n} from './styles.js'\n\n/** Field sizes reuse the spacing ladder — sm / md / lg. */\nexport type FieldSize = Level\n\nconst CONTROL_FONT = {\n sm: 'body.sm',\n md: 'body.md',\n lg: 'body.lg',\n} as const satisfies Record<FieldSize, TextVariant>\n\nconst LABEL_FONT = {\n sm: 'label.sm',\n md: 'label.md',\n lg: 'label.lg',\n} as const satisfies Record<FieldSize, TextVariant>\n\nconst CONTROL_PADDING_BLOCK = { sm: 'sm', md: 'sm', lg: 'md' } as const satisfies Record<\n FieldSize,\n Level\n>\n\nconst CONTROL_PADDING_INLINE = { sm: 'sm', md: 'md', lg: 'md' } as const satisfies Record<\n FieldSize,\n Level\n>\n\nexport function fieldRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function fieldLabelStyle(size: FieldSize = 'md'): CSSProperties {\n return {\n color: cssVar('color.text.primary'),\n ...typographyStyle(LABEL_FONT[size]),\n }\n}\n\nexport function fieldControlStyle({\n size = 'md',\n invalid = false,\n disabled = false,\n}: {\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n}): CSSProperties {\n return {\n width: '100%',\n boxSizing: 'border-box',\n margin: 0,\n paddingBlock: spacingVar('inset', CONTROL_PADDING_BLOCK[size]),\n paddingInline: spacingVar('inset', CONTROL_PADDING_INLINE[size]),\n backgroundColor: disabled\n ? cssVar('color.action.disabled.bg')\n : cssVar('color.field.bg'),\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.field.text'),\n border: `1px solid ${cssVar(\n invalid ? 'color.field.borderInvalid' : 'color.field.border',\n )}`,\n borderRadius: radiusVar('md'),\n ...typographyStyle(CONTROL_FONT[size]),\n }\n}\n\nexport function fieldDescriptionStyle(): CSSProperties {\n return {\n margin: 0,\n color: cssVar('color.text.secondary'),\n ...typographyStyle('body.sm'),\n }\n}\n\nexport function fieldErrorStyle(): CSSProperties {\n return {\n margin: 0,\n color: cssVar('color.text.danger'),\n ...typographyStyle('body.sm'),\n }\n}\n\n/** Native input kept for a11y; the visible chrome is a sibling indicator. */\nexport function visuallyHiddenControlStyle(): CSSProperties {\n return {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n borderWidth: 0,\n borderStyle: 'solid',\n borderColor: 'transparent',\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { FieldFrame, useFieldIds } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport type { FieldSize } from './fieldStyles.js'\n\nexport interface TextFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: ReactNode\n description?: ReactNode\n /** Present error text switches the field to its invalid styling. */\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n}\n\n/**\n * Labelled text input. `className` / `style` apply to the wrapper; every other\n * prop goes to the native `<input>`.\n */\nexport function TextField({\n label,\n description,\n error,\n size = 'md',\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: TextFieldProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <FieldFrame\n component=\"text-field\"\n ids={ids}\n label={label}\n description={description}\n error={error}\n size={size}\n invalid={isInvalid}\n disabled={disabled}\n className={className}\n style={style}\n >\n <input\n {...rest}\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={fieldControlStyle({ size, invalid: isInvalid, disabled })}\n />\n </FieldFrame>\n )\n}\n","import type { ReactNode, SelectHTMLAttributes } from 'react'\nimport { FieldFrame, useFieldIds } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport interface SelectProps\n extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n size?: FieldSize\n invalid?: boolean\n /** Rendered as a leading empty `<option>`. */\n placeholder?: string\n}\n\n/**\n * Labelled native `<select>`. Children are the `<option>` elements, so the\n * browser's own popup and keyboard behaviour is preserved.\n */\nexport function Select({\n label,\n description,\n error,\n size = 'md',\n invalid,\n placeholder,\n id,\n disabled = false,\n className,\n style,\n children,\n ...rest\n}: SelectProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <FieldFrame\n component=\"select\"\n ids={ids}\n label={label}\n description={description}\n error={error}\n size={size}\n invalid={isInvalid}\n disabled={disabled}\n className={className}\n style={style}\n >\n <select\n {...rest}\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={fieldControlStyle({ size, invalid: isInvalid, disabled })}\n >\n {placeholder ? <option value=\"\">{placeholder}</option> : null}\n {children}\n </select>\n </FieldFrame>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { radiusVar, spacingVar, typographyStyle, cssVar } from './styles.js'\n\nconst CONTROL_SIZE = '1.125rem'\n\nexport function checkboxRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function checkboxLabelStyle(disabled = false): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: spacingVar('inline', 'sm'),\n cursor: disabled ? 'not-allowed' : 'pointer',\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.text.primary'),\n ...typographyStyle('body.md'),\n }\n}\n\n/** Geometry only — colors / check mark live in foundationsCss. */\nexport function checkboxIndicatorStyle(): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: CONTROL_SIZE,\n height: CONTROL_SIZE,\n marginBlockStart: '0.2em',\n flexShrink: 0,\n boxSizing: 'border-box',\n borderRadius: radiusVar('sm'),\n borderStyle: 'solid',\n borderWidth: '1.5px',\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { useFieldIds } from './field.js'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n visuallyHiddenControlStyle,\n} from './fieldStyles.js'\nimport {\n checkboxIndicatorStyle,\n checkboxLabelStyle,\n checkboxRootStyle,\n} from './checkboxStyles.js'\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n invalid?: boolean\n}\n\n/**\n * Token-backed checkbox with a drawn indicator.\n * A visually hidden native input keeps form / keyboard behaviour.\n * The check mark is painted with `::after` in foundationsCss.\n */\nexport function Checkbox({\n label,\n description,\n error,\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: CheckboxProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <div\n data-mason-component=\"checkbox\"\n data-invalid={isInvalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...checkboxRootStyle(), ...style }}\n >\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={checkboxLabelStyle(disabled)}\n >\n <input\n {...rest}\n type=\"checkbox\"\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={visuallyHiddenControlStyle()}\n />\n <span data-mason-slot=\"indicator\" aria-hidden=\"true\" style={checkboxIndicatorStyle()} />\n {label ? <span data-mason-slot=\"label-text\">{label}</span> : null}\n </label>\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { cssVar, spacingVar, typographyStyle } from './styles.js'\n\nconst CONTROL_SIZE = '1.125rem'\n\nexport function radioRootStyle(): CSSProperties {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: 0,\n }\n}\n\nexport function radioLabelStyle(disabled = false): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: spacingVar('inline', 'sm'),\n cursor: disabled ? 'not-allowed' : 'pointer',\n color: disabled ? cssVar('color.text.disabled') : cssVar('color.text.primary'),\n ...typographyStyle('body.md'),\n }\n}\n\n/** Geometry only — colors / selected dot live in foundationsCss. */\nexport function radioIndicatorStyle(): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: CONTROL_SIZE,\n height: CONTROL_SIZE,\n marginBlockStart: '0.2em',\n flexShrink: 0,\n boxSizing: 'border-box',\n borderRadius: '999px',\n borderStyle: 'solid',\n borderWidth: '1.5px',\n }\n}\n","import type { InputHTMLAttributes, ReactNode } from 'react'\nimport { useFieldIds } from './field.js'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n visuallyHiddenControlStyle,\n} from './fieldStyles.js'\nimport {\n radioIndicatorStyle,\n radioLabelStyle,\n radioRootStyle,\n} from './radioStyles.js'\n\nexport interface RadioProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: ReactNode\n description?: ReactNode\n error?: ReactNode\n invalid?: boolean\n}\n\n/**\n * Token-backed radio with a drawn indicator.\n * A visually hidden native input keeps form / keyboard behaviour.\n * The selected dot is painted with `::after` in foundationsCss.\n */\nexport function Radio({\n label,\n description,\n error,\n invalid,\n id,\n disabled = false,\n className,\n style,\n ...rest\n}: RadioProps) {\n const ids = useFieldIds({ id, description, error })\n const isInvalid = invalid ?? Boolean(error)\n\n return (\n <div\n data-mason-component=\"radio\"\n data-invalid={isInvalid || undefined}\n data-disabled={disabled || undefined}\n className={mergeClassName(className)}\n style={{ ...radioRootStyle(), ...style }}\n >\n <label\n data-mason-slot=\"label\"\n htmlFor={ids.controlId}\n style={radioLabelStyle(disabled)}\n >\n <input\n {...rest}\n type=\"radio\"\n id={ids.controlId}\n data-mason-slot=\"control\"\n disabled={disabled}\n aria-invalid={isInvalid || undefined}\n aria-describedby={ids.describedBy}\n style={visuallyHiddenControlStyle()}\n />\n <span data-mason-slot=\"indicator\" aria-hidden=\"true\" style={radioIndicatorStyle()} />\n {label ? <span data-mason-slot=\"label-text\">{label}</span> : null}\n </label>\n {description ? (\n <p\n data-mason-slot=\"description\"\n id={ids.descriptionId}\n style={fieldDescriptionStyle()}\n >\n {description}\n </p>\n ) : null}\n {error ? (\n <p\n data-mason-slot=\"error\"\n id={ids.errorId}\n role=\"alert\"\n style={fieldErrorStyle()}\n >\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n"],"mappings":"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","names":["jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","CONTROL_SIZE","jsx","jsxs"]}
package/llms.txt ADDED
@@ -0,0 +1,57 @@
1
+ # @mason-ds/react
2
+
3
+ > React components for mason-ds. Consume **semantic** tokens only (`@mason-ds/tokens/tokens.css`). Palette-first: identity comes from tokens, not hardcoded brand colors.
4
+
5
+ ## Peer / deps
6
+
7
+ - `react`, `react-dom` ^18 || ^19
8
+ - `@mason-ds/tokens` (workspace / same major on npm)
9
+
10
+ ## Setup
11
+
12
+ ```tsx
13
+ import '@mason-ds/tokens/tokens.css'
14
+ import { MasonProvider, Button } from '@mason-ds/react'
15
+
16
+ export function App() {
17
+ return (
18
+ <MasonProvider>
19
+ <Button variant="primary">Save</Button>
20
+ </MasonProvider>
21
+ )
22
+ }
23
+ ```
24
+
25
+ Wrap the tree in `MasonProvider`. Import `tokens.css` (or a `mason-tokens build` output) once at the app root.
26
+
27
+ ## Components
28
+
29
+ Provider: `MasonProvider` (`theme` when light/dark is configured)
30
+
31
+ Primitives: `Text` · `Stack` · `Card` · `Divider` · `Link`
32
+
33
+ Actions / status: `Button` · `Spinner` · `Badge` · `Callout`
34
+
35
+ Forms: `TextField` · `Select` · `Checkbox` · `Radio`
36
+
37
+ Size / spacing / radius levels: **sm / md / lg** only.
38
+
39
+ ## Notable APIs
40
+
41
+ - `Button`: `variant` primary|secondary|ghost|danger · `size` sm|md|lg · `loading` · `disabled` · `leadingSlot` · `trailingSlot` · icon-only needs `aria-label`
42
+ - `Text`: `variant` (font roles e.g. `body.md`) · `tone` (text color roles) · `as`
43
+ - `Checkbox` / `Radio`: drawn indicators; native input kept for a11y; `label` · `description` · `error`
44
+ - Form fields share `label` · `description` · `error` wiring (`aria-describedby`)
45
+
46
+ ## Do / don't
47
+
48
+ - Do: reference semantic CSS variables / token helpers from styles
49
+ - Don't: import `palette*` inside components
50
+ - Vue parity: `@mason-ds/vue` — same components; slots named `leading` / `trailing` instead of `*Slot` props
51
+
52
+ ## Links
53
+
54
+ - npm: https://www.npmjs.com/package/@mason-ds/react
55
+ - Repo: https://github.com/FE-HyunSu/mason-ds/tree/main/packages/react
56
+ - Tokens: `@mason-ds/tokens`
57
+ - License: Apache-2.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mason-ds/react",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Button component for mason-ds",
5
5
  "type": "module",
6
6
  "exports": {
@@ -23,10 +23,11 @@
23
23
  "dist",
24
24
  "README.md",
25
25
  "LICENSE",
26
- "NOTICE"
26
+ "NOTICE",
27
+ "llms.txt"
27
28
  ],
28
29
  "dependencies": {
29
- "@mason-ds/tokens": "0.2.0"
30
+ "@mason-ds/tokens": "0.2.1"
30
31
  },
31
32
  "peerDependencies": {
32
33
  "react": "^18.0.0 || ^19.0.0",