@arbidocs/blocks 0.4.84 → 0.4.86
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/MailBodyEditor-5PIQLYVY.js +217 -0
- package/dist/MailBodyEditor-5PIQLYVY.js.map +1 -0
- package/dist/MailBodyEditor-D7MGJMLH.cjs +223 -0
- package/dist/MailBodyEditor-D7MGJMLH.cjs.map +1 -0
- package/dist/agents/index.cjs +282 -281
- package/dist/agents/index.js +7 -6
- package/dist/agents/workflows/StepBarFrame.d.ts +3 -1
- package/dist/agents/workflows/WorkflowRunner.d.ts +10 -1
- package/dist/agents/workflows/run.d.ts +24 -3
- package/dist/agents/workflows/stepWindow.d.ts +4 -2
- package/dist/agents/workflows/types.d.ts +5 -0
- package/dist/agents/workflows/useWorkflowView.d.ts +16 -1
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/chunk-3R6XBYL7.cjs +576 -0
- package/dist/chunk-3R6XBYL7.cjs.map +1 -0
- package/dist/{chunk-CKB64Z4R.js → chunk-4XJZ6AAY.js} +6 -245
- package/dist/chunk-4XJZ6AAY.js.map +1 -0
- package/dist/{chunk-B3WCKBJ7.cjs → chunk-5YXG342J.cjs} +6 -18
- package/dist/chunk-5YXG342J.cjs.map +1 -0
- package/dist/{chunk-SB5ZKOYN.js → chunk-7C35WXYB.js} +4 -63
- package/dist/chunk-7C35WXYB.js.map +1 -0
- package/dist/chunk-7RJTEWYM.js +362 -0
- package/dist/chunk-7RJTEWYM.js.map +1 -0
- package/dist/chunk-AFSOUS5X.cjs +253 -0
- package/dist/chunk-AFSOUS5X.cjs.map +1 -0
- package/dist/{chunk-F4RUCUXF.cjs → chunk-C2HRZSAT.cjs} +2 -63
- package/dist/chunk-C2HRZSAT.cjs.map +1 -0
- package/dist/{chunk-XA5S4776.cjs → chunk-IHYVK6F7.cjs} +52 -51
- package/dist/chunk-IHYVK6F7.cjs.map +1 -0
- package/dist/{chunk-CONIA2ZA.js → chunk-KHY4PYU7.js} +246 -146
- package/dist/chunk-KHY4PYU7.js.map +1 -0
- package/dist/chunk-LGX6UFYG.js +557 -0
- package/dist/chunk-LGX6UFYG.js.map +1 -0
- package/dist/chunk-O4YPVYPO.cjs +373 -0
- package/dist/chunk-O4YPVYPO.cjs.map +1 -0
- package/dist/chunk-R26OHONI.js +250 -0
- package/dist/chunk-R26OHONI.js.map +1 -0
- package/dist/{chunk-RYYYHPFU.cjs → chunk-RZUMQM7W.cjs} +246 -146
- package/dist/chunk-RZUMQM7W.cjs.map +1 -0
- package/dist/{chunk-RX35SMPR.js → chunk-S2NFD4QV.js} +8 -7
- package/dist/chunk-S2NFD4QV.js.map +1 -0
- package/dist/{chunk-YJQVLVBJ.cjs → chunk-S5HZBXZA.cjs} +2 -243
- package/dist/chunk-S5HZBXZA.cjs.map +1 -0
- package/dist/{chunk-GJV2G4FC.js → chunk-W7NZRZ54.js} +6 -18
- package/dist/chunk-W7NZRZ54.js.map +1 -0
- package/dist/{chunk-ZQYE7J3J.cjs → chunk-WRSBM6QN.cjs} +332 -94
- package/dist/chunk-WRSBM6QN.cjs.map +1 -0
- package/dist/{chunk-RSKSXEPW.js → chunk-X23U6QEJ.js} +324 -88
- package/dist/chunk-X23U6QEJ.js.map +1 -0
- package/dist/collaboration/index.cjs +100 -49
- package/dist/collaboration/index.js +4 -1
- package/dist/collaboration/mail/MailBodyEditor.d.ts +7 -0
- package/dist/collaboration/mail/MailDeliveryList.d.ts +8 -0
- package/dist/collaboration/mail/MailDocumentPicker.d.ts +15 -0
- package/dist/collaboration/mail/MailGrid.d.ts +17 -0
- package/dist/collaboration/mail/MailMessageView.d.ts +27 -0
- package/dist/collaboration/mail/PlainMailBodyEditor.d.ts +12 -0
- package/dist/collaboration/mail/index.d.ts +6 -0
- package/dist/collaboration/mail/mailCompose.d.ts +24 -0
- package/dist/connect/index.cjs +1673 -96
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +2 -1
- package/dist/connect/index.js +1634 -63
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedSettings.d.ts +1 -4
- package/dist/connection/ConnectedTagTable.d.ts +32 -0
- package/dist/connection/mail/ConnectedMailAccounts.d.ts +21 -0
- package/dist/connection/mail/ConnectedMailComposer.d.ts +40 -0
- package/dist/connection/mail/ConnectedMailSetup.d.ts +16 -0
- package/dist/connection/mail/ConnectedMailbox.d.ts +65 -0
- package/dist/connection/mail/MailComposerForm.d.ts +25 -0
- package/dist/connection/mail/attachments.d.ts +13 -0
- package/dist/connection/mail/index.d.ts +6 -0
- package/dist/connection/mail/mailbox.d.ts +6 -0
- package/dist/connection/mail/types.d.ts +92 -0
- package/dist/connection/useConnectedWorkNotifications.d.ts +6 -0
- package/dist/connection/useWorkflowThread.d.ts +7 -2
- package/dist/facts/index.cjs +3 -3
- package/dist/facts/index.js +3 -3
- package/dist/files/index.cjs +48 -368
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.js +11 -361
- package/dist/files/index.js.map +1 -1
- package/dist/home/index.cjs +1 -1
- package/dist/home/index.js +1 -1
- package/dist/index.cjs +496 -437
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +23 -20
- package/dist/index.js.map +1 -1
- package/dist/settings/PasswordChangeDialog.d.ts +9 -12
- package/dist/settings/index.cjs +44 -43
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.js +3 -2
- package/dist/settings/index.js.map +1 -1
- package/dist/shell/index.cjs +2 -2
- package/dist/shell/index.js +2 -2
- package/dist/studio/index.cjs +1 -1
- package/dist/studio/index.js +1 -1
- package/dist/tags/TagColumnsEditor.d.ts +34 -0
- package/dist/tags/TagDetail.d.ts +13 -11
- package/dist/tags/TagTable.d.ts +99 -0
- package/dist/tags/TagsNav.d.ts +2 -2
- package/dist/tags/index.d.ts +7 -5
- package/dist/tags/{tagMatrixDocx.d.ts → tagTableDocx.d.ts} +12 -12
- package/dist/tags/tagTableModel.d.ts +47 -0
- package/dist/workflow-canvas/index.cjs +50 -49
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +7 -6
- package/dist/workflow-canvas/index.js.map +1 -1
- package/package.json +29 -4
- package/dist/chunk-B3WCKBJ7.cjs.map +0 -1
- package/dist/chunk-CKB64Z4R.js.map +0 -1
- package/dist/chunk-CONIA2ZA.js.map +0 -1
- package/dist/chunk-F4RUCUXF.cjs.map +0 -1
- package/dist/chunk-GJV2G4FC.js.map +0 -1
- package/dist/chunk-RSKSXEPW.js.map +0 -1
- package/dist/chunk-RX35SMPR.js.map +0 -1
- package/dist/chunk-RYYYHPFU.cjs.map +0 -1
- package/dist/chunk-SB5ZKOYN.js.map +0 -1
- package/dist/chunk-XA5S4776.cjs.map +0 -1
- package/dist/chunk-YJQVLVBJ.cjs.map +0 -1
- package/dist/chunk-ZQYE7J3J.cjs.map +0 -1
- package/dist/connection/ConnectedTagMatrix.d.ts +0 -23
- package/dist/tags/TagMatrix.d.ts +0 -87
- package/dist/tags/tagMatrixModel.d.ts +0 -43
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Toolbar.tsx","../src/components/EntityIdentityBar.tsx","../src/components/EntityTooltip.tsx","../src/components/AskBar.tsx","../src/tags/TagDetail.tsx","../src/tags/TagsNav.tsx"],"names":["jsxs","cn","jsx","Input","useState","Search"],"mappings":"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","file":"index.js","sourcesContent":["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","import { useEffect, useState, type ReactNode } from 'react'\nimport { Pencil } from 'lucide-react'\nimport { Input, Textarea, cn } from '@arbidocs/react/ui'\n\n/** Longest a name may be. Exported so a form editing the same field agrees. */\nexport const IDENTITY_NAME_MAX_LENGTH = 50\n\n/** Shown once the remaining allowance gets this low, not for the whole time. */\nconst COUNTER_THRESHOLD = 10\n\nexport interface EntityIdentityField {\n /** Row caption. Rendered with a trailing colon. */\n label: string\n value: string\n /** Stands in for an empty value, in italics — never a blank row. */\n placeholder: string\n /** Commits the edit. Not called when the value is unchanged. */\n onSave: (next: string) => void\n /** A description needs line breaks; a name does not. */\n multiline?: boolean\n /** Caps the input and shows a counter as it fills. Names only, by default. */\n maxLength?: number\n /** Classes for the read-mode value, e.g. a larger weight for the name. */\n valueClassName?: string\n /**\n * Content pinned to the RIGHT END of this row — e.g. the owning project\n * beside a name, a member stack beside a status. Rows without one let their\n * value run the full width, which is what a description wants.\n */\n trailing?: ReactNode\n /**\n * Content rendered immediately BEFORE the value — the entity's own mark.\n * Sits outside the edit swap, so starting to edit the name doesn't make the\n * icon jump or disappear.\n */\n leading?: ReactNode\n /**\n * Drops the caption from view for this row, leaving the value flush left.\n * For a field whose value already says what it is — a workspace's name and\n * description read as exactly that — the caption is a word the eye has to\n * step over on the way in. The caption stays in the markup for screen\n * readers, which have no such visual cue to fall back on.\n */\n hideLabel?: boolean\n /** Row test id; the pencil and input derive `-edit` and `-input`. */\n testId?: string\n}\n\nexport interface EntityIdentityBarProps {\n /** The editable text fields, in order. Usually name then description. */\n fields: EntityIdentityField[]\n /**\n * Read-only rows shown after the editable ones — anything whose control the\n * consumer owns (a project picker, an owner avatar, a status). Rendered with\n * the same caption column so every row lines up.\n */\n extraRows?: { label: string; content: ReactNode; trailing?: ReactNode; testId?: string }[]\n /** Hides every pencil. A viewer without permission sees values, not controls. */\n canEdit?: boolean\n /** Trailing controls, pinned right — e.g. a member stack, a status. */\n actions?: ReactNode\n /**\n * Controls that act on the ENTITY rather than on any one field — typically an\n * overflow menu holding delete or leave. Sits under the field list, where a\n * destructive action is findable but not in the path of everyday reading.\n */\n footer?: ReactNode\n className?: string\n testId?: string\n}\n\n/**\n * The \"what am I looking at\" bar for an entity's own page.\n *\n * A caption column (`Name:`, `Description:`, `Project:`) and a value column. The\n * captions are the point: a bare bold string at the top of a page reads equally\n * as a workspace, a project, a case file or a folder, and people read it as\n * whichever they expected. Saying which field is which costs one column and\n * removes the ambiguity entirely.\n *\n * Editing happens in place. The pencil is always visible to someone who can use\n * it rather than revealed on hover — a control you have to go hunting for is one\n * most people never find, and hover doesn't exist on touch. Commit is on blur\n * and on Enter (single-line fields only, so a description can hold line\n * breaks); Escape abandons the edit.\n *\n * Deliberately NOT a form: no submit, no dirty state, no field-level errors.\n * When a consumer needs visibility toggles, destructive actions or validation\n * messages, those belong in its settings form — this bar is the identity of the\n * thing, shown where you are working on it.\n *\n * Styled with SEMANTIC tokens only, so every host gets it in its own colours.\n */\nexport function EntityIdentityBar({\n fields,\n extraRows = [],\n canEdit = false,\n actions,\n footer,\n className,\n testId,\n}: EntityIdentityBarProps) {\n return (\n <div\n className={cn('flex flex-wrap items-start justify-between gap-x-6 gap-y-3', className)}\n data-testid={testId}\n >\n <dl className=\"min-w-0 flex-1 space-y-1.5\">\n {fields.map((field) => (\n <IdentityFieldRow key={field.label} field={field} canEdit={canEdit} />\n ))}\n {extraRows.map((row) => (\n <div\n key={row.label}\n className=\"flex min-h-7 min-w-0 items-center gap-2\"\n data-testid={row.testId}\n >\n <dt className=\"w-24 shrink-0 text-sm font-medium text-muted-foreground\">\n {row.label}:\n </dt>\n <dd className=\"flex min-w-0 flex-1 items-center gap-2\">\n {row.content}\n {row.trailing ? (\n <div className=\"min-w-0 shrink-0 sm:ml-auto\">{row.trailing}</div>\n ) : null}\n </dd>\n </div>\n ))}\n {footer ? <div className=\"flex items-center pt-0.5\">{footer}</div> : null}\n </dl>\n {actions ? <div className=\"flex shrink-0 items-center gap-2\">{actions}</div> : null}\n </div>\n )\n}\n\nfunction IdentityFieldRow({ field, canEdit }: { field: EntityIdentityField; canEdit: boolean }) {\n const {\n label,\n value,\n placeholder,\n onSave,\n multiline = false,\n maxLength,\n valueClassName,\n leading,\n hideLabel,\n trailing,\n testId,\n } = field\n\n const [isEditing, setIsEditing] = useState(false)\n const [draft, setDraft] = useState(value)\n\n // Track the value while not editing, so an update from elsewhere (another\n // tab, a websocket) doesn't get overwritten by a stale draft on the next edit.\n useEffect(() => {\n if (!isEditing) setDraft(value)\n }, [value, isEditing])\n\n const commit = () => {\n setIsEditing(false)\n const next = draft.trim()\n if (next !== value) onSave(next)\n }\n\n const cancel = () => {\n setDraft(value)\n setIsEditing(false)\n }\n\n const charsLeft = maxLength === undefined ? null : maxLength - draft.length\n\n // Editing must not move anything. The input carries the read view's exact\n // typography and padding, drops the border and shadow entirely, and marks\n // focus with a contrasting FIELD instead — a box appearing around the text\n // (and the row growing to fit it) reads as the page jumping under the cursor.\n const fieldClass =\n 'h-auto rounded border-0 bg-muted px-1.5 py-0.5 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0'\n\n const shared = {\n autoFocus: true,\n value: draft,\n placeholder,\n maxLength,\n 'aria-label': label,\n 'data-testid': testId && `${testId}-input`,\n onBlur: commit,\n onChange: (e: { target: { value: string } }) => setDraft(e.target.value),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n cancel()\n } else if (e.key === 'Enter' && !multiline) {\n e.preventDefault()\n commit()\n }\n },\n }\n\n // Every row shares one minimum height: that of the small controls (h-7) a\n // row may carry at its trailing end. A row that is only text then sits in\n // the same rhythm as one holding a button, so the captions fall on an even\n // beat down the bar instead of bunching up wherever a row has no control.\n return (\n <div className={cn('flex min-h-7 min-w-0 gap-2', multiline ? 'items-start' : 'items-center')}>\n <dt\n className={cn(\n hideLabel\n ? 'sr-only'\n : cn('w-24 shrink-0 text-sm font-medium text-muted-foreground', multiline && 'pt-1')\n )}\n >\n {label}:\n </dt>\n {/* Wraps under sm: the trailing controls drop to their own line instead of overflowing. */}\n <dd className=\"flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1.5 sm:flex-nowrap\">\n {leading}\n {isEditing ? (\n <div className=\"relative min-w-0 flex-1 max-sm:basis-[calc(100%-2.5rem)]\">\n {multiline ? (\n <Textarea\n {...shared}\n rows={2}\n className={cn(fieldClass, 'min-h-0 resize-none leading-snug', valueClassName)}\n />\n ) : (\n <Input {...shared} className={cn(fieldClass, 'pr-20', valueClassName)} />\n )}\n {charsLeft !== null && charsLeft <= COUNTER_THRESHOLD && (\n <span\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 hidden -translate-y-1/2 text-sm lg:block',\n charsLeft < 0 ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={testId && `${testId}-counter`}\n >\n {charsLeft < 0 ? `${-charsLeft} over` : `${charsLeft} left`}\n </span>\n )}\n </div>\n ) : (\n // `identity-field` (not the generic `group`) scopes the pencil's hover\n // to THIS field only — an ancestor card also carries `group`, so a\n // `.group:hover` rule would reveal every field's pencil at once.\n <span className=\"identity-field flex min-w-0 flex-1 items-center gap-1.5 sm:flex-none\">\n {/* Same padding as the input above — the swap must not nudge the\n text sideways or change the row's height. */}\n <span className={cn('px-1.5 py-0.5', valueClassName)} data-testid={testId}>\n {value || <span className=\"italic text-muted-foreground\">{placeholder}</span>}\n </span>\n {canEdit && (\n <button\n type=\"button\"\n onClick={() => setIsEditing(true)}\n aria-label={`Edit ${label.toLowerCase()}`}\n title={`Edit ${label.toLowerCase()}`}\n // Quiet by default — the pencil only surfaces when the row is\n // hovered so it reads as clean text, and stays reachable by\n // keyboard (focus-visible).\n //\n // NB: use the ungated `[.identity-field:hover_&]` selector rather\n // than Tailwind's `group-hover:`. The latter compiles behind\n // `@media (hover: hover)`, so on a touchscreen (whose PRIMARY\n // pointer reports `hover: none`) the rule is disabled even when a\n // real mouse is firing hover events — the pencil then stays at\n // opacity-0 forever. The arbitrary selector has no media gate, so\n // it reveals on any genuine `:hover`.\n className=\"shrink-0 cursor-pointer rounded p-1 text-muted-foreground opacity-60 transition-[color,background-color,opacity] hover:bg-accent hover:text-foreground focus-visible:opacity-100 pointer-coarse:p-[15px] [.identity-field:hover_&]:opacity-100\"\n data-testid={testId && `${testId}-edit`}\n >\n <Pencil className=\"size-3.5\" />\n </button>\n )}\n </span>\n )}\n {trailing ? (\n <div className=\"min-w-0 shrink-0 max-sm:w-full sm:ml-auto\">{trailing}</div>\n ) : null}\n </dd>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\n/**\n * Parts for the hover card of an entity pill (workspace, user, tag, ...): a header, optional\n * stat rows, bordered sections and an action hint. The host fills them from its own data.\n */\n\nexport function EntityTooltip({\n className,\n children,\n}: {\n className?: string\n children: ReactNode\n}) {\n return (\n <div data-slot=\"entity-tooltip\" className={cn('flex flex-col gap-2', className)}>\n {children}\n </div>\n )\n}\n\nexport interface EntityTooltipHeaderProps {\n /** Icon / avatar before the title. */\n lead: ReactNode\n title: ReactNode\n subtitle?: ReactNode\n /** Right-hand badge. */\n trailing?: ReactNode\n /** Extra glyph after the title (e.g. an agent mark). */\n titleAccessory?: ReactNode\n}\n\nexport function EntityTooltipHeader({\n lead,\n title,\n subtitle,\n trailing,\n titleAccessory,\n}: EntityTooltipHeaderProps) {\n return (\n <div className=\"flex items-center gap-2\">\n {lead}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"truncate text-sm font-medium\">{title}</span>\n {titleAccessory}\n </div>\n {subtitle && <span className=\"truncate text-xs text-muted-foreground\">{subtitle}</span>}\n </div>\n {trailing}\n </div>\n )\n}\n\nexport interface EntityTooltipStat {\n key: string\n icon: ReactNode\n label: ReactNode\n value: ReactNode\n}\n\n/** Label/value rows between two rules. */\nexport function EntityTooltipStats({ stats }: { stats: EntityTooltipStat[] }) {\n return (\n <div className=\"flex flex-col gap-1.5 border-y border-border py-2\">\n {stats.map((s) => (\n <div key={s.key} className=\"flex items-center justify-between text-sm\">\n <div className=\"flex items-center gap-2\">\n {s.icon}\n <span className=\"text-muted-foreground\">{s.label}</span>\n </div>\n <span className=\"font-medium\">{s.value}</span>\n </div>\n ))}\n </div>\n )\n}\n\n/** A secondary section under a rule, optionally headed by an icon + text. */\nexport function EntityTooltipSection({\n icon,\n heading,\n children,\n}: {\n icon?: ReactNode\n heading?: ReactNode\n children?: ReactNode\n}) {\n return (\n <div className=\"flex flex-col gap-1.5 border-t border-border pt-2\">\n {heading && (\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {icon}\n <span>{heading}</span>\n </div>\n )}\n {children}\n </div>\n )\n}\n\n/** Muted one-liner at the foot of the card, e.g. \"Click to send message\". */\nexport function EntityTooltipHint({\n icon,\n children,\n isRuled,\n}: {\n icon?: ReactNode\n children: ReactNode\n /** Draw the rule above (the hint closes a card that already has sections). */\n isRuled?: boolean\n}) {\n return (\n <div\n className={cn(\n 'flex items-center gap-1.5 text-xs text-muted-foreground',\n isRuled && 'border-t border-border pt-1'\n )}\n >\n {icon}\n <span>{children}</span>\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 * One tag in full: its own fields (aliases, role, status, …) editable in place, then everything\n * across the workspace that carries it — the documents (with the value or note the tag has on\n * each, and how many passages back it), the facts and the threads. The data is one row of the tag matrix\n * (`TagMatrixRowData`); every write goes back through the host.\n */\n\nimport type { ReactNode } from 'react'\nimport { FileText, Lightbulb, Loader2, MessagesSquare } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport {\n DEFAULT_TAG_MATRIX_LABELS,\n TagMatrixCell,\n type TagMatrixLabels,\n type TagMatrixProps,\n} from './TagMatrix'\nimport type { TagMatrixRowData } from './tagMatrixModel'\n\nexport interface TagDetailLabels {\n fields: string\n documents: string\n facts: string\n threads: string\n /** `{shown}` of `{count}` listed. */\n showing: string\n noDocuments: string\n noFacts: string\n noThreads: string\n untitledThread: string\n /** When a thread was last active: `{date}`. */\n threadUpdated: string\n /** `{count}` passages cited. */\n passages: string\n passage: string\n loading: string\n}\n\nexport const DEFAULT_TAG_DETAIL_LABELS: TagDetailLabels = {\n fields: 'Fields',\n documents: 'Documents',\n facts: 'Facts',\n threads: 'Threads',\n showing: 'Showing {shown} of {count}',\n noDocuments: 'No document carries this tag yet.',\n noFacts: 'No fact carries this tag yet.',\n noThreads: 'No thread carries this tag yet.',\n untitledThread: 'Untitled thread',\n threadUpdated: 'Updated {date}',\n passages: '{count} passages',\n passage: '1 passage',\n loading: 'Loading…',\n}\n\nexport interface TagDetailProps extends Pick<\n TagMatrixProps,\n 'onChangeValue' | 'onOpenDocument' | 'onOpenFact' | 'onOpenThread' | 'people'\n> {\n /** The tag's matrix row (its fields, values, documents and facts). */\n row: TagMatrixRowData | undefined\n isLoading?: boolean\n labels?: Partial<TagDetailLabels>\n /** Labels of the field inputs (the empty choice). */\n fieldLabels?: Partial<TagMatrixLabels>\n className?: string\n testId?: string\n}\n\nfunction Section({\n title,\n count,\n shown,\n l,\n children,\n testId,\n}: {\n title: string\n count?: number\n shown?: number\n l: TagDetailLabels\n children: ReactNode\n testId: string\n}) {\n return (\n <section className=\"flex flex-col gap-2\" data-testid={testId}>\n <div className=\"flex items-baseline gap-2\">\n <h2 className=\"text-sm font-semibold\">{title}</h2>\n {count !== undefined && (\n <span className=\"text-sm tabular-nums text-muted-foreground\">{count}</span>\n )}\n {count !== undefined && shown !== undefined && shown < count && (\n <span className=\"ml-auto text-xs text-muted-foreground\">\n {l.showing.replace('{shown}', String(shown)).replace('{count}', String(count))}\n </span>\n )}\n </div>\n {children}\n </section>\n )\n}\n\n/** A timestamp as a day in the viewer's locale (\"18 Oct 2026\"). */\nconst formatDay = (iso: string) => {\n const at = new Date(iso)\n return Number.isNaN(at.getTime())\n ? iso\n : at.toLocaleDateString(undefined, { day: 'numeric', month: 'short', year: 'numeric' })\n}\n\nconst LIST = 'divide-y divide-border overflow-hidden rounded-lg border border-border'\nconst ITEM =\n 'flex w-full items-start gap-2 px-3 py-2 text-left text-sm transition-colors hover:bg-muted/50 disabled:hover:bg-transparent'\n\nexport function TagDetail({\n row,\n isLoading,\n people,\n onChangeValue,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n labels,\n fieldLabels,\n className,\n testId = 'tag-detail',\n}: TagDetailProps) {\n const l = { ...DEFAULT_TAG_DETAIL_LABELS, ...labels }\n const cellLabels = { ...DEFAULT_TAG_MATRIX_LABELS, ...fieldLabels }\n if (isLoading || !row)\n return (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {l.loading}\n </p>\n )\n const fields = row.tag.fields ?? []\n const docs = row.docs ?? []\n const facts = row.facts ?? []\n const threads = row.threads ?? []\n const passages = (n: number) => (n === 1 ? l.passage : l.passages.replace('{count}', String(n)))\n\n return (\n <div className={cn('flex flex-col gap-6', className)} data-testid={testId}>\n {fields.length > 0 && (\n <Section title={l.fields} l={l} testId={`${testId}-fields`}>\n <dl className=\"grid grid-cols-1 gap-x-4 gap-y-2 sm:grid-cols-[minmax(8rem,auto)_1fr]\">\n {fields.map((field) => (\n <div key={field.id} className=\"contents\">\n <dt className=\"pt-1.5 text-sm text-muted-foreground\">{field.name}</dt>\n <dd className=\"min-w-0\">\n <TagMatrixCell\n row={row}\n column={field}\n people={people}\n onChange={onChangeValue}\n l={cellLabels}\n testId={`${testId}-field-${field.id}`}\n />\n </dd>\n </div>\n ))}\n </dl>\n </Section>\n )}\n\n <Section\n title={l.documents}\n count={row.doc_count}\n shown={docs.length}\n l={l}\n testId={`${testId}-documents`}\n >\n {docs.length ? (\n <ul className={LIST}>\n {docs.map((d) => (\n <li key={d.doc_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenDocument}\n onClick={() => onOpenDocument?.(d.doc_ext_id)}\n data-testid={`${testId}-doc-${d.doc_ext_id}`}\n >\n <FileText className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate font-medium\">{d.file_name}</span>\n {d.note && (\n <span className=\"line-clamp-2 whitespace-pre-line text-muted-foreground\">\n {d.note}\n </span>\n )}\n </span>\n {d.citations_count > 0 && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {passages(d.citations_count)}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noDocuments}</p>\n )}\n </Section>\n\n <Section\n title={l.facts}\n count={row.fact_count}\n shown={facts.length}\n l={l}\n testId={`${testId}-facts`}\n >\n {facts.length ? (\n <ul className={LIST}>\n {facts.map((f) => (\n <li key={f.fact_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenFact}\n onClick={() => onOpenFact?.(f.fact_ext_id)}\n data-testid={`${testId}-fact-${f.fact_ext_id}`}\n >\n <Lightbulb className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"line-clamp-3 min-w-0 flex-1\">{f.text}</span>\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noFacts}</p>\n )}\n </Section>\n\n <Section\n title={l.threads}\n count={row.thread_count}\n shown={threads.length}\n l={l}\n testId={`${testId}-threads`}\n >\n {threads.length ? (\n <ul className={LIST}>\n {threads.map((t) => (\n <li key={t.conversation_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenThread}\n onClick={() => onOpenThread?.(t.conversation_ext_id)}\n data-testid={`${testId}-thread-${t.conversation_ext_id}`}\n >\n <MessagesSquare className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1 truncate font-medium\">\n {t.title || l.untitledThread}\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {l.threadUpdated.replace('{date}', formatDay(t.updated_at))}\n </span>\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noThreads}</p>\n )}\n </Section>\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 (an issue list's issues) under their parent. A group heading selects\n * the whole kind; a tag selects that tag. Data-free: the host passes the groups.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { 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. an issue list's issues). */\n children?: TagsNavItem[]\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}\n\nexport const DEFAULT_TAGS_NAV_LABELS: TagsNavLabels = {\n filter: 'Find a tag…',\n clearFilter: 'Clear',\n empty: 'None yet',\n noMatch: 'No match',\n}\n\nexport interface TagsNavProps {\n groups: TagsNavGroup[]\n selected: TagsNavSelection | null\n onSelect: (selection: TagsNavSelection) => void\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 items whose name (or a nested item's name) contains `text`, nesting kept. */\nfunction filterItems(items: TagsNavItem[], text: string): TagsNavItem[] {\n if (!text) return items\n const needle = text.toLowerCase()\n return items.flatMap((item) => {\n const children = filterItems(item.children ?? [], text)\n return item.name.toLowerCase().includes(needle) || children.length\n ? [{ ...item, children }]\n : []\n })\n}\n\nexport function TagsNav({\n groups,\n selected,\n onSelect,\n labels,\n className,\n testId = 'tags-nav',\n}: TagsNavProps) {\n const l = { ...DEFAULT_TAGS_NAV_LABELS, ...labels }\n const [filter, setFilter] = useState('')\n const text = filter.trim()\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 <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 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 {groups.map((group) => {\n const items = filterItems(group.items, text)\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 && groups.every((g) => !filterItems(g.items, text).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/Toolbar.tsx","../src/components/EntityIdentityBar.tsx","../src/components/EntityTooltip.tsx","../src/components/AskBar.tsx","../src/tags/TagDetail.tsx","../src/tags/TagsNav.tsx"],"names":["jsxs","cn","jsx","Input","useState","Search"],"mappings":"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","file":"index.js","sourcesContent":["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","import { useEffect, useState, type ReactNode } from 'react'\nimport { Pencil } from 'lucide-react'\nimport { Input, Textarea, cn } from '@arbidocs/react/ui'\n\n/** Longest a name may be. Exported so a form editing the same field agrees. */\nexport const IDENTITY_NAME_MAX_LENGTH = 50\n\n/** Shown once the remaining allowance gets this low, not for the whole time. */\nconst COUNTER_THRESHOLD = 10\n\nexport interface EntityIdentityField {\n /** Row caption. Rendered with a trailing colon. */\n label: string\n value: string\n /** Stands in for an empty value, in italics — never a blank row. */\n placeholder: string\n /** Commits the edit. Not called when the value is unchanged. */\n onSave: (next: string) => void\n /** A description needs line breaks; a name does not. */\n multiline?: boolean\n /** Caps the input and shows a counter as it fills. Names only, by default. */\n maxLength?: number\n /** Classes for the read-mode value, e.g. a larger weight for the name. */\n valueClassName?: string\n /**\n * Content pinned to the RIGHT END of this row — e.g. the owning project\n * beside a name, a member stack beside a status. Rows without one let their\n * value run the full width, which is what a description wants.\n */\n trailing?: ReactNode\n /**\n * Content rendered immediately BEFORE the value — the entity's own mark.\n * Sits outside the edit swap, so starting to edit the name doesn't make the\n * icon jump or disappear.\n */\n leading?: ReactNode\n /**\n * Drops the caption from view for this row, leaving the value flush left.\n * For a field whose value already says what it is — a workspace's name and\n * description read as exactly that — the caption is a word the eye has to\n * step over on the way in. The caption stays in the markup for screen\n * readers, which have no such visual cue to fall back on.\n */\n hideLabel?: boolean\n /** Row test id; the pencil and input derive `-edit` and `-input`. */\n testId?: string\n}\n\nexport interface EntityIdentityBarProps {\n /** The editable text fields, in order. Usually name then description. */\n fields: EntityIdentityField[]\n /**\n * Read-only rows shown after the editable ones — anything whose control the\n * consumer owns (a project picker, an owner avatar, a status). Rendered with\n * the same caption column so every row lines up.\n */\n extraRows?: { label: string; content: ReactNode; trailing?: ReactNode; testId?: string }[]\n /** Hides every pencil. A viewer without permission sees values, not controls. */\n canEdit?: boolean\n /** Trailing controls, pinned right — e.g. a member stack, a status. */\n actions?: ReactNode\n /**\n * Controls that act on the ENTITY rather than on any one field — typically an\n * overflow menu holding delete or leave. Sits under the field list, where a\n * destructive action is findable but not in the path of everyday reading.\n */\n footer?: ReactNode\n className?: string\n testId?: string\n}\n\n/**\n * The \"what am I looking at\" bar for an entity's own page.\n *\n * A caption column (`Name:`, `Description:`, `Project:`) and a value column. The\n * captions are the point: a bare bold string at the top of a page reads equally\n * as a workspace, a project, a case file or a folder, and people read it as\n * whichever they expected. Saying which field is which costs one column and\n * removes the ambiguity entirely.\n *\n * Editing happens in place. The pencil is always visible to someone who can use\n * it rather than revealed on hover — a control you have to go hunting for is one\n * most people never find, and hover doesn't exist on touch. Commit is on blur\n * and on Enter (single-line fields only, so a description can hold line\n * breaks); Escape abandons the edit.\n *\n * Deliberately NOT a form: no submit, no dirty state, no field-level errors.\n * When a consumer needs visibility toggles, destructive actions or validation\n * messages, those belong in its settings form — this bar is the identity of the\n * thing, shown where you are working on it.\n *\n * Styled with SEMANTIC tokens only, so every host gets it in its own colours.\n */\nexport function EntityIdentityBar({\n fields,\n extraRows = [],\n canEdit = false,\n actions,\n footer,\n className,\n testId,\n}: EntityIdentityBarProps) {\n return (\n <div\n className={cn('flex flex-wrap items-start justify-between gap-x-6 gap-y-3', className)}\n data-testid={testId}\n >\n <dl className=\"min-w-0 flex-1 space-y-1.5\">\n {fields.map((field) => (\n <IdentityFieldRow key={field.label} field={field} canEdit={canEdit} />\n ))}\n {extraRows.map((row) => (\n <div\n key={row.label}\n className=\"flex min-h-7 min-w-0 items-center gap-2\"\n data-testid={row.testId}\n >\n <dt className=\"w-24 shrink-0 text-sm font-medium text-muted-foreground\">\n {row.label}:\n </dt>\n <dd className=\"flex min-w-0 flex-1 items-center gap-2\">\n {row.content}\n {row.trailing ? (\n <div className=\"min-w-0 shrink-0 sm:ml-auto\">{row.trailing}</div>\n ) : null}\n </dd>\n </div>\n ))}\n {footer ? <div className=\"flex items-center pt-0.5\">{footer}</div> : null}\n </dl>\n {actions ? <div className=\"flex shrink-0 items-center gap-2\">{actions}</div> : null}\n </div>\n )\n}\n\nfunction IdentityFieldRow({ field, canEdit }: { field: EntityIdentityField; canEdit: boolean }) {\n const {\n label,\n value,\n placeholder,\n onSave,\n multiline = false,\n maxLength,\n valueClassName,\n leading,\n hideLabel,\n trailing,\n testId,\n } = field\n\n const [isEditing, setIsEditing] = useState(false)\n const [draft, setDraft] = useState(value)\n\n // Track the value while not editing, so an update from elsewhere (another\n // tab, a websocket) doesn't get overwritten by a stale draft on the next edit.\n useEffect(() => {\n if (!isEditing) setDraft(value)\n }, [value, isEditing])\n\n const commit = () => {\n setIsEditing(false)\n const next = draft.trim()\n if (next !== value) onSave(next)\n }\n\n const cancel = () => {\n setDraft(value)\n setIsEditing(false)\n }\n\n const charsLeft = maxLength === undefined ? null : maxLength - draft.length\n\n // Editing must not move anything. The input carries the read view's exact\n // typography and padding, drops the border and shadow entirely, and marks\n // focus with a contrasting FIELD instead — a box appearing around the text\n // (and the row growing to fit it) reads as the page jumping under the cursor.\n const fieldClass =\n 'h-auto rounded border-0 bg-muted px-1.5 py-0.5 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0'\n\n const shared = {\n autoFocus: true,\n value: draft,\n placeholder,\n maxLength,\n 'aria-label': label,\n 'data-testid': testId && `${testId}-input`,\n onBlur: commit,\n onChange: (e: { target: { value: string } }) => setDraft(e.target.value),\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n cancel()\n } else if (e.key === 'Enter' && !multiline) {\n e.preventDefault()\n commit()\n }\n },\n }\n\n // Every row shares one minimum height: that of the small controls (h-7) a\n // row may carry at its trailing end. A row that is only text then sits in\n // the same rhythm as one holding a button, so the captions fall on an even\n // beat down the bar instead of bunching up wherever a row has no control.\n return (\n <div className={cn('flex min-h-7 min-w-0 gap-2', multiline ? 'items-start' : 'items-center')}>\n <dt\n className={cn(\n hideLabel\n ? 'sr-only'\n : cn('w-24 shrink-0 text-sm font-medium text-muted-foreground', multiline && 'pt-1')\n )}\n >\n {label}:\n </dt>\n {/* Wraps under sm: the trailing controls drop to their own line instead of overflowing. */}\n <dd className=\"flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1.5 sm:flex-nowrap\">\n {leading}\n {isEditing ? (\n <div className=\"relative min-w-0 flex-1 max-sm:basis-[calc(100%-2.5rem)]\">\n {multiline ? (\n <Textarea\n {...shared}\n rows={2}\n className={cn(fieldClass, 'min-h-0 resize-none leading-snug', valueClassName)}\n />\n ) : (\n <Input {...shared} className={cn(fieldClass, 'pr-20', valueClassName)} />\n )}\n {charsLeft !== null && charsLeft <= COUNTER_THRESHOLD && (\n <span\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 hidden -translate-y-1/2 text-sm lg:block',\n charsLeft < 0 ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={testId && `${testId}-counter`}\n >\n {charsLeft < 0 ? `${-charsLeft} over` : `${charsLeft} left`}\n </span>\n )}\n </div>\n ) : (\n // `identity-field` (not the generic `group`) scopes the pencil's hover\n // to THIS field only — an ancestor card also carries `group`, so a\n // `.group:hover` rule would reveal every field's pencil at once.\n <span className=\"identity-field flex min-w-0 flex-1 items-center gap-1.5 sm:flex-none\">\n {/* Same padding as the input above — the swap must not nudge the\n text sideways or change the row's height. */}\n <span className={cn('px-1.5 py-0.5', valueClassName)} data-testid={testId}>\n {value || <span className=\"italic text-muted-foreground\">{placeholder}</span>}\n </span>\n {canEdit && (\n <button\n type=\"button\"\n onClick={() => setIsEditing(true)}\n aria-label={`Edit ${label.toLowerCase()}`}\n title={`Edit ${label.toLowerCase()}`}\n // Quiet by default — the pencil only surfaces when the row is\n // hovered so it reads as clean text, and stays reachable by\n // keyboard (focus-visible).\n //\n // NB: use the ungated `[.identity-field:hover_&]` selector rather\n // than Tailwind's `group-hover:`. The latter compiles behind\n // `@media (hover: hover)`, so on a touchscreen (whose PRIMARY\n // pointer reports `hover: none`) the rule is disabled even when a\n // real mouse is firing hover events — the pencil then stays at\n // opacity-0 forever. The arbitrary selector has no media gate, so\n // it reveals on any genuine `:hover`.\n className=\"shrink-0 cursor-pointer rounded p-1 text-muted-foreground opacity-60 transition-[color,background-color,opacity] hover:bg-accent hover:text-foreground focus-visible:opacity-100 pointer-coarse:p-[15px] [.identity-field:hover_&]:opacity-100\"\n data-testid={testId && `${testId}-edit`}\n >\n <Pencil className=\"size-3.5\" />\n </button>\n )}\n </span>\n )}\n {trailing ? (\n <div className=\"min-w-0 shrink-0 max-sm:w-full sm:ml-auto\">{trailing}</div>\n ) : null}\n </dd>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\n/**\n * Parts for the hover card of an entity pill (workspace, user, tag, ...): a header, optional\n * stat rows, bordered sections and an action hint. The host fills them from its own data.\n */\n\nexport function EntityTooltip({\n className,\n children,\n}: {\n className?: string\n children: ReactNode\n}) {\n return (\n <div data-slot=\"entity-tooltip\" className={cn('flex flex-col gap-2', className)}>\n {children}\n </div>\n )\n}\n\nexport interface EntityTooltipHeaderProps {\n /** Icon / avatar before the title. */\n lead: ReactNode\n title: ReactNode\n subtitle?: ReactNode\n /** Right-hand badge. */\n trailing?: ReactNode\n /** Extra glyph after the title (e.g. an agent mark). */\n titleAccessory?: ReactNode\n}\n\nexport function EntityTooltipHeader({\n lead,\n title,\n subtitle,\n trailing,\n titleAccessory,\n}: EntityTooltipHeaderProps) {\n return (\n <div className=\"flex items-center gap-2\">\n {lead}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"truncate text-sm font-medium\">{title}</span>\n {titleAccessory}\n </div>\n {subtitle && <span className=\"truncate text-xs text-muted-foreground\">{subtitle}</span>}\n </div>\n {trailing}\n </div>\n )\n}\n\nexport interface EntityTooltipStat {\n key: string\n icon: ReactNode\n label: ReactNode\n value: ReactNode\n}\n\n/** Label/value rows between two rules. */\nexport function EntityTooltipStats({ stats }: { stats: EntityTooltipStat[] }) {\n return (\n <div className=\"flex flex-col gap-1.5 border-y border-border py-2\">\n {stats.map((s) => (\n <div key={s.key} className=\"flex items-center justify-between text-sm\">\n <div className=\"flex items-center gap-2\">\n {s.icon}\n <span className=\"text-muted-foreground\">{s.label}</span>\n </div>\n <span className=\"font-medium\">{s.value}</span>\n </div>\n ))}\n </div>\n )\n}\n\n/** A secondary section under a rule, optionally headed by an icon + text. */\nexport function EntityTooltipSection({\n icon,\n heading,\n children,\n}: {\n icon?: ReactNode\n heading?: ReactNode\n children?: ReactNode\n}) {\n return (\n <div className=\"flex flex-col gap-1.5 border-t border-border pt-2\">\n {heading && (\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {icon}\n <span>{heading}</span>\n </div>\n )}\n {children}\n </div>\n )\n}\n\n/** Muted one-liner at the foot of the card, e.g. \"Click to send message\". */\nexport function EntityTooltipHint({\n icon,\n children,\n isRuled,\n}: {\n icon?: ReactNode\n children: ReactNode\n /** Draw the rule above (the hint closes a card that already has sections). */\n isRuled?: boolean\n}) {\n return (\n <div\n className={cn(\n 'flex items-center gap-1.5 text-xs text-muted-foreground',\n isRuled && 'border-t border-border pt-1'\n )}\n >\n {icon}\n <span>{children}</span>\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 * One tag in full: its values for its kind's fields (position, role, status, …) editable in place,\n * then everything across the workspace that carries it — the documents (with the value or note the\n * tag has on each, and how many passages back it), the facts and the threads. The data is the tag\n * read with its links (`TagTableRow`) and its kind's fields; every write goes back through the host.\n */\n\nimport type { ReactNode } from 'react'\nimport { FileText, Lightbulb, Loader2, MessagesSquare } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport {\n DEFAULT_TAG_TABLE_LABELS,\n TagTableCell,\n type TagTableLabels,\n type TagTableProps,\n} from './TagTable'\nimport { rowLinks, type TagTableField, type TagTableRow } from './tagTableModel'\n\nexport interface TagDetailLabels {\n fields: string\n documents: string\n facts: string\n threads: string\n /** `{shown}` of `{count}` listed. */\n showing: string\n noDocuments: string\n noFacts: string\n noThreads: string\n untitledThread: string\n /** When a thread was last active: `{date}`. */\n threadUpdated: string\n /** `{count}` passages cited. */\n passages: string\n passage: string\n loading: string\n}\n\nexport const DEFAULT_TAG_DETAIL_LABELS: TagDetailLabels = {\n fields: 'Fields',\n documents: 'Documents',\n facts: 'Facts',\n threads: 'Threads',\n showing: 'Showing {shown} of {count}',\n noDocuments: 'No document carries this tag yet.',\n noFacts: 'No fact carries this tag yet.',\n noThreads: 'No thread carries this tag yet.',\n untitledThread: 'Untitled thread',\n threadUpdated: 'Updated {date}',\n passages: '{count} passages',\n passage: '1 passage',\n loading: 'Loading…',\n}\n\nexport interface TagDetailProps extends Pick<\n TagTableProps,\n 'onChangeValue' | 'onOpenDocument' | 'onOpenFact' | 'onOpenThread' | 'people'\n> {\n /** The tag with its values and links (documents, facts, threads). */\n row: TagTableRow | undefined\n /** Its kind's fields in the workspace (none: no Fields section). */\n fields?: TagTableField[]\n isLoading?: boolean\n labels?: Partial<TagDetailLabels>\n /** Labels of the field inputs (the empty choice). */\n fieldLabels?: Partial<TagTableLabels>\n className?: string\n testId?: string\n}\n\nfunction Section({\n title,\n count,\n shown,\n l,\n children,\n testId,\n}: {\n title: string\n count?: number\n shown?: number\n l: TagDetailLabels\n children: ReactNode\n testId: string\n}) {\n return (\n <section className=\"flex flex-col gap-2\" data-testid={testId}>\n <div className=\"flex items-baseline gap-2\">\n <h2 className=\"text-sm font-semibold\">{title}</h2>\n {count !== undefined && (\n <span className=\"text-sm tabular-nums text-muted-foreground\">{count}</span>\n )}\n {count !== undefined && shown !== undefined && shown < count && (\n <span className=\"ml-auto text-xs text-muted-foreground\">\n {l.showing.replace('{shown}', String(shown)).replace('{count}', String(count))}\n </span>\n )}\n </div>\n {children}\n </section>\n )\n}\n\n/** A timestamp as a day in the viewer's locale (\"18 Oct 2026\"). */\nconst formatDay = (iso: string) => {\n const at = new Date(iso)\n return Number.isNaN(at.getTime())\n ? iso\n : at.toLocaleDateString(undefined, { day: 'numeric', month: 'short', year: 'numeric' })\n}\n\nconst LIST = 'divide-y divide-border overflow-hidden rounded-lg border border-border'\nconst ITEM =\n 'flex w-full items-start gap-2 px-3 py-2 text-left text-sm transition-colors hover:bg-muted/50 disabled:hover:bg-transparent'\n\nexport function TagDetail({\n row,\n fields = [],\n isLoading,\n people,\n onChangeValue,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n labels,\n fieldLabels,\n className,\n testId = 'tag-detail',\n}: TagDetailProps) {\n const l = { ...DEFAULT_TAG_DETAIL_LABELS, ...labels }\n const cellLabels = { ...DEFAULT_TAG_TABLE_LABELS, ...fieldLabels }\n if (isLoading || !row)\n return (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {l.loading}\n </p>\n )\n const links = rowLinks(row)\n const docs = links.docs ?? []\n const facts = links.facts ?? []\n const threads = links.threads ?? []\n const passages = (n: number) => (n === 1 ? l.passage : l.passages.replace('{count}', String(n)))\n\n return (\n <div className={cn('flex flex-col gap-6', className)} data-testid={testId}>\n {fields.length > 0 && (\n <Section title={l.fields} l={l} testId={`${testId}-fields`}>\n <dl className=\"grid grid-cols-1 gap-x-4 gap-y-2 sm:grid-cols-[minmax(8rem,auto)_1fr]\">\n {fields.map((field) => (\n <div key={field.id} className=\"contents\">\n <dt className=\"pt-1.5 text-sm text-muted-foreground\">{field.name}</dt>\n <dd className=\"min-w-0\">\n <TagTableCell\n row={row}\n column={field}\n people={people}\n onChange={onChangeValue}\n l={cellLabels}\n testId={`${testId}-field-${field.id}`}\n />\n </dd>\n </div>\n ))}\n </dl>\n </Section>\n )}\n\n <Section\n title={l.documents}\n count={links.doc_count}\n shown={docs.length}\n l={l}\n testId={`${testId}-documents`}\n >\n {docs.length ? (\n <ul className={LIST}>\n {docs.map((d) => (\n <li key={d.doc_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenDocument}\n onClick={() => onOpenDocument?.(d.doc_ext_id)}\n data-testid={`${testId}-doc-${d.doc_ext_id}`}\n >\n <FileText className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate font-medium\">{d.file_name}</span>\n {d.note && (\n <span className=\"line-clamp-2 whitespace-pre-line text-muted-foreground\">\n {d.note}\n </span>\n )}\n </span>\n {d.citations_count > 0 && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {passages(d.citations_count)}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noDocuments}</p>\n )}\n </Section>\n\n <Section\n title={l.facts}\n count={links.fact_count}\n shown={facts.length}\n l={l}\n testId={`${testId}-facts`}\n >\n {facts.length ? (\n <ul className={LIST}>\n {facts.map((f) => (\n <li key={f.fact_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenFact}\n onClick={() => onOpenFact?.(f.fact_ext_id)}\n data-testid={`${testId}-fact-${f.fact_ext_id}`}\n >\n <Lightbulb className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"line-clamp-3 min-w-0 flex-1\">{f.text}</span>\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noFacts}</p>\n )}\n </Section>\n\n <Section\n title={l.threads}\n count={links.thread_count}\n shown={threads.length}\n l={l}\n testId={`${testId}-threads`}\n >\n {threads.length ? (\n <ul className={LIST}>\n {threads.map((t) => (\n <li key={t.conversation_ext_id}>\n <button\n type=\"button\"\n className={ITEM}\n disabled={!onOpenThread}\n onClick={() => onOpenThread?.(t.conversation_ext_id)}\n data-testid={`${testId}-thread-${t.conversation_ext_id}`}\n >\n <MessagesSquare className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1 truncate font-medium\">\n {t.title || l.untitledThread}\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {l.threadUpdated.replace('{date}', formatDay(t.updated_at))}\n </span>\n </button>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noThreads}</p>\n )}\n </Section>\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 (a label's sub-labels) under their parent. A group heading selects\n * the whole kind; a tag selects that tag. Data-free: the host passes the groups.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { 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. a label's sub-labels). */\n children?: TagsNavItem[]\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}\n\nexport const DEFAULT_TAGS_NAV_LABELS: TagsNavLabels = {\n filter: 'Find a tag…',\n clearFilter: 'Clear',\n empty: 'None yet',\n noMatch: 'No match',\n}\n\nexport interface TagsNavProps {\n groups: TagsNavGroup[]\n selected: TagsNavSelection | null\n onSelect: (selection: TagsNavSelection) => void\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 items whose name (or a nested item's name) contains `text`, nesting kept. */\nfunction filterItems(items: TagsNavItem[], text: string): TagsNavItem[] {\n if (!text) return items\n const needle = text.toLowerCase()\n return items.flatMap((item) => {\n const children = filterItems(item.children ?? [], text)\n return item.name.toLowerCase().includes(needle) || children.length\n ? [{ ...item, children }]\n : []\n })\n}\n\nexport function TagsNav({\n groups,\n selected,\n onSelect,\n labels,\n className,\n testId = 'tags-nav',\n}: TagsNavProps) {\n const l = { ...DEFAULT_TAGS_NAV_LABELS, ...labels }\n const [filter, setFilter] = useState('')\n const text = filter.trim()\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 <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 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 {groups.map((group) => {\n const items = filterItems(group.items, text)\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 && groups.every((g) => !filterItems(g.items, text).length) && (\n <p className=\"px-2 text-sm text-muted-foreground\">{l.noMatch}</p>\n )}\n </nav>\n )\n}\n"]}
|
|
@@ -7,6 +7,8 @@ export interface PasswordChangeDialogLabels {
|
|
|
7
7
|
recoveryDescription: string;
|
|
8
8
|
changeDescription: string;
|
|
9
9
|
passwordChanged: string;
|
|
10
|
+
/** Success note: a password change keeps the account key, so the saved recovery key still works. */
|
|
11
|
+
recoveryKeyUnchanged: string;
|
|
10
12
|
done: string;
|
|
11
13
|
recoverySuccessful: string;
|
|
12
14
|
currentPassword: string;
|
|
@@ -15,8 +17,6 @@ export interface PasswordChangeDialogLabels {
|
|
|
15
17
|
newPassword: string;
|
|
16
18
|
confirmPassword: string;
|
|
17
19
|
confirmNewPassword: string;
|
|
18
|
-
/** Re-key notice: "3 workspaces will be re-keyed with your new password." */
|
|
19
|
-
workspacesRekeyed: (count: number) => string;
|
|
20
20
|
cancel: string;
|
|
21
21
|
settingPassword: string;
|
|
22
22
|
changingPassword: string;
|
|
@@ -31,7 +31,7 @@ export interface PasswordChangeDialogProps {
|
|
|
31
31
|
/** Dialog test id (default `change-password-dialog`). */
|
|
32
32
|
testId?: string;
|
|
33
33
|
/** Part ids; defaults are the current ids. */
|
|
34
|
-
testIds?: Partial<Record<'done' | 'currentInput' | '
|
|
34
|
+
testIds?: Partial<Record<'done' | 'currentInput' | 'error' | 'cancel' | 'submit', string>>;
|
|
35
35
|
/** Ids forwarded to the embedded password input. */
|
|
36
36
|
passwordInputTestIds?: PasswordStrengthInputTestIds;
|
|
37
37
|
open: boolean;
|
|
@@ -47,18 +47,15 @@ export interface PasswordChangeDialogProps {
|
|
|
47
47
|
onConfirmPasswordChange: (value: string) => void;
|
|
48
48
|
/** The host's password policy (see `PasswordStrengthInput`). */
|
|
49
49
|
getUnmetRequirement: (password: string) => string | null;
|
|
50
|
-
/** Number of workspaces that will be re-keyed; the notice is hidden at 0. */
|
|
51
|
-
workspaceCount: number;
|
|
52
50
|
error: string | null;
|
|
53
51
|
isProcessing: boolean;
|
|
54
52
|
isSubmitDisabled: boolean;
|
|
55
53
|
onSubmit: () => void;
|
|
56
|
-
/**
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
success: ReactNode | null;
|
|
54
|
+
/** The password changed: the success state replaces the form. */
|
|
55
|
+
isChanged: boolean;
|
|
56
|
+
/** Extra content under the success note. */
|
|
57
|
+
success?: ReactNode;
|
|
61
58
|
onDone: () => void;
|
|
62
59
|
}
|
|
63
|
-
/** Change (or set, after recovery) the master password
|
|
64
|
-
export declare function PasswordChangeDialog({ open, onClose, recoveryMode, currentPassword, onCurrentPasswordChange, newPassword, onNewPasswordChange, confirmPassword, onConfirmPasswordChange, getUnmetRequirement,
|
|
60
|
+
/** Change (or set, after recovery) the master password. */
|
|
61
|
+
export declare function PasswordChangeDialog({ open, onClose, recoveryMode, currentPassword, onCurrentPasswordChange, newPassword, onNewPasswordChange, confirmPassword, onConfirmPasswordChange, getUnmetRequirement, error, isProcessing, isSubmitDisabled, onSubmit, isChanged, success, onDone, labels, passwordInputLabels, testId, testIds, passwordInputTestIds, }: PasswordChangeDialogProps): import("react").JSX.Element;
|
package/dist/settings/index.cjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunk5YXG342J_cjs = require('../chunk-5YXG342J.cjs');
|
|
5
5
|
var chunk223D4727_cjs = require('../chunk-223D4727.cjs');
|
|
6
6
|
var chunk46IU3UPF_cjs = require('../chunk-46IU3UPF.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunkS5HZBXZA_cjs = require('../chunk-S5HZBXZA.cjs');
|
|
8
|
+
var chunkAFSOUS5X_cjs = require('../chunk-AFSOUS5X.cjs');
|
|
8
9
|
var chunk7RGLTF76_cjs = require('../chunk-7RGLTF76.cjs');
|
|
9
10
|
var chunkVFUWWH52_cjs = require('../chunk-VFUWWH52.cjs');
|
|
10
11
|
require('../chunk-ADOKTJHV.cjs');
|
|
@@ -3476,135 +3477,135 @@ function ErrorDialogView({
|
|
|
3476
3477
|
|
|
3477
3478
|
Object.defineProperty(exports, "ActiveSessionsDialog", {
|
|
3478
3479
|
enumerable: true,
|
|
3479
|
-
get: function () { return
|
|
3480
|
+
get: function () { return chunk5YXG342J_cjs.ActiveSessionsDialog; }
|
|
3480
3481
|
});
|
|
3481
3482
|
Object.defineProperty(exports, "AvatarPicker", {
|
|
3482
3483
|
enumerable: true,
|
|
3483
|
-
get: function () { return
|
|
3484
|
+
get: function () { return chunk5YXG342J_cjs.AvatarPicker; }
|
|
3484
3485
|
});
|
|
3485
3486
|
Object.defineProperty(exports, "DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS", {
|
|
3486
3487
|
enumerable: true,
|
|
3487
|
-
get: function () { return
|
|
3488
|
+
get: function () { return chunk5YXG342J_cjs.DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS; }
|
|
3488
3489
|
});
|
|
3489
3490
|
Object.defineProperty(exports, "DEFAULT_AVATAR_PICKER_LABELS", {
|
|
3490
3491
|
enumerable: true,
|
|
3491
|
-
get: function () { return
|
|
3492
|
+
get: function () { return chunk5YXG342J_cjs.DEFAULT_AVATAR_PICKER_LABELS; }
|
|
3492
3493
|
});
|
|
3493
3494
|
Object.defineProperty(exports, "DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS", {
|
|
3494
3495
|
enumerable: true,
|
|
3495
|
-
get: function () { return
|
|
3496
|
+
get: function () { return chunk5YXG342J_cjs.DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS; }
|
|
3496
3497
|
});
|
|
3497
3498
|
Object.defineProperty(exports, "DEFAULT_IDENTITY_VERIFICATION_LABELS", {
|
|
3498
3499
|
enumerable: true,
|
|
3499
|
-
get: function () { return
|
|
3500
|
+
get: function () { return chunk5YXG342J_cjs.DEFAULT_IDENTITY_VERIFICATION_LABELS; }
|
|
3500
3501
|
});
|
|
3501
3502
|
Object.defineProperty(exports, "DEFAULT_LOGOUT_DIALOG_LABELS", {
|
|
3502
3503
|
enumerable: true,
|
|
3503
|
-
get: function () { return
|
|
3504
|
+
get: function () { return chunk5YXG342J_cjs.DEFAULT_LOGOUT_DIALOG_LABELS; }
|
|
3504
3505
|
});
|
|
3505
3506
|
Object.defineProperty(exports, "DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS", {
|
|
3506
3507
|
enumerable: true,
|
|
3507
|
-
get: function () { return
|
|
3508
|
+
get: function () { return chunk5YXG342J_cjs.DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS; }
|
|
3508
3509
|
});
|
|
3509
3510
|
Object.defineProperty(exports, "DEFAULT_PROFILE_CARD_LABELS", {
|
|
3510
3511
|
enumerable: true,
|
|
3511
|
-
get: function () { return
|
|
3512
|
+
get: function () { return chunk5YXG342J_cjs.DEFAULT_PROFILE_CARD_LABELS; }
|
|
3512
3513
|
});
|
|
3513
3514
|
Object.defineProperty(exports, "DEFAULT_SETTINGS_DANGER_ZONE_LABELS", {
|
|
3514
3515
|
enumerable: true,
|
|
3515
|
-
get: function () { return
|
|
3516
|
+
get: function () { return chunk5YXG342J_cjs.DEFAULT_SETTINGS_DANGER_ZONE_LABELS; }
|
|
3516
3517
|
});
|
|
3517
3518
|
Object.defineProperty(exports, "DeleteAccountDialog", {
|
|
3518
3519
|
enumerable: true,
|
|
3519
|
-
get: function () { return
|
|
3520
|
+
get: function () { return chunk5YXG342J_cjs.DeleteAccountDialog; }
|
|
3520
3521
|
});
|
|
3521
3522
|
Object.defineProperty(exports, "EMAIL_NOTIFICATION_CATEGORIES", {
|
|
3522
3523
|
enumerable: true,
|
|
3523
|
-
get: function () { return
|
|
3524
|
+
get: function () { return chunk5YXG342J_cjs.EMAIL_NOTIFICATION_CATEGORIES; }
|
|
3524
3525
|
});
|
|
3525
3526
|
Object.defineProperty(exports, "EMAIL_NOTIFICATION_KEYS", {
|
|
3526
3527
|
enumerable: true,
|
|
3527
|
-
get: function () { return
|
|
3528
|
+
get: function () { return chunk5YXG342J_cjs.EMAIL_NOTIFICATION_KEYS; }
|
|
3528
3529
|
});
|
|
3529
3530
|
Object.defineProperty(exports, "IdentityVerificationCard", {
|
|
3530
3531
|
enumerable: true,
|
|
3531
|
-
get: function () { return
|
|
3532
|
+
get: function () { return chunk5YXG342J_cjs.IdentityVerificationCard; }
|
|
3532
3533
|
});
|
|
3533
3534
|
Object.defineProperty(exports, "IdentityVerificationDialog", {
|
|
3534
3535
|
enumerable: true,
|
|
3535
|
-
get: function () { return
|
|
3536
|
+
get: function () { return chunk5YXG342J_cjs.IdentityVerificationDialog; }
|
|
3536
3537
|
});
|
|
3537
3538
|
Object.defineProperty(exports, "LogoutDialog", {
|
|
3538
3539
|
enumerable: true,
|
|
3539
|
-
get: function () { return
|
|
3540
|
+
get: function () { return chunk5YXG342J_cjs.LogoutDialog; }
|
|
3540
3541
|
});
|
|
3541
3542
|
Object.defineProperty(exports, "NotificationCategoryList", {
|
|
3542
3543
|
enumerable: true,
|
|
3543
|
-
get: function () { return
|
|
3544
|
+
get: function () { return chunk5YXG342J_cjs.NotificationCategoryList; }
|
|
3544
3545
|
});
|
|
3545
3546
|
Object.defineProperty(exports, "PasswordChangeDialog", {
|
|
3546
3547
|
enumerable: true,
|
|
3547
|
-
get: function () { return
|
|
3548
|
+
get: function () { return chunk5YXG342J_cjs.PasswordChangeDialog; }
|
|
3548
3549
|
});
|
|
3549
3550
|
Object.defineProperty(exports, "ProfileCard", {
|
|
3550
3551
|
enumerable: true,
|
|
3551
|
-
get: function () { return
|
|
3552
|
+
get: function () { return chunk5YXG342J_cjs.ProfileCard; }
|
|
3552
3553
|
});
|
|
3553
3554
|
Object.defineProperty(exports, "RequireVerified", {
|
|
3554
3555
|
enumerable: true,
|
|
3555
|
-
get: function () { return
|
|
3556
|
+
get: function () { return chunk5YXG342J_cjs.RequireVerified; }
|
|
3556
3557
|
});
|
|
3557
3558
|
Object.defineProperty(exports, "SettingsActionRow", {
|
|
3558
3559
|
enumerable: true,
|
|
3559
|
-
get: function () { return
|
|
3560
|
+
get: function () { return chunk5YXG342J_cjs.SettingsActionRow; }
|
|
3560
3561
|
});
|
|
3561
3562
|
Object.defineProperty(exports, "SettingsCard", {
|
|
3562
3563
|
enumerable: true,
|
|
3563
|
-
get: function () { return
|
|
3564
|
+
get: function () { return chunk5YXG342J_cjs.SettingsCard; }
|
|
3564
3565
|
});
|
|
3565
3566
|
Object.defineProperty(exports, "SettingsDangerZone", {
|
|
3566
3567
|
enumerable: true,
|
|
3567
|
-
get: function () { return
|
|
3568
|
+
get: function () { return chunk5YXG342J_cjs.SettingsDangerZone; }
|
|
3568
3569
|
});
|
|
3569
3570
|
Object.defineProperty(exports, "SettingsPanel", {
|
|
3570
3571
|
enumerable: true,
|
|
3571
|
-
get: function () { return
|
|
3572
|
+
get: function () { return chunk5YXG342J_cjs.SettingsPanel; }
|
|
3572
3573
|
});
|
|
3573
3574
|
Object.defineProperty(exports, "SettingsRow", {
|
|
3574
3575
|
enumerable: true,
|
|
3575
|
-
get: function () { return
|
|
3576
|
+
get: function () { return chunk5YXG342J_cjs.SettingsRow; }
|
|
3576
3577
|
});
|
|
3577
3578
|
Object.defineProperty(exports, "SettingsSection", {
|
|
3578
3579
|
enumerable: true,
|
|
3579
|
-
get: function () { return
|
|
3580
|
+
get: function () { return chunk5YXG342J_cjs.SettingsSection; }
|
|
3580
3581
|
});
|
|
3581
3582
|
Object.defineProperty(exports, "SettingsSwitchGroup", {
|
|
3582
3583
|
enumerable: true,
|
|
3583
|
-
get: function () { return
|
|
3584
|
+
get: function () { return chunk5YXG342J_cjs.SettingsSwitchGroup; }
|
|
3584
3585
|
});
|
|
3585
3586
|
Object.defineProperty(exports, "SettingsSwitchRow", {
|
|
3586
3587
|
enumerable: true,
|
|
3587
|
-
get: function () { return
|
|
3588
|
+
get: function () { return chunk5YXG342J_cjs.SettingsSwitchRow; }
|
|
3588
3589
|
});
|
|
3589
3590
|
Object.defineProperty(exports, "formatSessionTtl", {
|
|
3590
3591
|
enumerable: true,
|
|
3591
|
-
get: function () { return
|
|
3592
|
+
get: function () { return chunk5YXG342J_cjs.formatSessionTtl; }
|
|
3592
3593
|
});
|
|
3593
3594
|
Object.defineProperty(exports, "toActiveSessionViews", {
|
|
3594
3595
|
enumerable: true,
|
|
3595
|
-
get: function () { return
|
|
3596
|
+
get: function () { return chunk5YXG342J_cjs.toActiveSessionViews; }
|
|
3596
3597
|
});
|
|
3597
3598
|
Object.defineProperty(exports, "toDeleteBlockerViews", {
|
|
3598
3599
|
enumerable: true,
|
|
3599
|
-
get: function () { return
|
|
3600
|
+
get: function () { return chunk5YXG342J_cjs.toDeleteBlockerViews; }
|
|
3600
3601
|
});
|
|
3601
3602
|
Object.defineProperty(exports, "toLogoutSessionViews", {
|
|
3602
3603
|
enumerable: true,
|
|
3603
|
-
get: function () { return
|
|
3604
|
+
get: function () { return chunk5YXG342J_cjs.toLogoutSessionViews; }
|
|
3604
3605
|
});
|
|
3605
3606
|
Object.defineProperty(exports, "toNotificationCategories", {
|
|
3606
3607
|
enumerable: true,
|
|
3607
|
-
get: function () { return
|
|
3608
|
+
get: function () { return chunk5YXG342J_cjs.toNotificationCategories; }
|
|
3608
3609
|
});
|
|
3609
3610
|
Object.defineProperty(exports, "ModalBreadcrumbHeader", {
|
|
3610
3611
|
enumerable: true,
|
|
@@ -3616,23 +3617,23 @@ Object.defineProperty(exports, "ModalCrumbs", {
|
|
|
3616
3617
|
});
|
|
3617
3618
|
Object.defineProperty(exports, "DEFAULT_DOCUMENT_PICKER_LABELS", {
|
|
3618
3619
|
enumerable: true,
|
|
3619
|
-
get: function () { return
|
|
3620
|
-
});
|
|
3621
|
-
Object.defineProperty(exports, "DEFAULT_TRI_STATE_FILTER_MENU_LABELS", {
|
|
3622
|
-
enumerable: true,
|
|
3623
|
-
get: function () { return chunkYJQVLVBJ_cjs.DEFAULT_TRI_STATE_FILTER_MENU_LABELS; }
|
|
3620
|
+
get: function () { return chunkS5HZBXZA_cjs.DEFAULT_DOCUMENT_PICKER_LABELS; }
|
|
3624
3621
|
});
|
|
3625
3622
|
Object.defineProperty(exports, "DocumentPicker", {
|
|
3626
3623
|
enumerable: true,
|
|
3627
|
-
get: function () { return
|
|
3624
|
+
get: function () { return chunkS5HZBXZA_cjs.DocumentPicker; }
|
|
3628
3625
|
});
|
|
3629
3626
|
Object.defineProperty(exports, "MultiSelect", {
|
|
3630
3627
|
enumerable: true,
|
|
3631
|
-
get: function () { return
|
|
3628
|
+
get: function () { return chunkS5HZBXZA_cjs.MultiSelect; }
|
|
3629
|
+
});
|
|
3630
|
+
Object.defineProperty(exports, "DEFAULT_TRI_STATE_FILTER_MENU_LABELS", {
|
|
3631
|
+
enumerable: true,
|
|
3632
|
+
get: function () { return chunkAFSOUS5X_cjs.DEFAULT_TRI_STATE_FILTER_MENU_LABELS; }
|
|
3632
3633
|
});
|
|
3633
3634
|
Object.defineProperty(exports, "TriStateFilterMenu", {
|
|
3634
3635
|
enumerable: true,
|
|
3635
|
-
get: function () { return
|
|
3636
|
+
get: function () { return chunkAFSOUS5X_cjs.TriStateFilterMenu; }
|
|
3636
3637
|
});
|
|
3637
3638
|
Object.defineProperty(exports, "MODAL_SECTION_TITLE_CLASS", {
|
|
3638
3639
|
enumerable: true,
|