@arbidocs/blocks 0.5.98 → 0.5.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +37 -3
  2. package/dist/ConnectedCallDock-OJ4UR5PR.js +1 -1
  3. package/dist/ConnectedCallDock-OKH3FT2U.cjs +1 -1
  4. package/dist/ConnectedCallRoom-NB7I6RLQ.cjs +1 -1
  5. package/dist/ConnectedCallRoom-OX7ZIF76.js +1 -1
  6. package/dist/ConnectedNativeDocxComparison-3UJZR52S.cjs +2 -2
  7. package/dist/ConnectedNativeDocxComparison-VGJLNVM4.js +2 -2
  8. package/dist/ConnectedNativeDocxEditor-A6PGFR35.cjs +2 -2
  9. package/dist/ConnectedNativeDocxEditor-O7QEWYGG.js +2 -2
  10. package/dist/ConnectedStreamedWordArtifact-MJAVZ3NR.js +2 -2
  11. package/dist/ConnectedStreamedWordArtifact-Q7TWGK4B.cjs +2 -2
  12. package/dist/{DocumentReviewCard-LGBI472S.js → DocumentReviewCard-5NZM6FOB.js} +9 -9
  13. package/dist/{DocumentReviewCard-LGBI472S.js.map → DocumentReviewCard-5NZM6FOB.js.map} +1 -1
  14. package/dist/{DocumentReviewCard-CJ5VQM45.cjs → DocumentReviewCard-7VJ3MMYG.cjs} +14 -14
  15. package/dist/{DocumentReviewCard-CJ5VQM45.cjs.map → DocumentReviewCard-7VJ3MMYG.cjs.map} +1 -1
  16. package/dist/{FilesViewerDialog-KP3IHDSS.js → FilesViewerDialog-5VML4F5E.js} +8 -8
  17. package/dist/{FilesViewerDialog-KP3IHDSS.js.map → FilesViewerDialog-5VML4F5E.js.map} +1 -1
  18. package/dist/{FilesViewerDialog-AFIM2SCB.cjs → FilesViewerDialog-IQ5UDAZX.cjs} +9 -9
  19. package/dist/{FilesViewerDialog-AFIM2SCB.cjs.map → FilesViewerDialog-IQ5UDAZX.cjs.map} +1 -1
  20. package/dist/{WorkspaceTableView-2FL5OX6M.js → WorkspaceTableView-DYABS53K.js} +3 -3
  21. package/dist/{WorkspaceTableView-2FL5OX6M.js.map → WorkspaceTableView-DYABS53K.js.map} +1 -1
  22. package/dist/{WorkspaceTableView-YPESFW25.cjs → WorkspaceTableView-ZIQ7JWT5.cjs} +3 -3
  23. package/dist/{WorkspaceTableView-YPESFW25.cjs.map → WorkspaceTableView-ZIQ7JWT5.cjs.map} +1 -1
  24. package/dist/agents/index.cjs +177 -177
  25. package/dist/agents/index.js +4 -4
  26. package/dist/chat/index.cjs +1 -1
  27. package/dist/chat/index.js +1 -1
  28. package/dist/{chunk-Y7QIZGZA.js → chunk-22EZJLGW.js} +5 -5
  29. package/dist/{chunk-Y7QIZGZA.js.map → chunk-22EZJLGW.js.map} +1 -1
  30. package/dist/{chunk-YOCKX2OP.cjs → chunk-4VSRSF4Q.cjs} +5 -5
  31. package/dist/{chunk-YOCKX2OP.cjs.map → chunk-4VSRSF4Q.cjs.map} +1 -1
  32. package/dist/{chunk-VJTDTWNZ.cjs → chunk-ERDQ4DAX.cjs} +3 -3
  33. package/dist/{chunk-VJTDTWNZ.cjs.map → chunk-ERDQ4DAX.cjs.map} +1 -1
  34. package/dist/{chunk-F3IRNQIB.cjs → chunk-HJBVSG6H.cjs} +4 -4
  35. package/dist/{chunk-F3IRNQIB.cjs.map → chunk-HJBVSG6H.cjs.map} +1 -1
  36. package/dist/{chunk-ERVXJW7P.cjs → chunk-J24LYNTY.cjs} +35 -35
  37. package/dist/{chunk-ERVXJW7P.cjs.map → chunk-J24LYNTY.cjs.map} +1 -1
  38. package/dist/{chunk-5HPLUT4M.cjs → chunk-KBXATCF4.cjs} +4 -4
  39. package/dist/{chunk-5HPLUT4M.cjs.map → chunk-KBXATCF4.cjs.map} +1 -1
  40. package/dist/{chunk-6FLDM72D.js → chunk-KYR3TXHS.js} +3 -3
  41. package/dist/{chunk-6FLDM72D.js.map → chunk-KYR3TXHS.js.map} +1 -1
  42. package/dist/{chunk-JGC3EPPF.js → chunk-L3V2ANBD.js} +3 -3
  43. package/dist/{chunk-JGC3EPPF.js.map → chunk-L3V2ANBD.js.map} +1 -1
  44. package/dist/{chunk-SVQTUHPE.cjs → chunk-MM5Q7AJL.cjs} +8 -8
  45. package/dist/{chunk-SVQTUHPE.cjs.map → chunk-MM5Q7AJL.cjs.map} +1 -1
  46. package/dist/{chunk-VYTEEQ4C.cjs → chunk-MT3RPUQC.cjs} +4 -4
  47. package/dist/{chunk-VYTEEQ4C.cjs.map → chunk-MT3RPUQC.cjs.map} +1 -1
  48. package/dist/{chunk-KA6TKTIT.js → chunk-OOYT5A7W.js} +3 -3
  49. package/dist/{chunk-KA6TKTIT.js.map → chunk-OOYT5A7W.js.map} +1 -1
  50. package/dist/{chunk-U3FUFNNR.js → chunk-OYSTBNNA.js} +3 -3
  51. package/dist/{chunk-U3FUFNNR.js.map → chunk-OYSTBNNA.js.map} +1 -1
  52. package/dist/{chunk-E35SHIUT.cjs → chunk-RAF72BBC.cjs} +4 -4
  53. package/dist/{chunk-E35SHIUT.cjs.map → chunk-RAF72BBC.cjs.map} +1 -1
  54. package/dist/{chunk-5SQJTWD3.cjs → chunk-SWILV6LT.cjs} +4 -4
  55. package/dist/{chunk-5SQJTWD3.cjs.map → chunk-SWILV6LT.cjs.map} +1 -1
  56. package/dist/{chunk-7OMLHP7B.js → chunk-SWW3KBH2.js} +4 -4
  57. package/dist/{chunk-7OMLHP7B.js.map → chunk-SWW3KBH2.js.map} +1 -1
  58. package/dist/{chunk-5CKKWKEJ.js → chunk-TVJAVK2G.js} +3 -3
  59. package/dist/{chunk-5CKKWKEJ.js.map → chunk-TVJAVK2G.js.map} +1 -1
  60. package/dist/{chunk-37J6OLML.js → chunk-UBI4HXT6.js} +5 -5
  61. package/dist/{chunk-37J6OLML.js.map → chunk-UBI4HXT6.js.map} +1 -1
  62. package/dist/{chunk-3SBMU4LB.js → chunk-UNQE3JWX.js} +4 -4
  63. package/dist/{chunk-3SBMU4LB.js.map → chunk-UNQE3JWX.js.map} +1 -1
  64. package/dist/{chunk-LDGVJI7D.cjs → chunk-USIRUI2M.cjs} +24 -24
  65. package/dist/{chunk-LDGVJI7D.cjs.map → chunk-USIRUI2M.cjs.map} +1 -1
  66. package/dist/{chunk-65MSYISI.cjs → chunk-VD33HXFZ.cjs} +28 -28
  67. package/dist/{chunk-65MSYISI.cjs.map → chunk-VD33HXFZ.cjs.map} +1 -1
  68. package/dist/{chunk-VYW4YXDB.js → chunk-VW6MFQFW.js} +3 -3
  69. package/dist/{chunk-VYW4YXDB.js.map → chunk-VW6MFQFW.js.map} +1 -1
  70. package/dist/{chunk-3LZ7JL3N.js → chunk-YG4S7OCD.js} +3 -3
  71. package/dist/{chunk-3LZ7JL3N.js.map → chunk-YG4S7OCD.js.map} +1 -1
  72. package/dist/{chunk-CYIL3N2M.js → chunk-Z7XKBKQN.js} +6 -6
  73. package/dist/{chunk-CYIL3N2M.js.map → chunk-Z7XKBKQN.js.map} +1 -1
  74. package/dist/{chunk-PNDWMFVL.cjs → chunk-ZAKDIJBP.cjs} +46 -46
  75. package/dist/{chunk-PNDWMFVL.cjs.map → chunk-ZAKDIJBP.cjs.map} +1 -1
  76. package/dist/connect/docx.cjs +2 -2
  77. package/dist/connect/docx.js +2 -2
  78. package/dist/connect/index.cjs +1259 -713
  79. package/dist/connect/index.cjs.map +1 -1
  80. package/dist/connect/index.d.ts +1 -0
  81. package/dist/connect/index.js +784 -241
  82. package/dist/connect/index.js.map +1 -1
  83. package/dist/connect/viewer.cjs +7 -7
  84. package/dist/connect/viewer.js +6 -6
  85. package/dist/connection/command/ConnectedCommandPalette.d.ts +16 -0
  86. package/dist/connection/command/actions.d.ts +21 -0
  87. package/dist/connection/command/icons.d.ts +7 -0
  88. package/dist/connection/command/index.d.ts +3 -0
  89. package/dist/connection/command/palette-state.d.ts +22 -0
  90. package/dist/connection/files/grid/documentCellRenderers.d.ts +57 -0
  91. package/dist/connection/files/grid/documentColumns.d.ts +2 -2
  92. package/dist/embed/index.cjs +13 -13
  93. package/dist/embed/index.js +7 -7
  94. package/dist/files/index.cjs +224 -224
  95. package/dist/files/index.js +3 -3
  96. package/dist/index.cjs +267 -267
  97. package/dist/index.cjs.map +1 -1
  98. package/dist/index.js +7 -7
  99. package/dist/index.js.map +1 -1
  100. package/dist/nav/actions.d.ts +23 -1
  101. package/dist/styles.css +1 -1
  102. package/dist/workflow-canvas/index.cjs +20 -20
  103. package/dist/workflow-canvas/index.js +10 -10
  104. package/node_modules/@arbidocs/coedit/package.json +1 -1
  105. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/OpenConversationButton.tsx","../src/nav/actions.ts","../src/nav/manifest.ts"],"names":["hrefFor","useBlocksEnvironment","jsxs","ActionLink","cn","buttonVariants","jsx","MessagesSquare","createElement"],"mappings":"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","file":"index.cjs","sourcesContent":["import { MessagesSquare } from 'lucide-react'\nimport { buttonVariants, cn } 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 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 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: 'outline', size: 'sm' }), 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 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 },\n }))\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/OpenConversationButton.tsx","../src/nav/actions.ts","../src/nav/manifest.ts"],"names":["hrefFor","useBlocksEnvironment","jsxs","ActionLink","cn","buttonVariants","jsx","MessagesSquare","createElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,SAAS,sBAAA,CAAuB;AAAA,EACrC,cAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,gBAAA;AAAA,EACR,SAAA;AAAA,EACA;AACF,CAAA,EAAgC;AAC9B,EAAA,MAAM,EAAE,OAAA,EAAAA,QAAAA,EAAS,gBAAA,KAAqBC,sCAAA,EAAqB;AAC3D,EAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAC5B,EAAA,uBACEC,eAAA;AAAA,IAACC,4BAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAMH,SAAQ,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,EAAWI,KAAA,CAAGC,iBAAA,CAAe,EAAE,OAAA,EAAS,WAAW,IAAA,EAAM,IAAA,EAAM,CAAA,EAAG,SAAS,CAAA;AAAA,MAC3E,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,0BAAA,EAAA,EAAe,SAAA,EAAU,UAAA,EAAW,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,QAChD;AAAA;AAAA;AAAA,GACH;AAEJ;;;ACbO,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;ACjDO,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,EAIM;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;AAAA,QACzB;AAAA,OACF,CAAE,CAAA;AAAA,IACJ;AAAA,GACF;AACF","file":"index.cjs","sourcesContent":["import { MessagesSquare } from 'lucide-react'\nimport { buttonVariants, cn } 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 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 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: 'outline', size: 'sm' }), className)}\n data-testid={testId}\n >\n <MessagesSquare className=\"size-3.5\" aria-hidden />\n {label}\n </ActionLink>\n )\n}\n","import type { ArbiFeature } from '@arbidocs/react'\n\n/** Who is asking, for an action's `available` (the same gates the primary UI applies). */\nexport interface ActionContext {\n /** The open workspace; `null` outside one. */\n workspaceId: string | null\n /** The viewer is a member of the open workspace. */\n isMember: boolean\n /** The viewer's role there (`owner`, `collaborator`, `guest`); `null` when not a member. */\n role: string | null\n /** A temporary-access (external) account. */\n isTemporaryAccess: boolean\n /** Whether the account may create projects; `undefined` until known. */\n canCreateProjects: boolean | undefined\n isFeatureOn: (feature: ArbiFeature) => boolean\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 /**\n * An icon name, so the catalogue stays independent of a renderer. The palette draws the lucide\n * icons its catalogue names (`connection/command/icons.ts`); any other name, a generic glyph.\n */\n icon: string\n keywords?: readonly string[]\n /** Offered (in the command palette) only when it says so. Dispatch is not gated. */\n available?: (context: ActionContext) => boolean\n /** `false`: dispatch only, never listed (a second name for another row's effect). */\n listed?: boolean\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 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 },\n }))\n },\n }\n}\n"]}
package/dist/index.js CHANGED
@@ -8,11 +8,11 @@ export { Timeline } from './chunk-UYA4URGM.js';
8
8
  export { Highlight, splitByTerms } from './chunk-Q5EUEJD7.js';
9
9
  import './chunk-QAB4O4EE.js';
10
10
  export { ContactCard, DEFAULT_CONTACT_CARD_LABELS, contactToVCard, downloadVCard, vCardFilename } from './chunk-VQKGCV6H.js';
11
- export { DEFAULT_GLOSSARY_LABELS, DEFAULT_TAG_COLUMNS_EDITOR_LABELS, DEFAULT_TAG_DETAIL_LABELS, DEFAULT_TAG_TABLE_DOCX_LABELS, DEFAULT_TAG_TABLE_LABELS, DEFAULT_WORKSPACE_ACTIVITY_LABELS, EXTRACT_LIMIT, EntityIdentityBar, ExtractEntitiesDialog, GridRowNavigator, IDENTITY_NAME_MAX_LENGTH, LoadingIndicator, TAG_TABLE_DOCX_LANDSCAPE_AFTER, TagColumnsEditor, TagDetail, TagTable, TagTableCell, Toolbar, WorkspaceActivityList, cellText, cellValue, documentCount, entitiesPhrase, fieldWrites, glossaryDocumentXml, glossaryDocx, glossaryEntries, glossaryFileName, glossaryMarkdown, isGap, parseCell, rowLinks, tagDetailLabels, tagKindDescription, tagNoteLabel, tagTableDocumentXml, tagTableDocx, tagTableLabels, tagTableMarkdown, tagsPageNouns, useTipsPlacement, workspaceActivityHeadline, workspaceActivityTarget } from './chunk-VYW4YXDB.js';
11
+ export { DEFAULT_GLOSSARY_LABELS, DEFAULT_TAG_COLUMNS_EDITOR_LABELS, DEFAULT_TAG_DETAIL_LABELS, DEFAULT_TAG_TABLE_DOCX_LABELS, DEFAULT_TAG_TABLE_LABELS, DEFAULT_WORKSPACE_ACTIVITY_LABELS, EXTRACT_LIMIT, EntityIdentityBar, ExtractEntitiesDialog, GridRowNavigator, IDENTITY_NAME_MAX_LENGTH, LoadingIndicator, TAG_TABLE_DOCX_LANDSCAPE_AFTER, TagColumnsEditor, TagDetail, TagTable, TagTableCell, Toolbar, WorkspaceActivityList, cellText, cellValue, documentCount, entitiesPhrase, fieldWrites, glossaryDocumentXml, glossaryDocx, glossaryEntries, glossaryFileName, glossaryMarkdown, isGap, parseCell, rowLinks, tagDetailLabels, tagKindDescription, tagNoteLabel, tagTableDocumentXml, tagTableDocx, tagTableLabels, tagTableMarkdown, tagsPageNouns, useTipsPlacement, workspaceActivityHeadline, workspaceActivityTarget } from './chunk-VW6MFQFW.js';
12
12
  export { ThemeEditor, ThemePreview } from './chunk-4FV5DO3V.js';
13
13
  export { CONTRAST_PAIRS, DEFAULT_THEME_PREVIEW_LABELS, THEME_STYLE_ID, Tabs, applyFontVars, applyThemeVars, clearFontVars, clearThemeVars, contrastIssues, contrastRatio, deriveColors, ensureContrast, inferInputs, themeCssVars, themeMetaVars, toHslTriplet } from './chunk-J77BACGX.js';
14
- export { MemberAvatarStack } from './chunk-VGHPCF7Q.js';
15
14
  export { DEFAULT_THREAD_FOLLOW_LABELS, DEFAULT_WORKSPACE_NOTIFICATION_MENU_LABELS, ThreadFollowButton, ThreadFollowMenuItem, WorkspaceNotificationMenu } from './chunk-66NMPTOH.js';
15
+ export { MemberAvatarStack } from './chunk-VGHPCF7Q.js';
16
16
  export { TIPS_VISIBILITY_OVERRIDE, WELCOME_REPLAY_VIEW, setHintsSessionOverride, startWelcomeReplay } from './chunk-SK3GBHPJ.js';
17
17
  export { TIMELINE_ZOOM, TimelineCalendar, TimelineGantt, TimelineZoomControl, dayKey, formatSpan, monthLabel, parseIso, utcDay } from './chunk-QCK3YKT4.js';
18
18
  export { Callout } from './chunk-UJE32SST.js';
@@ -35,13 +35,13 @@ export { RowNavigatorControls } from './chunk-ELA7Y5YW.js';
35
35
  export { DEFAULT_PASSAGE_PILL_LABELS, PassagePill } from './chunk-3IT5LPLF.js';
36
36
  export { DEFAULT_QUIET_MARK_LABELS, LabelMark, NoteMark, PassageMark, QuietLink, useCopyText } from './chunk-FACZSNRJ.js';
37
37
  export { DEFAULT_SHARE_CONTROL_LABELS, ShareControl } from './chunk-K4BGOPGG.js';
38
- export { DEFAULT_DETAIL_PANEL_LABELS, DetailBody, DetailEmpty, DetailField, DetailFields, DetailLinkItem, DetailLinkList, DetailLoading, DetailPanel, DetailSection } from './chunk-OC2PD52M.js';
39
38
  export { DataTable, MetricCard } from './chunk-I46XTM3W.js';
40
39
  export { tid } from './chunk-AMTWY22T.js';
41
40
  export { PageHeader } from './chunk-XCVLUXFP.js';
42
41
  export { Chart } from './chunk-VIIBJBTX.js';
43
- export { useWorkflowPreview } from './chunk-JGC3EPPF.js';
44
- export { ActionStepBody, AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentCard, AgentConnectInstructions, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentGallery, AgentMainView, AgentTypeSelector, ApprovalEvidence, AssigneeLine, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CAPABILITIES, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_GALLERY_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_BUILDER_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_STEP_BAR_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_THREAD_STATE_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_STATUS_LABELS, DEFAULT_WORKFLOW_STEP_PARTS_LABELS, DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, MAX_TASK_DEPTH, NewThreadDialog, PillSelect, RecurrenceBuilder, SKILL_FIELD_TYPE_LABELS, SKILL_MAIN_FILENAME, SKILL_SOURCE_LABELS, SKILL_TYPES, SKILL_TYPE_LABELS, STATUS_LABELS, STATUS_ORDER, STATUS_TONE, SendBackControl, SkillDetail, SkillDetailSection, SkillEditForm, SkillFilterChips, SkillGenerateForm, SkillLibraryDetail, SkillTile, SkillViewToggle, TASK_COLUMN_ORDER, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskEmptyState, TaskMoveDialog, TaskOutputsCell, TaskPlan, TaskRunsDialog, TaskStatusPill, TaskTable, ThreadStatusLine, TupleArrayField, UploadTaskItem, UploadTaskList, WorkflowRunStatus, WorkflowRunner, WorkflowStepAction, WorkflowThreadStartedBy, WorkflowThreadStrip, activeStepId, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, buildLibrarySkills, buildTaskRows, buildZipSkillImport, closeWorkflowLaunch, composePersona, createTaskColumns, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, descendantIds, filterConversationRows, filterLibrarySkills, formatElapsed, goalProgress, groupAgentTasks, groupThreadActivity, humanizeSection, importMarkdownSkill, importSkillFile, importSkillFromUrl, indexTasks, inferType, isMainSkillFile, isOutOfBounds, isPlainTodo, isValidAgentName, labelRef, labelRefKey, matchRequiredLabels, moveTargets, nextCriterionId, openWorkflowLaunch, ownerExtId, parseSkillFrontmatter, prettifyKey, readSkillArchive, requiredLabelsOf, resolveScopeInputs, serializeSkill, skillSlug, stepWindow, stripPersonaPreamble, summarizeAgent, summarizeCapabilities, taskActivityHeadline, unresolvedLabelRefs, useWorkflowLaunchRequest, useWorkflowView, withLabelIds, workflowFromSkillMarkdown, workflowToSkillMarkdown } from './chunk-7OMLHP7B.js';
42
+ export { DEFAULT_DETAIL_PANEL_LABELS, DetailBody, DetailEmpty, DetailField, DetailFields, DetailLinkItem, DetailLinkList, DetailLoading, DetailPanel, DetailSection } from './chunk-OC2PD52M.js';
43
+ export { useWorkflowPreview } from './chunk-L3V2ANBD.js';
44
+ export { ActionStepBody, AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentCard, AgentConnectInstructions, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentGallery, AgentMainView, AgentTypeSelector, ApprovalEvidence, AssigneeLine, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CAPABILITIES, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_GALLERY_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_BUILDER_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_STEP_BAR_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_THREAD_STATE_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_RUN_STATUS_LABELS, DEFAULT_WORKFLOW_STEP_PARTS_LABELS, DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, MAX_TASK_DEPTH, NewThreadDialog, PillSelect, RecurrenceBuilder, SKILL_FIELD_TYPE_LABELS, SKILL_MAIN_FILENAME, SKILL_SOURCE_LABELS, SKILL_TYPES, SKILL_TYPE_LABELS, STATUS_LABELS, STATUS_ORDER, STATUS_TONE, SendBackControl, SkillDetail, SkillDetailSection, SkillEditForm, SkillFilterChips, SkillGenerateForm, SkillLibraryDetail, SkillTile, SkillViewToggle, TASK_COLUMN_ORDER, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskEmptyState, TaskMoveDialog, TaskOutputsCell, TaskPlan, TaskRunsDialog, TaskStatusPill, TaskTable, ThreadStatusLine, TupleArrayField, UploadTaskItem, UploadTaskList, WorkflowRunStatus, WorkflowRunner, WorkflowStepAction, WorkflowThreadStartedBy, WorkflowThreadStrip, activeStepId, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, buildLibrarySkills, buildTaskRows, buildZipSkillImport, closeWorkflowLaunch, composePersona, createTaskColumns, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, descendantIds, filterConversationRows, filterLibrarySkills, formatElapsed, goalProgress, groupAgentTasks, groupThreadActivity, humanizeSection, importMarkdownSkill, importSkillFile, importSkillFromUrl, indexTasks, inferType, isMainSkillFile, isOutOfBounds, isPlainTodo, isValidAgentName, labelRef, labelRefKey, matchRequiredLabels, moveTargets, nextCriterionId, openWorkflowLaunch, ownerExtId, parseSkillFrontmatter, prettifyKey, readSkillArchive, requiredLabelsOf, resolveScopeInputs, serializeSkill, skillSlug, stepWindow, stripPersonaPreamble, summarizeAgent, summarizeCapabilities, taskActivityHeadline, unresolvedLabelRefs, useWorkflowLaunchRequest, useWorkflowView, withLabelIds, workflowFromSkillMarkdown, workflowToSkillMarkdown } from './chunk-SWW3KBH2.js';
45
45
  export { AUTOMATION_EVENTS, AssistantEntity, DEFAULT_AGENT_STEPS_LABELS, DEFAULT_RECURRENCE, DEFAULT_SUBAGENT_ROSTER_LABELS, EntityChip, GoalCriteria, MODEL_NAME_ICONS, MODEL_TIER_ICON_MAP, MODEL_TIER_LABELS, STEP_ICON_MAP, StepDetail, StepNarration, StepOutcome, StepParams, StepRow, StepSummary, StepTrace, StepTraceSummary, SubAgentLane, SubStepGroup, SubagentRoster, TAG_ICONS, TOOL_ICON_MAP, TaskFlow, ThreadActivity, WEEKDAYS, buildRRule, compactThreadActivity, describeRRule, describeTrigger, fromPlanAssignee, fromPlanDocumentRef, fromPlanSteps, getAgentStepIcon, getAgentStepPresentation, getCurrentAgentStepPresentation, getModelIcon, isIncompleteSignal, isSupersededStop, latestMessageTime, layoutFromPlanSteps, linkedRunsFromActivity, notifiedLabel, parseRRule, stepAccent, toPlanAssignee, toPlanDocumentRef, toPlanSteps, unnotifiedMentions } from './chunk-OFF2PR4W.js';
46
46
  export { ChevronShape, ProgressChevron, ProgressChevronBar } from './chunk-LRPGXNMA.js';
47
47
  export { ANNOTATE, ANNOTATE_ID, BUILTIN_SKILLS, CHRONOLOGY, CHRONOLOGY_ID, CUSTOM_TASK, CUSTOM_TASK_ID, DASHBOARD_OPERATIONS, DASHBOARD_PINNED, DEEP_RESEARCH, DEEP_RESEARCH_ID, DERIVED_NAME_WORDS, EMPTY_NEW_THREAD, GENERATE_IMAGE, GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO, IMAGE_ASPECT_RATIOS, REMIND_TASK, REMIND_TASK_ID, SKILL_PACK_REQUEST_FIELD, SUMMARISE, SUMMARISE_ID, TIMELINE, TIMELINE_ID, TIMELINE_PROMPT, TRANSLATE, TRANSLATE_ID, TRANSLATE_LANGUAGES, WEB_WORKFLOWS, WORKFLOW_REGISTRY, authModeFor, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createsWork, deriveAnnotationName, deriveWorkflowName, firstWords, hasTaskFields, inputDocumentIds, isAgenticWorkflow, isSkillPackWorkflow, isoToLocalInput, localInputToIso, newThreadToRequest, recordWorkflowUse, renderWorkflowIcon, resetWorkflowUsage, skillPackWorkflows, sortByRecentUse, taskComposerToCreateRequest, taskComposerToUpdateRequest, taskNeedsAccess, taskToComposerValues, useWorkflowUsage, workflowTaskFields, workflowToComposerValues, workflowWhen } from './chunk-AXJLDI4M.js';
@@ -57,9 +57,9 @@ import './chunk-ZQ5YTC3P.js';
57
57
  import './chunk-RLWIUUQ5.js';
58
58
  import './chunk-L3BEWZWT.js';
59
59
  export { DEFAULT_FILTER_FIELDS, DEFAULT_FILTER_INPUT_LABELS, FilterInput } from './chunk-P4CH2ATT.js';
60
- import './chunk-7F5Z4K5W.js';
61
60
  import { ActionLink } from './chunk-U53SIJES.js';
62
61
  export { ActionLink } from './chunk-U53SIJES.js';
62
+ import './chunk-7F5Z4K5W.js';
63
63
  export { DEFAULT_SSO_LOGIN_BUTTON_LABELS, InstallInstructionsDialog, SsoLoginButton, isAuthRoutePath, normalizeAuthPath, preserveAuthReturnUrl, resolveAuthReturn, signInRedirect, takeAuthReturnUrl } from './chunk-3D54OKM2.js';
64
64
  export { ARBI_ROUTES, createRouteCodec, hrefFor, isDeepLinkPath, parseHref, pathRoute, readArrivalParams, renamedPage } from './chunk-N7X5O7B5.js';
65
65
  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-FVZ2CN4A.js';
@@ -93,8 +93,8 @@ export { DEFAULT_STEP_DOCUMENT_LABELS, DEFAULT_STEP_KIND_LABELS, DEFAULT_STEP_RE
93
93
  export { DEFAULT_ASSIGNEE_WORDING, assigneeName, canAssign, composeStepPrompt, dependsOn, fillRunText, fillStepInputs, initialRunInputs, isPersonAction, isPersonStep, isRunFinished, isSteppedWorkflow, nextAction, orderSteps, reviewInstructions, runFields, runFieldsOf, runThreadTitle, sendBackTargets, splitDocRef, stepConfigProblems, stepDependencies, stepFields, stepLevels, stepPhase, stepStatesFromActivity, upstreamSteps, validateStep, validateWorkflowGraph, workflowSteps } from './chunk-XEZCSRFG.js';
94
94
  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-ECYOIRXR.js';
95
95
  export { TONES, isTone } from './chunk-XDDORJPA.js';
96
- export { BREAKPOINT_QUERIES, useIsNarrow, useIsPhone, useIsTouchScreen, useMediaQuery } from './chunk-SLSBJRWW.js';
97
96
  export { daysUntil, displayName, fmtDate, fmtDateTime, formatCount, formatCurrency, hrs, initials, pct, pluralize } from './chunk-X5YMI6A7.js';
97
+ export { BREAKPOINT_QUERIES, useIsNarrow, useIsPhone, useIsTouchScreen, useMediaQuery } from './chunk-SLSBJRWW.js';
98
98
  export { ConversationFilter, ProvisionalTranscriptLine, TranscriptLine, transcriptRuns } from './chunk-H773F7OR.js';
99
99
  import './chunk-NPLYHR2E.js';
100
100
  import { useBlocksEnvironment } from './chunk-YUHSDOPW.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/OpenConversationButton.tsx","../src/nav/actions.ts","../src/nav/manifest.ts"],"names":["hrefFor"],"mappings":"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","file":"index.js","sourcesContent":["import { MessagesSquare } from 'lucide-react'\nimport { buttonVariants, cn } 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 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 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: 'outline', size: 'sm' }), 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 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 },\n }))\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/OpenConversationButton.tsx","../src/nav/actions.ts","../src/nav/manifest.ts"],"names":["hrefFor"],"mappings":"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","file":"index.js","sourcesContent":["import { MessagesSquare } from 'lucide-react'\nimport { buttonVariants, cn } 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 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 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: 'outline', size: 'sm' }), className)}\n data-testid={testId}\n >\n <MessagesSquare className=\"size-3.5\" aria-hidden />\n {label}\n </ActionLink>\n )\n}\n","import type { ArbiFeature } from '@arbidocs/react'\n\n/** Who is asking, for an action's `available` (the same gates the primary UI applies). */\nexport interface ActionContext {\n /** The open workspace; `null` outside one. */\n workspaceId: string | null\n /** The viewer is a member of the open workspace. */\n isMember: boolean\n /** The viewer's role there (`owner`, `collaborator`, `guest`); `null` when not a member. */\n role: string | null\n /** A temporary-access (external) account. */\n isTemporaryAccess: boolean\n /** Whether the account may create projects; `undefined` until known. */\n canCreateProjects: boolean | undefined\n isFeatureOn: (feature: ArbiFeature) => boolean\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 /**\n * An icon name, so the catalogue stays independent of a renderer. The palette draws the lucide\n * icons its catalogue names (`connection/command/icons.ts`); any other name, a generic glyph.\n */\n icon: string\n keywords?: readonly string[]\n /** Offered (in the command palette) only when it says so. Dispatch is not gated. */\n available?: (context: ActionContext) => boolean\n /** `false`: dispatch only, never listed (a second name for another row's effect). */\n listed?: boolean\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 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 },\n }))\n },\n }\n}\n"]}
@@ -1,11 +1,33 @@
1
+ import type { ArbiFeature } from '@arbidocs/react';
2
+ /** Who is asking, for an action's `available` (the same gates the primary UI applies). */
3
+ export interface ActionContext {
4
+ /** The open workspace; `null` outside one. */
5
+ workspaceId: string | null;
6
+ /** The viewer is a member of the open workspace. */
7
+ isMember: boolean;
8
+ /** The viewer's role there (`owner`, `collaborator`, `guest`); `null` when not a member. */
9
+ role: string | null;
10
+ /** A temporary-access (external) account. */
11
+ isTemporaryAccess: boolean;
12
+ /** Whether the account may create projects; `undefined` until known. */
13
+ canCreateProjects: boolean | undefined;
14
+ isFeatureOn: (feature: ArbiFeature) => boolean;
15
+ }
1
16
  /** A parameter-light action, supplied by a host and usable outside React. */
2
17
  export interface ActionDefinition<Id extends string = string> {
3
18
  id: Id;
4
19
  label: string;
5
20
  category: string;
6
- /** An icon name, so the catalogue stays independent of a renderer. */
21
+ /**
22
+ * An icon name, so the catalogue stays independent of a renderer. The palette draws the lucide
23
+ * icons its catalogue names (`connection/command/icons.ts`); any other name, a generic glyph.
24
+ */
7
25
  icon: string;
8
26
  keywords?: readonly string[];
27
+ /** Offered (in the command palette) only when it says so. Dispatch is not gated. */
28
+ available?: (context: ActionContext) => boolean;
29
+ /** `false`: dispatch only, never listed (a second name for another row's effect). */
30
+ listed?: boolean;
9
31
  run: () => void;
10
32
  }
11
33
  /** One catalogue for picker options, tip CTAs, palettes and validated remote dispatch. */