@k2b/ui 0.41.0 → 0.43.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.
Files changed (74) hide show
  1. package/dist/base.css +22 -0
  2. package/dist/browser/actions/Dropdown.js +220 -110
  3. package/dist/browser/actions/Dropdown.js.map +1 -1
  4. package/dist/browser/actions/index.js.map +1 -1
  5. package/dist/browser/actions/menu-search.js +166 -0
  6. package/dist/browser/actions/menu-search.js.map +1 -0
  7. package/dist/browser/actions/menu-sheet.js +107 -13
  8. package/dist/browser/actions/menu-sheet.js.map +1 -1
  9. package/dist/browser/content/CalendarWeekView.js +13 -1
  10. package/dist/browser/content/CalendarWeekView.js.map +1 -1
  11. package/dist/browser/content/CountryMap.js +241 -0
  12. package/dist/browser/content/CountryMap.js.map +1 -0
  13. package/dist/browser/content/world-countries.js +9 -0
  14. package/dist/browser/content/world-countries.js.map +1 -0
  15. package/dist/browser/country-map.js +3 -0
  16. package/dist/browser/country-map.js.map +1 -0
  17. package/dist/browser/inputs/IconChoices.js +121 -0
  18. package/dist/browser/inputs/IconChoices.js.map +1 -0
  19. package/dist/browser/inputs/index.js +1 -0
  20. package/dist/browser/inputs/index.js.map +1 -1
  21. package/dist/browser/intl/messages.js +6 -0
  22. package/dist/browser/intl/messages.js.map +1 -1
  23. package/dist/browser/layout/AppWorkspace.js +118 -93
  24. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  25. package/dist/browser/text-editor/format.js +11 -7
  26. package/dist/browser/text-editor/format.js.map +1 -1
  27. package/dist/browser/text-editor/table.js +39 -11
  28. package/dist/browser/text-editor/table.js.map +1 -1
  29. package/dist/browser/text-editor.js +1 -1
  30. package/dist/browser/text-editor.js.map +1 -1
  31. package/dist/ssr/actions/Dropdown.js +118 -40
  32. package/dist/ssr/actions/Dropdown.js.map +1 -1
  33. package/dist/ssr/actions/index.js.map +1 -1
  34. package/dist/ssr/actions/menu-search.js +113 -0
  35. package/dist/ssr/actions/menu-search.js.map +1 -0
  36. package/dist/ssr/actions/menu-sheet.js +82 -13
  37. package/dist/ssr/actions/menu-sheet.js.map +1 -1
  38. package/dist/ssr/content/CalendarWeekView.js +13 -1
  39. package/dist/ssr/content/CalendarWeekView.js.map +1 -1
  40. package/dist/ssr/content/CountryMap.js +135 -0
  41. package/dist/ssr/content/CountryMap.js.map +1 -0
  42. package/dist/ssr/content/world-countries.js +9 -0
  43. package/dist/ssr/content/world-countries.js.map +1 -0
  44. package/dist/ssr/country-map.js +3 -0
  45. package/dist/ssr/country-map.js.map +1 -0
  46. package/dist/ssr/inputs/IconChoices.js +59 -0
  47. package/dist/ssr/inputs/IconChoices.js.map +1 -0
  48. package/dist/ssr/inputs/index.js +1 -0
  49. package/dist/ssr/inputs/index.js.map +1 -1
  50. package/dist/ssr/intl/messages.js +6 -0
  51. package/dist/ssr/intl/messages.js.map +1 -1
  52. package/dist/ssr/layout/AppWorkspace.js +40 -20
  53. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  54. package/dist/ssr/text-editor/format.js +11 -7
  55. package/dist/ssr/text-editor/format.js.map +1 -1
  56. package/dist/ssr/text-editor/table.js +39 -11
  57. package/dist/ssr/text-editor/table.js.map +1 -1
  58. package/dist/ssr/text-editor.js +1 -1
  59. package/dist/ssr/text-editor.js.map +1 -1
  60. package/dist/styles.css +1 -1
  61. package/dist/types/actions/Dropdown.d.ts +34 -3
  62. package/dist/types/actions/index.d.ts +1 -1
  63. package/dist/types/actions/menu-search.d.ts +27 -0
  64. package/dist/types/actions/menu-sheet.d.ts +5 -1
  65. package/dist/types/content/CountryMap.d.ts +21 -0
  66. package/dist/types/content/world-countries.d.ts +6 -0
  67. package/dist/types/country-map.d.ts +2 -0
  68. package/dist/types/inputs/IconChoices.d.ts +19 -0
  69. package/dist/types/inputs/index.d.ts +2 -0
  70. package/dist/types/intl/messages.d.ts +3 -0
  71. package/dist/types/layout/AppWorkspace.d.ts +6 -1
  72. package/dist/types/text-editor/table.d.ts +2 -0
  73. package/dist/types/text-editor.d.ts +1 -1
  74. package/package.json +9 -1
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["actions/Dropdown.tsx"],"sourcesContent":["import {\n createContext,\n createEffect,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n splitProps,\n untrack,\n useContext,\n} from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport { Tooltip, type TooltipPlacement, useLabelTooltip } from \"../feedback/Tooltip\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\nimport { KeyedFor } from \"../internal/keyed-for\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Button, type ButtonProps, type ButtonSize, type ButtonVariant, iconTitle } from \"./Button\";\nimport { focusMenuRow, focusRowSegment } from \"./menu-rows\";\nimport { openMenuSheet, prefersMenuSheet } from \"./menu-sheet\";\n\n// Resolved outside JSX: a conditional attribute compiles to a lazy memo, which would be created inside the click handler.\nconst selectAction = (item: { action?: () => void }) => item.action;\nconst closeOnSelectOf = (item: DropdownAction) => (\"closeOnSelect\" in item ? item.closeOnSelect : undefined);\nconst hrefOf = (item: DropdownAction) => (\"href\" in item ? item.href : undefined);\nconst externalOf = (item: DropdownAction) => (\"external\" in item ? item.external : undefined);\n\nexport type DropdownPosition = \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\" | \"right-start\";\n/** Where a menu opened without its trigger appears: an element, or any box such as a point inside one. */\nexport type DropdownAnchor = { getBoundingClientRect(): Pick<DOMRect, \"left\" | \"top\" | \"right\" | \"bottom\"> };\n/** Where focus returns as a menu opened by `openAt` closes, read at that moment when it is a function. */\nexport type DropdownReturnFocus = HTMLElement | (() => HTMLElement | undefined);\n\nexport type DropdownActionBase = {\n class?: string;\n disabled?: boolean;\n icon?: string;\n image?: string;\n label: string;\n /**\n * Accessible name when it must say more than the visible label, such as the current value and what the next\n * activation does. It must contain the visible label.\n */\n ariaLabel?: string;\n description?: string;\n /** Quiet trailing information, such as a count. */\n trailing?: JSX.Element;\n variant?: \"danger\";\n};\n\nexport type DropdownAction =\n | (DropdownActionBase & {\n action: () => void;\n /**\n * Set `false` for an action that changes a value in place, such as cycling a setting: the menu stays open and\n * the focus stays on the row. Defaults to `true`.\n */\n closeOnSelect?: boolean;\n /**\n * In a phone sheet, run while the tap still counts as the person's gesture, before the sheet closes, as browsers\n * require for clipboard writes. Other actions run after the sheet has left the history. Such an action must\n * not navigate or open a dialog.\n */\n immediate?: boolean;\n href?: never;\n external?: never;\n })\n | (DropdownActionBase & {\n href: string;\n external?: boolean;\n /** Runs on a plain click instead of following the link; modified clicks, middle-click, and the link's menu keep it. */\n action?: () => void;\n })\n | (DropdownActionBase & {\n disabled: true;\n action?: never;\n href?: never;\n external?: never;\n });\n\n/** A second, smaller action at the end of a row, such as \"Only\" beside a checkbox; it keeps the menu open. */\nexport type DropdownSecondaryAction = {\n label: string;\n /** Accessible name when the visible label alone does not say what it acts on, such as \"Only Team Logistik\". */\n ariaLabel?: string;\n action: () => void;\n};\n\n/** Declarative radio or checkbox row for compact action menus. */\nexport type DropdownChoice = DropdownActionBase & {\n action: () => void;\n checked: boolean | (() => boolean);\n choice: \"checkbox\" | \"radio\";\n href?: string;\n closeOnSelect?: boolean;\n color?: string;\n /**\n * A second action at the end of the row. It shows while the row is hovered or focused, always on a touch screen,\n * and keeps its place when hidden, so the row never changes width. Right and Left move between the two.\n */\n secondary?: DropdownSecondaryAction;\n};\n\nexport type DropdownSection = {\n sectionLabel?: string;\n /**\n * `row` sets a few short radio choices, such as a sort direction, side by side as one segmented row. Give it a\n * `sectionLabel`: the label names the choice above the row and for screen readers.\n */\n layout?: \"row\";\n /** A quiet action at the end of the section label, such as \"All\"; it needs a `sectionLabel` and keeps the menu open. */\n labelAction?: DropdownSecondaryAction;\n items: readonly (DropdownAction | DropdownChoice)[];\n};\n\nexport type DropdownItem = DropdownAction | DropdownChoice | DropdownSection;\n\nexport type DropdownProps = {\n items: readonly DropdownItem[];\n children: JSX.Element;\n position?: DropdownPosition | (() => DropdownPosition);\n /** Larger menu rows and typography for touch. Defaults to `default`. */\n variant?: \"default\" | \"touch\";\n /**\n * Exact menu width as a CSS length. Without it the menu sizes to its longest\n * entry: at least `12rem` (`18rem` for touch), at most the viewport width\n * less `1rem` per side, where longer entries wrap.\n */\n width?: string;\n class?: string;\n menuClass?: string;\n onClose?: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n label?: string;\n align?: \"start\" | \"end\";\n /**\n * `sheet` opens the same items as a bottom sheet on phones (below 48rem) instead of a menu beside the trigger.\n * Defaults to `menu`. A controlled menu (`open`) always stays a menu.\n */\n phone?: \"menu\" | \"sheet\";\n /** Content above the phone sheet's menu. `close` dismisses it with normal history and focus restoration. */\n sheetTop?: (close: () => void) => JSX.Element;\n /**\n * Renders the entries only once the menu first opens, for a menu repeated on every row of a long list: the page\n * then carries each row's trigger, not each row's entries. Fixed for the menu's lifetime.\n */\n lazy?: boolean;\n /**\n * Receives `open`, which shows the menu without its trigger beside `anchor`, as for a context menu, a key or a\n * grip. Focus returns to `returnFocus` when the menu or sheet closes; pass a function when an entry can move the\n * place focus belongs to. Phones get the sheet as from the trigger.\n */\n openAt?: (open: (anchor: DropdownAnchor, returnFocus?: DropdownReturnFocus) => void) => void;\n /** Receives `close`, which closes the menu or sheet and returns focus. */\n closeWith?: (close: () => void) => void;\n};\n\nexport type DropdownTriggerProps = Omit<\n ButtonProps,\n \"aria-controls\" | \"aria-expanded\" | \"aria-haspopup\" | \"children\" | \"disabled\" | \"onClick\" | \"onKeyDown\"\n> & {\n children: JSX.Element;\n /** Use `plain` when a specialized component class owns the complete visual treatment. */\n appearance?: \"button\" | \"plain\";\n disabled?: boolean;\n iconOnly?: boolean;\n label?: string;\n size?: ButtonSize;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n variant?: ButtonVariant;\n};\n\nexport type DropdownItemProps = {\n children: JSX.Element;\n closeOnSelect?: boolean;\n ariaLabel?: string;\n icon?: string;\n image?: string;\n description?: string;\n /** Quiet trailing information, such as a count. */\n trailing?: JSX.Element;\n disabled?: boolean;\n danger?: boolean;\n variant?: \"danger\";\n href?: string;\n external?: boolean;\n /** Runs when the item is chosen. With `href`, a plain click runs it instead of following the link. */\n onSelect?: () => void;\n class?: string;\n};\n\ntype MenuContextValue = {\n close: (restoreFocus?: boolean) => void;\n};\n\ntype DropdownContextValue = {\n disabled: () => boolean;\n menuId: string;\n open: () => boolean;\n registerTrigger: (element: HTMLButtonElement) => void;\n toggle: () => void;\n triggerKeyDown: JSX.EventHandlerUnion<HTMLButtonElement, KeyboardEvent>;\n};\n\nconst MenuContext = createContext<MenuContextValue>();\nconst DropdownContext = createContext<DropdownContextValue>();\n\nconst actionableItems = (menu: HTMLElement | undefined): HTMLElement[] =>\n menu\n ? Array.from(\n menu.querySelectorAll<HTMLElement>(\n [\n \"[role='menuitem']:not([aria-disabled='true'])\",\n \"[role='menuitemcheckbox']:not([aria-disabled='true'])\",\n \"[role='menuitemradio']:not([aria-disabled='true'])\",\n ].join(\", \"),\n ),\n )\n : [];\n\nconst focusMenuItem = (menu: HTMLElement | undefined, index: number): void => {\n const items = actionableItems(menu).filter((item) => !item.classList.contains(\"k2b-dropdown__secondary\"));\n if (items.length === 0) return;\n items[(index + items.length) % items.length]?.focus();\n};\n\nexport const dropdownPosition = (\n trigger: Pick<DOMRect, \"left\" | \"top\" | \"right\" | \"bottom\">,\n menu: Pick<DOMRect, \"width\" | \"height\">,\n position: DropdownPosition,\n viewport: { width: number; height: number },\n gap = 4,\n): { left: number; top: number } => {\n let left = trigger.left;\n let top = trigger.bottom + gap;\n\n if (position === \"bottom-left\" || position === \"top-left\") left = trigger.right - menu.width;\n if (position === \"top-right\" || position === \"top-left\") top = trigger.top - menu.height - gap;\n if (position === \"right-start\") {\n left = trigger.right + gap;\n top = trigger.top;\n }\n\n return {\n left: Math.max(8, Math.min(left, viewport.width - menu.width - 8)),\n top: Math.max(8, Math.min(top, viewport.height - menu.height - 8)),\n };\n};\n\nconst itemContent = (props: {\n description?: string;\n icon?: string;\n image?: string;\n trailing?: JSX.Element;\n children: JSX.Element;\n}): JSX.Element => (\n <>\n <Show when={props.image} fallback={<Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(image) => <img class=\"k2b-dropdown__image\" src={image()} alt=\"\" />}\n </Show>\n <span class=\"k2b-dropdown__copy\">\n <span>{props.children}</span>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n {props.trailing}\n </>\n);\n\nexport function DropdownItem(props: DropdownItemProps): JSX.Element {\n const menu = useContext(MenuContext);\n const danger = () => props.danger || props.variant === \"danger\";\n const content = itemContent(props);\n\n return (\n <Show\n when={!props.disabled ? props.href : undefined}\n fallback={\n <button\n type=\"button\"\n role=\"menuitem\"\n aria-label={props.ariaLabel}\n tabIndex={-1}\n class={`k2b-dropdown__item ${props.class ?? \"\"}`}\n data-danger={danger() ? \"true\" : undefined}\n disabled={props.disabled}\n aria-disabled={props.disabled ? \"true\" : undefined}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n if (props.closeOnSelect !== false) menu?.close();\n props.onSelect?.();\n }}\n >\n {content}\n </button>\n }\n >\n {(href) => (\n <a\n href={href()}\n target={props.external ? \"_blank\" : undefined}\n rel={props.external ? \"noopener noreferrer\" : undefined}\n role=\"menuitem\"\n aria-label={props.ariaLabel}\n tabIndex={-1}\n class={`k2b-dropdown__item ${props.class ?? \"\"}`}\n data-danger={danger() ? \"true\" : undefined}\n onClick={(event) => {\n // With `onSelect`, a plain click runs it in place of the link; a modified click keeps its browser meaning.\n if (props.onSelect && !(event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)) {\n event.preventDefault();\n menu?.close();\n props.onSelect();\n return;\n }\n menu?.close(false);\n }}\n >\n {content}\n </a>\n )}\n </Show>\n );\n}\n\nfunction DropdownChoiceItem(props: DropdownChoice): JSX.Element {\n return (\n <Show when={props.secondary} fallback={<DropdownChoiceRow {...props} />}>\n {(secondary) => (\n <div class=\"k2b-dropdown__pair\">\n <DropdownChoiceRow {...props} />\n <DropdownSecondaryButton {...secondary()} class=\"k2b-dropdown__secondary\" />\n </div>\n )}\n </Show>\n );\n}\n\nfunction DropdownSecondaryButton(props: DropdownSecondaryAction & { class: string }): JSX.Element {\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n tabIndex={-1}\n class={props.class}\n aria-label={props.ariaLabel}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n props.action();\n }}\n >\n {props.label}\n </button>\n );\n}\n\nfunction DropdownChoiceRow(props: DropdownChoice): JSX.Element {\n const menu = useContext(MenuContext);\n const checked = () => (typeof props.checked === \"function\" ? props.checked() : props.checked);\n let element: HTMLElement | undefined;\n return (\n <Dynamic\n ref={(node: HTMLAnchorElement | HTMLButtonElement) => {\n element = node;\n }}\n component={!props.disabled && props.href ? \"a\" : \"button\"}\n href={!props.disabled ? props.href : undefined}\n type={!props.disabled && props.href ? undefined : \"button\"}\n role={props.choice === \"checkbox\" ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-label={props.ariaLabel}\n aria-checked={checked()}\n aria-disabled={props.disabled ? \"true\" : undefined}\n tabIndex={-1}\n class={`k2b-dropdown__item ${props.class ?? \"\"}`}\n data-selected={checked() ? \"true\" : undefined}\n disabled={props.disabled}\n onClick={(event: MouseEvent) => {\n if (props.href && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)) {\n menu?.close(false);\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n if (props.closeOnSelect !== false) menu?.close();\n props.action();\n }}\n onKeyDown={(event: KeyboardEvent) => {\n // A link answers only Enter; as a menu choice it also answers Space, like the button form.\n if (event.key !== \" \" || props.disabled || !props.href) return;\n event.preventDefault();\n element?.click();\n }}\n >\n <Show when={props.choice === \"checkbox\"}>\n <span class=\"k2b-dropdown__checkbox\" aria-hidden=\"true\">\n <Show when={checked()}>\n <i class=\"ti ti-check\" />\n </Show>\n </span>\n </Show>\n <Show when={props.image} fallback={<Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(image) => <img class=\"k2b-dropdown__image\" src={image()} alt=\"\" />}\n </Show>\n <Show when={props.color}>\n {(color) => <span class=\"k2b-dropdown__color\" style={{ \"--k2b-dropdown-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-dropdown__copy\">\n <span>{props.label}</span>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n {props.trailing}\n {/* Always present for radios, so selecting the widest entry cannot widen a content-sized menu. */}\n <Show when={props.choice === \"radio\"}>\n <i class=\"ti ti-check k2b-dropdown__check\" data-hidden={checked() ? undefined : \"true\"} aria-hidden=\"true\" />\n </Show>\n </Dynamic>\n );\n}\n\nexport function DropdownItems(props: { items: readonly DropdownItem[]; close: (restoreFocus?: boolean) => void }): JSX.Element {\n const messages = useUiMessages();\n // Rows read their current item: a host that rebuilds equal items while the menu is open keeps each row element (#2140).\n const renderItem = (item: () => DropdownAction | DropdownChoice): JSX.Element => {\n const initial = untrack(item);\n if (\"choice\" in initial) return <DropdownChoiceItem {...mergeProps(() => item() as DropdownChoice)} />;\n const action = () => item() as DropdownAction;\n return (\n <DropdownItem\n ariaLabel={action().ariaLabel}\n closeOnSelect={closeOnSelectOf(action())}\n icon={action().icon}\n image={action().image}\n description={action().description}\n trailing={action().trailing}\n variant={action().variant}\n disabled={action().disabled}\n class={action().class}\n href={hrefOf(action())}\n external={externalOf(action())}\n onSelect={selectAction(action())}\n >\n {action().label}\n </DropdownItem>\n );\n };\n\n return (\n <MenuContext.Provider value={{ close: props.close }}>\n <KeyedFor each={props.items} by={(item) => (\"items\" in item ? `section:${item.sectionLabel ?? \"\"}` : `item:${item.label}`)}>\n {(current, index) => {\n const item = current();\n return (\n <Show when={\"items\" in item} fallback={renderItem(current as () => DropdownAction | DropdownChoice)}>\n <div\n class=\"k2b-dropdown__section\"\n data-divided={index() > 0 ? \"true\" : undefined}\n role=\"group\"\n // A row of choices is no set of actions: without a label it stays unnamed rather than misnamed.\n aria-label={\n (current() as DropdownSection).sectionLabel ??\n ((current() as DropdownSection).layout === \"row\" ? undefined : messages().actions)\n }\n >\n <Show when={(current() as DropdownSection).sectionLabel}>\n {(label) => (\n <Show when={(current() as DropdownSection).labelAction} fallback={<div class=\"k2b-dropdown__label\">{label()}</div>}>\n {(action) => (\n <div class=\"k2b-dropdown__label k2b-dropdown__label--action\">\n <span>{label()}</span>\n <DropdownSecondaryButton {...action()} class=\"k2b-dropdown__label-action\" />\n </div>\n )}\n </Show>\n )}\n </Show>\n <Show\n when={(current() as DropdownSection).layout === \"row\"}\n fallback={\n <KeyedFor each={(current() as DropdownSection).items} by={(row) => row.label}>\n {renderItem}\n </KeyedFor>\n }\n >\n <div class=\"k2b-dropdown__row\">\n <KeyedFor each={(current() as DropdownSection).items} by={(row) => row.label}>\n {renderItem}\n </KeyedFor>\n </div>\n </Show>\n </div>\n </Show>\n );\n }}\n </KeyedFor>\n </MenuContext.Provider>\n );\n}\n\nfunction DropdownTrigger(props: DropdownTriggerProps): JSX.Element {\n const context = useContext(DropdownContext);\n if (!context) throw new Error(\"Dropdown.Trigger must be used inside Dropdown.Root\");\n const [local, rest] = splitProps(props, [\n \"appearance\",\n \"children\",\n \"class\",\n \"disabled\",\n \"iconOnly\",\n \"label\",\n \"ref\",\n \"size\",\n \"tabIndex\",\n \"title\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"type\",\n \"variant\",\n ]);\n let target: HTMLButtonElement | undefined;\n const disabled = () => Boolean(context.disabled() || local.disabled);\n // An icon-only trigger shows its label as a hint, like IconButton.\n const tooltip = useLabelTooltip(\n () => local.tooltip,\n () => (local.iconOnly ? (local.title ?? local.label) : undefined),\n );\n const register = (element: HTMLButtonElement) => {\n target = element;\n context.registerTrigger(element);\n if (typeof local.ref === \"function\") local.ref(element);\n };\n const click: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent> = (event) => {\n event.stopPropagation();\n context.toggle();\n };\n\n if (local.appearance !== \"plain\") {\n return (\n <Button\n {...rest}\n ref={register}\n aria-controls={context.menuId}\n aria-expanded={context.open()}\n aria-haspopup=\"menu\"\n aria-label={local.label}\n disabled={disabled()}\n tabIndex={disabled() ? -1 : local.tabIndex}\n onClick={click}\n onKeyDown={context.triggerKeyDown}\n type={local.type ?? \"button\"}\n class={`${local.iconOnly ? \"k2b-icon-button\" : \"\"} k2b-dropdown__trigger ${local.class ?? \"\"}`}\n size={local.size}\n variant={local.variant ?? (local.iconOnly ? \"ghost\" : undefined)}\n title={iconTitle(local.title, tooltip())}\n tooltip={tooltip()}\n tooltipDelay={local.tooltipDelay}\n tooltipPlacement={local.tooltipPlacement}\n >\n {local.children}\n </Button>\n );\n }\n\n return (\n <>\n <button\n {...rest}\n ref={register}\n aria-controls={context.menuId}\n aria-expanded={context.open()}\n aria-haspopup=\"menu\"\n aria-label={local.label}\n disabled={disabled()}\n tabIndex={disabled() ? -1 : local.tabIndex}\n onClick={click}\n onKeyDown={context.triggerKeyDown}\n type={local.type ?? \"button\"}\n class={`k2b-dropdown__trigger ${local.class ?? \"\"}`}\n title={iconTitle(local.title, tooltip())}\n >\n {local.children}\n </button>\n <Show when={tooltip() !== false && tooltip() !== undefined}>\n <Tooltip\n content={tooltip() as JSX.Element}\n target={() => target}\n delay={local.tooltipDelay}\n disabled={disabled()}\n placement={local.tooltipPlacement}\n />\n </Show>\n </>\n );\n}\n\n/** Accessible top-layer menu with explicit trigger ownership. */\nfunction DropdownRoot(props: DropdownProps): JSX.Element {\n const messages = useUiMessages();\n const locale = useLocale();\n /** The open phone sheet's cancel switch: it closes when the menu goes or is disabled, as the popover does. */\n let sheet: AbortController | undefined;\n const id = createUniqueId().replace(/[^a-zA-Z0-9_-]/g, \"-\");\n const menuId = `k2b-dropdown-${id}`;\n const [internalOpen, setInternalOpen] = createSignal(false);\n const [entriesShown, setEntriesShown] = createSignal(!props.lazy);\n let triggerRef: HTMLButtonElement | undefined;\n /** Set while the menu is open from `openAt`: it appears beside `anchor`, and focus returns to `origin`. */\n let anchor: DropdownAnchor | undefined;\n let origin: DropdownReturnFocus | undefined;\n const originElement = () => (typeof origin === \"function\" ? origin() : origin);\n let menuRef: HTMLDivElement | undefined;\n let triggerRing = true;\n let mounted = false;\n /** Where a key on the trigger asked the focus to go; a controlled menu opens later, in its owner's update. */\n let keyFocus: \"first\" | \"last\" | false = false;\n let viewportListenersAttached = false;\n let resizeObserver: ResizeObserver | undefined;\n\n const isOpen = () => props.open ?? internalOpen();\n const position = (): DropdownPosition =>\n typeof props.position === \"function\" ? props.position() : (props.position ?? (props.align === \"end\" ? \"bottom-left\" : \"bottom-right\"));\n\n const place = () => {\n const at = anchor ?? triggerRef;\n if (!at || !menuRef) return;\n const rect = dropdownPosition(at.getBoundingClientRect(), menuRef.getBoundingClientRect(), position(), {\n width: window.innerWidth,\n height: window.innerHeight,\n });\n menuRef.style.left = `${rect.left}px`;\n menuRef.style.top = `${rect.top}px`;\n };\n const reposition = () => {\n if (isOpen()) place();\n };\n const attachViewportListeners = () => {\n if (viewportListenersAttached) return;\n viewportListenersAttached = true;\n window.addEventListener(\"resize\", reposition);\n window.addEventListener(\"scroll\", reposition, true);\n // A content-sized menu changes size when its items change while it is open.\n if (menuRef && typeof ResizeObserver !== \"undefined\") {\n resizeObserver ??= new ResizeObserver(reposition);\n resizeObserver.observe(menuRef);\n }\n };\n const detachViewportListeners = () => {\n if (!viewportListenersAttached) return;\n viewportListenersAttached = false;\n window.removeEventListener(\"resize\", reposition);\n window.removeEventListener(\"scroll\", reposition, true);\n resizeObserver?.disconnect();\n };\n const close = (restoreFocus = true) => {\n // Before hiding, so the popover does not return focus on its own.\n if (restoreFocus) returnFocus(originElement() ?? triggerRef, triggerRing);\n if (menuRef?.matches(\":popover-open\")) menuRef.hidePopover();\n // Like `open`, expose the closed state now: the toggle event can arrive after the next key press, and a trigger\n // that still reads as open would ignore Enter (Escape, then Enter at once, must reopen).\n setInternalOpen(false);\n detachViewportListeners();\n };\n const open = (focus: \"first\" | \"last\" | false = \"first\") => {\n if (props.disabled || !menuRef || menuRef.matches(\":popover-open\")) return;\n triggerRing = ringOnReturn(originElement() ?? triggerRef);\n // A lazy menu's entries exist before it shows, so it places and focuses them as any other.\n setEntriesShown(true);\n menuRef.showPopover();\n // The toggle event arrives a task later; expose the open state before focus moves into the menu.\n setInternalOpen(true);\n attachViewportListeners();\n place();\n queueMicrotask(() => {\n if (focus) focusMenuItem(menuRef, focus === \"first\" ? 0 : -1);\n });\n };\n const requestOpen = (next: boolean, focus: \"first\" | \"last\" | false = \"first\") => {\n if (props.disabled && next) return;\n if (props.open !== undefined) {\n props.onOpenChange?.(next);\n return;\n }\n if (next && props.phone === \"sheet\" && prefersMenuSheet()) {\n if (sheet) return;\n const current = new AbortController();\n sheet = current;\n // A sheet opened without its trigger returns focus to its own target, which an entry may have moved,\n // rather than to whatever had focus as it opened.\n const anchored = origin !== undefined;\n const ring = anchored && ringOnReturn(originElement());\n if (anchored && document.activeElement instanceof HTMLElement) document.activeElement.blur();\n // The sheet is this menu's open state: the trigger reports it and the owner hears both ends.\n setInternalOpen(true);\n props.onOpenChange?.(true);\n void openMenuSheet({\n Items: DropdownItems,\n items: props.items,\n label: props.label ?? messages().dropdownMenu,\n locale: locale(),\n top: props.sheetTop,\n signal: current.signal,\n }).finally(() => {\n sheet = undefined;\n // An entry that moved focus elsewhere, such as into a field, keeps it.\n const target = anchored ? originElement() : undefined;\n const focused = document.activeElement;\n if (target?.isConnected && (!focused || focused === document.body)) returnFocus(target, ring);\n setInternalOpen(false);\n props.onOpenChange?.(false);\n props.onClose?.();\n });\n return;\n }\n if (next) open(focus);\n else close(false);\n };\n const handleMenuKeyDown = (event: KeyboardEvent) => {\n const items = actionableItems(menuRef);\n if (focusMenuRow(items, event.key) || focusRowSegment(items, event.key)) {\n event.preventDefault();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n returnFocus(originElement() ?? triggerRef, triggerRing);\n requestOpen(false);\n } else if (event.key === \"Tab\") {\n requestOpen(false);\n }\n };\n\n const context: DropdownContextValue = {\n disabled: () => Boolean(props.disabled),\n menuId,\n open: isOpen,\n registerTrigger: (element) => {\n triggerRef = element;\n },\n toggle: () => {\n if (!isOpen()) anchor = origin = undefined;\n requestOpen(!isOpen());\n },\n triggerKeyDown: (event) => {\n if (![\"Enter\", \" \", \"ArrowDown\", \"ArrowUp\"].includes(event.key)) return;\n event.preventDefault();\n event.stopPropagation();\n if (isOpen()) {\n focusMenuItem(menuRef, event.key === \"ArrowUp\" ? -1 : 0);\n return;\n }\n anchor = origin = undefined;\n keyFocus = event.key === \"ArrowUp\" ? \"last\" : \"first\";\n requestOpen(true, keyFocus);\n keyFocus = false;\n },\n };\n\n createEffect(() => {\n const controlled = props.open;\n if (!mounted || controlled === undefined || !menuRef) return;\n if (controlled && !menuRef.matches(\":popover-open\")) open(keyFocus);\n if (!controlled && menuRef.matches(\":popover-open\")) close(false);\n });\n createEffect(() => {\n if (!props.disabled) return;\n sheet?.abort();\n if (mounted) close(false);\n });\n props.openAt?.((at, focus) => {\n if (isOpen()) return;\n anchor = at;\n origin = focus;\n requestOpen(true);\n });\n props.closeWith?.(() => {\n sheet?.abort();\n if (isOpen()) close();\n });\n onMount(() => {\n mounted = true;\n if (props.open) open(false);\n onCleanup(detachViewportListeners);\n });\n onCleanup(() => sheet?.abort());\n\n return (\n <DropdownContext.Provider value={context}>\n <span class={`k2b-dropdown ${props.class ?? \"\"}`}>\n {props.children}\n <div\n ref={menuRef}\n id={menuId}\n popover=\"auto\"\n role=\"menu\"\n aria-label={props.label ?? messages().dropdownMenu}\n class={`k2b-dropdown__menu ${props.menuClass ?? \"\"}`}\n style={props.width ? { \"--k2b-dropdown-width\": props.width } : undefined}\n data-width={props.width ? \"fixed\" : undefined}\n data-variant={props.variant ?? \"default\"}\n data-position={position()}\n onKeyDown={handleMenuKeyDown}\n onToggle={(event) => {\n const nextOpen = (event as ToggleEvent).newState === \"open\";\n const wasOpen = (event as ToggleEvent).oldState === \"open\";\n setInternalOpen(nextOpen);\n if (nextOpen) setEntriesShown(true);\n if (nextOpen) attachViewportListeners();\n else detachViewportListeners();\n if (props.open === undefined || props.open !== nextOpen) props.onOpenChange?.(nextOpen);\n // A light dismiss hides the menu with focus inside it; an opener without a trigger takes it back.\n const focused = document.activeElement;\n const target = wasOpen && !nextOpen ? originElement() : undefined;\n if (target?.isConnected && (!focused || focused === document.body || menuRef?.contains(focused)))\n returnFocus(target, triggerRing);\n if (wasOpen && !nextOpen) props.onClose?.();\n if (!nextOpen && props.open === true) queueMicrotask(() => props.open === true && open(false));\n }}\n >\n <Show when={entriesShown()}>\n <DropdownItems items={props.items} close={close} />\n </Show>\n </div>\n </span>\n </DropdownContext.Provider>\n );\n}\n\ntype DropdownComponent = ((props: DropdownProps) => JSX.Element) & {\n Root: (props: DropdownProps) => JSX.Element;\n Trigger: (props: DropdownTriggerProps) => JSX.Element;\n Item: (props: DropdownItemProps) => JSX.Element;\n};\n\nexport const Dropdown = DropdownRoot as DropdownComponent;\nDropdown.Root = DropdownRoot;\nDropdown.Trigger = DropdownTrigger;\nDropdown.Item = DropdownItem;\n\nexport default Dropdown;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/Dropdown.tsx"],"sourcesContent":["import {\n createContext,\n createEffect,\n createSignal,\n createUniqueId,\n type JSX,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n splitProps,\n untrack,\n useContext,\n} from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport { Tooltip, type TooltipPlacement, useLabelTooltip } from \"../feedback/Tooltip\";\nimport { returnFocus, ringOnReturn } from \"../internal/focus-return\";\nimport { KeyedFor } from \"../internal/keyed-for\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Button, type ButtonProps, type ButtonSize, type ButtonVariant, iconTitle } from \"./Button\";\nimport { focusMenuRow, focusRowSegment } from \"./menu-rows\";\nimport { MenuSearch, type MenuSearchApi } from \"./menu-search\";\nimport { openMenuSheet, prefersMenuSheet } from \"./menu-sheet\";\n\n// Resolved outside JSX: a conditional attribute compiles to a lazy memo, which would be created inside the click handler.\nconst selectAction = (item: { action?: () => void }) => item.action;\nconst closeOnSelectOf = (item: DropdownAction) => (\"closeOnSelect\" in item ? item.closeOnSelect : undefined);\nconst hrefOf = (item: DropdownAction) => (\"href\" in item ? item.href : undefined);\nconst externalOf = (item: DropdownAction) => (\"external\" in item ? item.external : undefined);\n\nexport type DropdownPosition = \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\" | \"right-start\";\n/** Where a menu opened without its trigger appears: an element, or any box such as a point inside one. */\nexport type DropdownAnchor = { getBoundingClientRect(): Pick<DOMRect, \"left\" | \"top\" | \"right\" | \"bottom\"> };\n/** Where focus returns as a menu opened by `openAt` closes, read at that moment when it is a function. */\nexport type DropdownReturnFocus = HTMLElement | (() => HTMLElement | undefined);\n\nexport type DropdownActionBase = {\n class?: string;\n disabled?: boolean;\n icon?: string;\n image?: string;\n label: string;\n /**\n * Accessible name when it must say more than the visible label, such as the current value and what the next\n * activation does. It must contain the visible label.\n */\n ariaLabel?: string;\n description?: string;\n /** Quiet trailing information, such as a count. */\n trailing?: JSX.Element;\n /** `danger` for destructive entries; `accent` for the entry most people want, such as creating a blank item. */\n variant?: \"danger\" | \"accent\";\n};\n\nexport type DropdownAction =\n | (DropdownActionBase & {\n action: () => void;\n /**\n * Set `false` for an action that changes a value in place, such as cycling a setting: the menu stays open and\n * the focus stays on the row. Defaults to `true`.\n */\n closeOnSelect?: boolean;\n /**\n * In a phone sheet, run while the tap still counts as the person's gesture, before the sheet closes, as browsers\n * require for clipboard writes. Other actions run after the sheet has left the history. Such an action must\n * not navigate or open a dialog.\n */\n immediate?: boolean;\n href?: never;\n external?: never;\n })\n | (DropdownActionBase & {\n href: string;\n external?: boolean;\n /** Runs on a plain click instead of following the link; modified clicks, middle-click, and the link's menu keep it. */\n action?: () => void;\n })\n | (DropdownActionBase & {\n disabled: true;\n action?: never;\n href?: never;\n external?: never;\n });\n\n/** A second, smaller action at the end of a row, such as \"Only\" beside a checkbox; it keeps the menu open. */\nexport type DropdownSecondaryAction = {\n label: string;\n /** Accessible name when the visible label alone does not say what it acts on, such as \"Only Team Logistik\". */\n ariaLabel?: string;\n action: () => void;\n};\n\n/** Declarative radio or checkbox row for compact action menus. */\nexport type DropdownChoice = DropdownActionBase & {\n action: () => void;\n checked: boolean | (() => boolean);\n choice: \"checkbox\" | \"radio\";\n href?: string;\n closeOnSelect?: boolean;\n color?: string;\n /**\n * A second action at the end of the row. It shows while the row is hovered or focused, always on a touch screen,\n * and keeps its place when hidden, so the row never changes width. Right and Left move between the two.\n */\n secondary?: DropdownSecondaryAction;\n};\n\nexport type DropdownSection = {\n sectionLabel?: string;\n /**\n * `row` sets a few short radio choices, such as a sort direction, side by side as one segmented row. Give it a\n * `sectionLabel`: the label names the choice above the row and for screen readers.\n */\n layout?: \"row\";\n /** A quiet action at the end of the section label, such as \"All\"; it needs a `sectionLabel` and keeps the menu open. */\n labelAction?: DropdownSecondaryAction;\n items: readonly (DropdownAction | DropdownChoice)[];\n};\n\nexport type DropdownItem = DropdownAction | DropdownChoice | DropdownSection;\n\n/** A search field above the entries, for a menu long enough that finding an entry takes reading. */\nexport type DropdownSearch = {\n /** Names the field and is its placeholder unless `placeholder` is set, such as \"Find template\". */\n label: string;\n placeholder?: string;\n /**\n * The entries for a query that is not blank. Defaults to the actions and choices whose label or description contains\n * the query, kept in their sections.\n */\n filter?: (query: string) => readonly DropdownItem[];\n /** What a screen reader hears after the query changes; defaults to the number of matching entries. */\n status?: (query: string, matches: number) => string;\n};\n\nexport type DropdownProps = {\n items: readonly DropdownItem[];\n /** The `Dropdown.Trigger`; leave it out for a menu opened through `attach` or `openAt`. */\n children?: JSX.Element;\n position?: DropdownPosition | (() => DropdownPosition);\n /** Larger menu rows and typography for touch. Defaults to `default`. */\n variant?: \"default\" | \"touch\";\n /**\n * Exact menu width as a CSS length. Without it the menu sizes to its longest\n * entry: at least `12rem` (`18rem` for touch), at most the viewport width\n * less `1rem` per side, where longer entries wrap.\n */\n width?: string;\n class?: string;\n menuClass?: string;\n onClose?: () => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n label?: string;\n align?: \"start\" | \"end\";\n /**\n * `sheet` opens the same items as a bottom sheet on phones (below 48rem) instead of a menu beside the trigger.\n * Defaults to `menu`. A controlled menu (`open`) always stays a menu.\n */\n phone?: \"menu\" | \"sheet\";\n /** Content above the phone sheet's menu. `close` dismisses it with normal history and focus restoration. */\n sheetTop?: (close: () => void) => JSX.Element;\n /**\n * Renders the entries only once the menu first opens, for a menu repeated on every row of a long list: the page\n * then carries each row's trigger, not each row's entries. Fixed for the menu's lifetime.\n */\n lazy?: boolean;\n /**\n * Receives `open`, which shows the menu without its trigger beside `anchor`, as for a context menu, a key or a\n * grip. Focus returns to `returnFocus` when the menu or sheet closes; pass a function when an entry can move the\n * place focus belongs to. Phones get the sheet as from the trigger.\n */\n openAt?: (open: (anchor: DropdownAnchor, returnFocus?: DropdownReturnFocus) => void) => void;\n /** Receives `close`, which closes the menu or sheet and returns focus. */\n closeWith?: (close: () => void) => void;\n /**\n * Puts a search field above the entries. Focus starts in the field; Up and Down move through the matching entries,\n * Enter chooses one, and the first stays marked while the query changes.\n */\n search?: DropdownSearch;\n /**\n * Adopts an element rendered elsewhere as the trigger, such as a server-rendered link: a plain click, Enter, Space,\n * Up, or Down opens the menu, while a modified or middle click keeps the link. The element gets `aria-expanded` and\n * `aria-controls`; render `aria-haspopup` with it, so the server HTML already says it opens a menu. Read once on mount.\n */\n attach?: () => HTMLElement | null | undefined;\n /** `tile` sets every entry's icon on a quiet square, for menus whose icons tell entries apart, such as templates. */\n icons?: \"plain\" | \"tile\";\n /** One quiet sentence below the entries that explains them all, such as what choosing one keeps; it describes the menu. */\n note?: string;\n};\n\nexport type DropdownTriggerProps = Omit<\n ButtonProps,\n \"aria-controls\" | \"aria-expanded\" | \"aria-haspopup\" | \"children\" | \"disabled\" | \"onClick\" | \"onKeyDown\"\n> & {\n children: JSX.Element;\n /** Use `plain` when a specialized component class owns the complete visual treatment. */\n appearance?: \"button\" | \"plain\";\n disabled?: boolean;\n iconOnly?: boolean;\n label?: string;\n size?: ButtonSize;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n variant?: ButtonVariant;\n};\n\nexport type DropdownItemProps = {\n children: JSX.Element;\n closeOnSelect?: boolean;\n ariaLabel?: string;\n icon?: string;\n image?: string;\n description?: string;\n /** Quiet trailing information, such as a count. */\n trailing?: JSX.Element;\n disabled?: boolean;\n danger?: boolean;\n variant?: \"danger\" | \"accent\";\n href?: string;\n external?: boolean;\n /** Runs when the item is chosen. With `href`, a plain click runs it instead of following the link. */\n onSelect?: () => void;\n class?: string;\n};\n\ntype MenuContextValue = {\n close: (restoreFocus?: boolean) => void;\n /** `option` inside a searchable menu's list box, whose field keeps the focus. */\n role: \"menuitem\" | \"option\";\n};\n\ntype DropdownContextValue = {\n disabled: () => boolean;\n menuId: string;\n open: () => boolean;\n popup: () => \"dialog\" | \"menu\";\n registerTrigger: (element: HTMLElement) => void;\n toggle: () => void;\n triggerKeyDown: JSX.EventHandlerUnion<HTMLButtonElement, KeyboardEvent>;\n};\n\nconst MenuContext = createContext<MenuContextValue>();\nconst DropdownContext = createContext<DropdownContextValue>();\n\nconst actionableItems = (menu: HTMLElement | undefined): HTMLElement[] =>\n menu\n ? Array.from(\n menu.querySelectorAll<HTMLElement>(\n [\n \"[role='menuitem']:not([aria-disabled='true'])\",\n \"[role='menuitemcheckbox']:not([aria-disabled='true'])\",\n \"[role='menuitemradio']:not([aria-disabled='true'])\",\n \"[role='option']:not([aria-disabled='true'])\",\n ].join(\", \"),\n ),\n )\n : [];\n\nconst focusMenuItem = (menu: HTMLElement | undefined, index: number): void => {\n const items = actionableItems(menu).filter((item) => !item.classList.contains(\"k2b-dropdown__secondary\"));\n if (items.length === 0) return;\n items[(index + items.length) % items.length]?.focus();\n};\n\nexport const dropdownPosition = (\n trigger: Pick<DOMRect, \"left\" | \"top\" | \"right\" | \"bottom\">,\n menu: Pick<DOMRect, \"width\" | \"height\">,\n position: DropdownPosition,\n viewport: { width: number; height: number },\n gap = 4,\n): { left: number; top: number } => {\n let left = trigger.left;\n let top = trigger.bottom + gap;\n\n if (position === \"bottom-left\" || position === \"top-left\") left = trigger.right - menu.width;\n if (position === \"top-right\" || position === \"top-left\") top = trigger.top - menu.height - gap;\n if (position === \"right-start\") {\n left = trigger.right + gap;\n top = trigger.top;\n }\n\n return {\n left: Math.max(8, Math.min(left, viewport.width - menu.width - 8)),\n top: Math.max(8, Math.min(top, viewport.height - menu.height - 8)),\n };\n};\n\nconst itemContent = (props: {\n description?: string;\n icon?: string;\n image?: string;\n trailing?: JSX.Element;\n children: JSX.Element;\n}): JSX.Element => (\n <>\n <Show when={props.image} fallback={<Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(image) => <img class=\"k2b-dropdown__image\" src={image()} alt=\"\" />}\n </Show>\n <span class=\"k2b-dropdown__copy\">\n <span>{props.children}</span>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n {props.trailing}\n </>\n);\n\nexport function DropdownItem(props: DropdownItemProps): JSX.Element {\n const menu = useContext(MenuContext);\n const danger = () => props.danger || props.variant === \"danger\";\n const role = () => menu?.role ?? \"menuitem\";\n const content = itemContent(props);\n\n return (\n <Show\n when={!props.disabled ? props.href : undefined}\n fallback={\n <button\n type=\"button\"\n role={role()}\n aria-label={props.ariaLabel}\n tabIndex={-1}\n class={`k2b-dropdown__item ${props.class ?? \"\"}`}\n data-danger={danger() ? \"true\" : undefined}\n data-accent={props.variant === \"accent\" ? \"true\" : undefined}\n disabled={props.disabled}\n aria-disabled={props.disabled ? \"true\" : undefined}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n // Read before closing: a searchable menu clears its query as it closes, and the row then shows another entry.\n const select = props.onSelect;\n if (props.closeOnSelect !== false) menu?.close();\n select?.();\n }}\n >\n {content}\n </button>\n }\n >\n {(href) => (\n <a\n href={href()}\n target={props.external ? \"_blank\" : undefined}\n rel={props.external ? \"noopener noreferrer\" : undefined}\n role={role()}\n aria-label={props.ariaLabel}\n tabIndex={-1}\n class={`k2b-dropdown__item ${props.class ?? \"\"}`}\n data-danger={danger() ? \"true\" : undefined}\n data-accent={props.variant === \"accent\" ? \"true\" : undefined}\n onClick={(event) => {\n // With `onSelect`, a plain click runs it in place of the link; a modified click keeps its browser meaning.\n const select = props.onSelect;\n if (select && !(event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)) {\n event.preventDefault();\n menu?.close();\n select();\n return;\n }\n menu?.close(false);\n }}\n >\n {content}\n </a>\n )}\n </Show>\n );\n}\n\nfunction DropdownChoiceItem(props: DropdownChoice): JSX.Element {\n const menu = useContext(MenuContext);\n // A searchable menu's field keeps the focus, so a second button in a row could not be reached; it is left out.\n return (\n <Show when={menu?.role !== \"option\" && props.secondary} fallback={<DropdownChoiceRow {...props} />}>\n {(secondary) => (\n <div class=\"k2b-dropdown__pair\">\n <DropdownChoiceRow {...props} />\n <DropdownSecondaryButton {...secondary()} class=\"k2b-dropdown__secondary\" />\n </div>\n )}\n </Show>\n );\n}\n\nfunction DropdownSecondaryButton(props: DropdownSecondaryAction & { class: string }): JSX.Element {\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n tabIndex={-1}\n class={props.class}\n aria-label={props.ariaLabel}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n props.action();\n }}\n >\n {props.label}\n </button>\n );\n}\n\nfunction DropdownChoiceRow(props: DropdownChoice): JSX.Element {\n const menu = useContext(MenuContext);\n const checked = () => (typeof props.checked === \"function\" ? props.checked() : props.checked);\n let element: HTMLElement | undefined;\n return (\n <Dynamic\n ref={(node: HTMLAnchorElement | HTMLButtonElement) => {\n element = node;\n }}\n component={!props.disabled && props.href ? \"a\" : \"button\"}\n href={!props.disabled ? props.href : undefined}\n type={!props.disabled && props.href ? undefined : \"button\"}\n role={menu?.role === \"option\" ? \"option\" : props.choice === \"checkbox\" ? \"menuitemcheckbox\" : \"menuitemradio\"}\n aria-label={props.ariaLabel}\n aria-checked={checked()}\n aria-disabled={props.disabled ? \"true\" : undefined}\n tabIndex={-1}\n class={`k2b-dropdown__item ${props.class ?? \"\"}`}\n data-selected={checked() ? \"true\" : undefined}\n disabled={props.disabled}\n onClick={(event: MouseEvent) => {\n if (props.href && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)) {\n menu?.close(false);\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const action = props.action;\n if (props.closeOnSelect !== false) menu?.close();\n action();\n }}\n onKeyDown={(event: KeyboardEvent) => {\n // A link answers only Enter; as a menu choice it also answers Space, like the button form.\n if (event.key !== \" \" || props.disabled || !props.href) return;\n event.preventDefault();\n element?.click();\n }}\n >\n <Show when={props.choice === \"checkbox\"}>\n <span class=\"k2b-dropdown__checkbox\" aria-hidden=\"true\">\n <Show when={checked()}>\n <i class=\"ti ti-check\" />\n </Show>\n </span>\n </Show>\n <Show when={props.image} fallback={<Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(image) => <img class=\"k2b-dropdown__image\" src={image()} alt=\"\" />}\n </Show>\n <Show when={props.color}>\n {(color) => <span class=\"k2b-dropdown__color\" style={{ \"--k2b-dropdown-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-dropdown__copy\">\n <span>{props.label}</span>\n <Show when={props.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n {props.trailing}\n {/* Always present for radios, so selecting the widest entry cannot widen a content-sized menu. */}\n <Show when={props.choice === \"radio\"}>\n <i class=\"ti ti-check k2b-dropdown__check\" data-hidden={checked() ? undefined : \"true\"} aria-hidden=\"true\" />\n </Show>\n </Dynamic>\n );\n}\n\nexport function DropdownItems(props: {\n items: readonly DropdownItem[];\n close: (restoreFocus?: boolean) => void;\n role?: \"menuitem\" | \"option\";\n}): JSX.Element {\n const messages = useUiMessages();\n // Rows read their current item: a host that rebuilds equal items while the menu is open keeps each row element (#2140).\n const renderItem = (item: () => DropdownAction | DropdownChoice): JSX.Element => {\n const initial = untrack(item);\n if (\"choice\" in initial) return <DropdownChoiceItem {...mergeProps(() => item() as DropdownChoice)} />;\n const action = () => item() as DropdownAction;\n return (\n <DropdownItem\n ariaLabel={action().ariaLabel}\n closeOnSelect={closeOnSelectOf(action())}\n icon={action().icon}\n image={action().image}\n description={action().description}\n trailing={action().trailing}\n variant={action().variant}\n disabled={action().disabled}\n class={action().class}\n href={hrefOf(action())}\n external={externalOf(action())}\n onSelect={selectAction(action())}\n >\n {action().label}\n </DropdownItem>\n );\n };\n\n return (\n <MenuContext.Provider value={{ close: props.close, role: props.role ?? \"menuitem\" }}>\n <KeyedFor each={props.items} by={(item) => (\"items\" in item ? `section:${item.sectionLabel ?? \"\"}` : `item:${item.label}`)}>\n {(current, index) => {\n const item = current();\n return (\n <Show when={\"items\" in item} fallback={renderItem(current as () => DropdownAction | DropdownChoice)}>\n <div\n class=\"k2b-dropdown__section\"\n data-divided={index() > 0 ? \"true\" : undefined}\n role=\"group\"\n // A row of choices is no set of actions: without a label it stays unnamed rather than misnamed.\n aria-label={\n (current() as DropdownSection).sectionLabel ??\n ((current() as DropdownSection).layout === \"row\" ? undefined : messages().actions)\n }\n >\n <Show when={(current() as DropdownSection).sectionLabel}>\n {(label) => (\n <Show\n when={props.role !== \"option\" && (current() as DropdownSection).labelAction}\n fallback={<div class=\"k2b-dropdown__label\">{label()}</div>}\n >\n {(action) => (\n <div class=\"k2b-dropdown__label k2b-dropdown__label--action\">\n <span>{label()}</span>\n <DropdownSecondaryButton {...action()} class=\"k2b-dropdown__label-action\" />\n </div>\n )}\n </Show>\n )}\n </Show>\n <Show\n when={(current() as DropdownSection).layout === \"row\"}\n fallback={\n <KeyedFor each={(current() as DropdownSection).items} by={(row) => row.label}>\n {renderItem}\n </KeyedFor>\n }\n >\n <div class=\"k2b-dropdown__row\">\n <KeyedFor each={(current() as DropdownSection).items} by={(row) => row.label}>\n {renderItem}\n </KeyedFor>\n </div>\n </Show>\n </div>\n </Show>\n );\n }}\n </KeyedFor>\n </MenuContext.Provider>\n );\n}\n\nfunction DropdownTrigger(props: DropdownTriggerProps): JSX.Element {\n const context = useContext(DropdownContext);\n if (!context) throw new Error(\"Dropdown.Trigger must be used inside Dropdown.Root\");\n const [local, rest] = splitProps(props, [\n \"appearance\",\n \"children\",\n \"class\",\n \"disabled\",\n \"iconOnly\",\n \"label\",\n \"ref\",\n \"size\",\n \"tabIndex\",\n \"title\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"type\",\n \"variant\",\n ]);\n let target: HTMLButtonElement | undefined;\n const disabled = () => Boolean(context.disabled() || local.disabled);\n // An icon-only trigger shows its label as a hint, like IconButton.\n const tooltip = useLabelTooltip(\n () => local.tooltip,\n () => (local.iconOnly ? (local.title ?? local.label) : undefined),\n );\n const register = (element: HTMLButtonElement) => {\n target = element;\n context.registerTrigger(element);\n if (typeof local.ref === \"function\") local.ref(element);\n };\n const click: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent> = (event) => {\n event.stopPropagation();\n context.toggle();\n };\n\n if (local.appearance !== \"plain\") {\n return (\n <Button\n {...rest}\n ref={register}\n aria-controls={context.menuId}\n aria-expanded={context.open()}\n aria-haspopup={context.popup()}\n aria-label={local.label}\n disabled={disabled()}\n tabIndex={disabled() ? -1 : local.tabIndex}\n onClick={click}\n onKeyDown={context.triggerKeyDown}\n type={local.type ?? \"button\"}\n class={`${local.iconOnly ? \"k2b-icon-button\" : \"\"} k2b-dropdown__trigger ${local.class ?? \"\"}`}\n size={local.size}\n variant={local.variant ?? (local.iconOnly ? \"ghost\" : undefined)}\n title={iconTitle(local.title, tooltip())}\n tooltip={tooltip()}\n tooltipDelay={local.tooltipDelay}\n tooltipPlacement={local.tooltipPlacement}\n >\n {local.children}\n </Button>\n );\n }\n\n return (\n <>\n <button\n {...rest}\n ref={register}\n aria-controls={context.menuId}\n aria-expanded={context.open()}\n aria-haspopup={context.popup()}\n aria-label={local.label}\n disabled={disabled()}\n tabIndex={disabled() ? -1 : local.tabIndex}\n onClick={click}\n onKeyDown={context.triggerKeyDown}\n type={local.type ?? \"button\"}\n class={`k2b-dropdown__trigger ${local.class ?? \"\"}`}\n title={iconTitle(local.title, tooltip())}\n >\n {local.children}\n </button>\n <Show when={tooltip() !== false && tooltip() !== undefined}>\n <Tooltip\n content={tooltip() as JSX.Element}\n target={() => target}\n delay={local.tooltipDelay}\n disabled={disabled()}\n placement={local.tooltipPlacement}\n />\n </Show>\n </>\n );\n}\n\n/** Accessible top-layer menu with explicit trigger ownership. */\nfunction DropdownRoot(props: DropdownProps): JSX.Element {\n const messages = useUiMessages();\n const locale = useLocale();\n /** The open phone sheet's cancel switch: it closes when the menu goes or is disabled, as the popover does. */\n let sheet: AbortController | undefined;\n const id = createUniqueId().replace(/[^a-zA-Z0-9_-]/g, \"-\");\n const menuId = `k2b-dropdown-${id}`;\n const [internalOpen, setInternalOpen] = createSignal(false);\n const [entriesShown, setEntriesShown] = createSignal(!props.lazy);\n let triggerRef: HTMLElement | undefined;\n const [query, setQuery] = createSignal(\"\");\n let searchApi: MenuSearchApi | undefined;\n /** Set while the menu is open from `openAt`: it appears beside `anchor`, and focus returns to `origin`. */\n let anchor: DropdownAnchor | undefined;\n let origin: DropdownReturnFocus | undefined;\n const originElement = () => (typeof origin === \"function\" ? origin() : origin);\n let menuRef: HTMLDivElement | undefined;\n let triggerRing = true;\n let mounted = false;\n /** Where a key on the trigger asked the focus to go; a controlled menu opens later, in its owner's update. */\n let keyFocus: \"first\" | \"last\" | false = false;\n let viewportListenersAttached = false;\n let resizeObserver: ResizeObserver | undefined;\n\n const isOpen = () => props.open ?? internalOpen();\n const position = (): DropdownPosition =>\n typeof props.position === \"function\" ? props.position() : (props.position ?? (props.align === \"end\" ? \"bottom-left\" : \"bottom-right\"));\n\n const place = () => {\n const at = anchor ?? triggerRef;\n if (!at || !menuRef) return;\n const rect = dropdownPosition(at.getBoundingClientRect(), menuRef.getBoundingClientRect(), position(), {\n width: window.innerWidth,\n height: window.innerHeight,\n });\n menuRef.style.left = `${rect.left}px`;\n menuRef.style.top = `${rect.top}px`;\n };\n const reposition = () => {\n if (isOpen()) place();\n };\n const attachViewportListeners = () => {\n if (viewportListenersAttached) return;\n viewportListenersAttached = true;\n window.addEventListener(\"resize\", reposition);\n window.addEventListener(\"scroll\", reposition, true);\n // A content-sized menu changes size when its items change while it is open.\n if (menuRef && typeof ResizeObserver !== \"undefined\") {\n resizeObserver ??= new ResizeObserver(reposition);\n resizeObserver.observe(menuRef);\n }\n };\n const detachViewportListeners = () => {\n if (!viewportListenersAttached) return;\n viewportListenersAttached = false;\n window.removeEventListener(\"resize\", reposition);\n window.removeEventListener(\"scroll\", reposition, true);\n resizeObserver?.disconnect();\n };\n const close = (restoreFocus = true) => {\n // Before hiding, so the popover does not return focus on its own.\n if (restoreFocus) returnFocus(originElement() ?? triggerRef, triggerRing);\n if (menuRef?.matches(\":popover-open\")) menuRef.hidePopover();\n setQuery(\"\");\n // Like `open`, expose the closed state now: the toggle event can arrive after the next key press, and a trigger\n // that still reads as open would ignore Enter (Escape, then Enter at once, must reopen).\n setInternalOpen(false);\n detachViewportListeners();\n };\n const open = (focus: \"first\" | \"last\" | false = \"first\") => {\n if (props.disabled || !menuRef || menuRef.matches(\":popover-open\")) return;\n triggerRing = ringOnReturn(originElement() ?? triggerRef);\n // A lazy menu's entries exist before it shows, so it places and focuses them as any other.\n setEntriesShown(true);\n menuRef.showPopover();\n // The toggle event arrives a task later; expose the open state before focus moves into the menu.\n setInternalOpen(true);\n attachViewportListeners();\n place();\n queueMicrotask(() => {\n if (!focus) return;\n if (searchApi) searchApi.focus(focus);\n else focusMenuItem(menuRef, focus === \"first\" ? 0 : -1);\n });\n };\n const requestOpen = (next: boolean, focus: \"first\" | \"last\" | false = \"first\") => {\n if (props.disabled && next) return;\n if (props.open !== undefined) {\n props.onOpenChange?.(next);\n return;\n }\n if (next && props.phone === \"sheet\" && prefersMenuSheet()) {\n if (sheet) return;\n const current = new AbortController();\n sheet = current;\n // A sheet opened without its trigger returns focus to its own target, which an entry may have moved,\n // rather than to whatever had focus as it opened.\n const anchored = origin !== undefined;\n const ring = anchored && ringOnReturn(originElement());\n if (anchored && document.activeElement instanceof HTMLElement) document.activeElement.blur();\n // The sheet is this menu's open state: the trigger reports it and the owner hears both ends.\n setInternalOpen(true);\n props.onOpenChange?.(true);\n void openMenuSheet({\n Items: DropdownItems,\n items: props.items,\n label: props.label ?? messages().dropdownMenu,\n locale: locale(),\n top: props.sheetTop,\n search: props.search,\n icons: props.icons,\n note: props.note,\n signal: current.signal,\n }).finally(() => {\n sheet = undefined;\n // An entry that moved focus elsewhere, such as into a field, keeps it.\n const target = anchored ? originElement() : undefined;\n const focused = document.activeElement;\n if (target?.isConnected && (!focused || focused === document.body)) returnFocus(target, ring);\n setInternalOpen(false);\n props.onOpenChange?.(false);\n props.onClose?.();\n });\n return;\n }\n if (next) open(focus);\n else close(false);\n };\n const handleMenuKeyDown = (event: KeyboardEvent) => {\n const items = actionableItems(menuRef);\n // A searchable menu's field keeps the focus and moves the marked entry itself.\n if (!props.search && (focusMenuRow(items, event.key) || focusRowSegment(items, event.key))) {\n event.preventDefault();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n returnFocus(originElement() ?? triggerRef, triggerRing);\n requestOpen(false);\n } else if (event.key === \"Tab\") {\n requestOpen(false);\n }\n };\n\n const triggerKey = (event: KeyboardEvent) => {\n if (![\"Enter\", \" \", \"ArrowDown\", \"ArrowUp\"].includes(event.key)) return;\n // Ctrl+Enter and the like keep their browser meaning on an adopted link, such as opening it in a new tab.\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n event.preventDefault();\n event.stopPropagation();\n if (isOpen()) {\n if (searchApi) searchApi.focus(event.key === \"ArrowUp\" ? \"last\" : \"first\");\n else focusMenuItem(menuRef, event.key === \"ArrowUp\" ? -1 : 0);\n return;\n }\n anchor = origin = undefined;\n keyFocus = event.key === \"ArrowUp\" ? \"last\" : \"first\";\n requestOpen(true, keyFocus);\n keyFocus = false;\n };\n const toggle = () => {\n if (!isOpen()) anchor = origin = undefined;\n requestOpen(!isOpen());\n };\n\n const context: DropdownContextValue = {\n disabled: () => Boolean(props.disabled),\n menuId,\n open: isOpen,\n registerTrigger: (element) => {\n triggerRef = element;\n },\n toggle,\n popup: () => (props.search ? \"dialog\" : \"menu\"),\n triggerKeyDown: (event) => triggerKey(event),\n };\n\n createEffect(() => {\n const controlled = props.open;\n if (!mounted || controlled === undefined || !menuRef) return;\n if (controlled && !menuRef.matches(\":popover-open\")) open(keyFocus);\n if (!controlled && menuRef.matches(\":popover-open\")) close(false);\n });\n createEffect(() => {\n if (!props.disabled) return;\n sheet?.abort();\n if (mounted) close(false);\n });\n props.openAt?.((at, focus) => {\n if (isOpen()) return;\n anchor = at;\n origin = focus;\n requestOpen(true);\n });\n props.closeWith?.(() => {\n sheet?.abort();\n if (isOpen()) close();\n });\n onMount(() => {\n mounted = true;\n if (props.open) open(false);\n onCleanup(detachViewportListeners);\n const adopted = props.attach?.();\n if (!adopted) return;\n triggerRef = adopted;\n adopted.setAttribute(\"aria-controls\", menuId);\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n event.preventDefault();\n event.stopPropagation();\n toggle();\n };\n adopted.addEventListener(\"click\", onClick);\n adopted.addEventListener(\"keydown\", triggerKey);\n createEffect(() => adopted.setAttribute(\"aria-expanded\", String(isOpen())));\n onCleanup(() => {\n adopted.removeEventListener(\"click\", onClick);\n adopted.removeEventListener(\"keydown\", triggerKey);\n });\n });\n onCleanup(() => sheet?.abort());\n\n return (\n <DropdownContext.Provider value={context}>\n <span class={`k2b-dropdown ${props.class ?? \"\"}`}>\n {props.children}\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: the role is menu, or dialog with search; both take a name. */}\n {/* biome-ignore lint/a11y/noStaticElementInteractions: a menu or dialog popup owns its keys. */}\n <div\n ref={menuRef}\n id={menuId}\n popover=\"auto\"\n role={props.search ? \"dialog\" : \"menu\"}\n aria-label={props.label ?? messages().dropdownMenu}\n aria-describedby={props.note ? `${menuId}-note` : undefined}\n class={`k2b-dropdown__menu ${props.menuClass ?? \"\"}`}\n style={props.width ? { \"--k2b-dropdown-width\": props.width } : undefined}\n data-width={props.width ? \"fixed\" : undefined}\n data-variant={props.variant ?? \"default\"}\n data-icons={props.icons === \"tile\" ? \"tile\" : undefined}\n data-search={props.search ? \"\" : undefined}\n data-position={position()}\n onKeyDown={handleMenuKeyDown}\n onToggle={(event) => {\n const nextOpen = (event as ToggleEvent).newState === \"open\";\n const wasOpen = (event as ToggleEvent).oldState === \"open\";\n setInternalOpen(nextOpen);\n if (nextOpen) setEntriesShown(true);\n if (nextOpen) attachViewportListeners();\n else detachViewportListeners();\n if (props.open === undefined || props.open !== nextOpen) props.onOpenChange?.(nextOpen);\n // A light dismiss hides the menu with focus inside it; an opener without a trigger takes it back.\n const focused = document.activeElement;\n const target = wasOpen && !nextOpen ? originElement() : undefined;\n if (target?.isConnected && (!focused || focused === document.body || menuRef?.contains(focused)))\n returnFocus(target, triggerRing);\n if (wasOpen && !nextOpen) setQuery(\"\");\n if (wasOpen && !nextOpen) props.onClose?.();\n if (!nextOpen && props.open === true) queueMicrotask(() => props.open === true && open(false));\n }}\n >\n <Show when={entriesShown()}>\n <Show when={props.search} fallback={<DropdownItems items={props.items} close={close} />}>\n {(search) => (\n <MenuSearch\n Items={DropdownItems}\n items={props.items}\n search={search()}\n label={props.label ?? messages().dropdownMenu}\n query={query}\n setQuery={setQuery}\n close={close}\n api={(api) => {\n searchApi = api;\n onCleanup(() => {\n if (searchApi === api) searchApi = undefined;\n });\n }}\n />\n )}\n </Show>\n {/* Hidden from the menu's children, which are entries only; the menu reads it as its description. */}\n <Show when={props.note}>\n <p id={`${menuId}-note`} class=\"k2b-dropdown__note\" aria-hidden=\"true\">\n {props.note}\n </p>\n </Show>\n </Show>\n </div>\n </span>\n </DropdownContext.Provider>\n );\n}\n\ntype DropdownComponent = ((props: DropdownProps) => JSX.Element) & {\n Root: (props: DropdownProps) => JSX.Element;\n Trigger: (props: DropdownTriggerProps) => JSX.Element;\n Item: (props: DropdownItemProps) => JSX.Element;\n};\n\nexport const Dropdown = DropdownRoot as DropdownComponent;\nDropdown.Root = DropdownRoot;\nDropdown.Trigger = DropdownTrigger;\nDropdown.Item = DropdownItem;\n\nexport default Dropdown;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["actions/index.ts"],"sourcesContent":["export type { ButtonAlign, ButtonLinkProps, ButtonProps, ButtonSize, ButtonVariant, IconButtonLinkProps, IconButtonProps } from \"./Button\";\nexport { Button, ButtonLink, IconButton, IconButtonLink } from \"./Button\";\nexport type { ContextMenuProps } from \"./ContextMenu\";\nexport { ContextMenu } from \"./ContextMenu\";\nexport type { CopyButtonProps, CopyButtonValue } from \"./CopyButton\";\nexport { CopyButton } from \"./CopyButton\";\nexport type { DisclosureProps } from \"./Disclosure\";\nexport { Disclosure } from \"./Disclosure\";\nexport type { DragPayload, DragSourceProps, DropTargetProps } from \"./DragAndDrop\";\nexport { activeDrag, DragSource, DropTarget, useKeyboardDrag } from \"./DragAndDrop\";\nexport type {\n DropdownAction,\n DropdownActionBase,\n DropdownAnchor,\n DropdownChoice,\n DropdownItemProps,\n DropdownPosition,\n DropdownProps,\n DropdownReturnFocus,\n DropdownSection,\n DropdownTriggerProps,\n} from \"./Dropdown\";\nexport { Dropdown, DropdownItem, dropdownPosition } from \"./Dropdown\";\nexport type { FilterChipOption, FilterChipProps, FilterChipSection, FilterToggleProps } from \"./FilterChip\";\nexport { FilterChip, FilterToggle } from \"./FilterChip\";\nexport type { GestureKind, GestureMenuAction, GestureMenuItem, GestureMenuProps, GestureMenuSection } from \"./GestureMenu\";\nexport { GestureMenu } from \"./GestureMenu\";\nexport type { RemoveButtonProps } from \"./RemoveButton\";\nexport { RemoveButton } from \"./RemoveButton\";\nexport type { SegmentedControlProps, SegmentOption } from \"./SegmentedControl\";\nexport { SegmentedControl } from \"./SegmentedControl\";\nexport type { SelectionToolbarProps } from \"./SelectionToolbar\";\nexport { SelectionToolbar } from \"./SelectionToolbar\";\nexport type { SplitButtonProps } from \"./SplitButton\";\nexport { SplitButton } from \"./SplitButton\";\nexport type {\n SpotlightButtonProps,\n SpotlightButtonVariant,\n SpotlightSearchOptions,\n SpotlightSearchResolver,\n} from \"./SpotlightSearch\";\nexport {\n openSpotlightSearch,\n SpotlightButton,\n} from \"./SpotlightSearch\";\nexport type { TabOption, TabsItemProps, TabsProps } from \"./Tabs\";\nexport { Tabs } from \"./Tabs\";\nexport type { ToolbarActionProps, ToolbarGroupProps, ToolbarLabelProps, ToolbarProps, ToolbarSeparatorProps } from \"./Toolbar\";\nexport { Toolbar } from \"./Toolbar\";\nexport type { ViewTab, ViewTabsProps } from \"./ViewTabs\";\nexport { ViewTabs } from \"./ViewTabs\";\n"],"mappings":"AACA,SAAS,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,QAAQ,UAAU;AAEzE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,QAAQ,eAAe;AAanF,SAAS,QAAQ,EAAE,YAAY,EAAE,gBAAgB,QAAQ,YAAY;AAErE,SAAS,UAAU,EAAE,YAAY,QAAQ,cAAc;AAEvD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SAAS,gBAAgB,QAAQ,oBAAoB;AAErD,SAAS,gBAAgB,QAAQ,oBAAoB;AAErD,SAAS,WAAW,QAAQ,eAAe;AAO3C,SACE,mBAAmB,EACnB,eAAe,QACV,mBAAmB;AAE1B,SAAS,IAAI,QAAQ,QAAQ;AAE7B,SAAS,OAAO,QAAQ,WAAW;AAEnC,SAAS,QAAQ,QAAQ,YAAY","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/index.ts"],"sourcesContent":["export type { ButtonAlign, ButtonLinkProps, ButtonProps, ButtonSize, ButtonVariant, IconButtonLinkProps, IconButtonProps } from \"./Button\";\nexport { Button, ButtonLink, IconButton, IconButtonLink } from \"./Button\";\nexport type { ContextMenuProps } from \"./ContextMenu\";\nexport { ContextMenu } from \"./ContextMenu\";\nexport type { CopyButtonProps, CopyButtonValue } from \"./CopyButton\";\nexport { CopyButton } from \"./CopyButton\";\nexport type { DisclosureProps } from \"./Disclosure\";\nexport { Disclosure } from \"./Disclosure\";\nexport type { DragPayload, DragSourceProps, DropTargetProps } from \"./DragAndDrop\";\nexport { activeDrag, DragSource, DropTarget, useKeyboardDrag } from \"./DragAndDrop\";\nexport type {\n DropdownAction,\n DropdownActionBase,\n DropdownAnchor,\n DropdownChoice,\n DropdownItemProps,\n DropdownPosition,\n DropdownProps,\n DropdownReturnFocus,\n DropdownSearch,\n DropdownSection,\n DropdownTriggerProps,\n} from \"./Dropdown\";\nexport { Dropdown, DropdownItem, dropdownPosition } from \"./Dropdown\";\nexport type { FilterChipOption, FilterChipProps, FilterChipSection, FilterToggleProps } from \"./FilterChip\";\nexport { FilterChip, FilterToggle } from \"./FilterChip\";\nexport type { GestureKind, GestureMenuAction, GestureMenuItem, GestureMenuProps, GestureMenuSection } from \"./GestureMenu\";\nexport { GestureMenu } from \"./GestureMenu\";\nexport type { RemoveButtonProps } from \"./RemoveButton\";\nexport { RemoveButton } from \"./RemoveButton\";\nexport type { SegmentedControlProps, SegmentOption } from \"./SegmentedControl\";\nexport { SegmentedControl } from \"./SegmentedControl\";\nexport type { SelectionToolbarProps } from \"./SelectionToolbar\";\nexport { SelectionToolbar } from \"./SelectionToolbar\";\nexport type { SplitButtonProps } from \"./SplitButton\";\nexport { SplitButton } from \"./SplitButton\";\nexport type {\n SpotlightButtonProps,\n SpotlightButtonVariant,\n SpotlightSearchOptions,\n SpotlightSearchResolver,\n} from \"./SpotlightSearch\";\nexport {\n openSpotlightSearch,\n SpotlightButton,\n} from \"./SpotlightSearch\";\nexport type { TabOption, TabsItemProps, TabsProps } from \"./Tabs\";\nexport { Tabs } from \"./Tabs\";\nexport type { ToolbarActionProps, ToolbarGroupProps, ToolbarLabelProps, ToolbarProps, ToolbarSeparatorProps } from \"./Toolbar\";\nexport { Toolbar } from \"./Toolbar\";\nexport type { ViewTab, ViewTabsProps } from \"./ViewTabs\";\nexport { ViewTabs } from \"./ViewTabs\";\n"],"mappings":"AACA,SAAS,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,QAAQ,UAAU;AAEzE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,QAAQ,eAAe;AAcnF,SAAS,QAAQ,EAAE,YAAY,EAAE,gBAAgB,QAAQ,YAAY;AAErE,SAAS,UAAU,EAAE,YAAY,QAAQ,cAAc;AAEvD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SAAS,gBAAgB,QAAQ,oBAAoB;AAErD,SAAS,gBAAgB,QAAQ,oBAAoB;AAErD,SAAS,WAAW,QAAQ,eAAe;AAO3C,SACE,mBAAmB,EACnB,eAAe,QACV,mBAAmB;AAE1B,SAAS,IAAI,QAAQ,QAAQ;AAE7B,SAAS,OAAO,QAAQ,WAAW;AAEnC,SAAS,QAAQ,QAAQ,YAAY","ignoreList":[]}
@@ -0,0 +1,166 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
+ import { insert as _$insert } from "solid-js/web";
4
+ import { createComponent as _$createComponent } from "solid-js/web";
5
+ import { getNextElement as _$getNextElement } from "solid-js/web";
6
+ import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
7
+ import { setProperty as _$setProperty } from "solid-js/web";
8
+ import { effect as _$effect } from "solid-js/web";
9
+ import { setAttribute as _$setAttribute } from "solid-js/web";
10
+ import { use as _$use } from "solid-js/web";
11
+ var _tmpl$ = /*#__PURE__*/_$template(`<label class=k2b-dropdown__search><i class="ti ti-search"aria-hidden=true></i><input type=search role=combobox aria-expanded=true aria-autocomplete=list autocomplete=off enterkeyhint=go>`),
12
+ _tmpl$2 = /*#__PURE__*/_$template(`<div role=listbox class=k2b-dropdown__list>`),
13
+ _tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-sr-only role=status>`),
14
+ _tmpl$4 = /*#__PURE__*/_$template(`<p class=k2b-dropdown__empty>`);
15
+ import { createEffect, createMemo, createUniqueId, on, onMount, Show } from "solid-js";
16
+ import { useLocale } from "../intl/locale";
17
+ import { useUiMessages } from "../intl/messages";
18
+ const entriesOf = items => items.flatMap(item => "items" in item ? item.items : [item]);
19
+
20
+ /** The actions and choices whose label or description contains the query, kept in their sections. */
21
+ export const filterDropdownItems = (items, query, locale) => {
22
+ const needle = query.trim().toLocaleLowerCase(locale);
23
+ const matches = entry => `${entry.label} ${entry.description ?? ""}`.toLocaleLowerCase(locale).includes(needle);
24
+ return items.flatMap(item => {
25
+ if (!("items" in item)) return matches(item) ? [item] : [];
26
+ const kept = item.items.filter(matches);
27
+ return kept.length ? [{
28
+ ...item,
29
+ items: kept
30
+ }] : [];
31
+ });
32
+ };
33
+ const optionsOf = list => list ? Array.from(list.querySelectorAll("[role='option']:not([aria-disabled='true'])")) : [];
34
+ /**
35
+ * A search field over a list box of the menu's entries: the combobox pattern. The field keeps the focus, the marked
36
+ * entry is its active descendant, and a polite status says how many entries match.
37
+ */
38
+ export function MenuSearch(props) {
39
+ const messages = useUiMessages();
40
+ const locale = useLocale();
41
+ const id = createUniqueId().replace(/[^a-zA-Z0-9_-]/g, "-");
42
+ const listId = `k2b-dropdown-search-${id}`;
43
+ let input;
44
+ let list;
45
+ let active = 0;
46
+ const blank = () => props.query().trim() === "";
47
+ const shown = createMemo(() => blank() ? props.items : props.search.filter?.(props.query()) ?? filterDropdownItems(props.items, props.query(), locale()));
48
+ const matches = () => entriesOf(shown()).filter(entry => !entry.disabled).length;
49
+ const status = () => blank() ? "" : props.search.status?.(props.query(), matches()) ?? messages().searchMatches({
50
+ count: matches()
51
+ });
52
+ const mark = index => {
53
+ // An entry that became disabled keeps no stale ID or mark.
54
+ for (const stale of list.querySelectorAll("[role='option']")) {
55
+ stale.removeAttribute("id");
56
+ stale.removeAttribute("aria-selected");
57
+ stale.removeAttribute("data-active");
58
+ }
59
+ const options = optionsOf(list);
60
+ active = options.length ? (index + options.length) % options.length : 0;
61
+ options.forEach((option, position) => {
62
+ option.id = `${listId}-${position}`;
63
+ option.setAttribute("aria-selected", String(position === active));
64
+ option.toggleAttribute("data-active", position === active);
65
+ });
66
+ const current = options[active];
67
+ if (current) {
68
+ input.setAttribute("aria-activedescendant", current.id);
69
+ current.scrollIntoView?.({
70
+ block: "nearest"
71
+ });
72
+ } else input.removeAttribute("aria-activedescendant");
73
+ };
74
+ // A new query shows new entries: the first of them is marked again, after they rendered.
75
+ createEffect(on(shown, () => queueMicrotask(() => mark(0)), {
76
+ defer: true
77
+ }));
78
+ onMount(() => {
79
+ mark(0);
80
+ props.api?.({
81
+ focus: which => {
82
+ input.focus({
83
+ preventScroll: true
84
+ });
85
+ mark(which === "first" ? 0 : -1);
86
+ }
87
+ });
88
+ });
89
+ const onKeyDown = event => {
90
+ if (event.isComposing) return;
91
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
92
+ event.preventDefault();
93
+ mark(active + (event.key === "ArrowDown" ? 1 : -1));
94
+ } else if (event.key === "Enter") {
95
+ event.preventDefault();
96
+ optionsOf(list)[active]?.click();
97
+ }
98
+ };
99
+ return [(() => {
100
+ var _el$ = _$getNextElement(_tmpl$),
101
+ _el$2 = _el$.firstChild,
102
+ _el$3 = _el$2.nextSibling;
103
+ _el$3.$$keydown = onKeyDown;
104
+ _el$3.$$input = event => props.setQuery(event.currentTarget.value);
105
+ var _ref$ = input;
106
+ typeof _ref$ === "function" ? _$use(_ref$, _el$3) : input = _el$3;
107
+ _$setAttribute(_el$3, "aria-controls", listId);
108
+ _$setAttribute(_el$3, "spellcheck", false);
109
+ _$effect(_p$ => {
110
+ var _v$ = props.search.label,
111
+ _v$2 = props.search.placeholder ?? props.search.label;
112
+ _v$ !== _p$.e && _$setAttribute(_el$3, "aria-label", _p$.e = _v$);
113
+ _v$2 !== _p$.t && _$setAttribute(_el$3, "placeholder", _p$.t = _v$2);
114
+ return _p$;
115
+ }, {
116
+ e: undefined,
117
+ t: undefined
118
+ });
119
+ _$effect(() => _$setProperty(_el$3, "value", props.query()));
120
+ _$runHydrationEvents();
121
+ return _el$;
122
+ })(), (() => {
123
+ var _el$4 = _$getNextElement(_tmpl$2);
124
+ _el$4.$$pointermove = event => {
125
+ const option = event.target.closest("[role='option']");
126
+ const index = option ? optionsOf(list).indexOf(option) : -1;
127
+ if (index >= 0 && index !== active) mark(index);
128
+ };
129
+ _el$4.$$mousedown = event => event.preventDefault();
130
+ var _ref$2 = list;
131
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$4) : list = _el$4;
132
+ _$setAttribute(_el$4, "id", listId);
133
+ _$insert(_el$4, _$createComponent(Show, {
134
+ get when() {
135
+ return shown().length;
136
+ },
137
+ get fallback() {
138
+ return (() => {
139
+ var _el$6 = _$getNextElement(_tmpl$4);
140
+ _$insert(_el$6, () => messages().noResults);
141
+ return _el$6;
142
+ })();
143
+ },
144
+ get children() {
145
+ return _$createComponent(props.Items, {
146
+ get items() {
147
+ return shown();
148
+ },
149
+ get close() {
150
+ return props.close;
151
+ },
152
+ role: "option"
153
+ });
154
+ }
155
+ }));
156
+ _$effect(() => _$setAttribute(_el$4, "aria-label", props.label));
157
+ _$runHydrationEvents();
158
+ return _el$4;
159
+ })(), (() => {
160
+ var _el$5 = _$getNextElement(_tmpl$3);
161
+ _$insert(_el$5, status);
162
+ return _el$5;
163
+ })()];
164
+ }
165
+ _$delegateEvents(["input", "keydown", "mousedown", "pointermove"]);
166
+ //# sourceMappingURL=menu-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["actions/menu-search.tsx"],"sourcesContent":["import { type Accessor, createEffect, createMemo, createUniqueId, type JSX, on, onMount, Show } from \"solid-js\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { DropdownItem, DropdownSearch } from \"./Dropdown\";\n\ntype Entry = Exclude<DropdownItem, { items: unknown }>;\n\nconst entriesOf = (items: readonly DropdownItem[]): Entry[] => items.flatMap((item) => (\"items\" in item ? item.items : [item]));\n\n/** The actions and choices whose label or description contains the query, kept in their sections. */\nexport const filterDropdownItems = (items: readonly DropdownItem[], query: string, locale?: string): DropdownItem[] => {\n const needle = query.trim().toLocaleLowerCase(locale);\n const matches = (entry: Entry) => `${entry.label} ${entry.description ?? \"\"}`.toLocaleLowerCase(locale).includes(needle);\n return items.flatMap((item): DropdownItem[] => {\n if (!(\"items\" in item)) return matches(item) ? [item] : [];\n const kept = item.items.filter(matches);\n return kept.length ? [{ ...item, items: kept }] : [];\n });\n};\n\nconst optionsOf = (list: HTMLElement | undefined): HTMLElement[] =>\n list ? Array.from(list.querySelectorAll<HTMLElement>(\"[role='option']:not([aria-disabled='true'])\")) : [];\n\nexport type MenuSearchApi = {\n /** Moves the focus into the field and marks the first or last entry. */\n focus: (mark: \"first\" | \"last\") => void;\n};\n\n/**\n * A search field over a list box of the menu's entries: the combobox pattern. The field keeps the focus, the marked\n * entry is its active descendant, and a polite status says how many entries match.\n */\nexport function MenuSearch(props: {\n Items: (props: { items: readonly DropdownItem[]; close: (restoreFocus?: boolean) => void; role?: \"menuitem\" | \"option\" }) => JSX.Element;\n items: readonly DropdownItem[];\n search: DropdownSearch;\n /** Names the list box. */\n label: string;\n query: Accessor<string>;\n setQuery: (query: string) => void;\n close: (restoreFocus?: boolean) => void;\n api?: (api: MenuSearchApi) => void;\n}): JSX.Element {\n const messages = useUiMessages();\n const locale = useLocale();\n const id = createUniqueId().replace(/[^a-zA-Z0-9_-]/g, \"-\");\n const listId = `k2b-dropdown-search-${id}`;\n let input!: HTMLInputElement;\n let list!: HTMLDivElement;\n let active = 0;\n const blank = () => props.query().trim() === \"\";\n const shown = createMemo(() =>\n blank() ? props.items : (props.search.filter?.(props.query()) ?? filterDropdownItems(props.items, props.query(), locale())),\n );\n const matches = () => entriesOf(shown()).filter((entry) => !entry.disabled).length;\n const status = () => (blank() ? \"\" : (props.search.status?.(props.query(), matches()) ?? messages().searchMatches({ count: matches() })));\n\n const mark = (index: number) => {\n // An entry that became disabled keeps no stale ID or mark.\n for (const stale of list.querySelectorAll<HTMLElement>(\"[role='option']\")) {\n stale.removeAttribute(\"id\");\n stale.removeAttribute(\"aria-selected\");\n stale.removeAttribute(\"data-active\");\n }\n const options = optionsOf(list);\n active = options.length ? (index + options.length) % options.length : 0;\n options.forEach((option, position) => {\n option.id = `${listId}-${position}`;\n option.setAttribute(\"aria-selected\", String(position === active));\n option.toggleAttribute(\"data-active\", position === active);\n });\n const current = options[active];\n if (current) {\n input.setAttribute(\"aria-activedescendant\", current.id);\n current.scrollIntoView?.({ block: \"nearest\" });\n } else input.removeAttribute(\"aria-activedescendant\");\n };\n // A new query shows new entries: the first of them is marked again, after they rendered.\n createEffect(on(shown, () => queueMicrotask(() => mark(0)), { defer: true }));\n onMount(() => {\n mark(0);\n props.api?.({\n focus: (which) => {\n input.focus({ preventScroll: true });\n mark(which === \"first\" ? 0 : -1);\n },\n });\n });\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.isComposing) return;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n mark(active + (event.key === \"ArrowDown\" ? 1 : -1));\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n optionsOf(list)[active]?.click();\n }\n };\n\n return (\n <>\n <label class=\"k2b-dropdown__search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={input}\n type=\"search\"\n role=\"combobox\"\n aria-label={props.search.label}\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n spellcheck={false}\n enterkeyhint=\"go\"\n placeholder={props.search.placeholder ?? props.search.label}\n value={props.query()}\n onInput={(event) => props.setQuery(event.currentTarget.value)}\n onKeyDown={onKeyDown}\n />\n </label>\n <div\n ref={list}\n id={listId}\n role=\"listbox\"\n aria-label={props.label}\n class=\"k2b-dropdown__list\"\n // A press on an entry leaves the focus in the field, also for an entry that keeps the menu open.\n onMouseDown={(event) => event.preventDefault()}\n onPointerMove={(event) => {\n const option = (event.target as Element).closest<HTMLElement>(\"[role='option']\");\n const index = option ? optionsOf(list).indexOf(option) : -1;\n if (index >= 0 && index !== active) mark(index);\n }}\n >\n <Show when={shown().length} fallback={<p class=\"k2b-dropdown__empty\">{messages().noResults}</p>}>\n <props.Items items={shown()} close={props.close} role=\"option\" />\n </Show>\n </div>\n <span class=\"k2b-sr-only\" role=\"status\">\n {status()}\n </span>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}