@tinyrack/issuary-server 0.22.0 → 0.23.0

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 (306) hide show
  1. package/dist/entities/oauth-client.entity.d.ts +0 -18
  2. package/dist/entities/oauth-client.entity.d.ts.map +1 -1
  3. package/dist/entities/oauth-code.entity.d.ts +0 -18
  4. package/dist/entities/oauth-code.entity.d.ts.map +1 -1
  5. package/dist/entities/oauth-device-code.entity.d.ts +0 -18
  6. package/dist/entities/oauth-device-code.entity.d.ts.map +1 -1
  7. package/dist/entities/revoked-token.entity.d.ts +0 -18
  8. package/dist/entities/revoked-token.entity.d.ts.map +1 -1
  9. package/dist/entities/terms-content.entity.d.ts +0 -9
  10. package/dist/entities/terms-content.entity.d.ts.map +1 -1
  11. package/dist/entities/terms.entity.d.ts +0 -9
  12. package/dist/entities/terms.entity.d.ts.map +1 -1
  13. package/dist/entities/user-consent.entity.d.ts +0 -18
  14. package/dist/entities/user-consent.entity.d.ts.map +1 -1
  15. package/dist/entities/user-terms-consent.entity.d.ts +0 -9
  16. package/dist/entities/user-terms-consent.entity.d.ts.map +1 -1
  17. package/dist/entities/user-totp-recovery-code.entity.d.ts +0 -9
  18. package/dist/entities/user-totp-recovery-code.entity.d.ts.map +1 -1
  19. package/dist/entities/user-totp.entity.d.ts +0 -9
  20. package/dist/entities/user-totp.entity.d.ts.map +1 -1
  21. package/dist/entities/user.entity.d.ts +0 -9
  22. package/dist/entities/user.entity.d.ts.map +1 -1
  23. package/dist/entities/user.entity.js +0 -4
  24. package/dist/entities/user.entity.js.map +1 -1
  25. package/dist/entrypoints/app.d.ts +0 -53
  26. package/dist/entrypoints/app.d.ts.map +1 -1
  27. package/dist/entrypoints/database/postgres/compiled-functions.d.ts +20 -23
  28. package/dist/entrypoints/database/postgres/compiled-functions.d.ts.map +1 -1
  29. package/dist/entrypoints/database/postgres/compiled-functions.js +104 -134
  30. package/dist/entrypoints/database/postgres/compiled-functions.js.map +1 -1
  31. package/dist/entrypoints/database/sqlite/compiled-functions.d.ts +20 -23
  32. package/dist/entrypoints/database/sqlite/compiled-functions.d.ts.map +1 -1
  33. package/dist/entrypoints/database/sqlite/compiled-functions.js +104 -134
  34. package/dist/entrypoints/database/sqlite/compiled-functions.js.map +1 -1
  35. package/dist/lib/config/resolved.d.ts +0 -1
  36. package/dist/lib/config/resolved.d.ts.map +1 -1
  37. package/dist/lib/config/security.d.ts +0 -2
  38. package/dist/lib/config/security.d.ts.map +1 -1
  39. package/dist/lib/config/security.js +0 -5
  40. package/dist/lib/config/security.js.map +1 -1
  41. package/dist/middleware/auth.d.ts +0 -8
  42. package/dist/middleware/auth.d.ts.map +1 -1
  43. package/dist/middleware/auth.js +0 -64
  44. package/dist/middleware/auth.js.map +1 -1
  45. package/dist/middleware/session.d.ts +0 -9
  46. package/dist/middleware/session.d.ts.map +1 -1
  47. package/dist/middleware/session.js +0 -18
  48. package/dist/middleware/session.js.map +1 -1
  49. package/dist/migrations/postgres/Migration20260825140000_drop_password_reset_required.d.ts +6 -0
  50. package/dist/migrations/postgres/Migration20260825140000_drop_password_reset_required.d.ts.map +1 -0
  51. package/dist/migrations/postgres/Migration20260825140000_drop_password_reset_required.js +19 -0
  52. package/dist/migrations/postgres/Migration20260825140000_drop_password_reset_required.js.map +1 -0
  53. package/dist/migrations/postgres/index.d.ts.map +1 -1
  54. package/dist/migrations/postgres/index.js +2 -0
  55. package/dist/migrations/postgres/index.js.map +1 -1
  56. package/dist/migrations/sqlite/Migration20260825140000_drop_password_reset_required.d.ts +6 -0
  57. package/dist/migrations/sqlite/Migration20260825140000_drop_password_reset_required.d.ts.map +1 -0
  58. package/dist/migrations/sqlite/Migration20260825140000_drop_password_reset_required.js +19 -0
  59. package/dist/migrations/sqlite/Migration20260825140000_drop_password_reset_required.js.map +1 -0
  60. package/dist/migrations/sqlite/index.d.ts.map +1 -1
  61. package/dist/migrations/sqlite/index.js +2 -0
  62. package/dist/migrations/sqlite/index.js.map +1 -1
  63. package/dist/repositories/oauth-code.repository.d.ts +2 -2
  64. package/dist/repositories/oauth-code.repository.d.ts.map +1 -1
  65. package/dist/repositories/oauth-code.repository.js +3 -7
  66. package/dist/repositories/oauth-code.repository.js.map +1 -1
  67. package/dist/repositories/oauth-device-code.repository.d.ts +4 -4
  68. package/dist/repositories/oauth-device-code.repository.d.ts.map +1 -1
  69. package/dist/repositories/oauth-device-code.repository.js +6 -18
  70. package/dist/repositories/oauth-device-code.repository.js.map +1 -1
  71. package/dist/repositories/user-totp-recovery-code.repository.d.ts +1 -7
  72. package/dist/repositories/user-totp-recovery-code.repository.d.ts.map +1 -1
  73. package/dist/repositories/user-totp-recovery-code.repository.js +1 -2
  74. package/dist/repositories/user-totp-recovery-code.repository.js.map +1 -1
  75. package/dist/repositories/user-totp.repository.d.ts +0 -9
  76. package/dist/repositories/user-totp.repository.d.ts.map +1 -1
  77. package/dist/routes/api/auth/index.d.ts +0 -52
  78. package/dist/routes/api/auth/index.d.ts.map +1 -1
  79. package/dist/routes/api/auth/index.js +0 -2
  80. package/dist/routes/api/auth/index.js.map +1 -1
  81. package/dist/routes/api/auth/passkey/verify/post.d.ts +0 -37
  82. package/dist/routes/api/auth/passkey/verify/post.d.ts.map +1 -1
  83. package/dist/routes/api/auth/passkey/verify/post.js +2 -8
  84. package/dist/routes/api/auth/passkey/verify/post.js.map +1 -1
  85. package/dist/routes/api/index.d.ts +0 -52
  86. package/dist/routes/api/index.d.ts.map +1 -1
  87. package/dist/routes/index.d.ts +0 -52
  88. package/dist/routes/index.d.ts.map +1 -1
  89. package/dist/routes/oauth/device/get-post.js +5 -5
  90. package/dist/routes/oauth/device/get-post.js.map +1 -1
  91. package/dist/schemas/error.d.ts +0 -25
  92. package/dist/schemas/error.d.ts.map +1 -1
  93. package/dist/schemas/error.js +0 -1
  94. package/dist/schemas/error.js.map +1 -1
  95. package/dist/schemas/response.d.ts +0 -22
  96. package/dist/schemas/response.d.ts.map +1 -1
  97. package/dist/schemas/response.js +0 -8
  98. package/dist/schemas/response.js.map +1 -1
  99. package/dist/seeders/config.seeder.js +0 -1
  100. package/dist/seeders/config.seeder.js.map +1 -1
  101. package/dist/services/container.d.ts +0 -1
  102. package/dist/services/container.d.ts.map +1 -1
  103. package/dist/services/container.js +0 -15
  104. package/dist/services/container.js.map +1 -1
  105. package/dist/services/oauth-client.service.d.ts +0 -1
  106. package/dist/services/oauth-client.service.d.ts.map +1 -1
  107. package/dist/services/oauth-client.service.js +2 -17
  108. package/dist/services/oauth-client.service.js.map +1 -1
  109. package/dist/services/oauth-connect.service.d.ts.map +1 -1
  110. package/dist/services/oauth-connect.service.js +0 -4
  111. package/dist/services/oauth-connect.service.js.map +1 -1
  112. package/dist/services/oauth-token.service.d.ts.map +1 -1
  113. package/dist/services/oauth-token.service.js +4 -4
  114. package/dist/services/oauth-token.service.js.map +1 -1
  115. package/dist/services/password-auth.service.d.ts.map +1 -1
  116. package/dist/services/password-auth.service.js +3 -12
  117. package/dist/services/password-auth.service.js.map +1 -1
  118. package/dist/services/security.service.d.ts +0 -8
  119. package/dist/services/security.service.d.ts.map +1 -1
  120. package/dist/services/security.service.js +21 -82
  121. package/dist/services/security.service.js.map +1 -1
  122. package/dist/services/totp.service.js +2 -2
  123. package/dist/services/totp.service.js.map +1 -1
  124. package/package.json +1 -1
  125. package/public/assets/2fa-B5vLgDXQ.js +2 -0
  126. package/public/assets/{2fa-BgveHSB_.js.map → 2fa-B5vLgDXQ.js.map} +1 -1
  127. package/public/assets/2fa-BqsM_D-X.js +2 -0
  128. package/public/assets/{2fa-kiqzGSz2.js.map → 2fa-BqsM_D-X.js.map} +1 -1
  129. package/public/assets/2fa-C5vUVgr_.js +2 -0
  130. package/public/assets/{2fa-UL_cNRnQ.js.map → 2fa-C5vUVgr_.js.map} +1 -1
  131. package/public/assets/2fa-CCOTIHDZ.js +2 -0
  132. package/public/assets/{2fa-C37MUkye.js.map → 2fa-CCOTIHDZ.js.map} +1 -1
  133. package/public/assets/{DialogHandle-Zvz8SgS0.js → DialogHandle-BmtK2pRn.js} +2 -2
  134. package/public/assets/{DialogHandle-Zvz8SgS0.js.map → DialogHandle-BmtK2pRn.js.map} +1 -1
  135. package/public/assets/admin-BPijkLw-.js +2 -0
  136. package/public/assets/{admin-DbDuu6AI.js.map → admin-BPijkLw-.js.map} +1 -1
  137. package/public/assets/admin-users-DvPbw1Vq.js +2 -0
  138. package/public/assets/{admin-users-CwTJdiih.js.map → admin-users-DvPbw1Vq.js.map} +1 -1
  139. package/public/assets/{auth-choice-row-BlSsUI7d.js → auth-choice-row-BCGjuedo.js} +2 -2
  140. package/public/assets/{auth-choice-row-BlSsUI7d.js.map → auth-choice-row-BCGjuedo.js.map} +1 -1
  141. package/public/assets/{auth-field-HwxENJnB.js → auth-field-DD8kvl--.js} +2 -2
  142. package/public/assets/{auth-field-HwxENJnB.js.map → auth-field-DD8kvl--.js.map} +1 -1
  143. package/public/assets/{auth-layout-CoeqNhTT.js → auth-layout-VtpryDof.js} +2 -2
  144. package/public/assets/{auth-layout-CoeqNhTT.js.map → auth-layout-VtpryDof.js.map} +1 -1
  145. package/public/assets/{auth-page-header-CIs08f5Y.js → auth-page-header-CIn2E4zI.js} +2 -2
  146. package/public/assets/{auth-page-header-CIs08f5Y.js.map → auth-page-header-CIn2E4zI.js.map} +1 -1
  147. package/public/assets/{authorization-context-banner-BbtQmMYH.js → authorization-context-banner-SOuBHWIb.js} +2 -2
  148. package/public/assets/{authorization-context-banner-BbtQmMYH.js.map → authorization-context-banner-SOuBHWIb.js.map} +1 -1
  149. package/public/assets/{avatar-CttWiIv3.js → avatar-BEQjf2x6.js} +2 -2
  150. package/public/assets/{avatar-CttWiIv3.js.map → avatar-BEQjf2x6.js.map} +1 -1
  151. package/public/assets/{checkbox-CJrRV8S1.js → checkbox-gdHnSFQ-.js} +2 -2
  152. package/public/assets/{checkbox-CJrRV8S1.js.map → checkbox-gdHnSFQ-.js.map} +1 -1
  153. package/public/assets/config-DTQCUlfZ.js +2 -0
  154. package/public/assets/config-DTQCUlfZ.js.map +1 -0
  155. package/public/assets/{consent-BIhxtXHx.js → consent-BqqFDdsr.js} +2 -2
  156. package/public/assets/{consent-BIhxtXHx.js.map → consent-BqqFDdsr.js.map} +1 -1
  157. package/public/assets/{consent-DRmENn26.js → consent-CfRbz2R7.js} +2 -2
  158. package/public/assets/{consent-DRmENn26.js.map → consent-CfRbz2R7.js.map} +1 -1
  159. package/public/assets/email-C5vUVgr_.js +2 -0
  160. package/public/assets/{email-UL_cNRnQ.js.map → email-C5vUVgr_.js.map} +1 -1
  161. package/public/assets/{email-CVRDeJ78.js → email-CKKakxPJ.js} +2 -2
  162. package/public/assets/{email-CVRDeJ78.js.map → email-CKKakxPJ.js.map} +1 -1
  163. package/public/assets/error-BMXxpgfR.js +2 -0
  164. package/public/assets/{error-2VPY5w8V.js.map → error-BMXxpgfR.js.map} +1 -1
  165. package/public/assets/{field-DDt6F9TZ.js → field-Cn4H1CUj.js} +2 -2
  166. package/public/assets/{field-DDt6F9TZ.js.map → field-Cn4H1CUj.js.map} +1 -1
  167. package/public/assets/forgot-C5vUVgr_.js +2 -0
  168. package/public/assets/{forgot-UL_cNRnQ.js.map → forgot-C5vUVgr_.js.map} +1 -1
  169. package/public/assets/forgot-rO9sByfV.js +2 -0
  170. package/public/assets/{forgot-DzDcduho.js.map → forgot-rO9sByfV.js.map} +1 -1
  171. package/public/assets/index-CS23Ozt6.js +11 -0
  172. package/public/assets/index-CS23Ozt6.js.map +1 -0
  173. package/public/assets/{initial-avatar-CZzHAPm3.js → initial-avatar-CtuDUz_W.js} +2 -2
  174. package/public/assets/{initial-avatar-CZzHAPm3.js.map → initial-avatar-CtuDUz_W.js.map} +1 -1
  175. package/public/assets/{input-CNRpSR08.js → input-CzQki7k6.js} +2 -2
  176. package/public/assets/{input-CNRpSR08.js.map → input-CzQki7k6.js.map} +1 -1
  177. package/public/assets/{labeled-separator-fnKySKv2.js → labeled-separator-CV7nb0XW.js} +2 -2
  178. package/public/assets/{labeled-separator-fnKySKv2.js.map → labeled-separator-CV7nb0XW.js.map} +1 -1
  179. package/public/assets/login-C5vUVgr_.js +2 -0
  180. package/public/assets/login-C5vUVgr_.js.map +1 -0
  181. package/public/assets/login-nukebli4.js +2 -0
  182. package/public/assets/login-nukebli4.js.map +1 -0
  183. package/public/assets/{logout-CHdmF_16.js → logout-B5T52P8u.js} +2 -2
  184. package/public/assets/{logout-CHdmF_16.js.map → logout-B5T52P8u.js.map} +1 -1
  185. package/public/assets/{modal-sCM_zT82.js → modal-BDQFucjz.js} +2 -2
  186. package/public/assets/{modal-sCM_zT82.js.map → modal-BDQFucjz.js.map} +1 -1
  187. package/public/assets/{mutationOptions-CrswitPs.js → mutationOptions-DyYFUbyn.js} +2 -2
  188. package/public/assets/{mutationOptions-CrswitPs.js.map → mutationOptions-DyYFUbyn.js.map} +1 -1
  189. package/public/assets/passkey-BE9JvJOP.js +2 -0
  190. package/public/assets/{passkey-CU8x9J2w.js.map → passkey-BE9JvJOP.js.map} +1 -1
  191. package/public/assets/passkey-C5vUVgr_.js +2 -0
  192. package/public/assets/{passkey-UL_cNRnQ.js.map → passkey-C5vUVgr_.js.map} +1 -1
  193. package/public/assets/passkey-CynCz1Dt.js +2 -0
  194. package/public/assets/{passkey-CEx1VZ5R.js.map → passkey-CynCz1Dt.js.map} +1 -1
  195. package/public/assets/passkey-J1qnYp9A.js +2 -0
  196. package/public/assets/{passkey-B2Blw47e.js.map → passkey-J1qnYp9A.js.map} +1 -1
  197. package/public/assets/password-C5vUVgr_.js +2 -0
  198. package/public/assets/password-C5vUVgr_.js.map +1 -0
  199. package/public/assets/password-RkUttbhD.js +2 -0
  200. package/public/assets/password-RkUttbhD.js.map +1 -0
  201. package/public/assets/password-reset-sU5KkBKi.js +2 -0
  202. package/public/assets/{password-reset-CIacHnvA.js.map → password-reset-sU5KkBKi.js.map} +1 -1
  203. package/public/assets/{password-strength-C0Zkrrct.js → password-strength-BeSOu_Ga.js} +2 -2
  204. package/public/assets/{password-strength-C0Zkrrct.js.map → password-strength-BeSOu_Ga.js.map} +1 -1
  205. package/public/assets/{pin-input-BlD4tPZJ.js → pin-input-Cc-VkrQ3.js} +2 -2
  206. package/public/assets/{pin-input-BlD4tPZJ.js.map → pin-input-Cc-VkrQ3.js.map} +1 -1
  207. package/public/assets/{profile-D43Yq-6S.js → profile-B5NaJfeS.js} +2 -2
  208. package/public/assets/{profile-D43Yq-6S.js.map → profile-B5NaJfeS.js.map} +1 -1
  209. package/public/assets/{profile-D1cEjfs8.js → profile-BcjsVYOx.js} +2 -2
  210. package/public/assets/{profile-D1cEjfs8.js.map → profile-BcjsVYOx.js.map} +1 -1
  211. package/public/assets/recovery-PnUATiUi.js +2 -0
  212. package/public/assets/{recovery-CLExnfYX.js.map → recovery-PnUATiUi.js.map} +1 -1
  213. package/public/assets/register-C5vUVgr_.js +2 -0
  214. package/public/assets/{register-UL_cNRnQ.js.map → register-C5vUVgr_.js.map} +1 -1
  215. package/public/assets/register-DQXhru0_.js +2 -0
  216. package/public/assets/{register-CZUyWXRO.js.map → register-DQXhru0_.js.map} +1 -1
  217. package/public/assets/reset-C5vUVgr_.js +2 -0
  218. package/public/assets/{reset-UL_cNRnQ.js.map → reset-C5vUVgr_.js.map} +1 -1
  219. package/public/assets/reset-CQgIa3yf.js +2 -0
  220. package/public/assets/reset-CQgIa3yf.js.map +1 -0
  221. package/public/assets/select-C5vUVgr_.js +2 -0
  222. package/public/assets/{select-UL_cNRnQ.js.map → select-C5vUVgr_.js.map} +1 -1
  223. package/public/assets/{select-CWdSzsVo.js → select-DqZynXSt.js} +2 -2
  224. package/public/assets/{select-CWdSzsVo.js.map → select-DqZynXSt.js.map} +1 -1
  225. package/public/assets/{separator-BWGym8uM.js → separator-B0Bvh1he.js} +2 -2
  226. package/public/assets/{separator-BWGym8uM.js.map → separator-B0Bvh1he.js.map} +1 -1
  227. package/public/assets/shell-header-bar-CjG5qvPg.js +2 -0
  228. package/public/assets/{shell-header-bar-C9AB5lT-.js.map → shell-header-bar-CjG5qvPg.js.map} +1 -1
  229. package/public/assets/{terms-D43Yq-6S.js → terms-B5NaJfeS.js} +2 -2
  230. package/public/assets/{terms-D43Yq-6S.js.map → terms-B5NaJfeS.js.map} +1 -1
  231. package/public/assets/{terms-COVFmzyl.js → terms-BHDAgn-H.js} +2 -2
  232. package/public/assets/{terms-COVFmzyl.js.map → terms-BHDAgn-H.js.map} +1 -1
  233. package/public/assets/{terms-checkbox-list-Cw0zB-lO.js → terms-checkbox-list-6jteUTIZ.js} +2 -2
  234. package/public/assets/{terms-checkbox-list-Cw0zB-lO.js.map → terms-checkbox-list-6jteUTIZ.js.map} +1 -1
  235. package/public/assets/{totp-BfCm6IWl.js → totp-BNZ904Zm.js} +2 -2
  236. package/public/assets/{totp-BfCm6IWl.js.map → totp-BNZ904Zm.js.map} +1 -1
  237. package/public/assets/totp-CJtfVNEq.js +2 -0
  238. package/public/assets/{totp-BFJEXxk0.js.map → totp-CJtfVNEq.js.map} +1 -1
  239. package/public/assets/totp-ECvOUcFx.js +2 -0
  240. package/public/assets/{totp-MINhsVxT.js.map → totp-ECvOUcFx.js.map} +1 -1
  241. package/public/assets/use-totp-setup-BbS3XcZA.js +3 -0
  242. package/public/assets/{use-totp-setup-C7Zk_2IY.js.map → use-totp-setup-BbS3XcZA.js.map} +1 -1
  243. package/public/assets/{useAriaLabelledBy-CiOCg6X5.js → useAriaLabelledBy-ByuMi3Ry.js} +2 -2
  244. package/public/assets/{useAriaLabelledBy-CiOCg6X5.js.map → useAriaLabelledBy-ByuMi3Ry.js.map} +1 -1
  245. package/public/assets/{useMutation-ZLFeJg75.js → useMutation-BWZ0G4Td.js} +2 -2
  246. package/public/assets/{useMutation-ZLFeJg75.js.map → useMutation-BWZ0G4Td.js.map} +1 -1
  247. package/public/assets/useQuery-Ckxjmvtl.js +2 -0
  248. package/public/assets/{useQuery-BvMz34BW.js.map → useQuery-Ckxjmvtl.js.map} +1 -1
  249. package/public/assets/{users-COM7u3A-.js → users-CmFxrCQT.js} +2 -2
  250. package/public/assets/{users-COM7u3A-.js.map → users-CmFxrCQT.js.map} +1 -1
  251. package/public/index.html +3 -4
  252. package/dist/routes/api/auth/password/reset-required/post.d.ts +0 -18
  253. package/dist/routes/api/auth/password/reset-required/post.d.ts.map +0 -1
  254. package/dist/routes/api/auth/password/reset-required/post.js +0 -39
  255. package/dist/routes/api/auth/password/reset-required/post.js.map +0 -1
  256. package/dist/services/legacy-credential-retirement.service.d.ts +0 -20
  257. package/dist/services/legacy-credential-retirement.service.d.ts.map +0 -1
  258. package/dist/services/legacy-credential-retirement.service.js +0 -90
  259. package/dist/services/legacy-credential-retirement.service.js.map +0 -1
  260. package/public/assets/2fa-BgveHSB_.js +0 -2
  261. package/public/assets/2fa-C37MUkye.js +0 -2
  262. package/public/assets/2fa-UL_cNRnQ.js +0 -2
  263. package/public/assets/2fa-kiqzGSz2.js +0 -2
  264. package/public/assets/admin-DbDuu6AI.js +0 -2
  265. package/public/assets/admin-users-CwTJdiih.js +0 -2
  266. package/public/assets/config-v3-oy_ef.js +0 -2
  267. package/public/assets/config-v3-oy_ef.js.map +0 -1
  268. package/public/assets/email-UL_cNRnQ.js +0 -2
  269. package/public/assets/error-2VPY5w8V.js +0 -2
  270. package/public/assets/forgot-DzDcduho.js +0 -2
  271. package/public/assets/forgot-UL_cNRnQ.js +0 -2
  272. package/public/assets/index-gliHKncz.js +0 -11
  273. package/public/assets/index-gliHKncz.js.map +0 -1
  274. package/public/assets/link-BN90emXr.js +0 -2
  275. package/public/assets/link-BN90emXr.js.map +0 -1
  276. package/public/assets/lock-keyhole-Cz72xkCn.js +0 -2
  277. package/public/assets/lock-keyhole-Cz72xkCn.js.map +0 -1
  278. package/public/assets/login-C6m2qSUt.js +0 -2
  279. package/public/assets/login-C6m2qSUt.js.map +0 -1
  280. package/public/assets/login-UL_cNRnQ.js +0 -2
  281. package/public/assets/login-UL_cNRnQ.js.map +0 -1
  282. package/public/assets/passkey-B2Blw47e.js +0 -2
  283. package/public/assets/passkey-CEx1VZ5R.js +0 -2
  284. package/public/assets/passkey-CU8x9J2w.js +0 -2
  285. package/public/assets/passkey-UL_cNRnQ.js +0 -2
  286. package/public/assets/password-BhU_a0cR.js +0 -2
  287. package/public/assets/password-BhU_a0cR.js.map +0 -1
  288. package/public/assets/password-UL_cNRnQ.js +0 -2
  289. package/public/assets/password-UL_cNRnQ.js.map +0 -1
  290. package/public/assets/password-reset-CIacHnvA.js +0 -2
  291. package/public/assets/recovery-CLExnfYX.js +0 -2
  292. package/public/assets/register-CZUyWXRO.js +0 -2
  293. package/public/assets/register-UL_cNRnQ.js +0 -2
  294. package/public/assets/reset-N3RQTYEB.js +0 -2
  295. package/public/assets/reset-N3RQTYEB.js.map +0 -1
  296. package/public/assets/reset-UL_cNRnQ.js +0 -2
  297. package/public/assets/reset-required-Cv5edDS6.js +0 -2
  298. package/public/assets/reset-required-Cv5edDS6.js.map +0 -1
  299. package/public/assets/reset-required-UL_cNRnQ.js +0 -2
  300. package/public/assets/reset-required-UL_cNRnQ.js.map +0 -1
  301. package/public/assets/select-UL_cNRnQ.js +0 -2
  302. package/public/assets/shell-header-bar-C9AB5lT-.js +0 -2
  303. package/public/assets/totp-BFJEXxk0.js +0 -2
  304. package/public/assets/totp-MINhsVxT.js +0 -2
  305. package/public/assets/use-totp-setup-C7Zk_2IY.js +0 -3
  306. package/public/assets/useQuery-BvMz34BW.js +0 -2
@@ -1,2 +1,2 @@
1
- import{n as e,q as t}from"./createLucideIcon-BPpAIXR_.js";import{t as n}from"./chevron-right-CN0jUyV0.js";import{z as r}from"./index-gliHKncz.js";var i=t();function a({render:t,icon:a,leading:o,label:s,description:c,trailing:l}){return(0,i.jsxs)(`div`,{className:`flex items-center gap-tinyrack-xs`,children:[(0,i.jsxs)(r,{appearance:`outline`,className:`h-auto min-w-0 flex-1 justify-start gap-tinyrack-md px-tinyrack-lg py-tinyrack-md text-start transition-colors duration-tinyrack-fast ease-tinyrack-standard`,intent:`neutral`,render:t,children:[o??(a?(0,i.jsx)(a,{"aria-hidden":!0,className:`size-tinyrack-xl shrink-0`}):null),(0,i.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col whitespace-normal`,children:[(0,i.jsx)(e,{variant:`body`,weight:`medium`,children:s}),c&&(0,i.jsx)(e,{color:`muted`,variant:`caption`,children:c})]}),(0,i.jsx)(n,{"aria-hidden":!0,className:`size-tinyrack-lg shrink-0 text-tinyrack-text-muted`})]}),l]})}export{a as t};
2
- //# sourceMappingURL=auth-choice-row-BlSsUI7d.js.map
1
+ import{n as e,q as t}from"./createLucideIcon-BPpAIXR_.js";import{t as n}from"./chevron-right-CN0jUyV0.js";import{z as r}from"./index-CS23Ozt6.js";var i=t();function a({render:t,icon:a,leading:o,label:s,description:c,trailing:l}){return(0,i.jsxs)(`div`,{className:`flex items-center gap-tinyrack-xs`,children:[(0,i.jsxs)(r,{appearance:`outline`,className:`h-auto min-w-0 flex-1 justify-start gap-tinyrack-md px-tinyrack-lg py-tinyrack-md text-start transition-colors duration-tinyrack-fast ease-tinyrack-standard`,intent:`neutral`,render:t,children:[o??(a?(0,i.jsx)(a,{"aria-hidden":!0,className:`size-tinyrack-xl shrink-0`}):null),(0,i.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col whitespace-normal`,children:[(0,i.jsx)(e,{variant:`body`,weight:`medium`,children:s}),c&&(0,i.jsx)(e,{color:`muted`,variant:`caption`,children:c})]}),(0,i.jsx)(n,{"aria-hidden":!0,className:`size-tinyrack-lg shrink-0 text-tinyrack-text-muted`})]}),l]})}export{a as t};
2
+ //# sourceMappingURL=auth-choice-row-BCGjuedo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-choice-row-BlSsUI7d.js","names":[],"sources":["../../../frontend/src/components/auth/auth-choice-row.tsx"],"sourcesContent":["import { TRLinkButton } from '@tinyrack/ui/components/link-button';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { ChevronRightIcon, type LucideIcon } from 'lucide-react';\nimport type { ReactElement, ReactNode } from 'react';\n\ntype AuthChoiceRowProps = {\n /**\n * The element the row navigates with, styled by `TRLinkButton`. These stay\n * real anchors with an `href` — the e2e suite selects the second-factor\n * choices by href, and they must survive a middle click.\n */\n render: ReactElement;\n icon?: LucideIcon;\n /** Replaces `icon` when the leading slot needs richer content (an avatar). */\n leading?: ReactNode;\n label: string;\n description?: string;\n /** Trailing slot outside the row's control, e.g. a remove button. */\n trailing?: ReactNode;\n};\n\n/**\n * A full-width, tappable row for picking one of several options.\n *\n * Used by the second-factor choosers and the account switcher, which each\n * hand-rolled a different version of the same thing — one as a stretched\n * button with a gap, another as a bare `<button>` inside a bordered div that\n * had no focus ring of its own.\n *\n * The row itself is one control, so it is a single tab stop and its label and\n * description are both part of its accessible name.\n */\nexport function AuthChoiceRow({\n render,\n icon: Icon,\n leading,\n label,\n description,\n trailing,\n}: AuthChoiceRowProps) {\n return (\n <div className=\"flex items-center gap-tinyrack-xs\">\n <TRLinkButton\n appearance=\"outline\"\n className=\"h-auto min-w-0 flex-1 justify-start gap-tinyrack-md px-tinyrack-lg py-tinyrack-md text-start transition-colors duration-tinyrack-fast ease-tinyrack-standard\"\n intent=\"neutral\"\n render={render}\n >\n {leading ??\n (Icon ? (\n <Icon aria-hidden className=\"size-tinyrack-xl shrink-0\" />\n ) : null)}\n {/*\n Wraps rather than truncates. These rows carry the only description of\n what each option does, and at phone width even the English strings\n exceed the available space — silently clipping them would hide the\n difference between the choices.\n */}\n <span className=\"flex min-w-0 flex-1 flex-col whitespace-normal\">\n <TRText variant=\"body\" weight=\"medium\">\n {label}\n </TRText>\n {description && (\n <TRText color=\"muted\" variant=\"caption\">\n {description}\n </TRText>\n )}\n </span>\n <ChevronRightIcon\n aria-hidden\n className=\"size-tinyrack-lg shrink-0 text-tinyrack-text-muted\"\n />\n </TRLinkButton>\n {trailing}\n </div>\n );\n}\n"],"mappings":"4JAgCA,SAAgB,EAAc,CAC5B,SACA,KAAM,EACN,UACA,QACA,cACA,YACqB,CACrB,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,6CAAf,EACE,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,WAAW,UACX,UAAU,+JACV,OAAO,UACC,kBAJV,CAMG,IACE,GACC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,cAAA,GAAY,UAAU,2BAA6B,CAAA,EACvD,OAON,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,0DAAhB,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,QAAQ,OAAO,OAAO,kBAC3B,CACK,CAAA,EACP,IACC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,MAAM,QAAQ,QAAQ,mBAC3B,CACK,CAAA,CAEN,KACN,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAA,GACA,UAAU,oDACX,CAAA,CACW,IACb,CACE,GAET"}
1
+ {"version":3,"file":"auth-choice-row-BCGjuedo.js","names":[],"sources":["../../../frontend/src/components/auth/auth-choice-row.tsx"],"sourcesContent":["import { TRLinkButton } from '@tinyrack/ui/components/link-button';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { ChevronRightIcon, type LucideIcon } from 'lucide-react';\nimport type { ReactElement, ReactNode } from 'react';\n\ntype AuthChoiceRowProps = {\n /**\n * The element the row navigates with, styled by `TRLinkButton`. These stay\n * real anchors with an `href` — the e2e suite selects the second-factor\n * choices by href, and they must survive a middle click.\n */\n render: ReactElement;\n icon?: LucideIcon;\n /** Replaces `icon` when the leading slot needs richer content (an avatar). */\n leading?: ReactNode;\n label: string;\n description?: string;\n /** Trailing slot outside the row's control, e.g. a remove button. */\n trailing?: ReactNode;\n};\n\n/**\n * A full-width, tappable row for picking one of several options.\n *\n * Used by the second-factor choosers and the account switcher, which each\n * hand-rolled a different version of the same thing — one as a stretched\n * button with a gap, another as a bare `<button>` inside a bordered div that\n * had no focus ring of its own.\n *\n * The row itself is one control, so it is a single tab stop and its label and\n * description are both part of its accessible name.\n */\nexport function AuthChoiceRow({\n render,\n icon: Icon,\n leading,\n label,\n description,\n trailing,\n}: AuthChoiceRowProps) {\n return (\n <div className=\"flex items-center gap-tinyrack-xs\">\n <TRLinkButton\n appearance=\"outline\"\n className=\"h-auto min-w-0 flex-1 justify-start gap-tinyrack-md px-tinyrack-lg py-tinyrack-md text-start transition-colors duration-tinyrack-fast ease-tinyrack-standard\"\n intent=\"neutral\"\n render={render}\n >\n {leading ??\n (Icon ? (\n <Icon aria-hidden className=\"size-tinyrack-xl shrink-0\" />\n ) : null)}\n {/*\n Wraps rather than truncates. These rows carry the only description of\n what each option does, and at phone width even the English strings\n exceed the available space — silently clipping them would hide the\n difference between the choices.\n */}\n <span className=\"flex min-w-0 flex-1 flex-col whitespace-normal\">\n <TRText variant=\"body\" weight=\"medium\">\n {label}\n </TRText>\n {description && (\n <TRText color=\"muted\" variant=\"caption\">\n {description}\n </TRText>\n )}\n </span>\n <ChevronRightIcon\n aria-hidden\n className=\"size-tinyrack-lg shrink-0 text-tinyrack-text-muted\"\n />\n </TRLinkButton>\n {trailing}\n </div>\n );\n}\n"],"mappings":"4JAgCA,SAAgB,EAAc,CAC5B,SACA,KAAM,EACN,UACA,QACA,cACA,YACqB,CACrB,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,6CAAf,EACE,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,WAAW,UACX,UAAU,+JACV,OAAO,UACC,kBAJV,CAMG,IACE,GACC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,cAAA,GAAY,UAAU,2BAA6B,CAAA,EACvD,OAON,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,0DAAhB,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,QAAQ,OAAO,OAAO,kBAC3B,CACK,CAAA,EACP,IACC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,MAAM,QAAQ,QAAQ,mBAC3B,CACK,CAAA,CAEN,KACN,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAA,GACA,UAAU,oDACX,CAAA,CACW,IACb,CACE,GAET"}
@@ -1,2 +1,2 @@
1
- import{J as e,Z as t,i as n,q as r,t as i}from"./createLucideIcon-BPpAIXR_.js";import{t as a}from"./field-DDt6F9TZ.js";import{t as o}from"./input-CNRpSR08.js";var s=i(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),c=i(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),l=t(e(),1),u=r();function d({icon:e,type:t=`text`,label:r,placeholder:i,hint:d,labelAction:f,autoComplete:p,error:m,errorTestId:h=`field-error`,hideLabel:g=!1,className:_=``,ref:v,...y}){let{t:b}=n(),x=(0,l.useId)(),[S,C]=(0,l.useState)(!1),w=y.id??x,T=d?`${w}-hint`:void 0,E=m?`${w}-error`:void 0,D=E??T,O=t===`password`,k=O&&S?`text`:t;return(0,u.jsxs)(a.Root,{className:_,children:[g?(0,u.jsx)(a.Label,{className:`sr-only`,htmlFor:w,children:r}):(0,u.jsxs)(`div`,{className:`flex items-baseline justify-between gap-tinyrack-sm`,children:[(0,u.jsx)(a.Label,{htmlFor:w,children:r}),f]}),(0,u.jsxs)(o.Group,{"data-invalid":m?``:void 0,"data-testid":m?`input-error-wrapper`:void 0,children:[e&&(0,u.jsx)(o.Adornment,{children:(0,u.jsx)(e,{"aria-hidden":!0,className:`size-tinyrack-xl opacity-tinyrack-hover`})}),(0,u.jsx)(o,{"aria-describedby":D,"aria-invalid":m?!0:void 0,autoComplete:p,"data-invalid":m?``:void 0,id:w,placeholder:i,ref:v,type:k,...y}),O&&(0,u.jsx)(o.Action,{"aria-label":b(S?`common.password.hide`:`common.password.show`),onClick:()=>C(e=>!e),children:S?(0,u.jsx)(s,{"aria-hidden":!0,className:`size-tinyrack-lg`}):(0,u.jsx)(c,{"aria-hidden":!0,className:`size-tinyrack-lg`})})]}),d&&!m&&(0,u.jsx)(a.Description,{id:T,children:d}),m&&(0,u.jsx)(`div`,{className:`tr-field-error`,"data-testid":h,id:E,children:m.message})]})}export{d as t};
2
- //# sourceMappingURL=auth-field-HwxENJnB.js.map
1
+ import{J as e,Z as t,i as n,q as r,t as i}from"./createLucideIcon-BPpAIXR_.js";import{t as a}from"./field-Cn4H1CUj.js";import{t as o}from"./input-CzQki7k6.js";var s=i(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),c=i(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),l=t(e(),1),u=r();function d({icon:e,type:t=`text`,label:r,placeholder:i,hint:d,labelAction:f,autoComplete:p,error:m,errorTestId:h=`field-error`,hideLabel:g=!1,className:_=``,ref:v,...y}){let{t:b}=n(),x=(0,l.useId)(),[S,C]=(0,l.useState)(!1),w=y.id??x,T=d?`${w}-hint`:void 0,E=m?`${w}-error`:void 0,D=E??T,O=t===`password`,k=O&&S?`text`:t;return(0,u.jsxs)(a.Root,{className:_,children:[g?(0,u.jsx)(a.Label,{className:`sr-only`,htmlFor:w,children:r}):(0,u.jsxs)(`div`,{className:`flex items-baseline justify-between gap-tinyrack-sm`,children:[(0,u.jsx)(a.Label,{htmlFor:w,children:r}),f]}),(0,u.jsxs)(o.Group,{"data-invalid":m?``:void 0,"data-testid":m?`input-error-wrapper`:void 0,children:[e&&(0,u.jsx)(o.Adornment,{children:(0,u.jsx)(e,{"aria-hidden":!0,className:`size-tinyrack-xl opacity-tinyrack-hover`})}),(0,u.jsx)(o,{"aria-describedby":D,"aria-invalid":m?!0:void 0,autoComplete:p,"data-invalid":m?``:void 0,id:w,placeholder:i,ref:v,type:k,...y}),O&&(0,u.jsx)(o.Action,{"aria-label":b(S?`common.password.hide`:`common.password.show`),onClick:()=>C(e=>!e),children:S?(0,u.jsx)(s,{"aria-hidden":!0,className:`size-tinyrack-lg`}):(0,u.jsx)(c,{"aria-hidden":!0,className:`size-tinyrack-lg`})})]}),d&&!m&&(0,u.jsx)(a.Description,{id:T,children:d}),m&&(0,u.jsx)(`div`,{className:`tr-field-error`,"data-testid":h,id:E,children:m.message})]})}export{d as t};
2
+ //# sourceMappingURL=auth-field-DD8kvl--.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-field-HwxENJnB.js","names":["__iconNode"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/eye-off.mjs","../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/eye.mjs","../../../frontend/src/components/auth/auth-field.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.mjs.map\n","/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.mjs.map\n","import { TRField } from '@tinyrack/ui/components/field';\nimport { TRInput } from '@tinyrack/ui/components/input';\nimport { EyeIcon, EyeOffIcon, type LucideIcon } from 'lucide-react';\nimport { useId, useState } from 'react';\nimport type { FieldError } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\ntype AuthFieldProps = {\n /** Leading adornment glyph. */\n icon?: LucideIcon;\n type?: 'email' | 'password' | 'text';\n label: string;\n placeholder?: string;\n hint?: string;\n /** Rendered on the label row, e.g. a \"Forgot password?\" link. */\n labelAction?: React.ReactNode;\n autoComplete?: string;\n error?: FieldError;\n /**\n * Overrides the error node's test id. The auth screens share the default;\n * the profile modals each have their own, which e2e selects on.\n */\n errorTestId?: string;\n /**\n * Renders the label to assistive technology only. For fields whose purpose\n * is obvious from context — an inline rename inside a list row — where a\n * visible label would be noise but a missing one leaves a nameless textbox.\n */\n hideLabel?: boolean;\n className?: string;\n ref?: React.Ref<HTMLInputElement>;\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'className'>;\n\n/**\n * The auth surface's text input.\n *\n * Composes `TRInput.Group` so the icon, field, and reveal toggle read as one\n * control.\n *\n * Password fields get a reveal toggle. It is a real button in the tab order\n * with a state-dependent accessible name, and it never changes the field's\n * `name` or `autocomplete`, so password managers keep working.\n */\nexport function AuthField({\n icon: Icon,\n type = 'text',\n label,\n placeholder,\n hint,\n labelAction,\n autoComplete,\n error,\n errorTestId = 'field-error',\n hideLabel = false,\n className = '',\n ref,\n ...props\n}: AuthFieldProps) {\n const { t } = useTranslation();\n const generatedId = useId();\n const [revealed, setRevealed] = useState(false);\n\n const inputId = props.id ?? generatedId;\n const hintId = hint ? `${inputId}-hint` : undefined;\n const errorId = error ? `${inputId}-error` : undefined;\n const describedBy = errorId ?? hintId;\n\n const canReveal = type === 'password';\n const resolvedType = canReveal && revealed ? 'text' : type;\n\n return (\n <TRField.Root className={className}>\n {hideLabel ? (\n <TRField.Label className=\"sr-only\" htmlFor={inputId}>\n {label}\n </TRField.Label>\n ) : (\n <div className=\"flex items-baseline justify-between gap-tinyrack-sm\">\n <TRField.Label htmlFor={inputId}>{label}</TRField.Label>\n {labelAction}\n </div>\n )}\n <TRInput.Group\n data-invalid={error ? '' : undefined}\n data-testid={error ? 'input-error-wrapper' : undefined}\n >\n {Icon && (\n <TRInput.Adornment>\n <Icon\n aria-hidden\n className=\"size-tinyrack-xl opacity-tinyrack-hover\"\n />\n </TRInput.Adornment>\n )}\n <TRInput\n aria-describedby={describedBy}\n aria-invalid={error ? true : undefined}\n autoComplete={autoComplete}\n data-invalid={error ? '' : undefined}\n id={inputId}\n placeholder={placeholder}\n ref={ref}\n type={resolvedType}\n {...props}\n />\n {canReveal && (\n <TRInput.Action\n aria-label={\n revealed ? t('common.password.hide') : t('common.password.show')\n }\n onClick={() => setRevealed((value) => !value)}\n >\n {revealed ? (\n <EyeOffIcon aria-hidden className=\"size-tinyrack-lg\" />\n ) : (\n <EyeIcon aria-hidden className=\"size-tinyrack-lg\" />\n )}\n </TRInput.Action>\n )}\n </TRInput.Group>\n {hint && !error && (\n <TRField.Description id={hintId}>{hint}</TRField.Description>\n )}\n {/*\n Plain element rather than `TRField.Error`: that part renders from Base\n UI's own field validity, which nothing here drives — react-hook-form\n owns validation. The class is the design system's, so the styling is\n still the system's.\n */}\n {error && (\n <div className=\"tr-field-error\" data-testid={errorTestId} id={errorId}>\n {error.message}\n </div>\n )}\n </TRField.Root>\n );\n}\n"],"x_google_ignoreList":[0,1],"mappings":"+JA2BA,IAAM,EAAS,EAAiB,UAAWA,CAjBzC,CACE,OACA,CACE,EAAG,iGACH,IAAK,QACP,CACF,EACA,CAAC,OAAQ,CAAE,EAAG,uCAAwC,IAAK,QAAS,CAAC,EACrE,CACE,OACA,CACE,EAAG,+FACH,IAAK,QACP,CACF,EACA,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAS,CAAC,CAEFA,CAAU,ECR/C,EAAM,EAAiB,MAAO,CATlC,CACE,OACA,CACE,EAAG,wGACH,IAAK,QACP,CACF,EACA,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAS,CAAC,CAEtB,CAAU,mBCwB9C,SAAgB,EAAU,CACxB,KAAM,EACN,OAAO,OACP,QACA,cACA,OACA,cACA,eACA,QACA,cAAc,cACd,YAAY,GACZ,YAAY,GACZ,MACA,GAAG,GACc,CACjB,GAAM,CAAE,KAAM,EAAe,EACvB,GAAA,EAAA,EAAA,MAAA,CAAoB,EACpB,CAAC,EAAU,IAAA,EAAA,EAAA,SAAA,CAAwB,EAAK,EAExC,EAAU,EAAM,IAAM,EACtB,EAAS,EAAO,GAAG,EAAQ,OAAS,IAAA,GACpC,EAAU,EAAQ,GAAG,EAAQ,QAAU,IAAA,GACvC,EAAc,GAAW,EAEzB,EAAY,IAAS,WACrB,EAAe,GAAa,EAAW,OAAS,EAEtD,OACE,EAAA,EAAA,KAAA,CAAC,EAAQ,KAAT,CAAyB,qBAAzB,CACG,GACC,EAAA,EAAA,IAAA,CAAC,EAAQ,MAAT,CAAe,UAAU,UAAU,QAAS,WACzC,CACY,CAAA,GAEf,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,+DAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAQ,MAAT,CAAe,QAAS,WAAU,CAAqB,CAAA,EACtD,CACE,KAEP,EAAA,EAAA,KAAA,CAAC,EAAQ,MAAT,CACE,eAAc,EAAQ,GAAK,IAAA,GAC3B,cAAa,EAAQ,sBAAwB,IAAA,YAF/C,CAIG,IACC,EAAA,EAAA,IAAA,CAAC,EAAQ,UAAT,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAA,GACA,UAAU,yCACX,CAAA,CACgB,CAAA,GAErB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,mBAAkB,EAClB,eAAc,EAAQ,GAAO,IAAA,GACf,eACd,eAAc,EAAQ,GAAK,IAAA,GAC3B,GAAI,EACS,cACR,MACL,KAAM,EACN,GAAI,CACL,CAAA,EACA,IACC,EAAA,EAAA,IAAA,CAAC,EAAQ,OAAT,CACE,aACa,EAAX,EAAa,uBAA4B,sBAAsB,EAEjE,YAAe,EAAa,GAAU,CAAC,CAAK,WAE3C,GACC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,cAAA,GAAY,UAAU,kBAAoB,CAAA,GAEtD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,cAAA,GAAY,UAAU,kBAAoB,CAAA,CAEvC,CAAA,CAEL,IACd,GAAQ,CAAC,IACR,EAAA,EAAA,IAAA,CAAC,EAAQ,YAAT,CAAqB,GAAI,WAAS,CAA0B,CAAA,EAQ7D,IACC,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBAAiB,cAAa,EAAa,GAAI,WAC3D,EAAM,OACJ,CAAA,CAEK,GAElB"}
1
+ {"version":3,"file":"auth-field-DD8kvl--.js","names":["__iconNode"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/eye-off.mjs","../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/eye.mjs","../../../frontend/src/components/auth/auth-field.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.mjs.map\n","/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.mjs.map\n","import { TRField } from '@tinyrack/ui/components/field';\nimport { TRInput } from '@tinyrack/ui/components/input';\nimport { EyeIcon, EyeOffIcon, type LucideIcon } from 'lucide-react';\nimport { useId, useState } from 'react';\nimport type { FieldError } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\ntype AuthFieldProps = {\n /** Leading adornment glyph. */\n icon?: LucideIcon;\n type?: 'email' | 'password' | 'text';\n label: string;\n placeholder?: string;\n hint?: string;\n /** Rendered on the label row, e.g. a \"Forgot password?\" link. */\n labelAction?: React.ReactNode;\n autoComplete?: string;\n error?: FieldError;\n /**\n * Overrides the error node's test id. The auth screens share the default;\n * the profile modals each have their own, which e2e selects on.\n */\n errorTestId?: string;\n /**\n * Renders the label to assistive technology only. For fields whose purpose\n * is obvious from context — an inline rename inside a list row — where a\n * visible label would be noise but a missing one leaves a nameless textbox.\n */\n hideLabel?: boolean;\n className?: string;\n ref?: React.Ref<HTMLInputElement>;\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'className'>;\n\n/**\n * The auth surface's text input.\n *\n * Composes `TRInput.Group` so the icon, field, and reveal toggle read as one\n * control.\n *\n * Password fields get a reveal toggle. It is a real button in the tab order\n * with a state-dependent accessible name, and it never changes the field's\n * `name` or `autocomplete`, so password managers keep working.\n */\nexport function AuthField({\n icon: Icon,\n type = 'text',\n label,\n placeholder,\n hint,\n labelAction,\n autoComplete,\n error,\n errorTestId = 'field-error',\n hideLabel = false,\n className = '',\n ref,\n ...props\n}: AuthFieldProps) {\n const { t } = useTranslation();\n const generatedId = useId();\n const [revealed, setRevealed] = useState(false);\n\n const inputId = props.id ?? generatedId;\n const hintId = hint ? `${inputId}-hint` : undefined;\n const errorId = error ? `${inputId}-error` : undefined;\n const describedBy = errorId ?? hintId;\n\n const canReveal = type === 'password';\n const resolvedType = canReveal && revealed ? 'text' : type;\n\n return (\n <TRField.Root className={className}>\n {hideLabel ? (\n <TRField.Label className=\"sr-only\" htmlFor={inputId}>\n {label}\n </TRField.Label>\n ) : (\n <div className=\"flex items-baseline justify-between gap-tinyrack-sm\">\n <TRField.Label htmlFor={inputId}>{label}</TRField.Label>\n {labelAction}\n </div>\n )}\n <TRInput.Group\n data-invalid={error ? '' : undefined}\n data-testid={error ? 'input-error-wrapper' : undefined}\n >\n {Icon && (\n <TRInput.Adornment>\n <Icon\n aria-hidden\n className=\"size-tinyrack-xl opacity-tinyrack-hover\"\n />\n </TRInput.Adornment>\n )}\n <TRInput\n aria-describedby={describedBy}\n aria-invalid={error ? true : undefined}\n autoComplete={autoComplete}\n data-invalid={error ? '' : undefined}\n id={inputId}\n placeholder={placeholder}\n ref={ref}\n type={resolvedType}\n {...props}\n />\n {canReveal && (\n <TRInput.Action\n aria-label={\n revealed ? t('common.password.hide') : t('common.password.show')\n }\n onClick={() => setRevealed((value) => !value)}\n >\n {revealed ? (\n <EyeOffIcon aria-hidden className=\"size-tinyrack-lg\" />\n ) : (\n <EyeIcon aria-hidden className=\"size-tinyrack-lg\" />\n )}\n </TRInput.Action>\n )}\n </TRInput.Group>\n {hint && !error && (\n <TRField.Description id={hintId}>{hint}</TRField.Description>\n )}\n {/*\n Plain element rather than `TRField.Error`: that part renders from Base\n UI's own field validity, which nothing here drives — react-hook-form\n owns validation. The class is the design system's, so the styling is\n still the system's.\n */}\n {error && (\n <div className=\"tr-field-error\" data-testid={errorTestId} id={errorId}>\n {error.message}\n </div>\n )}\n </TRField.Root>\n );\n}\n"],"x_google_ignoreList":[0,1],"mappings":"+JA2BA,IAAM,EAAS,EAAiB,UAAWA,CAjBzC,CACE,OACA,CACE,EAAG,iGACH,IAAK,QACP,CACF,EACA,CAAC,OAAQ,CAAE,EAAG,uCAAwC,IAAK,QAAS,CAAC,EACrE,CACE,OACA,CACE,EAAG,+FACH,IAAK,QACP,CACF,EACA,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAS,CAAC,CAEFA,CAAU,ECR/C,EAAM,EAAiB,MAAO,CATlC,CACE,OACA,CACE,EAAG,wGACH,IAAK,QACP,CACF,EACA,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAS,CAAC,CAEtB,CAAU,mBCwB9C,SAAgB,EAAU,CACxB,KAAM,EACN,OAAO,OACP,QACA,cACA,OACA,cACA,eACA,QACA,cAAc,cACd,YAAY,GACZ,YAAY,GACZ,MACA,GAAG,GACc,CACjB,GAAM,CAAE,KAAM,EAAe,EACvB,GAAA,EAAA,EAAA,MAAA,CAAoB,EACpB,CAAC,EAAU,IAAA,EAAA,EAAA,SAAA,CAAwB,EAAK,EAExC,EAAU,EAAM,IAAM,EACtB,EAAS,EAAO,GAAG,EAAQ,OAAS,IAAA,GACpC,EAAU,EAAQ,GAAG,EAAQ,QAAU,IAAA,GACvC,EAAc,GAAW,EAEzB,EAAY,IAAS,WACrB,EAAe,GAAa,EAAW,OAAS,EAEtD,OACE,EAAA,EAAA,KAAA,CAAC,EAAQ,KAAT,CAAyB,qBAAzB,CACG,GACC,EAAA,EAAA,IAAA,CAAC,EAAQ,MAAT,CAAe,UAAU,UAAU,QAAS,WACzC,CACY,CAAA,GAEf,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,+DAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAQ,MAAT,CAAe,QAAS,WAAU,CAAqB,CAAA,EACtD,CACE,KAEP,EAAA,EAAA,KAAA,CAAC,EAAQ,MAAT,CACE,eAAc,EAAQ,GAAK,IAAA,GAC3B,cAAa,EAAQ,sBAAwB,IAAA,YAF/C,CAIG,IACC,EAAA,EAAA,IAAA,CAAC,EAAQ,UAAT,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAA,GACA,UAAU,yCACX,CAAA,CACgB,CAAA,GAErB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,mBAAkB,EAClB,eAAc,EAAQ,GAAO,IAAA,GACf,eACd,eAAc,EAAQ,GAAK,IAAA,GAC3B,GAAI,EACS,cACR,MACL,KAAM,EACN,GAAI,CACL,CAAA,EACA,IACC,EAAA,EAAA,IAAA,CAAC,EAAQ,OAAT,CACE,aACa,EAAX,EAAa,uBAA4B,sBAAsB,EAEjE,YAAe,EAAa,GAAU,CAAC,CAAK,WAE3C,GACC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,cAAA,GAAY,UAAU,kBAAoB,CAAA,GAEtD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,cAAA,GAAY,UAAU,kBAAoB,CAAA,CAEvC,CAAA,CAEL,IACd,GAAQ,CAAC,IACR,EAAA,EAAA,IAAA,CAAC,EAAQ,YAAT,CAAqB,GAAI,WAAS,CAA0B,CAAA,EAQ7D,IACC,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBAAiB,cAAa,EAAa,GAAI,WAC3D,EAAM,OACJ,CAAA,CAEK,GAElB"}
@@ -1,2 +1,2 @@
1
- import{n as e,q as t}from"./createLucideIcon-BPpAIXR_.js";import{A as n,j as r,t as i}from"./shell-header-bar-C9AB5lT-.js";var a=t();function o(){let{title:t,subtitle:n,iconUrl:i,backgroundUrl:o}=r();return(0,a.jsxs)(`div`,{className:`relative isolate z-0 col-span-full flex flex-col items-start justify-between gap-tinyrack-xs overflow-hidden border-tinyrack-border border-b-tinyrack-default bg-tinyrack-surface-muted px-tinyrack-lg py-tinyrack-md text-tinyrack-text md:col-span-4 md:gap-tinyrack-2xl md:border-e-tinyrack-default md:px-tinyrack-2xl md:py-tinyrack-2xl lg:col-span-5 md:[border-block-end-width:0]`,"data-theme":`tinyrack-dark`,children:[o&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`div`,{"aria-hidden":!0,className:`absolute inset-0 z-0 [background-position:center] [background-size:cover]`,style:{backgroundImage:`url(${o})`}}),(0,a.jsx)(`div`,{"aria-hidden":!0,className:`absolute inset-0 z-0 bg-tinyrack-scrim`})]}),(0,a.jsxs)(`div`,{className:`relative z-tinyrack-content flex min-w-0 flex-row items-center gap-tinyrack-sm md:flex-col md:items-start md:gap-tinyrack-lg`,children:[i&&(0,a.jsx)(`img`,{alt:``,className:`size-tinyrack-2xl object-contain md:size-tinyrack-3xl`,src:i}),t&&(0,a.jsx)(e,{align:`start`,as:`h1`,className:`[--tr-text-font-size:var(--tinyrack-text-lg)] md:[--tr-text-font-size:var(--tinyrack-text-3xl)]`,weight:`heading`,children:t})]}),n&&(0,a.jsx)(e,{align:`start`,as:`p`,className:`relative z-tinyrack-content max-w-tinyrack-measure-xl truncate [--tr-text-font-size:var(--tinyrack-text-xs)] md:overflow-visible md:whitespace-normal md:[--tr-text-font-size:var(--tinyrack-text-lg)]`,color:`muted`,children:n})]})}var s={form:`max-w-tinyrack-measure-xl`,wide:`max-w-tinyrack-overlay-md`};function c({children:e,width:t=`form`}){return(0,a.jsxs)(`div`,{className:`grid min-h-dvh grid-cols-1 bg-tinyrack-surface md:grid-cols-12`,children:[(0,a.jsx)(n,{}),(0,a.jsx)(o,{}),(0,a.jsxs)(`div`,{className:`col-span-full flex min-w-0 flex-col md:col-span-8 lg:col-span-7`,children:[(0,a.jsx)(i,{}),(0,a.jsx)(`main`,{className:`flex flex-1 items-center justify-center px-tinyrack-lg py-tinyrack-xl`,children:(0,a.jsx)(`div`,{className:`auth-enter flex w-full flex-col gap-tinyrack-xl rounded-tinyrack-xl border border-tinyrack-border bg-tinyrack-surface p-tinyrack-xl md:border-0 md:bg-transparent md:p-0 ${s[t]}`,children:e})})]})]})}export{c as t};
2
- //# sourceMappingURL=auth-layout-CoeqNhTT.js.map
1
+ import{n as e,q as t}from"./createLucideIcon-BPpAIXR_.js";import{A as n,j as r,t as i}from"./shell-header-bar-CjG5qvPg.js";var a=t();function o(){let{title:t,subtitle:n,iconUrl:i,backgroundUrl:o}=r();return(0,a.jsxs)(`div`,{className:`relative isolate z-0 col-span-full flex flex-col items-start justify-between gap-tinyrack-xs overflow-hidden border-tinyrack-border border-b-tinyrack-default bg-tinyrack-surface-muted px-tinyrack-lg py-tinyrack-md text-tinyrack-text md:col-span-4 md:gap-tinyrack-2xl md:border-e-tinyrack-default md:px-tinyrack-2xl md:py-tinyrack-2xl lg:col-span-5 md:[border-block-end-width:0]`,"data-theme":`tinyrack-dark`,children:[o&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`div`,{"aria-hidden":!0,className:`absolute inset-0 z-0 [background-position:center] [background-size:cover]`,style:{backgroundImage:`url(${o})`}}),(0,a.jsx)(`div`,{"aria-hidden":!0,className:`absolute inset-0 z-0 bg-tinyrack-scrim`})]}),(0,a.jsxs)(`div`,{className:`relative z-tinyrack-content flex min-w-0 flex-row items-center gap-tinyrack-sm md:flex-col md:items-start md:gap-tinyrack-lg`,children:[i&&(0,a.jsx)(`img`,{alt:``,className:`size-tinyrack-2xl object-contain md:size-tinyrack-3xl`,src:i}),t&&(0,a.jsx)(e,{align:`start`,as:`h1`,className:`[--tr-text-font-size:var(--tinyrack-text-lg)] md:[--tr-text-font-size:var(--tinyrack-text-3xl)]`,weight:`heading`,children:t})]}),n&&(0,a.jsx)(e,{align:`start`,as:`p`,className:`relative z-tinyrack-content max-w-tinyrack-measure-xl truncate [--tr-text-font-size:var(--tinyrack-text-xs)] md:overflow-visible md:whitespace-normal md:[--tr-text-font-size:var(--tinyrack-text-lg)]`,color:`muted`,children:n})]})}var s={form:`max-w-tinyrack-measure-xl`,wide:`max-w-tinyrack-overlay-md`};function c({children:e,width:t=`form`}){return(0,a.jsxs)(`div`,{className:`grid min-h-dvh grid-cols-1 bg-tinyrack-surface md:grid-cols-12`,children:[(0,a.jsx)(n,{}),(0,a.jsx)(o,{}),(0,a.jsxs)(`div`,{className:`col-span-full flex min-w-0 flex-col md:col-span-8 lg:col-span-7`,children:[(0,a.jsx)(i,{}),(0,a.jsx)(`main`,{className:`flex flex-1 items-center justify-center px-tinyrack-lg py-tinyrack-xl`,children:(0,a.jsx)(`div`,{className:`auth-enter flex w-full flex-col gap-tinyrack-xl rounded-tinyrack-xl border border-tinyrack-border bg-tinyrack-surface p-tinyrack-xl md:border-0 md:bg-transparent md:p-0 ${s[t]}`,children:e})})]})]})}export{c as t};
2
+ //# sourceMappingURL=auth-layout-VtpryDof.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-layout-CoeqNhTT.js","names":[],"sources":["../../../frontend/src/features/layout/auth-brand-panel.tsx","../../../frontend/src/features/layout/auth-layout.tsx"],"sourcesContent":["import { TRText } from '@tinyrack/ui/components/text';\nimport { useBranding } from '#frontend/features/layout/use-branding.ts';\n\n/**\n * The deployment's identity, rendered once for the whole auth surface.\n *\n * There is a single instance in the DOM at every breakpoint: a full-height\n * inverse panel beside the form from `md:` up, and a compact banner strip\n * above it below that. Rendering it twice and hiding one would give the brand\n * title two heading nodes and the icon two `img` nodes, which both the e2e\n * assertions and assistive technology would read as duplicates.\n *\n * When the deployment has configured a product name, that name is the page's\n * `h1` and screen titles sit under it as `h2`. When it has not, the panel has\n * no heading and the screen title becomes the `h1` — see `AuthPageHeader`.\n *\n * Pinned to the dark theme rather than using the `inverse` tokens.\n * `--tinyrack-text-inverse` flips with the active theme, so in dark mode it\n * resolves to near-black — which is illegible over the always-dark scrim a\n * background image sits under. Scoping `data-theme` here makes every token\n * inside the panel resolve consistently, so the brand surface reads the same\n * in both app themes and the scrim always works.\n */\nexport function AuthBrandPanel() {\n const { title, subtitle, iconUrl, backgroundUrl } = useBranding();\n\n return (\n <div\n className=\"relative isolate z-0 col-span-full flex flex-col items-start justify-between gap-tinyrack-xs overflow-hidden border-tinyrack-border border-b-tinyrack-default bg-tinyrack-surface-muted px-tinyrack-lg py-tinyrack-md text-tinyrack-text md:col-span-4 md:gap-tinyrack-2xl md:border-e-tinyrack-default md:px-tinyrack-2xl md:py-tinyrack-2xl lg:col-span-5 md:[border-block-end-width:0]\"\n data-theme=\"tinyrack-dark\"\n >\n {backgroundUrl && (\n <>\n {/*\n Kept as an inline style rather than an arbitrary Tailwind class: the\n URL is runtime config, so it cannot be part of the CSS build.\n */}\n <div\n aria-hidden\n className=\"absolute inset-0 z-0 [background-position:center] [background-size:cover]\"\n style={{ backgroundImage: `url(${backgroundUrl})` }}\n />\n <div aria-hidden className=\"absolute inset-0 z-0 bg-tinyrack-scrim\" />\n </>\n )}\n\n <div className=\"relative z-tinyrack-content flex min-w-0 flex-row items-center gap-tinyrack-sm md:flex-col md:items-start md:gap-tinyrack-lg\">\n {iconUrl && (\n <img\n alt=\"\"\n className=\"size-tinyrack-2xl object-contain md:size-tinyrack-3xl\"\n src={iconUrl}\n />\n )}\n {/*\n Sized through `--tr-text-font-size`, the override hook TRText exposes,\n rather than a `text-*` utility: the component's own per-variant rule\n is more specific than a utility class, so a utility is ignored. Still\n token-only, and responsive because the mobile banner has far less\n room than the panel.\n */}\n {title && (\n <TRText\n align=\"start\"\n as=\"h1\"\n className=\"[--tr-text-font-size:var(--tinyrack-text-lg)] md:[--tr-text-font-size:var(--tinyrack-text-3xl)]\"\n weight=\"heading\"\n >\n {title}\n </TRText>\n )}\n </div>\n\n {/*\n Shown at every width — this is the deployment's own copy, so hiding it\n on phones would drop configured content. One line in the mobile banner,\n the full string beside the form. Sized through the component's override\n hook for the same reason as the title above.\n */}\n {subtitle && (\n <TRText\n align=\"start\"\n as=\"p\"\n className=\"relative z-tinyrack-content max-w-tinyrack-measure-xl truncate [--tr-text-font-size:var(--tinyrack-text-xs)] md:overflow-visible md:whitespace-normal md:[--tr-text-font-size:var(--tinyrack-text-lg)]\"\n color=\"muted\"\n >\n {subtitle}\n </TRText>\n )}\n </div>\n );\n}\n","import { Toaster } from '#frontend/components/ui/toaster.tsx';\nimport { AuthBrandPanel } from '#frontend/features/layout/auth-brand-panel.tsx';\nimport { ShellHeaderBar } from '#frontend/features/layout/shell-header-bar.tsx';\n\ntype AuthLayoutProps = {\n children: React.ReactNode;\n /**\n * `form` (default) fits a single column of fields. `wide` is for screens\n * that present a list to review before deciding — consent scopes, terms,\n * account selection, recovery codes.\n */\n width?: 'form' | 'wide';\n};\n\nconst widthClasses: Record<NonNullable<AuthLayoutProps['width']>, string> = {\n form: 'max-w-tinyrack-measure-xl',\n wide: 'max-w-tinyrack-overlay-md',\n};\n\n/**\n * The shell every auth screen sits in.\n *\n * Split canvas: the deployment's identity on the left, the task on the right.\n * The form is not in a card on desktop — hierarchy comes from the contrast\n * between the inverse brand panel and the canvas, so a card would only add a\n * box inside a box. Below `md:` the panel collapses to a banner and the form\n * does get a surface, because on a phone it would otherwise float unanchored.\n */\nexport function AuthLayout({ children, width = 'form' }: AuthLayoutProps) {\n return (\n <div className=\"grid min-h-dvh grid-cols-1 bg-tinyrack-surface md:grid-cols-12\">\n <Toaster />\n <AuthBrandPanel />\n <div className=\"col-span-full flex min-w-0 flex-col md:col-span-8 lg:col-span-7\">\n {/* No `brand`: AuthBrandPanel already owns the deployment's title. */}\n <ShellHeaderBar />\n <main className=\"flex flex-1 items-center justify-center px-tinyrack-lg py-tinyrack-xl\">\n {/*\n The stack owns vertical rhythm so screens compose as a flat list of\n blocks — header, alerts, form, footer — instead of each one\n hand-rolling `mb-4`/`mt-6` margins that drift apart over time.\n */}\n <div\n className={`auth-enter flex w-full flex-col gap-tinyrack-xl rounded-tinyrack-xl border border-tinyrack-border bg-tinyrack-surface p-tinyrack-xl md:border-0 md:bg-transparent md:p-0 ${widthClasses[width]}`}\n >\n {children}\n </div>\n </main>\n </div>\n </div>\n );\n}\n"],"mappings":"qIAuBA,SAAgB,GAAiB,CAC/B,GAAM,CAAE,QAAO,WAAU,UAAS,iBAAkB,EAAY,EAEhE,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,UAAU,4XACV,aAAW,yBAFb,CAIG,IACC,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EAKE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,cAAA,GACA,UAAU,4EACV,MAAO,CAAE,gBAAiB,OAAO,EAAc,EAAG,CACnD,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,cAAA,GAAY,UAAU,wCAA0C,CAAA,CACrE,CAAA,CAAA,GAGJ,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,wIAAf,CACG,IACC,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,IAAI,GACJ,UAAU,wDACV,IAAK,CACN,CAAA,EASF,IACC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,QACN,GAAG,KACH,UAAU,kGACV,OAAO,mBAEN,CACK,CAAA,CAEP,IAQJ,IACC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,QACN,GAAG,IACH,UAAU,yMACV,MAAM,iBAEL,CACK,CAAA,CAEP,GAET,CC7EA,IAAM,EAAsE,CAC1E,KAAM,4BACN,KAAM,2BACR,EAWA,SAAgB,EAAW,CAAE,WAAU,QAAQ,QAA2B,CACxE,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,0EAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAU,CAAA,GACV,EAAA,EAAA,IAAA,CAAC,EAAD,CAAiB,CAAA,GACjB,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,2EAAf,EAEE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAiB,CAAA,GACjB,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,kFAMd,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,UAAW,4KAA4K,EAAa,KAEnM,UACE,CAAA,CACD,CAAA,CACH,GACF,GAET"}
1
+ {"version":3,"file":"auth-layout-VtpryDof.js","names":[],"sources":["../../../frontend/src/features/layout/auth-brand-panel.tsx","../../../frontend/src/features/layout/auth-layout.tsx"],"sourcesContent":["import { TRText } from '@tinyrack/ui/components/text';\nimport { useBranding } from '#frontend/features/layout/use-branding.ts';\n\n/**\n * The deployment's identity, rendered once for the whole auth surface.\n *\n * There is a single instance in the DOM at every breakpoint: a full-height\n * inverse panel beside the form from `md:` up, and a compact banner strip\n * above it below that. Rendering it twice and hiding one would give the brand\n * title two heading nodes and the icon two `img` nodes, which both the e2e\n * assertions and assistive technology would read as duplicates.\n *\n * When the deployment has configured a product name, that name is the page's\n * `h1` and screen titles sit under it as `h2`. When it has not, the panel has\n * no heading and the screen title becomes the `h1` — see `AuthPageHeader`.\n *\n * Pinned to the dark theme rather than using the `inverse` tokens.\n * `--tinyrack-text-inverse` flips with the active theme, so in dark mode it\n * resolves to near-black — which is illegible over the always-dark scrim a\n * background image sits under. Scoping `data-theme` here makes every token\n * inside the panel resolve consistently, so the brand surface reads the same\n * in both app themes and the scrim always works.\n */\nexport function AuthBrandPanel() {\n const { title, subtitle, iconUrl, backgroundUrl } = useBranding();\n\n return (\n <div\n className=\"relative isolate z-0 col-span-full flex flex-col items-start justify-between gap-tinyrack-xs overflow-hidden border-tinyrack-border border-b-tinyrack-default bg-tinyrack-surface-muted px-tinyrack-lg py-tinyrack-md text-tinyrack-text md:col-span-4 md:gap-tinyrack-2xl md:border-e-tinyrack-default md:px-tinyrack-2xl md:py-tinyrack-2xl lg:col-span-5 md:[border-block-end-width:0]\"\n data-theme=\"tinyrack-dark\"\n >\n {backgroundUrl && (\n <>\n {/*\n Kept as an inline style rather than an arbitrary Tailwind class: the\n URL is runtime config, so it cannot be part of the CSS build.\n */}\n <div\n aria-hidden\n className=\"absolute inset-0 z-0 [background-position:center] [background-size:cover]\"\n style={{ backgroundImage: `url(${backgroundUrl})` }}\n />\n <div aria-hidden className=\"absolute inset-0 z-0 bg-tinyrack-scrim\" />\n </>\n )}\n\n <div className=\"relative z-tinyrack-content flex min-w-0 flex-row items-center gap-tinyrack-sm md:flex-col md:items-start md:gap-tinyrack-lg\">\n {iconUrl && (\n <img\n alt=\"\"\n className=\"size-tinyrack-2xl object-contain md:size-tinyrack-3xl\"\n src={iconUrl}\n />\n )}\n {/*\n Sized through `--tr-text-font-size`, the override hook TRText exposes,\n rather than a `text-*` utility: the component's own per-variant rule\n is more specific than a utility class, so a utility is ignored. Still\n token-only, and responsive because the mobile banner has far less\n room than the panel.\n */}\n {title && (\n <TRText\n align=\"start\"\n as=\"h1\"\n className=\"[--tr-text-font-size:var(--tinyrack-text-lg)] md:[--tr-text-font-size:var(--tinyrack-text-3xl)]\"\n weight=\"heading\"\n >\n {title}\n </TRText>\n )}\n </div>\n\n {/*\n Shown at every width — this is the deployment's own copy, so hiding it\n on phones would drop configured content. One line in the mobile banner,\n the full string beside the form. Sized through the component's override\n hook for the same reason as the title above.\n */}\n {subtitle && (\n <TRText\n align=\"start\"\n as=\"p\"\n className=\"relative z-tinyrack-content max-w-tinyrack-measure-xl truncate [--tr-text-font-size:var(--tinyrack-text-xs)] md:overflow-visible md:whitespace-normal md:[--tr-text-font-size:var(--tinyrack-text-lg)]\"\n color=\"muted\"\n >\n {subtitle}\n </TRText>\n )}\n </div>\n );\n}\n","import { Toaster } from '#frontend/components/ui/toaster.tsx';\nimport { AuthBrandPanel } from '#frontend/features/layout/auth-brand-panel.tsx';\nimport { ShellHeaderBar } from '#frontend/features/layout/shell-header-bar.tsx';\n\ntype AuthLayoutProps = {\n children: React.ReactNode;\n /**\n * `form` (default) fits a single column of fields. `wide` is for screens\n * that present a list to review before deciding — consent scopes, terms,\n * account selection, recovery codes.\n */\n width?: 'form' | 'wide';\n};\n\nconst widthClasses: Record<NonNullable<AuthLayoutProps['width']>, string> = {\n form: 'max-w-tinyrack-measure-xl',\n wide: 'max-w-tinyrack-overlay-md',\n};\n\n/**\n * The shell every auth screen sits in.\n *\n * Split canvas: the deployment's identity on the left, the task on the right.\n * The form is not in a card on desktop — hierarchy comes from the contrast\n * between the inverse brand panel and the canvas, so a card would only add a\n * box inside a box. Below `md:` the panel collapses to a banner and the form\n * does get a surface, because on a phone it would otherwise float unanchored.\n */\nexport function AuthLayout({ children, width = 'form' }: AuthLayoutProps) {\n return (\n <div className=\"grid min-h-dvh grid-cols-1 bg-tinyrack-surface md:grid-cols-12\">\n <Toaster />\n <AuthBrandPanel />\n <div className=\"col-span-full flex min-w-0 flex-col md:col-span-8 lg:col-span-7\">\n {/* No `brand`: AuthBrandPanel already owns the deployment's title. */}\n <ShellHeaderBar />\n <main className=\"flex flex-1 items-center justify-center px-tinyrack-lg py-tinyrack-xl\">\n {/*\n The stack owns vertical rhythm so screens compose as a flat list of\n blocks — header, alerts, form, footer — instead of each one\n hand-rolling `mb-4`/`mt-6` margins that drift apart over time.\n */}\n <div\n className={`auth-enter flex w-full flex-col gap-tinyrack-xl rounded-tinyrack-xl border border-tinyrack-border bg-tinyrack-surface p-tinyrack-xl md:border-0 md:bg-transparent md:p-0 ${widthClasses[width]}`}\n >\n {children}\n </div>\n </main>\n </div>\n </div>\n );\n}\n"],"mappings":"qIAuBA,SAAgB,GAAiB,CAC/B,GAAM,CAAE,QAAO,WAAU,UAAS,iBAAkB,EAAY,EAEhE,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,UAAU,4XACV,aAAW,yBAFb,CAIG,IACC,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EAKE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,cAAA,GACA,UAAU,4EACV,MAAO,CAAE,gBAAiB,OAAO,EAAc,EAAG,CACnD,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,cAAA,GAAY,UAAU,wCAA0C,CAAA,CACrE,CAAA,CAAA,GAGJ,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,wIAAf,CACG,IACC,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,IAAI,GACJ,UAAU,wDACV,IAAK,CACN,CAAA,EASF,IACC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,QACN,GAAG,KACH,UAAU,kGACV,OAAO,mBAEN,CACK,CAAA,CAEP,IAQJ,IACC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,QACN,GAAG,IACH,UAAU,yMACV,MAAM,iBAEL,CACK,CAAA,CAEP,GAET,CC7EA,IAAM,EAAsE,CAC1E,KAAM,4BACN,KAAM,2BACR,EAWA,SAAgB,EAAW,CAAE,WAAU,QAAQ,QAA2B,CACxE,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,0EAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAU,CAAA,GACV,EAAA,EAAA,IAAA,CAAC,EAAD,CAAiB,CAAA,GACjB,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,2EAAf,EAEE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAiB,CAAA,GACjB,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,kFAMd,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,UAAW,4KAA4K,EAAa,KAEnM,UACE,CAAA,CACD,CAAA,CACH,GACF,GAET"}
@@ -1,2 +1,2 @@
1
- import{n as e,q as t}from"./createLucideIcon-BPpAIXR_.js";import{j as n}from"./shell-header-bar-C9AB5lT-.js";var r=t();function i({title:t,subtitle:i,eyebrow:a,align:o=`start`}){let{title:s}=n();return(0,r.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-xs ${o===`center`?`items-center text-center`:`items-start text-start`}`,children:[a,(0,r.jsx)(e,{align:o,as:s?`h2`:`h1`,variant:`headingLg`,children:t}),i&&(0,r.jsx)(e,{align:o,as:`p`,color:`muted`,variant:`body`,children:i})]})}export{i as t};
2
- //# sourceMappingURL=auth-page-header-CIs08f5Y.js.map
1
+ import{n as e,q as t}from"./createLucideIcon-BPpAIXR_.js";import{j as n}from"./shell-header-bar-CjG5qvPg.js";var r=t();function i({title:t,subtitle:i,eyebrow:a,align:o=`start`}){let{title:s}=n();return(0,r.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-xs ${o===`center`?`items-center text-center`:`items-start text-start`}`,children:[a,(0,r.jsx)(e,{align:o,as:s?`h2`:`h1`,variant:`headingLg`,children:t}),i&&(0,r.jsx)(e,{align:o,as:`p`,color:`muted`,variant:`body`,children:i})]})}export{i as t};
2
+ //# sourceMappingURL=auth-page-header-CIn2E4zI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-page-header-CIs08f5Y.js","names":[],"sources":["../../../frontend/src/components/auth/auth-page-header.tsx"],"sourcesContent":["import { TRText } from '@tinyrack/ui/components/text';\nimport { useBranding } from '#frontend/features/layout/use-branding.ts';\n\ntype AuthPageHeaderProps = {\n title: string;\n subtitle?: string;\n /** Small label above the title — wizard progress, flow context. */\n eyebrow?: React.ReactNode;\n /** Centre for terminal states (success, error) where there is no form to scan. */\n align?: 'start' | 'center';\n};\n\n/**\n * Titles the current screen.\n *\n * Heading level follows the brand panel: when the deployment has configured a\n * product name that name is the page's `h1`, so this is an `h2` beneath it.\n * With no branding there is no other heading, so this becomes the `h1` rather\n * than leaving the page starting at level 2.\n *\n * Left-aligned by default. Centred auth copy reads as a consumer sign-up;\n * aligning it with the fields below reads as a console and gives the eye one\n * vertical line to follow into the form.\n *\n * Carries no margin — spacing is the caller's, so it composes into a stack.\n */\nexport function AuthPageHeader({\n title,\n subtitle,\n eyebrow,\n align = 'start',\n}: AuthPageHeaderProps) {\n const { title: brandTitle } = useBranding();\n const headingTag = brandTitle ? 'h2' : 'h1';\n\n return (\n <div\n className={`flex flex-col gap-tinyrack-xs ${align === 'center' ? 'items-center text-center' : 'items-start text-start'}`}\n >\n {eyebrow}\n <TRText align={align} as={headingTag} variant=\"headingLg\">\n {title}\n </TRText>\n {subtitle && (\n <TRText align={align} as=\"p\" color=\"muted\" variant=\"body\">\n {subtitle}\n </TRText>\n )}\n </div>\n );\n}\n"],"mappings":"uHA0BA,SAAgB,EAAe,CAC7B,QACA,WACA,UACA,QAAQ,SACc,CACtB,GAAM,CAAE,MAAO,GAAe,EAAY,EAG1C,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,UAAW,iCAAiC,IAAU,SAAW,2BAA6B,oCADhG,CAGG,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,QAAO,GAPP,EAAa,KAAO,KAOG,QAAQ,qBAC3C,CACK,CAAA,EACP,IACC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,QAAO,GAAG,IAAI,MAAM,QAAQ,QAAQ,gBAChD,CACK,CAAA,CAEP,GAET"}
1
+ {"version":3,"file":"auth-page-header-CIn2E4zI.js","names":[],"sources":["../../../frontend/src/components/auth/auth-page-header.tsx"],"sourcesContent":["import { TRText } from '@tinyrack/ui/components/text';\nimport { useBranding } from '#frontend/features/layout/use-branding.ts';\n\ntype AuthPageHeaderProps = {\n title: string;\n subtitle?: string;\n /** Small label above the title — wizard progress, flow context. */\n eyebrow?: React.ReactNode;\n /** Centre for terminal states (success, error) where there is no form to scan. */\n align?: 'start' | 'center';\n};\n\n/**\n * Titles the current screen.\n *\n * Heading level follows the brand panel: when the deployment has configured a\n * product name that name is the page's `h1`, so this is an `h2` beneath it.\n * With no branding there is no other heading, so this becomes the `h1` rather\n * than leaving the page starting at level 2.\n *\n * Left-aligned by default. Centred auth copy reads as a consumer sign-up;\n * aligning it with the fields below reads as a console and gives the eye one\n * vertical line to follow into the form.\n *\n * Carries no margin — spacing is the caller's, so it composes into a stack.\n */\nexport function AuthPageHeader({\n title,\n subtitle,\n eyebrow,\n align = 'start',\n}: AuthPageHeaderProps) {\n const { title: brandTitle } = useBranding();\n const headingTag = brandTitle ? 'h2' : 'h1';\n\n return (\n <div\n className={`flex flex-col gap-tinyrack-xs ${align === 'center' ? 'items-center text-center' : 'items-start text-start'}`}\n >\n {eyebrow}\n <TRText align={align} as={headingTag} variant=\"headingLg\">\n {title}\n </TRText>\n {subtitle && (\n <TRText align={align} as=\"p\" color=\"muted\" variant=\"body\">\n {subtitle}\n </TRText>\n )}\n </div>\n );\n}\n"],"mappings":"uHA0BA,SAAgB,EAAe,CAC7B,QACA,WACA,UACA,QAAQ,SACc,CACtB,GAAM,CAAE,MAAO,GAAe,EAAY,EAG1C,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,UAAW,iCAAiC,IAAU,SAAW,2BAA6B,oCADhG,CAGG,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,QAAO,GAPP,EAAa,KAAO,KAOG,QAAQ,qBAC3C,CACK,CAAA,EACP,IACC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,QAAO,GAAG,IAAI,MAAM,QAAQ,QAAQ,gBAChD,CACK,CAAA,CAEP,GAET"}
@@ -1,2 +1,2 @@
1
- import{i as e,n as t,q as n,t as r}from"./createLucideIcon-BPpAIXR_.js";import{tt as i}from"./shell-header-bar-C9AB5lT-.js";import{t as a}from"./shield-check-D_p8H0ni.js";import{B as o,D as s,P as c}from"./index-gliHKncz.js";import{t as l}from"./badge-CsOfUji0.js";var u=r(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),d=n();function f({search:e,className:t=``}){return c(e)?(0,d.jsx)(p,{className:t,search:e}):null}function p({search:n,className:r}){let{t:c}=e(),{data:f}=i(s(n));return(0,d.jsx)(o.Root,{"aria-label":c(`authorizationContext.label`),className:r,"data-testid":`authorization-context`,padding:`lg`,render:(0,d.jsx)(`section`,{}),variant:`outlined`,children:(0,d.jsxs)(o.Content,{className:`flex flex-col gap-tinyrack-sm`,children:[(0,d.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm`,children:[(0,d.jsx)(a,{"aria-hidden":!0,className:`size-tinyrack-lg shrink-0 text-tinyrack-info`}),(0,d.jsx)(t,{variant:`body`,weight:`medium`,children:c(`authorizationContext.title`,{app:f.client.name})})]}),(0,d.jsxs)(`div`,{className:`flex min-w-0 items-center gap-tinyrack-xs`,children:[(0,d.jsx)(u,{"aria-hidden":!0,className:`size-tinyrack-lg shrink-0 text-tinyrack-text-muted`}),(0,d.jsx)(t,{color:`muted`,truncate:!0,variant:`caption`,children:c(`authorizationContext.redirect`,{origin:f.redirect_origin})})]}),(0,d.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-xs`,children:[(0,d.jsx)(t,{color:`muted`,variant:`caption`,weight:`medium`,children:c(`authorizationContext.permissions`)}),f.scopes.length>0?(0,d.jsx)(`ul`,{className:`flex flex-wrap gap-tinyrack-xs`,children:f.scopes.map(e=>(0,d.jsx)(`li`,{children:(0,d.jsx)(l,{uiSize:`md`,variant:`neutral`,children:c(`consent.scope.${e.name}`,{defaultValue:e.description})})},e.name))}):(0,d.jsx)(t,{color:`muted`,variant:`caption`,children:c(`authorizationContext.noScopes`)})]})]})})}export{f as t};
2
- //# sourceMappingURL=authorization-context-banner-BbtQmMYH.js.map
1
+ import{i as e,n as t,q as n,t as r}from"./createLucideIcon-BPpAIXR_.js";import{tt as i}from"./shell-header-bar-CjG5qvPg.js";import{t as a}from"./shield-check-D_p8H0ni.js";import{B as o,D as s,P as c}from"./index-CS23Ozt6.js";import{t as l}from"./badge-CsOfUji0.js";var u=r(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),d=n();function f({search:e,className:t=``}){return c(e)?(0,d.jsx)(p,{className:t,search:e}):null}function p({search:n,className:r}){let{t:c}=e(),{data:f}=i(s(n));return(0,d.jsx)(o.Root,{"aria-label":c(`authorizationContext.label`),className:r,"data-testid":`authorization-context`,padding:`lg`,render:(0,d.jsx)(`section`,{}),variant:`outlined`,children:(0,d.jsxs)(o.Content,{className:`flex flex-col gap-tinyrack-sm`,children:[(0,d.jsxs)(`div`,{className:`flex items-center gap-tinyrack-sm`,children:[(0,d.jsx)(a,{"aria-hidden":!0,className:`size-tinyrack-lg shrink-0 text-tinyrack-info`}),(0,d.jsx)(t,{variant:`body`,weight:`medium`,children:c(`authorizationContext.title`,{app:f.client.name})})]}),(0,d.jsxs)(`div`,{className:`flex min-w-0 items-center gap-tinyrack-xs`,children:[(0,d.jsx)(u,{"aria-hidden":!0,className:`size-tinyrack-lg shrink-0 text-tinyrack-text-muted`}),(0,d.jsx)(t,{color:`muted`,truncate:!0,variant:`caption`,children:c(`authorizationContext.redirect`,{origin:f.redirect_origin})})]}),(0,d.jsxs)(`div`,{className:`flex flex-col gap-tinyrack-xs`,children:[(0,d.jsx)(t,{color:`muted`,variant:`caption`,weight:`medium`,children:c(`authorizationContext.permissions`)}),f.scopes.length>0?(0,d.jsx)(`ul`,{className:`flex flex-wrap gap-tinyrack-xs`,children:f.scopes.map(e=>(0,d.jsx)(`li`,{children:(0,d.jsx)(l,{uiSize:`md`,variant:`neutral`,children:c(`consent.scope.${e.name}`,{defaultValue:e.description})})},e.name))}):(0,d.jsx)(t,{color:`muted`,variant:`caption`,children:c(`authorizationContext.noScopes`)})]})]})})}export{f as t};
2
+ //# sourceMappingURL=authorization-context-banner-SOuBHWIb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorization-context-banner-BbtQmMYH.js","names":[],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/globe.mjs","../../../frontend/src/components/auth/authorization-context-banner.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.mjs.map\n","import { useSuspenseQuery } from '@tanstack/react-query';\nimport { TRBadge } from '@tinyrack/ui/components/badge';\nimport { TRCard } from '@tinyrack/ui/components/card';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { GlobeIcon, ShieldCheckIcon } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport {\n type AuthorizationContextSearch,\n hasAuthorizationContext,\n type OAuthSearch,\n} from '#frontend/libs/oauth-search.ts';\nimport { getAuthorizationContextQueryOptions } from '#frontend/queries/authorization-context.ts';\n\ntype AuthorizationContextBannerProps = {\n search: OAuthSearch;\n className?: string;\n};\n\nexport function AuthorizationContextBanner({\n search,\n className = '',\n}: AuthorizationContextBannerProps) {\n if (!hasAuthorizationContext(search)) {\n return null;\n }\n\n return <AuthorizationContextContent className={className} search={search} />;\n}\n\nfunction AuthorizationContextContent({\n search,\n className,\n}: {\n search: AuthorizationContextSearch;\n className: string;\n}) {\n const { t } = useTranslation();\n const { data } = useSuspenseQuery(\n getAuthorizationContextQueryOptions(search),\n );\n\n return (\n <TRCard.Root\n aria-label={t('authorizationContext.label')}\n className={className}\n data-testid=\"authorization-context\"\n padding=\"lg\"\n render={<section />}\n variant=\"outlined\"\n >\n <TRCard.Content className=\"flex flex-col gap-tinyrack-sm\">\n <div className=\"flex items-center gap-tinyrack-sm\">\n <ShieldCheckIcon\n aria-hidden\n className=\"size-tinyrack-lg shrink-0 text-tinyrack-info\"\n />\n <TRText variant=\"body\" weight=\"medium\">\n {t('authorizationContext.title', { app: data.client.name })}\n </TRText>\n </div>\n\n <div className=\"flex min-w-0 items-center gap-tinyrack-xs\">\n <GlobeIcon\n aria-hidden\n className=\"size-tinyrack-lg shrink-0 text-tinyrack-text-muted\"\n />\n <TRText color=\"muted\" truncate variant=\"caption\">\n {t('authorizationContext.redirect', {\n origin: data.redirect_origin,\n })}\n </TRText>\n </div>\n\n <div className=\"flex flex-col gap-tinyrack-xs\">\n <TRText color=\"muted\" variant=\"caption\" weight=\"medium\">\n {t('authorizationContext.permissions')}\n </TRText>\n {data.scopes.length > 0 ? (\n <ul className=\"flex flex-wrap gap-tinyrack-xs\">\n {data.scopes.map((scope) => (\n <li key={scope.name}>\n <TRBadge uiSize=\"md\" variant=\"neutral\">\n {t(`consent.scope.${scope.name}`, {\n defaultValue: scope.description,\n })}\n </TRBadge>\n </li>\n ))}\n </ul>\n ) : (\n <TRText color=\"muted\" variant=\"caption\">\n {t('authorizationContext.noScopes')}\n </TRText>\n )}\n </div>\n </TRCard.Content>\n </TRCard.Root>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"yQAcA,IAAM,EAAQ,EAAiB,QAAS,CAJtC,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,QAAS,CAAC,EACzD,CAAC,OAAQ,CAAE,EAAG,kDAAmD,IAAK,QAAS,CAAC,EAChF,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAS,CAAC,CAEH,CAAU,QCIlD,SAAgB,EAA2B,CACzC,SACA,YAAY,IACsB,CAKlC,OAJK,EAAwB,CAAM,GAI5B,EAAA,EAAA,IAAA,CAAC,EAAD,CAAwC,YAAmB,QAAS,CAAA,EAHlE,IAIX,CAEA,SAAS,EAA4B,CACnC,SACA,aAIC,CACD,GAAM,CAAE,KAAM,EAAe,EACvB,CAAE,QAAS,EACf,EAAoC,CAAM,CAC5C,EAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAO,KAAR,CACE,aAAY,EAAE,4BAA4B,EAC/B,YACX,cAAY,wBACZ,QAAQ,KACR,QAAQ,EAAA,EAAA,IAAA,CAAC,UAAD,CAAU,CAAA,EAClB,QAAQ,qBAER,EAAA,EAAA,KAAA,CAAC,EAAO,QAAR,CAAgB,UAAU,yCAA1B,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,6CAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAA,GACA,UAAU,8CACX,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,QAAQ,OAAO,OAAO,kBAC3B,EAAE,6BAA8B,CAAE,IAAK,EAAK,OAAO,IAAK,CAAC,CACpD,CAAA,CACL,KAEL,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,qDAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAA,GACA,UAAU,oDACX,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,MAAM,QAAQ,SAAA,GAAS,QAAQ,mBACpC,EAAE,gCAAiC,CAClC,OAAQ,EAAK,eACf,CAAC,CACK,CAAA,CACL,KAEL,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,yCAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,MAAM,QAAQ,QAAQ,UAAU,OAAO,kBAC5C,EAAE,kCAAkC,CAC/B,CAAA,EACP,EAAK,OAAO,OAAS,GACpB,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,0CACX,EAAK,OAAO,IAAK,IAChB,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,OAAO,KAAK,QAAQ,mBAC1B,EAAE,iBAAiB,EAAM,OAAQ,CAChC,aAAc,EAAM,WACtB,CAAC,CACM,CAAA,CACP,EANK,EAAM,IAMX,CACL,CACC,CAAA,GAEJ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,MAAM,QAAQ,QAAQ,mBAC3B,EAAE,+BAA+B,CAC5B,CAAA,CAEP,GACS,GACL,CAAA,CAEjB"}
1
+ {"version":3,"file":"authorization-context-banner-SOuBHWIb.js","names":[],"sources":["../../../../node_modules/.pnpm/lucide-react@1.25.0_react@19.2.7/node_modules/lucide-react/dist/esm/icons/globe.mjs","../../../frontend/src/components/auth/authorization-context-banner.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.mjs.map\n","import { useSuspenseQuery } from '@tanstack/react-query';\nimport { TRBadge } from '@tinyrack/ui/components/badge';\nimport { TRCard } from '@tinyrack/ui/components/card';\nimport { TRText } from '@tinyrack/ui/components/text';\nimport { GlobeIcon, ShieldCheckIcon } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport {\n type AuthorizationContextSearch,\n hasAuthorizationContext,\n type OAuthSearch,\n} from '#frontend/libs/oauth-search.ts';\nimport { getAuthorizationContextQueryOptions } from '#frontend/queries/authorization-context.ts';\n\ntype AuthorizationContextBannerProps = {\n search: OAuthSearch;\n className?: string;\n};\n\nexport function AuthorizationContextBanner({\n search,\n className = '',\n}: AuthorizationContextBannerProps) {\n if (!hasAuthorizationContext(search)) {\n return null;\n }\n\n return <AuthorizationContextContent className={className} search={search} />;\n}\n\nfunction AuthorizationContextContent({\n search,\n className,\n}: {\n search: AuthorizationContextSearch;\n className: string;\n}) {\n const { t } = useTranslation();\n const { data } = useSuspenseQuery(\n getAuthorizationContextQueryOptions(search),\n );\n\n return (\n <TRCard.Root\n aria-label={t('authorizationContext.label')}\n className={className}\n data-testid=\"authorization-context\"\n padding=\"lg\"\n render={<section />}\n variant=\"outlined\"\n >\n <TRCard.Content className=\"flex flex-col gap-tinyrack-sm\">\n <div className=\"flex items-center gap-tinyrack-sm\">\n <ShieldCheckIcon\n aria-hidden\n className=\"size-tinyrack-lg shrink-0 text-tinyrack-info\"\n />\n <TRText variant=\"body\" weight=\"medium\">\n {t('authorizationContext.title', { app: data.client.name })}\n </TRText>\n </div>\n\n <div className=\"flex min-w-0 items-center gap-tinyrack-xs\">\n <GlobeIcon\n aria-hidden\n className=\"size-tinyrack-lg shrink-0 text-tinyrack-text-muted\"\n />\n <TRText color=\"muted\" truncate variant=\"caption\">\n {t('authorizationContext.redirect', {\n origin: data.redirect_origin,\n })}\n </TRText>\n </div>\n\n <div className=\"flex flex-col gap-tinyrack-xs\">\n <TRText color=\"muted\" variant=\"caption\" weight=\"medium\">\n {t('authorizationContext.permissions')}\n </TRText>\n {data.scopes.length > 0 ? (\n <ul className=\"flex flex-wrap gap-tinyrack-xs\">\n {data.scopes.map((scope) => (\n <li key={scope.name}>\n <TRBadge uiSize=\"md\" variant=\"neutral\">\n {t(`consent.scope.${scope.name}`, {\n defaultValue: scope.description,\n })}\n </TRBadge>\n </li>\n ))}\n </ul>\n ) : (\n <TRText color=\"muted\" variant=\"caption\">\n {t('authorizationContext.noScopes')}\n </TRText>\n )}\n </div>\n </TRCard.Content>\n </TRCard.Root>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"yQAcA,IAAM,EAAQ,EAAiB,QAAS,CAJtC,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,QAAS,CAAC,EACzD,CAAC,OAAQ,CAAE,EAAG,kDAAmD,IAAK,QAAS,CAAC,EAChF,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAS,CAAC,CAEH,CAAU,QCIlD,SAAgB,EAA2B,CACzC,SACA,YAAY,IACsB,CAKlC,OAJK,EAAwB,CAAM,GAI5B,EAAA,EAAA,IAAA,CAAC,EAAD,CAAwC,YAAmB,QAAS,CAAA,EAHlE,IAIX,CAEA,SAAS,EAA4B,CACnC,SACA,aAIC,CACD,GAAM,CAAE,KAAM,EAAe,EACvB,CAAE,QAAS,EACf,EAAoC,CAAM,CAC5C,EAEA,OACE,EAAA,EAAA,IAAA,CAAC,EAAO,KAAR,CACE,aAAY,EAAE,4BAA4B,EAC/B,YACX,cAAY,wBACZ,QAAQ,KACR,QAAQ,EAAA,EAAA,IAAA,CAAC,UAAD,CAAU,CAAA,EAClB,QAAQ,qBAER,EAAA,EAAA,KAAA,CAAC,EAAO,QAAR,CAAgB,UAAU,yCAA1B,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,6CAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAA,GACA,UAAU,8CACX,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,QAAQ,OAAO,OAAO,kBAC3B,EAAE,6BAA8B,CAAE,IAAK,EAAK,OAAO,IAAK,CAAC,CACpD,CAAA,CACL,KAEL,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,qDAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,cAAA,GACA,UAAU,oDACX,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,MAAM,QAAQ,SAAA,GAAS,QAAQ,mBACpC,EAAE,gCAAiC,CAClC,OAAQ,EAAK,eACf,CAAC,CACK,CAAA,CACL,KAEL,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,yCAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,MAAM,QAAQ,QAAQ,UAAU,OAAO,kBAC5C,EAAE,kCAAkC,CAC/B,CAAA,EACP,EAAK,OAAO,OAAS,GACpB,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,0CACX,EAAK,OAAO,IAAK,IAChB,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,OAAO,KAAK,QAAQ,mBAC1B,EAAE,iBAAiB,EAAM,OAAQ,CAChC,aAAc,EAAM,WACtB,CAAC,CACM,CAAA,CACP,EANK,EAAM,IAMX,CACL,CACC,CAAA,GAEJ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,MAAM,QAAQ,QAAQ,mBAC3B,EAAE,+BAA+B,CAC5B,CAAA,CAEP,GACS,GACL,CAAA,CAEjB"}
@@ -1,2 +1,2 @@
1
- import{G as e,J as t,Z as n,b as r,c as i,f as a,q as o,v as s,x as c}from"./createLucideIcon-BPpAIXR_.js";import{_t as l,bn as u,pt as d,un as f}from"./config-v3-oy_ef.js";import{X as p}from"./shell-header-bar-C9AB5lT-.js";var m=n(t(),1),h=m.createContext(void 0);function g(){let e=m.useContext(h);if(e===void 0)throw Error(s(13));return e}var _={imageLoadingStatus:()=>null},v=o(),y=m.forwardRef(function(e,t){let{className:n,render:r,style:a,...o}=e,[s,c]=m.useState(`idle`),l={imageLoadingStatus:s},u=m.useMemo(()=>({imageLoadingStatus:s,setImageLoadingStatus:c}),[s,c]),d=i(`span`,e,{state:l,ref:t,props:o,stateAttributesMapping:_});return(0,v.jsx)(h.Provider,{value:u,children:d})});function b(e,{referrerPolicy:t,crossOrigin:n,sizes:i,srcSet:o}){let[s,c]=m.useState(`idle`);return r(()=>{if(!e&&!o)return c(`error`),a;let r=!0,s=new window.Image,l=e=>()=>{r&&c(e)};return c(`loading`),s.onload=l(`loaded`),s.onerror=l(`error`),t&&(s.referrerPolicy=t),s.crossOrigin=n??null,i&&(s.sizes=i),o&&(s.srcset=o),e&&(s.src=e),s.complete&&c(s.naturalWidth>0?`loaded`:`error`),()=>{r=!1}},[e,o,i,n,t]),s}var x={..._,...l},S=m.forwardRef(function(e,t){let{className:n,render:a,onLoadingStatusChange:o,style:s,...l}=e,{setImageLoadingStatus:u}=g(),f=b(l.src,l),h=f===`loaded`,{mounted:_,transitionStatus:v,setMounted:y}=p(h),S=m.useRef(null),C=c(e=>{o?.(e),u(e)});r(()=>{f!==`idle`&&C(f)},[f,C]),r(()=>()=>u(`idle`),[u]),d({open:h,ref:S,onComplete(){h||y(!1)}});let w=i(`img`,e,{state:{imageLoadingStatus:f,transitionStatus:v},ref:[t,S],props:l,stateAttributesMapping:x,enabled:_});return _?w:null}),C=u(m.forwardRef(function(e,t){let{className:n,render:r,delay:a=0,style:o,...s}=e,{imageLoadingStatus:c}=g(),[l,u]=m.useState(a===0),d=f();return m.useEffect(()=>(a>0?d.start(a,()=>u(!0)):u(!0),d.clear),[d,a]),i(`span`,e,{state:{imageLoadingStatus:c},ref:t,props:s,stateAttributesMapping:_,enabled:c!==`loaded`&&(a===0||l)})}),`tr-avatar-fallback`),w=u(S,`tr-avatar-image`);function T({className:t,shape:n=`circle`,uiSize:r=`md`,...i}){return(0,v.jsx)(y,{...i,className:e(`tr-avatar`,t),"data-shape":n,"data-ui-size":r})}var E={Root:T,Image:w,Fallback:C};export{E as t};
2
- //# sourceMappingURL=avatar-CttWiIv3.js.map
1
+ import{G as e,J as t,Z as n,b as r,c as i,f as a,q as o,v as s,x as c}from"./createLucideIcon-BPpAIXR_.js";import{_t as l,bn as u,pt as d,un as f}from"./config-DTQCUlfZ.js";import{X as p}from"./shell-header-bar-CjG5qvPg.js";var m=n(t(),1),h=m.createContext(void 0);function g(){let e=m.useContext(h);if(e===void 0)throw Error(s(13));return e}var _={imageLoadingStatus:()=>null},v=o(),y=m.forwardRef(function(e,t){let{className:n,render:r,style:a,...o}=e,[s,c]=m.useState(`idle`),l={imageLoadingStatus:s},u=m.useMemo(()=>({imageLoadingStatus:s,setImageLoadingStatus:c}),[s,c]),d=i(`span`,e,{state:l,ref:t,props:o,stateAttributesMapping:_});return(0,v.jsx)(h.Provider,{value:u,children:d})});function b(e,{referrerPolicy:t,crossOrigin:n,sizes:i,srcSet:o}){let[s,c]=m.useState(`idle`);return r(()=>{if(!e&&!o)return c(`error`),a;let r=!0,s=new window.Image,l=e=>()=>{r&&c(e)};return c(`loading`),s.onload=l(`loaded`),s.onerror=l(`error`),t&&(s.referrerPolicy=t),s.crossOrigin=n??null,i&&(s.sizes=i),o&&(s.srcset=o),e&&(s.src=e),s.complete&&c(s.naturalWidth>0?`loaded`:`error`),()=>{r=!1}},[e,o,i,n,t]),s}var x={..._,...l},S=m.forwardRef(function(e,t){let{className:n,render:a,onLoadingStatusChange:o,style:s,...l}=e,{setImageLoadingStatus:u}=g(),f=b(l.src,l),h=f===`loaded`,{mounted:_,transitionStatus:v,setMounted:y}=p(h),S=m.useRef(null),C=c(e=>{o?.(e),u(e)});r(()=>{f!==`idle`&&C(f)},[f,C]),r(()=>()=>u(`idle`),[u]),d({open:h,ref:S,onComplete(){h||y(!1)}});let w=i(`img`,e,{state:{imageLoadingStatus:f,transitionStatus:v},ref:[t,S],props:l,stateAttributesMapping:x,enabled:_});return _?w:null}),C=u(m.forwardRef(function(e,t){let{className:n,render:r,delay:a=0,style:o,...s}=e,{imageLoadingStatus:c}=g(),[l,u]=m.useState(a===0),d=f();return m.useEffect(()=>(a>0?d.start(a,()=>u(!0)):u(!0),d.clear),[d,a]),i(`span`,e,{state:{imageLoadingStatus:c},ref:t,props:s,stateAttributesMapping:_,enabled:c!==`loaded`&&(a===0||l)})}),`tr-avatar-fallback`),w=u(S,`tr-avatar-image`);function T({className:t,shape:n=`circle`,uiSize:r=`md`,...i}){return(0,v.jsx)(y,{...i,className:e(`tr-avatar`,t),"data-shape":n,"data-ui-size":r})}var E={Root:T,Image:w,Fallback:C};export{E as t};
2
+ //# sourceMappingURL=avatar-BEQjf2x6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar-CttWiIv3.js","names":["_formatErrorMessage","Avatar.Fallback","Avatar.Image","Avatar.Root"],"sources":["../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/root/AvatarRootContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/root/stateAttributesMapping.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/root/AvatarRoot.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/image/useImageLoadingStatus.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/image/AvatarImage.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/fallback/AvatarFallback.mjs","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/avatar/avatar-fallback.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/avatar/avatar-image.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/avatar/avatar-root.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/avatar/index.js"],"sourcesContent":["'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const AvatarRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") AvatarRootContext.displayName = \"AvatarRootContext\";\nexport function useAvatarRootContext() {\n const context = React.useContext(AvatarRootContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: AvatarRootContext is missing. Avatar parts must be placed within <Avatar.Root>.' : _formatErrorMessage(13));\n }\n return context;\n}","export const avatarStateAttributesMapping = {\n imageLoadingStatus: () => null\n};","'use client';\n\nimport * as React from 'react';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { AvatarRootContext } from \"./AvatarRootContext.mjs\";\nimport { avatarStateAttributesMapping } from \"./stateAttributesMapping.mjs\";\n\n/**\n * Displays a user's profile picture, initials, or fallback icon.\n * Renders a `<span>` element.\n *\n * Documentation: [Base UI Avatar](https://base-ui.com/react/components/avatar)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const AvatarRoot = /*#__PURE__*/React.forwardRef(function AvatarRoot(componentProps, forwardedRef) {\n const {\n className,\n render,\n style,\n ...elementProps\n } = componentProps;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState('idle');\n const state = {\n imageLoadingStatus\n };\n const contextValue = React.useMemo(() => ({\n imageLoadingStatus,\n setImageLoadingStatus\n }), [imageLoadingStatus, setImageLoadingStatus]);\n const element = useRenderElement('span', componentProps, {\n state,\n ref: forwardedRef,\n props: elementProps,\n stateAttributesMapping: avatarStateAttributesMapping\n });\n return /*#__PURE__*/_jsx(AvatarRootContext.Provider, {\n value: contextValue,\n children: element\n });\n});\nif (process.env.NODE_ENV !== \"production\") AvatarRoot.displayName = \"AvatarRoot\";","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { NOOP } from \"../../internals/noop.mjs\";\nexport function useImageLoadingStatus(src, {\n referrerPolicy,\n crossOrigin,\n sizes,\n srcSet\n}) {\n const [loadingStatus, setLoadingStatus] = React.useState('idle');\n useIsoLayoutEffect(() => {\n if (!src && !srcSet) {\n setLoadingStatus('error');\n return NOOP;\n }\n let isMounted = true;\n const image = new window.Image();\n const updateStatus = status => () => {\n if (!isMounted) {\n return;\n }\n setLoadingStatus(status);\n };\n setLoadingStatus('loading');\n image.onload = updateStatus('loaded');\n image.onerror = updateStatus('error');\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n image.crossOrigin = crossOrigin ?? null;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcSet) {\n image.srcset = srcSet;\n }\n if (src) {\n image.src = src;\n }\n\n // Fast path for cached/decoded images\n if (image.complete) {\n setLoadingStatus(image.naturalWidth > 0 ? 'loaded' : 'error');\n }\n return () => {\n isMounted = false;\n };\n }, [src, srcSet, sizes, crossOrigin, referrerPolicy]);\n return loadingStatus;\n}","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useAvatarRootContext } from \"../root/AvatarRootContext.mjs\";\nimport { avatarStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\nimport { useImageLoadingStatus } from \"./useImageLoadingStatus.mjs\";\nconst stateAttributesMapping = {\n ...avatarStateAttributesMapping,\n ...transitionStatusMapping\n};\n\n/**\n * The image to be displayed in the avatar.\n * Renders an `<img>` element.\n *\n * Documentation: [Base UI Avatar](https://base-ui.com/react/components/avatar)\n */\nexport const AvatarImage = /*#__PURE__*/React.forwardRef(function AvatarImage(componentProps, forwardedRef) {\n const {\n className,\n render,\n onLoadingStatusChange: onLoadingStatusChangeProp,\n style,\n ...elementProps\n } = componentProps;\n const {\n setImageLoadingStatus\n } = useAvatarRootContext();\n const imageLoadingStatus = useImageLoadingStatus(elementProps.src, elementProps);\n const isVisible = imageLoadingStatus === 'loaded';\n const {\n mounted,\n transitionStatus,\n setMounted\n } = useTransitionStatus(isVisible);\n const imageRef = React.useRef(null);\n const handleLoadingStatusChange = useStableCallback(status => {\n onLoadingStatusChangeProp?.(status);\n setImageLoadingStatus(status);\n });\n useIsoLayoutEffect(() => {\n if (imageLoadingStatus !== 'idle') {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n useIsoLayoutEffect(() => {\n return () => setImageLoadingStatus('idle');\n }, [setImageLoadingStatus]);\n useOpenChangeComplete({\n open: isVisible,\n ref: imageRef,\n onComplete() {\n if (!isVisible) {\n setMounted(false);\n }\n }\n });\n const state = {\n imageLoadingStatus,\n transitionStatus\n };\n const element = useRenderElement('img', componentProps, {\n state,\n ref: [forwardedRef, imageRef],\n props: elementProps,\n stateAttributesMapping,\n enabled: mounted\n });\n if (!mounted) {\n return null;\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") AvatarImage.displayName = \"AvatarImage\";","'use client';\n\nimport * as React from 'react';\nimport { useTimeout } from '@base-ui/utils/useTimeout';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useAvatarRootContext } from \"../root/AvatarRootContext.mjs\";\nimport { avatarStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\n\n/**\n * Rendered when the image fails to load or when no image is provided.\n * Renders a `<span>` element.\n *\n * Documentation: [Base UI Avatar](https://base-ui.com/react/components/avatar)\n */\nexport const AvatarFallback = /*#__PURE__*/React.forwardRef(function AvatarFallback(componentProps, forwardedRef) {\n const {\n className,\n render,\n delay = 0,\n style,\n ...elementProps\n } = componentProps;\n const {\n imageLoadingStatus\n } = useAvatarRootContext();\n const [delayPassed, setDelayPassed] = React.useState(delay === 0);\n const timeout = useTimeout();\n React.useEffect(() => {\n if (delay > 0) {\n timeout.start(delay, () => setDelayPassed(true));\n } else {\n // Once the fallback is shown without a delay, keep it visible. Otherwise a later\n // change from no delay to a number would re-hide an already-visible fallback.\n setDelayPassed(true);\n }\n return timeout.clear;\n }, [timeout, delay]);\n const state = {\n imageLoadingStatus\n };\n const element = useRenderElement('span', componentProps, {\n state,\n ref: forwardedRef,\n props: elementProps,\n stateAttributesMapping: avatarStateAttributesMapping,\n enabled: imageLoadingStatus !== 'loaded' && (delay === 0 || delayPassed)\n });\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") AvatarFallback.displayName = \"AvatarFallback\";","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Avatar } from \"@base-ui/react/avatar\";\n//#region src/components/avatar/avatar-fallback.tsx\nconst TRAvatarFallback = createComponentPart(Avatar.Fallback, \"tr-avatar-fallback\");\n//#endregion\nexport { TRAvatarFallback };\n\n//# sourceMappingURL=avatar-fallback.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Avatar } from \"@base-ui/react/avatar\";\n//#region src/components/avatar/avatar-image.tsx\nconst TRAvatarImage = createComponentPart(Avatar.Image, \"tr-avatar-image\");\n//#endregion\nexport { TRAvatarImage };\n\n//# sourceMappingURL=avatar-image.js.map","\"use client\";\nimport { mergeComponentClassName } from \"../../internal/component-class-name.js\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Avatar } from \"@base-ui/react/avatar\";\n//#region src/components/avatar/avatar-root.tsx\nfunction TRAvatarRoot({ className, shape = \"circle\", uiSize = \"md\", ...props }) {\n\treturn /* @__PURE__ */ jsx(Avatar.Root, {\n\t\t...props,\n\t\tclassName: mergeComponentClassName(\"tr-avatar\", className),\n\t\t\"data-shape\": shape,\n\t\t\"data-ui-size\": uiSize\n\t});\n}\n//#endregion\nexport { TRAvatarRoot };\n\n//# sourceMappingURL=avatar-root.js.map","import { TRAvatarFallback } from \"./avatar-fallback.js\";\nimport { TRAvatarImage } from \"./avatar-image.js\";\nimport { TRAvatarRoot } from \"./avatar-root.js\";\n//#region src/components/avatar/index.tsx\nconst TRAvatar = {\n\tRoot: TRAvatarRoot,\n\tImage: TRAvatarImage,\n\tFallback: TRAvatarFallback\n};\n//#endregion\nexport { TRAvatar, TRAvatarFallback, TRAvatarImage, TRAvatarRoot };\n\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9],"mappings":"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"}
1
+ {"version":3,"file":"avatar-BEQjf2x6.js","names":["_formatErrorMessage","Avatar.Fallback","Avatar.Image","Avatar.Root"],"sources":["../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/root/AvatarRootContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/root/stateAttributesMapping.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/root/AvatarRoot.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/image/useImageLoadingStatus.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/image/AvatarImage.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/avatar/fallback/AvatarFallback.mjs","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/avatar/avatar-fallback.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/avatar/avatar-image.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/avatar/avatar-root.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/avatar/index.js"],"sourcesContent":["'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const AvatarRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") AvatarRootContext.displayName = \"AvatarRootContext\";\nexport function useAvatarRootContext() {\n const context = React.useContext(AvatarRootContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: AvatarRootContext is missing. Avatar parts must be placed within <Avatar.Root>.' : _formatErrorMessage(13));\n }\n return context;\n}","export const avatarStateAttributesMapping = {\n imageLoadingStatus: () => null\n};","'use client';\n\nimport * as React from 'react';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { AvatarRootContext } from \"./AvatarRootContext.mjs\";\nimport { avatarStateAttributesMapping } from \"./stateAttributesMapping.mjs\";\n\n/**\n * Displays a user's profile picture, initials, or fallback icon.\n * Renders a `<span>` element.\n *\n * Documentation: [Base UI Avatar](https://base-ui.com/react/components/avatar)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const AvatarRoot = /*#__PURE__*/React.forwardRef(function AvatarRoot(componentProps, forwardedRef) {\n const {\n className,\n render,\n style,\n ...elementProps\n } = componentProps;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState('idle');\n const state = {\n imageLoadingStatus\n };\n const contextValue = React.useMemo(() => ({\n imageLoadingStatus,\n setImageLoadingStatus\n }), [imageLoadingStatus, setImageLoadingStatus]);\n const element = useRenderElement('span', componentProps, {\n state,\n ref: forwardedRef,\n props: elementProps,\n stateAttributesMapping: avatarStateAttributesMapping\n });\n return /*#__PURE__*/_jsx(AvatarRootContext.Provider, {\n value: contextValue,\n children: element\n });\n});\nif (process.env.NODE_ENV !== \"production\") AvatarRoot.displayName = \"AvatarRoot\";","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { NOOP } from \"../../internals/noop.mjs\";\nexport function useImageLoadingStatus(src, {\n referrerPolicy,\n crossOrigin,\n sizes,\n srcSet\n}) {\n const [loadingStatus, setLoadingStatus] = React.useState('idle');\n useIsoLayoutEffect(() => {\n if (!src && !srcSet) {\n setLoadingStatus('error');\n return NOOP;\n }\n let isMounted = true;\n const image = new window.Image();\n const updateStatus = status => () => {\n if (!isMounted) {\n return;\n }\n setLoadingStatus(status);\n };\n setLoadingStatus('loading');\n image.onload = updateStatus('loaded');\n image.onerror = updateStatus('error');\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n image.crossOrigin = crossOrigin ?? null;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcSet) {\n image.srcset = srcSet;\n }\n if (src) {\n image.src = src;\n }\n\n // Fast path for cached/decoded images\n if (image.complete) {\n setLoadingStatus(image.naturalWidth > 0 ? 'loaded' : 'error');\n }\n return () => {\n isMounted = false;\n };\n }, [src, srcSet, sizes, crossOrigin, referrerPolicy]);\n return loadingStatus;\n}","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useAvatarRootContext } from \"../root/AvatarRootContext.mjs\";\nimport { avatarStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\nimport { useImageLoadingStatus } from \"./useImageLoadingStatus.mjs\";\nconst stateAttributesMapping = {\n ...avatarStateAttributesMapping,\n ...transitionStatusMapping\n};\n\n/**\n * The image to be displayed in the avatar.\n * Renders an `<img>` element.\n *\n * Documentation: [Base UI Avatar](https://base-ui.com/react/components/avatar)\n */\nexport const AvatarImage = /*#__PURE__*/React.forwardRef(function AvatarImage(componentProps, forwardedRef) {\n const {\n className,\n render,\n onLoadingStatusChange: onLoadingStatusChangeProp,\n style,\n ...elementProps\n } = componentProps;\n const {\n setImageLoadingStatus\n } = useAvatarRootContext();\n const imageLoadingStatus = useImageLoadingStatus(elementProps.src, elementProps);\n const isVisible = imageLoadingStatus === 'loaded';\n const {\n mounted,\n transitionStatus,\n setMounted\n } = useTransitionStatus(isVisible);\n const imageRef = React.useRef(null);\n const handleLoadingStatusChange = useStableCallback(status => {\n onLoadingStatusChangeProp?.(status);\n setImageLoadingStatus(status);\n });\n useIsoLayoutEffect(() => {\n if (imageLoadingStatus !== 'idle') {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n useIsoLayoutEffect(() => {\n return () => setImageLoadingStatus('idle');\n }, [setImageLoadingStatus]);\n useOpenChangeComplete({\n open: isVisible,\n ref: imageRef,\n onComplete() {\n if (!isVisible) {\n setMounted(false);\n }\n }\n });\n const state = {\n imageLoadingStatus,\n transitionStatus\n };\n const element = useRenderElement('img', componentProps, {\n state,\n ref: [forwardedRef, imageRef],\n props: elementProps,\n stateAttributesMapping,\n enabled: mounted\n });\n if (!mounted) {\n return null;\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") AvatarImage.displayName = \"AvatarImage\";","'use client';\n\nimport * as React from 'react';\nimport { useTimeout } from '@base-ui/utils/useTimeout';\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useAvatarRootContext } from \"../root/AvatarRootContext.mjs\";\nimport { avatarStateAttributesMapping } from \"../root/stateAttributesMapping.mjs\";\n\n/**\n * Rendered when the image fails to load or when no image is provided.\n * Renders a `<span>` element.\n *\n * Documentation: [Base UI Avatar](https://base-ui.com/react/components/avatar)\n */\nexport const AvatarFallback = /*#__PURE__*/React.forwardRef(function AvatarFallback(componentProps, forwardedRef) {\n const {\n className,\n render,\n delay = 0,\n style,\n ...elementProps\n } = componentProps;\n const {\n imageLoadingStatus\n } = useAvatarRootContext();\n const [delayPassed, setDelayPassed] = React.useState(delay === 0);\n const timeout = useTimeout();\n React.useEffect(() => {\n if (delay > 0) {\n timeout.start(delay, () => setDelayPassed(true));\n } else {\n // Once the fallback is shown without a delay, keep it visible. Otherwise a later\n // change from no delay to a number would re-hide an already-visible fallback.\n setDelayPassed(true);\n }\n return timeout.clear;\n }, [timeout, delay]);\n const state = {\n imageLoadingStatus\n };\n const element = useRenderElement('span', componentProps, {\n state,\n ref: forwardedRef,\n props: elementProps,\n stateAttributesMapping: avatarStateAttributesMapping,\n enabled: imageLoadingStatus !== 'loaded' && (delay === 0 || delayPassed)\n });\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") AvatarFallback.displayName = \"AvatarFallback\";","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Avatar } from \"@base-ui/react/avatar\";\n//#region src/components/avatar/avatar-fallback.tsx\nconst TRAvatarFallback = createComponentPart(Avatar.Fallback, \"tr-avatar-fallback\");\n//#endregion\nexport { TRAvatarFallback };\n\n//# sourceMappingURL=avatar-fallback.js.map","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Avatar } from \"@base-ui/react/avatar\";\n//#region src/components/avatar/avatar-image.tsx\nconst TRAvatarImage = createComponentPart(Avatar.Image, \"tr-avatar-image\");\n//#endregion\nexport { TRAvatarImage };\n\n//# sourceMappingURL=avatar-image.js.map","\"use client\";\nimport { mergeComponentClassName } from \"../../internal/component-class-name.js\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Avatar } from \"@base-ui/react/avatar\";\n//#region src/components/avatar/avatar-root.tsx\nfunction TRAvatarRoot({ className, shape = \"circle\", uiSize = \"md\", ...props }) {\n\treturn /* @__PURE__ */ jsx(Avatar.Root, {\n\t\t...props,\n\t\tclassName: mergeComponentClassName(\"tr-avatar\", className),\n\t\t\"data-shape\": shape,\n\t\t\"data-ui-size\": uiSize\n\t});\n}\n//#endregion\nexport { TRAvatarRoot };\n\n//# sourceMappingURL=avatar-root.js.map","import { TRAvatarFallback } from \"./avatar-fallback.js\";\nimport { TRAvatarImage } from \"./avatar-image.js\";\nimport { TRAvatarRoot } from \"./avatar-root.js\";\n//#region src/components/avatar/index.tsx\nconst TRAvatar = {\n\tRoot: TRAvatarRoot,\n\tImage: TRAvatarImage,\n\tFallback: TRAvatarFallback\n};\n//#endregion\nexport { TRAvatar, TRAvatarFallback, TRAvatarImage, TRAvatarRoot };\n\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{G as e,J as t,M as n,S as r,Z as i,b as a,c as o,d as s,f as c,g as l,h as u,m as d,q as f,v as p,y as m}from"./createLucideIcon-BPpAIXR_.js";import{P as ee,Y as te,_t as ne,bn as h,bt as re,pt as g,xt as ie}from"./config-v3-oy_ef.js";import{O as ae,S as oe,T as se,X as ce,b as le,g as ue,h as de,w as _,y as fe}from"./shell-header-bar-C9AB5lT-.js";import{n as pe}from"./FieldItemContext-BeNfhOsU.js";import{t as me}from"./useAriaLabelledBy-CiOCg6X5.js";var v=i(t(),1);function he(e){if(!e)return null;for(let t of e.elements){let e=t.tagName;if(e===`BUTTON`||e===`INPUT`){let e=t;if(e.type===`submit`)return e}}return null}function y(e){return{checked(t){return e.indeterminate?{}:t?{"data-checked":``}:{"data-unchecked":``}},..._}}var b=v.createContext(void 0);function ge(){return v.useContext(b)}var x=v.createContext(void 0);function S(){let e=v.useContext(x);if(e===void 0)throw Error(p(14));return e}var C=f(),_e=`data-parent`,w=v.forwardRef(function(e,t){let{checked:i,className:f,defaultChecked:p=!1,"aria-labelledby":ne,disabled:h=!1,form:g,id:ce,indeterminate:_=!1,inputRef:b,name:S,onCheckedChange:w,parent:T=!1,readOnly:E=!1,render:ve,required:D=!1,uncheckedValue:O,value:k,nativeButton:A=!1,style:ye,...be}=e,{clearErrors:xe}=ue(),{disabled:Se,name:Ce,setDirty:we,setFilled:j,setFocused:M,setTouched:Te,state:N,validationMode:Ee,validityData:De,validation:Oe}=oe(),ke=pe(),{labelId:Ae,controlId:je,registerControlId:P,getDescriptionProps:F}=fe(),I=ge(),L=I?.allValues===void 0?void 0:I.parent,R=L!==void 0,z=Se||ke.disabled||I?.disabled||h,B=Ce??S,V=k??B,Me=ae(),Ne=ae(),H=ce||je;R&&(T?H=Ne:V===void 0?H||=Ne:H=`${L.id}-${V}`);let U={};R&&(T?U=L.getParentProps():V!==void 0&&(U=L.getChildProps(V)));let{checked:Pe=i,indeterminate:Fe=_,onCheckedChange:Ie,...Le}=U,W=I?.value,G=v.useRef(null),K=r(()=>Symbol()),q=v.useRef(!1),{getButtonProps:Re,buttonRef:ze}=u({disabled:z,native:A}),J=I?.validation??Oe,[Y,Be]=se({controlled:V!==void 0&&W!==void 0&&!T?W.includes(V):Pe,default:p,name:`Checkbox`,state:`checked`}),X=R?!!Pe:Y,Z=R&&Fe||_;a(()=>{P!==c&&(q.current=!0,P(K.current,H))},[H,P,K]),v.useEffect(()=>{let e=K.current;return()=>{!q.current||P===c||(q.current=!1,P(e,void 0))}},[P,K]),le(G,Me,Y,void 0,!I&&!z,S);let Q=v.useRef(null),Ve=J.registerInput,He=I?V:void 0,Ue=v.useCallback(e=>Ve(e,{controlRef:G,value:He}),[Ve,He]),We=d(b,Q,T?void 0:Ue),Ge=me(ne,Ae,Q,!A,H??void 0);a(()=>{Q.current&&(Q.current.indeterminate=Z,Y&&j(!0))},[Y,Z,j]),de(Y,()=>{I||(xe(B),j(Y),we(Y!==De.initialValue),J.change(Y))});let Ke=m({checked:Y,disabled:z,form:g,name:T?void 0:B,id:A?void 0:H??void 0,required:D,ref:We,style:B?ie:re,tabIndex:-1,type:`checkbox`,"aria-hidden":!0,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(E){e.preventDefault();return}let t=e.currentTarget.checked,n=ee(te,e.nativeEvent);if(w?.(t,n),!n.isCanceled&&(Ie?.(t,n),!n.isCanceled&&(Be(t),V!==void 0&&I!==void 0&&!T&&!R))){let e=t?[...I.value,V]:I.value.filter(e=>e!==V);I.setValue(e,n)}},onClick(e){e.stopPropagation()},onFocus(){G.current?.focus()}},k===void 0?s:{value:(I?Y&&k:k)||``},F,e=>J.getValidationProps(z,e));v.useEffect(()=>{if(!L||V===void 0)return;let e=L.disabledStatesRef.current;return e.set(V,z),()=>{e.delete(V)}},[L,z,V]);let $=v.useMemo(()=>({...N,checked:X,disabled:z,readOnly:E,required:D,indeterminate:Z}),[N,X,z,E,D,Z]),qe=y($),Je=o(`span`,e,{state:$,ref:[ze,G,t],props:[{id:A?H??void 0:Me,role:`checkbox`,"aria-checked":Z?`mixed`:X,"aria-readonly":E||void 0,"aria-required":D||void 0,"aria-labelledby":Ge,[_e]:T?``:void 0,onFocus(){z||M(!0)},onBlur(){let e=Q.current;e&&(Te(!0),M(!1),Ee===`onBlur`&&J.commit(I?W:e.checked))},onKeyDown(e){if(e.key!==`Enter`||(e.preventBaseUIHandler(),e.defaultPrevented))return;let t=Q.current?.form??null,r=e.currentTarget,i=e.nativeEvent,a=e.preventDefault,o=i.preventDefault,s=!1;e.preventDefault=()=>{s=!0,a.call(e)},i.preventDefault=()=>{s=!0,o.call(i)},o.call(i),n(r).queueMicrotask(()=>{e.preventDefault=a,i.preventDefault=o,s||he(t)?.click()})},onClick(e){if(E||z)return;e.preventDefault();let t=Q.current;t&&l(t,e)}},be,Le,Re,F,e=>J.getValidationProps(z,e)],stateAttributesMapping:qe});return(0,C.jsxs)(x.Provider,{value:$,children:[Je,!Y&&!I&&B&&!T&&O!==void 0&&(0,C.jsx)(`input`,{type:`hidden`,form:g,name:B,value:O,disabled:z}),(0,C.jsx)(`input`,{...Ke,suppressHydrationWarning:!0})]})}),T=h(v.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...s}=e,c=S(),l=c.checked||c.indeterminate,{mounted:u,transitionStatus:d,setMounted:f}=ce(l),p=v.useRef(null),m={...c,transitionStatus:d};g({open:l,ref:p,onComplete(){l||f(!1)}});let ee={...y(c),...ne},te=a||u,h=o(`span`,e,{ref:[t,p],state:m,stateAttributesMapping:ee,props:s});return te?h:null}),`tr-checkbox-indicator`);function E({checked:t,className:n,ref:r,uiSize:i=`md`,...a}){let o=(0,v.useRef)(null),[s,c]=(0,v.useState)(0);return(0,v.useEffect)(()=>{if(t!==void 0)return;let e=e=>{let t=e.target;if(!(t instanceof HTMLFormElement))return;let n=o.current?.nextElementSibling??null;for(;n instanceof HTMLInputElement;){if(n.type===`checkbox`&&n.form===t){c(e=>e+1);return}n=n.nextElementSibling}};return document.addEventListener(`reset`,e,!0),()=>document.removeEventListener(`reset`,e,!0)},[t]),(0,v.createElement)(w,{...a,checked:t,className:e(`tr-checkbox`,n),"data-ui-size":i,key:s,ref:e=>{o.current=e,typeof r==`function`?r(e):r&&(r.current=e)}})}var ve={Root:E,Indicator:T};export{ve as t};
2
- //# sourceMappingURL=checkbox-CJrRV8S1.js.map
1
+ import{G as e,J as t,M as n,S as r,Z as i,b as a,c as o,d as s,f as c,g as l,h as u,m as d,q as f,v as p,y as m}from"./createLucideIcon-BPpAIXR_.js";import{P as ee,Y as te,_t as ne,bn as h,bt as re,pt as g,xt as ie}from"./config-DTQCUlfZ.js";import{O as ae,S as oe,T as se,X as ce,b as le,g as ue,h as de,w as _,y as fe}from"./shell-header-bar-CjG5qvPg.js";import{n as pe}from"./FieldItemContext-BeNfhOsU.js";import{t as me}from"./useAriaLabelledBy-ByuMi3Ry.js";var v=i(t(),1);function he(e){if(!e)return null;for(let t of e.elements){let e=t.tagName;if(e===`BUTTON`||e===`INPUT`){let e=t;if(e.type===`submit`)return e}}return null}function y(e){return{checked(t){return e.indeterminate?{}:t?{"data-checked":``}:{"data-unchecked":``}},..._}}var b=v.createContext(void 0);function ge(){return v.useContext(b)}var x=v.createContext(void 0);function S(){let e=v.useContext(x);if(e===void 0)throw Error(p(14));return e}var C=f(),_e=`data-parent`,w=v.forwardRef(function(e,t){let{checked:i,className:f,defaultChecked:p=!1,"aria-labelledby":ne,disabled:h=!1,form:g,id:ce,indeterminate:_=!1,inputRef:b,name:S,onCheckedChange:w,parent:T=!1,readOnly:E=!1,render:ve,required:D=!1,uncheckedValue:O,value:k,nativeButton:A=!1,style:ye,...be}=e,{clearErrors:xe}=ue(),{disabled:Se,name:Ce,setDirty:we,setFilled:j,setFocused:M,setTouched:Te,state:N,validationMode:Ee,validityData:De,validation:Oe}=oe(),ke=pe(),{labelId:Ae,controlId:je,registerControlId:P,getDescriptionProps:F}=fe(),I=ge(),L=I?.allValues===void 0?void 0:I.parent,R=L!==void 0,z=Se||ke.disabled||I?.disabled||h,B=Ce??S,V=k??B,Me=ae(),Ne=ae(),H=ce||je;R&&(T?H=Ne:V===void 0?H||=Ne:H=`${L.id}-${V}`);let U={};R&&(T?U=L.getParentProps():V!==void 0&&(U=L.getChildProps(V)));let{checked:Pe=i,indeterminate:Fe=_,onCheckedChange:Ie,...Le}=U,W=I?.value,G=v.useRef(null),K=r(()=>Symbol()),q=v.useRef(!1),{getButtonProps:Re,buttonRef:ze}=u({disabled:z,native:A}),J=I?.validation??Oe,[Y,Be]=se({controlled:V!==void 0&&W!==void 0&&!T?W.includes(V):Pe,default:p,name:`Checkbox`,state:`checked`}),X=R?!!Pe:Y,Z=R&&Fe||_;a(()=>{P!==c&&(q.current=!0,P(K.current,H))},[H,P,K]),v.useEffect(()=>{let e=K.current;return()=>{!q.current||P===c||(q.current=!1,P(e,void 0))}},[P,K]),le(G,Me,Y,void 0,!I&&!z,S);let Q=v.useRef(null),Ve=J.registerInput,He=I?V:void 0,Ue=v.useCallback(e=>Ve(e,{controlRef:G,value:He}),[Ve,He]),We=d(b,Q,T?void 0:Ue),Ge=me(ne,Ae,Q,!A,H??void 0);a(()=>{Q.current&&(Q.current.indeterminate=Z,Y&&j(!0))},[Y,Z,j]),de(Y,()=>{I||(xe(B),j(Y),we(Y!==De.initialValue),J.change(Y))});let Ke=m({checked:Y,disabled:z,form:g,name:T?void 0:B,id:A?void 0:H??void 0,required:D,ref:We,style:B?ie:re,tabIndex:-1,type:`checkbox`,"aria-hidden":!0,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(E){e.preventDefault();return}let t=e.currentTarget.checked,n=ee(te,e.nativeEvent);if(w?.(t,n),!n.isCanceled&&(Ie?.(t,n),!n.isCanceled&&(Be(t),V!==void 0&&I!==void 0&&!T&&!R))){let e=t?[...I.value,V]:I.value.filter(e=>e!==V);I.setValue(e,n)}},onClick(e){e.stopPropagation()},onFocus(){G.current?.focus()}},k===void 0?s:{value:(I?Y&&k:k)||``},F,e=>J.getValidationProps(z,e));v.useEffect(()=>{if(!L||V===void 0)return;let e=L.disabledStatesRef.current;return e.set(V,z),()=>{e.delete(V)}},[L,z,V]);let $=v.useMemo(()=>({...N,checked:X,disabled:z,readOnly:E,required:D,indeterminate:Z}),[N,X,z,E,D,Z]),qe=y($),Je=o(`span`,e,{state:$,ref:[ze,G,t],props:[{id:A?H??void 0:Me,role:`checkbox`,"aria-checked":Z?`mixed`:X,"aria-readonly":E||void 0,"aria-required":D||void 0,"aria-labelledby":Ge,[_e]:T?``:void 0,onFocus(){z||M(!0)},onBlur(){let e=Q.current;e&&(Te(!0),M(!1),Ee===`onBlur`&&J.commit(I?W:e.checked))},onKeyDown(e){if(e.key!==`Enter`||(e.preventBaseUIHandler(),e.defaultPrevented))return;let t=Q.current?.form??null,r=e.currentTarget,i=e.nativeEvent,a=e.preventDefault,o=i.preventDefault,s=!1;e.preventDefault=()=>{s=!0,a.call(e)},i.preventDefault=()=>{s=!0,o.call(i)},o.call(i),n(r).queueMicrotask(()=>{e.preventDefault=a,i.preventDefault=o,s||he(t)?.click()})},onClick(e){if(E||z)return;e.preventDefault();let t=Q.current;t&&l(t,e)}},be,Le,Re,F,e=>J.getValidationProps(z,e)],stateAttributesMapping:qe});return(0,C.jsxs)(x.Provider,{value:$,children:[Je,!Y&&!I&&B&&!T&&O!==void 0&&(0,C.jsx)(`input`,{type:`hidden`,form:g,name:B,value:O,disabled:z}),(0,C.jsx)(`input`,{...Ke,suppressHydrationWarning:!0})]})}),T=h(v.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...s}=e,c=S(),l=c.checked||c.indeterminate,{mounted:u,transitionStatus:d,setMounted:f}=ce(l),p=v.useRef(null),m={...c,transitionStatus:d};g({open:l,ref:p,onComplete(){l||f(!1)}});let ee={...y(c),...ne},te=a||u,h=o(`span`,e,{ref:[t,p],state:m,stateAttributesMapping:ee,props:s});return te?h:null}),`tr-checkbox-indicator`);function E({checked:t,className:n,ref:r,uiSize:i=`md`,...a}){let o=(0,v.useRef)(null),[s,c]=(0,v.useState)(0);return(0,v.useEffect)(()=>{if(t!==void 0)return;let e=e=>{let t=e.target;if(!(t instanceof HTMLFormElement))return;let n=o.current?.nextElementSibling??null;for(;n instanceof HTMLInputElement;){if(n.type===`checkbox`&&n.form===t){c(e=>e+1);return}n=n.nextElementSibling}};return document.addEventListener(`reset`,e,!0),()=>document.removeEventListener(`reset`,e,!0)},[t]),(0,v.createElement)(w,{...a,checked:t,className:e(`tr-checkbox`,n),"data-ui-size":i,key:s,ref:e=>{o.current=e,typeof r==`function`?r(e):r&&(r.current=e)}})}var ve={Root:E,Indicator:T};export{ve as t};
2
+ //# sourceMappingURL=checkbox-gdHnSFQ-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-CJrRV8S1.js","names":["_formatErrorMessage","REASONS.none","Checkbox.Indicator","Checkbox.Root"],"sources":["../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/getDefaultFormSubmitter.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox/utils/getCheckboxStateAttributesMapping.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox-group/CheckboxGroupContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox/root/CheckboxRootContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox/root/CheckboxRoot.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox/indicator/CheckboxIndicator.mjs","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/checkbox/checkbox-indicator.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/checkbox/checkbox-root.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/checkbox/index.js"],"sourcesContent":["/**\n * Returns the default button a browser uses for implicit form submission.\n *\n * This is useful for custom form controls that need to mirror native Enter key behavior.\n * Clicking the returned submitter preserves browser semantics such as the submitter's click\n * event, `SubmitEvent.submitter`, and submitter-specific attributes.\n *\n * The function follows the controls exposed by `form.elements`, which includes controls associated\n * through the `form` attribute. Disabled submitters can be returned because the default button is\n * determined before disabled state is considered; clicking a disabled submitter is a no-op.\n */\nexport function getDefaultFormSubmitter(form) {\n if (!form) {\n return null;\n }\n for (const candidate of form.elements) {\n const tagName = candidate.tagName;\n if (tagName === 'BUTTON' || tagName === 'INPUT') {\n const button = candidate;\n\n // Intentionally excludes input[type=\"image\"]: Chromium omits it from form.elements,\n // so supporting it would require separate traversal for an exotic submitter type.\n if (button.type === 'submit') {\n return button;\n }\n }\n }\n return null;\n}","import { fieldValidityMapping } from \"../../internals/field-constants/constants.mjs\";\nexport function getCheckboxStateAttributesMapping(state) {\n return {\n checked(value) {\n if (state.indeterminate) {\n // `data-indeterminate` is already handled by the `indeterminate` prop.\n return {};\n }\n if (value) {\n return {\n 'data-checked': ''\n };\n }\n return {\n 'data-unchecked': ''\n };\n },\n ...fieldValidityMapping\n };\n}","'use client';\n\nimport * as React from 'react';\nexport const CheckboxGroupContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") CheckboxGroupContext.displayName = \"CheckboxGroupContext\";\nexport function useCheckboxGroupContext() {\n return React.useContext(CheckboxGroupContext);\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const CheckboxRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") CheckboxRootContext.displayName = \"CheckboxRootContext\";\nexport function useCheckboxRootContext() {\n const context = React.useContext(CheckboxRootContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: CheckboxRootContext is missing. Checkbox parts must be placed within <Checkbox.Root>.' : _formatErrorMessage(14));\n }\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { useControlled } from '@base-ui/utils/useControlled';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { useRefWithInit } from '@base-ui/utils/useRefWithInit';\nimport { visuallyHidden, visuallyHiddenInput } from '@base-ui/utils/visuallyHidden';\nimport { ownerWindow } from '@base-ui/utils/owner';\nimport { getDefaultFormSubmitter } from '@base-ui/utils/getDefaultFormSubmitter';\nimport { NOOP } from \"../../internals/noop.mjs\";\nimport { getCheckboxStateAttributesMapping } from \"../utils/getCheckboxStateAttributesMapping.mjs\";\nimport { dispatchClickWithModifiers } from \"../../utils/dispatchClickWithModifiers.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { mergeProps } from \"../../merge-props/index.mjs\";\nimport { useButton } from \"../../internals/use-button/useButton.mjs\";\nimport { useFieldRootContext } from \"../../internals/field-root-context/FieldRootContext.mjs\";\nimport { useRegisterFieldControl } from \"../../internals/field-register-control/useRegisterFieldControl.mjs\";\nimport { useFieldItemContext } from \"../../field/item/FieldItemContext.mjs\";\nimport { useFormContext } from \"../../internals/form-context/FormContext.mjs\";\nimport { useLabelableContext } from \"../../internals/labelable-provider/LabelableContext.mjs\";\nimport { useAriaLabelledBy } from \"../../internals/labelable-provider/useAriaLabelledBy.mjs\";\nimport { useCheckboxGroupContext } from \"../../checkbox-group/CheckboxGroupContext.mjs\";\nimport { CheckboxRootContext } from \"./CheckboxRootContext.mjs\";\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\nimport { useValueChanged } from \"../../internals/useValueChanged.mjs\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const PARENT_CHECKBOX = 'data-parent';\n\n/**\n * Represents the checkbox itself.\n * Renders a `<span>` element and a hidden `<input>` beside.\n *\n * Documentation: [Base UI Checkbox](https://base-ui.com/react/components/checkbox)\n */\nexport const CheckboxRoot = /*#__PURE__*/React.forwardRef(function CheckboxRoot(componentProps, forwardedRef) {\n const {\n checked: checkedProp,\n className,\n defaultChecked = false,\n 'aria-labelledby': ariaLabelledByProp,\n disabled: disabledProp = false,\n form,\n id: idProp,\n indeterminate = false,\n inputRef: inputRefProp,\n name: nameProp,\n onCheckedChange,\n parent = false,\n readOnly = false,\n render,\n required = false,\n uncheckedValue,\n value: valueProp,\n nativeButton = false,\n style,\n ...elementProps\n } = componentProps;\n const {\n clearErrors\n } = useFormContext();\n const {\n disabled: rootDisabled,\n name: fieldName,\n setDirty,\n setFilled,\n setFocused,\n setTouched,\n state: fieldState,\n validationMode,\n validityData,\n validation: localValidation\n } = useFieldRootContext();\n const fieldItemContext = useFieldItemContext();\n const {\n labelId,\n controlId,\n registerControlId,\n getDescriptionProps\n } = useLabelableContext();\n const groupContext = useCheckboxGroupContext();\n const parentContext = groupContext?.allValues === undefined ? undefined : groupContext.parent;\n const isGroupedWithParent = parentContext !== undefined;\n const disabled = rootDisabled || fieldItemContext.disabled || groupContext?.disabled || disabledProp;\n const name = fieldName ?? nameProp;\n const value = valueProp ?? name;\n const id = useBaseUiId();\n const generatedInputId = useBaseUiId();\n let inputId = idProp || controlId;\n if (isGroupedWithParent) {\n if (parent) {\n inputId = generatedInputId;\n } else if (value !== undefined) {\n inputId = `${parentContext.id}-${value}`;\n } else {\n inputId ||= generatedInputId;\n }\n }\n let groupProps = {};\n if (isGroupedWithParent) {\n if (parent) {\n groupProps = parentContext.getParentProps();\n } else if (value !== undefined) {\n groupProps = parentContext.getChildProps(value);\n }\n }\n const {\n checked: groupChecked = checkedProp,\n indeterminate: groupIndeterminate = indeterminate,\n onCheckedChange: groupOnChange,\n ...otherGroupProps\n } = groupProps;\n const groupValue = groupContext?.value;\n const controlRef = React.useRef(null);\n const controlSourceRef = useRefWithInit(() => Symbol());\n const hasRegisteredRef = React.useRef(false);\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton\n });\n const validation = groupContext?.validation ?? localValidation;\n const [checked, setCheckedState] = useControlled({\n controlled: value !== undefined && groupValue !== undefined && !parent ? groupValue.includes(value) : groupChecked,\n default: defaultChecked,\n name: 'Checkbox',\n state: 'checked'\n });\n const computedChecked = isGroupedWithParent ? Boolean(groupChecked) : checked;\n const computedIndeterminate = isGroupedWithParent ? groupIndeterminate || indeterminate : indeterminate;\n\n // can't use useLabelableId because of optional groupContext and/or parent\n useIsoLayoutEffect(() => {\n if (registerControlId === NOOP) {\n return undefined;\n }\n hasRegisteredRef.current = true;\n registerControlId(controlSourceRef.current, inputId);\n return undefined;\n }, [inputId, registerControlId, controlSourceRef]);\n React.useEffect(() => {\n const controlSource = controlSourceRef.current;\n return () => {\n if (!hasRegisteredRef.current || registerControlId === NOOP) {\n return;\n }\n hasRegisteredRef.current = false;\n registerControlId(controlSource, undefined);\n };\n }, [registerControlId, controlSourceRef]);\n useRegisterFieldControl(controlRef, id, checked, undefined, !groupContext && !disabled, nameProp);\n const inputRef = React.useRef(null);\n const registerFieldInput = validation.registerInput;\n const registeredInputValue = groupContext ? value : undefined;\n const registerInput = React.useCallback(element => registerFieldInput(element, {\n controlRef,\n value: registeredInputValue\n }), [registerFieldInput, registeredInputValue]);\n const mergedInputRef = useMergedRefs(inputRefProp, inputRef, parent ? undefined : registerInput);\n const ariaLabelledBy = useAriaLabelledBy(ariaLabelledByProp, labelId, inputRef, !nativeButton, inputId ?? undefined);\n useIsoLayoutEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = computedIndeterminate;\n if (checked) {\n setFilled(true);\n }\n }\n }, [checked, computedIndeterminate, setFilled]);\n useValueChanged(checked, () => {\n if (groupContext) {\n return;\n }\n clearErrors(name);\n setFilled(checked);\n setDirty(checked !== validityData.initialValue);\n validation.change(checked);\n });\n const inputProps = mergeProps({\n checked,\n disabled,\n form,\n // parent checkboxes unset `name` to be excluded from form submission\n name: parent ? undefined : name,\n // Set `id` to stop Chrome warning about an unassociated input.\n // When using a native button, the `id` is applied to the button instead.\n id: nativeButton ? undefined : inputId ?? undefined,\n required,\n ref: mergedInputRef,\n style: name ? visuallyHiddenInput : visuallyHidden,\n tabIndex: -1,\n type: 'checkbox',\n 'aria-hidden': true,\n onChange(event) {\n // Workaround for https://github.com/react/react/issues/9023\n if (event.nativeEvent.defaultPrevented) {\n return;\n }\n if (readOnly) {\n event.preventDefault();\n return;\n }\n const nextChecked = event.currentTarget.checked;\n const details = createChangeEventDetails(REASONS.none, event.nativeEvent);\n onCheckedChange?.(nextChecked, details);\n if (details.isCanceled) {\n return;\n }\n groupOnChange?.(nextChecked, details);\n if (details.isCanceled) {\n return;\n }\n setCheckedState(nextChecked);\n if (value !== undefined && groupContext !== undefined && !parent && !isGroupedWithParent) {\n const nextGroupValue = nextChecked ? [...groupContext.value, value] : groupContext.value.filter(item => item !== value);\n groupContext.setValue(nextGroupValue, details);\n }\n },\n onClick(event) {\n // The click dispatched from the root's `onClick` is an implementation detail\n // and must not reach ancestors, which already receive the original click.\n event.stopPropagation();\n },\n onFocus() {\n controlRef.current?.focus();\n }\n },\n // React <19 sets an empty value if `undefined` is passed explicitly\n // To avoid this, we only set the value if it's defined\n valueProp !== undefined ? {\n value: (groupContext ? checked && valueProp : valueProp) || ''\n } : EMPTY_OBJECT, getDescriptionProps, props => validation.getValidationProps(disabled, props));\n React.useEffect(() => {\n if (!parentContext || value === undefined) {\n return undefined;\n }\n const disabledStates = parentContext.disabledStatesRef.current;\n disabledStates.set(value, disabled);\n return () => {\n disabledStates.delete(value);\n };\n }, [parentContext, disabled, value]);\n const state = React.useMemo(() => ({\n ...fieldState,\n checked: computedChecked,\n disabled,\n readOnly,\n required,\n indeterminate: computedIndeterminate\n }), [fieldState, computedChecked, disabled, readOnly, required, computedIndeterminate]);\n const stateAttributesMapping = getCheckboxStateAttributesMapping(state);\n const element = useRenderElement('span', componentProps, {\n state,\n ref: [buttonRef, controlRef, forwardedRef],\n props: [{\n id: nativeButton ? inputId ?? undefined : id,\n role: 'checkbox',\n 'aria-checked': computedIndeterminate ? 'mixed' : computedChecked,\n 'aria-readonly': readOnly || undefined,\n 'aria-required': required || undefined,\n 'aria-labelledby': ariaLabelledBy,\n [PARENT_CHECKBOX]: parent ? '' : undefined,\n onFocus() {\n if (!disabled) {\n setFocused(true);\n }\n },\n onBlur() {\n const inputEl = inputRef.current;\n if (!inputEl) {\n return;\n }\n setTouched(true);\n setFocused(false);\n if (validationMode === 'onBlur') {\n validation.commit(groupContext ? groupValue : inputEl.checked);\n }\n },\n onKeyDown(event) {\n if (event.key !== 'Enter') {\n return;\n }\n\n // Let consumer `preventDefault()` handlers opt out while defensively stopping\n // any remaining Base UI Enter handling from treating the checkbox as a button.\n event.preventBaseUIHandler();\n if (event.defaultPrevented) {\n return;\n }\n const formToSubmit = inputRef.current?.form ?? null;\n const currentTarget = event.currentTarget;\n const nativeEvent = event.nativeEvent;\n const originalPreventDefault = event.preventDefault;\n const originalNativePreventDefault = nativeEvent.preventDefault;\n let preventDefaultCalledAfterPropagation = false;\n event.preventDefault = () => {\n preventDefaultCalledAfterPropagation = true;\n originalPreventDefault.call(event);\n };\n nativeEvent.preventDefault = () => {\n preventDefaultCalledAfterPropagation = true;\n originalNativePreventDefault.call(nativeEvent);\n };\n\n // Enter should not activate/toggle the checkbox. Cancel the native button behavior\n // without setting React's synthetic `defaultPrevented`, so ancestor React handlers\n // can still opt out by calling `preventDefault()` during propagation.\n originalNativePreventDefault.call(nativeEvent);\n ownerWindow(currentTarget).queueMicrotask(() => {\n event.preventDefault = originalPreventDefault;\n nativeEvent.preventDefault = originalNativePreventDefault;\n if (!preventDefaultCalledAfterPropagation) {\n getDefaultFormSubmitter(formToSubmit)?.click();\n }\n });\n },\n onClick(event) {\n if (readOnly || disabled) {\n return;\n }\n event.preventDefault();\n const input = inputRef.current;\n if (!input) {\n return;\n }\n dispatchClickWithModifiers(input, event);\n }\n }, elementProps, otherGroupProps, getButtonProps, getDescriptionProps, props => validation.getValidationProps(disabled, props)],\n stateAttributesMapping\n });\n return /*#__PURE__*/_jsxs(CheckboxRootContext.Provider, {\n value: state,\n children: [element, !checked && !groupContext && name && !parent && uncheckedValue !== undefined && /*#__PURE__*/_jsx(\"input\", {\n type: \"hidden\",\n form: form,\n name: name,\n value: uncheckedValue,\n disabled: disabled\n }), /*#__PURE__*/_jsx(\"input\", {\n ...inputProps,\n suppressHydrationWarning: true\n })]\n });\n});\nif (process.env.NODE_ENV !== \"production\") CheckboxRoot.displayName = \"CheckboxRoot\";","'use client';\n\nimport * as React from 'react';\nimport { useCheckboxRootContext } from \"../root/CheckboxRootContext.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { getCheckboxStateAttributesMapping } from \"../utils/getCheckboxStateAttributesMapping.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\n\n/**\n * Indicates whether the checkbox is ticked.\n * Renders a `<span>` element.\n *\n * Documentation: [Base UI Checkbox](https://base-ui.com/react/components/checkbox)\n */\nexport const CheckboxIndicator = /*#__PURE__*/React.forwardRef(function CheckboxIndicator(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n keepMounted = false,\n ...elementProps\n } = componentProps;\n const rootState = useCheckboxRootContext();\n const rendered = rootState.checked || rootState.indeterminate;\n const {\n mounted,\n transitionStatus,\n setMounted\n } = useTransitionStatus(rendered);\n const indicatorRef = React.useRef(null);\n const state = {\n ...rootState,\n transitionStatus\n };\n useOpenChangeComplete({\n open: rendered,\n ref: indicatorRef,\n onComplete() {\n if (!rendered) {\n setMounted(false);\n }\n }\n });\n const baseStateAttributesMapping = getCheckboxStateAttributesMapping(rootState);\n const stateAttributesMapping = {\n ...baseStateAttributesMapping,\n ...transitionStatusMapping\n };\n const shouldRender = keepMounted || mounted;\n const element = useRenderElement('span', componentProps, {\n ref: [forwardedRef, indicatorRef],\n state,\n stateAttributesMapping,\n props: elementProps\n });\n if (!shouldRender) {\n return null;\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") CheckboxIndicator.displayName = \"CheckboxIndicator\";","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Checkbox } from \"@base-ui/react/checkbox\";\n//#region src/components/checkbox/checkbox-indicator.tsx\nconst TRCheckboxIndicator = createComponentPart(Checkbox.Indicator, \"tr-checkbox-indicator\");\n//#endregion\nexport { TRCheckboxIndicator };\n\n//# sourceMappingURL=checkbox-indicator.js.map","\"use client\";\nimport { mergeComponentClassName } from \"../../internal/component-class-name.js\";\nimport { createElement, useEffect, useRef, useState } from \"react\";\nimport { Checkbox } from \"@base-ui/react/checkbox\";\n//#region src/components/checkbox/checkbox-root.tsx\nfunction TRCheckboxRoot({ checked, className, ref, uiSize = \"md\", ...props }) {\n\tconst rootRef = useRef(null);\n\tconst [resetKey, setResetKey] = useState(0);\n\tuseEffect(() => {\n\t\tif (checked !== void 0) return;\n\t\tconst reset = (event) => {\n\t\t\tconst form = event.target;\n\t\t\tif (!(form instanceof HTMLFormElement)) return;\n\t\t\tlet sibling = rootRef.current?.nextElementSibling ?? null;\n\t\t\twhile (sibling instanceof HTMLInputElement) {\n\t\t\t\tif (sibling.type === \"checkbox\" && sibling.form === form) {\n\t\t\t\t\tsetResetKey((current) => current + 1);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsibling = sibling.nextElementSibling;\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"reset\", reset, true);\n\t\treturn () => document.removeEventListener(\"reset\", reset, true);\n\t}, [checked]);\n\treturn /* @__PURE__ */ createElement(Checkbox.Root, {\n\t\t...props,\n\t\tchecked,\n\t\tclassName: mergeComponentClassName(\"tr-checkbox\", className),\n\t\t\"data-ui-size\": uiSize,\n\t\tkey: resetKey,\n\t\tref: (node) => {\n\t\t\trootRef.current = node;\n\t\t\tif (typeof ref === \"function\") ref(node);\n\t\t\telse if (ref) ref.current = node;\n\t\t}\n\t});\n}\n//#endregion\nexport { TRCheckboxRoot };\n\n//# sourceMappingURL=checkbox-root.js.map","import { TRCheckboxIndicator } from \"./checkbox-indicator.js\";\nimport { TRCheckboxRoot } from \"./checkbox-root.js\";\n//#region src/components/checkbox/index.tsx\nconst TRCheckbox = {\n\tRoot: TRCheckboxRoot,\n\tIndicator: TRCheckboxIndicator\n};\n//#endregion\nexport { TRCheckbox, TRCheckboxIndicator, TRCheckboxRoot };\n\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8],"mappings":"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"}
1
+ {"version":3,"file":"checkbox-gdHnSFQ-.js","names":["_formatErrorMessage","REASONS.none","Checkbox.Indicator","Checkbox.Root"],"sources":["../../../../node_modules/.pnpm/@base-ui+utils@0.3.2_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/utils/getDefaultFormSubmitter.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox/utils/getCheckboxStateAttributesMapping.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox-group/CheckboxGroupContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox/root/CheckboxRootContext.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox/root/CheckboxRoot.mjs","../../../../node_modules/.pnpm/@base-ui+react@1.7.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@base-ui/react/checkbox/indicator/CheckboxIndicator.mjs","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/checkbox/checkbox-indicator.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/checkbox/checkbox-root.js","../../../../node_modules/.pnpm/@tinyrack+ui@0.25.0_@types+react@19.2.17_react-dom@19.2.7_react@19.2.7__react@19.2.7_shiki@4.3.1_tailwindcss@4.3.2/node_modules/@tinyrack/ui/dist/components/checkbox/index.js"],"sourcesContent":["/**\n * Returns the default button a browser uses for implicit form submission.\n *\n * This is useful for custom form controls that need to mirror native Enter key behavior.\n * Clicking the returned submitter preserves browser semantics such as the submitter's click\n * event, `SubmitEvent.submitter`, and submitter-specific attributes.\n *\n * The function follows the controls exposed by `form.elements`, which includes controls associated\n * through the `form` attribute. Disabled submitters can be returned because the default button is\n * determined before disabled state is considered; clicking a disabled submitter is a no-op.\n */\nexport function getDefaultFormSubmitter(form) {\n if (!form) {\n return null;\n }\n for (const candidate of form.elements) {\n const tagName = candidate.tagName;\n if (tagName === 'BUTTON' || tagName === 'INPUT') {\n const button = candidate;\n\n // Intentionally excludes input[type=\"image\"]: Chromium omits it from form.elements,\n // so supporting it would require separate traversal for an exotic submitter type.\n if (button.type === 'submit') {\n return button;\n }\n }\n }\n return null;\n}","import { fieldValidityMapping } from \"../../internals/field-constants/constants.mjs\";\nexport function getCheckboxStateAttributesMapping(state) {\n return {\n checked(value) {\n if (state.indeterminate) {\n // `data-indeterminate` is already handled by the `indeterminate` prop.\n return {};\n }\n if (value) {\n return {\n 'data-checked': ''\n };\n }\n return {\n 'data-unchecked': ''\n };\n },\n ...fieldValidityMapping\n };\n}","'use client';\n\nimport * as React from 'react';\nexport const CheckboxGroupContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") CheckboxGroupContext.displayName = \"CheckboxGroupContext\";\nexport function useCheckboxGroupContext() {\n return React.useContext(CheckboxGroupContext);\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const CheckboxRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") CheckboxRootContext.displayName = \"CheckboxRootContext\";\nexport function useCheckboxRootContext() {\n const context = React.useContext(CheckboxRootContext);\n if (context === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: CheckboxRootContext is missing. Checkbox parts must be placed within <Checkbox.Root>.' : _formatErrorMessage(14));\n }\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { useControlled } from '@base-ui/utils/useControlled';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { useRefWithInit } from '@base-ui/utils/useRefWithInit';\nimport { visuallyHidden, visuallyHiddenInput } from '@base-ui/utils/visuallyHidden';\nimport { ownerWindow } from '@base-ui/utils/owner';\nimport { getDefaultFormSubmitter } from '@base-ui/utils/getDefaultFormSubmitter';\nimport { NOOP } from \"../../internals/noop.mjs\";\nimport { getCheckboxStateAttributesMapping } from \"../utils/getCheckboxStateAttributesMapping.mjs\";\nimport { dispatchClickWithModifiers } from \"../../utils/dispatchClickWithModifiers.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { useBaseUiId } from \"../../internals/useBaseUiId.mjs\";\nimport { mergeProps } from \"../../merge-props/index.mjs\";\nimport { useButton } from \"../../internals/use-button/useButton.mjs\";\nimport { useFieldRootContext } from \"../../internals/field-root-context/FieldRootContext.mjs\";\nimport { useRegisterFieldControl } from \"../../internals/field-register-control/useRegisterFieldControl.mjs\";\nimport { useFieldItemContext } from \"../../field/item/FieldItemContext.mjs\";\nimport { useFormContext } from \"../../internals/form-context/FormContext.mjs\";\nimport { useLabelableContext } from \"../../internals/labelable-provider/LabelableContext.mjs\";\nimport { useAriaLabelledBy } from \"../../internals/labelable-provider/useAriaLabelledBy.mjs\";\nimport { useCheckboxGroupContext } from \"../../checkbox-group/CheckboxGroupContext.mjs\";\nimport { CheckboxRootContext } from \"./CheckboxRootContext.mjs\";\nimport { createChangeEventDetails } from \"../../internals/createBaseUIEventDetails.mjs\";\nimport { REASONS } from \"../../internals/reasons.mjs\";\nimport { useValueChanged } from \"../../internals/useValueChanged.mjs\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const PARENT_CHECKBOX = 'data-parent';\n\n/**\n * Represents the checkbox itself.\n * Renders a `<span>` element and a hidden `<input>` beside.\n *\n * Documentation: [Base UI Checkbox](https://base-ui.com/react/components/checkbox)\n */\nexport const CheckboxRoot = /*#__PURE__*/React.forwardRef(function CheckboxRoot(componentProps, forwardedRef) {\n const {\n checked: checkedProp,\n className,\n defaultChecked = false,\n 'aria-labelledby': ariaLabelledByProp,\n disabled: disabledProp = false,\n form,\n id: idProp,\n indeterminate = false,\n inputRef: inputRefProp,\n name: nameProp,\n onCheckedChange,\n parent = false,\n readOnly = false,\n render,\n required = false,\n uncheckedValue,\n value: valueProp,\n nativeButton = false,\n style,\n ...elementProps\n } = componentProps;\n const {\n clearErrors\n } = useFormContext();\n const {\n disabled: rootDisabled,\n name: fieldName,\n setDirty,\n setFilled,\n setFocused,\n setTouched,\n state: fieldState,\n validationMode,\n validityData,\n validation: localValidation\n } = useFieldRootContext();\n const fieldItemContext = useFieldItemContext();\n const {\n labelId,\n controlId,\n registerControlId,\n getDescriptionProps\n } = useLabelableContext();\n const groupContext = useCheckboxGroupContext();\n const parentContext = groupContext?.allValues === undefined ? undefined : groupContext.parent;\n const isGroupedWithParent = parentContext !== undefined;\n const disabled = rootDisabled || fieldItemContext.disabled || groupContext?.disabled || disabledProp;\n const name = fieldName ?? nameProp;\n const value = valueProp ?? name;\n const id = useBaseUiId();\n const generatedInputId = useBaseUiId();\n let inputId = idProp || controlId;\n if (isGroupedWithParent) {\n if (parent) {\n inputId = generatedInputId;\n } else if (value !== undefined) {\n inputId = `${parentContext.id}-${value}`;\n } else {\n inputId ||= generatedInputId;\n }\n }\n let groupProps = {};\n if (isGroupedWithParent) {\n if (parent) {\n groupProps = parentContext.getParentProps();\n } else if (value !== undefined) {\n groupProps = parentContext.getChildProps(value);\n }\n }\n const {\n checked: groupChecked = checkedProp,\n indeterminate: groupIndeterminate = indeterminate,\n onCheckedChange: groupOnChange,\n ...otherGroupProps\n } = groupProps;\n const groupValue = groupContext?.value;\n const controlRef = React.useRef(null);\n const controlSourceRef = useRefWithInit(() => Symbol());\n const hasRegisteredRef = React.useRef(false);\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton\n });\n const validation = groupContext?.validation ?? localValidation;\n const [checked, setCheckedState] = useControlled({\n controlled: value !== undefined && groupValue !== undefined && !parent ? groupValue.includes(value) : groupChecked,\n default: defaultChecked,\n name: 'Checkbox',\n state: 'checked'\n });\n const computedChecked = isGroupedWithParent ? Boolean(groupChecked) : checked;\n const computedIndeterminate = isGroupedWithParent ? groupIndeterminate || indeterminate : indeterminate;\n\n // can't use useLabelableId because of optional groupContext and/or parent\n useIsoLayoutEffect(() => {\n if (registerControlId === NOOP) {\n return undefined;\n }\n hasRegisteredRef.current = true;\n registerControlId(controlSourceRef.current, inputId);\n return undefined;\n }, [inputId, registerControlId, controlSourceRef]);\n React.useEffect(() => {\n const controlSource = controlSourceRef.current;\n return () => {\n if (!hasRegisteredRef.current || registerControlId === NOOP) {\n return;\n }\n hasRegisteredRef.current = false;\n registerControlId(controlSource, undefined);\n };\n }, [registerControlId, controlSourceRef]);\n useRegisterFieldControl(controlRef, id, checked, undefined, !groupContext && !disabled, nameProp);\n const inputRef = React.useRef(null);\n const registerFieldInput = validation.registerInput;\n const registeredInputValue = groupContext ? value : undefined;\n const registerInput = React.useCallback(element => registerFieldInput(element, {\n controlRef,\n value: registeredInputValue\n }), [registerFieldInput, registeredInputValue]);\n const mergedInputRef = useMergedRefs(inputRefProp, inputRef, parent ? undefined : registerInput);\n const ariaLabelledBy = useAriaLabelledBy(ariaLabelledByProp, labelId, inputRef, !nativeButton, inputId ?? undefined);\n useIsoLayoutEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = computedIndeterminate;\n if (checked) {\n setFilled(true);\n }\n }\n }, [checked, computedIndeterminate, setFilled]);\n useValueChanged(checked, () => {\n if (groupContext) {\n return;\n }\n clearErrors(name);\n setFilled(checked);\n setDirty(checked !== validityData.initialValue);\n validation.change(checked);\n });\n const inputProps = mergeProps({\n checked,\n disabled,\n form,\n // parent checkboxes unset `name` to be excluded from form submission\n name: parent ? undefined : name,\n // Set `id` to stop Chrome warning about an unassociated input.\n // When using a native button, the `id` is applied to the button instead.\n id: nativeButton ? undefined : inputId ?? undefined,\n required,\n ref: mergedInputRef,\n style: name ? visuallyHiddenInput : visuallyHidden,\n tabIndex: -1,\n type: 'checkbox',\n 'aria-hidden': true,\n onChange(event) {\n // Workaround for https://github.com/react/react/issues/9023\n if (event.nativeEvent.defaultPrevented) {\n return;\n }\n if (readOnly) {\n event.preventDefault();\n return;\n }\n const nextChecked = event.currentTarget.checked;\n const details = createChangeEventDetails(REASONS.none, event.nativeEvent);\n onCheckedChange?.(nextChecked, details);\n if (details.isCanceled) {\n return;\n }\n groupOnChange?.(nextChecked, details);\n if (details.isCanceled) {\n return;\n }\n setCheckedState(nextChecked);\n if (value !== undefined && groupContext !== undefined && !parent && !isGroupedWithParent) {\n const nextGroupValue = nextChecked ? [...groupContext.value, value] : groupContext.value.filter(item => item !== value);\n groupContext.setValue(nextGroupValue, details);\n }\n },\n onClick(event) {\n // The click dispatched from the root's `onClick` is an implementation detail\n // and must not reach ancestors, which already receive the original click.\n event.stopPropagation();\n },\n onFocus() {\n controlRef.current?.focus();\n }\n },\n // React <19 sets an empty value if `undefined` is passed explicitly\n // To avoid this, we only set the value if it's defined\n valueProp !== undefined ? {\n value: (groupContext ? checked && valueProp : valueProp) || ''\n } : EMPTY_OBJECT, getDescriptionProps, props => validation.getValidationProps(disabled, props));\n React.useEffect(() => {\n if (!parentContext || value === undefined) {\n return undefined;\n }\n const disabledStates = parentContext.disabledStatesRef.current;\n disabledStates.set(value, disabled);\n return () => {\n disabledStates.delete(value);\n };\n }, [parentContext, disabled, value]);\n const state = React.useMemo(() => ({\n ...fieldState,\n checked: computedChecked,\n disabled,\n readOnly,\n required,\n indeterminate: computedIndeterminate\n }), [fieldState, computedChecked, disabled, readOnly, required, computedIndeterminate]);\n const stateAttributesMapping = getCheckboxStateAttributesMapping(state);\n const element = useRenderElement('span', componentProps, {\n state,\n ref: [buttonRef, controlRef, forwardedRef],\n props: [{\n id: nativeButton ? inputId ?? undefined : id,\n role: 'checkbox',\n 'aria-checked': computedIndeterminate ? 'mixed' : computedChecked,\n 'aria-readonly': readOnly || undefined,\n 'aria-required': required || undefined,\n 'aria-labelledby': ariaLabelledBy,\n [PARENT_CHECKBOX]: parent ? '' : undefined,\n onFocus() {\n if (!disabled) {\n setFocused(true);\n }\n },\n onBlur() {\n const inputEl = inputRef.current;\n if (!inputEl) {\n return;\n }\n setTouched(true);\n setFocused(false);\n if (validationMode === 'onBlur') {\n validation.commit(groupContext ? groupValue : inputEl.checked);\n }\n },\n onKeyDown(event) {\n if (event.key !== 'Enter') {\n return;\n }\n\n // Let consumer `preventDefault()` handlers opt out while defensively stopping\n // any remaining Base UI Enter handling from treating the checkbox as a button.\n event.preventBaseUIHandler();\n if (event.defaultPrevented) {\n return;\n }\n const formToSubmit = inputRef.current?.form ?? null;\n const currentTarget = event.currentTarget;\n const nativeEvent = event.nativeEvent;\n const originalPreventDefault = event.preventDefault;\n const originalNativePreventDefault = nativeEvent.preventDefault;\n let preventDefaultCalledAfterPropagation = false;\n event.preventDefault = () => {\n preventDefaultCalledAfterPropagation = true;\n originalPreventDefault.call(event);\n };\n nativeEvent.preventDefault = () => {\n preventDefaultCalledAfterPropagation = true;\n originalNativePreventDefault.call(nativeEvent);\n };\n\n // Enter should not activate/toggle the checkbox. Cancel the native button behavior\n // without setting React's synthetic `defaultPrevented`, so ancestor React handlers\n // can still opt out by calling `preventDefault()` during propagation.\n originalNativePreventDefault.call(nativeEvent);\n ownerWindow(currentTarget).queueMicrotask(() => {\n event.preventDefault = originalPreventDefault;\n nativeEvent.preventDefault = originalNativePreventDefault;\n if (!preventDefaultCalledAfterPropagation) {\n getDefaultFormSubmitter(formToSubmit)?.click();\n }\n });\n },\n onClick(event) {\n if (readOnly || disabled) {\n return;\n }\n event.preventDefault();\n const input = inputRef.current;\n if (!input) {\n return;\n }\n dispatchClickWithModifiers(input, event);\n }\n }, elementProps, otherGroupProps, getButtonProps, getDescriptionProps, props => validation.getValidationProps(disabled, props)],\n stateAttributesMapping\n });\n return /*#__PURE__*/_jsxs(CheckboxRootContext.Provider, {\n value: state,\n children: [element, !checked && !groupContext && name && !parent && uncheckedValue !== undefined && /*#__PURE__*/_jsx(\"input\", {\n type: \"hidden\",\n form: form,\n name: name,\n value: uncheckedValue,\n disabled: disabled\n }), /*#__PURE__*/_jsx(\"input\", {\n ...inputProps,\n suppressHydrationWarning: true\n })]\n });\n});\nif (process.env.NODE_ENV !== \"production\") CheckboxRoot.displayName = \"CheckboxRoot\";","'use client';\n\nimport * as React from 'react';\nimport { useCheckboxRootContext } from \"../root/CheckboxRootContext.mjs\";\nimport { useRenderElement } from \"../../internals/useRenderElement.mjs\";\nimport { getCheckboxStateAttributesMapping } from \"../utils/getCheckboxStateAttributesMapping.mjs\";\nimport { useOpenChangeComplete } from \"../../internals/useOpenChangeComplete.mjs\";\nimport { useTransitionStatus } from \"../../internals/useTransitionStatus.mjs\";\nimport { transitionStatusMapping } from \"../../internals/stateAttributesMapping.mjs\";\n\n/**\n * Indicates whether the checkbox is ticked.\n * Renders a `<span>` element.\n *\n * Documentation: [Base UI Checkbox](https://base-ui.com/react/components/checkbox)\n */\nexport const CheckboxIndicator = /*#__PURE__*/React.forwardRef(function CheckboxIndicator(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n keepMounted = false,\n ...elementProps\n } = componentProps;\n const rootState = useCheckboxRootContext();\n const rendered = rootState.checked || rootState.indeterminate;\n const {\n mounted,\n transitionStatus,\n setMounted\n } = useTransitionStatus(rendered);\n const indicatorRef = React.useRef(null);\n const state = {\n ...rootState,\n transitionStatus\n };\n useOpenChangeComplete({\n open: rendered,\n ref: indicatorRef,\n onComplete() {\n if (!rendered) {\n setMounted(false);\n }\n }\n });\n const baseStateAttributesMapping = getCheckboxStateAttributesMapping(rootState);\n const stateAttributesMapping = {\n ...baseStateAttributesMapping,\n ...transitionStatusMapping\n };\n const shouldRender = keepMounted || mounted;\n const element = useRenderElement('span', componentProps, {\n ref: [forwardedRef, indicatorRef],\n state,\n stateAttributesMapping,\n props: elementProps\n });\n if (!shouldRender) {\n return null;\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") CheckboxIndicator.displayName = \"CheckboxIndicator\";","\"use client\";\nimport { createComponentPart } from \"../../internal/component-part.js\";\nimport { Checkbox } from \"@base-ui/react/checkbox\";\n//#region src/components/checkbox/checkbox-indicator.tsx\nconst TRCheckboxIndicator = createComponentPart(Checkbox.Indicator, \"tr-checkbox-indicator\");\n//#endregion\nexport { TRCheckboxIndicator };\n\n//# sourceMappingURL=checkbox-indicator.js.map","\"use client\";\nimport { mergeComponentClassName } from \"../../internal/component-class-name.js\";\nimport { createElement, useEffect, useRef, useState } from \"react\";\nimport { Checkbox } from \"@base-ui/react/checkbox\";\n//#region src/components/checkbox/checkbox-root.tsx\nfunction TRCheckboxRoot({ checked, className, ref, uiSize = \"md\", ...props }) {\n\tconst rootRef = useRef(null);\n\tconst [resetKey, setResetKey] = useState(0);\n\tuseEffect(() => {\n\t\tif (checked !== void 0) return;\n\t\tconst reset = (event) => {\n\t\t\tconst form = event.target;\n\t\t\tif (!(form instanceof HTMLFormElement)) return;\n\t\t\tlet sibling = rootRef.current?.nextElementSibling ?? null;\n\t\t\twhile (sibling instanceof HTMLInputElement) {\n\t\t\t\tif (sibling.type === \"checkbox\" && sibling.form === form) {\n\t\t\t\t\tsetResetKey((current) => current + 1);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsibling = sibling.nextElementSibling;\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"reset\", reset, true);\n\t\treturn () => document.removeEventListener(\"reset\", reset, true);\n\t}, [checked]);\n\treturn /* @__PURE__ */ createElement(Checkbox.Root, {\n\t\t...props,\n\t\tchecked,\n\t\tclassName: mergeComponentClassName(\"tr-checkbox\", className),\n\t\t\"data-ui-size\": uiSize,\n\t\tkey: resetKey,\n\t\tref: (node) => {\n\t\t\trootRef.current = node;\n\t\t\tif (typeof ref === \"function\") ref(node);\n\t\t\telse if (ref) ref.current = node;\n\t\t}\n\t});\n}\n//#endregion\nexport { TRCheckboxRoot };\n\n//# sourceMappingURL=checkbox-root.js.map","import { TRCheckboxIndicator } from \"./checkbox-indicator.js\";\nimport { TRCheckboxRoot } from \"./checkbox-root.js\";\n//#region src/components/checkbox/index.tsx\nconst TRCheckbox = {\n\tRoot: TRCheckboxRoot,\n\tIndicator: TRCheckboxIndicator\n};\n//#endregion\nexport { TRCheckbox, TRCheckboxIndicator, TRCheckboxRoot };\n\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8],"mappings":"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"}