@arbidocs/blocks 0.4.144 → 0.4.145

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 (146) hide show
  1. package/dist/agents/index.cjs +267 -267
  2. package/dist/agents/index.js +10 -10
  3. package/dist/chat/index.cjs +1 -1
  4. package/dist/chat/index.js +1 -1
  5. package/dist/{chunk-BUWBXJ2N.cjs → chunk-34GDGE77.cjs} +5 -5
  6. package/dist/{chunk-BUWBXJ2N.cjs.map → chunk-34GDGE77.cjs.map} +1 -1
  7. package/dist/{chunk-ON3TKY5Y.js → chunk-5YHEHEJT.js} +242 -4
  8. package/dist/chunk-5YHEHEJT.js.map +1 -0
  9. package/dist/{chunk-YFY3TQ6Q.cjs → chunk-COCGRJLA.cjs} +7 -7
  10. package/dist/{chunk-YFY3TQ6Q.cjs.map → chunk-COCGRJLA.cjs.map} +1 -1
  11. package/dist/{chunk-45LRMW54.js → chunk-DN2KI4BU.js} +8 -10
  12. package/dist/chunk-DN2KI4BU.js.map +1 -0
  13. package/dist/{chunk-R26BK7YL.cjs → chunk-DTROMMDX.cjs} +4 -4
  14. package/dist/{chunk-R26BK7YL.cjs.map → chunk-DTROMMDX.cjs.map} +1 -1
  15. package/dist/{chunk-65THHQVB.cjs → chunk-ECW2R2KF.cjs} +27 -27
  16. package/dist/{chunk-65THHQVB.cjs.map → chunk-ECW2R2KF.cjs.map} +1 -1
  17. package/dist/{chunk-RI6DZA5X.js → chunk-EF4ZLKRM.js} +3 -3
  18. package/dist/{chunk-RI6DZA5X.js.map → chunk-EF4ZLKRM.js.map} +1 -1
  19. package/dist/{chunk-WS5EX7DN.cjs → chunk-EYKISBDO.cjs} +5 -5
  20. package/dist/{chunk-WS5EX7DN.cjs.map → chunk-EYKISBDO.cjs.map} +1 -1
  21. package/dist/{chunk-JZNXRMLH.cjs → chunk-GAYMJWTC.cjs} +8 -10
  22. package/dist/chunk-GAYMJWTC.cjs.map +1 -0
  23. package/dist/{chunk-I7WG3JRD.js → chunk-H4D7WKDY.js} +3 -3
  24. package/dist/{chunk-I7WG3JRD.js.map → chunk-H4D7WKDY.js.map} +1 -1
  25. package/dist/{chunk-3RJN2VTL.js → chunk-IXWJGOM2.js} +3 -3
  26. package/dist/{chunk-3RJN2VTL.js.map → chunk-IXWJGOM2.js.map} +1 -1
  27. package/dist/{chunk-7NGAWGA3.js → chunk-J4M37SXY.js} +3 -3
  28. package/dist/{chunk-7NGAWGA3.js.map → chunk-J4M37SXY.js.map} +1 -1
  29. package/dist/{chunk-CYNF5PZI.js → chunk-J5CWKFSC.js} +3 -3
  30. package/dist/{chunk-CYNF5PZI.js.map → chunk-J5CWKFSC.js.map} +1 -1
  31. package/dist/{chunk-TP6PLDNM.cjs → chunk-KMZWKSKO.cjs} +8 -8
  32. package/dist/{chunk-TP6PLDNM.cjs.map → chunk-KMZWKSKO.cjs.map} +1 -1
  33. package/dist/{chunk-XGZX22ET.cjs → chunk-KPO67GBR.cjs} +39 -39
  34. package/dist/{chunk-XGZX22ET.cjs.map → chunk-KPO67GBR.cjs.map} +1 -1
  35. package/dist/{chunk-C4WSHRR6.cjs → chunk-KPZZ5FHE.cjs} +32 -12
  36. package/dist/chunk-KPZZ5FHE.cjs.map +1 -0
  37. package/dist/{chunk-X3TGXEFS.js → chunk-KTSF4HFC.js} +7 -7
  38. package/dist/{chunk-X3TGXEFS.js.map → chunk-KTSF4HFC.js.map} +1 -1
  39. package/dist/{chunk-33ZOUJXA.js → chunk-NGDXDHLG.js} +13 -32
  40. package/dist/chunk-NGDXDHLG.js.map +1 -0
  41. package/dist/chunk-NHZK64TQ.js +75 -0
  42. package/dist/chunk-NHZK64TQ.js.map +1 -0
  43. package/dist/{chunk-BPBSSMRB.js → chunk-NRFAWUVD.js} +3 -3
  44. package/dist/{chunk-BPBSSMRB.js.map → chunk-NRFAWUVD.js.map} +1 -1
  45. package/dist/{chunk-O2ODDTMA.cjs → chunk-NSNHRZBH.cjs} +8 -8
  46. package/dist/{chunk-O2ODDTMA.cjs.map → chunk-NSNHRZBH.cjs.map} +1 -1
  47. package/dist/chunk-NWNVWO6L.cjs +80 -0
  48. package/dist/chunk-NWNVWO6L.cjs.map +1 -0
  49. package/dist/{chunk-Y3KA6X7B.js → chunk-OVR3XMYL.js} +4 -4
  50. package/dist/{chunk-Y3KA6X7B.js.map → chunk-OVR3XMYL.js.map} +1 -1
  51. package/dist/{chunk-2FJMTZNJ.js → chunk-QOL3M4FJ.js} +9 -9
  52. package/dist/{chunk-2FJMTZNJ.js.map → chunk-QOL3M4FJ.js.map} +1 -1
  53. package/dist/{chunk-LYUO3E6V.js → chunk-SZOFGU7W.js} +3 -3
  54. package/dist/{chunk-LYUO3E6V.js.map → chunk-SZOFGU7W.js.map} +1 -1
  55. package/dist/{chunk-YNIBUKV5.js → chunk-TBEVGWY3.js} +32 -14
  56. package/dist/chunk-TBEVGWY3.js.map +1 -0
  57. package/dist/{chunk-MJCCBMM5.cjs → chunk-TC3RQNEX.cjs} +6 -80
  58. package/dist/chunk-TC3RQNEX.cjs.map +1 -0
  59. package/dist/{chunk-QIMVTGKS.cjs → chunk-U73KPFYH.cjs} +255 -2
  60. package/dist/chunk-U73KPFYH.cjs.map +1 -0
  61. package/dist/{chunk-RA3ZJ45L.cjs → chunk-ULPFRK3J.cjs} +25 -44
  62. package/dist/chunk-ULPFRK3J.cjs.map +1 -0
  63. package/dist/{chunk-HFGXA5CL.cjs → chunk-UTTTJSQU.cjs} +4 -4
  64. package/dist/{chunk-HFGXA5CL.cjs.map → chunk-UTTTJSQU.cjs.map} +1 -1
  65. package/dist/{chunk-DLBUFHLY.js → chunk-VTTZZ4FN.js} +4 -74
  66. package/dist/chunk-VTTZZ4FN.js.map +1 -0
  67. package/dist/{chunk-A6J2IBUG.js → chunk-VVZ34A2P.js} +3 -3
  68. package/dist/{chunk-A6J2IBUG.js.map → chunk-VVZ34A2P.js.map} +1 -1
  69. package/dist/{chunk-ABUO6PIQ.cjs → chunk-WO7QAVTL.cjs} +13 -13
  70. package/dist/{chunk-ABUO6PIQ.cjs.map → chunk-WO7QAVTL.cjs.map} +1 -1
  71. package/dist/{chunk-5FTIHRZH.cjs → chunk-XVUOMWMD.cjs} +4 -4
  72. package/dist/{chunk-5FTIHRZH.cjs.map → chunk-XVUOMWMD.cjs.map} +1 -1
  73. package/dist/{chunk-444XKG46.js → chunk-YKQ2DPIP.js} +3 -3
  74. package/dist/{chunk-444XKG46.js.map → chunk-YKQ2DPIP.js.map} +1 -1
  75. package/dist/{chunk-HEMU73OP.cjs → chunk-YSHIC4NJ.cjs} +4 -4
  76. package/dist/{chunk-HEMU73OP.cjs.map → chunk-YSHIC4NJ.cjs.map} +1 -1
  77. package/dist/citations/index.cjs +12 -12
  78. package/dist/citations/index.js +3 -3
  79. package/dist/collaboration/index.cjs +9 -9
  80. package/dist/collaboration/index.js +1 -1
  81. package/dist/connect/docx.cjs +11 -11
  82. package/dist/connect/docx.js +8 -8
  83. package/dist/connect/index.cjs +716 -329
  84. package/dist/connect/index.cjs.map +1 -1
  85. package/dist/connect/index.d.ts +1 -0
  86. package/dist/connect/index.js +591 -217
  87. package/dist/connect/index.js.map +1 -1
  88. package/dist/connection/ConnectedSettings.d.ts +3 -2
  89. package/dist/connection/ai.d.ts +27 -72
  90. package/dist/connection/settings-page/ConnectedAccountSettings.d.ts +35 -0
  91. package/dist/connection/settings-page/ConnectedMailSettings.d.ts +13 -0
  92. package/dist/connection/settings-page/ConnectedPremiumModels.d.ts +1 -0
  93. package/dist/connection/settings-page/ConnectedPrivacySettings.d.ts +12 -0
  94. package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +29 -0
  95. package/dist/connection/settings-page/SessionStatusIcon.d.ts +7 -0
  96. package/dist/connection/settings-page/index.d.ts +6 -0
  97. package/dist/connection/workspaceData.d.ts +6 -6
  98. package/dist/document-tools/index.cjs +1 -1
  99. package/dist/document-tools/index.js +1 -1
  100. package/dist/facts/index.cjs +4 -4
  101. package/dist/facts/index.js +3 -3
  102. package/dist/files/index.cjs +3 -3
  103. package/dist/files/index.js +2 -2
  104. package/dist/home/index.cjs +20 -20
  105. package/dist/home/index.js +4 -4
  106. package/dist/index.cjs +476 -467
  107. package/dist/index.cjs.map +1 -1
  108. package/dist/index.d.ts +1 -0
  109. package/dist/index.js +23 -22
  110. package/dist/index.js.map +1 -1
  111. package/dist/provider/BlocksProvider.d.ts +5 -1
  112. package/dist/provider/settings-section.d.ts +9 -0
  113. package/dist/retrieval/index.cjs +4 -4
  114. package/dist/retrieval/index.js +2 -2
  115. package/dist/settings/AppearanceSettings.d.ts +18 -0
  116. package/dist/settings/ServerConnectionControls.d.ts +16 -0
  117. package/dist/settings/SettingsPage.d.ts +31 -0
  118. package/dist/settings/index.cjs +187 -250
  119. package/dist/settings/index.cjs.map +1 -1
  120. package/dist/settings/index.d.ts +3 -1
  121. package/dist/settings/index.js +87 -199
  122. package/dist/settings/index.js.map +1 -1
  123. package/dist/shell/index.cjs +44 -44
  124. package/dist/shell/index.js +3 -3
  125. package/dist/site/index.cjs +75 -74
  126. package/dist/site/index.js +4 -3
  127. package/dist/studio/index.cjs +80 -79
  128. package/dist/studio/index.cjs.map +1 -1
  129. package/dist/studio/index.js +12 -11
  130. package/dist/studio/index.js.map +1 -1
  131. package/dist/workflow-canvas/index.cjs +28 -28
  132. package/dist/workflow-canvas/index.js +11 -11
  133. package/dist/workspaces/index.cjs +3 -3
  134. package/dist/workspaces/index.js +2 -2
  135. package/node_modules/@arbidocs/coedit/package.json +1 -1
  136. package/package.json +4 -4
  137. package/dist/chunk-33ZOUJXA.js.map +0 -1
  138. package/dist/chunk-45LRMW54.js.map +0 -1
  139. package/dist/chunk-C4WSHRR6.cjs.map +0 -1
  140. package/dist/chunk-DLBUFHLY.js.map +0 -1
  141. package/dist/chunk-JZNXRMLH.cjs.map +0 -1
  142. package/dist/chunk-MJCCBMM5.cjs.map +0 -1
  143. package/dist/chunk-ON3TKY5Y.js.map +0 -1
  144. package/dist/chunk-QIMVTGKS.cjs.map +0 -1
  145. package/dist/chunk-RA3ZJ45L.cjs.map +0 -1
  146. package/dist/chunk-YNIBUKV5.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/citations/QuietMarks.tsx"],"names":[],"mappings":";;;;;AAyBO,IAAM,yBAAA,GAA6C;AAAA,EACxD,QAAA,EAAU,WAAA;AAAA,EACV,QAAA,EAAU,WAAA;AAAA,EACV,UAAA,EAAY,aAAA;AAAA,EACZ,UAAA,EAAY,gBAAA;AAAA,EACZ,QAAA,EAAU,cAAA;AAAA,EACV,aAAA,EAAe,yBAAA;AAAA,EACf,YAAA,EAAc,eAAA;AAAA,EACd,QAAA,EAAU,cAAA;AAAA,EACV,YAAA,EAAc;AAChB;AAMO,SAAS,YAAY,MAAA,EAAsE;AAChG,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,oBAAA,EAAqB;AACxC,EAAA,MAAM,IAAA,GAAO,MAAA,EAAQ,UAAA,IAAc,yBAAA,CAA0B,UAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,MAAA,EAAQ,UAAA,IAAc,yBAAA,CAA0B,UAAA;AAC/D,EAAA,OAAO,WAAA;AAAA,IACL,OAAO,MAAc,OAAA,KAAuC;AAC1D,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,QAAA,MAAA,CAAO,OAAA,IAAW,MAAM,SAAS,CAAA;AACjC,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,CAAA,MAAQ;AACN,QAAA,MAAA,CAAO,QAAQ,OAAO,CAAA;AACtB,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,IAAA,EAAM,MAAM;AAAA,GACvB;AACF;AAkBA,IAAM,UAAA,GAA4C;AAAA,EAChD,QAAA,EACE,8JAAA;AAAA,EACF,QAAA,EACE,8JAAA;AAAA;AAAA,EAEF,MAAA,EACE;AACJ,CAAA;AAEA,SAAS,aAAa,IAAA,EAA0B;AAC9C,EAAA,MAAM,EAAA,GAAK,IAAA,EAAM,UAAA,CAAW,GAAG,CAAA,GAAI,mBAAmB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,EAAA;AACvE,EAAA,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA,EAAG,cAAA,CAAe,EAAE,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,OAAA,EAAS,CAAA;AACpF;AAGO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,IAAA,GAAO,UAAA;AAAA,EACP,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,CAAA,GAAI,EAAE,GAAG,yBAAA,EAA2B,GAAG,MAAA,EAAO;AACpD,EAAA,MAAM,IAAA,GAAO,YAAY,CAAC,CAAA;AAE1B,EAAA,MAAM,IAAA,GACJ,WACC,IAAA,KAAS,QAAA,GACN,MAAM,YAAA,CAAa,IAAI,IACvB,MAAM;AACJ,IAAA,IAAI,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,UAAU,qBAAqB,CAAA;AAAA,EAC7D,CAAA,CAAA;AACN,EAAA,MAAM,aACJ,IAAA,KAAS,QAAA,GACJ,aAAa,CAAA,EAAG,MAAA,CAAO,SAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,QAAQ,EAAE,CAAA,CAAA,GAC/D,aAAa,IAAA,IAAQ,EAAA;AAE5B,EAAA,MAAM,KAAA,GAAwB;AAAA,IAC5B;AAAA,MACE,EAAA,EAAI,MAAA;AAAA,MACJ,KAAA,EAAO,SAAS,QAAA,GAAW,CAAA,CAAE,WAAW,IAAA,KAAS,UAAA,GAAa,CAAA,CAAE,YAAA,GAAe,CAAA,CAAE,QAAA;AAAA,MACjF,OAAA,EAAS,IAAA;AAAA,MACT,QAAA,EAAU,IAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,EAAA,EAAI,MAAA;AAAA,MACJ,KAAA,EAAO,IAAA,KAAS,QAAA,GAAW,CAAA,CAAE,gBAAgB,CAAA,CAAE,QAAA;AAAA,MAC/C,QAAA,EAAU,MAAM,KAAK,IAAA,CAAK,UAAU,CAAA;AAAA,MACpC,MAAA,EAAQ;AAAA;AACV,GACF;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,GAAA;AAAA,MACH,IAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,IAAA,KAAS,QAAA,GAAW,CAAA,CAAE,eAAe,CAAA,CAAE,QAAA;AAAA,MAClD,OAAA,EACE,SAAS,UAAA,IAAc,IAAA,uBACpB,MAAA,EAAA,EAAK,SAAA,EAAU,+CAAA,EAAiD,QAAA,EAAA,IAAA,EAAK,CAAA,GACpE,MAAA;AAAA,MAEN,WAAW,EAAA,CAAG,UAAA,CAAW,IAAI,CAAA,EAAG,kBAAkB,SAAS,CAAA;AAAA,MAC3D,MAAA;AAAA,MACA,gBAAA,EAAgB,IAAA;AAAA,MAEf;AAAA;AAAA,GACH;AAEJ;AAaO,SAAS,YAAY,EAAE,KAAA,EAAO,WAAW,KAAA,EAAO,SAAA,EAAW,QAAO,EAAqB;AAC5F,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,gBAAA,EAAe,SAAA;AAAA,MACf,SAAA,EAAW,EAAA;AAAA,QACT,0RAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAgBO,SAAS,SAAA,CAAU;AAAA,EACxB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA,EAAY,IAAA;AAAA,MACZ,gBAAA,EAAe,OAAA;AAAA,MACf,SAAA,EAAW,EAAA;AAAA,QACT,iKAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA,MAAA,CAAO,MAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,GAAG,CAAA,qBAC1B,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,aAAA,EAAY,MAAA;AAAA,UACZ,SAAA,EAAU,wBAAA;AAAA,UACV,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA;AAAE,SAAA;AAAA,QAHvB;AAAA,OAKR;AAAA;AAAA,GACH;AAEJ;AAkBO,SAAS,QAAA,CAAS;AAAA,EACvB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,cAAA;AAAA,EACZ,QAAQ,EAAC;AAAA,EACT,SAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SACE,KAAA,mBAAQ,GAAA,CAAC,UAAK,SAAA,EAAU,qCAAA,EAAuC,iBAAM,CAAA,GAAU,MAAA;AAAA,MAEjF,SAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA,EAAU,WAAA;AAAA,MACV,gBAAA,EAAe,MAAA;AAAA,MACf,SAAA,EAAW,EAAA;AAAA,QACT,4OAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ","file":"chunk-CYNF5PZI.js","sourcesContent":["import { useCallback, type ReactNode } from 'react'\nimport { MarkMenu, cn, type MarkMenuItem } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\n\n/**\n * Quiet inline marks: links, bookmarks, passage references, label and note marks.\n *\n * Each is typographically distinct TEXT (no pill, no button chrome, no icon in the flow) and owns\n * exactly one contextual menu through the shared `MarkMenu`. Domain-neutral: hosts supply the\n * handlers that make a row mean something.\n */\n\n/** Every fixed string of the quiet marks. */\nexport interface QuietMarkLabels {\n openLink: string\n copyLink: string\n linkCopied: string\n copyFailed: string\n jumpHere: string\n copyPlaceLink: string\n openDocument: string\n linkMenu: string\n bookmarkMenu: string\n}\n\nexport const DEFAULT_QUIET_MARK_LABELS: QuietMarkLabels = {\n openLink: 'Open link',\n copyLink: 'Copy link',\n linkCopied: 'Link copied',\n copyFailed: 'Could not copy',\n jumpHere: 'Jump to here',\n copyPlaceLink: 'Copy link to this place',\n openDocument: 'Open document',\n linkMenu: 'Link actions',\n bookmarkMenu: 'Bookmark actions',\n}\n\n/**\n * Copy text to the clipboard and say so (or say it failed) through the host's `notify`. Resolves\n * whether it was copied.\n */\nexport function useCopyText(labels?: Partial<Pick<QuietMarkLabels, 'linkCopied' | 'copyFailed'>>) {\n const { notify } = useBlocksEnvironment()\n const done = labels?.linkCopied ?? DEFAULT_QUIET_MARK_LABELS.linkCopied\n const failed = labels?.copyFailed ?? DEFAULT_QUIET_MARK_LABELS.copyFailed\n return useCallback(\n async (text: string, message?: string): Promise<boolean> => {\n try {\n await navigator.clipboard.writeText(text)\n notify(message ?? done, 'success')\n return true\n } catch {\n notify(failed, 'error')\n return false\n }\n },\n [notify, done, failed]\n )\n}\n\nexport type QuietLinkKind = 'external' | 'anchor' | 'document'\n\nexport interface QuietLinkProps {\n href?: string\n /** `external` (default) opens elsewhere, `anchor` jumps within the page, `document` is an in-app target. */\n kind?: QuietLinkKind\n /** The primary action. Defaults: external opens a new tab, anchor scrolls to the id. */\n onOpen?: () => void\n /** Absolute URL a copied anchor should carry; defaults to the current page plus the hash. */\n placeLink?: string\n labels?: Partial<QuietMarkLabels>\n className?: string\n testId?: string\n children: ReactNode\n}\n\nconst LINK_STYLE: Record<QuietLinkKind, string> = {\n external:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n document:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n // A bookmark is nearly invisible until hovered or focused.\n anchor:\n 'text-inherit underline decoration-dotted decoration-1 decoration-foreground/25 underline-offset-[3px] transition-colors hover:decoration-foreground/70 focus-visible:decoration-foreground/70',\n}\n\nfunction scrollToHash(href: string | undefined) {\n const id = href?.startsWith('#') ? decodeURIComponent(href.slice(1)) : ''\n document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n}\n\n/** A hyperlink, bookmark or document link as quiet text with one menu (open / copy). */\nexport function QuietLink({\n href,\n kind = 'external',\n onOpen,\n placeLink,\n labels,\n className,\n testId,\n children,\n}: QuietLinkProps) {\n const l = { ...DEFAULT_QUIET_MARK_LABELS, ...labels }\n const copy = useCopyText(l)\n\n const open =\n onOpen ??\n (kind === 'anchor'\n ? () => scrollToHash(href)\n : () => {\n if (href) window.open(href, '_blank', 'noopener,noreferrer')\n })\n const copyTarget =\n kind === 'anchor'\n ? (placeLink ?? `${window.location.href.split('#')[0]}${href ?? ''}`)\n : (placeLink ?? href ?? '')\n\n const items: MarkMenuItem[] = [\n {\n id: 'open',\n label: kind === 'anchor' ? l.jumpHere : kind === 'document' ? l.openDocument : l.openLink,\n primary: true,\n onSelect: open,\n testId: 'mark-open',\n },\n {\n id: 'copy',\n label: kind === 'anchor' ? l.copyPlaceLink : l.copyLink,\n onSelect: () => void copy(copyTarget),\n testId: 'mark-copy',\n },\n ]\n\n return (\n <MarkMenu\n as=\"a\"\n href={href}\n items={items}\n menuLabel={kind === 'anchor' ? l.bookmarkMenu : l.linkMenu}\n preview={\n kind === 'external' && href ? (\n <span className=\"block break-all text-xs text-muted-foreground\">{href}</span>\n ) : undefined\n }\n className={cn(LINK_STYLE[kind], 'cursor-pointer', className)}\n testId={testId}\n data-mark-kind={kind}\n >\n {children}\n </MarkMenu>\n )\n}\n\nexport interface PassageMarkProps {\n /** The reference as plain text, e.g. \"¶4\" or \"¶4–9 · p.1\". */\n label: string\n menuLabel: string\n /** Menu rows: copy, link, label, open in navigator. */\n items: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/** A passage's reference as a faint text mark in the margin; its menu carries the passage actions. */\nexport function PassageMark({ label, menuLabel, items, className, testId }: PassageMarkProps) {\n return (\n <MarkMenu\n items={items}\n menuLabel={menuLabel}\n testId={testId}\n data-mark-kind=\"passage\"\n className={cn(\n 'touch-hit cursor-pointer select-none rounded-sm px-1 text-xs tabular-nums text-muted-foreground/80 transition-colors hover:text-foreground focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-2',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n\nexport interface LabelMarkProps {\n /** Colours of every label marking the passage. */\n colors: string[]\n menuLabel: string\n /** Names of the labels, shown in the menu. */\n preview?: ReactNode\n items: MarkMenuItem[]\n /** Accessible name of the stripes. */\n name: string\n className?: string\n testId?: string\n}\n\n/** The labels on a passage as thin margin stripes (not a chip); the menu shows / removes them. */\nexport function LabelMark({\n colors,\n menuLabel,\n preview,\n items,\n name,\n className,\n testId,\n}: LabelMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={preview}\n menuLabel={menuLabel}\n testId={testId}\n aria-label={name}\n data-mark-kind=\"label\"\n className={cn(\n 'flex cursor-pointer flex-col gap-1 rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-1',\n className\n )}\n >\n {colors.slice(0, 4).map((c, i) => (\n <span\n key={i}\n aria-hidden=\"true\"\n className=\"h-2.5 w-1 rounded-full\"\n style={{ backgroundColor: c }}\n />\n ))}\n </MarkMenu>\n )\n}\n\nexport interface NoteMarkProps {\n /** Short label, e.g. the passage range this run covers (\"¶4–9\"). */\n label: string\n /** Full note text, shown as the menu preview so the mark is self-explaining. */\n title?: string\n menuLabel?: string\n /** Rows such as \"Show note\" and \"Edit\". With none, the menu is a read-only preview. */\n items?: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/**\n * Marks a passage as cited by a Note: small text with a soft yellow underline, drawn once on\n * each CONTIGUOUS run of cited passages (a run is one citation).\n */\nexport function NoteMark({\n label,\n title,\n menuLabel = 'Note actions',\n items = [],\n className,\n testId,\n}: NoteMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={\n title ? <span className=\"block text-xs text-muted-foreground\">{title}</span> : undefined\n }\n menuLabel={menuLabel}\n testId={testId}\n data-slot=\"note-mark\"\n data-mark-kind=\"note\"\n className={cn(\n 'cursor-default select-none rounded-sm px-1 text-xs font-medium tabular-nums text-foreground/80 underline decoration-yellow-400 decoration-2 underline-offset-[3px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/citations/QuietMarks.tsx"],"names":[],"mappings":"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","file":"chunk-J5CWKFSC.js","sourcesContent":["import { useCallback, type ReactNode } from 'react'\nimport { MarkMenu, cn, type MarkMenuItem } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../provider/BlocksProvider'\n\n/**\n * Quiet inline marks: links, bookmarks, passage references, label and note marks.\n *\n * Each is typographically distinct TEXT (no pill, no button chrome, no icon in the flow) and owns\n * exactly one contextual menu through the shared `MarkMenu`. Domain-neutral: hosts supply the\n * handlers that make a row mean something.\n */\n\n/** Every fixed string of the quiet marks. */\nexport interface QuietMarkLabels {\n openLink: string\n copyLink: string\n linkCopied: string\n copyFailed: string\n jumpHere: string\n copyPlaceLink: string\n openDocument: string\n linkMenu: string\n bookmarkMenu: string\n}\n\nexport const DEFAULT_QUIET_MARK_LABELS: QuietMarkLabels = {\n openLink: 'Open link',\n copyLink: 'Copy link',\n linkCopied: 'Link copied',\n copyFailed: 'Could not copy',\n jumpHere: 'Jump to here',\n copyPlaceLink: 'Copy link to this place',\n openDocument: 'Open document',\n linkMenu: 'Link actions',\n bookmarkMenu: 'Bookmark actions',\n}\n\n/**\n * Copy text to the clipboard and say so (or say it failed) through the host's `notify`. Resolves\n * whether it was copied.\n */\nexport function useCopyText(labels?: Partial<Pick<QuietMarkLabels, 'linkCopied' | 'copyFailed'>>) {\n const { notify } = useBlocksEnvironment()\n const done = labels?.linkCopied ?? DEFAULT_QUIET_MARK_LABELS.linkCopied\n const failed = labels?.copyFailed ?? DEFAULT_QUIET_MARK_LABELS.copyFailed\n return useCallback(\n async (text: string, message?: string): Promise<boolean> => {\n try {\n await navigator.clipboard.writeText(text)\n notify(message ?? done, 'success')\n return true\n } catch {\n notify(failed, 'error')\n return false\n }\n },\n [notify, done, failed]\n )\n}\n\nexport type QuietLinkKind = 'external' | 'anchor' | 'document'\n\nexport interface QuietLinkProps {\n href?: string\n /** `external` (default) opens elsewhere, `anchor` jumps within the page, `document` is an in-app target. */\n kind?: QuietLinkKind\n /** The primary action. Defaults: external opens a new tab, anchor scrolls to the id. */\n onOpen?: () => void\n /** Absolute URL a copied anchor should carry; defaults to the current page plus the hash. */\n placeLink?: string\n labels?: Partial<QuietMarkLabels>\n className?: string\n testId?: string\n children: ReactNode\n}\n\nconst LINK_STYLE: Record<QuietLinkKind, string> = {\n external:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n document:\n 'text-primary underline decoration-primary/40 decoration-1 underline-offset-[3px] transition-colors hover:decoration-primary focus-visible:decoration-primary',\n // A bookmark is nearly invisible until hovered or focused.\n anchor:\n 'text-inherit underline decoration-dotted decoration-1 decoration-foreground/25 underline-offset-[3px] transition-colors hover:decoration-foreground/70 focus-visible:decoration-foreground/70',\n}\n\nfunction scrollToHash(href: string | undefined) {\n const id = href?.startsWith('#') ? decodeURIComponent(href.slice(1)) : ''\n document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' })\n}\n\n/** A hyperlink, bookmark or document link as quiet text with one menu (open / copy). */\nexport function QuietLink({\n href,\n kind = 'external',\n onOpen,\n placeLink,\n labels,\n className,\n testId,\n children,\n}: QuietLinkProps) {\n const l = { ...DEFAULT_QUIET_MARK_LABELS, ...labels }\n const copy = useCopyText(l)\n\n const open =\n onOpen ??\n (kind === 'anchor'\n ? () => scrollToHash(href)\n : () => {\n if (href) window.open(href, '_blank', 'noopener,noreferrer')\n })\n const copyTarget =\n kind === 'anchor'\n ? (placeLink ?? `${window.location.href.split('#')[0]}${href ?? ''}`)\n : (placeLink ?? href ?? '')\n\n const items: MarkMenuItem[] = [\n {\n id: 'open',\n label: kind === 'anchor' ? l.jumpHere : kind === 'document' ? l.openDocument : l.openLink,\n primary: true,\n onSelect: open,\n testId: 'mark-open',\n },\n {\n id: 'copy',\n label: kind === 'anchor' ? l.copyPlaceLink : l.copyLink,\n onSelect: () => void copy(copyTarget),\n testId: 'mark-copy',\n },\n ]\n\n return (\n <MarkMenu\n as=\"a\"\n href={href}\n items={items}\n menuLabel={kind === 'anchor' ? l.bookmarkMenu : l.linkMenu}\n preview={\n kind === 'external' && href ? (\n <span className=\"block break-all text-xs text-muted-foreground\">{href}</span>\n ) : undefined\n }\n className={cn(LINK_STYLE[kind], 'cursor-pointer', className)}\n testId={testId}\n data-mark-kind={kind}\n >\n {children}\n </MarkMenu>\n )\n}\n\nexport interface PassageMarkProps {\n /** The reference as plain text, e.g. \"¶4\" or \"¶4–9 · p.1\". */\n label: string\n menuLabel: string\n /** Menu rows: copy, link, label, open in navigator. */\n items: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/** A passage's reference as a faint text mark in the margin; its menu carries the passage actions. */\nexport function PassageMark({ label, menuLabel, items, className, testId }: PassageMarkProps) {\n return (\n <MarkMenu\n items={items}\n menuLabel={menuLabel}\n testId={testId}\n data-mark-kind=\"passage\"\n className={cn(\n 'touch-hit cursor-pointer select-none rounded-sm px-1 text-xs tabular-nums text-muted-foreground/80 transition-colors hover:text-foreground focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-2',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n\nexport interface LabelMarkProps {\n /** Colours of every label marking the passage. */\n colors: string[]\n menuLabel: string\n /** Names of the labels, shown in the menu. */\n preview?: ReactNode\n items: MarkMenuItem[]\n /** Accessible name of the stripes. */\n name: string\n className?: string\n testId?: string\n}\n\n/** The labels on a passage as thin margin stripes (not a chip); the menu shows / removes them. */\nexport function LabelMark({\n colors,\n menuLabel,\n preview,\n items,\n name,\n className,\n testId,\n}: LabelMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={preview}\n menuLabel={menuLabel}\n testId={testId}\n aria-label={name}\n data-mark-kind=\"label\"\n className={cn(\n 'flex cursor-pointer flex-col gap-1 rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:px-2 pointer-coarse:py-1',\n className\n )}\n >\n {colors.slice(0, 4).map((c, i) => (\n <span\n key={i}\n aria-hidden=\"true\"\n className=\"h-2.5 w-1 rounded-full\"\n style={{ backgroundColor: c }}\n />\n ))}\n </MarkMenu>\n )\n}\n\nexport interface NoteMarkProps {\n /** Short label, e.g. the passage range this run covers (\"¶4–9\"). */\n label: string\n /** Full note text, shown as the menu preview so the mark is self-explaining. */\n title?: string\n menuLabel?: string\n /** Rows such as \"Show note\" and \"Edit\". With none, the menu is a read-only preview. */\n items?: MarkMenuItem[]\n className?: string\n testId?: string\n}\n\n/**\n * Marks a passage as cited by a Note: small text with a soft yellow underline, drawn once on\n * each CONTIGUOUS run of cited passages (a run is one citation).\n */\nexport function NoteMark({\n label,\n title,\n menuLabel = 'Note actions',\n items = [],\n className,\n testId,\n}: NoteMarkProps) {\n return (\n <MarkMenu\n items={items}\n preview={\n title ? <span className=\"block text-xs text-muted-foreground\">{title}</span> : undefined\n }\n menuLabel={menuLabel}\n testId={testId}\n data-slot=\"note-mark\"\n data-mark-kind=\"note\"\n className={cn(\n 'cursor-default select-none rounded-sm px-1 text-xs font-medium tabular-nums text-foreground/80 underline decoration-yellow-400 decoration-2 underline-offset-[3px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n className\n )}\n >\n {label}\n </MarkMenu>\n )\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkMJCCBMM5_cjs = require('./chunk-MJCCBMM5.cjs');
4
+ var chunkTC3RQNEX_cjs = require('./chunk-TC3RQNEX.cjs');
5
5
  var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
6
- var chunkR26BK7YL_cjs = require('./chunk-R26BK7YL.cjs');
6
+ var chunkDTROMMDX_cjs = require('./chunk-DTROMMDX.cjs');
7
7
  var lucideReact = require('lucide-react');
8
8
  var ui = require('@arbidocs/react/ui');
9
9
  var jsxRuntime = require('react/jsx-runtime');
@@ -27,9 +27,9 @@ function DataTable({
27
27
  className
28
28
  }) {
29
29
  const ids = {
30
- table: testIds?.table ?? chunkMJCCBMM5_cjs.tid(area, "table"),
31
- empty: testIds?.empty ?? chunkMJCCBMM5_cjs.tid(area, "empty"),
32
- row: testIds?.row ?? ((id) => chunkMJCCBMM5_cjs.tid(area, "row", id))
30
+ table: testIds?.table ?? chunkTC3RQNEX_cjs.tid(area, "table"),
31
+ empty: testIds?.empty ?? chunkTC3RQNEX_cjs.tid(area, "empty"),
32
+ row: testIds?.row ?? ((id) => chunkTC3RQNEX_cjs.tid(area, "row", id))
33
33
  };
34
34
  const labels = { ...DEFAULT_SELECTION_LABELS, ...selectionLabels };
35
35
  if (rows.length === 0) {
@@ -236,7 +236,7 @@ function MetricCard({
236
236
  );
237
237
  if (!isInteractive) return card;
238
238
  return /* @__PURE__ */ jsxRuntime.jsx(
239
- chunkR26BK7YL_cjs.ActionLink,
239
+ chunkDTROMMDX_cjs.ActionLink,
240
240
  {
241
241
  href,
242
242
  onSelect,
@@ -268,5 +268,5 @@ exports.DataTableBlock = DataTableBlock;
268
268
  exports.MetricCard = MetricCard;
269
269
  exports.PageHeader = PageHeader;
270
270
  exports.StatGroup = StatGroup;
271
- //# sourceMappingURL=chunk-TP6PLDNM.cjs.map
272
- //# sourceMappingURL=chunk-TP6PLDNM.cjs.map
271
+ //# sourceMappingURL=chunk-KMZWKSKO.cjs.map
272
+ //# sourceMappingURL=chunk-KMZWKSKO.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/DataTable.tsx","../src/components/DataTableBlock.tsx","../src/components/PageHeader.tsx","../src/components/MetricCard.tsx","../src/components/StatGroup.tsx"],"names":["tid","jsx","EmptyState","cn","jsxs","Table","TableHeader","TableRow","TableHead","ArrowUp","ArrowDown","ChevronsUpDown","TableBody","TableCell","Card","ArrowUpRight","ArrowDownRight","ActionLink"],"mappings":"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","file":"chunk-TP6PLDNM.cjs","sourcesContent":["import type { ReactNode } from 'react'\nimport { ArrowDown, ArrowUp, ChevronsUpDown } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@arbidocs/react/ui'\nimport { tid } from '../lib/testid'\nimport { EmptyState } from './EmptyState'\n\nexport interface Column<T> {\n key: string\n header: ReactNode\n render: (row: T) => ReactNode\n align?: 'left' | 'right' | 'center'\n /** Header becomes a sort button (needs `sort` and `onSortChange` on the table). */\n isSortable?: boolean\n className?: string\n headClassName?: string\n}\n\nexport interface DataTableSort {\n key: string\n direction: 'asc' | 'desc'\n}\n\nexport interface DataTableTestIds {\n table: string\n empty: string\n /** Test id of a row. */\n row: (id: string) => string\n}\n\nexport interface DataTableProps<T> {\n columns: Column<T>[]\n rows: T[]\n getRowId: (row: T) => string\n onRowClick?: (row: T) => void\n /** Test id area prefix, e.g. \"orders\" gives rows \"orders-row-{id}\". Default \"data\". */\n area?: string\n /** Replaces the ids derived from `area`. */\n testIds?: Partial<DataTableTestIds>\n emptyTitle?: string\n emptyDescription?: string\n /** Controlled sort state. The host sorts `rows`; the table only renders headers. */\n sort?: DataTableSort | null\n onSortChange?: (sort: DataTableSort) => void\n /** Controlled row selection: adds a leading checkbox column when `onSelectedIdsChange` is set. */\n selectedIds?: string[]\n onSelectedIdsChange?: (ids: string[]) => void\n /** Accessible names of the selection checkboxes. */\n selectionLabels?: { selectAll: string; selectRow: string }\n className?: string\n}\n\nconst alignClass = { left: 'text-left', right: 'text-right', center: 'text-center' } as const\n\nconst DEFAULT_SELECTION_LABELS = { selectAll: 'Select all rows', selectRow: 'Select row' }\n\n/** The one true table. Column-config driven, fully test-id'd, optional navigation, sort, selection. */\nexport function DataTable<T>({\n columns,\n rows,\n getRowId,\n onRowClick,\n area = 'data',\n testIds,\n emptyTitle = 'Nothing to show',\n emptyDescription,\n sort,\n onSortChange,\n selectedIds,\n onSelectedIdsChange,\n selectionLabels,\n className,\n}: DataTableProps<T>) {\n const ids = {\n table: testIds?.table ?? tid(area, 'table'),\n empty: testIds?.empty ?? tid(area, 'empty'),\n row: testIds?.row ?? ((id: string) => tid(area, 'row', id)),\n }\n const labels = { ...DEFAULT_SELECTION_LABELS, ...selectionLabels }\n if (rows.length === 0) {\n return <EmptyState title={emptyTitle} description={emptyDescription} testId={ids.empty} />\n }\n\n const isSelectable = Boolean(onSelectedIdsChange)\n const selected = new Set(selectedIds ?? [])\n const rowIds = rows.map(getRowId)\n const allSelected = rowIds.length > 0 && rowIds.every((id) => selected.has(id))\n const toggleRow = (id: string) => {\n const next = new Set(selected)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n onSelectedIdsChange?.([...next])\n }\n\n return (\n <div className={cn('rounded-lg border border-border bg-card', className)}>\n <Table data-testid={ids.table}>\n <TableHeader>\n <TableRow className=\"hover:bg-transparent\">\n {isSelectable && (\n <TableHead className=\"w-10\">\n <input\n type=\"checkbox\"\n aria-label={labels.selectAll}\n checked={allSelected}\n onChange={() => onSelectedIdsChange?.(allSelected ? [] : rowIds)}\n />\n </TableHead>\n )}\n {columns.map((c) => {\n const active = sort?.key === c.key ? sort : null\n const isSortable = c.isSortable && onSortChange\n return (\n <TableHead\n key={c.key}\n aria-sort={\n active ? (active.direction === 'asc' ? 'ascending' : 'descending') : undefined\n }\n className={cn(c.align && alignClass[c.align], c.headClassName)}\n >\n {isSortable ? (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 hover:text-foreground\"\n onClick={() =>\n onSortChange({\n key: c.key,\n direction: active?.direction === 'asc' ? 'desc' : 'asc',\n })\n }\n >\n {c.header}\n {active ? (\n active.direction === 'asc' ? (\n <ArrowUp className=\"size-3\" />\n ) : (\n <ArrowDown className=\"size-3\" />\n )\n ) : (\n <ChevronsUpDown className=\"size-3 opacity-50\" />\n )}\n </button>\n ) : (\n c.header\n )}\n </TableHead>\n )\n })}\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((row) => {\n const id = getRowId(row)\n return (\n <TableRow\n key={id}\n data-testid={ids.row(id)}\n data-state={selected.has(id) ? 'selected' : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={cn(onRowClick && 'cursor-pointer')}\n >\n {isSelectable && (\n <TableCell className=\"w-10\" onClick={(e) => e.stopPropagation()}>\n <input\n type=\"checkbox\"\n aria-label={labels.selectRow}\n checked={selected.has(id)}\n onChange={() => toggleRow(id)}\n />\n </TableCell>\n )}\n {columns.map((c) => (\n <TableCell\n key={c.key}\n className={cn(c.align && alignClass[c.align], c.className)}\n >\n {c.render(row)}\n </TableCell>\n ))}\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </div>\n )\n}\n","/**\n * A **serializable** data table for the Puck builder.\n *\n * The library's developer-facing {@link DataTable} is driven by `Column<T>` whose\n * `header`/`render` are React nodes and functions — powerful, but non-serializable,\n * so it can never be a Puck block. `DataTableBlock` closes that gap with a flat,\n * JSON-safe schema (string headers, string field keys, string cells) and rebuilds\n * the non-serializable `Column<Row>[]` internally, rendering through the very same\n * {@link DataTable} so it inherits the library's markup and tokens verbatim.\n */\nimport { DataTable, type Column } from './DataTable'\n\nexport interface DataTableBlockColumn {\n /** Column heading text. */\n header: string\n /** Key used to look a cell up in each row record. */\n field: string\n /** Cell/heading alignment. */\n align?: 'left' | 'right' | 'center'\n}\n\nexport interface DataTableBlockProps {\n /** Serializable column schema. */\n columns: DataTableBlockColumn[]\n /** One record per row; cells are looked up by each column's `field`. */\n rows: Array<Record<string, string>>\n /** Optional caption rendered above the table. */\n caption?: string\n /** Empty-state title shown when there are no rows. */\n emptyText?: string\n /** testid area prefix; also set on the wrapper element. */\n testId?: string\n}\n\n/** A row wrapper so {@link DataTable} gets a stable id without polluting the record. */\ninterface TableRowData {\n __id: string\n cells: Record<string, string>\n}\n\n/**\n * Renders a {@link DataTable} from a flat, serializable schema. Columns are mapped\n * to `Column<TableRowData>[]` (header string, positional-stable key, alignment) and\n * each cell is resolved by `field`; rows carry a synthetic id for React keys/testids.\n */\nexport function DataTableBlock({ columns, rows, caption, emptyText, testId }: DataTableBlockProps) {\n const area = testId ?? 'data-table-block'\n\n const tableColumns: Column<TableRowData>[] = columns.map((col, index) => ({\n key: col.field || `col-${index}`,\n header: col.header,\n align: col.align,\n render: (row) => row.cells[col.field] ?? '',\n }))\n\n const tableRows: TableRowData[] = rows.map((cells, index) => ({ __id: String(index), cells }))\n\n return (\n <div data-testid={testId}>\n {caption ? (\n <p\n className=\"mb-2 text-sm text-muted-foreground\"\n data-testid={testId ? `${testId}-caption` : undefined}\n >\n {caption}\n </p>\n ) : null}\n <DataTable\n columns={tableColumns}\n rows={tableRows}\n getRowId={(row) => row.__id}\n area={area}\n emptyTitle={emptyText}\n />\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface PageHeaderProps {\n title: ReactNode\n eyebrow?: ReactNode\n description?: ReactNode\n /** Before the title block: a back button, an avatar or an icon. */\n leading?: ReactNode\n actions?: ReactNode\n /** Under the whole header: a tab strip or segmented control. */\n tabs?: ReactNode\n className?: string\n testId?: string\n}\n\n/** Standard page title block: leading + eyebrow + title + description + actions, then tabs. */\nexport function PageHeader({\n title,\n eyebrow,\n description,\n leading,\n actions,\n tabs,\n className,\n testId,\n}: PageHeaderProps) {\n return (\n <div className={cn('flex flex-col gap-3', className)} data-testid={testId}>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {leading && (\n <div className=\"shrink-0\" data-slot=\"page-header-leading\">\n {leading}\n </div>\n )}\n <div className=\"min-w-0\">\n {eyebrow && (\n <p className=\"mb-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {eyebrow}\n </p>\n )}\n <h1 className=\"font-display text-2xl font-semibold tracking-tight text-foreground\">\n {title}\n </h1>\n {description && (\n <p className=\"mt-1 max-w-2xl text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </div>\n {tabs && <div data-slot=\"page-header-tabs\">{tabs}</div>}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { ArrowDownRight, ArrowUpRight } from 'lucide-react'\nimport { Card, cn } from '@arbidocs/react/ui'\nimport { ActionLink } from './ActionLink'\n\nexport interface MetricCardProps {\n label: ReactNode\n value: ReactNode\n icon?: LucideIcon\n hint?: ReactNode\n delta?: { value: string; direction: 'up' | 'down'; good?: boolean }\n /**\n * Icon accent as a theme colour-token key (e.g. `primary`, `success`, or the host's own brand\n * token). Resolved to `var(--color-<accent>)` at render. `'default'` inherits `foreground`.\n */\n accent?: string\n /** Show a placeholder instead of the value (the figure is still being fetched). */\n isLoading?: boolean\n /** Makes the tile a real link (ctrl/cmd-click works). */\n href?: string\n /** Click handler; with `href`, a plain click calls it instead of navigating. */\n onSelect?: () => void\n className?: string\n testId?: string\n}\n\n/** The one true KPI tile. Used across every dashboard and module header. */\nexport function MetricCard({\n label,\n value,\n icon: Icon,\n hint,\n delta,\n accent = 'default',\n isLoading = false,\n href,\n onSelect,\n className,\n testId,\n}: MetricCardProps) {\n const accentStyle =\n accent && accent !== 'default' ? { color: `var(--color-${accent})` } : undefined\n const deltaGood = delta?.good ?? delta?.direction === 'up'\n const isInteractive = Boolean(href || onSelect)\n const card = (\n <Card\n variant=\"elevated\"\n className={cn('card-hover min-w-0 rounded-xl p-5', className)}\n data-testid={isInteractive ? undefined : testId}\n aria-busy={isLoading || undefined}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <p className=\"min-w-0 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {label}\n </p>\n {Icon && <Icon className=\"size-4 shrink-0\" style={accentStyle} />}\n </div>\n {isLoading ? (\n <div\n className=\"mt-2 h-8 w-20 animate-pulse rounded bg-muted\"\n data-slot=\"metric-card-skeleton\"\n />\n ) : (\n <p\n className=\"mt-2 font-display text-2xl font-semibold tracking-tight [overflow-wrap:anywhere]\"\n data-testid={testId && `${testId}-value`}\n >\n {value}\n </p>\n )}\n <div className=\"mt-1 flex items-center gap-2\">\n {delta && !isLoading && (\n <span\n className={cn(\n 'inline-flex items-center gap-0.5 text-xs font-medium',\n deltaGood ? 'text-success' : 'text-destructive'\n )}\n >\n {delta.direction === 'up' ? (\n <ArrowUpRight className=\"size-3\" />\n ) : (\n <ArrowDownRight className=\"size-3\" />\n )}\n {delta.value}\n </span>\n )}\n {hint && <span className=\"text-xs text-muted-foreground\">{hint}</span>}\n </div>\n </Card>\n )\n if (!isInteractive) return card\n return (\n <ActionLink\n href={href}\n onSelect={onSelect}\n className=\"block rounded-xl text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n data-testid={testId}\n >\n {card}\n </ActionLink>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport interface StatItem {\n value: string\n label: string\n /** Optional caption under the label (e.g. a qualifier or unit). */\n sub?: string\n}\n\nexport interface StatGroupProps {\n items: StatItem[]\n testId?: string\n}\n\nconst GRID: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-2 sm:grid-cols-3',\n 4: 'grid-cols-2 lg:grid-cols-4',\n}\n\n/** Big-number stat group — headline metrics with captions. */\nexport function StatGroup({ items, testId }: StatGroupProps) {\n const list = items ?? []\n const cols = GRID[Math.min(list.length, 4)] ?? GRID[4]\n return (\n <dl className={cn('grid gap-8', cols)} data-testid={testId}>\n {list.map((item, i) => (\n <div key={i} className=\"min-w-0 text-center\" data-testid={testId && `${testId}-item-${i}`}>\n <dt className=\"sr-only\">{item.label}</dt>\n <dd className=\"text-4xl font-semibold tracking-tight [overflow-wrap:anywhere] sm:text-5xl\">\n {item.value}\n </dd>\n <p className=\"mt-2 text-sm text-muted-foreground\">{item.label}</p>\n {item.sub && <p className=\"mt-1 text-xs text-muted-foreground/80\">{item.sub}</p>}\n </div>\n ))}\n </dl>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/components/DataTable.tsx","../src/components/DataTableBlock.tsx","../src/components/PageHeader.tsx","../src/components/MetricCard.tsx","../src/components/StatGroup.tsx"],"names":["tid","jsx","EmptyState","cn","jsxs","Table","TableHeader","TableRow","TableHead","ArrowUp","ArrowDown","ChevronsUpDown","TableBody","TableCell","Card","ArrowUpRight","ArrowDownRight","ActionLink"],"mappings":"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","file":"chunk-KMZWKSKO.cjs","sourcesContent":["import type { ReactNode } from 'react'\nimport { ArrowDown, ArrowUp, ChevronsUpDown } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@arbidocs/react/ui'\nimport { tid } from '../lib/testid'\nimport { EmptyState } from './EmptyState'\n\nexport interface Column<T> {\n key: string\n header: ReactNode\n render: (row: T) => ReactNode\n align?: 'left' | 'right' | 'center'\n /** Header becomes a sort button (needs `sort` and `onSortChange` on the table). */\n isSortable?: boolean\n className?: string\n headClassName?: string\n}\n\nexport interface DataTableSort {\n key: string\n direction: 'asc' | 'desc'\n}\n\nexport interface DataTableTestIds {\n table: string\n empty: string\n /** Test id of a row. */\n row: (id: string) => string\n}\n\nexport interface DataTableProps<T> {\n columns: Column<T>[]\n rows: T[]\n getRowId: (row: T) => string\n onRowClick?: (row: T) => void\n /** Test id area prefix, e.g. \"orders\" gives rows \"orders-row-{id}\". Default \"data\". */\n area?: string\n /** Replaces the ids derived from `area`. */\n testIds?: Partial<DataTableTestIds>\n emptyTitle?: string\n emptyDescription?: string\n /** Controlled sort state. The host sorts `rows`; the table only renders headers. */\n sort?: DataTableSort | null\n onSortChange?: (sort: DataTableSort) => void\n /** Controlled row selection: adds a leading checkbox column when `onSelectedIdsChange` is set. */\n selectedIds?: string[]\n onSelectedIdsChange?: (ids: string[]) => void\n /** Accessible names of the selection checkboxes. */\n selectionLabels?: { selectAll: string; selectRow: string }\n className?: string\n}\n\nconst alignClass = { left: 'text-left', right: 'text-right', center: 'text-center' } as const\n\nconst DEFAULT_SELECTION_LABELS = { selectAll: 'Select all rows', selectRow: 'Select row' }\n\n/** The one true table. Column-config driven, fully test-id'd, optional navigation, sort, selection. */\nexport function DataTable<T>({\n columns,\n rows,\n getRowId,\n onRowClick,\n area = 'data',\n testIds,\n emptyTitle = 'Nothing to show',\n emptyDescription,\n sort,\n onSortChange,\n selectedIds,\n onSelectedIdsChange,\n selectionLabels,\n className,\n}: DataTableProps<T>) {\n const ids = {\n table: testIds?.table ?? tid(area, 'table'),\n empty: testIds?.empty ?? tid(area, 'empty'),\n row: testIds?.row ?? ((id: string) => tid(area, 'row', id)),\n }\n const labels = { ...DEFAULT_SELECTION_LABELS, ...selectionLabels }\n if (rows.length === 0) {\n return <EmptyState title={emptyTitle} description={emptyDescription} testId={ids.empty} />\n }\n\n const isSelectable = Boolean(onSelectedIdsChange)\n const selected = new Set(selectedIds ?? [])\n const rowIds = rows.map(getRowId)\n const allSelected = rowIds.length > 0 && rowIds.every((id) => selected.has(id))\n const toggleRow = (id: string) => {\n const next = new Set(selected)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n onSelectedIdsChange?.([...next])\n }\n\n return (\n <div className={cn('rounded-lg border border-border bg-card', className)}>\n <Table data-testid={ids.table}>\n <TableHeader>\n <TableRow className=\"hover:bg-transparent\">\n {isSelectable && (\n <TableHead className=\"w-10\">\n <input\n type=\"checkbox\"\n aria-label={labels.selectAll}\n checked={allSelected}\n onChange={() => onSelectedIdsChange?.(allSelected ? [] : rowIds)}\n />\n </TableHead>\n )}\n {columns.map((c) => {\n const active = sort?.key === c.key ? sort : null\n const isSortable = c.isSortable && onSortChange\n return (\n <TableHead\n key={c.key}\n aria-sort={\n active ? (active.direction === 'asc' ? 'ascending' : 'descending') : undefined\n }\n className={cn(c.align && alignClass[c.align], c.headClassName)}\n >\n {isSortable ? (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 hover:text-foreground\"\n onClick={() =>\n onSortChange({\n key: c.key,\n direction: active?.direction === 'asc' ? 'desc' : 'asc',\n })\n }\n >\n {c.header}\n {active ? (\n active.direction === 'asc' ? (\n <ArrowUp className=\"size-3\" />\n ) : (\n <ArrowDown className=\"size-3\" />\n )\n ) : (\n <ChevronsUpDown className=\"size-3 opacity-50\" />\n )}\n </button>\n ) : (\n c.header\n )}\n </TableHead>\n )\n })}\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((row) => {\n const id = getRowId(row)\n return (\n <TableRow\n key={id}\n data-testid={ids.row(id)}\n data-state={selected.has(id) ? 'selected' : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={cn(onRowClick && 'cursor-pointer')}\n >\n {isSelectable && (\n <TableCell className=\"w-10\" onClick={(e) => e.stopPropagation()}>\n <input\n type=\"checkbox\"\n aria-label={labels.selectRow}\n checked={selected.has(id)}\n onChange={() => toggleRow(id)}\n />\n </TableCell>\n )}\n {columns.map((c) => (\n <TableCell\n key={c.key}\n className={cn(c.align && alignClass[c.align], c.className)}\n >\n {c.render(row)}\n </TableCell>\n ))}\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </div>\n )\n}\n","/**\n * A **serializable** data table for the Puck builder.\n *\n * The library's developer-facing {@link DataTable} is driven by `Column<T>` whose\n * `header`/`render` are React nodes and functions — powerful, but non-serializable,\n * so it can never be a Puck block. `DataTableBlock` closes that gap with a flat,\n * JSON-safe schema (string headers, string field keys, string cells) and rebuilds\n * the non-serializable `Column<Row>[]` internally, rendering through the very same\n * {@link DataTable} so it inherits the library's markup and tokens verbatim.\n */\nimport { DataTable, type Column } from './DataTable'\n\nexport interface DataTableBlockColumn {\n /** Column heading text. */\n header: string\n /** Key used to look a cell up in each row record. */\n field: string\n /** Cell/heading alignment. */\n align?: 'left' | 'right' | 'center'\n}\n\nexport interface DataTableBlockProps {\n /** Serializable column schema. */\n columns: DataTableBlockColumn[]\n /** One record per row; cells are looked up by each column's `field`. */\n rows: Array<Record<string, string>>\n /** Optional caption rendered above the table. */\n caption?: string\n /** Empty-state title shown when there are no rows. */\n emptyText?: string\n /** testid area prefix; also set on the wrapper element. */\n testId?: string\n}\n\n/** A row wrapper so {@link DataTable} gets a stable id without polluting the record. */\ninterface TableRowData {\n __id: string\n cells: Record<string, string>\n}\n\n/**\n * Renders a {@link DataTable} from a flat, serializable schema. Columns are mapped\n * to `Column<TableRowData>[]` (header string, positional-stable key, alignment) and\n * each cell is resolved by `field`; rows carry a synthetic id for React keys/testids.\n */\nexport function DataTableBlock({ columns, rows, caption, emptyText, testId }: DataTableBlockProps) {\n const area = testId ?? 'data-table-block'\n\n const tableColumns: Column<TableRowData>[] = columns.map((col, index) => ({\n key: col.field || `col-${index}`,\n header: col.header,\n align: col.align,\n render: (row) => row.cells[col.field] ?? '',\n }))\n\n const tableRows: TableRowData[] = rows.map((cells, index) => ({ __id: String(index), cells }))\n\n return (\n <div data-testid={testId}>\n {caption ? (\n <p\n className=\"mb-2 text-sm text-muted-foreground\"\n data-testid={testId ? `${testId}-caption` : undefined}\n >\n {caption}\n </p>\n ) : null}\n <DataTable\n columns={tableColumns}\n rows={tableRows}\n getRowId={(row) => row.__id}\n area={area}\n emptyTitle={emptyText}\n />\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface PageHeaderProps {\n title: ReactNode\n eyebrow?: ReactNode\n description?: ReactNode\n /** Before the title block: a back button, an avatar or an icon. */\n leading?: ReactNode\n actions?: ReactNode\n /** Under the whole header: a tab strip or segmented control. */\n tabs?: ReactNode\n className?: string\n testId?: string\n}\n\n/** Standard page title block: leading + eyebrow + title + description + actions, then tabs. */\nexport function PageHeader({\n title,\n eyebrow,\n description,\n leading,\n actions,\n tabs,\n className,\n testId,\n}: PageHeaderProps) {\n return (\n <div className={cn('flex flex-col gap-3', className)} data-testid={testId}>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {leading && (\n <div className=\"shrink-0\" data-slot=\"page-header-leading\">\n {leading}\n </div>\n )}\n <div className=\"min-w-0\">\n {eyebrow && (\n <p className=\"mb-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {eyebrow}\n </p>\n )}\n <h1 className=\"font-display text-2xl font-semibold tracking-tight text-foreground\">\n {title}\n </h1>\n {description && (\n <p className=\"mt-1 max-w-2xl text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </div>\n {tabs && <div data-slot=\"page-header-tabs\">{tabs}</div>}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { ArrowDownRight, ArrowUpRight } from 'lucide-react'\nimport { Card, cn } from '@arbidocs/react/ui'\nimport { ActionLink } from './ActionLink'\n\nexport interface MetricCardProps {\n label: ReactNode\n value: ReactNode\n icon?: LucideIcon\n hint?: ReactNode\n delta?: { value: string; direction: 'up' | 'down'; good?: boolean }\n /**\n * Icon accent as a theme colour-token key (e.g. `primary`, `success`, or the host's own brand\n * token). Resolved to `var(--color-<accent>)` at render. `'default'` inherits `foreground`.\n */\n accent?: string\n /** Show a placeholder instead of the value (the figure is still being fetched). */\n isLoading?: boolean\n /** Makes the tile a real link (ctrl/cmd-click works). */\n href?: string\n /** Click handler; with `href`, a plain click calls it instead of navigating. */\n onSelect?: () => void\n className?: string\n testId?: string\n}\n\n/** The one true KPI tile. Used across every dashboard and module header. */\nexport function MetricCard({\n label,\n value,\n icon: Icon,\n hint,\n delta,\n accent = 'default',\n isLoading = false,\n href,\n onSelect,\n className,\n testId,\n}: MetricCardProps) {\n const accentStyle =\n accent && accent !== 'default' ? { color: `var(--color-${accent})` } : undefined\n const deltaGood = delta?.good ?? delta?.direction === 'up'\n const isInteractive = Boolean(href || onSelect)\n const card = (\n <Card\n variant=\"elevated\"\n className={cn('card-hover min-w-0 rounded-xl p-5', className)}\n data-testid={isInteractive ? undefined : testId}\n aria-busy={isLoading || undefined}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <p className=\"min-w-0 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {label}\n </p>\n {Icon && <Icon className=\"size-4 shrink-0\" style={accentStyle} />}\n </div>\n {isLoading ? (\n <div\n className=\"mt-2 h-8 w-20 animate-pulse rounded bg-muted\"\n data-slot=\"metric-card-skeleton\"\n />\n ) : (\n <p\n className=\"mt-2 font-display text-2xl font-semibold tracking-tight [overflow-wrap:anywhere]\"\n data-testid={testId && `${testId}-value`}\n >\n {value}\n </p>\n )}\n <div className=\"mt-1 flex items-center gap-2\">\n {delta && !isLoading && (\n <span\n className={cn(\n 'inline-flex items-center gap-0.5 text-xs font-medium',\n deltaGood ? 'text-success' : 'text-destructive'\n )}\n >\n {delta.direction === 'up' ? (\n <ArrowUpRight className=\"size-3\" />\n ) : (\n <ArrowDownRight className=\"size-3\" />\n )}\n {delta.value}\n </span>\n )}\n {hint && <span className=\"text-xs text-muted-foreground\">{hint}</span>}\n </div>\n </Card>\n )\n if (!isInteractive) return card\n return (\n <ActionLink\n href={href}\n onSelect={onSelect}\n className=\"block rounded-xl text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n data-testid={testId}\n >\n {card}\n </ActionLink>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport interface StatItem {\n value: string\n label: string\n /** Optional caption under the label (e.g. a qualifier or unit). */\n sub?: string\n}\n\nexport interface StatGroupProps {\n items: StatItem[]\n testId?: string\n}\n\nconst GRID: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-2 sm:grid-cols-3',\n 4: 'grid-cols-2 lg:grid-cols-4',\n}\n\n/** Big-number stat group — headline metrics with captions. */\nexport function StatGroup({ items, testId }: StatGroupProps) {\n const list = items ?? []\n const cols = GRID[Math.min(list.length, 4)] ?? GRID[4]\n return (\n <dl className={cn('grid gap-8', cols)} data-testid={testId}>\n {list.map((item, i) => (\n <div key={i} className=\"min-w-0 text-center\" data-testid={testId && `${testId}-item-${i}`}>\n <dt className=\"sr-only\">{item.label}</dt>\n <dd className=\"text-4xl font-semibold tracking-tight [overflow-wrap:anywhere] sm:text-5xl\">\n {item.value}\n </dd>\n <p className=\"mt-2 text-sm text-muted-foreground\">{item.label}</p>\n {item.sub && <p className=\"mt-1 text-xs text-muted-foreground/80\">{item.sub}</p>}\n </div>\n ))}\n </dl>\n )\n}\n"]}
@@ -1,26 +1,26 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkABUO6PIQ_cjs = require('./chunk-ABUO6PIQ.cjs');
4
+ var chunk3AFWGEDJ_cjs = require('./chunk-3AFWGEDJ.cjs');
5
+ var chunkDVUZTGVL_cjs = require('./chunk-DVUZTGVL.cjs');
6
+ var chunkWO7QAVTL_cjs = require('./chunk-WO7QAVTL.cjs');
5
7
  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 chunkNSNHRZBH_cjs = require('./chunk-NSNHRZBH.cjs');
8
9
  var chunkRQ2Y7USX_cjs = require('./chunk-RQ2Y7USX.cjs');
9
10
  var chunkAHDJXIUB_cjs = require('./chunk-AHDJXIUB.cjs');
10
11
  var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
11
- var chunk3AFWGEDJ_cjs = require('./chunk-3AFWGEDJ.cjs');
12
- var chunkDVUZTGVL_cjs = require('./chunk-DVUZTGVL.cjs');
13
- var chunkR26BK7YL_cjs = require('./chunk-R26BK7YL.cjs');
14
12
  var chunkV4ISCZJ7_cjs = require('./chunk-V4ISCZJ7.cjs');
15
13
  var chunk2EI7NCUA_cjs = require('./chunk-2EI7NCUA.cjs');
16
14
  var chunkC2CWWEHO_cjs = require('./chunk-C2CWWEHO.cjs');
15
+ var chunkEYKISBDO_cjs = require('./chunk-EYKISBDO.cjs');
16
+ var chunkDTROMMDX_cjs = require('./chunk-DTROMMDX.cjs');
17
17
  var chunk7RGLTF76_cjs = require('./chunk-7RGLTF76.cjs');
18
18
  var chunkJSTKEZBS_cjs = require('./chunk-JSTKEZBS.cjs');
19
19
  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 chunkWO7QAVTL_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: chunkWO7QAVTL_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(chunkWO7QAVTL_cjs.SkillTypeBadge, { type }),
414
+ isGlobal && /* @__PURE__ */ jsxRuntime.jsx(chunkWO7QAVTL_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
+ chunkWO7QAVTL_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
+ chunkWO7QAVTL_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
+ chunkWO7QAVTL_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
+ chunkWO7QAVTL_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: chunkWO7QAVTL_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(chunkWO7QAVTL_cjs.SkillTypeBadge, { type }),
519
+ isGlobal && /* @__PURE__ */ jsxRuntime.jsx(chunkWO7QAVTL_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(chunkWO7QAVTL_cjs.SkillActionButton, { label: l.preview, onClick: () => onPreview(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "size-4" }) }),
525
+ onEdit && /* @__PURE__ */ jsxRuntime.jsx(chunkWO7QAVTL_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
+ chunkWO7QAVTL_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(chunkWO7QAVTL_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(chunkNSNHRZBH_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(chunkNSNHRZBH_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 : chunkWO7QAVTL_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 = { ...chunkWO7QAVTL_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 ? chunkWO7QAVTL_cjs.STEP_LABEL_CURRENT : ui.cn(chunkWO7QAVTL_cjs.STEP_LABEL, chunkWO7QAVTL_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 ?? chunkWO7QAVTL_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
+ chunkWO7QAVTL_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
+ chunkNSNHRZBH_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
+ chunkNSNHRZBH_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-KPO67GBR.cjs.map
8370
+ //# sourceMappingURL=chunk-KPO67GBR.cjs.map