@arbidocs/blocks 0.5.20 → 0.5.21

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 (183) hide show
  1. package/dist/{ConnectedNativeDocxComparison-KUDFJ3GG.js → ConnectedNativeDocxComparison-4X7H57LE.js} +9 -9
  2. package/dist/{ConnectedStreamedWordArtifact-JD2XZCYP.js.map → ConnectedNativeDocxComparison-4X7H57LE.js.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-FUNR66KP.cjs → ConnectedNativeDocxComparison-7WTVHEKI.cjs} +10 -10
  4. package/dist/{ConnectedNativeDocxComparison-FUNR66KP.cjs.map → ConnectedNativeDocxComparison-7WTVHEKI.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxEditor-G6R3SFZ3.js → ConnectedNativeDocxEditor-I6RQUSR3.js} +7 -7
  6. package/dist/{ConnectedNativeDocxEditor-G6R3SFZ3.js.map → ConnectedNativeDocxEditor-I6RQUSR3.js.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-XVCAXAAU.cjs → ConnectedNativeDocxEditor-PZ2ASQO3.cjs} +9 -9
  8. package/dist/{ConnectedNativeDocxEditor-XVCAXAAU.cjs.map → ConnectedNativeDocxEditor-PZ2ASQO3.cjs.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-JD2XZCYP.js → ConnectedStreamedWordArtifact-KCYSJ3B2.js} +9 -9
  10. package/dist/{ConnectedNativeDocxComparison-KUDFJ3GG.js.map → ConnectedStreamedWordArtifact-KCYSJ3B2.js.map} +1 -1
  11. package/dist/{ConnectedStreamedWordArtifact-P55WP3MC.cjs → ConnectedStreamedWordArtifact-Q5KC4W7O.cjs} +10 -10
  12. package/dist/ConnectedStreamedWordArtifact-Q5KC4W7O.cjs.map +1 -0
  13. package/dist/{NativeDocxEditor-6O7UMP7Y.cjs → NativeDocxEditor-JUTTA46L.cjs} +8 -8
  14. package/dist/{NativeDocxEditor-6O7UMP7Y.cjs.map → NativeDocxEditor-JUTTA46L.cjs.map} +1 -1
  15. package/dist/{NativeDocxEditor-MHO7LF4E.js → NativeDocxEditor-PSC3JWWA.js} +4 -4
  16. package/dist/{NativeDocxEditor-MHO7LF4E.js.map → NativeDocxEditor-PSC3JWWA.js.map} +1 -1
  17. package/dist/{WorkspaceTableView-UR3WLSJG.cjs → WorkspaceTableView-6JVHGDUB.cjs} +8 -8
  18. package/dist/{WorkspaceTableView-UR3WLSJG.cjs.map → WorkspaceTableView-6JVHGDUB.cjs.map} +1 -1
  19. package/dist/{WorkspaceTableView-TNUEU6OO.js → WorkspaceTableView-ECPHGWHF.js} +6 -6
  20. package/dist/{WorkspaceTableView-TNUEU6OO.js.map → WorkspaceTableView-ECPHGWHF.js.map} +1 -1
  21. package/dist/agents/index.cjs +326 -326
  22. package/dist/agents/index.js +4 -4
  23. package/dist/auth/index.cjs +44 -44
  24. package/dist/auth/index.js +2 -2
  25. package/dist/auth0/index.cjs +4 -3
  26. package/dist/auth0/index.cjs.map +1 -1
  27. package/dist/auth0/index.js +4 -3
  28. package/dist/auth0/index.js.map +1 -1
  29. package/dist/{chunk-BQNDBWLB.js → chunk-4ML5AMMO.js} +3 -3
  30. package/dist/{chunk-BQNDBWLB.js.map → chunk-4ML5AMMO.js.map} +1 -1
  31. package/dist/{chunk-ODFDMORE.cjs → chunk-4S34OHJX.cjs} +4 -4
  32. package/dist/{chunk-ODFDMORE.cjs.map → chunk-4S34OHJX.cjs.map} +1 -1
  33. package/dist/{chunk-QS3AJ3FT.cjs → chunk-5H37UWWS.cjs} +5 -5
  34. package/dist/{chunk-QS3AJ3FT.cjs.map → chunk-5H37UWWS.cjs.map} +1 -1
  35. package/dist/{chunk-2FQ4CMRY.cjs → chunk-5ZU2XYXO.cjs} +278 -4
  36. package/dist/chunk-5ZU2XYXO.cjs.map +1 -0
  37. package/dist/{chunk-JS7KJRKG.js → chunk-75Z5AUMM.js} +3 -3
  38. package/dist/{chunk-JS7KJRKG.js.map → chunk-75Z5AUMM.js.map} +1 -1
  39. package/dist/chunk-BITGO5LI.cjs +18 -0
  40. package/dist/{chunk-WDCD3OZH.cjs.map → chunk-BITGO5LI.cjs.map} +1 -1
  41. package/dist/{chunk-E2SKI6VO.js → chunk-D3BHUDOU.js} +3 -3
  42. package/dist/{chunk-E2SKI6VO.js.map → chunk-D3BHUDOU.js.map} +1 -1
  43. package/dist/{chunk-WJZK5GAV.js → chunk-DTENNALR.js} +3 -3
  44. package/dist/{chunk-WJZK5GAV.js.map → chunk-DTENNALR.js.map} +1 -1
  45. package/dist/{chunk-P5RZPEHW.cjs → chunk-F2BYURQZ.cjs} +5 -5
  46. package/dist/{chunk-P5RZPEHW.cjs.map → chunk-F2BYURQZ.cjs.map} +1 -1
  47. package/dist/{chunk-HNGGKANF.js → chunk-F6LC2CRB.js} +5 -5
  48. package/dist/{chunk-HNGGKANF.js.map → chunk-F6LC2CRB.js.map} +1 -1
  49. package/dist/{chunk-MBRUUST5.js → chunk-F7IQGPZH.js} +4 -4
  50. package/dist/{chunk-MBRUUST5.js.map → chunk-F7IQGPZH.js.map} +1 -1
  51. package/dist/{chunk-X2SQZY7U.js → chunk-FERNQVSH.js} +274 -8
  52. package/dist/chunk-FERNQVSH.js.map +1 -0
  53. package/dist/{chunk-KBSKN3NF.cjs → chunk-FQIJICZE.cjs} +9 -9
  54. package/dist/{chunk-KBSKN3NF.cjs.map → chunk-FQIJICZE.cjs.map} +1 -1
  55. package/dist/{chunk-SSJLYCX7.cjs → chunk-FV32BTXV.cjs} +84 -56
  56. package/dist/chunk-FV32BTXV.cjs.map +1 -0
  57. package/dist/{chunk-2YZ35KKK.cjs → chunk-FZVAJFRH.cjs} +80 -84
  58. package/dist/chunk-FZVAJFRH.cjs.map +1 -0
  59. package/dist/{chunk-HHJALHRS.js → chunk-H5XHCIWY.js} +83 -55
  60. package/dist/chunk-H5XHCIWY.js.map +1 -0
  61. package/dist/{chunk-TBNXJHTP.js → chunk-IA5BYEO7.js} +7 -5
  62. package/dist/chunk-IA5BYEO7.js.map +1 -0
  63. package/dist/{chunk-NFTANEP6.cjs → chunk-IJQ5DIZT.cjs} +5 -5
  64. package/dist/{chunk-NFTANEP6.cjs.map → chunk-IJQ5DIZT.cjs.map} +1 -1
  65. package/dist/{chunk-NMZI3K6R.cjs → chunk-IRY63R4L.cjs} +16 -2
  66. package/dist/chunk-IRY63R4L.cjs.map +1 -0
  67. package/dist/{chunk-MVP7METT.js → chunk-IXBJEQH5.js} +4 -80
  68. package/dist/chunk-IXBJEQH5.js.map +1 -0
  69. package/dist/{chunk-PAKPD3LB.js → chunk-JKJI5SRF.js} +3 -3
  70. package/dist/{chunk-PAKPD3LB.js.map → chunk-JKJI5SRF.js.map} +1 -1
  71. package/dist/{chunk-EWRRV37Z.cjs → chunk-K237IYOD.cjs} +2 -80
  72. package/dist/chunk-K237IYOD.cjs.map +1 -0
  73. package/dist/chunk-KL6XOSEN.js +156 -0
  74. package/dist/chunk-KL6XOSEN.js.map +1 -0
  75. package/dist/{chunk-TRDY3ZT7.js → chunk-LU23I2HS.js} +3 -3
  76. package/dist/{chunk-TRDY3ZT7.js.map → chunk-LU23I2HS.js.map} +1 -1
  77. package/dist/{chunk-SAYEQE5R.cjs → chunk-MJT7KHHT.cjs} +48 -48
  78. package/dist/{chunk-SAYEQE5R.cjs.map → chunk-MJT7KHHT.cjs.map} +1 -1
  79. package/dist/chunk-MSCDYRSA.cjs +18 -0
  80. package/dist/{chunk-JPNFVDH4.cjs.map → chunk-MSCDYRSA.cjs.map} +1 -1
  81. package/dist/chunk-MSPNYW6Z.cjs +165 -0
  82. package/dist/chunk-MSPNYW6Z.cjs.map +1 -0
  83. package/dist/{chunk-2R3GGNPA.js → chunk-MZA7GMOH.js} +16 -3
  84. package/dist/chunk-MZA7GMOH.js.map +1 -0
  85. package/dist/{chunk-4UGVMOTK.cjs → chunk-NML42O7Q.cjs} +4 -4
  86. package/dist/{chunk-4UGVMOTK.cjs.map → chunk-NML42O7Q.cjs.map} +1 -1
  87. package/dist/{chunk-YKGZG353.js → chunk-NVRJ6WTR.js} +3 -3
  88. package/dist/{chunk-YKGZG353.js.map → chunk-NVRJ6WTR.js.map} +1 -1
  89. package/dist/{chunk-ZW4QFL3Y.cjs → chunk-PFVCOUU6.cjs} +13 -13
  90. package/dist/{chunk-ZW4QFL3Y.cjs.map → chunk-PFVCOUU6.cjs.map} +1 -1
  91. package/dist/{chunk-QLLV5UUI.cjs → chunk-PSIKUQYM.cjs} +5 -5
  92. package/dist/{chunk-QLLV5UUI.cjs.map → chunk-PSIKUQYM.cjs.map} +1 -1
  93. package/dist/{chunk-R53JJZNW.js → chunk-RVKVGS72.js} +76 -79
  94. package/dist/chunk-RVKVGS72.js.map +1 -0
  95. package/dist/{chunk-H32DV7XS.cjs → chunk-UAEYU2NN.cjs} +136 -2
  96. package/dist/chunk-UAEYU2NN.cjs.map +1 -0
  97. package/dist/{chunk-USZ32EKR.js → chunk-VFZLZSJ3.js} +4 -4
  98. package/dist/{chunk-USZ32EKR.js.map → chunk-VFZLZSJ3.js.map} +1 -1
  99. package/dist/{chunk-XRL4R2TT.js → chunk-WZ63HE2C.js} +136 -4
  100. package/dist/chunk-WZ63HE2C.js.map +1 -0
  101. package/dist/{chunk-F72ZD5Q2.cjs → chunk-YD3RN2FY.cjs} +3 -3
  102. package/dist/{chunk-F72ZD5Q2.cjs.map → chunk-YD3RN2FY.cjs.map} +1 -1
  103. package/dist/{chunk-VYFRW6NN.cjs → chunk-YRHQ7OLG.cjs} +3 -3
  104. package/dist/{chunk-VYFRW6NN.cjs.map → chunk-YRHQ7OLG.cjs.map} +1 -1
  105. package/dist/{chunk-PYJUIEYV.js → chunk-YT5OOFK3.js} +3 -3
  106. package/dist/{chunk-PYJUIEYV.js.map → chunk-YT5OOFK3.js.map} +1 -1
  107. package/dist/{chunk-XCL6ZCI5.js → chunk-Z6CAKLA5.js} +3 -3
  108. package/dist/{chunk-XCL6ZCI5.js.map → chunk-Z6CAKLA5.js.map} +1 -1
  109. package/dist/{chunk-RAYCOBF7.cjs → chunk-ZESMRGDV.cjs} +7 -5
  110. package/dist/chunk-ZESMRGDV.cjs.map +1 -0
  111. package/dist/{chunk-6FWUZGPF.js → chunk-ZMYK7XTS.js} +4 -4
  112. package/dist/{chunk-6FWUZGPF.js.map → chunk-ZMYK7XTS.js.map} +1 -1
  113. package/dist/connect/docx.cjs +13 -13
  114. package/dist/connect/docx.js +9 -9
  115. package/dist/connect/index.cjs +1138 -906
  116. package/dist/connect/index.cjs.map +1 -1
  117. package/dist/connect/index.d.ts +1 -0
  118. package/dist/connect/index.js +480 -249
  119. package/dist/connect/index.js.map +1 -1
  120. package/dist/connect/viewer.cjs +17 -17
  121. package/dist/connect/viewer.js +6 -6
  122. package/dist/connection/ConnectedAccountAccessBadge.d.ts +1 -0
  123. package/dist/connection/ConnectedSettings.d.ts +6 -2
  124. package/dist/connection/ConnectedSsoDisconnect.d.ts +2 -0
  125. package/dist/connection/auth/support.d.ts +1 -0
  126. package/dist/connection/auth/useLoginActions.d.ts +1 -1
  127. package/dist/connection/settings-page/ConnectedAccountSettings.d.ts +5 -1
  128. package/dist/document-tools/AdoptSignatureDialog.d.ts +3 -1
  129. package/dist/document-tools/index.cjs +20 -20
  130. package/dist/document-tools/index.js +3 -3
  131. package/dist/document-tools/viewer/index.cjs +10 -10
  132. package/dist/document-tools/viewer/index.js +3 -3
  133. package/dist/docx/index.cjs +51 -51
  134. package/dist/docx/index.js +4 -4
  135. package/dist/facts/index.cjs +55 -55
  136. package/dist/facts/index.js +3 -3
  137. package/dist/home/index.cjs +15 -16
  138. package/dist/home/index.cjs.map +1 -1
  139. package/dist/home/index.js +1 -2
  140. package/dist/home/index.js.map +1 -1
  141. package/dist/index.cjs +425 -425
  142. package/dist/index.js +7 -7
  143. package/dist/settings/IdentityVerification.d.ts +3 -1
  144. package/dist/settings/ProfileCard.d.ts +3 -1
  145. package/dist/settings/SettingsPanel.d.ts +6 -0
  146. package/dist/settings/SubscriptionParts.d.ts +0 -11
  147. package/dist/settings/index.cjs +162 -166
  148. package/dist/settings/index.d.ts +1 -1
  149. package/dist/settings/index.js +3 -3
  150. package/dist/workflow-canvas/index.cjs +17 -17
  151. package/dist/workflow-canvas/index.js +4 -4
  152. package/dist/workspaces/WorkspaceFormParts.d.ts +10 -2
  153. package/dist/workspaces/index.cjs +52 -287
  154. package/dist/workspaces/index.cjs.map +1 -1
  155. package/dist/workspaces/index.js +9 -268
  156. package/dist/workspaces/index.js.map +1 -1
  157. package/node_modules/@arbidocs/coedit/package.json +1 -1
  158. package/package.json +5 -5
  159. package/dist/ConnectedStreamedWordArtifact-P55WP3MC.cjs.map +0 -1
  160. package/dist/chunk-2FQ4CMRY.cjs.map +0 -1
  161. package/dist/chunk-2R3GGNPA.js.map +0 -1
  162. package/dist/chunk-2YZ35KKK.cjs.map +0 -1
  163. package/dist/chunk-5TDGVOR5.js +0 -142
  164. package/dist/chunk-5TDGVOR5.js.map +0 -1
  165. package/dist/chunk-6AXJBTHM.js +0 -77
  166. package/dist/chunk-6AXJBTHM.js.map +0 -1
  167. package/dist/chunk-EWRRV37Z.cjs.map +0 -1
  168. package/dist/chunk-H32DV7XS.cjs.map +0 -1
  169. package/dist/chunk-HHJALHRS.js.map +0 -1
  170. package/dist/chunk-JPNFVDH4.cjs +0 -18
  171. package/dist/chunk-MKNSIZWR.cjs +0 -84
  172. package/dist/chunk-MKNSIZWR.cjs.map +0 -1
  173. package/dist/chunk-MVP7METT.js.map +0 -1
  174. package/dist/chunk-NMZI3K6R.cjs.map +0 -1
  175. package/dist/chunk-R53JJZNW.js.map +0 -1
  176. package/dist/chunk-RAYCOBF7.cjs.map +0 -1
  177. package/dist/chunk-REH7PX3N.cjs +0 -145
  178. package/dist/chunk-REH7PX3N.cjs.map +0 -1
  179. package/dist/chunk-SSJLYCX7.cjs.map +0 -1
  180. package/dist/chunk-TBNXJHTP.js.map +0 -1
  181. package/dist/chunk-WDCD3OZH.cjs +0 -18
  182. package/dist/chunk-X2SQZY7U.js.map +0 -1
  183. package/dist/chunk-XRL4R2TT.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkPFVCOUU6_cjs = require('./chunk-PFVCOUU6.cjs');
5
+ var chunk5H37UWWS_cjs = require('./chunk-5H37UWWS.cjs');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function ConnectedStreamedWordArtifact({
9
+ fontBaseUrl,
10
+ ...props
11
+ }) {
12
+ const adapter = chunkPFVCOUU6_cjs.useConnectedNativeDocxAdapter(fontBaseUrl);
13
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5H37UWWS_cjs.StreamedWordArtifact, { ...props, adapter });
14
+ }
15
+
16
+ exports.ConnectedStreamedWordArtifact = ConnectedStreamedWordArtifact;
17
+ //# sourceMappingURL=chunk-MSCDYRSA.cjs.map
18
+ //# sourceMappingURL=chunk-MSCDYRSA.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":["useConnectedNativeDocxAdapter","jsx","StreamedWordArtifact"],"mappings":";;;;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,uBAAOC,cAAA,CAACC,sCAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-JPNFVDH4.cjs","sourcesContent":["import { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\nimport {\n StreamedWordArtifact,\n type StreamedWordArtifactProps,\n} from '../../docx/StreamedWordArtifact'\n\nexport function ConnectedStreamedWordArtifact({\n fontBaseUrl,\n ...props\n}: Omit<StreamedWordArtifactProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <StreamedWordArtifact {...props} adapter={adapter} />\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":["useConnectedNativeDocxAdapter","jsx","StreamedWordArtifact"],"mappings":";;;;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,uBAAOC,cAAA,CAACC,sCAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-MSCDYRSA.cjs","sourcesContent":["import { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\nimport {\n StreamedWordArtifact,\n type StreamedWordArtifactProps,\n} from '../../docx/StreamedWordArtifact'\n\nexport function ConnectedStreamedWordArtifact({\n fontBaseUrl,\n ...props\n}: Omit<StreamedWordArtifactProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <StreamedWordArtifact {...props} adapter={adapter} />\n}\n"]}
@@ -0,0 +1,165 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkK237IYOD_cjs = require('./chunk-K237IYOD.cjs');
5
+ var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
6
+ var react = require('react');
7
+ var ui = require('@arbidocs/react/ui');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ var DEFAULT_SSO_LOGIN_BUTTON_LABELS = {
11
+ loginWith: "Login with",
12
+ brandIconAlt: "ARBI Docs"
13
+ };
14
+ function SsoLoginButton({
15
+ onClick,
16
+ brandIconSrc = ui.ARBI_MARK_SRC,
17
+ brandIconAlt,
18
+ testId,
19
+ containerTestId,
20
+ labels
21
+ }) {
22
+ const l = react.useMemo(() => ({ ...DEFAULT_SSO_LOGIN_BUTTON_LABELS, ...labels }), [labels]);
23
+ return /* @__PURE__ */ jsxRuntime.jsx(
24
+ "div",
25
+ {
26
+ "data-slot": "sso-login",
27
+ "data-testid": chunkMHVNT4J3_cjs.testIdOr(containerTestId, { testId: "sso-login-button-container" }),
28
+ className: "text-center",
29
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
30
+ ui.Button,
31
+ {
32
+ onClick,
33
+ className: "flex w-full items-center justify-center gap-3",
34
+ variant: "outline",
35
+ "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "login-with-arbi-button" }),
36
+ children: [
37
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: l.loginWith }),
38
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 pr-1", children: [
39
+ /* @__PURE__ */ jsxRuntime.jsx(
40
+ "img",
41
+ {
42
+ src: brandIconSrc,
43
+ alt: brandIconAlt ?? l.brandIconAlt,
44
+ className: "h-5 w-5 rounded object-contain"
45
+ }
46
+ ),
47
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "h-5 w-5", viewBox: "0 0 24 24", fill: "#0A66C2", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" }) }),
48
+ /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "h-5 w-5", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
49
+ /* @__PURE__ */ jsxRuntime.jsx(
50
+ "path",
51
+ {
52
+ fill: "#4285F4",
53
+ d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
54
+ }
55
+ ),
56
+ /* @__PURE__ */ jsxRuntime.jsx(
57
+ "path",
58
+ {
59
+ fill: "#34A853",
60
+ d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
61
+ }
62
+ ),
63
+ /* @__PURE__ */ jsxRuntime.jsx(
64
+ "path",
65
+ {
66
+ fill: "#FBBC05",
67
+ d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
68
+ }
69
+ ),
70
+ /* @__PURE__ */ jsxRuntime.jsx(
71
+ "path",
72
+ {
73
+ fill: "#EA4335",
74
+ d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
75
+ }
76
+ )
77
+ ] }),
78
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "h-5 w-5", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z" }) })
79
+ ] })
80
+ ]
81
+ }
82
+ )
83
+ }
84
+ );
85
+ }
86
+ var KEYS = ["email", "password", "next"];
87
+ function safeNext(next) {
88
+ if (!next || !next.startsWith("/") || next.startsWith("//") || next.startsWith("/\\")) return null;
89
+ return next;
90
+ }
91
+ function parseFragmentCredentials(hash) {
92
+ const { params, trailingFragment } = chunkK237IYOD_cjs.splitAuthHash(hash);
93
+ const email = params.get("email")?.trim();
94
+ const password = params.get("password");
95
+ if (!email || !password) return null;
96
+ const next = safeNext(params.get("next"));
97
+ return { email, password, next: next && chunkK237IYOD_cjs.withTrailingFragment(next, trailingFragment) };
98
+ }
99
+ function consumeFragmentCredentials() {
100
+ if (typeof window === "undefined") return null;
101
+ const { hash, pathname, search } = window.location;
102
+ const { params, trailingFragment } = chunkK237IYOD_cjs.splitAuthHash(hash);
103
+ if (!KEYS.some((k) => k !== "next" && params.has(k))) return null;
104
+ const credentials = parseFragmentCredentials(hash);
105
+ for (const k of KEYS) params.delete(k);
106
+ const rest = params.toString();
107
+ const kept = rest ? `#${rest}${trailingFragment}` : trailingFragment;
108
+ window.history.replaceState(window.history.state, "", `${pathname}${search}${kept}`);
109
+ return credentials;
110
+ }
111
+ var taken = null;
112
+ function take() {
113
+ const fresh = consumeFragmentCredentials();
114
+ if (fresh) taken = fresh;
115
+ return taken;
116
+ }
117
+ function useFragmentCredentials({
118
+ enabled = false,
119
+ onCredentials
120
+ }) {
121
+ const [credentials] = react.useState(() => enabled ? take() : null);
122
+ const handedOver = react.useRef(false);
123
+ const callback = react.useRef(onCredentials);
124
+ callback.current = onCredentials;
125
+ react.useEffect(() => {
126
+ if (!credentials || handedOver.current) return;
127
+ handedOver.current = true;
128
+ taken = null;
129
+ callback.current(credentials);
130
+ }, [credentials]);
131
+ return credentials && { email: credentials.email, next: credentials.next };
132
+ }
133
+
134
+ // src/auth/return-url.ts
135
+ var RETURN_URL_KEY = "arbi_return_url";
136
+ function normalizeAuthPath(pathname) {
137
+ return pathname.replace(/\/+$/, "") || "/";
138
+ }
139
+ function isAuthRoutePath(pathname) {
140
+ const p = normalizeAuthPath(pathname);
141
+ return p === "/login" || p === "/sso";
142
+ }
143
+ function preserveAuthReturnUrl(url) {
144
+ const { pathname, search, hash } = window.location;
145
+ const urlToSave = url || `${pathname}${search}${hash}`;
146
+ const guard = url ? new URL(url, "http://dummy-base.invalid") : { pathname, search, hash };
147
+ const path = normalizeAuthPath(guard.pathname);
148
+ const isAuthPage = isAuthRoutePath(guard.pathname);
149
+ const isBareHome = path === "/" && !guard.search && !guard.hash;
150
+ const isEmbedded = path.startsWith("/word/") || path.startsWith("/chrome/");
151
+ if (!isAuthPage && !isBareHome && !isEmbedded) {
152
+ sessionStorage.setItem(RETURN_URL_KEY, urlToSave);
153
+ }
154
+ }
155
+
156
+ exports.DEFAULT_SSO_LOGIN_BUTTON_LABELS = DEFAULT_SSO_LOGIN_BUTTON_LABELS;
157
+ exports.SsoLoginButton = SsoLoginButton;
158
+ exports.consumeFragmentCredentials = consumeFragmentCredentials;
159
+ exports.isAuthRoutePath = isAuthRoutePath;
160
+ exports.normalizeAuthPath = normalizeAuthPath;
161
+ exports.parseFragmentCredentials = parseFragmentCredentials;
162
+ exports.preserveAuthReturnUrl = preserveAuthReturnUrl;
163
+ exports.useFragmentCredentials = useFragmentCredentials;
164
+ //# sourceMappingURL=chunk-MSPNYW6Z.cjs.map
165
+ //# sourceMappingURL=chunk-MSPNYW6Z.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/SsoLoginButton.tsx","../src/connection/auth/fragment-credentials.ts","../src/auth/return-url.ts"],"names":["ARBI_MARK_SRC","useMemo","jsx","testIdOr","jsxs","Button","splitAuthHash","withTrailingFragment","useState","useRef","useEffect"],"mappings":"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","file":"chunk-MSPNYW6Z.cjs","sourcesContent":["import { useMemo } from 'react'\nimport { ARBI_MARK_SRC, Button } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Every fixed string of the SSO button. `brandIconAlt` prop wins over `brandIconAlt` label. */\nexport interface SsoLoginButtonLabels {\n loginWith: string\n brandIconAlt: string\n}\n\nexport const DEFAULT_SSO_LOGIN_BUTTON_LABELS: SsoLoginButtonLabels = {\n loginWith: 'Login with',\n brandIconAlt: 'ARBI Docs',\n}\n\nexport interface SsoLoginButtonProps {\n labels?: Partial<SsoLoginButtonLabels>\n onClick: () => void\n /** Source of the brand mark shown first. */\n brandIconSrc?: string\n brandIconAlt?: string\n /** Button test id (default `login-with-arbi-button`). */\n testId?: string\n /** Wrapper test id (default `sso-login-button-container`). */\n containerTestId?: string\n}\n\n/** \"Login with\" button showing the ARBI mark and the supported identity providers. */\nexport function SsoLoginButton({\n onClick,\n brandIconSrc = ARBI_MARK_SRC,\n brandIconAlt,\n testId,\n containerTestId,\n labels,\n}: SsoLoginButtonProps) {\n const l = useMemo(() => ({ ...DEFAULT_SSO_LOGIN_BUTTON_LABELS, ...labels }), [labels])\n return (\n <div\n data-slot=\"sso-login\"\n data-testid={testIdOr(containerTestId, { testId: 'sso-login-button-container' })}\n className=\"text-center\"\n >\n <Button\n onClick={onClick}\n className=\"flex w-full items-center justify-center gap-3\"\n variant=\"outline\"\n data-testid={testIdOr(testId, { testId: 'login-with-arbi-button' })}\n >\n <span>{l.loginWith}</span>\n <div className=\"flex items-center gap-3 pr-1\">\n <img\n src={brandIconSrc}\n alt={brandIconAlt ?? l.brandIconAlt}\n className=\"h-5 w-5 rounded object-contain\"\n />\n\n {/* LinkedIn */}\n <svg className=\"h-5 w-5\" viewBox=\"0 0 24 24\" fill=\"#0A66C2\" aria-hidden=\"true\">\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n </svg>\n\n {/* Google */}\n <svg className=\"h-5 w-5\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n fill=\"#4285F4\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n />\n </svg>\n\n {/* Apple */}\n <svg className=\"h-5 w-5\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z\" />\n </svg>\n </div>\n </Button>\n </div>\n )\n}\n","/**\n * Sign-in from the URL fragment, for mock and demo deployments only:\n *\n * <login page>#email=<urlencoded>&password=<urlencoded>[&next=/path]\n *\n * OFF by default: nothing is read unless the page opts in (`enabled`). A password in a link is\n * visible to whoever holds the link, so a real deployment never turns this on. When on, the\n * fragment is read once and scrubbed from the address bar (`history.replaceState`) before the\n * first render commits, so it does not linger in history or get copied along with the URL. The\n * fragment never reaches the server; the credentials are never logged nor stored.\n *\n * Values are form-urlencoded (`URLSearchParams`): encode a `+` in a password as `%2B`. Other\n * auth-page parameters (`#verify=…`) and a trailing fragment after a second `#` (a call key) are\n * left in place.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport { splitAuthHash, withTrailingFragment } from './auth-hash'\n\nexport interface FragmentCredentials {\n email: string\n password: string\n /** Where to go once signed in: a same-origin path, or `null`. */\n next: string | null\n}\n\nconst KEYS = ['email', 'password', 'next'] as const\n\n/** A same-origin absolute path (`/app/…`), never a scheme or a protocol-relative URL. */\nfunction safeNext(next: string | null): string | null {\n if (!next || !next.startsWith('/') || next.startsWith('//') || next.startsWith('/\\\\')) return null\n return next\n}\n\n/** The credentials in an auth page's hash, or `null` without both an email and a password. */\nexport function parseFragmentCredentials(hash: string): FragmentCredentials | null {\n const { params, trailingFragment } = splitAuthHash(hash)\n const email = params.get('email')?.trim()\n const password = params.get('password')\n if (!email || !password) return null\n const next = safeNext(params.get('next'))\n return { email, password, next: next && withTrailingFragment(next, trailingFragment) }\n}\n\n/**\n * Read the credentials from the current URL's fragment and scrub them (with `next`) from the\n * address bar, keeping any other fragment parameters. `null` when there are none; a fragment with\n * only one of email/password is scrubbed all the same.\n */\nexport function consumeFragmentCredentials(): FragmentCredentials | null {\n if (typeof window === 'undefined') return null\n const { hash, pathname, search } = window.location\n const { params, trailingFragment } = splitAuthHash(hash)\n if (!KEYS.some((k) => k !== 'next' && params.has(k))) return null\n const credentials = parseFragmentCredentials(hash)\n for (const k of KEYS) params.delete(k)\n const rest = params.toString()\n const kept = rest ? `#${rest}${trailingFragment}` : trailingFragment\n window.history.replaceState(window.history.state, '', `${pathname}${search}${kept}`)\n return credentials\n}\n\n// Read once per page load and held only until the sign-in is handed over (a strict-mode double\n// render reads the already-scrubbed URL, so it takes these instead).\nlet taken: FragmentCredentials | null = null\n\nfunction take(): FragmentCredentials | null {\n const fresh = consumeFragmentCredentials()\n if (fresh) taken = fresh\n return taken\n}\n\nexport interface UseFragmentCredentialsOptions {\n /** Opt in. Off by default: only a mock/demo deployment turns this on. */\n enabled?: boolean\n /** Sign in with them (the same path as the form). Called once. */\n onCredentials: (credentials: FragmentCredentials) => void\n}\n\n/**\n * Opt-in sign-in from `#email=…&password=…[&next=…]` (see the top of this file). Returns the\n * email and `next` from the link (to prefill the form should the sign-in fail), or `null`.\n */\nexport function useFragmentCredentials({\n enabled = false,\n onCredentials,\n}: UseFragmentCredentialsOptions): Omit<FragmentCredentials, 'password'> | null {\n // Read (and scrub) during the first render, before any effect or await.\n const [credentials] = useState(() => (enabled ? take() : null))\n const handedOver = useRef(false)\n const callback = useRef(onCredentials)\n callback.current = onCredentials\n\n useEffect(() => {\n if (!credentials || handedOver.current) return\n handedOver.current = true\n taken = null\n callback.current(credentials)\n }, [credentials])\n\n return credentials && { email: credentials.email, next: credentials.next }\n}\n","const RETURN_URL_KEY = 'arbi_return_url'\n\n/**\n * Strip trailing slashes so `/login/` compares equal to `/login` (bare `/`\n * stays `/`). External / typed / marketing links commonly arrive with a\n * trailing slash; without normalizing, `/login/` slips past the auth-page\n * guard below, gets saved as the return URL, and the post-auth effect\n * `window.location.href`-reloads straight back into the login shell —\n * racing session persistence and wedging the user on /login.\n */\nexport function normalizeAuthPath(pathname: string): string {\n return pathname.replace(/\\/+$/, '') || '/'\n}\n\n/**\n * Auth shells we must never save as a return URL nor hard-reload into\n * (trailing-slash tolerant).\n */\nexport function isAuthRoutePath(pathname: string): boolean {\n const p = normalizeAuthPath(pathname)\n return p === '/login' || p === '/sso'\n}\n\n/**\n * Saves the current URL for post-authentication redirect\n * Preserves pathname, search params, and hash\n */\nexport function preserveAuthReturnUrl(url?: string): void {\n const { pathname, search, hash } = window.location\n const urlToSave = url || `${pathname}${search}${hash}`\n // Guard against the URL being saved, not the current page — a caller can be\n // on /login itself and still pass an explicit destination to save for after\n // auth (e.g. a resource-share invite link's `&next=` param), which must not\n // be silently dropped just because /login is where it's being parsed. A\n // fixed dummy base (rather than window.location.origin) resolves a bare\n // path like `/wrk-.../doc-...` without depending on window.location being\n // in a valid state — an absolute `url` (e.g. McpConnect's window.location.href)\n // ignores the base entirely, per the URL spec.\n const guard = url ? new URL(url, 'http://dummy-base.invalid') : { pathname, search, hash }\n const path = normalizeAuthPath(guard.pathname)\n\n // Don't save the auth pages themselves, or the bare home with nothing to\n // return to. Deep links are path-based (e.g. `/wrk-…/con-…/msg-…`), so they\n // carry a non-`/` pathname and are preserved naturally. We still save `/`\n // when it carries a query (e.g. `?review_access=…`) so those flows survive\n // the login round-trip.\n const isAuthPage = isAuthRoutePath(guard.pathname)\n const isBareHome = path === '/' && !guard.search && !guard.hash\n // Embedded add-in panels (Word/Chrome) own their own post-auth state and must\n // never become a saved return URL — otherwise the main-app post-auth effect\n // would `window.location.href` into the panel (a full reload that breaks the\n // just-established session inside the Office iframe → bounce back to login).\n const isEmbedded = path.startsWith('/word/') || path.startsWith('/chrome/')\n\n if (!isAuthPage && !isBareHome && !isEmbedded) {\n sessionStorage.setItem(RETURN_URL_KEY, urlToSave)\n }\n}\n"]}
@@ -50,6 +50,19 @@ function SettingsSection({
50
50
  }
51
51
  );
52
52
  }
53
+ function SettingsDisclosure({
54
+ title,
55
+ children,
56
+ testId
57
+ }) {
58
+ return /* @__PURE__ */ jsxs("details", { className: "[&[open]>summary>svg]:rotate-90", "data-testid": testId, children: [
59
+ /* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer list-none items-center gap-2 rounded py-2 text-sm font-medium text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden", children: [
60
+ /* @__PURE__ */ jsx(ChevronRight, { className: "h-3.5 w-3.5 transition-transform", "aria-hidden": "true" }),
61
+ title
62
+ ] }),
63
+ /* @__PURE__ */ jsx("div", { className: "mt-3 space-y-4", children })
64
+ ] });
65
+ }
53
66
  function SettingsRow({
54
67
  label,
55
68
  labelFor,
@@ -146,6 +159,6 @@ function SettingsDangerZone({
146
159
  ] });
147
160
  }
148
161
 
149
- export { DEFAULT_SETTINGS_DANGER_ZONE_LABELS, SettingsActionRow, SettingsCard, SettingsDangerZone, SettingsPanel, SettingsRow, SettingsSection };
150
- //# sourceMappingURL=chunk-2R3GGNPA.js.map
151
- //# sourceMappingURL=chunk-2R3GGNPA.js.map
162
+ export { DEFAULT_SETTINGS_DANGER_ZONE_LABELS, SettingsActionRow, SettingsCard, SettingsDangerZone, SettingsDisclosure, SettingsPanel, SettingsRow, SettingsSection };
163
+ //# sourceMappingURL=chunk-MZA7GMOH.js.map
164
+ //# sourceMappingURL=chunk-MZA7GMOH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/settings/SettingsPanel.tsx"],"names":[],"mappings":"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","file":"chunk-MZA7GMOH.js","sourcesContent":["import { useMemo, type ComponentProps, type ReactNode } from 'react'\nimport { ChevronDown, ChevronRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\n/** Every fixed string of the danger zone. `label` prop wins. */\nexport interface SettingsDangerZoneLabels {\n dangerZone: string\n}\n\nexport const DEFAULT_SETTINGS_DANGER_ZONE_LABELS: SettingsDangerZoneLabels = {\n dangerZone: 'Danger Zone',\n}\n\nexport interface SettingsPanelProps extends ComponentProps<'div'> {\n /** Stable test id of the panel. */\n testId?: string\n}\n\n/** Centred column of {@link SettingsSection}s with a readable measure. */\nexport function SettingsPanel({ className, testId, ...props }: SettingsPanelProps) {\n return (\n <div\n data-slot=\"settings-panel\"\n data-testid={testId}\n className={cn('mx-auto w-full max-w-xl space-y-6', className)}\n {...props}\n />\n )\n}\n\nexport interface SettingsSectionProps extends Omit<ComponentProps<'section'>, 'title'> {\n /** Small muted icon before the title. */\n icon?: ReactNode\n title?: ReactNode\n description?: ReactNode\n /** Right-aligned control in the heading row (e.g. a Reset button). */\n action?: ReactNode\n testId?: string\n}\n\n/** Titled group of settings: heading row, optional description, then the controls. */\nexport function SettingsSection({\n icon,\n title,\n description,\n action,\n testId,\n className,\n children,\n ...props\n}: SettingsSectionProps) {\n return (\n <section\n data-slot=\"settings-section\"\n data-testid={testId}\n className={cn('space-y-3', className)}\n {...props}\n >\n {(title || action) && (\n <div className=\"flex items-center justify-between gap-3\">\n {title && (\n <div className=\"flex items-center gap-2\">\n {icon && (\n <span className=\"text-muted-foreground [&_svg]:h-4 [&_svg]:w-4\">{icon}</span>\n )}\n <h2 className=\"text-base font-semibold text-foreground\">{title}</h2>\n </div>\n )}\n {action}\n </div>\n )}\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n {children}\n </section>\n )\n}\n\n/** A quiet, closed-by-default group for secondary account settings. */\nexport function SettingsDisclosure({\n title,\n children,\n testId,\n}: {\n title: ReactNode\n children: ReactNode\n testId?: string\n}) {\n return (\n <details className=\"[&[open]>summary>svg]:rotate-90\" data-testid={testId}>\n <summary className=\"flex cursor-pointer list-none items-center gap-2 rounded py-2 text-sm font-medium text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden\">\n <ChevronRight className=\"h-3.5 w-3.5 transition-transform\" aria-hidden=\"true\" />\n {title}\n </summary>\n <div className=\"mt-3 space-y-4\">{children}</div>\n </details>\n )\n}\n\nexport interface SettingsRowProps extends Omit<ComponentProps<'div'>, 'title'> {\n label: ReactNode\n /** Id of the control: renders the label as a `<label htmlFor>` so it toggles the control. */\n labelFor?: string\n description?: ReactNode\n /** The control: switch, select, button. Sits at the end of the row. */\n children?: ReactNode\n testId?: string\n}\n\n/** One setting: label + help text on the left, its control on the right (stacks on phones). */\nexport function SettingsRow({\n label,\n labelFor,\n description,\n children,\n testId,\n className,\n ...props\n}: SettingsRowProps) {\n return (\n <div\n data-slot=\"settings-row\"\n data-testid={testId}\n className={cn(\n 'flex flex-col gap-2 py-2 @xl:flex-row @xl:items-center @xl:justify-between @xl:gap-6',\n className\n )}\n {...props}\n >\n <div className=\"min-w-0\">\n {labelFor ? (\n <label htmlFor={labelFor} className=\"text-sm font-medium text-foreground\">\n {label}\n </label>\n ) : (\n <div className=\"text-sm font-medium text-foreground\">{label}</div>\n )}\n {description && <div className=\"text-sm text-muted-foreground\">{description}</div>}\n </div>\n {children && <div className=\"flex shrink-0 items-center gap-2\">{children}</div>}\n </div>\n )\n}\n\nexport interface SettingsCardProps extends ComponentProps<'div'> {\n /** `md` for form-like content, `sm` when the card holds a list of full-bleed action rows. */\n padding?: 'md' | 'sm'\n}\n\n/** Bordered card that groups related settings, the same surface as the dashboard cards. */\nexport function SettingsCard({ padding = 'md', className, ...props }: SettingsCardProps) {\n return (\n <div\n data-slot=\"settings-card\"\n className={cn(\n 'rounded-lg border border-border bg-card shadow-xs',\n padding === 'md' ? 'space-y-5 p-5' : 'divide-y divide-border p-2',\n className\n )}\n {...props}\n />\n )\n}\n\nexport interface SettingsActionRowProps {\n title: ReactNode\n description?: ReactNode\n onClick: () => void\n testId?: string\n}\n\n/** Full-width row that opens a dialog or sub-page: title, help text and a chevron. */\nexport function SettingsActionRow({ title, description, onClick, testId }: SettingsActionRowProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n data-slot=\"settings-action-row\"\n data-testid={testId}\n className=\"flex w-full items-center gap-3 rounded-md px-3 py-3 text-left transition-colors hover:bg-background/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-semibold text-foreground\">{title}</div>\n {description && (\n <div className=\"mt-0.5 text-xs leading-relaxed text-muted-foreground\">{description}</div>\n )}\n </div>\n <ChevronRight className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n </button>\n )\n}\n\nexport interface SettingsDangerZoneProps {\n isOpen: boolean\n onToggle: () => void\n /** Heading of the collapsed zone. */\n label?: string\n title: ReactNode\n description: ReactNode\n /** The destructive control (a Button). */\n action: ReactNode\n labels?: Partial<SettingsDangerZoneLabels>\n}\n\n/** Collapsed-by-default zone for irreversible actions. */\nexport function SettingsDangerZone({\n isOpen,\n onToggle,\n label,\n title,\n description,\n action,\n labels,\n}: SettingsDangerZoneProps) {\n const l = useMemo(() => ({ ...DEFAULT_SETTINGS_DANGER_ZONE_LABELS, ...labels }), [labels])\n return (\n <div data-slot=\"settings-danger-zone\" className=\"mt-8 pt-2\">\n <button\n type=\"button\"\n onClick={onToggle}\n aria-expanded={isOpen}\n className=\"flex w-full items-center gap-1.5 text-left pointer-coarse:min-h-11\"\n >\n {isOpen ? (\n <ChevronDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n )}\n <p className=\"text-sm font-medium text-muted-foreground\">{label ?? l.dangerZone}</p>\n </button>\n {isOpen && (\n <div className=\"mt-3 flex items-center justify-between gap-4 rounded-lg bg-destructive/5 p-4\">\n <div>\n <p className=\"font-medium\">{title}</p>\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n </div>\n <div className=\"shrink-0\">{action}</div>\n </div>\n )}\n </div>\n )\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk5FYU7ZIU_cjs = require('./chunk-5FYU7ZIU.cjs');
5
- var chunkRAYCOBF7_cjs = require('./chunk-RAYCOBF7.cjs');
5
+ var chunkZESMRGDV_cjs = require('./chunk-ZESMRGDV.cjs');
6
6
  var chunkJIOHDVWH_cjs = require('./chunk-JIOHDVWH.cjs');
7
7
  var chunkCQ2YSHIF_cjs = require('./chunk-CQ2YSHIF.cjs');
8
8
  var fflate = require('fflate');
@@ -4338,7 +4338,7 @@ function MySignatureDialog() {
4338
4338
  const mine = context?.mySignature;
4339
4339
  if (!mine) return null;
4340
4340
  return /* @__PURE__ */ jsxRuntime.jsx(
4341
- chunkRAYCOBF7_cjs.AdoptSignatureDialog,
4341
+ chunkZESMRGDV_cjs.AdoptSignatureDialog,
4342
4342
  {
4343
4343
  open: !!pending,
4344
4344
  onOpenChange: (open) => !open && setPending(null),
@@ -5442,5 +5442,5 @@ exports.useReview = useReview;
5442
5442
  exports.useReviewItem = useReviewItem;
5443
5443
  exports.useTrackedOrNoted = useTrackedOrNoted;
5444
5444
  exports.withDirectEditing = withDirectEditing;
5445
- //# sourceMappingURL=chunk-4UGVMOTK.cjs.map
5446
- //# sourceMappingURL=chunk-4UGVMOTK.cjs.map
5445
+ //# sourceMappingURL=chunk-NML42O7Q.cjs.map
5446
+ //# sourceMappingURL=chunk-NML42O7Q.cjs.map