@wildo-ai/presets-components 1.1.3 → 1.1.5

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 (707) hide show
  1. package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
  2. package/dist/esm/components/actions/action-bar.js +61 -7
  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.labels.d.ts.map +1 -1
  45. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts +68 -0
  46. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts.map +1 -0
  47. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js +208 -0
  48. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js.map +1 -0
  49. package/dist/esm/components/ai-elements/decision/approval.d.ts +36 -4
  50. package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
  51. package/dist/esm/components/ai-elements/decision/approval.js +77 -7
  52. package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
  53. package/dist/esm/components/ai-elements/decision/decision-request.d.ts.map +1 -1
  54. package/dist/esm/components/ai-elements/decision/decision-request.labels.d.ts.map +1 -1
  55. package/dist/esm/components/ai-elements/execution/confirmation.d.ts.map +1 -1
  56. package/dist/esm/components/ai-elements/execution/confirmation.labels.d.ts.map +1 -1
  57. package/dist/esm/components/ai-elements/execution/queue.d.ts.map +1 -1
  58. package/dist/esm/components/ai-elements/execution/queue.labels.d.ts.map +1 -1
  59. package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
  60. package/dist/esm/components/ai-elements/execution/task.js +1 -1
  61. package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
  62. package/dist/esm/components/ai-elements/execution/task.labels.d.ts.map +1 -1
  63. package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
  64. package/dist/esm/components/ai-elements/execution/tool.js +8 -1
  65. package/dist/esm/components/ai-elements/execution/tool.js.map +1 -1
  66. package/dist/esm/components/ai-elements/execution/tool.labels.d.ts.map +1 -1
  67. package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
  68. package/dist/esm/components/ai-elements/graph/canvas.labels.d.ts.map +1 -1
  69. package/dist/esm/components/ai-elements/graph/connection.d.ts.map +1 -1
  70. package/dist/esm/components/ai-elements/graph/connection.labels.d.ts.map +1 -1
  71. package/dist/esm/components/ai-elements/graph/controls.d.ts.map +1 -1
  72. package/dist/esm/components/ai-elements/graph/controls.labels.d.ts.map +1 -1
  73. package/dist/esm/components/ai-elements/graph/edge.d.ts.map +1 -1
  74. package/dist/esm/components/ai-elements/graph/edge.labels.d.ts.map +1 -1
  75. package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
  76. package/dist/esm/components/ai-elements/graph/graph.lazy.d.ts.map +1 -1
  77. package/dist/esm/components/ai-elements/graph/graph.lazy.js +15 -15
  78. package/dist/esm/components/ai-elements/graph/graph.lazy.js.map +1 -1
  79. package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
  80. package/dist/esm/components/ai-elements/graph/node.labels.d.ts.map +1 -1
  81. package/dist/esm/components/ai-elements/graph/panel.d.ts.map +1 -1
  82. package/dist/esm/components/ai-elements/graph/panel.labels.d.ts.map +1 -1
  83. package/dist/esm/components/ai-elements/graph/toolbar.d.ts.map +1 -1
  84. package/dist/esm/components/ai-elements/graph/toolbar.labels.d.ts.map +1 -1
  85. package/dist/esm/components/ai-elements/meta/agent.d.ts +0 -1
  86. package/dist/esm/components/ai-elements/meta/agent.d.ts.map +1 -1
  87. package/dist/esm/components/ai-elements/meta/agent.js +23 -18
  88. package/dist/esm/components/ai-elements/meta/agent.js.map +1 -1
  89. package/dist/esm/components/ai-elements/meta/context.d.ts.map +1 -1
  90. package/dist/esm/components/ai-elements/meta/context.labels.d.ts.map +1 -1
  91. package/dist/esm/components/ai-elements/meta/context.lazy.d.ts.map +1 -1
  92. package/dist/esm/components/ai-elements/meta/context.lazy.js +13 -11
  93. package/dist/esm/components/ai-elements/meta/context.lazy.js.map +1 -1
  94. package/dist/esm/components/ai-elements/meta/model-selector.d.ts.map +1 -1
  95. package/dist/esm/components/ai-elements/meta/model-selector.labels.d.ts.map +1 -1
  96. package/dist/esm/components/ai-elements/meta/open-in-chat.d.ts.map +1 -1
  97. package/dist/esm/components/ai-elements/meta/open-in-chat.labels.d.ts.map +1 -1
  98. package/dist/esm/components/ai-elements/shared/loader.d.ts.map +1 -1
  99. package/dist/esm/components/ai-elements/shared/loader.labels.d.ts.map +1 -1
  100. package/dist/esm/components/ai-elements/shared/shimmer.d.ts.map +1 -1
  101. package/dist/esm/components/ai-elements/shared/shimmer.labels.d.ts.map +1 -1
  102. package/dist/esm/components/ai-elements/stream/execution-stream.d.ts.map +1 -1
  103. package/dist/esm/components/ai-elements/stream/execution-stream.labels.d.ts.map +1 -1
  104. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts +6 -0
  105. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts.map +1 -1
  106. package/dist/esm/components/ai-elements/trace/chain-of-thought.js +13 -1
  107. package/dist/esm/components/ai-elements/trace/chain-of-thought.js.map +1 -1
  108. package/dist/esm/components/ai-elements/trace/chain-of-thought.labels.d.ts.map +1 -1
  109. package/dist/esm/components/ai-elements/trace/checkpoint.d.ts.map +1 -1
  110. package/dist/esm/components/ai-elements/trace/checkpoint.labels.d.ts.map +1 -1
  111. package/dist/esm/components/ai-elements/trace/inline-citation.d.ts.map +1 -1
  112. package/dist/esm/components/ai-elements/trace/inline-citation.labels.d.ts.map +1 -1
  113. package/dist/esm/components/ai-elements/trace/plan.d.ts.map +1 -1
  114. package/dist/esm/components/ai-elements/trace/plan.labels.d.ts.map +1 -1
  115. package/dist/esm/components/ai-elements/trace/reasoning.d.ts.map +1 -1
  116. package/dist/esm/components/ai-elements/trace/reasoning.labels.d.ts.map +1 -1
  117. package/dist/esm/components/app/app-layout-consent-gate.d.ts +23 -0
  118. package/dist/esm/components/app/app-layout-consent-gate.d.ts.map +1 -0
  119. package/dist/esm/components/app/app-layout-consent-gate.js +133 -0
  120. package/dist/esm/components/app/app-layout-consent-gate.js.map +1 -0
  121. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts +19 -0
  122. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts.map +1 -0
  123. package/dist/esm/components/app/app-layout-document-acceptance-gate.js +56 -0
  124. package/dist/esm/components/app/app-layout-document-acceptance-gate.js.map +1 -0
  125. package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
  126. package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
  127. package/dist/esm/components/app/app-layout-main-container.labels.js +21 -0
  128. package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
  129. package/dist/esm/components/app/public-layout-main-container.d.ts +1 -1
  130. package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
  131. package/dist/esm/components/app/public-layout-main-container.js +9 -8
  132. package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
  133. package/dist/esm/components/app/public-layout-main-container.labels.d.ts.map +1 -1
  134. package/dist/esm/components/app/public-layout-terms.d.ts +46 -0
  135. package/dist/esm/components/app/public-layout-terms.d.ts.map +1 -0
  136. package/dist/esm/components/app/public-layout-terms.js +137 -0
  137. package/dist/esm/components/app/public-layout-terms.js.map +1 -0
  138. package/dist/esm/components/billing/billing-format.utils.d.ts.map +1 -1
  139. package/dist/esm/components/billing/billing-invoice-history.d.ts +1 -1
  140. package/dist/esm/components/billing/billing-invoice-history.d.ts.map +1 -1
  141. package/dist/esm/components/billing/billing-invoice-history.js +3 -1
  142. package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
  143. package/dist/esm/components/billing/billing-invoice-history.labels.d.ts.map +1 -1
  144. package/dist/esm/components/billing/billing-invoice-history.labels.js +1 -0
  145. package/dist/esm/components/billing/billing-invoice-history.labels.js.map +1 -1
  146. package/dist/esm/components/billing/billing-plan-change-preview.d.ts +5 -0
  147. package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -0
  148. package/dist/esm/components/billing/billing-plan-change-preview.js +22 -0
  149. package/dist/esm/components/billing/billing-plan-change-preview.js.map +1 -0
  150. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts +3 -0
  151. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts.map +1 -0
  152. package/dist/esm/components/billing/billing-plan-change-preview.labels.js +19 -0
  153. package/dist/esm/components/billing/billing-plan-change-preview.labels.js.map +1 -0
  154. package/dist/esm/components/billing/billing-portal-link.d.ts +1 -1
  155. package/dist/esm/components/billing/billing-portal-link.d.ts.map +1 -1
  156. package/dist/esm/components/billing/billing-portal-link.js +3 -1
  157. package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
  158. package/dist/esm/components/billing/billing-portal-link.labels.d.ts.map +1 -1
  159. package/dist/esm/components/billing/billing-portal-link.labels.js +1 -0
  160. package/dist/esm/components/billing/billing-portal-link.labels.js.map +1 -1
  161. package/dist/esm/components/billing/billing-pricing-table.d.ts +1 -1
  162. package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
  163. package/dist/esm/components/billing/billing-pricing-table.js +4 -2
  164. package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
  165. package/dist/esm/components/billing/billing-pricing-table.labels.d.ts.map +1 -1
  166. package/dist/esm/components/billing/billing-pricing-table.labels.js +1 -0
  167. package/dist/esm/components/billing/billing-pricing-table.labels.js.map +1 -1
  168. package/dist/esm/components/billing/billing-subscription-status.d.ts +1 -1
  169. package/dist/esm/components/billing/billing-subscription-status.d.ts.map +1 -1
  170. package/dist/esm/components/billing/billing-subscription-status.js +3 -1
  171. package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
  172. package/dist/esm/components/billing/billing-subscription-status.labels.d.ts.map +1 -1
  173. package/dist/esm/components/billing/billing-subscription-status.labels.js +1 -0
  174. package/dist/esm/components/billing/billing-subscription-status.labels.js.map +1 -1
  175. package/dist/esm/components/billing/billing-usage-dashboard.d.ts +1 -1
  176. package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
  177. package/dist/esm/components/billing/billing-usage-dashboard.js +4 -4
  178. package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
  179. package/dist/esm/components/billing/billing-usage-dashboard.labels.d.ts.map +1 -1
  180. package/dist/esm/components/billing/billing-usage-dashboard.labels.js +2 -0
  181. package/dist/esm/components/billing/billing-usage-dashboard.labels.js.map +1 -1
  182. package/dist/esm/components/data-display/avatar.d.ts.map +1 -1
  183. package/dist/esm/components/data-display/avatar.labels.d.ts.map +1 -1
  184. package/dist/esm/components/data-display/badge.d.ts.map +1 -1
  185. package/dist/esm/components/data-display/badge.js +16 -15
  186. package/dist/esm/components/data-display/badge.js.map +1 -1
  187. package/dist/esm/components/data-display/badge.labels.d.ts.map +1 -1
  188. package/dist/esm/components/data-display/description-list.d.ts +2 -1
  189. package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
  190. package/dist/esm/components/data-display/description-list.js +24 -8
  191. package/dist/esm/components/data-display/description-list.js.map +1 -1
  192. package/dist/esm/components/data-display/description-list.labels.d.ts.map +1 -1
  193. package/dist/esm/components/data-display/duration.d.ts +15 -0
  194. package/dist/esm/components/data-display/duration.d.ts.map +1 -0
  195. package/dist/esm/components/data-display/duration.js +50 -0
  196. package/dist/esm/components/data-display/duration.js.map +1 -0
  197. package/dist/esm/components/data-display/duration.labels.d.ts +15 -0
  198. package/dist/esm/components/data-display/duration.labels.d.ts.map +1 -0
  199. package/dist/esm/components/data-display/duration.labels.js +35 -0
  200. package/dist/esm/components/data-display/duration.labels.js.map +1 -0
  201. package/dist/esm/components/data-display/formatters/display-field-address.d.ts +21 -0
  202. package/dist/esm/components/data-display/formatters/display-field-address.d.ts.map +1 -0
  203. package/dist/esm/components/data-display/formatters/display-field-address.js +75 -0
  204. package/dist/esm/components/data-display/formatters/display-field-address.js.map +1 -0
  205. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts +3 -0
  206. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts.map +1 -0
  207. package/dist/esm/components/data-display/formatters/display-field-address.labels.js +13 -0
  208. package/dist/esm/components/data-display/formatters/display-field-address.labels.js.map +1 -0
  209. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.d.ts.map +1 -1
  210. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js +6 -2
  211. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js.map +1 -1
  212. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.labels.d.ts.map +1 -1
  213. package/dist/esm/components/data-display/formatters/display-field-boolean.d.ts.map +1 -1
  214. package/dist/esm/components/data-display/formatters/display-field-boolean.js +2 -2
  215. package/dist/esm/components/data-display/formatters/display-field-boolean.js.map +1 -1
  216. package/dist/esm/components/data-display/formatters/display-field-boolean.labels.d.ts.map +1 -1
  217. package/dist/esm/components/data-display/formatters/display-field-code.d.ts.map +1 -1
  218. package/dist/esm/components/data-display/formatters/display-field-code.js +2 -2
  219. package/dist/esm/components/data-display/formatters/display-field-code.js.map +1 -1
  220. package/dist/esm/components/data-display/formatters/display-field-code.labels.d.ts.map +1 -1
  221. package/dist/esm/components/data-display/formatters/display-field-date.d.ts +3 -3
  222. package/dist/esm/components/data-display/formatters/display-field-date.d.ts.map +1 -1
  223. package/dist/esm/components/data-display/formatters/display-field-date.js +17 -4
  224. package/dist/esm/components/data-display/formatters/display-field-date.js.map +1 -1
  225. package/dist/esm/components/data-display/formatters/display-field-date.labels.d.ts.map +1 -1
  226. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts +3 -3
  227. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts.map +1 -1
  228. package/dist/esm/components/data-display/formatters/display-field-datetime.js +17 -4
  229. package/dist/esm/components/data-display/formatters/display-field-datetime.js.map +1 -1
  230. package/dist/esm/components/data-display/formatters/display-field-datetime.labels.d.ts.map +1 -1
  231. package/dist/esm/components/data-display/formatters/display-field-duration.d.ts.map +1 -1
  232. package/dist/esm/components/data-display/formatters/display-field-duration.labels.d.ts.map +1 -1
  233. package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
  234. package/dist/esm/components/data-display/formatters/display-field-enum.js +12 -8
  235. package/dist/esm/components/data-display/formatters/display-field-enum.js.map +1 -1
  236. package/dist/esm/components/data-display/formatters/display-field-enum.labels.d.ts.map +1 -1
  237. package/dist/esm/components/data-display/formatters/display-field-file-audio.d.ts.map +1 -1
  238. package/dist/esm/components/data-display/formatters/display-field-file-audio.js +2 -1
  239. package/dist/esm/components/data-display/formatters/display-field-file-audio.js.map +1 -1
  240. package/dist/esm/components/data-display/formatters/display-field-file-audio.labels.d.ts.map +1 -1
  241. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts +4 -1
  242. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts.map +1 -1
  243. package/dist/esm/components/data-display/formatters/display-field-file-document.js +18 -5
  244. package/dist/esm/components/data-display/formatters/display-field-file-document.js.map +1 -1
  245. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.d.ts.map +1 -1
  246. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js +20 -0
  247. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js.map +1 -1
  248. package/dist/esm/components/data-display/formatters/display-field-file-gallery.d.ts.map +1 -1
  249. package/dist/esm/components/data-display/formatters/display-field-file-gallery.labels.d.ts.map +1 -1
  250. package/dist/esm/components/data-display/formatters/display-field-file-image.d.ts.map +1 -1
  251. package/dist/esm/components/data-display/formatters/display-field-file-image.js +3 -1
  252. package/dist/esm/components/data-display/formatters/display-field-file-image.js.map +1 -1
  253. package/dist/esm/components/data-display/formatters/display-field-file-image.labels.d.ts.map +1 -1
  254. package/dist/esm/components/data-display/formatters/display-field-file-video.d.ts.map +1 -1
  255. package/dist/esm/components/data-display/formatters/display-field-file-video.labels.d.ts.map +1 -1
  256. package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
  257. package/dist/esm/components/data-display/formatters/display-field-file.js +2 -2
  258. package/dist/esm/components/data-display/formatters/display-field-file.js.map +1 -1
  259. package/dist/esm/components/data-display/formatters/display-field-file.labels.d.ts.map +1 -1
  260. package/dist/esm/components/data-display/formatters/display-field-file.labels.js +1 -0
  261. package/dist/esm/components/data-display/formatters/display-field-file.labels.js.map +1 -1
  262. package/dist/esm/components/data-display/formatters/display-field-format.utils.d.ts.map +1 -1
  263. package/dist/esm/components/data-display/formatters/display-field-i18n.utils.d.ts.map +1 -1
  264. package/dist/esm/components/data-display/formatters/display-field-money.d.ts.map +1 -1
  265. package/dist/esm/components/data-display/formatters/display-field-money.labels.d.ts.map +1 -1
  266. package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
  267. package/dist/esm/components/data-display/formatters/display-field-number.js +2 -2
  268. package/dist/esm/components/data-display/formatters/display-field-number.js.map +1 -1
  269. package/dist/esm/components/data-display/formatters/display-field-number.labels.d.ts.map +1 -1
  270. package/dist/esm/components/data-display/formatters/display-field-phone.d.ts.map +1 -1
  271. package/dist/esm/components/data-display/formatters/display-field-phone.labels.d.ts.map +1 -1
  272. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.d.ts.map +1 -1
  273. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.labels.d.ts.map +1 -1
  274. package/dist/esm/components/data-display/formatters/display-field-range-date.d.ts.map +1 -1
  275. package/dist/esm/components/data-display/formatters/display-field-range-date.labels.d.ts.map +1 -1
  276. package/dist/esm/components/data-display/formatters/display-field-range-datetime.d.ts.map +1 -1
  277. package/dist/esm/components/data-display/formatters/display-field-range-datetime.labels.d.ts.map +1 -1
  278. package/dist/esm/components/data-display/formatters/display-field-range-money.d.ts.map +1 -1
  279. package/dist/esm/components/data-display/formatters/display-field-range-money.labels.d.ts.map +1 -1
  280. package/dist/esm/components/data-display/formatters/display-field-range-number.d.ts.map +1 -1
  281. package/dist/esm/components/data-display/formatters/display-field-range-number.labels.d.ts.map +1 -1
  282. package/dist/esm/components/data-display/formatters/display-field-range-time.d.ts.map +1 -1
  283. package/dist/esm/components/data-display/formatters/display-field-range-time.labels.d.ts.map +1 -1
  284. package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
  285. package/dist/esm/components/data-display/formatters/display-field-string.js +82 -7
  286. package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
  287. package/dist/esm/components/data-display/formatters/display-field-string.labels.d.ts.map +1 -1
  288. package/dist/esm/components/data-display/formatters/display-field-time.d.ts.map +1 -1
  289. package/dist/esm/components/data-display/formatters/display-field-time.labels.d.ts.map +1 -1
  290. package/dist/esm/components/data-display/identifier.d.ts +19 -0
  291. package/dist/esm/components/data-display/identifier.d.ts.map +1 -0
  292. package/dist/esm/components/data-display/identifier.js +21 -0
  293. package/dist/esm/components/data-display/identifier.js.map +1 -0
  294. package/dist/esm/components/data-display/kbd.d.ts +17 -0
  295. package/dist/esm/components/data-display/kbd.d.ts.map +1 -0
  296. package/dist/esm/components/data-display/kbd.js +18 -0
  297. package/dist/esm/components/data-display/kbd.js.map +1 -0
  298. package/dist/esm/components/data-display/markdown-content.d.ts.map +1 -1
  299. package/dist/esm/components/data-display/markdown-stream-runtime.d.ts.map +1 -1
  300. package/dist/esm/components/data-display/markdown-stream.lazy.d.ts.map +1 -1
  301. package/dist/esm/components/data-display/markdown-stream.lazy.js +13 -2
  302. package/dist/esm/components/data-display/markdown-stream.lazy.js.map +1 -1
  303. package/dist/esm/components/data-display/notification-indicator.d.ts.map +1 -1
  304. package/dist/esm/components/data-display/notification-indicator.js +3 -11
  305. package/dist/esm/components/data-display/notification-indicator.js.map +1 -1
  306. package/dist/esm/components/data-display/notification-indicator.labels.d.ts.map +1 -1
  307. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts +63 -0
  308. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts.map +1 -0
  309. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js +75 -0
  310. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js.map +1 -0
  311. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts +32 -0
  312. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts.map +1 -0
  313. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js +36 -0
  314. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js.map +1 -0
  315. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts +46 -6
  316. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  317. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js +70 -46
  318. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js.map +1 -1
  319. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts +12 -2
  320. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts.map +1 -1
  321. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js +3 -2
  322. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js.map +1 -1
  323. package/dist/esm/components/data-display/timeline.d.ts +3 -0
  324. package/dist/esm/components/data-display/timeline.d.ts.map +1 -0
  325. package/dist/esm/components/data-display/timeline.js +92 -0
  326. package/dist/esm/components/data-display/timeline.js.map +1 -0
  327. package/dist/esm/components/feedback/celebration-overlay.d.ts +13 -4
  328. package/dist/esm/components/feedback/celebration-overlay.d.ts.map +1 -1
  329. package/dist/esm/components/feedback/celebration-overlay.js +146 -22
  330. package/dist/esm/components/feedback/celebration-overlay.js.map +1 -1
  331. package/dist/esm/components/feedback/celebration-overlay.labels.d.ts.map +1 -1
  332. package/dist/esm/components/feedback/danger-zone.d.ts.map +1 -1
  333. package/dist/esm/components/feedback/danger-zone.labels.d.ts.map +1 -1
  334. package/dist/esm/components/feedback/empty-state.d.ts.map +1 -1
  335. package/dist/esm/components/feedback/empty-state.js +11 -1
  336. package/dist/esm/components/feedback/empty-state.js.map +1 -1
  337. package/dist/esm/components/feedback/empty-state.labels.d.ts.map +1 -1
  338. package/dist/esm/components/feedback/error-display.d.ts.map +1 -1
  339. package/dist/esm/components/feedback/error-display.labels.d.ts.map +1 -1
  340. package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
  341. package/dist/esm/components/feedback/features/feature-limit-indicator.labels.d.ts.map +1 -1
  342. package/dist/esm/components/feedback/features/feature-lock-badge.d.ts.map +1 -1
  343. package/dist/esm/components/feedback/features/feature-lock-badge.labels.d.ts.map +1 -1
  344. package/dist/esm/components/feedback/features/feature-unavailable-dialog.d.ts.map +1 -1
  345. package/dist/esm/components/feedback/features/feature-unavailable-dialog.labels.d.ts.map +1 -1
  346. package/dist/esm/components/feedback/features/feature-unavailable-prompt.d.ts.map +1 -1
  347. package/dist/esm/components/feedback/features/feature-unavailable-prompt.js.map +1 -1
  348. package/dist/esm/components/feedback/features/feature-unavailable-prompt.labels.d.ts.map +1 -1
  349. package/dist/esm/components/feedback/loading-overlay.d.ts.map +1 -1
  350. package/dist/esm/components/feedback/loading-overlay.labels.d.ts.map +1 -1
  351. package/dist/esm/components/feedback/loading-spinner.d.ts.map +1 -1
  352. package/dist/esm/components/feedback/loading-spinner.labels.d.ts.map +1 -1
  353. package/dist/esm/components/feedback/notification-center.d.ts.map +1 -1
  354. package/dist/esm/components/feedback/notification-center.js +6 -6
  355. package/dist/esm/components/feedback/notification-center.js.map +1 -1
  356. package/dist/esm/components/feedback/operations-confirm-critical.d.ts +1 -1
  357. package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
  358. package/dist/esm/components/feedback/operations-confirm-critical.js +9 -7
  359. package/dist/esm/components/feedback/operations-confirm-critical.js.map +1 -1
  360. package/dist/esm/components/feedback/operations-confirm-critical.labels.d.ts.map +1 -1
  361. package/dist/esm/components/feedback/progress.d.ts.map +1 -1
  362. package/dist/esm/components/feedback/progress.labels.d.ts.map +1 -1
  363. package/dist/esm/components/feedback/skeleton.d.ts.map +1 -1
  364. package/dist/esm/components/feedback/skeleton.labels.d.ts.map +1 -1
  365. package/dist/esm/components/feedback/toast.d.ts.map +1 -1
  366. package/dist/esm/components/feedback/toast.labels.d.ts.map +1 -1
  367. package/dist/esm/components/form/autosave-indicator.d.ts.map +1 -1
  368. package/dist/esm/components/form/autosave-indicator.labels.d.ts.map +1 -1
  369. package/dist/esm/components/form/chromes/field.d.ts.map +1 -1
  370. package/dist/esm/components/form/chromes/field.js +11 -3
  371. package/dist/esm/components/form/chromes/field.js.map +1 -1
  372. package/dist/esm/components/form/chromes/field.labels.d.ts.map +1 -1
  373. package/dist/esm/components/form/chromes/form-primitive.d.ts.map +1 -1
  374. package/dist/esm/components/form/chromes/form-primitive.labels.d.ts.map +1 -1
  375. package/dist/esm/components/form/chromes/form-primitive.labels.js +28 -0
  376. package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
  377. package/dist/esm/components/form/combobox.d.ts.map +1 -1
  378. package/dist/esm/components/form/combobox.js +4 -3
  379. package/dist/esm/components/form/combobox.js.map +1 -1
  380. package/dist/esm/components/form/combobox.labels.d.ts.map +1 -1
  381. package/dist/esm/components/form/controls/boolean/checkbox.d.ts.map +1 -1
  382. package/dist/esm/components/form/controls/boolean/checkbox.js +2 -2
  383. package/dist/esm/components/form/controls/boolean/checkbox.js.map +1 -1
  384. package/dist/esm/components/form/controls/boolean/checkbox.labels.d.ts.map +1 -1
  385. package/dist/esm/components/form/controls/boolean/switch.d.ts.map +1 -1
  386. package/dist/esm/components/form/controls/boolean/switch.labels.d.ts.map +1 -1
  387. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.d.ts.map +1 -1
  388. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.labels.d.ts.map +1 -1
  389. package/dist/esm/components/form/controls/boolean/toggle.d.ts.map +1 -1
  390. package/dist/esm/components/form/controls/boolean/toggle.labels.d.ts.map +1 -1
  391. package/dist/esm/components/form/controls/code-editor/cm6-editor-appearance.d.ts.map +1 -1
  392. package/dist/esm/components/form/controls/code-editor/cm6-editor.d.ts.map +1 -1
  393. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.d.ts.map +1 -1
  394. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js +11 -2
  395. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js.map +1 -1
  396. package/dist/esm/components/form/controls/code-editor/form-field-code.d.ts.map +1 -1
  397. package/dist/esm/components/form/controls/code-editor/markdown-editor.d.ts.map +1 -1
  398. package/dist/esm/components/form/controls/date-time/calendar.d.ts.map +1 -1
  399. package/dist/esm/components/form/controls/date-time/calendar.labels.d.ts.map +1 -1
  400. package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
  401. package/dist/esm/components/form/controls/date-time/date-range-picker.labels.d.ts.map +1 -1
  402. package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
  403. package/dist/esm/components/form/controls/date-time/datepicker.labels.d.ts.map +1 -1
  404. package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
  405. package/dist/esm/components/form/controls/date-time/datetime-picker.labels.d.ts.map +1 -1
  406. package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
  407. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.d.ts.map +1 -1
  408. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js +11 -2
  409. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js.map +1 -1
  410. package/dist/esm/components/form/controls/date-time/time-picker.d.ts.map +1 -1
  411. package/dist/esm/components/form/controls/date-time/time-picker.labels.d.ts.map +1 -1
  412. package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
  413. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.d.ts.map +1 -1
  414. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js +11 -2
  415. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js.map +1 -1
  416. package/dist/esm/components/form/controls/enum/radio.d.ts +1 -1
  417. package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
  418. package/dist/esm/components/form/controls/enum/radio.js +13 -12
  419. package/dist/esm/components/form/controls/enum/radio.js.map +1 -1
  420. package/dist/esm/components/form/controls/enum/radio.labels.d.ts.map +1 -1
  421. package/dist/esm/components/form/controls/enum/select-multiple.d.ts.map +1 -1
  422. package/dist/esm/components/form/controls/enum/select-multiple.js +5 -3
  423. package/dist/esm/components/form/controls/enum/select-multiple.js.map +1 -1
  424. package/dist/esm/components/form/controls/enum/select-multiple.labels.d.ts.map +1 -1
  425. package/dist/esm/components/form/controls/enum/select.d.ts.map +1 -1
  426. package/dist/esm/components/form/controls/enum/select.labels.d.ts.map +1 -1
  427. package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
  428. package/dist/esm/components/form/controls/enum/toggle-group.js +96 -5
  429. package/dist/esm/components/form/controls/enum/toggle-group.js.map +1 -1
  430. package/dist/esm/components/form/controls/enum/toggle-group.labels.d.ts.map +1 -1
  431. package/dist/esm/components/form/controls/file/file-upload.d.ts.map +1 -1
  432. package/dist/esm/components/form/controls/file/file-upload.labels.d.ts.map +1 -1
  433. package/dist/esm/components/form/controls/file/image-crop.d.ts.map +1 -1
  434. package/dist/esm/components/form/controls/file/image-crop.labels.d.ts.map +1 -1
  435. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts +44 -0
  436. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts.map +1 -0
  437. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js +137 -0
  438. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js.map +1 -0
  439. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts +22 -0
  440. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts.map +1 -0
  441. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js +27 -0
  442. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js.map +1 -0
  443. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts +54 -0
  444. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts.map +1 -0
  445. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js +159 -0
  446. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js.map +1 -0
  447. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts +22 -0
  448. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts.map +1 -0
  449. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js +27 -0
  450. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js.map +1 -0
  451. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts +41 -0
  452. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts.map +1 -0
  453. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js +129 -0
  454. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js.map +1 -0
  455. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts +22 -0
  456. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts.map +1 -0
  457. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js +27 -0
  458. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js.map +1 -0
  459. package/dist/esm/components/form/controls/input-group.d.ts.map +1 -1
  460. package/dist/esm/components/form/controls/input-group.labels.d.ts.map +1 -1
  461. package/dist/esm/components/form/controls/input.d.ts.map +1 -1
  462. package/dist/esm/components/form/controls/input.labels.d.ts.map +1 -1
  463. package/dist/esm/components/form/controls/number/slider.d.ts.map +1 -1
  464. package/dist/esm/components/form/controls/number/slider.labels.d.ts.map +1 -1
  465. package/dist/esm/components/form/controls/number/slider.labels.js +9 -2
  466. package/dist/esm/components/form/controls/number/slider.labels.js.map +1 -1
  467. package/dist/esm/components/form/controls/string/color-input.d.ts.map +1 -1
  468. package/dist/esm/components/form/controls/string/color-input.labels.d.ts.map +1 -1
  469. package/dist/esm/components/form/controls/string/color-picker-surface.d.ts.map +1 -1
  470. package/dist/esm/components/form/controls/string/color-picker-surface.js.map +1 -1
  471. package/dist/esm/components/form/controls/string/inline-edit-text.d.ts.map +1 -1
  472. package/dist/esm/components/form/controls/string/input-otp.d.ts.map +1 -1
  473. package/dist/esm/components/form/controls/string/input-otp.labels.d.ts.map +1 -1
  474. package/dist/esm/components/form/controls/string/password-input.d.ts.map +1 -1
  475. package/dist/esm/components/form/controls/string/password-input.labels.d.ts.map +1 -1
  476. package/dist/esm/components/form/controls/string/password-input.labels.js +9 -2
  477. package/dist/esm/components/form/controls/string/password-input.labels.js.map +1 -1
  478. package/dist/esm/components/form/controls/string/textarea.d.ts.map +1 -1
  479. package/dist/esm/components/form/controls/string/textarea.labels.d.ts.map +1 -1
  480. package/dist/esm/components/layout/aspect-ratio.d.ts.map +1 -1
  481. package/dist/esm/components/layout/aspect-ratio.labels.d.ts.map +1 -1
  482. package/dist/esm/components/layout/carousel.d.ts.map +1 -1
  483. package/dist/esm/components/layout/carousel.labels.d.ts.map +1 -1
  484. package/dist/esm/components/layout/divider.d.ts.map +1 -1
  485. package/dist/esm/components/layout/divider.labels.d.ts.map +1 -1
  486. package/dist/esm/components/layout/resizable.d.ts.map +1 -1
  487. package/dist/esm/components/layout/resizable.labels.d.ts.map +1 -1
  488. package/dist/esm/components/layout/scroll-area.d.ts.map +1 -1
  489. package/dist/esm/components/layout/scroll-area.labels.d.ts.map +1 -1
  490. package/dist/esm/components/layout/separator.d.ts.map +1 -1
  491. package/dist/esm/components/layout/separator.labels.d.ts.map +1 -1
  492. package/dist/esm/components/navigation/app-level/activity-bar.d.ts.map +1 -1
  493. package/dist/esm/components/navigation/app-level/activity-bar.labels.d.ts.map +1 -1
  494. package/dist/esm/components/navigation/app-level/command-menu.d.ts.map +1 -1
  495. package/dist/esm/components/navigation/app-level/command-menu.js +2 -2
  496. package/dist/esm/components/navigation/app-level/command-menu.js.map +1 -1
  497. package/dist/esm/components/navigation/app-level/command-menu.labels.d.ts.map +1 -1
  498. package/dist/esm/components/navigation/app-level/control-panel.d.ts.map +1 -1
  499. package/dist/esm/components/navigation/app-level/control-panel.labels.d.ts.map +1 -1
  500. package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
  501. package/dist/esm/components/navigation/app-level/menu-user-org.labels.d.ts.map +1 -1
  502. package/dist/esm/components/navigation/app-level/menubar.d.ts.map +1 -1
  503. package/dist/esm/components/navigation/app-level/menubar.js +35 -13
  504. package/dist/esm/components/navigation/app-level/menubar.js.map +1 -1
  505. package/dist/esm/components/navigation/app-level/menubar.labels.d.ts.map +1 -1
  506. package/dist/esm/components/navigation/app-level/navigation-back.d.ts.map +1 -1
  507. package/dist/esm/components/navigation/app-level/navigation-back.js +10 -2
  508. package/dist/esm/components/navigation/app-level/navigation-back.js.map +1 -1
  509. package/dist/esm/components/navigation/app-level/navigation-back.labels.d.ts.map +1 -1
  510. package/dist/esm/components/navigation/app-level/notification-center.d.ts.map +1 -1
  511. package/dist/esm/components/navigation/app-level/notification-center.js.map +1 -1
  512. package/dist/esm/components/navigation/app-level/notification-center.labels.d.ts.map +1 -1
  513. package/dist/esm/components/navigation/app-level/notification-center.labels.js +15 -0
  514. package/dist/esm/components/navigation/app-level/notification-center.labels.js.map +1 -1
  515. package/dist/esm/components/navigation/app-level/quick-action-button.d.ts.map +1 -1
  516. package/dist/esm/components/navigation/app-level/quick-action-button.labels.d.ts.map +1 -1
  517. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js +4 -0
  518. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js.map +1 -1
  519. package/dist/esm/components/navigation/app-level/quick-switcher.d.ts.map +1 -1
  520. package/dist/esm/components/navigation/app-level/quick-switcher.labels.d.ts.map +1 -1
  521. package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
  522. package/dist/esm/components/navigation/app-level/sidebar.js +38 -22
  523. package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
  524. package/dist/esm/components/navigation/app-level/sidebar.labels.d.ts.map +1 -1
  525. package/dist/esm/components/navigation/app-level/sidebar.labels.js +1 -0
  526. package/dist/esm/components/navigation/app-level/sidebar.labels.js.map +1 -1
  527. package/dist/esm/components/navigation/app-level/status-bar.d.ts.map +1 -1
  528. package/dist/esm/components/navigation/app-level/status-bar.labels.d.ts.map +1 -1
  529. package/dist/esm/components/navigation/app-level/toolbar.d.ts.map +1 -1
  530. package/dist/esm/components/navigation/app-level/toolbar.labels.d.ts.map +1 -1
  531. package/dist/esm/components/navigation/app-level/utility-panel.d.ts.map +1 -1
  532. package/dist/esm/components/navigation/app-level/utility-panel.js +30 -5
  533. package/dist/esm/components/navigation/app-level/utility-panel.js.map +1 -1
  534. package/dist/esm/components/navigation/app-level/utility-panel.labels.d.ts.map +1 -1
  535. package/dist/esm/components/navigation/app-level/utility-panel.labels.js.map +1 -1
  536. package/dist/esm/components/navigation/breadcrumb.d.ts.map +1 -1
  537. package/dist/esm/components/navigation/breadcrumb.labels.d.ts.map +1 -1
  538. package/dist/esm/components/navigation/command.d.ts.map +1 -1
  539. package/dist/esm/components/navigation/command.js +2 -2
  540. package/dist/esm/components/navigation/command.js.map +1 -1
  541. package/dist/esm/components/navigation/command.labels.d.ts.map +1 -1
  542. package/dist/esm/components/navigation/menu-bar.d.ts.map +1 -1
  543. package/dist/esm/components/navigation/menu-bar.labels.d.ts.map +1 -1
  544. package/dist/esm/components/navigation/navbar.d.ts.map +1 -1
  545. package/dist/esm/components/navigation/navbar.labels.d.ts.map +1 -1
  546. package/dist/esm/components/navigation/sidebar.d.ts.map +1 -1
  547. package/dist/esm/components/navigation/sidebar.labels.d.ts.map +1 -1
  548. package/dist/esm/components/overlays/containers/alert-dialog.d.ts.map +1 -1
  549. package/dist/esm/components/overlays/containers/alert-dialog.js +11 -1
  550. package/dist/esm/components/overlays/containers/alert-dialog.js.map +1 -1
  551. package/dist/esm/components/overlays/containers/alert-dialog.labels.d.ts.map +1 -1
  552. package/dist/esm/components/overlays/containers/alert.d.ts.map +1 -1
  553. package/dist/esm/components/overlays/containers/alert.labels.d.ts.map +1 -1
  554. package/dist/esm/components/overlays/containers/dialog.d.ts.map +1 -1
  555. package/dist/esm/components/overlays/containers/dialog.js +11 -1
  556. package/dist/esm/components/overlays/containers/dialog.js.map +1 -1
  557. package/dist/esm/components/overlays/containers/dialog.labels.d.ts.map +1 -1
  558. package/dist/esm/components/overlays/containers/drawer.d.ts.map +1 -1
  559. package/dist/esm/components/overlays/containers/drawer.labels.d.ts.map +1 -1
  560. package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
  561. package/dist/esm/components/overlays/containers/sheet.labels.d.ts.map +1 -1
  562. package/dist/esm/components/overlays/floating/context-menu.d.ts.map +1 -1
  563. package/dist/esm/components/overlays/floating/context-menu.labels.d.ts.map +1 -1
  564. package/dist/esm/components/overlays/floating/dropdown-menu.d.ts.map +1 -1
  565. package/dist/esm/components/overlays/floating/dropdown-menu.labels.d.ts.map +1 -1
  566. package/dist/esm/components/overlays/floating/hover-card.d.ts.map +1 -1
  567. package/dist/esm/components/overlays/floating/hover-card.labels.d.ts.map +1 -1
  568. package/dist/esm/components/overlays/floating/popover.d.ts.map +1 -1
  569. package/dist/esm/components/overlays/floating/popover.labels.d.ts.map +1 -1
  570. package/dist/esm/components/overlays/floating/tooltip.d.ts.map +1 -1
  571. package/dist/esm/components/overlays/floating/tooltip.labels.d.ts.map +1 -1
  572. package/dist/esm/components/sections/accordion.d.ts.map +1 -1
  573. package/dist/esm/components/sections/accordion.labels.d.ts.map +1 -1
  574. package/dist/esm/components/sections/card.d.ts.map +1 -1
  575. package/dist/esm/components/sections/card.js +71 -6
  576. package/dist/esm/components/sections/card.js.map +1 -1
  577. package/dist/esm/components/sections/card.labels.d.ts.map +1 -1
  578. package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
  579. package/dist/esm/components/sections/collapsible.labels.d.ts.map +1 -1
  580. package/dist/esm/components/sections/content-section.d.ts.map +1 -1
  581. package/dist/esm/components/sections/content-section.js +36 -6
  582. package/dist/esm/components/sections/content-section.js.map +1 -1
  583. package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -1
  584. package/dist/esm/components/sections/option-gesture.d.ts +15 -0
  585. package/dist/esm/components/sections/option-gesture.d.ts.map +1 -0
  586. package/dist/esm/components/sections/option-gesture.js +66 -0
  587. package/dist/esm/components/sections/option-gesture.js.map +1 -0
  588. package/dist/esm/components/sections/pagination.d.ts.map +1 -1
  589. package/dist/esm/components/sections/pagination.labels.d.ts.map +1 -1
  590. package/dist/esm/components/sections/stacked-layout.d.ts.map +1 -1
  591. package/dist/esm/components/sections/stacked-layout.labels.d.ts.map +1 -1
  592. package/dist/esm/components/sections/stepper.d.ts.map +1 -1
  593. package/dist/esm/components/sections/stepper.labels.d.ts.map +1 -1
  594. package/dist/esm/components/sections/table.d.ts.map +1 -1
  595. package/dist/esm/components/sections/table.labels.d.ts.map +1 -1
  596. package/dist/esm/components/sections/tabs.d.ts.map +1 -1
  597. package/dist/esm/components/sections/tabs.js +64 -15
  598. package/dist/esm/components/sections/tabs.js.map +1 -1
  599. package/dist/esm/components/sections/tabs.labels.d.ts.map +1 -1
  600. package/dist/esm/components/typography/heading.d.ts.map +1 -1
  601. package/dist/esm/components/typography/heading.labels.d.ts.map +1 -1
  602. package/dist/esm/components/typography/label.d.ts.map +1 -1
  603. package/dist/esm/components/typography/label.labels.d.ts.map +1 -1
  604. package/dist/esm/components/typography/link.d.ts.map +1 -1
  605. package/dist/esm/components/typography/link.js +9 -3
  606. package/dist/esm/components/typography/link.js.map +1 -1
  607. package/dist/esm/components/typography/link.labels.d.ts.map +1 -1
  608. package/dist/esm/components/typography/text.d.ts +1 -1
  609. package/dist/esm/components/typography/text.d.ts.map +1 -1
  610. package/dist/esm/components/typography/text.js +3 -2
  611. package/dist/esm/components/typography/text.js.map +1 -1
  612. package/dist/esm/components/typography/text.labels.d.ts.map +1 -1
  613. package/dist/esm/components/typography/truncated-text.d.ts.map +1 -1
  614. package/dist/esm/config/billing-shell.presets.d.ts.map +1 -1
  615. package/dist/esm/config/index.d.ts.map +1 -1
  616. package/dist/esm/config/preset-design-system.d.ts.map +1 -1
  617. package/dist/esm/config/preset-design-system.js +37 -60
  618. package/dist/esm/config/preset-design-system.js.map +1 -1
  619. package/dist/esm/config/preset-error-pages.d.ts.map +1 -1
  620. package/dist/esm/config/preset-kits.d.ts.map +1 -1
  621. package/dist/esm/config/preset-navigation.d.ts.map +1 -1
  622. package/dist/esm/config/preset-navigation.js +0 -5
  623. package/dist/esm/config/preset-navigation.js.map +1 -1
  624. package/dist/esm/config/preset-resources.d.ts.map +1 -1
  625. package/dist/esm/config/preset-shell.d.ts.map +1 -1
  626. package/dist/esm/config/preset-utils.d.ts.map +1 -1
  627. package/dist/esm/config/presets.d.ts.map +1 -1
  628. package/dist/esm/config/resources/application.resource-presets.d.ts +2 -0
  629. package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
  630. package/dist/esm/config/resources/application.resource-presets.js +163 -7
  631. package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
  632. package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
  633. package/dist/esm/config/resources/billing.resource-presets.js +1 -0
  634. package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
  635. package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
  636. package/dist/esm/config/resources/guidance.resource-presets.js +21 -5
  637. package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
  638. package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
  639. package/dist/esm/config/resources/identity.resource-presets.js +25 -3
  640. package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
  641. package/dist/esm/config/resources/index.d.ts.map +1 -1
  642. package/dist/esm/config/resources/index.js.map +1 -1
  643. package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
  644. package/dist/esm/config/resources/organizations.resource-presets.js +90 -12
  645. package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
  646. package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
  647. package/dist/esm/config/resources/security.resource-presets.d.ts +8 -2
  648. package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
  649. package/dist/esm/config/resources/security.resource-presets.js +185 -29
  650. package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
  651. package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
  652. package/dist/esm/config/resources/webhooks.resource-presets.js +27 -2
  653. package/dist/esm/config/resources/webhooks.resource-presets.js.map +1 -1
  654. package/dist/esm/index.d.ts +7 -1
  655. package/dist/esm/index.d.ts.map +1 -1
  656. package/dist/esm/index.js +7 -1
  657. package/dist/esm/index.js.map +1 -1
  658. package/dist/esm/lottie/lottie.content.definitions.d.ts.map +1 -1
  659. package/dist/esm/lottie/lottie.definitions.d.ts.map +1 -1
  660. package/dist/esm/mermaid-stub.d.ts.map +1 -1
  661. package/dist/esm/registration/register-common-enums.d.ts.map +1 -1
  662. package/dist/esm/registration/register-common-enums.js +48 -34
  663. package/dist/esm/registration/register-common-enums.js.map +1 -1
  664. package/dist/esm/registration/register-default-animations.d.ts.map +1 -1
  665. package/dist/esm/registration/register-default-icons.d.ts.map +1 -1
  666. package/dist/esm/registration/register-default-icons.js +3 -1
  667. package/dist/esm/registration/register-default-icons.js.map +1 -1
  668. package/dist/esm/registration/register-default-presets.d.ts.map +1 -1
  669. package/dist/esm/registration/register-default-presets.js +36 -4
  670. package/dist/esm/registration/register-default-presets.js.map +1 -1
  671. package/dist/esm/registration/register-provider-components.d.ts +31 -0
  672. package/dist/esm/registration/register-provider-components.d.ts.map +1 -0
  673. package/dist/esm/registration/register-provider-components.js +50 -0
  674. package/dist/esm/registration/register-provider-components.js.map +1 -0
  675. package/dist/esm/shiki-subset.d.ts +11 -3
  676. package/dist/esm/shiki-subset.d.ts.map +1 -1
  677. package/dist/esm/shiki-subset.js +10 -2
  678. package/dist/esm/shiki-subset.js.map +1 -1
  679. package/dist/esm/theme-exports.d.ts.map +1 -1
  680. package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
  681. package/dist/esm/themes/cozy.theme.js +19 -5
  682. package/dist/esm/themes/cozy.theme.js.map +1 -1
  683. package/dist/esm/themes/dense.theme.d.ts.map +1 -1
  684. package/dist/esm/themes/dense.theme.js +56 -10
  685. package/dist/esm/themes/dense.theme.js.map +1 -1
  686. package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
  687. package/dist/esm/themes/editorial.theme.js +19 -5
  688. package/dist/esm/themes/editorial.theme.js.map +1 -1
  689. package/dist/esm/themes/glass.theme.d.ts.map +1 -1
  690. package/dist/esm/themes/glass.theme.js +5 -1
  691. package/dist/esm/themes/glass.theme.js.map +1 -1
  692. package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
  693. package/dist/esm/themes/neo-brutalist.theme.js +9 -2
  694. package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
  695. package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
  696. package/dist/esm/themes/terminal.theme.js +19 -5
  697. package/dist/esm/themes/terminal.theme.js.map +1 -1
  698. package/dist/esm/themes/trading.theme.d.ts.map +1 -1
  699. package/dist/esm/themes/trading.theme.js +22 -6
  700. package/dist/esm/themes/trading.theme.js.map +1 -1
  701. package/dist/tsconfig.build.tsbuildinfo +1 -1
  702. package/package.json +29 -44
  703. package/dist/esm/.native.tsbuildinfo +0 -1
  704. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts +0 -16
  705. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +0 -1
  706. package/dist/esm/components/form/controls/form-field-checkbox-group.js +0 -143
  707. package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +0 -1
@@ -0,0 +1,75 @@
1
+ /**
2
+ * The PDF.js worker SEAM (issue #962) — how a host decides where the viewer's Web Worker comes from.
3
+ *
4
+ * `pdf-viewer.tsx` parses on a Web Worker and installs ONE port for the whole module
5
+ * (`GlobalWorkerOptions.workerPort`). By default that port is built by the Vite path in
6
+ * `pdf-viewer-worker.vite.ts`, which is what the generated application runs. Two consumers this
7
+ * framework also produces cannot use that default:
8
+ *
9
+ * - a NON-VITE bundler (the Docusaurus technical documentation is webpack) does not understand the
10
+ * `?worker` asset suffix, so it must supply the worker itself;
11
+ * - an application whose ASSETS ARE SERVED FROM ANOTHER ORIGIN (the opt-in CDN publish) gets a
12
+ * cross-origin worker URL, which `new Worker(url)` refuses outright.
13
+ *
14
+ * Both register a factory here BEFORE the viewer's chunk loads (any time before the first document
15
+ * renders — the port is installed lazily on first use). The factory takes precedence over the Vite
16
+ * default, and the default's module is then never imported, which is what keeps the `?worker` import
17
+ * out of a non-Vite bundler's graph.
18
+ *
19
+ * This module is deliberately LIGHT: no `pdfjs-dist`, no worker, nothing heavy. It lives outside the
20
+ * lazy boundary so a host can call it from its bootstrap.
21
+ *
22
+ * ## The cross-origin case, and its CSP consequence
23
+ *
24
+ * A browser only constructs a Worker from a SAME-ORIGIN script URL. When the bundle (and so the worker
25
+ * file) is served from a CDN, the answer is a same-origin `blob:` shim whose single statement is
26
+ * `import "<cdn worker url>"` — `createSameOriginModuleWorker` builds exactly that, and
27
+ * `createModuleWorkerForUrl` picks it only when the URL's origin differs from the page's. The shim needs
28
+ * the policy to admit it: `worker-src` (falling back through `child-src` to `script-src`) must include
29
+ * `blob:`, and `script-src` must already admit the CDN origin for the import inside the shim to load —
30
+ * which a CDN publish's policy does, since every script comes from there. The `SAAS_APP` CSP baseline
31
+ * sets no `worker-src`; a CDN deployment adds `worker-src 'self' blob:` (the documentation product's
32
+ * baseline already carries that pair for its own reasons).
33
+ *
34
+ * Under Vite the worker URL is obtained with the `?worker&url` suffix on `pdfjs-dist/build/pdf.worker.min.mjs`,
35
+ * which names the BUILT worker file; under webpack, `new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url)`
36
+ * resolves through the bundler (it is Vite that does not resolve a bare specifier there — recorded in
37
+ * `pdf-viewer-worker.vite.ts`).
38
+ */
39
+ let configuredFactory = null;
40
+ /**
41
+ * Register how the PDF viewer's worker is built, replacing the Vite default. Pass `null` to return
42
+ * to the default. Must run before the first document renders: the port is installed once, on first
43
+ * use, and a factory registered after that is not consulted (the viewer says so in its log).
44
+ */
45
+ export function configurePdfViewerWorker(factory) {
46
+ configuredFactory = factory;
47
+ }
48
+ /** The registered factory, or `null` when the Vite default applies. */
49
+ export function resolveConfiguredPdfViewerWorkerFactory() {
50
+ return configuredFactory;
51
+ }
52
+ /**
53
+ * A same-origin MODULE worker for a worker script served from another origin: a `blob:` script whose
54
+ * only statement imports the real one. The blob URL is kept for the page's lifetime — a module
55
+ * worker fetches its script asynchronously, and revoking the URL before that fetch completes would
56
+ * hand the worker a dead URL (which reads as "the worker never answered", the same silent shape as
57
+ * a classic-vs-module mismatch).
58
+ */
59
+ export function createSameOriginModuleWorker(workerScriptUrl) {
60
+ const shim = new Blob([`import ${JSON.stringify(workerScriptUrl)};\n`], { type: 'text/javascript' });
61
+ return new Worker(URL.createObjectURL(shim), { type: 'module' });
62
+ }
63
+ /**
64
+ * A module worker for `workerScriptUrl`: constructed directly when the script is same-origin with the
65
+ * page, through the `blob:` shim when it is not. `pageOrigin` defaults to the page's own; a host that
66
+ * knows better (a test, a non-browser runtime) passes it.
67
+ */
68
+ export function createModuleWorkerForUrl(workerScriptUrl, pageOrigin = globalThis.location?.origin ?? null) {
69
+ const resolved = new URL(workerScriptUrl, pageOrigin ?? undefined);
70
+ if (pageOrigin !== null && resolved.origin !== pageOrigin) {
71
+ return createSameOriginModuleWorker(resolved.href);
72
+ }
73
+ return new Worker(resolved, { type: 'module' });
74
+ }
75
+ //# sourceMappingURL=pdf-viewer-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-viewer-worker.js","sourceRoot":"","sources":["../../../../../../src/components/data-display/pdf-viewer/pdf-viewer-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAKH,IAAI,iBAAiB,GAAkC,IAAI,CAAA;AAE3D;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAsC;IAC7E,iBAAiB,GAAG,OAAO,CAAA;AAC7B,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,uCAAuC;IACrD,OAAO,iBAAiB,CAAA;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,eAAuB;IAClE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAA;IACpG,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,eAAuB,EAAE,aAA4B,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI;IAC/H,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,eAAe,EAAE,UAAU,IAAI,SAAS,CAAC,CAAA;IAClE,IAAI,UAAU,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1D,OAAO,4BAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;AACjD,CAAC","sourcesContent":["/**\n * The PDF.js worker SEAM (issue #962) — how a host decides where the viewer's Web Worker comes from.\n *\n * `pdf-viewer.tsx` parses on a Web Worker and installs ONE port for the whole module\n * (`GlobalWorkerOptions.workerPort`). By default that port is built by the Vite path in\n * `pdf-viewer-worker.vite.ts`, which is what the generated application runs. Two consumers this\n * framework also produces cannot use that default:\n *\n * - a NON-VITE bundler (the Docusaurus technical documentation is webpack) does not understand the\n * `?worker` asset suffix, so it must supply the worker itself;\n * - an application whose ASSETS ARE SERVED FROM ANOTHER ORIGIN (the opt-in CDN publish) gets a\n * cross-origin worker URL, which `new Worker(url)` refuses outright.\n *\n * Both register a factory here BEFORE the viewer's chunk loads (any time before the first document\n * renders — the port is installed lazily on first use). The factory takes precedence over the Vite\n * default, and the default's module is then never imported, which is what keeps the `?worker` import\n * out of a non-Vite bundler's graph.\n *\n * This module is deliberately LIGHT: no `pdfjs-dist`, no worker, nothing heavy. It lives outside the\n * lazy boundary so a host can call it from its bootstrap.\n *\n * ## The cross-origin case, and its CSP consequence\n *\n * A browser only constructs a Worker from a SAME-ORIGIN script URL. When the bundle (and so the worker\n * file) is served from a CDN, the answer is a same-origin `blob:` shim whose single statement is\n * `import \"<cdn worker url>\"` — `createSameOriginModuleWorker` builds exactly that, and\n * `createModuleWorkerForUrl` picks it only when the URL's origin differs from the page's. The shim needs\n * the policy to admit it: `worker-src` (falling back through `child-src` to `script-src`) must include\n * `blob:`, and `script-src` must already admit the CDN origin for the import inside the shim to load —\n * which a CDN publish's policy does, since every script comes from there. The `SAAS_APP` CSP baseline\n * sets no `worker-src`; a CDN deployment adds `worker-src 'self' blob:` (the documentation product's\n * baseline already carries that pair for its own reasons).\n *\n * Under Vite the worker URL is obtained with the `?worker&url` suffix on `pdfjs-dist/build/pdf.worker.min.mjs`,\n * which names the BUILT worker file; under webpack, `new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url)`\n * resolves through the bundler (it is Vite that does not resolve a bare specifier there — recorded in\n * `pdf-viewer-worker.vite.ts`).\n */\n\n/** Builds the Worker that PDF.js will parse on. Called at most once per page lifetime. */\nexport type PdfViewerWorkerFactory = () => Worker\n\nlet configuredFactory: PdfViewerWorkerFactory | null = null\n\n/**\n * Register how the PDF viewer's worker is built, replacing the Vite default. Pass `null` to return\n * to the default. Must run before the first document renders: the port is installed once, on first\n * use, and a factory registered after that is not consulted (the viewer says so in its log).\n */\nexport function configurePdfViewerWorker(factory: PdfViewerWorkerFactory | null): void {\n configuredFactory = factory\n}\n\n/** The registered factory, or `null` when the Vite default applies. */\nexport function resolveConfiguredPdfViewerWorkerFactory(): PdfViewerWorkerFactory | null {\n return configuredFactory\n}\n\n/**\n * A same-origin MODULE worker for a worker script served from another origin: a `blob:` script whose\n * only statement imports the real one. The blob URL is kept for the page's lifetime — a module\n * worker fetches its script asynchronously, and revoking the URL before that fetch completes would\n * hand the worker a dead URL (which reads as \"the worker never answered\", the same silent shape as\n * a classic-vs-module mismatch).\n */\nexport function createSameOriginModuleWorker(workerScriptUrl: string): Worker {\n const shim = new Blob([`import ${JSON.stringify(workerScriptUrl)};\\n`], { type: 'text/javascript' })\n return new Worker(URL.createObjectURL(shim), { type: 'module' })\n}\n\n/**\n * A module worker for `workerScriptUrl`: constructed directly when the script is same-origin with the\n * page, through the `blob:` shim when it is not. `pageOrigin` defaults to the page's own; a host that\n * knows better (a test, a non-browser runtime) passes it.\n */\nexport function createModuleWorkerForUrl(workerScriptUrl: string, pageOrigin: string | null = globalThis.location?.origin ?? null): Worker {\n const resolved = new URL(workerScriptUrl, pageOrigin ?? undefined)\n if (pageOrigin !== null && resolved.origin !== pageOrigin) {\n return createSameOriginModuleWorker(resolved.href)\n }\n return new Worker(resolved, { type: 'module' })\n}\n"]}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The VITE default for the PDF.js worker (issue #962) — the only module in the viewer that carries a
3
+ * bundler-specific import, kept alone so a host on another bundler never has to compile it.
4
+ *
5
+ * `pdf-viewer.tsx` reaches this file through `import(/* webpackIgnore: true *\/ …)` and ONLY when no
6
+ * factory was registered through `configurePdfViewerWorker`. webpack honours that magic comment by
7
+ * leaving the import as a native `import()` it does not follow, so the `?worker` specifier below never
8
+ * enters a webpack graph; Vite ignores the comment and bundles this module as usual.
9
+ *
10
+ * ⚠️ TWO earlier attempts at a bundler-neutral default failed at RENDER time, not build time — which
11
+ * is why they survived typecheck and the lazy-boundary guard. Both are recorded so the next author does
12
+ * not walk back into them:
13
+ *
14
+ * 1. `new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url)` — Vite's `new URL()` handling
15
+ * resolves only RELATIVE paths against the module URL; a bare package specifier is not
16
+ * bundler-resolved, so the browser requested a path that does not exist and pdf.js reported
17
+ * `Setting up fake worker failed`.
18
+ * 2. `?url` + `GlobalWorkerOptions.workerSrc` — the URL resolved and the file was served (200), but
19
+ * pdf.js instantiates a `workerSrc` string as a CLASSIC worker while pdf.js 6 ships the worker as an
20
+ * ES module. The worker never completed its handshake, so `getDocument()` hung forever with no
21
+ * error to show.
22
+ *
23
+ * `?worker` hands us a bundler-generated constructor that already carries the right worker type
24
+ * (module in dev, the built format in production), which removes the classic-vs-module question
25
+ * entirely. Vite emits the worker as its own fingerprinted file served from the SAME ORIGIN as the
26
+ * bundle — never a CDN, which would both leak document bytes' provenance and need a `worker-src`
27
+ * exception. A deployment that serves its bundle from another origin registers a factory instead
28
+ * (`createModuleWorkerForUrl` in `pdf-viewer-worker.ts`, fed the `?worker&url` URL).
29
+ */
30
+ /** The Vite-built PDF.js worker, as the generated application constructs it. */
31
+ export declare function createViteDefaultPdfViewerWorker(): Worker;
32
+ //# sourceMappingURL=pdf-viewer-worker.vite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-viewer-worker.vite.d.ts","sourceRoot":"","sources":["../../../../../../src/components/data-display/pdf-viewer/pdf-viewer-worker.vite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,gFAAgF;AAChF,wBAAgB,gCAAgC,IAAI,MAAM,CAEzD"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The VITE default for the PDF.js worker (issue #962) — the only module in the viewer that carries a
3
+ * bundler-specific import, kept alone so a host on another bundler never has to compile it.
4
+ *
5
+ * `pdf-viewer.tsx` reaches this file through `import(/* webpackIgnore: true *\/ …)` and ONLY when no
6
+ * factory was registered through `configurePdfViewerWorker`. webpack honours that magic comment by
7
+ * leaving the import as a native `import()` it does not follow, so the `?worker` specifier below never
8
+ * enters a webpack graph; Vite ignores the comment and bundles this module as usual.
9
+ *
10
+ * ⚠️ TWO earlier attempts at a bundler-neutral default failed at RENDER time, not build time — which
11
+ * is why they survived typecheck and the lazy-boundary guard. Both are recorded so the next author does
12
+ * not walk back into them:
13
+ *
14
+ * 1. `new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url)` — Vite's `new URL()` handling
15
+ * resolves only RELATIVE paths against the module URL; a bare package specifier is not
16
+ * bundler-resolved, so the browser requested a path that does not exist and pdf.js reported
17
+ * `Setting up fake worker failed`.
18
+ * 2. `?url` + `GlobalWorkerOptions.workerSrc` — the URL resolved and the file was served (200), but
19
+ * pdf.js instantiates a `workerSrc` string as a CLASSIC worker while pdf.js 6 ships the worker as an
20
+ * ES module. The worker never completed its handshake, so `getDocument()` hung forever with no
21
+ * error to show.
22
+ *
23
+ * `?worker` hands us a bundler-generated constructor that already carries the right worker type
24
+ * (module in dev, the built format in production), which removes the classic-vs-module question
25
+ * entirely. Vite emits the worker as its own fingerprinted file served from the SAME ORIGIN as the
26
+ * bundle — never a CDN, which would both leak document bytes' provenance and need a `worker-src`
27
+ * exception. A deployment that serves its bundle from another origin registers a factory instead
28
+ * (`createModuleWorkerForUrl` in `pdf-viewer-worker.ts`, fed the `?worker&url` URL).
29
+ */
30
+ // @ts-expect-error -- `?worker` is a Vite asset-import suffix with no TS declaration.
31
+ import PdfJsWorker from 'pdfjs-dist/build/pdf.worker.min.mjs?worker';
32
+ /** The Vite-built PDF.js worker, as the generated application constructs it. */
33
+ export function createViteDefaultPdfViewerWorker() {
34
+ return new PdfJsWorker();
35
+ }
36
+ //# sourceMappingURL=pdf-viewer-worker.vite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-viewer-worker.vite.js","sourceRoot":"","sources":["../../../../../../src/components/data-display/pdf-viewer/pdf-viewer-worker.vite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,sFAAsF;AACtF,OAAO,WAAW,MAAM,4CAA4C,CAAA;AAEpE,gFAAgF;AAChF,MAAM,UAAU,gCAAgC;IAC9C,OAAO,IAAI,WAAW,EAAY,CAAA;AACpC,CAAC","sourcesContent":["/**\n * The VITE default for the PDF.js worker (issue #962) — the only module in the viewer that carries a\n * bundler-specific import, kept alone so a host on another bundler never has to compile it.\n *\n * `pdf-viewer.tsx` reaches this file through `import(/* webpackIgnore: true *\\/ …)` and ONLY when no\n * factory was registered through `configurePdfViewerWorker`. webpack honours that magic comment by\n * leaving the import as a native `import()` it does not follow, so the `?worker` specifier below never\n * enters a webpack graph; Vite ignores the comment and bundles this module as usual.\n *\n * ⚠️ TWO earlier attempts at a bundler-neutral default failed at RENDER time, not build time — which\n * is why they survived typecheck and the lazy-boundary guard. Both are recorded so the next author does\n * not walk back into them:\n *\n * 1. `new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url)` — Vite's `new URL()` handling\n * resolves only RELATIVE paths against the module URL; a bare package specifier is not\n * bundler-resolved, so the browser requested a path that does not exist and pdf.js reported\n * `Setting up fake worker failed`.\n * 2. `?url` + `GlobalWorkerOptions.workerSrc` — the URL resolved and the file was served (200), but\n * pdf.js instantiates a `workerSrc` string as a CLASSIC worker while pdf.js 6 ships the worker as an\n * ES module. The worker never completed its handshake, so `getDocument()` hung forever with no\n * error to show.\n *\n * `?worker` hands us a bundler-generated constructor that already carries the right worker type\n * (module in dev, the built format in production), which removes the classic-vs-module question\n * entirely. Vite emits the worker as its own fingerprinted file served from the SAME ORIGIN as the\n * bundle — never a CDN, which would both leak document bytes' provenance and need a `worker-src`\n * exception. A deployment that serves its bundle from another origin registers a factory instead\n * (`createModuleWorkerForUrl` in `pdf-viewer-worker.ts`, fed the `?worker&url` URL).\n */\n\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\n/** The Vite-built PDF.js worker, as the generated application constructs it. */\nexport function createViteDefaultPdfViewerWorker(): Worker {\n return new PdfJsWorker() as Worker\n}\n"]}
@@ -26,13 +26,51 @@
26
26
  *
27
27
  * ## Worker
28
28
  *
29
- * PDF.js parses on a Web Worker. The URL is resolved through `import.meta.url` so
30
- * every bundler (the app's Vite, the site's Astro, the docs' Docusaurus) emits and
31
- * fingerprints it as an asset rather than fetching from a CDN — a CDN worker would
32
- * both leak document bytes' provenance and require a `worker-src` exception the CSP
33
- * pipeline should not have to make. The app's CSP must allow `worker-src 'self' blob:`.
29
+ * PDF.js parses on a Web Worker. ONE port for the whole module, installed lazily on the
30
+ * first render (`ensurePdfViewerWorkerPort`) and assigned to `GlobalWorkerOptions.workerPort`:
31
+ * the pdf.js worker multiplexes documents by id, so several viewers mounted at once (a
32
+ * THUMBNAIL in a list plus an overlay, say) share it safely, and the shared port avoids
33
+ * spawning a worker per rendered thumbnail. A per-instance `PDFWorker` was tried first
34
+ * out of a concurrency worry that does not apply.
35
+ *
36
+ * WHERE the worker comes from is the host's decision (issue #962, `pdf-viewer-worker.ts`):
37
+ * a factory registered through `configurePdfViewerWorker` wins; otherwise the Vite default
38
+ * in `pdf-viewer-worker.vite.ts` is imported — and only then, so a non-Vite bundler that
39
+ * registered a factory never compiles the `?worker` import. The default is a same-origin
40
+ * file URL, so the `SAAS_APP` CSP baseline needs nothing beyond `script-src 'self'`; the
41
+ * cross-origin (CDN publish) case and its `worker-src blob:` note live with the seam.
42
+ *
43
+ * ## Text
44
+ *
45
+ * The viewer is label-agnostic: every string it shows or announces arrives resolved in
46
+ * `labels` from its host, which owns the component's i18n catalog. A failure is shown
47
+ * as the host's labelled message and the cause is logged — a raw pdf.js exception
48
+ * message is developer text, not something to put in front of a reader.
34
49
  */
35
50
  import * as React from "react";
51
+ /**
52
+ * Install the module-wide worker port once, from the host's factory when one is registered and from
53
+ * the Vite default otherwise (issue #962). Idempotent and memoised: every render awaits the same
54
+ * installation, and a factory registered AFTER it is not consulted. The Vite module is reached
55
+ * through a dynamic import that webpack is told not to follow (`webpackIgnore`), which is what keeps
56
+ * its `?worker` specifier out of a non-Vite graph; a host on such a bundler that registered no
57
+ * factory gets a rejected installation here — surfaced as the viewer's labelled failure with the
58
+ * cause in the log, never a hang.
59
+ */
60
+ export declare function ensurePdfViewerWorkerPort(): Promise<void>;
61
+ /**
62
+ * Every string the viewer shows or announces, RESOLVED by the host. Functions where
63
+ * the text carries a number, so the host's i18n interpolation — not this module —
64
+ * decides word order.
65
+ */
66
+ export interface PdfViewerLabels {
67
+ /** Accessible name of one rendered page image. */
68
+ page(pageNumber: number): string;
69
+ /** Notice under a document longer than the render cap. */
70
+ pagesTruncated(shown: number, total: number): string;
71
+ /** Alert shown when the document cannot be rendered. */
72
+ renderFailed: string;
73
+ }
36
74
  export interface PdfViewerProps {
37
75
  /** Bytes of the PDF. Fetched by the host over the authenticated serve route. */
38
76
  data: ArrayBuffer;
@@ -43,7 +81,9 @@ export interface PdfViewerProps {
43
81
  className?: string;
44
82
  /** Accessible name for the rendered document region. */
45
83
  ariaLabel?: string;
84
+ /** Resolved text. Required: the viewer invents no words of its own. */
85
+ labels: PdfViewerLabels;
46
86
  }
47
- export declare function PdfViewer({ data, firstPageOnly, targetWidth, className, ariaLabel, }: PdfViewerProps): React.JSX.Element;
87
+ export declare function PdfViewer({ data, firstPageOnly, targetWidth, className, ariaLabel, labels, }: PdfViewerProps): React.JSX.Element;
48
88
  export default PdfViewer;
49
89
  //# sourceMappingURL=pdf-viewer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-viewer.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/pdf-viewer/pdf-viewer.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA0C9B,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,IAAI,EAAE,WAAW,CAAA;IACjB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,aAAqB,EACrB,WAAW,EACX,SAAS,EACT,SAAS,GACV,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAwGpC;AAED,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"pdf-viewer.d.ts","sourceRoot":"","sources":["../../../../../../src/components/data-display/pdf-viewer/pdf-viewer.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAezD;AAOD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;IAChC,0DAA0D;IAC1D,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACpD,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,IAAI,EAAE,WAAW,CAAA;IACjB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,aAAqB,EACrB,WAAW,EACX,SAAS,EACT,SAAS,EACT,MAAM,GACP,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAoHpC;AAED,eAAe,SAAS,CAAA"}
@@ -28,54 +28,71 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
28
28
  *
29
29
  * ## Worker
30
30
  *
31
- * PDF.js parses on a Web Worker. The URL is resolved through `import.meta.url` so
32
- * every bundler (the app's Vite, the site's Astro, the docs' Docusaurus) emits and
33
- * fingerprints it as an asset rather than fetching from a CDN — a CDN worker would
34
- * both leak document bytes' provenance and require a `worker-src` exception the CSP
35
- * pipeline should not have to make. The app's CSP must allow `worker-src 'self' blob:`.
31
+ * PDF.js parses on a Web Worker. ONE port for the whole module, installed lazily on the
32
+ * first render (`ensurePdfViewerWorkerPort`) and assigned to `GlobalWorkerOptions.workerPort`:
33
+ * the pdf.js worker multiplexes documents by id, so several viewers mounted at once (a
34
+ * THUMBNAIL in a list plus an overlay, say) share it safely, and the shared port avoids
35
+ * spawning a worker per rendered thumbnail. A per-instance `PDFWorker` was tried first
36
+ * out of a concurrency worry that does not apply.
37
+ *
38
+ * WHERE the worker comes from is the host's decision (issue #962, `pdf-viewer-worker.ts`):
39
+ * a factory registered through `configurePdfViewerWorker` wins; otherwise the Vite default
40
+ * in `pdf-viewer-worker.vite.ts` is imported — and only then, so a non-Vite bundler that
41
+ * registered a factory never compiles the `?worker` import. The default is a same-origin
42
+ * file URL, so the `SAAS_APP` CSP baseline needs nothing beyond `script-src 'self'`; the
43
+ * cross-origin (CDN publish) case and its `worker-src blob:` note live with the seam.
44
+ *
45
+ * ## Text
46
+ *
47
+ * The viewer is label-agnostic: every string it shows or announces arrives resolved in
48
+ * `labels` from its host, which owns the component's i18n catalog. A failure is shown
49
+ * as the host's labelled message and the cause is logged — a raw pdf.js exception
50
+ * message is developer text, not something to put in front of a reader.
36
51
  */
37
52
  import * as React from "react";
38
- import { cn, Text, Skeleton } from "@wildo-ai/saas-frontend-lib";
53
+ import { cn, Text, Skeleton, LoggerFrontendService } from "@wildo-ai/saas-frontend-lib";
39
54
  import * as pdfjs from "pdfjs-dist";
40
- // Same-origin, bundler-emitted worker (see the header note on CSP).
41
- //
42
- // ⚠️ TWO earlier attempts failed at RENDER time, not build time — which is why they
43
- // survived typecheck and the lazy-boundary guard. Both are recorded so the next
44
- // author does not walk back into them:
45
- //
46
- // 1. `new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url)` — `new URL()`
47
- // resolves only RELATIVE paths against the module URL; a bare package specifier
48
- // is not bundler-resolved, so the browser requested a path that does not exist
49
- // and pdf.js reported `Setting up fake worker failed`.
50
- // 2. `?url` + `GlobalWorkerOptions.workerSrc` — the URL resolved and the file was
51
- // served (200), but pdf.js instantiates a `workerSrc` string as a CLASSIC worker
52
- // while pdf.js 6 ships the worker as an ES module. The worker never completed its
53
- // handshake, so `getDocument()` hung forever with no error to show.
54
- //
55
- // `?worker` hands us a bundler-generated constructor that already carries the right
56
- // worker type, which removes the classic-vs-module question entirely. It is a Vite
57
- // asset-import suffix: Vite is what the generated application uses, and the
58
- // alternatives are worse (a relative path into `node_modules` breaks under any
59
- // hoisting layout; a CDN URL leaks document provenance and needs a `worker-src`
60
- // exception the CSP pipeline should not have to make). A non-Vite consumer must
61
- // supply its own worker — tracked as portability work, not papered over here.
62
- //
63
- // ONE port for the whole module, assigned to `GlobalWorkerOptions.workerPort`. A
64
- // per-instance `PDFWorker` was tried first out of a concurrency worry that does not
65
- // apply: the pdf.js worker multiplexes documents by id, so several viewers mounted at
66
- // once (a THUMBNAIL in a list plus an overlay, say) share it safely — and the shared
67
- // port also avoids spawning a worker per rendered thumbnail. The worker is created
68
- // when this module loads, which is already behind the lazy boundary.
69
- // @ts-expect-error -- `?worker` is a Vite asset-import suffix with no TS declaration.
70
- import PdfJsWorker from 'pdfjs-dist/build/pdf.worker.min.mjs?worker';
71
- pdfjs.GlobalWorkerOptions.workerPort = new PdfJsWorker();
55
+ import { resolveConfiguredPdfViewerWorkerFactory } from "./pdf-viewer-worker.js";
56
+ import { describeCaughtError } from '@wildo-ai/saas-models';
57
+ let workerPortInstallation = null;
58
+ /**
59
+ * Install the module-wide worker port once, from the host's factory when one is registered and from
60
+ * the Vite default otherwise (issue #962). Idempotent and memoised: every render awaits the same
61
+ * installation, and a factory registered AFTER it is not consulted. The Vite module is reached
62
+ * through a dynamic import that webpack is told not to follow (`webpackIgnore`), which is what keeps
63
+ * its `?worker` specifier out of a non-Vite graph; a host on such a bundler that registered no
64
+ * factory gets a rejected installation here — surfaced as the viewer's labelled failure with the
65
+ * cause in the log, never a hang.
66
+ */
67
+ export function ensurePdfViewerWorkerPort() {
68
+ if (workerPortInstallation === null) {
69
+ workerPortInstallation = (async () => {
70
+ const configured = resolveConfiguredPdfViewerWorkerFactory();
71
+ const worker = configured
72
+ ? configured()
73
+ : (await import(/* webpackIgnore: true */ './pdf-viewer-worker.vite')).createViteDefaultPdfViewerWorker();
74
+ pdfjs.GlobalWorkerOptions.workerPort = worker;
75
+ })().catch((cause) => {
76
+ // A failed installation must not poison every later render: the next one asks again.
77
+ workerPortInstallation = null;
78
+ throw cause;
79
+ });
80
+ }
81
+ return workerPortInstallation;
82
+ }
72
83
  /** Hard cap on rasterised pages — a bound, not a product limit. */
73
84
  const MAX_RENDERED_PAGES = 50;
74
- export function PdfViewer({ data, firstPageOnly = false, targetWidth, className, ariaLabel, }) {
85
+ const logger = LoggerFrontendService.getLogger();
86
+ export function PdfViewer({ data, firstPageOnly = false, targetWidth, className, ariaLabel, labels, }) {
75
87
  const containerRef = React.useRef(null);
76
88
  const [pageCount, setPageCount] = React.useState(null);
77
- const [error, setError] = React.useState(null);
89
+ const [renderFailed, setRenderFailed] = React.useState(false);
78
90
  const [rendering, setRendering] = React.useState(true);
91
+ // Read through a ref inside the render effect: `labels.page` is a function the host
92
+ // may recreate every render, and re-rasterising a whole document because a label
93
+ // closure changed identity would be a visible flicker for no reason.
94
+ const pageLabelRef = React.useRef(labels.page);
95
+ pageLabelRef.current = labels.page;
79
96
  React.useEffect(() => {
80
97
  let cancelled = false;
81
98
  let document_ = null;
@@ -88,10 +105,13 @@ export function PdfViewer({ data, firstPageOnly = false, targetWidth, className,
88
105
  // Hand it a copy; the host keeps its own.
89
106
  const ownedData = data.slice(0);
90
107
  setRendering(true);
91
- setError(null);
108
+ setRenderFailed(false);
92
109
  container.replaceChildren();
93
110
  void (async () => {
94
111
  try {
112
+ await ensurePdfViewerWorkerPort();
113
+ if (cancelled)
114
+ return;
95
115
  loadingTask = pdfjs.getDocument({ data: ownedData });
96
116
  document_ = await loadingTask.promise;
97
117
  if (cancelled)
@@ -122,7 +142,7 @@ export function PdfViewer({ data, firstPageOnly = false, targetWidth, className,
122
142
  canvas.style.height = `${Math.floor(viewport.height / dpr)}px`;
123
143
  canvas.className = 'mx-auto max-w-full rounded-md border border-border shadow-xs';
124
144
  canvas.setAttribute('role', 'img');
125
- canvas.setAttribute('aria-label', `Page ${pageNumber}`);
145
+ canvas.setAttribute('aria-label', pageLabelRef.current(pageNumber));
126
146
  // ATTACH BEFORE RENDERING. Rendering into a detached canvas and appending
127
147
  // afterwards left `page.render()` unsettled indefinitely (observed live:
128
148
  // "rendering page 1" with no completion). Attaching first also makes pages
@@ -138,8 +158,12 @@ export function PdfViewer({ data, firstPageOnly = false, targetWidth, className,
138
158
  }
139
159
  }
140
160
  catch (cause) {
141
- if (!cancelled)
142
- setError(cause instanceof Error ? cause.message : String(cause));
161
+ if (!cancelled) {
162
+ logger.warn('[PdfViewer] document could not be rendered', {
163
+ error: describeCaughtError(cause),
164
+ });
165
+ setRenderFailed(true);
166
+ }
143
167
  }
144
168
  finally {
145
169
  if (!cancelled)
@@ -156,10 +180,10 @@ export function PdfViewer({ data, firstPageOnly = false, targetWidth, className,
156
180
  void document_?.cleanup();
157
181
  };
158
182
  }, [data, firstPageOnly, targetWidth]);
159
- return (_jsxs("div", { className: cn('w-full', className), "aria-label": ariaLabel, "aria-busy": rendering || undefined, children: [rendering && _jsx(Skeleton, { className: "h-64 w-full", "aria-hidden": "true" }), error && (_jsx(Text, { className: "text-sm text-destructive", role: "alert", children: error })), _jsx("div", { ref: containerRef, className: "flex flex-col gap-item" }), !firstPageOnly && pageCount !== null && pageCount > MAX_RENDERED_PAGES && (
183
+ return (_jsxs("div", { className: cn('w-full', className), "aria-label": ariaLabel, "aria-busy": rendering || undefined, children: [rendering && _jsx(Skeleton, { className: "h-64 w-full", "aria-hidden": "true" }), renderFailed && (_jsx(Text, { className: "text-sm text-destructive", role: "alert", children: labels.renderFailed })), _jsx("div", { ref: containerRef, className: "flex flex-col gap-item" }), !firstPageOnly && pageCount !== null && pageCount > MAX_RENDERED_PAGES && (
160
184
  // Say what was NOT rendered rather than silently truncating — a document that
161
185
  // looks complete but is not is worse than an explicit bound.
162
- _jsx(Text, { className: "mt-item text-xs text-muted-foreground", children: `Showing the first ${MAX_RENDERED_PAGES} of ${pageCount} pages.` }))] }));
186
+ _jsx(Text, { className: "mt-item text-xs text-muted-foreground", children: labels.pagesTruncated(MAX_RENDERED_PAGES, pageCount) }))] }));
163
187
  }
164
188
  export default PdfViewer;
165
189
  //# sourceMappingURL=pdf-viewer.js.map
@@ -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"}