@arbidocs/blocks 0.5.8 → 0.5.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ConnectedNativeDocxComparison-VZLB7WWW.cjs → ConnectedNativeDocxComparison-E2QVYVVI.cjs} +8 -7
- package/dist/{ConnectedNativeDocxComparison-VZLB7WWW.cjs.map → ConnectedNativeDocxComparison-E2QVYVVI.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-4MI22H2R.js → ConnectedNativeDocxComparison-KPAQMOIF.js} +7 -6
- package/dist/{ConnectedNativeDocxComparison-4MI22H2R.js.map → ConnectedNativeDocxComparison-KPAQMOIF.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-YBHAQQSY.js → ConnectedNativeDocxEditor-5PF7J3CP.js} +6 -5
- package/dist/{ConnectedNativeDocxEditor-YBHAQQSY.js.map → ConnectedNativeDocxEditor-5PF7J3CP.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-74PFGTMR.cjs → ConnectedNativeDocxEditor-XV3K77ZB.cjs} +8 -7
- package/dist/{ConnectedNativeDocxEditor-74PFGTMR.cjs.map → ConnectedNativeDocxEditor-XV3K77ZB.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-63ME4QD5.cjs → ConnectedStreamedWordArtifact-3N5CIXZU.cjs} +8 -7
- package/dist/ConnectedStreamedWordArtifact-3N5CIXZU.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-ELHQ2VYL.js → ConnectedStreamedWordArtifact-L45BLBRH.js} +7 -6
- package/dist/{ConnectedStreamedWordArtifact-ELHQ2VYL.js.map → ConnectedStreamedWordArtifact-L45BLBRH.js.map} +1 -1
- package/dist/{WorkspaceTableView-3TIMUU2J.js → WorkspaceTableView-EZAFYKAJ.js} +4 -3
- package/dist/WorkspaceTableView-EZAFYKAJ.js.map +1 -0
- package/dist/{WorkspaceTableView-FROHEPCT.cjs → WorkspaceTableView-MQXVE3JB.cjs} +4 -3
- package/dist/WorkspaceTableView-MQXVE3JB.cjs.map +1 -0
- package/dist/agents/index.cjs +327 -326
- package/dist/agents/index.js +5 -4
- package/dist/calendar/EventAttachments.d.ts +17 -0
- package/dist/calendar/EventEditor.d.ts +1 -1
- package/dist/calendar/conference.d.ts +2 -0
- package/dist/calendar/index.cjs +117 -120
- package/dist/calendar/index.d.ts +0 -1
- package/dist/calendar/index.js +2 -1
- package/dist/calendar/types.d.ts +15 -35
- package/dist/{chunk-2A2QX3MS.js → chunk-3SKLWW5D.js} +4 -3
- package/dist/chunk-3SKLWW5D.js.map +1 -0
- package/dist/{chunk-Z7KGBVKI.js → chunk-6NSGSEYS.js} +5 -5
- package/dist/{chunk-Z7KGBVKI.js.map → chunk-6NSGSEYS.js.map} +1 -1
- package/dist/{chunk-FEYRHZYB.js → chunk-6SPVTPUQ.js} +3 -3
- package/dist/{chunk-FEYRHZYB.js.map → chunk-6SPVTPUQ.js.map} +1 -1
- package/dist/{chunk-M6Z7HTJ2.cjs → chunk-6TE3QA3Y.cjs} +6 -5
- package/dist/chunk-6TE3QA3Y.cjs.map +1 -0
- package/dist/{chunk-BJ24VPOA.js → chunk-AFIJCK66.js} +210 -214
- package/dist/chunk-AFIJCK66.js.map +1 -0
- package/dist/{chunk-2VHYOTWW.cjs → chunk-AQPZ4QMV.cjs} +3 -201
- package/dist/chunk-AQPZ4QMV.cjs.map +1 -0
- package/dist/{chunk-TUODUKDK.cjs → chunk-DP4GMPI3.cjs} +4 -4
- package/dist/{chunk-TUODUKDK.cjs.map → chunk-DP4GMPI3.cjs.map} +1 -1
- package/dist/{chunk-IK4AWPDW.js → chunk-ELH375VC.js} +3 -3
- package/dist/{chunk-IK4AWPDW.js.map → chunk-ELH375VC.js.map} +1 -1
- package/dist/{chunk-X5FS27BM.js → chunk-FJCSJLTM.js} +4 -4
- package/dist/{chunk-X5FS27BM.js.map → chunk-FJCSJLTM.js.map} +1 -1
- package/dist/{chunk-AQ2XKOQ7.js → chunk-FT22URKT.js} +4 -4
- package/dist/{chunk-AQ2XKOQ7.js.map → chunk-FT22URKT.js.map} +1 -1
- package/dist/{chunk-NUSBINUM.js → chunk-G4GLDQLY.js} +7 -203
- package/dist/chunk-G4GLDQLY.js.map +1 -0
- package/dist/{chunk-2CTG4DHL.cjs → chunk-I7GQO43N.cjs} +7 -7
- package/dist/{chunk-2CTG4DHL.cjs.map → chunk-I7GQO43N.cjs.map} +1 -1
- package/dist/{chunk-PSTA227J.cjs → chunk-NG6AGVZ4.cjs} +10 -10
- package/dist/{chunk-PSTA227J.cjs.map → chunk-NG6AGVZ4.cjs.map} +1 -1
- package/dist/{chunk-M7LMEVXY.cjs → chunk-PFJIGGNN.cjs} +50 -50
- package/dist/{chunk-M7LMEVXY.cjs.map → chunk-PFJIGGNN.cjs.map} +1 -1
- package/dist/{chunk-LLYZGH3L.cjs → chunk-PXVSZRCA.cjs} +208 -213
- package/dist/chunk-PXVSZRCA.cjs.map +1 -0
- package/dist/{chunk-AY66THUZ.cjs → chunk-RPWWMOYP.cjs} +9 -9
- package/dist/{chunk-AY66THUZ.cjs.map → chunk-RPWWMOYP.cjs.map} +1 -1
- package/dist/{chunk-3IQUMSJI.js → chunk-VMMRK4SR.js} +3 -3
- package/dist/{chunk-3IQUMSJI.js.map → chunk-VMMRK4SR.js.map} +1 -1
- package/dist/chunk-VZOOGA47.cjs +210 -0
- package/dist/chunk-VZOOGA47.cjs.map +1 -0
- package/dist/chunk-WNDIVNPT.js +207 -0
- package/dist/chunk-WNDIVNPT.js.map +1 -0
- package/dist/{chunk-6HPBSKXG.cjs → chunk-XUKQQCOK.cjs} +4 -4
- package/dist/{chunk-6HPBSKXG.cjs.map → chunk-XUKQQCOK.cjs.map} +1 -1
- package/dist/connect/docx.cjs +10 -9
- package/dist/connect/docx.js +6 -5
- package/dist/connect/index.cjs +381 -381
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +90 -90
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +3 -3
- package/dist/connect/viewer.js +3 -3
- package/dist/index.cjs +382 -381
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/settings/index.cjs +10 -9
- package/dist/settings/index.js +2 -1
- package/dist/workflow-canvas/index.cjs +18 -17
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +5 -4
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-63ME4QD5.cjs.map +0 -1
- package/dist/WorkspaceTableView-3TIMUU2J.js.map +0 -1
- package/dist/WorkspaceTableView-FROHEPCT.cjs.map +0 -1
- package/dist/calendar/RoomFinder.d.ts +0 -2
- package/dist/chunk-2A2QX3MS.js.map +0 -1
- package/dist/chunk-2VHYOTWW.cjs.map +0 -1
- package/dist/chunk-BJ24VPOA.js.map +0 -1
- package/dist/chunk-LLYZGH3L.cjs.map +0 -1
- package/dist/chunk-M6Z7HTJ2.cjs.map +0 -1
- package/dist/chunk-NUSBINUM.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/DroppableContainer.tsx","../src/components/Toolbar.tsx","../src/components/AskBar.tsx","../src/tags/TagsNav.tsx"],"names":["useDroppable","jsx","jsxs","cn","Search","Input","useState","useRef","Button","Sparkles","text","X","Plus"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useDroppable } from '@dnd-kit/core'\n\nexport interface DroppableContainerProps {\n id: string\n children: React.ReactNode\n className?: string\n}\n\nexport function DroppableContainer({ id, children, className = '' }: DroppableContainerProps) {\n const { setNodeRef } = useDroppable({ id })\n return (\n <div ref={setNodeRef} className={className}>\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Search } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\n/** Search + filter bar used above every list view. */\nexport function Toolbar({\n search,\n onSearch,\n searchPlaceholder = 'Search…',\n filters,\n actions,\n className,\n testId,\n}: {\n search?: string\n onSearch?: (v: string) => void\n searchPlaceholder?: string\n filters?: ReactNode\n actions?: ReactNode\n className?: string\n testId?: string\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between',\n className\n )}\n data-testid={testId}\n >\n <div className=\"flex flex-1 flex-wrap items-center gap-2\">\n {onSearch && (\n <div className=\"relative w-full max-w-xs\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => onSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"bg-card text-sm placeholder:text-muted-foreground focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring pl-8\"\n data-testid={testId ? `${testId}-search` : 'toolbar-search'}\n />\n </div>\n )}\n {filters}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )\n}\n","/**\n * A question box that IS the product's front door, not a link to one.\n *\n * One input, two destinations: Enter (or the arrow) ASKS — hands the trimmed\n * text to `onAsk`, the conversational answer — while the Search button beside\n * it hands the same text to `onSearch`, the retrieval experience. The split\n * matters because queries come in both registers (\"what does\n * this term mean\" vs \"find every mention of it\") and making them choose a\n * page before typing kills the impulse. Omit `onSearch` and the bar is a plain\n * ask composer.\n *\n * The consumer owns what asking and searching mean (start a chat, run smart\n * search, open a record). Suggestion chips prefill the input rather than\n * firing immediately: a suggestion is a starting point you edit, not a button\n * you regret.\n *\n * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,\n * primary), so every host gets it in its own colours.\n */\n\nimport { useRef, useState, type KeyboardEventHandler, type ReactNode, type RefObject } from 'react'\nimport { Search, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface AskBarProps {\n /** Receives the trimmed question; the caller owns what asking means. */\n onAsk: (text: string) => void\n /** Second destination for the same text — retrieval. Omit to hide. */\n onSearch?: (text: string) => void\n /** Prefill-on-click starter questions, shown under the input. */\n suggestions?: string[]\n placeholder?: string\n askLabel?: string\n searchLabel?: string\n /** Controlled value. Omit for the bar to own its own text. */\n value?: string\n onValueChange?: (value: string) => void\n /** Raw keydown on the input — lets a consumer run an autocomplete\n * (arrow/Enter/Tab/Escape) before the form's own submit handling.\n * preventDefault() on Enter suppresses the submit. */\n onInputKeyDown?: KeyboardEventHandler<HTMLInputElement>\n /** Popover anchored to the pill (e.g. a slash-command menu). Rendered in a\n * relative wrapper around the form, so absolute children position against\n * the pill. */\n menu?: ReactNode\n /** External input ref, for consumers that refocus after menu selection. */\n inputRef?: RefObject<HTMLInputElement | null>\n className?: string\n /** Root test id; children derive `-input`, `-submit`, `-search`, `-suggestion`. */\n testId?: string\n}\n\nexport function AskBar({\n onAsk,\n onSearch,\n suggestions = [],\n placeholder = 'Ask anything…',\n askLabel = 'Ask',\n searchLabel = 'Search',\n value,\n onValueChange,\n onInputKeyDown,\n menu,\n inputRef: externalInputRef,\n className,\n testId = 'ask-bar',\n}: AskBarProps) {\n const [innerText, setInnerText] = useState('')\n const text = value !== undefined ? value : innerText\n const setText = (next: string) => {\n onValueChange?.(next)\n if (value === undefined) setInnerText(next)\n }\n const localInputRef = useRef<HTMLInputElement>(null)\n const inputRef = externalInputRef ?? localInputRef\n\n const submitTo = (handler: (text: string) => void) => {\n const question = text.trim()\n if (!question) return\n handler(question)\n setText('')\n }\n\n return (\n <div className={cn('flex flex-col gap-2', className)} data-testid={testId}>\n <div className=\"relative\">\n {menu}\n <form\n onSubmit={(e) => {\n e.preventDefault()\n submitTo(onAsk)\n }}\n // The AppHeader search pill's language exactly — rounded-md,\n // border-input, magnifier left, muted text — so the bar sits in a\n // topbar the way a ⌘K trigger does, not like a chat composer\n // dropped into a header.\n className=\"flex h-12 items-center gap-1.5 rounded-md border border-border/50 bg-background pl-3 pr-1.5 transition-colors focus-within:border-border\"\n >\n <Search className=\"pointer-events-none size-4 shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n className=\"h-8 min-w-0 flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testId && `${testId}-input`}\n />\n {onSearch && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={!text.trim()}\n onClick={() => submitTo(onSearch)}\n className=\"h-8 shrink-0 px-2.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={testId && `${testId}-search`}\n >\n {searchLabel}\n </Button>\n )}\n {/* The primary door wears the Ask AI anatomy: Sparkles + label. */}\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!text.trim()}\n className=\"h-8 shrink-0 px-3 text-xs font-medium\"\n data-testid={testId && `${testId}-submit`}\n >\n <Sparkles className=\"size-3.5\" />\n {askLabel}\n </Button>\n </form>\n </div>\n {suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setText(s)\n inputRef.current?.focus()\n }}\n className=\"rounded-full border border-border/50 bg-card px-3 py-1 text-xs text-muted-foreground transition-colors hover:border-border hover:bg-accent hover:text-foreground\"\n data-testid={testId && `${testId}-suggestion`}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * The side navigation of a Tags page: the workspace's tags grouped by kind (labels, annotations,\n * issues, people, organisations, searches), each group with its count, each tag with how much\n * carries it, and nested tags (sub-labels) under their parent. A group heading selects the whole\n * kind; a tag selects that tag. One box finds and adds: typing filters the list, and a name that is\n * not there yet is offered as a new tag (\"Create …\", or Enter). Data-free: the host passes the\n * groups and creates.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { Plus, Search, X } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\nexport interface TagsNavItem {\n id: string\n name: string\n /** How many documents and facts carry it. */\n count?: number\n /** A swatch colour (any CSS colour). */\n color?: string\n /** Nested tags (e.g. sub-labels). */\n children?: TagsNavItem[]\n /** Other text the filter matches (e.g. the tag's field values). */\n keywords?: string\n}\n\nexport interface TagsNavGroup {\n id: string\n label: string\n icon?: ReactNode\n items: TagsNavItem[]\n}\n\n/** What is selected: a whole group, or one tag of it. */\nexport type TagsNavSelection = { groupId: string; itemId?: string }\n\nexport interface TagsNavLabels {\n filter: string\n clearFilter: string\n empty: string\n noMatch: string\n /** Offer to add the typed name: `{name}`. */\n create: string\n}\n\nexport const DEFAULT_TAGS_NAV_LABELS: TagsNavLabels = {\n filter: 'Find or add a tag…',\n clearFilter: 'Clear',\n empty: 'None yet',\n noMatch: 'No match',\n create: 'Create \"{name}\"',\n}\n\nexport interface TagsNavProps {\n groups: TagsNavGroup[]\n selected: TagsNavSelection | null\n onSelect: (selection: TagsNavSelection) => void\n /**\n * Add a tag by the name typed in the box when no tag has that name (any case). Absent: the box\n * only finds.\n */\n onCreate?: (name: string) => void | Promise<unknown>\n /**\n * The filter text, when the box lives elsewhere (e.g. the page header's filter): the list then\n * renders no box of its own and filters by this; `onFilterChange` hears a create clearing it.\n */\n filter?: string\n onFilterChange?: (text: string) => void\n /** Match items' `keywords` as well as their names. */\n matchKeywords?: boolean\n labels?: Partial<TagsNavLabels>\n className?: string\n testId?: string\n}\n\nconst total = (items: TagsNavItem[]): number =>\n items.reduce((n, item) => n + 1 + total(item.children ?? []), 0)\n\n/** The tag named `name` (any case) in these groups, with its group; nested ones included. */\nexport function findTagsNavItem(\n groups: TagsNavGroup[],\n name: string\n): { groupId: string; item: TagsNavItem } | undefined {\n const text = name.trim()\n if (!text) return undefined\n for (const g of groups) {\n const item = findByName(g.items, text)\n if (item) return { groupId: g.id, item }\n }\n return undefined\n}\n\n/** The item named `name` (any case), nested ones included. */\nfunction findByName(items: TagsNavItem[], name: string): TagsNavItem | undefined {\n const needle = name.toLowerCase()\n for (const item of items) {\n if (item.name.trim().toLowerCase() === needle) return item\n const nested = findByName(item.children ?? [], name)\n if (nested) return nested\n }\n return undefined\n}\n\n/** The items whose name (or keywords, or a nested item's) contains `text`, nesting kept. */\nfunction filterItems(items: TagsNavItem[], text: string, keywords = false): TagsNavItem[] {\n if (!text) return items\n const needle = text.toLowerCase()\n return items.flatMap((item) => {\n const children = filterItems(item.children ?? [], text, keywords)\n const hit =\n item.name.toLowerCase().includes(needle) ||\n (keywords && !!item.keywords?.toLowerCase().includes(needle))\n return hit || children.length ? [{ ...item, children }] : []\n })\n}\n\nexport function TagsNav({\n groups,\n selected,\n onSelect,\n onCreate,\n filter: controlledFilter,\n onFilterChange,\n matchKeywords = false,\n labels,\n className,\n testId = 'tags-nav',\n}: TagsNavProps) {\n const l = { ...DEFAULT_TAGS_NAV_LABELS, ...labels }\n const [ownFilter, setOwnFilter] = useState('')\n const hasOwnBox = controlledFilter === undefined\n const filter = hasOwnBox ? ownFilter : controlledFilter\n const setFilter = (text: string) => (hasOwnBox ? setOwnFilter(text) : onFilterChange?.(text))\n const [creating, setCreating] = useState(false)\n const text = filter.trim()\n const exact = findTagsNavItem(groups, text)\n const canCreate = !!onCreate && !!text && !exact\n const filterGroup = (items: TagsNavItem[]) => filterItems(items, text, matchKeywords)\n\n const create = async () => {\n if (!canCreate || creating) return\n setCreating(true)\n try {\n await onCreate?.(text)\n setFilter('')\n } finally {\n setCreating(false)\n }\n }\n\n const row = (groupId: string, item: TagsNavItem, depth: number): ReactNode => {\n const active = selected?.groupId === groupId && selected.itemId === item.id\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId, itemId: item.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md py-1.5 pr-2 text-left text-sm transition-colors hover:bg-muted pointer-coarse:min-h-11',\n active && 'bg-primary/10 font-medium text-primary hover:bg-primary/10'\n )}\n style={{ paddingLeft: 12 + depth * 16 }}\n data-testid={`${testId}-item-${item.id}`}\n >\n {item.color && (\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: item.color }}\n aria-hidden\n />\n )}\n <span className=\"min-w-0 flex-1 truncate\" title={item.name}>\n {item.name}\n </span>\n {item.count !== undefined && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {item.count}\n </span>\n )}\n </button>\n {!!item.children?.length && (\n <ul>{item.children.map((child) => row(groupId, child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n\n return (\n <nav className={cn('flex flex-col gap-3', className)} data-testid={testId}>\n {hasOwnBox && (\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return\n e.preventDefault()\n if (canCreate) void create()\n else if (exact?.item) onSelect({ groupId: exact.groupId, itemId: exact.item.id })\n }}\n placeholder={l.filter}\n aria-label={l.filter}\n className=\"h-8 pl-8 pr-8 text-sm\"\n data-testid={`${testId}-filter`}\n />\n {filter && (\n <button\n type=\"button\"\n onClick={() => setFilter('')}\n aria-label={l.clearFilter}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n )}\n {canCreate && (\n <button\n type=\"button\"\n onClick={() => void create()}\n disabled={creating}\n className=\"flex w-full items-center gap-2 rounded-md px-3 py-1.5 text-left text-sm text-primary transition-colors hover:bg-muted disabled:opacity-60 pointer-coarse:min-h-11\"\n data-testid={`${testId}-create`}\n >\n <Plus className=\"size-4 shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">{l.create.replace('{name}', text)}</span>\n </button>\n )}\n {groups.map((group) => {\n const items = filterGroup(group.items)\n if (text && !items.length) return null\n const active = selected?.groupId === group.id && !selected.itemId\n return (\n <section key={group.id} data-testid={`${testId}-group-${group.id}`}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId: group.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-muted hover:text-foreground pointer-coarse:min-h-11',\n active && 'bg-primary/10 text-primary hover:bg-primary/10 hover:text-primary'\n )}\n data-testid={`${testId}-group-${group.id}-heading`}\n >\n {group.icon && <span className=\"shrink-0 [&_svg]:size-4\">{group.icon}</span>}\n <span className=\"flex-1\">{group.label}</span>\n <span className=\"tabular-nums\" data-testid={`${testId}-group-${group.id}-count`}>\n {total(group.items)}\n </span>\n </button>\n {items.length ? (\n <ul className=\"mt-0.5\">{items.map((item) => row(group.id, item, 0))}</ul>\n ) : (\n <p className=\"px-3 py-1 text-xs text-muted-foreground\">{l.empty}</p>\n )}\n </section>\n )\n })}\n {text && !canCreate && groups.every((g) => !filterGroup(g.items).length) && (\n <p className=\"px-2 text-sm text-muted-foreground\">{l.noMatch}</p>\n )}\n </nav>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/DroppableContainer.tsx","../src/components/Toolbar.tsx","../src/components/AskBar.tsx","../src/tags/TagsNav.tsx"],"names":["useDroppable","jsx","jsxs","cn","Search","Input","useState","useRef","Button","Sparkles","text","X","Plus"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useDroppable } from '@dnd-kit/core'\n\nexport interface DroppableContainerProps {\n id: string\n children: React.ReactNode\n className?: string\n}\n\nexport function DroppableContainer({ id, children, className = '' }: DroppableContainerProps) {\n const { setNodeRef } = useDroppable({ id })\n return (\n <div ref={setNodeRef} className={className}>\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Search } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\n/** Search + filter bar used above every list view. */\nexport function Toolbar({\n search,\n onSearch,\n searchPlaceholder = 'Search…',\n filters,\n actions,\n className,\n testId,\n}: {\n search?: string\n onSearch?: (v: string) => void\n searchPlaceholder?: string\n filters?: ReactNode\n actions?: ReactNode\n className?: string\n testId?: string\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between',\n className\n )}\n data-testid={testId}\n >\n <div className=\"flex flex-1 flex-wrap items-center gap-2\">\n {onSearch && (\n <div className=\"relative w-full max-w-xs\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => onSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"bg-card text-sm placeholder:text-muted-foreground focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring pl-8\"\n data-testid={testId ? `${testId}-search` : 'toolbar-search'}\n />\n </div>\n )}\n {filters}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )\n}\n","/**\n * A question box that IS the product's front door, not a link to one.\n *\n * One input, two destinations: Enter (or the arrow) ASKS — hands the trimmed\n * text to `onAsk`, the conversational answer — while the Search button beside\n * it hands the same text to `onSearch`, the retrieval experience. The split\n * matters because queries come in both registers (\"what does\n * this term mean\" vs \"find every mention of it\") and making them choose a\n * page before typing kills the impulse. Omit `onSearch` and the bar is a plain\n * ask composer.\n *\n * The consumer owns what asking and searching mean (start a chat, run smart\n * search, open a record). Suggestion chips prefill the input rather than\n * firing immediately: a suggestion is a starting point you edit, not a button\n * you regret.\n *\n * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,\n * primary), so every host gets it in its own colours.\n */\n\nimport { useRef, useState, type KeyboardEventHandler, type ReactNode, type RefObject } from 'react'\nimport { Search, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface AskBarProps {\n /** Receives the trimmed question; the caller owns what asking means. */\n onAsk: (text: string) => void\n /** Second destination for the same text — retrieval. Omit to hide. */\n onSearch?: (text: string) => void\n /** Prefill-on-click starter questions, shown under the input. */\n suggestions?: string[]\n placeholder?: string\n askLabel?: string\n searchLabel?: string\n /** Controlled value. Omit for the bar to own its own text. */\n value?: string\n onValueChange?: (value: string) => void\n /** Raw keydown on the input — lets a consumer run an autocomplete\n * (arrow/Enter/Tab/Escape) before the form's own submit handling.\n * preventDefault() on Enter suppresses the submit. */\n onInputKeyDown?: KeyboardEventHandler<HTMLInputElement>\n /** Popover anchored to the pill (e.g. a slash-command menu). Rendered in a\n * relative wrapper around the form, so absolute children position against\n * the pill. */\n menu?: ReactNode\n /** External input ref, for consumers that refocus after menu selection. */\n inputRef?: RefObject<HTMLInputElement | null>\n className?: string\n /** Root test id; children derive `-input`, `-submit`, `-search`, `-suggestion`. */\n testId?: string\n}\n\nexport function AskBar({\n onAsk,\n onSearch,\n suggestions = [],\n placeholder = 'Ask anything…',\n askLabel = 'Ask',\n searchLabel = 'Search',\n value,\n onValueChange,\n onInputKeyDown,\n menu,\n inputRef: externalInputRef,\n className,\n testId = 'ask-bar',\n}: AskBarProps) {\n const [innerText, setInnerText] = useState('')\n const text = value !== undefined ? value : innerText\n const setText = (next: string) => {\n onValueChange?.(next)\n if (value === undefined) setInnerText(next)\n }\n const localInputRef = useRef<HTMLInputElement>(null)\n const inputRef = externalInputRef ?? localInputRef\n\n const submitTo = (handler: (text: string) => void) => {\n const question = text.trim()\n if (!question) return\n handler(question)\n setText('')\n }\n\n return (\n <div className={cn('flex flex-col gap-2', className)} data-testid={testId}>\n <div className=\"relative\">\n {menu}\n <form\n onSubmit={(e) => {\n e.preventDefault()\n submitTo(onAsk)\n }}\n // The AppHeader search pill's language exactly — rounded-md,\n // border-input, magnifier left, muted text — so the bar sits in a\n // topbar the way a ⌘K trigger does, not like a chat composer\n // dropped into a header.\n className=\"flex h-12 items-center gap-1.5 rounded-md border border-border/50 bg-background pl-3 pr-1.5 transition-colors focus-within:border-border\"\n >\n <Search className=\"pointer-events-none size-4 shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n className=\"h-8 min-w-0 flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testId && `${testId}-input`}\n />\n {onSearch && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={!text.trim()}\n onClick={() => submitTo(onSearch)}\n className=\"h-8 shrink-0 px-2.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={testId && `${testId}-search`}\n >\n {searchLabel}\n </Button>\n )}\n {/* The primary door wears the Ask AI anatomy: Sparkles + label. */}\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!text.trim()}\n className=\"h-8 shrink-0 px-3 text-xs font-medium\"\n data-testid={testId && `${testId}-submit`}\n >\n <Sparkles className=\"size-3.5\" />\n {askLabel}\n </Button>\n </form>\n </div>\n {suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setText(s)\n inputRef.current?.focus()\n }}\n className=\"rounded-full border border-border/50 bg-card px-3 py-1 text-xs text-muted-foreground transition-colors hover:border-border hover:bg-accent hover:text-foreground\"\n data-testid={testId && `${testId}-suggestion`}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * The side navigation of a Tags page: the workspace's tags grouped by kind (labels, annotations,\n * issues, people, organisations, searches), each group with its count, each tag with how much\n * carries it, and nested tags (sub-labels) under their parent. A group heading selects the whole\n * kind; a tag selects that tag. One box finds and adds: typing filters the list, and a name that is\n * not there yet is offered as a new tag (\"Create …\", or Enter). Data-free: the host passes the\n * groups and creates.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { Plus, Search, X } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\nexport interface TagsNavItem {\n id: string\n name: string\n /** How many documents and facts carry it. */\n count?: number\n /** A swatch colour (any CSS colour). */\n color?: string\n /** Nested tags (e.g. sub-labels). */\n children?: TagsNavItem[]\n /** Other text the filter matches (e.g. the tag's field values). */\n keywords?: string\n}\n\nexport interface TagsNavGroup {\n id: string\n label: string\n icon?: ReactNode\n items: TagsNavItem[]\n}\n\n/** What is selected: a whole group, or one tag of it. */\nexport type TagsNavSelection = { groupId: string; itemId?: string }\n\nexport interface TagsNavLabels {\n filter: string\n clearFilter: string\n empty: string\n noMatch: string\n /** Offer to add the typed name: `{name}`. */\n create: string\n}\n\nexport const DEFAULT_TAGS_NAV_LABELS: TagsNavLabels = {\n filter: 'Find or add a tag…',\n clearFilter: 'Clear',\n empty: 'None yet',\n noMatch: 'No match',\n create: 'Create \"{name}\"',\n}\n\nexport interface TagsNavProps {\n groups: TagsNavGroup[]\n selected: TagsNavSelection | null\n onSelect: (selection: TagsNavSelection) => void\n /**\n * Add a tag by the name typed in the box when no tag has that name (any case). Absent: the box\n * only finds.\n */\n onCreate?: (name: string) => void | Promise<unknown>\n /**\n * The filter text, when the box lives elsewhere (e.g. the page header's filter): the list then\n * renders no box of its own and filters by this; `onFilterChange` hears a create clearing it.\n */\n filter?: string\n onFilterChange?: (text: string) => void\n /** Match items' `keywords` as well as their names. */\n matchKeywords?: boolean\n labels?: Partial<TagsNavLabels>\n className?: string\n testId?: string\n}\n\nconst total = (items: TagsNavItem[]): number =>\n items.reduce((n, item) => n + 1 + total(item.children ?? []), 0)\n\n/** The tag named `name` (any case) in these groups, with its group; nested ones included. */\nexport function findTagsNavItem(\n groups: TagsNavGroup[],\n name: string\n): { groupId: string; item: TagsNavItem } | undefined {\n const text = name.trim()\n if (!text) return undefined\n for (const g of groups) {\n const item = findByName(g.items, text)\n if (item) return { groupId: g.id, item }\n }\n return undefined\n}\n\n/** The item named `name` (any case), nested ones included. */\nfunction findByName(items: TagsNavItem[], name: string): TagsNavItem | undefined {\n const needle = name.toLowerCase()\n for (const item of items) {\n if (item.name.trim().toLowerCase() === needle) return item\n const nested = findByName(item.children ?? [], name)\n if (nested) return nested\n }\n return undefined\n}\n\n/** The items whose name (or keywords, or a nested item's) contains `text`, nesting kept. */\nfunction filterItems(items: TagsNavItem[], text: string, keywords = false): TagsNavItem[] {\n if (!text) return items\n const needle = text.toLowerCase()\n return items.flatMap((item) => {\n const children = filterItems(item.children ?? [], text, keywords)\n const hit =\n item.name.toLowerCase().includes(needle) ||\n (keywords && !!item.keywords?.toLowerCase().includes(needle))\n return hit || children.length ? [{ ...item, children }] : []\n })\n}\n\nexport function TagsNav({\n groups,\n selected,\n onSelect,\n onCreate,\n filter: controlledFilter,\n onFilterChange,\n matchKeywords = false,\n labels,\n className,\n testId = 'tags-nav',\n}: TagsNavProps) {\n const l = { ...DEFAULT_TAGS_NAV_LABELS, ...labels }\n const [ownFilter, setOwnFilter] = useState('')\n const hasOwnBox = controlledFilter === undefined\n const filter = hasOwnBox ? ownFilter : controlledFilter\n const setFilter = (text: string) => (hasOwnBox ? setOwnFilter(text) : onFilterChange?.(text))\n const [creating, setCreating] = useState(false)\n const text = filter.trim()\n const exact = findTagsNavItem(groups, text)\n const canCreate = !!onCreate && !!text && !exact\n const filterGroup = (items: TagsNavItem[]) => filterItems(items, text, matchKeywords)\n\n const create = async () => {\n if (!canCreate || creating) return\n setCreating(true)\n try {\n await onCreate?.(text)\n setFilter('')\n } finally {\n setCreating(false)\n }\n }\n\n const row = (groupId: string, item: TagsNavItem, depth: number): ReactNode => {\n const active = selected?.groupId === groupId && selected.itemId === item.id\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId, itemId: item.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md py-1.5 pr-2 text-left text-sm transition-colors hover:bg-muted pointer-coarse:min-h-11',\n active && 'bg-primary/10 font-medium text-primary hover:bg-primary/10'\n )}\n style={{ paddingLeft: 12 + depth * 16 }}\n data-testid={`${testId}-item-${item.id}`}\n >\n {item.color && (\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: item.color }}\n aria-hidden\n />\n )}\n <span className=\"min-w-0 flex-1 truncate\" title={item.name}>\n {item.name}\n </span>\n {item.count !== undefined && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {item.count}\n </span>\n )}\n </button>\n {!!item.children?.length && (\n <ul>{item.children.map((child) => row(groupId, child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n\n return (\n <nav className={cn('flex flex-col gap-3', className)} data-testid={testId}>\n {hasOwnBox && (\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return\n e.preventDefault()\n if (canCreate) void create()\n else if (exact?.item) onSelect({ groupId: exact.groupId, itemId: exact.item.id })\n }}\n placeholder={l.filter}\n aria-label={l.filter}\n className=\"h-8 pl-8 pr-8 text-sm\"\n data-testid={`${testId}-filter`}\n />\n {filter && (\n <button\n type=\"button\"\n onClick={() => setFilter('')}\n aria-label={l.clearFilter}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n )}\n {canCreate && (\n <button\n type=\"button\"\n onClick={() => void create()}\n disabled={creating}\n className=\"flex w-full items-center gap-2 rounded-md px-3 py-1.5 text-left text-sm text-primary transition-colors hover:bg-muted disabled:opacity-60 pointer-coarse:min-h-11\"\n data-testid={`${testId}-create`}\n >\n <Plus className=\"size-4 shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">{l.create.replace('{name}', text)}</span>\n </button>\n )}\n {groups.map((group) => {\n const items = filterGroup(group.items)\n if (text && !items.length) return null\n const active = selected?.groupId === group.id && !selected.itemId\n return (\n <section key={group.id} data-testid={`${testId}-group-${group.id}`}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId: group.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-muted hover:text-foreground pointer-coarse:min-h-11',\n active && 'bg-primary/10 text-primary hover:bg-primary/10 hover:text-primary'\n )}\n data-testid={`${testId}-group-${group.id}-heading`}\n >\n {group.icon && <span className=\"shrink-0 [&_svg]:size-4\">{group.icon}</span>}\n <span className=\"flex-1\">{group.label}</span>\n <span className=\"tabular-nums\" data-testid={`${testId}-group-${group.id}-count`}>\n {total(group.items)}\n </span>\n </button>\n {items.length ? (\n <ul className=\"mt-0.5\">{items.map((item) => row(group.id, item, 0))}</ul>\n ) : (\n <p className=\"px-3 py-1 text-xs text-muted-foreground\">{l.empty}</p>\n )}\n </section>\n )\n })}\n {text && !canCreate && groups.every((g) => !filterGroup(g.items).length) && (\n <p className=\"px-2 text-sm text-muted-foreground\">{l.noMatch}</p>\n )}\n </nav>\n )\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ export { Accordion, AvatarBlock, Banner, BlockImage, BlockLink, CTABanner, Colum
|
|
|
6
6
|
export { Timeline } from './chunk-OVEQERPO.js';
|
|
7
7
|
export { CitationEditor } from './chunk-ZNLTEZEF.js';
|
|
8
8
|
export { ContactCard, DEFAULT_CONTACT_CARD_LABELS, contactToVCard, downloadVCard, vCardFilename } from './chunk-TTS353W2.js';
|
|
9
|
-
export { DEFAULT_GLOSSARY_LABELS, DEFAULT_TAG_COLUMNS_EDITOR_LABELS, DEFAULT_TAG_DETAIL_LABELS, DEFAULT_TAG_TABLE_DOCX_LABELS, DEFAULT_TAG_TABLE_LABELS, DEFAULT_THREAD_FOLLOW_LABELS, DEFAULT_WORKSPACE_ACTIVITY_LABELS, DEFAULT_WORKSPACE_NOTIFICATION_MENU_LABELS, EXTRACT_LIMIT, EntityIdentityBar, EntityTooltip, EntityTooltipHeader, EntityTooltipHint, EntityTooltipSection, EntityTooltipStats, ExtractEntitiesDialog, GridRowNavigator, IDENTITY_NAME_MAX_LENGTH, LoadingIndicator, SharedCell, TAG_TABLE_DOCX_LANDSCAPE_AFTER, TagColumnsEditor, TagDetail, TagPicker, TagTable, TagTableCell, ThreadFollowButton, ThreadFollowMenuItem, WorkspaceActivityList, WorkspaceNotificationMenu, cellText, cellValue, documentCount, entitiesPhrase, fieldWrites, glossaryDocumentXml, glossaryDocx, glossaryEntries, glossaryFileName, glossaryMarkdown, isGap, parseCell, rowLinks, tagDetailLabels, tagKindDescription, tagNoteLabel, tagTableDocumentXml, tagTableDocx, tagTableLabels, tagTableMarkdown, tagsPageNouns, workspaceActivityHeadline, workspaceActivityTarget } from './chunk-
|
|
9
|
+
export { DEFAULT_GLOSSARY_LABELS, DEFAULT_TAG_COLUMNS_EDITOR_LABELS, DEFAULT_TAG_DETAIL_LABELS, DEFAULT_TAG_TABLE_DOCX_LABELS, DEFAULT_TAG_TABLE_LABELS, DEFAULT_THREAD_FOLLOW_LABELS, DEFAULT_WORKSPACE_ACTIVITY_LABELS, DEFAULT_WORKSPACE_NOTIFICATION_MENU_LABELS, EXTRACT_LIMIT, EntityIdentityBar, EntityTooltip, EntityTooltipHeader, EntityTooltipHint, EntityTooltipSection, EntityTooltipStats, ExtractEntitiesDialog, GridRowNavigator, IDENTITY_NAME_MAX_LENGTH, LoadingIndicator, SharedCell, TAG_TABLE_DOCX_LANDSCAPE_AFTER, TagColumnsEditor, TagDetail, TagPicker, TagTable, TagTableCell, ThreadFollowButton, ThreadFollowMenuItem, WorkspaceActivityList, WorkspaceNotificationMenu, cellText, cellValue, documentCount, entitiesPhrase, fieldWrites, glossaryDocumentXml, glossaryDocx, glossaryEntries, glossaryFileName, glossaryMarkdown, isGap, parseCell, rowLinks, tagDetailLabels, tagKindDescription, tagNoteLabel, tagTableDocumentXml, tagTableDocx, tagTableLabels, tagTableMarkdown, tagsPageNouns, workspaceActivityHeadline, workspaceActivityTarget } from './chunk-FT22URKT.js';
|
|
10
10
|
export { MemberAvatarStack } from './chunk-XNOASBGW.js';
|
|
11
11
|
export { ApplyLabelButton, ApplyLabelDialog, DEFAULT_APPLY_LABEL_DIALOG_LABELS, DEFAULT_RELEVANCE_STEPS, DEFAULT_SEARCH_BAR_LABELS, DEFAULT_SEARCH_EMPTY_STATE_LABELS, DEFAULT_SEARCH_GROUP_HEADER_LABELS, DEFAULT_SEARCH_NO_RESULTS_LABELS, DEFAULT_SEARCH_PAGINATION_LABELS, DEFAULT_SEARCH_TOTALS_LABELS, DOCUMENT_SEARCH_NOUNS, RelevanceThreshold, SearchBar, SearchControlsBar, SearchEmptyState, SearchErrorBanner, SearchGroupCard, SearchGroupHeader, SearchNoResults, SearchPageBody, SearchPageFrame, SearchPageHeader, SearchPagination, SearchPillToggle, SearchResultList, SearchResultsInner, SearchResultsMain, SearchSnippet, SearchToolbarRow, SearchTotalsHeadline, extractHighlightTerms, extractQuotedTerms, getPageNumbers, getSearchMatchHint, groupSearchResults, highlightTerms, isMeaningMatch, passesRelevanceCutoff, renderSearchSnippet, searchNouns, stripMarkdownLinks } from './chunk-G4IYES7G.js';
|
|
12
12
|
export { DEFAULT_SEARCH_HIT_LABELS, SearchHit } from './chunk-TZHPRK4H.js';
|
|
@@ -25,12 +25,12 @@ export { DEFAULT_SHARE_CONTROL_LABELS, ShareControl } from './chunk-K4BGOPGG.js'
|
|
|
25
25
|
export { DEFAULT_DETAIL_PANEL_LABELS, DetailBody, DetailEmpty, DetailField, DetailFields, DetailLinkItem, DetailLinkList, DetailLoading, DetailPanel, DetailSection } from './chunk-ZCOVDK2E.js';
|
|
26
26
|
export { DEFINITIONS_LABEL, DEFINITION_BOOKMARK_PREFIX, compareDefinitions, compareTerms, definitionBookmark, definitionIdOfBookmark, definitionLabels, filterTermGroups, findDefinitionsLabel, groupDefinitions, isDefinitionsLabel, parseDefinition, termKey, toDefinition, toDefinitionSource } from './chunk-DIB4JYUY.js';
|
|
27
27
|
import './chunk-AF6RDAJF.js';
|
|
28
|
-
export { AgentCard, AgentGallery, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_ROW_LABELS, DEFAULT_TASKS_CHROME_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_STATUS_PILL_LABELS, DEFAULT_TASK_THREAD_CHIP_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOWS_CHROME_LABELS, SkillCard, SkillRow, TASK_COLUMN_ORDER, TaskInbox, TaskMoveDialog, TaskOutputsCell, TaskStatusPill, TaskTable, TaskThreadChip, TasksToolbar, ThreadNotifyDialog, UploadTaskItem, UploadTaskList, WorkflowsToolbar, createTaskColumns, filterConversationRows, formatElapsed, useWorkflowPreview } from './chunk-
|
|
29
|
-
export { ANNOTATE, ANNOTATE_ID, AUTOMATION_EVENTS, ActionStepBody, AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentConnectInstructions, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentMainView, AgentTypeSelector, ApprovalEvidence, AssigneeLine, AssistantEntity, BUILTIN_SKILLS, CHRONOLOGY, CHRONOLOGY_ID, CUSTOM_TASK, CUSTOM_TASK_ID, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, DASHBOARD_OPERATIONS, DASHBOARD_PINNED, DEEP_RESEARCH, DEEP_RESEARCH_ID, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CAPABILITIES, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_STEPS_LABELS, DEFAULT_AGENT_TEMPLATES, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TYPE_SELECTOR_LABELS, DEFAULT_AUTHORIZE_AGENT_LABELS, DEFAULT_CONFIG_FIELD_LABELS, DEFAULT_CONFIG_FORM_LABELS, DEFAULT_NEW_THREAD_DIALOG_LABELS, DEFAULT_PILL_SELECT_LABELS, DEFAULT_RECURRENCE, DEFAULT_RECURRENCE_BUILDER_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_GLOBAL_BADGE_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_STEP_BAR_LABELS, DEFAULT_SUBAGENT_ROSTER_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_PLAN_LABELS, DEFAULT_TASK_RUNS_DIALOG_LABELS, DEFAULT_THREAD_LAUNCHER_LABELS, DEFAULT_THREAD_STATE_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_STATUS_LABELS, DEFAULT_WORKFLOW_STEP_PARTS_LABELS, DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, DERIVED_NAME_WORDS, EMPTY_NEW_THREAD, EntityChip, GENERATE_IMAGE, GENERATE_IMAGE_ID, GoalCriteria, IMAGE_ASPECT_AUTO, IMAGE_ASPECT_RATIOS, MAX_TASK_DEPTH, MODEL_NAME_ICONS, MODEL_TIER_ICON_MAP, MODEL_TIER_LABELS, NewThreadDialog, PillSelect, REMIND_TASK, REMIND_TASK_ID, RecurrenceBuilder, SKILL_FIELD_TYPE_LABELS, SKILL_MAIN_FILENAME, SKILL_SOURCE_LABELS, SKILL_TYPES, SKILL_TYPE_LABELS, STATUS_LABELS, STATUS_ORDER, STATUS_TONE, STEP_ICON_MAP, SUMMARISE, SUMMARISE_ID, SendBackControl, SkillActionButton, SkillDetail, SkillDetailSection, SkillEditForm, SkillFilterChips, SkillGenerateForm, SkillGlobalBadge, SkillLibraryDetail, SkillTile, SkillTypeBadge, SkillViewToggle, StepDetail, StepNarration, StepOutcome, StepParams, StepRow, StepSummary, StepTrace, StepTraceSummary, SubAgentLane, SubStepGroup, SubagentRoster, TAG_ICONS, TIMELINE, TIMELINE_ID, TIMELINE_PROMPT, TOOL_ICON_MAP, TRANSLATE, TRANSLATE_ID, TRANSLATE_LANGUAGES, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskEmptyState, TaskFlow, TaskPlan, TaskRunsDialog, TaskStartDialog, ThreadActivity, ThreadLauncher, ThreadStatusLine, TupleArrayField, WEB_WORKFLOWS, WEEKDAYS, WORD_ASK, WORD_ASK_ID, WORD_CONTINUE, WORD_CONTINUE_ID, WORD_SUMMARISE, WORD_SUMMARISE_ID, WORD_SUPPORT, WORD_SUPPORT_ID, WORD_WORKFLOWS, WORKFLOW_REGISTRY, WorkflowRunStatus, WorkflowRunner, WorkflowStepAction, WorkflowThreadStartedBy, WorkflowThreadStrip, activeStepId, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, authModeFor, buildLibrarySkills, buildRRule, buildTaskRows, buildZipSkillImport, closeWorkflowLaunch, compactThreadActivity, composePersona, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createsWork, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, deriveAnnotationName, deriveWorkflowName, descendantIds, describeRRule, describeTrigger, filterLibrarySkills, firstWords, fromPlanAssignee, fromPlanDocumentRef, fromPlanSteps, getAgentStepIcon, getAgentStepPresentation, getCurrentAgentStepPresentation, getModelIcon, goalProgress, groupThreadActivity, hasTaskFields, humanizeSection, importMarkdownSkill, importSkillFile, importSkillFromUrl, indexTasks, inferType, inputDocumentIds, isAgenticWorkflow, isIncompleteSignal, isMainSkillFile, isOutOfBounds, isPlainTodo, isSupersededStop, isValidAgentName, isoToLocalInput, latestMessageTime, layoutFromPlanSteps, linkedRunsFromActivity, localInputToIso, moveTargets, newThreadToRequest, nextCriterionId, notifiedLabel, openWorkflowLaunch, ownerExtId, parseRRule, parseSkillFrontmatter, prettifyKey, readSkillArchive, recordWorkflowUse, renderWorkflowIcon, resetWorkflowUsage, resolveScopeInputs, serializeSkill, skillSlug, sortByRecentUse, stepAccent, stepWindow, stripPersonaPreamble, summarizeAgent, summarizeCapabilities, taskActivityHeadline, taskComposerToCreateRequest, taskComposerToUpdateRequest, taskNeedsAccess, taskToComposerValues, toPlanAssignee, toPlanDocumentRef, toPlanSteps, unnotifiedMentions, useWorkflowLaunchRequest, useWorkflowUsage, useWorkflowView, workflowFromSkillMarkdown, workflowTaskFields, workflowToComposerValues, workflowToSkillMarkdown, workflowWhen } from './chunk-
|
|
28
|
+
export { AgentCard, AgentGallery, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_ROW_LABELS, DEFAULT_TASKS_CHROME_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_STATUS_PILL_LABELS, DEFAULT_TASK_THREAD_CHIP_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOWS_CHROME_LABELS, SkillCard, SkillRow, TASK_COLUMN_ORDER, TaskInbox, TaskMoveDialog, TaskOutputsCell, TaskStatusPill, TaskTable, TaskThreadChip, TasksToolbar, ThreadNotifyDialog, UploadTaskItem, UploadTaskList, WorkflowsToolbar, createTaskColumns, filterConversationRows, formatElapsed, useWorkflowPreview } from './chunk-6NSGSEYS.js';
|
|
29
|
+
export { ANNOTATE, ANNOTATE_ID, AUTOMATION_EVENTS, ActionStepBody, AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentConnectInstructions, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentMainView, AgentTypeSelector, ApprovalEvidence, AssigneeLine, AssistantEntity, BUILTIN_SKILLS, CHRONOLOGY, CHRONOLOGY_ID, CUSTOM_TASK, CUSTOM_TASK_ID, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, DASHBOARD_OPERATIONS, DASHBOARD_PINNED, DEEP_RESEARCH, DEEP_RESEARCH_ID, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CAPABILITIES, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_STEPS_LABELS, DEFAULT_AGENT_TEMPLATES, DEFAULT_AGENT_TYPES, DEFAULT_AGENT_TYPE_SELECTOR_LABELS, DEFAULT_AUTHORIZE_AGENT_LABELS, DEFAULT_CONFIG_FIELD_LABELS, DEFAULT_CONFIG_FORM_LABELS, DEFAULT_NEW_THREAD_DIALOG_LABELS, DEFAULT_PILL_SELECT_LABELS, DEFAULT_RECURRENCE, DEFAULT_RECURRENCE_BUILDER_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_GLOBAL_BADGE_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_STEP_BAR_LABELS, DEFAULT_SUBAGENT_ROSTER_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_PLAN_LABELS, DEFAULT_TASK_RUNS_DIALOG_LABELS, DEFAULT_THREAD_LAUNCHER_LABELS, DEFAULT_THREAD_STATE_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_STATUS_LABELS, DEFAULT_WORKFLOW_STEP_PARTS_LABELS, DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, DERIVED_NAME_WORDS, EMPTY_NEW_THREAD, EntityChip, GENERATE_IMAGE, GENERATE_IMAGE_ID, GoalCriteria, IMAGE_ASPECT_AUTO, IMAGE_ASPECT_RATIOS, MAX_TASK_DEPTH, MODEL_NAME_ICONS, MODEL_TIER_ICON_MAP, MODEL_TIER_LABELS, NewThreadDialog, PillSelect, REMIND_TASK, REMIND_TASK_ID, RecurrenceBuilder, SKILL_FIELD_TYPE_LABELS, SKILL_MAIN_FILENAME, SKILL_SOURCE_LABELS, SKILL_TYPES, SKILL_TYPE_LABELS, STATUS_LABELS, STATUS_ORDER, STATUS_TONE, STEP_ICON_MAP, SUMMARISE, SUMMARISE_ID, SendBackControl, SkillActionButton, SkillDetail, SkillDetailSection, SkillEditForm, SkillFilterChips, SkillGenerateForm, SkillGlobalBadge, SkillLibraryDetail, SkillTile, SkillTypeBadge, SkillViewToggle, StepDetail, StepNarration, StepOutcome, StepParams, StepRow, StepSummary, StepTrace, StepTraceSummary, SubAgentLane, SubStepGroup, SubagentRoster, TAG_ICONS, TIMELINE, TIMELINE_ID, TIMELINE_PROMPT, TOOL_ICON_MAP, TRANSLATE, TRANSLATE_ID, TRANSLATE_LANGUAGES, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskEmptyState, TaskFlow, TaskPlan, TaskRunsDialog, TaskStartDialog, ThreadActivity, ThreadLauncher, ThreadStatusLine, TupleArrayField, WEB_WORKFLOWS, WEEKDAYS, WORD_ASK, WORD_ASK_ID, WORD_CONTINUE, WORD_CONTINUE_ID, WORD_SUMMARISE, WORD_SUMMARISE_ID, WORD_SUPPORT, WORD_SUPPORT_ID, WORD_WORKFLOWS, WORKFLOW_REGISTRY, WorkflowRunStatus, WorkflowRunner, WorkflowStepAction, WorkflowThreadStartedBy, WorkflowThreadStrip, activeStepId, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, authModeFor, buildLibrarySkills, buildRRule, buildTaskRows, buildZipSkillImport, closeWorkflowLaunch, compactThreadActivity, composePersona, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createsWork, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, deriveAnnotationName, deriveWorkflowName, descendantIds, describeRRule, describeTrigger, filterLibrarySkills, firstWords, fromPlanAssignee, fromPlanDocumentRef, fromPlanSteps, getAgentStepIcon, getAgentStepPresentation, getCurrentAgentStepPresentation, getModelIcon, goalProgress, groupThreadActivity, hasTaskFields, humanizeSection, importMarkdownSkill, importSkillFile, importSkillFromUrl, indexTasks, inferType, inputDocumentIds, isAgenticWorkflow, isIncompleteSignal, isMainSkillFile, isOutOfBounds, isPlainTodo, isSupersededStop, isValidAgentName, isoToLocalInput, latestMessageTime, layoutFromPlanSteps, linkedRunsFromActivity, localInputToIso, moveTargets, newThreadToRequest, nextCriterionId, notifiedLabel, openWorkflowLaunch, ownerExtId, parseRRule, parseSkillFrontmatter, prettifyKey, readSkillArchive, recordWorkflowUse, renderWorkflowIcon, resetWorkflowUsage, resolveScopeInputs, serializeSkill, skillSlug, sortByRecentUse, stepAccent, stepWindow, stripPersonaPreamble, summarizeAgent, summarizeCapabilities, taskActivityHeadline, taskComposerToCreateRequest, taskComposerToUpdateRequest, taskNeedsAccess, taskToComposerValues, toPlanAssignee, toPlanDocumentRef, toPlanSteps, unnotifiedMentions, useWorkflowLaunchRequest, useWorkflowUsage, useWorkflowView, workflowFromSkillMarkdown, workflowTaskFields, workflowToComposerValues, workflowToSkillMarkdown, workflowWhen } from './chunk-6SPVTPUQ.js';
|
|
30
30
|
import './chunk-CQCC7LE7.js';
|
|
31
|
-
export { AgentSelect, DEFAULT_AGENT_SELECT_LABELS, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_TASK_TRIGGER_CHIP_LABELS, DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, DEFAULT_WORKFLOW_DOCUMENTS_FIELD_LABELS, DEFAULT_WORKFLOW_LIST_LABELS, PersonPill, SchemaForm, TaskTriggerChip, WORKFLOW_COLUMN_ORDER, WorkflowConfigDialog, WorkflowDocumentsField, WorkflowLauncher, WorkflowsTable, buildWorkflowScopeSource, createWorkflowColumns, documentScopeLabels, hasTrigger, isSkillRow, matchWorkflowScope, workflowStatus, workflowTriggerType } from './chunk-
|
|
31
|
+
export { AgentSelect, DEFAULT_AGENT_SELECT_LABELS, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_TASK_TRIGGER_CHIP_LABELS, DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, DEFAULT_WORKFLOW_DOCUMENTS_FIELD_LABELS, DEFAULT_WORKFLOW_LIST_LABELS, PersonPill, SchemaForm, TaskTriggerChip, WORKFLOW_COLUMN_ORDER, WorkflowConfigDialog, WorkflowDocumentsField, WorkflowLauncher, WorkflowsTable, buildWorkflowScopeSource, createWorkflowColumns, documentScopeLabels, hasTrigger, isSkillRow, matchWorkflowScope, workflowStatus, workflowTriggerType } from './chunk-3SKLWW5D.js';
|
|
32
32
|
import './chunk-VX5I35HZ.js';
|
|
33
|
-
import './chunk-
|
|
33
|
+
import './chunk-G4GLDQLY.js';
|
|
34
34
|
import './chunk-M4S75AEJ.js';
|
|
35
35
|
export { Dot, ToneBadge } from './chunk-5LXQPP2K.js';
|
|
36
36
|
import './chunk-NUNKSZKU.js';
|
|
@@ -41,6 +41,7 @@ import './chunk-N5YEF3LC.js';
|
|
|
41
41
|
export { consumeFragmentCredentials, parseFragmentCredentials, useFragmentCredentials } from './chunk-T3HNJZVL.js';
|
|
42
42
|
export { AccountRecoveryDialog, AuthAlert, AuthConsent, AuthDivider, AuthField, AuthFieldBadge, AuthFooterLinks, AuthHeading, AuthHero, AuthInput, AuthLayout, AuthLink, AuthNote, AuthOfflineBadge, AuthSubmitButton, AuthTabs, DEFAULT_ACCOUNT_RECOVERY_DIALOG_LABELS, DEFAULT_AUTH_CONSENT_LABELS, DEFAULT_AUTH_FOOTER_LINKS_LABELS, DEFAULT_AUTH_OFFLINE_BADGE_LABELS, DEFAULT_PASSWORD_RULES, DEFAULT_RECOVERY_KEY_DIALOG_LABELS, DEFAULT_REVEALABLE_PASSWORD_INPUT_LABELS, DEFAULT_SSO_LOGIN_BUTTON_LABELS, RecoveryKeyDialog, RevealablePasswordInput, SsoLoginButton, createPasswordRules, parseAuthError, promptSaveCredential } from './chunk-MVP7METT.js';
|
|
43
43
|
export { DEFAULT_PASSWORD_STRENGTH_INPUT_LABELS, PasswordStrengthInput } from './chunk-VILAPTCB.js';
|
|
44
|
+
import './chunk-WNDIVNPT.js';
|
|
44
45
|
export { DEFAULT_DM_INVITE_CHIP_LABELS, DmInviteChip, DmThreadHeader } from './chunk-2S3LT5KE.js';
|
|
45
46
|
export { ArbiHost, useHost } from './chunk-T4P237N6.js';
|
|
46
47
|
export { DEFAULT_TAB_HEADER_LABELS, TabHeader } from './chunk-ABEKUV6L.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/DroppableContainer.tsx","../src/components/Toolbar.tsx","../src/components/AskBar.tsx","../src/tags/TagsNav.tsx"],"names":["jsx","jsxs","cn","Search","useState","text","Input"],"mappings":"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","file":"index.js","sourcesContent":["import { useDroppable } from '@dnd-kit/core'\n\nexport interface DroppableContainerProps {\n id: string\n children: React.ReactNode\n className?: string\n}\n\nexport function DroppableContainer({ id, children, className = '' }: DroppableContainerProps) {\n const { setNodeRef } = useDroppable({ id })\n return (\n <div ref={setNodeRef} className={className}>\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Search } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\n/** Search + filter bar used above every list view. */\nexport function Toolbar({\n search,\n onSearch,\n searchPlaceholder = 'Search…',\n filters,\n actions,\n className,\n testId,\n}: {\n search?: string\n onSearch?: (v: string) => void\n searchPlaceholder?: string\n filters?: ReactNode\n actions?: ReactNode\n className?: string\n testId?: string\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between',\n className\n )}\n data-testid={testId}\n >\n <div className=\"flex flex-1 flex-wrap items-center gap-2\">\n {onSearch && (\n <div className=\"relative w-full max-w-xs\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => onSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"bg-card text-sm placeholder:text-muted-foreground focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring pl-8\"\n data-testid={testId ? `${testId}-search` : 'toolbar-search'}\n />\n </div>\n )}\n {filters}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )\n}\n","/**\n * A question box that IS the product's front door, not a link to one.\n *\n * One input, two destinations: Enter (or the arrow) ASKS — hands the trimmed\n * text to `onAsk`, the conversational answer — while the Search button beside\n * it hands the same text to `onSearch`, the retrieval experience. The split\n * matters because queries come in both registers (\"what does\n * this term mean\" vs \"find every mention of it\") and making them choose a\n * page before typing kills the impulse. Omit `onSearch` and the bar is a plain\n * ask composer.\n *\n * The consumer owns what asking and searching mean (start a chat, run smart\n * search, open a record). Suggestion chips prefill the input rather than\n * firing immediately: a suggestion is a starting point you edit, not a button\n * you regret.\n *\n * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,\n * primary), so every host gets it in its own colours.\n */\n\nimport { useRef, useState, type KeyboardEventHandler, type ReactNode, type RefObject } from 'react'\nimport { Search, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface AskBarProps {\n /** Receives the trimmed question; the caller owns what asking means. */\n onAsk: (text: string) => void\n /** Second destination for the same text — retrieval. Omit to hide. */\n onSearch?: (text: string) => void\n /** Prefill-on-click starter questions, shown under the input. */\n suggestions?: string[]\n placeholder?: string\n askLabel?: string\n searchLabel?: string\n /** Controlled value. Omit for the bar to own its own text. */\n value?: string\n onValueChange?: (value: string) => void\n /** Raw keydown on the input — lets a consumer run an autocomplete\n * (arrow/Enter/Tab/Escape) before the form's own submit handling.\n * preventDefault() on Enter suppresses the submit. */\n onInputKeyDown?: KeyboardEventHandler<HTMLInputElement>\n /** Popover anchored to the pill (e.g. a slash-command menu). Rendered in a\n * relative wrapper around the form, so absolute children position against\n * the pill. */\n menu?: ReactNode\n /** External input ref, for consumers that refocus after menu selection. */\n inputRef?: RefObject<HTMLInputElement | null>\n className?: string\n /** Root test id; children derive `-input`, `-submit`, `-search`, `-suggestion`. */\n testId?: string\n}\n\nexport function AskBar({\n onAsk,\n onSearch,\n suggestions = [],\n placeholder = 'Ask anything…',\n askLabel = 'Ask',\n searchLabel = 'Search',\n value,\n onValueChange,\n onInputKeyDown,\n menu,\n inputRef: externalInputRef,\n className,\n testId = 'ask-bar',\n}: AskBarProps) {\n const [innerText, setInnerText] = useState('')\n const text = value !== undefined ? value : innerText\n const setText = (next: string) => {\n onValueChange?.(next)\n if (value === undefined) setInnerText(next)\n }\n const localInputRef = useRef<HTMLInputElement>(null)\n const inputRef = externalInputRef ?? localInputRef\n\n const submitTo = (handler: (text: string) => void) => {\n const question = text.trim()\n if (!question) return\n handler(question)\n setText('')\n }\n\n return (\n <div className={cn('flex flex-col gap-2', className)} data-testid={testId}>\n <div className=\"relative\">\n {menu}\n <form\n onSubmit={(e) => {\n e.preventDefault()\n submitTo(onAsk)\n }}\n // The AppHeader search pill's language exactly — rounded-md,\n // border-input, magnifier left, muted text — so the bar sits in a\n // topbar the way a ⌘K trigger does, not like a chat composer\n // dropped into a header.\n className=\"flex h-12 items-center gap-1.5 rounded-md border border-border/50 bg-background pl-3 pr-1.5 transition-colors focus-within:border-border\"\n >\n <Search className=\"pointer-events-none size-4 shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n className=\"h-8 min-w-0 flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testId && `${testId}-input`}\n />\n {onSearch && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={!text.trim()}\n onClick={() => submitTo(onSearch)}\n className=\"h-8 shrink-0 px-2.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={testId && `${testId}-search`}\n >\n {searchLabel}\n </Button>\n )}\n {/* The primary door wears the Ask AI anatomy: Sparkles + label. */}\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!text.trim()}\n className=\"h-8 shrink-0 px-3 text-xs font-medium\"\n data-testid={testId && `${testId}-submit`}\n >\n <Sparkles className=\"size-3.5\" />\n {askLabel}\n </Button>\n </form>\n </div>\n {suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setText(s)\n inputRef.current?.focus()\n }}\n className=\"rounded-full border border-border/50 bg-card px-3 py-1 text-xs text-muted-foreground transition-colors hover:border-border hover:bg-accent hover:text-foreground\"\n data-testid={testId && `${testId}-suggestion`}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * The side navigation of a Tags page: the workspace's tags grouped by kind (labels, annotations,\n * issues, people, organisations, searches), each group with its count, each tag with how much\n * carries it, and nested tags (sub-labels) under their parent. A group heading selects the whole\n * kind; a tag selects that tag. One box finds and adds: typing filters the list, and a name that is\n * not there yet is offered as a new tag (\"Create …\", or Enter). Data-free: the host passes the\n * groups and creates.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { Plus, Search, X } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\nexport interface TagsNavItem {\n id: string\n name: string\n /** How many documents and facts carry it. */\n count?: number\n /** A swatch colour (any CSS colour). */\n color?: string\n /** Nested tags (e.g. sub-labels). */\n children?: TagsNavItem[]\n /** Other text the filter matches (e.g. the tag's field values). */\n keywords?: string\n}\n\nexport interface TagsNavGroup {\n id: string\n label: string\n icon?: ReactNode\n items: TagsNavItem[]\n}\n\n/** What is selected: a whole group, or one tag of it. */\nexport type TagsNavSelection = { groupId: string; itemId?: string }\n\nexport interface TagsNavLabels {\n filter: string\n clearFilter: string\n empty: string\n noMatch: string\n /** Offer to add the typed name: `{name}`. */\n create: string\n}\n\nexport const DEFAULT_TAGS_NAV_LABELS: TagsNavLabels = {\n filter: 'Find or add a tag…',\n clearFilter: 'Clear',\n empty: 'None yet',\n noMatch: 'No match',\n create: 'Create \"{name}\"',\n}\n\nexport interface TagsNavProps {\n groups: TagsNavGroup[]\n selected: TagsNavSelection | null\n onSelect: (selection: TagsNavSelection) => void\n /**\n * Add a tag by the name typed in the box when no tag has that name (any case). Absent: the box\n * only finds.\n */\n onCreate?: (name: string) => void | Promise<unknown>\n /**\n * The filter text, when the box lives elsewhere (e.g. the page header's filter): the list then\n * renders no box of its own and filters by this; `onFilterChange` hears a create clearing it.\n */\n filter?: string\n onFilterChange?: (text: string) => void\n /** Match items' `keywords` as well as their names. */\n matchKeywords?: boolean\n labels?: Partial<TagsNavLabels>\n className?: string\n testId?: string\n}\n\nconst total = (items: TagsNavItem[]): number =>\n items.reduce((n, item) => n + 1 + total(item.children ?? []), 0)\n\n/** The tag named `name` (any case) in these groups, with its group; nested ones included. */\nexport function findTagsNavItem(\n groups: TagsNavGroup[],\n name: string\n): { groupId: string; item: TagsNavItem } | undefined {\n const text = name.trim()\n if (!text) return undefined\n for (const g of groups) {\n const item = findByName(g.items, text)\n if (item) return { groupId: g.id, item }\n }\n return undefined\n}\n\n/** The item named `name` (any case), nested ones included. */\nfunction findByName(items: TagsNavItem[], name: string): TagsNavItem | undefined {\n const needle = name.toLowerCase()\n for (const item of items) {\n if (item.name.trim().toLowerCase() === needle) return item\n const nested = findByName(item.children ?? [], name)\n if (nested) return nested\n }\n return undefined\n}\n\n/** The items whose name (or keywords, or a nested item's) contains `text`, nesting kept. */\nfunction filterItems(items: TagsNavItem[], text: string, keywords = false): TagsNavItem[] {\n if (!text) return items\n const needle = text.toLowerCase()\n return items.flatMap((item) => {\n const children = filterItems(item.children ?? [], text, keywords)\n const hit =\n item.name.toLowerCase().includes(needle) ||\n (keywords && !!item.keywords?.toLowerCase().includes(needle))\n return hit || children.length ? [{ ...item, children }] : []\n })\n}\n\nexport function TagsNav({\n groups,\n selected,\n onSelect,\n onCreate,\n filter: controlledFilter,\n onFilterChange,\n matchKeywords = false,\n labels,\n className,\n testId = 'tags-nav',\n}: TagsNavProps) {\n const l = { ...DEFAULT_TAGS_NAV_LABELS, ...labels }\n const [ownFilter, setOwnFilter] = useState('')\n const hasOwnBox = controlledFilter === undefined\n const filter = hasOwnBox ? ownFilter : controlledFilter\n const setFilter = (text: string) => (hasOwnBox ? setOwnFilter(text) : onFilterChange?.(text))\n const [creating, setCreating] = useState(false)\n const text = filter.trim()\n const exact = findTagsNavItem(groups, text)\n const canCreate = !!onCreate && !!text && !exact\n const filterGroup = (items: TagsNavItem[]) => filterItems(items, text, matchKeywords)\n\n const create = async () => {\n if (!canCreate || creating) return\n setCreating(true)\n try {\n await onCreate?.(text)\n setFilter('')\n } finally {\n setCreating(false)\n }\n }\n\n const row = (groupId: string, item: TagsNavItem, depth: number): ReactNode => {\n const active = selected?.groupId === groupId && selected.itemId === item.id\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId, itemId: item.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md py-1.5 pr-2 text-left text-sm transition-colors hover:bg-muted pointer-coarse:min-h-11',\n active && 'bg-primary/10 font-medium text-primary hover:bg-primary/10'\n )}\n style={{ paddingLeft: 12 + depth * 16 }}\n data-testid={`${testId}-item-${item.id}`}\n >\n {item.color && (\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: item.color }}\n aria-hidden\n />\n )}\n <span className=\"min-w-0 flex-1 truncate\" title={item.name}>\n {item.name}\n </span>\n {item.count !== undefined && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {item.count}\n </span>\n )}\n </button>\n {!!item.children?.length && (\n <ul>{item.children.map((child) => row(groupId, child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n\n return (\n <nav className={cn('flex flex-col gap-3', className)} data-testid={testId}>\n {hasOwnBox && (\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return\n e.preventDefault()\n if (canCreate) void create()\n else if (exact?.item) onSelect({ groupId: exact.groupId, itemId: exact.item.id })\n }}\n placeholder={l.filter}\n aria-label={l.filter}\n className=\"h-8 pl-8 pr-8 text-sm\"\n data-testid={`${testId}-filter`}\n />\n {filter && (\n <button\n type=\"button\"\n onClick={() => setFilter('')}\n aria-label={l.clearFilter}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n )}\n {canCreate && (\n <button\n type=\"button\"\n onClick={() => void create()}\n disabled={creating}\n className=\"flex w-full items-center gap-2 rounded-md px-3 py-1.5 text-left text-sm text-primary transition-colors hover:bg-muted disabled:opacity-60 pointer-coarse:min-h-11\"\n data-testid={`${testId}-create`}\n >\n <Plus className=\"size-4 shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">{l.create.replace('{name}', text)}</span>\n </button>\n )}\n {groups.map((group) => {\n const items = filterGroup(group.items)\n if (text && !items.length) return null\n const active = selected?.groupId === group.id && !selected.itemId\n return (\n <section key={group.id} data-testid={`${testId}-group-${group.id}`}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId: group.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-muted hover:text-foreground pointer-coarse:min-h-11',\n active && 'bg-primary/10 text-primary hover:bg-primary/10 hover:text-primary'\n )}\n data-testid={`${testId}-group-${group.id}-heading`}\n >\n {group.icon && <span className=\"shrink-0 [&_svg]:size-4\">{group.icon}</span>}\n <span className=\"flex-1\">{group.label}</span>\n <span className=\"tabular-nums\" data-testid={`${testId}-group-${group.id}-count`}>\n {total(group.items)}\n </span>\n </button>\n {items.length ? (\n <ul className=\"mt-0.5\">{items.map((item) => row(group.id, item, 0))}</ul>\n ) : (\n <p className=\"px-3 py-1 text-xs text-muted-foreground\">{l.empty}</p>\n )}\n </section>\n )\n })}\n {text && !canCreate && groups.every((g) => !filterGroup(g.items).length) && (\n <p className=\"px-2 text-sm text-muted-foreground\">{l.noMatch}</p>\n )}\n </nav>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/DroppableContainer.tsx","../src/components/Toolbar.tsx","../src/components/AskBar.tsx","../src/tags/TagsNav.tsx"],"names":["jsx","jsxs","cn","Search","useState","text","Input"],"mappings":"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","file":"index.js","sourcesContent":["import { useDroppable } from '@dnd-kit/core'\n\nexport interface DroppableContainerProps {\n id: string\n children: React.ReactNode\n className?: string\n}\n\nexport function DroppableContainer({ id, children, className = '' }: DroppableContainerProps) {\n const { setNodeRef } = useDroppable({ id })\n return (\n <div ref={setNodeRef} className={className}>\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Search } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\n/** Search + filter bar used above every list view. */\nexport function Toolbar({\n search,\n onSearch,\n searchPlaceholder = 'Search…',\n filters,\n actions,\n className,\n testId,\n}: {\n search?: string\n onSearch?: (v: string) => void\n searchPlaceholder?: string\n filters?: ReactNode\n actions?: ReactNode\n className?: string\n testId?: string\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between',\n className\n )}\n data-testid={testId}\n >\n <div className=\"flex flex-1 flex-wrap items-center gap-2\">\n {onSearch && (\n <div className=\"relative w-full max-w-xs\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => onSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"bg-card text-sm placeholder:text-muted-foreground focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring pl-8\"\n data-testid={testId ? `${testId}-search` : 'toolbar-search'}\n />\n </div>\n )}\n {filters}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )\n}\n","/**\n * A question box that IS the product's front door, not a link to one.\n *\n * One input, two destinations: Enter (or the arrow) ASKS — hands the trimmed\n * text to `onAsk`, the conversational answer — while the Search button beside\n * it hands the same text to `onSearch`, the retrieval experience. The split\n * matters because queries come in both registers (\"what does\n * this term mean\" vs \"find every mention of it\") and making them choose a\n * page before typing kills the impulse. Omit `onSearch` and the bar is a plain\n * ask composer.\n *\n * The consumer owns what asking and searching mean (start a chat, run smart\n * search, open a record). Suggestion chips prefill the input rather than\n * firing immediately: a suggestion is a starting point you edit, not a button\n * you regret.\n *\n * Styled with SEMANTIC tokens only (card, border, foreground, muted-foreground,\n * primary), so every host gets it in its own colours.\n */\n\nimport { useRef, useState, type KeyboardEventHandler, type ReactNode, type RefObject } from 'react'\nimport { Search, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface AskBarProps {\n /** Receives the trimmed question; the caller owns what asking means. */\n onAsk: (text: string) => void\n /** Second destination for the same text — retrieval. Omit to hide. */\n onSearch?: (text: string) => void\n /** Prefill-on-click starter questions, shown under the input. */\n suggestions?: string[]\n placeholder?: string\n askLabel?: string\n searchLabel?: string\n /** Controlled value. Omit for the bar to own its own text. */\n value?: string\n onValueChange?: (value: string) => void\n /** Raw keydown on the input — lets a consumer run an autocomplete\n * (arrow/Enter/Tab/Escape) before the form's own submit handling.\n * preventDefault() on Enter suppresses the submit. */\n onInputKeyDown?: KeyboardEventHandler<HTMLInputElement>\n /** Popover anchored to the pill (e.g. a slash-command menu). Rendered in a\n * relative wrapper around the form, so absolute children position against\n * the pill. */\n menu?: ReactNode\n /** External input ref, for consumers that refocus after menu selection. */\n inputRef?: RefObject<HTMLInputElement | null>\n className?: string\n /** Root test id; children derive `-input`, `-submit`, `-search`, `-suggestion`. */\n testId?: string\n}\n\nexport function AskBar({\n onAsk,\n onSearch,\n suggestions = [],\n placeholder = 'Ask anything…',\n askLabel = 'Ask',\n searchLabel = 'Search',\n value,\n onValueChange,\n onInputKeyDown,\n menu,\n inputRef: externalInputRef,\n className,\n testId = 'ask-bar',\n}: AskBarProps) {\n const [innerText, setInnerText] = useState('')\n const text = value !== undefined ? value : innerText\n const setText = (next: string) => {\n onValueChange?.(next)\n if (value === undefined) setInnerText(next)\n }\n const localInputRef = useRef<HTMLInputElement>(null)\n const inputRef = externalInputRef ?? localInputRef\n\n const submitTo = (handler: (text: string) => void) => {\n const question = text.trim()\n if (!question) return\n handler(question)\n setText('')\n }\n\n return (\n <div className={cn('flex flex-col gap-2', className)} data-testid={testId}>\n <div className=\"relative\">\n {menu}\n <form\n onSubmit={(e) => {\n e.preventDefault()\n submitTo(onAsk)\n }}\n // The AppHeader search pill's language exactly — rounded-md,\n // border-input, magnifier left, muted text — so the bar sits in a\n // topbar the way a ⌘K trigger does, not like a chat composer\n // dropped into a header.\n className=\"flex h-12 items-center gap-1.5 rounded-md border border-border/50 bg-background pl-3 pr-1.5 transition-colors focus-within:border-border\"\n >\n <Search className=\"pointer-events-none size-4 shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n type=\"text\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n className=\"h-8 min-w-0 flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n data-testid={testId && `${testId}-input`}\n />\n {onSearch && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n disabled={!text.trim()}\n onClick={() => submitTo(onSearch)}\n className=\"h-8 shrink-0 px-2.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={testId && `${testId}-search`}\n >\n {searchLabel}\n </Button>\n )}\n {/* The primary door wears the Ask AI anatomy: Sparkles + label. */}\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={!text.trim()}\n className=\"h-8 shrink-0 px-3 text-xs font-medium\"\n data-testid={testId && `${testId}-submit`}\n >\n <Sparkles className=\"size-3.5\" />\n {askLabel}\n </Button>\n </form>\n </div>\n {suggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setText(s)\n inputRef.current?.focus()\n }}\n className=\"rounded-full border border-border/50 bg-card px-3 py-1 text-xs text-muted-foreground transition-colors hover:border-border hover:bg-accent hover:text-foreground\"\n data-testid={testId && `${testId}-suggestion`}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * The side navigation of a Tags page: the workspace's tags grouped by kind (labels, annotations,\n * issues, people, organisations, searches), each group with its count, each tag with how much\n * carries it, and nested tags (sub-labels) under their parent. A group heading selects the whole\n * kind; a tag selects that tag. One box finds and adds: typing filters the list, and a name that is\n * not there yet is offered as a new tag (\"Create …\", or Enter). Data-free: the host passes the\n * groups and creates.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { Plus, Search, X } from 'lucide-react'\nimport { Input, cn } from '@arbidocs/react/ui'\n\nexport interface TagsNavItem {\n id: string\n name: string\n /** How many documents and facts carry it. */\n count?: number\n /** A swatch colour (any CSS colour). */\n color?: string\n /** Nested tags (e.g. sub-labels). */\n children?: TagsNavItem[]\n /** Other text the filter matches (e.g. the tag's field values). */\n keywords?: string\n}\n\nexport interface TagsNavGroup {\n id: string\n label: string\n icon?: ReactNode\n items: TagsNavItem[]\n}\n\n/** What is selected: a whole group, or one tag of it. */\nexport type TagsNavSelection = { groupId: string; itemId?: string }\n\nexport interface TagsNavLabels {\n filter: string\n clearFilter: string\n empty: string\n noMatch: string\n /** Offer to add the typed name: `{name}`. */\n create: string\n}\n\nexport const DEFAULT_TAGS_NAV_LABELS: TagsNavLabels = {\n filter: 'Find or add a tag…',\n clearFilter: 'Clear',\n empty: 'None yet',\n noMatch: 'No match',\n create: 'Create \"{name}\"',\n}\n\nexport interface TagsNavProps {\n groups: TagsNavGroup[]\n selected: TagsNavSelection | null\n onSelect: (selection: TagsNavSelection) => void\n /**\n * Add a tag by the name typed in the box when no tag has that name (any case). Absent: the box\n * only finds.\n */\n onCreate?: (name: string) => void | Promise<unknown>\n /**\n * The filter text, when the box lives elsewhere (e.g. the page header's filter): the list then\n * renders no box of its own and filters by this; `onFilterChange` hears a create clearing it.\n */\n filter?: string\n onFilterChange?: (text: string) => void\n /** Match items' `keywords` as well as their names. */\n matchKeywords?: boolean\n labels?: Partial<TagsNavLabels>\n className?: string\n testId?: string\n}\n\nconst total = (items: TagsNavItem[]): number =>\n items.reduce((n, item) => n + 1 + total(item.children ?? []), 0)\n\n/** The tag named `name` (any case) in these groups, with its group; nested ones included. */\nexport function findTagsNavItem(\n groups: TagsNavGroup[],\n name: string\n): { groupId: string; item: TagsNavItem } | undefined {\n const text = name.trim()\n if (!text) return undefined\n for (const g of groups) {\n const item = findByName(g.items, text)\n if (item) return { groupId: g.id, item }\n }\n return undefined\n}\n\n/** The item named `name` (any case), nested ones included. */\nfunction findByName(items: TagsNavItem[], name: string): TagsNavItem | undefined {\n const needle = name.toLowerCase()\n for (const item of items) {\n if (item.name.trim().toLowerCase() === needle) return item\n const nested = findByName(item.children ?? [], name)\n if (nested) return nested\n }\n return undefined\n}\n\n/** The items whose name (or keywords, or a nested item's) contains `text`, nesting kept. */\nfunction filterItems(items: TagsNavItem[], text: string, keywords = false): TagsNavItem[] {\n if (!text) return items\n const needle = text.toLowerCase()\n return items.flatMap((item) => {\n const children = filterItems(item.children ?? [], text, keywords)\n const hit =\n item.name.toLowerCase().includes(needle) ||\n (keywords && !!item.keywords?.toLowerCase().includes(needle))\n return hit || children.length ? [{ ...item, children }] : []\n })\n}\n\nexport function TagsNav({\n groups,\n selected,\n onSelect,\n onCreate,\n filter: controlledFilter,\n onFilterChange,\n matchKeywords = false,\n labels,\n className,\n testId = 'tags-nav',\n}: TagsNavProps) {\n const l = { ...DEFAULT_TAGS_NAV_LABELS, ...labels }\n const [ownFilter, setOwnFilter] = useState('')\n const hasOwnBox = controlledFilter === undefined\n const filter = hasOwnBox ? ownFilter : controlledFilter\n const setFilter = (text: string) => (hasOwnBox ? setOwnFilter(text) : onFilterChange?.(text))\n const [creating, setCreating] = useState(false)\n const text = filter.trim()\n const exact = findTagsNavItem(groups, text)\n const canCreate = !!onCreate && !!text && !exact\n const filterGroup = (items: TagsNavItem[]) => filterItems(items, text, matchKeywords)\n\n const create = async () => {\n if (!canCreate || creating) return\n setCreating(true)\n try {\n await onCreate?.(text)\n setFilter('')\n } finally {\n setCreating(false)\n }\n }\n\n const row = (groupId: string, item: TagsNavItem, depth: number): ReactNode => {\n const active = selected?.groupId === groupId && selected.itemId === item.id\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId, itemId: item.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md py-1.5 pr-2 text-left text-sm transition-colors hover:bg-muted pointer-coarse:min-h-11',\n active && 'bg-primary/10 font-medium text-primary hover:bg-primary/10'\n )}\n style={{ paddingLeft: 12 + depth * 16 }}\n data-testid={`${testId}-item-${item.id}`}\n >\n {item.color && (\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: item.color }}\n aria-hidden\n />\n )}\n <span className=\"min-w-0 flex-1 truncate\" title={item.name}>\n {item.name}\n </span>\n {item.count !== undefined && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {item.count}\n </span>\n )}\n </button>\n {!!item.children?.length && (\n <ul>{item.children.map((child) => row(groupId, child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n\n return (\n <nav className={cn('flex flex-col gap-3', className)} data-testid={testId}>\n {hasOwnBox && (\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return\n e.preventDefault()\n if (canCreate) void create()\n else if (exact?.item) onSelect({ groupId: exact.groupId, itemId: exact.item.id })\n }}\n placeholder={l.filter}\n aria-label={l.filter}\n className=\"h-8 pl-8 pr-8 text-sm\"\n data-testid={`${testId}-filter`}\n />\n {filter && (\n <button\n type=\"button\"\n onClick={() => setFilter('')}\n aria-label={l.clearFilter}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n )}\n {canCreate && (\n <button\n type=\"button\"\n onClick={() => void create()}\n disabled={creating}\n className=\"flex w-full items-center gap-2 rounded-md px-3 py-1.5 text-left text-sm text-primary transition-colors hover:bg-muted disabled:opacity-60 pointer-coarse:min-h-11\"\n data-testid={`${testId}-create`}\n >\n <Plus className=\"size-4 shrink-0\" />\n <span className=\"min-w-0 flex-1 truncate\">{l.create.replace('{name}', text)}</span>\n </button>\n )}\n {groups.map((group) => {\n const items = filterGroup(group.items)\n if (text && !items.length) return null\n const active = selected?.groupId === group.id && !selected.itemId\n return (\n <section key={group.id} data-testid={`${testId}-group-${group.id}`}>\n <button\n type=\"button\"\n onClick={() => onSelect({ groupId: group.id })}\n aria-current={active ? 'true' : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:bg-muted hover:text-foreground pointer-coarse:min-h-11',\n active && 'bg-primary/10 text-primary hover:bg-primary/10 hover:text-primary'\n )}\n data-testid={`${testId}-group-${group.id}-heading`}\n >\n {group.icon && <span className=\"shrink-0 [&_svg]:size-4\">{group.icon}</span>}\n <span className=\"flex-1\">{group.label}</span>\n <span className=\"tabular-nums\" data-testid={`${testId}-group-${group.id}-count`}>\n {total(group.items)}\n </span>\n </button>\n {items.length ? (\n <ul className=\"mt-0.5\">{items.map((item) => row(group.id, item, 0))}</ul>\n ) : (\n <p className=\"px-3 py-1 text-xs text-muted-foreground\">{l.empty}</p>\n )}\n </section>\n )\n })}\n {text && !canCreate && groups.every((g) => !filterGroup(g.items).length) && (\n <p className=\"px-2 text-sm text-muted-foreground\">{l.noMatch}</p>\n )}\n </nav>\n )\n}\n"]}
|
package/dist/settings/index.cjs
CHANGED
|
@@ -7,9 +7,10 @@ var chunkNMZI3K6R_cjs = require('../chunk-NMZI3K6R.cjs');
|
|
|
7
7
|
require('../chunk-QZTNTP75.cjs');
|
|
8
8
|
require('../chunk-NWNVWO6L.cjs');
|
|
9
9
|
var chunkRFIBUWLF_cjs = require('../chunk-RFIBUWLF.cjs');
|
|
10
|
-
var
|
|
10
|
+
var chunkAQPZ4QMV_cjs = require('../chunk-AQPZ4QMV.cjs');
|
|
11
11
|
require('../chunk-DVUZTGVL.cjs');
|
|
12
12
|
require('../chunk-ADOKTJHV.cjs');
|
|
13
|
+
var chunkVZOOGA47_cjs = require('../chunk-VZOOGA47.cjs');
|
|
13
14
|
var chunkZAVEMQ37_cjs = require('../chunk-ZAVEMQ37.cjs');
|
|
14
15
|
require('../chunk-MEMWZ72Y.cjs');
|
|
15
16
|
var chunkULWRNGGE_cjs = require('../chunk-ULWRNGGE.cjs');
|
|
@@ -673,21 +674,21 @@ Object.defineProperty(exports, "MultiSelect", {
|
|
|
673
674
|
enumerable: true,
|
|
674
675
|
get: function () { return chunkRFIBUWLF_cjs.MultiSelect; }
|
|
675
676
|
});
|
|
676
|
-
Object.defineProperty(exports, "
|
|
677
|
+
Object.defineProperty(exports, "DEFAULT_TRI_STATE_FILTER_MENU_LABELS", {
|
|
677
678
|
enumerable: true,
|
|
678
|
-
get: function () { return
|
|
679
|
+
get: function () { return chunkAQPZ4QMV_cjs.DEFAULT_TRI_STATE_FILTER_MENU_LABELS; }
|
|
679
680
|
});
|
|
680
|
-
Object.defineProperty(exports, "
|
|
681
|
+
Object.defineProperty(exports, "TriStateFilterMenu", {
|
|
681
682
|
enumerable: true,
|
|
682
|
-
get: function () { return
|
|
683
|
+
get: function () { return chunkAQPZ4QMV_cjs.TriStateFilterMenu; }
|
|
683
684
|
});
|
|
684
|
-
Object.defineProperty(exports, "
|
|
685
|
+
Object.defineProperty(exports, "DEFAULT_DOCUMENT_PICKER_LABELS", {
|
|
685
686
|
enumerable: true,
|
|
686
|
-
get: function () { return
|
|
687
|
+
get: function () { return chunkVZOOGA47_cjs.DEFAULT_DOCUMENT_PICKER_LABELS; }
|
|
687
688
|
});
|
|
688
|
-
Object.defineProperty(exports, "
|
|
689
|
+
Object.defineProperty(exports, "DocumentPicker", {
|
|
689
690
|
enumerable: true,
|
|
690
|
-
get: function () { return
|
|
691
|
+
get: function () { return chunkVZOOGA47_cjs.DocumentPicker; }
|
|
691
692
|
});
|
|
692
693
|
Object.defineProperty(exports, "ConfirmDialog", {
|
|
693
694
|
enumerable: true,
|
package/dist/settings/index.js
CHANGED
|
@@ -5,9 +5,10 @@ export { DEFAULT_SETTINGS_DANGER_ZONE_LABELS, SettingsActionRow, SettingsCard, S
|
|
|
5
5
|
import '../chunk-66TA5IBN.js';
|
|
6
6
|
import '../chunk-NHZK64TQ.js';
|
|
7
7
|
export { MultiSelect } from '../chunk-CQCC7LE7.js';
|
|
8
|
-
export {
|
|
8
|
+
export { DEFAULT_TRI_STATE_FILTER_MENU_LABELS, TriStateFilterMenu } from '../chunk-G4GLDQLY.js';
|
|
9
9
|
import '../chunk-5LXQPP2K.js';
|
|
10
10
|
import '../chunk-VILAPTCB.js';
|
|
11
|
+
export { DEFAULT_DOCUMENT_PICKER_LABELS, DocumentPicker } from '../chunk-WNDIVNPT.js';
|
|
11
12
|
export { ConfirmDialog, DEFAULT_CONFIRM_DIALOG_LABELS } from '../chunk-ECERC6TI.js';
|
|
12
13
|
import '../chunk-ABEKUV6L.js';
|
|
13
14
|
export { MODAL_SECTION_TITLE_CLASS, ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../chunk-TX2ZICS7.js';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkPFJIGGNN_cjs = require('../chunk-PFJIGGNN.cjs');
|
|
5
|
+
var chunkRPWWMOYP_cjs = require('../chunk-RPWWMOYP.cjs');
|
|
6
6
|
require('../chunk-RFIBUWLF.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunk6TE3QA3Y_cjs = require('../chunk-6TE3QA3Y.cjs');
|
|
8
8
|
require('../chunk-BYCGAAV5.cjs');
|
|
9
|
-
require('../chunk-
|
|
9
|
+
require('../chunk-AQPZ4QMV.cjs');
|
|
10
10
|
require('../chunk-SIB6C7P7.cjs');
|
|
11
11
|
require('../chunk-DVUZTGVL.cjs');
|
|
12
12
|
require('../chunk-V4ISCZJ7.cjs');
|
|
@@ -14,6 +14,7 @@ require('../chunk-AHDJXIUB.cjs');
|
|
|
14
14
|
require('../chunk-2EI7NCUA.cjs');
|
|
15
15
|
require('../chunk-HSAEIBRA.cjs');
|
|
16
16
|
require('../chunk-C2CWWEHO.cjs');
|
|
17
|
+
require('../chunk-VZOOGA47.cjs');
|
|
17
18
|
var chunkQGSVHWXR_cjs = require('../chunk-QGSVHWXR.cjs');
|
|
18
19
|
var chunk3LDVSHRD_cjs = require('../chunk-3LDVSHRD.cjs');
|
|
19
20
|
require('../chunk-MB3S2ETI.cjs');
|
|
@@ -320,9 +321,9 @@ function SignalsEditor({
|
|
|
320
321
|
{
|
|
321
322
|
className: ui.cn(
|
|
322
323
|
"space-y-1.5 rounded-md border p-2",
|
|
323
|
-
|
|
324
|
+
chunkRPWWMOYP_cjs.isIncompleteSignal(signal) ? "border-destructive/50" : "border-border"
|
|
324
325
|
),
|
|
325
|
-
"data-incomplete":
|
|
326
|
+
"data-incomplete": chunkRPWWMOYP_cjs.isIncompleteSignal(signal) || void 0,
|
|
326
327
|
"data-testid": `${testId}-${i}`,
|
|
327
328
|
children: [
|
|
328
329
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -1608,7 +1609,7 @@ function triggerFields(trigger, clearOthers) {
|
|
|
1608
1609
|
return {
|
|
1609
1610
|
timezone: trigger.timezone,
|
|
1610
1611
|
rrule: trigger.start === "repeat" ? trigger.rrule.trim() : none,
|
|
1611
|
-
run_at: trigger.start === "once" ?
|
|
1612
|
+
run_at: trigger.start === "once" ? chunkRPWWMOYP_cjs.localInputToIso(trigger.runAt) : none,
|
|
1612
1613
|
event_kind: trigger.start === "event" ? trigger.eventKind.trim() : none,
|
|
1613
1614
|
// A step signal is `workflow_signal` narrowed to one signal name.
|
|
1614
1615
|
event_filter: filter ?? none,
|
|
@@ -1624,7 +1625,7 @@ function plan(value, options) {
|
|
|
1624
1625
|
criteria: [],
|
|
1625
1626
|
max_passes: 3,
|
|
1626
1627
|
documents: [],
|
|
1627
|
-
steps:
|
|
1628
|
+
steps: chunkRPWWMOYP_cjs.toPlanSteps(value.workflow, options)
|
|
1628
1629
|
};
|
|
1629
1630
|
}
|
|
1630
1631
|
function builderToWorkflowRequest(value, workspaceId, options = {}) {
|
|
@@ -1659,7 +1660,7 @@ function builderToWorkflowUpdate(value, options = {}) {
|
|
|
1659
1660
|
}
|
|
1660
1661
|
function workflowRecordToBuilder(record) {
|
|
1661
1662
|
const planned = record.plan?.steps ?? [];
|
|
1662
|
-
const steps = planned.length ?
|
|
1663
|
+
const steps = planned.length ? chunkRPWWMOYP_cjs.fromPlanSteps(planned) : record.prompt || record.skill_ref ? [
|
|
1663
1664
|
{
|
|
1664
1665
|
id: "work",
|
|
1665
1666
|
kind: "agent",
|
|
@@ -1667,7 +1668,7 @@ function workflowRecordToBuilder(record) {
|
|
|
1667
1668
|
...record.skill_ref ? { workflow: record.skill_ref } : { run: { kind: "prompt", promptTemplate: record.prompt } }
|
|
1668
1669
|
}
|
|
1669
1670
|
] : [];
|
|
1670
|
-
const when =
|
|
1671
|
+
const when = chunkRPWWMOYP_cjs.workflowWhen(record);
|
|
1671
1672
|
return {
|
|
1672
1673
|
workflow: {
|
|
1673
1674
|
id: record.external_id,
|
|
@@ -1676,12 +1677,12 @@ function workflowRecordToBuilder(record) {
|
|
|
1676
1677
|
inputs: [],
|
|
1677
1678
|
landing: "chat",
|
|
1678
1679
|
schedulable: false,
|
|
1679
|
-
run: { kind: "steps", steps, layout:
|
|
1680
|
+
run: { kind: "steps", steps, layout: chunkRPWWMOYP_cjs.layoutFromPlanSteps(planned ?? []) }
|
|
1680
1681
|
},
|
|
1681
1682
|
trigger: {
|
|
1682
1683
|
...DEFAULT_WORKFLOW_TRIGGER,
|
|
1683
1684
|
start: when === "now" ? "manual" : when,
|
|
1684
|
-
runAt:
|
|
1685
|
+
runAt: chunkRPWWMOYP_cjs.isoToLocalInput(record.run_at),
|
|
1685
1686
|
rrule: record.rrule ?? "",
|
|
1686
1687
|
timezone: record.timezone || DEFAULT_WORKFLOW_TRIGGER.timezone,
|
|
1687
1688
|
eventKind: record.event_kind ?? "",
|
|
@@ -1737,7 +1738,7 @@ function triggerSummary(trigger, options = {}) {
|
|
|
1737
1738
|
case "once":
|
|
1738
1739
|
return trigger.runAt ? new Date(trigger.runAt).toLocaleString() : l.starts.once;
|
|
1739
1740
|
case "repeat":
|
|
1740
|
-
return trigger.rrule ?
|
|
1741
|
+
return trigger.rrule ? chunkRPWWMOYP_cjs.describeRRule(trigger.rrule) : l.starts.repeat;
|
|
1741
1742
|
case "event":
|
|
1742
1743
|
if (isSignalTrigger(trigger))
|
|
1743
1744
|
return trigger.signal ? l.signalSummary.replace("{signal}", trigger.signal) : l.stepSignals;
|
|
@@ -1796,7 +1797,7 @@ function TriggerInspector({
|
|
|
1796
1797
|
}
|
|
1797
1798
|
)
|
|
1798
1799
|
] }),
|
|
1799
|
-
trigger.start === "repeat" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1800
|
+
trigger.start === "repeat" && /* @__PURE__ */ jsxRuntime.jsx(chunkRPWWMOYP_cjs.RecurrenceBuilder, { rrule: trigger.rrule, onChange: (rrule) => set({ rrule }) }),
|
|
1800
1801
|
trigger.start === "event" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
|
|
1801
1802
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { className: "text-xs", children: l.event }),
|
|
1802
1803
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -1848,7 +1849,7 @@ function TriggerInspector({
|
|
|
1848
1849
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
|
|
1849
1850
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { className: "text-xs", children: l.agent }),
|
|
1850
1851
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1851
|
-
|
|
1852
|
+
chunk6TE3QA3Y_cjs.AgentSelect,
|
|
1852
1853
|
{
|
|
1853
1854
|
agents,
|
|
1854
1855
|
value: trigger.agentId,
|
|
@@ -2685,13 +2686,13 @@ function WorkflowPreview({
|
|
|
2685
2686
|
renderIcon,
|
|
2686
2687
|
testId
|
|
2687
2688
|
}) {
|
|
2688
|
-
const run =
|
|
2689
|
+
const run = chunkPFJIGGNN_cjs.useWorkflowPreview(workflow, {
|
|
2689
2690
|
resolveWorkflow: (id) => workflows.find((w) => w.id === id),
|
|
2690
2691
|
compose,
|
|
2691
2692
|
answer
|
|
2692
2693
|
});
|
|
2693
2694
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2694
|
-
|
|
2695
|
+
chunkRPWWMOYP_cjs.WorkflowRunner,
|
|
2695
2696
|
{
|
|
2696
2697
|
workflow,
|
|
2697
2698
|
run,
|