@allxsmith/bestax-bulma 5.60.0 → 5.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bestax.css +1 -1
- package/dist/bestax.css.map +1 -1
- package/dist/esm/components/Carousel.js +3 -43
- package/dist/esm/components/Carousel.js.map +1 -1
- package/dist/esm/components/Command.js +3 -3
- package/dist/esm/components/Navbar.js +3 -1
- package/dist/esm/components/Navbar.js.map +1 -1
- package/dist/esm/components/Popover.js +7 -27
- package/dist/esm/components/Popover.js.map +1 -1
- package/dist/esm/components/Sidebar.js +17 -58
- package/dist/esm/components/Sidebar.js.map +1 -1
- package/dist/esm/components/TreeView.js +14 -10
- package/dist/esm/components/TreeView.js.map +1 -1
- package/dist/esm/form/ColorPicker.js +4 -4
- package/dist/esm/form/ColorPicker.js.map +1 -1
- package/dist/esm/form/Combobox.js +11 -16
- package/dist/esm/form/Combobox.js.map +1 -1
- package/dist/esm/form/Field.js.map +1 -1
- package/dist/esm/form/TreeSelect.js +395 -0
- package/dist/esm/form/TreeSelect.js.map +1 -0
- package/dist/esm/form/_pickerInternals/PickerPopover.js +5 -1
- package/dist/esm/form/_pickerInternals/PickerPopover.js.map +1 -1
- package/dist/esm/form/_selectInternals/DialogSelect.js +208 -0
- package/dist/esm/form/_selectInternals/DialogSelect.js.map +1 -0
- package/dist/esm/form/_selectInternals/ValueTags.js +28 -0
- package/dist/esm/form/_selectInternals/ValueTags.js.map +1 -0
- package/dist/esm/helpers/overlayStack.js +33 -1
- package/dist/esm/helpers/overlayStack.js.map +1 -1
- package/dist/esm/helpers/treeData.js +97 -0
- package/dist/esm/helpers/treeData.js.map +1 -0
- package/dist/esm/helpers/useBulmaViewport.js +82 -0
- package/dist/esm/helpers/useBulmaViewport.js.map +1 -0
- package/dist/esm/helpers/useComboboxEngine.js +2 -2
- package/dist/esm/helpers/useComboboxEngine.js.map +1 -1
- package/dist/esm/helpers/useControlled.js +30 -0
- package/dist/esm/helpers/useControlled.js.map +1 -0
- package/dist/esm/helpers/useInertSiblings.js +7 -3
- package/dist/esm/helpers/useInertSiblings.js.map +1 -1
- package/dist/esm/helpers/useOutsidePress.js +53 -0
- package/dist/esm/helpers/useOutsidePress.js.map +1 -0
- package/dist/esm/helpers/useOverlayFocus.js +74 -0
- package/dist/esm/helpers/useOverlayFocus.js.map +1 -0
- package/dist/esm/helpers/useTreeView.js +15 -13
- package/dist/esm/helpers/useTreeView.js.map +1 -1
- package/dist/esm/layout/AppFrame.js +438 -0
- package/dist/esm/layout/AppFrame.js.map +1 -0
- package/dist/extras.css +1 -1
- package/dist/extras.css.map +1 -1
- package/dist/index.cjs +1767 -518
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/types/components/Navbar.d.ts +4 -3
- package/dist/types/form/Field.d.ts +1 -1
- package/dist/types/form/TreeSelect.d.ts +308 -0
- package/dist/types/form/_pickerInternals/PickerPopover.d.ts +8 -0
- package/dist/types/form/_selectInternals/DialogSelect.d.ts +86 -0
- package/dist/types/form/_selectInternals/ValueTags.d.ts +40 -0
- package/dist/types/helpers/overlayStack.d.ts +17 -0
- package/dist/types/helpers/treeData.d.ts +48 -0
- package/dist/types/helpers/useBulmaViewport.d.ts +34 -0
- package/dist/types/helpers/useControlled.d.ts +14 -0
- package/dist/types/helpers/useInertSiblings.d.ts +4 -1
- package/dist/types/helpers/useOutsidePress.d.ts +24 -0
- package/dist/types/helpers/useOverlayFocus.d.ts +44 -0
- package/dist/types/helpers/useTreeView.d.ts +30 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/layout/AppFrame.d.ts +306 -0
- package/dist/types-cjs/components/Navbar.d.ts +4 -3
- package/dist/types-cjs/form/Field.d.ts +1 -1
- package/dist/types-cjs/form/TreeSelect.d.ts +308 -0
- package/dist/types-cjs/form/_pickerInternals/PickerPopover.d.ts +8 -0
- package/dist/types-cjs/form/_selectInternals/DialogSelect.d.ts +86 -0
- package/dist/types-cjs/form/_selectInternals/ValueTags.d.ts +40 -0
- package/dist/types-cjs/helpers/overlayStack.d.ts +17 -0
- package/dist/types-cjs/helpers/treeData.d.ts +48 -0
- package/dist/types-cjs/helpers/useBulmaViewport.d.ts +34 -0
- package/dist/types-cjs/helpers/useControlled.d.ts +14 -0
- package/dist/types-cjs/helpers/useInertSiblings.d.ts +4 -1
- package/dist/types-cjs/helpers/useOutsidePress.d.ts +24 -0
- package/dist/types-cjs/helpers/useOverlayFocus.d.ts +44 -0
- package/dist/types-cjs/helpers/useTreeView.d.ts +30 -0
- package/dist/types-cjs/index.d.ts +2 -0
- package/dist/types-cjs/layout/AppFrame.d.ts +306 -0
- package/dist/versions/bestax-no-dark-mode.css +1 -1
- package/dist/versions/bestax-no-dark-mode.css.map +1 -1
- package/dist/versions/bestax-no-helpers-prefixed.css +1 -1
- package/dist/versions/bestax-no-helpers-prefixed.css.map +1 -1
- package/dist/versions/bestax-no-helpers.css +1 -1
- package/dist/versions/bestax-no-helpers.css.map +1 -1
- package/dist/versions/bestax-prefixed.css +1 -1
- package/dist/versions/bestax-prefixed.css.map +1 -1
- package/package.json +1 -1
- package/src/scss/form/_index.scss +1 -0
- package/src/scss/form/_picker-popover.scss +6 -0
- package/src/scss/form/_treeselect.scss +146 -0
- package/src/scss/layout/_appframe.scss +306 -0
- package/src/scss/layout/_index.scss +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeView.js","sources":["../../../src/components/TreeView.tsx"],"sourcesContent":["import React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { classNames, usePrefixedClassNames } from '../helpers/classNames';\nimport { useBulmaClasses, BulmaClassesProps } from '../helpers/useBulmaClasses';\nimport { withSubComponents } from '../helpers/withSubComponents';\nimport { warnOnce } from '../helpers/devWarnings';\nimport { useClientLayoutEffect } from '../helpers/useClientLayoutEffect';\nimport { useTreeView, type TreeViewEngine } from '../helpers/useTreeView';\nimport { StatusRegion, spokenText } from '../helpers/statusRegion';\nimport { Checkbox } from '../form/Checkbox';\nimport { Icon } from '../elements/Icon';\n\n/**\n * How items are picked: `none`, nothing is; `single`, one item at a time;\n * `checkbox`, any number, with a box on every item and mixed parents;\n * `checkbox-independent`, any number, with a box on every item that checks\n * that item alone.\n */\nexport type TreeViewSelectionMode =\n 'none' | 'single' | 'checkbox' | 'checkbox-independent';\n\nconst validTreeViewSizes = ['small', 'medium', 'large'] as const;\n\n/** What an open item's load says in the tree's live region. */\ninterface LoadAnnouncement {\n /** The item's key, so what it says next replaces this. */\n key: string;\n /** The key and the kind: the region says it once each time it appears. */\n id: string;\n kind: 'loading' | 'loaded' | 'error';\n /** The item's name, read off its label. */\n name: string;\n /** A failed load's message, read off its row. */\n message: string;\n}\n\n/** What the root hands its items: the engine, the live region, and the rows' words. */\ninterface TreeContextValue extends TreeViewEngine {\n /** Puts what an item's load says in the live region, or takes it out with `null`. */\n announce: (key: string, announcement: LoadAnnouncement | null) => void;\n loadingLabel: string;\n retryLabel: string;\n}\n\n// Not exported, so they stay out of the public API that `index.ts` re-exports.\nconst TreeViewContext = createContext<TreeContextValue | null>(null);\n\nconst sayLoading = (name: string) => `Loading ${name}`;\nconst sayLoaded = (name: string) => `${name} loaded`;\n\n/** Where an item sits: the values of the items above it, and whether one of them is closed. */\ninterface Branch {\n path: string[];\n hidden: boolean;\n}\n\nconst TOP: Branch = { path: [], hidden: false };\nconst BranchContext = createContext<Branch>(TOP);\n\n/** The box's input lets the row's click toggle it, so a change on its own does nothing. */\nconst ignoreChange = () => {};\n\n/** Whether an `icon` was given something to render. */\nconst isGiven = (node: React.ReactNode) =>\n node !== undefined &&\n node !== null &&\n typeof node !== 'boolean' &&\n node !== '';\n\n/**\n * Props for the TreeView component. The helper props, the other attributes\n * and the `ref` land on the `<ul role=\"tree\">`.\n *\n * @extraProp {string} [aria-label] - Names the tree, such as \"Files\". A tree needs a name, so pass this or `aria-labelledby`, and a development build warns when it has neither.\n * @extraProp {string} [aria-labelledby] - The id of a visible heading or label that names the tree, in place of `aria-label`.\n * @extraProp {React.Ref<HTMLUListElement>} [ref] - Ref forwarded to the `<ul>`.\n */\nexport interface TreeViewProps\n extends\n Omit<\n React.HTMLAttributes<HTMLUListElement>,\n | keyof BulmaClassesProps\n | 'role'\n | 'onSelect'\n | 'defaultValue'\n | 'defaultChecked'\n >,\n BulmaClassesProps {\n /**\n * `TreeView.Item`s, nested inside each other for their children. Render\n * an item's children whenever you have them, open or not: the tree hides\n * them while it's closed.\n */\n children?: React.ReactNode;\n /**\n * `none`: nothing is picked, and Enter and Space open and close a parent.\n * `single`: one item, picked with Enter, Space or a click.\n * `checkbox`: any number, checked with Space or a click. A check reaches\n * every enabled item under it, and a parent with some of them checked is mixed.\n * `checkbox-independent`: any number, checked with Space or a click, each\n * box for its own item. A check reaches nothing under it, and no parent is\n * mixed (Mantine's and Ant Design's `checkStrictly`).\n */\n selectionMode?: TreeViewSelectionMode;\n /**\n * The selected item's value when you hold the state, or `null` for none.\n * Read with `single` only. Picking an item then only calls\n * `onSelectedChange`, and nothing changes until you pass the new value.\n */\n selected?: string | null;\n /** The item selected to begin with, when the tree holds its own state. Read with `single` only. */\n defaultSelected?: string | null;\n /**\n * Called with the value of the item picked. Not called for the one\n * already selected, and moving focus never calls it.\n */\n onSelectedChange?: (value: string) => void;\n /**\n * The checked items' values when you hold the state. Read with `checkbox`\n * and `checkbox-independent` only. A value checks its item. In `checkbox`,\n * an enabled item also counts as checked when any item above it is in the\n * list, so a parent's value stands for its whole branch, loaded or not, and\n * a disabled item is checked only by its own value. In\n * `checkbox-independent`, a value checks its own item and nothing else.\n */\n checked?: string[];\n /** The values checked to begin with, when the tree holds its own state. Read with `checkbox` and `checkbox-independent` only. */\n defaultChecked?: string[];\n /**\n * Called after a check or an uncheck. In `checkbox`, with every item that\n * now shows checked, parents included, plus any earlier value that matches\n * no item the tree knows, left as it was, and the order means nothing. In\n * `checkbox-independent`, with the list as it was, the item's value added\n * at the end or every copy of it taken out, and everything else in the\n * same order. Passed back as `checked`, the list shows the same boxes.\n */\n onCheckedChange?: (checked: string[]) => void;\n /**\n * The open items' values when you hold the state. A value stays in the\n * list while its item's parent is closed, so the item reopens as it was.\n */\n expanded?: string[];\n /** The items open to begin with, when the tree holds its own state. */\n defaultExpanded?: string[];\n /** Called with the new list whenever an item opens or closes, `*` included. */\n onExpandedChange?: (expanded: string[]) => void;\n /** The text size, as Bulma's menu sizes it. The rows, the indent and the chevron scale with it. */\n size?: 'small' | 'medium' | 'large';\n /** What the row in a loading item's group says. In your app's language. */\n loadingLabel?: string;\n /** The Retry button's text on a failed load's row. In your app's language. */\n retryLabel?: string;\n /**\n * What the live region says when an open item starts loading, built from\n * the item's name. In your app's language. Default: `` `Loading ${name}` ``.\n */\n loadingAnnouncement?: (name: string) => string;\n /**\n * What the live region says when that load finishes. In your app's\n * language. Default: `` `${name} loaded` ``.\n */\n loadedAnnouncement?: (name: string) => string;\n}\n\n/**\n * Props for TreeView.Item, one row and, nested in it, its children. The other\n * attributes and the `ref` land on its `<li role=\"treeitem\">`.\n *\n * @extraProp {number} [aria-posinset] - The item's number among the items beside it. The tree declares it, and `aria-setsize`, from the items on the page once it mounts. When the page holds only part of a set, such as the first page of a long folder, pass both on every item of that set: yours win, and the tree's own stay on any item without them.\n * @extraProp {number} [aria-setsize] - How many items sit beside it, itself included. Declared by the tree like `aria-posinset`, and `-1` says the count isn't known.\n * @extraProp {React.Ref<HTMLLIElement>} [ref] - Ref forwarded to the `<li>`.\n */\nexport interface TreeViewItemProps extends Omit<\n React.LiHTMLAttributes<HTMLLIElement>,\n 'role' | 'value' | 'onSelect' | 'children'\n> {\n /** **Required.** Identifies the item in `selected`, `checked` and `expanded`. Unique in the tree. */\n value: string;\n /**\n * **Required.** What the row shows, and the item's name for assistive\n * tech. Nothing in it should be a link or a button: a tree item does one\n * thing, and nothing else in its row takes focus.\n */\n label: React.ReactNode;\n /** A picture before the label: an `Icon` name, or a node. Hidden from assistive tech. */\n icon?: React.ReactNode;\n /**\n * `TreeView.Item`s under this one. Render them whenever you have them,\n * open or not: the tree hides them while it's closed, and a `checkbox` tree\n * needs them to know what a check reaches.\n */\n children?: React.ReactNode;\n /** Shows the item as a parent before its children are known, such as a folder that loads when it opens. */\n hasChildren?: boolean;\n /**\n * Its children are on their way. While it's open, its group ends in a row\n * that says so, and the tree's live region says it's loading, then that\n * it's loaded once this goes back to `false`. A parent only: pair it with\n * `hasChildren`, or with the children it already has.\n */\n isLoading?: boolean;\n /**\n * Its children didn't load. While it's open, its group ends in a row with\n * this message, and a Retry button when there's an `onRetry`, and the live\n * region reads the message out, so name the item in it (\"Couldn't load\n * src\"), then says it's loaded once this goes with the item still open. A\n * parent only, like `isLoading`. Nothing in it should be a link or a\n * button: the row is what's pressed. `isLoading` wins while both are given.\n */\n loadError?: React.ReactNode;\n /**\n * Called by the Retry button on a failed load's row, and by Enter or Space\n * there. Set `isLoading` while the retry runs, so the live region says it's\n * loading, and reads the message out again if it fails again. The same\n * message passed a second time with no loading between is no change the\n * tree can see.\n */\n onRetry?: () => void;\n /**\n * Reachable with the arrow keys, Home, End and type-ahead, so a screen\n * reader finds it, but never selected, checked, opened or closed. One\n * that's already open stays open.\n */\n disabled?: boolean;\n}\n\n/**\n * The `TreeView` component renders a tree of items you browse and pick from, the way a file explorer works: one tab stop, the arrow keys to move, and Right and Left to open and close.\n *\n * It's the APG Tree View pattern, drawn to look like Bulma's menu. It isn't\n * for site navigation: items aren't links, and a sidebar whose sections open\n * and close is `Menu`'s job. The root owns which items are open, through\n * `expanded`, `defaultExpanded` and `onExpandedChange`.\n *\n * `selectionMode` picks the kind of tree. With `none`, nothing is picked.\n * With `single`, one item is, and `selected` says which. With `checkbox`,\n * each item has a box, a check reaches every enabled item under it, closed\n * branches included, and a parent with some of its items checked is mixed.\n * With `checkbox-independent`, each item has a box that checks that item\n * alone, so a parent means only itself and is never mixed. `selected` is\n * read in a `single` tree only, and `checked` in the two checkbox trees only.\n * Selection never follows focus.\n *\n * Disabled items stay reachable from the keys, so a screen reader finds\n * them. The tree needs a name, from `aria-label` or `aria-labelledby`, and a\n * development build warns when it has neither.\n *\n * @function\n * @param {TreeViewProps} props - Props for the TreeView component.\n * @param {React.Ref<HTMLUListElement>} ref - Forwarded ref to the `<ul>`.\n * @returns {JSX.Element} The rendered tree.\n * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/treeview/ | APG Tree View Pattern}\n *\n * @example\n * <TreeView aria-label=\"Files\" selectionMode=\"single\" defaultExpanded={['src']}>\n * <TreeView.Item value=\"src\" label=\"src\" icon=\"folder\">\n * <TreeView.Item value=\"src/index.ts\" label=\"index.ts\" icon=\"file\" />\n * </TreeView.Item>\n * <TreeView.Item value=\"package.json\" label=\"package.json\" icon=\"file\" />\n * </TreeView>\n */\nconst TreeViewRoot = forwardRef<HTMLUListElement, TreeViewProps>(\n function TreeView(\n {\n children,\n selectionMode = 'none',\n selected,\n defaultSelected = null,\n onSelectedChange,\n checked,\n defaultChecked = [],\n onCheckedChange,\n expanded,\n defaultExpanded = [],\n onExpandedChange,\n size,\n loadingLabel = 'Loading…',\n retryLabel = 'Retry',\n loadingAnnouncement,\n loadedAnnouncement,\n className,\n ...props\n },\n ref\n ) {\n const { bulmaHelperClasses, rest } = useBulmaClasses({ ...props });\n const engine = useTreeView({\n mode: selectionMode,\n selected,\n defaultSelected,\n onSelectedChange,\n checked,\n defaultChecked,\n onCheckedChange,\n expanded,\n defaultExpanded,\n onExpandedChange,\n });\n\n const { treeRef } = engine;\n const setRefs = useCallback(\n (node: HTMLUListElement | null) => {\n treeRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref, treeRef]\n );\n\n const named = Boolean(rest['aria-label'] || rest['aria-labelledby']);\n useEffect(() => {\n if (!named) {\n warnOnce(\n 'TreeView:unnamed',\n '[bestax-bulma] <TreeView> has no accessible name. Pass ' +\n 'aria-label or aria-labelledby, so a screen reader can say what ' +\n 'the tree holds.'\n );\n }\n }, [named]);\n\n const rootClass = usePrefixedClassNames('tree-view', {\n [`is-${size}`]:\n !!size && (validTreeViewSizes as readonly string[]).includes(size),\n });\n\n // What each open item's load says, in the order they started saying it.\n const [announcements, setAnnouncements] = useState<LoadAnnouncement[]>([]);\n const announce = useCallback(\n (key: string, announcement: LoadAnnouncement | null) => {\n setAnnouncements(current => {\n const others = current.filter(said => said.key !== key);\n return announcement ? [...others, announcement] : others;\n });\n },\n []\n );\n const describe = useCallback(\n ({ kind, name, message }: LoadAnnouncement) => {\n if (kind === 'error') return message;\n const say =\n kind === 'loading'\n ? (loadingAnnouncement ?? sayLoading)\n : (loadedAnnouncement ?? sayLoaded);\n return say(name);\n },\n [loadingAnnouncement, loadedAnnouncement]\n );\n\n // The props are spread first, so the role and the attributes the tree\n // owns win over anything a caller passes along. The live region sits\n // beside the tree, since a tree holds items and groups only, and it's\n // there from the start, so a screen reader is listening to it before\n // anything is written into it.\n return (\n <TreeViewContext.Provider\n value={{ ...engine, announce, loadingLabel, retryLabel }}\n >\n <BranchContext.Provider value={TOP}>\n <ul\n {...rest}\n ref={setRefs}\n className={classNames(rootClass, bulmaHelperClasses, className)}\n role=\"tree\"\n aria-multiselectable={engine.multiselectable || undefined}\n >\n {children}\n </ul>\n </BranchContext.Provider>\n <StatusRegion items={announcements} describe={describe} />\n </TreeViewContext.Provider>\n );\n }\n);\n\n/**\n * One item in the tree: a row with its chevron, its box, its icon and its label, and, while it's open, a group of the items under it.\n *\n * @function\n * @param {TreeViewItemProps} props - Props for TreeView.Item.\n * @param {React.Ref<HTMLLIElement>} ref - Forwarded ref to the `<li>`.\n * @returns {JSX.Element | null} The rendered item, or nothing under a closed one.\n */\nexport const TreeViewItem = forwardRef<HTMLLIElement, TreeViewItemProps>(\n function TreeViewItem(\n {\n value,\n label,\n icon,\n children,\n hasChildren = false,\n isLoading = false,\n loadError,\n onRetry,\n disabled = false,\n className,\n onClick,\n onKeyDown,\n onFocus,\n onBlur,\n ...props\n },\n ref\n ) {\n const tree = useContext(TreeViewContext);\n const branch = useContext(BranchContext);\n // Also the item's key in the live region.\n const labelId = useId();\n const hasItems = React.Children.toArray(children).length > 0;\n const isParent = hasItems || hasChildren;\n const open = isParent && !!tree?.isOpen(value);\n const parent = branch.path[branch.path.length - 1] ?? null;\n\n // The row at the end of its group, while it's open and on the page.\n const shown = open && !branch.hidden;\n const status = !shown\n ? null\n : isLoading\n ? 'loading'\n : isGiven(loadError)\n ? 'error'\n : null;\n const labelRef = useRef<HTMLSpanElement | null>(null);\n const statusLabelRef = useRef<HTMLSpanElement | null>(null);\n\n // What the live region says follows the row: it's loading, or it failed,\n // while the row says so, and it's loaded once the row goes with the item\n // still open, whichever row it was, until the item closes or loads again.\n // A closed item says nothing, loading or not.\n const phase = shown ? (status ?? 'open') : 'closed';\n const lastPhaseRef = useRef(phase);\n const announce = tree?.announce;\n useEffect(() => {\n const was = lastPhaseRef.current;\n lastPhaseRef.current = phase;\n const kind =\n phase === 'loading' || phase === 'error'\n ? phase\n : phase === 'open' && (was === 'loading' || was === 'error')\n ? 'loaded'\n : null;\n if (!kind) return undefined;\n // Only an item inside a tree can be open.\n announce!(labelId, {\n key: labelId,\n id: `${labelId}:${kind}`,\n kind,\n name: spokenText(labelRef.current!),\n message: kind === 'error' ? spokenText(statusLabelRef.current!) : '',\n });\n return () => announce!(labelId, null);\n }, [phase, announce, labelId]);\n\n const itemClass = usePrefixedClassNames('tree-view-item');\n const groupClass = usePrefixedClassNames('tree-view-group');\n const toggleClass = usePrefixedClassNames('tree-view-toggle');\n const checkClass = usePrefixedClassNames('tree-view-check');\n const iconClass = usePrefixedClassNames('tree-view-icon');\n const labelClass = usePrefixedClassNames('tree-view-label');\n\n const register = tree?.register;\n useClientLayoutEffect(() => {\n if (!register) {\n warnOnce(\n 'TreeView.Item:outside',\n '[bestax-bulma] <TreeView.Item> is outside a <TreeView>, so it ' +\n 'renders nothing. Put it inside one.'\n );\n return undefined;\n }\n return register(value, { parent, disabled, isParent });\n }, [register, value, parent, disabled, isParent]);\n\n const setElement = tree?.setElement;\n const setRefs = useCallback(\n (node: HTMLLIElement | null) => {\n // Only an item inside a tree renders an element to hand over.\n setElement!(value, node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [setElement, value, ref]\n );\n const rowRef = useRef<HTMLDivElement | null>(null);\n const toggleRef = useRef<HTMLSpanElement | null>(null);\n\n const childBranch = useMemo(\n () => ({\n path: [...branch.path, value],\n hidden: branch.hidden || !open,\n }),\n [branch, value, open]\n );\n\n const { selected, checked } =\n tree?.stateOf(value, branch.path, disabled) ?? {};\n const rowClass = usePrefixedClassNames('tree-view-row', {\n 'is-selected': selected,\n 'is-disabled': disabled,\n });\n\n if (!tree) return null;\n\n // While it's open the children render in its group. In a `checkbox` tree\n // they render while it's closed too, drawing nothing, so a check knows\n // what's under it.\n const items = (open || tree.rendersClosed) && (\n <BranchContext.Provider value={childBranch}>\n {children}\n </BranchContext.Provider>\n );\n if (branch.hidden) return <>{items}</>;\n\n const info = { value, parent, disabled, isParent, open };\n // A position the caller gives wins, for a set the page holds only part of.\n const position = tree.positionOf(value);\n\n return (\n <li\n {...props}\n ref={setRefs}\n className={classNames(itemClass, className)}\n role=\"treeitem\"\n aria-labelledby={labelId}\n aria-level={branch.path.length + 1}\n aria-posinset={props['aria-posinset'] ?? position?.posinset}\n aria-setsize={props['aria-setsize'] ?? position?.setsize}\n aria-expanded={isParent ? open : undefined}\n aria-disabled={disabled || undefined}\n aria-selected={selected}\n aria-checked={checked}\n tabIndex={tree.tabStop === value ? 0 : -1}\n onKeyDown={event => {\n onKeyDown?.(event);\n tree.onKeyDown(event, info);\n }}\n onFocus={event => {\n onFocus?.(event);\n if (event.target === event.currentTarget) {\n tree.onFocus(value, event.currentTarget);\n }\n }}\n onBlur={event => {\n onBlur?.(event);\n if (event.target === event.currentTarget) tree.onBlur();\n }}\n onClick={event => {\n onClick?.(event);\n // A click in its row is its own, and so is one on the item itself,\n // as a test's click on the treeitem is. One in its group belongs\n // to the item inside it, or to nothing. The chevron's box is on\n // every row, but it's a chevron only on a parent: on a leaf it's\n // more of the row.\n const target = event.target as Node;\n if (\n target === event.currentTarget ||\n rowRef.current!.contains(target)\n ) {\n tree.onClick(\n event.currentTarget,\n info,\n isParent && toggleRef.current!.contains(target)\n );\n }\n }}\n >\n <div className={rowClass} ref={rowRef}>\n <span className={toggleClass} aria-hidden=\"true\" ref={toggleRef} />\n {checked !== undefined && (\n <span\n className={checkClass}\n aria-hidden=\"true\"\n onClick={event => {\n // A click on the box's label is followed by one on its\n // input, and both reach the item. The label's is cancelled,\n // so the item toggles once.\n if (!(event.target instanceof HTMLInputElement)) {\n event.preventDefault();\n }\n }}\n >\n <Checkbox\n tabIndex={-1}\n checked={checked === true}\n indeterminate={checked === 'mixed'}\n disabled={disabled}\n onChange={ignoreChange}\n />\n </span>\n )}\n {isGiven(icon) && (\n <span className={iconClass} aria-hidden=\"true\">\n {typeof icon === 'string' ? <Icon name={icon} /> : icon}\n </span>\n )}\n <span className={labelClass} id={labelId} ref={labelRef}>\n {label}\n </span>\n </div>\n {open && (hasItems || status) ? (\n <ul className={groupClass} role=\"group\">\n {items}\n {status && (\n <StatusRow\n kind={status}\n parent={value}\n level={branch.path.length + 2}\n message={loadError}\n onRetry={onRetry}\n labelRef={statusLabelRef}\n />\n )}\n </ul>\n ) : (\n items\n )}\n </li>\n );\n }\n);\n\nTreeViewItem.displayName = 'TreeView.Item';\n\n/** Props for the row at the end of a loading item's group, or a failed load's. */\ninterface StatusRowProps {\n /** `loading`, or `error` for a load that failed. */\n kind: 'loading' | 'error';\n /** The value of the item it's in. */\n parent: string;\n /** Its `aria-level`, one under the item it's in. */\n level: number;\n /** A failed load's message. */\n message: React.ReactNode;\n /** Retries a failed load. */\n onRetry?: () => void;\n /** For its label, which the item reads a failed load's message off. */\n labelRef: React.Ref<HTMLSpanElement>;\n}\n\n/**\n * The row at the end of a loading item's group, or of one whose load failed.\n * It's a `treeitem` the keys reach, the way they reach a disabled item, so a\n * screen reader finds it. It has no value and no record, so it's never\n * selected or checked, and a check never counts it. A failed load's row with\n * `onRetry` retries with Enter, Space or a click, and any other is disabled.\n * The Retry button is drawn, hidden from assistive tech and out of the tab\n * order, the way an item's box is: the row is what's pressed, and its name\n * says so. Rendered in one place, a failed load's row that starts loading\n * again is the same element, so focus stays on it.\n */\nfunction StatusRow({\n kind,\n parent,\n level,\n message,\n onRetry,\n labelRef,\n}: StatusRowProps) {\n // Only an item inside a tree renders a group.\n const tree = useContext(TreeViewContext)!;\n // Also its key in the registry and for the tab stop, where an item has its value.\n const labelId = useId();\n const retryId = useId();\n const retry = kind === 'error' ? onRetry : undefined;\n\n const itemClass = usePrefixedClassNames('tree-view-item');\n const rowClass = usePrefixedClassNames('tree-view-row', {\n 'is-disabled': !retry,\n });\n const toggleClass = usePrefixedClassNames('tree-view-toggle');\n const labelClass = usePrefixedClassNames('tree-view-label');\n const loaderClass = usePrefixedClassNames('loader');\n const retryClass = usePrefixedClassNames('button', { 'is-small': true });\n\n const { setElement } = tree;\n const setRef = useCallback(\n (node: HTMLLIElement | null) => setElement(labelId, node),\n [setElement, labelId]\n );\n const info = {\n value: labelId,\n parent,\n disabled: !retry,\n isParent: false,\n open: false,\n retry,\n };\n const position = tree.positionOf(labelId);\n\n return (\n <li\n ref={setRef}\n className={itemClass}\n role=\"treeitem\"\n aria-labelledby={retry ? `${labelId} ${retryId}` : labelId}\n aria-level={level}\n aria-posinset={position?.posinset}\n aria-setsize={position?.setsize}\n aria-disabled={!retry || undefined}\n tabIndex={tree.tabStop === labelId ? 0 : -1}\n onKeyDown={event => tree.onKeyDown(event, info)}\n onFocus={event => {\n // Focus in something the message holds isn't the row's.\n if (event.target === event.currentTarget) {\n tree.onFocus(labelId, event.currentTarget);\n }\n }}\n onBlur={event => {\n if (event.target === event.currentTarget) tree.onBlur();\n }}\n onClick={event => tree.onClick(event.currentTarget, info, false)}\n >\n <div className={rowClass}>\n <span className={toggleClass} aria-hidden=\"true\">\n {kind === 'loading' && <span className={loaderClass} />}\n </span>\n <span className={labelClass} id={labelId} ref={labelRef}>\n {kind === 'loading' ? tree.loadingLabel : message}\n </span>\n {retry && (\n <span className={retryClass} id={retryId} aria-hidden=\"true\">\n {tree.retryLabel}\n </span>\n )}\n </div>\n </li>\n );\n}\n\nexport const TreeView = withSubComponents(\n TreeViewRoot,\n { Item: TreeViewItem },\n 'TreeView'\n);\n\nexport default TreeView;\n"],"names":["isGiven","_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeView.js","sources":["../../../src/components/TreeView.tsx"],"sourcesContent":["import React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { classNames, usePrefixedClassNames } from '../helpers/classNames';\nimport { useBulmaClasses, BulmaClassesProps } from '../helpers/useBulmaClasses';\nimport { withSubComponents } from '../helpers/withSubComponents';\nimport { warnOnce } from '../helpers/devWarnings';\nimport { useClientLayoutEffect } from '../helpers/useClientLayoutEffect';\nimport {\n TreeViewHiddenContext,\n useTreeView,\n type TreeViewEngine,\n} from '../helpers/useTreeView';\nimport { StatusRegion, spokenText } from '../helpers/statusRegion';\nimport { Checkbox } from '../form/Checkbox';\nimport { Icon } from '../elements/Icon';\n\n/**\n * How items are picked: `none`, nothing is; `single`, one item at a time;\n * `checkbox`, any number, with a box on every item and mixed parents;\n * `checkbox-independent`, any number, with a box on every item that checks\n * that item alone.\n */\nexport type TreeViewSelectionMode =\n 'none' | 'single' | 'checkbox' | 'checkbox-independent';\n\nconst validTreeViewSizes = ['small', 'medium', 'large'] as const;\n\n/** What an open item's load says in the tree's live region. */\ninterface LoadAnnouncement {\n /** The item's key, so what it says next replaces this. */\n key: string;\n /** The key and the kind: the region says it once each time it appears. */\n id: string;\n kind: 'loading' | 'loaded' | 'error';\n /** The item's name, read off its label. */\n name: string;\n /** A failed load's message, read off its row. */\n message: string;\n}\n\n/** What the root hands its items: the engine, the live region, and the rows' words. */\ninterface TreeContextValue extends TreeViewEngine {\n /** Puts what an item's load says in the live region, or takes it out with `null`. */\n announce: (key: string, announcement: LoadAnnouncement | null) => void;\n loadingLabel: string;\n retryLabel: string;\n}\n\n// Not exported, so they stay out of the public API that `index.ts` re-exports.\nconst TreeViewContext = createContext<TreeContextValue | null>(null);\n\nconst sayLoading = (name: string) => `Loading ${name}`;\nconst sayLoaded = (name: string) => `${name} loaded`;\n\n/** Where an item sits: the values of the items above it, and whether one of them is closed. */\ninterface Branch {\n path: string[];\n hidden: boolean;\n}\n\nconst TOP: Branch = { path: [], hidden: false };\nconst BranchContext = createContext<Branch>(TOP);\n\n/** The box's input lets the row's click toggle it, so a change on its own does nothing. */\nconst ignoreChange = () => {};\n\n/** Whether an `icon` was given something to render. */\nconst isGiven = (node: React.ReactNode) =>\n node !== undefined &&\n node !== null &&\n typeof node !== 'boolean' &&\n node !== '';\n\n/**\n * Props for the TreeView component. The helper props, the other attributes\n * and the `ref` land on the `<ul role=\"tree\">`.\n *\n * @extraProp {string} [aria-label] - Names the tree, such as \"Files\". A tree needs a name, so pass this or `aria-labelledby`, and a development build warns when it has neither.\n * @extraProp {string} [aria-labelledby] - The id of a visible heading or label that names the tree, in place of `aria-label`.\n * @extraProp {React.Ref<HTMLUListElement>} [ref] - Ref forwarded to the `<ul>`.\n */\nexport interface TreeViewProps\n extends\n Omit<\n React.HTMLAttributes<HTMLUListElement>,\n | keyof BulmaClassesProps\n | 'role'\n | 'onSelect'\n | 'defaultValue'\n | 'defaultChecked'\n >,\n BulmaClassesProps {\n /**\n * `TreeView.Item`s, nested inside each other for their children. Render\n * an item's children whenever you have them, open or not: the tree hides\n * them while it's closed.\n */\n children?: React.ReactNode;\n /**\n * `none`: nothing is picked, and Enter and Space open and close a parent.\n * `single`: one item, picked with Enter, Space or a click.\n * `checkbox`: any number, checked with Space or a click. A check reaches\n * every enabled item under it, and a parent with some of them checked is mixed.\n * `checkbox-independent`: any number, checked with Space or a click, each\n * box for its own item. A check reaches nothing under it, and no parent is\n * mixed (Mantine's and Ant Design's `checkStrictly`).\n */\n selectionMode?: TreeViewSelectionMode;\n /**\n * The selected item's value when you hold the state, or `null` for none.\n * Read with `single` only. Picking an item then only calls\n * `onSelectedChange`, and nothing changes until you pass the new value.\n */\n selected?: string | null;\n /** The item selected to begin with, when the tree holds its own state. Read with `single` only. */\n defaultSelected?: string | null;\n /**\n * Called with the value of the item picked. Not called for the one\n * already selected, and moving focus never calls it.\n */\n onSelectedChange?: (value: string) => void;\n /**\n * The checked items' values when you hold the state. Read with `checkbox`\n * and `checkbox-independent` only. A value checks its item. In `checkbox`,\n * an enabled item also counts as checked when any item above it is in the\n * list, so a parent's value stands for its whole branch, loaded or not, and\n * a disabled item is checked only by its own value. In\n * `checkbox-independent`, a value checks its own item and nothing else.\n */\n checked?: string[];\n /** The values checked to begin with, when the tree holds its own state. Read with `checkbox` and `checkbox-independent` only. */\n defaultChecked?: string[];\n /**\n * Called after a check or an uncheck. In `checkbox`, with every item that\n * now shows checked, parents included, plus any earlier value that matches\n * no item the tree knows, left as it was, and the order means nothing. In\n * `checkbox-independent`, with the list as it was, the item's value added\n * at the end or every copy of it taken out, and everything else in the\n * same order. Passed back as `checked`, the list shows the same boxes.\n */\n onCheckedChange?: (checked: string[]) => void;\n /**\n * The open items' values when you hold the state. A value stays in the\n * list while its item's parent is closed, so the item reopens as it was.\n */\n expanded?: string[];\n /** The items open to begin with, when the tree holds its own state. */\n defaultExpanded?: string[];\n /** Called with the new list whenever an item opens or closes, `*` included. */\n onExpandedChange?: (expanded: string[]) => void;\n /** The text size, as Bulma's menu sizes it. The rows, the indent and the chevron scale with it. */\n size?: 'small' | 'medium' | 'large';\n /** What the row in a loading item's group says. In your app's language. */\n loadingLabel?: string;\n /** The Retry button's text on a failed load's row. In your app's language. */\n retryLabel?: string;\n /**\n * What the live region says when an open item starts loading, built from\n * the item's name. In your app's language. Default: `` `Loading ${name}` ``.\n */\n loadingAnnouncement?: (name: string) => string;\n /**\n * What the live region says when that load finishes. In your app's\n * language. Default: `` `${name} loaded` ``.\n */\n loadedAnnouncement?: (name: string) => string;\n}\n\n/**\n * Props for TreeView.Item, one row and, nested in it, its children. The other\n * attributes and the `ref` land on its `<li role=\"treeitem\">`.\n *\n * @extraProp {number} [aria-posinset] - The item's number among the items beside it. The tree declares it, and `aria-setsize`, from the items on the page once it mounts. When the page holds only part of a set, such as the first page of a long folder, pass both on every item of that set: yours win, and the tree's own stay on any item without them.\n * @extraProp {number} [aria-setsize] - How many items sit beside it, itself included. Declared by the tree like `aria-posinset`, and `-1` says the count isn't known.\n * @extraProp {React.Ref<HTMLLIElement>} [ref] - Ref forwarded to the `<li>`.\n */\nexport interface TreeViewItemProps extends Omit<\n React.LiHTMLAttributes<HTMLLIElement>,\n 'role' | 'value' | 'onSelect' | 'children'\n> {\n /** **Required.** Identifies the item in `selected`, `checked` and `expanded`. Unique in the tree. */\n value: string;\n /**\n * **Required.** What the row shows, and the item's name for assistive\n * tech. Nothing in it should be a link or a button: a tree item does one\n * thing, and nothing else in its row takes focus.\n */\n label: React.ReactNode;\n /** A picture before the label: an `Icon` name, or a node. Hidden from assistive tech. */\n icon?: React.ReactNode;\n /**\n * `TreeView.Item`s under this one. Render them whenever you have them,\n * open or not: the tree hides them while it's closed, and a `checkbox` tree\n * needs them to know what a check reaches.\n */\n children?: React.ReactNode;\n /** Shows the item as a parent before its children are known, such as a folder that loads when it opens. */\n hasChildren?: boolean;\n /**\n * Its children are on their way. While it's open, its group ends in a row\n * that says so, and the tree's live region says it's loading, then that\n * it's loaded once this goes back to `false`. A parent only: pair it with\n * `hasChildren`, or with the children it already has.\n */\n isLoading?: boolean;\n /**\n * Its children didn't load. While it's open, its group ends in a row with\n * this message, and a Retry button when there's an `onRetry`, and the live\n * region reads the message out, so name the item in it (\"Couldn't load\n * src\"), then says it's loaded once this goes with the item still open. A\n * parent only, like `isLoading`. Nothing in it should be a link or a\n * button: the row is what's pressed. `isLoading` wins while both are given.\n */\n loadError?: React.ReactNode;\n /**\n * Called by the Retry button on a failed load's row, and by Enter or Space\n * there. Set `isLoading` while the retry runs, so the live region says it's\n * loading, and reads the message out again if it fails again. The same\n * message passed a second time with no loading between is no change the\n * tree can see.\n */\n onRetry?: () => void;\n /**\n * Reachable with the arrow keys, Home, End and type-ahead, so a screen\n * reader finds it, but never selected, checked, opened or closed. One\n * that's already open stays open.\n */\n disabled?: boolean;\n}\n\n/**\n * The `TreeView` component renders a tree of items you browse and pick from, the way a file explorer works: one tab stop, the arrow keys to move, and Right and Left to open and close.\n *\n * It's the APG Tree View pattern, drawn to look like Bulma's menu. It isn't\n * for site navigation: items aren't links, and a sidebar whose sections open\n * and close is `Menu`'s job. The root owns which items are open, through\n * `expanded`, `defaultExpanded` and `onExpandedChange`.\n *\n * `selectionMode` picks the kind of tree. With `none`, nothing is picked.\n * With `single`, one item is, and `selected` says which. With `checkbox`,\n * each item has a box, a check reaches every enabled item under it, closed\n * branches included, and a parent with some of its items checked is mixed.\n * With `checkbox-independent`, each item has a box that checks that item\n * alone, so a parent means only itself and is never mixed. `selected` is\n * read in a `single` tree only, and `checked` in the two checkbox trees only.\n * Selection never follows focus.\n *\n * Disabled items stay reachable from the keys, so a screen reader finds\n * them. The tree needs a name, from `aria-label` or `aria-labelledby`, and a\n * development build warns when it has neither.\n *\n * @function\n * @param {TreeViewProps} props - Props for the TreeView component.\n * @param {React.Ref<HTMLUListElement>} ref - Forwarded ref to the `<ul>`.\n * @returns {JSX.Element} The rendered tree.\n * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/treeview/ | APG Tree View Pattern}\n *\n * @example\n * <TreeView aria-label=\"Files\" selectionMode=\"single\" defaultExpanded={['src']}>\n * <TreeView.Item value=\"src\" label=\"src\" icon=\"folder\">\n * <TreeView.Item value=\"src/index.ts\" label=\"index.ts\" icon=\"file\" />\n * </TreeView.Item>\n * <TreeView.Item value=\"package.json\" label=\"package.json\" icon=\"file\" />\n * </TreeView>\n */\nconst TreeViewRoot = forwardRef<HTMLUListElement, TreeViewProps>(\n function TreeView(\n {\n children,\n selectionMode = 'none',\n selected,\n defaultSelected = null,\n onSelectedChange,\n checked,\n defaultChecked = [],\n onCheckedChange,\n expanded,\n defaultExpanded = [],\n onExpandedChange,\n size,\n loadingLabel = 'Loading…',\n retryLabel = 'Retry',\n loadingAnnouncement,\n loadedAnnouncement,\n className,\n ...props\n },\n ref\n ) {\n const { bulmaHelperClasses, rest } = useBulmaClasses({ ...props });\n const engine = useTreeView({\n mode: selectionMode,\n selected,\n defaultSelected,\n onSelectedChange,\n checked,\n defaultChecked,\n onCheckedChange,\n expanded,\n defaultExpanded,\n onExpandedChange,\n });\n\n const { treeRef } = engine;\n const setRefs = useCallback(\n (node: HTMLUListElement | null) => {\n treeRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref, treeRef]\n );\n\n const named = Boolean(rest['aria-label'] || rest['aria-labelledby']);\n useEffect(() => {\n if (!named) {\n warnOnce(\n 'TreeView:unnamed',\n '[bestax-bulma] <TreeView> has no accessible name. Pass ' +\n 'aria-label or aria-labelledby, so a screen reader can say what ' +\n 'the tree holds.'\n );\n }\n }, [named]);\n\n const rootClass = usePrefixedClassNames('tree-view', {\n [`is-${size}`]:\n !!size && (validTreeViewSizes as readonly string[]).includes(size),\n });\n\n // What each open item's load says, in the order they started saying it.\n const [announcements, setAnnouncements] = useState<LoadAnnouncement[]>([]);\n const announce = useCallback(\n (key: string, announcement: LoadAnnouncement | null) => {\n setAnnouncements(current => {\n const others = current.filter(said => said.key !== key);\n return announcement ? [...others, announcement] : others;\n });\n },\n []\n );\n const describe = useCallback(\n ({ kind, name, message }: LoadAnnouncement) => {\n if (kind === 'error') return message;\n const say =\n kind === 'loading'\n ? (loadingAnnouncement ?? sayLoading)\n : (loadedAnnouncement ?? sayLoaded);\n return say(name);\n },\n [loadingAnnouncement, loadedAnnouncement]\n );\n\n // The props are spread first, so the role and the attributes the tree\n // owns win over anything a caller passes along. The live region sits\n // beside the tree, since a tree holds items and groups only, and it's\n // there from the start, so a screen reader is listening to it before\n // anything is written into it.\n return (\n <TreeViewContext.Provider\n value={{ ...engine, announce, loadingLabel, retryLabel }}\n >\n <BranchContext.Provider value={TOP}>\n <ul\n {...rest}\n ref={setRefs}\n className={classNames(rootClass, bulmaHelperClasses, className)}\n role=\"tree\"\n aria-multiselectable={engine.multiselectable || undefined}\n >\n {children}\n </ul>\n </BranchContext.Provider>\n <StatusRegion items={announcements} describe={describe} />\n </TreeViewContext.Provider>\n );\n }\n);\n\n/**\n * One item in the tree: a row with its chevron, its box, its icon and its label, and, while it's open, a group of the items under it.\n *\n * @function\n * @param {TreeViewItemProps} props - Props for TreeView.Item.\n * @param {React.Ref<HTMLLIElement>} ref - Forwarded ref to the `<li>`.\n * @returns {JSX.Element | null} The rendered item, or nothing under a closed one.\n */\nexport const TreeViewItem = forwardRef<HTMLLIElement, TreeViewItemProps>(\n function TreeViewItem(\n {\n value,\n label,\n icon,\n children,\n hasChildren = false,\n isLoading = false,\n loadError,\n onRetry,\n disabled = false,\n className,\n onClick,\n onKeyDown,\n onFocus,\n onBlur,\n ...props\n },\n ref\n ) {\n const tree = useContext(TreeViewContext);\n const branch = useContext(BranchContext);\n // Hidden by a component around the tree, such as TreeSelect's search,\n // it renders as an item under a closed parent does.\n const hiddenItems = useContext(TreeViewHiddenContext);\n const hiddenHere = branch.hidden || hiddenItems.has(value);\n // Also the item's key in the live region.\n const labelId = useId();\n const hasItems = React.Children.toArray(children).length > 0;\n const isParent = hasItems || hasChildren;\n const open = isParent && !!tree?.isOpen(value);\n const parent = branch.path[branch.path.length - 1] ?? null;\n\n // The row at the end of its group, while it's open and on the page.\n const shown = open && !hiddenHere;\n const status = !shown\n ? null\n : isLoading\n ? 'loading'\n : isGiven(loadError)\n ? 'error'\n : null;\n const labelRef = useRef<HTMLSpanElement | null>(null);\n const statusLabelRef = useRef<HTMLSpanElement | null>(null);\n\n // What the live region says follows the row: it's loading, or it failed,\n // while the row says so, and it's loaded once the row goes with the item\n // still open, whichever row it was, until the item closes or loads again.\n // A closed item says nothing, loading or not.\n const phase = shown ? (status ?? 'open') : 'closed';\n const lastPhaseRef = useRef(phase);\n const announce = tree?.announce;\n useEffect(() => {\n const was = lastPhaseRef.current;\n lastPhaseRef.current = phase;\n const kind =\n phase === 'loading' || phase === 'error'\n ? phase\n : phase === 'open' && (was === 'loading' || was === 'error')\n ? 'loaded'\n : null;\n if (!kind) return undefined;\n // Only an item inside a tree can be open.\n announce!(labelId, {\n key: labelId,\n id: `${labelId}:${kind}`,\n kind,\n name: spokenText(labelRef.current!),\n message: kind === 'error' ? spokenText(statusLabelRef.current!) : '',\n });\n return () => announce!(labelId, null);\n }, [phase, announce, labelId]);\n\n const itemClass = usePrefixedClassNames('tree-view-item');\n const groupClass = usePrefixedClassNames('tree-view-group');\n const toggleClass = usePrefixedClassNames('tree-view-toggle');\n const checkClass = usePrefixedClassNames('tree-view-check');\n const iconClass = usePrefixedClassNames('tree-view-icon');\n const labelClass = usePrefixedClassNames('tree-view-label');\n\n const register = tree?.register;\n useClientLayoutEffect(() => {\n if (!register) {\n warnOnce(\n 'TreeView.Item:outside',\n '[bestax-bulma] <TreeView.Item> is outside a <TreeView>, so it ' +\n 'renders nothing. Put it inside one.'\n );\n return undefined;\n }\n return register(value, { parent, disabled, isParent });\n }, [register, value, parent, disabled, isParent]);\n\n const setElement = tree?.setElement;\n const setRefs = useCallback(\n (node: HTMLLIElement | null) => {\n // Only an item inside a tree renders an element to hand over.\n setElement!(value, node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [setElement, value, ref]\n );\n const rowRef = useRef<HTMLDivElement | null>(null);\n const toggleRef = useRef<HTMLSpanElement | null>(null);\n\n const childBranch = useMemo(\n () => ({\n path: [...branch.path, value],\n hidden: hiddenHere || !open,\n }),\n [branch, value, hiddenHere, open]\n );\n\n const { selected, checked } =\n tree?.stateOf(value, branch.path, disabled) ?? {};\n const rowClass = usePrefixedClassNames('tree-view-row', {\n 'is-selected': selected,\n 'is-disabled': disabled,\n });\n\n if (!tree) return null;\n\n // While it's open the children render in its group. In a `checkbox` tree\n // they render while it's closed or hidden too, drawing nothing, so a\n // check knows what's under it.\n const items = (shown || tree.rendersClosed) && (\n <BranchContext.Provider value={childBranch}>\n {children}\n </BranchContext.Provider>\n );\n if (hiddenHere) return <>{items}</>;\n\n const info = { value, parent, disabled, isParent, open };\n // A position the caller gives wins, for a set the page holds only part of.\n const position = tree.positionOf(value);\n\n return (\n <li\n {...props}\n ref={setRefs}\n className={classNames(itemClass, className)}\n role=\"treeitem\"\n aria-labelledby={labelId}\n aria-level={branch.path.length + 1}\n aria-posinset={props['aria-posinset'] ?? position?.posinset}\n aria-setsize={props['aria-setsize'] ?? position?.setsize}\n aria-expanded={isParent ? open : undefined}\n aria-disabled={disabled || undefined}\n aria-selected={selected}\n aria-checked={checked}\n tabIndex={tree.tabStop === value ? 0 : -1}\n onKeyDown={event => {\n onKeyDown?.(event);\n tree.onKeyDown(event, info);\n }}\n onFocus={event => {\n onFocus?.(event);\n if (event.target === event.currentTarget) {\n tree.onFocus(value, event.currentTarget);\n }\n }}\n onBlur={event => {\n onBlur?.(event);\n if (event.target === event.currentTarget) tree.onBlur();\n }}\n onClick={event => {\n onClick?.(event);\n // A click in its row is its own, and so is one on the item itself,\n // as a test's click on the treeitem is. One in its group belongs\n // to the item inside it, or to nothing. The chevron's box is on\n // every row, but it's a chevron only on a parent: on a leaf it's\n // more of the row.\n const target = event.target as Node;\n if (\n target === event.currentTarget ||\n rowRef.current!.contains(target)\n ) {\n tree.onClick(\n event.currentTarget,\n info,\n isParent && toggleRef.current!.contains(target)\n );\n }\n }}\n >\n <div className={rowClass} ref={rowRef}>\n <span className={toggleClass} aria-hidden=\"true\" ref={toggleRef} />\n {checked !== undefined && (\n <span\n className={checkClass}\n aria-hidden=\"true\"\n onClick={event => {\n // A click on the box's label is followed by one on its\n // input, and both reach the item. The label's is cancelled,\n // so the item toggles once.\n if (!(event.target instanceof HTMLInputElement)) {\n event.preventDefault();\n }\n }}\n >\n <Checkbox\n tabIndex={-1}\n checked={checked === true}\n indeterminate={checked === 'mixed'}\n disabled={disabled}\n onChange={ignoreChange}\n />\n </span>\n )}\n {isGiven(icon) && (\n <span className={iconClass} aria-hidden=\"true\">\n {typeof icon === 'string' ? <Icon name={icon} /> : icon}\n </span>\n )}\n <span className={labelClass} id={labelId} ref={labelRef}>\n {label}\n </span>\n </div>\n {open && (hasItems || status) ? (\n <ul className={groupClass} role=\"group\">\n {items}\n {status && (\n <StatusRow\n kind={status}\n parent={value}\n level={branch.path.length + 2}\n message={loadError}\n onRetry={onRetry}\n labelRef={statusLabelRef}\n />\n )}\n </ul>\n ) : (\n items\n )}\n </li>\n );\n }\n);\n\nTreeViewItem.displayName = 'TreeView.Item';\n\n/** Props for the row at the end of a loading item's group, or a failed load's. */\ninterface StatusRowProps {\n /** `loading`, or `error` for a load that failed. */\n kind: 'loading' | 'error';\n /** The value of the item it's in. */\n parent: string;\n /** Its `aria-level`, one under the item it's in. */\n level: number;\n /** A failed load's message. */\n message: React.ReactNode;\n /** Retries a failed load. */\n onRetry?: () => void;\n /** For its label, which the item reads a failed load's message off. */\n labelRef: React.Ref<HTMLSpanElement>;\n}\n\n/**\n * The row at the end of a loading item's group, or of one whose load failed.\n * It's a `treeitem` the keys reach, the way they reach a disabled item, so a\n * screen reader finds it. It has no value and no record, so it's never\n * selected or checked, and a check never counts it. A failed load's row with\n * `onRetry` retries with Enter, Space or a click, and any other is disabled.\n * The Retry button is drawn, hidden from assistive tech and out of the tab\n * order, the way an item's box is: the row is what's pressed, and its name\n * says so. Rendered in one place, a failed load's row that starts loading\n * again is the same element, so focus stays on it.\n */\nfunction StatusRow({\n kind,\n parent,\n level,\n message,\n onRetry,\n labelRef,\n}: StatusRowProps) {\n // Only an item inside a tree renders a group.\n const tree = useContext(TreeViewContext)!;\n // Also its key in the registry and for the tab stop, where an item has its value.\n const labelId = useId();\n const retryId = useId();\n const retry = kind === 'error' ? onRetry : undefined;\n\n const itemClass = usePrefixedClassNames('tree-view-item');\n const rowClass = usePrefixedClassNames('tree-view-row', {\n 'is-disabled': !retry,\n });\n const toggleClass = usePrefixedClassNames('tree-view-toggle');\n const labelClass = usePrefixedClassNames('tree-view-label');\n const loaderClass = usePrefixedClassNames('loader');\n const retryClass = usePrefixedClassNames('button', { 'is-small': true });\n\n const { setElement } = tree;\n const setRef = useCallback(\n (node: HTMLLIElement | null) => setElement(labelId, node),\n [setElement, labelId]\n );\n const info = {\n value: labelId,\n parent,\n disabled: !retry,\n isParent: false,\n open: false,\n retry,\n };\n const position = tree.positionOf(labelId);\n\n return (\n <li\n ref={setRef}\n className={itemClass}\n role=\"treeitem\"\n aria-labelledby={retry ? `${labelId} ${retryId}` : labelId}\n aria-level={level}\n aria-posinset={position?.posinset}\n aria-setsize={position?.setsize}\n aria-disabled={!retry || undefined}\n tabIndex={tree.tabStop === labelId ? 0 : -1}\n onKeyDown={event => tree.onKeyDown(event, info)}\n onFocus={event => {\n // Focus in something the message holds isn't the row's.\n if (event.target === event.currentTarget) {\n tree.onFocus(labelId, event.currentTarget);\n }\n }}\n onBlur={event => {\n if (event.target === event.currentTarget) tree.onBlur();\n }}\n onClick={event => tree.onClick(event.currentTarget, info, false)}\n >\n <div className={rowClass}>\n <span className={toggleClass} aria-hidden=\"true\">\n {kind === 'loading' && <span className={loaderClass} />}\n </span>\n <span className={labelClass} id={labelId} ref={labelRef}>\n {kind === 'loading' ? tree.loadingLabel : message}\n </span>\n {retry && (\n <span className={retryClass} id={retryId} aria-hidden=\"true\">\n {tree.retryLabel}\n </span>\n )}\n </div>\n </li>\n );\n}\n\nexport const TreeView = withSubComponents(\n TreeViewRoot,\n { Item: TreeViewItem },\n 'TreeView'\n);\n\nexport default TreeView;\n"],"names":["ignoreChange","isGiven","_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
|
@@ -43,7 +43,7 @@ const rgbChannels = (color) => {
|
|
|
43
43
|
/** Whether a press should start a drag: any touch or pen, a mouse's main button. */
|
|
44
44
|
const startsDrag = (event) => event.pointerType !== 'mouse' || event.button === 0;
|
|
45
45
|
/** Hands a node to a forwarded ref and to one of the part's own. */
|
|
46
|
-
function setRefs(node, own, forwarded) {
|
|
46
|
+
function setRefs$1(node, own, forwarded) {
|
|
47
47
|
own.current = node;
|
|
48
48
|
if (typeof forwarded === 'function')
|
|
49
49
|
forwarded(node);
|
|
@@ -175,7 +175,7 @@ const ColorPickerArea = forwardRef(({ className, style, ...props }, ref) => {
|
|
|
175
175
|
const hiddenOf = (which) => touch || keyed || axis === which ? undefined : true;
|
|
176
176
|
if (!picker)
|
|
177
177
|
return null;
|
|
178
|
-
return (jsx("div", { ref: node => setRefs(node, rootRef, ref), className: classNames(areaClass, bulmaHelperClasses, className), style: {
|
|
178
|
+
return (jsx("div", { ref: node => setRefs$1(node, rootRef, ref), className: classNames(areaClass, bulmaHelperClasses, className), style: {
|
|
179
179
|
...style,
|
|
180
180
|
'--color-picker-hue': Math.round(color.h),
|
|
181
181
|
'--color-picker-rgb': rgbChannels(color),
|
|
@@ -249,7 +249,7 @@ const ChannelSlider = forwardRef(({ channel, className, style, ...props }, ref)
|
|
|
249
249
|
};
|
|
250
250
|
if (!picker)
|
|
251
251
|
return null;
|
|
252
|
-
return (jsxs("div", { ref: node => setRefs(node, rootRef, ref), className: classNames(sliderClass, bulmaHelperClasses, className), style: {
|
|
252
|
+
return (jsxs("div", { ref: node => setRefs$1(node, rootRef, ref), className: classNames(sliderClass, bulmaHelperClasses, className), style: {
|
|
253
253
|
...style,
|
|
254
254
|
'--color-picker-hue': Math.round(color.h),
|
|
255
255
|
'--color-picker-rgb': rgbChannels(color),
|
|
@@ -373,7 +373,7 @@ const ColorPickerSwatches = forwardRef(({ className, swatches: ownSwatches, ...p
|
|
|
373
373
|
};
|
|
374
374
|
if (!picker || list.length === 0)
|
|
375
375
|
return null;
|
|
376
|
-
return (jsx("div", { ref: node => setRefs(node, rootRef, ref), className: classNames(groupClass, bulmaHelperClasses, className), role: "radiogroup", "aria-label": labels.swatches, "aria-disabled": disabled || undefined, ...rest, children: list.map((entry, i) => {
|
|
376
|
+
return (jsx("div", { ref: node => setRefs$1(node, rootRef, ref), className: classNames(groupClass, bulmaHelperClasses, className), role: "radiogroup", "aria-label": labels.swatches, "aria-disabled": disabled || undefined, ...rest, children: list.map((entry, i) => {
|
|
377
377
|
const swatch = colorOf(i);
|
|
378
378
|
const isChecked = i === checked;
|
|
379
379
|
// The check is drawn in black or white with a ring of the other, so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorPicker.js","sources":["../../../src/form/ColorPicker.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n classNames,\n prefixedClassNames,\n usePrefixedClassNames,\n} from '../helpers/classNames';\nimport { useClassPrefix } from '../helpers/Config';\nimport { useBulmaClasses, BulmaClassesProps } from '../helpers/useBulmaClasses';\nimport { useClientLayoutEffect } from '../helpers/useClientLayoutEffect';\nimport { withSubComponents } from '../helpers/withSubComponents';\nimport { ColorSwatch } from '../elements/ColorSwatch';\nimport {\n ColorFormat,\n Hsva,\n formatColor,\n hsvaToRgba,\n parseColor,\n prefersDarkInk,\n sameColor,\n} from './_colorInternals/colorMath';\nimport {\n ColorPickerContext,\n keepingChannels,\n standalone,\n useColorPicker,\n usePicker,\n} from './_colorInternals/pickerState';\nimport { EyeDropperButton } from './_colorInternals/EyeDropperButton';\nimport { Field } from './Field';\nimport { Control } from './Control';\nimport { FormFieldProps } from './fieldProps';\nimport {\n useInsideField,\n useInsideControl,\n rendersOwnField,\n rendersOwnControl,\n useFieldsetDisabled,\n} from './FormContext';\nimport { useAutoLabelledBy } from './useAutoLabelId';\n\nexport type { ColorFormat } from './_colorInternals/colorMath';\n\n/**\n * A preset color for a picker's swatches: a CSS color, or a CSS color with\n * a name. The name labels the swatch for a screen reader and shows as its\n * tooltip; without one, the color as written does.\n */\nexport type ColorPickerSwatch = string | { color: string; label?: string };\n\n/**\n * The strings a color picker says, each with an English default. A key\n * left out, or set to an empty string, keeps its default.\n */\nexport interface ColorPickerLabels {\n /**\n * Names the saturation and brightness square.\n * @defaultValue 'Saturation and brightness'\n */\n area?: string;\n /**\n * What a screen reader calls the square in place of \"slider\".\n * @defaultValue '2D slider'\n */\n areaRoleDescription?: string;\n /**\n * The square's horizontal channel, in its value text.\n * @defaultValue 'Saturation'\n */\n saturation?: string;\n /**\n * The square's vertical channel, in its value text.\n * @defaultValue 'Brightness'\n */\n brightness?: string;\n /**\n * Names the hue slider.\n * @defaultValue 'Hue'\n */\n hue?: string;\n /**\n * Names the alpha slider.\n * @defaultValue 'Alpha'\n */\n alpha?: string;\n /**\n * The unit after the hue's number in its value text, \"171 degrees\".\n * Inside a `LocaleProvider` with a `locale`, that locale writes the number\n * and its unit, and this isn't used.\n * @defaultValue 'degrees'\n */\n degrees?: string;\n /**\n * Names the field that shows the value as text.\n * @defaultValue 'Color value'\n */\n value?: string;\n /**\n * Names the group of swatches.\n * @defaultValue 'Swatches'\n */\n swatches?: string;\n /**\n * Names the eye dropper button.\n * @defaultValue 'Pick a color from the screen'\n */\n eyeDropper?: string;\n /**\n * Names `ColorInput`'s launcher and the panel it opens.\n * @defaultValue 'Choose color'\n */\n chooseColor?: string;\n}\n\n// The theme colors `swatches=\"bulma\"` shows, read off the page.\nconst BULMA_SWATCHES: ReadonlyArray<{ color: string; label: string }> = [\n { color: 'var(--bulma-primary)', label: 'Primary' },\n { color: 'var(--bulma-link)', label: 'Link' },\n { color: 'var(--bulma-info)', label: 'Info' },\n { color: 'var(--bulma-success)', label: 'Success' },\n { color: 'var(--bulma-warning)', label: 'Warning' },\n { color: 'var(--bulma-danger)', label: 'Danger' },\n];\n\nconst clamp = (value: number, low: number, high: number) =>\n Math.min(Math.max(value, low), high);\n\n/** Whether the element is laid out right to left. */\nconst isRtl = (element: Element | null) =>\n !!element && getComputedStyle(element).direction === 'rtl';\n\n/** Where a pointer is across an element, from 0 to 1 each way. */\nconst pointIn = (element: HTMLElement, event: React.PointerEvent) => {\n const rect = element.getBoundingClientRect();\n const across =\n rect.width > 0 ? clamp((event.clientX - rect.left) / rect.width, 0, 1) : 0;\n const down =\n rect.height > 0 ? clamp((event.clientY - rect.top) / rect.height, 0, 1) : 0;\n return { x: isRtl(element) ? 1 - across : across, y: down };\n};\n\n/** The color's red, green and blue, rounded, as a CSS `rgb()` takes them. */\nconst rgbChannels = (color: Hsva) => {\n const { r, g, b } = hsvaToRgba(color);\n return `${Math.round(r)} ${Math.round(g)} ${Math.round(b)}`;\n};\n\n/** Whether a press should start a drag: any touch or pen, a mouse's main button. */\nconst startsDrag = (event: React.PointerEvent) =>\n event.pointerType !== 'mouse' || event.button === 0;\n\n/** Hands a node to a forwarded ref and to one of the part's own. */\nfunction setRefs<T>(\n node: T | null,\n own: React.MutableRefObject<T | null>,\n forwarded: React.ForwardedRef<T>\n) {\n own.current = node;\n if (typeof forwarded === 'function') forwarded(node);\n else if (forwarded) forwarded.current = node;\n}\n\n// ---------------------------------------------------------------------------\n// ColorPicker.Area\n// ---------------------------------------------------------------------------\n\n/**\n * Props for ColorPicker.Area. The helper props, the other attributes and the\n * `ref` land on the square's `<div>`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the square's `<div>`.\n */\nexport interface ColorPickerAreaProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'color'>,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {\n /** Additional CSS classes to apply. */\n className?: string;\n}\n\n/**\n * The saturation and brightness square, operated by pointer or by keyboard as one 2D slider.\n *\n * @function\n * @param {ColorPickerAreaProps} props - Props for ColorPicker.Area.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the square's `<div>`.\n * @returns {JSX.Element | null} The square, or nothing outside a ColorPicker.\n */\nexport const ColorPickerArea = forwardRef<HTMLDivElement, ColorPickerAreaProps>(\n ({ className, style, ...props }, ref) => {\n const picker = usePicker('Area');\n const live = picker ?? standalone;\n const { color, change, end, disabled, labels, touch, percent } = live;\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n const xRef = useRef<HTMLInputElement>(null);\n const yRef = useRef<HTMLInputElement>(null);\n // The axis whose input holds the tab stop: the one focused or moved last.\n const [axis, setAxis] = useState<'x' | 'y'>('x');\n // Once a key has moved the square, both inputs are exposed until focus\n // leaves it, so the one that moved can be read.\n const [keyed, setKeyed] = useState(false);\n const draggingRef = useRef(false);\n\n const areaClass = usePrefixedClassNames('color-area', {\n 'is-disabled': disabled,\n });\n const thumbClass = usePrefixedClassNames('color-area-thumb');\n const inputClass = usePrefixedClassNames('color-area-input');\n\n const s = Math.round(color.s);\n const v = Math.round(color.v);\n const saturationText = `${labels.saturation} ${percent(s)}`;\n const brightnessText = `${labels.brightness} ${percent(v)}`;\n\n const focusAxis = (which: 'x' | 'y') =>\n (which === 'x' ? xRef : yRef).current?.focus({ preventScroll: true });\n // The axis a key moved to, focused once the render that shows its input\n // is on the page, so it's no longer aria-hidden as it takes focus.\n const focusNextRef = useRef<'x' | 'y' | null>(null);\n useClientLayoutEffect(() => {\n if (!focusNextRef.current) return;\n focusAxis(focusNextRef.current);\n focusNextRef.current = null;\n });\n\n const moveTo = (event: React.PointerEvent<HTMLDivElement>) => {\n const { x, y } = pointIn(event.currentTarget, event);\n change({ ...color, s: x * 100, v: (1 - y) * 100 });\n };\n\n const onPointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n if (disabled || !startsDrag(event)) return;\n // No text selection, and focus goes where the square puts it.\n event.preventDefault();\n event.currentTarget.setPointerCapture?.(event.pointerId);\n draggingRef.current = true;\n moveTo(event);\n focusAxis(axis);\n };\n const onPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (draggingRef.current) moveTo(event);\n };\n const endDrag = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!draggingRef.current) return;\n draggingRef.current = false;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n end();\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const by = event.shiftKey ? 10 : 1;\n // The horizontal arrows follow the screen: right to left, saturation\n // grows to the left.\n const right = isRtl(rootRef.current) ? -by : by;\n const moves: Record<string, [number, number]> = {\n ArrowRight: [right, 0],\n ArrowLeft: [-right, 0],\n ArrowUp: [0, by],\n ArrowDown: [0, -by],\n PageUp: [0, 10],\n PageDown: [0, -10],\n Home: [-10, 0],\n End: [10, 0],\n };\n const move = moves[event.key];\n if (!move) return;\n event.preventDefault();\n const [dx, dy] = move;\n change(\n {\n ...color,\n s: clamp(s + dx, 0, 100),\n v: clamp(v + dy, 0, 100),\n },\n true\n );\n const moved = dx !== 0 ? 'x' : 'y';\n setAxis(moved);\n setKeyed(true);\n if (moved !== axis) focusNextRef.current = moved;\n };\n\n // A touch screen reader, or a browser's own stepping, sets an input's\n // value without a key the square handled.\n const onInput =\n (which: 'x' | 'y') => (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = Number(event.target.value);\n change(\n which === 'x' ? { ...color, s: value } : { ...color, v: value },\n true\n );\n };\n\n const onBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const next = event.relatedTarget;\n if (next !== xRef.current && next !== yRef.current) setKeyed(false);\n };\n\n // What both inputs share; each adds its axis, and the handlers.\n const shared = {\n type: 'range',\n className: inputClass,\n min: 0,\n max: 100,\n step: 1,\n disabled,\n 'aria-label': labels.area,\n 'aria-roledescription': labels.areaRoleDescription,\n } as const;\n // The one not holding the tab stop is hidden until a key moves the\n // square, so a screen reader lists one control; both show on touch.\n const tabIndexOf = (which: 'x' | 'y') => (touch || axis === which ? 0 : -1);\n const hiddenOf = (which: 'x' | 'y') =>\n touch || keyed || axis === which ? undefined : true;\n\n if (!picker) return null;\n\n return (\n <div\n ref={node => setRefs(node, rootRef, ref)}\n className={classNames(areaClass, bulmaHelperClasses, className)}\n style={\n {\n ...style,\n '--color-picker-hue': Math.round(color.h),\n '--color-picker-rgb': rgbChannels(color),\n '--color-area-x': `${color.s}%`,\n '--color-area-y': `${100 - color.v}%`,\n } as React.CSSProperties\n }\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n {...rest}\n >\n <div className={thumbClass} role=\"presentation\">\n <input\n ref={xRef}\n {...shared}\n value={s}\n aria-valuetext={`${saturationText}, ${brightnessText}`}\n aria-orientation=\"horizontal\"\n tabIndex={tabIndexOf('x')}\n aria-hidden={hiddenOf('x')}\n onChange={onInput('x')}\n onKeyDown={onKeyDown}\n onFocus={() => setAxis('x')}\n onBlur={onBlur}\n />\n <input\n ref={yRef}\n {...shared}\n value={v}\n aria-valuetext={`${brightnessText}, ${saturationText}`}\n aria-orientation=\"vertical\"\n tabIndex={tabIndexOf('y')}\n aria-hidden={hiddenOf('y')}\n onChange={onInput('y')}\n onKeyDown={onKeyDown}\n onFocus={() => setAxis('y')}\n onBlur={onBlur}\n />\n </div>\n </div>\n );\n }\n);\n\nColorPickerArea.displayName = 'ColorPicker.Area';\n\n// ---------------------------------------------------------------------------\n// ColorPicker.HueSlider and ColorPicker.AlphaSlider\n// ---------------------------------------------------------------------------\n\n/**\n * Props for ColorPicker.HueSlider and ColorPicker.AlphaSlider. The helper\n * props, the other attributes and the `ref` land on the slider's `<div>`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the slider's `<div>`.\n */\nexport interface ColorPickerSliderProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'color'>,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {\n /** Additional CSS classes to apply. */\n className?: string;\n}\n\ninterface ChannelSliderProps extends ColorPickerSliderProps {\n channel: 'hue' | 'alpha';\n}\n\n/** The hue or the alpha slider: a hidden native range under a drawn track. */\nconst ChannelSlider = forwardRef<HTMLDivElement, ChannelSliderProps>(\n ({ channel, className, style, ...props }, ref) => {\n const picker = usePicker(channel === 'hue' ? 'HueSlider' : 'AlphaSlider');\n const live = picker ?? standalone;\n const { color, change, end, disabled, labels, percent, degrees } = live;\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const draggingRef = useRef(false);\n\n const isHue = channel === 'hue';\n const max = isHue ? 360 : 100;\n const value = Math.round(isHue ? color.h : color.a * 100);\n const withValue = (next: number): Hsva =>\n isHue ? { ...color, h: next } : { ...color, a: next / 100 };\n\n const sliderClass = usePrefixedClassNames('color-slider', {\n 'is-hue': isHue,\n 'is-alpha': !isHue,\n 'is-disabled': disabled,\n });\n const trackClass = usePrefixedClassNames('color-slider-track');\n const thumbClass = usePrefixedClassNames('color-slider-thumb');\n const inputClass = usePrefixedClassNames('color-slider-input');\n\n const moveTo = (event: React.PointerEvent<HTMLDivElement>) => {\n const { x } = pointIn(event.currentTarget, event);\n change(withValue(x * max));\n };\n const onPointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n if (disabled || !startsDrag(event)) return;\n event.preventDefault();\n event.currentTarget.setPointerCapture?.(event.pointerId);\n draggingRef.current = true;\n moveTo(event);\n rootRef.current?.querySelector('input')?.focus({ preventScroll: true });\n };\n const onPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (draggingRef.current) moveTo(event);\n };\n const endDrag = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!draggingRef.current) return;\n draggingRef.current = false;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n end();\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const by = event.shiftKey ? 10 : 1;\n const right = isRtl(rootRef.current) ? -by : by;\n const steps: Record<string, number> = {\n ArrowRight: right,\n ArrowLeft: -right,\n ArrowUp: by,\n ArrowDown: -by,\n PageUp: 10,\n PageDown: -10,\n Home: -max,\n End: max,\n };\n const step = steps[event.key];\n if (step === undefined) return;\n event.preventDefault();\n change(withValue(clamp(value + step, 0, max)), true);\n };\n\n if (!picker) return null;\n\n return (\n <div\n ref={node => setRefs(node, rootRef, ref)}\n className={classNames(sliderClass, bulmaHelperClasses, className)}\n style={\n {\n ...style,\n '--color-picker-hue': Math.round(color.h),\n '--color-picker-rgb': rgbChannels(color),\n '--color-slider-position': `${(value / max) * 100}%`,\n } as React.CSSProperties\n }\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n {...rest}\n >\n <div className={trackClass} />\n <div className={thumbClass} role=\"presentation\">\n <input\n type=\"range\"\n className={inputClass}\n min={0}\n max={max}\n step={1}\n value={value}\n disabled={disabled}\n // Spelled out, as the square's is, so Safari's Tab reaches it\n // with its default settings, which skip a range input without\n // one.\n tabIndex={0}\n aria-label={isHue ? labels.hue : labels.alpha}\n aria-valuetext={isHue ? degrees(value) : percent(value)}\n onChange={event =>\n change(withValue(Number(event.target.value)), true)\n }\n onKeyDown={onKeyDown}\n />\n </div>\n </div>\n );\n }\n);\n\nChannelSlider.displayName = 'ChannelSlider';\n\n/**\n * The hue slider, from red round the spectrum and back to red.\n *\n * @function\n * @param {ColorPickerSliderProps} props - Props for ColorPicker.HueSlider.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the slider's `<div>`.\n * @returns {JSX.Element | null} The slider, or nothing outside a ColorPicker.\n */\nexport const ColorPickerHueSlider = forwardRef<\n HTMLDivElement,\n ColorPickerSliderProps\n>((props, ref) => <ChannelSlider ref={ref} {...props} channel=\"hue\" />);\n\nColorPickerHueSlider.displayName = 'ColorPicker.HueSlider';\n\n/**\n * The alpha slider, from see-through to solid.\n *\n * @function\n * @param {ColorPickerSliderProps} props - Props for ColorPicker.AlphaSlider.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the slider's `<div>`.\n * @returns {JSX.Element | null} The slider, or nothing outside a ColorPicker.\n */\nexport const ColorPickerAlphaSlider = forwardRef<\n HTMLDivElement,\n ColorPickerSliderProps\n>((props, ref) => <ChannelSlider ref={ref} {...props} channel=\"alpha\" />);\n\nColorPickerAlphaSlider.displayName = 'ColorPicker.AlphaSlider';\n\n// ---------------------------------------------------------------------------\n// ColorPicker.Swatches\n// ---------------------------------------------------------------------------\n\n/**\n * Props for ColorPicker.Swatches. The helper props, the other attributes and\n * the `ref` land on the group's `<div>`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the group's `<div>`.\n */\nexport interface ColorPickerSwatchesProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'color'>,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {\n /** Additional CSS classes to apply. */\n className?: string;\n /**\n * The colors to offer, in place of the picker's own `swatches`: a list,\n * or `\"bulma\"` for the page's theme colors.\n */\n swatches?: ColorPickerSwatch[] | 'bulma';\n}\n\n/** Arrow keys and how far they move along the swatches. */\nconst SWATCH_STEPS: Record<string, number> = {\n ArrowRight: 1,\n ArrowDown: 1,\n ArrowLeft: -1,\n ArrowUp: -1,\n};\n\n/**\n * The swatches, a radio group of preset colors that sets the picker's color.\n *\n * @function\n * @param {ColorPickerSwatchesProps} props - Props for ColorPicker.Swatches.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the group's `<div>`.\n * @returns {JSX.Element | null} The swatches, or nothing outside a ColorPicker or with none to show.\n */\nexport const ColorPickerSwatches = forwardRef<\n HTMLDivElement,\n ColorPickerSwatchesProps\n>(({ className, swatches: ownSwatches, ...props }, ref) => {\n const picker = usePicker('Swatches');\n const live = picker ?? standalone;\n const { color, change, disabled, labels, format, alpha } = live;\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n const classPrefix = useClassPrefix();\n const groupClass = usePrefixedClassNames('color-picker-swatches');\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n const given = ownSwatches ?? live.swatches;\n const list = useMemo(\n () =>\n (given === 'bulma' ? BULMA_SWATCHES : (given ?? [])).map(entry =>\n typeof entry === 'string' ? { color: entry } : entry\n ),\n [given]\n );\n\n // A color the picker can't read as written, such as a var(), is read off\n // the page, as the text the swatch's own custom property resolves to.\n const chipsRef = useRef<Array<HTMLSpanElement | null>>([]);\n const textOf = useCallback(\n (i: number): string => {\n const chip = chipsRef.current[i];\n if (parseColor(list[i].color) || !chip) return list[i].color;\n return getComputedStyle(chip)\n .getPropertyValue('--color-swatch-color')\n .trim();\n },\n [list]\n );\n // Those texts, read after every render rather than once: a Theme can\n // change the variables behind them while the picker is open, and the\n // chosen swatch has to follow. A read that changes nothing renders\n // nothing more.\n const [resolved, setResolved] = useState<string[]>([]);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- after every render on purpose; the updater keeps the state when nothing changed, so it settles\n useEffect(() => {\n const next = list.map((_, i) => textOf(i));\n // eslint-disable-next-line react-hooks/set-state-in-effect -- a var() color can only be read off the page once its swatch is on it\n setResolved(previous =>\n previous.length === next.length &&\n previous.every((text, i) => text === next[i])\n ? previous\n : next\n );\n });\n\n const colorOf = (i: number) =>\n parseColor(list[i].color) ?? parseColor(resolved[i]);\n // The same color, as far as the picker's value can tell: the same 8-bit\n // color, or the same text, since an HSL value is rounded.\n const shownText = formatColor(color, format, alpha);\n const checked = list.findIndex((_, i) => {\n const swatch = colorOf(i);\n if (!swatch) return false;\n const solid = alpha ? swatch : { ...swatch, a: 1 };\n return (\n sameColor(solid, color) || formatColor(solid, format, alpha) === shownText\n );\n });\n const [focused, setFocused] = useState<number | null>(null);\n const tabStop = focused ?? (checked >= 0 ? checked : 0);\n\n // Read afresh, so a theme that changed since the last render counts.\n const pick = (i: number) => {\n const text = textOf(i);\n const swatch = parseColor(text);\n if (swatch) change(keepingChannels(swatch, color, text), true);\n };\n\n const onKeyDown = (i: number) => (event: React.KeyboardEvent) => {\n const buttons = Array.from(\n (rootRef.current as HTMLDivElement).querySelectorAll<HTMLButtonElement>(\n '[role=\"radio\"]'\n )\n );\n let next: number | undefined;\n if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = buttons.length - 1;\n else if (SWATCH_STEPS[event.key]) {\n // Left and Right follow the screen, so right to left they swap.\n const sideways = event.key === 'ArrowLeft' || event.key === 'ArrowRight';\n const flip = sideways && isRtl(rootRef.current) ? -1 : 1;\n next =\n (i + SWATCH_STEPS[event.key] * flip + buttons.length) % buttons.length;\n }\n if (next === undefined) return;\n event.preventDefault();\n buttons[next]?.focus();\n pick(next);\n };\n\n if (!picker || list.length === 0) return null;\n\n return (\n <div\n ref={node => setRefs(node, rootRef, ref)}\n className={classNames(groupClass, bulmaHelperClasses, className)}\n role=\"radiogroup\"\n aria-label={labels.swatches}\n aria-disabled={disabled || undefined}\n {...rest}\n >\n {list.map((entry, i) => {\n const swatch = colorOf(i);\n const isChecked = i === checked;\n // The check is drawn in black or white with a ring of the other, so\n // it shows on any color. On a see-through swatch the page shows\n // through, so it takes the scheme's text color and background,\n // which follow dark mode, in place of the swatch's own.\n const seeThrough = !!swatch && swatch.a < 1;\n return (\n <button\n key={`${entry.color}-${i}`}\n type=\"button\"\n role=\"radio\"\n aria-checked={isChecked}\n aria-label={entry.label || entry.color}\n title={entry.label}\n tabIndex={i === tabStop ? 0 : -1}\n disabled={disabled}\n className={prefixedClassNames(classPrefix, 'color-picker-swatch', {\n 'is-checked': isChecked,\n 'is-see-through': seeThrough,\n 'is-dark-ink': !!swatch && !seeThrough && prefersDarkInk(swatch),\n })}\n onClick={() => pick(i)}\n onKeyDown={onKeyDown(i)}\n onFocus={() => setFocused(i)}\n onBlur={() => setFocused(null)}\n >\n <ColorSwatch\n ref={node => {\n chipsRef.current[i] = node;\n }}\n color={entry.color}\n aria-hidden=\"true\"\n >\n {isChecked && (\n <CheckIcon\n haloClass={prefixedClassNames(\n classPrefix,\n 'color-picker-check-halo'\n )}\n />\n )}\n </ColorSwatch>\n </button>\n );\n })}\n </div>\n );\n});\n\nColorPickerSwatches.displayName = 'ColorPicker.Swatches';\n\n/**\n * The check on the chosen swatch: a ring in `haloClass`, and the check over\n * it in the current color.\n */\nconst CheckIcon = ({ haloClass }: { haloClass: string }) => (\n <svg viewBox=\"0 0 16 16\" width=\"1em\" height=\"1em\" aria-hidden=\"true\">\n {['halo', 'ink'].map(part => (\n <path\n key={part}\n className={part === 'halo' ? haloClass : undefined}\n d=\"M3.5 8.5l3 3 6-7\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={part === 'halo' ? 4.5 : 2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ))}\n </svg>\n);\n\n// ---------------------------------------------------------------------------\n// ColorPicker.Input\n// ---------------------------------------------------------------------------\n\n/**\n * Props for ColorPicker.Input. The helper props, the other attributes and\n * the `ref` land on the row's `<div>`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the row's `<div>`.\n */\nexport interface ColorPickerInputProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'color'>,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {\n /** Additional CSS classes to apply. */\n className?: string;\n}\n\n/**\n * The value as text you can type in, beside a preview swatch, with the eye dropper when the picker has `eyeDropper`.\n *\n * @function\n * @param {ColorPickerInputProps} props - Props for ColorPicker.Input.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the row's `<div>`.\n * @returns {JSX.Element | null} The row, or nothing outside a ColorPicker.\n */\nexport const ColorPickerInput = forwardRef<\n HTMLDivElement,\n ColorPickerInputProps\n>(({ className, ...props }, ref) => {\n const picker = usePicker('Input');\n const live = picker ?? standalone;\n const { color, text, change, disabled, labels } = live;\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n const rowClass = usePrefixedClassNames('color-picker-value');\n const previewClass = usePrefixedClassNames('color-picker-preview');\n // What's been typed and not yet committed, or null while the field\n // shows the value.\n const [draft, setDraft] = useState<string | null>(null);\n const invalid = draft !== null && !parseColor(draft);\n const inputClass = usePrefixedClassNames('input', {\n 'is-small': true,\n 'is-danger': invalid,\n });\n\n const commit = () => {\n if (draft === null) return;\n const parsed = parseColor(draft);\n setDraft(null);\n if (parsed) change(keepingChannels(parsed, color, draft), true);\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (draft === null) return;\n if (event.key === 'Enter') {\n // Commits rather than submitting a form; an unreadable value stays\n // to be fixed.\n event.preventDefault();\n if (!invalid) commit();\n } else if (event.key === 'Escape') {\n // Puts the value back, and keeps the key from closing a popover too.\n event.preventDefault();\n event.stopPropagation();\n setDraft(null);\n }\n };\n\n if (!picker) return null;\n\n return (\n <div\n ref={ref}\n className={classNames(rowClass, bulmaHelperClasses, className)}\n {...rest}\n >\n <ColorSwatch color={text} className={previewClass} aria-hidden=\"true\" />\n <input\n type=\"text\"\n className={inputClass}\n value={draft ?? text}\n disabled={disabled}\n aria-label={labels.value}\n aria-invalid={invalid || undefined}\n spellCheck={false}\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n onChange={event => setDraft(event.target.value)}\n onKeyDown={onKeyDown}\n onBlur={commit}\n />\n <EyeDropperButton />\n </div>\n );\n});\n\nColorPickerInput.displayName = 'ColorPicker.Input';\n\n// ---------------------------------------------------------------------------\n// ColorPicker (root)\n// ---------------------------------------------------------------------------\n\n/**\n * Props for the ColorPicker component. The helper props, the other\n * attributes and the `ref` land on the picker's `<div>`, inside the `Field`\n * and `Control` it renders when it isn't already in them.\n *\n * Inside an existing `Control` it renders no `Control` of its own. Inside an\n * outer `Field`, or a `Control` with no `Field` around it, it renders no\n * `Field` of its own either. The exception is `label`, `message`,\n * `horizontal` or `fieldClassName` in that bare `Control`: it keeps a\n * `Field` for them, nested in the `.control`, and warns in development.\n * Wrap the `Control` in a `Field` instead, and set the `label`, `horizontal`\n * and class name on that `Field`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the picker's `<div>`.\n * @extraProp {string} [aria-label] - Names the picker's group when there's no `label`.\n */\nexport interface ColorPickerProps\n extends\n Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | 'color' | 'role'\n >,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'>,\n FormFieldProps {\n /** Additional CSS classes to apply. */\n className?: string;\n /** Field label naming the picker's group, through `aria-labelledby`. Dropped inside an outer `Field`, whose own label names it instead. An `aria-label` or `aria-labelledby` you set wins over either. */\n label?: React.ReactNode;\n /** Props for the label element. An explicit `id` here is used as the `aria-labelledby` target instead of a generated one; any `htmlFor` is ignored (a group label names the group, never a single control). */\n labelProps?: React.LabelHTMLAttributes<HTMLLabelElement> & {\n [key: string]: unknown;\n };\n /**\n * The color, controlled: any CSS color the picker reads (hex, `rgb()`,\n * `hsl()` or a color name), in any format, since `onChange` hands back\n * the `format` asked for. One it can't read leaves the picker showing the\n * last color it could. A value it gave you comes back without moving the\n * thumbs, and a gray or black keeps the hue and saturation the user had.\n */\n value?: string;\n /** The color to start with, uncontrolled. Black without one. */\n defaultValue?: string;\n /**\n * Called with the color, in `format`, as it changes: on every step of a\n * drag, and on a key, a swatch, a typed value or the eye dropper.\n */\n onChange?: (value: string) => void;\n /**\n * Called with the color, in `format`, once a change is done: when a drag\n * ends, and with `onChange` for a key, a swatch, a typed value or the eye\n * dropper. The place to save it.\n */\n onChangeEnd?: (value: string) => void;\n /**\n * How the value is written: `'hsl'` (`hsl(171, 100%, 41%)`), Bulma's own\n * color space and what `Theme`'s `primaryH`, `primaryS` and `primaryL`\n * take, `'hex'` (`#00d1b2`) or `'rgb'` (`rgb(0, 209, 178)`). With `alpha`,\n * `hsla()`, `#rrggbbaa` and `rgba()`.\n * @defaultValue 'hsl'\n */\n format?: ColorFormat;\n /**\n * Adds an alpha slider and writes the alpha into the value. Without it,\n * the value is always solid.\n */\n alpha?: boolean;\n /**\n * Preset colors shown as a radio group under the picker: a list of CSS\n * colors, each a string or `{ color, label }`, or `\"bulma\"` for the page's\n * primary, link, info, success, warning and danger, from Bulma's CSS\n * variables, so a themed app shows its own. A color the picker can't read\n * as written, such as a `var()`, is read off the page each time the picker\n * renders, so after a theme change the swatches show the new colors at\n * once and the chosen one is marked again on the picker's next render,\n * which a `Theme` around it causes. The `\"bulma\"` names are English; for\n * others, pass the list yourself, such as\n * `{ color: 'var(--bulma-primary)', label: 'Primär' }`.\n */\n swatches?: ColorPickerSwatch[] | 'bulma';\n /**\n * Adds a button that picks a color from anywhere on the screen, where the\n * browser has the EyeDropper API (desktop Chromium today). Elsewhere, and\n * until the page hydrates, it isn't shown.\n */\n eyeDropper?: boolean;\n /** Disables every part. A disabled `Fieldset` around it does too. */\n disabled?: boolean;\n /** Form field name. When set, a hidden input carries the value. */\n name?: string;\n /** The id of the form the hidden input belongs to. */\n form?: string;\n /** The strings it says, each with an English default. */\n labels?: ColorPickerLabels;\n /**\n * Parts for a layout of your own: `ColorPicker.Area`,\n * `ColorPicker.HueSlider`, `ColorPicker.AlphaSlider`,\n * `ColorPicker.Swatches` and `ColorPicker.Input`, with anything else\n * between them. Without children, the picker shows the square, the hue\n * slider, the alpha slider with `alpha`, the value, and the swatches when\n * there are some.\n */\n children?: React.ReactNode;\n}\n\n/**\n * The `ColorPicker` component is a panel for choosing a color: a saturation and brightness square, a hue slider, and the value as text, with alpha and swatches when asked for.\n *\n * Every part is operable by keyboard, and the square is two native range\n * inputs, one per axis, with one tab stop. The value is a CSS color string\n * in `format`, HSL by default.\n *\n * @function\n * @param {ColorPickerProps} props - Props for the ColorPicker component.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the picker's `<div>`.\n * @returns {JSX.Element} The rendered picker.\n *\n * @example\n * <ColorPicker label=\"Brand color\" defaultValue=\"#1e6b99\" swatches=\"bulma\" />\n */\nconst ColorPickerRoot = forwardRef<HTMLDivElement, ColorPickerProps>(\n (\n {\n className,\n label,\n labelSize,\n labelProps,\n horizontal,\n message,\n messageColor,\n fieldClassName,\n value,\n defaultValue,\n onChange,\n onChangeEnd,\n format = 'hsl',\n alpha = false,\n swatches,\n eyeDropper = false,\n disabled: disabledProp,\n name,\n form,\n labels,\n children,\n ...props\n },\n ref\n ) => {\n const disabled = useFieldsetDisabled(disabledProp);\n const insideField = useInsideField();\n const insideControl = useInsideControl();\n const ownField = rendersOwnField('ColorPicker', {\n insideField,\n insideControl,\n label,\n message,\n horizontal,\n fieldClassName,\n });\n const { ariaLabelledBy, fieldLabelProps } = useAutoLabelledBy({\n label,\n labelProps,\n rendersLabel: ownField,\n callerProps: props,\n });\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n const pickerClass = usePrefixedClassNames('color-picker', {\n 'is-disabled': disabled,\n });\n const helpClass = usePrefixedClassNames('help', {\n [`is-${messageColor}`]: !!messageColor,\n });\n\n const context = useColorPicker({\n value,\n defaultValue,\n onChange,\n onChangeEnd,\n format,\n alpha,\n disabled,\n swatches,\n eyeDropper,\n labels,\n });\n\n const picker = (\n <div\n ref={ref}\n className={classNames(pickerClass, bulmaHelperClasses, className)}\n role=\"group\"\n aria-labelledby={ariaLabelledBy}\n {...rest}\n >\n <ColorPickerContext.Provider value={context}>\n {children ?? (\n <>\n <ColorPickerArea />\n <ColorPickerHueSlider />\n {alpha && <ColorPickerAlphaSlider />}\n <ColorPickerInput />\n {swatches && <ColorPickerSwatches />}\n </>\n )}\n </ColorPickerContext.Provider>\n {name && (\n <input\n type=\"hidden\"\n name={name}\n form={form}\n value={context.text}\n disabled={disabled}\n />\n )}\n </div>\n );\n\n let content: React.ReactNode = picker;\n if (rendersOwnControl('ColorPicker', { insideControl })) {\n content = <Control>{content}</Control>;\n }\n const messageEl = message ? <p className={helpClass}>{message}</p> : null;\n\n if (ownField) {\n return (\n <Field\n label={label}\n labelSize={labelSize}\n labelProps={fieldLabelProps}\n horizontal={horizontal}\n className={fieldClassName}\n >\n {content}\n {messageEl}\n </Field>\n );\n }\n return (\n <>\n {content}\n {messageEl}\n </>\n );\n }\n);\n\nColorPickerRoot.displayName = 'ColorPicker';\n\nexport const ColorPicker = withSubComponents(ColorPickerRoot, {\n Area: ColorPickerArea,\n HueSlider: ColorPickerHueSlider,\n AlphaSlider: ColorPickerAlphaSlider,\n Swatches: ColorPickerSwatches,\n Input: ColorPickerInput,\n});\n\nexport default ColorPicker;\n"],"names":["clamp","_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColorPicker.js","sources":["../../../src/form/ColorPicker.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n classNames,\n prefixedClassNames,\n usePrefixedClassNames,\n} from '../helpers/classNames';\nimport { useClassPrefix } from '../helpers/Config';\nimport { useBulmaClasses, BulmaClassesProps } from '../helpers/useBulmaClasses';\nimport { useClientLayoutEffect } from '../helpers/useClientLayoutEffect';\nimport { withSubComponents } from '../helpers/withSubComponents';\nimport { ColorSwatch } from '../elements/ColorSwatch';\nimport {\n ColorFormat,\n Hsva,\n formatColor,\n hsvaToRgba,\n parseColor,\n prefersDarkInk,\n sameColor,\n} from './_colorInternals/colorMath';\nimport {\n ColorPickerContext,\n keepingChannels,\n standalone,\n useColorPicker,\n usePicker,\n} from './_colorInternals/pickerState';\nimport { EyeDropperButton } from './_colorInternals/EyeDropperButton';\nimport { Field } from './Field';\nimport { Control } from './Control';\nimport { FormFieldProps } from './fieldProps';\nimport {\n useInsideField,\n useInsideControl,\n rendersOwnField,\n rendersOwnControl,\n useFieldsetDisabled,\n} from './FormContext';\nimport { useAutoLabelledBy } from './useAutoLabelId';\n\nexport type { ColorFormat } from './_colorInternals/colorMath';\n\n/**\n * A preset color for a picker's swatches: a CSS color, or a CSS color with\n * a name. The name labels the swatch for a screen reader and shows as its\n * tooltip; without one, the color as written does.\n */\nexport type ColorPickerSwatch = string | { color: string; label?: string };\n\n/**\n * The strings a color picker says, each with an English default. A key\n * left out, or set to an empty string, keeps its default.\n */\nexport interface ColorPickerLabels {\n /**\n * Names the saturation and brightness square.\n * @defaultValue 'Saturation and brightness'\n */\n area?: string;\n /**\n * What a screen reader calls the square in place of \"slider\".\n * @defaultValue '2D slider'\n */\n areaRoleDescription?: string;\n /**\n * The square's horizontal channel, in its value text.\n * @defaultValue 'Saturation'\n */\n saturation?: string;\n /**\n * The square's vertical channel, in its value text.\n * @defaultValue 'Brightness'\n */\n brightness?: string;\n /**\n * Names the hue slider.\n * @defaultValue 'Hue'\n */\n hue?: string;\n /**\n * Names the alpha slider.\n * @defaultValue 'Alpha'\n */\n alpha?: string;\n /**\n * The unit after the hue's number in its value text, \"171 degrees\".\n * Inside a `LocaleProvider` with a `locale`, that locale writes the number\n * and its unit, and this isn't used.\n * @defaultValue 'degrees'\n */\n degrees?: string;\n /**\n * Names the field that shows the value as text.\n * @defaultValue 'Color value'\n */\n value?: string;\n /**\n * Names the group of swatches.\n * @defaultValue 'Swatches'\n */\n swatches?: string;\n /**\n * Names the eye dropper button.\n * @defaultValue 'Pick a color from the screen'\n */\n eyeDropper?: string;\n /**\n * Names `ColorInput`'s launcher and the panel it opens.\n * @defaultValue 'Choose color'\n */\n chooseColor?: string;\n}\n\n// The theme colors `swatches=\"bulma\"` shows, read off the page.\nconst BULMA_SWATCHES: ReadonlyArray<{ color: string; label: string }> = [\n { color: 'var(--bulma-primary)', label: 'Primary' },\n { color: 'var(--bulma-link)', label: 'Link' },\n { color: 'var(--bulma-info)', label: 'Info' },\n { color: 'var(--bulma-success)', label: 'Success' },\n { color: 'var(--bulma-warning)', label: 'Warning' },\n { color: 'var(--bulma-danger)', label: 'Danger' },\n];\n\nconst clamp = (value: number, low: number, high: number) =>\n Math.min(Math.max(value, low), high);\n\n/** Whether the element is laid out right to left. */\nconst isRtl = (element: Element | null) =>\n !!element && getComputedStyle(element).direction === 'rtl';\n\n/** Where a pointer is across an element, from 0 to 1 each way. */\nconst pointIn = (element: HTMLElement, event: React.PointerEvent) => {\n const rect = element.getBoundingClientRect();\n const across =\n rect.width > 0 ? clamp((event.clientX - rect.left) / rect.width, 0, 1) : 0;\n const down =\n rect.height > 0 ? clamp((event.clientY - rect.top) / rect.height, 0, 1) : 0;\n return { x: isRtl(element) ? 1 - across : across, y: down };\n};\n\n/** The color's red, green and blue, rounded, as a CSS `rgb()` takes them. */\nconst rgbChannels = (color: Hsva) => {\n const { r, g, b } = hsvaToRgba(color);\n return `${Math.round(r)} ${Math.round(g)} ${Math.round(b)}`;\n};\n\n/** Whether a press should start a drag: any touch or pen, a mouse's main button. */\nconst startsDrag = (event: React.PointerEvent) =>\n event.pointerType !== 'mouse' || event.button === 0;\n\n/** Hands a node to a forwarded ref and to one of the part's own. */\nfunction setRefs<T>(\n node: T | null,\n own: React.MutableRefObject<T | null>,\n forwarded: React.ForwardedRef<T>\n) {\n own.current = node;\n if (typeof forwarded === 'function') forwarded(node);\n else if (forwarded) forwarded.current = node;\n}\n\n// ---------------------------------------------------------------------------\n// ColorPicker.Area\n// ---------------------------------------------------------------------------\n\n/**\n * Props for ColorPicker.Area. The helper props, the other attributes and the\n * `ref` land on the square's `<div>`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the square's `<div>`.\n */\nexport interface ColorPickerAreaProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'color'>,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {\n /** Additional CSS classes to apply. */\n className?: string;\n}\n\n/**\n * The saturation and brightness square, operated by pointer or by keyboard as one 2D slider.\n *\n * @function\n * @param {ColorPickerAreaProps} props - Props for ColorPicker.Area.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the square's `<div>`.\n * @returns {JSX.Element | null} The square, or nothing outside a ColorPicker.\n */\nexport const ColorPickerArea = forwardRef<HTMLDivElement, ColorPickerAreaProps>(\n ({ className, style, ...props }, ref) => {\n const picker = usePicker('Area');\n const live = picker ?? standalone;\n const { color, change, end, disabled, labels, touch, percent } = live;\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n const xRef = useRef<HTMLInputElement>(null);\n const yRef = useRef<HTMLInputElement>(null);\n // The axis whose input holds the tab stop: the one focused or moved last.\n const [axis, setAxis] = useState<'x' | 'y'>('x');\n // Once a key has moved the square, both inputs are exposed until focus\n // leaves it, so the one that moved can be read.\n const [keyed, setKeyed] = useState(false);\n const draggingRef = useRef(false);\n\n const areaClass = usePrefixedClassNames('color-area', {\n 'is-disabled': disabled,\n });\n const thumbClass = usePrefixedClassNames('color-area-thumb');\n const inputClass = usePrefixedClassNames('color-area-input');\n\n const s = Math.round(color.s);\n const v = Math.round(color.v);\n const saturationText = `${labels.saturation} ${percent(s)}`;\n const brightnessText = `${labels.brightness} ${percent(v)}`;\n\n const focusAxis = (which: 'x' | 'y') =>\n (which === 'x' ? xRef : yRef).current?.focus({ preventScroll: true });\n // The axis a key moved to, focused once the render that shows its input\n // is on the page, so it's no longer aria-hidden as it takes focus.\n const focusNextRef = useRef<'x' | 'y' | null>(null);\n useClientLayoutEffect(() => {\n if (!focusNextRef.current) return;\n focusAxis(focusNextRef.current);\n focusNextRef.current = null;\n });\n\n const moveTo = (event: React.PointerEvent<HTMLDivElement>) => {\n const { x, y } = pointIn(event.currentTarget, event);\n change({ ...color, s: x * 100, v: (1 - y) * 100 });\n };\n\n const onPointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n if (disabled || !startsDrag(event)) return;\n // No text selection, and focus goes where the square puts it.\n event.preventDefault();\n event.currentTarget.setPointerCapture?.(event.pointerId);\n draggingRef.current = true;\n moveTo(event);\n focusAxis(axis);\n };\n const onPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (draggingRef.current) moveTo(event);\n };\n const endDrag = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!draggingRef.current) return;\n draggingRef.current = false;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n end();\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const by = event.shiftKey ? 10 : 1;\n // The horizontal arrows follow the screen: right to left, saturation\n // grows to the left.\n const right = isRtl(rootRef.current) ? -by : by;\n const moves: Record<string, [number, number]> = {\n ArrowRight: [right, 0],\n ArrowLeft: [-right, 0],\n ArrowUp: [0, by],\n ArrowDown: [0, -by],\n PageUp: [0, 10],\n PageDown: [0, -10],\n Home: [-10, 0],\n End: [10, 0],\n };\n const move = moves[event.key];\n if (!move) return;\n event.preventDefault();\n const [dx, dy] = move;\n change(\n {\n ...color,\n s: clamp(s + dx, 0, 100),\n v: clamp(v + dy, 0, 100),\n },\n true\n );\n const moved = dx !== 0 ? 'x' : 'y';\n setAxis(moved);\n setKeyed(true);\n if (moved !== axis) focusNextRef.current = moved;\n };\n\n // A touch screen reader, or a browser's own stepping, sets an input's\n // value without a key the square handled.\n const onInput =\n (which: 'x' | 'y') => (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = Number(event.target.value);\n change(\n which === 'x' ? { ...color, s: value } : { ...color, v: value },\n true\n );\n };\n\n const onBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const next = event.relatedTarget;\n if (next !== xRef.current && next !== yRef.current) setKeyed(false);\n };\n\n // What both inputs share; each adds its axis, and the handlers.\n const shared = {\n type: 'range',\n className: inputClass,\n min: 0,\n max: 100,\n step: 1,\n disabled,\n 'aria-label': labels.area,\n 'aria-roledescription': labels.areaRoleDescription,\n } as const;\n // The one not holding the tab stop is hidden until a key moves the\n // square, so a screen reader lists one control; both show on touch.\n const tabIndexOf = (which: 'x' | 'y') => (touch || axis === which ? 0 : -1);\n const hiddenOf = (which: 'x' | 'y') =>\n touch || keyed || axis === which ? undefined : true;\n\n if (!picker) return null;\n\n return (\n <div\n ref={node => setRefs(node, rootRef, ref)}\n className={classNames(areaClass, bulmaHelperClasses, className)}\n style={\n {\n ...style,\n '--color-picker-hue': Math.round(color.h),\n '--color-picker-rgb': rgbChannels(color),\n '--color-area-x': `${color.s}%`,\n '--color-area-y': `${100 - color.v}%`,\n } as React.CSSProperties\n }\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n {...rest}\n >\n <div className={thumbClass} role=\"presentation\">\n <input\n ref={xRef}\n {...shared}\n value={s}\n aria-valuetext={`${saturationText}, ${brightnessText}`}\n aria-orientation=\"horizontal\"\n tabIndex={tabIndexOf('x')}\n aria-hidden={hiddenOf('x')}\n onChange={onInput('x')}\n onKeyDown={onKeyDown}\n onFocus={() => setAxis('x')}\n onBlur={onBlur}\n />\n <input\n ref={yRef}\n {...shared}\n value={v}\n aria-valuetext={`${brightnessText}, ${saturationText}`}\n aria-orientation=\"vertical\"\n tabIndex={tabIndexOf('y')}\n aria-hidden={hiddenOf('y')}\n onChange={onInput('y')}\n onKeyDown={onKeyDown}\n onFocus={() => setAxis('y')}\n onBlur={onBlur}\n />\n </div>\n </div>\n );\n }\n);\n\nColorPickerArea.displayName = 'ColorPicker.Area';\n\n// ---------------------------------------------------------------------------\n// ColorPicker.HueSlider and ColorPicker.AlphaSlider\n// ---------------------------------------------------------------------------\n\n/**\n * Props for ColorPicker.HueSlider and ColorPicker.AlphaSlider. The helper\n * props, the other attributes and the `ref` land on the slider's `<div>`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the slider's `<div>`.\n */\nexport interface ColorPickerSliderProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'color'>,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {\n /** Additional CSS classes to apply. */\n className?: string;\n}\n\ninterface ChannelSliderProps extends ColorPickerSliderProps {\n channel: 'hue' | 'alpha';\n}\n\n/** The hue or the alpha slider: a hidden native range under a drawn track. */\nconst ChannelSlider = forwardRef<HTMLDivElement, ChannelSliderProps>(\n ({ channel, className, style, ...props }, ref) => {\n const picker = usePicker(channel === 'hue' ? 'HueSlider' : 'AlphaSlider');\n const live = picker ?? standalone;\n const { color, change, end, disabled, labels, percent, degrees } = live;\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const draggingRef = useRef(false);\n\n const isHue = channel === 'hue';\n const max = isHue ? 360 : 100;\n const value = Math.round(isHue ? color.h : color.a * 100);\n const withValue = (next: number): Hsva =>\n isHue ? { ...color, h: next } : { ...color, a: next / 100 };\n\n const sliderClass = usePrefixedClassNames('color-slider', {\n 'is-hue': isHue,\n 'is-alpha': !isHue,\n 'is-disabled': disabled,\n });\n const trackClass = usePrefixedClassNames('color-slider-track');\n const thumbClass = usePrefixedClassNames('color-slider-thumb');\n const inputClass = usePrefixedClassNames('color-slider-input');\n\n const moveTo = (event: React.PointerEvent<HTMLDivElement>) => {\n const { x } = pointIn(event.currentTarget, event);\n change(withValue(x * max));\n };\n const onPointerDown = (event: React.PointerEvent<HTMLDivElement>) => {\n if (disabled || !startsDrag(event)) return;\n event.preventDefault();\n event.currentTarget.setPointerCapture?.(event.pointerId);\n draggingRef.current = true;\n moveTo(event);\n rootRef.current?.querySelector('input')?.focus({ preventScroll: true });\n };\n const onPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (draggingRef.current) moveTo(event);\n };\n const endDrag = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!draggingRef.current) return;\n draggingRef.current = false;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n end();\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const by = event.shiftKey ? 10 : 1;\n const right = isRtl(rootRef.current) ? -by : by;\n const steps: Record<string, number> = {\n ArrowRight: right,\n ArrowLeft: -right,\n ArrowUp: by,\n ArrowDown: -by,\n PageUp: 10,\n PageDown: -10,\n Home: -max,\n End: max,\n };\n const step = steps[event.key];\n if (step === undefined) return;\n event.preventDefault();\n change(withValue(clamp(value + step, 0, max)), true);\n };\n\n if (!picker) return null;\n\n return (\n <div\n ref={node => setRefs(node, rootRef, ref)}\n className={classNames(sliderClass, bulmaHelperClasses, className)}\n style={\n {\n ...style,\n '--color-picker-hue': Math.round(color.h),\n '--color-picker-rgb': rgbChannels(color),\n '--color-slider-position': `${(value / max) * 100}%`,\n } as React.CSSProperties\n }\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n {...rest}\n >\n <div className={trackClass} />\n <div className={thumbClass} role=\"presentation\">\n <input\n type=\"range\"\n className={inputClass}\n min={0}\n max={max}\n step={1}\n value={value}\n disabled={disabled}\n // Spelled out, as the square's is, so Safari's Tab reaches it\n // with its default settings, which skip a range input without\n // one.\n tabIndex={0}\n aria-label={isHue ? labels.hue : labels.alpha}\n aria-valuetext={isHue ? degrees(value) : percent(value)}\n onChange={event =>\n change(withValue(Number(event.target.value)), true)\n }\n onKeyDown={onKeyDown}\n />\n </div>\n </div>\n );\n }\n);\n\nChannelSlider.displayName = 'ChannelSlider';\n\n/**\n * The hue slider, from red round the spectrum and back to red.\n *\n * @function\n * @param {ColorPickerSliderProps} props - Props for ColorPicker.HueSlider.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the slider's `<div>`.\n * @returns {JSX.Element | null} The slider, or nothing outside a ColorPicker.\n */\nexport const ColorPickerHueSlider = forwardRef<\n HTMLDivElement,\n ColorPickerSliderProps\n>((props, ref) => <ChannelSlider ref={ref} {...props} channel=\"hue\" />);\n\nColorPickerHueSlider.displayName = 'ColorPicker.HueSlider';\n\n/**\n * The alpha slider, from see-through to solid.\n *\n * @function\n * @param {ColorPickerSliderProps} props - Props for ColorPicker.AlphaSlider.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the slider's `<div>`.\n * @returns {JSX.Element | null} The slider, or nothing outside a ColorPicker.\n */\nexport const ColorPickerAlphaSlider = forwardRef<\n HTMLDivElement,\n ColorPickerSliderProps\n>((props, ref) => <ChannelSlider ref={ref} {...props} channel=\"alpha\" />);\n\nColorPickerAlphaSlider.displayName = 'ColorPicker.AlphaSlider';\n\n// ---------------------------------------------------------------------------\n// ColorPicker.Swatches\n// ---------------------------------------------------------------------------\n\n/**\n * Props for ColorPicker.Swatches. The helper props, the other attributes and\n * the `ref` land on the group's `<div>`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the group's `<div>`.\n */\nexport interface ColorPickerSwatchesProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'color'>,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {\n /** Additional CSS classes to apply. */\n className?: string;\n /**\n * The colors to offer, in place of the picker's own `swatches`: a list,\n * or `\"bulma\"` for the page's theme colors.\n */\n swatches?: ColorPickerSwatch[] | 'bulma';\n}\n\n/** Arrow keys and how far they move along the swatches. */\nconst SWATCH_STEPS: Record<string, number> = {\n ArrowRight: 1,\n ArrowDown: 1,\n ArrowLeft: -1,\n ArrowUp: -1,\n};\n\n/**\n * The swatches, a radio group of preset colors that sets the picker's color.\n *\n * @function\n * @param {ColorPickerSwatchesProps} props - Props for ColorPicker.Swatches.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the group's `<div>`.\n * @returns {JSX.Element | null} The swatches, or nothing outside a ColorPicker or with none to show.\n */\nexport const ColorPickerSwatches = forwardRef<\n HTMLDivElement,\n ColorPickerSwatchesProps\n>(({ className, swatches: ownSwatches, ...props }, ref) => {\n const picker = usePicker('Swatches');\n const live = picker ?? standalone;\n const { color, change, disabled, labels, format, alpha } = live;\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n const classPrefix = useClassPrefix();\n const groupClass = usePrefixedClassNames('color-picker-swatches');\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n const given = ownSwatches ?? live.swatches;\n const list = useMemo(\n () =>\n (given === 'bulma' ? BULMA_SWATCHES : (given ?? [])).map(entry =>\n typeof entry === 'string' ? { color: entry } : entry\n ),\n [given]\n );\n\n // A color the picker can't read as written, such as a var(), is read off\n // the page, as the text the swatch's own custom property resolves to.\n const chipsRef = useRef<Array<HTMLSpanElement | null>>([]);\n const textOf = useCallback(\n (i: number): string => {\n const chip = chipsRef.current[i];\n if (parseColor(list[i].color) || !chip) return list[i].color;\n return getComputedStyle(chip)\n .getPropertyValue('--color-swatch-color')\n .trim();\n },\n [list]\n );\n // Those texts, read after every render rather than once: a Theme can\n // change the variables behind them while the picker is open, and the\n // chosen swatch has to follow. A read that changes nothing renders\n // nothing more.\n const [resolved, setResolved] = useState<string[]>([]);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- after every render on purpose; the updater keeps the state when nothing changed, so it settles\n useEffect(() => {\n const next = list.map((_, i) => textOf(i));\n // eslint-disable-next-line react-hooks/set-state-in-effect -- a var() color can only be read off the page once its swatch is on it\n setResolved(previous =>\n previous.length === next.length &&\n previous.every((text, i) => text === next[i])\n ? previous\n : next\n );\n });\n\n const colorOf = (i: number) =>\n parseColor(list[i].color) ?? parseColor(resolved[i]);\n // The same color, as far as the picker's value can tell: the same 8-bit\n // color, or the same text, since an HSL value is rounded.\n const shownText = formatColor(color, format, alpha);\n const checked = list.findIndex((_, i) => {\n const swatch = colorOf(i);\n if (!swatch) return false;\n const solid = alpha ? swatch : { ...swatch, a: 1 };\n return (\n sameColor(solid, color) || formatColor(solid, format, alpha) === shownText\n );\n });\n const [focused, setFocused] = useState<number | null>(null);\n const tabStop = focused ?? (checked >= 0 ? checked : 0);\n\n // Read afresh, so a theme that changed since the last render counts.\n const pick = (i: number) => {\n const text = textOf(i);\n const swatch = parseColor(text);\n if (swatch) change(keepingChannels(swatch, color, text), true);\n };\n\n const onKeyDown = (i: number) => (event: React.KeyboardEvent) => {\n const buttons = Array.from(\n (rootRef.current as HTMLDivElement).querySelectorAll<HTMLButtonElement>(\n '[role=\"radio\"]'\n )\n );\n let next: number | undefined;\n if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = buttons.length - 1;\n else if (SWATCH_STEPS[event.key]) {\n // Left and Right follow the screen, so right to left they swap.\n const sideways = event.key === 'ArrowLeft' || event.key === 'ArrowRight';\n const flip = sideways && isRtl(rootRef.current) ? -1 : 1;\n next =\n (i + SWATCH_STEPS[event.key] * flip + buttons.length) % buttons.length;\n }\n if (next === undefined) return;\n event.preventDefault();\n buttons[next]?.focus();\n pick(next);\n };\n\n if (!picker || list.length === 0) return null;\n\n return (\n <div\n ref={node => setRefs(node, rootRef, ref)}\n className={classNames(groupClass, bulmaHelperClasses, className)}\n role=\"radiogroup\"\n aria-label={labels.swatches}\n aria-disabled={disabled || undefined}\n {...rest}\n >\n {list.map((entry, i) => {\n const swatch = colorOf(i);\n const isChecked = i === checked;\n // The check is drawn in black or white with a ring of the other, so\n // it shows on any color. On a see-through swatch the page shows\n // through, so it takes the scheme's text color and background,\n // which follow dark mode, in place of the swatch's own.\n const seeThrough = !!swatch && swatch.a < 1;\n return (\n <button\n key={`${entry.color}-${i}`}\n type=\"button\"\n role=\"radio\"\n aria-checked={isChecked}\n aria-label={entry.label || entry.color}\n title={entry.label}\n tabIndex={i === tabStop ? 0 : -1}\n disabled={disabled}\n className={prefixedClassNames(classPrefix, 'color-picker-swatch', {\n 'is-checked': isChecked,\n 'is-see-through': seeThrough,\n 'is-dark-ink': !!swatch && !seeThrough && prefersDarkInk(swatch),\n })}\n onClick={() => pick(i)}\n onKeyDown={onKeyDown(i)}\n onFocus={() => setFocused(i)}\n onBlur={() => setFocused(null)}\n >\n <ColorSwatch\n ref={node => {\n chipsRef.current[i] = node;\n }}\n color={entry.color}\n aria-hidden=\"true\"\n >\n {isChecked && (\n <CheckIcon\n haloClass={prefixedClassNames(\n classPrefix,\n 'color-picker-check-halo'\n )}\n />\n )}\n </ColorSwatch>\n </button>\n );\n })}\n </div>\n );\n});\n\nColorPickerSwatches.displayName = 'ColorPicker.Swatches';\n\n/**\n * The check on the chosen swatch: a ring in `haloClass`, and the check over\n * it in the current color.\n */\nconst CheckIcon = ({ haloClass }: { haloClass: string }) => (\n <svg viewBox=\"0 0 16 16\" width=\"1em\" height=\"1em\" aria-hidden=\"true\">\n {['halo', 'ink'].map(part => (\n <path\n key={part}\n className={part === 'halo' ? haloClass : undefined}\n d=\"M3.5 8.5l3 3 6-7\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={part === 'halo' ? 4.5 : 2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ))}\n </svg>\n);\n\n// ---------------------------------------------------------------------------\n// ColorPicker.Input\n// ---------------------------------------------------------------------------\n\n/**\n * Props for ColorPicker.Input. The helper props, the other attributes and\n * the `ref` land on the row's `<div>`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the row's `<div>`.\n */\nexport interface ColorPickerInputProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'color'>,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {\n /** Additional CSS classes to apply. */\n className?: string;\n}\n\n/**\n * The value as text you can type in, beside a preview swatch, with the eye dropper when the picker has `eyeDropper`.\n *\n * @function\n * @param {ColorPickerInputProps} props - Props for ColorPicker.Input.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the row's `<div>`.\n * @returns {JSX.Element | null} The row, or nothing outside a ColorPicker.\n */\nexport const ColorPickerInput = forwardRef<\n HTMLDivElement,\n ColorPickerInputProps\n>(({ className, ...props }, ref) => {\n const picker = usePicker('Input');\n const live = picker ?? standalone;\n const { color, text, change, disabled, labels } = live;\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n const rowClass = usePrefixedClassNames('color-picker-value');\n const previewClass = usePrefixedClassNames('color-picker-preview');\n // What's been typed and not yet committed, or null while the field\n // shows the value.\n const [draft, setDraft] = useState<string | null>(null);\n const invalid = draft !== null && !parseColor(draft);\n const inputClass = usePrefixedClassNames('input', {\n 'is-small': true,\n 'is-danger': invalid,\n });\n\n const commit = () => {\n if (draft === null) return;\n const parsed = parseColor(draft);\n setDraft(null);\n if (parsed) change(keepingChannels(parsed, color, draft), true);\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (draft === null) return;\n if (event.key === 'Enter') {\n // Commits rather than submitting a form; an unreadable value stays\n // to be fixed.\n event.preventDefault();\n if (!invalid) commit();\n } else if (event.key === 'Escape') {\n // Puts the value back, and keeps the key from closing a popover too.\n event.preventDefault();\n event.stopPropagation();\n setDraft(null);\n }\n };\n\n if (!picker) return null;\n\n return (\n <div\n ref={ref}\n className={classNames(rowClass, bulmaHelperClasses, className)}\n {...rest}\n >\n <ColorSwatch color={text} className={previewClass} aria-hidden=\"true\" />\n <input\n type=\"text\"\n className={inputClass}\n value={draft ?? text}\n disabled={disabled}\n aria-label={labels.value}\n aria-invalid={invalid || undefined}\n spellCheck={false}\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n onChange={event => setDraft(event.target.value)}\n onKeyDown={onKeyDown}\n onBlur={commit}\n />\n <EyeDropperButton />\n </div>\n );\n});\n\nColorPickerInput.displayName = 'ColorPicker.Input';\n\n// ---------------------------------------------------------------------------\n// ColorPicker (root)\n// ---------------------------------------------------------------------------\n\n/**\n * Props for the ColorPicker component. The helper props, the other\n * attributes and the `ref` land on the picker's `<div>`, inside the `Field`\n * and `Control` it renders when it isn't already in them.\n *\n * Inside an existing `Control` it renders no `Control` of its own. Inside an\n * outer `Field`, or a `Control` with no `Field` around it, it renders no\n * `Field` of its own either. The exception is `label`, `message`,\n * `horizontal` or `fieldClassName` in that bare `Control`: it keeps a\n * `Field` for them, nested in the `.control`, and warns in development.\n * Wrap the `Control` in a `Field` instead, and set the `label`, `horizontal`\n * and class name on that `Field`.\n *\n * @extraProp {React.Ref<HTMLDivElement>} [ref] - Ref forwarded to the picker's `<div>`.\n * @extraProp {string} [aria-label] - Names the picker's group when there's no `label`.\n */\nexport interface ColorPickerProps\n extends\n Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | 'color' | 'role'\n >,\n Omit<BulmaClassesProps, 'color' | 'backgroundColor'>,\n FormFieldProps {\n /** Additional CSS classes to apply. */\n className?: string;\n /** Field label naming the picker's group, through `aria-labelledby`. Dropped inside an outer `Field`, whose own label names it instead. An `aria-label` or `aria-labelledby` you set wins over either. */\n label?: React.ReactNode;\n /** Props for the label element. An explicit `id` here is used as the `aria-labelledby` target instead of a generated one; any `htmlFor` is ignored (a group label names the group, never a single control). */\n labelProps?: React.LabelHTMLAttributes<HTMLLabelElement> & {\n [key: string]: unknown;\n };\n /**\n * The color, controlled: any CSS color the picker reads (hex, `rgb()`,\n * `hsl()` or a color name), in any format, since `onChange` hands back\n * the `format` asked for. One it can't read leaves the picker showing the\n * last color it could. A value it gave you comes back without moving the\n * thumbs, and a gray or black keeps the hue and saturation the user had.\n */\n value?: string;\n /** The color to start with, uncontrolled. Black without one. */\n defaultValue?: string;\n /**\n * Called with the color, in `format`, as it changes: on every step of a\n * drag, and on a key, a swatch, a typed value or the eye dropper.\n */\n onChange?: (value: string) => void;\n /**\n * Called with the color, in `format`, once a change is done: when a drag\n * ends, and with `onChange` for a key, a swatch, a typed value or the eye\n * dropper. The place to save it.\n */\n onChangeEnd?: (value: string) => void;\n /**\n * How the value is written: `'hsl'` (`hsl(171, 100%, 41%)`), Bulma's own\n * color space and what `Theme`'s `primaryH`, `primaryS` and `primaryL`\n * take, `'hex'` (`#00d1b2`) or `'rgb'` (`rgb(0, 209, 178)`). With `alpha`,\n * `hsla()`, `#rrggbbaa` and `rgba()`.\n * @defaultValue 'hsl'\n */\n format?: ColorFormat;\n /**\n * Adds an alpha slider and writes the alpha into the value. Without it,\n * the value is always solid.\n */\n alpha?: boolean;\n /**\n * Preset colors shown as a radio group under the picker: a list of CSS\n * colors, each a string or `{ color, label }`, or `\"bulma\"` for the page's\n * primary, link, info, success, warning and danger, from Bulma's CSS\n * variables, so a themed app shows its own. A color the picker can't read\n * as written, such as a `var()`, is read off the page each time the picker\n * renders, so after a theme change the swatches show the new colors at\n * once and the chosen one is marked again on the picker's next render,\n * which a `Theme` around it causes. The `\"bulma\"` names are English; for\n * others, pass the list yourself, such as\n * `{ color: 'var(--bulma-primary)', label: 'Primär' }`.\n */\n swatches?: ColorPickerSwatch[] | 'bulma';\n /**\n * Adds a button that picks a color from anywhere on the screen, where the\n * browser has the EyeDropper API (desktop Chromium today). Elsewhere, and\n * until the page hydrates, it isn't shown.\n */\n eyeDropper?: boolean;\n /** Disables every part. A disabled `Fieldset` around it does too. */\n disabled?: boolean;\n /** Form field name. When set, a hidden input carries the value. */\n name?: string;\n /** The id of the form the hidden input belongs to. */\n form?: string;\n /** The strings it says, each with an English default. */\n labels?: ColorPickerLabels;\n /**\n * Parts for a layout of your own: `ColorPicker.Area`,\n * `ColorPicker.HueSlider`, `ColorPicker.AlphaSlider`,\n * `ColorPicker.Swatches` and `ColorPicker.Input`, with anything else\n * between them. Without children, the picker shows the square, the hue\n * slider, the alpha slider with `alpha`, the value, and the swatches when\n * there are some.\n */\n children?: React.ReactNode;\n}\n\n/**\n * The `ColorPicker` component is a panel for choosing a color: a saturation and brightness square, a hue slider, and the value as text, with alpha and swatches when asked for.\n *\n * Every part is operable by keyboard, and the square is two native range\n * inputs, one per axis, with one tab stop. The value is a CSS color string\n * in `format`, HSL by default.\n *\n * @function\n * @param {ColorPickerProps} props - Props for the ColorPicker component.\n * @param {React.Ref<HTMLDivElement>} ref - Forwarded ref to the picker's `<div>`.\n * @returns {JSX.Element} The rendered picker.\n *\n * @example\n * <ColorPicker label=\"Brand color\" defaultValue=\"#1e6b99\" swatches=\"bulma\" />\n */\nconst ColorPickerRoot = forwardRef<HTMLDivElement, ColorPickerProps>(\n (\n {\n className,\n label,\n labelSize,\n labelProps,\n horizontal,\n message,\n messageColor,\n fieldClassName,\n value,\n defaultValue,\n onChange,\n onChangeEnd,\n format = 'hsl',\n alpha = false,\n swatches,\n eyeDropper = false,\n disabled: disabledProp,\n name,\n form,\n labels,\n children,\n ...props\n },\n ref\n ) => {\n const disabled = useFieldsetDisabled(disabledProp);\n const insideField = useInsideField();\n const insideControl = useInsideControl();\n const ownField = rendersOwnField('ColorPicker', {\n insideField,\n insideControl,\n label,\n message,\n horizontal,\n fieldClassName,\n });\n const { ariaLabelledBy, fieldLabelProps } = useAutoLabelledBy({\n label,\n labelProps,\n rendersLabel: ownField,\n callerProps: props,\n });\n const { bulmaHelperClasses, rest } = useBulmaClasses(props);\n const pickerClass = usePrefixedClassNames('color-picker', {\n 'is-disabled': disabled,\n });\n const helpClass = usePrefixedClassNames('help', {\n [`is-${messageColor}`]: !!messageColor,\n });\n\n const context = useColorPicker({\n value,\n defaultValue,\n onChange,\n onChangeEnd,\n format,\n alpha,\n disabled,\n swatches,\n eyeDropper,\n labels,\n });\n\n const picker = (\n <div\n ref={ref}\n className={classNames(pickerClass, bulmaHelperClasses, className)}\n role=\"group\"\n aria-labelledby={ariaLabelledBy}\n {...rest}\n >\n <ColorPickerContext.Provider value={context}>\n {children ?? (\n <>\n <ColorPickerArea />\n <ColorPickerHueSlider />\n {alpha && <ColorPickerAlphaSlider />}\n <ColorPickerInput />\n {swatches && <ColorPickerSwatches />}\n </>\n )}\n </ColorPickerContext.Provider>\n {name && (\n <input\n type=\"hidden\"\n name={name}\n form={form}\n value={context.text}\n disabled={disabled}\n />\n )}\n </div>\n );\n\n let content: React.ReactNode = picker;\n if (rendersOwnControl('ColorPicker', { insideControl })) {\n content = <Control>{content}</Control>;\n }\n const messageEl = message ? <p className={helpClass}>{message}</p> : null;\n\n if (ownField) {\n return (\n <Field\n label={label}\n labelSize={labelSize}\n labelProps={fieldLabelProps}\n horizontal={horizontal}\n className={fieldClassName}\n >\n {content}\n {messageEl}\n </Field>\n );\n }\n return (\n <>\n {content}\n {messageEl}\n </>\n );\n }\n);\n\nColorPickerRoot.displayName = 'ColorPicker';\n\nexport const ColorPicker = withSubComponents(ColorPickerRoot, {\n Area: ColorPickerArea,\n HueSlider: ColorPickerHueSlider,\n AlphaSlider: ColorPickerAlphaSlider,\n Swatches: ColorPickerSwatches,\n Input: ColorPickerInput,\n});\n\nexport default ColorPicker;\n"],"names":["clamp","setRefs","_jsx","_jsxs","_Fragment"],"mappings":"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"}
|