sherick-ui 2.9.0 → 2.10.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/README.md +32 -0
- package/dist/cjs/components/Accordion.cjs +14 -26
- package/dist/cjs/components/Accordion.cjs.map +1 -1
- package/dist/cjs/components/Alert.cjs +60 -19
- package/dist/cjs/components/Alert.cjs.map +1 -1
- package/dist/cjs/components/AlertDialog.cjs +5 -3
- package/dist/cjs/components/AlertDialog.cjs.map +1 -1
- package/dist/cjs/components/Avatar.cjs +12 -3
- package/dist/cjs/components/Avatar.cjs.map +1 -1
- package/dist/cjs/components/Badge.cjs +5 -3
- package/dist/cjs/components/Badge.cjs.map +1 -1
- package/dist/cjs/components/Breadcrumb.cjs +8 -4
- package/dist/cjs/components/Breadcrumb.cjs.map +1 -1
- package/dist/cjs/components/Button.cjs +11 -4
- package/dist/cjs/components/Button.cjs.map +1 -1
- package/dist/cjs/components/Calendar.cjs +39 -4
- package/dist/cjs/components/Calendar.cjs.map +1 -1
- package/dist/cjs/components/Card.cjs +10 -6
- package/dist/cjs/components/Card.cjs.map +1 -1
- package/dist/cjs/components/Checkbox.cjs +15 -3
- package/dist/cjs/components/Checkbox.cjs.map +1 -1
- package/dist/cjs/components/CheckboxGroup.cjs +3 -2
- package/dist/cjs/components/CheckboxGroup.cjs.map +1 -1
- package/dist/cjs/components/Chip.cjs +53 -43
- package/dist/cjs/components/Chip.cjs.map +1 -1
- package/dist/cjs/components/ChipGroup.cjs +17 -0
- package/dist/cjs/components/ChipGroup.cjs.map +1 -1
- package/dist/cjs/components/Collapsible.cjs +1 -1
- package/dist/cjs/components/Collapsible.cjs.map +1 -1
- package/dist/cjs/components/Combobox.cjs +58 -14
- package/dist/cjs/components/Combobox.cjs.map +1 -1
- package/dist/cjs/components/Command.cjs +10 -4
- package/dist/cjs/components/Command.cjs.map +1 -1
- package/dist/cjs/components/CommandPalette.cjs +5 -2
- package/dist/cjs/components/CommandPalette.cjs.map +1 -1
- package/dist/cjs/components/DatePicker.cjs +6 -3
- package/dist/cjs/components/DatePicker.cjs.map +1 -1
- package/dist/cjs/components/DateRangePicker.cjs +3 -2
- package/dist/cjs/components/DateRangePicker.cjs.map +1 -1
- package/dist/cjs/components/DateTimePicker.cjs +1 -1
- package/dist/cjs/components/DateTimePicker.cjs.map +1 -1
- package/dist/cjs/components/Dialog.cjs +10 -3
- package/dist/cjs/components/Dialog.cjs.map +1 -1
- package/dist/cjs/components/DialogContent.cjs +5 -3
- package/dist/cjs/components/DialogContent.cjs.map +1 -1
- package/dist/cjs/components/DialogDescription.cjs +5 -3
- package/dist/cjs/components/DialogDescription.cjs.map +1 -1
- package/dist/cjs/components/DialogFooter.cjs +3 -3
- package/dist/cjs/components/DialogFooter.cjs.map +1 -1
- package/dist/cjs/components/DialogHeader.cjs +5 -3
- package/dist/cjs/components/DialogHeader.cjs.map +1 -1
- package/dist/cjs/components/DialogSurface.cjs +37 -15
- package/dist/cjs/components/DialogSurface.cjs.map +1 -1
- package/dist/cjs/components/DismissButton.cjs +24 -0
- package/dist/cjs/components/DismissButton.cjs.map +1 -0
- package/dist/cjs/components/Divider.cjs +3 -1
- package/dist/cjs/components/Divider.cjs.map +1 -1
- package/dist/cjs/components/Drawer.cjs +24 -14
- package/dist/cjs/components/Drawer.cjs.map +1 -1
- package/dist/cjs/components/Field.cjs +47 -2
- package/dist/cjs/components/Field.cjs.map +1 -1
- package/dist/cjs/components/FieldLabel.cjs +20 -0
- package/dist/cjs/components/FieldLabel.cjs.map +1 -0
- package/dist/cjs/components/FileUpload.cjs +19 -9
- package/dist/cjs/components/FileUpload.cjs.map +1 -1
- package/dist/cjs/components/IconButton.cjs +28 -7
- package/dist/cjs/components/IconButton.cjs.map +1 -1
- package/dist/cjs/components/Input.cjs +14 -5
- package/dist/cjs/components/Input.cjs.map +1 -1
- package/dist/cjs/components/Menu.cjs +18 -4
- package/dist/cjs/components/Menu.cjs.map +1 -1
- package/dist/cjs/components/NavGroup.cjs +7 -1
- package/dist/cjs/components/NavGroup.cjs.map +1 -1
- package/dist/cjs/components/NavItem.cjs +28 -3
- package/dist/cjs/components/NavItem.cjs.map +1 -1
- package/dist/cjs/components/NumberField.cjs +7 -6
- package/dist/cjs/components/NumberField.cjs.map +1 -1
- package/dist/cjs/components/Pagination.cjs +42 -8
- package/dist/cjs/components/Pagination.cjs.map +1 -1
- package/dist/cjs/components/Popover.cjs +13 -5
- package/dist/cjs/components/Popover.cjs.map +1 -1
- package/dist/cjs/components/Progress.cjs +5 -3
- package/dist/cjs/components/Progress.cjs.map +1 -1
- package/dist/cjs/components/RadioGroup.cjs +3 -2
- package/dist/cjs/components/RadioGroup.cjs.map +1 -1
- package/dist/cjs/components/Search.cjs +35 -14
- package/dist/cjs/components/Search.cjs.map +1 -1
- package/dist/cjs/components/SegmentedControl.cjs +2 -1
- package/dist/cjs/components/SegmentedControl.cjs.map +1 -1
- package/dist/cjs/components/Select.cjs +14 -4
- package/dist/cjs/components/Select.cjs.map +1 -1
- package/dist/cjs/components/Skeleton.cjs +5 -3
- package/dist/cjs/components/Skeleton.cjs.map +1 -1
- package/dist/cjs/components/Slider.cjs +1 -1
- package/dist/cjs/components/Slider.cjs.map +1 -1
- package/dist/cjs/components/Spinner.cjs +24 -14
- package/dist/cjs/components/Spinner.cjs.map +1 -1
- package/dist/cjs/components/StatusMark.cjs +43 -0
- package/dist/cjs/components/StatusMark.cjs.map +1 -0
- package/dist/cjs/components/Stepper.cjs +3 -3
- package/dist/cjs/components/Stepper.cjs.map +1 -1
- package/dist/cjs/components/Switch.cjs +20 -1
- package/dist/cjs/components/Switch.cjs.map +1 -1
- package/dist/cjs/components/Table.cjs +15 -7
- package/dist/cjs/components/Table.cjs.map +1 -1
- package/dist/cjs/components/Tabs.cjs +10 -3
- package/dist/cjs/components/Tabs.cjs.map +1 -1
- package/dist/cjs/components/Textarea.cjs +8 -4
- package/dist/cjs/components/Textarea.cjs.map +1 -1
- package/dist/cjs/components/Toast.cjs +47 -34
- package/dist/cjs/components/Toast.cjs.map +1 -1
- package/dist/cjs/components/ToggleGroup.cjs +14 -3
- package/dist/cjs/components/ToggleGroup.cjs.map +1 -1
- package/dist/cjs/components/Tooltip.cjs +16 -2
- package/dist/cjs/components/Tooltip.cjs.map +1 -1
- package/dist/cjs/components/TreeView.cjs +8 -4
- package/dist/cjs/components/TreeView.cjs.map +1 -1
- package/dist/cjs/components/choice-row.cjs +1 -1
- package/dist/cjs/components/choice-row.cjs.map +1 -1
- package/dist/cjs/components/date-family.cjs +16 -2
- package/dist/cjs/components/date-family.cjs.map +1 -1
- package/dist/cjs/components/date-field.cjs +4 -2
- package/dist/cjs/components/date-field.cjs.map +1 -1
- package/dist/cjs/components/edge-fade.cjs +80 -0
- package/dist/cjs/components/edge-fade.cjs.map +1 -0
- package/dist/cjs/components/scroll-region.cjs +56 -0
- package/dist/cjs/components/scroll-region.cjs.map +1 -0
- package/dist/cjs/components/time-panel.cjs +1 -1
- package/dist/cjs/components/time-panel.cjs.map +1 -1
- package/dist/cjs/components/ui.common.cjs +115 -58
- package/dist/cjs/components/ui.common.cjs.map +1 -1
- package/dist/cjs/components/ui.motion.cjs +41 -15
- package/dist/cjs/components/ui.motion.cjs.map +1 -1
- package/dist/cjs/dev.cjs +5 -0
- package/dist/cjs/dev.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/components/Accordion.js +16 -28
- package/dist/esm/components/Accordion.js.map +1 -1
- package/dist/esm/components/Alert.js +62 -22
- package/dist/esm/components/Alert.js.map +1 -1
- package/dist/esm/components/AlertDialog.js +6 -4
- package/dist/esm/components/AlertDialog.js.map +1 -1
- package/dist/esm/components/Avatar.js +14 -5
- package/dist/esm/components/Avatar.js.map +1 -1
- package/dist/esm/components/Badge.js +5 -3
- package/dist/esm/components/Badge.js.map +1 -1
- package/dist/esm/components/Breadcrumb.js +9 -5
- package/dist/esm/components/Breadcrumb.js.map +1 -1
- package/dist/esm/components/Button.js +11 -4
- package/dist/esm/components/Button.js.map +1 -1
- package/dist/esm/components/Calendar.js +42 -7
- package/dist/esm/components/Calendar.js.map +1 -1
- package/dist/esm/components/Card.js +12 -8
- package/dist/esm/components/Card.js.map +1 -1
- package/dist/esm/components/Checkbox.js +16 -4
- package/dist/esm/components/Checkbox.js.map +1 -1
- package/dist/esm/components/CheckboxGroup.js +3 -2
- package/dist/esm/components/CheckboxGroup.js.map +1 -1
- package/dist/esm/components/Chip.js +56 -46
- package/dist/esm/components/Chip.js.map +1 -1
- package/dist/esm/components/ChipGroup.js +18 -1
- package/dist/esm/components/ChipGroup.js.map +1 -1
- package/dist/esm/components/CodeBlock.js +58 -28
- package/dist/esm/components/CodeBlock.js.map +1 -1
- package/dist/esm/components/Collapsible.js +1 -1
- package/dist/esm/components/Collapsible.js.map +1 -1
- package/dist/esm/components/Combobox.js +62 -18
- package/dist/esm/components/Combobox.js.map +1 -1
- package/dist/esm/components/Command.js +11 -5
- package/dist/esm/components/Command.js.map +1 -1
- package/dist/esm/components/CommandPalette.js +7 -4
- package/dist/esm/components/CommandPalette.js.map +1 -1
- package/dist/esm/components/DatePicker.js +7 -4
- package/dist/esm/components/DatePicker.js.map +1 -1
- package/dist/esm/components/DateRangePicker.js +4 -3
- package/dist/esm/components/DateRangePicker.js.map +1 -1
- package/dist/esm/components/DateTimePicker.js +1 -1
- package/dist/esm/components/DateTimePicker.js.map +1 -1
- package/dist/esm/components/Dialog.js +12 -6
- package/dist/esm/components/Dialog.js.map +1 -1
- package/dist/esm/components/DialogContent.js +6 -4
- package/dist/esm/components/DialogContent.js.map +1 -1
- package/dist/esm/components/DialogDescription.js +6 -4
- package/dist/esm/components/DialogDescription.js.map +1 -1
- package/dist/esm/components/DialogFooter.js +3 -3
- package/dist/esm/components/DialogFooter.js.map +1 -1
- package/dist/esm/components/DialogHeader.js +5 -3
- package/dist/esm/components/DialogHeader.js.map +1 -1
- package/dist/esm/components/DialogSurface.js +38 -17
- package/dist/esm/components/DialogSurface.js.map +1 -1
- package/dist/esm/components/DismissButton.js +20 -0
- package/dist/esm/components/DismissButton.js.map +1 -0
- package/dist/esm/components/Divider.js +3 -1
- package/dist/esm/components/Divider.js.map +1 -1
- package/dist/esm/components/Drawer.js +27 -17
- package/dist/esm/components/Drawer.js.map +1 -1
- package/dist/esm/components/Field.js +49 -6
- package/dist/esm/components/Field.js.map +1 -1
- package/dist/esm/components/FieldLabel.js +15 -0
- package/dist/esm/components/FieldLabel.js.map +1 -0
- package/dist/esm/components/FileUpload.js +23 -13
- package/dist/esm/components/FileUpload.js.map +1 -1
- package/dist/esm/components/IconButton.js +30 -9
- package/dist/esm/components/IconButton.js.map +1 -1
- package/dist/esm/components/Input.js +15 -6
- package/dist/esm/components/Input.js.map +1 -1
- package/dist/esm/components/Markdown.js +7 -4
- package/dist/esm/components/Markdown.js.map +1 -1
- package/dist/esm/components/Menu.js +20 -6
- package/dist/esm/components/Menu.js.map +1 -1
- package/dist/esm/components/NavGroup.js +8 -2
- package/dist/esm/components/NavGroup.js.map +1 -1
- package/dist/esm/components/NavItem.js +30 -6
- package/dist/esm/components/NavItem.js.map +1 -1
- package/dist/esm/components/NumberField.js +8 -7
- package/dist/esm/components/NumberField.js.map +1 -1
- package/dist/esm/components/Pagination.js +43 -9
- package/dist/esm/components/Pagination.js.map +1 -1
- package/dist/esm/components/Popover.js +14 -6
- package/dist/esm/components/Popover.js.map +1 -1
- package/dist/esm/components/Progress.js +5 -3
- package/dist/esm/components/Progress.js.map +1 -1
- package/dist/esm/components/RadioGroup.js +3 -2
- package/dist/esm/components/RadioGroup.js.map +1 -1
- package/dist/esm/components/Search.js +36 -15
- package/dist/esm/components/Search.js.map +1 -1
- package/dist/esm/components/SegmentedControl.js +2 -1
- package/dist/esm/components/SegmentedControl.js.map +1 -1
- package/dist/esm/components/Select.js +16 -6
- package/dist/esm/components/Select.js.map +1 -1
- package/dist/esm/components/Skeleton.js +5 -3
- package/dist/esm/components/Skeleton.js.map +1 -1
- package/dist/esm/components/Slider.js +2 -2
- package/dist/esm/components/Slider.js.map +1 -1
- package/dist/esm/components/Spinner.js +24 -14
- package/dist/esm/components/Spinner.js.map +1 -1
- package/dist/esm/components/StatusMark.js +38 -0
- package/dist/esm/components/StatusMark.js.map +1 -0
- package/dist/esm/components/Stepper.js +4 -4
- package/dist/esm/components/Stepper.js.map +1 -1
- package/dist/esm/components/Switch.js +21 -2
- package/dist/esm/components/Switch.js.map +1 -1
- package/dist/esm/components/Table.js +16 -8
- package/dist/esm/components/Table.js.map +1 -1
- package/dist/esm/components/Tabs.js +11 -4
- package/dist/esm/components/Tabs.js.map +1 -1
- package/dist/esm/components/Textarea.js +8 -4
- package/dist/esm/components/Textarea.js.map +1 -1
- package/dist/esm/components/Toast.js +49 -36
- package/dist/esm/components/Toast.js.map +1 -1
- package/dist/esm/components/ToggleGroup.js +16 -5
- package/dist/esm/components/ToggleGroup.js.map +1 -1
- package/dist/esm/components/Tooltip.js +17 -4
- package/dist/esm/components/Tooltip.js.map +1 -1
- package/dist/esm/components/TreeView.js +9 -5
- package/dist/esm/components/TreeView.js.map +1 -1
- package/dist/esm/components/choice-row.js +1 -1
- package/dist/esm/components/choice-row.js.map +1 -1
- package/dist/esm/components/date-family.js +15 -3
- package/dist/esm/components/date-family.js.map +1 -1
- package/dist/esm/components/date-field.js +5 -3
- package/dist/esm/components/date-field.js.map +1 -1
- package/dist/esm/components/edge-fade.js +77 -0
- package/dist/esm/components/edge-fade.js.map +1 -0
- package/dist/esm/components/scroll-region.js +52 -0
- package/dist/esm/components/scroll-region.js.map +1 -0
- package/dist/esm/components/time-panel.js +1 -1
- package/dist/esm/components/time-panel.js.map +1 -1
- package/dist/esm/components/ui.common.js +115 -60
- package/dist/esm/components/ui.common.js.map +1 -1
- package/dist/esm/components/ui.motion.js +39 -16
- package/dist/esm/components/ui.motion.js.map +1 -1
- package/dist/esm/content.js +1 -1
- package/dist/esm/dev.js +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/styles.css +326 -200
- package/dist/theme.css +15 -12
- package/dist/types/content.d.ts +13 -3
- package/dist/types/dev.d.cts +65 -30
- package/dist/types/dev.d.ts +65 -30
- package/dist/types/index.d.cts +502 -166
- package/dist/types/index.d.ts +502 -166
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.js","sources":["../../../src/components/Input.tsx"],"sourcesContent":["\"use client\";\n\nimport { Field } from \"@base-ui/react/field\";\nimport { Input as BaseInput } from \"@base-ui/react/input\";\nimport React, {\n forwardRef,\n type InputHTMLAttributes,\n type PointerEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport {\n density,\n fieldLabel,\n fieldLayout,\n fieldMessage,\n focusRing,\n focusRingWithin,\n material,\n rim,\n shape,\n state,\n text,\n} from \"./ui.common\";\nimport { motionFeedback } from \"./ui.motion\";\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"prefix\"> {\n label?: ReactNode;\n description?: ReactNode;\n error?: boolean;\n errorMessage?: ReactNode;\n inputClassName?: string;\n /** Base's value-change callback, event details included. */\n onValueChange?: BaseInput.Props[\"onValueChange\"];\n /**\n * Text or a mark at the start of the field, such as `€` or `https://`. It is presentation only and\n * hidden from assistive technology, so the label must carry whatever the reader needs from it.\n */\n prefix?: ReactNode;\n /** Text or a mark at the end of the field, such as `tickets` or `.discord.gg`. Presentation only. */\n suffix?: ReactNode;\n}\n\n/* An affix is supporting copy on the value's own line: quieter than the value, never smaller. */\nconst affixClassName = cn(\"shrink-0 select-none whitespace-nowrap\", text.medium);\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n ({\n label,\n description,\n className,\n inputClassName,\n required,\n error = false,\n errorMessage,\n id,\n name,\n disabled,\n onValueChange,\n prefix,\n suffix,\n ...props\n }, ref) => {\n /* A field marked invalid by its own prop and one that learns it from Base — a failed constraint,\n or an error a `Form` reports for its name — are the same field, so both take the same ladder. */\n const isInvalid = (valid: boolean | null) => error || valid === false;\n\n /* With an affix, the input is the borderless part of a composite field: the box, its rim and its\n focus ring belong to the row that holds the affixes, exactly as a Combobox's do. A press on an\n affix or on the space around it places the caret in the input, the way a press on a label does. */\n const focusInput = (event: PointerEvent<HTMLDivElement>) => {\n const input = event.currentTarget.querySelector(\"input\");\n if (!input || event.target === input || input.disabled) return;\n event.preventDefault();\n input.focus();\n };\n\n return (\n <Field.Root\n className={cn(fieldLayout, className)}\n name={name}\n disabled={disabled}\n invalid={error}\n >\n {label && (\n <Field.Label className={cn(fieldLabel)}>\n {label}\n {required && <span className={cn(\"ms-1 text-sherick-danger\")} aria-hidden=\"true\">*</span>}\n </Field.Label>\n )}\n {prefix != null || suffix != null ? (\n <BaseInput\n {...props}\n ref={ref}\n id={id}\n name={name}\n required={required}\n disabled={disabled}\n onValueChange={onValueChange}\n className={(inputState) =>\n cn(\n \"min-w-0 flex-1 bg-transparent py-3 outline-none\",\n isInvalid(inputState.valid) ? \"placeholder:text-sherick-danger\" : \"placeholder:text-sherick-ink-muted\",\n disabled ? state.disabledDescendant : state.text,\n inputClassName\n )\n }\n render={(inputProps, inputState) => (\n <div\n data-invalid={isInvalid(inputState.valid) ? \"\" : undefined}\n onPointerDown={focusInput}\n className={cn(\n \"group/field flex min-w-0 w-full items-center gap-2 px-5\",\n density.normal,\n shape.control,\n motionFeedback,\n focusRingWithin,\n material.control,\n rim.field,\n state.field.invalid,\n !disabled && state.field.hover,\n !disabled && state.field.focusWithin,\n !disabled && state.field.invalidHover,\n !disabled && state.field.invalidFocusWithin,\n disabled ? state.disabled : state.text\n )}\n >\n {prefix != null && <span aria-hidden=\"true\" className={cn(affixClassName)}>{prefix}</span>}\n <input {...inputProps} />\n {suffix != null && <span aria-hidden=\"true\" className={cn(affixClassName)}>{suffix}</span>}\n </div>\n )}\n />\n ) : (\n <BaseInput\n {...props}\n render={<input ref={ref} />}\n id={id}\n name={name}\n required={required}\n disabled={disabled}\n onValueChange={onValueChange}\n className={(inputState) => {\n const invalid = isInvalid(inputState.valid);\n return cn(\n density.normal,\n \"min-w-0 w-full px-5 py-3\",\n shape.control,\n motionFeedback,\n focusRing,\n invalid ? material.controlError : material.control,\n rim.field,\n !disabled && (invalid ? state.field.errorHover : state.field.hover),\n !disabled && (invalid ? state.field.errorFocus : state.field.focus),\n disabled ? state.disabled : state.text,\n inputClassName\n );\n }}\n />\n )}\n {description && (\n <Field.Description className={cn(fieldMessage.description)}>\n {description}\n </Field.Description>\n )}\n {/* Mounted whether or not a message was passed, as `Field`'s is: without `match` this part\n renders what Base reports — a failed constraint, or the error a `Form` returns for this\n field's name — and `match` pins the caller's own message in its place. A field marked\n invalid with no message of its own shows only its danger tray, so give an invalid\n field a message that says how to recover. */}\n {!(error && !errorMessage) && (\n <Field.Error\n match={error ? true : undefined}\n className={cn(fieldMessage.error)}\n {...(error ? { children: errorMessage } : {})}\n />\n )}\n </Field.Root>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport default Input;\n"],"names":["_jsxs","_jsx","BaseInput"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Input.js","sources":["../../../src/components/Input.tsx"],"sourcesContent":["\"use client\";\n\nimport { Field } from \"@base-ui/react/field\";\nimport { Input as BaseInput } from \"@base-ui/react/input\";\nimport React, {\n forwardRef,\n type InputHTMLAttributes,\n type PointerEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport {\n fieldLabel,\n fieldLayout,\n fieldMessage,\n focusRing,\n focusRingWithin,\n material,\n rim,\n shape,\n state,\n text,\n} from \"./ui.common\";\nimport { motionFeedback } from \"./ui.motion\";\nimport FieldLabel from \"./FieldLabel\";\nimport { fieldDensity, type FieldSize } from \"./Field\";\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"prefix\" | \"size\"> {\n label?: ReactNode;\n description?: ReactNode;\n /**\n * Marks the field invalid. A message is shown beneath it, so a `ReactNode` here is both the flag and\n * its message. `true` marks the field without one, and `errorMessage` supplies the message.\n */\n error?: ReactNode;\n /** The message for `error={true}`. A message passed as `error` takes its place. */\n errorMessage?: ReactNode;\n inputClassName?: string;\n /** Base's value-change callback, event details included. */\n onValueChange?: BaseInput.Props[\"onValueChange\"];\n /**\n * Text or a mark at the start of the field, such as `€` or `https://`. It is presentation only and\n * hidden from assistive technology, so the label must carry whatever the reader needs from it.\n */\n prefix?: ReactNode;\n /** Text or a mark at the end of the field, such as `tickets` or `.discord.gg`. Presentation only. */\n suffix?: ReactNode;\n /**\n * The field's density: `sm` for a dense filter row, `md` (the default) or `lg`. A number is the\n * native `size` attribute of the input, as it always was.\n */\n size?: FieldSize | number;\n}\n\n/* An affix is supporting copy on the value's own line: quieter than the value, never smaller. */\nconst affixClassName = cn(\"shrink-0 select-none whitespace-nowrap\", text.medium);\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n ({\n label,\n description,\n className,\n inputClassName,\n required,\n error,\n errorMessage,\n id,\n name,\n disabled,\n onValueChange,\n prefix,\n suffix,\n size,\n ...props\n }, ref) => {\n /* An `error` that is a message, or a flag with the message beside it: both mark the field invalid. */\n const invalidByProp = Boolean(error);\n const errorText = typeof error === \"boolean\" || error == null ? errorMessage : error;\n const fieldSize: FieldSize = typeof size === \"string\" ? size : \"md\";\n const nativeSize = typeof size === \"number\" ? size : undefined;\n /* A compact field keeps its 40px height with a 20px line, so its vertical padding steps down with it. */\n const padding = fieldSize === \"sm\" ? \"py-2\" : \"py-3\";\n\n /* A field marked invalid by its own prop and one that learns it from Base — a failed constraint,\n or an error a `Form` reports for its name — are the same field, so both take the same ladder. */\n const isInvalid = (valid: boolean | null) => invalidByProp || valid === false;\n\n /* With an affix, the input is the borderless part of a composite field: the box, its rim and its\n focus ring belong to the row that holds the affixes, exactly as a Combobox's do. A press on an\n affix or on the space around it places the caret in the input, the way a press on a label does. */\n const focusInput = (event: PointerEvent<HTMLDivElement>) => {\n const input = event.currentTarget.querySelector(\"input\");\n if (!input || event.target === input || input.disabled) return;\n event.preventDefault();\n input.focus();\n };\n\n return (\n <Field.Root\n className={cn(fieldLayout, className)}\n name={name}\n disabled={disabled}\n invalid={invalidByProp}\n >\n {label && (\n <Field.Label className={cn(fieldLabel)}>\n <FieldLabel required={required}>{label}</FieldLabel>\n </Field.Label>\n )}\n {prefix != null || suffix != null ? (\n <BaseInput\n {...props}\n ref={ref}\n id={id}\n name={name}\n required={required}\n disabled={disabled}\n size={nativeSize}\n onValueChange={onValueChange}\n className={(inputState) =>\n cn(\n `min-w-0 flex-1 bg-transparent ${padding} [outline-style:none]`,\n isInvalid(inputState.valid) ? \"placeholder:text-sherick-danger\" : \"placeholder:text-sherick-ink-muted\",\n disabled ? state.disabledDescendant : state.text,\n inputClassName\n )\n }\n render={(inputProps, inputState) => (\n <div\n data-invalid={isInvalid(inputState.valid) ? \"\" : undefined}\n onPointerDown={focusInput}\n className={cn(\n \"group/field flex min-w-0 w-full items-center gap-2 px-5\",\n fieldDensity[fieldSize],\n shape.control,\n motionFeedback,\n focusRingWithin,\n material.control,\n rim.field,\n state.field.invalid,\n !disabled && state.field.hover,\n !disabled && state.field.focusWithin,\n !disabled && state.field.invalidHover,\n !disabled && state.field.invalidFocusWithin,\n disabled ? state.disabled : state.text\n )}\n >\n {prefix != null && <span aria-hidden=\"true\" className={cn(affixClassName)}>{prefix}</span>}\n <input {...inputProps} />\n {suffix != null && <span aria-hidden=\"true\" className={cn(affixClassName)}>{suffix}</span>}\n </div>\n )}\n />\n ) : (\n <BaseInput\n {...props}\n render={<input ref={ref} />}\n id={id}\n name={name}\n required={required}\n disabled={disabled}\n size={nativeSize}\n onValueChange={onValueChange}\n className={(inputState) => {\n const invalid = isInvalid(inputState.valid);\n return cn(\n fieldDensity[fieldSize],\n `min-w-0 w-full px-5 ${padding}`,\n shape.control,\n motionFeedback,\n focusRing,\n invalid ? material.controlError : material.control,\n rim.field,\n !disabled && (invalid ? state.field.errorHover : state.field.hover),\n !disabled && (invalid ? state.field.errorFocus : state.field.focus),\n disabled ? state.disabled : state.text,\n inputClassName\n );\n }}\n />\n )}\n {description && (\n <Field.Description className={cn(fieldMessage.description)}>\n {description}\n </Field.Description>\n )}\n {/* Mounted whether or not a message was passed, as `Field`'s is: without `match` this part\n renders what Base reports — a failed constraint, or the error a `Form` returns for this\n field's name — and `match` pins the caller's own message in its place. A field marked\n invalid with no message of its own shows only its danger tray, so give an invalid\n field a message that says how to recover. */}\n {!(invalidByProp && !errorText) && (\n <Field.Error\n match={invalidByProp ? true : undefined}\n className={cn(fieldMessage.error)}\n {...(invalidByProp ? { children: errorText } : {})}\n />\n )}\n </Field.Root>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport default Input;\n"],"names":["_jsxs","_jsx","BaseInput"],"mappings":";;;;;;;;;;;AAsDA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,GAAG,CAAA,CAAE,CAAC,wCAAwC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC;AAEhF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAK,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CACtB,CAAC,EACC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CACX,SAAS,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,EACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CACR,KAAK,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CACZ,CAAA,CAAE,EACF,CAAA,CAAA,CAAA,CAAI,CAAA,CACJ,QAAQ,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,EACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CACN,IAAI,CAAA,CACJ,CAAA,CAAA,CAAG,KAAK,CAAA,CACT,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAI;;AAER,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,KAAK,CAAC;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK;AACpF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAI,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAI;AACnE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAI,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS;;AAE9D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAO,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,KAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM;AAEpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACmG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACnG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAqB,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAK;AAE7E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAEqG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACrG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAG,CAAC,KAAmC,CAAA,CAAA,CAAA,CAAA,CAAI;QACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,aAAa,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC;QACxD,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ;YAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QACxD,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAE;QACtB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAE;AACf,CAAA,CAAA,CAAA,CAAA,CAAC;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACEA,IAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,GACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,EACrC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,IAAI,CAAA,CACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAClB,OAAO,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAErB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CACJC,GAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,EAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EACpCA,CAAAA,CAAAA,CAAA,CAAC,UAAU,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CAAA,CAAA,CAAc,EAAA,CACxC,CACf,EACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,IAAI,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,IAAI,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAC/BA,IAACC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,EAAA,CAAA,CAAA,CAAA,CAAA,CACJ,KAAK,CAAA,CACT,CAAA,CAAA,CAAG,EAAE,CAAA,CAAA,CAAG,CAAA,CACR,EAAE,CAAA,CAAE,CAAA,CAAE,EACN,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,IAAI,CAAA,CACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAClB,QAAQ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAClB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,UAAU,CAAA,CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAC5B,SAAS,CAAA,CAAE,CAAC,UAAU,CAAA,CAAA,CAAA,CAAA,CACpB,CAAA,CAAE,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAiC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,qBAAA,CAAuB,CAAA,CAC/D,SAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiC,CAAA,CAAA,CAAG,oCAAoC,CAAA,CACtG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,kBAAkB,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CAChD,cAAc,CACf,CAAA,CAEH,MAAM,CAAA,CAAE,CAAC,UAAU,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,MAC7BF,CAAAA,CAAAA,CAAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,cAAA,CAAA,CACgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,EAAE,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAE,UAAU,CAAA,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAE,CACX,yDAAyD,CAAA,CACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,EACvB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,OAAO,CAAA,CACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,EACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CACf,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAChB,CAAA,CAAA,CAAG,CAAC,KAAK,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,OAAO,CAAA,CACnB,CAAC,QAAQ,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,KAAK,CAAA,CAC9B,CAAC,QAAQ,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,WAAW,CAAA,CACpC,CAAC,QAAQ,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,YAAY,CAAA,CACrC,CAAC,QAAQ,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,kBAAkB,CAAA,CAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,QAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAI,CACvC,aAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,IAAI,CAAA,CAAA,CAAA,CAAIC,CAAAA,CAAAA,2BAAkB,MAAM,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAE,CAAC,cAAc,CAAC,CAAA,CAAA,QAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAA,CAAQ,CAAA,CAC1FA,kBAAW,UAAU,CAAA,CAAA,CAAI,EACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,IAAI,CAAA,CAAA,CAAA,CAAIA,CAAAA,CAAAA,2BAAkB,MAAM,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAE,CAAC,cAAc,CAAC,CAAA,CAAA,QAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAQ,CAAA,EAAA,CACtF,CACP,GACD,CAAA,CAAA,CAAA,CAAA,CAEFA,GAAA,CAACC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,OACJ,KAAK,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAED,CAAAA,CAAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAO,GAAG,CAAA,CAAE,CAAA,CAAA,CAAG,EAAA,CAAI,CAAA,CAC3B,EAAE,CAAA,CAAE,CAAA,CAAE,EACN,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,IAAI,CAAA,CACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAClB,QAAQ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAClB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,UAAU,CAAA,CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAC5B,SAAS,CAAA,CAAE,CAAC,UAAU,CAAA,CAAA,CAAA,CAAA,CAAI;oBACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAO,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,KAAK,CAAC;oBAC3C,OAAO,CAAA,CAAE,CACP,YAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CACvB,uBAAuB,OAAO,CAAA,CAAE,EAChC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,OAAO,CAAA,CACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAG,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAClD,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EACT,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CACnE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAG,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,EACnE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,QAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CACtC,cAAc,CACf;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAA,EACD,CACH,CAAA,CACA,WAAW,CAAA,CAAA,CAAA,CAAA,CACVA,CAAAA,CAAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,GAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,WAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvD,WAAW,CAAA,CAAA,CACM,CACrB,CAAA,CAMA,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAC7BA,CAAAA,CAAAA,EAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CACV,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,SAAS,CAAA,CACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,EAAA,CAAA,CAAA,CAAA,CAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAG,CAAA,CAAE,QAAQ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA,CAAA,CAAG,EAAE,CAAC,CAAA,EAClD,CACH,CAAA,EAAA,CACU,CAAA;AAEjB,CAAC,CAAA;AAGH,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO;;"}
|
|
@@ -5,7 +5,8 @@ import rehypeKatex from 'rehype-katex';
|
|
|
5
5
|
import remarkMath from 'remark-math';
|
|
6
6
|
import { cn } from '../libs/utils.js';
|
|
7
7
|
import { text, edge, richText, tone } from './ui.common.js';
|
|
8
|
-
import CodeBlock from './CodeBlock.js';
|
|
8
|
+
import CodeBlock, { InlineCode } from './CodeBlock.js';
|
|
9
|
+
import ScrollRegion from './scroll-region.js';
|
|
9
10
|
|
|
10
11
|
/* Markdown sets its own type scale but takes every color, shape and rule from the
|
|
11
12
|
primitives, so dropping it into a new surface needs no visual decisions. */
|
|
@@ -29,15 +30,17 @@ const components = {
|
|
|
29
30
|
inside the code surface and inherit the browser's monospace block styling. The
|
|
30
31
|
block wrapper is dropped so `CodeBlock` owns the whole treatment. */
|
|
31
32
|
pre: ({ children }) => jsx(Fragment, { children: children }),
|
|
32
|
-
|
|
33
|
+
/* A wide table scrolls inside its own region, which is named and reachable by keyboard only while it
|
|
34
|
+
overflows (§19). A markdown table has no caption of its own, so the region is named for what it is. */
|
|
35
|
+
table: ({ children }) => (jsx(ScrollRegion, { label: "Table", className: cn("min-w-0 [overflow-wrap:normal]"), children: jsx("table", { className: cn("w-full"), children: children }) })),
|
|
33
36
|
/* Without `inline` (removed in react-markdown 9), a block is a fenced one: it carries
|
|
34
37
|
a `language-*` class or, when the fence is bare, the trailing newline markdown
|
|
35
38
|
always leaves on the last line. Anything else is an inline chip. */
|
|
36
|
-
code: ({ className, children
|
|
39
|
+
code: ({ className, children }) => {
|
|
37
40
|
var _a;
|
|
38
41
|
const language = (_a = /language-(\w+)/.exec(className !== null && className !== void 0 ? className : "")) === null || _a === void 0 ? void 0 : _a[1];
|
|
39
42
|
const code = String(children !== null && children !== void 0 ? children : "");
|
|
40
|
-
return language !== undefined || code.endsWith("\n") ? (jsx(CodeBlock, { language: language !== null && language !== void 0 ? language : "text", children: code })) : (jsx(
|
|
43
|
+
return language !== undefined || code.endsWith("\n") ? (jsx(CodeBlock, { language: language !== null && language !== void 0 ? language : "text", children: code })) : (jsx(InlineCode, { className: cn(className), children: children }));
|
|
41
44
|
},
|
|
42
45
|
};
|
|
43
46
|
const Markdown = ({ children }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Markdown.js","sources":["../../../src/components/Markdown.tsx"],"sourcesContent":["import React from \"react\";\nimport ReactMarkdown, { type Components } from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport rehypeKatex from \"rehype-katex\";\nimport remarkMath from \"remark-math\";\nimport { cn } from \"@/libs/utils\";\nimport { edge, richText, text, tone } from \"./ui.common\";\nimport CodeBlock from \"./CodeBlock\";\n\n/* Markdown sets its own type scale but takes every color, shape and rule from the\n primitives, so dropping it into a new surface needs no visual decisions. */\nconst components: Components = {\n h1: ({ className, ...props }) => <h1 className={cn(\"mb-4 mt-8 text-3xl font-semibold tracking-[-0.03em] first:mt-0\", text.high, className)} {...props} />,\n h2: ({ className, ...props }) => <h2 className={cn(\"mb-3 mt-7 text-2xl font-semibold tracking-[-0.025em] first:mt-0\", text.high, className)} {...props} />,\n h3: ({ className, ...props }) => <h3 className={cn(\"mb-2 mt-6 text-xl font-medium first:mt-0\", text.high, className)} {...props} />,\n p: ({ className, ...props }) => <p className={cn(\"my-3 leading-7\", text.high, className)} {...props} />,\n a: ({ className, ...props }) => <a className={cn(\"font-medium underline underline-offset-4\", richText.linkUnderline, tone.text.primary, className)} {...props} />,\n /* Every asymmetry a reader meets is a *writing-direction* asymmetry: a list indents from its own\n start edge, a quote's rule is drawn on that same edge, and both follow the document rather than\n the page. §17 states it as a rule, so nothing here may name a physical side. */\n ul: ({ className, ...props }) => <ul className={cn(\"my-4 list-disc space-y-2 ps-6\", text.high, className)} {...props} />,\n ol: ({ className, ...props }) => <ol className={cn(\"my-4 list-decimal space-y-2 ps-6\", text.high, className)} {...props} />,\n li: ({ className, ...props }) => <li className={cn(\"ms-1 leading-7 marker:text-sherick-primary\", className)} {...props} />,\n /* A quote is content emphasis, not a surface: an accent rule and the supporting tone, no fill. */\n blockquote: ({ className, ...props }) => <blockquote className={cn(\"my-5 border-s-2 py-1 ps-4\", richText.quoteRule, text.medium, className)} {...props} />,\n hr: ({ className, ...props }) => <hr className={cn(\"my-7 h-0 border-0 border-t\", edge.rule, className)} {...props} />,\n strong: ({ className, ...props }) => <strong className={cn(\"font-semibold\", text.high, className)} {...props} />,\n /* A fenced block reaches `code` wrapped in `pre`, which would nest a second `pre`\n inside the code surface and inherit the browser's monospace block styling. The\n block wrapper is dropped so `CodeBlock` owns the whole treatment. */\n pre: ({ children }) => <>{children}</>,\n table: ({ children }) => <
|
|
1
|
+
{"version":3,"file":"Markdown.js","sources":["../../../src/components/Markdown.tsx"],"sourcesContent":["import React from \"react\";\nimport ReactMarkdown, { type Components } from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport rehypeKatex from \"rehype-katex\";\nimport remarkMath from \"remark-math\";\nimport { cn } from \"@/libs/utils\";\nimport { edge, richText, text, tone } from \"./ui.common\";\nimport CodeBlock, { InlineCode } from \"./CodeBlock\";\nimport ScrollRegion from \"./scroll-region\";\n\n/* Markdown sets its own type scale but takes every color, shape and rule from the\n primitives, so dropping it into a new surface needs no visual decisions. */\nconst components: Components = {\n h1: ({ className, ...props }) => <h1 className={cn(\"mb-4 mt-8 text-3xl font-semibold tracking-[-0.03em] first:mt-0\", text.high, className)} {...props} />,\n h2: ({ className, ...props }) => <h2 className={cn(\"mb-3 mt-7 text-2xl font-semibold tracking-[-0.025em] first:mt-0\", text.high, className)} {...props} />,\n h3: ({ className, ...props }) => <h3 className={cn(\"mb-2 mt-6 text-xl font-medium first:mt-0\", text.high, className)} {...props} />,\n p: ({ className, ...props }) => <p className={cn(\"my-3 leading-7\", text.high, className)} {...props} />,\n a: ({ className, ...props }) => <a className={cn(\"font-medium underline underline-offset-4\", richText.linkUnderline, tone.text.primary, className)} {...props} />,\n /* Every asymmetry a reader meets is a *writing-direction* asymmetry: a list indents from its own\n start edge, a quote's rule is drawn on that same edge, and both follow the document rather than\n the page. §17 states it as a rule, so nothing here may name a physical side. */\n ul: ({ className, ...props }) => <ul className={cn(\"my-4 list-disc space-y-2 ps-6\", text.high, className)} {...props} />,\n ol: ({ className, ...props }) => <ol className={cn(\"my-4 list-decimal space-y-2 ps-6\", text.high, className)} {...props} />,\n li: ({ className, ...props }) => <li className={cn(\"ms-1 leading-7 marker:text-sherick-primary\", className)} {...props} />,\n /* A quote is content emphasis, not a surface: an accent rule and the supporting tone, no fill. */\n blockquote: ({ className, ...props }) => <blockquote className={cn(\"my-5 border-s-2 py-1 ps-4\", richText.quoteRule, text.medium, className)} {...props} />,\n hr: ({ className, ...props }) => <hr className={cn(\"my-7 h-0 border-0 border-t\", edge.rule, className)} {...props} />,\n strong: ({ className, ...props }) => <strong className={cn(\"font-semibold\", text.high, className)} {...props} />,\n /* A fenced block reaches `code` wrapped in `pre`, which would nest a second `pre`\n inside the code surface and inherit the browser's monospace block styling. The\n block wrapper is dropped so `CodeBlock` owns the whole treatment. */\n pre: ({ children }) => <>{children}</>,\n /* A wide table scrolls inside its own region, which is named and reachable by keyboard only while it\n overflows (§19). A markdown table has no caption of its own, so the region is named for what it is. */\n table: ({ children }) => (\n <ScrollRegion label=\"Table\" className={cn(\"min-w-0 [overflow-wrap:normal]\")}>\n <table className={cn(\"w-full\")}>{children}</table>\n </ScrollRegion>\n ),\n /* Without `inline` (removed in react-markdown 9), a block is a fenced one: it carries\n a `language-*` class or, when the fence is bare, the trailing newline markdown\n always leaves on the last line. Anything else is an inline chip. */\n code: ({ className, children }) => {\n const language = /language-(\\w+)/.exec(className ?? \"\")?.[1];\n const code = String(children ?? \"\");\n return language !== undefined || code.endsWith(\"\\n\") ? (\n <CodeBlock language={language ?? \"text\"}>{code}</CodeBlock>\n ) : (\n <InlineCode className={cn(className)}>{children}</InlineCode>\n );\n },\n};\n\nexport interface MarkdownProps {\n children: string;\n}\n\nconst Markdown = ({ children }: MarkdownProps) => {\n return (\n <div className={cn(\"min-w-0 [overflow-wrap:anywhere]\")}>\n <ReactMarkdown\n components={components}\n remarkPlugins={[remarkGfm, remarkMath]}\n rehypePlugins={[rehypeKatex]}\n >\n {children}\n </ReactMarkdown>\n </div>\n );\n};\n\nexport default Markdown;\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
3
|
import { Menu as Menu$1 } from '@base-ui/react/menu';
|
|
4
4
|
import { cn } from '../libs/utils.js';
|
|
5
5
|
import Divider from './Divider.js';
|
|
6
|
-
import {
|
|
6
|
+
import { text, list, type, tone, overlay, stacking } from './ui.common.js';
|
|
7
7
|
import { motionPresenceAnchored } from './ui.motion.js';
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
/* The popup takes the rest props, so an `id` or an `aria-label` names the menu for a reader who
|
|
10
|
+
cannot see a heading. */
|
|
11
|
+
const MenuContent = ({ children, className, side = "bottom", align = "start", sideOffset = 8, alignOffset, ...props }) => {
|
|
12
|
+
return (jsx(Menu$1.Portal, { children: jsx(Menu$1.Positioner, { side: side, align: align, sideOffset: sideOffset, alignOffset: alignOffset, className: cn(stacking.float), children: jsx(Menu$1.Popup, { ...props, className: cn(list.sheet, "w-max min-w-44 max-w-[min(20rem,var(--available-width))] space-y-1 p-1", overlay.menu, motionPresenceAnchored, className), children: children }) }) }));
|
|
11
13
|
};
|
|
12
14
|
/* The trigger is Base's, with only the capabilities this package publishes declared above it. The
|
|
13
15
|
surface has to open from the element the caller renders, so this cannot be a Sherick `Button`:
|
|
@@ -15,9 +17,19 @@ const MenuContent = ({ children, className, side = "bottom", align = "start", si
|
|
|
15
17
|
const MenuTrigger = ({ ...props }) => jsx(Menu$1.Trigger, { ...props });
|
|
16
18
|
/* A command row: `list.command` owns its shape, motion, tone and interactive states. A
|
|
17
19
|
destructive command adds only the danger tone to its own label — the row's highlight is then
|
|
18
|
-
a restrained tint of that tone, and the sheet around it stays neutral.
|
|
19
|
-
|
|
20
|
+
a restrained tint of that tone, and the sheet around it stays neutral. The icon and the shortcut
|
|
21
|
+
take the same anatomy as a palette command, so a menu and a palette read the same. */
|
|
22
|
+
const MenuItem = ({ variant, className, children, icon, shortcut, render, ...props }) => (jsxs(Menu$1.Item, { ...props, render: render, className: cn(list.command, variant === "danger" && tone.text.danger, className), children: [icon !== undefined ? (
|
|
23
|
+
/* A danger row's mark takes the row's own tone, so the mark and the label say the same thing. */
|
|
24
|
+
jsx("span", { "aria-hidden": "true", className: cn(list.commandIcon, variant !== "danger" && text.medium), children: icon })) : null, jsx("span", { className: cn("min-w-0 flex-1 truncate"), children: children }), shortcut !== undefined ? (jsx("span", { className: cn("ms-3 shrink-0 font-sherick-mono", type.caption, text.medium), children: shortcut })) : null] }));
|
|
20
25
|
MenuItem.displayName = "MenuItem";
|
|
26
|
+
/* A group is the menu's own structure: its rows sit together under one label, and the label is the
|
|
27
|
+
group's name for assistive technology. */
|
|
28
|
+
const MenuGroup = ({ className, ...props }) => (jsx(Menu$1.Group, { ...props, className: cn("space-y-1", className) }));
|
|
29
|
+
MenuGroup.displayName = "MenuGroup";
|
|
30
|
+
/* The label is the command-list heading recipe, so a group's heading in a menu and in a palette match. */
|
|
31
|
+
const MenuLabel = ({ className, ...props }) => (jsx(Menu$1.GroupLabel, { ...props, className: cn(list.groupLabel, className) }));
|
|
32
|
+
MenuLabel.displayName = "MenuLabel";
|
|
21
33
|
/* Base's menu separator *is* the shared Base separator, which is the component `Divider`
|
|
22
34
|
renders: the menu uses the public divider rather than re-deriving a line. The margin is the
|
|
23
35
|
menu's own spacing between parts. */
|
|
@@ -29,6 +41,8 @@ Menu.Trigger = MenuTrigger;
|
|
|
29
41
|
Menu.Content = MenuContent;
|
|
30
42
|
Menu.Item = MenuItem;
|
|
31
43
|
Menu.Separator = MenuSeparator;
|
|
44
|
+
Menu.Group = MenuGroup;
|
|
45
|
+
Menu.Label = MenuLabel;
|
|
32
46
|
|
|
33
47
|
export { Menu as default };
|
|
34
48
|
//# sourceMappingURL=Menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","sources":["../../../src/components/Menu.tsx"],"sourcesContent":["\"use client\";\n\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport React, { type MouseEventHandler, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport Divider from \"./Divider\";\nimport { list, overlay, stacking, tone } from \"./ui.common\";\nimport { motionPresenceAnchored } from \"./ui.motion\";\nimport type { OverlayAlign, OverlaySide, Variant } from \"./ui.types\";\n\nexport interface MenuProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n /** Base's own open-change callback, event details included. */\n onOpenChange?: BaseMenu.Root.Props[\"onOpenChange\"];\n}\n\nexport interface MenuTriggerProps {\n /**\n * The element the trigger's own props are handed to — usually a Sherick `Button`. The surface\n * opens from whatever this renders, so the trigger looks like the control it is.\n */\n render?: ReactElement;\n children?: ReactNode;\n /** Adds to the rendered element. The trigger writes no visual rules of its own. */\n className?: string;\n}\n\nexport interface MenuContentProps {\n children: ReactNode;\n /** Adds to the popup's own shell. The sheet's material, shape and elevation are the recipe's. */\n className?: string;\n /** The edge the sheet is anchored to. Its entrance grows from whichever edge it resolves to. */\n side?: OverlaySide;\n align?: OverlayAlign;\n sideOffset?: number;\n alignOffset?: number;\n}\n\nexport interface MenuItemProps {\n children: ReactNode;\n /** Adds to the row's own shell. */\n className?: string;\n /**\n * The action's semantic role. `danger` marks the action itself — the row's label and its\n * highlight take the danger tone, and the popup around it stays neutral.\n */\n variant?: Variant;\n /**\n * An action that cannot be performed. It stays in the list and stays reachable by keyboard — a\n * disabled command is still one a reader has to be able to find and be told about — but it\n * cannot be activated, and it takes no hover or press state.\n */\n disabled?: boolean;\n /** What choosing the action does. The menu closes afterwards; that is Base's contract. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n}\n\nexport interface MenuSeparatorProps {\n className?: string;\n}\n\n/**\n * A surface of actions. Each item acts and the menu closes; nothing here holds a value, so a\n * value-selection surface is `Select` or `Combobox` rather than a menu. Base UI owns keyboard\n * navigation, typeahead, roving focus, Escape, outside dismissal and focus restoration; Sherick\n * UI owns the sheet, the row treatment and the tone an action reads in.\n *\n * This is the whole of the surface Sherick UI publishes to a consumer: the parts below accept the\n * capabilities this package supports, not the primitive's complete prop set. Composing a Base\n * primitive is how these components are built; it is not what they promise.\n */\ntype MenuComponent = ((props: MenuProps) => React.JSX.Element) & {\n Trigger: typeof MenuTrigger;\n Content: typeof MenuContent;\n Item: typeof MenuItem;\n Separator: typeof MenuSeparator;\n};\n\nconst MenuContent = ({\n children,\n className,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 8,\n alignOffset,\n}: MenuContentProps) => {\n return (\n <BaseMenu.Portal>\n {/* A menu is modal, which is Base's own default and the reason its positioner already lays a\n plane over everything outside the sheet: an outside press dismisses the menu through\n that plane without reaching the page beneath, so Sherick renders no second backdrop\n and writes no dismissal logic of its own. */}\n <BaseMenu.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n className={cn(stacking.float)}\n >\n <BaseMenu.Popup\n className={cn(\n list.sheet,\n \"w-max min-w-44 max-w-[min(20rem,var(--available-width))] space-y-1 p-1\",\n overlay.menu,\n motionPresenceAnchored,\n className\n )}\n >\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n};\n\n/* The trigger is Base's, with only the capabilities this package publishes declared above it. The\n surface has to open from the element the caller renders, so this cannot be a Sherick `Button`:\n it hands Base's trigger props to whatever the caller composes. */\nconst MenuTrigger = ({ ...props }: MenuTriggerProps) => <BaseMenu.Trigger {...props} />;\n\n/* A command row: `list.command` owns its shape, motion, tone and interactive states. A\n destructive command adds only the danger tone to its own label — the row's highlight is then\n a restrained tint of that tone, and the sheet around it stays neutral. */\n\nconst MenuItem = ({ variant, className, children, ...props }: MenuItemProps) => (\n <BaseMenu.Item\n {...props}\n className={cn(list.command, variant === \"danger\" && tone.text.danger, className)}\n >\n <span className={cn(\"min-w-0 flex-1 truncate\")}>{children}</span>\n </BaseMenu.Item>\n);\n\nMenuItem.displayName = \"MenuItem\";\n\n/* Base's menu separator *is* the shared Base separator, which is the component `Divider`\n renders: the menu uses the public divider rather than re-deriving a line. The margin is the\n menu's own spacing between parts. */\nconst MenuSeparator = ({ className }: MenuSeparatorProps) => (\n <Divider className={cn(\"mx-3 my-1 w-auto\", className)} />\n);\n\nconst Menu = (({ children, open, defaultOpen, onOpenChange }: MenuProps) => {\n return (\n <BaseMenu.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {children}\n </BaseMenu.Root>\n );\n}) as MenuComponent;\n\nMenu.Trigger = MenuTrigger;\nMenu.Content = MenuContent;\nMenu.Item = MenuItem;\nMenu.Separator = MenuSeparator;\n\nexport default Menu;\n"],"names":["_jsx","BaseMenu"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Menu.js","sources":["../../../src/components/Menu.tsx"],"sourcesContent":["\"use client\";\n\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport React, { type MouseEventHandler, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport Divider from \"./Divider\";\nimport { list, overlay, stacking, text, tone, type } from \"./ui.common\";\nimport { motionPresenceAnchored } from \"./ui.motion\";\nimport type { OverlayAlign, OverlaySide, PartProps, Variant } from \"./ui.types\";\n\nexport interface MenuProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n /** Base's own open-change callback, event details included. */\n onOpenChange?: BaseMenu.Root.Props[\"onOpenChange\"];\n}\n\nexport interface MenuTriggerProps {\n /**\n * The element the trigger's own props are handed to — usually a Sherick `Button`. The surface\n * opens from whatever this renders, so the trigger looks like the control it is.\n */\n render?: ReactElement;\n children?: ReactNode;\n /** Adds to the rendered element. The trigger writes no visual rules of its own. */\n className?: string;\n}\n\nexport interface MenuContentProps extends Omit<PartProps<\"div\">, \"children\" | \"className\"> {\n children: ReactNode;\n /** Adds to the popup's own shell. The sheet's material, shape and elevation are the recipe's. */\n className?: string;\n /** The edge the sheet is anchored to. Its entrance grows from whichever edge it resolves to. */\n side?: OverlaySide;\n align?: OverlayAlign;\n sideOffset?: number;\n alignOffset?: number;\n}\n\nexport interface MenuItemProps {\n children: ReactNode;\n /** Adds to the row's own shell. */\n className?: string;\n /**\n * The action's semantic role. `danger` marks the action itself — the row's label and its\n * highlight take the danger tone, and the popup around it stays neutral.\n */\n variant?: Variant;\n /**\n * An action that cannot be performed. It stays in the list and stays reachable by keyboard — a\n * disabled command is still one a reader has to be able to find and be told about — but it\n * cannot be activated, and it takes no hover or press state.\n */\n disabled?: boolean;\n /** What choosing the action does. The menu closes afterwards; that is Base's contract. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** The row's leading mark. It takes the command icon's slot, beside the label. */\n icon?: ReactNode;\n /** The gesture that runs this action elsewhere. It is a hint, and the menu registers no shortcut. */\n shortcut?: ReactNode;\n /**\n * Renders the row as another element, such as a link. Base hands the row's own attributes and its\n * handlers to that element, so the row keeps its menu behaviour.\n */\n render?: ReactElement;\n}\n\nexport interface MenuSeparatorProps {\n className?: string;\n}\n\n/** A group of rows, announced under its label. */\nexport type MenuGroupProps = PartProps<\"div\">;\n\n/** The heading of a group. Base names the group from it, so it is read as the group begins. */\nexport type MenuLabelProps = PartProps<\"div\">;\n\n/**\n * A surface of actions. Each item acts and the menu closes; nothing here holds a value, so a\n * value-selection surface is `Select` or `Combobox` rather than a menu. Base UI owns keyboard\n * navigation, typeahead, roving focus, Escape, outside dismissal and focus restoration; Sherick\n * UI owns the sheet, the row treatment and the tone an action reads in.\n *\n * This is the whole of the surface Sherick UI publishes to a consumer: the parts below accept the\n * capabilities this package supports, not the primitive's complete prop set. Composing a Base\n * primitive is how these components are built; it is not what they promise.\n */\ntype MenuComponent = ((props: MenuProps) => React.JSX.Element) & {\n Trigger: typeof MenuTrigger;\n Content: typeof MenuContent;\n Item: typeof MenuItem;\n Separator: typeof MenuSeparator;\n Group: typeof MenuGroup;\n Label: typeof MenuLabel;\n};\n\n/* The popup takes the rest props, so an `id` or an `aria-label` names the menu for a reader who\n cannot see a heading. */\nconst MenuContent = ({\n children,\n className,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 8,\n alignOffset,\n ...props\n}: MenuContentProps) => {\n return (\n <BaseMenu.Portal>\n {/* A menu is modal, which is Base's own default and the reason its positioner already lays a\n plane over everything outside the sheet: an outside press dismisses the menu through\n that plane without reaching the page beneath, so Sherick renders no second backdrop\n and writes no dismissal logic of its own. */}\n <BaseMenu.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n className={cn(stacking.float)}\n >\n <BaseMenu.Popup\n {...props}\n className={cn(\n list.sheet,\n \"w-max min-w-44 max-w-[min(20rem,var(--available-width))] space-y-1 p-1\",\n overlay.menu,\n motionPresenceAnchored,\n className\n )}\n >\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n};\n\n/* The trigger is Base's, with only the capabilities this package publishes declared above it. The\n surface has to open from the element the caller renders, so this cannot be a Sherick `Button`:\n it hands Base's trigger props to whatever the caller composes. */\nconst MenuTrigger = ({ ...props }: MenuTriggerProps) => <BaseMenu.Trigger {...props} />;\n\n/* A command row: `list.command` owns its shape, motion, tone and interactive states. A\n destructive command adds only the danger tone to its own label — the row's highlight is then\n a restrained tint of that tone, and the sheet around it stays neutral. The icon and the shortcut\n take the same anatomy as a palette command, so a menu and a palette read the same. */\n\nconst MenuItem = ({ variant, className, children, icon, shortcut, render, ...props }: MenuItemProps) => (\n <BaseMenu.Item\n {...props}\n render={render}\n className={cn(list.command, variant === \"danger\" && tone.text.danger, className)}\n >\n {icon !== undefined ? (\n /* A danger row's mark takes the row's own tone, so the mark and the label say the same thing. */\n <span aria-hidden=\"true\" className={cn(list.commandIcon, variant !== \"danger\" && text.medium)}>\n {icon}\n </span>\n ) : null}\n <span className={cn(\"min-w-0 flex-1 truncate\")}>{children}</span>\n {shortcut !== undefined ? (\n <span className={cn(\"ms-3 shrink-0 font-sherick-mono\", type.caption, text.medium)}>{shortcut}</span>\n ) : null}\n </BaseMenu.Item>\n);\n\nMenuItem.displayName = \"MenuItem\";\n\n/* A group is the menu's own structure: its rows sit together under one label, and the label is the\n group's name for assistive technology. */\nconst MenuGroup = ({ className, ...props }: MenuGroupProps) => (\n <BaseMenu.Group {...props} className={cn(\"space-y-1\", className)} />\n);\n\nMenuGroup.displayName = \"MenuGroup\";\n\n/* The label is the command-list heading recipe, so a group's heading in a menu and in a palette match. */\nconst MenuLabel = ({ className, ...props }: MenuLabelProps) => (\n <BaseMenu.GroupLabel {...props} className={cn(list.groupLabel, className)} />\n);\n\nMenuLabel.displayName = \"MenuLabel\";\n\n/* Base's menu separator *is* the shared Base separator, which is the component `Divider`\n renders: the menu uses the public divider rather than re-deriving a line. The margin is the\n menu's own spacing between parts. */\nconst MenuSeparator = ({ className }: MenuSeparatorProps) => (\n <Divider className={cn(\"mx-3 my-1 w-auto\", className)} />\n);\n\nconst Menu = (({ children, open, defaultOpen, onOpenChange }: MenuProps) => {\n return (\n <BaseMenu.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {children}\n </BaseMenu.Root>\n );\n}) as MenuComponent;\n\nMenu.Trigger = MenuTrigger;\nMenu.Content = MenuContent;\nMenu.Item = MenuItem;\nMenu.Separator = MenuSeparator;\nMenu.Group = MenuGroup;\nMenu.Label = MenuLabel;\n\nexport default Menu;\n"],"names":["_jsx","BaseMenu","_jsxs"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { cn } from '../libs/utils.js';
|
|
4
|
-
import NavItem from './NavItem.js';
|
|
4
|
+
import NavItem, { navItemAttributes } from './NavItem.js';
|
|
5
5
|
import { text, type } from './ui.common.js';
|
|
6
6
|
|
|
7
7
|
/* A titled group of destinations. The group is **structure inside the surface it sits on**, not a
|
|
@@ -14,7 +14,13 @@ import { text, type } from './ui.common.js';
|
|
|
14
14
|
density step they hold, so the group adds only the little that makes one group read as one
|
|
15
15
|
group. Its heading level is the host document's business, so it is a prop rather than a fixed
|
|
16
16
|
level, exactly as an accordion's heading is. */
|
|
17
|
-
const NavGroup = ({ title, items, activeHref, headingLevel = 3, className }) => (jsxs("div", { className: cn("flex min-w-0 flex-col gap-0.5 py-1", className), children: [React.createElement(`h${headingLevel}`, { className: cn("px-3 pb-1 font-medium", type.caption, text.medium) }, title), items.map((item) =>
|
|
17
|
+
const NavGroup = ({ title, items, activeHref, headingLevel = 3, renderLink, className }) => (jsxs("div", { className: cn("flex min-w-0 flex-col gap-0.5 py-1", className), children: [React.createElement(`h${headingLevel}`, { className: cn("px-3 pb-1 font-medium", type.caption, text.medium) }, title), items.map((item) => {
|
|
18
|
+
const active = item.href === activeHref;
|
|
19
|
+
if (item.render === undefined && renderLink) {
|
|
20
|
+
return (jsx(React.Fragment, { children: renderLink(item, { ...navItemAttributes(active), href: item.href, children: item.label }) }, item.href));
|
|
21
|
+
}
|
|
22
|
+
return (jsx(NavItem, { href: item.href, active: active, render: item.render, children: item.label }, item.href));
|
|
23
|
+
})] }));
|
|
18
24
|
|
|
19
25
|
export { NavGroup as default };
|
|
20
26
|
//# sourceMappingURL=NavGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavGroup.js","sources":["../../../src/components/NavGroup.tsx"],"sourcesContent":["import React from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport NavItem from \"./NavItem\";\nimport { text, type } from \"./ui.common\";\n\nexport interface NavGroupItem {\n label: string;\n href: string;\n}\n\n/** The heading level a group labels itself with. A navigation group owns a real heading, because\n * that is what makes a column of destinations scannable as groups; which level it is depends on\n * where the navigation sits in the host document, which this component cannot know. */\nexport type NavGroupHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface NavGroupProps {\n title: string;\n items: NavGroupItem[];\n activeHref?: string;\n /** The heading level the group labels itself with. Choose it from the document it is placed\n * in: a group under a page title is a level 2, one in a sidebar section is whatever its\n * neighbours are. The default matches the package's other grouped surfaces. */\n headingLevel?: NavGroupHeadingLevel;\n className?: string;\n}\n\n/* A titled group of destinations. The group is **structure inside the surface it sits on**, not a\n surface of its own: it brings no fill, no depth and no rim, so a navigation column reads as one\n region rather than as a card holding cards.\n\n The title is a section label, not a badge: it takes the same emphasis step a value takes and\n leaves the resting rows a step below it, so the hierarchy comes from the ladder instead of from\n small muted capitals. Its rhythm is deliberately tight — the rows are already separated by the\n density step they hold, so the group adds only the little that makes one group read as one\n group. Its heading level is the host document's business, so it is a prop rather than a fixed\n level, exactly as an accordion's heading is. */\nconst NavGroup = ({ title, items, activeHref, headingLevel = 3, className }: NavGroupProps) => (\n <div className={cn(\"flex min-w-0 flex-col gap-0.5 py-1\", className)}>\n {/* The heading is the group's own; the level follows the document it was placed in rather than\n a level this component assumed. Creating the element directly is the same approach an\n accordion heading takes, so both read the same way. */}\n {React.createElement(`h${headingLevel}`, { className: cn(\"px-3 pb-1 font-medium\", type.caption, text.medium) }, title)}\n {items.map((item) => (\n <NavItem key={item.href} href={item.href} active={item.
|
|
1
|
+
{"version":3,"file":"NavGroup.js","sources":["../../../src/components/NavGroup.tsx"],"sourcesContent":["import React, { type AnchorHTMLAttributes, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport NavItem, { navItemAttributes } from \"./NavItem\";\nimport { text, type } from \"./ui.common\";\n\nexport interface NavGroupItem {\n label: string;\n href: string;\n /** The element this destination renders as, such as a router link. It takes precedence over `renderLink`. */\n render?: ReactElement;\n}\n\n/** The heading level a group labels itself with. A navigation group owns a real heading, because\n * that is what makes a column of destinations scannable as groups; which level it is depends on\n * where the navigation sits in the host document, which this component cannot know. */\nexport type NavGroupHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface NavGroupProps {\n title: string;\n items: NavGroupItem[];\n activeHref?: string;\n /** The heading level the group labels itself with. Choose it from the document it is placed\n * in: a group under a page title is a level 2, one in a sidebar section is whatever its\n * neighbours are. The default matches the package's other grouped surfaces. */\n headingLevel?: NavGroupHeadingLevel;\n /**\n * Renders each destination as the caller's own link, such as a router link. It receives the item and the\n * row's attributes — the destination, the current marker, the shared classes and the label — the same way\n * `Breadcrumb` does. An item's own `render` takes precedence over it.\n */\n renderLink?: (item: NavGroupItem, props: AnchorHTMLAttributes<HTMLAnchorElement>) => ReactNode;\n className?: string;\n}\n\n/* A titled group of destinations. The group is **structure inside the surface it sits on**, not a\n surface of its own: it brings no fill, no depth and no rim, so a navigation column reads as one\n region rather than as a card holding cards.\n\n The title is a section label, not a badge: it takes the same emphasis step a value takes and\n leaves the resting rows a step below it, so the hierarchy comes from the ladder instead of from\n small muted capitals. Its rhythm is deliberately tight — the rows are already separated by the\n density step they hold, so the group adds only the little that makes one group read as one\n group. Its heading level is the host document's business, so it is a prop rather than a fixed\n level, exactly as an accordion's heading is. */\nconst NavGroup = ({ title, items, activeHref, headingLevel = 3, renderLink, className }: NavGroupProps) => (\n <div className={cn(\"flex min-w-0 flex-col gap-0.5 py-1\", className)}>\n {/* The heading is the group's own; the level follows the document it was placed in rather than\n a level this component assumed. Creating the element directly is the same approach an\n accordion heading takes, so both read the same way. */}\n {React.createElement(`h${headingLevel}`, { className: cn(\"px-3 pb-1 font-medium\", type.caption, text.medium) }, title)}\n {items.map((item) => {\n const active = item.href === activeHref;\n\n if (item.render === undefined && renderLink) {\n return (\n <React.Fragment key={item.href}>\n {renderLink(item, { ...navItemAttributes(active), href: item.href, children: item.label })}\n </React.Fragment>\n );\n }\n\n return (\n <NavItem key={item.href} href={item.href} active={active} render={item.render}>\n {item.label}\n </NavItem>\n );\n })}\n </div>\n);\n\nexport default NavGroup;\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAkCA;;;;;;;;;AASkD;AAClD,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,SAAS,EAAiB,MACpGA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,CAIhE,KAAK,CAAC,aAAa,CAAC,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,EACrH,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU;YAEvC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,EAAE;AAC3C,gBAAA,QACEC,GAAA,CAAC,KAAK,CAAC,QAAQ,cACZ,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,IADvE,IAAI,CAAC,IAAI,CAEb;YAErB;AAEA,YAAA,QACEA,GAAA,CAAC,OAAO,EAAA,EAAiB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAA,QAAA,EAC1E,IAAI,CAAC,KAAK,EAAA,EADC,IAAI,CAAC,IAAI,CAEb;QAEd,CAAC,CAAC,CAAA,EAAA,CACE;;"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { mergeProps } from '@base-ui/react/merge-props';
|
|
3
|
+
import { cloneElement } from 'react';
|
|
2
4
|
import { cn } from '../libs/utils.js';
|
|
3
|
-
import { iconSlot, stateLayer, currentDestination,
|
|
5
|
+
import { iconSlot, stateLayer, currentDestination, state, focusRing, shape, density } from './ui.common.js';
|
|
4
6
|
import { motionFeedback } from './ui.motion.js';
|
|
5
7
|
|
|
8
|
+
/* The row's classes and current marker, shared with `NavGroup`'s `renderLink` so a consumer's own link
|
|
9
|
+
reads exactly like a row this component renders. The row takes its container's width and wraps its
|
|
10
|
+
label, so a long destination never clips; only a compact value slot truncates (§19). */
|
|
11
|
+
const navItemAttributes = (active, className) => ({
|
|
12
|
+
"aria-current": active ? "page" : undefined,
|
|
13
|
+
className: cn("flex w-full min-w-0 items-center gap-2 px-3", density.compact, shape.row, motionFeedback, focusRing, active ? currentDestination.row : state.quietInk, stateLayer.quiet, className),
|
|
14
|
+
});
|
|
6
15
|
/* A destination in a navigation list. It is a **row**, not a control the size of a field: its
|
|
7
16
|
corner is proportional to its own height, so a compact row never becomes a capsule, and it stays
|
|
8
17
|
flat — depth never announces which page you are on. Density owns the row's height, so the row
|
|
@@ -14,9 +23,24 @@ import { motionFeedback } from './ui.motion.js';
|
|
|
14
23
|
is quieter than the row-selection step a list of choices takes, because a row of destinations is
|
|
15
24
|
scanned rather than chosen. Colour is never the only carrier: the row also publishes
|
|
16
25
|
`aria-current`, which is what assistive technology reads. */
|
|
17
|
-
const NavItem = ({ children, icon, className, href, active = false, ...props }) =>
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
const NavItem = ({ children, icon, className, href, active = false, render, ...props }) => {
|
|
27
|
+
var _a;
|
|
28
|
+
const row = {
|
|
29
|
+
href,
|
|
30
|
+
...navItemAttributes(active, className),
|
|
31
|
+
children: (jsxs(Fragment, { children: [icon && (jsx("span", { className: cn(iconSlot.compact), "aria-hidden": "true", children: icon })), jsx("span", { className: cn("min-w-0 [overflow-wrap:anywhere]"), children: children })] })),
|
|
32
|
+
...props,
|
|
33
|
+
};
|
|
34
|
+
if (render === undefined)
|
|
35
|
+
return jsx("a", { ...row });
|
|
36
|
+
/* The row's props go onto the caller's element through the same merge Base UI's render prop uses: the
|
|
37
|
+
classes join, the handlers chain, and the element's own props win where they conflict. */
|
|
38
|
+
const element = render;
|
|
39
|
+
return cloneElement(element, {
|
|
40
|
+
...mergeProps(row, element.props),
|
|
41
|
+
children: (_a = element.props.children) !== null && _a !== void 0 ? _a : row.children,
|
|
42
|
+
});
|
|
43
|
+
};
|
|
20
44
|
|
|
21
|
-
export { NavItem as default };
|
|
45
|
+
export { NavItem as default, navItemAttributes };
|
|
22
46
|
//# sourceMappingURL=NavItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavItem.js","sources":["../../../src/components/NavItem.tsx"],"sourcesContent":["import React, { type AnchorHTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { currentDestination, density, focusRing, iconSlot, shape,
|
|
1
|
+
{"version":3,"file":"NavItem.js","sources":["../../../src/components/NavItem.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport React, { cloneElement, type AnchorHTMLAttributes, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { currentDestination, density, focusRing, iconSlot, shape, state, stateLayer } from \"./ui.common\";\nimport { motionFeedback } from \"./ui.motion\";\n\nexport interface NavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n children: ReactNode;\n href: string;\n icon?: ReactNode;\n active?: boolean;\n /**\n * The element the row renders as, such as a router link. The row's classes, its current marker and its\n * own props are merged onto it, so the link is the row and keeps its own navigation.\n */\n render?: ReactElement;\n}\n\n/* The row's classes and current marker, shared with `NavGroup`'s `renderLink` so a consumer's own link\n reads exactly like a row this component renders. The row takes its container's width and wraps its\n label, so a long destination never clips; only a compact value slot truncates (§19). */\nexport const navItemAttributes = (active: boolean, className?: string) => ({\n \"aria-current\": active ? (\"page\" as const) : undefined,\n className: cn(\n \"flex w-full min-w-0 items-center gap-2 px-3\",\n density.compact,\n shape.row,\n motionFeedback,\n focusRing,\n active ? currentDestination.row : state.quietInk,\n stateLayer.quiet,\n className\n ),\n});\n\n/* A destination in a navigation list. It is a **row**, not a control the size of a field: its\n corner is proportional to its own height, so a compact row never becomes a capsule, and it stays\n flat — depth never announces which page you are on. Density owns the row's height, so the row\n holds the densest step the ladder has and its own anatomy supplies only the inline padding.\n\n The current destination is the same row holding the quietest accent tint, with its label back at\n full ink and a touch of weight. That is deliberately quieter than an opaque accent fill, which\n belongs to the one primary *action* in a view rather than to the page you happen to be on, and it\n is quieter than the row-selection step a list of choices takes, because a row of destinations is\n scanned rather than chosen. Colour is never the only carrier: the row also publishes\n `aria-current`, which is what assistive technology reads. */\nconst NavItem = ({ children, icon, className, href, active = false, render, ...props }: NavItemProps) => {\n const row: AnchorHTMLAttributes<HTMLAnchorElement> = {\n href,\n ...navItemAttributes(active, className),\n children: (\n <>\n {icon && (\n <span className={cn(iconSlot.compact)} aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span className={cn(\"min-w-0 [overflow-wrap:anywhere]\")}>{children}</span>\n </>\n ),\n ...props,\n };\n\n if (render === undefined) return <a {...row} />;\n\n /* The row's props go onto the caller's element through the same merge Base UI's render prop uses: the\n classes join, the handlers chain, and the element's own props win where they conflict. */\n const element = render as ReactElement<AnchorHTMLAttributes<HTMLAnchorElement>>;\n return cloneElement(element, {\n ...mergeProps<\"a\">(row, element.props),\n children: element.props.children ?? row.children,\n });\n};\n\nexport default NavItem;\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;;;;AAkBA;;AAE0F;AACnF,MAAM,iBAAiB,GAAG,CAAC,MAAe,EAAE,SAAkB,MAAM;IACzE,cAAc,EAAE,MAAM,GAAI,MAAgB,GAAG,SAAS;AACtD,IAAA,SAAS,EAAE,EAAE,CACX,6CAA6C,EAC7C,OAAO,CAAC,OAAO,EACf,KAAK,CAAC,GAAG,EACT,cAAc,EACd,SAAS,EACT,MAAM,GAAG,kBAAkB,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,EAChD,UAAU,CAAC,KAAK,EAChB,SAAS,CACV;AACF,CAAA;AAED;;;;;;;;;;AAU+D;AAC/D,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,EAAgB,KAAI;;AACtG,IAAA,MAAM,GAAG,GAA4C;QACnD,IAAI;AACJ,QAAA,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC;AACvC,QAAA,QAAQ,GACNA,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CACG,IAAI,KACHC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAA,aAAA,EAAc,MAAM,EAAA,QAAA,EACtD,IAAI,EAAA,CACA,CACR,EACDA,cAAM,SAAS,EAAE,EAAE,CAAC,kCAAkC,CAAC,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAQ,IACzE,CACJ;AACD,QAAA,GAAG,KAAK;KACT;IAED,IAAI,MAAM,KAAK,SAAS;QAAE,OAAOA,GAAA,CAAA,GAAA,EAAA,EAAA,GAAO,GAAG,EAAA,CAAI;AAE/C;AAC4F;IAC5F,MAAM,OAAO,GAAG,MAA+D;IAC/E,OAAO,YAAY,CAAC,OAAO,EAAE;AAC3B,QAAA,GAAG,UAAU,CAAM,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;QACtC,QAAQ,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG,CAAC,QAAQ;AACjD,KAAA,CAAC;AACJ;;"}
|
|
@@ -5,8 +5,9 @@ import { HugeiconsIcon } from '@hugeicons/react';
|
|
|
5
5
|
import { MinusSignIcon, PlusSignIcon } from '@hugeicons/core-free-icons';
|
|
6
6
|
import { forwardRef } from 'react';
|
|
7
7
|
import { cn } from '../libs/utils.js';
|
|
8
|
-
import { state, stateLayer, tone, shape, density, text, iconStroke,
|
|
8
|
+
import { state, stateLayer, tone, shape, density, text, iconStroke, rim, material, focusRingWithin } from './ui.common.js';
|
|
9
9
|
import { motionFeedback, motionInkPress } from './ui.motion.js';
|
|
10
|
+
import { fieldDensity } from './Field.js';
|
|
10
11
|
|
|
11
12
|
/* Base UI names each stepper itself and keeps it out of the tab order, because the input already
|
|
12
13
|
steps from the keyboard. The steppers never take a focus ring: they are not reachable by
|
|
@@ -23,7 +24,7 @@ const affixClassName = cn("shrink-0 select-none whitespace-nowrap", text.medium)
|
|
|
23
24
|
* A number typed or stepped. Base UI owns parsing, stepping, clamping, spinbutton semantics and
|
|
24
25
|
* locale formatting; the ref points at the input, and the hidden form input is `inputRef`.
|
|
25
26
|
*/
|
|
26
|
-
const NumberField = forwardRef(({ value, defaultValue, onValueChange, onValueCommitted, min, max, step, format, locale, prefix, suffix, disabled, readOnly, required, name, form, inputRef, className, inputClassName, ...inputProps }, ref) => {
|
|
27
|
+
const NumberField = forwardRef(({ value, defaultValue, onValueChange, onValueCommitted, min, max, step, format, locale, prefix, suffix, disabled, readOnly, required, name, form, inputRef, size = "md", className, fieldClassName, inputClassName, ...inputProps }, ref) => {
|
|
27
28
|
const hasAffix = prefix != null || suffix != null;
|
|
28
29
|
/* The band around a sized value is not part of the input, so a press on a unit or on the space
|
|
29
30
|
beside it would otherwise land on nothing. It is handed to the input the way a press on a
|
|
@@ -36,20 +37,20 @@ const NumberField = forwardRef(({ value, defaultValue, onValueChange, onValueCom
|
|
|
36
37
|
valueInput.focus();
|
|
37
38
|
};
|
|
38
39
|
return (jsx(NumberField$1.Root, { value: value, defaultValue: defaultValue, onValueChange: onValueChange, onValueCommitted: onValueCommitted, min: min, max: max, step: step, format: format, locale: locale, disabled: disabled, readOnly: readOnly, required: required, name: name, form: form, inputRef: inputRef, className: cn("min-w-0 w-full", className), children: jsxs(NumberField$1.Group, { className: ({ disabled: fieldDisabled }) => cn(
|
|
39
|
-
// The 44px targets fit the
|
|
40
|
-
"group/field flex w-full items-center gap-1 px-1.5",
|
|
40
|
+
// The 44px targets fit the field's own height, inside its rim, without inflating its density.
|
|
41
|
+
"group/field flex w-full items-center gap-1 px-1.5", fieldDensity[size], shape.control, motionFeedback, focusRingWithin, material.control, rim.field, state.field.invalid, !fieldDisabled && state.field.hover, !fieldDisabled && state.field.focusWithin, !fieldDisabled && state.field.invalidHover, !fieldDisabled && state.field.invalidFocusWithin, fieldDisabled ? state.disabled : state.text, fieldClassName), children: [jsx(NumberField$1.Decrement, { className: cn(stepperClassName), children: jsx("span", { className: cn(stepperIconClassName), children: jsx(HugeiconsIcon, { icon: MinusSignIcon, "aria-hidden": "true", className: cn(iconStroke.glyph, "size-5") }) }) }), hasAffix ? (
|
|
41
42
|
/* The value and its units are one centred figure, so the input is exactly as wide as the
|
|
42
43
|
text it holds: a hidden copy of that text sizes the cell both share, and the units sit
|
|
43
44
|
against it on either side. The rest of the band still belongs to the input — a press
|
|
44
45
|
anywhere in it, units included, places the caret in the value. */
|
|
45
|
-
jsxs("div", { className: cn("flex min-w-0 flex-1 cursor-text items-center justify-center gap-1.5 self-stretch"), onPointerDown: focusValue, children: [prefix != null && jsx("span", { "aria-hidden": "true", className: cn(affixClassName), children: prefix }), jsx(NumberField$1.Input, { ...inputProps, ref: ref, className: cn("absolute inset-0 min-w-0 w-full bg-transparent py-2 text-center text-inherit outline-none",
|
|
46
|
+
jsxs("div", { className: cn("flex min-w-0 flex-1 cursor-text items-center justify-center gap-1.5 self-stretch"), onPointerDown: focusValue, children: [prefix != null && jsx("span", { "aria-hidden": "true", className: cn(affixClassName), children: prefix }), jsx(NumberField$1.Input, { ...inputProps, ref: ref, className: cn("absolute inset-0 min-w-0 w-full bg-transparent py-2 text-center text-inherit [outline-style:none]", "tabular-nums", state.text, inputClassName), render: (props) => {
|
|
46
47
|
var _a;
|
|
47
48
|
return (
|
|
48
49
|
/* The input lies over its own sizer rather than beside it: a text input keeps an
|
|
49
50
|
intrinsic width of several characters however small its `size`, and only the
|
|
50
51
|
text should decide how wide the value is. */
|
|
51
|
-
jsxs("span", { className: cn("relative inline-block min-w-[1ch] max-w-full"), children: [jsx("span", { "aria-hidden": "true", className: cn("invisible block overflow-hidden whitespace-pre py-2"
|
|
52
|
-
} }), suffix != null && jsx("span", { "aria-hidden": "true", className: cn(affixClassName), children: suffix })] })) : (jsx(NumberField$1.Input, { ...inputProps, ref: ref, className: cn("min-w-0 flex-1 bg-transparent py-2 text-center text-inherit outline-none",
|
|
52
|
+
jsxs("span", { className: cn("relative inline-block min-w-[1ch] max-w-full"), children: [jsx("span", { "aria-hidden": "true", className: cn("invisible block overflow-hidden whitespace-pre py-2 tabular-nums"), children: String((_a = props.value) !== null && _a !== void 0 ? _a : "") || props.placeholder || " " }), jsx("input", { ...props, size: 1 })] }));
|
|
53
|
+
} }), suffix != null && jsx("span", { "aria-hidden": "true", className: cn(affixClassName), children: suffix })] })) : (jsx(NumberField$1.Input, { ...inputProps, ref: ref, className: cn("min-w-0 flex-1 bg-transparent py-2 text-center text-inherit [outline-style:none]", "tabular-nums", state.text, inputClassName) })), jsx(NumberField$1.Increment, { className: cn(stepperClassName), children: jsx("span", { className: cn(stepperIconClassName), children: jsx(HugeiconsIcon, { icon: PlusSignIcon, "aria-hidden": "true", className: cn(iconStroke.glyph, "size-5") }) }) })] }) }));
|
|
53
54
|
});
|
|
54
55
|
NumberField.displayName = "NumberField";
|
|
55
56
|
|