@epilot/volt-ui-experimental-griffel 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ADOPTING.md +416 -0
- package/README.md +32 -31
- package/dist/_virtual/jsx-dev-runtime.js +5 -0
- package/dist/_virtual/jsx-dev-runtime.js.map +1 -0
- package/dist/_virtual/react-jsx-dev-runtime.development.js +5 -0
- package/dist/_virtual/react-jsx-dev-runtime.development.js.map +1 -0
- package/dist/_virtual/react-jsx-dev-runtime.production.js +5 -0
- package/dist/_virtual/react-jsx-dev-runtime.production.js.map +1 -0
- package/dist/components/accordion/accordion.js +126 -66
- package/dist/components/accordion/accordion.js.map +1 -1
- package/dist/components/alert-dialog/alert-dialog.js +239 -137
- package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
- package/dist/components/avatar/avatar-group.js +102 -47
- package/dist/components/avatar/avatar-group.js.map +1 -1
- package/dist/components/avatar/avatar.js +97 -73
- package/dist/components/avatar/avatar.js.map +1 -1
- package/dist/components/badge/badge.js +53 -37
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +97 -49
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/button/button.js +88 -77
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/button-group/button-group.js +55 -31
- package/dist/components/button-group/button-group.js.map +1 -1
- package/dist/components/callout/callout.js +288 -164
- package/dist/components/callout/callout.js.map +1 -1
- package/dist/components/card/card.js +137 -81
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/checkbox/checkbox.js +100 -49
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/collapsible-sidebar/collapsible-sidebar.js +155 -107
- package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
- package/dist/components/command/command.js +297 -158
- package/dist/components/command/command.js.map +1 -1
- package/dist/components/data-table/data-table-body.js +114 -54
- package/dist/components/data-table/data-table-body.js.map +1 -1
- package/dist/components/data-table/data-table-column-header.js +117 -45
- package/dist/components/data-table/data-table-column-header.js.map +1 -1
- package/dist/components/data-table/data-table-column-visibility.js +98 -39
- package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
- package/dist/components/data-table/data-table-content.js +90 -58
- package/dist/components/data-table/data-table-content.js.map +1 -1
- package/dist/components/data-table/data-table-error.js +83 -39
- package/dist/components/data-table/data-table-error.js.map +1 -1
- package/dist/components/data-table/data-table-header.js +88 -54
- package/dist/components/data-table/data-table-header.js.map +1 -1
- package/dist/components/data-table/data-table-loading.js +27 -15
- package/dist/components/data-table/data-table-loading.js.map +1 -1
- package/dist/components/data-table/data-table-pagination.js +27 -19
- package/dist/components/data-table/data-table-pagination.js.map +1 -1
- package/dist/components/data-table/data-table-row.js +87 -64
- package/dist/components/data-table/data-table-row.js.map +1 -1
- package/dist/components/data-table/data-table-toolbar.js +24 -16
- package/dist/components/data-table/data-table-toolbar.js.map +1 -1
- package/dist/components/data-table/data-table.js +182 -145
- package/dist/components/data-table/data-table.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js +342 -214
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-range-picker/range-calendar.js +132 -92
- package/dist/components/date-range-picker/range-calendar.js.map +1 -1
- package/dist/components/date-time-picker/calendar.js +501 -317
- package/dist/components/date-time-picker/calendar.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-context.js +64 -60
- package/dist/components/date-time-picker/date-time-picker-context.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-input.js +249 -149
- package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-panel.js +273 -165
- package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-popover.js +22 -14
- package/dist/components/date-time-picker/date-time-picker-popover.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker.js +134 -90
- package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
- package/dist/components/date-time-picker/time-picker.js +198 -132
- package/dist/components/date-time-picker/time-picker.js.map +1 -1
- package/dist/components/density-provider/density-provider.js +48 -0
- package/dist/components/density-provider/density-provider.js.map +1 -0
- package/dist/components/dialog/dialog.js +280 -150
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.js +273 -163
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.js +378 -195
- package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/components/field/field-combobox.js +447 -240
- package/dist/components/field/field-combobox.js.map +1 -1
- package/dist/components/field/field-select.js +23 -19
- package/dist/components/field/field-select.js.map +1 -1
- package/dist/components/field/field.js +318 -209
- package/dist/components/field/field.js.map +1 -1
- package/dist/components/label/label.js +27 -19
- package/dist/components/label/label.js.map +1 -1
- package/dist/components/list/list.js +623 -369
- package/dist/components/list/list.js.map +1 -1
- package/dist/components/option-card/option-card.js +323 -159
- package/dist/components/option-card/option-card.js.map +1 -1
- package/dist/components/pill/pill.js +82 -64
- package/dist/components/pill/pill.js.map +1 -1
- package/dist/components/popover/popover.js +101 -56
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/radio/radio.js +94 -51
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/scroll-overflow/scroll-overflow.js +350 -198
- package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
- package/dist/components/segmented-control/segmented-control.js +141 -97
- package/dist/components/segmented-control/segmented-control.js.map +1 -1
- package/dist/components/select/select.js +452 -227
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/separator/separator.js +24 -16
- package/dist/components/separator/separator.js.map +1 -1
- package/dist/components/skeleton/skeleton.js +83 -43
- package/dist/components/skeleton/skeleton.js.map +1 -1
- package/dist/components/spinner/spinner.js +44 -20
- package/dist/components/spinner/spinner.js.map +1 -1
- package/dist/components/switch/switch.js +163 -86
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/table/table-pagination.js +465 -205
- package/dist/components/table/table-pagination.js.map +1 -1
- package/dist/components/table/table.js +212 -144
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/tabs/tabs.js +94 -58
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/text/text.js +40 -32
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/toast/toast.js +187 -111
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toggle/toggle-group.js +40 -24
- package/dist/components/toggle/toggle-group.js.map +1 -1
- package/dist/components/toggle/toggle.js +48 -40
- package/dist/components/toggle/toggle.js.map +1 -1
- package/dist/components/tooltip/tooltip.js +101 -55
- package/dist/components/tooltip/tooltip.js.map +1 -1
- package/dist/index.d.ts +600 -427
- package/dist/index.js +215 -212
- package/dist/index.js.map +1 -1
- package/dist/lib/clear-button.js +27 -15
- package/dist/lib/clear-button.js.map +1 -1
- package/dist/lib/icons.js +18 -6
- package/dist/lib/icons.js.map +1 -1
- package/dist/packages/volt-runtime/dist/sheet.js +27 -10
- package/dist/packages/volt-runtime/dist/sheet.js.map +1 -1
- package/dist/packages/volt-runtime/dist/styles/recipe.js +76 -0
- package/dist/packages/volt-runtime/dist/styles/recipe.js.map +1 -0
- package/dist/styles/document-context.js +12 -0
- package/dist/styles/document-context.js.map +1 -0
- package/dist/styles/make-styles.js +18 -10
- package/dist/styles/make-styles.js.map +1 -1
- package/dist/tokens/core.generated.js +1238 -1166
- package/dist/tokens/core.generated.js.map +1 -1
- package/dist/tokens/index.d.ts +442 -415
- package/dist/tokens/index.js +1105 -1078
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/install.js +9 -5
- package/dist/tokens/install.js.map +1 -1
- package/dist/tokens/use-palette-tokens.js +20 -0
- package/dist/tokens/use-palette-tokens.js.map +1 -0
- package/dist/tokens.json +83 -2
- package/dist/vendor/react/cjs/react-jsx-dev-runtime.development.js +236 -0
- package/dist/vendor/react/cjs/react-jsx-dev-runtime.development.js.map +1 -0
- package/dist/vendor/react/cjs/react-jsx-dev-runtime.production.js +21 -0
- package/dist/vendor/react/cjs/react-jsx-dev-runtime.production.js.map +1 -0
- package/dist/vendor/react/jsx-dev-runtime.js +9 -0
- package/dist/vendor/react/jsx-dev-runtime.js.map +1 -0
- package/package.json +13 -5
- package/scripts/migration-diagnostics-core.mjs +859 -0
- package/scripts/migration-diagnostics.mjs +353 -0
- package/scripts/migration-sweep.mjs +179 -0
- package/AGENTS.md +0 -153
- package/AUTHORING.md +0 -292
- package/dist/packages/volt-runtime/dist/styles/make-styles.js +0 -22
- package/dist/packages/volt-runtime/dist/styles/make-styles.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.js","sources":["../../../src/components/field/field.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/volt-ui-runtime\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeVoltStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * Plain elements, not a primitive.\n *\n * v1's Field uses no Radix primitive at all — it is a custom implementation with its own context,\n * and v2 already had the same context (`FieldContext`, carrying `inputRef`). Base UI's Field parts\n * were only supplying the elements, and these are the elements they rendered: Root a div, Label a\n * label, Control an input, Description a p, Error a div. Substituting them is element-identical, so\n * nothing moves visually.\n *\n * **What is genuinely lost:** Base UI's Field also wired label-to-control association and\n * `aria-describedby` automatically. v1 does not do that either — its context carries only `inputRef`\n * — so this matches production rather than regressing against it, but it is a real accessibility\n * affordance that Base UI gave for free and is worth revisiting on its own terms.\n */\nconst FieldRootBase = \"div\" as const\nconst FieldLabelBase = \"label\" as const\nconst FieldControlBase = \"input\" as const\nconst FieldDescriptionBase = \"p\" as const\nconst FieldErrorBase = \"div\" as const\n\nexport type FieldInputRef =\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement\n | HTMLButtonElement\n | null\n\nexport interface FieldContextValue {\n inputRef: React.RefObject<FieldInputRef>\n}\n\nconst FieldContext = React.createContext<FieldContextValue | null>(null)\n\nexport const useFieldContext = () => {\n const context = React.useContext(FieldContext)\n if (!context) {\n throw new Error(\"FieldInput must be used within a Field component\")\n }\n return context\n}\n\n/**\n * Field context when there is one, `null` otherwise — for parts that work both inside and outside a\n * Field.\n *\n * `useFieldContext` throws by design, which is right for FieldInput (it is meaningless on its own)\n * and wrong for SelectTrigger and the combobox trigger, which are legitimate standalone components\n * that merely pick up field wiring when nested. Those were calling the throwing hook inside a\n * try/catch, i.e. using an exception for control flow on every render of a perfectly valid tree.\n */\nexport const useOptionalFieldContext = (): FieldContextValue | null =>\n React.useContext(FieldContext)\n\nexport type FieldVariant = \"default\" | \"highlight\" | \"readonly\" | \"destructive\"\n\nconst useStyles = makeVoltStyles({\n root: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n paddingTop: tokens.spacingElement2,\n paddingBottom: tokens.spacingElement2,\n // v1 uses Tailwind's `px-3` = 0.75rem here. The semantic spacing scale has NO 0.75rem\n // token -- it runs 0.25/0.5/0.5/1/1.5/2 -- so this is a literal by necessity.\n // `spacingGroup1` is 0.5rem and reaching for it by name (as three components did)\n // silently loses 4px per side. See STATUS: the scale gap is the root cause.\n paddingLeft: tokens.spacingElement3,\n paddingRight: tokens.spacingElement3,\n ...shorthands.gap(tokens.spacingElement1),\n ...shorthands.borderRadius(tokens.radiusLg),\n transitionProperty: \"all\",\n transitionDuration: \"75ms\",\n outlineOffset: \"2px\",\n outlineWidth: \"2px\",\n outlineStyle: \"none\",\n \"&[data-focused='true'], &[data-focus-visible]\": {\n outlineStyle: \"solid\",\n },\n \"&[data-invalid]\": {\n backgroundColor: tokens.semErrorSoft,\n outlineColor: tokens.errorA8,\n },\n\n // Label's disabled styling, declared here because Field owns the elements these selectors are\n // rooted at. On Label they were written as \"[data-disabled] &\", \":disabled ~ &\" and\n // \"[data-disabled] ~ &\"; Griffel does not substitute `&` in that position and emits\n // `.hash<selector> .hash`, which never matches, so a label in a disabled field never dimmed.\n // See src/ancestor-selector.test.ts.\n [`&[data-disabled] [${SLOT_ATTR}=\"label\"]`]: {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n [`& :disabled ~ [${SLOT_ATTR}=\"label\"]`]: {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n [`& [data-disabled] ~ [${SLOT_ATTR}=\"label\"]`]: {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n },\n rootDefault: {\n backgroundColor: tokens.grayA3,\n \":hover\": {\n backgroundColor: tokens.grayA4,\n },\n \"&[data-focused='true'], &[data-focus-visible]\": {\n outlineColor: tokens.accentA8,\n },\n },\n rootHighlight: {\n backgroundColor: tokens.accentA3,\n \":hover\": {\n backgroundColor: tokens.accentA4,\n },\n \"&[data-focused='true'], &[data-focus-visible]\": {\n outlineColor: tokens.accentA8,\n },\n },\n rootReadonly: {\n backgroundColor: tokens.grayA3,\n \"&[data-focused='true'], &[data-focus-visible]\": {\n outlineColor: tokens.accentA8,\n },\n },\n rootDestructive: {\n backgroundColor: tokens.semErrorSoft,\n \":hover\": {\n backgroundColor: tokens.errorA4,\n },\n \"&[data-focused='true'], &[data-focus-visible]\": {\n outlineColor: tokens.errorA8,\n },\n },\n fieldSet: {\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingLayout2),\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n ...shorthands.margin(0),\n },\n fieldGroup: {\n display: \"flex\",\n width: \"100%\",\n ...shorthands.gap(tokens.spacingElement2),\n },\n fieldGroupColumn: {\n flexDirection: \"column\",\n },\n fieldGroupRow: {\n flexDirection: \"row\",\n },\n fieldContent: {\n display: \"flex\",\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement2),\n lineHeight: \"1.375\",\n },\n label: {\n minHeight: \"1rem\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n display: \"flex\",\n width: \"fit-content\",\n ...shorthands.gap(tokens.spacingElement2),\n cursor: \"default\",\n color: tokens.grayA12,\n \"&[data-disabled]\": {\n opacity: 0.5,\n },\n },\n labelContent: {\n display: \"inline-flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n },\n labelContentHover: {\n width: 0,\n height: 0,\n overflowX: \"visible\",\n overflowY: \"visible\",\n opacity: 0,\n pointerEvents: \"none\",\n },\n description: {\n fontSize: tokens.textXs,\n lineHeight: \"1.5\",\n fontWeight: tokens.fontWeightNormal,\n ...shorthands.margin(0),\n \"& a\": {\n textDecorationLine: \"underline\",\n textUnderlineOffset: \"4px\",\n },\n },\n descriptionDefault: {\n color: tokens.grayA12,\n },\n descriptionHelper: {\n color: tokens.grayA11,\n },\n error: {\n color: tokens.errorA11,\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightNormal,\n },\n errorList: {\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.margin(0),\n paddingLeft: \"1.25rem\",\n listStyleType: \"disc\",\n },\n errorListItem: {\n color: tokens.errorA11,\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightNormal,\n marginTop: \"0.25rem\",\n marginBottom: \"0.25rem\",\n },\n input: {\n width: \"100%\",\n height: \"1.5rem\",\n outlineStyle: \"none\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \"::placeholder\": {\n color: tokens.grayA8,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n },\n },\n inputGroup: {\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n width: \"100%\",\n },\n textarea: {\n width: \"100%\",\n outlineStyle: \"none\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \"::placeholder\": {\n color: tokens.grayA8,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n },\n },\n resizeNone: {\n resize: \"none\",\n },\n resizeVertical: {\n resize: \"vertical\",\n },\n resizeHorizontal: {\n resize: \"horizontal\",\n },\n addon: {\n color: tokens.grayA11,\n display: \"flex\",\n height: \"auto\",\n cursor: \"text\",\n whiteSpace: \"nowrap\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightNormal,\n userSelect: \"none\",\n },\n addonStart: {\n order: -1,\n },\n addonEnd: {\n order: 1,\n },\n})\n\n// fieldVariants helper for v1 API compatibility\nexport const fieldVariants = ({\n variant = \"default\",\n}: { variant?: FieldVariant } = {}) => {\n return variant\n}\n\nexport type FieldProps = Omit<React.ComponentProps<\"div\">, \"className\"> & {\n className?: string\n variant?: FieldVariant\n}\n\nexport const Field = React.forwardRef<HTMLDivElement, FieldProps>(\n function Field(\n {\n className,\n variant = \"default\",\n children,\n onFocusCapture,\n onBlurCapture,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const inputRef = React.useRef<FieldInputRef>(null)\n const [isFocused, setIsFocused] = React.useState(false)\n\n const handleFocusCapture: React.ComponentProps<\"div\">[\"onFocusCapture\"] = (\n event\n ) => {\n setIsFocused(true)\n onFocusCapture?.(event)\n }\n\n const handleBlurCapture: React.ComponentProps<\"div\">[\"onBlurCapture\"] = (\n event\n ) => {\n setIsFocused(false)\n onBlurCapture?.(event)\n }\n\n const variantStyle =\n variant === \"highlight\"\n ? styles.rootHighlight\n : variant === \"readonly\"\n ? styles.rootReadonly\n : variant === \"destructive\"\n ? styles.rootDestructive\n : styles.rootDefault\n\n return (\n <FieldContext.Provider value={{ inputRef }}>\n <FieldRootBase\n ref={ref}\n role=\"group\"\n data-slot=\"field\"\n {...{ [SLOT_ATTR]: \"field\" }}\n data-focused={isFocused ? \"true\" : \"false\"}\n className={mergeClasses(styles.root, variantStyle, className)}\n onFocusCapture={handleFocusCapture}\n onBlurCapture={handleBlurCapture}\n {...props}\n >\n {children}\n </FieldRootBase>\n </FieldContext.Provider>\n )\n }\n)\n\nexport type FieldSetProps = React.ComponentProps<\"fieldset\">\n\nexport const FieldSet = React.forwardRef<HTMLFieldSetElement, FieldSetProps>(\n function FieldSet({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <fieldset\n ref={ref}\n data-slot=\"field-set\"\n {...{ [SLOT_ATTR]: \"field-set\" }}\n className={mergeClasses(styles.fieldSet, className)}\n {...props}\n />\n )\n }\n)\n\nexport type FieldGroupProps = React.ComponentProps<\"div\"> & {\n direction?: \"column\" | \"row\"\n}\n\nexport const FieldGroup = React.forwardRef<HTMLDivElement, FieldGroupProps>(\n function FieldGroup({ className, direction = \"column\", ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"field-group\"\n {...{ [SLOT_ATTR]: \"field-group\" }}\n className={mergeClasses(\n styles.fieldGroup,\n direction === \"row\" ? styles.fieldGroupRow : styles.fieldGroupColumn,\n className\n )}\n {...props}\n />\n )\n }\n)\n\nexport type FieldContentProps = React.ComponentProps<\"div\">\n\nexport const FieldContent = React.forwardRef<HTMLDivElement, FieldContentProps>(\n function FieldContent({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"field-content\"\n {...{ [SLOT_ATTR]: \"field-content\" }}\n className={mergeClasses(styles.fieldContent, className)}\n {...props}\n />\n )\n }\n)\n\nexport type FieldLabelProps = Omit<\n React.ComponentProps<\"label\">,\n \"className\"\n> & {\n className?: string\n}\n\nexport const FieldLabel = React.forwardRef<HTMLLabelElement, FieldLabelProps>(\n function FieldLabel({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <FieldLabelBase\n ref={ref}\n data-slot=\"field-label\"\n {...{ [SLOT_ATTR]: \"field-label\" }}\n className={mergeClasses(styles.label, className)}\n {...props}\n />\n )\n }\n)\n\nexport type FieldLabelContentProps = React.ComponentProps<\"div\"> & {\n showOnHover?: boolean\n}\n\nexport const FieldLabelContent = React.forwardRef<\n HTMLDivElement,\n FieldLabelContentProps\n>(function FieldLabelContent({ className, showOnHover = true, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"field-label-content\"\n {...{ [SLOT_ATTR]: \"field-label-content\" }}\n className={mergeClasses(\n styles.labelContent,\n showOnHover && styles.labelContentHover,\n className\n )}\n {...props}\n />\n )\n})\n\nexport type FieldDescriptionVariant = \"default\" | \"helper\"\n\nexport const fieldDescriptionVariants = ({\n variant = \"default\",\n}: { variant?: FieldDescriptionVariant } = {}) => {\n return variant\n}\n\nexport type FieldDescriptionProps = Omit<\n React.ComponentProps<\"p\">,\n \"className\"\n> & {\n className?: string\n variant?: FieldDescriptionVariant\n}\n\nexport const FieldDescription = React.forwardRef<\n HTMLParagraphElement,\n FieldDescriptionProps\n>(function FieldDescription({ className, variant = \"default\", ...props }, ref) {\n const styles = useStyles()\n\n const variantStyle =\n variant === \"helper\" ? styles.descriptionHelper : styles.descriptionDefault\n\n return (\n <FieldDescriptionBase\n ref={ref}\n data-slot=\"field-description\"\n {...{ [SLOT_ATTR]: \"field-description\" }}\n className={mergeClasses(styles.description, variantStyle, className)}\n {...props}\n />\n )\n})\n\nexport type FieldErrorProps = Omit<React.ComponentProps<\"div\">, \"className\"> & {\n className?: string\n errors?: Array<{ message?: string } | undefined>\n}\n\nexport const FieldError = React.forwardRef<HTMLDivElement, FieldErrorProps>(\n function FieldError({ className, children, errors, ...props }, ref) {\n const styles = useStyles()\n\n const content = React.useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors.length === 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className={styles.errorList}>\n {uniqueErrors.map(\n (error, index) =>\n error?.message && (\n <li className={styles.errorListItem} key={index}>\n {error.message}\n </li>\n )\n )}\n </ul>\n )\n }, [children, errors, styles.errorList, styles.errorListItem])\n\n if (!content) {\n return null\n }\n\n return (\n <FieldErrorBase\n ref={ref}\n role=\"alert\"\n data-slot=\"field-error\"\n {...{ [SLOT_ATTR]: \"field-error\" }}\n className={mergeClasses(styles.error, className)}\n {...props}\n >\n {content}\n </FieldErrorBase>\n )\n }\n)\n\nexport type FieldInputProps = Omit<\n React.ComponentProps<\"input\">,\n \"className\"\n> & {\n className?: string\n}\n\nexport const FieldInput = React.forwardRef<HTMLInputElement, FieldInputProps>(\n function FieldInput({ className, ...props }, forwardedRef) {\n const styles = useStyles()\n const { inputRef } = useFieldContext()\n\n return (\n <FieldControlBase\n ref={(el: HTMLElement | null) => {\n inputRef.current = el as HTMLInputElement | null\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el as HTMLInputElement)\n } else if (forwardedRef) {\n forwardedRef.current = el as HTMLInputElement | null\n }\n }}\n data-readonly={props.readOnly}\n data-slot=\"field-input\"\n {...{ [SLOT_ATTR]: \"field-input\" }}\n className={mergeClasses(styles.input, className)}\n {...props}\n />\n )\n }\n)\n\nexport type FieldInputGroupProps = React.ComponentProps<\"div\">\n\nexport const FieldInputGroup = React.forwardRef<\n HTMLDivElement,\n FieldInputGroupProps\n>(function FieldInputGroup({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"field-input-group\"\n {...{ [SLOT_ATTR]: \"field-input-group\" }}\n className={mergeClasses(styles.inputGroup, className)}\n {...props}\n />\n )\n})\n\nexport type FieldTextareaResize = \"none\" | \"vertical\" | \"horizontal\"\n\nexport type FieldTextareaProps = React.ComponentProps<\"textarea\"> & {\n resize?: FieldTextareaResize\n}\n\nexport const FieldTextarea = React.forwardRef<\n HTMLTextAreaElement,\n FieldTextareaProps\n>(function FieldTextarea(\n { className, resize = \"none\", ...props },\n forwardedRef\n) {\n const styles = useStyles()\n const { inputRef } = useFieldContext()\n\n const resizeStyle =\n resize === \"vertical\"\n ? styles.resizeVertical\n : resize === \"horizontal\"\n ? styles.resizeHorizontal\n : styles.resizeNone\n\n return (\n <textarea\n {...props}\n ref={(el: HTMLTextAreaElement | null) => {\n inputRef.current = el\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el)\n } else if (forwardedRef) {\n forwardedRef.current = el\n }\n }}\n data-readonly={props.readOnly}\n data-slot=\"field-textarea\"\n {...{ [SLOT_ATTR]: \"field-textarea\" }}\n data-resize={resize}\n className={mergeClasses(styles.textarea, resizeStyle, className)}\n />\n )\n})\n\nexport type FieldGroupAddonAlign = \"start\" | \"end\"\n\nexport const inputGroupAddonVariants = ({\n align = \"start\",\n}: { align?: FieldGroupAddonAlign } = {}) => {\n return align\n}\n\nexport type FieldGroupAddonProps = React.ComponentProps<\"div\"> & {\n align?: FieldGroupAddonAlign\n}\n\nexport const FieldGroupAddon = React.forwardRef<\n HTMLDivElement,\n FieldGroupAddonProps\n>(function FieldGroupAddon({ className, align = \"start\", ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group-addon\"\n {...{ [SLOT_ATTR]: \"input-group-addon\" }}\n data-align={align}\n className={mergeClasses(\n styles.addon,\n align === \"end\" ? styles.addonEnd : styles.addonStart,\n className\n )}\n {...props}\n />\n )\n})\n"],"names":["FieldRootBase","FieldLabelBase","FieldControlBase","FieldDescriptionBase","FieldErrorBase","FieldContext","React","useFieldContext","context","useOptionalFieldContext","useStyles","makeVoltStyles","tokens.spacingElement2","tokens.spacingElement3","shorthands","tokens.spacingElement1","tokens.radiusLg","tokens.semErrorSoft","tokens.errorA8","SLOT_ATTR","tokens.grayA3","tokens.grayA4","tokens.accentA8","tokens.accentA3","tokens.accentA4","tokens.errorA4","tokens.spacingLayout2","tokens.textXs","tokens.leadingXs","tokens.grayA12","tokens.fontWeightNormal","tokens.grayA11","tokens.errorA11","tokens.textSm","tokens.leadingSm","tokens.grayA8","fieldVariants","variant","Field","className","children","onFocusCapture","onBlurCapture","props","ref","styles","inputRef","isFocused","setIsFocused","handleFocusCapture","event","handleBlurCapture","variantStyle","jsx","mergeClasses","FieldSet","FieldGroup","direction","FieldContent","FieldLabel","FieldLabelContent","showOnHover","fieldDescriptionVariants","FieldDescription","FieldError","errors","content","uniqueErrors","error","_a","index","FieldInput","forwardedRef","el","FieldInputGroup","FieldTextarea","resize","resizeStyle","inputGroupAddonVariants","align","FieldGroupAddon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"field.js","sources":["../../../src/components/field/field.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/volt-ui-runtime\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeVoltStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * Plain elements, not a primitive.\n *\n * v1's Field uses no Radix primitive at all — it is a custom implementation with its own context,\n * and v2 already had the same context (`FieldContext`, carrying `inputRef`). Base UI's Field parts\n * were only supplying the elements, and these are the elements they rendered: Root a div, Label a\n * label, Control an input, Description a p, Error a div. Substituting them is element-identical, so\n * nothing moves visually.\n *\n * **What is genuinely lost:** Base UI's Field also wired label-to-control association and\n * `aria-describedby` automatically. v1 does not do that either — its context carries only `inputRef`\n * — so this matches production rather than regressing against it, but it is a real accessibility\n * affordance that Base UI gave for free and is worth revisiting on its own terms.\n */\nconst FieldRootBase = \"div\" as const\nconst FieldLabelBase = \"label\" as const\nconst FieldControlBase = \"input\" as const\nconst FieldDescriptionBase = \"p\" as const\nconst FieldErrorBase = \"div\" as const\n\nexport type FieldInputRef =\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement\n | HTMLButtonElement\n | null\n\nexport interface FieldContextValue {\n inputRef: React.RefObject<FieldInputRef>\n}\n\nconst FieldContext = React.createContext<FieldContextValue | null>(null)\n\nexport const useFieldContext = () => {\n const context = React.useContext(FieldContext)\n if (!context) {\n throw new Error(\"FieldInput must be used within a Field component\")\n }\n return context\n}\n\n/**\n * Field context when there is one, `null` otherwise — for parts that work both inside and outside a\n * Field.\n *\n * `useFieldContext` throws by design, which is right for FieldInput (it is meaningless on its own)\n * and wrong for SelectTrigger and the combobox trigger, which are legitimate standalone components\n * that merely pick up field wiring when nested. Those were calling the throwing hook inside a\n * try/catch, i.e. using an exception for control flow on every render of a perfectly valid tree.\n */\nexport const useOptionalFieldContext = (): FieldContextValue | null =>\n React.useContext(FieldContext)\n\nexport type FieldVariant = \"default\" | \"highlight\" | \"readonly\" | \"destructive\"\n\nconst useStyles = makeVoltStyles({\n root: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n // Density-bound (DENSITY-SPEC.md §2.3, WP9B1-ACCEPTANCE-WP9B2A): normal resolves to the same\n // spacingElement2/spacingElement3 values this used before binding — `spacingGroup1` (0.5rem)\n // is a half-step short of the 0.75rem v1 actually uses, which three components got wrong by\n // reaching for it directly; that pitfall is why fieldPaddingX's normal tier aliases\n // spacingElement3, not spacingGroup1 (packages/tokens/spec/density.yaml).\n paddingTop: tokens.fieldPaddingY,\n paddingBottom: tokens.fieldPaddingY,\n paddingLeft: tokens.fieldPaddingX,\n paddingRight: tokens.fieldPaddingX,\n ...shorthands.gap(tokens.spacingElement1),\n ...shorthands.borderRadius(tokens.radiusLg),\n transitionProperty: \"all\",\n transitionDuration: \"75ms\",\n outlineOffset: \"2px\",\n outlineWidth: \"2px\",\n outlineStyle: \"none\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n \"&[data-focused='true'], &[data-focus-visible]\": {\n outlineStyle: \"solid\",\n outlineColor: tokens.semFocusRing,\n },\n \"&[data-invalid]\": {\n backgroundColor: tokens.semErrorSoft,\n },\n\n // Label's disabled styling, declared here because Field owns the elements these selectors are\n // rooted at. On Label they were written as \"[data-disabled] &\", \":disabled ~ &\" and\n // \"[data-disabled] ~ &\"; Griffel does not substitute `&` in that position and emits\n // `.hash<selector> .hash`, which never matches, so a label in a disabled field never dimmed.\n // See src/ancestor-selector.test.ts.\n [`&[data-disabled] [${SLOT_ATTR}=\"label\"]`]: {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n [`& :disabled ~ [${SLOT_ATTR}=\"label\"]`]: {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n [`& [data-disabled] ~ [${SLOT_ATTR}=\"label\"]`]: {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n },\n rootDefault: {\n backgroundColor: tokens.grayA3,\n \":hover\": {\n backgroundColor: tokens.grayA4,\n },\n },\n rootHighlight: {\n backgroundColor: tokens.accentA3,\n \":hover\": {\n backgroundColor: tokens.accentA4,\n },\n },\n rootReadonly: {\n backgroundColor: tokens.grayA3,\n },\n rootDestructive: {\n backgroundColor: tokens.semErrorSoft,\n \":hover\": {\n backgroundColor: tokens.errorA4,\n },\n },\n fieldSet: {\n display: \"flex\",\n flexDirection: \"column\",\n // Density-bound (DENSITY-SPEC.md §2.3): normal resolves to the same spacingLayout2 (32px)\n // this used before binding.\n ...shorthands.gap(tokens.fieldSetGap),\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n ...shorthands.margin(0),\n },\n fieldGroup: {\n display: \"flex\",\n width: \"100%\",\n ...shorthands.gap(tokens.spacingElement2),\n },\n fieldGroupColumn: {\n flexDirection: \"column\",\n },\n fieldGroupRow: {\n flexDirection: \"row\",\n },\n fieldContent: {\n display: \"flex\",\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement2),\n lineHeight: \"1.375\",\n },\n label: {\n minHeight: \"1rem\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n display: \"flex\",\n width: \"fit-content\",\n ...shorthands.gap(tokens.spacingElement2),\n cursor: \"default\",\n color: tokens.grayA12,\n \"&[data-disabled]\": {\n opacity: 0.5,\n },\n },\n labelContent: {\n display: \"inline-flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n },\n labelContentHover: {\n width: 0,\n height: 0,\n overflowX: \"visible\",\n overflowY: \"visible\",\n opacity: 0,\n pointerEvents: \"none\",\n },\n description: {\n fontSize: tokens.textXs,\n lineHeight: \"1.5\",\n fontWeight: tokens.fontWeightNormal,\n ...shorthands.margin(0),\n \"& a\": {\n textDecorationLine: \"underline\",\n textUnderlineOffset: \"4px\",\n },\n },\n descriptionDefault: {\n color: tokens.grayA12,\n },\n descriptionHelper: {\n color: tokens.grayA11,\n },\n error: {\n color: tokens.semErrorOnSoft,\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightNormal,\n },\n errorList: {\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.margin(0),\n paddingLeft: \"1.25rem\",\n listStyleType: \"disc\",\n },\n errorListItem: {\n color: tokens.semErrorOnSoft,\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightNormal,\n marginTop: \"0.25rem\",\n marginBottom: \"0.25rem\",\n },\n input: {\n width: \"100%\",\n // Density-bound (DENSITY-SPEC.md §2.3): normal resolves to the same \"1.5rem\" this used before\n // binding. FieldComboboxInput (field-combobox.tsx) has its OWN separate makeVoltStyles call\n // and its own unrelated \"input\" key (width: \"100%\" only, no height) — this binding does not\n // reach it; CALIPER-WP9B2A-REVIEW-1.md corrected an earlier claim that it did.\n height: tokens.fieldInputHeight,\n outlineStyle: \"none\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \"::placeholder\": {\n color: tokens.grayA8,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n },\n },\n inputGroup: {\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n width: \"100%\",\n },\n textarea: {\n width: \"100%\",\n outlineStyle: \"none\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \"::placeholder\": {\n color: tokens.grayA8,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n },\n },\n resizeNone: {\n resize: \"none\",\n },\n resizeVertical: {\n resize: \"vertical\",\n },\n resizeHorizontal: {\n resize: \"horizontal\",\n },\n addon: {\n color: tokens.grayA11,\n display: \"flex\",\n height: \"auto\",\n cursor: \"text\",\n whiteSpace: \"nowrap\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightNormal,\n userSelect: \"none\",\n },\n addonStart: {\n order: -1,\n },\n addonEnd: {\n order: 1,\n },\n})\n\n// fieldVariants helper for v1 API compatibility\nexport const fieldVariants = ({\n variant = \"default\",\n}: { variant?: FieldVariant } = {}) => {\n return variant\n}\n\nexport type FieldProps = Omit<React.ComponentProps<\"div\">, \"className\"> & {\n className?: string\n variant?: FieldVariant\n}\n\nexport const Field = React.forwardRef<HTMLDivElement, FieldProps>(\n function Field(\n {\n className,\n variant = \"default\",\n children,\n onFocusCapture,\n onBlurCapture,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const inputRef = React.useRef<FieldInputRef>(null)\n const [isFocused, setIsFocused] = React.useState(false)\n\n const handleFocusCapture: React.ComponentProps<\"div\">[\"onFocusCapture\"] = (\n event\n ) => {\n setIsFocused(true)\n onFocusCapture?.(event)\n }\n\n const handleBlurCapture: React.ComponentProps<\"div\">[\"onBlurCapture\"] = (\n event\n ) => {\n setIsFocused(false)\n onBlurCapture?.(event)\n }\n\n const variantStyle =\n variant === \"highlight\"\n ? styles.rootHighlight\n : variant === \"readonly\"\n ? styles.rootReadonly\n : variant === \"destructive\"\n ? styles.rootDestructive\n : styles.rootDefault\n\n return (\n <FieldContext.Provider value={{ inputRef }}>\n <FieldRootBase\n ref={ref}\n role=\"group\"\n data-slot=\"field\"\n {...{ [SLOT_ATTR]: \"field\" }}\n data-focused={isFocused ? \"true\" : \"false\"}\n className={mergeClasses(styles.root, variantStyle, className)}\n onFocusCapture={handleFocusCapture}\n onBlurCapture={handleBlurCapture}\n {...props}\n >\n {children}\n </FieldRootBase>\n </FieldContext.Provider>\n )\n }\n)\n\nexport type FieldSetProps = React.ComponentProps<\"fieldset\">\n\nexport const FieldSet = React.forwardRef<HTMLFieldSetElement, FieldSetProps>(\n function FieldSet({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <fieldset\n ref={ref}\n data-slot=\"field-set\"\n {...{ [SLOT_ATTR]: \"field-set\" }}\n className={mergeClasses(styles.fieldSet, className)}\n {...props}\n />\n )\n }\n)\n\nexport type FieldGroupProps = React.ComponentProps<\"div\"> & {\n direction?: \"column\" | \"row\"\n}\n\nexport const FieldGroup = React.forwardRef<HTMLDivElement, FieldGroupProps>(\n function FieldGroup({ className, direction = \"column\", ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"field-group\"\n {...{ [SLOT_ATTR]: \"field-group\" }}\n className={mergeClasses(\n styles.fieldGroup,\n direction === \"row\" ? styles.fieldGroupRow : styles.fieldGroupColumn,\n className\n )}\n {...props}\n />\n )\n }\n)\n\nexport type FieldContentProps = React.ComponentProps<\"div\">\n\nexport const FieldContent = React.forwardRef<HTMLDivElement, FieldContentProps>(\n function FieldContent({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"field-content\"\n {...{ [SLOT_ATTR]: \"field-content\" }}\n className={mergeClasses(styles.fieldContent, className)}\n {...props}\n />\n )\n }\n)\n\nexport type FieldLabelProps = Omit<\n React.ComponentProps<\"label\">,\n \"className\"\n> & {\n className?: string\n}\n\nexport const FieldLabel = React.forwardRef<HTMLLabelElement, FieldLabelProps>(\n function FieldLabel({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <FieldLabelBase\n ref={ref}\n data-slot=\"field-label\"\n {...{ [SLOT_ATTR]: \"field-label\" }}\n className={mergeClasses(styles.label, className)}\n {...props}\n />\n )\n }\n)\n\nexport type FieldLabelContentProps = React.ComponentProps<\"div\"> & {\n showOnHover?: boolean\n}\n\nexport const FieldLabelContent = React.forwardRef<\n HTMLDivElement,\n FieldLabelContentProps\n>(function FieldLabelContent({ className, showOnHover = true, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"field-label-content\"\n {...{ [SLOT_ATTR]: \"field-label-content\" }}\n className={mergeClasses(\n styles.labelContent,\n showOnHover && styles.labelContentHover,\n className\n )}\n {...props}\n />\n )\n})\n\nexport type FieldDescriptionVariant = \"default\" | \"helper\"\n\nexport const fieldDescriptionVariants = ({\n variant = \"default\",\n}: { variant?: FieldDescriptionVariant } = {}) => {\n return variant\n}\n\nexport type FieldDescriptionProps = Omit<\n React.ComponentProps<\"p\">,\n \"className\"\n> & {\n className?: string\n variant?: FieldDescriptionVariant\n}\n\nexport const FieldDescription = React.forwardRef<\n HTMLParagraphElement,\n FieldDescriptionProps\n>(function FieldDescription({ className, variant = \"default\", ...props }, ref) {\n const styles = useStyles()\n\n const variantStyle =\n variant === \"helper\" ? styles.descriptionHelper : styles.descriptionDefault\n\n return (\n <FieldDescriptionBase\n ref={ref}\n data-slot=\"field-description\"\n {...{ [SLOT_ATTR]: \"field-description\" }}\n className={mergeClasses(styles.description, variantStyle, className)}\n {...props}\n />\n )\n})\n\nexport type FieldErrorProps = Omit<React.ComponentProps<\"div\">, \"className\"> & {\n className?: string\n errors?: Array<{ message?: string } | undefined>\n}\n\nexport const FieldError = React.forwardRef<HTMLDivElement, FieldErrorProps>(\n function FieldError({ className, children, errors, ...props }, ref) {\n const styles = useStyles()\n\n const content = React.useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors.length === 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className={styles.errorList}>\n {uniqueErrors.map(\n (error, index) =>\n error?.message && (\n <li className={styles.errorListItem} key={index}>\n {error.message}\n </li>\n )\n )}\n </ul>\n )\n }, [children, errors, styles.errorList, styles.errorListItem])\n\n if (!content) {\n return null\n }\n\n return (\n <FieldErrorBase\n ref={ref}\n role=\"alert\"\n data-slot=\"field-error\"\n {...{ [SLOT_ATTR]: \"field-error\" }}\n className={mergeClasses(styles.error, className)}\n {...props}\n >\n {content}\n </FieldErrorBase>\n )\n }\n)\n\nexport type FieldInputProps = Omit<\n React.ComponentProps<\"input\">,\n \"className\"\n> & {\n className?: string\n}\n\nexport const FieldInput = React.forwardRef<HTMLInputElement, FieldInputProps>(\n function FieldInput({ className, ...props }, forwardedRef) {\n const styles = useStyles()\n const { inputRef } = useFieldContext()\n\n return (\n <FieldControlBase\n ref={(el: HTMLElement | null) => {\n inputRef.current = el as HTMLInputElement | null\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el as HTMLInputElement)\n } else if (forwardedRef) {\n forwardedRef.current = el as HTMLInputElement | null\n }\n }}\n data-readonly={props.readOnly}\n data-slot=\"field-input\"\n {...{ [SLOT_ATTR]: \"field-input\" }}\n className={mergeClasses(styles.input, className)}\n {...props}\n />\n )\n }\n)\n\nexport type FieldInputGroupProps = React.ComponentProps<\"div\">\n\nexport const FieldInputGroup = React.forwardRef<\n HTMLDivElement,\n FieldInputGroupProps\n>(function FieldInputGroup({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"field-input-group\"\n {...{ [SLOT_ATTR]: \"field-input-group\" }}\n className={mergeClasses(styles.inputGroup, className)}\n {...props}\n />\n )\n})\n\nexport type FieldTextareaResize = \"none\" | \"vertical\" | \"horizontal\"\n\nexport type FieldTextareaProps = React.ComponentProps<\"textarea\"> & {\n resize?: FieldTextareaResize\n}\n\nexport const FieldTextarea = React.forwardRef<\n HTMLTextAreaElement,\n FieldTextareaProps\n>(function FieldTextarea(\n { className, resize = \"none\", ...props },\n forwardedRef\n) {\n const styles = useStyles()\n const { inputRef } = useFieldContext()\n\n const resizeStyle =\n resize === \"vertical\"\n ? styles.resizeVertical\n : resize === \"horizontal\"\n ? styles.resizeHorizontal\n : styles.resizeNone\n\n return (\n <textarea\n {...props}\n ref={(el: HTMLTextAreaElement | null) => {\n inputRef.current = el\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el)\n } else if (forwardedRef) {\n forwardedRef.current = el\n }\n }}\n data-readonly={props.readOnly}\n data-slot=\"field-textarea\"\n {...{ [SLOT_ATTR]: \"field-textarea\" }}\n data-resize={resize}\n className={mergeClasses(styles.textarea, resizeStyle, className)}\n />\n )\n})\n\nexport type FieldGroupAddonAlign = \"start\" | \"end\"\n\nexport const inputGroupAddonVariants = ({\n align = \"start\",\n}: { align?: FieldGroupAddonAlign } = {}) => {\n return align\n}\n\nexport type FieldGroupAddonProps = React.ComponentProps<\"div\"> & {\n align?: FieldGroupAddonAlign\n}\n\nexport const FieldGroupAddon = React.forwardRef<\n HTMLDivElement,\n FieldGroupAddonProps\n>(function FieldGroupAddon({ className, align = \"start\", ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group-addon\"\n {...{ [SLOT_ATTR]: \"input-group-addon\" }}\n data-align={align}\n className={mergeClasses(\n styles.addon,\n align === \"end\" ? styles.addonEnd : styles.addonStart,\n className\n )}\n {...props}\n />\n )\n})\n"],"names":["FieldRootBase","FieldLabelBase","FieldControlBase","FieldDescriptionBase","FieldErrorBase","FieldContext","React","useFieldContext","context","useOptionalFieldContext","useStyles","makeVoltStyles","tokens.fieldPaddingY","tokens.fieldPaddingX","shorthands","tokens.spacingElement1","tokens.radiusLg","tokens.semFocusRing","tokens.semErrorSoft","SLOT_ATTR","tokens.grayA3","tokens.grayA4","tokens.accentA3","tokens.accentA4","tokens.errorA4","tokens.fieldSetGap","tokens.spacingElement2","tokens.textXs","tokens.leadingXs","tokens.grayA12","tokens.fontWeightNormal","tokens.grayA11","tokens.semErrorOnSoft","tokens.fieldInputHeight","tokens.textSm","tokens.leadingSm","tokens.grayA8","fieldVariants","variant","Field","className","children","onFocusCapture","onBlurCapture","props","ref","styles","inputRef","isFocused","setIsFocused","handleFocusCapture","event","handleBlurCapture","variantStyle","jsxDEV","mergeClasses","FieldSet","FieldGroup","direction","FieldContent","FieldLabel","FieldLabelContent","showOnHover","fieldDescriptionVariants","FieldDescription","FieldError","errors","content","uniqueErrors","error","_a","index","FieldInput","forwardedRef","el","FieldInputGroup","FieldTextarea","resize","resizeStyle","inputGroupAddonVariants","align","FieldGroupAddon"],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import * as
|
|
1
|
+
import { j as l } from "../../vendor/react/jsx-dev-runtime.js";
|
|
2
|
+
import * as i from "react";
|
|
3
3
|
import { shorthands as n } from "../../packages/volt-runtime/dist/vendor/@griffel/core/src/index.js";
|
|
4
4
|
import { SLOT_ATTR as m } from "../../packages/volt-runtime/dist/renderer/contract.js";
|
|
5
5
|
import { mergeClasses as f } from "../../packages/volt-runtime/dist/vendor/@griffel/core/src/mergeClasses.js";
|
|
6
6
|
import { makeVoltStyles as p } from "../../styles/make-styles.js";
|
|
7
|
-
import { spacingElement2 as
|
|
8
|
-
const
|
|
7
|
+
import { spacingElement2 as c, leadingBase as g, textBase as b, leadingSm as d, textSm as u, leadingXs as x, textXs as y, errorA12 as h, grayA12 as S, fontWeightNormal as v } from "../../tokens/index.js";
|
|
8
|
+
const N = p({
|
|
9
9
|
root: {
|
|
10
10
|
display: "flex",
|
|
11
11
|
alignItems: "center",
|
|
12
|
-
...n.gap(
|
|
12
|
+
...n.gap(c),
|
|
13
13
|
// The leading lives on the size slots below, and which value it takes is a decided question --
|
|
14
14
|
// see DECISIONS.md D9 and the label specimens in vr/specimens that pin it.
|
|
15
15
|
//
|
|
@@ -34,7 +34,7 @@ const A = p({
|
|
|
34
34
|
// and both belong in a STABLE360 ticket against v1. When v1 is fixed, delete the VR shim (see
|
|
35
35
|
// vr/run.mjs V1_DECLARED_LEADING_SHIM); vr/v1-leading-references.test.ts fails on purpose to
|
|
36
36
|
// force that, so the decision gets revisited together with the fix rather than silently.
|
|
37
|
-
fontWeight:
|
|
37
|
+
fontWeight: v,
|
|
38
38
|
"&[for]": {
|
|
39
39
|
cursor: "pointer"
|
|
40
40
|
},
|
|
@@ -53,28 +53,28 @@ const A = p({
|
|
|
53
53
|
},
|
|
54
54
|
// Variants
|
|
55
55
|
primary: {
|
|
56
|
-
color:
|
|
56
|
+
color: S
|
|
57
57
|
},
|
|
58
58
|
destructive: {
|
|
59
|
-
color:
|
|
59
|
+
color: h
|
|
60
60
|
},
|
|
61
61
|
// Sizes
|
|
62
62
|
sm: {
|
|
63
|
-
fontSize:
|
|
64
|
-
lineHeight:
|
|
63
|
+
fontSize: y,
|
|
64
|
+
lineHeight: x
|
|
65
65
|
},
|
|
66
66
|
base: {
|
|
67
|
-
fontSize:
|
|
68
|
-
lineHeight:
|
|
67
|
+
fontSize: u,
|
|
68
|
+
lineHeight: d
|
|
69
69
|
},
|
|
70
70
|
lg: {
|
|
71
|
-
fontSize:
|
|
72
|
-
lineHeight:
|
|
71
|
+
fontSize: b,
|
|
72
|
+
lineHeight: g
|
|
73
73
|
}
|
|
74
|
-
}),
|
|
74
|
+
}), T = i.forwardRef(
|
|
75
75
|
function({ variant: t = "primary", size: o = "base", className: r, ...a }, s) {
|
|
76
|
-
const e =
|
|
77
|
-
return /* @__PURE__ */
|
|
76
|
+
const e = N();
|
|
77
|
+
return /* @__PURE__ */ l.jsxDEV(
|
|
78
78
|
"label",
|
|
79
79
|
{
|
|
80
80
|
ref: s,
|
|
@@ -87,11 +87,19 @@ const A = p({
|
|
|
87
87
|
r
|
|
88
88
|
),
|
|
89
89
|
...a
|
|
90
|
-
}
|
|
90
|
+
},
|
|
91
|
+
void 0,
|
|
92
|
+
!1,
|
|
93
|
+
{
|
|
94
|
+
fileName: "/Users/wilianmolinari/repos/volt-ui-rollout/release/packages/experimental-griffel/src/components/label/label.tsx",
|
|
95
|
+
lineNumber: 107,
|
|
96
|
+
columnNumber: 7
|
|
97
|
+
},
|
|
98
|
+
this
|
|
91
99
|
);
|
|
92
100
|
}
|
|
93
101
|
);
|
|
94
102
|
export {
|
|
95
|
-
|
|
103
|
+
T as Label
|
|
96
104
|
};
|
|
97
105
|
//# sourceMappingURL=label.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label.js","sources":["../../../src/components/label/label.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/volt-ui-runtime\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeVoltStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * Label — a native `<label>` element styled with Griffel atoms.\n *\n * Base UI has no Label primitive; v1 wrapped `@radix-ui/react-label`, which only added an\n * `onMouseDown` handler preventing text selection on double click while wrapping a `<label>`\n * to wire `htmlFor`. A native `<label>` natively associates with form controls via `htmlFor` or\n * nesting, so we render a native `<label>` directly with no Base UI or Radix dependency.\n *\n * Variants: `primary` (`gray-a12`) and `destructive` (`error-a12`), both from the core token\n * sheet so no palette install is required.\n *\n * Sizes: `sm` (`text-xs`), `base` (`text-sm`), and `lg` (`text-base`).\n */\n\nexport type LabelVariant = \"primary\" | \"destructive\"\nexport type LabelSize = \"sm\" | \"base\" | \"lg\"\n\nconst useStyles = makeVoltStyles({\n root: {\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n // The leading lives on the size slots below, and which value it takes is a decided question --\n // see DECISIONS.md D9 and the label specimens in vr/specimens that pin it.\n //\n // v1's source string is `text-sm leading-none`, and `leading-none` never reaches the DOM: v1's\n // cn() runs tailwind-merge, which treats the later `text-sm` as also owning line-height (true in\n // Tailwind v3) and drops it. So the class that actually ships is `.volt-text-sm`, and what v1\n // DECLARES for a label is text-sm's own leading -- 1.25rem at the base size, not 1.\n //\n // v1 never renders that either. `.volt-text-sm` reads\n // line-height: var(--volt-leading, var(--text-sm--line-height))\n // and neither name resolves in the shipped sheet: the prefixer rewrote the DEFINITION to\n // --volt-text-sm--line-height and left this REFERENCE unprefixed, so the declaration is invalid\n // and falls back to inherited -- 1.5 under root-config's Tailwind preflight, i.e. 21px at 14px.\n //\n // v2 renders the declared intent: `lineHeight: tokens.leadingSm` at size `base`, paired with the\n // size the same way every other text slot in this package now is. Against what broken v1 renders\n // that is 2px shorter per line at `sm`, 1px shorter at `base` and identical at `lg` -- small, but\n // a real re-measure for a form, which is why D9 exists. The VR harness compares against\n // v1-as-DECLARED via one documented shim on the v1 arm.\n //\n // Two v1 bugs compound here -- the unprefixed prefixer reference and the tailwind-merge drop --\n // and both belong in a STABLE360 ticket against v1. When v1 is fixed, delete the VR shim (see\n // vr/run.mjs V1_DECLARED_LEADING_SHIM); vr/v1-leading-references.test.ts fails on purpose to\n // force that, so the decision gets revisited together with the fix rather than silently.\n fontWeight: tokens.fontWeightNormal,\n \"&[for]\": {\n cursor: \"pointer\",\n },\n // The disabled-by-ANCESTOR and disabled-by-SIBLING rules are not here; they live on Field,\n // which owns the elements those selectors are rooted at. See field.tsx.\n //\n // v1 expresses them with Tailwind's `group-data-[disabled=true]:` and `peer-disabled:`, which\n // work only because Tailwind emits GLOBAL utility classes that can be rooted anywhere. Scoped\n // atomic CSS cannot: a rule has to be declared by the component that owns the element the\n // selector starts from. That is a real capability difference, and the consequence is recorded in\n // field.tsx — a Label used OUTSIDE a Field, next to a disabled input, will not dim.\n \"&[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n },\n // Variants\n primary: {\n color: tokens.grayA12,\n },\n destructive: {\n color: tokens.errorA12,\n },\n // Sizes\n sm: {\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n },\n base: {\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n lg: {\n fontSize: tokens.textBase,\n lineHeight: tokens.leadingBase,\n },\n})\n\nexport type LabelProps = React.ComponentProps<\"label\"> & {\n variant?: LabelVariant\n size?: LabelSize\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n function Label(\n { variant = \"primary\", size = \"base\", className, ...props },\n ref\n ) {\n const styles = useStyles()\n\n return (\n <label\n ref={ref}\n data-slot=\"label\"\n {...{ [SLOT_ATTR]: \"label\" }}\n className={mergeClasses(\n styles.root,\n styles[variant],\n styles[size],\n className\n )}\n {...props}\n />\n )\n }\n)\n"],"names":["useStyles","makeVoltStyles","shorthands","tokens.spacingElement2","tokens.fontWeightNormal","tokens.grayA12","tokens.errorA12","tokens.textXs","tokens.leadingXs","tokens.textSm","tokens.leadingSm","tokens.textBase","tokens.leadingBase","Label","React","variant","size","className","props","ref","styles","
|
|
1
|
+
{"version":3,"file":"label.js","sources":["../../../src/components/label/label.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/volt-ui-runtime\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeVoltStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * Label — a native `<label>` element styled with Griffel atoms.\n *\n * Base UI has no Label primitive; v1 wrapped `@radix-ui/react-label`, which only added an\n * `onMouseDown` handler preventing text selection on double click while wrapping a `<label>`\n * to wire `htmlFor`. A native `<label>` natively associates with form controls via `htmlFor` or\n * nesting, so we render a native `<label>` directly with no Base UI or Radix dependency.\n *\n * Variants: `primary` (`gray-a12`) and `destructive` (`error-a12`), both from the core token\n * sheet so no palette install is required.\n *\n * Sizes: `sm` (`text-xs`), `base` (`text-sm`), and `lg` (`text-base`).\n */\n\nexport type LabelVariant = \"primary\" | \"destructive\"\nexport type LabelSize = \"sm\" | \"base\" | \"lg\"\n\nconst useStyles = makeVoltStyles({\n root: {\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n // The leading lives on the size slots below, and which value it takes is a decided question --\n // see DECISIONS.md D9 and the label specimens in vr/specimens that pin it.\n //\n // v1's source string is `text-sm leading-none`, and `leading-none` never reaches the DOM: v1's\n // cn() runs tailwind-merge, which treats the later `text-sm` as also owning line-height (true in\n // Tailwind v3) and drops it. So the class that actually ships is `.volt-text-sm`, and what v1\n // DECLARES for a label is text-sm's own leading -- 1.25rem at the base size, not 1.\n //\n // v1 never renders that either. `.volt-text-sm` reads\n // line-height: var(--volt-leading, var(--text-sm--line-height))\n // and neither name resolves in the shipped sheet: the prefixer rewrote the DEFINITION to\n // --volt-text-sm--line-height and left this REFERENCE unprefixed, so the declaration is invalid\n // and falls back to inherited -- 1.5 under root-config's Tailwind preflight, i.e. 21px at 14px.\n //\n // v2 renders the declared intent: `lineHeight: tokens.leadingSm` at size `base`, paired with the\n // size the same way every other text slot in this package now is. Against what broken v1 renders\n // that is 2px shorter per line at `sm`, 1px shorter at `base` and identical at `lg` -- small, but\n // a real re-measure for a form, which is why D9 exists. The VR harness compares against\n // v1-as-DECLARED via one documented shim on the v1 arm.\n //\n // Two v1 bugs compound here -- the unprefixed prefixer reference and the tailwind-merge drop --\n // and both belong in a STABLE360 ticket against v1. When v1 is fixed, delete the VR shim (see\n // vr/run.mjs V1_DECLARED_LEADING_SHIM); vr/v1-leading-references.test.ts fails on purpose to\n // force that, so the decision gets revisited together with the fix rather than silently.\n fontWeight: tokens.fontWeightNormal,\n \"&[for]\": {\n cursor: \"pointer\",\n },\n // The disabled-by-ANCESTOR and disabled-by-SIBLING rules are not here; they live on Field,\n // which owns the elements those selectors are rooted at. See field.tsx.\n //\n // v1 expresses them with Tailwind's `group-data-[disabled=true]:` and `peer-disabled:`, which\n // work only because Tailwind emits GLOBAL utility classes that can be rooted anywhere. Scoped\n // atomic CSS cannot: a rule has to be declared by the component that owns the element the\n // selector starts from. That is a real capability difference, and the consequence is recorded in\n // field.tsx — a Label used OUTSIDE a Field, next to a disabled input, will not dim.\n \"&[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n },\n // Variants\n primary: {\n color: tokens.grayA12,\n },\n destructive: {\n color: tokens.errorA12,\n },\n // Sizes\n sm: {\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n },\n base: {\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n lg: {\n fontSize: tokens.textBase,\n lineHeight: tokens.leadingBase,\n },\n})\n\nexport type LabelProps = React.ComponentProps<\"label\"> & {\n variant?: LabelVariant\n size?: LabelSize\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n function Label(\n { variant = \"primary\", size = \"base\", className, ...props },\n ref\n ) {\n const styles = useStyles()\n\n return (\n <label\n ref={ref}\n data-slot=\"label\"\n {...{ [SLOT_ATTR]: \"label\" }}\n className={mergeClasses(\n styles.root,\n styles[variant],\n styles[size],\n className\n )}\n {...props}\n />\n )\n }\n)\n"],"names":["useStyles","makeVoltStyles","shorthands","tokens.spacingElement2","tokens.fontWeightNormal","tokens.grayA12","tokens.errorA12","tokens.textXs","tokens.leadingXs","tokens.textSm","tokens.leadingSm","tokens.textBase","tokens.leadingBase","Label","React","variant","size","className","props","ref","styles","jsxDEV","SLOT_ATTR","mergeClasses"],"mappings":";;;;;;;AAyBA,MAAMA,IAAYC,EAAe;AAAA,EAC/B,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,GAAGC,EAAW,IAAIC,CAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAyBxC,YAAYC;AAAAA,IACZ,UAAU;AAAA,MACR,QAAQ;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUV,oBAAoB;AAAA,MAClB,eAAe;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAAA;AAAA,EAGF,SAAS;AAAA,IACP,OAAOC;AAAAA,EAAO;AAAA,EAEhB,aAAa;AAAA,IACX,OAAOC;AAAAA,EAAO;AAAA;AAAA,EAGhB,IAAI;AAAA,IACF,UAAUC;AAAAA,IACV,YAAYC;AAAAA,EAAO;AAAA,EAErB,MAAM;AAAA,IACJ,UAAUC;AAAAA,IACV,YAAYC;AAAAA,EAAO;AAAA,EAErB,IAAI;AAAA,IACF,UAAUC;AAAAA,IACV,YAAYC;AAAAA,EAAO;AAEvB,CAAC,GAOYC,IAAQC,EAAM;AAAA,EACzB,SACE,EAAE,SAAAC,IAAU,WAAW,MAAAC,IAAO,QAAQ,WAAAC,GAAW,GAAGC,EAAA,GACpDC,GACA;AACA,UAAMC,IAASpB,EAAA;AAEf,WACEqB,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAF;AAAA,QACA,aAAU;AAAA,QACJ,CAACG,CAAS,GAAG;AAAA,QACnB,WAAWC;AAAAA,UACTH,EAAO;AAAA,UACPA,EAAOL,CAAO;AAAA,UACdK,EAAOJ,CAAI;AAAA,UACXC;AAAA,QAAA;AAAA,QAED,GAAGC;AAAA,MAAA;AAAA,MAVN;AAAA,MAAA;AAAA,MAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAaJ;AACF;"}
|