@wildo-ai/presets-components 1.1.4 → 1.1.6

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 (780) hide show
  1. package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
  2. package/dist/esm/components/actions/action-bar.js +65 -8
  3. package/dist/esm/components/actions/action-bar.js.map +1 -1
  4. package/dist/esm/components/actions/action-bar.labels.d.ts.map +1 -1
  5. package/dist/esm/components/actions/action-button.d.ts.map +1 -1
  6. package/dist/esm/components/actions/action-button.js +3 -3
  7. package/dist/esm/components/actions/action-button.js.map +1 -1
  8. package/dist/esm/components/actions/action-button.labels.d.ts.map +1 -1
  9. package/dist/esm/components/actions/button-group.d.ts.map +1 -1
  10. package/dist/esm/components/actions/button.d.ts.map +1 -1
  11. package/dist/esm/components/actions/button.js +62 -3
  12. package/dist/esm/components/actions/button.js.map +1 -1
  13. package/dist/esm/components/actions/button.labels.d.ts.map +1 -1
  14. package/dist/esm/components/ai-elements/artifacts/artifact-browser.d.ts.map +1 -1
  15. package/dist/esm/components/ai-elements/artifacts/artifact.d.ts.map +1 -1
  16. package/dist/esm/components/ai-elements/artifacts/artifact.labels.d.ts.map +1 -1
  17. package/dist/esm/components/ai-elements/artifacts/code-block.d.ts.map +1 -1
  18. package/dist/esm/components/ai-elements/artifacts/code-block.js +1 -1
  19. package/dist/esm/components/ai-elements/artifacts/code-block.js.map +1 -1
  20. package/dist/esm/components/ai-elements/artifacts/code-block.labels.d.ts.map +1 -1
  21. package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts +4 -0
  22. package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts.map +1 -0
  23. package/dist/esm/components/ai-elements/artifacts/diff-block.js +165 -0
  24. package/dist/esm/components/ai-elements/artifacts/diff-block.js.map +1 -0
  25. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts +3 -0
  26. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts.map +1 -0
  27. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js +63 -0
  28. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js.map +1 -0
  29. package/dist/esm/components/ai-elements/artifacts/image.d.ts.map +1 -1
  30. package/dist/esm/components/ai-elements/artifacts/image.labels.d.ts.map +1 -1
  31. package/dist/esm/components/ai-elements/artifacts/shiki-highlighter-runtime.d.ts.map +1 -1
  32. package/dist/esm/components/ai-elements/artifacts/shiki-highlighter.lazy.d.ts.map +1 -1
  33. package/dist/esm/components/ai-elements/artifacts/web-preview.d.ts.map +1 -1
  34. package/dist/esm/components/ai-elements/artifacts/web-preview.labels.d.ts.map +1 -1
  35. package/dist/esm/components/ai-elements/chat/conversation.d.ts.map +1 -1
  36. package/dist/esm/components/ai-elements/chat/conversation.labels.d.ts.map +1 -1
  37. package/dist/esm/components/ai-elements/chat/message.d.ts.map +1 -1
  38. package/dist/esm/components/ai-elements/chat/message.labels.d.ts.map +1 -1
  39. package/dist/esm/components/ai-elements/chat/prompt-input.d.ts.map +1 -1
  40. package/dist/esm/components/ai-elements/chat/prompt-input.labels.d.ts.map +1 -1
  41. package/dist/esm/components/ai-elements/chat/sources.d.ts.map +1 -1
  42. package/dist/esm/components/ai-elements/chat/sources.labels.d.ts.map +1 -1
  43. package/dist/esm/components/ai-elements/chat/suggestion.d.ts.map +1 -1
  44. package/dist/esm/components/ai-elements/chat/suggestion.js +8 -1
  45. package/dist/esm/components/ai-elements/chat/suggestion.js.map +1 -1
  46. package/dist/esm/components/ai-elements/chat/suggestion.labels.d.ts.map +1 -1
  47. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts +68 -0
  48. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts.map +1 -0
  49. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js +208 -0
  50. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js.map +1 -0
  51. package/dist/esm/components/ai-elements/decision/approval.d.ts +124 -17
  52. package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
  53. package/dist/esm/components/ai-elements/decision/approval.js +105 -13
  54. package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
  55. package/dist/esm/components/ai-elements/decision/decision-request.d.ts.map +1 -1
  56. package/dist/esm/components/ai-elements/decision/decision-request.labels.d.ts.map +1 -1
  57. package/dist/esm/components/ai-elements/execution/confirmation.d.ts.map +1 -1
  58. package/dist/esm/components/ai-elements/execution/confirmation.labels.d.ts.map +1 -1
  59. package/dist/esm/components/ai-elements/execution/queue.d.ts.map +1 -1
  60. package/dist/esm/components/ai-elements/execution/queue.labels.d.ts.map +1 -1
  61. package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
  62. package/dist/esm/components/ai-elements/execution/task.js +1 -1
  63. package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
  64. package/dist/esm/components/ai-elements/execution/task.labels.d.ts.map +1 -1
  65. package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
  66. package/dist/esm/components/ai-elements/execution/tool.js +8 -1
  67. package/dist/esm/components/ai-elements/execution/tool.js.map +1 -1
  68. package/dist/esm/components/ai-elements/execution/tool.labels.d.ts.map +1 -1
  69. package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
  70. package/dist/esm/components/ai-elements/graph/canvas.labels.d.ts.map +1 -1
  71. package/dist/esm/components/ai-elements/graph/connection.d.ts.map +1 -1
  72. package/dist/esm/components/ai-elements/graph/connection.labels.d.ts.map +1 -1
  73. package/dist/esm/components/ai-elements/graph/controls.d.ts.map +1 -1
  74. package/dist/esm/components/ai-elements/graph/controls.labels.d.ts.map +1 -1
  75. package/dist/esm/components/ai-elements/graph/edge.d.ts.map +1 -1
  76. package/dist/esm/components/ai-elements/graph/edge.labels.d.ts.map +1 -1
  77. package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts +3 -1
  78. package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
  79. package/dist/esm/components/ai-elements/graph/graph-runtime.js +3 -1
  80. package/dist/esm/components/ai-elements/graph/graph-runtime.js.map +1 -1
  81. package/dist/esm/components/ai-elements/graph/graph.lazy.d.ts.map +1 -1
  82. package/dist/esm/components/ai-elements/graph/graph.lazy.js +15 -15
  83. package/dist/esm/components/ai-elements/graph/graph.lazy.js.map +1 -1
  84. package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
  85. package/dist/esm/components/ai-elements/graph/node.labels.d.ts.map +1 -1
  86. package/dist/esm/components/ai-elements/graph/panel.d.ts.map +1 -1
  87. package/dist/esm/components/ai-elements/graph/panel.labels.d.ts.map +1 -1
  88. package/dist/esm/components/ai-elements/graph/toolbar.d.ts.map +1 -1
  89. package/dist/esm/components/ai-elements/graph/toolbar.labels.d.ts.map +1 -1
  90. package/dist/esm/components/ai-elements/meta/agent.d.ts +0 -1
  91. package/dist/esm/components/ai-elements/meta/agent.d.ts.map +1 -1
  92. package/dist/esm/components/ai-elements/meta/agent.js +23 -18
  93. package/dist/esm/components/ai-elements/meta/agent.js.map +1 -1
  94. package/dist/esm/components/ai-elements/meta/context.d.ts.map +1 -1
  95. package/dist/esm/components/ai-elements/meta/context.labels.d.ts.map +1 -1
  96. package/dist/esm/components/ai-elements/meta/context.lazy.d.ts.map +1 -1
  97. package/dist/esm/components/ai-elements/meta/context.lazy.js +13 -11
  98. package/dist/esm/components/ai-elements/meta/context.lazy.js.map +1 -1
  99. package/dist/esm/components/ai-elements/meta/model-selector.d.ts.map +1 -1
  100. package/dist/esm/components/ai-elements/meta/model-selector.labels.d.ts.map +1 -1
  101. package/dist/esm/components/ai-elements/meta/open-in-chat.d.ts.map +1 -1
  102. package/dist/esm/components/ai-elements/meta/open-in-chat.labels.d.ts.map +1 -1
  103. package/dist/esm/components/ai-elements/shared/loader.d.ts.map +1 -1
  104. package/dist/esm/components/ai-elements/shared/loader.labels.d.ts.map +1 -1
  105. package/dist/esm/components/ai-elements/shared/shimmer.d.ts.map +1 -1
  106. package/dist/esm/components/ai-elements/shared/shimmer.labels.d.ts.map +1 -1
  107. package/dist/esm/components/ai-elements/stream/execution-stream.d.ts.map +1 -1
  108. package/dist/esm/components/ai-elements/stream/execution-stream.labels.d.ts.map +1 -1
  109. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts +6 -0
  110. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts.map +1 -1
  111. package/dist/esm/components/ai-elements/trace/chain-of-thought.js +13 -1
  112. package/dist/esm/components/ai-elements/trace/chain-of-thought.js.map +1 -1
  113. package/dist/esm/components/ai-elements/trace/chain-of-thought.labels.d.ts.map +1 -1
  114. package/dist/esm/components/ai-elements/trace/checkpoint.d.ts.map +1 -1
  115. package/dist/esm/components/ai-elements/trace/checkpoint.labels.d.ts.map +1 -1
  116. package/dist/esm/components/ai-elements/trace/inline-citation.d.ts.map +1 -1
  117. package/dist/esm/components/ai-elements/trace/inline-citation.labels.d.ts.map +1 -1
  118. package/dist/esm/components/ai-elements/trace/plan.d.ts.map +1 -1
  119. package/dist/esm/components/ai-elements/trace/plan.labels.d.ts.map +1 -1
  120. package/dist/esm/components/ai-elements/trace/reasoning.d.ts.map +1 -1
  121. package/dist/esm/components/ai-elements/trace/reasoning.labels.d.ts.map +1 -1
  122. package/dist/esm/components/app/app-layout-consent-gate.d.ts +23 -0
  123. package/dist/esm/components/app/app-layout-consent-gate.d.ts.map +1 -0
  124. package/dist/esm/components/app/app-layout-consent-gate.js +133 -0
  125. package/dist/esm/components/app/app-layout-consent-gate.js.map +1 -0
  126. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts +19 -0
  127. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts.map +1 -0
  128. package/dist/esm/components/app/app-layout-document-acceptance-gate.js +56 -0
  129. package/dist/esm/components/app/app-layout-document-acceptance-gate.js.map +1 -0
  130. package/dist/esm/components/app/app-layout-main-container.d.ts +9 -0
  131. package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
  132. package/dist/esm/components/app/app-layout-main-container.js +17 -23
  133. package/dist/esm/components/app/app-layout-main-container.js.map +1 -1
  134. package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
  135. package/dist/esm/components/app/app-layout-main-container.labels.js +48 -0
  136. package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
  137. package/dist/esm/components/app/public-layout-main-container.d.ts +1 -1
  138. package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
  139. package/dist/esm/components/app/public-layout-main-container.js +9 -8
  140. package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
  141. package/dist/esm/components/app/public-layout-main-container.labels.d.ts.map +1 -1
  142. package/dist/esm/components/app/public-layout-terms.d.ts +46 -0
  143. package/dist/esm/components/app/public-layout-terms.d.ts.map +1 -0
  144. package/dist/esm/components/app/public-layout-terms.js +137 -0
  145. package/dist/esm/components/app/public-layout-terms.js.map +1 -0
  146. package/dist/esm/components/billing/billing-format.utils.d.ts.map +1 -1
  147. package/dist/esm/components/billing/billing-invoice-history.d.ts +1 -1
  148. package/dist/esm/components/billing/billing-invoice-history.d.ts.map +1 -1
  149. package/dist/esm/components/billing/billing-invoice-history.js +3 -1
  150. package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
  151. package/dist/esm/components/billing/billing-invoice-history.labels.d.ts.map +1 -1
  152. package/dist/esm/components/billing/billing-invoice-history.labels.js +1 -0
  153. package/dist/esm/components/billing/billing-invoice-history.labels.js.map +1 -1
  154. package/dist/esm/components/billing/billing-plan-change-preview.d.ts +5 -0
  155. package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -0
  156. package/dist/esm/components/billing/billing-plan-change-preview.js +25 -0
  157. package/dist/esm/components/billing/billing-plan-change-preview.js.map +1 -0
  158. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts +3 -0
  159. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts.map +1 -0
  160. package/dist/esm/components/billing/billing-plan-change-preview.labels.js +22 -0
  161. package/dist/esm/components/billing/billing-plan-change-preview.labels.js.map +1 -0
  162. package/dist/esm/components/billing/billing-portal-link.d.ts +1 -1
  163. package/dist/esm/components/billing/billing-portal-link.d.ts.map +1 -1
  164. package/dist/esm/components/billing/billing-portal-link.js +3 -1
  165. package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
  166. package/dist/esm/components/billing/billing-portal-link.labels.d.ts.map +1 -1
  167. package/dist/esm/components/billing/billing-portal-link.labels.js +1 -0
  168. package/dist/esm/components/billing/billing-portal-link.labels.js.map +1 -1
  169. package/dist/esm/components/billing/billing-pricing-table.d.ts +1 -1
  170. package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
  171. package/dist/esm/components/billing/billing-pricing-table.js +10 -4
  172. package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
  173. package/dist/esm/components/billing/billing-pricing-table.labels.d.ts.map +1 -1
  174. package/dist/esm/components/billing/billing-pricing-table.labels.js +8 -1
  175. package/dist/esm/components/billing/billing-pricing-table.labels.js.map +1 -1
  176. package/dist/esm/components/billing/billing-subscription-status.d.ts +1 -1
  177. package/dist/esm/components/billing/billing-subscription-status.d.ts.map +1 -1
  178. package/dist/esm/components/billing/billing-subscription-status.js +3 -1
  179. package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
  180. package/dist/esm/components/billing/billing-subscription-status.labels.d.ts.map +1 -1
  181. package/dist/esm/components/billing/billing-subscription-status.labels.js +1 -0
  182. package/dist/esm/components/billing/billing-subscription-status.labels.js.map +1 -1
  183. package/dist/esm/components/billing/billing-usage-dashboard.d.ts +1 -1
  184. package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
  185. package/dist/esm/components/billing/billing-usage-dashboard.js +10 -7
  186. package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
  187. package/dist/esm/components/billing/billing-usage-dashboard.labels.d.ts.map +1 -1
  188. package/dist/esm/components/billing/billing-usage-dashboard.labels.js +4 -1
  189. package/dist/esm/components/billing/billing-usage-dashboard.labels.js.map +1 -1
  190. package/dist/esm/components/data-display/avatar.d.ts.map +1 -1
  191. package/dist/esm/components/data-display/avatar.labels.d.ts.map +1 -1
  192. package/dist/esm/components/data-display/badge.d.ts.map +1 -1
  193. package/dist/esm/components/data-display/badge.js +16 -15
  194. package/dist/esm/components/data-display/badge.js.map +1 -1
  195. package/dist/esm/components/data-display/badge.labels.d.ts.map +1 -1
  196. package/dist/esm/components/data-display/description-list.d.ts +2 -1
  197. package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
  198. package/dist/esm/components/data-display/description-list.js +24 -8
  199. package/dist/esm/components/data-display/description-list.js.map +1 -1
  200. package/dist/esm/components/data-display/description-list.labels.d.ts.map +1 -1
  201. package/dist/esm/components/data-display/duration.d.ts +15 -0
  202. package/dist/esm/components/data-display/duration.d.ts.map +1 -0
  203. package/dist/esm/components/data-display/duration.js +50 -0
  204. package/dist/esm/components/data-display/duration.js.map +1 -0
  205. package/dist/esm/components/data-display/duration.labels.d.ts +15 -0
  206. package/dist/esm/components/data-display/duration.labels.d.ts.map +1 -0
  207. package/dist/esm/components/data-display/duration.labels.js +35 -0
  208. package/dist/esm/components/data-display/duration.labels.js.map +1 -0
  209. package/dist/esm/components/data-display/formatters/display-field-address.d.ts +21 -0
  210. package/dist/esm/components/data-display/formatters/display-field-address.d.ts.map +1 -0
  211. package/dist/esm/components/data-display/formatters/display-field-address.js +75 -0
  212. package/dist/esm/components/data-display/formatters/display-field-address.js.map +1 -0
  213. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts +3 -0
  214. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts.map +1 -0
  215. package/dist/esm/components/data-display/formatters/display-field-address.labels.js +13 -0
  216. package/dist/esm/components/data-display/formatters/display-field-address.labels.js.map +1 -0
  217. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.d.ts.map +1 -1
  218. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js +6 -2
  219. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js.map +1 -1
  220. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.labels.d.ts.map +1 -1
  221. package/dist/esm/components/data-display/formatters/display-field-boolean.d.ts.map +1 -1
  222. package/dist/esm/components/data-display/formatters/display-field-boolean.js +2 -2
  223. package/dist/esm/components/data-display/formatters/display-field-boolean.js.map +1 -1
  224. package/dist/esm/components/data-display/formatters/display-field-boolean.labels.d.ts.map +1 -1
  225. package/dist/esm/components/data-display/formatters/display-field-code.d.ts.map +1 -1
  226. package/dist/esm/components/data-display/formatters/display-field-code.js +2 -2
  227. package/dist/esm/components/data-display/formatters/display-field-code.js.map +1 -1
  228. package/dist/esm/components/data-display/formatters/display-field-code.labels.d.ts.map +1 -1
  229. package/dist/esm/components/data-display/formatters/display-field-date.d.ts +3 -3
  230. package/dist/esm/components/data-display/formatters/display-field-date.d.ts.map +1 -1
  231. package/dist/esm/components/data-display/formatters/display-field-date.js +17 -4
  232. package/dist/esm/components/data-display/formatters/display-field-date.js.map +1 -1
  233. package/dist/esm/components/data-display/formatters/display-field-date.labels.d.ts.map +1 -1
  234. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts +3 -3
  235. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts.map +1 -1
  236. package/dist/esm/components/data-display/formatters/display-field-datetime.js +17 -4
  237. package/dist/esm/components/data-display/formatters/display-field-datetime.js.map +1 -1
  238. package/dist/esm/components/data-display/formatters/display-field-datetime.labels.d.ts.map +1 -1
  239. package/dist/esm/components/data-display/formatters/display-field-duration.d.ts.map +1 -1
  240. package/dist/esm/components/data-display/formatters/display-field-duration.labels.d.ts.map +1 -1
  241. package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
  242. package/dist/esm/components/data-display/formatters/display-field-enum.js +29 -11
  243. package/dist/esm/components/data-display/formatters/display-field-enum.js.map +1 -1
  244. package/dist/esm/components/data-display/formatters/display-field-enum.labels.d.ts.map +1 -1
  245. package/dist/esm/components/data-display/formatters/display-field-file-audio.d.ts.map +1 -1
  246. package/dist/esm/components/data-display/formatters/display-field-file-audio.js +2 -1
  247. package/dist/esm/components/data-display/formatters/display-field-file-audio.js.map +1 -1
  248. package/dist/esm/components/data-display/formatters/display-field-file-audio.labels.d.ts.map +1 -1
  249. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts +4 -1
  250. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts.map +1 -1
  251. package/dist/esm/components/data-display/formatters/display-field-file-document.js +18 -5
  252. package/dist/esm/components/data-display/formatters/display-field-file-document.js.map +1 -1
  253. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.d.ts.map +1 -1
  254. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js +20 -0
  255. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js.map +1 -1
  256. package/dist/esm/components/data-display/formatters/display-field-file-gallery.d.ts.map +1 -1
  257. package/dist/esm/components/data-display/formatters/display-field-file-gallery.labels.d.ts.map +1 -1
  258. package/dist/esm/components/data-display/formatters/display-field-file-image.d.ts.map +1 -1
  259. package/dist/esm/components/data-display/formatters/display-field-file-image.js +3 -1
  260. package/dist/esm/components/data-display/formatters/display-field-file-image.js.map +1 -1
  261. package/dist/esm/components/data-display/formatters/display-field-file-image.labels.d.ts.map +1 -1
  262. package/dist/esm/components/data-display/formatters/display-field-file-video.d.ts.map +1 -1
  263. package/dist/esm/components/data-display/formatters/display-field-file-video.labels.d.ts.map +1 -1
  264. package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
  265. package/dist/esm/components/data-display/formatters/display-field-file.js +14 -15
  266. package/dist/esm/components/data-display/formatters/display-field-file.js.map +1 -1
  267. package/dist/esm/components/data-display/formatters/display-field-file.labels.d.ts.map +1 -1
  268. package/dist/esm/components/data-display/formatters/display-field-file.labels.js +2 -0
  269. package/dist/esm/components/data-display/formatters/display-field-file.labels.js.map +1 -1
  270. package/dist/esm/components/data-display/formatters/display-field-format.utils.d.ts.map +1 -1
  271. package/dist/esm/components/data-display/formatters/display-field-i18n.utils.d.ts.map +1 -1
  272. package/dist/esm/components/data-display/formatters/display-field-money.d.ts.map +1 -1
  273. package/dist/esm/components/data-display/formatters/display-field-money.labels.d.ts.map +1 -1
  274. package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
  275. package/dist/esm/components/data-display/formatters/display-field-number.js +8 -3
  276. package/dist/esm/components/data-display/formatters/display-field-number.js.map +1 -1
  277. package/dist/esm/components/data-display/formatters/display-field-number.labels.d.ts.map +1 -1
  278. package/dist/esm/components/data-display/formatters/display-field-number.labels.js +5 -2
  279. package/dist/esm/components/data-display/formatters/display-field-number.labels.js.map +1 -1
  280. package/dist/esm/components/data-display/formatters/display-field-phone.d.ts.map +1 -1
  281. package/dist/esm/components/data-display/formatters/display-field-phone.labels.d.ts.map +1 -1
  282. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.d.ts.map +1 -1
  283. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.labels.d.ts.map +1 -1
  284. package/dist/esm/components/data-display/formatters/display-field-range-date.d.ts.map +1 -1
  285. package/dist/esm/components/data-display/formatters/display-field-range-date.labels.d.ts.map +1 -1
  286. package/dist/esm/components/data-display/formatters/display-field-range-datetime.d.ts.map +1 -1
  287. package/dist/esm/components/data-display/formatters/display-field-range-datetime.labels.d.ts.map +1 -1
  288. package/dist/esm/components/data-display/formatters/display-field-range-money.d.ts.map +1 -1
  289. package/dist/esm/components/data-display/formatters/display-field-range-money.labels.d.ts.map +1 -1
  290. package/dist/esm/components/data-display/formatters/display-field-range-number.d.ts.map +1 -1
  291. package/dist/esm/components/data-display/formatters/display-field-range-number.labels.d.ts.map +1 -1
  292. package/dist/esm/components/data-display/formatters/display-field-range-time.d.ts.map +1 -1
  293. package/dist/esm/components/data-display/formatters/display-field-range-time.labels.d.ts.map +1 -1
  294. package/dist/esm/components/data-display/formatters/display-field-string.d.ts +1 -1
  295. package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
  296. package/dist/esm/components/data-display/formatters/display-field-string.js +129 -15
  297. package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
  298. package/dist/esm/components/data-display/formatters/display-field-string.labels.d.ts.map +1 -1
  299. package/dist/esm/components/data-display/formatters/display-field-time.d.ts.map +1 -1
  300. package/dist/esm/components/data-display/formatters/display-field-time.labels.d.ts.map +1 -1
  301. package/dist/esm/components/data-display/identifier.d.ts +19 -0
  302. package/dist/esm/components/data-display/identifier.d.ts.map +1 -0
  303. package/dist/esm/components/data-display/identifier.js +21 -0
  304. package/dist/esm/components/data-display/identifier.js.map +1 -0
  305. package/dist/esm/components/data-display/kbd.d.ts +17 -0
  306. package/dist/esm/components/data-display/kbd.d.ts.map +1 -0
  307. package/dist/esm/components/data-display/kbd.js +18 -0
  308. package/dist/esm/components/data-display/kbd.js.map +1 -0
  309. package/dist/esm/components/data-display/markdown-content.d.ts.map +1 -1
  310. package/dist/esm/components/data-display/markdown-stream-runtime.d.ts.map +1 -1
  311. package/dist/esm/components/data-display/markdown-stream.lazy.d.ts.map +1 -1
  312. package/dist/esm/components/data-display/markdown-stream.lazy.js +13 -2
  313. package/dist/esm/components/data-display/markdown-stream.lazy.js.map +1 -1
  314. package/dist/esm/components/data-display/notification-indicator.d.ts.map +1 -1
  315. package/dist/esm/components/data-display/notification-indicator.js +3 -11
  316. package/dist/esm/components/data-display/notification-indicator.js.map +1 -1
  317. package/dist/esm/components/data-display/notification-indicator.labels.d.ts.map +1 -1
  318. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts +63 -0
  319. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts.map +1 -0
  320. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js +75 -0
  321. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js.map +1 -0
  322. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts +32 -0
  323. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts.map +1 -0
  324. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js +36 -0
  325. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js.map +1 -0
  326. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts +46 -6
  327. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  328. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js +70 -46
  329. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js.map +1 -1
  330. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts +12 -2
  331. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts.map +1 -1
  332. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js +3 -2
  333. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js.map +1 -1
  334. package/dist/esm/components/data-display/timeline.d.ts +3 -0
  335. package/dist/esm/components/data-display/timeline.d.ts.map +1 -0
  336. package/dist/esm/components/data-display/timeline.js +92 -0
  337. package/dist/esm/components/data-display/timeline.js.map +1 -0
  338. package/dist/esm/components/data-display/untrusted-html-content.d.ts +55 -0
  339. package/dist/esm/components/data-display/untrusted-html-content.d.ts.map +1 -0
  340. package/dist/esm/components/data-display/untrusted-html-content.js +67 -0
  341. package/dist/esm/components/data-display/untrusted-html-content.js.map +1 -0
  342. package/dist/esm/components/feedback/celebration-overlay.d.ts +13 -4
  343. package/dist/esm/components/feedback/celebration-overlay.d.ts.map +1 -1
  344. package/dist/esm/components/feedback/celebration-overlay.js +146 -22
  345. package/dist/esm/components/feedback/celebration-overlay.js.map +1 -1
  346. package/dist/esm/components/feedback/celebration-overlay.labels.d.ts.map +1 -1
  347. package/dist/esm/components/feedback/danger-zone.d.ts.map +1 -1
  348. package/dist/esm/components/feedback/danger-zone.labels.d.ts.map +1 -1
  349. package/dist/esm/components/feedback/empty-state.d.ts.map +1 -1
  350. package/dist/esm/components/feedback/empty-state.js.map +1 -1
  351. package/dist/esm/components/feedback/empty-state.labels.d.ts.map +1 -1
  352. package/dist/esm/components/feedback/error-display.d.ts.map +1 -1
  353. package/dist/esm/components/feedback/error-display.labels.d.ts.map +1 -1
  354. package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
  355. package/dist/esm/components/feedback/features/feature-limit-indicator.labels.d.ts.map +1 -1
  356. package/dist/esm/components/feedback/features/feature-lock-badge.d.ts.map +1 -1
  357. package/dist/esm/components/feedback/features/feature-lock-badge.labels.d.ts.map +1 -1
  358. package/dist/esm/components/feedback/features/feature-unavailable-dialog.d.ts.map +1 -1
  359. package/dist/esm/components/feedback/features/feature-unavailable-dialog.labels.d.ts.map +1 -1
  360. package/dist/esm/components/feedback/features/feature-unavailable-prompt.d.ts.map +1 -1
  361. package/dist/esm/components/feedback/features/feature-unavailable-prompt.js.map +1 -1
  362. package/dist/esm/components/feedback/features/feature-unavailable-prompt.labels.d.ts.map +1 -1
  363. package/dist/esm/components/feedback/loading-overlay.d.ts.map +1 -1
  364. package/dist/esm/components/feedback/loading-overlay.labels.d.ts.map +1 -1
  365. package/dist/esm/components/feedback/loading-spinner.d.ts.map +1 -1
  366. package/dist/esm/components/feedback/loading-spinner.labels.d.ts.map +1 -1
  367. package/dist/esm/components/feedback/notification-center.d.ts.map +1 -1
  368. package/dist/esm/components/feedback/notification-center.js +5 -5
  369. package/dist/esm/components/feedback/notification-center.js.map +1 -1
  370. package/dist/esm/components/feedback/operations-confirm-critical.d.ts +1 -1
  371. package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
  372. package/dist/esm/components/feedback/operations-confirm-critical.js +9 -7
  373. package/dist/esm/components/feedback/operations-confirm-critical.js.map +1 -1
  374. package/dist/esm/components/feedback/operations-confirm-critical.labels.d.ts.map +1 -1
  375. package/dist/esm/components/feedback/progress.d.ts.map +1 -1
  376. package/dist/esm/components/feedback/progress.labels.d.ts.map +1 -1
  377. package/dist/esm/components/feedback/skeleton.d.ts.map +1 -1
  378. package/dist/esm/components/feedback/skeleton.labels.d.ts.map +1 -1
  379. package/dist/esm/components/feedback/toast.d.ts.map +1 -1
  380. package/dist/esm/components/feedback/toast.labels.d.ts.map +1 -1
  381. package/dist/esm/components/form/autosave-indicator.d.ts.map +1 -1
  382. package/dist/esm/components/form/autosave-indicator.labels.d.ts.map +1 -1
  383. package/dist/esm/components/form/chromes/field.d.ts.map +1 -1
  384. package/dist/esm/components/form/chromes/field.js +11 -3
  385. package/dist/esm/components/form/chromes/field.js.map +1 -1
  386. package/dist/esm/components/form/chromes/field.labels.d.ts.map +1 -1
  387. package/dist/esm/components/form/chromes/form-primitive.d.ts.map +1 -1
  388. package/dist/esm/components/form/chromes/form-primitive.labels.d.ts.map +1 -1
  389. package/dist/esm/components/form/chromes/form-primitive.labels.js +37 -0
  390. package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
  391. package/dist/esm/components/form/combobox.d.ts.map +1 -1
  392. package/dist/esm/components/form/combobox.js +14 -13
  393. package/dist/esm/components/form/combobox.js.map +1 -1
  394. package/dist/esm/components/form/combobox.labels.d.ts.map +1 -1
  395. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts +42 -0
  396. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts.map +1 -0
  397. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js +120 -0
  398. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js.map +1 -0
  399. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts +16 -0
  400. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts.map +1 -0
  401. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js +8 -0
  402. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js.map +1 -0
  403. package/dist/esm/components/form/controls/boolean/checkbox.d.ts.map +1 -1
  404. package/dist/esm/components/form/controls/boolean/checkbox.js +2 -2
  405. package/dist/esm/components/form/controls/boolean/checkbox.js.map +1 -1
  406. package/dist/esm/components/form/controls/boolean/checkbox.labels.d.ts.map +1 -1
  407. package/dist/esm/components/form/controls/boolean/switch.d.ts.map +1 -1
  408. package/dist/esm/components/form/controls/boolean/switch.labels.d.ts.map +1 -1
  409. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.d.ts.map +1 -1
  410. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.labels.d.ts.map +1 -1
  411. package/dist/esm/components/form/controls/boolean/toggle.d.ts.map +1 -1
  412. package/dist/esm/components/form/controls/boolean/toggle.labels.d.ts.map +1 -1
  413. package/dist/esm/components/form/controls/code-editor/cm6-editor-appearance.d.ts.map +1 -1
  414. package/dist/esm/components/form/controls/code-editor/cm6-editor.d.ts.map +1 -1
  415. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.d.ts.map +1 -1
  416. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js +11 -2
  417. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js.map +1 -1
  418. package/dist/esm/components/form/controls/code-editor/form-field-code.d.ts.map +1 -1
  419. package/dist/esm/components/form/controls/code-editor/markdown-editor.d.ts.map +1 -1
  420. package/dist/esm/components/form/controls/date-time/calendar.d.ts.map +1 -1
  421. package/dist/esm/components/form/controls/date-time/calendar.labels.d.ts.map +1 -1
  422. package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
  423. package/dist/esm/components/form/controls/date-time/date-range-picker.labels.d.ts.map +1 -1
  424. package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
  425. package/dist/esm/components/form/controls/date-time/datepicker.labels.d.ts.map +1 -1
  426. package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
  427. package/dist/esm/components/form/controls/date-time/datetime-picker.labels.d.ts.map +1 -1
  428. package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
  429. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.d.ts.map +1 -1
  430. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js +11 -2
  431. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js.map +1 -1
  432. package/dist/esm/components/form/controls/date-time/time-picker.d.ts.map +1 -1
  433. package/dist/esm/components/form/controls/date-time/time-picker.labels.d.ts.map +1 -1
  434. package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
  435. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.d.ts.map +1 -1
  436. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js +11 -2
  437. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js.map +1 -1
  438. package/dist/esm/components/form/controls/enum/radio.d.ts +1 -1
  439. package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
  440. package/dist/esm/components/form/controls/enum/radio.js +13 -12
  441. package/dist/esm/components/form/controls/enum/radio.js.map +1 -1
  442. package/dist/esm/components/form/controls/enum/radio.labels.d.ts.map +1 -1
  443. package/dist/esm/components/form/controls/enum/select-multiple.d.ts.map +1 -1
  444. package/dist/esm/components/form/controls/enum/select-multiple.js +5 -3
  445. package/dist/esm/components/form/controls/enum/select-multiple.js.map +1 -1
  446. package/dist/esm/components/form/controls/enum/select-multiple.labels.d.ts.map +1 -1
  447. package/dist/esm/components/form/controls/enum/select.d.ts.map +1 -1
  448. package/dist/esm/components/form/controls/enum/select.labels.d.ts.map +1 -1
  449. package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
  450. package/dist/esm/components/form/controls/enum/toggle-group.js +96 -5
  451. package/dist/esm/components/form/controls/enum/toggle-group.js.map +1 -1
  452. package/dist/esm/components/form/controls/enum/toggle-group.labels.d.ts.map +1 -1
  453. package/dist/esm/components/form/controls/file/file-upload.d.ts.map +1 -1
  454. package/dist/esm/components/form/controls/file/file-upload.labels.d.ts.map +1 -1
  455. package/dist/esm/components/form/controls/file/image-crop.d.ts.map +1 -1
  456. package/dist/esm/components/form/controls/file/image-crop.labels.d.ts.map +1 -1
  457. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts +44 -0
  458. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts.map +1 -0
  459. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js +137 -0
  460. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js.map +1 -0
  461. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts +22 -0
  462. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts.map +1 -0
  463. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js +27 -0
  464. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js.map +1 -0
  465. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts +3 -1
  466. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts.map +1 -1
  467. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js +3 -1
  468. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js.map +1 -1
  469. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts +6 -0
  470. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts.map +1 -1
  471. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js +8 -1
  472. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js.map +1 -1
  473. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts +6 -2
  474. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts.map +1 -1
  475. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js +6 -2
  476. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js.map +1 -1
  477. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts +6 -0
  478. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts.map +1 -1
  479. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js +8 -1
  480. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js.map +1 -1
  481. package/dist/esm/components/form/controls/input-group.d.ts.map +1 -1
  482. package/dist/esm/components/form/controls/input-group.labels.d.ts.map +1 -1
  483. package/dist/esm/components/form/controls/input.d.ts.map +1 -1
  484. package/dist/esm/components/form/controls/input.labels.d.ts.map +1 -1
  485. package/dist/esm/components/form/controls/number/slider.d.ts.map +1 -1
  486. package/dist/esm/components/form/controls/number/slider.labels.d.ts.map +1 -1
  487. package/dist/esm/components/form/controls/number/slider.labels.js +9 -2
  488. package/dist/esm/components/form/controls/number/slider.labels.js.map +1 -1
  489. package/dist/esm/components/form/controls/string/color-input.d.ts.map +1 -1
  490. package/dist/esm/components/form/controls/string/color-input.labels.d.ts.map +1 -1
  491. package/dist/esm/components/form/controls/string/color-picker-surface.d.ts.map +1 -1
  492. package/dist/esm/components/form/controls/string/color-picker-surface.js.map +1 -1
  493. package/dist/esm/components/form/controls/string/inline-edit-text.d.ts.map +1 -1
  494. package/dist/esm/components/form/controls/string/input-otp.d.ts.map +1 -1
  495. package/dist/esm/components/form/controls/string/input-otp.labels.d.ts.map +1 -1
  496. package/dist/esm/components/form/controls/string/password-input.d.ts.map +1 -1
  497. package/dist/esm/components/form/controls/string/password-input.labels.d.ts.map +1 -1
  498. package/dist/esm/components/form/controls/string/password-input.labels.js +9 -2
  499. package/dist/esm/components/form/controls/string/password-input.labels.js.map +1 -1
  500. package/dist/esm/components/form/controls/string/textarea.d.ts.map +1 -1
  501. package/dist/esm/components/form/controls/string/textarea.labels.d.ts.map +1 -1
  502. package/dist/esm/components/layout/aspect-ratio.d.ts.map +1 -1
  503. package/dist/esm/components/layout/aspect-ratio.labels.d.ts.map +1 -1
  504. package/dist/esm/components/layout/carousel.d.ts.map +1 -1
  505. package/dist/esm/components/layout/carousel.labels.d.ts.map +1 -1
  506. package/dist/esm/components/layout/divider.d.ts.map +1 -1
  507. package/dist/esm/components/layout/divider.labels.d.ts.map +1 -1
  508. package/dist/esm/components/layout/resizable.d.ts.map +1 -1
  509. package/dist/esm/components/layout/resizable.labels.d.ts.map +1 -1
  510. package/dist/esm/components/layout/scroll-area.d.ts.map +1 -1
  511. package/dist/esm/components/layout/scroll-area.labels.d.ts.map +1 -1
  512. package/dist/esm/components/layout/separator.d.ts.map +1 -1
  513. package/dist/esm/components/layout/separator.labels.d.ts.map +1 -1
  514. package/dist/esm/components/navigation/app-level/activity-bar.d.ts.map +1 -1
  515. package/dist/esm/components/navigation/app-level/activity-bar.js +2 -2
  516. package/dist/esm/components/navigation/app-level/activity-bar.js.map +1 -1
  517. package/dist/esm/components/navigation/app-level/activity-bar.labels.d.ts.map +1 -1
  518. package/dist/esm/components/navigation/app-level/command-menu.d.ts.map +1 -1
  519. package/dist/esm/components/navigation/app-level/command-menu.js +2 -2
  520. package/dist/esm/components/navigation/app-level/command-menu.js.map +1 -1
  521. package/dist/esm/components/navigation/app-level/command-menu.labels.d.ts.map +1 -1
  522. package/dist/esm/components/navigation/app-level/control-panel.d.ts.map +1 -1
  523. package/dist/esm/components/navigation/app-level/control-panel.labels.d.ts.map +1 -1
  524. package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
  525. package/dist/esm/components/navigation/app-level/menu-user-org.js +10 -4
  526. package/dist/esm/components/navigation/app-level/menu-user-org.js.map +1 -1
  527. package/dist/esm/components/navigation/app-level/menu-user-org.labels.d.ts.map +1 -1
  528. package/dist/esm/components/navigation/app-level/menu-user-org.labels.js +7 -0
  529. package/dist/esm/components/navigation/app-level/menu-user-org.labels.js.map +1 -1
  530. package/dist/esm/components/navigation/app-level/menubar.d.ts.map +1 -1
  531. package/dist/esm/components/navigation/app-level/menubar.js +36 -14
  532. package/dist/esm/components/navigation/app-level/menubar.js.map +1 -1
  533. package/dist/esm/components/navigation/app-level/menubar.labels.d.ts.map +1 -1
  534. package/dist/esm/components/navigation/app-level/navigation-back.d.ts.map +1 -1
  535. package/dist/esm/components/navigation/app-level/navigation-back.js +31 -5
  536. package/dist/esm/components/navigation/app-level/navigation-back.js.map +1 -1
  537. package/dist/esm/components/navigation/app-level/navigation-back.labels.d.ts.map +1 -1
  538. package/dist/esm/components/navigation/app-level/notification-center.d.ts.map +1 -1
  539. package/dist/esm/components/navigation/app-level/notification-center.js.map +1 -1
  540. package/dist/esm/components/navigation/app-level/notification-center.labels.d.ts.map +1 -1
  541. package/dist/esm/components/navigation/app-level/notification-center.labels.js +15 -0
  542. package/dist/esm/components/navigation/app-level/notification-center.labels.js.map +1 -1
  543. package/dist/esm/components/navigation/app-level/quick-action-button.d.ts.map +1 -1
  544. package/dist/esm/components/navigation/app-level/quick-action-button.labels.d.ts.map +1 -1
  545. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js +4 -0
  546. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js.map +1 -1
  547. package/dist/esm/components/navigation/app-level/quick-switcher.d.ts.map +1 -1
  548. package/dist/esm/components/navigation/app-level/quick-switcher.labels.d.ts.map +1 -1
  549. package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
  550. package/dist/esm/components/navigation/app-level/sidebar.js +41 -25
  551. package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
  552. package/dist/esm/components/navigation/app-level/sidebar.labels.d.ts.map +1 -1
  553. package/dist/esm/components/navigation/app-level/sidebar.labels.js +1 -0
  554. package/dist/esm/components/navigation/app-level/sidebar.labels.js.map +1 -1
  555. package/dist/esm/components/navigation/app-level/status-bar.d.ts.map +1 -1
  556. package/dist/esm/components/navigation/app-level/status-bar.js +2 -2
  557. package/dist/esm/components/navigation/app-level/status-bar.js.map +1 -1
  558. package/dist/esm/components/navigation/app-level/status-bar.labels.d.ts.map +1 -1
  559. package/dist/esm/components/navigation/app-level/toolbar.d.ts.map +1 -1
  560. package/dist/esm/components/navigation/app-level/toolbar.js +2 -2
  561. package/dist/esm/components/navigation/app-level/toolbar.js.map +1 -1
  562. package/dist/esm/components/navigation/app-level/toolbar.labels.d.ts.map +1 -1
  563. package/dist/esm/components/navigation/app-level/utility-panel.d.ts.map +1 -1
  564. package/dist/esm/components/navigation/app-level/utility-panel.js +24 -6
  565. package/dist/esm/components/navigation/app-level/utility-panel.js.map +1 -1
  566. package/dist/esm/components/navigation/app-level/utility-panel.labels.d.ts.map +1 -1
  567. package/dist/esm/components/navigation/app-level/utility-panel.labels.js.map +1 -1
  568. package/dist/esm/components/navigation/breadcrumb.d.ts.map +1 -1
  569. package/dist/esm/components/navigation/breadcrumb.js +1 -1
  570. package/dist/esm/components/navigation/breadcrumb.js.map +1 -1
  571. package/dist/esm/components/navigation/breadcrumb.labels.d.ts.map +1 -1
  572. package/dist/esm/components/navigation/command.d.ts.map +1 -1
  573. package/dist/esm/components/navigation/command.js +2 -2
  574. package/dist/esm/components/navigation/command.js.map +1 -1
  575. package/dist/esm/components/navigation/command.labels.d.ts.map +1 -1
  576. package/dist/esm/components/navigation/menu-bar.d.ts.map +1 -1
  577. package/dist/esm/components/navigation/menu-bar.labels.d.ts.map +1 -1
  578. package/dist/esm/components/navigation/navbar.d.ts.map +1 -1
  579. package/dist/esm/components/navigation/navbar.labels.d.ts.map +1 -1
  580. package/dist/esm/components/navigation/sidebar.d.ts.map +1 -1
  581. package/dist/esm/components/navigation/sidebar.labels.d.ts.map +1 -1
  582. package/dist/esm/components/overlays/containers/alert-dialog.d.ts.map +1 -1
  583. package/dist/esm/components/overlays/containers/alert-dialog.js +11 -1
  584. package/dist/esm/components/overlays/containers/alert-dialog.js.map +1 -1
  585. package/dist/esm/components/overlays/containers/alert-dialog.labels.d.ts.map +1 -1
  586. package/dist/esm/components/overlays/containers/alert.d.ts.map +1 -1
  587. package/dist/esm/components/overlays/containers/alert.labels.d.ts.map +1 -1
  588. package/dist/esm/components/overlays/containers/dialog.d.ts.map +1 -1
  589. package/dist/esm/components/overlays/containers/dialog.js +11 -1
  590. package/dist/esm/components/overlays/containers/dialog.js.map +1 -1
  591. package/dist/esm/components/overlays/containers/dialog.labels.d.ts.map +1 -1
  592. package/dist/esm/components/overlays/containers/drawer.d.ts.map +1 -1
  593. package/dist/esm/components/overlays/containers/drawer.labels.d.ts.map +1 -1
  594. package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
  595. package/dist/esm/components/overlays/containers/sheet.labels.d.ts.map +1 -1
  596. package/dist/esm/components/overlays/floating/context-menu.d.ts.map +1 -1
  597. package/dist/esm/components/overlays/floating/context-menu.labels.d.ts.map +1 -1
  598. package/dist/esm/components/overlays/floating/dropdown-menu.d.ts.map +1 -1
  599. package/dist/esm/components/overlays/floating/dropdown-menu.labels.d.ts.map +1 -1
  600. package/dist/esm/components/overlays/floating/hover-card.d.ts.map +1 -1
  601. package/dist/esm/components/overlays/floating/hover-card.labels.d.ts.map +1 -1
  602. package/dist/esm/components/overlays/floating/popover.d.ts.map +1 -1
  603. package/dist/esm/components/overlays/floating/popover.labels.d.ts.map +1 -1
  604. package/dist/esm/components/overlays/floating/tooltip.d.ts.map +1 -1
  605. package/dist/esm/components/overlays/floating/tooltip.labels.d.ts.map +1 -1
  606. package/dist/esm/components/sections/accordion.d.ts.map +1 -1
  607. package/dist/esm/components/sections/accordion.labels.d.ts.map +1 -1
  608. package/dist/esm/components/sections/card.d.ts.map +1 -1
  609. package/dist/esm/components/sections/card.js +71 -6
  610. package/dist/esm/components/sections/card.js.map +1 -1
  611. package/dist/esm/components/sections/card.labels.d.ts.map +1 -1
  612. package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
  613. package/dist/esm/components/sections/collapsible.labels.d.ts.map +1 -1
  614. package/dist/esm/components/sections/content-section.d.ts.map +1 -1
  615. package/dist/esm/components/sections/content-section.js +36 -6
  616. package/dist/esm/components/sections/content-section.js.map +1 -1
  617. package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -1
  618. package/dist/esm/components/sections/option-gesture.d.ts +15 -0
  619. package/dist/esm/components/sections/option-gesture.d.ts.map +1 -0
  620. package/dist/esm/components/sections/option-gesture.js +66 -0
  621. package/dist/esm/components/sections/option-gesture.js.map +1 -0
  622. package/dist/esm/components/sections/pagination.d.ts.map +1 -1
  623. package/dist/esm/components/sections/pagination.labels.d.ts.map +1 -1
  624. package/dist/esm/components/sections/stacked-layout.d.ts.map +1 -1
  625. package/dist/esm/components/sections/stacked-layout.labels.d.ts.map +1 -1
  626. package/dist/esm/components/sections/stepper.d.ts.map +1 -1
  627. package/dist/esm/components/sections/stepper.js +5 -3
  628. package/dist/esm/components/sections/stepper.js.map +1 -1
  629. package/dist/esm/components/sections/stepper.labels.d.ts.map +1 -1
  630. package/dist/esm/components/sections/table.d.ts.map +1 -1
  631. package/dist/esm/components/sections/table.labels.d.ts.map +1 -1
  632. package/dist/esm/components/sections/tabs.d.ts.map +1 -1
  633. package/dist/esm/components/sections/tabs.js +60 -15
  634. package/dist/esm/components/sections/tabs.js.map +1 -1
  635. package/dist/esm/components/sections/tabs.labels.d.ts.map +1 -1
  636. package/dist/esm/components/typography/heading.d.ts.map +1 -1
  637. package/dist/esm/components/typography/heading.labels.d.ts.map +1 -1
  638. package/dist/esm/components/typography/label.d.ts.map +1 -1
  639. package/dist/esm/components/typography/label.labels.d.ts.map +1 -1
  640. package/dist/esm/components/typography/link.d.ts.map +1 -1
  641. package/dist/esm/components/typography/link.js +9 -3
  642. package/dist/esm/components/typography/link.js.map +1 -1
  643. package/dist/esm/components/typography/link.labels.d.ts.map +1 -1
  644. package/dist/esm/components/typography/text.d.ts +1 -1
  645. package/dist/esm/components/typography/text.d.ts.map +1 -1
  646. package/dist/esm/components/typography/text.js +3 -2
  647. package/dist/esm/components/typography/text.js.map +1 -1
  648. package/dist/esm/components/typography/text.labels.d.ts.map +1 -1
  649. package/dist/esm/components/typography/truncated-text.d.ts.map +1 -1
  650. package/dist/esm/config/billing-shell.presets.d.ts.map +1 -1
  651. package/dist/esm/config/index.d.ts.map +1 -1
  652. package/dist/esm/config/preset-design-system.d.ts.map +1 -1
  653. package/dist/esm/config/preset-design-system.js +37 -60
  654. package/dist/esm/config/preset-design-system.js.map +1 -1
  655. package/dist/esm/config/preset-error-pages.d.ts.map +1 -1
  656. package/dist/esm/config/preset-kits.d.ts.map +1 -1
  657. package/dist/esm/config/preset-navigation.d.ts.map +1 -1
  658. package/dist/esm/config/preset-navigation.js +23 -7
  659. package/dist/esm/config/preset-navigation.js.map +1 -1
  660. package/dist/esm/config/preset-resources.d.ts.map +1 -1
  661. package/dist/esm/config/preset-shell.d.ts.map +1 -1
  662. package/dist/esm/config/preset-utils.d.ts.map +1 -1
  663. package/dist/esm/config/presets.d.ts.map +1 -1
  664. package/dist/esm/config/resources/agent-work.resource-presets.d.ts +4 -0
  665. package/dist/esm/config/resources/agent-work.resource-presets.d.ts.map +1 -0
  666. package/dist/esm/config/resources/agent-work.resource-presets.js +115 -0
  667. package/dist/esm/config/resources/agent-work.resource-presets.js.map +1 -0
  668. package/dist/esm/config/resources/api-key-rotation-window.d.ts +22 -0
  669. package/dist/esm/config/resources/api-key-rotation-window.d.ts.map +1 -0
  670. package/dist/esm/config/resources/api-key-rotation-window.js +45 -0
  671. package/dist/esm/config/resources/api-key-rotation-window.js.map +1 -0
  672. package/dist/esm/config/resources/application.resource-presets.d.ts +2 -0
  673. package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
  674. package/dist/esm/config/resources/application.resource-presets.js +268 -26
  675. package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
  676. package/dist/esm/config/resources/billing.resource-presets.d.ts +4 -3
  677. package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
  678. package/dist/esm/config/resources/billing.resource-presets.js +241 -111
  679. package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
  680. package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts +4 -0
  681. package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts.map +1 -0
  682. package/dist/esm/config/resources/conversation-threads.resource-presets.js +105 -0
  683. package/dist/esm/config/resources/conversation-threads.resource-presets.js.map +1 -0
  684. package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
  685. package/dist/esm/config/resources/guidance.resource-presets.js +39 -16
  686. package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
  687. package/dist/esm/config/resources/identity.resource-presets.d.ts +0 -13
  688. package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
  689. package/dist/esm/config/resources/identity.resource-presets.js +71 -17
  690. package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
  691. package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts +6 -0
  692. package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts.map +1 -0
  693. package/dist/esm/config/resources/inbound-deliveries.resource-presets.js +112 -0
  694. package/dist/esm/config/resources/inbound-deliveries.resource-presets.js.map +1 -0
  695. package/dist/esm/config/resources/inbound-email.resource-presets.d.ts +4 -0
  696. package/dist/esm/config/resources/inbound-email.resource-presets.d.ts.map +1 -0
  697. package/dist/esm/config/resources/inbound-email.resource-presets.js +182 -0
  698. package/dist/esm/config/resources/inbound-email.resource-presets.js.map +1 -0
  699. package/dist/esm/config/resources/index.d.ts.map +1 -1
  700. package/dist/esm/config/resources/index.js +9 -2
  701. package/dist/esm/config/resources/index.js.map +1 -1
  702. package/dist/esm/config/resources/legal-holds.resource-presets.d.ts +4 -0
  703. package/dist/esm/config/resources/legal-holds.resource-presets.d.ts.map +1 -0
  704. package/dist/esm/config/resources/legal-holds.resource-presets.js +76 -0
  705. package/dist/esm/config/resources/legal-holds.resource-presets.js.map +1 -0
  706. package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
  707. package/dist/esm/config/resources/organizations.resource-presets.js +216 -35
  708. package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
  709. package/dist/esm/config/resources/resource.config.utils.d.ts +20 -0
  710. package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
  711. package/dist/esm/config/resources/resource.config.utils.js +20 -0
  712. package/dist/esm/config/resources/resource.config.utils.js.map +1 -1
  713. package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts +5 -0
  714. package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts.map +1 -0
  715. package/dist/esm/config/resources/retention-enforcement.resource-presets.js +74 -0
  716. package/dist/esm/config/resources/retention-enforcement.resource-presets.js.map +1 -0
  717. package/dist/esm/config/resources/security.resource-presets.d.ts +11 -3
  718. package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
  719. package/dist/esm/config/resources/security.resource-presets.js +685 -99
  720. package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
  721. package/dist/esm/config/resources/service-providers.resource-presets.d.ts +4 -0
  722. package/dist/esm/config/resources/service-providers.resource-presets.d.ts.map +1 -0
  723. package/dist/esm/config/resources/service-providers.resource-presets.js +321 -0
  724. package/dist/esm/config/resources/service-providers.resource-presets.js.map +1 -0
  725. package/dist/esm/config/resources/webhooks.resource-presets.d.ts +4 -3
  726. package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
  727. package/dist/esm/config/resources/webhooks.resource-presets.js +102 -26
  728. package/dist/esm/config/resources/webhooks.resource-presets.js.map +1 -1
  729. package/dist/esm/index.d.ts +7 -1
  730. package/dist/esm/index.d.ts.map +1 -1
  731. package/dist/esm/index.js +7 -1
  732. package/dist/esm/index.js.map +1 -1
  733. package/dist/esm/lottie/lottie.content.definitions.d.ts.map +1 -1
  734. package/dist/esm/lottie/lottie.definitions.d.ts.map +1 -1
  735. package/dist/esm/mermaid-stub.d.ts.map +1 -1
  736. package/dist/esm/registration/register-common-enums.d.ts.map +1 -1
  737. package/dist/esm/registration/register-common-enums.js +63 -34
  738. package/dist/esm/registration/register-common-enums.js.map +1 -1
  739. package/dist/esm/registration/register-default-animations.d.ts.map +1 -1
  740. package/dist/esm/registration/register-default-icons.d.ts.map +1 -1
  741. package/dist/esm/registration/register-default-icons.js +3 -1
  742. package/dist/esm/registration/register-default-icons.js.map +1 -1
  743. package/dist/esm/registration/register-default-presets.d.ts.map +1 -1
  744. package/dist/esm/registration/register-default-presets.js +32 -4
  745. package/dist/esm/registration/register-default-presets.js.map +1 -1
  746. package/dist/esm/registration/register-provider-components.d.ts.map +1 -1
  747. package/dist/esm/registration/register-provider-components.js +11 -0
  748. package/dist/esm/registration/register-provider-components.js.map +1 -1
  749. package/dist/esm/shiki-subset.d.ts +11 -3
  750. package/dist/esm/shiki-subset.d.ts.map +1 -1
  751. package/dist/esm/shiki-subset.js +10 -2
  752. package/dist/esm/shiki-subset.js.map +1 -1
  753. package/dist/esm/theme-exports.d.ts.map +1 -1
  754. package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
  755. package/dist/esm/themes/cozy.theme.js +19 -5
  756. package/dist/esm/themes/cozy.theme.js.map +1 -1
  757. package/dist/esm/themes/dense.theme.d.ts.map +1 -1
  758. package/dist/esm/themes/dense.theme.js +76 -10
  759. package/dist/esm/themes/dense.theme.js.map +1 -1
  760. package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
  761. package/dist/esm/themes/editorial.theme.js +19 -5
  762. package/dist/esm/themes/editorial.theme.js.map +1 -1
  763. package/dist/esm/themes/glass.theme.d.ts.map +1 -1
  764. package/dist/esm/themes/glass.theme.js +5 -1
  765. package/dist/esm/themes/glass.theme.js.map +1 -1
  766. package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
  767. package/dist/esm/themes/neo-brutalist.theme.js +9 -2
  768. package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
  769. package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
  770. package/dist/esm/themes/terminal.theme.js +19 -5
  771. package/dist/esm/themes/terminal.theme.js.map +1 -1
  772. package/dist/esm/themes/trading.theme.d.ts.map +1 -1
  773. package/dist/esm/themes/trading.theme.js +22 -6
  774. package/dist/esm/themes/trading.theme.js.map +1 -1
  775. package/dist/tsconfig.build.tsbuildinfo +1 -1
  776. package/package.json +31 -45
  777. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts +0 -16
  778. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +0 -1
  779. package/dist/esm/components/form/controls/form-field-checkbox-group.js +0 -143
  780. package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-viewer.js","sourceRoot":"","sources":["../../../../../../src/components/data-display/pdf-viewer/pdf-viewer.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\n/**\n * PdfViewer — the PDF.js rendering core.\n *\n * ⚠ HEAVY MODULE — LAZY-BOUNDARY DISCIPLINE ⚠\n * This module (and everything only it depends on: `pdfjs-dist` and its worker) must\n * stay behind the dynamic-import boundary owned by `pdf-viewer.lazy.tsx`. NEVER\n * static-import this file from anywhere except that wrapper (tests may). A module\n * that is both statically and dynamically imported is MERGED into the static\n * importer's chunk by Rollup, with no warning — that is how the ECharts boundary\n * silently rotted. `pnpm check:lazy-boundaries` enforces this.\n *\n * ## Why PDF.js rather than the browser's viewer\n *\n * The previous document display embedded an `<iframe>` on the file URL, which hands\n * the page to the browser's built-in viewer: unstyleable (it ignores the design\n * system entirely), unmeasurable, and blocked outright by a strict `frame-src` CSP.\n * PDF.js renders into our own canvas, so the surrounding chrome is ours.\n *\n * ## Rendering model\n *\n * Pages rasterise to `<canvas>` at device pixel ratio, sequentially, into a plain\n * scroll container. Deliberately NOT virtualised in this first increment: a bounded\n * `maxPages` cap keeps a pathological 900-page document from freezing the tab, and\n * virtualisation can be added behind the same contract when a real document demands\n * it. `THUMBNAIL` presentation renders page 1 only — the cheapest useful signal.\n *\n * ## Worker\n *\n * PDF.js parses on a Web Worker. The URL is resolved through `import.meta.url` so\n * every bundler (the app's Vite, the site's Astro, the docs' Docusaurus) emits and\n * fingerprints it as an asset rather than fetching from a CDN — a CDN worker would\n * both leak document bytes' provenance and require a `worker-src` exception the CSP\n * pipeline should not have to make. The app's CSP must allow `worker-src 'self' blob:`.\n */\n\nimport * as React from \"react\"\nimport { cn, Text, Skeleton } from \"@wildo-ai/saas-frontend-lib\"\nimport * as pdfjs from \"pdfjs-dist\"\nimport type { PDFDocumentProxy } from \"pdfjs-dist\"\n\n// Same-origin, bundler-emitted worker (see the header note on CSP).\n//\n// ⚠️ TWO earlier attempts failed at RENDER time, not build time — which is why they\n// survived typecheck and the lazy-boundary guard. Both are recorded so the next\n// author does not walk back into them:\n//\n// 1. `new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url)` — `new URL()`\n// resolves only RELATIVE paths against the module URL; a bare package specifier\n// is not bundler-resolved, so the browser requested a path that does not exist\n// and pdf.js reported `Setting up fake worker failed`.\n// 2. `?url` + `GlobalWorkerOptions.workerSrc` — the URL resolved and the file was\n// served (200), but pdf.js instantiates a `workerSrc` string as a CLASSIC worker\n// while pdf.js 6 ships the worker as an ES module. The worker never completed its\n// handshake, so `getDocument()` hung forever with no error to show.\n//\n// `?worker` hands us a bundler-generated constructor that already carries the right\n// worker type, which removes the classic-vs-module question entirely. It is a Vite\n// asset-import suffix: Vite is what the generated application uses, and the\n// alternatives are worse (a relative path into `node_modules` breaks under any\n// hoisting layout; a CDN URL leaks document provenance and needs a `worker-src`\n// exception the CSP pipeline should not have to make). A non-Vite consumer must\n// supply its own worker — tracked as portability work, not papered over here.\n//\n// ONE port for the whole module, assigned to `GlobalWorkerOptions.workerPort`. A\n// per-instance `PDFWorker` was tried first out of a concurrency worry that does not\n// apply: the pdf.js worker multiplexes documents by id, so several viewers mounted at\n// once (a THUMBNAIL in a list plus an overlay, say) share it safely — and the shared\n// port also avoids spawning a worker per rendered thumbnail. The worker is created\n// when this module loads, which is already behind the lazy boundary.\n// @ts-expect-error -- `?worker` is a Vite asset-import suffix with no TS declaration.\nimport PdfJsWorker from 'pdfjs-dist/build/pdf.worker.min.mjs?worker'\n\npdfjs.GlobalWorkerOptions.workerPort = new PdfJsWorker()\n\n/** Hard cap on rasterised pages — a bound, not a product limit. */\nconst MAX_RENDERED_PAGES = 50\n\nexport interface PdfViewerProps {\n /** Bytes of the PDF. Fetched by the host over the authenticated serve route. */\n data: ArrayBuffer\n /** Render only the first page (THUMBNAIL presentation). */\n firstPageOnly?: boolean\n /** Target CSS width in px for a rendered page. Height follows the page aspect. */\n targetWidth?: number\n className?: string\n /** Accessible name for the rendered document region. */\n ariaLabel?: string\n}\n\nexport function PdfViewer({\n data,\n firstPageOnly = false,\n targetWidth,\n className,\n ariaLabel,\n}: PdfViewerProps): React.JSX.Element {\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const [pageCount, setPageCount] = React.useState<number | null>(null)\n const [error, setError] = React.useState<string | null>(null)\n const [rendering, setRendering] = React.useState(true)\n\n React.useEffect(() => {\n let cancelled = false\n let document_: PDFDocumentProxy | null = null\n let loadingTask: ReturnType<typeof pdfjs.getDocument> | null = null\n const container = containerRef.current\n if (!container) return\n\n // pdf.js TRANSFERS the buffer it is given, which would detach a caller-owned\n // ArrayBuffer and make a re-render (or a second consumer) read zero bytes.\n // Hand it a copy; the host keeps its own.\n const ownedData = data.slice(0)\n\n setRendering(true)\n setError(null)\n container.replaceChildren()\n\n void (async () => {\n try {\n loadingTask = pdfjs.getDocument({ data: ownedData })\n document_ = await loadingTask.promise\n if (cancelled) return\n setPageCount(document_.numPages)\n\n const lastPage = firstPageOnly ? 1 : Math.min(document_.numPages, MAX_RENDERED_PAGES)\n const dpr = typeof window !== 'undefined' ? (window.devicePixelRatio || 1) : 1\n\n for (let pageNumber = 1; pageNumber <= lastPage; pageNumber++) {\n if (cancelled) return\n const page = await document_.getPage(pageNumber)\n const unscaled = page.getViewport({ scale: 1 })\n // `??` would NOT rescue a ZERO width: `0 ?? fallback` is 0, and a container\n // that has not been laid out yet measures exactly 0 — which yields scale 0,\n // a 0x0 canvas, and a `page.render()` that never settles (observed live:\n // \"rendering page 1\" logged with no completion and a permanent skeleton).\n // Fall back on the page's own width whenever the measurement is unusable.\n const measuredWidth = targetWidth ?? container.clientWidth\n const width = measuredWidth && measuredWidth > 0 ? measuredWidth : unscaled.width\n const scale = width / unscaled.width\n const viewport = page.getViewport({ scale: scale * dpr })\n\n const canvas = window.document.createElement('canvas')\n canvas.width = Math.floor(viewport.width)\n canvas.height = Math.floor(viewport.height)\n // CSS size stays in layout px; the canvas is oversampled by DPR so text\n // is crisp on retina without the layout changing.\n canvas.style.width = `${Math.floor(viewport.width / dpr)}px`\n canvas.style.height = `${Math.floor(viewport.height / dpr)}px`\n canvas.className = 'mx-auto max-w-full rounded-md border border-border shadow-xs'\n canvas.setAttribute('role', 'img')\n canvas.setAttribute('aria-label', `Page ${pageNumber}`)\n\n // ATTACH BEFORE RENDERING. Rendering into a detached canvas and appending\n // afterwards left `page.render()` unsettled indefinitely (observed live:\n // \"rendering page 1\" with no completion). Attaching first also makes pages\n // appear progressively instead of all at once at the end.\n container.appendChild(canvas)\n\n // pdf.js 6 takes the CANVAS, not a 2D context: `canvasContext` is the legacy\n // parameter and its own typings state that using it requires `canvas` to be\n // explicitly null. Passing both (the first attempt here) is not a supported\n // combination and left the render promise unsettled.\n await page.render({ canvas, viewport }).promise\n if (cancelled) return\n }\n } catch (cause) {\n if (!cancelled) setError(cause instanceof Error ? cause.message : String(cause))\n } finally {\n if (!cancelled) setRendering(false)\n }\n })()\n\n return () => {\n cancelled = true\n // Do NOT call `loadingTask.destroy()`: with an externally-supplied worker port\n // that also destroys the SHARED worker, and React StrictMode's double-mount\n // then hits `PDFWorker.create - the worker is being destroyed` on the second\n // pass (observed live). Releasing the document's own worker-side resources is\n // what this component actually owns; the port outlives it by design.\n void document_?.cleanup()\n }\n }, [data, firstPageOnly, targetWidth])\n\n return (\n <div className={cn('w-full', className)} aria-label={ariaLabel} aria-busy={rendering || undefined}>\n {rendering && <Skeleton className=\"h-64 w-full\" aria-hidden=\"true\" />}\n {error && (\n <Text className=\"text-sm text-destructive\" role=\"alert\">{error}</Text>\n )}\n <div ref={containerRef} className=\"flex flex-col gap-item\" />\n {!firstPageOnly && pageCount !== null && pageCount > MAX_RENDERED_PAGES && (\n // Say what was NOT rendered rather than silently truncating — a document that\n // looks complete but is not is worse than an explicit bound.\n <Text className=\"mt-item text-xs text-muted-foreground\">\n {`Showing the first ${MAX_RENDERED_PAGES} of ${pageCount} pages.`}\n </Text>\n )}\n </div>\n )\n}\n\nexport default PdfViewer\n"]}
1
+ {"version":3,"file":"pdf-viewer.js","sourceRoot":"","sources":["../../../../../../src/components/data-display/pdf-viewer/pdf-viewer.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\n/**\n * PdfViewer — the PDF.js rendering core.\n *\n * ⚠ HEAVY MODULE — LAZY-BOUNDARY DISCIPLINE ⚠\n * This module (and everything only it depends on: `pdfjs-dist` and its worker) must\n * stay behind the dynamic-import boundary owned by `pdf-viewer.lazy.tsx`. NEVER\n * static-import this file from anywhere except that wrapper (tests may). A module\n * that is both statically and dynamically imported is MERGED into the static\n * importer's chunk by Rollup, with no warning — that is how the ECharts boundary\n * silently rotted. `pnpm check:lazy-boundaries` enforces this.\n *\n * ## Why PDF.js rather than the browser's viewer\n *\n * The previous document display embedded an `<iframe>` on the file URL, which hands\n * the page to the browser's built-in viewer: unstyleable (it ignores the design\n * system entirely), unmeasurable, and blocked outright by a strict `frame-src` CSP.\n * PDF.js renders into our own canvas, so the surrounding chrome is ours.\n *\n * ## Rendering model\n *\n * Pages rasterise to `<canvas>` at device pixel ratio, sequentially, into a plain\n * scroll container. Deliberately NOT virtualised in this first increment: a bounded\n * `maxPages` cap keeps a pathological 900-page document from freezing the tab, and\n * virtualisation can be added behind the same contract when a real document demands\n * it. `THUMBNAIL` presentation renders page 1 only — the cheapest useful signal.\n *\n * ## Worker\n *\n * PDF.js parses on a Web Worker. ONE port for the whole module, installed lazily on the\n * first render (`ensurePdfViewerWorkerPort`) and assigned to `GlobalWorkerOptions.workerPort`:\n * the pdf.js worker multiplexes documents by id, so several viewers mounted at once (a\n * THUMBNAIL in a list plus an overlay, say) share it safely, and the shared port avoids\n * spawning a worker per rendered thumbnail. A per-instance `PDFWorker` was tried first\n * out of a concurrency worry that does not apply.\n *\n * WHERE the worker comes from is the host's decision (issue #962, `pdf-viewer-worker.ts`):\n * a factory registered through `configurePdfViewerWorker` wins; otherwise the Vite default\n * in `pdf-viewer-worker.vite.ts` is imported — and only then, so a non-Vite bundler that\n * registered a factory never compiles the `?worker` import. The default is a same-origin\n * file URL, so the `SAAS_APP` CSP baseline needs nothing beyond `script-src 'self'`; the\n * cross-origin (CDN publish) case and its `worker-src blob:` note live with the seam.\n *\n * ## Text\n *\n * The viewer is label-agnostic: every string it shows or announces arrives resolved in\n * `labels` from its host, which owns the component's i18n catalog. A failure is shown\n * as the host's labelled message and the cause is logged — a raw pdf.js exception\n * message is developer text, not something to put in front of a reader.\n */\n\nimport * as React from \"react\"\nimport { cn, Text, Skeleton, LoggerFrontendService } from \"@wildo-ai/saas-frontend-lib\"\nimport * as pdfjs from \"pdfjs-dist\"\nimport type { PDFDocumentProxy } from \"pdfjs-dist\"\nimport { resolveConfiguredPdfViewerWorkerFactory } from \"./pdf-viewer-worker\"\n\nimport { describeCaughtError } from '@wildo-ai/saas-models';\nlet workerPortInstallation: Promise<void> | null = null\n\n/**\n * Install the module-wide worker port once, from the host's factory when one is registered and from\n * the Vite default otherwise (issue #962). Idempotent and memoised: every render awaits the same\n * installation, and a factory registered AFTER it is not consulted. The Vite module is reached\n * through a dynamic import that webpack is told not to follow (`webpackIgnore`), which is what keeps\n * its `?worker` specifier out of a non-Vite graph; a host on such a bundler that registered no\n * factory gets a rejected installation here — surfaced as the viewer's labelled failure with the\n * cause in the log, never a hang.\n */\nexport function ensurePdfViewerWorkerPort(): Promise<void> {\n if (workerPortInstallation === null) {\n workerPortInstallation = (async () => {\n const configured = resolveConfiguredPdfViewerWorkerFactory()\n const worker = configured\n ? configured()\n : (await import(/* webpackIgnore: true */ './pdf-viewer-worker.vite')).createViteDefaultPdfViewerWorker()\n pdfjs.GlobalWorkerOptions.workerPort = worker\n })().catch((cause: unknown) => {\n // A failed installation must not poison every later render: the next one asks again.\n workerPortInstallation = null\n throw cause\n })\n }\n return workerPortInstallation\n}\n\n/** Hard cap on rasterised pages — a bound, not a product limit. */\nconst MAX_RENDERED_PAGES = 50\n\nconst logger = LoggerFrontendService.getLogger()\n\n/**\n * Every string the viewer shows or announces, RESOLVED by the host. Functions where\n * the text carries a number, so the host's i18n interpolation — not this module —\n * decides word order.\n */\nexport interface PdfViewerLabels {\n /** Accessible name of one rendered page image. */\n page(pageNumber: number): string\n /** Notice under a document longer than the render cap. */\n pagesTruncated(shown: number, total: number): string\n /** Alert shown when the document cannot be rendered. */\n renderFailed: string\n}\n\nexport interface PdfViewerProps {\n /** Bytes of the PDF. Fetched by the host over the authenticated serve route. */\n data: ArrayBuffer\n /** Render only the first page (THUMBNAIL presentation). */\n firstPageOnly?: boolean\n /** Target CSS width in px for a rendered page. Height follows the page aspect. */\n targetWidth?: number\n className?: string\n /** Accessible name for the rendered document region. */\n ariaLabel?: string\n /** Resolved text. Required: the viewer invents no words of its own. */\n labels: PdfViewerLabels\n}\n\nexport function PdfViewer({\n data,\n firstPageOnly = false,\n targetWidth,\n className,\n ariaLabel,\n labels,\n}: PdfViewerProps): React.JSX.Element {\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const [pageCount, setPageCount] = React.useState<number | null>(null)\n const [renderFailed, setRenderFailed] = React.useState(false)\n const [rendering, setRendering] = React.useState(true)\n // Read through a ref inside the render effect: `labels.page` is a function the host\n // may recreate every render, and re-rasterising a whole document because a label\n // closure changed identity would be a visible flicker for no reason.\n const pageLabelRef = React.useRef(labels.page)\n pageLabelRef.current = labels.page\n\n React.useEffect(() => {\n let cancelled = false\n let document_: PDFDocumentProxy | null = null\n let loadingTask: ReturnType<typeof pdfjs.getDocument> | null = null\n const container = containerRef.current\n if (!container) return\n\n // pdf.js TRANSFERS the buffer it is given, which would detach a caller-owned\n // ArrayBuffer and make a re-render (or a second consumer) read zero bytes.\n // Hand it a copy; the host keeps its own.\n const ownedData = data.slice(0)\n\n setRendering(true)\n setRenderFailed(false)\n container.replaceChildren()\n\n void (async () => {\n try {\n await ensurePdfViewerWorkerPort()\n if (cancelled) return\n loadingTask = pdfjs.getDocument({ data: ownedData })\n document_ = await loadingTask.promise\n if (cancelled) return\n setPageCount(document_.numPages)\n\n const lastPage = firstPageOnly ? 1 : Math.min(document_.numPages, MAX_RENDERED_PAGES)\n const dpr = typeof window !== 'undefined' ? (window.devicePixelRatio || 1) : 1\n\n for (let pageNumber = 1; pageNumber <= lastPage; pageNumber++) {\n if (cancelled) return\n const page = await document_.getPage(pageNumber)\n const unscaled = page.getViewport({ scale: 1 })\n // `??` would NOT rescue a ZERO width: `0 ?? fallback` is 0, and a container\n // that has not been laid out yet measures exactly 0 — which yields scale 0,\n // a 0x0 canvas, and a `page.render()` that never settles (observed live:\n // \"rendering page 1\" logged with no completion and a permanent skeleton).\n // Fall back on the page's own width whenever the measurement is unusable.\n const measuredWidth = targetWidth ?? container.clientWidth\n const width = measuredWidth && measuredWidth > 0 ? measuredWidth : unscaled.width\n const scale = width / unscaled.width\n const viewport = page.getViewport({ scale: scale * dpr })\n\n const canvas = window.document.createElement('canvas')\n canvas.width = Math.floor(viewport.width)\n canvas.height = Math.floor(viewport.height)\n // CSS size stays in layout px; the canvas is oversampled by DPR so text\n // is crisp on retina without the layout changing.\n canvas.style.width = `${Math.floor(viewport.width / dpr)}px`\n canvas.style.height = `${Math.floor(viewport.height / dpr)}px`\n canvas.className = 'mx-auto max-w-full rounded-md border border-border shadow-xs'\n canvas.setAttribute('role', 'img')\n canvas.setAttribute('aria-label', pageLabelRef.current(pageNumber))\n\n // ATTACH BEFORE RENDERING. Rendering into a detached canvas and appending\n // afterwards left `page.render()` unsettled indefinitely (observed live:\n // \"rendering page 1\" with no completion). Attaching first also makes pages\n // appear progressively instead of all at once at the end.\n container.appendChild(canvas)\n\n // pdf.js 6 takes the CANVAS, not a 2D context: `canvasContext` is the legacy\n // parameter and its own typings state that using it requires `canvas` to be\n // explicitly null. Passing both (the first attempt here) is not a supported\n // combination and left the render promise unsettled.\n await page.render({ canvas, viewport }).promise\n if (cancelled) return\n }\n } catch (cause) {\n if (!cancelled) {\n logger.warn('[PdfViewer] document could not be rendered', {\n error: describeCaughtError(cause),\n })\n setRenderFailed(true)\n }\n } finally {\n if (!cancelled) setRendering(false)\n }\n })()\n\n return () => {\n cancelled = true\n // Do NOT call `loadingTask.destroy()`: with an externally-supplied worker port\n // that also destroys the SHARED worker, and React StrictMode's double-mount\n // then hits `PDFWorker.create - the worker is being destroyed` on the second\n // pass (observed live). Releasing the document's own worker-side resources is\n // what this component actually owns; the port outlives it by design.\n void document_?.cleanup()\n }\n }, [data, firstPageOnly, targetWidth])\n\n return (\n <div className={cn('w-full', className)} aria-label={ariaLabel} aria-busy={rendering || undefined}>\n {rendering && <Skeleton className=\"h-64 w-full\" aria-hidden=\"true\" />}\n {renderFailed && (\n <Text className=\"text-sm text-destructive\" role=\"alert\">{labels.renderFailed}</Text>\n )}\n <div ref={containerRef} className=\"flex flex-col gap-item\" />\n {!firstPageOnly && pageCount !== null && pageCount > MAX_RENDERED_PAGES && (\n // Say what was NOT rendered rather than silently truncating — a document that\n // looks complete but is not is worse than an explicit bound.\n <Text className=\"mt-item text-xs text-muted-foreground\">\n {labels.pagesTruncated(MAX_RENDERED_PAGES, pageCount)}\n </Text>\n )}\n </div>\n )\n}\n\nexport default PdfViewer\n"]}
@@ -9,6 +9,16 @@
9
9
  */
10
10
  import * as React from "react";
11
11
  import type { PdfViewerProps } from "./pdf-viewer";
12
- export declare function PdfViewerLazy(props: PdfViewerProps): React.JSX.Element;
13
- export type { PdfViewerProps } from "./pdf-viewer";
12
+ export interface PdfViewerLazyProps extends PdfViewerProps {
13
+ /**
14
+ * The PDF.js chunk could not be loaded (or the viewer threw while rendering). A lazy door throws
15
+ * during render when its chunk fails to download, and Suspense does not catch that — so the door
16
+ * catches it and hands the decision to the host, which knows what to show instead (the document
17
+ * display falls back to its downloadable file card). Nothing is rendered in the viewer's place
18
+ * until the host reacts.
19
+ */
20
+ onUnavailable?: (error: Error) => void;
21
+ }
22
+ export declare function PdfViewerLazy({ onUnavailable, ...props }: PdfViewerLazyProps): React.JSX.Element;
23
+ export type { PdfViewerLabels, PdfViewerProps } from "./pdf-viewer";
14
24
  //# sourceMappingURL=pdf-viewer.lazy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-viewer.lazy.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/pdf-viewer/pdf-viewer.lazy.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAIlD,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAMtE;AAED,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"pdf-viewer.lazy.d.ts","sourceRoot":"","sources":["../../../../../../src/components/data-display/pdf-viewer/pdf-viewer.lazy.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAKlD,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACvC;AAED,wBAAgB,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAQhG;AAED,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA"}
@@ -11,8 +11,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
11
11
  */
12
12
  import * as React from "react";
13
13
  import { Skeleton } from "@wildo-ai/saas-frontend-lib";
14
+ import { LazyDoorErrorBoundary } from "@wildo-ai/saas-frontend-lib";
14
15
  const LazyPdfViewerInner = React.lazy(() => import("./pdf-viewer.js"));
15
- export function PdfViewerLazy(props) {
16
- return (_jsx(React.Suspense, { fallback: _jsx(Skeleton, { className: "h-64 w-full", "aria-hidden": "true" }), children: _jsx(LazyPdfViewerInner, { ...props }) }));
16
+ export function PdfViewerLazy({ onUnavailable, ...props }) {
17
+ return (_jsx(LazyDoorErrorBoundary, { doorName: "PdfViewerLazy", fallback: null, onError: onUnavailable, children: _jsx(React.Suspense, { fallback: _jsx(Skeleton, { className: "h-64 w-full", "aria-hidden": "true" }), children: _jsx(LazyPdfViewerInner, { ...props }) }) }));
17
18
  }
18
19
  //# sourceMappingURL=pdf-viewer.lazy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-viewer.lazy.js","sourceRoot":"","sources":["../../../../../../src/components/data-display/pdf-viewer/pdf-viewer.lazy.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAGtD,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;AAEnE,MAAM,UAAU,aAAa,CAAC,KAAqB;IACjD,OAAO,CACL,KAAC,KAAK,CAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,iBAAa,MAAM,GAAG,YAC/E,KAAC,kBAAkB,OAAK,KAAK,GAAI,GAClB,CAClB,CAAA;AACH,CAAC","sourcesContent":["\"use client\"\n\n/**\n * PdfViewerLazy — the ONLY public door onto the PDF.js rendering core.\n *\n * Lazy-boundary wrapper (`*.lazy.tsx` convention, ChartView.lazy precedent): owns the\n * `React.lazy(() => import(...))` split point and the layout-reserving Suspense\n * fallback, and re-exports the props type via `import type` so consumers get typing\n * with no runtime edge onto the heavy module. Everything except this wrapper (and\n * tests) must import the viewer from HERE — enforced by `pnpm check:lazy-boundaries`.\n */\n\nimport * as React from \"react\"\nimport { Skeleton } from \"@wildo-ai/saas-frontend-lib\"\nimport type { PdfViewerProps } from \"./pdf-viewer\"\n\nconst LazyPdfViewerInner = React.lazy(() => import(\"./pdf-viewer\"))\n\nexport function PdfViewerLazy(props: PdfViewerProps): React.JSX.Element {\n return (\n <React.Suspense fallback={<Skeleton className=\"h-64 w-full\" aria-hidden=\"true\" />}>\n <LazyPdfViewerInner {...props} />\n </React.Suspense>\n )\n}\n\nexport type { PdfViewerProps } from \"./pdf-viewer\"\n"]}
1
+ {"version":3,"file":"pdf-viewer.lazy.js","sourceRoot":"","sources":["../../../../../../src/components/data-display/pdf-viewer/pdf-viewer.lazy.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAEnE,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;AAanE,MAAM,UAAU,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,KAAK,EAAsB;IAC3E,OAAO,CACL,KAAC,qBAAqB,IAAC,QAAQ,EAAC,eAAe,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,YACpF,KAAC,KAAK,CAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,iBAAa,MAAM,GAAG,YAC/E,KAAC,kBAAkB,OAAK,KAAK,GAAI,GAClB,GACK,CACzB,CAAA;AACH,CAAC","sourcesContent":["\"use client\"\n\n/**\n * PdfViewerLazy — the ONLY public door onto the PDF.js rendering core.\n *\n * Lazy-boundary wrapper (`*.lazy.tsx` convention, ChartView.lazy precedent): owns the\n * `React.lazy(() => import(...))` split point and the layout-reserving Suspense\n * fallback, and re-exports the props type via `import type` so consumers get typing\n * with no runtime edge onto the heavy module. Everything except this wrapper (and\n * tests) must import the viewer from HERE — enforced by `pnpm check:lazy-boundaries`.\n */\n\nimport * as React from \"react\"\nimport { Skeleton } from \"@wildo-ai/saas-frontend-lib\"\nimport type { PdfViewerProps } from \"./pdf-viewer\"\nimport { LazyDoorErrorBoundary } from \"@wildo-ai/saas-frontend-lib\"\n\nconst LazyPdfViewerInner = React.lazy(() => import(\"./pdf-viewer\"))\n\nexport interface PdfViewerLazyProps extends PdfViewerProps {\n /**\n * The PDF.js chunk could not be loaded (or the viewer threw while rendering). A lazy door throws\n * during render when its chunk fails to download, and Suspense does not catch that — so the door\n * catches it and hands the decision to the host, which knows what to show instead (the document\n * display falls back to its downloadable file card). Nothing is rendered in the viewer's place\n * until the host reacts.\n */\n onUnavailable?: (error: Error) => void\n}\n\nexport function PdfViewerLazy({ onUnavailable, ...props }: PdfViewerLazyProps): React.JSX.Element {\n return (\n <LazyDoorErrorBoundary doorName=\"PdfViewerLazy\" fallback={null} onError={onUnavailable}>\n <React.Suspense fallback={<Skeleton className=\"h-64 w-full\" aria-hidden=\"true\" />}>\n <LazyPdfViewerInner {...props} />\n </React.Suspense>\n </LazyDoorErrorBoundary>\n )\n}\n\nexport type { PdfViewerLabels, PdfViewerProps } from \"./pdf-viewer\"\n"]}
@@ -0,0 +1,3 @@
1
+ import type { TimelineCompound } from "@wildo-ai/saas-frontend-lib";
2
+ export declare const Timeline: TimelineCompound;
3
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/timeline.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,gBAAgB,EAKjB,MAAM,6BAA6B,CAAA;AAiKpC,eAAO,MAAM,QAAQ,kBAMnB,CAAA"}
@@ -0,0 +1,92 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { IndicatorVariant, SelectableVariant, UIBehavior } from "@wildo-ai/presets-components-models";
4
+ import { cn, createCompoundPreset, useUI } from "@wildo-ai/saas-frontend-lib";
5
+ import { optionGestureHandlers } from "../../components/sections/option-gesture.js";
6
+ /**
7
+ * DEFAULT preset for `LOW_LEVEL_TIMELINE`: an ordered list along one rail, entries hanging off it
8
+ * with a marker dot in the entry's tone.
9
+ *
10
+ * ## The marker is the STRONG hue, not the subtle chip
11
+ *
12
+ * The INDICATOR recipe tints a chip with the `*-subtle` tokens, which is right for a badge with
13
+ * words in it and invisible on a 12px dot. The dot fills with the tone's own token — `success`,
14
+ * `warning`, `destructive`, `info`, and the muted foreground for NEUTRAL — total over the
15
+ * vocabulary by type, so a sixth tone is a compile error here rather than a grey dot. A marker WITH
16
+ * content (a glyph) keeps the same fill and sizes to its content.
17
+ *
18
+ * ## Geometry, once
19
+ *
20
+ * The rail is the list's own start border; entries pad past it and the marker sits absolutely on
21
+ * the rail, so the rail and the dots share one coordinate whatever an entry's body contains. The
22
+ * dot's `ring-background` is what lifts it off the rail line.
23
+ */
24
+ const MARKER_FILL = {
25
+ [IndicatorVariant.SUCCESS]: "bg-success text-success-foreground",
26
+ [IndicatorVariant.WARNING]: "bg-warning text-warning-foreground",
27
+ [IndicatorVariant.ERROR]: "bg-destructive text-destructive-foreground",
28
+ [IndicatorVariant.INFO]: "bg-info text-info-foreground",
29
+ [IndicatorVariant.NEUTRAL]: "bg-muted-foreground text-background",
30
+ };
31
+ /** Where the marker sits: centred on the rail, which is the list's start border. */
32
+ /* `--spacing-field` is the rail padding below (`ps-field`); 0.4375rem = half the dot (0.375rem) + half the 1px rail. */
33
+ const MARKER_POSITION = "absolute top-1 -start-[calc(var(--spacing-field,1rem)+0.4375rem)]";
34
+ /*
35
+ * The rail's classes, shared by both of its shapes. A named CONTAINER, so an entry can lay its time
36
+ * beside its body when the rail is wide and above it when the rail is narrow — measured on the
37
+ * creation board's split (2026-09-20), where a 200px rail gave the body sixty pixels beside a
38
+ * fixed-width timestamp and a session id wrapped one character per line. The entry decides by the
39
+ * rail's width, never the viewport's.
40
+ */
41
+ const RAIL = "@container/timeline relative ms-1.5 flex flex-col gap-group border-s border-border ps-field";
42
+ function TimelineRoot({ className, selectable = false, ...props }) {
43
+ /* A rail a person picks from is a `grid` of `row`s — a `div`, since `ol` does not admit the role. */
44
+ if (selectable) {
45
+ return _jsx("div", { "data-slot": "timeline", role: "grid", className: cn(RAIL, className), ...props });
46
+ }
47
+ return (_jsx("ol", { "data-slot": "timeline", className: cn(RAIL, className), ...props }));
48
+ }
49
+ function TimelineMarker({ tone = IndicatorVariant.NEUTRAL, className, children, ...props }) {
50
+ return (_jsx("span", { "data-slot": "timeline-marker", "data-tone": tone, "aria-hidden": "true", className: cn("inline-flex items-center justify-center rounded-full ring-2 ring-background", children === undefined || children === null ? "size-3" : "size-5 [&>svg]:size-3", MARKER_FILL[tone], className), ...props, children: children }));
51
+ }
52
+ function TimelineEntry({ tone = IndicatorVariant.NEUTRAL, marker, option, selected = false, className, children, ...props }) {
53
+ const { getRecipe } = useUI();
54
+ /*
55
+ * A PICKABLE entry wears the same selectable treatment a listbox card does — the FILLED "you are
56
+ * here" tint plus a ring when selected, the theme's focus ring when focusable — so a stream a
57
+ * person picks from reads like every other pickable list on the surface.
58
+ */
59
+ const selectable = option !== undefined || selected ? getRecipe(UIBehavior.SELECTABLE, SelectableVariant.FILLED) : undefined;
60
+ const entryClassName = cn("relative flex min-w-0 flex-wrap items-start gap-element rounded-md", option !== undefined && cn("cursor-pointer outline-none px-item-sm py-item-xs -mx-item-sm", selectable?.states.focus, selectable?.motion.transition), selected && cn(selectable?.states.selected, "ring-2 ring-ring"), className);
61
+ const content = (_jsxs(_Fragment, { children: [_jsx("span", { className: cn(MARKER_POSITION, "flex size-3 items-center justify-center"), children: marker ?? _jsx(TimelineMarker, { tone: tone }) }), children] }));
62
+ /*
63
+ * A PICKABLE entry is a grid `row` owning one `gridcell`, and the gridcell is the entry — focusable,
64
+ * `aria-selected`, carrying the caller's attributes — because an entry holds `Timeline.Actions` and
65
+ * an `option` may not contain a control. The wrapper draws nothing; the rail's flex column lays it out.
66
+ */
67
+ if (option !== undefined) {
68
+ return (_jsx("div", { role: "row", className: "min-w-0", children: _jsx("div", { "data-slot": "timeline-entry", "data-tone": tone, "data-selected": selected, role: "gridcell", "aria-selected": selected, tabIndex: 0, className: entryClassName, ...optionGestureHandlers(option.onSelect), ...props, children: content }) }));
69
+ }
70
+ return (_jsx("li", { "data-slot": "timeline-entry", "data-tone": tone, "data-selected": selected, className: entryClassName, ...props, children: content }));
71
+ }
72
+ function TimelineTime({ className, ...props }) {
73
+ return (_jsx("time", { "data-slot": "timeline-time",
74
+ /* Full width on a narrow rail (the body follows beneath); beside the body from 24rem up — see the root. */
75
+ className: cn("basis-full shrink-0 pt-px text-2xs text-foreground-subtle tabular-nums @sm/timeline:basis-auto", className), ...props }));
76
+ }
77
+ function TimelineBody({ className, ...props }) {
78
+ return (_jsx("div", { "data-slot": "timeline-body", className: cn("flex min-w-0 flex-1 flex-col gap-element-sm text-sm", className), ...props }));
79
+ }
80
+ function TimelineActions({ className, ...props }) {
81
+ return (_jsx("div", { "data-slot": "timeline-actions",
82
+ /* Its own row on a narrow rail, end-aligned; beside the body, pushed to the end, from 24rem up — see the root. */
83
+ className: cn("flex basis-full shrink-0 items-center justify-end gap-element-sm @sm/timeline:ms-auto @sm/timeline:basis-auto", className), ...props }));
84
+ }
85
+ export const Timeline = createCompoundPreset(TimelineRoot, {
86
+ Entry: TimelineEntry,
87
+ Marker: TimelineMarker,
88
+ Time: TimelineTime,
89
+ Body: TimelineBody,
90
+ Actions: TimelineActions,
91
+ });
92
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../../../../src/components/data-display/timeline.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { IndicatorVariant, SelectableVariant, UIBehavior } from \"@wildo-ai/presets-components-models\"\n\nimport { cn, createCompoundPreset, useUI } from \"@wildo-ai/saas-frontend-lib\"\nimport { optionGestureHandlers } from \"~wildo-presets/components/sections/option-gesture\"\nimport type {\n TimelineActionsProps,\n TimelineBodyProps,\n TimelineCompound,\n TimelineEntryProps,\n TimelineMarkerProps,\n TimelineProps,\n TimelineTimeProps,\n} from \"@wildo-ai/saas-frontend-lib\"\n\n/**\n * DEFAULT preset for `LOW_LEVEL_TIMELINE`: an ordered list along one rail, entries hanging off it\n * with a marker dot in the entry's tone.\n *\n * ## The marker is the STRONG hue, not the subtle chip\n *\n * The INDICATOR recipe tints a chip with the `*-subtle` tokens, which is right for a badge with\n * words in it and invisible on a 12px dot. The dot fills with the tone's own token — `success`,\n * `warning`, `destructive`, `info`, and the muted foreground for NEUTRAL — total over the\n * vocabulary by type, so a sixth tone is a compile error here rather than a grey dot. A marker WITH\n * content (a glyph) keeps the same fill and sizes to its content.\n *\n * ## Geometry, once\n *\n * The rail is the list's own start border; entries pad past it and the marker sits absolutely on\n * the rail, so the rail and the dots share one coordinate whatever an entry's body contains. The\n * dot's `ring-background` is what lifts it off the rail line.\n */\nconst MARKER_FILL: Record<IndicatorVariant, string> = {\n [IndicatorVariant.SUCCESS]: \"bg-success text-success-foreground\",\n [IndicatorVariant.WARNING]: \"bg-warning text-warning-foreground\",\n [IndicatorVariant.ERROR]: \"bg-destructive text-destructive-foreground\",\n [IndicatorVariant.INFO]: \"bg-info text-info-foreground\",\n [IndicatorVariant.NEUTRAL]: \"bg-muted-foreground text-background\",\n}\n\n/** Where the marker sits: centred on the rail, which is the list's start border. */\n/* `--spacing-field` is the rail padding below (`ps-field`); 0.4375rem = half the dot (0.375rem) + half the 1px rail. */\nconst MARKER_POSITION = \"absolute top-1 -start-[calc(var(--spacing-field,1rem)+0.4375rem)]\"\n\n/*\n * The rail's classes, shared by both of its shapes. A named CONTAINER, so an entry can lay its time\n * beside its body when the rail is wide and above it when the rail is narrow — measured on the\n * creation board's split (2026-09-20), where a 200px rail gave the body sixty pixels beside a\n * fixed-width timestamp and a session id wrapped one character per line. The entry decides by the\n * rail's width, never the viewport's.\n */\nconst RAIL = \"@container/timeline relative ms-1.5 flex flex-col gap-group border-s border-border ps-field\"\n\nfunction TimelineRoot({ className, selectable = false, ...props }: TimelineProps): React.JSX.Element {\n /* A rail a person picks from is a `grid` of `row`s — a `div`, since `ol` does not admit the role. */\n if (selectable) {\n return <div data-slot=\"timeline\" role=\"grid\" className={cn(RAIL, className)} {...(props as unknown as React.ComponentProps<\"div\">)} />\n }\n return (\n <ol\n data-slot=\"timeline\"\n className={cn(RAIL, className)}\n {...props}\n />\n )\n}\n\nfunction TimelineMarker({ tone = IndicatorVariant.NEUTRAL, className, children, ...props }: TimelineMarkerProps): React.JSX.Element {\n return (\n <span\n data-slot=\"timeline-marker\"\n data-tone={tone}\n aria-hidden=\"true\"\n className={cn(\n \"inline-flex items-center justify-center rounded-full ring-2 ring-background\",\n children === undefined || children === null ? \"size-3\" : \"size-5 [&>svg]:size-3\",\n MARKER_FILL[tone],\n className,\n )}\n {...props}\n >\n {children}\n </span>\n )\n}\n\nfunction TimelineEntry({ tone = IndicatorVariant.NEUTRAL, marker, option, selected = false, className, children, ...props }: TimelineEntryProps): React.JSX.Element {\n const { getRecipe } = useUI()\n /*\n * A PICKABLE entry wears the same selectable treatment a listbox card does — the FILLED \"you are\n * here\" tint plus a ring when selected, the theme's focus ring when focusable — so a stream a\n * person picks from reads like every other pickable list on the surface.\n */\n const selectable = option !== undefined || selected ? getRecipe(UIBehavior.SELECTABLE, SelectableVariant.FILLED) : undefined\n const entryClassName = cn(\n \"relative flex min-w-0 flex-wrap items-start gap-element rounded-md\",\n option !== undefined && cn(\"cursor-pointer outline-none px-item-sm py-item-xs -mx-item-sm\", selectable?.states.focus, selectable?.motion.transition),\n selected && cn(selectable?.states.selected, \"ring-2 ring-ring\"),\n className,\n )\n const content = (\n <>\n <span className={cn(MARKER_POSITION, \"flex size-3 items-center justify-center\")}>\n {marker ?? <TimelineMarker tone={tone} />}\n </span>\n {children}\n </>\n )\n\n /*\n * A PICKABLE entry is a grid `row` owning one `gridcell`, and the gridcell is the entry — focusable,\n * `aria-selected`, carrying the caller's attributes — because an entry holds `Timeline.Actions` and\n * an `option` may not contain a control. The wrapper draws nothing; the rail's flex column lays it out.\n */\n if (option !== undefined) {\n return (\n <div role=\"row\" className=\"min-w-0\">\n <div\n data-slot=\"timeline-entry\"\n data-tone={tone}\n data-selected={selected}\n role=\"gridcell\"\n aria-selected={selected}\n tabIndex={0}\n className={entryClassName}\n {...optionGestureHandlers<HTMLDivElement>(option.onSelect)}\n {...(props as unknown as React.ComponentProps<\"div\">)}\n >\n {content}\n </div>\n </div>\n )\n }\n\n return (\n <li data-slot=\"timeline-entry\" data-tone={tone} data-selected={selected} className={entryClassName} {...props}>\n {content}\n </li>\n )\n}\n\nfunction TimelineTime({ className, ...props }: TimelineTimeProps): React.JSX.Element {\n return (\n <time\n data-slot=\"timeline-time\"\n /* Full width on a narrow rail (the body follows beneath); beside the body from 24rem up — see the root. */\n className={cn(\"basis-full shrink-0 pt-px text-2xs text-foreground-subtle tabular-nums @sm/timeline:basis-auto\", className)}\n {...props}\n />\n )\n}\n\nfunction TimelineBody({ className, ...props }: TimelineBodyProps): React.JSX.Element {\n return (\n <div\n data-slot=\"timeline-body\"\n className={cn(\"flex min-w-0 flex-1 flex-col gap-element-sm text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction TimelineActions({ className, ...props }: TimelineActionsProps): React.JSX.Element {\n return (\n <div\n data-slot=\"timeline-actions\"\n /* Its own row on a narrow rail, end-aligned; beside the body, pushed to the end, from 24rem up — see the root. */\n className={cn(\"flex basis-full shrink-0 items-center justify-end gap-element-sm @sm/timeline:ms-auto @sm/timeline:basis-auto\", className)}\n {...props}\n />\n )\n}\n\nexport const Timeline = createCompoundPreset<TimelineCompound>(TimelineRoot, {\n Entry: TimelineEntry,\n Marker: TimelineMarker,\n Time: TimelineTime,\n Body: TimelineBody,\n Actions: TimelineActions,\n})\n"]}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * UntrustedHtmlContent — renders HTML a STRANGER wrote (the HTML part of a received email, #1600) without letting it
3
+ * run, reach the network, or restyle the application (#1912).
4
+ *
5
+ * ## What a mail client does, and what this does
6
+ *
7
+ * Every mainstream mail client refuses remote content in received mail by default: Thunderbird blocks it and shows a
8
+ * "remote content" bar, Apple Mail's Mail Privacy Protection and Gmail's image proxy exist because a remote image is
9
+ * a read receipt (it tells the sender WHEN the message was opened and FROM WHICH address). Browser-based clients do it
10
+ * by rendering the message in a sandboxed frame with a content-security policy that allows no fetch at all. This does
11
+ * the same, with the browser as the enforcer rather than a rewrite pass:
12
+ *
13
+ * - `<iframe sandbox>` WITHOUT `allow-scripts` and WITHOUT `allow-same-origin`: nothing in the message executes, and
14
+ * the frame is an opaque origin that can read neither the application's DOM, cookies nor storage;
15
+ * - a CSP meta as the frame's first element — `default-src 'none'`: no image, stylesheet, font, media or frame is
16
+ * fetched from anywhere. Only inline `data:` images and inline `<style>` are allowed;
17
+ * - `<base target="_blank">` with `allow-popups` / `allow-popups-to-escape-sandbox`: a link the reader CLICKS opens in a
18
+ * new tab (a reader's own act, not the message's); a form never submits (no `allow-forms`).
19
+ *
20
+ * spec-cite: HTML Living Standard §4.8.5 "The iframe element" — the `sandbox` attribute's flags (`allow-scripts`,
21
+ * `allow-same-origin`, `allow-popups`, `allow-popups-to-escape-sandbox`, `allow-forms`) and the opaque origin a frame
22
+ * without `allow-same-origin` receives. https://html.spec.whatwg.org/multipage/iframe-embed-object.html#attr-iframe-sandbox
23
+ *
24
+ * ## Rejected: sanitizing into the page (drop `<style>`, strip remote `src`)
25
+ *
26
+ * The first reading surface ran the HTML through the markdown pipeline's `rehype-sanitize`, which keeps images and
27
+ * UNWRAPS a `<style>` element into visible text. Tightening that schema (drop `<style>`, strip every remote `src`,
28
+ * `srcset`, `background` and CSS `url()`) was considered and rejected: it is a hand-kept list of ways HTML reaches the
29
+ * network, and it would still inject the message's markup into the application's own DOM, where a missed
30
+ * vector is a leak and a `position: fixed` rule is a clickjacking overlay. The frame makes the browser enforce
31
+ * "no fetch" for every vector at once, and scopes the message's styles to itself — which is why they are KEPT rather
32
+ * than dropped: a styled newsletter stays readable and cannot touch the page around it.
33
+ *
34
+ * Remote content has no opt-in here. Blocking it always is the stricter half of what mail clients do; an explicit
35
+ * "load remote content" action would be a separate, deliberate addition.
36
+ */
37
+ import * as React from "react";
38
+ /**
39
+ * The frame's policy. `img-src data:` keeps inline images a message carries in its own body; nothing else loads.
40
+ * `style-src 'unsafe-inline'` lets the message's own `<style>` apply INSIDE the frame only.
41
+ */
42
+ export declare const UNTRUSTED_HTML_CONTENT_SECURITY_POLICY = "default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:";
43
+ /** The sandbox flags: links a reader clicks may open a new tab, and nothing else is granted. */
44
+ export declare const UNTRUSTED_HTML_SANDBOX = "allow-popups allow-popups-to-escape-sandbox";
45
+ /** The document the frame renders: the policy FIRST, so it governs everything after it. */
46
+ export declare function composeUntrustedHtmlDocument(html: string): string;
47
+ export interface UntrustedHtmlContentProps {
48
+ /** HTML from outside the application. Never trusted, never injected into the page. */
49
+ value: string;
50
+ /** Accessible name of the frame (a title the screen reader announces). */
51
+ title: string;
52
+ className?: string;
53
+ }
54
+ export declare function UntrustedHtmlContent({ value, title, className }: UntrustedHtmlContentProps): React.JSX.Element;
55
+ //# sourceMappingURL=untrusted-html-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untrusted-html-content.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/untrusted-html-content.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B;;;GAGG;AACH,eAAO,MAAM,sCAAsC,iFAAiF,CAAA;AAEpI,gGAAgG;AAChG,eAAO,MAAM,sBAAsB,gDAAgD,CAAA;AAEnF,2FAA2F;AAC3F,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWjE;AAED,MAAM,WAAW,yBAAyB;IACxC,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,yBAAyB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAY9G"}
@@ -0,0 +1,67 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * UntrustedHtmlContent — renders HTML a STRANGER wrote (the HTML part of a received email, #1600) without letting it
5
+ * run, reach the network, or restyle the application (#1912).
6
+ *
7
+ * ## What a mail client does, and what this does
8
+ *
9
+ * Every mainstream mail client refuses remote content in received mail by default: Thunderbird blocks it and shows a
10
+ * "remote content" bar, Apple Mail's Mail Privacy Protection and Gmail's image proxy exist because a remote image is
11
+ * a read receipt (it tells the sender WHEN the message was opened and FROM WHICH address). Browser-based clients do it
12
+ * by rendering the message in a sandboxed frame with a content-security policy that allows no fetch at all. This does
13
+ * the same, with the browser as the enforcer rather than a rewrite pass:
14
+ *
15
+ * - `<iframe sandbox>` WITHOUT `allow-scripts` and WITHOUT `allow-same-origin`: nothing in the message executes, and
16
+ * the frame is an opaque origin that can read neither the application's DOM, cookies nor storage;
17
+ * - a CSP meta as the frame's first element — `default-src 'none'`: no image, stylesheet, font, media or frame is
18
+ * fetched from anywhere. Only inline `data:` images and inline `<style>` are allowed;
19
+ * - `<base target="_blank">` with `allow-popups` / `allow-popups-to-escape-sandbox`: a link the reader CLICKS opens in a
20
+ * new tab (a reader's own act, not the message's); a form never submits (no `allow-forms`).
21
+ *
22
+ * spec-cite: HTML Living Standard §4.8.5 "The iframe element" — the `sandbox` attribute's flags (`allow-scripts`,
23
+ * `allow-same-origin`, `allow-popups`, `allow-popups-to-escape-sandbox`, `allow-forms`) and the opaque origin a frame
24
+ * without `allow-same-origin` receives. https://html.spec.whatwg.org/multipage/iframe-embed-object.html#attr-iframe-sandbox
25
+ *
26
+ * ## Rejected: sanitizing into the page (drop `<style>`, strip remote `src`)
27
+ *
28
+ * The first reading surface ran the HTML through the markdown pipeline's `rehype-sanitize`, which keeps images and
29
+ * UNWRAPS a `<style>` element into visible text. Tightening that schema (drop `<style>`, strip every remote `src`,
30
+ * `srcset`, `background` and CSS `url()`) was considered and rejected: it is a hand-kept list of ways HTML reaches the
31
+ * network, and it would still inject the message's markup into the application's own DOM, where a missed
32
+ * vector is a leak and a `position: fixed` rule is a clickjacking overlay. The frame makes the browser enforce
33
+ * "no fetch" for every vector at once, and scopes the message's styles to itself — which is why they are KEPT rather
34
+ * than dropped: a styled newsletter stays readable and cannot touch the page around it.
35
+ *
36
+ * Remote content has no opt-in here. Blocking it always is the stricter half of what mail clients do; an explicit
37
+ * "load remote content" action would be a separate, deliberate addition.
38
+ */
39
+ import * as React from "react";
40
+ import { cn } from "@wildo-ai/saas-frontend-lib";
41
+ /**
42
+ * The frame's policy. `img-src data:` keeps inline images a message carries in its own body; nothing else loads.
43
+ * `style-src 'unsafe-inline'` lets the message's own `<style>` apply INSIDE the frame only.
44
+ */
45
+ export const UNTRUSTED_HTML_CONTENT_SECURITY_POLICY = "default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:";
46
+ /** The sandbox flags: links a reader clicks may open a new tab, and nothing else is granted. */
47
+ export const UNTRUSTED_HTML_SANDBOX = "allow-popups allow-popups-to-escape-sandbox";
48
+ /** The document the frame renders: the policy FIRST, so it governs everything after it. */
49
+ export function composeUntrustedHtmlDocument(html) {
50
+ return [
51
+ "<!doctype html><html><head>",
52
+ `<meta http-equiv="Content-Security-Policy" content="${UNTRUSTED_HTML_CONTENT_SECURITY_POLICY}">`,
53
+ '<meta name="referrer" content="no-referrer">',
54
+ '<base target="_blank">',
55
+ "<style>body{margin:0;font-family:system-ui,sans-serif;font-size:14px;line-height:1.5;word-wrap:break-word}img{max-width:100%;height:auto}</style>",
56
+ "</head><body>",
57
+ html,
58
+ "</body></html>",
59
+ ].join("");
60
+ }
61
+ export function UntrustedHtmlContent({ value, title, className }) {
62
+ const document = React.useMemo(() => composeUntrustedHtmlDocument(value), [value]);
63
+ return (_jsx("iframe", { title: title, sandbox: UNTRUSTED_HTML_SANDBOX, srcDoc: document, referrerPolicy: "no-referrer",
64
+ // An opaque-origin frame cannot be measured from outside, so it has a reading height and resizes by hand.
65
+ className: cn("w-full min-h-[12rem] h-[32rem] resize-y rounded-md border border-border bg-background", className) }));
66
+ }
67
+ //# sourceMappingURL=untrusted-html-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untrusted-html-content.js","sourceRoot":"","sources":["../../../../../src/components/data-display/untrusted-html-content.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAA;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,8EAA8E,CAAA;AAEpI,gGAAgG;AAChG,MAAM,CAAC,MAAM,sBAAsB,GAAG,6CAA6C,CAAA;AAEnF,2FAA2F;AAC3F,MAAM,UAAU,4BAA4B,CAAC,IAAY;IACvD,OAAO;QACL,6BAA6B;QAC7B,uDAAuD,sCAAsC,IAAI;QACjG,8CAA8C;QAC9C,wBAAwB;QACxB,mJAAmJ;QACnJ,eAAe;QACf,IAAI;QACJ,gBAAgB;KACjB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACZ,CAAC;AAUD,MAAM,UAAU,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAA6B;IACzF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAClF,OAAO,CACL,iBACE,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,QAAQ,EAChB,cAAc,EAAC,aAAa;QAC5B,0GAA0G;QAC1G,SAAS,EAAE,EAAE,CAAC,uFAAuF,EAAE,SAAS,CAAC,GACjH,CACH,CAAA;AACH,CAAC","sourcesContent":["\"use client\"\n\n/**\n * UntrustedHtmlContent — renders HTML a STRANGER wrote (the HTML part of a received email, #1600) without letting it\n * run, reach the network, or restyle the application (#1912).\n *\n * ## What a mail client does, and what this does\n *\n * Every mainstream mail client refuses remote content in received mail by default: Thunderbird blocks it and shows a\n * \"remote content\" bar, Apple Mail's Mail Privacy Protection and Gmail's image proxy exist because a remote image is\n * a read receipt (it tells the sender WHEN the message was opened and FROM WHICH address). Browser-based clients do it\n * by rendering the message in a sandboxed frame with a content-security policy that allows no fetch at all. This does\n * the same, with the browser as the enforcer rather than a rewrite pass:\n *\n * - `<iframe sandbox>` WITHOUT `allow-scripts` and WITHOUT `allow-same-origin`: nothing in the message executes, and\n * the frame is an opaque origin that can read neither the application's DOM, cookies nor storage;\n * - a CSP meta as the frame's first element — `default-src 'none'`: no image, stylesheet, font, media or frame is\n * fetched from anywhere. Only inline `data:` images and inline `<style>` are allowed;\n * - `<base target=\"_blank\">` with `allow-popups` / `allow-popups-to-escape-sandbox`: a link the reader CLICKS opens in a\n * new tab (a reader's own act, not the message's); a form never submits (no `allow-forms`).\n *\n * spec-cite: HTML Living Standard §4.8.5 \"The iframe element\" — the `sandbox` attribute's flags (`allow-scripts`,\n * `allow-same-origin`, `allow-popups`, `allow-popups-to-escape-sandbox`, `allow-forms`) and the opaque origin a frame\n * without `allow-same-origin` receives. https://html.spec.whatwg.org/multipage/iframe-embed-object.html#attr-iframe-sandbox\n *\n * ## Rejected: sanitizing into the page (drop `<style>`, strip remote `src`)\n *\n * The first reading surface ran the HTML through the markdown pipeline's `rehype-sanitize`, which keeps images and\n * UNWRAPS a `<style>` element into visible text. Tightening that schema (drop `<style>`, strip every remote `src`,\n * `srcset`, `background` and CSS `url()`) was considered and rejected: it is a hand-kept list of ways HTML reaches the\n * network, and it would still inject the message's markup into the application's own DOM, where a missed\n * vector is a leak and a `position: fixed` rule is a clickjacking overlay. The frame makes the browser enforce\n * \"no fetch\" for every vector at once, and scopes the message's styles to itself — which is why they are KEPT rather\n * than dropped: a styled newsletter stays readable and cannot touch the page around it.\n *\n * Remote content has no opt-in here. Blocking it always is the stricter half of what mail clients do; an explicit\n * \"load remote content\" action would be a separate, deliberate addition.\n */\n\nimport * as React from \"react\"\n\nimport { cn } from \"@wildo-ai/saas-frontend-lib\"\n\n/**\n * The frame's policy. `img-src data:` keeps inline images a message carries in its own body; nothing else loads.\n * `style-src 'unsafe-inline'` lets the message's own `<style>` apply INSIDE the frame only.\n */\nexport const UNTRUSTED_HTML_CONTENT_SECURITY_POLICY = \"default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:\"\n\n/** The sandbox flags: links a reader clicks may open a new tab, and nothing else is granted. */\nexport const UNTRUSTED_HTML_SANDBOX = \"allow-popups allow-popups-to-escape-sandbox\"\n\n/** The document the frame renders: the policy FIRST, so it governs everything after it. */\nexport function composeUntrustedHtmlDocument(html: string): string {\n return [\n \"<!doctype html><html><head>\",\n `<meta http-equiv=\"Content-Security-Policy\" content=\"${UNTRUSTED_HTML_CONTENT_SECURITY_POLICY}\">`,\n '<meta name=\"referrer\" content=\"no-referrer\">',\n '<base target=\"_blank\">',\n \"<style>body{margin:0;font-family:system-ui,sans-serif;font-size:14px;line-height:1.5;word-wrap:break-word}img{max-width:100%;height:auto}</style>\",\n \"</head><body>\",\n html,\n \"</body></html>\",\n ].join(\"\")\n}\n\nexport interface UntrustedHtmlContentProps {\n /** HTML from outside the application. Never trusted, never injected into the page. */\n value: string\n /** Accessible name of the frame (a title the screen reader announces). */\n title: string\n className?: string\n}\n\nexport function UntrustedHtmlContent({ value, title, className }: UntrustedHtmlContentProps): React.JSX.Element {\n const document = React.useMemo(() => composeUntrustedHtmlDocument(value), [value])\n return (\n <iframe\n title={title}\n sandbox={UNTRUSTED_HTML_SANDBOX}\n srcDoc={document}\n referrerPolicy=\"no-referrer\"\n // An opaque-origin frame cannot be measured from outside, so it has a reading height and resizes by hand.\n className={cn(\"w-full min-h-[12rem] h-[32rem] resize-y rounded-md border border-border bg-background\", className)}\n />\n )\n}\n"]}
@@ -8,10 +8,19 @@ import type { CelebrationOverlayProps } from '@wildo-ai/saas-frontend-lib';
8
8
  * any engine concepts.
9
9
  *
10
10
  * Modes:
11
- * - `overlay`: Full-screen centered overlay with message + confetti emoji
12
- * - `confetti`: Lightweight confetti burst (no blocking overlay)
13
- * - `lottie`: Animated TADA icon via the unified icon system (uses `renderIcon` with
14
- * `StandardIconReference.TADA`, rendered in a scaled container for visual impact)
11
+ * - `confetti`: a non-blocking particle burst over the page, `aria-hidden`, purely decorative.
12
+ * - `overlay`: a blocking Dialog carrying the message, an optional next-step CTA and a dismiss.
13
+ * - `lottie`: renders EXACTLY as `overlay` in this default preset.
14
+ *
15
+ * Both dialog modes draw `StandardIconReference.TADA` from the icon registry, which plays an animated
16
+ * Lottie when the application ran `registerDefaultAnimations()` and the reader has not asked for
17
+ * reduced motion — so the dialog DOES animate; `lottie` simply adds nothing to it here. An earlier
18
+ * version of this comment said "no Lottie animation is played", which stopped being true once both
19
+ * branches drew the registry icon.
20
+ *
21
+ * `lottie` is the mode an application's OWN preset for `LOW_LEVEL_CELEBRATION_OVERLAY` can give a
22
+ * meaning to — a per-milestone animation chosen from `notificationIdentifier`, for instance. This
23
+ * default preset keeps it equal to `overlay` rather than inventing an asset it has no way to know.
15
24
  *
16
25
  * For engine integration, see the celebration-overlay wrapper in saas-frontend-lib
17
26
  * which wires NotificationContext and i18n.
@@ -1 +1 @@
1
- {"version":3,"file":"celebration-overlay.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/celebration-overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AA4B1E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,gGA4J9B,CAAC"}
1
+ {"version":3,"file":"celebration-overlay.d.ts","sourceRoot":"","sources":["../../../../../src/components/feedback/celebration-overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AA6B1E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,kBAAkB,gGAuR9B,CAAC"}