@arbidocs/blocks 0.5.42 → 0.5.43
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/{ConnectedCallDock-362WOEGQ.cjs → ConnectedCallDock-NGHSDLJS.cjs} +9 -9
- package/dist/{ConnectedCallDock-362WOEGQ.cjs.map → ConnectedCallDock-NGHSDLJS.cjs.map} +1 -1
- package/dist/{ConnectedCallDock-ZVUSSOMT.js → ConnectedCallDock-YJSO52N4.js} +8 -8
- package/dist/{ConnectedCallDock-ZVUSSOMT.js.map → ConnectedCallDock-YJSO52N4.js.map} +1 -1
- package/dist/{ConnectedCallRoom-XRU4QR6Z.cjs → ConnectedCallRoom-4XGFFYHE.cjs} +9 -9
- package/dist/{ConnectedCallRoom-XRU4QR6Z.cjs.map → ConnectedCallRoom-4XGFFYHE.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-PHZQS7YE.js → ConnectedCallRoom-T6NS2MY4.js} +8 -8
- package/dist/{ConnectedCallRoom-PHZQS7YE.js.map → ConnectedCallRoom-T6NS2MY4.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-V2F6GTI7.js → ConnectedNativeDocxComparison-52KQKJGY.js} +16 -16
- package/dist/{ConnectedNativeDocxComparison-RW2G2UZC.js.map → ConnectedNativeDocxComparison-52KQKJGY.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-AVIO2OZA.cjs → ConnectedNativeDocxComparison-UVLZGS2V.cjs} +17 -17
- package/dist/{ConnectedNativeDocxComparison-AVIO2OZA.cjs.map → ConnectedNativeDocxComparison-UVLZGS2V.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-NMFUEM2Q.js → ConnectedNativeDocxEditor-BRBL3MOV.js} +14 -14
- package/dist/{ConnectedNativeDocxEditor-NMFUEM2Q.js.map → ConnectedNativeDocxEditor-BRBL3MOV.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-GIJ2CXTY.cjs → ConnectedNativeDocxEditor-KHR5I7W6.cjs} +16 -16
- package/dist/{ConnectedNativeDocxEditor-GIJ2CXTY.cjs.map → ConnectedNativeDocxEditor-KHR5I7W6.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-Z5VMYI37.cjs → ConnectedStreamedWordArtifact-DSVFI7BX.cjs} +17 -17
- package/dist/ConnectedStreamedWordArtifact-DSVFI7BX.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxComparison-RW2G2UZC.js → ConnectedStreamedWordArtifact-EQUE6WT5.js} +16 -16
- package/dist/ConnectedStreamedWordArtifact-EQUE6WT5.js.map +1 -0
- package/dist/{NativeDocxEditor-D6Z7BXTA.js → NativeDocxEditor-HJTKCPX2.js} +4 -4
- package/dist/{NativeDocxEditor-D6Z7BXTA.js.map → NativeDocxEditor-HJTKCPX2.js.map} +1 -1
- package/dist/{NativeDocxEditor-HE4PQV5F.cjs → NativeDocxEditor-TVZ6O6YS.cjs} +8 -8
- package/dist/{NativeDocxEditor-HE4PQV5F.cjs.map → NativeDocxEditor-TVZ6O6YS.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-ABQAHQ6P.cjs → WorkspaceTableView-2CGEO5KK.cjs} +8 -8
- package/dist/{WorkspaceTableView-ABQAHQ6P.cjs.map → WorkspaceTableView-2CGEO5KK.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-FZCPEXPJ.js → WorkspaceTableView-3ARFQYNO.js} +6 -6
- package/dist/{WorkspaceTableView-FZCPEXPJ.js.map → WorkspaceTableView-3ARFQYNO.js.map} +1 -1
- package/dist/agents/index.cjs +330 -330
- package/dist/agents/index.js +8 -8
- package/dist/calls/index.cjs +3 -3
- package/dist/calls/index.js +3 -3
- package/dist/chat/index.cjs +79 -79
- package/dist/chat/index.js +3 -3
- package/dist/{chunk-B7UQK7Y4.cjs → chunk-2QDNQM63.cjs} +5 -5
- package/dist/{chunk-B7UQK7Y4.cjs.map → chunk-2QDNQM63.cjs.map} +1 -1
- package/dist/chunk-3YZ3RUSB.cjs +18 -0
- package/dist/{chunk-E7AEW4KA.cjs.map → chunk-3YZ3RUSB.cjs.map} +1 -1
- package/dist/{chunk-XD54MZV4.js → chunk-4DDPMLGU.js} +4 -4
- package/dist/{chunk-XD54MZV4.js.map → chunk-4DDPMLGU.js.map} +1 -1
- package/dist/{chunk-IYW7JR3J.js → chunk-7CHI36EP.js} +5 -5
- package/dist/{chunk-IYW7JR3J.js.map → chunk-7CHI36EP.js.map} +1 -1
- package/dist/{chunk-ORFP3QJQ.js → chunk-AEXFUPO7.js} +3 -3
- package/dist/{chunk-ORFP3QJQ.js.map → chunk-AEXFUPO7.js.map} +1 -1
- package/dist/{chunk-DECUWH2D.js → chunk-AL7EXOX5.js} +3 -3
- package/dist/{chunk-DECUWH2D.js.map → chunk-AL7EXOX5.js.map} +1 -1
- package/dist/{chunk-NIA4H7QN.js → chunk-BTTUZZN3.js} +3 -3
- package/dist/{chunk-NIA4H7QN.js.map → chunk-BTTUZZN3.js.map} +1 -1
- package/dist/{chunk-KALKK4BB.js → chunk-DYYTVUBW.js} +3 -3
- package/dist/{chunk-KALKK4BB.js.map → chunk-DYYTVUBW.js.map} +1 -1
- package/dist/{chunk-X7C3MQRU.cjs → chunk-E3IEZMRK.cjs} +19 -19
- package/dist/{chunk-X7C3MQRU.cjs.map → chunk-E3IEZMRK.cjs.map} +1 -1
- package/dist/{chunk-QOROUFTZ.js → chunk-EFDZRAW6.js} +4 -4
- package/dist/{chunk-QOROUFTZ.js.map → chunk-EFDZRAW6.js.map} +1 -1
- package/dist/{chunk-XSHR5UQO.cjs → chunk-FEVJA4BP.cjs} +3 -3
- package/dist/{chunk-XSHR5UQO.cjs.map → chunk-FEVJA4BP.cjs.map} +1 -1
- package/dist/{chunk-ZG3KKPDP.js → chunk-FOIDBAZB.js} +4 -4
- package/dist/{chunk-ZG3KKPDP.js.map → chunk-FOIDBAZB.js.map} +1 -1
- package/dist/{chunk-WDR6FO22.cjs → chunk-GKHIRR5A.cjs} +5 -5
- package/dist/{chunk-WDR6FO22.cjs.map → chunk-GKHIRR5A.cjs.map} +1 -1
- package/dist/{chunk-74OXAUPK.cjs → chunk-GT5FCYV5.cjs} +4 -4
- package/dist/{chunk-74OXAUPK.cjs.map → chunk-GT5FCYV5.cjs.map} +1 -1
- package/dist/{chunk-S7OTTPKG.cjs → chunk-HNEOW7F3.cjs} +3 -3
- package/dist/{chunk-S7OTTPKG.cjs.map → chunk-HNEOW7F3.cjs.map} +1 -1
- package/dist/{chunk-KEOKVS6D.js → chunk-ICCBNHPU.js} +3 -3
- package/dist/{chunk-KEOKVS6D.js.map → chunk-ICCBNHPU.js.map} +1 -1
- package/dist/{chunk-3U6527ZU.cjs → chunk-JKMV4QNV.cjs} +9 -9
- package/dist/{chunk-3U6527ZU.cjs.map → chunk-JKMV4QNV.cjs.map} +1 -1
- package/dist/chunk-K53QRFPJ.cjs +18 -0
- package/dist/{chunk-NJBWN4Z5.cjs.map → chunk-K53QRFPJ.cjs.map} +1 -1
- package/dist/{chunk-MXLS7IBH.cjs → chunk-K7S5BMAB.cjs} +4 -4
- package/dist/{chunk-MXLS7IBH.cjs.map → chunk-K7S5BMAB.cjs.map} +1 -1
- package/dist/{chunk-J4QH5YXL.cjs → chunk-LNYEYR7W.cjs} +3 -3
- package/dist/{chunk-J4QH5YXL.cjs.map → chunk-LNYEYR7W.cjs.map} +1 -1
- package/dist/{chunk-WP3L6XFN.js → chunk-NE7M6NJY.js} +3 -3
- package/dist/{chunk-WP3L6XFN.js.map → chunk-NE7M6NJY.js.map} +1 -1
- package/dist/{chunk-OC36NMDZ.cjs → chunk-O3MRE2HL.cjs} +16 -16
- package/dist/{chunk-OC36NMDZ.cjs.map → chunk-O3MRE2HL.cjs.map} +1 -1
- package/dist/{chunk-2QPTXTRP.js → chunk-OPZBIGW4.js} +3 -3
- package/dist/{chunk-2QPTXTRP.js.map → chunk-OPZBIGW4.js.map} +1 -1
- package/dist/{chunk-DCA4R3EU.js → chunk-P6MVDOCL.js} +3 -3
- package/dist/{chunk-DCA4R3EU.js.map → chunk-P6MVDOCL.js.map} +1 -1
- package/dist/{chunk-Z6DNYFVM.cjs → chunk-PICGTGEB.cjs} +3 -3
- package/dist/{chunk-Z6DNYFVM.cjs.map → chunk-PICGTGEB.cjs.map} +1 -1
- package/dist/{chunk-3DHSLNVN.js → chunk-PRY52BW5.js} +3 -3
- package/dist/{chunk-3DHSLNVN.js.map → chunk-PRY52BW5.js.map} +1 -1
- package/dist/{chunk-6WZMRAQD.js → chunk-REHG7VRQ.js} +5 -5
- package/dist/{chunk-6WZMRAQD.js.map → chunk-REHG7VRQ.js.map} +1 -1
- package/dist/{chunk-HTOGVT5R.cjs → chunk-TPNLYQD2.cjs} +12 -5
- package/dist/chunk-TPNLYQD2.cjs.map +1 -0
- package/dist/{chunk-CWPGRR4E.cjs → chunk-UZVXVTTB.cjs} +13 -13
- package/dist/{chunk-CWPGRR4E.cjs.map → chunk-UZVXVTTB.cjs.map} +1 -1
- package/dist/{chunk-Q2M5P7AC.cjs → chunk-V7JDMKNQ.cjs} +5 -5
- package/dist/{chunk-Q2M5P7AC.cjs.map → chunk-V7JDMKNQ.cjs.map} +1 -1
- package/dist/{chunk-P5JFZSKH.js → chunk-VA3YYR7R.js} +3 -3
- package/dist/{chunk-P5JFZSKH.js.map → chunk-VA3YYR7R.js.map} +1 -1
- package/dist/{chunk-5TFI4YW2.js → chunk-VFSHI7IX.js} +3 -3
- package/dist/{chunk-5TFI4YW2.js.map → chunk-VFSHI7IX.js.map} +1 -1
- package/dist/{chunk-4RPASW36.js → chunk-WAIHNFUH.js} +4 -4
- package/dist/{chunk-4RPASW36.js.map → chunk-WAIHNFUH.js.map} +1 -1
- package/dist/{chunk-AE3QELMB.cjs → chunk-WALADS2S.cjs} +3 -3
- package/dist/{chunk-AE3QELMB.cjs.map → chunk-WALADS2S.cjs.map} +1 -1
- package/dist/{chunk-2GBVU5HH.cjs → chunk-WRERJFEV.cjs} +5 -5
- package/dist/{chunk-2GBVU5HH.cjs.map → chunk-WRERJFEV.cjs.map} +1 -1
- package/dist/{chunk-ZIDHMCJ4.js → chunk-X7CXCEGO.js} +9 -4
- package/dist/chunk-X7CXCEGO.js.map +1 -0
- package/dist/{chunk-FR6NUJJ2.js → chunk-YAGSGBVM.js} +8 -8
- package/dist/{chunk-FR6NUJJ2.js.map → chunk-YAGSGBVM.js.map} +1 -1
- package/dist/{chunk-BRYHW3OL.cjs → chunk-YTB6DLAD.cjs} +4 -4
- package/dist/{chunk-BRYHW3OL.cjs.map → chunk-YTB6DLAD.cjs.map} +1 -1
- package/dist/{chunk-ZM5LRCHW.cjs → chunk-YWGDZR6A.cjs} +16 -16
- package/dist/{chunk-ZM5LRCHW.cjs.map → chunk-YWGDZR6A.cjs.map} +1 -1
- package/dist/{chunk-HSI534XQ.js → chunk-ZAYUJFPI.js} +3 -3
- package/dist/{chunk-HSI534XQ.js.map → chunk-ZAYUJFPI.js.map} +1 -1
- package/dist/collaboration/index.cjs +1 -1
- package/dist/collaboration/index.js +1 -1
- package/dist/connect/docx.cjs +20 -20
- package/dist/connect/docx.js +16 -16
- package/dist/connect/index.cjs +924 -904
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +1 -0
- package/dist/connect/index.js +56 -37
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +65 -65
- package/dist/connect/viewer.js +18 -18
- package/dist/connection/tips/useContextualHints.d.ts +13 -0
- package/dist/docx/index.cjs +51 -51
- package/dist/docx/index.js +4 -4
- package/dist/facts/index.cjs +1 -1
- package/dist/facts/index.js +1 -1
- package/dist/files/index.cjs +236 -236
- package/dist/files/index.js +4 -4
- package/dist/index.cjs +667 -619
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +58 -19
- package/dist/index.js.map +1 -1
- package/dist/settings/index.cjs +155 -155
- package/dist/settings/index.js +2 -2
- package/dist/shell/index.cjs +73 -73
- package/dist/shell/index.js +5 -5
- package/dist/site/index.cjs +21 -21
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +8 -8
- package/dist/studio/index.js +7 -7
- package/dist/tips/index.d.ts +2 -0
- package/dist/tips/useTipsPlacement.d.ts +24 -0
- package/dist/tips/visibility.d.ts +5 -0
- package/dist/workflow-canvas/index.cjs +24 -24
- package/dist/workflow-canvas/index.js +11 -11
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-V2F6GTI7.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-Z5VMYI37.cjs.map +0 -1
- package/dist/chunk-E7AEW4KA.cjs +0 -18
- package/dist/chunk-HTOGVT5R.cjs.map +0 -1
- package/dist/chunk-NJBWN4Z5.cjs +0 -18
- package/dist/chunk-ZIDHMCJ4.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tips/registry.ts","../src/components/DroppableContainer.tsx","../src/components/AskBar.tsx","../src/tags/TagsNav.tsx","../src/components/OpenConversationButton.tsx","../src/nav/actions.ts","../src/nav/manifest.ts"],"names":["useDroppable","jsx","useState","useRef","jsxs","cn","Search","Button","Sparkles","text","Input","X","Plus","useBlocksEnvironment","ActionLink","buttonVariants","MessagesSquare","createElement"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The contextual tips engine: which tips apply where, and the editable layer over them. The tips\n * themselves (their words, pages, situations and actions) are the site's content; a site hands\n * them to {@link createTipsRegistry} once and shows the result in `TipCard` / its tip bar, edits it\n * in `TipsEditorDialog`, and hides tips per user with `useDismissedTips` (`@arbidocs/react`).\n *\n * Each tip has a stable `code`. The editable layer (`TipsContent`) overrides a built-in tip's\n * message, action or page, hides it, or adds tips authored in the editor; swapping it in\n * (`setContent`) updates every subscriber without a reload.\n */\n\n/** Max length of a tip message: the bar is one line, so a tip is one short sentence. */\nexport const TIP_MAX_CHARS = 80\n/** Max length of a tip's action label, so the inline button doesn't dominate. */\nexport const TIP_CTA_LABEL_MAX_CHARS = 24\n\n/**\n * A tip's action: a label and exactly one target. `action` and `sequence` are the site's own ids\n * (what its action registry runs); `href` opens in a new window.\n */\nexport interface TipCta<Action extends string = string, Sequence extends string = string> {\n label: string\n action?: Action\n sequence?: Sequence\n href?: string\n}\n\nexport interface TipDefinition<Context extends string, State, Cta> {\n /** Stable id (e.g. a page letter and a number). */\n code: string\n context: Context\n message: string\n /** Situation predicate; omitted: always applies on its page. */\n when?: (state: State) => boolean\n cta?: Cta\n /** Higher shows first. Default 0. */\n priority?: number\n /** Using the action also hides the tip for good (a one-shot offer, now taken). */\n dismissOnCta?: boolean\n}\n\n/** The editable layer over a built-in tip: omitted fields keep the built-in's; `cta: null` drops it. */\nexport interface TipOverride<Context extends string, Cta> {\n message?: string\n cta?: Cta | null\n context?: Context\n hidden?: boolean\n}\n\n/** A tip written in the editor: no situation predicate, so it always applies on its page. */\nexport interface CustomTip<Context extends string, Cta> {\n code: string\n context: Context\n message: string\n cta?: Cta\n priority?: number\n hidden?: boolean\n}\n\n/** The whole editable layer (a site keeps it as JSON next to its tips). */\nexport interface TipsContent<Context extends string, Cta> {\n overrides: Record<string, TipOverride<Context, Cta>>\n custom: CustomTip<Context, Cta>[]\n}\n\n/** A tip as the editor lists it: its effective form, where it came from and whether it is off. */\nexport interface EditorTip<Context extends string, State, Cta> {\n tip: TipDefinition<Context, State, Cta>\n isCustom: boolean\n isHidden: boolean\n}\n\nexport interface TipsRegistryConfig<Context extends string, State, Cta> {\n tips: readonly TipDefinition<Context, State, Cta>[]\n /** The committed editable layer. */\n content: TipsContent<Context, Cta>\n /** The page whose tips show on every page. */\n everywhere: Context\n /** Where a tip can be placed, with the editor's labels (\"All pages\" first, say). */\n placements: readonly { value: Context; label: string }[]\n /** The editor's label for \"off\". Default \"Hidden (off)\". */\n hiddenLabel?: string\n}\n\nexport type TipPlacement<Context extends string> = Context | 'hidden'\n\nexport interface TipsRegistry<Context extends string, State, Cta> {\n /** Tips for a page whose situation matches, highest priority first (plus every-page tips). */\n select: (context: Context, state: State) => TipDefinition<Context, State, Cta>[]\n /** Every tip for the editor, across pages, hidden ones included. */\n editorTips: () => EditorTip<Context, State, Cta>[]\n /** The live editable layer. */\n getContent: () => TipsContent<Context, Cta>\n /** Swap the editable layer and notify subscribers (no reload). */\n setContent: (next: TipsContent<Context, Cta>) => void\n /** Follow changes to the editable layer; returns the unsubscribe. */\n subscribe: (listener: () => void) => () => void\n /** The editor's placement choices: each page, then \"off\". */\n placements: readonly { value: TipPlacement<Context>; label: string }[]\n placementLabel: (placement: TipPlacement<Context>) => string\n}\n\nexport function createTipsRegistry<Context extends string, State, Cta>(\n config: TipsRegistryConfig<Context, State, Cta>\n): TipsRegistry<Context, State, Cta> {\n const { tips, everywhere, hiddenLabel = 'Hidden (off)' } = config\n let content = config.content\n const listeners = new Set<() => void>()\n type Tip = TipDefinition<Context, State, Cta>\n\n const effective = (tip: Tip): { tip: Tip; hidden: boolean } => {\n const o = content.overrides?.[tip.code]\n if (!o) return { tip, hidden: false }\n return {\n tip: {\n ...tip,\n message: o.message ?? tip.message,\n cta: o.cta === null ? undefined : (o.cta ?? tip.cta),\n context: o.context ?? tip.context,\n },\n hidden: o.hidden === true,\n }\n }\n const custom = () => content.custom ?? []\n const applies = (tipContext: Context, context: Context) =>\n tipContext === context || tipContext === everywhere\n const placements: { value: TipPlacement<Context>; label: string }[] = [\n ...config.placements,\n { value: 'hidden', label: hiddenLabel },\n ]\n\n return {\n select: (context, state) => {\n const builtins = tips\n .map(effective)\n .filter(\n ({ tip, hidden }) =>\n !hidden && applies(tip.context, context) && (!tip.when || tip.when(state))\n )\n .map(({ tip }) => tip)\n const authored = custom().filter((t) => t.hidden !== true && applies(t.context, context))\n return [...builtins, ...(authored as Tip[])].sort(\n (a, b) => (b.priority ?? 0) - (a.priority ?? 0)\n )\n },\n editorTips: () => [\n ...tips.map((t) => {\n const e = effective(t)\n return { tip: e.tip, isCustom: false, isHidden: e.hidden }\n }),\n ...custom().map((t) => ({ tip: t as Tip, isCustom: true, isHidden: t.hidden === true })),\n ],\n getContent: () => content,\n setContent: (next) => {\n content = next\n listeners.forEach((listener) => listener())\n },\n subscribe: (listener) => {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n placements,\n placementLabel: (p) => placements.find((o) => o.value === p)?.label ?? p,\n }\n}\n","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","/**\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","import { MessagesSquare } from 'lucide-react'\nimport { buttonVariants, cn, type ButtonProps } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { ActionLink } from './ActionLink'\n\nexport interface OpenConversationButtonProps {\n /** The conversation behind an AI result; none: nothing is rendered. */\n conversationId: string | null | undefined\n /** The workspace it is in, for its link. */\n workspaceId?: string | null\n /** A message to scroll to. */\n messageId?: string\n /** Default \"Open in thread\". */\n label?: string\n variant?: ButtonProps['variant']\n size?: ButtonProps['size']\n className?: string\n testId?: string\n}\n\n/**\n * \"Open in thread\": the full conversation behind an AI result (a brief, a translation, a draft),\n * to check its sources and follow up. A real link where the host gives one (`hrefFor`), opened with\n * `openConversation`.\n */\nexport function OpenConversationButton({\n conversationId,\n workspaceId,\n messageId,\n label = 'Open in thread',\n variant = 'outline',\n size = 'sm',\n className,\n testId,\n}: OpenConversationButtonProps) {\n const { hrefFor, openConversation } = useBlocksEnvironment()\n if (!conversationId) return null\n return (\n <ActionLink\n href={hrefFor({ kind: 'conversation', conversationId, workspaceId, messageId })}\n onSelect={() =>\n openConversation(conversationId, {\n ...(messageId && { messageId }),\n ...(workspaceId && { workspaceId }),\n })\n }\n className={cn(buttonVariants({ variant, size }), className)}\n data-testid={testId}\n >\n <MessagesSquare className=\"size-3.5\" aria-hidden />\n {label}\n </ActionLink>\n )\n}\n","/** A parameter-light action, supplied by a host and usable outside React. */\nexport interface ActionDefinition<Id extends string = string> {\n id: Id\n label: string\n category: string\n /** An icon name, so the catalogue stays independent of a renderer. */\n icon: string\n keywords?: readonly string[]\n run: () => void\n}\n\n/** One catalogue for picker options, tip CTAs, palettes and validated remote dispatch. */\nexport function defineActions<Id extends string, Action extends ActionDefinition<Id>>(\n actions: Partial<Record<Id, Action>>,\n options: { scopedIds?: readonly Id[]; onUnknown?: (id: Id) => void } = {}\n) {\n const scoped = new Set<string>(options.scopedIds)\n return {\n actions,\n options: (Object.values(actions) as Action[]).map(({ id, label, category }) => ({\n value: id,\n label,\n category,\n })),\n isActionId(value: string): value is Id {\n return scoped.has(value) || Object.prototype.hasOwnProperty.call(actions, value)\n },\n run(id: Id): void {\n const action = Object.prototype.hasOwnProperty.call(actions, id) ? actions[id] : undefined\n if (action) action.run()\n else options.onUnknown?.(id)\n },\n }\n}\n","import { createElement } from 'react'\nimport type { AppNavItem, AppNavSection } from './types'\nimport type { NavItem } from '../shell/types'\n\n/**\n * A host's destinations, once: the items are also the command palette's nav contract. Resolve\n * their state and handlers for ShellSidebar or MobileTabBar without copying the catalogue.\n */\nexport function defineNavigation(sections: readonly AppNavSection[]) {\n const items = sections.flatMap((section) => section.items)\n return {\n sections,\n items,\n resolve(options: {\n beforeNavigate?: () => void\n onNavigate: (item: AppNavItem) => void\n onNavigated?: () => void\n itemProps?: (item: AppNavItem) => Partial<Omit<NavItem, 'id' | 'label' | 'onSelect'>>\n }): NavItem[] {\n return items.map((item) => ({\n id: item.id,\n label: item.label,\n icon: createElement(item.icon, { className: 'size-5' }),\n ...options.itemProps?.(item),\n onSelect: () => {\n options.beforeNavigate?.()\n options.onNavigate(item)\n options.onNavigated?.()\n },\n }))\n },\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tips/registry.ts","../src/tips/useTipsPlacement.ts","../src/components/DroppableContainer.tsx","../src/components/AskBar.tsx","../src/tags/TagsNav.tsx","../src/components/OpenConversationButton.tsx","../src/nav/actions.ts","../src/nav/manifest.ts"],"names":["useState","useEffect","useMemo","useDroppable","jsx","useRef","jsxs","cn","Search","Button","Sparkles","text","Input","X","Plus","useBlocksEnvironment","ActionLink","buttonVariants","MessagesSquare","createElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,IAAM,aAAA,GAAgB;AAEtB,IAAM,uBAAA,GAA0B;AAwFhC,SAAS,mBACd,MAAA,EACmC;AACnC,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAY,WAAA,GAAc,gBAAe,GAAI,MAAA;AAC3D,EAAA,IAAI,UAAU,MAAA,CAAO,OAAA;AACrB,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAgB;AAGtC,EAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KAA4C;AAC7D,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,SAAA,GAAY,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAE,GAAA,EAAK,QAAQ,KAAA,EAAM;AACpC,IAAA,OAAO;AAAA,MACL,GAAA,EAAK;AAAA,QACH,GAAG,GAAA;AAAA,QACH,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,GAAA,CAAI,OAAA;AAAA,QAC1B,KAAK,CAAA,CAAE,GAAA,KAAQ,OAAO,MAAA,GAAa,CAAA,CAAE,OAAO,GAAA,CAAI,GAAA;AAAA,QAChD,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,GAAA,CAAI;AAAA,OAC5B;AAAA,MACA,MAAA,EAAQ,EAAE,MAAA,KAAW;AAAA,KACvB;AAAA,EACF,CAAA;AACA,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,IAAU,EAAC;AACxC,EAAA,MAAM,UAAU,CAAC,UAAA,EAAqB,OAAA,KACpC,UAAA,KAAe,WAAW,UAAA,KAAe,UAAA;AAC3C,EAAA,MAAM,UAAA,GAAgE;AAAA,IACpE,GAAG,MAAA,CAAO,UAAA;AAAA,IACV,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,WAAA;AAAY,GACxC;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,CAAC,OAAA,EAAS,KAAA,KAAU;AAC1B,MAAA,MAAM,QAAA,GAAW,IAAA,CACd,GAAA,CAAI,SAAS,CAAA,CACb,MAAA;AAAA,QACC,CAAC,EAAE,GAAA,EAAK,MAAA,EAAO,KACb,CAAC,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,OAAO,CAAA,KAAM,CAAC,IAAI,IAAA,IAAQ,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,QAE3E,GAAA,CAAI,CAAC,EAAE,GAAA,OAAU,GAAG,CAAA;AACvB,MAAA,MAAM,QAAA,GAAW,MAAA,EAAO,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,IAAA,IAAQ,OAAA,CAAQ,CAAA,CAAE,OAAA,EAAS,OAAO,CAAC,CAAA;AACxF,MAAA,OAAO,CAAC,GAAG,QAAA,EAAU,GAAI,QAAkB,CAAA,CAAE,IAAA;AAAA,QAC3C,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,QAAA,IAAY,CAAA,KAAM,EAAE,QAAA,IAAY,CAAA;AAAA,OAC/C;AAAA,IACF,CAAA;AAAA,IACA,YAAY,MAAM;AAAA,MAChB,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM;AACjB,QAAA,MAAM,CAAA,GAAI,UAAU,CAAC,CAAA;AACrB,QAAA,OAAO,EAAE,KAAK,CAAA,CAAE,GAAA,EAAK,UAAU,KAAA,EAAO,QAAA,EAAU,EAAE,MAAA,EAAO;AAAA,MAC3D,CAAC,CAAA;AAAA,MACD,GAAG,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,EAAU,UAAU,IAAA,EAAM,QAAA,EAAU,CAAA,CAAE,MAAA,KAAW,MAAK,CAAE;AAAA,KACzF;AAAA,IACA,YAAY,MAAM,OAAA;AAAA,IAClB,UAAA,EAAY,CAAC,IAAA,KAAS;AACpB,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa,QAAA,EAAU,CAAA;AAAA,IAC5C,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,QAAA,KAAa;AACvB,MAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,MAAA,OAAO,MAAM;AACX,QAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,MAC3B,CAAA;AAAA,IACF,CAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA,EAAgB,CAAC,CAAA,KAAM,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,CAAC,CAAA,EAAG,KAAA,IAAS;AAAA,GACzE;AACF;ACpJO,SAAS,gBAAA,CAAqD;AAAA,EACnE,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAY,EAAC;AAAA,EACb,iBAAA,GAAoB;AACtB,CAAA,EAAiD;AAC/C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,CAAC,CAAA;AAChD,EAAAC,eAAA,CAAU,MAAM,QAAA,CAAS,SAAA,CAAU,MAAM,cAAA,CAAe,CAAC,KAAA,KAAU,KAAA,GAAQ,CAAC,CAAC,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAC1F,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,KAAA,IAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAC7C,EAAA,MAAM,IAAA,GAAOC,aAAA;AAAA,IACX,MAAM,QAAA,CAAS,MAAA,CAAO,OAAA,EAAS,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,SAAA,CAAU,QAAA,CAAS,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA;AAAA;AAAA,IAGnF,CAAC,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,aAAa,YAAY;AAAA,GACzD;AACA,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIF,eAAS,CAAC,CAAA;AACtC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC1C,EAAAC,eAAA,CAAU,MAAM,UAAU,CAAC,CAAA,EAAG,CAAC,QAAA,EAAU,OAAA,EAAS,QAAQ,CAAC,CAAA;AAC3D,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,CAAA,IAAK,MAAA,IAAU,qBAAqB,CAAA,EAAG;AAC1D,IAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,MACZ,MAAM,SAAA,CAAU,CAAC,WAAW,KAAA,GAAQ,CAAA,IAAK,KAAK,MAAM,CAAA;AAAA,MACpD,iBAAA,GAAoB;AAAA,KACtB;AACA,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,GAAG,CAAC,IAAA,CAAK,QAAQ,MAAA,EAAQ,iBAAA,EAAmB,MAAM,CAAC,CAAA;AAEnD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,KAAK,MAAA,GAAS,CAAA;AACnD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,GAAA,EAAK,IAAA,CAAK,EAAA,CAAG,KAAK,CAAA;AAAA,IAClB,KAAA;AAAA,IACA,OAAO,IAAA,CAAK,MAAA;AAAA,IACZ,QAAA,EAAU,MACR,SAAA,CAAU,CAAC,KAAA,KAAW,IAAA,CAAK,MAAA,GAAA,CAAU,KAAA,GAAQ,CAAA,GAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,SAAS,CAAE,CAAA;AAAA,IAClF,IAAA,EAAM,MAAM,SAAA,CAAU,CAAC,KAAA,KAAW,IAAA,CAAK,MAAA,GAAA,CAAU,KAAA,GAAQ,CAAA,IAAK,IAAA,CAAK,MAAA,GAAS,CAAE,CAAA;AAAA,IAC9E,aAAA,EAAe;AAAA,GACjB;AACF;AClDO,SAAS,mBAAmB,EAAE,EAAA,EAAI,QAAA,EAAU,SAAA,GAAY,IAAG,EAA4B;AAC5F,EAAA,MAAM,EAAE,UAAA,EAAW,GAAIE,iBAAA,CAAa,EAAE,IAAI,CAAA;AAC1C,EAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,UAAA,EAAY,WACnB,QAAA,EACH,CAAA;AAEJ;ACqCO,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAc,EAAC;AAAA,EACf,WAAA,GAAc,oBAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAc,QAAA;AAAA,EACd,KAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA,EAAU,gBAAA;AAAA,EACV,SAAA;AAAA,EACA,MAAA,GAAS;AACX,CAAA,EAAgB;AACd,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIJ,eAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,IAAA,GAAO,KAAA,KAAU,MAAA,GAAY,KAAA,GAAQ,SAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAiB;AAChC,IAAA,aAAA,GAAgB,IAAI,CAAA;AACpB,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,YAAA,CAAa,IAAI,CAAA;AAAA,EAC5C,CAAA;AACA,EAAA,MAAM,aAAA,GAAgBK,aAAyB,IAAI,CAAA;AACnD,EAAA,MAAM,WAAW,gBAAA,IAAoB,aAAA;AAErC,EAAA,MAAM,QAAA,GAAW,CAAC,OAAA,KAAoC;AACpD,IAAA,MAAM,QAAA,GAAW,KAAK,IAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,IAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,EACZ,CAAA;AAEA,EAAA,uBACEC,eAAA,CAAC,SAAI,SAAA,EAAWC,KAAA,CAAG,uBAAuB,SAAS,CAAA,EAAG,eAAa,MAAA,EACjE,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,UAAA,EACZ,QAAA,EAAA;AAAA,MAAA,IAAA;AAAA,sBACDA,eAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,QAAA,CAAS,KAAK,CAAA;AAAA,UAChB,CAAA;AAAA,UAKA,SAAA,EAAU,0IAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAACI,kBAAA,EAAA,EAAO,SAAA,EAAU,2DAAA,EAA4D,CAAA;AAAA,4BAC9EJ,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,MAAA;AAAA,gBACL,KAAA,EAAO,IAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACvC,SAAA,EAAW,cAAA;AAAA,gBACX,WAAA;AAAA,gBACA,SAAA,EAAU,0GAAA;AAAA,gBACV,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,MAAA;AAAA;AAAA,aAClC;AAAA,YACC,4BACCA,cAAAA;AAAA,cAACK,SAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAQ,OAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,QAAA,EAAU,CAAC,IAAA,CAAK,IAAA,EAAK;AAAA,gBACrB,OAAA,EAAS,MAAM,QAAA,CAAS,QAAQ,CAAA;AAAA,gBAChC,SAAA,EAAU,qFAAA;AAAA,gBACV,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,OAAA,CAAA;AAAA,gBAE/B,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,4BAGFH,eAAA;AAAA,cAACG,SAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,IAAA;AAAA,gBACL,QAAA,EAAU,CAAC,IAAA,CAAK,IAAA,EAAK;AAAA,gBACrB,SAAA,EAAU,uCAAA;AAAA,gBACV,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,OAAA,CAAA;AAAA,gBAEhC,QAAA,EAAA;AAAA,kCAAAL,cAAAA,CAACM,oBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,kBAC9B;AAAA;AAAA;AAAA;AACH;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IACC,WAAA,CAAY,MAAA,GAAS,CAAA,oBACpBN,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACZ,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,qBAChBA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,SAAS,MAAM;AACb,UAAA,OAAA,CAAQ,CAAC,CAAA;AACT,UAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,QAC1B,CAAA;AAAA,QACA,SAAA,EAAU,kKAAA;AAAA,QACV,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,WAAA,CAAA;AAAA,QAE/B,QAAA,EAAA;AAAA,OAAA;AAAA,MATI;AAAA,KAWR,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC9GO,IAAM,uBAAA,GAAyC;AAAA,EACpD,MAAA,EAAQ,yBAAA;AAAA,EACR,WAAA,EAAa,OAAA;AAAA,EACb,KAAA,EAAO,UAAA;AAAA,EACP,OAAA,EAAS,UAAA;AAAA,EACT,MAAA,EAAQ;AACV;AAwBA,IAAM,QAAQ,CAAC,KAAA,KACb,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,IAAA,KAAS,CAAA,GAAI,CAAA,GAAI,MAAM,IAAA,CAAK,QAAA,IAAY,EAAE,GAAG,CAAC,CAAA;AAG1D,SAAS,eAAA,CACd,QACA,IAAA,EACoD;AACpD,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAK;AACvB,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,CAAA,CAAE,KAAA,EAAO,IAAI,CAAA;AACrC,IAAA,IAAI,MAAM,OAAO,EAAE,OAAA,EAAS,CAAA,CAAE,IAAI,IAAA,EAAK;AAAA,EACzC;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,UAAA,CAAW,OAAsB,IAAA,EAAuC;AAC/E,EAAA,MAAM,MAAA,GAAS,KAAK,WAAA,EAAY;AAChC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,KAAK,IAAA,CAAK,IAAA,GAAO,WAAA,EAAY,KAAM,QAAQ,OAAO,IAAA;AACtD,IAAA,MAAM,SAAS,UAAA,CAAW,IAAA,CAAK,QAAA,IAAY,IAAI,IAAI,CAAA;AACnD,IAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,WAAA,CAAY,KAAA,EAAsB,IAAA,EAAc,QAAA,GAAW,KAAA,EAAsB;AACxF,EAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,EAAA,MAAM,MAAA,GAAS,KAAK,WAAA,EAAY;AAChC,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC7B,IAAA,MAAM,WAAW,WAAA,CAAY,IAAA,CAAK,YAAY,EAAC,EAAG,MAAM,QAAQ,CAAA;AAChE,IAAA,MAAM,MACJ,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY,CAAE,SAAS,MAAM,CAAA,IACtC,QAAA,IAAY,CAAC,CAAC,IAAA,CAAK,QAAA,EAAU,WAAA,EAAY,CAAE,SAAS,MAAM,CAAA;AAC7D,IAAA,OAAO,GAAA,IAAO,QAAA,CAAS,MAAA,GAAS,CAAC,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,CAAA,GAAI,EAAC;AAAA,EAC7D,CAAC,CAAA;AACH;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA,EAAQ,gBAAA;AAAA,EACR,cAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA,EAChB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA,GAAS;AACX,CAAA,EAAiB;AACf,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,uBAAA,EAAyB,GAAG,MAAA,EAAO;AAClD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIJ,eAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,YAAY,gBAAA,KAAqB,MAAA;AACvC,EAAA,MAAM,MAAA,GAAS,YAAY,SAAA,GAAY,gBAAA;AACvC,EAAA,MAAM,SAAA,GAAY,CAACW,KAAAA,KAAkB,SAAA,GAAY,aAAaA,KAAI,CAAA,GAAI,iBAAiBA,KAAI,CAAA;AAC3F,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIX,eAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,EAAK;AACzB,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,MAAA,EAAQ,IAAI,CAAA;AAC1C,EAAA,MAAM,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAA;AAC3C,EAAA,MAAM,cAAc,CAAC,KAAA,KAAyB,WAAA,CAAY,KAAA,EAAO,MAAM,aAAa,CAAA;AAEpF,EAAA,MAAM,SAAS,YAAY;AACzB,IAAA,IAAI,CAAC,aAAa,QAAA,EAAU;AAC5B,IAAA,WAAA,CAAY,IAAI,CAAA;AAChB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,IAAI,CAAA;AACrB,MAAA,SAAA,CAAU,EAAE,CAAA;AAAA,IACd,CAAA,SAAE;AACA,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,CAAC,OAAA,EAAiB,IAAA,EAAmB,KAAA,KAA6B;AAC5E,IAAA,MAAM,SAAS,QAAA,EAAU,OAAA,KAAY,OAAA,IAAW,QAAA,CAAS,WAAW,IAAA,CAAK,EAAA;AACzE,IAAA,uBACEM,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAA,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,SAAS,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,UACpD,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,UAChC,SAAA,EAAWC,KAAAA;AAAA,YACT,kIAAA;AAAA,YACA,MAAA,IAAU;AAAA,WACZ;AAAA,UACA,KAAA,EAAO,EAAE,WAAA,EAAa,EAAA,GAAK,QAAQ,EAAA,EAAG;AAAA,UACtC,aAAA,EAAa,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,KAAK,EAAE,CAAA,CAAA;AAAA,UAErC,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,yBACJH,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,8BAAA;AAAA,gBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,KAAA,EAAM;AAAA,gBACrC,aAAA,EAAW;AAAA;AAAA,aACb;AAAA,4BAEFA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAA0B,KAAA,EAAO,IAAA,CAAK,IAAA,EACnD,QAAA,EAAA,IAAA,CAAK,IAAA,EACR,CAAA;AAAA,YACC,IAAA,CAAK,UAAU,MAAA,oBACdA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qDAAA,EACb,QAAA,EAAA,IAAA,CAAK,KAAA,EACR;AAAA;AAAA;AAAA,OAEJ;AAAA,MACC,CAAC,CAAC,IAAA,CAAK,UAAU,MAAA,oBAChBA,eAAC,IAAA,EAAA,EAAI,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,CAAC,UAAU,GAAA,CAAI,OAAA,EAAS,OAAO,KAAA,GAAQ,CAAC,CAAC,CAAA,EAAE;AAAA,KAAA,EAAA,EA7B7D,KAAK,EA+Bd,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEE,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,MAAG,qBAAA,EAAuB,SAAS,CAAA,EAAG,aAAA,EAAa,MAAA,EAChE,QAAA,EAAA;AAAA,IAAA,SAAA,oBACCD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAACI,kBAAAA,EAAA,EAAO,SAAA,EAAU,6FAAA,EAA8F,CAAA;AAAA,sBAChHJ,cAAAA;AAAA,QAACQ,QAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,MAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACzC,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,YAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACvB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,IAAI,SAAA,OAAgB,MAAA,EAAO;AAAA,iBAAA,IAClB,KAAA,EAAO,IAAA,EAAM,QAAA,CAAS,EAAE,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,EAAA,EAAI,CAAA;AAAA,UAClF,CAAA;AAAA,UACA,aAAa,CAAA,CAAE,MAAA;AAAA,UACf,cAAY,CAAA,CAAE,MAAA;AAAA,UACd,SAAA,EAAU,uBAAA;AAAA,UACV,aAAA,EAAa,GAAG,MAAM,CAAA,OAAA;AAAA;AAAA,OACxB;AAAA,MACC,0BACCR,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,SAAA,CAAU,EAAE,CAAA;AAAA,UAC3B,cAAY,CAAA,CAAE,WAAA;AAAA,UACd,SAAA,EAAU,qGAAA;AAAA,UAEV,QAAA,kBAAAA,cAAAA,CAACS,aAAA,EAAA,EAAE,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA;AAC1B,KAAA,EAEJ,CAAA;AAAA,IAED,6BACCP,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,KAAK,MAAA,EAAO;AAAA,QAC3B,QAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAU,mKAAA;AAAA,QACV,aAAA,EAAa,GAAG,MAAM,CAAA,OAAA,CAAA;AAAA,QAEtB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAACU,gBAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAkB,CAAA;AAAA,0BAClCV,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,YAAE,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,IAAI,CAAA,EAAE;AAAA;AAAA;AAAA,KAC9E;AAAA,IAED,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACrB,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA;AACrC,MAAA,IAAI,IAAA,IAAQ,CAAC,KAAA,CAAM,MAAA,EAAQ,OAAO,IAAA;AAClC,MAAA,MAAM,SAAS,QAAA,EAAU,OAAA,KAAY,KAAA,CAAM,EAAA,IAAM,CAAC,QAAA,CAAS,MAAA;AAC3D,MAAA,uBACEE,gBAAC,SAAA,EAAA,EAAuB,aAAA,EAAa,GAAG,MAAM,CAAA,OAAA,EAAU,KAAA,CAAM,EAAE,CAAA,CAAA,EAC9D,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAS,MAAM,QAAA,CAAS,EAAE,OAAA,EAAS,KAAA,CAAM,IAAI,CAAA;AAAA,YAC7C,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,YAChC,SAAA,EAAWC,KAAAA;AAAA,cACT,oNAAA;AAAA,cACA,MAAA,IAAU;AAAA,aACZ;AAAA,YACA,aAAA,EAAa,CAAA,EAAG,MAAM,CAAA,OAAA,EAAU,MAAM,EAAE,CAAA,QAAA,CAAA;AAAA,YAEvC,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,wBAAQH,cAAAA,CAAC,UAAK,SAAA,EAAU,yBAAA,EAA2B,gBAAM,IAAA,EAAK,CAAA;AAAA,8BACrEA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAU,gBAAM,KAAA,EAAM,CAAA;AAAA,8BACtCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAe,aAAA,EAAa,CAAA,EAAG,MAAM,CAAA,OAAA,EAAU,MAAM,EAAE,CAAA,MAAA,CAAA,EACpE,QAAA,EAAA,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA,EACpB;AAAA;AAAA;AAAA,SACF;AAAA,QACC,KAAA,CAAM,MAAA,mBACLA,cAAAA,CAAC,IAAA,EAAA,EAAG,WAAU,QAAA,EAAU,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,GAAA,CAAI,MAAM,EAAA,EAAI,IAAA,EAAM,CAAC,CAAC,CAAA,EAAE,CAAA,mBAEpEA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM;AAAA,OAAA,EAAA,EApBtD,MAAM,EAsBpB,CAAA;AAAA,IAEJ,CAAC,CAAA;AAAA,IACA,IAAA,IAAQ,CAAC,SAAA,IAAa,MAAA,CAAO,MAAM,CAAC,CAAA,KAAM,CAAC,WAAA,CAAY,CAAA,CAAE,KAAK,CAAA,CAAE,MAAM,qBACrEA,cAAAA,CAAC,OAAE,SAAA,EAAU,oCAAA,EAAsC,YAAE,OAAA,EAAQ;AAAA,GAAA,EAEjE,CAAA;AAEJ;ACjPO,SAAS,sBAAA,CAAuB;AAAA,EACrC,cAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,gBAAA;AAAA,EACR,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA;AACF,CAAA,EAAgC;AAC9B,EAAA,MAAM,EAAE,OAAA,EAAS,gBAAA,EAAiB,GAAIW,sCAAA,EAAqB;AAC3D,EAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAC5B,EAAA,uBACET,eAAAA;AAAA,IAACU,4BAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,QAAQ,EAAE,IAAA,EAAM,gBAAgB,cAAA,EAAgB,WAAA,EAAa,WAAW,CAAA;AAAA,MAC9E,QAAA,EAAU,MACR,gBAAA,CAAiB,cAAA,EAAgB;AAAA,QAC/B,GAAI,SAAA,IAAa,EAAE,SAAA,EAAU;AAAA,QAC7B,GAAI,WAAA,IAAe,EAAE,WAAA;AAAY,OAClC,CAAA;AAAA,MAEH,SAAA,EAAWT,MAAGU,iBAAA,CAAe,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC1D,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,EAAA;AAAA,wBAAAb,cAAAA,CAACc,0BAAA,EAAA,EAAe,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,QAChD;AAAA;AAAA;AAAA,GACH;AAEJ;;;ACzCO,SAAS,aAAA,CACd,OAAA,EACA,OAAA,GAAuE,EAAC,EACxE;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAY,OAAA,CAAQ,SAAS,CAAA;AAChD,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,OAAA,EAAU,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,CAAe,GAAA,CAAI,CAAC,EAAE,EAAA,EAAI,KAAA,EAAO,QAAA,EAAS,MAAO;AAAA,MAC9E,KAAA,EAAO,EAAA;AAAA,MACP,KAAA;AAAA,MACA;AAAA,KACF,CAAE,CAAA;AAAA,IACF,WAAW,KAAA,EAA4B;AACrC,MAAA,OAAO,MAAA,CAAO,IAAI,KAAK,CAAA,IAAK,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,OAAA,EAAS,KAAK,CAAA;AAAA,IACjF,CAAA;AAAA,IACA,IAAI,EAAA,EAAc;AAChB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,SAAS,EAAE,CAAA,GAAI,OAAA,CAAQ,EAAE,CAAA,GAAI,MAAA;AACjF,MAAA,IAAI,MAAA,SAAe,GAAA,EAAI;AAAA,WAClB,OAAA,CAAQ,YAAY,EAAE,CAAA;AAAA,IAC7B;AAAA,GACF;AACF;ACzBO,SAAS,iBAAiB,QAAA,EAAoC;AACnE,EAAA,MAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAY,QAAQ,KAAK,CAAA;AACzD,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAQ,OAAA,EAKM;AACZ,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QAC1B,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,MAAMC,mBAAA,CAAc,IAAA,CAAK,MAAM,EAAE,SAAA,EAAW,UAAU,CAAA;AAAA,QACtD,GAAG,OAAA,CAAQ,SAAA,GAAY,IAAI,CAAA;AAAA,QAC3B,UAAU,MAAM;AACd,UAAA,OAAA,CAAQ,cAAA,IAAiB;AACzB,UAAA,OAAA,CAAQ,WAAW,IAAI,CAAA;AACvB,UAAA,OAAA,CAAQ,WAAA,IAAc;AAAA,QACxB;AAAA,OACF,CAAE,CAAA;AAAA,IACJ;AAAA,GACF;AACF","file":"index.cjs","sourcesContent":["/**\n * The contextual tips engine: which tips apply where, and the editable layer over them. The tips\n * themselves (their words, pages, situations and actions) are the site's content; a site hands\n * them to {@link createTipsRegistry} once and shows the result in `TipCard` / its tip bar, edits it\n * in `TipsEditorDialog`, and hides tips per user with `useDismissedTips` (`@arbidocs/react`).\n *\n * Each tip has a stable `code`. The editable layer (`TipsContent`) overrides a built-in tip's\n * message, action or page, hides it, or adds tips authored in the editor; swapping it in\n * (`setContent`) updates every subscriber without a reload.\n */\n\n/** Max length of a tip message: the bar is one line, so a tip is one short sentence. */\nexport const TIP_MAX_CHARS = 80\n/** Max length of a tip's action label, so the inline button doesn't dominate. */\nexport const TIP_CTA_LABEL_MAX_CHARS = 24\n\n/**\n * A tip's action: a label and exactly one target. `action` and `sequence` are the site's own ids\n * (what its action registry runs); `href` opens in a new window.\n */\nexport interface TipCta<Action extends string = string, Sequence extends string = string> {\n label: string\n action?: Action\n sequence?: Sequence\n href?: string\n}\n\nexport interface TipDefinition<Context extends string, State, Cta> {\n /** Stable id (e.g. a page letter and a number). */\n code: string\n context: Context\n message: string\n /** Situation predicate; omitted: always applies on its page. */\n when?: (state: State) => boolean\n cta?: Cta\n /** Higher shows first. Default 0. */\n priority?: number\n /** Using the action also hides the tip for good (a one-shot offer, now taken). */\n dismissOnCta?: boolean\n}\n\n/** The editable layer over a built-in tip: omitted fields keep the built-in's; `cta: null` drops it. */\nexport interface TipOverride<Context extends string, Cta> {\n message?: string\n cta?: Cta | null\n context?: Context\n hidden?: boolean\n}\n\n/** A tip written in the editor: no situation predicate, so it always applies on its page. */\nexport interface CustomTip<Context extends string, Cta> {\n code: string\n context: Context\n message: string\n cta?: Cta\n priority?: number\n hidden?: boolean\n}\n\n/** The whole editable layer (a site keeps it as JSON next to its tips). */\nexport interface TipsContent<Context extends string, Cta> {\n overrides: Record<string, TipOverride<Context, Cta>>\n custom: CustomTip<Context, Cta>[]\n}\n\n/** A tip as the editor lists it: its effective form, where it came from and whether it is off. */\nexport interface EditorTip<Context extends string, State, Cta> {\n tip: TipDefinition<Context, State, Cta>\n isCustom: boolean\n isHidden: boolean\n}\n\nexport interface TipsRegistryConfig<Context extends string, State, Cta> {\n tips: readonly TipDefinition<Context, State, Cta>[]\n /** The committed editable layer. */\n content: TipsContent<Context, Cta>\n /** The page whose tips show on every page. */\n everywhere: Context\n /** Where a tip can be placed, with the editor's labels (\"All pages\" first, say). */\n placements: readonly { value: Context; label: string }[]\n /** The editor's label for \"off\". Default \"Hidden (off)\". */\n hiddenLabel?: string\n}\n\nexport type TipPlacement<Context extends string> = Context | 'hidden'\n\nexport interface TipsRegistry<Context extends string, State, Cta> {\n /** Tips for a page whose situation matches, highest priority first (plus every-page tips). */\n select: (context: Context, state: State) => TipDefinition<Context, State, Cta>[]\n /** Every tip for the editor, across pages, hidden ones included. */\n editorTips: () => EditorTip<Context, State, Cta>[]\n /** The live editable layer. */\n getContent: () => TipsContent<Context, Cta>\n /** Swap the editable layer and notify subscribers (no reload). */\n setContent: (next: TipsContent<Context, Cta>) => void\n /** Follow changes to the editable layer; returns the unsubscribe. */\n subscribe: (listener: () => void) => () => void\n /** The editor's placement choices: each page, then \"off\". */\n placements: readonly { value: TipPlacement<Context>; label: string }[]\n placementLabel: (placement: TipPlacement<Context>) => string\n}\n\nexport function createTipsRegistry<Context extends string, State, Cta>(\n config: TipsRegistryConfig<Context, State, Cta>\n): TipsRegistry<Context, State, Cta> {\n const { tips, everywhere, hiddenLabel = 'Hidden (off)' } = config\n let content = config.content\n const listeners = new Set<() => void>()\n type Tip = TipDefinition<Context, State, Cta>\n\n const effective = (tip: Tip): { tip: Tip; hidden: boolean } => {\n const o = content.overrides?.[tip.code]\n if (!o) return { tip, hidden: false }\n return {\n tip: {\n ...tip,\n message: o.message ?? tip.message,\n cta: o.cta === null ? undefined : (o.cta ?? tip.cta),\n context: o.context ?? tip.context,\n },\n hidden: o.hidden === true,\n }\n }\n const custom = () => content.custom ?? []\n const applies = (tipContext: Context, context: Context) =>\n tipContext === context || tipContext === everywhere\n const placements: { value: TipPlacement<Context>; label: string }[] = [\n ...config.placements,\n { value: 'hidden', label: hiddenLabel },\n ]\n\n return {\n select: (context, state) => {\n const builtins = tips\n .map(effective)\n .filter(\n ({ tip, hidden }) =>\n !hidden && applies(tip.context, context) && (!tip.when || tip.when(state))\n )\n .map(({ tip }) => tip)\n const authored = custom().filter((t) => t.hidden !== true && applies(t.context, context))\n return [...builtins, ...(authored as Tip[])].sort(\n (a, b) => (b.priority ?? 0) - (a.priority ?? 0)\n )\n },\n editorTips: () => [\n ...tips.map((t) => {\n const e = effective(t)\n return { tip: e.tip, isCustom: false, isHidden: e.hidden }\n }),\n ...custom().map((t) => ({ tip: t as Tip, isCustom: true, isHidden: t.hidden === true })),\n ],\n getContent: () => content,\n setContent: (next) => {\n content = next\n listeners.forEach((listener) => listener())\n },\n subscribe: (listener) => {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n placements,\n placementLabel: (p) => placements.find((o) => o.value === p)?.label ?? p,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport type { TipsRegistry } from './registry'\n\nexport interface UseTipsPlacementOptions<Context extends string, State, Cta> {\n registry: Pick<TipsRegistry<Context, State, Cta>, 'select' | 'subscribe'>\n context: Context\n /** Serializable situation values; equal inline objects do not restart the placement. */\n state: State\n dismissed?: readonly string[]\n /** Seconds between tips. Zero disables rotation. Default 30. */\n autoRotateSeconds?: number\n}\n\n/**\n * The lifecycle of a tips placement: live registry updates, per-user dismissal filtering,\n * priority-first selection, cyclic paging and hover-paused rotation. Content, CTA dispatch,\n * visibility preferences and the card's actual placement belong to the host.\n */\nexport function useTipsPlacement<Context extends string, State, Cta>({\n registry,\n context,\n state,\n dismissed = [],\n autoRotateSeconds = 30,\n}: UseTipsPlacementOptions<Context, State, Cta>) {\n const [editVersion, setEditVersion] = useState(0)\n useEffect(() => registry.subscribe(() => setEditVersion((value) => value + 1)), [registry])\n const stateKey = JSON.stringify(state ?? {})\n const dismissedKey = JSON.stringify(dismissed)\n const tips = useMemo(\n () => registry.select(context, state).filter((tip) => !dismissed.includes(tip.code)),\n // Values, not the identity of inline situation/dismissal objects, select and reset the tips.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [registry, context, stateKey, editVersion, dismissedKey]\n )\n const [cursor, setCursor] = useState(0)\n const [paused, setPaused] = useState(false)\n useEffect(() => setCursor(0), [registry, context, stateKey])\n useEffect(() => {\n if (tips.length <= 1 || paused || autoRotateSeconds <= 0) return\n const timer = setTimeout(\n () => setCursor((value) => (value + 1) % tips.length),\n autoRotateSeconds * 1000\n )\n return () => clearTimeout(timer)\n }, [tips.length, paused, autoRotateSeconds, cursor])\n\n const index = tips.length ? cursor % tips.length : 0\n return {\n tips,\n tip: tips.at(index),\n index,\n count: tips.length,\n previous: () =>\n setCursor((value) => (tips.length ? (value - 1 + tips.length) % tips.length : 0)),\n next: () => setCursor((value) => (tips.length ? (value + 1) % tips.length : 0)),\n onHoverChange: setPaused,\n }\n}\n","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","/**\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","import { MessagesSquare } from 'lucide-react'\nimport { buttonVariants, cn, type ButtonProps } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { ActionLink } from './ActionLink'\n\nexport interface OpenConversationButtonProps {\n /** The conversation behind an AI result; none: nothing is rendered. */\n conversationId: string | null | undefined\n /** The workspace it is in, for its link. */\n workspaceId?: string | null\n /** A message to scroll to. */\n messageId?: string\n /** Default \"Open in thread\". */\n label?: string\n variant?: ButtonProps['variant']\n size?: ButtonProps['size']\n className?: string\n testId?: string\n}\n\n/**\n * \"Open in thread\": the full conversation behind an AI result (a brief, a translation, a draft),\n * to check its sources and follow up. A real link where the host gives one (`hrefFor`), opened with\n * `openConversation`.\n */\nexport function OpenConversationButton({\n conversationId,\n workspaceId,\n messageId,\n label = 'Open in thread',\n variant = 'outline',\n size = 'sm',\n className,\n testId,\n}: OpenConversationButtonProps) {\n const { hrefFor, openConversation } = useBlocksEnvironment()\n if (!conversationId) return null\n return (\n <ActionLink\n href={hrefFor({ kind: 'conversation', conversationId, workspaceId, messageId })}\n onSelect={() =>\n openConversation(conversationId, {\n ...(messageId && { messageId }),\n ...(workspaceId && { workspaceId }),\n })\n }\n className={cn(buttonVariants({ variant, size }), className)}\n data-testid={testId}\n >\n <MessagesSquare className=\"size-3.5\" aria-hidden />\n {label}\n </ActionLink>\n )\n}\n","/** A parameter-light action, supplied by a host and usable outside React. */\nexport interface ActionDefinition<Id extends string = string> {\n id: Id\n label: string\n category: string\n /** An icon name, so the catalogue stays independent of a renderer. */\n icon: string\n keywords?: readonly string[]\n run: () => void\n}\n\n/** One catalogue for picker options, tip CTAs, palettes and validated remote dispatch. */\nexport function defineActions<Id extends string, Action extends ActionDefinition<Id>>(\n actions: Partial<Record<Id, Action>>,\n options: { scopedIds?: readonly Id[]; onUnknown?: (id: Id) => void } = {}\n) {\n const scoped = new Set<string>(options.scopedIds)\n return {\n actions,\n options: (Object.values(actions) as Action[]).map(({ id, label, category }) => ({\n value: id,\n label,\n category,\n })),\n isActionId(value: string): value is Id {\n return scoped.has(value) || Object.prototype.hasOwnProperty.call(actions, value)\n },\n run(id: Id): void {\n const action = Object.prototype.hasOwnProperty.call(actions, id) ? actions[id] : undefined\n if (action) action.run()\n else options.onUnknown?.(id)\n },\n }\n}\n","import { createElement } from 'react'\nimport type { AppNavItem, AppNavSection } from './types'\nimport type { NavItem } from '../shell/types'\n\n/**\n * A host's destinations, once: the items are also the command palette's nav contract. Resolve\n * their state and handlers for ShellSidebar or MobileTabBar without copying the catalogue.\n */\nexport function defineNavigation(sections: readonly AppNavSection[]) {\n const items = sections.flatMap((section) => section.items)\n return {\n sections,\n items,\n resolve(options: {\n beforeNavigate?: () => void\n onNavigate: (item: AppNavItem) => void\n onNavigated?: () => void\n itemProps?: (item: AppNavItem) => Partial<Omit<NavItem, 'id' | 'label' | 'onSelect'>>\n }): NavItem[] {\n return items.map((item) => ({\n id: item.id,\n label: item.label,\n icon: createElement(item.icon, { className: 'size-5' }),\n ...options.itemProps?.(item),\n onSelect: () => {\n options.beforeNavigate?.()\n options.onNavigate(item)\n options.onNavigated?.()\n },\n }))\n },\n }\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -6,61 +6,61 @@ export { Accordion, AvatarBlock, Banner, BlockImage, BlockLink, CTABanner, Colum
|
|
|
6
6
|
export { Timeline } from './chunk-OVEQERPO.js';
|
|
7
7
|
export { CitationEditor } from './chunk-7O3HHX6E.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, Toolbar, 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, TIPS_VISIBILITY_OVERRIDE, TagColumnsEditor, TagDetail, TagPicker, TagTable, TagTableCell, ThreadFollowButton, ThreadFollowMenuItem, Toolbar, WorkspaceActivityList, WorkspaceNotificationMenu, cellText, cellValue, documentCount, entitiesPhrase, fieldWrites, glossaryDocumentXml, glossaryDocx, glossaryEntries, glossaryFileName, glossaryMarkdown, isGap, parseCell, rowLinks, setHintsSessionOverride, tagDetailLabels, tagKindDescription, tagNoteLabel, tagTableDocumentXml, tagTableDocx, tagTableLabels, tagTableMarkdown, tagsPageNouns, workspaceActivityHeadline, workspaceActivityTarget } from './chunk-X7CXCEGO.js';
|
|
10
10
|
export { MemberAvatarStack } from './chunk-FUPAGAZB.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
|
+
export { DEFAULT_SEARCH_HIT_LABELS, SearchHit } from './chunk-XJA6TS6D.js';
|
|
12
13
|
export { UsageMeter, usageMeterState } from './chunk-66TA5IBN.js';
|
|
13
14
|
export { DataTable, MetricCard, PageHeader } from './chunk-VHLMMXXE.js';
|
|
14
15
|
export { THEME_STYLE_ID, ThemeEditor, applyFontVars, applyThemeVars, clearFontVars, clearThemeVars, tid, toHslTriplet } from './chunk-5ZBXFHZW.js';
|
|
16
|
+
export { TIMELINE_ZOOM, TimelineCalendar, TimelineGantt, TimelineZoomControl, dayKey, formatSpan, monthLabel, parseIso, utcDay } from './chunk-4EZVCGRL.js';
|
|
15
17
|
export { Callout } from './chunk-UJE32SST.js';
|
|
16
18
|
export { FONT_PAIRINGS, fontPackages, getFontPairing, matchFontPairing } from './chunk-NHZK64TQ.js';
|
|
17
19
|
export { ActionMenu, AddContactsForm, AddContactsResults, DEFAULT_ADD_CONTACTS_LABELS, DEFAULT_CONTACT_INVITE_LABELS, DEFAULT_CONTACT_OUTCOME_LABELS, DEFAULT_DM_ACCESS_REQUEST_BANNER_LABELS, DEFAULT_DM_GRANT_ACCESS_DIALOG_LABELS, DEFAULT_DM_THREAD_FRAME_LABELS, DEFAULT_MAIL_FOLDER_TREE_LABELS, DEFAULT_RECIPIENT_PICKER_LABELS, DmAccessRequestBanner, DmGrantAccessDialogView, DmInviteAvatar, DmNewTabIcon, DmThreadFrame, EMPTY_CONTACT_FORM, MAX_INVITE_EMAILS, MailDeliveryBadge, MailDeliveryList, MailDocumentPicker, MailFolderTree, MailGrid, MailMessagePreview, MailMessageView, MemberBulkActions, MemberListLoading, MemberMutedText, MemberNameCell, MemberRoleCell, NEEDS_CONNECTION, PlainMailBodyEditor, RecipientPicker, RoleSelect, WorkspaceDeleteButton, applyContactInviteResults, buildMailFolderTree, contactName, contactOutcomeMessage, contactStatusLabel, contactToForm, descendantFolderIds, draftMailCompose, emailTokens, emptyMailCompose, failContactInvites, formToContactCard, hasCalendarPart, inviteEmail, isInboxFolder, isInvitableEmail, mailAddressLabel, matchesContact, normalizeVCardDate, parseEmails, parseMailRecipients, planContactInvites, primaryEmail, replyMailCompose, summarizeContactInvites, summarizeImport, summarizeUnsentInvites, toAddContactsRow, toAddContactsRows, toggleMailFolder, validateContactForm } from './chunk-HH34WKOC.js';
|
|
18
20
|
import './chunk-NBV56SGU.js';
|
|
19
|
-
export { AskField, AskRow, AskTrigger, DEFAULT_ASK_FIELD_LABELS, DEFAULT_INSTALL_PROMPT_LABELS, DEFAULT_MOBILE_BARS_LABELS, DEFAULT_OFFLINE_PILL_LABELS, DEFAULT_REMOTE_CONTROL_PILL_LABELS, DEFAULT_TIP_CARD_LABELS, INSTALL_PROMPT_DISMISSED_KEY, InfoBar, InstallPrompt, MobileAppBar, MobileTabBar, NotificationBell, OfflinePill, RemoteControlPill, SHELL_START_INSET_VAR, STATUS_ROW_BASE_CLASS, STATUS_ROW_TONES, ShellSidebar, Sidebar, SidebarRowAction, SplitLayout, StatusBadge, StatusRow, TipCard, UserMenu, getInstallInstructions, initInstallPrompt, isIosDevice, promptAppInstall, useInstallPrompt, useShellStartInset } from './chunk-
|
|
21
|
+
export { AskField, AskRow, AskTrigger, DEFAULT_ASK_FIELD_LABELS, DEFAULT_INSTALL_PROMPT_LABELS, DEFAULT_MOBILE_BARS_LABELS, DEFAULT_OFFLINE_PILL_LABELS, DEFAULT_REMOTE_CONTROL_PILL_LABELS, DEFAULT_TIP_CARD_LABELS, INSTALL_PROMPT_DISMISSED_KEY, InfoBar, InstallPrompt, MobileAppBar, MobileTabBar, NotificationBell, OfflinePill, RemoteControlPill, SHELL_START_INSET_VAR, STATUS_ROW_BASE_CLASS, STATUS_ROW_TONES, ShellSidebar, Sidebar, SidebarRowAction, SplitLayout, StatusBadge, StatusRow, TipCard, UserMenu, getInstallInstructions, initInstallPrompt, isIosDevice, promptAppInstall, useInstallPrompt, useShellStartInset } from './chunk-NE7M6NJY.js';
|
|
20
22
|
export { DEFAULT_ERROR_BOUNDARY_LABELS, ErrorBoundary } from './chunk-EQ3WRY2N.js';
|
|
21
23
|
export { RowNavigatorControls } from './chunk-JMQLTMJ7.js';
|
|
22
|
-
export { ActionCluster, DEFAULT_SIDEBAR_LABELS, DEFAULT_WORKSPACE_KIND_LABELS, DEFAULT_WORKSPACE_SWITCHER_LABELS, DockZone, PanelModeSwitcher, PanelPortal, PanelWindowManager, SidebarBadgeRow, SidebarRowHoverContext, WorkspaceIdentity, WorkspaceSwitcher, createPanelWindowManager, hasUnsavedInput, installReloadPolicy, markBuildStale, prefetchChunk, requestReload, resolveSidebarLayout, useCloseOnEscape, usePanelHostSupport, useSidebarContext, useSidebarController, useSidebarSettle, workspaceKindColor, workspaceKindMeta } from './chunk-
|
|
24
|
+
export { ActionCluster, DEFAULT_SIDEBAR_LABELS, DEFAULT_WORKSPACE_KIND_LABELS, DEFAULT_WORKSPACE_SWITCHER_LABELS, DockZone, PanelModeSwitcher, PanelPortal, PanelWindowManager, SidebarBadgeRow, SidebarRowHoverContext, WorkspaceIdentity, WorkspaceSwitcher, createPanelWindowManager, hasUnsavedInput, installReloadPolicy, markBuildStale, prefetchChunk, requestReload, resolveSidebarLayout, useCloseOnEscape, usePanelHostSupport, useSidebarContext, useSidebarController, useSidebarSettle, workspaceKindColor, workspaceKindMeta } from './chunk-DYYTVUBW.js';
|
|
23
25
|
export { DEFAULT_PASSAGE_PILL_LABELS, DEFAULT_QUIET_MARK_LABELS, LabelMark, NoteMark, PassageMark, PassagePill, QuietLink, useCopyText } from './chunk-QG7XCD5U.js';
|
|
24
26
|
export { DEFAULT_SHARE_CONTROL_LABELS, ShareControl } from './chunk-K4BGOPGG.js';
|
|
25
27
|
export { DEFAULT_DETAIL_PANEL_LABELS, DetailBody, DetailEmpty, DetailField, DetailFields, DetailLinkItem, DetailLinkList, DetailLoading, DetailPanel, DetailSection } from './chunk-ZCOVDK2E.js';
|
|
26
28
|
export { DEFINITIONS_LABEL, DEFINITION_BOOKMARK_PREFIX, compareDefinitions, compareTerms, definitionBookmark, definitionIdOfBookmark, definitionLabels, filterTermGroups, findDefinitionsLabel, groupDefinitions, isDefinitionsLabel, parseDefinition, termKey, toDefinition, toDefinitionSource } from './chunk-IYUKJESY.js';
|
|
27
|
-
export { DEFAULT_SEARCH_HIT_LABELS, SearchHit } from './chunk-XJA6TS6D.js';
|
|
28
|
-
export { TIMELINE_ZOOM, TimelineCalendar, TimelineGantt, TimelineZoomControl, dayKey, formatSpan, monthLabel, parseIso, utcDay } from './chunk-4EZVCGRL.js';
|
|
29
29
|
import './chunk-AF6RDAJF.js';
|
|
30
|
-
export { AgentCard, AgentGallery, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_ROW_LABELS, SkillCard, SkillRow, useWorkflowPreview } from './chunk-
|
|
31
|
-
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, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, 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_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_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_TASKS_CHROME_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_PLAN_LABELS, DEFAULT_TASK_RUNS_DIALOG_LABELS, DEFAULT_TASK_STATUS_PILL_LABELS, DEFAULT_TASK_THREAD_CHIP_LABELS, DEFAULT_THREAD_LAUNCHER_LABELS, DEFAULT_THREAD_STATE_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOWS_CHROME_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, TASK_COLUMN_ORDER, TIMELINE, TIMELINE_ID, TIMELINE_PROMPT, TOOL_ICON_MAP, TRANSLATE, TRANSLATE_ID, TRANSLATE_LANGUAGES, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskEmptyState, TaskFlow, TaskInbox, TaskMoveDialog, TaskOutputsCell, TaskPlan, TaskRunsDialog, TaskStartDialog, TaskStatusPill, TaskTable, TaskThreadChip, TasksToolbar, ThreadActivity, ThreadLauncher, ThreadNotifyDialog, ThreadStatusLine, TupleArrayField, UploadTaskItem, UploadTaskList, 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, WorkflowsToolbar, activeStepId, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, authModeFor, buildLibrarySkills, buildRRule, buildTaskRows, buildZipSkillImport, closeWorkflowLaunch, compactThreadActivity, composePersona, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createTaskColumns, createsWork, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, deriveAnnotationName, deriveWorkflowName, descendantIds, describeRRule, describeTrigger, filterConversationRows, filterLibrarySkills, firstWords, formatElapsed, 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-
|
|
30
|
+
export { AgentCard, AgentGallery, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_ROW_LABELS, SkillCard, SkillRow, useWorkflowPreview } from './chunk-FOIDBAZB.js';
|
|
31
|
+
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, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, 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_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_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_TASKS_CHROME_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_PLAN_LABELS, DEFAULT_TASK_RUNS_DIALOG_LABELS, DEFAULT_TASK_STATUS_PILL_LABELS, DEFAULT_TASK_THREAD_CHIP_LABELS, DEFAULT_THREAD_LAUNCHER_LABELS, DEFAULT_THREAD_STATE_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOWS_CHROME_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, TASK_COLUMN_ORDER, TIMELINE, TIMELINE_ID, TIMELINE_PROMPT, TOOL_ICON_MAP, TRANSLATE, TRANSLATE_ID, TRANSLATE_LANGUAGES, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskEmptyState, TaskFlow, TaskInbox, TaskMoveDialog, TaskOutputsCell, TaskPlan, TaskRunsDialog, TaskStartDialog, TaskStatusPill, TaskTable, TaskThreadChip, TasksToolbar, ThreadActivity, ThreadLauncher, ThreadNotifyDialog, ThreadStatusLine, TupleArrayField, UploadTaskItem, UploadTaskList, 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, WorkflowsToolbar, activeStepId, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, authModeFor, buildLibrarySkills, buildRRule, buildTaskRows, buildZipSkillImport, closeWorkflowLaunch, compactThreadActivity, composePersona, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createTaskColumns, createsWork, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, deriveAnnotationName, deriveWorkflowName, descendantIds, describeRRule, describeTrigger, filterConversationRows, filterLibrarySkills, firstWords, formatElapsed, 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-YAGSGBVM.js';
|
|
32
32
|
import './chunk-CQCC7LE7.js';
|
|
33
|
-
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-
|
|
33
|
+
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-7CHI36EP.js';
|
|
34
34
|
import './chunk-2C3I27VI.js';
|
|
35
35
|
import './chunk-G4GLDQLY.js';
|
|
36
36
|
import './chunk-M4S75AEJ.js';
|
|
37
37
|
export { Dot, ToneBadge } from './chunk-5LXQPP2K.js';
|
|
38
|
+
import './chunk-NUNKSZKU.js';
|
|
38
39
|
import './chunk-RLWIUUQ5.js';
|
|
40
|
+
export { DEFAULT_FILTER_FIELDS, DEFAULT_FILTER_INPUT_LABELS, FilterInput } from './chunk-YU2KUMGE.js';
|
|
39
41
|
import { ActionLink } from './chunk-73DANGPH.js';
|
|
40
42
|
export { ActionLink } from './chunk-73DANGPH.js';
|
|
41
|
-
import './chunk-NUNKSZKU.js';
|
|
42
|
-
export { DEFAULT_FILTER_FIELDS, DEFAULT_FILTER_INPUT_LABELS, FilterInput } from './chunk-YU2KUMGE.js';
|
|
43
43
|
import './chunk-7F5Z4K5W.js';
|
|
44
44
|
export { DEFAULT_SSO_LOGIN_BUTTON_LABELS, SsoLoginButton, isAuthRoutePath, normalizeAuthPath, preserveAuthReturnUrl } from './chunk-PLAGIVFF.js';
|
|
45
45
|
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, RecoveryKeyDialog, RevealablePasswordInput, consumeFragmentCredentials, createPasswordRules, parseAuthError, parseFragmentCredentials, promptSaveCredential, useFragmentCredentials } from './chunk-VN4FSGBR.js';
|
|
46
46
|
export { DEFAULT_PASSWORD_STRENGTH_INPUT_LABELS, PasswordStrengthInput } from './chunk-P6OLZGQA.js';
|
|
47
47
|
import './chunk-WNDIVNPT.js';
|
|
48
|
-
export {
|
|
48
|
+
export { DEFAULT_DM_INVITE_CHIP_LABELS, DmInviteChip, DmThreadHeader } from './chunk-2S3LT5KE.js';
|
|
49
|
+
export { ArbiHost, useHost } from './chunk-ILBBV2ZY.js';
|
|
50
|
+
export { DEFAULT_TAB_HEADER_LABELS, TabHeader } from './chunk-ABEKUV6L.js';
|
|
51
|
+
export { EmptyState } from './chunk-P6GHJSLR.js';
|
|
52
|
+
export { AssistantToaster, ContextActionButton, ContextCheckRow, ContextPanelContent, ContextPanelFooter, ContextPanelTabs, ContextPickerList, ContextPickerRow, ContextSearchInput, ContextSelectList, ContextSelectRow, DEFAULT_LABEL_PIN_ROW_LABELS, DEFAULT_PINNED_DOC_CHIP_LABELS, LabelPinRow, PinnedDocChip, useDismissibleCard } from './chunk-VA3YYR7R.js';
|
|
49
53
|
export { BranchControls, ComposerAccessories, ComposerTools, ContextUsageBar, Conversation, ConversationBody, ConversationHeader, ConversationHeaderActions, ConversationHistoryPane, ConversationLoading, ConversationMain, ConversationRoot, ConversationSearchView, ConversationSettingsButton, DEFAULT_BRANCH_CONTROLS_LABELS, DEFAULT_CONVERSATION_LAYOUT_LABELS, DEFAULT_CONVERSATION_PARTS_LABELS, DEFAULT_CONVERSATION_SEARCH_LABELS, DEFAULT_DRAFTING_DOC_CHIP_LABELS, DEFAULT_MODEL_PRICING_TIP_LABELS, DEFAULT_PENDING_ANSWER_BAR_LABELS, DEFAULT_SLASH_MENU_LABELS, DEFAULT_THREAD_MAP_LABELS, DEFAULT_THREAD_VISUALIZER_LABELS, DraftingDocChip, ModelAutoIcon, ModelConfigureButton, ModelDot, ModelMenuDivider, ModelMenuMessage, ModelOption, ModelOptionLabel, ModelPickerPopover, ModelPickerTrigger, ModelPricingTip, ModelTierIcon, ModelTierOption, ModelTriggerContent, NewChatButton, NewPaChatButton, PaModeBadge, PendingAnswerBar, SlashMenu, ThreadMap, ThreadMapDiagram, ThreadMapError, ThreadMapLoading, ThreadVisualizer, buildMessageLink, buildSlashItems, buildThreadDiagram, copyMessageToClipboard, downloadTableAsCsv, filterSlashItems, findMessageDocument, flashMessage, getParticipantTints, groupOutputsByConversation, isLongPastedText, latestThreadVersionMessage, parseSlashTokenInProgress as parseSlashToken, threadForNode, useLongPaste, useOpenCitation, useRecipientDraft } from './chunk-SEZEEHLU.js';
|
|
50
|
-
export { AssistantDock, AssistantDockToggle, AssistantModeToggle, ChatDocuments, ChatMessageContent, ChatPage, ChatThreadList, ChatThreadSelect, CitationMark, Composer, ComposerBranchingNotice, ComposerContainer, ComposerDock, ComposerFrame, ComposerInput, ComposerRoot, ComposerSend, ComposerToolbar, ComposerVoiceButton, ContextChip, ConversationEmpty, DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS, DEFAULT_CHAT_PAGE_LABELS, DEFAULT_COMPOSER_LABELS, DEFAULT_CONVERSATION_EMPTY_LABELS, DEFAULT_MESSAGE_ALERT_LABELS, DEFAULT_MESSAGE_LABELS, DEFAULT_MESSAGE_LIST_LABELS, DEFAULT_WORKFLOW_STEP_CHIP_LABELS, Message, MessageActionButton, MessageActionMenu, MessageAlert, MessageAuthor, MessageBody, MessageBubble, MessageByline, MessageContent, MessageFooter, MessageList, MessageListBanner, MessageListEmpty, MessageListRoot, MessageListRow, MessageListRows, MessageListStatus, MessageListTail, MessageNarration, MessageRoot, MessageSources, MessageSubagentBadge, ScrollToBottom, SourceChip, WorkflowStepChip, toSpeakableText, useAssistantDock, useChatSurface, useRegisterEmbeddedChat, useStartRequestedConversation, useStreamAnnouncement } from './chunk-
|
|
54
|
+
export { AssistantDock, AssistantDockToggle, AssistantModeToggle, ChatDocuments, ChatMessageContent, ChatPage, ChatThreadList, ChatThreadSelect, CitationMark, Composer, ComposerBranchingNotice, ComposerContainer, ComposerDock, ComposerFrame, ComposerInput, ComposerRoot, ComposerSend, ComposerToolbar, ComposerVoiceButton, ContextChip, ConversationEmpty, DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS, DEFAULT_CHAT_PAGE_LABELS, DEFAULT_COMPOSER_LABELS, DEFAULT_CONVERSATION_EMPTY_LABELS, DEFAULT_MESSAGE_ALERT_LABELS, DEFAULT_MESSAGE_LABELS, DEFAULT_MESSAGE_LIST_LABELS, DEFAULT_WORKFLOW_STEP_CHIP_LABELS, Message, MessageActionButton, MessageActionMenu, MessageAlert, MessageAuthor, MessageBody, MessageBubble, MessageByline, MessageContent, MessageFooter, MessageList, MessageListBanner, MessageListEmpty, MessageListRoot, MessageListRow, MessageListRows, MessageListStatus, MessageListTail, MessageNarration, MessageRoot, MessageSources, MessageSubagentBadge, ScrollToBottom, SourceChip, WorkflowStepChip, toSpeakableText, useAssistantDock, useChatSurface, useRegisterEmbeddedChat, useStartRequestedConversation, useStreamAnnouncement } from './chunk-AL7EXOX5.js';
|
|
51
55
|
export { DEFAULT_DOCK_WIDTH, Toaster } from './chunk-OKERRHLH.js';
|
|
52
56
|
export { DOC_ID_IN_HREF, rehypeDocEntityPills, workspaceDocIdFromHref } from './chunk-DDCMLHXF.js';
|
|
53
57
|
export { BlocksTooltipProvider, DEFAULT_OVERLAY_ZONE_ID, DEFAULT_PAGE_CONTAINER_PADDING, DEFAULT_SIDEBAR_TOGGLE_BUTTON_LABELS, PageContainer, SHELL_BOTTOM_INSET_VAR, Shell, SidebarToggleButton, ToolButton, useDrawerBehavior, useOverlayZoneId, useShellBottomInset } from './chunk-7XF5SFJ2.js';
|
|
54
58
|
export { DEFAULT_ASSIGNEE_WORDING, DEFAULT_STEP_DOCUMENT_LABELS, DEFAULT_STEP_KIND_LABELS, DEFAULT_STEP_RECORD_LABELS, STEP_KIND_ICONS, StepDocumentButton, StepDocumentCards, StepRecord, WORKFLOW_STEP_KINDS, assigneeName, canAssign, composeStepPrompt, dependsOn, fillRunText, fillStepInputs, initialRunInputs, isPersonAction, isPersonStep, isRunFinished, isSteppedWorkflow, nextAction, orderSteps, reviewInstructions, runFields, runFieldsOf, runThreadTitle, sendBackTargets, splitDocRef, stepConfigProblems, stepDependencies, stepDocuments, stepFields, stepKindOf, stepLevels, stepPhase, stepStatesFromActivity, upstreamSteps, useMentionAutocomplete, validateStep, validateWorkflowGraph, workflowSteps } from './chunk-THNTNAYI.js';
|
|
55
59
|
export { EMPTY_WORKFLOW_SCOPE, SKILL_PROMPT_FALLBACK_PLACEHOLDER, SKILL_PROMPT_LABEL, buildLaunch, composeWorkflowPrompt, defaultInputs, fieldToFrontmatter, inputsFromContext, isEmptyWorkflowScope, isWorkflowScope, mergeSkillWorkflows, promptFieldName, skillTitle, skillToWorkflow, validateInputs, workflowAccepts, workflowFromFrontmatter, workflowsAccepting, workflowsForHost } from './chunk-TZGBRLPK.js';
|
|
56
60
|
export { TONES, isTone } from './chunk-AUS3KBHJ.js';
|
|
57
|
-
export { DEFAULT_MENTION_LABELS, MentionChip, MentionMenu, useListKeyNav } from './chunk-GAGYAHYO.js';
|
|
58
61
|
export { daysUntil, displayName, fmtDate, fmtDateTime, formatCount, formatCurrency, formatPageRefs, hrs, initials, pct, pluralize } from './chunk-5VYJP6XD.js';
|
|
59
62
|
export { BREAKPOINT_QUERIES, useIsNarrow, useIsPhone, useIsTouchScreen, useMediaQuery } from './chunk-SLSBJRWW.js';
|
|
60
|
-
export {
|
|
61
|
-
export { ArbiHost, useHost } from './chunk-ILBBV2ZY.js';
|
|
62
|
-
export { EmptyState } from './chunk-P6GHJSLR.js';
|
|
63
|
-
export { DEFAULT_TAB_HEADER_LABELS, TabHeader } from './chunk-ABEKUV6L.js';
|
|
63
|
+
export { DEFAULT_MENTION_LABELS, MentionChip, MentionMenu, useListKeyNav } from './chunk-GAGYAHYO.js';
|
|
64
64
|
export { ConversationFilter, ProvisionalTranscriptLine, TranscriptLine, transcriptRuns } from './chunk-6AMCMKTF.js';
|
|
65
65
|
export { buildDeepLinkPath, buildDeepLinkUrl, deepLinkHref, parseDeepLinkPath } from './chunk-7Q5INDUS.js';
|
|
66
66
|
import './chunk-NPLYHR2E.js';
|
|
@@ -70,9 +70,9 @@ import './chunk-U4HWVCRN.js';
|
|
|
70
70
|
import './chunk-TX2ZICS7.js';
|
|
71
71
|
import './chunk-7F6CBP3Z.js';
|
|
72
72
|
import './chunk-VUNV25KB.js';
|
|
73
|
+
import { useState, useEffect, useMemo, useRef, createElement } from 'react';
|
|
73
74
|
import { useDroppable } from '@dnd-kit/core';
|
|
74
75
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
75
|
-
import { useState, useRef, createElement } from 'react';
|
|
76
76
|
import { Search, Sparkles, X, Plus, MessagesSquare } from 'lucide-react';
|
|
77
77
|
import { Button, cn, Input, buttonVariants } from '@arbidocs/react/ui';
|
|
78
78
|
export { DocumentCard, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@arbidocs/react/ui';
|
|
@@ -135,6 +135,45 @@ function createTipsRegistry(config) {
|
|
|
135
135
|
placementLabel: (p) => placements.find((o) => o.value === p)?.label ?? p
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
|
+
function useTipsPlacement({
|
|
139
|
+
registry,
|
|
140
|
+
context,
|
|
141
|
+
state,
|
|
142
|
+
dismissed = [],
|
|
143
|
+
autoRotateSeconds = 30
|
|
144
|
+
}) {
|
|
145
|
+
const [editVersion, setEditVersion] = useState(0);
|
|
146
|
+
useEffect(() => registry.subscribe(() => setEditVersion((value) => value + 1)), [registry]);
|
|
147
|
+
const stateKey = JSON.stringify(state ?? {});
|
|
148
|
+
const dismissedKey = JSON.stringify(dismissed);
|
|
149
|
+
const tips = useMemo(
|
|
150
|
+
() => registry.select(context, state).filter((tip) => !dismissed.includes(tip.code)),
|
|
151
|
+
// Values, not the identity of inline situation/dismissal objects, select and reset the tips.
|
|
152
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
153
|
+
[registry, context, stateKey, editVersion, dismissedKey]
|
|
154
|
+
);
|
|
155
|
+
const [cursor, setCursor] = useState(0);
|
|
156
|
+
const [paused, setPaused] = useState(false);
|
|
157
|
+
useEffect(() => setCursor(0), [registry, context, stateKey]);
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
if (tips.length <= 1 || paused || autoRotateSeconds <= 0) return;
|
|
160
|
+
const timer = setTimeout(
|
|
161
|
+
() => setCursor((value) => (value + 1) % tips.length),
|
|
162
|
+
autoRotateSeconds * 1e3
|
|
163
|
+
);
|
|
164
|
+
return () => clearTimeout(timer);
|
|
165
|
+
}, [tips.length, paused, autoRotateSeconds, cursor]);
|
|
166
|
+
const index = tips.length ? cursor % tips.length : 0;
|
|
167
|
+
return {
|
|
168
|
+
tips,
|
|
169
|
+
tip: tips.at(index),
|
|
170
|
+
index,
|
|
171
|
+
count: tips.length,
|
|
172
|
+
previous: () => setCursor((value) => tips.length ? (value - 1 + tips.length) % tips.length : 0),
|
|
173
|
+
next: () => setCursor((value) => tips.length ? (value + 1) % tips.length : 0),
|
|
174
|
+
onHoverChange: setPaused
|
|
175
|
+
};
|
|
176
|
+
}
|
|
138
177
|
function DroppableContainer({ id, children, className = "" }) {
|
|
139
178
|
const { setNodeRef } = useDroppable({ id });
|
|
140
179
|
return /* @__PURE__ */ jsx("div", { ref: setNodeRef, className, children });
|
|
@@ -485,6 +524,6 @@ function defineNavigation(sections) {
|
|
|
485
524
|
};
|
|
486
525
|
}
|
|
487
526
|
|
|
488
|
-
export { AskBar, DEFAULT_TAGS_NAV_LABELS, DroppableContainer, OpenConversationButton, TIP_CTA_LABEL_MAX_CHARS, TIP_MAX_CHARS, TagsNav, createTipsRegistry, defineActions, defineNavigation, findTagsNavItem };
|
|
527
|
+
export { AskBar, DEFAULT_TAGS_NAV_LABELS, DroppableContainer, OpenConversationButton, TIP_CTA_LABEL_MAX_CHARS, TIP_MAX_CHARS, TagsNav, createTipsRegistry, defineActions, defineNavigation, findTagsNavItem, useTipsPlacement };
|
|
489
528
|
//# sourceMappingURL=index.js.map
|
|
490
529
|
//# sourceMappingURL=index.js.map
|