@arbidocs/blocks 0.4.144 → 0.4.146

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 (154) hide show
  1. package/dist/agents/index.cjs +264 -264
  2. package/dist/agents/index.js +7 -7
  3. package/dist/{chunk-ON3TKY5Y.js → chunk-5YHEHEJT.js} +242 -4
  4. package/dist/chunk-5YHEHEJT.js.map +1 -0
  5. package/dist/{chunk-7NGAWGA3.js → chunk-A6IU4GIW.js} +190 -7
  6. package/dist/chunk-A6IU4GIW.js.map +1 -0
  7. package/dist/{chunk-BUWBXJ2N.cjs → chunk-C3CGJK7A.cjs} +192 -6
  8. package/dist/chunk-C3CGJK7A.cjs.map +1 -0
  9. package/dist/{chunk-X3TGXEFS.js → chunk-C44TDH54.js} +6 -6
  10. package/dist/{chunk-X3TGXEFS.js.map → chunk-C44TDH54.js.map} +1 -1
  11. package/dist/{chunk-YFY3TQ6Q.cjs → chunk-COCGRJLA.cjs} +7 -7
  12. package/dist/{chunk-YFY3TQ6Q.cjs.map → chunk-COCGRJLA.cjs.map} +1 -1
  13. package/dist/{chunk-45LRMW54.js → chunk-DN2KI4BU.js} +8 -10
  14. package/dist/chunk-DN2KI4BU.js.map +1 -0
  15. package/dist/{chunk-R26BK7YL.cjs → chunk-DTROMMDX.cjs} +4 -4
  16. package/dist/{chunk-R26BK7YL.cjs.map → chunk-DTROMMDX.cjs.map} +1 -1
  17. package/dist/{chunk-65THHQVB.cjs → chunk-ECW2R2KF.cjs} +27 -27
  18. package/dist/{chunk-65THHQVB.cjs.map → chunk-ECW2R2KF.cjs.map} +1 -1
  19. package/dist/{chunk-RI6DZA5X.js → chunk-EF4ZLKRM.js} +3 -3
  20. package/dist/{chunk-RI6DZA5X.js.map → chunk-EF4ZLKRM.js.map} +1 -1
  21. package/dist/chunk-EV7W64B6.js +134 -0
  22. package/dist/chunk-EV7W64B6.js.map +1 -0
  23. package/dist/{chunk-WS5EX7DN.cjs → chunk-EYKISBDO.cjs} +5 -5
  24. package/dist/{chunk-WS5EX7DN.cjs.map → chunk-EYKISBDO.cjs.map} +1 -1
  25. package/dist/{chunk-JZNXRMLH.cjs → chunk-GAYMJWTC.cjs} +8 -10
  26. package/dist/chunk-GAYMJWTC.cjs.map +1 -0
  27. package/dist/{chunk-I7WG3JRD.js → chunk-H4D7WKDY.js} +3 -3
  28. package/dist/{chunk-I7WG3JRD.js.map → chunk-H4D7WKDY.js.map} +1 -1
  29. package/dist/{chunk-2FJMTZNJ.js → chunk-IJST4EBM.js} +8 -8
  30. package/dist/{chunk-2FJMTZNJ.js.map → chunk-IJST4EBM.js.map} +1 -1
  31. package/dist/{chunk-3RJN2VTL.js → chunk-IXWJGOM2.js} +3 -3
  32. package/dist/{chunk-3RJN2VTL.js.map → chunk-IXWJGOM2.js.map} +1 -1
  33. package/dist/{chunk-CYNF5PZI.js → chunk-J5CWKFSC.js} +3 -3
  34. package/dist/{chunk-CYNF5PZI.js.map → chunk-J5CWKFSC.js.map} +1 -1
  35. package/dist/{chunk-TP6PLDNM.cjs → chunk-KMZWKSKO.cjs} +8 -8
  36. package/dist/{chunk-TP6PLDNM.cjs.map → chunk-KMZWKSKO.cjs.map} +1 -1
  37. package/dist/{chunk-C4WSHRR6.cjs → chunk-KPZZ5FHE.cjs} +32 -12
  38. package/dist/chunk-KPZZ5FHE.cjs.map +1 -0
  39. package/dist/{chunk-O2ODDTMA.cjs → chunk-LPYEUD2D.cjs} +9 -9
  40. package/dist/{chunk-O2ODDTMA.cjs.map → chunk-LPYEUD2D.cjs.map} +1 -1
  41. package/dist/{chunk-RA3ZJ45L.cjs → chunk-MFMASSEO.cjs} +25 -44
  42. package/dist/chunk-MFMASSEO.cjs.map +1 -0
  43. package/dist/chunk-NHZK64TQ.js +75 -0
  44. package/dist/chunk-NHZK64TQ.js.map +1 -0
  45. package/dist/{chunk-BPBSSMRB.js → chunk-NRFAWUVD.js} +3 -3
  46. package/dist/{chunk-BPBSSMRB.js.map → chunk-NRFAWUVD.js.map} +1 -1
  47. package/dist/chunk-NWNVWO6L.cjs +80 -0
  48. package/dist/chunk-NWNVWO6L.cjs.map +1 -0
  49. package/dist/{chunk-XGZX22ET.cjs → chunk-O2GW5IY6.cjs} +38 -38
  50. package/dist/{chunk-XGZX22ET.cjs.map → chunk-O2GW5IY6.cjs.map} +1 -1
  51. package/dist/{chunk-33ZOUJXA.js → chunk-OBWYM25Y.js} +13 -32
  52. package/dist/chunk-OBWYM25Y.js.map +1 -0
  53. package/dist/{chunk-Y3KA6X7B.js → chunk-OVR3XMYL.js} +4 -4
  54. package/dist/{chunk-Y3KA6X7B.js.map → chunk-OVR3XMYL.js.map} +1 -1
  55. package/dist/{chunk-ABUO6PIQ.cjs → chunk-RB7GX2VT.cjs} +12 -12
  56. package/dist/{chunk-ABUO6PIQ.cjs.map → chunk-RB7GX2VT.cjs.map} +1 -1
  57. package/dist/chunk-RXK3XP62.cjs +144 -0
  58. package/dist/chunk-RXK3XP62.cjs.map +1 -0
  59. package/dist/{chunk-LYUO3E6V.js → chunk-SZOFGU7W.js} +3 -3
  60. package/dist/{chunk-LYUO3E6V.js.map → chunk-SZOFGU7W.js.map} +1 -1
  61. package/dist/{chunk-A6J2IBUG.js → chunk-T5B7FM7S.js} +4 -4
  62. package/dist/{chunk-A6J2IBUG.js.map → chunk-T5B7FM7S.js.map} +1 -1
  63. package/dist/{chunk-YNIBUKV5.js → chunk-TBEVGWY3.js} +32 -14
  64. package/dist/chunk-TBEVGWY3.js.map +1 -0
  65. package/dist/{chunk-MJCCBMM5.cjs → chunk-TC3RQNEX.cjs} +6 -80
  66. package/dist/chunk-TC3RQNEX.cjs.map +1 -0
  67. package/dist/{chunk-QIMVTGKS.cjs → chunk-U73KPFYH.cjs} +255 -2
  68. package/dist/chunk-U73KPFYH.cjs.map +1 -0
  69. package/dist/{chunk-HFGXA5CL.cjs → chunk-UTTTJSQU.cjs} +4 -4
  70. package/dist/{chunk-HFGXA5CL.cjs.map → chunk-UTTTJSQU.cjs.map} +1 -1
  71. package/dist/{chunk-DLBUFHLY.js → chunk-VTTZZ4FN.js} +4 -74
  72. package/dist/chunk-VTTZZ4FN.js.map +1 -0
  73. package/dist/{chunk-5FTIHRZH.cjs → chunk-XVUOMWMD.cjs} +4 -4
  74. package/dist/{chunk-5FTIHRZH.cjs.map → chunk-XVUOMWMD.cjs.map} +1 -1
  75. package/dist/{chunk-444XKG46.js → chunk-YKQ2DPIP.js} +3 -3
  76. package/dist/{chunk-444XKG46.js.map → chunk-YKQ2DPIP.js.map} +1 -1
  77. package/dist/{chunk-HEMU73OP.cjs → chunk-YSHIC4NJ.cjs} +4 -4
  78. package/dist/{chunk-HEMU73OP.cjs.map → chunk-YSHIC4NJ.cjs.map} +1 -1
  79. package/dist/citations/index.cjs +12 -12
  80. package/dist/citations/index.js +3 -3
  81. package/dist/connect/docx.cjs +11 -11
  82. package/dist/connect/docx.js +8 -8
  83. package/dist/connect/index.cjs +1079 -333
  84. package/dist/connect/index.cjs.map +1 -1
  85. package/dist/connect/index.d.ts +2 -0
  86. package/dist/connect/index.js +953 -222
  87. package/dist/connect/index.js.map +1 -1
  88. package/dist/connection/ConnectedNotificationRelevance.d.ts +4 -1
  89. package/dist/connection/ConnectedSettings.d.ts +3 -2
  90. package/dist/connection/ai.d.ts +27 -72
  91. package/dist/connection/settings-page/ConnectedAccountSettings.d.ts +35 -0
  92. package/dist/connection/settings-page/ConnectedMailSettings.d.ts +13 -0
  93. package/dist/connection/settings-page/ConnectedPremiumModels.d.ts +1 -0
  94. package/dist/connection/settings-page/ConnectedPrivacySettings.d.ts +12 -0
  95. package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +29 -0
  96. package/dist/connection/settings-page/SessionStatusIcon.d.ts +7 -0
  97. package/dist/connection/settings-page/index.d.ts +6 -0
  98. package/dist/connection/workspace-settings/ConnectedWorkspaceSettings.d.ts +53 -0
  99. package/dist/connection/workspace-settings/index.d.ts +2 -0
  100. package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +85 -0
  101. package/dist/connection/workspaceData.d.ts +6 -6
  102. package/dist/facts/index.cjs +3 -3
  103. package/dist/facts/index.js +2 -2
  104. package/dist/files/index.cjs +3 -3
  105. package/dist/files/index.js +2 -2
  106. package/dist/home/index.cjs +20 -20
  107. package/dist/home/index.js +4 -4
  108. package/dist/index.cjs +468 -632
  109. package/dist/index.cjs.map +1 -1
  110. package/dist/index.d.ts +1 -0
  111. package/dist/index.js +23 -204
  112. package/dist/index.js.map +1 -1
  113. package/dist/provider/BlocksProvider.d.ts +5 -1
  114. package/dist/provider/settings-section.d.ts +9 -0
  115. package/dist/retrieval/index.cjs +4 -4
  116. package/dist/retrieval/index.js +2 -2
  117. package/dist/settings/AppearanceSettings.d.ts +18 -0
  118. package/dist/settings/ServerConnectionControls.d.ts +16 -0
  119. package/dist/settings/SettingsPage.d.ts +31 -0
  120. package/dist/settings/index.cjs +178 -241
  121. package/dist/settings/index.cjs.map +1 -1
  122. package/dist/settings/index.d.ts +3 -1
  123. package/dist/settings/index.js +86 -198
  124. package/dist/settings/index.js.map +1 -1
  125. package/dist/shell/index.cjs +44 -44
  126. package/dist/shell/index.js +3 -3
  127. package/dist/site/index.cjs +74 -73
  128. package/dist/site/index.js +3 -2
  129. package/dist/studio/index.cjs +78 -77
  130. package/dist/studio/index.cjs.map +1 -1
  131. package/dist/studio/index.js +10 -9
  132. package/dist/studio/index.js.map +1 -1
  133. package/dist/workflow-canvas/index.cjs +25 -25
  134. package/dist/workflow-canvas/index.js +8 -8
  135. package/dist/workspaces/CommonWorkspaceToggle.d.ts +15 -0
  136. package/dist/workspaces/index.cjs +41 -110
  137. package/dist/workspaces/index.cjs.map +1 -1
  138. package/dist/workspaces/index.d.ts +1 -0
  139. package/dist/workspaces/index.js +7 -104
  140. package/dist/workspaces/index.js.map +1 -1
  141. package/node_modules/@arbidocs/coedit/package.json +1 -1
  142. package/package.json +4 -4
  143. package/dist/chunk-33ZOUJXA.js.map +0 -1
  144. package/dist/chunk-45LRMW54.js.map +0 -1
  145. package/dist/chunk-7NGAWGA3.js.map +0 -1
  146. package/dist/chunk-BUWBXJ2N.cjs.map +0 -1
  147. package/dist/chunk-C4WSHRR6.cjs.map +0 -1
  148. package/dist/chunk-DLBUFHLY.js.map +0 -1
  149. package/dist/chunk-JZNXRMLH.cjs.map +0 -1
  150. package/dist/chunk-MJCCBMM5.cjs.map +0 -1
  151. package/dist/chunk-ON3TKY5Y.js.map +0 -1
  152. package/dist/chunk-QIMVTGKS.cjs.map +0 -1
  153. package/dist/chunk-RA3ZJ45L.cjs.map +0 -1
  154. package/dist/chunk-YNIBUKV5.js.map +0 -1
@@ -0,0 +1,80 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ // src/theme/fontPairings.ts
5
+ var SERIF_TAIL = "ui-serif, Georgia, serif";
6
+ var SANS_TAIL = "ui-sans-serif, system-ui, sans-serif";
7
+ var FONT_PAIRINGS = [
8
+ {
9
+ id: "system",
10
+ label: "System",
11
+ description: "The reader\u2019s own interface font. Loads nothing.",
12
+ display: SANS_TAIL,
13
+ sans: SANS_TAIL,
14
+ packages: []
15
+ },
16
+ {
17
+ id: "office",
18
+ label: "Office (Segoe UI)",
19
+ description: "The Microsoft Office interface face where installed (Word, Outlook), Inter elsewhere.",
20
+ display: `"Segoe UI Variable Text", "Segoe UI", "Inter Variable", ${SANS_TAIL}`,
21
+ sans: `"Segoe UI Variable Text", "Segoe UI", "Inter Variable", ${SANS_TAIL}`,
22
+ packages: ["@fontsource-variable/inter"]
23
+ },
24
+ {
25
+ id: "newsreader-inter",
26
+ label: "Newsreader / Inter",
27
+ description: "Editorial serif headlines over a neutral, highly legible body.",
28
+ display: `"Newsreader Variable", ${SERIF_TAIL}`,
29
+ sans: `"Inter Variable", ${SANS_TAIL}`,
30
+ packages: ["@fontsource-variable/newsreader", "@fontsource-variable/inter"]
31
+ },
32
+ {
33
+ id: "fraunces-inter",
34
+ label: "Fraunces / Inter",
35
+ description: "Characterful, slightly literary display with a quiet body.",
36
+ display: `"Fraunces Variable", ${SERIF_TAIL}`,
37
+ sans: `"Inter Variable", ${SANS_TAIL}`,
38
+ packages: ["@fontsource-variable/fraunces", "@fontsource-variable/inter"]
39
+ },
40
+ {
41
+ id: "source-serif-inter",
42
+ label: "Source Serif / Inter",
43
+ description: "A workhorse serif for headings; sober and institutional.",
44
+ display: `"Source Serif 4 Variable", ${SERIF_TAIL}`,
45
+ sans: `"Inter Variable", ${SANS_TAIL}`,
46
+ packages: ["@fontsource-variable/source-serif-4", "@fontsource-variable/inter"]
47
+ },
48
+ {
49
+ id: "inter",
50
+ label: "Inter",
51
+ description: "One neutral grotesque throughout. Product-like, no contrast.",
52
+ display: `"Inter Variable", ${SANS_TAIL}`,
53
+ sans: `"Inter Variable", ${SANS_TAIL}`,
54
+ packages: ["@fontsource-variable/inter"]
55
+ },
56
+ {
57
+ id: "montserrat-nunito",
58
+ label: "Montserrat / Nunito",
59
+ description: "Geometric headings over a rounded body. ARBI\u2019s historic look.",
60
+ display: `"Montserrat Variable", ${SANS_TAIL}`,
61
+ sans: `"Nunito Variable", ${SANS_TAIL}`,
62
+ packages: ["@fontsource-variable/montserrat", "@fontsource-variable/nunito"]
63
+ }
64
+ ];
65
+ function getFontPairing(id) {
66
+ return FONT_PAIRINGS.find((p) => p.id === id);
67
+ }
68
+ function matchFontPairing(fonts) {
69
+ return FONT_PAIRINGS.find((p) => p.display === fonts.display && p.sans === fonts.sans);
70
+ }
71
+ function fontPackages(pairings = FONT_PAIRINGS) {
72
+ return [...new Set(pairings.flatMap((p) => p.packages))].sort();
73
+ }
74
+
75
+ exports.FONT_PAIRINGS = FONT_PAIRINGS;
76
+ exports.fontPackages = fontPackages;
77
+ exports.getFontPairing = getFontPairing;
78
+ exports.matchFontPairing = matchFontPairing;
79
+ //# sourceMappingURL=chunk-NWNVWO6L.cjs.map
80
+ //# sourceMappingURL=chunk-NWNVWO6L.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/fontPairings.ts"],"names":[],"mappings":"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","file":"chunk-NWNVWO6L.cjs","sourcesContent":["/**\n * Curated typography pairings — the choice a user actually makes.\n *\n * A pairing is a display face + a body face that are known to sit well together,\n * so picking typography means picking a *look*, not authoring two CSS font\n * stacks. The raw stacks remain editable for power users.\n *\n * DATA ONLY. This module names families; it never loads them, so the kit takes no\n * font dependency. Web fonts are self-hosted per app (`@fontsource-variable/*`\n * imported from the app's entry or stylesheet); `fontPackages()` reports exactly\n * which packages a set of pairings needs. A pairing whose family an app has not\n * imported does not error — it falls back down its own stack — so an app that\n * offers a pairing must also ship its fonts.\n */\n\nexport interface FontPairing {\n id: string\n /** Shown in the picker, e.g. \"Newsreader / Inter\". */\n label: string\n /** One line on the character of the pairing. */\n description: string\n /** Font stack for headings (`--font-display`). */\n display: string\n /** Font stack for body copy (`--font-sans`). */\n sans: string\n /**\n * The npm packages an app must install + import to actually render this\n * pairing, e.g. `['@fontsource-variable/inter']`. Empty when the pairing uses\n * only system faces.\n */\n packages: string[]\n}\n\n/** Fallback tails, so a missing web font degrades to something sane. */\nconst SERIF_TAIL = 'ui-serif, Georgia, serif'\nconst SANS_TAIL = 'ui-sans-serif, system-ui, sans-serif'\n\n/**\n * The shipped catalog. Every entry uses variable fonts (one file per family)\n * rather than per-weight static files.\n */\nexport const FONT_PAIRINGS: FontPairing[] = [\n {\n id: 'system',\n label: 'System',\n description: 'The reader’s own interface font. Loads nothing.',\n display: SANS_TAIL,\n sans: SANS_TAIL,\n packages: [],\n },\n {\n id: 'office',\n label: 'Office (Segoe UI)',\n description:\n 'The Microsoft Office interface face where installed (Word, Outlook), Inter elsewhere.',\n display: `\"Segoe UI Variable Text\", \"Segoe UI\", \"Inter Variable\", ${SANS_TAIL}`,\n sans: `\"Segoe UI Variable Text\", \"Segoe UI\", \"Inter Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/inter'],\n },\n {\n id: 'newsreader-inter',\n label: 'Newsreader / Inter',\n description: 'Editorial serif headlines over a neutral, highly legible body.',\n display: `\"Newsreader Variable\", ${SERIF_TAIL}`,\n sans: `\"Inter Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/newsreader', '@fontsource-variable/inter'],\n },\n {\n id: 'fraunces-inter',\n label: 'Fraunces / Inter',\n description: 'Characterful, slightly literary display with a quiet body.',\n display: `\"Fraunces Variable\", ${SERIF_TAIL}`,\n sans: `\"Inter Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/fraunces', '@fontsource-variable/inter'],\n },\n {\n id: 'source-serif-inter',\n label: 'Source Serif / Inter',\n description: 'A workhorse serif for headings; sober and institutional.',\n display: `\"Source Serif 4 Variable\", ${SERIF_TAIL}`,\n sans: `\"Inter Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/source-serif-4', '@fontsource-variable/inter'],\n },\n {\n id: 'inter',\n label: 'Inter',\n description: 'One neutral grotesque throughout. Product-like, no contrast.',\n display: `\"Inter Variable\", ${SANS_TAIL}`,\n sans: `\"Inter Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/inter'],\n },\n {\n id: 'montserrat-nunito',\n label: 'Montserrat / Nunito',\n description: 'Geometric headings over a rounded body. ARBI’s historic look.',\n display: `\"Montserrat Variable\", ${SANS_TAIL}`,\n sans: `\"Nunito Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/montserrat', '@fontsource-variable/nunito'],\n },\n]\n\n/** Look a pairing up by id. Returns undefined for an unknown id. */\nexport function getFontPairing(id: string): FontPairing | undefined {\n return FONT_PAIRINGS.find((p) => p.id === id)\n}\n\n/**\n * The pairing whose stacks match `fonts`, or undefined when the stacks have been\n * hand-edited away from every preset. Lets a picker show \"Custom\" honestly.\n */\nexport function matchFontPairing(fonts: {\n display: string\n sans: string\n}): FontPairing | undefined {\n return FONT_PAIRINGS.find((p) => p.display === fonts.display && p.sans === fonts.sans)\n}\n\n/** Every npm package needed to render the given pairings (deduped). */\nexport function fontPackages(pairings: FontPairing[] = FONT_PAIRINGS): string[] {\n return [...new Set(pairings.flatMap((p) => p.packages))].sort()\n}\n"]}
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkABUO6PIQ_cjs = require('./chunk-ABUO6PIQ.cjs');
4
+ var chunkRB7GX2VT_cjs = require('./chunk-RB7GX2VT.cjs');
5
5
  var chunkRFIBUWLF_cjs = require('./chunk-RFIBUWLF.cjs');
6
- var chunkO2ODDTMA_cjs = require('./chunk-O2ODDTMA.cjs');
7
- var chunkWS5EX7DN_cjs = require('./chunk-WS5EX7DN.cjs');
8
- var chunkRQ2Y7USX_cjs = require('./chunk-RQ2Y7USX.cjs');
6
+ var chunkLPYEUD2D_cjs = require('./chunk-LPYEUD2D.cjs');
7
+ var chunkEYKISBDO_cjs = require('./chunk-EYKISBDO.cjs');
9
8
  var chunkAHDJXIUB_cjs = require('./chunk-AHDJXIUB.cjs');
9
+ var chunkRQ2Y7USX_cjs = require('./chunk-RQ2Y7USX.cjs');
10
10
  var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
11
11
  var chunk3AFWGEDJ_cjs = require('./chunk-3AFWGEDJ.cjs');
12
12
  var chunkDVUZTGVL_cjs = require('./chunk-DVUZTGVL.cjs');
13
- var chunkR26BK7YL_cjs = require('./chunk-R26BK7YL.cjs');
13
+ var chunkDTROMMDX_cjs = require('./chunk-DTROMMDX.cjs');
14
14
  var chunkV4ISCZJ7_cjs = require('./chunk-V4ISCZJ7.cjs');
15
15
  var chunk2EI7NCUA_cjs = require('./chunk-2EI7NCUA.cjs');
16
16
  var chunkC2CWWEHO_cjs = require('./chunk-C2CWWEHO.cjs');
@@ -20,7 +20,7 @@ var chunk76L6LOP3_cjs = require('./chunk-76L6LOP3.cjs');
20
20
  var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
21
21
  var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
22
22
  var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
23
- var chunkC4WSHRR6_cjs = require('./chunk-C4WSHRR6.cjs');
23
+ var chunkKPZZ5FHE_cjs = require('./chunk-KPZZ5FHE.cjs');
24
24
  var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
25
25
  var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
26
26
  var jsxRuntime = require('react/jsx-runtime');
@@ -32,7 +32,7 @@ function defaultScopeRenderer(scopeSource) {
32
32
  if (!scopeSource) return void 0;
33
33
  return function renderScope(_field, value, onChange) {
34
34
  return /* @__PURE__ */ jsxRuntime.jsx(
35
- chunkWS5EX7DN_cjs.ScopePicker,
35
+ chunkEYKISBDO_cjs.ScopePicker,
36
36
  {
37
37
  folders: scopeSource.folders,
38
38
  unfiledCount: scopeSource.unfiledCount,
@@ -96,7 +96,7 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
96
96
  }, delayMs)
97
97
  );
98
98
  }, [states, steps, workflow]);
99
- return chunkABUO6PIQ_cjs.useWorkflowView({
99
+ return chunkRB7GX2VT_cjs.useWorkflowView({
100
100
  steps,
101
101
  states,
102
102
  inputs,
@@ -166,7 +166,7 @@ function AgentCard({
166
166
  ] }),
167
167
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
168
168
  href ? /* @__PURE__ */ jsxRuntime.jsx(
169
- chunkR26BK7YL_cjs.ActionLink,
169
+ chunkDTROMMDX_cjs.ActionLink,
170
170
  {
171
171
  href,
172
172
  onSelect,
@@ -386,7 +386,7 @@ function SkillCard({
386
386
  className
387
387
  ),
388
388
  onClick,
389
- onKeyDown: chunkABUO6PIQ_cjs.activateOnKey(onClick),
389
+ onKeyDown: chunkRB7GX2VT_cjs.activateOnKey(onClick),
390
390
  "data-skill-name": name,
391
391
  "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId ?? testIds?.root, { testId: "skill-card" }),
392
392
  "data-slot": "skill-card",
@@ -395,7 +395,7 @@ function SkillCard({
395
395
  href ? (
396
396
  // The link owns plain + modified clicks; stop the row handler from double-firing.
397
397
  /* @__PURE__ */ jsxRuntime.jsx("span", { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsxs(
398
- chunkR26BK7YL_cjs.ActionLink,
398
+ chunkDTROMMDX_cjs.ActionLink,
399
399
  {
400
400
  href,
401
401
  onSelect: onClick,
@@ -410,12 +410,12 @@ function SkillCard({
410
410
  "/",
411
411
  name
412
412
  ] }),
413
- type && type !== "markdown" && /* @__PURE__ */ jsxRuntime.jsx(chunkABUO6PIQ_cjs.SkillTypeBadge, { type }),
414
- isGlobal && /* @__PURE__ */ jsxRuntime.jsx(chunkABUO6PIQ_cjs.SkillGlobalBadge, { labels: l }),
413
+ type && type !== "markdown" && /* @__PURE__ */ jsxRuntime.jsx(chunkRB7GX2VT_cjs.SkillTypeBadge, { type }),
414
+ isGlobal && /* @__PURE__ */ jsxRuntime.jsx(chunkRB7GX2VT_cjs.SkillGlobalBadge, { labels: l }),
415
415
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 text-sm text-muted-foreground max-sm:order-last max-sm:w-full max-sm:line-clamp-2 sm:flex-1 sm:truncate", children: description }),
416
416
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto flex shrink-0 items-center gap-1", "data-slot": "skill-card-actions", children: [
417
417
  /* @__PURE__ */ jsxRuntime.jsx(
418
- chunkABUO6PIQ_cjs.SkillActionButton,
418
+ chunkRB7GX2VT_cjs.SkillActionButton,
419
419
  {
420
420
  label: l.preview,
421
421
  onClick: onPreview,
@@ -424,7 +424,7 @@ function SkillCard({
424
424
  }
425
425
  ),
426
426
  /* @__PURE__ */ jsxRuntime.jsx(
427
- chunkABUO6PIQ_cjs.SkillActionButton,
427
+ chunkRB7GX2VT_cjs.SkillActionButton,
428
428
  {
429
429
  label: l.edit,
430
430
  onClick: onEdit,
@@ -433,7 +433,7 @@ function SkillCard({
433
433
  }
434
434
  ),
435
435
  /* @__PURE__ */ jsxRuntime.jsx(
436
- chunkABUO6PIQ_cjs.SkillActionButton,
436
+ chunkRB7GX2VT_cjs.SkillActionButton,
437
437
  {
438
438
  label: l.export,
439
439
  onClick: onExport,
@@ -442,7 +442,7 @@ function SkillCard({
442
442
  }
443
443
  ),
444
444
  isOwner && onToggleVisibility && /* @__PURE__ */ jsxRuntime.jsx(
445
- chunkABUO6PIQ_cjs.SkillActionButton,
445
+ chunkRB7GX2VT_cjs.SkillActionButton,
446
446
  {
447
447
  label: isGlobal ? l.makePrivate : l.publish,
448
448
  tooltip: isGlobal ? l.makePrivateTooltip : l.publish,
@@ -497,7 +497,7 @@ function SkillRow({
497
497
  className
498
498
  ),
499
499
  onClick: onInvoke,
500
- onKeyDown: chunkABUO6PIQ_cjs.activateOnKey(onInvoke),
500
+ onKeyDown: chunkRB7GX2VT_cjs.activateOnKey(onInvoke),
501
501
  "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: `skills-panel-row-${name}` }),
502
502
  "data-slot": "skill-row",
503
503
  title: l.insertTitle(name),
@@ -507,7 +507,7 @@ function SkillRow({
507
507
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
508
508
  href ? (
509
509
  // The link owns plain + modified clicks; stop the row handler from double-firing.
510
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsxs(chunkR26BK7YL_cjs.ActionLink, { href, onSelect: onInvoke, className: "truncate font-mono text-sm", children: [
510
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsxs(chunkDTROMMDX_cjs.ActionLink, { href, onSelect: onInvoke, className: "truncate font-mono text-sm", children: [
511
511
  "/",
512
512
  name
513
513
  ] }) })
@@ -515,23 +515,23 @@ function SkillRow({
515
515
  "/",
516
516
  name
517
517
  ] }),
518
- type && type !== "markdown" && /* @__PURE__ */ jsxRuntime.jsx(chunkABUO6PIQ_cjs.SkillTypeBadge, { type }),
519
- isGlobal && /* @__PURE__ */ jsxRuntime.jsx(chunkABUO6PIQ_cjs.SkillGlobalBadge, { labels: l })
518
+ type && type !== "markdown" && /* @__PURE__ */ jsxRuntime.jsx(chunkRB7GX2VT_cjs.SkillTypeBadge, { type }),
519
+ isGlobal && /* @__PURE__ */ jsxRuntime.jsx(chunkRB7GX2VT_cjs.SkillGlobalBadge, { labels: l })
520
520
  ] }),
521
521
  description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-xs text-muted-foreground", children: description })
522
522
  ] }),
523
523
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-0.5", children: [
524
- /* @__PURE__ */ jsxRuntime.jsx(chunkABUO6PIQ_cjs.SkillActionButton, { label: l.preview, onClick: () => onPreview(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "size-4" }) }),
525
- onEdit && /* @__PURE__ */ jsxRuntime.jsx(chunkABUO6PIQ_cjs.SkillActionButton, { label: l.edit, onClick: () => onEdit(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "size-4" }) }),
524
+ /* @__PURE__ */ jsxRuntime.jsx(chunkRB7GX2VT_cjs.SkillActionButton, { label: l.preview, onClick: () => onPreview(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "size-4" }) }),
525
+ onEdit && /* @__PURE__ */ jsxRuntime.jsx(chunkRB7GX2VT_cjs.SkillActionButton, { label: l.edit, onClick: () => onEdit(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "size-4" }) }),
526
526
  onTogglePublish && /* @__PURE__ */ jsxRuntime.jsx(
527
- chunkABUO6PIQ_cjs.SkillActionButton,
527
+ chunkRB7GX2VT_cjs.SkillActionButton,
528
528
  {
529
529
  label: isGlobal ? l.makePrivate : l.publish,
530
530
  onClick: () => onTogglePublish(),
531
531
  children: isGlobal ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Lock, { className: "size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Globe, { className: "size-4 text-primary" })
532
532
  }
533
533
  ),
534
- onDelete && /* @__PURE__ */ jsxRuntime.jsx(chunkABUO6PIQ_cjs.SkillActionButton, { label: l.delete, onClick: () => onDelete(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "size-4 text-destructive" }) })
534
+ onDelete && /* @__PURE__ */ jsxRuntime.jsx(chunkRB7GX2VT_cjs.SkillActionButton, { label: l.delete, onClick: () => onDelete(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "size-4 text-destructive" }) })
535
535
  ] })
536
536
  ]
537
537
  }
@@ -1965,7 +1965,7 @@ function TaskTable(props) {
1965
1965
  isMe: mine
1966
1966
  };
1967
1967
  };
1968
- const renderPerson = props.renderPerson ?? ((person) => /* @__PURE__ */ jsxRuntime.jsx(chunkO2ODDTMA_cjs.PersonPill, { person }));
1968
+ const renderPerson = props.renderPerson ?? ((person) => /* @__PURE__ */ jsxRuntime.jsx(chunkLPYEUD2D_cjs.PersonPill, { person }));
1969
1969
  const q = (query.trim() || (props.filterText ?? "").trim()).toLowerCase();
1970
1970
  const counts = react.useMemo(() => {
1971
1971
  const map = new Map(STATUS_ORDER.map((s) => [s, 0]));
@@ -2579,7 +2579,7 @@ function TaskInbox(p) {
2579
2579
  else next.add(id);
2580
2580
  return next;
2581
2581
  });
2582
- p.renderPerson ?? ((value) => /* @__PURE__ */ jsxRuntime.jsx(chunkO2ODDTMA_cjs.PersonPill, { person: value }));
2582
+ p.renderPerson ?? ((value) => /* @__PURE__ */ jsxRuntime.jsx(chunkLPYEUD2D_cjs.PersonPill, { person: value }));
2583
2583
  const taskById = new Map(all.map((t) => [t.external_id, t]));
2584
2584
  const visible = new Set(rows.map((t) => t.external_id));
2585
2585
  for (const task of rows) {
@@ -4518,7 +4518,7 @@ function WorkflowRunStatus({
4518
4518
  const ordered = chunkJSTKEZBS_cjs.stepLevels(steps).flat();
4519
4519
  const phaseOf = (id) => isLoading ? "blocked" : chunkJSTKEZBS_cjs.stepPhase(steps, states, id);
4520
4520
  const finished = !isLoading && chunkJSTKEZBS_cjs.isRunFinished(steps, states);
4521
- const atId = finished || isLoading ? void 0 : chunkABUO6PIQ_cjs.activeStepId(chunkJSTKEZBS_cjs.stepLevels(steps), phaseOf);
4521
+ const atId = finished || isLoading ? void 0 : chunkRB7GX2VT_cjs.activeStepId(chunkJSTKEZBS_cjs.stepLevels(steps), phaseOf);
4522
4522
  const at = ordered.find((s) => s.id === atId);
4523
4523
  const phase = at ? phaseOf(at.id) : "done";
4524
4524
  const assignee = at && ["ready", "waiting"].includes(phase) ? assigneeOf?.(at) : void 0;
@@ -4791,7 +4791,7 @@ function WorkflowThreadStrip({
4791
4791
  className
4792
4792
  }) {
4793
4793
  const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels };
4794
- const barL = { ...chunkABUO6PIQ_cjs.DEFAULT_STEP_BAR_LABELS, ...barLabels };
4794
+ const barL = { ...chunkRB7GX2VT_cjs.DEFAULT_STEP_BAR_LABELS, ...barLabels };
4795
4795
  const grouped = groupThreadActivity(steps, items);
4796
4796
  const strays = signals.filter((s) => !steps.some((step) => step.id === s.step));
4797
4797
  const link = /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "wf-link wf-kind-start max-w-6", "data-done": true });
@@ -4845,7 +4845,7 @@ function WorkflowThreadStrip({
4845
4845
  waiting
4846
4846
  ] })
4847
4847
  ] }),
4848
- labelClassName: isCurrent ? chunkABUO6PIQ_cjs.STEP_LABEL_CURRENT : ui.cn(chunkABUO6PIQ_cjs.STEP_LABEL, chunkABUO6PIQ_cjs.STEP_LABEL_MAX),
4848
+ labelClassName: isCurrent ? chunkRB7GX2VT_cjs.STEP_LABEL_CURRENT : ui.cn(chunkRB7GX2VT_cjs.STEP_LABEL, chunkRB7GX2VT_cjs.STEP_LABEL_MAX),
4849
4849
  className: ui.cn(latestDoc && "rounded-r-none"),
4850
4850
  title: waiting ? `${step.title} \xB7 ${waiting}` : step.title,
4851
4851
  "data-testid": `workflow-thread-step-${step.id}`,
@@ -4965,7 +4965,7 @@ function WorkflowThreadStrip({
4965
4965
  ] }),
4966
4966
  strays.map((s) => /* @__PURE__ */ jsxRuntime.jsx(SignalPill, { signal: s, l }, `${s.step}-${s.signal}`))
4967
4967
  ] }) : null;
4968
- const at = steps.find((s) => s.id === (selected ?? chunkABUO6PIQ_cjs.activeStepId(chunkJSTKEZBS_cjs.stepLevels(steps), phaseOf)));
4968
+ const at = steps.find((s) => s.id === (selected ?? chunkRB7GX2VT_cjs.activeStepId(chunkJSTKEZBS_cjs.stepLevels(steps), phaseOf)));
4969
4969
  const headingPx = (step) => `${l.kinds[chunkJSTKEZBS_cjs.stepKindOf(step)]} \xB7 ${waitingOf(step.id) ?? ""}`.length * 5.6 - step.title.length * 6.5;
4970
4970
  const reserve = {
4971
4971
  always: (at ? Math.max(0, headingPx(at)) : 0) + steps.filter((s) => grouped.byStep[s.id]?.length).length * BEADS_PX + (onOpenDocument ? steps.filter((s) => chunkJSTKEZBS_cjs.stepDocuments(steps, states, s.id).length).length * DOC_BUTTON_PX : 0),
@@ -4973,7 +4973,7 @@ function WorkflowThreadStrip({
4973
4973
  trailing: trailing ? 120 : 0
4974
4974
  };
4975
4975
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("min-w-0 flex-1", className), "data-testid": "workflow-thread-strip", children: /* @__PURE__ */ jsxRuntime.jsx(
4976
- chunkABUO6PIQ_cjs.StepBarFrame,
4976
+ chunkRB7GX2VT_cjs.StepBarFrame,
4977
4977
  {
4978
4978
  levels: chunkJSTKEZBS_cjs.stepLevels(steps),
4979
4979
  phaseOf,
@@ -5590,7 +5590,7 @@ function WorkflowComposer({
5590
5590
  },
5591
5591
  "data-testid": `${id}-dropzone`,
5592
5592
  children: /* @__PURE__ */ jsxRuntime.jsx(
5593
- chunkWS5EX7DN_cjs.AddFilesFirst,
5593
+ chunkEYKISBDO_cjs.AddFilesFirst,
5594
5594
  {
5595
5595
  reason: l.addFilesReason,
5596
5596
  action: addFilesAction,
@@ -5600,7 +5600,7 @@ function WorkflowComposer({
5600
5600
  }
5601
5601
  ),
5602
5602
  !noFiles && workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
5603
- chunkO2ODDTMA_cjs.SchemaForm,
5603
+ chunkLPYEUD2D_cjs.SchemaForm,
5604
5604
  {
5605
5605
  fields,
5606
5606
  values: values.inputs,
@@ -6233,7 +6233,7 @@ function WorkTaskComposer({
6233
6233
  )
6234
6234
  ] }),
6235
6235
  workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
6236
- chunkO2ODDTMA_cjs.SchemaForm,
6236
+ chunkLPYEUD2D_cjs.SchemaForm,
6237
6237
  {
6238
6238
  fields,
6239
6239
  values: values.inputs,
@@ -6747,7 +6747,7 @@ function ConfigFieldComponent({
6747
6747
  const fieldTestId = chunkMHVNT4J3_cjs.testIdOr(testIds?.field?.(section, fieldName), {
6748
6748
  testId: `config-field-${section}-${fieldName.replace(/\./g, "-")}`
6749
6749
  });
6750
- const { notify } = chunkC4WSHRR6_cjs.useBlocksEnvironment();
6750
+ const { notify } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
6751
6751
  const fieldId = `${section}-${fieldName}`;
6752
6752
  const label = fieldSchema.title || prettifyKey(fieldName.split(".").pop() ?? fieldName);
6753
6753
  const description = fieldSchema.description || "";
@@ -8366,5 +8366,5 @@ exports.useWorkflowPreview = useWorkflowPreview;
8366
8366
  exports.workflowTaskFields = workflowTaskFields;
8367
8367
  exports.workflowToComposerValues = workflowToComposerValues;
8368
8368
  exports.workflowWhen = workflowWhen;
8369
- //# sourceMappingURL=chunk-XGZX22ET.cjs.map
8370
- //# sourceMappingURL=chunk-XGZX22ET.cjs.map
8369
+ //# sourceMappingURL=chunk-O2GW5IY6.cjs.map
8370
+ //# sourceMappingURL=chunk-O2GW5IY6.cjs.map