@pipe0/react 1.0.37 → 1.0.39

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 (96) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/components/compound/effect-catalog/category-filter.mjs +1 -1
  3. package/dist/components/compound/effect-catalog/category-filter.mjs.map +1 -1
  4. package/dist/components/compound/effect-catalog/search-filter.mjs +1 -1
  5. package/dist/components/compound/effect-catalog/search-filter.mjs.map +1 -1
  6. package/dist/components/compound/pipe-catalog/category-filter.mjs +1 -1
  7. package/dist/components/compound/pipe-catalog/category-filter.mjs.map +1 -1
  8. package/dist/components/compound/pipe-catalog/input-field-filter.mjs +1 -1
  9. package/dist/components/compound/pipe-catalog/input-field-filter.mjs.map +1 -1
  10. package/dist/components/compound/pipe-catalog/output-field-filter.mjs +1 -1
  11. package/dist/components/compound/pipe-catalog/output-field-filter.mjs.map +1 -1
  12. package/dist/components/compound/pipe-catalog/provider-filter.mjs +1 -1
  13. package/dist/components/compound/pipe-catalog/provider-filter.mjs.map +1 -1
  14. package/dist/components/compound/pipe-catalog/search-filter.mjs +1 -1
  15. package/dist/components/compound/pipe-catalog/search-filter.mjs.map +1 -1
  16. package/dist/components/compound/pipe-catalog/tag-filter.mjs +1 -1
  17. package/dist/components/compound/pipe-catalog/tag-filter.mjs.map +1 -1
  18. package/dist/components/compound/search-catalog/category-filter.mjs +1 -1
  19. package/dist/components/compound/search-catalog/category-filter.mjs.map +1 -1
  20. package/dist/components/compound/search-catalog/output-field-filter.mjs +1 -1
  21. package/dist/components/compound/search-catalog/output-field-filter.mjs.map +1 -1
  22. package/dist/components/compound/search-catalog/provider-filter.mjs +1 -1
  23. package/dist/components/compound/search-catalog/provider-filter.mjs.map +1 -1
  24. package/dist/components/compound/search-catalog/search-filter.mjs +1 -1
  25. package/dist/components/compound/search-catalog/search-filter.mjs.map +1 -1
  26. package/dist/components/compound/search-catalog/tag-filter.mjs +1 -1
  27. package/dist/components/compound/search-catalog/tag-filter.mjs.map +1 -1
  28. package/dist/components/defaults/adapters/json-extraction-input.mjs +1 -1
  29. package/dist/components/defaults/adapters/loose-object-input.mjs +1 -1
  30. package/dist/components/defaults/adapters/loose-object-input.mjs.map +1 -1
  31. package/dist/components/defaults/adapters/pipes-run-if-input.mjs +1 -1
  32. package/dist/components/defaults/adapters/prompt-input.mjs +1 -1
  33. package/dist/components/defaults/adapters/providers-input.mjs +1 -2
  34. package/dist/components/defaults/adapters/providers-input.mjs.map +1 -1
  35. package/dist/components/defaults/adapters/select-input.mjs +1 -1
  36. package/dist/components/defaults/adapters/select-input.mjs.map +1 -1
  37. package/dist/components/defaults/adapters/tagged-ordered-multi-create-input.mjs +2 -3
  38. package/dist/components/defaults/adapters/tagged-ordered-multi-create-input.mjs.map +1 -1
  39. package/dist/components/defaults/adapters/tagged-text-input.mjs +1 -1
  40. package/dist/components/defaults/adapters/tagged-text-input.mjs.map +1 -1
  41. package/dist/components/defaults/catalog/active-filter-pill.mjs +1 -1
  42. package/dist/components/defaults/catalog/active-filter-pill.mjs.map +1 -1
  43. package/dist/components/defaults/catalog/card-derived.d.mts.map +1 -1
  44. package/dist/components/defaults/catalog/card-derived.mjs +9 -6
  45. package/dist/components/defaults/catalog/card-derived.mjs.map +1 -1
  46. package/dist/components/defaults/catalog/category-section.d.mts +2 -2
  47. package/dist/components/defaults/catalog/category-section.d.mts.map +1 -1
  48. package/dist/components/defaults/catalog/category-section.mjs +10 -15
  49. package/dist/components/defaults/catalog/category-section.mjs.map +1 -1
  50. package/dist/components/defaults/catalog/provider-avatars.mjs +1 -1
  51. package/dist/components/defaults/catalog/provider-avatars.mjs.map +1 -1
  52. package/dist/components/defaults/layout/field-wrapper.mjs +2 -2
  53. package/dist/components/defaults/layout/field-wrapper.mjs.map +1 -1
  54. package/dist/components/defaults/layout/group.mjs +2 -1
  55. package/dist/components/defaults/layout/group.mjs.map +1 -1
  56. package/dist/components/defaults/layout/section.mjs +5 -8
  57. package/dist/components/defaults/layout/section.mjs.map +1 -1
  58. package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs +1 -1
  59. package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs.map +1 -1
  60. package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs +1 -1
  61. package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs.map +1 -1
  62. package/dist/components/internal/combobox/include-exclude-combobox.mjs +2 -3
  63. package/dist/components/internal/combobox/include-exclude-combobox.mjs.map +1 -1
  64. package/dist/components/internal/combobox/suggest-combobox.mjs +2 -3
  65. package/dist/components/internal/combobox/suggest-combobox.mjs.map +1 -1
  66. package/dist/components/internal/icons.d.mts +14 -0
  67. package/dist/components/internal/icons.d.mts.map +1 -0
  68. package/dist/components/internal/icons.mjs +137 -185
  69. package/dist/components/internal/icons.mjs.map +1 -1
  70. package/dist/components/ui/alert.d.mts +1 -1
  71. package/dist/components/ui/button.d.mts +1 -1
  72. package/dist/components/ui/combobox.mjs +4 -4
  73. package/dist/components/ui/combobox.mjs.map +1 -1
  74. package/dist/components/ui/select.mjs +5 -5
  75. package/dist/components/ui/select.mjs.map +1 -1
  76. package/dist/hooks/use-pipe-catalog-table.d.mts +8 -8
  77. package/dist/hooks/use-search-catalog-table.d.mts +6 -6
  78. package/dist/styles/pipe0-form.css +1 -1
  79. package/dist/utils/catalog-helpers.d.mts +4 -5
  80. package/dist/utils/catalog-helpers.d.mts.map +1 -1
  81. package/dist/utils/catalog-helpers.mjs +4 -4
  82. package/dist/utils/catalog-helpers.mjs.map +1 -1
  83. package/dist/widgets/avatar-group.d.mts +12 -3
  84. package/dist/widgets/avatar-group.d.mts.map +1 -1
  85. package/dist/widgets/avatar-group.mjs +173 -50
  86. package/dist/widgets/avatar-group.mjs.map +1 -1
  87. package/dist/widgets/field-type-badge.d.mts.map +1 -1
  88. package/dist/widgets/field-type-badge.mjs +1 -1
  89. package/dist/widgets/field-type-badge.mjs.map +1 -1
  90. package/dist/widgets/icon-glyph.mjs +2 -3
  91. package/dist/widgets/icon-glyph.mjs.map +1 -1
  92. package/dist/widgets/token-pricing-badge.mjs +1 -1
  93. package/dist/widgets/token-pricing-badge.mjs.map +1 -1
  94. package/package.json +4 -3
  95. package/dist/widgets/glyphs/linkedin.mjs +0 -32
  96. package/dist/widgets/glyphs/linkedin.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"suggest-combobox.mjs","names":[],"sources":["../../../../src/components/internal/combobox/suggest-combobox.tsx"],"sourcesContent":["import {\n closestCenter,\n DndContext,\n type DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { horizontalListSortingStrategy, SortableContext, useSortable } from \"@dnd-kit/sortable\";\nimport type { WidgetsByKind } from \"@pipe0/base\";\nimport { XIcon } from \"lucide-react\";\nimport { type ReactNode, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport useSWR from \"swr\";\nimport { useDebouncedFn } from \"../../../hooks/use-debounced-fn.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { FieldTypeBadge } from \"../../../widgets/field-type-badge.js\";\nimport { WidgetStrip } from \"../../../widgets/widget-strip.js\";\nimport { Button } from \"../../ui/button.js\";\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxItem,\n ComboboxList,\n ComboboxTrigger,\n useComboboxAnchor,\n} from \"../../ui/combobox.js\";\nimport { IconGripVertical } from \"../icons.js\";\nimport { filterOptions, type PayloadOption } from \"../multi-select-popover-trigger.js\";\n\n/** Internal item type — the base-ui Combobox handles `{value, label}` natively. */\ntype ComboboxOption = PayloadOption & { __create?: boolean };\n\n/** Split widgets so `field_type` can render on the trailing edge of dropdown\n * rows while every other widget stays in the leading strip. */\nfunction splitWidgets(widgets: WidgetsByKind): {\n leading: WidgetsByKind | undefined;\n} {\n const { field_type: _ignored, ...rest } = widgets;\n const hasLeading = Object.values(rest).some((v) => v != null);\n return { leading: hasLeading ? rest : undefined };\n}\n\n/** Reorderable chip matching `ComboboxChip` visually, with a grip handle. */\nfunction SortableChip({\n id,\n onRemove,\n children,\n}: {\n id: string;\n onRemove: () => void;\n children: ReactNode;\n}) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id,\n });\n const style: React.CSSProperties = {\n transform: transform\n ? `translate3d(${Math.round(transform.x)}px, ${Math.round(transform.y)}px, 0)`\n : undefined,\n transition,\n opacity: isDragging ? 0.6 : 1,\n };\n return (\n <span\n ref={setNodeRef}\n style={style}\n className={cn(\n \"pz:flex pz:h-[calc(--spacing(5.25))] pz:w-fit pz:items-center pz:gap-1 pz:rounded-sm pz:bg-muted pz:pl-0.5 pz:pr-0 pz:text-xs pz:font-medium pz:whitespace-nowrap pz:text-foreground\",\n )}\n {...attributes}\n >\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Drag to reorder\"\n className=\"pz:flex pz:items-center pz:justify-center pz:cursor-grab pz:text-muted-foreground pz:hover:text-foreground pz:touch-none\"\n {...listeners}\n >\n <IconGripVertical width={12} height={12} />\n </span>\n {children}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"pz:opacity-50 pz:hover:opacity-100\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n aria-label=\"Remove\"\n >\n <XIcon className=\"pz:pointer-events-none\" />\n </Button>\n </span>\n );\n}\n\nexport interface SuggestComboboxProps {\n value: string[];\n onChange: (value: string[]) => void;\n options?: PayloadOption[];\n loadOptions?: (query: string) => Promise<PayloadOption[]>;\n allowCreate?: boolean;\n disableSearch?: boolean;\n maxItems?: number;\n excludeValues?: string[];\n ariaInvalid?: boolean;\n disabled?: boolean;\n debounceMs?: number;\n labelFor?: (value: string) => string;\n /** Optional leading icon (e.g. provider logo) rendered inside chips and list items. */\n iconFor?: (value: string) => ReactNode;\n emptyLabel?: string;\n placeholder?: string;\n /** When true, chips become drag-sortable and reorder the `value` array. */\n reorderable?: boolean;\n /**\n * Single-select mode: the selection renders as a plain value (not a\n * removable chip), picking an option REPLACES it, and the popover closes on\n * pick — a searchable analog of a native select. Clicking the selected\n * option again clears it. `value` stays an array (length ≤ 1) so callers\n * keep one contract across both modes; `maxItems`/`reorderable` are ignored.\n */\n single?: boolean;\n}\n\n/**\n * Unified combobox built on `@base-ui/react`'s Combobox primitive.\n *\n * - Chips + inline search input via `ComboboxChips` / `ComboboxChipsInput`.\n * - Static (`options`) or async (`loadOptions`) item sources. External\n * filtering in both cases so match-sorter ranking / server relevance is\n * honored and base-ui's built-in filter doesn't double-filter.\n * - Free-text creation (`allowCreate`) renders an inline \"Add \\\"X\\\"\" item.\n * - `maxItems`, `excludeValues`, `disableSearch`, `ariaInvalid`, `disabled`.\n * - Debounced async loader with an in-memory cache keyed by query string.\n */\nexport function SuggestCombobox({\n value,\n onChange,\n options,\n loadOptions,\n allowCreate = false,\n disableSearch = false,\n maxItems,\n excludeValues = [],\n ariaInvalid,\n disabled,\n debounceMs = 300,\n labelFor,\n iconFor,\n emptyLabel,\n placeholder,\n reorderable = false,\n single = false,\n}: SuggestComboboxProps) {\n const [input, setInput] = useState(\"\");\n const [debouncedQuery, setDebouncedQuery] = useState(\"\");\n const [open, setOpen] = useState(false);\n\n const isAsync = typeof loadOptions === \"function\";\n\n const debouncedSetQuery = useDebouncedFn((q: string) => setDebouncedQuery(q), debounceMs);\n\n // Per-instance cache key prefix so two comboboxes with the same query but\n // different `loadOptions` functions don't share results.\n const instanceId = useId();\n\n // SWR handles dedupe + caching by-query + race-safety. We defer the\n // empty-query fetch until the user opens the dropdown — some backends\n // (e.g. Crustdata persondb) don't accept empty queries, and on-mount\n // fetches are wasted work if the field is never opened. `keepPreviousData`\n // preserves the prior result set during a refetch so the UI dims rather\n // than empties.\n const swrKey: readonly [string, string] | null =\n loadOptions && (open || debouncedQuery !== \"\") ? [instanceId, debouncedQuery] : null;\n const {\n data: asyncResults = null,\n isLoading: swrIsLoading,\n isValidating: swrIsValidating,\n } = useSWR<PayloadOption[], Error, readonly [string, string] | null>(\n swrKey,\n async ([, q]) => {\n // `swrKey` was `null` when `loadOptions` is undefined, so the fetcher\n // never runs without one — the runtime check is just to satisfy TS.\n if (!loadOptions) return [];\n const opts = await loadOptions(q);\n return opts.filter((o) => !!o.value);\n },\n { keepPreviousData: true },\n );\n const loading = swrIsLoading || swrIsValidating;\n\n const excludeSet = useMemo(() => new Set(excludeValues), [excludeValues]);\n const selectedSet = useMemo(() => new Set(value), [value]);\n\n const anchor = useComboboxAnchor();\n\n const filteredSuggestions = useMemo<PayloadOption[]>(() => {\n const source = isAsync ? (asyncResults ?? []) : (options ?? []);\n const ranked = isAsync ? source : filterOptions(source, input);\n return ranked.filter((o) => !excludeSet.has(o.value));\n }, [isAsync, asyncResults, options, input, excludeSet]);\n\n const trimmedInput = input.trim();\n const showCreateRow =\n allowCreate &&\n trimmedInput.length > 0 &&\n !selectedSet.has(trimmedInput) &&\n !excludeSet.has(trimmedInput) &&\n !filteredSuggestions.some((o) => o.value.toLowerCase() === trimmedInput.toLowerCase());\n\n const resolveLabel = (v: string): string => {\n if (labelFor) return labelFor(v);\n const fromStatic = options?.find((o) => o.value === v)?.label;\n if (fromStatic) return fromStatic;\n const fromAsync = asyncResults?.find((o) => o.value === v)?.label;\n return fromAsync ?? v;\n };\n\n // Persist widgets per value across loadOptions cycles. Async results are\n // replaced with each query, so without this cache an icon shown when\n // picking a value would disappear on the next refetch. Updates run in an\n // effect (not during render) so the cache stays consistent under strict\n // mode and concurrent rendering.\n const widgetCacheRef = useRef<Map<string, WidgetsByKind>>(new Map());\n useEffect(() => {\n for (const opt of options ?? []) {\n if (opt.widgets) widgetCacheRef.current.set(opt.value, opt.widgets);\n }\n for (const opt of asyncResults ?? []) {\n if (opt.widgets) widgetCacheRef.current.set(opt.value, opt.widgets);\n }\n }, [options, asyncResults]);\n\n const resolveWidgets = (v: string): WidgetsByKind | undefined =>\n options?.find((o) => o.value === v)?.widgets ??\n asyncResults?.find((o) => o.value === v)?.widgets ??\n widgetCacheRef.current.get(v);\n\n const valueObjects = useMemo<ComboboxOption[]>(\n () =>\n value.map((v) => ({\n value: v,\n label: resolveLabel(v),\n widgets: resolveWidgets(v),\n })),\n // resolveLabel/resolveWidgets close over options/asyncResults/labelFor\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [value, options, asyncResults, labelFor],\n );\n\n const items = useMemo<ComboboxOption[]>(() => {\n const list: ComboboxOption[] = [];\n if (showCreateRow) {\n list.push({\n value: trimmedInput,\n label: `Add \"${trimmedInput}\"`,\n __create: true,\n });\n }\n for (const o of filteredSuggestions) list.push(o);\n return list;\n }, [showCreateRow, trimmedInput, filteredSuggestions]);\n\n const atMax = maxItems !== undefined && value.length >= maxItems;\n\n const sortSensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const from = value.indexOf(String(active.id));\n const to = value.indexOf(String(over.id));\n if (from === -1 || to === -1) return;\n const next = [...value];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n onChange(next);\n };\n\n return (\n <Combobox<ComboboxOption, true>\n multiple\n items={items}\n filter={null}\n open={open}\n onOpenChange={setOpen}\n value={valueObjects}\n onValueChange={(next) => {\n if (!Array.isArray(next)) return;\n if (single) {\n // Replace-on-pick: the base-ui multiple model APPENDS the picked\n // item, so the last valid entry is the user's choice; toggling the\n // selected item off yields an empty array (= clear).\n const last = [...next]\n .reverse()\n .map((item) => (typeof item === \"string\" ? item : (item as ComboboxOption).value))\n .find((v) => v && !excludeSet.has(v));\n onChange(last ? [last] : []);\n setInput(\"\");\n if (isAsync) debouncedSetQuery(\"\");\n setOpen(false);\n return;\n }\n // Unique by value, rewrite __create items to clean objects.\n const seen = new Set<string>();\n const deduped: string[] = [];\n for (const item of next) {\n const v = typeof item === \"string\" ? item : (item as ComboboxOption).value;\n if (!v || seen.has(v)) continue;\n if (excludeSet.has(v)) continue;\n if (maxItems !== undefined && deduped.length >= maxItems) break;\n seen.add(v);\n deduped.push(v);\n }\n onChange(deduped);\n setInput(\"\");\n if (isAsync) debouncedSetQuery(\"\");\n }}\n isItemEqualToValue={(a, b) => (a as ComboboxOption).value === (b as ComboboxOption).value}\n itemToStringLabel={(item) => (item as ComboboxOption).label}\n itemToStringValue={(item) => (item as ComboboxOption).value}\n inputValue={input}\n onInputValueChange={(v) => {\n setInput(v);\n if (isAsync) debouncedSetQuery(v);\n }}\n disabled={disabled}\n >\n <ComboboxChips aria-invalid={ariaInvalid || undefined} ref={anchor}>\n {single ? (\n // Select-like value display: a plain label, hidden while the user\n // types so the input reads like a search box over the selection.\n valueObjects[0] &&\n input === \"\" && (\n <span className=\"pz:flex pz:min-w-0 pz:items-center pz:gap-1.5 pz:text-sm\">\n {iconFor?.(valueObjects[0].value)}\n {valueObjects[0].widgets && (\n <WidgetStrip widgets={valueObjects[0].widgets} size={14} />\n )}\n <span className=\"pz:truncate\">{valueObjects[0].label}</span>\n </span>\n )\n ) : reorderable ? (\n <DndContext\n sensors={sortSensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={value} strategy={horizontalListSortingStrategy}>\n {valueObjects.map((v) => (\n <SortableChip\n key={v.value}\n id={v.value}\n onRemove={() => onChange(value.filter((x) => x !== v.value))}\n >\n {iconFor?.(v.value)}\n {v.widgets && <WidgetStrip widgets={v.widgets} size={14} />}\n {v.label}\n </SortableChip>\n ))}\n </SortableContext>\n </DndContext>\n ) : (\n valueObjects.map((v) => (\n <ComboboxChip key={v.value}>\n {iconFor?.(v.value)}\n {v.widgets && <WidgetStrip widgets={v.widgets} size={14} />}\n {v.label}\n </ComboboxChip>\n ))\n )}\n <ComboboxChipsInput\n placeholder={value.length === 0 ? placeholder : undefined}\n readOnly={disableSearch}\n aria-invalid={ariaInvalid || undefined}\n onKeyDown={(e) => {\n if (e.key !== \"Enter\" || e.nativeEvent.isComposing) return;\n if (trimmedInput.length === 0) return;\n // Prevent the Enter from bubbling up and submitting an enclosing form.\n e.preventDefault();\n e.stopPropagation();\n if (!single && atMax) return;\n // Prefer an exact match against the visible suggestions, otherwise\n // fall back to creating a new value when allowed.\n const exact = filteredSuggestions.find(\n (o) => o.value.toLowerCase() === trimmedInput.toLowerCase(),\n );\n const toAdd = exact?.value ?? (allowCreate ? trimmedInput : null);\n if (!toAdd) return;\n if (excludeSet.has(toAdd)) return;\n if (single) {\n onChange([toAdd]);\n setInput(\"\");\n if (isAsync) debouncedSetQuery(\"\");\n setOpen(false);\n return;\n }\n if (selectedSet.has(toAdd)) return;\n onChange([...value, toAdd]);\n setInput(\"\");\n if (isAsync) debouncedSetQuery(\"\");\n }}\n />\n <ComboboxTrigger className=\"pz:ml-auto pz:bg-transparent pz:hover:bg-transparent\" />\n </ComboboxChips>\n <ComboboxContent anchor={anchor}>\n {loading && items.length > 0 && (\n // Refetch: prior items stay visible, dimmed, with a small corner\n // spinner so the layout doesn't jump while the new page loads.\n <span\n aria-label=\"Loading\"\n className=\"pz:absolute pz:right-2 pz:top-2 pz:z-10 pz:inline-block pz:h-3 pz:w-3 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground\"\n />\n )}\n {loading && items.length === 0 && (\n // Initial load: nothing to dim, so render a visible spinner in the\n // popover body to confirm options are being fetched.\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className=\"pz:flex pz:items-center pz:justify-center pz:py-6\"\n >\n <span className=\"pz:inline-block pz:h-5 pz:w-5 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground\" />\n </div>\n )}\n <ComboboxList\n className={cn(\n loading &&\n items.length > 0 &&\n \"pz:opacity-50 pz:transition-opacity pz:pointer-events-none\",\n )}\n >\n {!single && atMax && (\n <div className=\"pz:px-2 pz:py-1.5 pz:text-xs pz:text-muted-foreground\">\n Maximum {maxItems} item{maxItems === 1 ? \"\" : \"s\"} reached.\n </div>\n )}\n\n {items.map((item) => {\n // Field-type widget renders on the trailing edge of the row so\n // the field name reads first; everything else stays in the\n // leading widget strip.\n const fieldType = !item.__create ? item.widgets?.field_type : undefined;\n const leadingWidgets =\n !item.__create && item.widgets ? splitWidgets(item.widgets).leading : undefined;\n return (\n <ComboboxItem\n key={`${item.__create ? \"__create__:\" : \"\"}${item.value}`}\n value={item}\n className={item.__create ? \"pz:italic\" : undefined}\n disabled={!single && !selectedSet.has(item.value) && atMax && !item.__create}\n >\n {!item.__create && iconFor?.(item.value)}\n {leadingWidgets && <WidgetStrip widgets={leadingWidgets} size={14} />}\n <span className=\"pz:flex-1 pz:truncate\">{item.label}</span>\n {fieldType && <FieldTypeBadge type={fieldType.type} format={fieldType.format} />}\n </ComboboxItem>\n );\n })}\n\n {!loading && items.length === 0 && (\n <ComboboxEmpty>\n {emptyLabel ??\n (allowCreate\n ? options || loadOptions\n ? \"No matches\"\n : \"Type to add\"\n : \"No options\")}\n </ComboboxEmpty>\n )}\n </ComboboxList>\n </ComboboxContent>\n </Combobox>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"suggest-combobox.mjs","names":["XIcon"],"sources":["../../../../src/components/internal/combobox/suggest-combobox.tsx"],"sourcesContent":["import {\n closestCenter,\n DndContext,\n type DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { horizontalListSortingStrategy, SortableContext, useSortable } from \"@dnd-kit/sortable\";\nimport type { WidgetsByKind } from \"@pipe0/base\";\nimport { type ReactNode, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport useSWR from \"swr\";\nimport { useDebouncedFn } from \"../../../hooks/use-debounced-fn.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { FieldTypeBadge } from \"../../../widgets/field-type-badge.js\";\nimport { WidgetStrip } from \"../../../widgets/widget-strip.js\";\nimport { Button } from \"../../ui/button.js\";\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxItem,\n ComboboxList,\n ComboboxTrigger,\n useComboboxAnchor,\n} from \"../../ui/combobox.js\";\nimport { IconGripVertical, X as XIcon } from \"../icons.js\";\nimport { filterOptions, type PayloadOption } from \"../multi-select-popover-trigger.js\";\n\n/** Internal item type — the base-ui Combobox handles `{value, label}` natively. */\ntype ComboboxOption = PayloadOption & { __create?: boolean };\n\n/** Split widgets so `field_type` can render on the trailing edge of dropdown\n * rows while every other widget stays in the leading strip. */\nfunction splitWidgets(widgets: WidgetsByKind): {\n leading: WidgetsByKind | undefined;\n} {\n const { field_type: _ignored, ...rest } = widgets;\n const hasLeading = Object.values(rest).some((v) => v != null);\n return { leading: hasLeading ? rest : undefined };\n}\n\n/** Reorderable chip matching `ComboboxChip` visually, with a grip handle. */\nfunction SortableChip({\n id,\n onRemove,\n children,\n}: {\n id: string;\n onRemove: () => void;\n children: ReactNode;\n}) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id,\n });\n const style: React.CSSProperties = {\n transform: transform\n ? `translate3d(${Math.round(transform.x)}px, ${Math.round(transform.y)}px, 0)`\n : undefined,\n transition,\n opacity: isDragging ? 0.6 : 1,\n };\n return (\n <span\n ref={setNodeRef}\n style={style}\n className={cn(\n \"pz:flex pz:h-[calc(--spacing(5.25))] pz:w-fit pz:items-center pz:gap-1 pz:rounded-sm pz:bg-muted pz:pl-0.5 pz:pr-0 pz:text-xs pz:font-medium pz:whitespace-nowrap pz:text-foreground\",\n )}\n {...attributes}\n >\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Drag to reorder\"\n className=\"pz:flex pz:items-center pz:justify-center pz:cursor-grab pz:text-muted-foreground pz:hover:text-foreground pz:touch-none\"\n {...listeners}\n >\n <IconGripVertical width={12} height={12} />\n </span>\n {children}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"pz:opacity-50 pz:hover:opacity-100\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n aria-label=\"Remove\"\n >\n <XIcon className=\"pz:pointer-events-none\" />\n </Button>\n </span>\n );\n}\n\nexport interface SuggestComboboxProps {\n value: string[];\n onChange: (value: string[]) => void;\n options?: PayloadOption[];\n loadOptions?: (query: string) => Promise<PayloadOption[]>;\n allowCreate?: boolean;\n disableSearch?: boolean;\n maxItems?: number;\n excludeValues?: string[];\n ariaInvalid?: boolean;\n disabled?: boolean;\n debounceMs?: number;\n labelFor?: (value: string) => string;\n /** Optional leading icon (e.g. provider logo) rendered inside chips and list items. */\n iconFor?: (value: string) => ReactNode;\n emptyLabel?: string;\n placeholder?: string;\n /** When true, chips become drag-sortable and reorder the `value` array. */\n reorderable?: boolean;\n /**\n * Single-select mode: the selection renders as a plain value (not a\n * removable chip), picking an option REPLACES it, and the popover closes on\n * pick — a searchable analog of a native select. Clicking the selected\n * option again clears it. `value` stays an array (length ≤ 1) so callers\n * keep one contract across both modes; `maxItems`/`reorderable` are ignored.\n */\n single?: boolean;\n}\n\n/**\n * Unified combobox built on `@base-ui/react`'s Combobox primitive.\n *\n * - Chips + inline search input via `ComboboxChips` / `ComboboxChipsInput`.\n * - Static (`options`) or async (`loadOptions`) item sources. External\n * filtering in both cases so match-sorter ranking / server relevance is\n * honored and base-ui's built-in filter doesn't double-filter.\n * - Free-text creation (`allowCreate`) renders an inline \"Add \\\"X\\\"\" item.\n * - `maxItems`, `excludeValues`, `disableSearch`, `ariaInvalid`, `disabled`.\n * - Debounced async loader with an in-memory cache keyed by query string.\n */\nexport function SuggestCombobox({\n value,\n onChange,\n options,\n loadOptions,\n allowCreate = false,\n disableSearch = false,\n maxItems,\n excludeValues = [],\n ariaInvalid,\n disabled,\n debounceMs = 300,\n labelFor,\n iconFor,\n emptyLabel,\n placeholder,\n reorderable = false,\n single = false,\n}: SuggestComboboxProps) {\n const [input, setInput] = useState(\"\");\n const [debouncedQuery, setDebouncedQuery] = useState(\"\");\n const [open, setOpen] = useState(false);\n\n const isAsync = typeof loadOptions === \"function\";\n\n const debouncedSetQuery = useDebouncedFn((q: string) => setDebouncedQuery(q), debounceMs);\n\n // Per-instance cache key prefix so two comboboxes with the same query but\n // different `loadOptions` functions don't share results.\n const instanceId = useId();\n\n // SWR handles dedupe + caching by-query + race-safety. We defer the\n // empty-query fetch until the user opens the dropdown — some backends\n // (e.g. Crustdata persondb) don't accept empty queries, and on-mount\n // fetches are wasted work if the field is never opened. `keepPreviousData`\n // preserves the prior result set during a refetch so the UI dims rather\n // than empties.\n const swrKey: readonly [string, string] | null =\n loadOptions && (open || debouncedQuery !== \"\") ? [instanceId, debouncedQuery] : null;\n const {\n data: asyncResults = null,\n isLoading: swrIsLoading,\n isValidating: swrIsValidating,\n } = useSWR<PayloadOption[], Error, readonly [string, string] | null>(\n swrKey,\n async ([, q]) => {\n // `swrKey` was `null` when `loadOptions` is undefined, so the fetcher\n // never runs without one — the runtime check is just to satisfy TS.\n if (!loadOptions) return [];\n const opts = await loadOptions(q);\n return opts.filter((o) => !!o.value);\n },\n { keepPreviousData: true },\n );\n const loading = swrIsLoading || swrIsValidating;\n\n const excludeSet = useMemo(() => new Set(excludeValues), [excludeValues]);\n const selectedSet = useMemo(() => new Set(value), [value]);\n\n const anchor = useComboboxAnchor();\n\n const filteredSuggestions = useMemo<PayloadOption[]>(() => {\n const source = isAsync ? (asyncResults ?? []) : (options ?? []);\n const ranked = isAsync ? source : filterOptions(source, input);\n return ranked.filter((o) => !excludeSet.has(o.value));\n }, [isAsync, asyncResults, options, input, excludeSet]);\n\n const trimmedInput = input.trim();\n const showCreateRow =\n allowCreate &&\n trimmedInput.length > 0 &&\n !selectedSet.has(trimmedInput) &&\n !excludeSet.has(trimmedInput) &&\n !filteredSuggestions.some((o) => o.value.toLowerCase() === trimmedInput.toLowerCase());\n\n const resolveLabel = (v: string): string => {\n if (labelFor) return labelFor(v);\n const fromStatic = options?.find((o) => o.value === v)?.label;\n if (fromStatic) return fromStatic;\n const fromAsync = asyncResults?.find((o) => o.value === v)?.label;\n return fromAsync ?? v;\n };\n\n // Persist widgets per value across loadOptions cycles. Async results are\n // replaced with each query, so without this cache an icon shown when\n // picking a value would disappear on the next refetch. Updates run in an\n // effect (not during render) so the cache stays consistent under strict\n // mode and concurrent rendering.\n const widgetCacheRef = useRef<Map<string, WidgetsByKind>>(new Map());\n useEffect(() => {\n for (const opt of options ?? []) {\n if (opt.widgets) widgetCacheRef.current.set(opt.value, opt.widgets);\n }\n for (const opt of asyncResults ?? []) {\n if (opt.widgets) widgetCacheRef.current.set(opt.value, opt.widgets);\n }\n }, [options, asyncResults]);\n\n const resolveWidgets = (v: string): WidgetsByKind | undefined =>\n options?.find((o) => o.value === v)?.widgets ??\n asyncResults?.find((o) => o.value === v)?.widgets ??\n widgetCacheRef.current.get(v);\n\n const valueObjects = useMemo<ComboboxOption[]>(\n () =>\n value.map((v) => ({\n value: v,\n label: resolveLabel(v),\n widgets: resolveWidgets(v),\n })),\n // resolveLabel/resolveWidgets close over options/asyncResults/labelFor\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [value, options, asyncResults, labelFor],\n );\n\n const items = useMemo<ComboboxOption[]>(() => {\n const list: ComboboxOption[] = [];\n if (showCreateRow) {\n list.push({\n value: trimmedInput,\n label: `Add \"${trimmedInput}\"`,\n __create: true,\n });\n }\n for (const o of filteredSuggestions) list.push(o);\n return list;\n }, [showCreateRow, trimmedInput, filteredSuggestions]);\n\n const atMax = maxItems !== undefined && value.length >= maxItems;\n\n const sortSensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const from = value.indexOf(String(active.id));\n const to = value.indexOf(String(over.id));\n if (from === -1 || to === -1) return;\n const next = [...value];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n onChange(next);\n };\n\n return (\n <Combobox<ComboboxOption, true>\n multiple\n items={items}\n filter={null}\n open={open}\n onOpenChange={setOpen}\n value={valueObjects}\n onValueChange={(next) => {\n if (!Array.isArray(next)) return;\n if (single) {\n // Replace-on-pick: the base-ui multiple model APPENDS the picked\n // item, so the last valid entry is the user's choice; toggling the\n // selected item off yields an empty array (= clear).\n const last = [...next]\n .reverse()\n .map((item) => (typeof item === \"string\" ? item : (item as ComboboxOption).value))\n .find((v) => v && !excludeSet.has(v));\n onChange(last ? [last] : []);\n setInput(\"\");\n if (isAsync) debouncedSetQuery(\"\");\n setOpen(false);\n return;\n }\n // Unique by value, rewrite __create items to clean objects.\n const seen = new Set<string>();\n const deduped: string[] = [];\n for (const item of next) {\n const v = typeof item === \"string\" ? item : (item as ComboboxOption).value;\n if (!v || seen.has(v)) continue;\n if (excludeSet.has(v)) continue;\n if (maxItems !== undefined && deduped.length >= maxItems) break;\n seen.add(v);\n deduped.push(v);\n }\n onChange(deduped);\n setInput(\"\");\n if (isAsync) debouncedSetQuery(\"\");\n }}\n isItemEqualToValue={(a, b) => (a as ComboboxOption).value === (b as ComboboxOption).value}\n itemToStringLabel={(item) => (item as ComboboxOption).label}\n itemToStringValue={(item) => (item as ComboboxOption).value}\n inputValue={input}\n onInputValueChange={(v) => {\n setInput(v);\n if (isAsync) debouncedSetQuery(v);\n }}\n disabled={disabled}\n >\n <ComboboxChips aria-invalid={ariaInvalid || undefined} ref={anchor}>\n {single ? (\n // Select-like value display: a plain label, hidden while the user\n // types so the input reads like a search box over the selection.\n valueObjects[0] &&\n input === \"\" && (\n <span className=\"pz:flex pz:min-w-0 pz:items-center pz:gap-1.5 pz:text-sm\">\n {iconFor?.(valueObjects[0].value)}\n {valueObjects[0].widgets && (\n <WidgetStrip widgets={valueObjects[0].widgets} size={14} />\n )}\n <span className=\"pz:truncate\">{valueObjects[0].label}</span>\n </span>\n )\n ) : reorderable ? (\n <DndContext\n sensors={sortSensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={value} strategy={horizontalListSortingStrategy}>\n {valueObjects.map((v) => (\n <SortableChip\n key={v.value}\n id={v.value}\n onRemove={() => onChange(value.filter((x) => x !== v.value))}\n >\n {iconFor?.(v.value)}\n {v.widgets && <WidgetStrip widgets={v.widgets} size={14} />}\n {v.label}\n </SortableChip>\n ))}\n </SortableContext>\n </DndContext>\n ) : (\n valueObjects.map((v) => (\n <ComboboxChip key={v.value}>\n {iconFor?.(v.value)}\n {v.widgets && <WidgetStrip widgets={v.widgets} size={14} />}\n {v.label}\n </ComboboxChip>\n ))\n )}\n <ComboboxChipsInput\n placeholder={value.length === 0 ? placeholder : undefined}\n readOnly={disableSearch}\n aria-invalid={ariaInvalid || undefined}\n onKeyDown={(e) => {\n if (e.key !== \"Enter\" || e.nativeEvent.isComposing) return;\n if (trimmedInput.length === 0) return;\n // Prevent the Enter from bubbling up and submitting an enclosing form.\n e.preventDefault();\n e.stopPropagation();\n if (!single && atMax) return;\n // Prefer an exact match against the visible suggestions, otherwise\n // fall back to creating a new value when allowed.\n const exact = filteredSuggestions.find(\n (o) => o.value.toLowerCase() === trimmedInput.toLowerCase(),\n );\n const toAdd = exact?.value ?? (allowCreate ? trimmedInput : null);\n if (!toAdd) return;\n if (excludeSet.has(toAdd)) return;\n if (single) {\n onChange([toAdd]);\n setInput(\"\");\n if (isAsync) debouncedSetQuery(\"\");\n setOpen(false);\n return;\n }\n if (selectedSet.has(toAdd)) return;\n onChange([...value, toAdd]);\n setInput(\"\");\n if (isAsync) debouncedSetQuery(\"\");\n }}\n />\n <ComboboxTrigger className=\"pz:ml-auto pz:bg-transparent pz:hover:bg-transparent\" />\n </ComboboxChips>\n <ComboboxContent anchor={anchor}>\n {loading && items.length > 0 && (\n // Refetch: prior items stay visible, dimmed, with a small corner\n // spinner so the layout doesn't jump while the new page loads.\n <span\n aria-label=\"Loading\"\n className=\"pz:absolute pz:right-2 pz:top-2 pz:z-10 pz:inline-block pz:h-3 pz:w-3 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground\"\n />\n )}\n {loading && items.length === 0 && (\n // Initial load: nothing to dim, so render a visible spinner in the\n // popover body to confirm options are being fetched.\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className=\"pz:flex pz:items-center pz:justify-center pz:py-6\"\n >\n <span className=\"pz:inline-block pz:h-5 pz:w-5 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground\" />\n </div>\n )}\n <ComboboxList\n className={cn(\n loading &&\n items.length > 0 &&\n \"pz:opacity-50 pz:transition-opacity pz:pointer-events-none\",\n )}\n >\n {!single && atMax && (\n <div className=\"pz:px-2 pz:py-1.5 pz:text-xs pz:text-muted-foreground\">\n Maximum {maxItems} item{maxItems === 1 ? \"\" : \"s\"} reached.\n </div>\n )}\n\n {items.map((item) => {\n // Field-type widget renders on the trailing edge of the row so\n // the field name reads first; everything else stays in the\n // leading widget strip.\n const fieldType = !item.__create ? item.widgets?.field_type : undefined;\n const leadingWidgets =\n !item.__create && item.widgets ? splitWidgets(item.widgets).leading : undefined;\n return (\n <ComboboxItem\n key={`${item.__create ? \"__create__:\" : \"\"}${item.value}`}\n value={item}\n className={item.__create ? \"pz:italic\" : undefined}\n disabled={!single && !selectedSet.has(item.value) && atMax && !item.__create}\n >\n {!item.__create && iconFor?.(item.value)}\n {leadingWidgets && <WidgetStrip widgets={leadingWidgets} size={14} />}\n <span className=\"pz:flex-1 pz:truncate\">{item.label}</span>\n {fieldType && <FieldTypeBadge type={fieldType.type} format={fieldType.format} />}\n </ComboboxItem>\n );\n })}\n\n {!loading && items.length === 0 && (\n <ComboboxEmpty>\n {emptyLabel ??\n (allowCreate\n ? options || loadOptions\n ? \"No matches\"\n : \"Type to add\"\n : \"No options\")}\n </ComboboxEmpty>\n )}\n </ComboboxList>\n </ComboboxContent>\n </Combobox>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ForwardRefExoticComponent, RefAttributes } from "react";
2
+ import { HugeiconsProps } from "@hugeicons/react";
3
+
4
+ //#region src/components/internal/icons.d.ts
5
+ /**
6
+ * The package's icon set: Hugeicons (stroke-rounded, free) under the component
7
+ * names the code already used. `Icon*` are the compact 16px variants the
8
+ * internal controls render without a size class.
9
+ */
10
+ type IconProps = Omit<HugeiconsProps, "icon" | "ref">;
11
+ type Icon = ForwardRefExoticComponent<IconProps & RefAttributes<SVGSVGElement>>;
12
+ //#endregion
13
+ export { Icon };
14
+ //# sourceMappingURL=icons.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.mts","names":[],"sources":["../../../src/components/internal/icons.tsx"],"mappings":";;;;;;AA4GA;;;KAAY,SAAA,GAAY,IAAA,CAAK,cAAA;AAAA,KACjB,IAAA,GAAO,yBAAA,CAA0B,SAAA,GAAY,aAAA,CAAc,aAAA"}
@@ -1,192 +1,144 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
1
+ import { forwardRef } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { ActivityIcon, AlertCircleIcon, ArrowDownIcon, ArrowUpIcon, Asterisk02Icon, AtSignIcon, AwardIcon, BanknoteIcon, BookDashedIcon, BookOpenIcon, BookmarkIcon, BoxesIcon, BracesIcon, BrainIcon, BriefcaseBusinessIcon, BriefcaseIcon, Building03Icon, CalendarClockIcon, CalendarIcon, ChartColumnIcon, CheckCheckIcon, CheckIcon, ChevronDownIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, Coins01Icon, Coins02Icon, CompassIcon, ContactIcon, CopyIcon, Database02Icon, Delete02Icon, DownloadIcon, EraserIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FactoryIcon, FilterIcon, GlobeIcon, GripVerticalIcon, HammerIcon, HandshakeIcon, HashIcon, HelpCircleIcon, HistoryIcon, InfoIcon, InternetIcon, KeyIcon, LanguagesIcon, LibraryIcon, Linkedin01Icon, ListChecksIcon, ListIcon, ListPlusIcon, LoaderIcon, LockIcon, MailIcon, MapPinIcon, MedalIcon, MinusIcon, MoreHorizontalIcon, Mortarboard02Icon, PauseIcon, PencilEdit01Icon, PercentIcon, PhoneIcon, PlayIcon, PlugIcon, PlusIcon, RefreshCwIcon, ScanFaceIcon, SearchIcon, Settings01Icon, ShuffleIcon, SigmaIcon, SlidersHorizontalIcon, SparklesIcon, StarIcon, SwordsIcon, TableIcon, Tag01Icon, Tag02Icon, TextAlignStartIcon, TextIcon, ToggleLeftIcon, ToggleRightIcon, TriangleAlertIcon, TriangleDashedIcon, TypeIcon, UploadIcon, UserGroupIcon, UserIcon, WorkflowIcon, XIcon, ZapIcon } from "@hugeicons/core-free-icons";
4
+ import { HugeiconsIcon } from "@hugeicons/react";
2
5
 
3
6
  //#region src/components/internal/icons.tsx
4
- const defaults = {
5
- xmlns: "http://www.w3.org/2000/svg",
6
- width: 16,
7
- height: 16,
8
- viewBox: "0 0 24 24",
9
- fill: "none",
10
- stroke: "currentColor",
11
- strokeWidth: 2,
12
- strokeLinecap: "round",
13
- strokeLinejoin: "round"
14
- };
15
- function IconPlus(props) {
16
- return /* @__PURE__ */ jsxs("svg", {
7
+ /** Wraps one Hugeicons glyph as a component, so an icon can be passed around
8
+ * as a value (`icon: Mail`) and rendered as `<Mail className="size-4" />`. */
9
+ function icon(svg, displayName, defaults) {
10
+ const Glyph = forwardRef((props, ref) => /* @__PURE__ */ jsx(HugeiconsIcon, {
11
+ ref,
12
+ icon: svg,
17
13
  ...defaults,
18
- ...props,
19
- children: [/* @__PURE__ */ jsx("path", { d: "M5 12h14" }), /* @__PURE__ */ jsx("path", { d: "M12 5v14" })]
20
- });
21
- }
22
- function IconMinus(props) {
23
- return /* @__PURE__ */ jsx("svg", {
24
- ...defaults,
25
- ...props,
26
- children: /* @__PURE__ */ jsx("path", { d: "M5 12h14" })
27
- });
28
- }
29
- function IconInfo(props) {
30
- return /* @__PURE__ */ jsxs("svg", {
31
- ...defaults,
32
- ...props,
33
- children: [
34
- /* @__PURE__ */ jsx("circle", {
35
- cx: "12",
36
- cy: "12",
37
- r: "10"
38
- }),
39
- /* @__PURE__ */ jsx("path", { d: "M12 16v-4" }),
40
- /* @__PURE__ */ jsx("path", { d: "M12 8h.01" })
41
- ]
42
- });
43
- }
44
- function IconWarning(props) {
45
- return /* @__PURE__ */ jsxs("svg", {
46
- ...defaults,
47
- ...props,
48
- children: [
49
- /* @__PURE__ */ jsx("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }),
50
- /* @__PURE__ */ jsx("path", { d: "M12 9v4" }),
51
- /* @__PURE__ */ jsx("path", { d: "M12 17h.01" })
52
- ]
53
- });
54
- }
55
- function IconError(props) {
56
- return /* @__PURE__ */ jsxs("svg", {
57
- ...defaults,
58
- ...props,
59
- children: [
60
- /* @__PURE__ */ jsx("circle", {
61
- cx: "12",
62
- cy: "12",
63
- r: "10"
64
- }),
65
- /* @__PURE__ */ jsx("path", { d: "m15 9-6 6" }),
66
- /* @__PURE__ */ jsx("path", { d: "m9 9 6 6" })
67
- ]
68
- });
69
- }
70
- function IconPencil(props) {
71
- return /* @__PURE__ */ jsx("svg", {
72
- ...defaults,
73
- ...props,
74
- children: /* @__PURE__ */ jsx("path", { d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" })
75
- });
76
- }
77
- function IconTrash(props) {
78
- return /* @__PURE__ */ jsxs("svg", {
79
- ...defaults,
80
- ...props,
81
- children: [
82
- /* @__PURE__ */ jsx("path", { d: "M3 6h18" }),
83
- /* @__PURE__ */ jsx("path", { d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" }),
84
- /* @__PURE__ */ jsx("path", { d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" })
85
- ]
86
- });
87
- }
88
- function IconChevronDown(props) {
89
- return /* @__PURE__ */ jsx("svg", {
90
- ...defaults,
91
- ...props,
92
- children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" })
93
- });
94
- }
95
- function IconLock(props) {
96
- return /* @__PURE__ */ jsxs("svg", {
97
- ...defaults,
98
- ...props,
99
- children: [/* @__PURE__ */ jsx("rect", {
100
- width: "18",
101
- height: "11",
102
- x: "3",
103
- y: "11",
104
- rx: "2",
105
- ry: "2"
106
- }), /* @__PURE__ */ jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })]
107
- });
108
- }
109
- function IconGripVertical(props) {
110
- return /* @__PURE__ */ jsxs("svg", {
111
- ...defaults,
112
- ...props,
113
- children: [
114
- /* @__PURE__ */ jsx("circle", {
115
- cx: "9",
116
- cy: "12",
117
- r: "1"
118
- }),
119
- /* @__PURE__ */ jsx("circle", {
120
- cx: "9",
121
- cy: "5",
122
- r: "1"
123
- }),
124
- /* @__PURE__ */ jsx("circle", {
125
- cx: "9",
126
- cy: "19",
127
- r: "1"
128
- }),
129
- /* @__PURE__ */ jsx("circle", {
130
- cx: "15",
131
- cy: "12",
132
- r: "1"
133
- }),
134
- /* @__PURE__ */ jsx("circle", {
135
- cx: "15",
136
- cy: "5",
137
- r: "1"
138
- }),
139
- /* @__PURE__ */ jsx("circle", {
140
- cx: "15",
141
- cy: "19",
142
- r: "1"
143
- })
144
- ]
145
- });
146
- }
147
- function IconCheck(props) {
148
- return /* @__PURE__ */ jsx("svg", {
149
- ...defaults,
150
- ...props,
151
- children: /* @__PURE__ */ jsx("path", { d: "M20 6 9 17l-5-5" })
152
- });
153
- }
154
- function IconEye(props) {
155
- return /* @__PURE__ */ jsxs("svg", {
156
- ...defaults,
157
- ...props,
158
- children: [/* @__PURE__ */ jsx("path", { d: "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }), /* @__PURE__ */ jsx("circle", {
159
- cx: "12",
160
- cy: "12",
161
- r: "3"
162
- })]
163
- });
164
- }
165
- function IconEyeOff(props) {
166
- return /* @__PURE__ */ jsxs("svg", {
167
- ...defaults,
168
- ...props,
169
- children: [
170
- /* @__PURE__ */ jsx("path", { d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49" }),
171
- /* @__PURE__ */ jsx("path", { d: "M14.084 14.158a3 3 0 0 1-4.242-4.242" }),
172
- /* @__PURE__ */ jsx("path", { d: "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143" }),
173
- /* @__PURE__ */ jsx("path", { d: "m2 2 20 20" })
174
- ]
175
- });
176
- }
177
- function IconRefresh(props) {
178
- return /* @__PURE__ */ jsxs("svg", {
179
- ...defaults,
180
- ...props,
181
- children: [
182
- /* @__PURE__ */ jsx("path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" }),
183
- /* @__PURE__ */ jsx("path", { d: "M21 3v5h-5" }),
184
- /* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" }),
185
- /* @__PURE__ */ jsx("path", { d: "M8 16H3v5" })
186
- ]
187
- });
14
+ ...props
15
+ }));
16
+ Glyph.displayName = displayName;
17
+ return Glyph;
188
18
  }
19
+ const Activity = icon(ActivityIcon, "Activity");
20
+ const AlertCircle = icon(AlertCircleIcon, "AlertCircle");
21
+ const ArrowDown = icon(ArrowDownIcon, "ArrowDown");
22
+ const ArrowUp = icon(ArrowUpIcon, "ArrowUp");
23
+ const Asterisk = icon(Asterisk02Icon, "Asterisk");
24
+ const AtSign = icon(AtSignIcon, "AtSign");
25
+ const Award = icon(AwardIcon, "Award");
26
+ const Banknote = icon(BanknoteIcon, "Banknote");
27
+ const BarChart3 = icon(ChartColumnIcon, "BarChart3");
28
+ const BookDashed = icon(BookDashedIcon, "BookDashed");
29
+ const BookOpen = icon(BookOpenIcon, "BookOpen");
30
+ const Bookmark = icon(BookmarkIcon, "Bookmark");
31
+ const Boxes = icon(BoxesIcon, "Boxes");
32
+ const Braces = icon(BracesIcon, "Braces");
33
+ const Brain = icon(BrainIcon, "Brain");
34
+ const Briefcase = icon(BriefcaseIcon, "Briefcase");
35
+ const BriefcaseBusiness = icon(BriefcaseBusinessIcon, "BriefcaseBusiness");
36
+ const Building2 = icon(Building03Icon, "Building2");
37
+ const Calendar = icon(CalendarIcon, "Calendar");
38
+ const CalendarClock = icon(CalendarClockIcon, "CalendarClock");
39
+ const Check = icon(CheckIcon, "Check");
40
+ const CheckCheck = icon(CheckCheckIcon, "CheckCheck");
41
+ const ChevronDown = icon(ChevronDownIcon, "ChevronDown");
42
+ const ChevronRight = icon(ChevronRightIcon, "ChevronRight");
43
+ const ChevronUp = icon(ChevronUpIcon, "ChevronUp");
44
+ const CircleHelp = icon(HelpCircleIcon, "CircleHelp");
45
+ const Code2 = icon(CodeIcon, "Code2");
46
+ const Cog = icon(Settings01Icon, "Cog");
47
+ const Coins = icon(Coins01Icon, "Coins");
48
+ const Compass = icon(CompassIcon, "Compass");
49
+ const Contact = icon(ContactIcon, "Contact");
50
+ /** Credit cost — the plain two-coin glyph (no currency sign: credits aren't dollars). */
51
+ const Coin = icon(Coins02Icon, "Coin");
52
+ const Copy = icon(CopyIcon, "Copy");
53
+ const Database = icon(Database02Icon, "Database");
54
+ const Download = icon(DownloadIcon, "Download");
55
+ const Eraser = icon(EraserIcon, "Eraser");
56
+ const ExternalLink = icon(ExternalLinkIcon, "ExternalLink");
57
+ const Eye = icon(EyeIcon, "Eye");
58
+ const EyeOff = icon(EyeOffIcon, "EyeOff");
59
+ const Factory = icon(FactoryIcon, "Factory");
60
+ const Filter = icon(FilterIcon, "Filter");
61
+ /** Domains / websites — a plain meridian globe. */
62
+ const Internet = icon(InternetIcon, "Internet");
63
+ const Globe = icon(GlobeIcon, "Globe");
64
+ const GraduationCap = icon(Mortarboard02Icon, "GraduationCap");
65
+ const GripVertical = icon(GripVerticalIcon, "GripVertical");
66
+ const Hammer = icon(HammerIcon, "Hammer");
67
+ const Handshake = icon(HandshakeIcon, "Handshake");
68
+ const Hash = icon(HashIcon, "Hash");
69
+ const HelpCircle = icon(HelpCircleIcon, "HelpCircle");
70
+ const History = icon(HistoryIcon, "History");
71
+ const Info = icon(InfoIcon, "Info");
72
+ const Key = icon(KeyIcon, "Key");
73
+ const Languages = icon(LanguagesIcon, "Languages");
74
+ const LetterText = icon(TextIcon, "LetterText");
75
+ const Library = icon(LibraryIcon, "Library");
76
+ const Linkedin = icon(Linkedin01Icon, "Linkedin");
77
+ const List = icon(ListIcon, "List");
78
+ const ListChecks = icon(ListChecksIcon, "ListChecks");
79
+ const ListPlus = icon(ListPlusIcon, "ListPlus");
80
+ const Loader = icon(LoaderIcon, "Loader");
81
+ const Lock = icon(LockIcon, "Lock");
82
+ const Mail = icon(MailIcon, "Mail");
83
+ const MapPin = icon(MapPinIcon, "MapPin");
84
+ const Medal = icon(MedalIcon, "Medal");
85
+ const Minus = icon(MinusIcon, "Minus");
86
+ const MoreHorizontal = icon(MoreHorizontalIcon, "MoreHorizontal");
87
+ const Pause = icon(PauseIcon, "Pause");
88
+ const Pencil = icon(PencilEdit01Icon, "Pencil");
89
+ const Percent = icon(PercentIcon, "Percent");
90
+ const Phone = icon(PhoneIcon, "Phone");
91
+ const Play = icon(PlayIcon, "Play");
92
+ const Plug = icon(PlugIcon, "Plug");
93
+ const Plus = icon(PlusIcon, "Plus");
94
+ const RefreshCw = icon(RefreshCwIcon, "RefreshCw");
95
+ const ScanFace = icon(ScanFaceIcon, "ScanFace");
96
+ const Search = icon(SearchIcon, "Search");
97
+ const Shuffle = icon(ShuffleIcon, "Shuffle");
98
+ const Sigma = icon(SigmaIcon, "Sigma");
99
+ const SlidersHorizontal = icon(SlidersHorizontalIcon, "SlidersHorizontal");
100
+ const Sparkles = icon(SparklesIcon, "Sparkles");
101
+ const Star = icon(StarIcon, "Star");
102
+ const Swords = icon(SwordsIcon, "Swords");
103
+ const Table = icon(TableIcon, "Table");
104
+ const Tag = icon(Tag01Icon, "Tag");
105
+ const Tags = icon(Tag02Icon, "Tags");
106
+ const TextAlignStart = icon(TextAlignStartIcon, "TextAlignStart");
107
+ const ToggleLeft = icon(ToggleLeftIcon, "ToggleLeft");
108
+ const ToggleRight = icon(ToggleRightIcon, "ToggleRight");
109
+ const Trash2 = icon(Delete02Icon, "Trash2");
110
+ const TriangleAlert = icon(TriangleAlertIcon, "TriangleAlert");
111
+ const TriangleDashed = icon(TriangleDashedIcon, "TriangleDashed");
112
+ const Type = icon(TypeIcon, "Type");
113
+ const Upload = icon(UploadIcon, "Upload");
114
+ const User = icon(UserIcon, "User");
115
+ const Users = icon(UserGroupIcon, "Users");
116
+ const Workflow = icon(WorkflowIcon, "Workflow");
117
+ const X = icon(XIcon, "X");
118
+ const Zap = icon(ZapIcon, "Zap");
119
+ const IconBraces = icon(BracesIcon, "IconBraces", { size: 16 });
120
+ const IconCheck = icon(CheckIcon, "IconCheck", { size: 16 });
121
+ const IconChevronDown = icon(ChevronDownIcon, "IconChevronDown", { size: 16 });
122
+ const IconChevronRight = icon(ChevronRightIcon, "IconChevronRight", { size: 16 });
123
+ const IconError = icon(AlertCircleIcon, "IconError", { size: 16 });
124
+ const IconEye = icon(EyeIcon, "IconEye", { size: 16 });
125
+ const IconEyeOff = icon(EyeOffIcon, "IconEyeOff", { size: 16 });
126
+ const IconGripVertical = icon(GripVerticalIcon, "IconGripVertical", { size: 16 });
127
+ const IconInfo = icon(InfoIcon, "IconInfo", { size: 16 });
128
+ const IconLock = icon(LockIcon, "IconLock", { size: 16 });
129
+ const IconMinus = icon(MinusIcon, "IconMinus", { size: 16 });
130
+ const IconMoreHorizontal = icon(MoreHorizontalIcon, "IconMoreHorizontal", { size: 16 });
131
+ const IconPencil = icon(PencilEdit01Icon, "IconPencil", { size: 16 });
132
+ const IconPlay = icon(PlayIcon, "IconPlay", {
133
+ size: 16,
134
+ fill: "currentColor"
135
+ });
136
+ const IconPlus = icon(PlusIcon, "IconPlus", { size: 16 });
137
+ const IconRefresh = icon(RefreshCwIcon, "IconRefresh", { size: 16 });
138
+ const IconTrash = icon(Delete02Icon, "IconTrash", { size: 16 });
139
+ const IconWarning = icon(TriangleAlertIcon, "IconWarning", { size: 16 });
140
+ const IconX = icon(XIcon, "IconX", { size: 16 });
189
141
 
190
142
  //#endregion
191
- export { IconCheck, IconChevronDown, IconError, IconEye, IconEyeOff, IconGripVertical, IconInfo, IconLock, IconMinus, IconPencil, IconPlus, IconRefresh, IconTrash, IconWarning };
143
+ export { Activity, ArrowDown, ArrowUp, Asterisk, AtSign, Award, Banknote, BarChart3, BookDashed, BookOpen, Bookmark, Boxes, Braces, Brain, Briefcase, BriefcaseBusiness, Building2, Calendar, CalendarClock, Check, CheckCheck, ChevronDown, ChevronUp, CircleHelp, Code2, Cog, Coin, Coins, Compass, Contact, Copy, Database, Download, Eraser, ExternalLink, Factory, Filter, GraduationCap, Hammer, Handshake, Hash, HelpCircle, History, IconCheck, IconChevronDown, IconError, IconEye, IconEyeOff, IconGripVertical, IconInfo, IconLock, IconMinus, IconPencil, IconPlus, IconRefresh, IconTrash, IconWarning, Internet, Key, Languages, LetterText, Library, Linkedin, List, ListChecks, ListPlus, Loader, Mail, MapPin, Medal, Pause, Percent, Phone, Plug, Plus, ScanFace, Search, Shuffle, Sigma, SlidersHorizontal, Sparkles, Star, Swords, Table, Tag, Tags, TextAlignStart, ToggleLeft, ToggleRight, Trash2, TriangleDashed, Type, Upload, User, Users, Workflow, X, Zap };
192
144
  //# sourceMappingURL=icons.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"icons.mjs","names":[],"sources":["../../../src/components/internal/icons.tsx"],"sourcesContent":["import type { SVGProps } from \"react\";\n\ntype IconProps = SVGProps<SVGSVGElement>;\n\nconst defaults: IconProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 16,\n height: 16,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n};\n\nexport function IconPlus(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n );\n}\n\nexport function IconMinus(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M5 12h14\" />\n </svg>\n );\n}\n\nexport function IconX(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function IconInfo(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n}\n\nexport function IconWarning(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n\nexport function IconError(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m15 9-6 6\" />\n <path d=\"m9 9 6 6\" />\n </svg>\n );\n}\n\nexport function IconPencil(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\n </svg>\n );\n}\n\nexport function IconTrash(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n );\n}\n\nexport function IconChevronDown(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport function IconLock(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n );\n}\n\nexport function IconGripVertical(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <circle cx=\"9\" cy=\"12\" r=\"1\" />\n <circle cx=\"9\" cy=\"5\" r=\"1\" />\n <circle cx=\"9\" cy=\"19\" r=\"1\" />\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\n <circle cx=\"15\" cy=\"5\" r=\"1\" />\n <circle cx=\"15\" cy=\"19\" r=\"1\" />\n </svg>\n );\n}\n\nexport function IconMoreHorizontal(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n );\n}\n\nexport function IconPlay(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <polygon points=\"6 3 20 12 6 21 6 3\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport function IconCheck(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport function IconChevronRight(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nexport function IconEye(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nexport function IconEyeOff(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\" />\n <path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\" />\n <path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\" />\n <path d=\"m2 2 20 20\" />\n </svg>\n );\n}\n\nexport function IconRefresh(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\n\nexport function IconBraces(props: IconProps) {\n return (\n <svg {...defaults} {...props}>\n <path d=\"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5a2 2 0 0 0 2 2h1\" />\n <path d=\"M16 21h1a2 2 0 0 0 2-2v-5a2 2 0 0 1 2-2 2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\" />\n </svg>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"icons.mjs","names":["HiActivity","HiAlertCircle","HiArrowDown","HiArrowUp","HiAsterisk02","HiAtSign","HiAward","HiBanknote","HiChartColumn","HiBookDashed","HiBookOpen","HiBookmark","HiBoxes","HiBraces","HiBrain","HiBriefcase","HiBriefcaseBusiness","HiBuilding03","HiCalendar","HiCalendarClock","HiCheck","HiCheckCheck","HiChevronDown","HiChevronRight","HiChevronUp","HiHelpCircle","HiCode","HiSettings01","HiCoins01","HiCompass","HiContact","HiCoins02","HiCopy","HiDatabase02","HiDownload","HiEraser","HiExternalLink","HiEye","HiEyeOff","HiFactory","HiFilter","HiInternet","HiGlobe","HiMortarboard02","HiGripVertical","HiHammer","HiHandshake","HiHash","HiHistory","HiInfo","HiKey","HiLanguages","HiText","HiLibrary","HiLinkedin01","HiList","HiListChecks","HiListPlus","HiLoader","HiLock","HiMail","HiMapPin","HiMedal","HiMinus","HiMoreHorizontal","HiPause","HiPencilEdit01","HiPercent","HiPhone","HiPlay","HiPlug","HiPlus","HiRefreshCw","HiScanFace","HiSearch","HiShuffle","HiSigma","HiSlidersHorizontal","HiSparkles","HiStar","HiSwords","HiTable","HiTag01","HiTag02","HiTextAlignStart","HiToggleLeft","HiToggleRight","HiDelete02","HiTriangleAlert","HiTriangleDashed","HiType","HiUpload","HiUser","HiUserGroup","HiWorkflow","HiX","HiZap"],"sources":["../../../src/components/internal/icons.tsx"],"sourcesContent":["import {\n ActivityIcon as HiActivity,\n AlertCircleIcon as HiAlertCircle,\n ArrowDownIcon as HiArrowDown,\n ArrowUpIcon as HiArrowUp,\n Asterisk02Icon as HiAsterisk02,\n AtSignIcon as HiAtSign,\n AwardIcon as HiAward,\n BanknoteIcon as HiBanknote,\n BookDashedIcon as HiBookDashed,\n BookmarkIcon as HiBookmark,\n BookOpenIcon as HiBookOpen,\n BoxesIcon as HiBoxes,\n BracesIcon as HiBraces,\n BrainIcon as HiBrain,\n BriefcaseIcon as HiBriefcase,\n BriefcaseBusinessIcon as HiBriefcaseBusiness,\n Building03Icon as HiBuilding03,\n CalendarIcon as HiCalendar,\n CalendarClockIcon as HiCalendarClock,\n ChartColumnIcon as HiChartColumn,\n CheckIcon as HiCheck,\n CheckCheckIcon as HiCheckCheck,\n ChevronDownIcon as HiChevronDown,\n ChevronRightIcon as HiChevronRight,\n ChevronUpIcon as HiChevronUp,\n CodeIcon as HiCode,\n Coins01Icon as HiCoins01,\n CompassIcon as HiCompass,\n ContactIcon as HiContact,\n Coins02Icon as HiCoins02,\n CopyIcon as HiCopy,\n Database02Icon as HiDatabase02,\n Delete02Icon as HiDelete02,\n DownloadIcon as HiDownload,\n EraserIcon as HiEraser,\n ExternalLinkIcon as HiExternalLink,\n EyeIcon as HiEye,\n EyeOffIcon as HiEyeOff,\n FactoryIcon as HiFactory,\n FilterIcon as HiFilter,\n GlobeIcon as HiGlobe,\n GripVerticalIcon as HiGripVertical,\n HammerIcon as HiHammer,\n HandshakeIcon as HiHandshake,\n HashIcon as HiHash,\n HelpCircleIcon as HiHelpCircle,\n HistoryIcon as HiHistory,\n InfoIcon as HiInfo,\n InternetIcon as HiInternet,\n KeyIcon as HiKey,\n LanguagesIcon as HiLanguages,\n LibraryIcon as HiLibrary,\n Linkedin01Icon as HiLinkedin01,\n ListIcon as HiList,\n ListChecksIcon as HiListChecks,\n ListPlusIcon as HiListPlus,\n LoaderIcon as HiLoader,\n LockIcon as HiLock,\n MailIcon as HiMail,\n MapPinIcon as HiMapPin,\n MedalIcon as HiMedal,\n MinusIcon as HiMinus,\n MoreHorizontalIcon as HiMoreHorizontal,\n Mortarboard02Icon as HiMortarboard02,\n PauseIcon as HiPause,\n PencilEdit01Icon as HiPencilEdit01,\n PercentIcon as HiPercent,\n PhoneIcon as HiPhone,\n PlayIcon as HiPlay,\n PlugIcon as HiPlug,\n PlusIcon as HiPlus,\n RefreshCwIcon as HiRefreshCw,\n ScanFaceIcon as HiScanFace,\n SearchIcon as HiSearch,\n Settings01Icon as HiSettings01,\n ShuffleIcon as HiShuffle,\n SigmaIcon as HiSigma,\n SlidersHorizontalIcon as HiSlidersHorizontal,\n SparklesIcon as HiSparkles,\n StarIcon as HiStar,\n SwordsIcon as HiSwords,\n TableIcon as HiTable,\n Tag01Icon as HiTag01,\n Tag02Icon as HiTag02,\n TextIcon as HiText,\n TextAlignStartIcon as HiTextAlignStart,\n ToggleLeftIcon as HiToggleLeft,\n ToggleRightIcon as HiToggleRight,\n TriangleAlertIcon as HiTriangleAlert,\n TriangleDashedIcon as HiTriangleDashed,\n TypeIcon as HiType,\n UploadIcon as HiUpload,\n UserIcon as HiUser,\n UserGroupIcon as HiUserGroup,\n WorkflowIcon as HiWorkflow,\n XIcon as HiX,\n ZapIcon as HiZap,\n} from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon, type HugeiconsProps, type IconSvgElement } from \"@hugeicons/react\";\nimport { type ForwardRefExoticComponent, forwardRef, type RefAttributes } from \"react\";\n\n/**\n * The package's icon set: Hugeicons (stroke-rounded, free) under the component\n * names the code already used. `Icon*` are the compact 16px variants the\n * internal controls render without a size class.\n */\n\nexport type IconProps = Omit<HugeiconsProps, \"icon\" | \"ref\">;\nexport type Icon = ForwardRefExoticComponent<IconProps & RefAttributes<SVGSVGElement>>;\n\n/** Wraps one Hugeicons glyph as a component, so an icon can be passed around\n * as a value (`icon: Mail`) and rendered as `<Mail className=\"size-4\" />`. */\nexport function icon(svg: IconSvgElement, displayName: string, defaults?: IconProps): Icon {\n const Glyph = forwardRef<SVGSVGElement, IconProps>((props, ref) => (\n <HugeiconsIcon ref={ref} icon={svg} {...defaults} {...props} />\n ));\n Glyph.displayName = displayName;\n return Glyph;\n}\n\nexport const Activity = icon(HiActivity, \"Activity\");\nexport const AlertCircle = icon(HiAlertCircle, \"AlertCircle\");\nexport const ArrowDown = icon(HiArrowDown, \"ArrowDown\");\nexport const ArrowUp = icon(HiArrowUp, \"ArrowUp\");\nexport const Asterisk = icon(HiAsterisk02, \"Asterisk\");\nexport const AtSign = icon(HiAtSign, \"AtSign\");\nexport const Award = icon(HiAward, \"Award\");\nexport const Banknote = icon(HiBanknote, \"Banknote\");\nexport const BarChart3 = icon(HiChartColumn, \"BarChart3\");\nexport const BookDashed = icon(HiBookDashed, \"BookDashed\");\nexport const BookOpen = icon(HiBookOpen, \"BookOpen\");\nexport const Bookmark = icon(HiBookmark, \"Bookmark\");\nexport const Boxes = icon(HiBoxes, \"Boxes\");\nexport const Braces = icon(HiBraces, \"Braces\");\nexport const Brain = icon(HiBrain, \"Brain\");\nexport const Briefcase = icon(HiBriefcase, \"Briefcase\");\nexport const BriefcaseBusiness = icon(HiBriefcaseBusiness, \"BriefcaseBusiness\");\nexport const Building2 = icon(HiBuilding03, \"Building2\");\nexport const Calendar = icon(HiCalendar, \"Calendar\");\nexport const CalendarClock = icon(HiCalendarClock, \"CalendarClock\");\nexport const Check = icon(HiCheck, \"Check\");\nexport const CheckCheck = icon(HiCheckCheck, \"CheckCheck\");\nexport const ChevronDown = icon(HiChevronDown, \"ChevronDown\");\nexport const ChevronRight = icon(HiChevronRight, \"ChevronRight\");\nexport const ChevronUp = icon(HiChevronUp, \"ChevronUp\");\nexport const CircleHelp = icon(HiHelpCircle, \"CircleHelp\");\nexport const Code2 = icon(HiCode, \"Code2\");\nexport const Cog = icon(HiSettings01, \"Cog\");\nexport const Coins = icon(HiCoins01, \"Coins\");\nexport const Compass = icon(HiCompass, \"Compass\");\nexport const Contact = icon(HiContact, \"Contact\");\n/** Credit cost — the plain two-coin glyph (no currency sign: credits aren't dollars). */\nexport const Coin = icon(HiCoins02, \"Coin\");\nexport const Copy = icon(HiCopy, \"Copy\");\nexport const Database = icon(HiDatabase02, \"Database\");\nexport const Download = icon(HiDownload, \"Download\");\nexport const Eraser = icon(HiEraser, \"Eraser\");\nexport const ExternalLink = icon(HiExternalLink, \"ExternalLink\");\nexport const Eye = icon(HiEye, \"Eye\");\nexport const EyeOff = icon(HiEyeOff, \"EyeOff\");\nexport const Factory = icon(HiFactory, \"Factory\");\nexport const Filter = icon(HiFilter, \"Filter\");\n/** Domains / websites — a plain meridian globe. */\nexport const Internet = icon(HiInternet, \"Internet\");\nexport const Globe = icon(HiGlobe, \"Globe\");\nexport const GraduationCap = icon(HiMortarboard02, \"GraduationCap\");\nexport const GripVertical = icon(HiGripVertical, \"GripVertical\");\nexport const Hammer = icon(HiHammer, \"Hammer\");\nexport const Handshake = icon(HiHandshake, \"Handshake\");\nexport const Hash = icon(HiHash, \"Hash\");\nexport const HelpCircle = icon(HiHelpCircle, \"HelpCircle\");\nexport const History = icon(HiHistory, \"History\");\nexport const Info = icon(HiInfo, \"Info\");\nexport const Key = icon(HiKey, \"Key\");\nexport const Languages = icon(HiLanguages, \"Languages\");\nexport const LetterText = icon(HiText, \"LetterText\");\nexport const Library = icon(HiLibrary, \"Library\");\nexport const Linkedin = icon(HiLinkedin01, \"Linkedin\");\nexport const List = icon(HiList, \"List\");\nexport const ListChecks = icon(HiListChecks, \"ListChecks\");\nexport const ListPlus = icon(HiListPlus, \"ListPlus\");\nexport const Loader = icon(HiLoader, \"Loader\");\nexport const Lock = icon(HiLock, \"Lock\");\nexport const Mail = icon(HiMail, \"Mail\");\nexport const MapPin = icon(HiMapPin, \"MapPin\");\nexport const Medal = icon(HiMedal, \"Medal\");\nexport const Minus = icon(HiMinus, \"Minus\");\nexport const MoreHorizontal = icon(HiMoreHorizontal, \"MoreHorizontal\");\nexport const Pause = icon(HiPause, \"Pause\");\nexport const Pencil = icon(HiPencilEdit01, \"Pencil\");\nexport const Percent = icon(HiPercent, \"Percent\");\nexport const Phone = icon(HiPhone, \"Phone\");\nexport const Play = icon(HiPlay, \"Play\");\nexport const Plug = icon(HiPlug, \"Plug\");\nexport const Plus = icon(HiPlus, \"Plus\");\nexport const RefreshCw = icon(HiRefreshCw, \"RefreshCw\");\nexport const ScanFace = icon(HiScanFace, \"ScanFace\");\nexport const Search = icon(HiSearch, \"Search\");\nexport const Shuffle = icon(HiShuffle, \"Shuffle\");\nexport const Sigma = icon(HiSigma, \"Sigma\");\nexport const SlidersHorizontal = icon(HiSlidersHorizontal, \"SlidersHorizontal\");\nexport const Sparkles = icon(HiSparkles, \"Sparkles\");\nexport const Star = icon(HiStar, \"Star\");\nexport const Swords = icon(HiSwords, \"Swords\");\nexport const Table = icon(HiTable, \"Table\");\nexport const Tag = icon(HiTag01, \"Tag\");\nexport const Tags = icon(HiTag02, \"Tags\");\nexport const TextAlignStart = icon(HiTextAlignStart, \"TextAlignStart\");\nexport const ToggleLeft = icon(HiToggleLeft, \"ToggleLeft\");\nexport const ToggleRight = icon(HiToggleRight, \"ToggleRight\");\nexport const Trash2 = icon(HiDelete02, \"Trash2\");\nexport const TriangleAlert = icon(HiTriangleAlert, \"TriangleAlert\");\nexport const TriangleDashed = icon(HiTriangleDashed, \"TriangleDashed\");\nexport const Type = icon(HiType, \"Type\");\nexport const Upload = icon(HiUpload, \"Upload\");\nexport const User = icon(HiUser, \"User\");\nexport const Users = icon(HiUserGroup, \"Users\");\nexport const Workflow = icon(HiWorkflow, \"Workflow\");\nexport const X = icon(HiX, \"X\");\nexport const Zap = icon(HiZap, \"Zap\");\n\nexport const IconBraces = icon(HiBraces, \"IconBraces\", { size: 16 });\nexport const IconCheck = icon(HiCheck, \"IconCheck\", { size: 16 });\nexport const IconChevronDown = icon(HiChevronDown, \"IconChevronDown\", { size: 16 });\nexport const IconChevronRight = icon(HiChevronRight, \"IconChevronRight\", { size: 16 });\nexport const IconError = icon(HiAlertCircle, \"IconError\", { size: 16 });\nexport const IconEye = icon(HiEye, \"IconEye\", { size: 16 });\nexport const IconEyeOff = icon(HiEyeOff, \"IconEyeOff\", { size: 16 });\nexport const IconGripVertical = icon(HiGripVertical, \"IconGripVertical\", { size: 16 });\nexport const IconInfo = icon(HiInfo, \"IconInfo\", { size: 16 });\nexport const IconLock = icon(HiLock, \"IconLock\", { size: 16 });\nexport const IconMinus = icon(HiMinus, \"IconMinus\", { size: 16 });\nexport const IconMoreHorizontal = icon(HiMoreHorizontal, \"IconMoreHorizontal\", { size: 16 });\nexport const IconPencil = icon(HiPencilEdit01, \"IconPencil\", { size: 16 });\nexport const IconPlay = icon(HiPlay, \"IconPlay\", { size: 16, fill: \"currentColor\" });\nexport const IconPlus = icon(HiPlus, \"IconPlus\", { size: 16 });\nexport const IconRefresh = icon(HiRefreshCw, \"IconRefresh\", { size: 16 });\nexport const IconTrash = icon(HiDelete02, \"IconTrash\", { size: 16 });\nexport const IconWarning = icon(HiTriangleAlert, \"IconWarning\", { size: 16 });\nexport const IconX = icon(HiX, \"IconX\", { size: 16 });\n"],"mappings":"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"}
@@ -17,7 +17,7 @@ import * as _$class_variance_authority_types0 from "class-variance-authority/typ
17
17
  * severity.
18
18
  */
19
19
  declare const alertVariants: (props?: ({
20
- variant?: "info" | "error" | "warning" | null | undefined;
20
+ variant?: "info" | "warning" | "error" | null | undefined;
21
21
  } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
22
22
  type AlertVariant = NonNullable<VariantProps<typeof alertVariants>["variant"]>;
23
23
  interface AlertProps extends Omit<ComponentProps<"div">, "title"> {
@@ -6,7 +6,7 @@ import * as _$class_variance_authority_types0 from "class-variance-authority/typ
6
6
  //#region src/components/ui/button.d.ts
7
7
  declare const buttonVariants: (props?: ({
8
8
  variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "destructive" | null | undefined;
9
- size?: "default" | "icon" | "sm" | "lg" | "xs" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
9
+ size?: "default" | "icon" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
10
10
  } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
11
11
  declare function Button$1({
12
12
  className,
@@ -3,9 +3,9 @@
3
3
  import { usePortalContainer } from "../../context/portal-container-context.mjs";
4
4
  import { cn } from "../../lib/utils.mjs";
5
5
  import { Button } from "./button.mjs";
6
+ import { Check, ChevronDown, X } from "../internal/icons.mjs";
6
7
  import * as React from "react";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
- import { CheckIcon, ChevronDownIcon, XIcon } from "lucide-react";
9
9
  import { Combobox } from "@base-ui/react";
10
10
 
11
11
  //#region src/components/ui/combobox.tsx
@@ -15,7 +15,7 @@ function ComboboxTrigger({ className, children, ...props }) {
15
15
  "data-slot": "combobox-trigger",
16
16
  className: cn("pz:[&_svg:not([class*=size-])]:size-4", className),
17
17
  ...props,
18
- children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pz:pointer-events-none pz:size-4 pz:text-muted-foreground" })]
18
+ children: [children, /* @__PURE__ */ jsx(ChevronDown, { className: "pz:pointer-events-none pz:size-4 pz:text-muted-foreground" })]
19
19
  });
20
20
  }
21
21
  function ComboboxContent({ className, side = "bottom", sideOffset = 6, align = "start", alignOffset = 0, anchor, ...props }) {
@@ -52,7 +52,7 @@ function ComboboxItem({ className, children, ...props }) {
52
52
  ...props,
53
53
  children: [children, /* @__PURE__ */ jsx(Combobox.ItemIndicator, {
54
54
  render: /* @__PURE__ */ jsx("span", { className: "pz:pointer-events-none pz:absolute pz:right-2 pz:flex pz:size-4 pz:items-center pz:justify-center" }),
55
- children: /* @__PURE__ */ jsx(CheckIcon, { className: "pz:pointer-events-none" })
55
+ children: /* @__PURE__ */ jsx(Check, { className: "pz:pointer-events-none" })
56
56
  })]
57
57
  });
58
58
  }
@@ -96,7 +96,7 @@ function ComboboxChip({ className, children, showRemove = true, ...props }) {
96
96
  }),
97
97
  className: "pz:-ml-1 pz:opacity-50 pz:hover:opacity-100",
98
98
  "data-slot": "combobox-chip-remove",
99
- children: /* @__PURE__ */ jsx(XIcon, { className: "pz:pointer-events-none" })
99
+ children: /* @__PURE__ */ jsx(X, { className: "pz:pointer-events-none" })
100
100
  })]
101
101
  });
102
102
  }