@mason-ds/vue 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 +207 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +101 -3
- package/dist/index.d.ts +101 -3
- package/dist/index.js +206 -8
- package/dist/index.js.map +1 -1
- package/llms.txt +57 -0
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -825,6 +825,21 @@ function fieldErrorStyle() {
|
|
|
825
825
|
...typographyStyle("body.sm")
|
|
826
826
|
};
|
|
827
827
|
}
|
|
828
|
+
function visuallyHiddenControlStyle() {
|
|
829
|
+
return {
|
|
830
|
+
position: "absolute",
|
|
831
|
+
width: "1px",
|
|
832
|
+
height: "1px",
|
|
833
|
+
padding: "0",
|
|
834
|
+
margin: "-1px",
|
|
835
|
+
overflow: "hidden",
|
|
836
|
+
clip: "rect(0, 0, 0, 0)",
|
|
837
|
+
whiteSpace: "nowrap",
|
|
838
|
+
borderWidth: "0",
|
|
839
|
+
borderStyle: "solid",
|
|
840
|
+
borderColor: "transparent"
|
|
841
|
+
};
|
|
842
|
+
}
|
|
828
843
|
|
|
829
844
|
// src/field.ts
|
|
830
845
|
var fieldSeq = 0;
|
|
@@ -1112,6 +1127,7 @@ var Select = defineComponent12({
|
|
|
1112
1127
|
import { defineComponent as defineComponent13, h as h14 } from "vue";
|
|
1113
1128
|
|
|
1114
1129
|
// src/checkboxStyles.ts
|
|
1130
|
+
var CONTROL_SIZE = "1.125rem";
|
|
1115
1131
|
function checkboxRootStyle() {
|
|
1116
1132
|
return {
|
|
1117
1133
|
display: "flex",
|
|
@@ -1130,14 +1146,19 @@ function checkboxLabelStyle(disabled = false) {
|
|
|
1130
1146
|
...typographyStyle("body.md")
|
|
1131
1147
|
};
|
|
1132
1148
|
}
|
|
1133
|
-
function
|
|
1149
|
+
function checkboxIndicatorStyle() {
|
|
1134
1150
|
return {
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1151
|
+
display: "inline-flex",
|
|
1152
|
+
alignItems: "center",
|
|
1153
|
+
justifyContent: "center",
|
|
1154
|
+
width: CONTROL_SIZE,
|
|
1155
|
+
height: CONTROL_SIZE,
|
|
1156
|
+
marginBlockStart: "0.2em",
|
|
1157
|
+
flexShrink: "0",
|
|
1158
|
+
boxSizing: "border-box",
|
|
1159
|
+
borderRadius: radiusVar("sm"),
|
|
1160
|
+
borderStyle: "solid",
|
|
1161
|
+
borderWidth: "1.5px"
|
|
1141
1162
|
};
|
|
1142
1163
|
}
|
|
1143
1164
|
|
|
@@ -1213,7 +1234,12 @@ var Checkbox = defineComponent13({
|
|
|
1213
1234
|
"aria-describedby": ids.describedBy,
|
|
1214
1235
|
...props.modelValue === void 0 ? null : { checked: props.modelValue },
|
|
1215
1236
|
onChange: forwarded ? [emitChange, forwarded] : emitChange,
|
|
1216
|
-
style:
|
|
1237
|
+
style: visuallyHiddenControlStyle()
|
|
1238
|
+
}),
|
|
1239
|
+
h14("span", {
|
|
1240
|
+
"data-mason-slot": "indicator",
|
|
1241
|
+
"aria-hidden": "true",
|
|
1242
|
+
style: checkboxIndicatorStyle()
|
|
1217
1243
|
}),
|
|
1218
1244
|
label ? h14("span", { "data-mason-slot": "label-text" }, label) : null
|
|
1219
1245
|
]
|
|
@@ -1260,6 +1286,177 @@ var Checkbox = defineComponent13({
|
|
|
1260
1286
|
};
|
|
1261
1287
|
}
|
|
1262
1288
|
});
|
|
1289
|
+
|
|
1290
|
+
// src/Radio.ts
|
|
1291
|
+
import { defineComponent as defineComponent14, h as h15 } from "vue";
|
|
1292
|
+
|
|
1293
|
+
// src/radioStyles.ts
|
|
1294
|
+
var CONTROL_SIZE2 = "1.125rem";
|
|
1295
|
+
function radioRootStyle() {
|
|
1296
|
+
return {
|
|
1297
|
+
display: "flex",
|
|
1298
|
+
flexDirection: "column",
|
|
1299
|
+
gap: spacingVar("stack", "sm"),
|
|
1300
|
+
minWidth: "0"
|
|
1301
|
+
};
|
|
1302
|
+
}
|
|
1303
|
+
function radioLabelStyle(disabled = false) {
|
|
1304
|
+
return {
|
|
1305
|
+
display: "inline-flex",
|
|
1306
|
+
alignItems: "flex-start",
|
|
1307
|
+
gap: spacingVar("inline", "sm"),
|
|
1308
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
1309
|
+
color: disabled ? cssVar("color.text.disabled") : cssVar("color.text.primary"),
|
|
1310
|
+
...typographyStyle("body.md")
|
|
1311
|
+
};
|
|
1312
|
+
}
|
|
1313
|
+
function radioIndicatorStyle() {
|
|
1314
|
+
return {
|
|
1315
|
+
display: "inline-flex",
|
|
1316
|
+
alignItems: "center",
|
|
1317
|
+
justifyContent: "center",
|
|
1318
|
+
width: CONTROL_SIZE2,
|
|
1319
|
+
height: CONTROL_SIZE2,
|
|
1320
|
+
marginBlockStart: "0.2em",
|
|
1321
|
+
flexShrink: "0",
|
|
1322
|
+
boxSizing: "border-box",
|
|
1323
|
+
borderRadius: "999px",
|
|
1324
|
+
borderStyle: "solid",
|
|
1325
|
+
borderWidth: "1.5px"
|
|
1326
|
+
};
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
// src/Radio.ts
|
|
1330
|
+
var Radio = defineComponent14({
|
|
1331
|
+
name: "MasonRadio",
|
|
1332
|
+
inheritAttrs: false,
|
|
1333
|
+
props: {
|
|
1334
|
+
label: {
|
|
1335
|
+
type: String,
|
|
1336
|
+
default: void 0
|
|
1337
|
+
},
|
|
1338
|
+
description: {
|
|
1339
|
+
type: String,
|
|
1340
|
+
default: void 0
|
|
1341
|
+
},
|
|
1342
|
+
error: {
|
|
1343
|
+
type: String,
|
|
1344
|
+
default: void 0
|
|
1345
|
+
},
|
|
1346
|
+
invalid: {
|
|
1347
|
+
type: Boolean,
|
|
1348
|
+
default: void 0
|
|
1349
|
+
},
|
|
1350
|
+
disabled: {
|
|
1351
|
+
type: Boolean,
|
|
1352
|
+
default: false
|
|
1353
|
+
},
|
|
1354
|
+
id: {
|
|
1355
|
+
type: String,
|
|
1356
|
+
default: void 0
|
|
1357
|
+
},
|
|
1358
|
+
modelValue: {
|
|
1359
|
+
type: [String, Number, Boolean],
|
|
1360
|
+
default: void 0
|
|
1361
|
+
},
|
|
1362
|
+
value: {
|
|
1363
|
+
type: [String, Number, Boolean],
|
|
1364
|
+
default: void 0
|
|
1365
|
+
}
|
|
1366
|
+
},
|
|
1367
|
+
emits: ["update:modelValue"],
|
|
1368
|
+
setup(props, { slots, attrs, emit }) {
|
|
1369
|
+
const autoId = nextFieldId();
|
|
1370
|
+
return () => {
|
|
1371
|
+
const {
|
|
1372
|
+
class: attrClass,
|
|
1373
|
+
style: attrStyle,
|
|
1374
|
+
onChange: attrChange,
|
|
1375
|
+
...controlAttrs
|
|
1376
|
+
} = attrs;
|
|
1377
|
+
const label = slots.label?.() ?? props.label;
|
|
1378
|
+
const description = slots.description?.() ?? props.description;
|
|
1379
|
+
const error = slots.error?.() ?? props.error;
|
|
1380
|
+
const invalid = props.invalid ?? Boolean(error);
|
|
1381
|
+
const ids = fieldIds(props.id ?? autoId, Boolean(description), Boolean(error));
|
|
1382
|
+
const emitChange = (event) => {
|
|
1383
|
+
const input = event.target;
|
|
1384
|
+
emit("update:modelValue", props.value === void 0 ? input.value : props.value);
|
|
1385
|
+
};
|
|
1386
|
+
const forwarded = attrChange;
|
|
1387
|
+
const checked = props.modelValue === void 0 || props.value === void 0 ? void 0 : props.modelValue === props.value;
|
|
1388
|
+
const children = [
|
|
1389
|
+
h15(
|
|
1390
|
+
"label",
|
|
1391
|
+
{
|
|
1392
|
+
"data-mason-slot": "label",
|
|
1393
|
+
for: ids.controlId,
|
|
1394
|
+
style: radioLabelStyle(props.disabled)
|
|
1395
|
+
},
|
|
1396
|
+
[
|
|
1397
|
+
h15("input", {
|
|
1398
|
+
...controlAttrs,
|
|
1399
|
+
type: "radio",
|
|
1400
|
+
id: ids.controlId,
|
|
1401
|
+
"data-mason-slot": "control",
|
|
1402
|
+
disabled: props.disabled,
|
|
1403
|
+
value: props.value,
|
|
1404
|
+
"aria-invalid": invalid || void 0,
|
|
1405
|
+
"aria-describedby": ids.describedBy,
|
|
1406
|
+
...checked === void 0 ? null : { checked },
|
|
1407
|
+
onChange: forwarded ? [emitChange, forwarded] : emitChange,
|
|
1408
|
+
style: visuallyHiddenControlStyle()
|
|
1409
|
+
}),
|
|
1410
|
+
h15("span", {
|
|
1411
|
+
"data-mason-slot": "indicator",
|
|
1412
|
+
"aria-hidden": "true",
|
|
1413
|
+
style: radioIndicatorStyle()
|
|
1414
|
+
}),
|
|
1415
|
+
label ? h15("span", { "data-mason-slot": "label-text" }, label) : null
|
|
1416
|
+
]
|
|
1417
|
+
)
|
|
1418
|
+
];
|
|
1419
|
+
if (description) {
|
|
1420
|
+
children.push(
|
|
1421
|
+
h15(
|
|
1422
|
+
"p",
|
|
1423
|
+
{
|
|
1424
|
+
"data-mason-slot": "description",
|
|
1425
|
+
id: ids.descriptionId,
|
|
1426
|
+
style: fieldDescriptionStyle()
|
|
1427
|
+
},
|
|
1428
|
+
description
|
|
1429
|
+
)
|
|
1430
|
+
);
|
|
1431
|
+
}
|
|
1432
|
+
if (error) {
|
|
1433
|
+
children.push(
|
|
1434
|
+
h15(
|
|
1435
|
+
"p",
|
|
1436
|
+
{
|
|
1437
|
+
"data-mason-slot": "error",
|
|
1438
|
+
id: ids.errorId,
|
|
1439
|
+
role: "alert",
|
|
1440
|
+
style: fieldErrorStyle()
|
|
1441
|
+
},
|
|
1442
|
+
error
|
|
1443
|
+
)
|
|
1444
|
+
);
|
|
1445
|
+
}
|
|
1446
|
+
return h15(
|
|
1447
|
+
"div",
|
|
1448
|
+
{
|
|
1449
|
+
"data-mason-component": "radio",
|
|
1450
|
+
"data-invalid": invalid || void 0,
|
|
1451
|
+
"data-disabled": props.disabled || void 0,
|
|
1452
|
+
class: mergeClassName(attrClass),
|
|
1453
|
+
style: [radioRootStyle(), attrStyle]
|
|
1454
|
+
},
|
|
1455
|
+
children
|
|
1456
|
+
);
|
|
1457
|
+
};
|
|
1458
|
+
}
|
|
1459
|
+
});
|
|
1263
1460
|
export {
|
|
1264
1461
|
Badge,
|
|
1265
1462
|
Button,
|
|
@@ -1269,6 +1466,7 @@ export {
|
|
|
1269
1466
|
Divider,
|
|
1270
1467
|
Link,
|
|
1271
1468
|
MasonProvider,
|
|
1469
|
+
Radio,
|
|
1272
1470
|
Select,
|
|
1273
1471
|
Spinner,
|
|
1274
1472
|
Stack,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider.ts","../src/Text.ts","../src/styles.ts","../src/textStyles.ts","../src/Stack.ts","../src/stackStyles.ts","../src/Card.ts","../src/cardStyles.ts","../src/Divider.ts","../src/dividerStyles.ts","../src/Link.ts","../src/linkStyles.ts","../src/Button.ts","../src/Spinner.ts","../src/spinnerStyles.ts","../src/buttonStyles.ts","../src/Badge.ts","../src/badgeStyles.ts","../src/Callout.ts","../src/calloutStyles.ts","../src/TextField.ts","../src/field.ts","../src/fieldStyles.ts","../src/Select.ts","../src/Checkbox.ts","../src/checkboxStyles.ts"],"sourcesContent":["import { defineComponent, h, type PropType } from 'vue'\n\nexport type MasonTheme = 'light' | 'dark' | 'system'\n\n/** Root provider for mason-ds Vue apps. */\nexport const MasonProvider = defineComponent({\n name: 'MasonProvider',\n props: {\n theme: {\n type: String as PropType<MasonTheme>,\n default: 'light',\n },\n },\n setup(props, { slots }) {\n return () =>\n h(\n 'div',\n {\n 'data-mason-provider': '',\n 'data-mason-theme': props.theme,\n },\n slots.default?.(),\n )\n },\n})\n\nexport type MasonProviderProps = {\n theme?: MasonTheme\n}\n","import { defineComponent, h, type PropType, type StyleValue } from 'vue'\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\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 const Text = defineComponent({\n name: 'MasonText',\n inheritAttrs: false,\n props: {\n as: {\n type: String as PropType<TextElement>,\n default: 'p',\n },\n variant: {\n type: String as PropType<TextVariant>,\n default: 'body.md',\n },\n tone: {\n type: String as PropType<TextTone>,\n default: 'primary',\n },\n align: {\n type: String as PropType<TextAlign>,\n default: undefined,\n },\n truncate: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h(\n props.as,\n {\n ...rest,\n 'data-mason-component': 'text',\n 'data-variant': props.variant,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n textStyle({\n variant: props.variant,\n tone: props.tone,\n align: props.align,\n truncate: props.truncate,\n }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type TextProps = {\n as?: TextElement\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\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): Record<string, string> {\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 { 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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\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 { StackAlign, StackDirection, StackJustify } from './stackStyles.js'\n\n/** Layout primitive — flex row/column with token gaps. */\nexport const Stack = defineComponent({\n name: 'MasonStack',\n inheritAttrs: false,\n props: {\n direction: {\n type: String as PropType<StackDirection>,\n default: 'column',\n },\n gap: {\n type: String as PropType<Level>,\n default: 'md',\n },\n align: {\n type: String as PropType<StackAlign>,\n default: undefined,\n },\n justify: {\n type: String as PropType<StackJustify>,\n default: undefined,\n },\n wrap: {\n type: Boolean,\n default: false,\n },\n inline: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h(\n 'div',\n {\n ...rest,\n 'data-mason-component': 'stack',\n 'data-direction': props.direction,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n stackStyle({\n direction: props.direction,\n gap: props.gap,\n align: props.align,\n justify: props.justify,\n wrap: props.wrap,\n inline: props.inline,\n }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type StackProps = {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}\n","import { 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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\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\n/** Surface primitive — background, border, radius and shadow from tokens. */\nexport const Card = defineComponent({\n name: 'MasonCard',\n inheritAttrs: false,\n props: {\n padding: {\n type: String as PropType<Level>,\n default: 'md',\n },\n elevation: {\n type: String as PropType<ShadowLevel>,\n default: 'sm',\n },\n radius: {\n type: String as PropType<RadiusLevel>,\n default: 'md',\n },\n tone: {\n type: String as PropType<CardTone>,\n default: 'surface',\n },\n bordered: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h(\n 'div',\n {\n ...rest,\n 'data-mason-component': 'card',\n 'data-tone': props.tone,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n cardStyle({\n padding: props.padding,\n elevation: props.elevation,\n radius: props.radius,\n tone: props.tone,\n bordered: props.bordered,\n }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type CardProps = {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}\n","import {\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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport { dividerStyle, type DividerOrientation } from './dividerStyles.js'\n\nexport type { DividerOrientation } from './dividerStyles.js'\n\n/** Separator line. `<hr>` already carries the separator role. */\nexport const Divider = defineComponent({\n name: 'MasonDivider',\n inheritAttrs: false,\n props: {\n orientation: {\n type: String as PropType<DividerOrientation>,\n default: 'horizontal',\n },\n },\n setup(props, { attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h('hr', {\n ...rest,\n 'data-mason-component': 'divider',\n 'data-orientation': props.orientation,\n 'aria-orientation': props.orientation === 'vertical' ? 'vertical' : undefined,\n class: mergeClassName(attrClass as string | undefined),\n style: [dividerStyle(props.orientation), attrStyle as StyleValue | undefined],\n })\n }\n },\n})\n\nexport type DividerProps = {\n orientation?: DividerOrientation\n}\n","import { cssVar } from './styles.js'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport function dividerStyle(\n orientation: DividerOrientation = 'horizontal',\n): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport { linkStyle, type LinkTone, type LinkUnderline } from './linkStyles.js'\n\nexport type { LinkTone, LinkUnderline } from './linkStyles.js'\n\n/** Navigational anchor. Typography is inherited, so it composes inside Text. */\nexport const Link = defineComponent({\n name: 'MasonLink',\n inheritAttrs: false,\n props: {\n tone: {\n type: String as PropType<LinkTone>,\n default: 'link',\n },\n underline: {\n type: String as PropType<LinkUnderline>,\n default: 'hover',\n },\n /** Adds `target=\"_blank\"` and a safe `rel`. */\n external: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n const externalAttrs = props.external\n ? { target: '_blank', rel: 'noreferrer noopener' }\n : null\n\n return h(\n 'a',\n {\n 'data-mason-component': 'link',\n 'data-tone': props.tone,\n 'data-underline': props.underline,\n ...externalAttrs,\n ...rest,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n linkStyle({ tone: props.tone, underline: props.underline }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type LinkProps = {\n tone?: LinkTone\n underline?: LinkUnderline\n external?: boolean\n}\n","import { 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}): Record<string, string> {\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 { computed, defineComponent, h, type PropType, type StyleValue } from 'vue'\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\n/**\n * Primary action component. Native `<button>` with token-backed styles.\n *\n * Icon-only usage requires an `aria-label`.\n * Slots: default (label), `leading`, `trailing`.\n */\nexport const Button = defineComponent({\n name: 'MasonButton',\n inheritAttrs: false,\n props: {\n variant: {\n type: String as PropType<ButtonVariant>,\n default: 'primary',\n },\n size: {\n type: String as PropType<ButtonSize>,\n default: 'md',\n },\n loading: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n type: {\n type: String as PropType<'button' | 'submit' | 'reset'>,\n default: 'button',\n },\n },\n setup(props, { slots, attrs }) {\n const isDisabled = computed(() => props.disabled || props.loading)\n\n return () => {\n const children = []\n\n if (props.loading) {\n children.push(h(Spinner, { size: 'inherit', 'data-mason-slot': 'spinner' }))\n } else if (slots.leading) {\n children.push(h('span', { 'data-mason-slot': 'leading' }, slots.leading()))\n }\n\n if (slots.default) {\n children.push(h('span', { 'data-mason-slot': 'label' }, slots.default()))\n }\n\n if (slots.trailing && !props.loading) {\n children.push(h('span', { 'data-mason-slot': 'trailing' }, slots.trailing()))\n }\n\n const attrClass = attrs.class as string | undefined\n const attrStyle = attrs.style as StyleValue | undefined\n\n return h(\n 'button',\n {\n ...attrs,\n type: props.type,\n 'data-mason-component': 'button',\n 'data-variant': props.variant,\n 'data-size': props.size,\n disabled: isDisabled.value,\n 'aria-busy': props.loading || undefined,\n class: mergeClassName(attrClass),\n style: [\n buttonStyle({\n variant: props.variant,\n size: props.size,\n disabled: props.disabled,\n loading: props.loading,\n }),\n attrStyle,\n ],\n },\n children,\n )\n }\n },\n})\n\nexport type ButtonProps = {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n disabled?: boolean\n type?: 'button' | 'submit' | 'reset'\n}\n","import { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport { spinnerStyle, type SpinnerSize } from './spinnerStyles.js'\n\nexport type { SpinnerSize } from './spinnerStyles.js'\n\n/** Indeterminate loading indicator. The rotation lives in `tokens.css`. */\nexport const Spinner = defineComponent({\n name: 'MasonSpinner',\n inheritAttrs: false,\n props: {\n size: {\n type: String as PropType<SpinnerSize>,\n default: 'md',\n },\n /** Announced while loading. Without it the spinner is `aria-hidden`. */\n label: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h('span', {\n ...rest,\n 'data-mason-component': 'spinner',\n 'data-size': props.size,\n role: props.label ? 'status' : undefined,\n 'aria-label': props.label,\n 'aria-hidden': props.label ? undefined : 'true',\n class: mergeClassName(attrClass as string | undefined),\n style: [spinnerStyle(props.size), attrStyle as StyleValue | undefined],\n })\n }\n },\n})\n\nexport type SpinnerProps = {\n size?: SpinnerSize\n label?: string\n}\n","import { 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'): Record<string, string> {\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 { 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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport { badgeStyle, type BadgeSize, type BadgeTone } from './badgeStyles.js'\n\nexport type { BadgeSize, BadgeTone } from './badgeStyles.js'\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 const Badge = defineComponent({\n name: 'MasonBadge',\n inheritAttrs: false,\n props: {\n tone: {\n type: String as PropType<BadgeTone>,\n default: 'neutral',\n },\n size: {\n type: String as PropType<BadgeSize>,\n default: 'sm',\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h(\n 'span',\n {\n ...rest,\n 'data-mason-component': 'badge',\n 'data-tone': props.tone,\n 'data-size': props.size,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n badgeStyle({ tone: props.tone, size: props.size }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type BadgeProps = {\n tone?: BadgeTone\n size?: BadgeSize\n}\n","import {\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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName, type FeedbackTone } from './styles.js'\nimport {\n calloutBodyStyle,\n calloutContentStyle,\n calloutStyle,\n calloutTitleStyle,\n} from './calloutStyles.js'\n\n/**\n * Inline message block for page-level feedback.\n * Slots: default (body), `title`, `icon`.\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 const Callout = defineComponent({\n name: 'MasonCallout',\n inheritAttrs: false,\n props: {\n tone: {\n type: String as PropType<FeedbackTone>,\n default: 'info',\n },\n /** Heading text; the `title` slot takes precedence. */\n title: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n const title = slots.title?.() ?? props.title\n const body = slots.default?.()\n\n const content = []\n if (title) {\n content.push(\n h('p', { 'data-mason-slot': 'title', style: calloutTitleStyle() }, title),\n )\n }\n if (body) {\n content.push(\n h('div', { 'data-mason-slot': 'body', style: calloutBodyStyle() }, body),\n )\n }\n\n const children = []\n if (slots.icon) {\n children.push(\n h(\n 'span',\n { 'data-mason-slot': 'icon', 'aria-hidden': 'true' },\n slots.icon(),\n ),\n )\n }\n children.push(\n h(\n 'div',\n { 'data-mason-slot': 'content', style: calloutContentStyle() },\n content,\n ),\n )\n\n return h(\n 'div',\n {\n ...rest,\n 'data-mason-component': 'callout',\n 'data-tone': props.tone,\n class: mergeClassName(attrClass as string | undefined),\n style: [calloutStyle(props.tone), attrStyle as StyleValue | undefined],\n },\n children,\n )\n }\n },\n})\n\nexport type CalloutProps = {\n tone?: FeedbackTone\n title?: string\n}\n","import {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport function calloutStyle(tone: FeedbackTone = 'info'): Record<string, string> {\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(): Record<string, string> {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: '0',\n }\n}\n\nexport function calloutTitleStyle(): Record<string, string> {\n return { margin: '0', ...typographyStyle('label.md') }\n}\n\nexport function calloutBodyStyle(): Record<string, string> {\n return { margin: '0', ...typographyStyle('body.sm') }\n}\n","import { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { fieldIds, nextFieldId, renderFieldFrame } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport type { FieldSize } from './fieldStyles.js'\n\ntype InputListener = (event: Event) => void\n\n/**\n * Labelled text input. Supports `v-model`.\n * `class` / `style` apply to the wrapper; every other attribute goes to the\n * native `<input>`.\n * Slots: `label`, `description`, `error` (override the same-named props).\n */\nexport const TextField = defineComponent({\n name: 'MasonTextField',\n inheritAttrs: false,\n props: {\n label: {\n type: String,\n default: undefined,\n },\n description: {\n type: String,\n default: undefined,\n },\n /** Present error text switches the field to its invalid styling. */\n error: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<FieldSize>,\n default: 'md',\n },\n invalid: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: String,\n default: undefined,\n },\n },\n emits: ['update:modelValue'],\n setup(props, { slots, attrs, emit }) {\n const autoId = nextFieldId()\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n onInput: attrInput,\n ...controlAttrs\n } = attrs\n\n const label = slots.label?.() ?? props.label\n const description = slots.description?.() ?? props.description\n const error = slots.error?.() ?? props.error\n const invalid = props.invalid ?? Boolean(error)\n const ids = fieldIds(props.id ?? autoId, Boolean(description), Boolean(error))\n\n const emitInput: InputListener = (event) => {\n emit('update:modelValue', (event.target as HTMLInputElement).value)\n }\n const forwarded = attrInput as InputListener | undefined\n\n const control = h('input', {\n ...controlAttrs,\n id: ids.controlId,\n 'data-mason-slot': 'control',\n disabled: props.disabled,\n 'aria-invalid': invalid || undefined,\n 'aria-describedby': ids.describedBy,\n ...(props.modelValue === undefined ? null : { value: props.modelValue }),\n onInput: forwarded ? [emitInput, forwarded] : emitInput,\n style: fieldControlStyle({\n size: props.size,\n invalid,\n disabled: props.disabled,\n }),\n })\n\n return renderFieldFrame({\n component: 'text-field',\n ids,\n size: props.size,\n invalid,\n disabled: props.disabled,\n label,\n description,\n error,\n attrClass: attrClass as string | undefined,\n attrStyle: attrStyle as StyleValue | undefined,\n control,\n })\n }\n },\n})\n\nexport type TextFieldProps = {\n label?: string\n description?: string\n error?: string\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n id?: string\n modelValue?: string\n}\n","import { h, type StyleValue, type VNode, type VNodeChild } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n fieldLabelStyle,\n fieldRootStyle,\n type FieldSize,\n} from './fieldStyles.js'\n\nlet fieldSeq = 0\n\n/** Fallback control id when the consumer does not pass one. */\nexport function nextFieldId(): string {\n fieldSeq += 1\n return `mason-field-${fieldSeq}`\n}\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\nexport function fieldIds(\n controlId: string,\n hasDescription: boolean,\n hasError: boolean,\n): FieldIds {\n const descriptionId = `${controlId}-description`\n const errorId = `${controlId}-error`\n\n return {\n controlId,\n descriptionId,\n errorId,\n describedBy:\n [hasDescription ? descriptionId : null, hasError ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined,\n }\n}\n\n/**\n * Shared label / description / error chrome for form controls.\n * Internal — consumers use TextField, Select or Checkbox.\n */\nexport function renderFieldFrame({\n component,\n ids,\n size,\n invalid,\n disabled,\n label,\n description,\n error,\n attrClass,\n attrStyle,\n control,\n}: {\n component: string\n ids: FieldIds\n size: FieldSize\n invalid: boolean\n disabled: boolean\n label?: VNodeChild\n description?: VNodeChild\n error?: VNodeChild\n attrClass: string | undefined\n attrStyle: StyleValue | undefined\n control: VNode\n}): VNode {\n const children: VNodeChild[] = []\n\n if (label) {\n children.push(\n h(\n 'label',\n {\n 'data-mason-slot': 'label',\n for: ids.controlId,\n style: fieldLabelStyle(size),\n },\n label,\n ),\n )\n }\n\n children.push(control)\n\n if (description) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'description',\n id: ids.descriptionId,\n style: fieldDescriptionStyle(),\n },\n description,\n ),\n )\n }\n\n if (error) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'error',\n id: ids.errorId,\n role: 'alert',\n style: fieldErrorStyle(),\n },\n error,\n ),\n )\n }\n\n return h(\n 'div',\n {\n 'data-mason-component': component,\n 'data-size': size,\n 'data-invalid': invalid || undefined,\n 'data-disabled': disabled || undefined,\n class: mergeClassName(attrClass),\n style: [fieldRootStyle(), attrStyle],\n },\n children,\n )\n}\n","import {\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(): Record<string, string> {\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'): Record<string, string> {\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}): Record<string, string> {\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(): Record<string, string> {\n return {\n margin: '0',\n color: cssVar('color.text.secondary'),\n ...typographyStyle('body.sm'),\n }\n}\n\nexport function fieldErrorStyle(): Record<string, string> {\n return {\n margin: '0',\n color: cssVar('color.text.danger'),\n ...typographyStyle('body.sm'),\n }\n}\n","import { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { fieldIds, nextFieldId, renderFieldFrame } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\ntype ChangeListener = (event: Event) => void\n\n/**\n * Labelled native `<select>`. Supports `v-model`.\n * The default slot holds the `<option>` elements, so the browser's own popup\n * and keyboard behaviour is preserved.\n * Slots: default (options), `label`, `description`, `error`.\n */\nexport const Select = defineComponent({\n name: 'MasonSelect',\n inheritAttrs: false,\n props: {\n label: {\n type: String,\n default: undefined,\n },\n description: {\n type: String,\n default: undefined,\n },\n error: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<FieldSize>,\n default: 'md',\n },\n invalid: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n id: {\n type: String,\n default: undefined,\n },\n /** Rendered as a leading empty `<option>`. */\n placeholder: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: String,\n default: undefined,\n },\n },\n emits: ['update:modelValue'],\n setup(props, { slots, attrs, emit }) {\n const autoId = nextFieldId()\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n onChange: attrChange,\n ...controlAttrs\n } = attrs\n\n const label = slots.label?.() ?? props.label\n const description = slots.description?.() ?? props.description\n const error = slots.error?.() ?? props.error\n const invalid = props.invalid ?? Boolean(error)\n const ids = fieldIds(props.id ?? autoId, Boolean(description), Boolean(error))\n\n const emitChange: ChangeListener = (event) => {\n emit('update:modelValue', (event.target as HTMLSelectElement).value)\n }\n const forwarded = attrChange as ChangeListener | undefined\n\n const options = []\n if (props.placeholder) {\n options.push(h('option', { value: '' }, props.placeholder))\n }\n const provided = slots.default?.()\n if (provided) {\n options.push(provided)\n }\n\n const control = h(\n 'select',\n {\n ...controlAttrs,\n id: ids.controlId,\n 'data-mason-slot': 'control',\n disabled: props.disabled,\n 'aria-invalid': invalid || undefined,\n 'aria-describedby': ids.describedBy,\n ...(props.modelValue === undefined ? null : { value: props.modelValue }),\n onChange: forwarded ? [emitChange, forwarded] : emitChange,\n style: fieldControlStyle({\n size: props.size,\n invalid,\n disabled: props.disabled,\n }),\n },\n options,\n )\n\n return renderFieldFrame({\n component: 'select',\n ids,\n size: props.size,\n invalid,\n disabled: props.disabled,\n label,\n description,\n error,\n attrClass: attrClass as string | undefined,\n attrStyle: attrStyle as StyleValue | undefined,\n control,\n })\n }\n },\n})\n\nexport type SelectProps = {\n label?: string\n description?: string\n error?: string\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n id?: string\n placeholder?: string\n modelValue?: string\n}\n","import { defineComponent, h, type PropType, type StyleValue, type VNodeChild } from 'vue'\nimport { fieldIds, nextFieldId } 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\ntype ChangeListener = (event: Event) => void\n\n/**\n * Native checkbox with a token-backed label row. Supports `v-model`.\n * The check mark uses `accent-color`, so platform behaviour is untouched.\n * Slots: `label`, `description`, `error`.\n */\nexport const Checkbox = defineComponent({\n name: 'MasonCheckbox',\n inheritAttrs: false,\n props: {\n label: {\n type: String,\n default: undefined,\n },\n description: {\n type: String,\n default: undefined,\n },\n error: {\n type: String,\n default: undefined,\n },\n invalid: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n },\n emits: ['update:modelValue'],\n setup(props, { slots, attrs, emit }) {\n const autoId = nextFieldId()\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n onChange: attrChange,\n ...controlAttrs\n } = attrs\n\n const label = slots.label?.() ?? props.label\n const description = slots.description?.() ?? props.description\n const error = slots.error?.() ?? props.error\n const invalid = props.invalid ?? Boolean(error)\n const ids = fieldIds(props.id ?? autoId, Boolean(description), Boolean(error))\n\n const emitChange: ChangeListener = (event) => {\n emit('update:modelValue', (event.target as HTMLInputElement).checked)\n }\n const forwarded = attrChange as ChangeListener | undefined\n\n const children: VNodeChild[] = [\n h(\n 'label',\n {\n 'data-mason-slot': 'label',\n for: ids.controlId,\n style: checkboxLabelStyle(props.disabled),\n },\n [\n h('input', {\n ...controlAttrs,\n type: 'checkbox',\n id: ids.controlId,\n 'data-mason-slot': 'control',\n disabled: props.disabled,\n 'aria-invalid': invalid || undefined,\n 'aria-describedby': ids.describedBy,\n ...(props.modelValue === undefined ? null : { checked: props.modelValue }),\n onChange: forwarded ? [emitChange, forwarded] : emitChange,\n style: checkboxControlStyle(),\n }),\n label ? h('span', { 'data-mason-slot': 'label-text' }, label) : null,\n ],\n ),\n ]\n\n if (description) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'description',\n id: ids.descriptionId,\n style: fieldDescriptionStyle(),\n },\n description,\n ),\n )\n }\n\n if (error) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'error',\n id: ids.errorId,\n role: 'alert',\n style: fieldErrorStyle(),\n },\n error,\n ),\n )\n }\n\n return h(\n 'div',\n {\n 'data-mason-component': 'checkbox',\n 'data-invalid': invalid || undefined,\n 'data-disabled': props.disabled || undefined,\n class: mergeClassName(attrClass as string | undefined),\n style: [checkboxRootStyle(), attrStyle as StyleValue | undefined],\n },\n children,\n )\n }\n },\n})\n\nexport type CheckboxProps = {\n label?: string\n description?: string\n error?: string\n invalid?: boolean\n disabled?: boolean\n id?: string\n modelValue?: boolean\n}\n","import { cssVar, spacingVar, typographyStyle } from './styles.js'\n\nexport function checkboxRootStyle(): Record<string, string> {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: '0',\n }\n}\n\nexport function checkboxLabelStyle(disabled = false): Record<string, string> {\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(): Record<string, string> {\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"],"mappings":"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","names":["defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","h","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider.ts","../src/Text.ts","../src/styles.ts","../src/textStyles.ts","../src/Stack.ts","../src/stackStyles.ts","../src/Card.ts","../src/cardStyles.ts","../src/Divider.ts","../src/dividerStyles.ts","../src/Link.ts","../src/linkStyles.ts","../src/Button.ts","../src/Spinner.ts","../src/spinnerStyles.ts","../src/buttonStyles.ts","../src/Badge.ts","../src/badgeStyles.ts","../src/Callout.ts","../src/calloutStyles.ts","../src/TextField.ts","../src/field.ts","../src/fieldStyles.ts","../src/Select.ts","../src/Checkbox.ts","../src/checkboxStyles.ts","../src/Radio.ts","../src/radioStyles.ts"],"sourcesContent":["import { defineComponent, h, type PropType } from 'vue'\n\nexport type MasonTheme = 'light' | 'dark' | 'system'\n\n/** Root provider for mason-ds Vue apps. */\nexport const MasonProvider = defineComponent({\n name: 'MasonProvider',\n props: {\n theme: {\n type: String as PropType<MasonTheme>,\n default: 'light',\n },\n },\n setup(props, { slots }) {\n return () =>\n h(\n 'div',\n {\n 'data-mason-provider': '',\n 'data-mason-theme': props.theme,\n },\n slots.default?.(),\n )\n },\n})\n\nexport type MasonProviderProps = {\n theme?: MasonTheme\n}\n","import { defineComponent, h, type PropType, type StyleValue } from 'vue'\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\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 const Text = defineComponent({\n name: 'MasonText',\n inheritAttrs: false,\n props: {\n as: {\n type: String as PropType<TextElement>,\n default: 'p',\n },\n variant: {\n type: String as PropType<TextVariant>,\n default: 'body.md',\n },\n tone: {\n type: String as PropType<TextTone>,\n default: 'primary',\n },\n align: {\n type: String as PropType<TextAlign>,\n default: undefined,\n },\n truncate: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h(\n props.as,\n {\n ...rest,\n 'data-mason-component': 'text',\n 'data-variant': props.variant,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n textStyle({\n variant: props.variant,\n tone: props.tone,\n align: props.align,\n truncate: props.truncate,\n }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type TextProps = {\n as?: TextElement\n variant?: TextVariant\n tone?: TextTone\n align?: TextAlign\n truncate?: boolean\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): Record<string, string> {\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 { 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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\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 { StackAlign, StackDirection, StackJustify } from './stackStyles.js'\n\n/** Layout primitive — flex row/column with token gaps. */\nexport const Stack = defineComponent({\n name: 'MasonStack',\n inheritAttrs: false,\n props: {\n direction: {\n type: String as PropType<StackDirection>,\n default: 'column',\n },\n gap: {\n type: String as PropType<Level>,\n default: 'md',\n },\n align: {\n type: String as PropType<StackAlign>,\n default: undefined,\n },\n justify: {\n type: String as PropType<StackJustify>,\n default: undefined,\n },\n wrap: {\n type: Boolean,\n default: false,\n },\n inline: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h(\n 'div',\n {\n ...rest,\n 'data-mason-component': 'stack',\n 'data-direction': props.direction,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n stackStyle({\n direction: props.direction,\n gap: props.gap,\n align: props.align,\n justify: props.justify,\n wrap: props.wrap,\n inline: props.inline,\n }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type StackProps = {\n direction?: StackDirection\n gap?: Level\n align?: StackAlign\n justify?: StackJustify\n wrap?: boolean\n inline?: boolean\n}\n","import { 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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\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\n/** Surface primitive — background, border, radius and shadow from tokens. */\nexport const Card = defineComponent({\n name: 'MasonCard',\n inheritAttrs: false,\n props: {\n padding: {\n type: String as PropType<Level>,\n default: 'md',\n },\n elevation: {\n type: String as PropType<ShadowLevel>,\n default: 'sm',\n },\n radius: {\n type: String as PropType<RadiusLevel>,\n default: 'md',\n },\n tone: {\n type: String as PropType<CardTone>,\n default: 'surface',\n },\n bordered: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h(\n 'div',\n {\n ...rest,\n 'data-mason-component': 'card',\n 'data-tone': props.tone,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n cardStyle({\n padding: props.padding,\n elevation: props.elevation,\n radius: props.radius,\n tone: props.tone,\n bordered: props.bordered,\n }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type CardProps = {\n padding?: Level\n elevation?: ShadowLevel\n radius?: RadiusLevel\n tone?: CardTone\n bordered?: boolean\n}\n","import {\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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport { dividerStyle, type DividerOrientation } from './dividerStyles.js'\n\nexport type { DividerOrientation } from './dividerStyles.js'\n\n/** Separator line. `<hr>` already carries the separator role. */\nexport const Divider = defineComponent({\n name: 'MasonDivider',\n inheritAttrs: false,\n props: {\n orientation: {\n type: String as PropType<DividerOrientation>,\n default: 'horizontal',\n },\n },\n setup(props, { attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h('hr', {\n ...rest,\n 'data-mason-component': 'divider',\n 'data-orientation': props.orientation,\n 'aria-orientation': props.orientation === 'vertical' ? 'vertical' : undefined,\n class: mergeClassName(attrClass as string | undefined),\n style: [dividerStyle(props.orientation), attrStyle as StyleValue | undefined],\n })\n }\n },\n})\n\nexport type DividerProps = {\n orientation?: DividerOrientation\n}\n","import { cssVar } from './styles.js'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport function dividerStyle(\n orientation: DividerOrientation = 'horizontal',\n): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport { linkStyle, type LinkTone, type LinkUnderline } from './linkStyles.js'\n\nexport type { LinkTone, LinkUnderline } from './linkStyles.js'\n\n/** Navigational anchor. Typography is inherited, so it composes inside Text. */\nexport const Link = defineComponent({\n name: 'MasonLink',\n inheritAttrs: false,\n props: {\n tone: {\n type: String as PropType<LinkTone>,\n default: 'link',\n },\n underline: {\n type: String as PropType<LinkUnderline>,\n default: 'hover',\n },\n /** Adds `target=\"_blank\"` and a safe `rel`. */\n external: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n const externalAttrs = props.external\n ? { target: '_blank', rel: 'noreferrer noopener' }\n : null\n\n return h(\n 'a',\n {\n 'data-mason-component': 'link',\n 'data-tone': props.tone,\n 'data-underline': props.underline,\n ...externalAttrs,\n ...rest,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n linkStyle({ tone: props.tone, underline: props.underline }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type LinkProps = {\n tone?: LinkTone\n underline?: LinkUnderline\n external?: boolean\n}\n","import { 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}): Record<string, string> {\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 { computed, defineComponent, h, type PropType, type StyleValue } from 'vue'\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\n/**\n * Primary action component. Native `<button>` with token-backed styles.\n *\n * Icon-only usage requires an `aria-label`.\n * Slots: default (label), `leading`, `trailing`.\n */\nexport const Button = defineComponent({\n name: 'MasonButton',\n inheritAttrs: false,\n props: {\n variant: {\n type: String as PropType<ButtonVariant>,\n default: 'primary',\n },\n size: {\n type: String as PropType<ButtonSize>,\n default: 'md',\n },\n loading: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n type: {\n type: String as PropType<'button' | 'submit' | 'reset'>,\n default: 'button',\n },\n },\n setup(props, { slots, attrs }) {\n const isDisabled = computed(() => props.disabled || props.loading)\n\n return () => {\n const children = []\n\n if (props.loading) {\n children.push(h(Spinner, { size: 'inherit', 'data-mason-slot': 'spinner' }))\n } else if (slots.leading) {\n children.push(h('span', { 'data-mason-slot': 'leading' }, slots.leading()))\n }\n\n if (slots.default) {\n children.push(h('span', { 'data-mason-slot': 'label' }, slots.default()))\n }\n\n if (slots.trailing && !props.loading) {\n children.push(h('span', { 'data-mason-slot': 'trailing' }, slots.trailing()))\n }\n\n const attrClass = attrs.class as string | undefined\n const attrStyle = attrs.style as StyleValue | undefined\n\n return h(\n 'button',\n {\n ...attrs,\n type: props.type,\n 'data-mason-component': 'button',\n 'data-variant': props.variant,\n 'data-size': props.size,\n disabled: isDisabled.value,\n 'aria-busy': props.loading || undefined,\n class: mergeClassName(attrClass),\n style: [\n buttonStyle({\n variant: props.variant,\n size: props.size,\n disabled: props.disabled,\n loading: props.loading,\n }),\n attrStyle,\n ],\n },\n children,\n )\n }\n },\n})\n\nexport type ButtonProps = {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n disabled?: boolean\n type?: 'button' | 'submit' | 'reset'\n}\n","import { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport { spinnerStyle, type SpinnerSize } from './spinnerStyles.js'\n\nexport type { SpinnerSize } from './spinnerStyles.js'\n\n/** Indeterminate loading indicator. The rotation lives in `tokens.css`. */\nexport const Spinner = defineComponent({\n name: 'MasonSpinner',\n inheritAttrs: false,\n props: {\n size: {\n type: String as PropType<SpinnerSize>,\n default: 'md',\n },\n /** Announced while loading. Without it the spinner is `aria-hidden`. */\n label: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h('span', {\n ...rest,\n 'data-mason-component': 'spinner',\n 'data-size': props.size,\n role: props.label ? 'status' : undefined,\n 'aria-label': props.label,\n 'aria-hidden': props.label ? undefined : 'true',\n class: mergeClassName(attrClass as string | undefined),\n style: [spinnerStyle(props.size), attrStyle as StyleValue | undefined],\n })\n }\n },\n})\n\nexport type SpinnerProps = {\n size?: SpinnerSize\n label?: string\n}\n","import { 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'): Record<string, string> {\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 { 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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport { badgeStyle, type BadgeSize, type BadgeTone } from './badgeStyles.js'\n\nexport type { BadgeSize, BadgeTone } from './badgeStyles.js'\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 const Badge = defineComponent({\n name: 'MasonBadge',\n inheritAttrs: false,\n props: {\n tone: {\n type: String as PropType<BadgeTone>,\n default: 'neutral',\n },\n size: {\n type: String as PropType<BadgeSize>,\n default: 'sm',\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n\n return h(\n 'span',\n {\n ...rest,\n 'data-mason-component': 'badge',\n 'data-tone': props.tone,\n 'data-size': props.size,\n class: mergeClassName(attrClass as string | undefined),\n style: [\n badgeStyle({ tone: props.tone, size: props.size }),\n attrStyle as StyleValue | undefined,\n ],\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport type BadgeProps = {\n tone?: BadgeTone\n size?: BadgeSize\n}\n","import {\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}): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { mergeClassName, type FeedbackTone } from './styles.js'\nimport {\n calloutBodyStyle,\n calloutContentStyle,\n calloutStyle,\n calloutTitleStyle,\n} from './calloutStyles.js'\n\n/**\n * Inline message block for page-level feedback.\n * Slots: default (body), `title`, `icon`.\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 const Callout = defineComponent({\n name: 'MasonCallout',\n inheritAttrs: false,\n props: {\n tone: {\n type: String as PropType<FeedbackTone>,\n default: 'info',\n },\n /** Heading text; the `title` slot takes precedence. */\n title: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n const title = slots.title?.() ?? props.title\n const body = slots.default?.()\n\n const content = []\n if (title) {\n content.push(\n h('p', { 'data-mason-slot': 'title', style: calloutTitleStyle() }, title),\n )\n }\n if (body) {\n content.push(\n h('div', { 'data-mason-slot': 'body', style: calloutBodyStyle() }, body),\n )\n }\n\n const children = []\n if (slots.icon) {\n children.push(\n h(\n 'span',\n { 'data-mason-slot': 'icon', 'aria-hidden': 'true' },\n slots.icon(),\n ),\n )\n }\n children.push(\n h(\n 'div',\n { 'data-mason-slot': 'content', style: calloutContentStyle() },\n content,\n ),\n )\n\n return h(\n 'div',\n {\n ...rest,\n 'data-mason-component': 'callout',\n 'data-tone': props.tone,\n class: mergeClassName(attrClass as string | undefined),\n style: [calloutStyle(props.tone), attrStyle as StyleValue | undefined],\n },\n children,\n )\n }\n },\n})\n\nexport type CalloutProps = {\n tone?: FeedbackTone\n title?: string\n}\n","import {\n cssVar,\n radiusVar,\n spacingVar,\n typographyStyle,\n type FeedbackTone,\n} from './styles.js'\n\nexport function calloutStyle(tone: FeedbackTone = 'info'): Record<string, string> {\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(): Record<string, string> {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: '0',\n }\n}\n\nexport function calloutTitleStyle(): Record<string, string> {\n return { margin: '0', ...typographyStyle('label.md') }\n}\n\nexport function calloutBodyStyle(): Record<string, string> {\n return { margin: '0', ...typographyStyle('body.sm') }\n}\n","import { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { fieldIds, nextFieldId, renderFieldFrame } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\nexport type { FieldSize } from './fieldStyles.js'\n\ntype InputListener = (event: Event) => void\n\n/**\n * Labelled text input. Supports `v-model`.\n * `class` / `style` apply to the wrapper; every other attribute goes to the\n * native `<input>`.\n * Slots: `label`, `description`, `error` (override the same-named props).\n */\nexport const TextField = defineComponent({\n name: 'MasonTextField',\n inheritAttrs: false,\n props: {\n label: {\n type: String,\n default: undefined,\n },\n description: {\n type: String,\n default: undefined,\n },\n /** Present error text switches the field to its invalid styling. */\n error: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<FieldSize>,\n default: 'md',\n },\n invalid: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: String,\n default: undefined,\n },\n },\n emits: ['update:modelValue'],\n setup(props, { slots, attrs, emit }) {\n const autoId = nextFieldId()\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n onInput: attrInput,\n ...controlAttrs\n } = attrs\n\n const label = slots.label?.() ?? props.label\n const description = slots.description?.() ?? props.description\n const error = slots.error?.() ?? props.error\n const invalid = props.invalid ?? Boolean(error)\n const ids = fieldIds(props.id ?? autoId, Boolean(description), Boolean(error))\n\n const emitInput: InputListener = (event) => {\n emit('update:modelValue', (event.target as HTMLInputElement).value)\n }\n const forwarded = attrInput as InputListener | undefined\n\n const control = h('input', {\n ...controlAttrs,\n id: ids.controlId,\n 'data-mason-slot': 'control',\n disabled: props.disabled,\n 'aria-invalid': invalid || undefined,\n 'aria-describedby': ids.describedBy,\n ...(props.modelValue === undefined ? null : { value: props.modelValue }),\n onInput: forwarded ? [emitInput, forwarded] : emitInput,\n style: fieldControlStyle({\n size: props.size,\n invalid,\n disabled: props.disabled,\n }),\n })\n\n return renderFieldFrame({\n component: 'text-field',\n ids,\n size: props.size,\n invalid,\n disabled: props.disabled,\n label,\n description,\n error,\n attrClass: attrClass as string | undefined,\n attrStyle: attrStyle as StyleValue | undefined,\n control,\n })\n }\n },\n})\n\nexport type TextFieldProps = {\n label?: string\n description?: string\n error?: string\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n id?: string\n modelValue?: string\n}\n","import { h, type StyleValue, type VNode, type VNodeChild } from 'vue'\nimport { mergeClassName } from './styles.js'\nimport {\n fieldDescriptionStyle,\n fieldErrorStyle,\n fieldLabelStyle,\n fieldRootStyle,\n type FieldSize,\n} from './fieldStyles.js'\n\nlet fieldSeq = 0\n\n/** Fallback control id when the consumer does not pass one. */\nexport function nextFieldId(): string {\n fieldSeq += 1\n return `mason-field-${fieldSeq}`\n}\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\nexport function fieldIds(\n controlId: string,\n hasDescription: boolean,\n hasError: boolean,\n): FieldIds {\n const descriptionId = `${controlId}-description`\n const errorId = `${controlId}-error`\n\n return {\n controlId,\n descriptionId,\n errorId,\n describedBy:\n [hasDescription ? descriptionId : null, hasError ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined,\n }\n}\n\n/**\n * Shared label / description / error chrome for form controls.\n * Internal — consumers use TextField, Select or Checkbox.\n */\nexport function renderFieldFrame({\n component,\n ids,\n size,\n invalid,\n disabled,\n label,\n description,\n error,\n attrClass,\n attrStyle,\n control,\n}: {\n component: string\n ids: FieldIds\n size: FieldSize\n invalid: boolean\n disabled: boolean\n label?: VNodeChild\n description?: VNodeChild\n error?: VNodeChild\n attrClass: string | undefined\n attrStyle: StyleValue | undefined\n control: VNode\n}): VNode {\n const children: VNodeChild[] = []\n\n if (label) {\n children.push(\n h(\n 'label',\n {\n 'data-mason-slot': 'label',\n for: ids.controlId,\n style: fieldLabelStyle(size),\n },\n label,\n ),\n )\n }\n\n children.push(control)\n\n if (description) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'description',\n id: ids.descriptionId,\n style: fieldDescriptionStyle(),\n },\n description,\n ),\n )\n }\n\n if (error) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'error',\n id: ids.errorId,\n role: 'alert',\n style: fieldErrorStyle(),\n },\n error,\n ),\n )\n }\n\n return h(\n 'div',\n {\n 'data-mason-component': component,\n 'data-size': size,\n 'data-invalid': invalid || undefined,\n 'data-disabled': disabled || undefined,\n class: mergeClassName(attrClass),\n style: [fieldRootStyle(), attrStyle],\n },\n children,\n )\n}\n","import {\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(): Record<string, string> {\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'): Record<string, string> {\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}): Record<string, string> {\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(): Record<string, string> {\n return {\n margin: '0',\n color: cssVar('color.text.secondary'),\n ...typographyStyle('body.sm'),\n }\n}\n\nexport function fieldErrorStyle(): Record<string, string> {\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(): Record<string, string> {\n return {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\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 { defineComponent, h, type PropType, type StyleValue } from 'vue'\nimport { fieldIds, nextFieldId, renderFieldFrame } from './field.js'\nimport { fieldControlStyle, type FieldSize } from './fieldStyles.js'\n\ntype ChangeListener = (event: Event) => void\n\n/**\n * Labelled native `<select>`. Supports `v-model`.\n * The default slot holds the `<option>` elements, so the browser's own popup\n * and keyboard behaviour is preserved.\n * Slots: default (options), `label`, `description`, `error`.\n */\nexport const Select = defineComponent({\n name: 'MasonSelect',\n inheritAttrs: false,\n props: {\n label: {\n type: String,\n default: undefined,\n },\n description: {\n type: String,\n default: undefined,\n },\n error: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<FieldSize>,\n default: 'md',\n },\n invalid: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n id: {\n type: String,\n default: undefined,\n },\n /** Rendered as a leading empty `<option>`. */\n placeholder: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: String,\n default: undefined,\n },\n },\n emits: ['update:modelValue'],\n setup(props, { slots, attrs, emit }) {\n const autoId = nextFieldId()\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n onChange: attrChange,\n ...controlAttrs\n } = attrs\n\n const label = slots.label?.() ?? props.label\n const description = slots.description?.() ?? props.description\n const error = slots.error?.() ?? props.error\n const invalid = props.invalid ?? Boolean(error)\n const ids = fieldIds(props.id ?? autoId, Boolean(description), Boolean(error))\n\n const emitChange: ChangeListener = (event) => {\n emit('update:modelValue', (event.target as HTMLSelectElement).value)\n }\n const forwarded = attrChange as ChangeListener | undefined\n\n const options = []\n if (props.placeholder) {\n options.push(h('option', { value: '' }, props.placeholder))\n }\n const provided = slots.default?.()\n if (provided) {\n options.push(provided)\n }\n\n const control = h(\n 'select',\n {\n ...controlAttrs,\n id: ids.controlId,\n 'data-mason-slot': 'control',\n disabled: props.disabled,\n 'aria-invalid': invalid || undefined,\n 'aria-describedby': ids.describedBy,\n ...(props.modelValue === undefined ? null : { value: props.modelValue }),\n onChange: forwarded ? [emitChange, forwarded] : emitChange,\n style: fieldControlStyle({\n size: props.size,\n invalid,\n disabled: props.disabled,\n }),\n },\n options,\n )\n\n return renderFieldFrame({\n component: 'select',\n ids,\n size: props.size,\n invalid,\n disabled: props.disabled,\n label,\n description,\n error,\n attrClass: attrClass as string | undefined,\n attrStyle: attrStyle as StyleValue | undefined,\n control,\n })\n }\n },\n})\n\nexport type SelectProps = {\n label?: string\n description?: string\n error?: string\n size?: FieldSize\n invalid?: boolean\n disabled?: boolean\n id?: string\n placeholder?: string\n modelValue?: string\n}\n","import { defineComponent, h, type PropType, type StyleValue, type VNodeChild } from 'vue'\nimport { fieldIds, nextFieldId } 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\ntype ChangeListener = (event: Event) => void\n\n/**\n * Token-backed checkbox with a drawn indicator. Supports `v-model`.\n * A visually hidden native input keeps form / keyboard behaviour.\n * The check mark is painted with `::after` in foundationsCss.\n * Slots: `label`, `description`, `error`.\n */\nexport const Checkbox = defineComponent({\n name: 'MasonCheckbox',\n inheritAttrs: false,\n props: {\n label: {\n type: String,\n default: undefined,\n },\n description: {\n type: String,\n default: undefined,\n },\n error: {\n type: String,\n default: undefined,\n },\n invalid: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n },\n emits: ['update:modelValue'],\n setup(props, { slots, attrs, emit }) {\n const autoId = nextFieldId()\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n onChange: attrChange,\n ...controlAttrs\n } = attrs\n\n const label = slots.label?.() ?? props.label\n const description = slots.description?.() ?? props.description\n const error = slots.error?.() ?? props.error\n const invalid = props.invalid ?? Boolean(error)\n const ids = fieldIds(props.id ?? autoId, Boolean(description), Boolean(error))\n\n const emitChange: ChangeListener = (event) => {\n emit('update:modelValue', (event.target as HTMLInputElement).checked)\n }\n const forwarded = attrChange as ChangeListener | undefined\n\n const children: VNodeChild[] = [\n h(\n 'label',\n {\n 'data-mason-slot': 'label',\n for: ids.controlId,\n style: checkboxLabelStyle(props.disabled),\n },\n [\n h('input', {\n ...controlAttrs,\n type: 'checkbox',\n id: ids.controlId,\n 'data-mason-slot': 'control',\n disabled: props.disabled,\n 'aria-invalid': invalid || undefined,\n 'aria-describedby': ids.describedBy,\n ...(props.modelValue === undefined ? null : { checked: props.modelValue }),\n onChange: forwarded ? [emitChange, forwarded] : emitChange,\n style: visuallyHiddenControlStyle(),\n }),\n h('span', {\n 'data-mason-slot': 'indicator',\n 'aria-hidden': 'true',\n style: checkboxIndicatorStyle(),\n }),\n label ? h('span', { 'data-mason-slot': 'label-text' }, label) : null,\n ],\n ),\n ]\n\n if (description) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'description',\n id: ids.descriptionId,\n style: fieldDescriptionStyle(),\n },\n description,\n ),\n )\n }\n\n if (error) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'error',\n id: ids.errorId,\n role: 'alert',\n style: fieldErrorStyle(),\n },\n error,\n ),\n )\n }\n\n return h(\n 'div',\n {\n 'data-mason-component': 'checkbox',\n 'data-invalid': invalid || undefined,\n 'data-disabled': props.disabled || undefined,\n class: mergeClassName(attrClass as string | undefined),\n style: [checkboxRootStyle(), attrStyle as StyleValue | undefined],\n },\n children,\n )\n }\n },\n})\n\nexport type CheckboxProps = {\n label?: string\n description?: string\n error?: string\n invalid?: boolean\n disabled?: boolean\n id?: string\n modelValue?: boolean\n}\n","import { cssVar, radiusVar, spacingVar, typographyStyle } from './styles.js'\n\nconst CONTROL_SIZE = '1.125rem'\n\nexport function checkboxRootStyle(): Record<string, string> {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: '0',\n }\n}\n\nexport function checkboxLabelStyle(disabled = false): Record<string, string> {\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(): Record<string, string> {\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 { defineComponent, h, type PropType, type StyleValue, type VNodeChild } from 'vue'\nimport { fieldIds, nextFieldId } 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\ntype ChangeListener = (event: Event) => void\n\n/**\n * Token-backed radio with a drawn indicator. Supports `v-model`.\n * A visually hidden native input keeps form / keyboard behaviour.\n * The selected dot is painted with `::after` in foundationsCss.\n * Slots: `label`, `description`, `error`.\n */\nexport const Radio = defineComponent({\n name: 'MasonRadio',\n inheritAttrs: false,\n props: {\n label: {\n type: String,\n default: undefined,\n },\n description: {\n type: String,\n default: undefined,\n },\n error: {\n type: String,\n default: undefined,\n },\n invalid: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [String, Number, Boolean] as PropType<string | number | boolean | undefined>,\n default: undefined,\n },\n value: {\n type: [String, Number, Boolean] as PropType<string | number | boolean | undefined>,\n default: undefined,\n },\n },\n emits: ['update:modelValue'],\n setup(props, { slots, attrs, emit }) {\n const autoId = nextFieldId()\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n onChange: attrChange,\n ...controlAttrs\n } = attrs\n\n const label = slots.label?.() ?? props.label\n const description = slots.description?.() ?? props.description\n const error = slots.error?.() ?? props.error\n const invalid = props.invalid ?? Boolean(error)\n const ids = fieldIds(props.id ?? autoId, Boolean(description), Boolean(error))\n\n const emitChange: ChangeListener = (event) => {\n const input = event.target as HTMLInputElement\n emit('update:modelValue', props.value === undefined ? input.value : props.value)\n }\n const forwarded = attrChange as ChangeListener | undefined\n\n const checked =\n props.modelValue === undefined || props.value === undefined\n ? undefined\n : props.modelValue === props.value\n\n const children: VNodeChild[] = [\n h(\n 'label',\n {\n 'data-mason-slot': 'label',\n for: ids.controlId,\n style: radioLabelStyle(props.disabled),\n },\n [\n h('input', {\n ...controlAttrs,\n type: 'radio',\n id: ids.controlId,\n 'data-mason-slot': 'control',\n disabled: props.disabled,\n value: props.value,\n 'aria-invalid': invalid || undefined,\n 'aria-describedby': ids.describedBy,\n ...(checked === undefined ? null : { checked }),\n onChange: forwarded ? [emitChange, forwarded] : emitChange,\n style: visuallyHiddenControlStyle(),\n }),\n h('span', {\n 'data-mason-slot': 'indicator',\n 'aria-hidden': 'true',\n style: radioIndicatorStyle(),\n }),\n label ? h('span', { 'data-mason-slot': 'label-text' }, label) : null,\n ],\n ),\n ]\n\n if (description) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'description',\n id: ids.descriptionId,\n style: fieldDescriptionStyle(),\n },\n description,\n ),\n )\n }\n\n if (error) {\n children.push(\n h(\n 'p',\n {\n 'data-mason-slot': 'error',\n id: ids.errorId,\n role: 'alert',\n style: fieldErrorStyle(),\n },\n error,\n ),\n )\n }\n\n return h(\n 'div',\n {\n 'data-mason-component': 'radio',\n 'data-invalid': invalid || undefined,\n 'data-disabled': props.disabled || undefined,\n class: mergeClassName(attrClass as string | undefined),\n style: [radioRootStyle(), attrStyle as StyleValue | undefined],\n },\n children,\n )\n }\n },\n})\n\nexport type RadioProps = {\n label?: string\n description?: string\n error?: string\n invalid?: boolean\n disabled?: boolean\n id?: string\n modelValue?: string | number | boolean\n value?: string | number | boolean\n}\n","import { cssVar, spacingVar, typographyStyle } from './styles.js'\n\nconst CONTROL_SIZE = '1.125rem'\n\nexport function radioRootStyle(): Record<string, string> {\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: spacingVar('stack', 'sm'),\n minWidth: '0',\n }\n}\n\nexport function radioLabelStyle(disabled = false): Record<string, string> {\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(): Record<string, string> {\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"],"mappings":"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","names":["defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","h","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","defineComponent","h","CONTROL_SIZE","defineComponent","h"]}
|