@wildo-ai/presets-components 1.1.4 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (780) hide show
  1. package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
  2. package/dist/esm/components/actions/action-bar.js +65 -8
  3. package/dist/esm/components/actions/action-bar.js.map +1 -1
  4. package/dist/esm/components/actions/action-bar.labels.d.ts.map +1 -1
  5. package/dist/esm/components/actions/action-button.d.ts.map +1 -1
  6. package/dist/esm/components/actions/action-button.js +3 -3
  7. package/dist/esm/components/actions/action-button.js.map +1 -1
  8. package/dist/esm/components/actions/action-button.labels.d.ts.map +1 -1
  9. package/dist/esm/components/actions/button-group.d.ts.map +1 -1
  10. package/dist/esm/components/actions/button.d.ts.map +1 -1
  11. package/dist/esm/components/actions/button.js +62 -3
  12. package/dist/esm/components/actions/button.js.map +1 -1
  13. package/dist/esm/components/actions/button.labels.d.ts.map +1 -1
  14. package/dist/esm/components/ai-elements/artifacts/artifact-browser.d.ts.map +1 -1
  15. package/dist/esm/components/ai-elements/artifacts/artifact.d.ts.map +1 -1
  16. package/dist/esm/components/ai-elements/artifacts/artifact.labels.d.ts.map +1 -1
  17. package/dist/esm/components/ai-elements/artifacts/code-block.d.ts.map +1 -1
  18. package/dist/esm/components/ai-elements/artifacts/code-block.js +1 -1
  19. package/dist/esm/components/ai-elements/artifacts/code-block.js.map +1 -1
  20. package/dist/esm/components/ai-elements/artifacts/code-block.labels.d.ts.map +1 -1
  21. package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts +4 -0
  22. package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts.map +1 -0
  23. package/dist/esm/components/ai-elements/artifacts/diff-block.js +165 -0
  24. package/dist/esm/components/ai-elements/artifacts/diff-block.js.map +1 -0
  25. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts +3 -0
  26. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts.map +1 -0
  27. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js +63 -0
  28. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js.map +1 -0
  29. package/dist/esm/components/ai-elements/artifacts/image.d.ts.map +1 -1
  30. package/dist/esm/components/ai-elements/artifacts/image.labels.d.ts.map +1 -1
  31. package/dist/esm/components/ai-elements/artifacts/shiki-highlighter-runtime.d.ts.map +1 -1
  32. package/dist/esm/components/ai-elements/artifacts/shiki-highlighter.lazy.d.ts.map +1 -1
  33. package/dist/esm/components/ai-elements/artifacts/web-preview.d.ts.map +1 -1
  34. package/dist/esm/components/ai-elements/artifacts/web-preview.labels.d.ts.map +1 -1
  35. package/dist/esm/components/ai-elements/chat/conversation.d.ts.map +1 -1
  36. package/dist/esm/components/ai-elements/chat/conversation.labels.d.ts.map +1 -1
  37. package/dist/esm/components/ai-elements/chat/message.d.ts.map +1 -1
  38. package/dist/esm/components/ai-elements/chat/message.labels.d.ts.map +1 -1
  39. package/dist/esm/components/ai-elements/chat/prompt-input.d.ts.map +1 -1
  40. package/dist/esm/components/ai-elements/chat/prompt-input.labels.d.ts.map +1 -1
  41. package/dist/esm/components/ai-elements/chat/sources.d.ts.map +1 -1
  42. package/dist/esm/components/ai-elements/chat/sources.labels.d.ts.map +1 -1
  43. package/dist/esm/components/ai-elements/chat/suggestion.d.ts.map +1 -1
  44. package/dist/esm/components/ai-elements/chat/suggestion.js +8 -1
  45. package/dist/esm/components/ai-elements/chat/suggestion.js.map +1 -1
  46. package/dist/esm/components/ai-elements/chat/suggestion.labels.d.ts.map +1 -1
  47. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts +68 -0
  48. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts.map +1 -0
  49. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js +208 -0
  50. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js.map +1 -0
  51. package/dist/esm/components/ai-elements/decision/approval.d.ts +124 -17
  52. package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
  53. package/dist/esm/components/ai-elements/decision/approval.js +105 -13
  54. package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
  55. package/dist/esm/components/ai-elements/decision/decision-request.d.ts.map +1 -1
  56. package/dist/esm/components/ai-elements/decision/decision-request.labels.d.ts.map +1 -1
  57. package/dist/esm/components/ai-elements/execution/confirmation.d.ts.map +1 -1
  58. package/dist/esm/components/ai-elements/execution/confirmation.labels.d.ts.map +1 -1
  59. package/dist/esm/components/ai-elements/execution/queue.d.ts.map +1 -1
  60. package/dist/esm/components/ai-elements/execution/queue.labels.d.ts.map +1 -1
  61. package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
  62. package/dist/esm/components/ai-elements/execution/task.js +1 -1
  63. package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
  64. package/dist/esm/components/ai-elements/execution/task.labels.d.ts.map +1 -1
  65. package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
  66. package/dist/esm/components/ai-elements/execution/tool.js +8 -1
  67. package/dist/esm/components/ai-elements/execution/tool.js.map +1 -1
  68. package/dist/esm/components/ai-elements/execution/tool.labels.d.ts.map +1 -1
  69. package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
  70. package/dist/esm/components/ai-elements/graph/canvas.labels.d.ts.map +1 -1
  71. package/dist/esm/components/ai-elements/graph/connection.d.ts.map +1 -1
  72. package/dist/esm/components/ai-elements/graph/connection.labels.d.ts.map +1 -1
  73. package/dist/esm/components/ai-elements/graph/controls.d.ts.map +1 -1
  74. package/dist/esm/components/ai-elements/graph/controls.labels.d.ts.map +1 -1
  75. package/dist/esm/components/ai-elements/graph/edge.d.ts.map +1 -1
  76. package/dist/esm/components/ai-elements/graph/edge.labels.d.ts.map +1 -1
  77. package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts +3 -1
  78. package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
  79. package/dist/esm/components/ai-elements/graph/graph-runtime.js +3 -1
  80. package/dist/esm/components/ai-elements/graph/graph-runtime.js.map +1 -1
  81. package/dist/esm/components/ai-elements/graph/graph.lazy.d.ts.map +1 -1
  82. package/dist/esm/components/ai-elements/graph/graph.lazy.js +15 -15
  83. package/dist/esm/components/ai-elements/graph/graph.lazy.js.map +1 -1
  84. package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
  85. package/dist/esm/components/ai-elements/graph/node.labels.d.ts.map +1 -1
  86. package/dist/esm/components/ai-elements/graph/panel.d.ts.map +1 -1
  87. package/dist/esm/components/ai-elements/graph/panel.labels.d.ts.map +1 -1
  88. package/dist/esm/components/ai-elements/graph/toolbar.d.ts.map +1 -1
  89. package/dist/esm/components/ai-elements/graph/toolbar.labels.d.ts.map +1 -1
  90. package/dist/esm/components/ai-elements/meta/agent.d.ts +0 -1
  91. package/dist/esm/components/ai-elements/meta/agent.d.ts.map +1 -1
  92. package/dist/esm/components/ai-elements/meta/agent.js +23 -18
  93. package/dist/esm/components/ai-elements/meta/agent.js.map +1 -1
  94. package/dist/esm/components/ai-elements/meta/context.d.ts.map +1 -1
  95. package/dist/esm/components/ai-elements/meta/context.labels.d.ts.map +1 -1
  96. package/dist/esm/components/ai-elements/meta/context.lazy.d.ts.map +1 -1
  97. package/dist/esm/components/ai-elements/meta/context.lazy.js +13 -11
  98. package/dist/esm/components/ai-elements/meta/context.lazy.js.map +1 -1
  99. package/dist/esm/components/ai-elements/meta/model-selector.d.ts.map +1 -1
  100. package/dist/esm/components/ai-elements/meta/model-selector.labels.d.ts.map +1 -1
  101. package/dist/esm/components/ai-elements/meta/open-in-chat.d.ts.map +1 -1
  102. package/dist/esm/components/ai-elements/meta/open-in-chat.labels.d.ts.map +1 -1
  103. package/dist/esm/components/ai-elements/shared/loader.d.ts.map +1 -1
  104. package/dist/esm/components/ai-elements/shared/loader.labels.d.ts.map +1 -1
  105. package/dist/esm/components/ai-elements/shared/shimmer.d.ts.map +1 -1
  106. package/dist/esm/components/ai-elements/shared/shimmer.labels.d.ts.map +1 -1
  107. package/dist/esm/components/ai-elements/stream/execution-stream.d.ts.map +1 -1
  108. package/dist/esm/components/ai-elements/stream/execution-stream.labels.d.ts.map +1 -1
  109. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts +6 -0
  110. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts.map +1 -1
  111. package/dist/esm/components/ai-elements/trace/chain-of-thought.js +13 -1
  112. package/dist/esm/components/ai-elements/trace/chain-of-thought.js.map +1 -1
  113. package/dist/esm/components/ai-elements/trace/chain-of-thought.labels.d.ts.map +1 -1
  114. package/dist/esm/components/ai-elements/trace/checkpoint.d.ts.map +1 -1
  115. package/dist/esm/components/ai-elements/trace/checkpoint.labels.d.ts.map +1 -1
  116. package/dist/esm/components/ai-elements/trace/inline-citation.d.ts.map +1 -1
  117. package/dist/esm/components/ai-elements/trace/inline-citation.labels.d.ts.map +1 -1
  118. package/dist/esm/components/ai-elements/trace/plan.d.ts.map +1 -1
  119. package/dist/esm/components/ai-elements/trace/plan.labels.d.ts.map +1 -1
  120. package/dist/esm/components/ai-elements/trace/reasoning.d.ts.map +1 -1
  121. package/dist/esm/components/ai-elements/trace/reasoning.labels.d.ts.map +1 -1
  122. package/dist/esm/components/app/app-layout-consent-gate.d.ts +23 -0
  123. package/dist/esm/components/app/app-layout-consent-gate.d.ts.map +1 -0
  124. package/dist/esm/components/app/app-layout-consent-gate.js +133 -0
  125. package/dist/esm/components/app/app-layout-consent-gate.js.map +1 -0
  126. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts +19 -0
  127. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts.map +1 -0
  128. package/dist/esm/components/app/app-layout-document-acceptance-gate.js +56 -0
  129. package/dist/esm/components/app/app-layout-document-acceptance-gate.js.map +1 -0
  130. package/dist/esm/components/app/app-layout-main-container.d.ts +9 -0
  131. package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
  132. package/dist/esm/components/app/app-layout-main-container.js +17 -23
  133. package/dist/esm/components/app/app-layout-main-container.js.map +1 -1
  134. package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
  135. package/dist/esm/components/app/app-layout-main-container.labels.js +48 -0
  136. package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
  137. package/dist/esm/components/app/public-layout-main-container.d.ts +1 -1
  138. package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
  139. package/dist/esm/components/app/public-layout-main-container.js +9 -8
  140. package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
  141. package/dist/esm/components/app/public-layout-main-container.labels.d.ts.map +1 -1
  142. package/dist/esm/components/app/public-layout-terms.d.ts +46 -0
  143. package/dist/esm/components/app/public-layout-terms.d.ts.map +1 -0
  144. package/dist/esm/components/app/public-layout-terms.js +137 -0
  145. package/dist/esm/components/app/public-layout-terms.js.map +1 -0
  146. package/dist/esm/components/billing/billing-format.utils.d.ts.map +1 -1
  147. package/dist/esm/components/billing/billing-invoice-history.d.ts +1 -1
  148. package/dist/esm/components/billing/billing-invoice-history.d.ts.map +1 -1
  149. package/dist/esm/components/billing/billing-invoice-history.js +3 -1
  150. package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
  151. package/dist/esm/components/billing/billing-invoice-history.labels.d.ts.map +1 -1
  152. package/dist/esm/components/billing/billing-invoice-history.labels.js +1 -0
  153. package/dist/esm/components/billing/billing-invoice-history.labels.js.map +1 -1
  154. package/dist/esm/components/billing/billing-plan-change-preview.d.ts +5 -0
  155. package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -0
  156. package/dist/esm/components/billing/billing-plan-change-preview.js +25 -0
  157. package/dist/esm/components/billing/billing-plan-change-preview.js.map +1 -0
  158. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts +3 -0
  159. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts.map +1 -0
  160. package/dist/esm/components/billing/billing-plan-change-preview.labels.js +22 -0
  161. package/dist/esm/components/billing/billing-plan-change-preview.labels.js.map +1 -0
  162. package/dist/esm/components/billing/billing-portal-link.d.ts +1 -1
  163. package/dist/esm/components/billing/billing-portal-link.d.ts.map +1 -1
  164. package/dist/esm/components/billing/billing-portal-link.js +3 -1
  165. package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
  166. package/dist/esm/components/billing/billing-portal-link.labels.d.ts.map +1 -1
  167. package/dist/esm/components/billing/billing-portal-link.labels.js +1 -0
  168. package/dist/esm/components/billing/billing-portal-link.labels.js.map +1 -1
  169. package/dist/esm/components/billing/billing-pricing-table.d.ts +1 -1
  170. package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
  171. package/dist/esm/components/billing/billing-pricing-table.js +10 -4
  172. package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
  173. package/dist/esm/components/billing/billing-pricing-table.labels.d.ts.map +1 -1
  174. package/dist/esm/components/billing/billing-pricing-table.labels.js +8 -1
  175. package/dist/esm/components/billing/billing-pricing-table.labels.js.map +1 -1
  176. package/dist/esm/components/billing/billing-subscription-status.d.ts +1 -1
  177. package/dist/esm/components/billing/billing-subscription-status.d.ts.map +1 -1
  178. package/dist/esm/components/billing/billing-subscription-status.js +3 -1
  179. package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
  180. package/dist/esm/components/billing/billing-subscription-status.labels.d.ts.map +1 -1
  181. package/dist/esm/components/billing/billing-subscription-status.labels.js +1 -0
  182. package/dist/esm/components/billing/billing-subscription-status.labels.js.map +1 -1
  183. package/dist/esm/components/billing/billing-usage-dashboard.d.ts +1 -1
  184. package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
  185. package/dist/esm/components/billing/billing-usage-dashboard.js +10 -7
  186. package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
  187. package/dist/esm/components/billing/billing-usage-dashboard.labels.d.ts.map +1 -1
  188. package/dist/esm/components/billing/billing-usage-dashboard.labels.js +4 -1
  189. package/dist/esm/components/billing/billing-usage-dashboard.labels.js.map +1 -1
  190. package/dist/esm/components/data-display/avatar.d.ts.map +1 -1
  191. package/dist/esm/components/data-display/avatar.labels.d.ts.map +1 -1
  192. package/dist/esm/components/data-display/badge.d.ts.map +1 -1
  193. package/dist/esm/components/data-display/badge.js +16 -15
  194. package/dist/esm/components/data-display/badge.js.map +1 -1
  195. package/dist/esm/components/data-display/badge.labels.d.ts.map +1 -1
  196. package/dist/esm/components/data-display/description-list.d.ts +2 -1
  197. package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
  198. package/dist/esm/components/data-display/description-list.js +24 -8
  199. package/dist/esm/components/data-display/description-list.js.map +1 -1
  200. package/dist/esm/components/data-display/description-list.labels.d.ts.map +1 -1
  201. package/dist/esm/components/data-display/duration.d.ts +15 -0
  202. package/dist/esm/components/data-display/duration.d.ts.map +1 -0
  203. package/dist/esm/components/data-display/duration.js +50 -0
  204. package/dist/esm/components/data-display/duration.js.map +1 -0
  205. package/dist/esm/components/data-display/duration.labels.d.ts +15 -0
  206. package/dist/esm/components/data-display/duration.labels.d.ts.map +1 -0
  207. package/dist/esm/components/data-display/duration.labels.js +35 -0
  208. package/dist/esm/components/data-display/duration.labels.js.map +1 -0
  209. package/dist/esm/components/data-display/formatters/display-field-address.d.ts +21 -0
  210. package/dist/esm/components/data-display/formatters/display-field-address.d.ts.map +1 -0
  211. package/dist/esm/components/data-display/formatters/display-field-address.js +75 -0
  212. package/dist/esm/components/data-display/formatters/display-field-address.js.map +1 -0
  213. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts +3 -0
  214. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts.map +1 -0
  215. package/dist/esm/components/data-display/formatters/display-field-address.labels.js +13 -0
  216. package/dist/esm/components/data-display/formatters/display-field-address.labels.js.map +1 -0
  217. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.d.ts.map +1 -1
  218. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js +6 -2
  219. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js.map +1 -1
  220. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.labels.d.ts.map +1 -1
  221. package/dist/esm/components/data-display/formatters/display-field-boolean.d.ts.map +1 -1
  222. package/dist/esm/components/data-display/formatters/display-field-boolean.js +2 -2
  223. package/dist/esm/components/data-display/formatters/display-field-boolean.js.map +1 -1
  224. package/dist/esm/components/data-display/formatters/display-field-boolean.labels.d.ts.map +1 -1
  225. package/dist/esm/components/data-display/formatters/display-field-code.d.ts.map +1 -1
  226. package/dist/esm/components/data-display/formatters/display-field-code.js +2 -2
  227. package/dist/esm/components/data-display/formatters/display-field-code.js.map +1 -1
  228. package/dist/esm/components/data-display/formatters/display-field-code.labels.d.ts.map +1 -1
  229. package/dist/esm/components/data-display/formatters/display-field-date.d.ts +3 -3
  230. package/dist/esm/components/data-display/formatters/display-field-date.d.ts.map +1 -1
  231. package/dist/esm/components/data-display/formatters/display-field-date.js +17 -4
  232. package/dist/esm/components/data-display/formatters/display-field-date.js.map +1 -1
  233. package/dist/esm/components/data-display/formatters/display-field-date.labels.d.ts.map +1 -1
  234. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts +3 -3
  235. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts.map +1 -1
  236. package/dist/esm/components/data-display/formatters/display-field-datetime.js +17 -4
  237. package/dist/esm/components/data-display/formatters/display-field-datetime.js.map +1 -1
  238. package/dist/esm/components/data-display/formatters/display-field-datetime.labels.d.ts.map +1 -1
  239. package/dist/esm/components/data-display/formatters/display-field-duration.d.ts.map +1 -1
  240. package/dist/esm/components/data-display/formatters/display-field-duration.labels.d.ts.map +1 -1
  241. package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
  242. package/dist/esm/components/data-display/formatters/display-field-enum.js +29 -11
  243. package/dist/esm/components/data-display/formatters/display-field-enum.js.map +1 -1
  244. package/dist/esm/components/data-display/formatters/display-field-enum.labels.d.ts.map +1 -1
  245. package/dist/esm/components/data-display/formatters/display-field-file-audio.d.ts.map +1 -1
  246. package/dist/esm/components/data-display/formatters/display-field-file-audio.js +2 -1
  247. package/dist/esm/components/data-display/formatters/display-field-file-audio.js.map +1 -1
  248. package/dist/esm/components/data-display/formatters/display-field-file-audio.labels.d.ts.map +1 -1
  249. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts +4 -1
  250. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts.map +1 -1
  251. package/dist/esm/components/data-display/formatters/display-field-file-document.js +18 -5
  252. package/dist/esm/components/data-display/formatters/display-field-file-document.js.map +1 -1
  253. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.d.ts.map +1 -1
  254. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js +20 -0
  255. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js.map +1 -1
  256. package/dist/esm/components/data-display/formatters/display-field-file-gallery.d.ts.map +1 -1
  257. package/dist/esm/components/data-display/formatters/display-field-file-gallery.labels.d.ts.map +1 -1
  258. package/dist/esm/components/data-display/formatters/display-field-file-image.d.ts.map +1 -1
  259. package/dist/esm/components/data-display/formatters/display-field-file-image.js +3 -1
  260. package/dist/esm/components/data-display/formatters/display-field-file-image.js.map +1 -1
  261. package/dist/esm/components/data-display/formatters/display-field-file-image.labels.d.ts.map +1 -1
  262. package/dist/esm/components/data-display/formatters/display-field-file-video.d.ts.map +1 -1
  263. package/dist/esm/components/data-display/formatters/display-field-file-video.labels.d.ts.map +1 -1
  264. package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
  265. package/dist/esm/components/data-display/formatters/display-field-file.js +14 -15
  266. package/dist/esm/components/data-display/formatters/display-field-file.js.map +1 -1
  267. package/dist/esm/components/data-display/formatters/display-field-file.labels.d.ts.map +1 -1
  268. package/dist/esm/components/data-display/formatters/display-field-file.labels.js +2 -0
  269. package/dist/esm/components/data-display/formatters/display-field-file.labels.js.map +1 -1
  270. package/dist/esm/components/data-display/formatters/display-field-format.utils.d.ts.map +1 -1
  271. package/dist/esm/components/data-display/formatters/display-field-i18n.utils.d.ts.map +1 -1
  272. package/dist/esm/components/data-display/formatters/display-field-money.d.ts.map +1 -1
  273. package/dist/esm/components/data-display/formatters/display-field-money.labels.d.ts.map +1 -1
  274. package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
  275. package/dist/esm/components/data-display/formatters/display-field-number.js +8 -3
  276. package/dist/esm/components/data-display/formatters/display-field-number.js.map +1 -1
  277. package/dist/esm/components/data-display/formatters/display-field-number.labels.d.ts.map +1 -1
  278. package/dist/esm/components/data-display/formatters/display-field-number.labels.js +5 -2
  279. package/dist/esm/components/data-display/formatters/display-field-number.labels.js.map +1 -1
  280. package/dist/esm/components/data-display/formatters/display-field-phone.d.ts.map +1 -1
  281. package/dist/esm/components/data-display/formatters/display-field-phone.labels.d.ts.map +1 -1
  282. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.d.ts.map +1 -1
  283. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.labels.d.ts.map +1 -1
  284. package/dist/esm/components/data-display/formatters/display-field-range-date.d.ts.map +1 -1
  285. package/dist/esm/components/data-display/formatters/display-field-range-date.labels.d.ts.map +1 -1
  286. package/dist/esm/components/data-display/formatters/display-field-range-datetime.d.ts.map +1 -1
  287. package/dist/esm/components/data-display/formatters/display-field-range-datetime.labels.d.ts.map +1 -1
  288. package/dist/esm/components/data-display/formatters/display-field-range-money.d.ts.map +1 -1
  289. package/dist/esm/components/data-display/formatters/display-field-range-money.labels.d.ts.map +1 -1
  290. package/dist/esm/components/data-display/formatters/display-field-range-number.d.ts.map +1 -1
  291. package/dist/esm/components/data-display/formatters/display-field-range-number.labels.d.ts.map +1 -1
  292. package/dist/esm/components/data-display/formatters/display-field-range-time.d.ts.map +1 -1
  293. package/dist/esm/components/data-display/formatters/display-field-range-time.labels.d.ts.map +1 -1
  294. package/dist/esm/components/data-display/formatters/display-field-string.d.ts +1 -1
  295. package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
  296. package/dist/esm/components/data-display/formatters/display-field-string.js +129 -15
  297. package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
  298. package/dist/esm/components/data-display/formatters/display-field-string.labels.d.ts.map +1 -1
  299. package/dist/esm/components/data-display/formatters/display-field-time.d.ts.map +1 -1
  300. package/dist/esm/components/data-display/formatters/display-field-time.labels.d.ts.map +1 -1
  301. package/dist/esm/components/data-display/identifier.d.ts +19 -0
  302. package/dist/esm/components/data-display/identifier.d.ts.map +1 -0
  303. package/dist/esm/components/data-display/identifier.js +21 -0
  304. package/dist/esm/components/data-display/identifier.js.map +1 -0
  305. package/dist/esm/components/data-display/kbd.d.ts +17 -0
  306. package/dist/esm/components/data-display/kbd.d.ts.map +1 -0
  307. package/dist/esm/components/data-display/kbd.js +18 -0
  308. package/dist/esm/components/data-display/kbd.js.map +1 -0
  309. package/dist/esm/components/data-display/markdown-content.d.ts.map +1 -1
  310. package/dist/esm/components/data-display/markdown-stream-runtime.d.ts.map +1 -1
  311. package/dist/esm/components/data-display/markdown-stream.lazy.d.ts.map +1 -1
  312. package/dist/esm/components/data-display/markdown-stream.lazy.js +13 -2
  313. package/dist/esm/components/data-display/markdown-stream.lazy.js.map +1 -1
  314. package/dist/esm/components/data-display/notification-indicator.d.ts.map +1 -1
  315. package/dist/esm/components/data-display/notification-indicator.js +3 -11
  316. package/dist/esm/components/data-display/notification-indicator.js.map +1 -1
  317. package/dist/esm/components/data-display/notification-indicator.labels.d.ts.map +1 -1
  318. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts +63 -0
  319. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts.map +1 -0
  320. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js +75 -0
  321. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js.map +1 -0
  322. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts +32 -0
  323. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts.map +1 -0
  324. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js +36 -0
  325. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js.map +1 -0
  326. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts +46 -6
  327. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  328. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js +70 -46
  329. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js.map +1 -1
  330. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts +12 -2
  331. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts.map +1 -1
  332. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js +3 -2
  333. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js.map +1 -1
  334. package/dist/esm/components/data-display/timeline.d.ts +3 -0
  335. package/dist/esm/components/data-display/timeline.d.ts.map +1 -0
  336. package/dist/esm/components/data-display/timeline.js +92 -0
  337. package/dist/esm/components/data-display/timeline.js.map +1 -0
  338. package/dist/esm/components/data-display/untrusted-html-content.d.ts +55 -0
  339. package/dist/esm/components/data-display/untrusted-html-content.d.ts.map +1 -0
  340. package/dist/esm/components/data-display/untrusted-html-content.js +67 -0
  341. package/dist/esm/components/data-display/untrusted-html-content.js.map +1 -0
  342. package/dist/esm/components/feedback/celebration-overlay.d.ts +13 -4
  343. package/dist/esm/components/feedback/celebration-overlay.d.ts.map +1 -1
  344. package/dist/esm/components/feedback/celebration-overlay.js +146 -22
  345. package/dist/esm/components/feedback/celebration-overlay.js.map +1 -1
  346. package/dist/esm/components/feedback/celebration-overlay.labels.d.ts.map +1 -1
  347. package/dist/esm/components/feedback/danger-zone.d.ts.map +1 -1
  348. package/dist/esm/components/feedback/danger-zone.labels.d.ts.map +1 -1
  349. package/dist/esm/components/feedback/empty-state.d.ts.map +1 -1
  350. package/dist/esm/components/feedback/empty-state.js.map +1 -1
  351. package/dist/esm/components/feedback/empty-state.labels.d.ts.map +1 -1
  352. package/dist/esm/components/feedback/error-display.d.ts.map +1 -1
  353. package/dist/esm/components/feedback/error-display.labels.d.ts.map +1 -1
  354. package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
  355. package/dist/esm/components/feedback/features/feature-limit-indicator.labels.d.ts.map +1 -1
  356. package/dist/esm/components/feedback/features/feature-lock-badge.d.ts.map +1 -1
  357. package/dist/esm/components/feedback/features/feature-lock-badge.labels.d.ts.map +1 -1
  358. package/dist/esm/components/feedback/features/feature-unavailable-dialog.d.ts.map +1 -1
  359. package/dist/esm/components/feedback/features/feature-unavailable-dialog.labels.d.ts.map +1 -1
  360. package/dist/esm/components/feedback/features/feature-unavailable-prompt.d.ts.map +1 -1
  361. package/dist/esm/components/feedback/features/feature-unavailable-prompt.js.map +1 -1
  362. package/dist/esm/components/feedback/features/feature-unavailable-prompt.labels.d.ts.map +1 -1
  363. package/dist/esm/components/feedback/loading-overlay.d.ts.map +1 -1
  364. package/dist/esm/components/feedback/loading-overlay.labels.d.ts.map +1 -1
  365. package/dist/esm/components/feedback/loading-spinner.d.ts.map +1 -1
  366. package/dist/esm/components/feedback/loading-spinner.labels.d.ts.map +1 -1
  367. package/dist/esm/components/feedback/notification-center.d.ts.map +1 -1
  368. package/dist/esm/components/feedback/notification-center.js +5 -5
  369. package/dist/esm/components/feedback/notification-center.js.map +1 -1
  370. package/dist/esm/components/feedback/operations-confirm-critical.d.ts +1 -1
  371. package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
  372. package/dist/esm/components/feedback/operations-confirm-critical.js +9 -7
  373. package/dist/esm/components/feedback/operations-confirm-critical.js.map +1 -1
  374. package/dist/esm/components/feedback/operations-confirm-critical.labels.d.ts.map +1 -1
  375. package/dist/esm/components/feedback/progress.d.ts.map +1 -1
  376. package/dist/esm/components/feedback/progress.labels.d.ts.map +1 -1
  377. package/dist/esm/components/feedback/skeleton.d.ts.map +1 -1
  378. package/dist/esm/components/feedback/skeleton.labels.d.ts.map +1 -1
  379. package/dist/esm/components/feedback/toast.d.ts.map +1 -1
  380. package/dist/esm/components/feedback/toast.labels.d.ts.map +1 -1
  381. package/dist/esm/components/form/autosave-indicator.d.ts.map +1 -1
  382. package/dist/esm/components/form/autosave-indicator.labels.d.ts.map +1 -1
  383. package/dist/esm/components/form/chromes/field.d.ts.map +1 -1
  384. package/dist/esm/components/form/chromes/field.js +11 -3
  385. package/dist/esm/components/form/chromes/field.js.map +1 -1
  386. package/dist/esm/components/form/chromes/field.labels.d.ts.map +1 -1
  387. package/dist/esm/components/form/chromes/form-primitive.d.ts.map +1 -1
  388. package/dist/esm/components/form/chromes/form-primitive.labels.d.ts.map +1 -1
  389. package/dist/esm/components/form/chromes/form-primitive.labels.js +37 -0
  390. package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
  391. package/dist/esm/components/form/combobox.d.ts.map +1 -1
  392. package/dist/esm/components/form/combobox.js +14 -13
  393. package/dist/esm/components/form/combobox.js.map +1 -1
  394. package/dist/esm/components/form/combobox.labels.d.ts.map +1 -1
  395. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts +42 -0
  396. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts.map +1 -0
  397. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js +120 -0
  398. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js.map +1 -0
  399. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts +16 -0
  400. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts.map +1 -0
  401. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js +8 -0
  402. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js.map +1 -0
  403. package/dist/esm/components/form/controls/boolean/checkbox.d.ts.map +1 -1
  404. package/dist/esm/components/form/controls/boolean/checkbox.js +2 -2
  405. package/dist/esm/components/form/controls/boolean/checkbox.js.map +1 -1
  406. package/dist/esm/components/form/controls/boolean/checkbox.labels.d.ts.map +1 -1
  407. package/dist/esm/components/form/controls/boolean/switch.d.ts.map +1 -1
  408. package/dist/esm/components/form/controls/boolean/switch.labels.d.ts.map +1 -1
  409. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.d.ts.map +1 -1
  410. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.labels.d.ts.map +1 -1
  411. package/dist/esm/components/form/controls/boolean/toggle.d.ts.map +1 -1
  412. package/dist/esm/components/form/controls/boolean/toggle.labels.d.ts.map +1 -1
  413. package/dist/esm/components/form/controls/code-editor/cm6-editor-appearance.d.ts.map +1 -1
  414. package/dist/esm/components/form/controls/code-editor/cm6-editor.d.ts.map +1 -1
  415. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.d.ts.map +1 -1
  416. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js +11 -2
  417. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js.map +1 -1
  418. package/dist/esm/components/form/controls/code-editor/form-field-code.d.ts.map +1 -1
  419. package/dist/esm/components/form/controls/code-editor/markdown-editor.d.ts.map +1 -1
  420. package/dist/esm/components/form/controls/date-time/calendar.d.ts.map +1 -1
  421. package/dist/esm/components/form/controls/date-time/calendar.labels.d.ts.map +1 -1
  422. package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
  423. package/dist/esm/components/form/controls/date-time/date-range-picker.labels.d.ts.map +1 -1
  424. package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
  425. package/dist/esm/components/form/controls/date-time/datepicker.labels.d.ts.map +1 -1
  426. package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
  427. package/dist/esm/components/form/controls/date-time/datetime-picker.labels.d.ts.map +1 -1
  428. package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
  429. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.d.ts.map +1 -1
  430. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js +11 -2
  431. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js.map +1 -1
  432. package/dist/esm/components/form/controls/date-time/time-picker.d.ts.map +1 -1
  433. package/dist/esm/components/form/controls/date-time/time-picker.labels.d.ts.map +1 -1
  434. package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
  435. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.d.ts.map +1 -1
  436. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js +11 -2
  437. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js.map +1 -1
  438. package/dist/esm/components/form/controls/enum/radio.d.ts +1 -1
  439. package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
  440. package/dist/esm/components/form/controls/enum/radio.js +13 -12
  441. package/dist/esm/components/form/controls/enum/radio.js.map +1 -1
  442. package/dist/esm/components/form/controls/enum/radio.labels.d.ts.map +1 -1
  443. package/dist/esm/components/form/controls/enum/select-multiple.d.ts.map +1 -1
  444. package/dist/esm/components/form/controls/enum/select-multiple.js +5 -3
  445. package/dist/esm/components/form/controls/enum/select-multiple.js.map +1 -1
  446. package/dist/esm/components/form/controls/enum/select-multiple.labels.d.ts.map +1 -1
  447. package/dist/esm/components/form/controls/enum/select.d.ts.map +1 -1
  448. package/dist/esm/components/form/controls/enum/select.labels.d.ts.map +1 -1
  449. package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
  450. package/dist/esm/components/form/controls/enum/toggle-group.js +96 -5
  451. package/dist/esm/components/form/controls/enum/toggle-group.js.map +1 -1
  452. package/dist/esm/components/form/controls/enum/toggle-group.labels.d.ts.map +1 -1
  453. package/dist/esm/components/form/controls/file/file-upload.d.ts.map +1 -1
  454. package/dist/esm/components/form/controls/file/file-upload.labels.d.ts.map +1 -1
  455. package/dist/esm/components/form/controls/file/image-crop.d.ts.map +1 -1
  456. package/dist/esm/components/form/controls/file/image-crop.labels.d.ts.map +1 -1
  457. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts +44 -0
  458. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts.map +1 -0
  459. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js +137 -0
  460. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js.map +1 -0
  461. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts +22 -0
  462. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts.map +1 -0
  463. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js +27 -0
  464. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js.map +1 -0
  465. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts +3 -1
  466. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts.map +1 -1
  467. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js +3 -1
  468. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js.map +1 -1
  469. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts +6 -0
  470. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts.map +1 -1
  471. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js +8 -1
  472. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js.map +1 -1
  473. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts +6 -2
  474. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts.map +1 -1
  475. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js +6 -2
  476. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js.map +1 -1
  477. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts +6 -0
  478. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts.map +1 -1
  479. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js +8 -1
  480. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js.map +1 -1
  481. package/dist/esm/components/form/controls/input-group.d.ts.map +1 -1
  482. package/dist/esm/components/form/controls/input-group.labels.d.ts.map +1 -1
  483. package/dist/esm/components/form/controls/input.d.ts.map +1 -1
  484. package/dist/esm/components/form/controls/input.labels.d.ts.map +1 -1
  485. package/dist/esm/components/form/controls/number/slider.d.ts.map +1 -1
  486. package/dist/esm/components/form/controls/number/slider.labels.d.ts.map +1 -1
  487. package/dist/esm/components/form/controls/number/slider.labels.js +9 -2
  488. package/dist/esm/components/form/controls/number/slider.labels.js.map +1 -1
  489. package/dist/esm/components/form/controls/string/color-input.d.ts.map +1 -1
  490. package/dist/esm/components/form/controls/string/color-input.labels.d.ts.map +1 -1
  491. package/dist/esm/components/form/controls/string/color-picker-surface.d.ts.map +1 -1
  492. package/dist/esm/components/form/controls/string/color-picker-surface.js.map +1 -1
  493. package/dist/esm/components/form/controls/string/inline-edit-text.d.ts.map +1 -1
  494. package/dist/esm/components/form/controls/string/input-otp.d.ts.map +1 -1
  495. package/dist/esm/components/form/controls/string/input-otp.labels.d.ts.map +1 -1
  496. package/dist/esm/components/form/controls/string/password-input.d.ts.map +1 -1
  497. package/dist/esm/components/form/controls/string/password-input.labels.d.ts.map +1 -1
  498. package/dist/esm/components/form/controls/string/password-input.labels.js +9 -2
  499. package/dist/esm/components/form/controls/string/password-input.labels.js.map +1 -1
  500. package/dist/esm/components/form/controls/string/textarea.d.ts.map +1 -1
  501. package/dist/esm/components/form/controls/string/textarea.labels.d.ts.map +1 -1
  502. package/dist/esm/components/layout/aspect-ratio.d.ts.map +1 -1
  503. package/dist/esm/components/layout/aspect-ratio.labels.d.ts.map +1 -1
  504. package/dist/esm/components/layout/carousel.d.ts.map +1 -1
  505. package/dist/esm/components/layout/carousel.labels.d.ts.map +1 -1
  506. package/dist/esm/components/layout/divider.d.ts.map +1 -1
  507. package/dist/esm/components/layout/divider.labels.d.ts.map +1 -1
  508. package/dist/esm/components/layout/resizable.d.ts.map +1 -1
  509. package/dist/esm/components/layout/resizable.labels.d.ts.map +1 -1
  510. package/dist/esm/components/layout/scroll-area.d.ts.map +1 -1
  511. package/dist/esm/components/layout/scroll-area.labels.d.ts.map +1 -1
  512. package/dist/esm/components/layout/separator.d.ts.map +1 -1
  513. package/dist/esm/components/layout/separator.labels.d.ts.map +1 -1
  514. package/dist/esm/components/navigation/app-level/activity-bar.d.ts.map +1 -1
  515. package/dist/esm/components/navigation/app-level/activity-bar.js +2 -2
  516. package/dist/esm/components/navigation/app-level/activity-bar.js.map +1 -1
  517. package/dist/esm/components/navigation/app-level/activity-bar.labels.d.ts.map +1 -1
  518. package/dist/esm/components/navigation/app-level/command-menu.d.ts.map +1 -1
  519. package/dist/esm/components/navigation/app-level/command-menu.js +2 -2
  520. package/dist/esm/components/navigation/app-level/command-menu.js.map +1 -1
  521. package/dist/esm/components/navigation/app-level/command-menu.labels.d.ts.map +1 -1
  522. package/dist/esm/components/navigation/app-level/control-panel.d.ts.map +1 -1
  523. package/dist/esm/components/navigation/app-level/control-panel.labels.d.ts.map +1 -1
  524. package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
  525. package/dist/esm/components/navigation/app-level/menu-user-org.js +10 -4
  526. package/dist/esm/components/navigation/app-level/menu-user-org.js.map +1 -1
  527. package/dist/esm/components/navigation/app-level/menu-user-org.labels.d.ts.map +1 -1
  528. package/dist/esm/components/navigation/app-level/menu-user-org.labels.js +7 -0
  529. package/dist/esm/components/navigation/app-level/menu-user-org.labels.js.map +1 -1
  530. package/dist/esm/components/navigation/app-level/menubar.d.ts.map +1 -1
  531. package/dist/esm/components/navigation/app-level/menubar.js +36 -14
  532. package/dist/esm/components/navigation/app-level/menubar.js.map +1 -1
  533. package/dist/esm/components/navigation/app-level/menubar.labels.d.ts.map +1 -1
  534. package/dist/esm/components/navigation/app-level/navigation-back.d.ts.map +1 -1
  535. package/dist/esm/components/navigation/app-level/navigation-back.js +31 -5
  536. package/dist/esm/components/navigation/app-level/navigation-back.js.map +1 -1
  537. package/dist/esm/components/navigation/app-level/navigation-back.labels.d.ts.map +1 -1
  538. package/dist/esm/components/navigation/app-level/notification-center.d.ts.map +1 -1
  539. package/dist/esm/components/navigation/app-level/notification-center.js.map +1 -1
  540. package/dist/esm/components/navigation/app-level/notification-center.labels.d.ts.map +1 -1
  541. package/dist/esm/components/navigation/app-level/notification-center.labels.js +15 -0
  542. package/dist/esm/components/navigation/app-level/notification-center.labels.js.map +1 -1
  543. package/dist/esm/components/navigation/app-level/quick-action-button.d.ts.map +1 -1
  544. package/dist/esm/components/navigation/app-level/quick-action-button.labels.d.ts.map +1 -1
  545. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js +4 -0
  546. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js.map +1 -1
  547. package/dist/esm/components/navigation/app-level/quick-switcher.d.ts.map +1 -1
  548. package/dist/esm/components/navigation/app-level/quick-switcher.labels.d.ts.map +1 -1
  549. package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
  550. package/dist/esm/components/navigation/app-level/sidebar.js +41 -25
  551. package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
  552. package/dist/esm/components/navigation/app-level/sidebar.labels.d.ts.map +1 -1
  553. package/dist/esm/components/navigation/app-level/sidebar.labels.js +1 -0
  554. package/dist/esm/components/navigation/app-level/sidebar.labels.js.map +1 -1
  555. package/dist/esm/components/navigation/app-level/status-bar.d.ts.map +1 -1
  556. package/dist/esm/components/navigation/app-level/status-bar.js +2 -2
  557. package/dist/esm/components/navigation/app-level/status-bar.js.map +1 -1
  558. package/dist/esm/components/navigation/app-level/status-bar.labels.d.ts.map +1 -1
  559. package/dist/esm/components/navigation/app-level/toolbar.d.ts.map +1 -1
  560. package/dist/esm/components/navigation/app-level/toolbar.js +2 -2
  561. package/dist/esm/components/navigation/app-level/toolbar.js.map +1 -1
  562. package/dist/esm/components/navigation/app-level/toolbar.labels.d.ts.map +1 -1
  563. package/dist/esm/components/navigation/app-level/utility-panel.d.ts.map +1 -1
  564. package/dist/esm/components/navigation/app-level/utility-panel.js +24 -6
  565. package/dist/esm/components/navigation/app-level/utility-panel.js.map +1 -1
  566. package/dist/esm/components/navigation/app-level/utility-panel.labels.d.ts.map +1 -1
  567. package/dist/esm/components/navigation/app-level/utility-panel.labels.js.map +1 -1
  568. package/dist/esm/components/navigation/breadcrumb.d.ts.map +1 -1
  569. package/dist/esm/components/navigation/breadcrumb.js +1 -1
  570. package/dist/esm/components/navigation/breadcrumb.js.map +1 -1
  571. package/dist/esm/components/navigation/breadcrumb.labels.d.ts.map +1 -1
  572. package/dist/esm/components/navigation/command.d.ts.map +1 -1
  573. package/dist/esm/components/navigation/command.js +2 -2
  574. package/dist/esm/components/navigation/command.js.map +1 -1
  575. package/dist/esm/components/navigation/command.labels.d.ts.map +1 -1
  576. package/dist/esm/components/navigation/menu-bar.d.ts.map +1 -1
  577. package/dist/esm/components/navigation/menu-bar.labels.d.ts.map +1 -1
  578. package/dist/esm/components/navigation/navbar.d.ts.map +1 -1
  579. package/dist/esm/components/navigation/navbar.labels.d.ts.map +1 -1
  580. package/dist/esm/components/navigation/sidebar.d.ts.map +1 -1
  581. package/dist/esm/components/navigation/sidebar.labels.d.ts.map +1 -1
  582. package/dist/esm/components/overlays/containers/alert-dialog.d.ts.map +1 -1
  583. package/dist/esm/components/overlays/containers/alert-dialog.js +11 -1
  584. package/dist/esm/components/overlays/containers/alert-dialog.js.map +1 -1
  585. package/dist/esm/components/overlays/containers/alert-dialog.labels.d.ts.map +1 -1
  586. package/dist/esm/components/overlays/containers/alert.d.ts.map +1 -1
  587. package/dist/esm/components/overlays/containers/alert.labels.d.ts.map +1 -1
  588. package/dist/esm/components/overlays/containers/dialog.d.ts.map +1 -1
  589. package/dist/esm/components/overlays/containers/dialog.js +11 -1
  590. package/dist/esm/components/overlays/containers/dialog.js.map +1 -1
  591. package/dist/esm/components/overlays/containers/dialog.labels.d.ts.map +1 -1
  592. package/dist/esm/components/overlays/containers/drawer.d.ts.map +1 -1
  593. package/dist/esm/components/overlays/containers/drawer.labels.d.ts.map +1 -1
  594. package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
  595. package/dist/esm/components/overlays/containers/sheet.labels.d.ts.map +1 -1
  596. package/dist/esm/components/overlays/floating/context-menu.d.ts.map +1 -1
  597. package/dist/esm/components/overlays/floating/context-menu.labels.d.ts.map +1 -1
  598. package/dist/esm/components/overlays/floating/dropdown-menu.d.ts.map +1 -1
  599. package/dist/esm/components/overlays/floating/dropdown-menu.labels.d.ts.map +1 -1
  600. package/dist/esm/components/overlays/floating/hover-card.d.ts.map +1 -1
  601. package/dist/esm/components/overlays/floating/hover-card.labels.d.ts.map +1 -1
  602. package/dist/esm/components/overlays/floating/popover.d.ts.map +1 -1
  603. package/dist/esm/components/overlays/floating/popover.labels.d.ts.map +1 -1
  604. package/dist/esm/components/overlays/floating/tooltip.d.ts.map +1 -1
  605. package/dist/esm/components/overlays/floating/tooltip.labels.d.ts.map +1 -1
  606. package/dist/esm/components/sections/accordion.d.ts.map +1 -1
  607. package/dist/esm/components/sections/accordion.labels.d.ts.map +1 -1
  608. package/dist/esm/components/sections/card.d.ts.map +1 -1
  609. package/dist/esm/components/sections/card.js +71 -6
  610. package/dist/esm/components/sections/card.js.map +1 -1
  611. package/dist/esm/components/sections/card.labels.d.ts.map +1 -1
  612. package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
  613. package/dist/esm/components/sections/collapsible.labels.d.ts.map +1 -1
  614. package/dist/esm/components/sections/content-section.d.ts.map +1 -1
  615. package/dist/esm/components/sections/content-section.js +36 -6
  616. package/dist/esm/components/sections/content-section.js.map +1 -1
  617. package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -1
  618. package/dist/esm/components/sections/option-gesture.d.ts +15 -0
  619. package/dist/esm/components/sections/option-gesture.d.ts.map +1 -0
  620. package/dist/esm/components/sections/option-gesture.js +66 -0
  621. package/dist/esm/components/sections/option-gesture.js.map +1 -0
  622. package/dist/esm/components/sections/pagination.d.ts.map +1 -1
  623. package/dist/esm/components/sections/pagination.labels.d.ts.map +1 -1
  624. package/dist/esm/components/sections/stacked-layout.d.ts.map +1 -1
  625. package/dist/esm/components/sections/stacked-layout.labels.d.ts.map +1 -1
  626. package/dist/esm/components/sections/stepper.d.ts.map +1 -1
  627. package/dist/esm/components/sections/stepper.js +5 -3
  628. package/dist/esm/components/sections/stepper.js.map +1 -1
  629. package/dist/esm/components/sections/stepper.labels.d.ts.map +1 -1
  630. package/dist/esm/components/sections/table.d.ts.map +1 -1
  631. package/dist/esm/components/sections/table.labels.d.ts.map +1 -1
  632. package/dist/esm/components/sections/tabs.d.ts.map +1 -1
  633. package/dist/esm/components/sections/tabs.js +60 -15
  634. package/dist/esm/components/sections/tabs.js.map +1 -1
  635. package/dist/esm/components/sections/tabs.labels.d.ts.map +1 -1
  636. package/dist/esm/components/typography/heading.d.ts.map +1 -1
  637. package/dist/esm/components/typography/heading.labels.d.ts.map +1 -1
  638. package/dist/esm/components/typography/label.d.ts.map +1 -1
  639. package/dist/esm/components/typography/label.labels.d.ts.map +1 -1
  640. package/dist/esm/components/typography/link.d.ts.map +1 -1
  641. package/dist/esm/components/typography/link.js +9 -3
  642. package/dist/esm/components/typography/link.js.map +1 -1
  643. package/dist/esm/components/typography/link.labels.d.ts.map +1 -1
  644. package/dist/esm/components/typography/text.d.ts +1 -1
  645. package/dist/esm/components/typography/text.d.ts.map +1 -1
  646. package/dist/esm/components/typography/text.js +3 -2
  647. package/dist/esm/components/typography/text.js.map +1 -1
  648. package/dist/esm/components/typography/text.labels.d.ts.map +1 -1
  649. package/dist/esm/components/typography/truncated-text.d.ts.map +1 -1
  650. package/dist/esm/config/billing-shell.presets.d.ts.map +1 -1
  651. package/dist/esm/config/index.d.ts.map +1 -1
  652. package/dist/esm/config/preset-design-system.d.ts.map +1 -1
  653. package/dist/esm/config/preset-design-system.js +37 -60
  654. package/dist/esm/config/preset-design-system.js.map +1 -1
  655. package/dist/esm/config/preset-error-pages.d.ts.map +1 -1
  656. package/dist/esm/config/preset-kits.d.ts.map +1 -1
  657. package/dist/esm/config/preset-navigation.d.ts.map +1 -1
  658. package/dist/esm/config/preset-navigation.js +23 -7
  659. package/dist/esm/config/preset-navigation.js.map +1 -1
  660. package/dist/esm/config/preset-resources.d.ts.map +1 -1
  661. package/dist/esm/config/preset-shell.d.ts.map +1 -1
  662. package/dist/esm/config/preset-utils.d.ts.map +1 -1
  663. package/dist/esm/config/presets.d.ts.map +1 -1
  664. package/dist/esm/config/resources/agent-work.resource-presets.d.ts +4 -0
  665. package/dist/esm/config/resources/agent-work.resource-presets.d.ts.map +1 -0
  666. package/dist/esm/config/resources/agent-work.resource-presets.js +115 -0
  667. package/dist/esm/config/resources/agent-work.resource-presets.js.map +1 -0
  668. package/dist/esm/config/resources/api-key-rotation-window.d.ts +22 -0
  669. package/dist/esm/config/resources/api-key-rotation-window.d.ts.map +1 -0
  670. package/dist/esm/config/resources/api-key-rotation-window.js +45 -0
  671. package/dist/esm/config/resources/api-key-rotation-window.js.map +1 -0
  672. package/dist/esm/config/resources/application.resource-presets.d.ts +2 -0
  673. package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
  674. package/dist/esm/config/resources/application.resource-presets.js +268 -26
  675. package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
  676. package/dist/esm/config/resources/billing.resource-presets.d.ts +4 -3
  677. package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
  678. package/dist/esm/config/resources/billing.resource-presets.js +241 -111
  679. package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
  680. package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts +4 -0
  681. package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts.map +1 -0
  682. package/dist/esm/config/resources/conversation-threads.resource-presets.js +105 -0
  683. package/dist/esm/config/resources/conversation-threads.resource-presets.js.map +1 -0
  684. package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
  685. package/dist/esm/config/resources/guidance.resource-presets.js +39 -16
  686. package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
  687. package/dist/esm/config/resources/identity.resource-presets.d.ts +0 -13
  688. package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
  689. package/dist/esm/config/resources/identity.resource-presets.js +71 -17
  690. package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
  691. package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts +6 -0
  692. package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts.map +1 -0
  693. package/dist/esm/config/resources/inbound-deliveries.resource-presets.js +112 -0
  694. package/dist/esm/config/resources/inbound-deliveries.resource-presets.js.map +1 -0
  695. package/dist/esm/config/resources/inbound-email.resource-presets.d.ts +4 -0
  696. package/dist/esm/config/resources/inbound-email.resource-presets.d.ts.map +1 -0
  697. package/dist/esm/config/resources/inbound-email.resource-presets.js +182 -0
  698. package/dist/esm/config/resources/inbound-email.resource-presets.js.map +1 -0
  699. package/dist/esm/config/resources/index.d.ts.map +1 -1
  700. package/dist/esm/config/resources/index.js +9 -2
  701. package/dist/esm/config/resources/index.js.map +1 -1
  702. package/dist/esm/config/resources/legal-holds.resource-presets.d.ts +4 -0
  703. package/dist/esm/config/resources/legal-holds.resource-presets.d.ts.map +1 -0
  704. package/dist/esm/config/resources/legal-holds.resource-presets.js +76 -0
  705. package/dist/esm/config/resources/legal-holds.resource-presets.js.map +1 -0
  706. package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
  707. package/dist/esm/config/resources/organizations.resource-presets.js +216 -35
  708. package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
  709. package/dist/esm/config/resources/resource.config.utils.d.ts +20 -0
  710. package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
  711. package/dist/esm/config/resources/resource.config.utils.js +20 -0
  712. package/dist/esm/config/resources/resource.config.utils.js.map +1 -1
  713. package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts +5 -0
  714. package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts.map +1 -0
  715. package/dist/esm/config/resources/retention-enforcement.resource-presets.js +74 -0
  716. package/dist/esm/config/resources/retention-enforcement.resource-presets.js.map +1 -0
  717. package/dist/esm/config/resources/security.resource-presets.d.ts +11 -3
  718. package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
  719. package/dist/esm/config/resources/security.resource-presets.js +685 -99
  720. package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
  721. package/dist/esm/config/resources/service-providers.resource-presets.d.ts +4 -0
  722. package/dist/esm/config/resources/service-providers.resource-presets.d.ts.map +1 -0
  723. package/dist/esm/config/resources/service-providers.resource-presets.js +321 -0
  724. package/dist/esm/config/resources/service-providers.resource-presets.js.map +1 -0
  725. package/dist/esm/config/resources/webhooks.resource-presets.d.ts +4 -3
  726. package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
  727. package/dist/esm/config/resources/webhooks.resource-presets.js +102 -26
  728. package/dist/esm/config/resources/webhooks.resource-presets.js.map +1 -1
  729. package/dist/esm/index.d.ts +7 -1
  730. package/dist/esm/index.d.ts.map +1 -1
  731. package/dist/esm/index.js +7 -1
  732. package/dist/esm/index.js.map +1 -1
  733. package/dist/esm/lottie/lottie.content.definitions.d.ts.map +1 -1
  734. package/dist/esm/lottie/lottie.definitions.d.ts.map +1 -1
  735. package/dist/esm/mermaid-stub.d.ts.map +1 -1
  736. package/dist/esm/registration/register-common-enums.d.ts.map +1 -1
  737. package/dist/esm/registration/register-common-enums.js +63 -34
  738. package/dist/esm/registration/register-common-enums.js.map +1 -1
  739. package/dist/esm/registration/register-default-animations.d.ts.map +1 -1
  740. package/dist/esm/registration/register-default-icons.d.ts.map +1 -1
  741. package/dist/esm/registration/register-default-icons.js +3 -1
  742. package/dist/esm/registration/register-default-icons.js.map +1 -1
  743. package/dist/esm/registration/register-default-presets.d.ts.map +1 -1
  744. package/dist/esm/registration/register-default-presets.js +32 -4
  745. package/dist/esm/registration/register-default-presets.js.map +1 -1
  746. package/dist/esm/registration/register-provider-components.d.ts.map +1 -1
  747. package/dist/esm/registration/register-provider-components.js +11 -0
  748. package/dist/esm/registration/register-provider-components.js.map +1 -1
  749. package/dist/esm/shiki-subset.d.ts +11 -3
  750. package/dist/esm/shiki-subset.d.ts.map +1 -1
  751. package/dist/esm/shiki-subset.js +10 -2
  752. package/dist/esm/shiki-subset.js.map +1 -1
  753. package/dist/esm/theme-exports.d.ts.map +1 -1
  754. package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
  755. package/dist/esm/themes/cozy.theme.js +19 -5
  756. package/dist/esm/themes/cozy.theme.js.map +1 -1
  757. package/dist/esm/themes/dense.theme.d.ts.map +1 -1
  758. package/dist/esm/themes/dense.theme.js +76 -10
  759. package/dist/esm/themes/dense.theme.js.map +1 -1
  760. package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
  761. package/dist/esm/themes/editorial.theme.js +19 -5
  762. package/dist/esm/themes/editorial.theme.js.map +1 -1
  763. package/dist/esm/themes/glass.theme.d.ts.map +1 -1
  764. package/dist/esm/themes/glass.theme.js +5 -1
  765. package/dist/esm/themes/glass.theme.js.map +1 -1
  766. package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
  767. package/dist/esm/themes/neo-brutalist.theme.js +9 -2
  768. package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
  769. package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
  770. package/dist/esm/themes/terminal.theme.js +19 -5
  771. package/dist/esm/themes/terminal.theme.js.map +1 -1
  772. package/dist/esm/themes/trading.theme.d.ts.map +1 -1
  773. package/dist/esm/themes/trading.theme.js +22 -6
  774. package/dist/esm/themes/trading.theme.js.map +1 -1
  775. package/dist/tsconfig.build.tsbuildinfo +1 -1
  776. package/package.json +31 -45
  777. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts +0 -16
  778. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +0 -1
  779. package/dist/esm/components/form/controls/form-field-checkbox-group.js +0 -143
  780. package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"billing-subscription-status.d.ts","sourceRoot":"","sources":["../../../../src/components/billing/billing-subscription-status.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAA+B,MAAM,OAAO,CAAC;AAEpD,OAAO,EACL,uBAAuB,EAaxB,MAAM,6BAA6B,CAAC;AAwBrC,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,WAAW,EACX,eAAe,EACf,SAAS,EACT,KAAK,GACN,EAAE,uBAAuB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA0IpD"}
1
+ {"version":3,"file":"billing-subscription-status.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-subscription-status.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAA+B,MAAM,OAAO,CAAC;AAEpD,OAAO,EACL,uBAAuB,EAaxB,MAAM,6BAA6B,CAAC;AAwBrC,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,WAAW,EACX,eAAe,EACf,SAAS,EACT,KAAK,EACL,WAAW,GACZ,EAAE,uBAAuB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA4IpD"}
@@ -23,7 +23,7 @@ const STATUS_BADGE_CONFIG = {
23
23
  paused: { labelKey: 'incompleteBadge', indicatorVariant: IndicatorVariant.NEUTRAL },
24
24
  };
25
25
  // ── Component ───────────────────────────────────────────────────────
26
- export function SubscriptionStatus({ status, planName, providerName, currentPeriodEnd, cancelAtPeriodEnd, trialEnd, nextPayment, onManageBilling, isLoading, error, }) {
26
+ export function SubscriptionStatus({ status, planName, providerName, currentPeriodEnd, cancelAtPeriodEnd, trialEnd, nextPayment, onManageBilling, isLoading, error, unavailable, }) {
27
27
  const { getRecipe } = useUI();
28
28
  const { makeTrComponent, formatDate, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_SUBSCRIPTION_STATUS });
29
29
  const { renderIcon } = useIconRegistry();
@@ -46,6 +46,8 @@ export function SubscriptionStatus({ status, planName, providerName, currentPeri
46
46
  }
47
47
  if (!isReady)
48
48
  return null;
49
+ if (unavailable)
50
+ return _jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: t('unavailable') }) });
49
51
  const badgeRecipe = badgeConfig ? getRecipe(UIBehavior.INDICATOR, badgeConfig.indicatorVariant) : null;
50
52
  return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsxs("div", { className: cn("p-card", surfaceRecipe.base), children: [_jsxs("div", { className: "flex items-center justify-between mb-section", children: [_jsx("h3", { className: cn(headingRecipe.base, headingRecipe.sizes?.md), children: t('title') }), badgeConfig && badgeRecipe && (_jsx("span", { className: cn("inline-flex items-center px-2.5 py-0.5", badgeRecipe.base, "rounded-full"), children: t(badgeConfig.labelKey) }))] }), planName && (_jsx("div", { className: "mb-section", children: _jsx("p", { className: cn(headingRecipe.base, "text-2xl"), children: t('planName', { name: planName }) }) })), _jsxs("div", { className: cn("space-y-element mb-section", descriptionRecipe.base), children: [status === 'trialing' && trialEnd && (_jsxs("div", { className: "flex items-center gap-2", children: [renderIcon(StandardIconReference.CALENDAR, { size: IconSize.SM }), _jsxs("span", { children: [t('trialEndsOn'), " ", formatDisplayDate(trialEnd)] })] })), currentPeriodEnd && (_jsxs("div", { className: "flex items-center gap-2", children: [renderIcon(StandardIconReference.CALENDAR, { size: IconSize.SM }), _jsx("span", { children: cancelAtPeriodEnd
51
53
  ? `${t('endsOn')} ${formatDisplayDate(currentPeriodEnd)}`
@@ -1 +1 @@
1
- {"version":3,"file":"billing-subscription-status.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-subscription-status.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * SubscriptionStatus (Preset)\n *\n * Displays current subscription state: plan name, status badge,\n * period dates, and a \"Manage billing\" link to the Customer Portal.\n *\n * Formatting: Uses useI18n() for locale-aware formatting\n * of dates and monetary amounts, respecting user/org regional preferences.\n */\n\nimport React, { useMemo, useCallback } from 'react';\nimport { FrontendComponentType, IndicatorVariant, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport {\n SubscriptionStatusProps,\n cn,\n useI18n,\n useIconRegistry,\n StandardIconReference,\n IconSize,\n useUI,\n Button,\n ButtonVariants_Variant,\n Skeleton,\n Alert,\n AlertDescription,\n Surface,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { useFormatMoney } from './billing-format.utils';\n\n// ── Status badge mapping (IndicatorVariant aligned with common enum registry) ──\n\ninterface StatusBadgeConfig {\n labelKey: string;\n indicatorVariant: IndicatorVariant;\n}\n\nconst STATUS_BADGE_CONFIG: Record<string, StatusBadgeConfig> = {\n active: { labelKey: 'activeBadge', indicatorVariant: IndicatorVariant.SUCCESS },\n trialing: { labelKey: 'trialBadge', indicatorVariant: IndicatorVariant.INFO },\n past_due: { labelKey: 'pastDueBadge', indicatorVariant: IndicatorVariant.WARNING },\n canceled: { labelKey: 'cancelledBadge', indicatorVariant: IndicatorVariant.ERROR },\n incomplete: { labelKey: 'incompleteBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n incomplete_expired: { labelKey: 'incompleteBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n unpaid: { labelKey: 'pastDueBadge', indicatorVariant: IndicatorVariant.WARNING },\n paused: { labelKey: 'incompleteBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n};\n\n// ── Component ───────────────────────────────────────────────────────\n\nexport function SubscriptionStatus({\n status,\n planName,\n providerName,\n currentPeriodEnd,\n cancelAtPeriodEnd,\n trialEnd,\n nextPayment,\n onManageBilling,\n isLoading,\n error,\n}: SubscriptionStatusProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, formatDate, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_SUBSCRIPTION_STATUS });\n const { renderIcon } = useIconRegistry();\n const formatMoney = useFormatMoney();\n\n const surfaceRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.BASE);\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const descriptionRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n const t = useMemo(\n () => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_SUBSCRIPTION_STATUS),\n [makeTrComponent],\n );\n\n const badgeConfig = status ? STATUS_BADGE_CONFIG[status] ?? STATUS_BADGE_CONFIG.incomplete : null;\n\n const formatDisplayDate = useCallback((date: Date | null | undefined): string => {\n if (!date) return '';\n return formatDate(date);\n }, [formatDate]);\n\n if (error) {\n return (\n <Alert variant=\"destructive\">\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n );\n }\n\n if (isLoading) {\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <div className=\"flex items-center justify-between mb-section\">\n <Skeleton className=\"h-5 w-36\" />\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n </div>\n <Skeleton className=\"h-7 w-48 mb-section\" />\n <div className=\"space-y-element mb-section\">\n <Skeleton className=\"h-4 w-44\" />\n <Skeleton className=\"h-4 w-52\" />\n </div>\n <Skeleton className=\"h-10 w-36 rounded-md\" />\n </div>\n </Surface>\n );\n }\n\n if (!isReady) return null;\n\n const badgeRecipe = badgeConfig ? getRecipe(UIBehavior.INDICATOR, badgeConfig.indicatorVariant) : null;\n\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-section\">\n <h3 className={cn(headingRecipe.base, headingRecipe.sizes?.md)}>{t('title')}</h3>\n {badgeConfig && badgeRecipe && (\n <span className={cn(\"inline-flex items-center px-2.5 py-0.5\", badgeRecipe.base, \"rounded-full\")}>\n {t(badgeConfig.labelKey)}\n </span>\n )}\n </div>\n\n {/* Plan name */}\n {planName && (\n <div className=\"mb-section\">\n <p className={cn(headingRecipe.base, \"text-2xl\")}>\n {t('planName', { name: planName })}\n </p>\n </div>\n )}\n\n {/* Period info */}\n <div className={cn(\"space-y-element mb-section\", descriptionRecipe.base)}>\n {/* Trial info */}\n {status === 'trialing' && trialEnd && (\n <div className=\"flex items-center gap-2\">\n {renderIcon(StandardIconReference.CALENDAR, { size: IconSize.SM })}\n <span>{t('trialEndsOn')} {formatDisplayDate(trialEnd)}</span>\n </div>\n )}\n\n {/* Renewal or end date */}\n {currentPeriodEnd && (\n <div className=\"flex items-center gap-2\">\n {renderIcon(StandardIconReference.CALENDAR, { size: IconSize.SM })}\n <span>\n {cancelAtPeriodEnd\n ? `${t('endsOn')} ${formatDisplayDate(currentPeriodEnd)}`\n : `${t('renewsOn')} ${formatDisplayDate(currentPeriodEnd)}`}\n </span>\n </div>\n )}\n\n {/* Cancel at period end warning */}\n {cancelAtPeriodEnd && (\n <div className=\"flex items-center gap-2 text-warning\">\n {renderIcon(StandardIconReference.WARNING, { size: IconSize.SM })}\n <span>{t('cancelAtPeriodEnd')}</span>\n </div>\n )}\n\n {/* Next payment */}\n {nextPayment && currentPeriodEnd && !cancelAtPeriodEnd && (\n <div className=\"flex items-center gap-2\">\n {renderIcon(StandardIconReference.CREDIT_CARD, { size: IconSize.SM })}\n <span>\n {t('nextPayment', {\n amount: formatMoney(nextPayment),\n currency: nextPayment.currency,\n date: formatDisplayDate(currentPeriodEnd),\n })}\n </span>\n </div>\n )}\n </div>\n\n {/* Manage billing button */}\n {onManageBilling && (\n <Button\n variant={ButtonVariants_Variant.SECONDARY}\n onClick={onManageBilling}\n >\n {renderIcon(StandardIconReference.EXTERNAL_LINK, { size: IconSize.SM })}\n <span>{t('manageBilling')}</span>\n {providerName && (\n <span className={cn(descriptionRecipe.base, \"text-xs\")}>\n {providerName}\n </span>\n )}\n </Button>\n )}\n </div>\n </Surface>\n );\n}\n"]}
1
+ {"version":3,"file":"billing-subscription-status.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-subscription-status.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * SubscriptionStatus (Preset)\n *\n * Displays current subscription state: plan name, status badge,\n * period dates, and a \"Manage billing\" link to the Customer Portal.\n *\n * Formatting: Uses useI18n() for locale-aware formatting\n * of dates and monetary amounts, respecting user/org regional preferences.\n */\n\nimport React, { useMemo, useCallback } from 'react';\nimport { FrontendComponentType, IndicatorVariant, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport {\n SubscriptionStatusProps,\n cn,\n useI18n,\n useIconRegistry,\n StandardIconReference,\n IconSize,\n useUI,\n Button,\n ButtonVariants_Variant,\n Skeleton,\n Alert,\n AlertDescription,\n Surface,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { useFormatMoney } from './billing-format.utils';\n\n// ── Status badge mapping (IndicatorVariant aligned with common enum registry) ──\n\ninterface StatusBadgeConfig {\n labelKey: string;\n indicatorVariant: IndicatorVariant;\n}\n\nconst STATUS_BADGE_CONFIG: Record<string, StatusBadgeConfig> = {\n active: { labelKey: 'activeBadge', indicatorVariant: IndicatorVariant.SUCCESS },\n trialing: { labelKey: 'trialBadge', indicatorVariant: IndicatorVariant.INFO },\n past_due: { labelKey: 'pastDueBadge', indicatorVariant: IndicatorVariant.WARNING },\n canceled: { labelKey: 'cancelledBadge', indicatorVariant: IndicatorVariant.ERROR },\n incomplete: { labelKey: 'incompleteBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n incomplete_expired: { labelKey: 'incompleteBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n unpaid: { labelKey: 'pastDueBadge', indicatorVariant: IndicatorVariant.WARNING },\n paused: { labelKey: 'incompleteBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n};\n\n// ── Component ───────────────────────────────────────────────────────\n\nexport function SubscriptionStatus({\n status,\n planName,\n providerName,\n currentPeriodEnd,\n cancelAtPeriodEnd,\n trialEnd,\n nextPayment,\n onManageBilling,\n isLoading,\n error,\n unavailable,\n}: SubscriptionStatusProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, formatDate, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_SUBSCRIPTION_STATUS });\n const { renderIcon } = useIconRegistry();\n const formatMoney = useFormatMoney();\n\n const surfaceRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.BASE);\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const descriptionRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n const t = useMemo(\n () => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_SUBSCRIPTION_STATUS),\n [makeTrComponent],\n );\n\n const badgeConfig = status ? STATUS_BADGE_CONFIG[status] ?? STATUS_BADGE_CONFIG.incomplete : null;\n\n const formatDisplayDate = useCallback((date: Date | null | undefined): string => {\n if (!date) return '';\n return formatDate(date);\n }, [formatDate]);\n\n if (error) {\n return (\n <Alert variant=\"destructive\">\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n );\n }\n\n if (isLoading) {\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <div className=\"flex items-center justify-between mb-section\">\n <Skeleton className=\"h-5 w-36\" />\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n </div>\n <Skeleton className=\"h-7 w-48 mb-section\" />\n <div className=\"space-y-element mb-section\">\n <Skeleton className=\"h-4 w-44\" />\n <Skeleton className=\"h-4 w-52\" />\n </div>\n <Skeleton className=\"h-10 w-36 rounded-md\" />\n </div>\n </Surface>\n );\n }\n\n if (!isReady) return null;\n\n if (unavailable) return <Alert variant=\"destructive\"><AlertDescription>{t('unavailable')}</AlertDescription></Alert>;\n\n const badgeRecipe = badgeConfig ? getRecipe(UIBehavior.INDICATOR, badgeConfig.indicatorVariant) : null;\n\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-section\">\n <h3 className={cn(headingRecipe.base, headingRecipe.sizes?.md)}>{t('title')}</h3>\n {badgeConfig && badgeRecipe && (\n <span className={cn(\"inline-flex items-center px-2.5 py-0.5\", badgeRecipe.base, \"rounded-full\")}>\n {t(badgeConfig.labelKey)}\n </span>\n )}\n </div>\n\n {/* Plan name */}\n {planName && (\n <div className=\"mb-section\">\n <p className={cn(headingRecipe.base, \"text-2xl\")}>\n {t('planName', { name: planName })}\n </p>\n </div>\n )}\n\n {/* Period info */}\n <div className={cn(\"space-y-element mb-section\", descriptionRecipe.base)}>\n {/* Trial info */}\n {status === 'trialing' && trialEnd && (\n <div className=\"flex items-center gap-2\">\n {renderIcon(StandardIconReference.CALENDAR, { size: IconSize.SM })}\n <span>{t('trialEndsOn')} {formatDisplayDate(trialEnd)}</span>\n </div>\n )}\n\n {/* Renewal or end date */}\n {currentPeriodEnd && (\n <div className=\"flex items-center gap-2\">\n {renderIcon(StandardIconReference.CALENDAR, { size: IconSize.SM })}\n <span>\n {cancelAtPeriodEnd\n ? `${t('endsOn')} ${formatDisplayDate(currentPeriodEnd)}`\n : `${t('renewsOn')} ${formatDisplayDate(currentPeriodEnd)}`}\n </span>\n </div>\n )}\n\n {/* Cancel at period end warning */}\n {cancelAtPeriodEnd && (\n <div className=\"flex items-center gap-2 text-warning\">\n {renderIcon(StandardIconReference.WARNING, { size: IconSize.SM })}\n <span>{t('cancelAtPeriodEnd')}</span>\n </div>\n )}\n\n {/* Next payment */}\n {nextPayment && currentPeriodEnd && !cancelAtPeriodEnd && (\n <div className=\"flex items-center gap-2\">\n {renderIcon(StandardIconReference.CREDIT_CARD, { size: IconSize.SM })}\n <span>\n {t('nextPayment', {\n amount: formatMoney(nextPayment),\n currency: nextPayment.currency,\n date: formatDisplayDate(currentPeriodEnd),\n })}\n </span>\n </div>\n )}\n </div>\n\n {/* Manage billing button */}\n {onManageBilling && (\n <Button\n variant={ButtonVariants_Variant.SECONDARY}\n onClick={onManageBilling}\n >\n {renderIcon(StandardIconReference.EXTERNAL_LINK, { size: IconSize.SM })}\n <span>{t('manageBilling')}</span>\n {providerName && (\n <span className={cn(descriptionRecipe.base, \"text-xs\")}>\n {providerName}\n </span>\n )}\n </Button>\n )}\n </div>\n </Surface>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"billing-subscription-status.labels.d.ts","sourceRoot":"","sources":["../../../../src/components/billing/billing-subscription-status.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAM7C,eAAO,MAAM,uCAAuC,EAAE,mBAAmB,EAgCxE,CAAC"}
1
+ {"version":3,"file":"billing-subscription-status.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-subscription-status.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAM7C,eAAO,MAAM,uCAAuC,EAAE,mBAAmB,EAiCxE,CAAC"}
@@ -3,6 +3,7 @@ import { FrontendComponentType, LabelKind, registerComponentLabels, } from '@wil
3
3
  // purpose / kind / variable meaning. Statically scanned by the dev companion;
4
4
  // NOT imported at runtime, so it never ships in the bundle.
5
5
  export const LowLevelBillingSubscriptionStatusLabels = [
6
+ { ref: 'unavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Billing information is temporarily unavailable; this is a failed read, not an empty account or a free plan' },
6
7
  { ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the subscription status panel' },
7
8
  { ref: 'activeBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription in good standing' },
8
9
  { ref: 'trialBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription in its trial period' },
@@ -1 +1 @@
1
- {"version":3,"file":"billing-subscription-status.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-subscription-status.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,SAAS,EAET,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,4EAA4E;AAC5E,8EAA8E;AAC9E,4DAA4D;AAE5D,MAAM,CAAC,MAAM,uCAAuC,GAA0B;IAC5E,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,2CAA2C,EAAE;IAC/F,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,kDAAkD,EAAE;IAC1G,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,qDAAqD,EAAE;IAC5G,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,yDAAyD,EAAE;IAClH,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,yDAAyD,EAAE;IACpH,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,2DAA2D,EAAE;IACvH,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,uCAAuC,EAAE;IAC5F,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,gDAAgD,EAAE;IACnG,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,yCAAyC,EAAE;IACjG,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,iEAAiE,EAAE;IAC5H;QACE,GAAG,EAAE,mBAAmB;QACxB,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,OAAO,EAAE,sEAAsE;KAChF;IACD;QACE,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,OAAO,EAAE,6DAA6D;QACtE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;KAC7D;IACD;QACE,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,OAAO,EAAE,8DAA8D;QACvE,MAAM,EAAE;YACN,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE;YACjD,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,kCAAkC,EAAE;YAChE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,kCAAkC,EAAE;SAC7D;KACF;CACF,CAAC;AACF,uBAAuB,CAAC,qBAAqB,CAAC,qCAAqC,EAAE,uCAAuC,CAAC,CAAC","sourcesContent":["import {\n FrontendComponentType,\n LabelKind,\n type LabellingUnitaryDef,\n registerComponentLabels,\n} from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + per-key\n// purpose / kind / variable meaning. Statically scanned by the dev companion;\n// NOT imported at runtime, so it never ships in the bundle.\n\nexport const LowLevelBillingSubscriptionStatusLabels: LabellingUnitaryDef[] = [\n { ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the subscription status panel' },\n { ref: 'activeBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription in good standing' },\n { ref: 'trialBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription in its trial period' },\n { ref: 'pastDueBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription with an overdue payment' },\n { ref: 'cancelledBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription that has been cancelled' },\n { ref: 'incompleteBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription whose setup is incomplete' },\n { ref: 'renewsOn', kind: LabelKind.LABEL, purpose: 'Label preceding the next renewal date' },\n { ref: 'endsOn', kind: LabelKind.LABEL, purpose: 'Label preceding the date the subscription ends' },\n { ref: 'trialEndsOn', kind: LabelKind.LABEL, purpose: 'Label preceding the date the trial ends' },\n { ref: 'manageBilling', kind: LabelKind.BUTTON, purpose: 'Action that opens the billing portal to manage the subscription' },\n {\n ref: 'cancelAtPeriodEnd',\n kind: LabelKind.LABEL,\n purpose: 'Notice that the subscription will not renew after the current period',\n },\n {\n ref: 'planName',\n kind: LabelKind.LABEL,\n purpose: 'Displays the name of the customer-current subscription plan',\n params: [{ key: 'name', meaning: 'subscription plan name' }],\n },\n {\n ref: 'nextPayment',\n kind: LabelKind.LABEL,\n purpose: 'Summarises the amount and date of the next scheduled payment',\n params: [\n { key: 'amount', meaning: 'next payment amount' },\n { key: 'currency', meaning: 'ISO currency code of the payment' },\n { key: 'date', meaning: 'date the next payment is charged' },\n ],\n },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_SUBSCRIPTION_STATUS, LowLevelBillingSubscriptionStatusLabels);\n"]}
1
+ {"version":3,"file":"billing-subscription-status.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-subscription-status.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,SAAS,EAET,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,4EAA4E;AAC5E,8EAA8E;AAC9E,4DAA4D;AAE5D,MAAM,CAAC,MAAM,uCAAuC,GAA0B;IAC5E,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,4GAA4G,EAAE;IAC1K,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,2CAA2C,EAAE;IAC/F,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,kDAAkD,EAAE;IAC1G,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,qDAAqD,EAAE;IAC5G,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,yDAAyD,EAAE;IAClH,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,yDAAyD,EAAE;IACpH,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,2DAA2D,EAAE;IACvH,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,uCAAuC,EAAE;IAC5F,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,gDAAgD,EAAE;IACnG,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,yCAAyC,EAAE;IACjG,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,iEAAiE,EAAE;IAC5H;QACE,GAAG,EAAE,mBAAmB;QACxB,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,OAAO,EAAE,sEAAsE;KAChF;IACD;QACE,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,OAAO,EAAE,6DAA6D;QACtE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;KAC7D;IACD;QACE,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,OAAO,EAAE,8DAA8D;QACvE,MAAM,EAAE;YACN,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE;YACjD,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,kCAAkC,EAAE;YAChE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,kCAAkC,EAAE;SAC7D;KACF;CACF,CAAC;AACF,uBAAuB,CAAC,qBAAqB,CAAC,qCAAqC,EAAE,uCAAuC,CAAC,CAAC","sourcesContent":["import {\n FrontendComponentType,\n LabelKind,\n type LabellingUnitaryDef,\n registerComponentLabels,\n} from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + per-key\n// purpose / kind / variable meaning. Statically scanned by the dev companion;\n// NOT imported at runtime, so it never ships in the bundle.\n\nexport const LowLevelBillingSubscriptionStatusLabels: LabellingUnitaryDef[] = [\n { ref: 'unavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Billing information is temporarily unavailable; this is a failed read, not an empty account or a free plan' },\n { ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the subscription status panel' },\n { ref: 'activeBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription in good standing' },\n { ref: 'trialBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription in its trial period' },\n { ref: 'pastDueBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription with an overdue payment' },\n { ref: 'cancelledBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription that has been cancelled' },\n { ref: 'incompleteBadge', kind: LabelKind.LABEL, purpose: 'Status badge for a subscription whose setup is incomplete' },\n { ref: 'renewsOn', kind: LabelKind.LABEL, purpose: 'Label preceding the next renewal date' },\n { ref: 'endsOn', kind: LabelKind.LABEL, purpose: 'Label preceding the date the subscription ends' },\n { ref: 'trialEndsOn', kind: LabelKind.LABEL, purpose: 'Label preceding the date the trial ends' },\n { ref: 'manageBilling', kind: LabelKind.BUTTON, purpose: 'Action that opens the billing portal to manage the subscription' },\n {\n ref: 'cancelAtPeriodEnd',\n kind: LabelKind.LABEL,\n purpose: 'Notice that the subscription will not renew after the current period',\n },\n {\n ref: 'planName',\n kind: LabelKind.LABEL,\n purpose: 'Displays the name of the customer-current subscription plan',\n params: [{ key: 'name', meaning: 'subscription plan name' }],\n },\n {\n ref: 'nextPayment',\n kind: LabelKind.LABEL,\n purpose: 'Summarises the amount and date of the next scheduled payment',\n params: [\n { key: 'amount', meaning: 'next payment amount' },\n { key: 'currency', meaning: 'ISO currency code of the payment' },\n { key: 'date', meaning: 'date the next payment is charged' },\n ],\n },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_SUBSCRIPTION_STATUS, LowLevelBillingSubscriptionStatusLabels);\n"]}
@@ -9,5 +9,5 @@
9
9
  */
10
10
  import React from 'react';
11
11
  import { UsageDashboardProps } from '@wildo-ai/saas-frontend-lib';
12
- export declare function UsageDashboard({ products, creditPools, onTopUp, isLoading, error, }: UsageDashboardProps): React.JSX.Element | null;
12
+ export declare function UsageDashboard({ products, creditPools, onTopUp, isLoading, error, usageUnavailable, creditPoolsUnavailable, }: UsageDashboardProps): React.JSX.Element | null;
13
13
  //# sourceMappingURL=billing-usage-dashboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"billing-usage-dashboard.d.ts","sourceRoot":"","sources":["../../../../src/components/billing/billing-usage-dashboard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAeL,mBAAmB,EACpB,MAAM,6BAA6B,CAAC;AASrC,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAS,EACT,KAAK,GACN,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAuLhD"}
1
+ {"version":3,"file":"billing-usage-dashboard.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAeL,mBAAmB,EACpB,MAAM,6BAA6B,CAAC;AASrC,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAS,EACT,KAAK,EACL,gBAAgB,EAChB,sBAAsB,GACvB,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAkMhD"}
@@ -16,7 +16,7 @@ import { cn, useI18n, useIconRegistry, StandardIconReference, IconSize, useUI, B
16
16
  // `billing-usage-dashboard.labels.ts` — statically scanned by the dev companion,
17
17
  // never imported at runtime (so it stays out of the browser bundle).
18
18
  // ── Component ───────────────────────────────────────────────────────
19
- export function UsageDashboard({ products, creditPools, onTopUp, isLoading, error, }) {
19
+ export function UsageDashboard({ products, creditPools, onTopUp, isLoading, error, usageUnavailable, creditPoolsUnavailable, }) {
20
20
  const { getRecipe } = useUI();
21
21
  const { makeTrComponent, formatNumber, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_USAGE_DASHBOARD });
22
22
  const { renderIcon } = useIconRegistry();
@@ -32,8 +32,8 @@ export function UsageDashboard({ products, creditPools, onTopUp, isLoading, erro
32
32
  }
33
33
  if (!isReady)
34
34
  return null;
35
- const isEmpty = products.length === 0 && creditPools.length === 0;
36
- return (_jsxs("div", { className: "space-y-section", children: [_jsx("h3", { className: cn(headingRecipe.base, headingRecipe.sizes?.md), children: t('title') }), isEmpty && (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsx("div", { className: cn("p-card text-center", surfaceRecipe.base), children: _jsx("p", { className: descriptionRecipe.base, children: t('noUsageData') }) }) })), products.length > 0 && (_jsxs("div", { className: "space-y-card", children: [_jsx("p", { className: cn(descriptionRecipe.base, "font-medium"), children: t('currentPeriod') }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-card", children: products.map(product => {
35
+ const isEmpty = !usageUnavailable && !creditPoolsUnavailable && products.length === 0 && creditPools.length === 0;
36
+ return (_jsxs("div", { className: "space-y-section", children: [_jsx("h3", { className: cn(headingRecipe.base, headingRecipe.sizes?.md), children: t('title') }), usageUnavailable && _jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: t('usageUnavailable') }) }), creditPoolsUnavailable && _jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: t('creditPoolsUnavailable') }) }), isEmpty && (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsx("div", { className: cn("p-card text-center", surfaceRecipe.base), children: _jsx("p", { className: descriptionRecipe.base, children: t('noUsageData') }) }) })), !usageUnavailable && products.length > 0 && (_jsxs("div", { className: "space-y-card", children: [_jsx("p", { className: cn(descriptionRecipe.base, "font-medium"), children: t('currentPeriod') }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-card", children: products.map(product => {
37
37
  const usagePercentage = product.limit
38
38
  ? Math.min(100, Math.round((product.currentPeriodUsage / product.limit) * 100))
39
39
  : null;
@@ -43,11 +43,14 @@ export function UsageDashboard({ products, creditPools, onTopUp, isLoading, erro
43
43
  return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsxs("div", { className: cn("p-card", surfaceRecipe.base), children: [_jsxs("div", { className: "flex items-center justify-between mb-element", children: [_jsx("h4", { className: cn(descriptionRecipe.base, "font-medium text-foreground"), children: product.productName }), trend !== null && (_jsx("span", { className: cn("text-xs font-medium", trend >= 0 ? 'text-success' : 'text-destructive'), children: t('trendVsPrevious', { percentage: `${trend >= 0 ? '+' : ''}${trend}%` }) }))] }), _jsx("div", { className: cn(headingRecipe.base, "text-2xl mb-element"), children: product.limit
44
44
  ? t('usageOf', { current: formatNumber(product.currentPeriodUsage), limit: formatNumber(product.limit) })
45
45
  : formatNumber(product.currentPeriodUsage) }), usagePercentage !== null && (_jsx("div", { className: "h-2 bg-muted-foreground/20 rounded-full overflow-hidden", role: "progressbar", "aria-valuenow": product.currentPeriodUsage, "aria-valuemin": 0, "aria-valuemax": product.limit ?? 100, "aria-label": t('productUsageAriaLabel', { product: product.productName, current: formatNumber(product.currentPeriodUsage), limit: formatNumber(product.limit ?? 0) }), children: _jsx("div", { className: cn("h-full rounded-full duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] transition-[width] motion-reduce:transition-none", usagePercentage >= 100 ? 'bg-destructive' : usagePercentage >= 80 ? 'bg-warning' : 'bg-primary'), style: { width: `${usagePercentage}%` } }) }))] }) }, product.productKey));
46
- }) })] })), creditPools.length > 0 && (_jsxs("div", { className: "space-y-card", children: [_jsx("p", { className: cn(descriptionRecipe.base, "font-medium"), children: t('creditsTitle') }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-card", children: creditPools.map(pool => {
47
- const usagePercentage = pool.totalPurchased > 0
48
- ? Math.round((pool.totalConsumed / pool.totalPurchased) * 100)
46
+ }) })] })), !creditPoolsUnavailable && creditPools.length > 0 && (_jsxs("div", { className: "space-y-card", children: [_jsx("p", { className: cn(descriptionRecipe.base, "font-medium"), children: t('creditsTitle') }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-card", children: creditPools.map(pool => {
47
+ // Everything the pool ever received: purchased and granted (#1802). Consumption is measured against
48
+ // both, or a pool topped up by a referral reward would read above 100%.
49
+ const totalReceived = pool.totalPurchased + (pool.totalGranted ?? 0);
50
+ const usagePercentage = totalReceived > 0
51
+ ? Math.round((pool.totalConsumed / totalReceived) * 100)
49
52
  : 0;
50
- return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsxs("div", { className: cn("p-card", surfaceRecipe.base), children: [_jsx("h4", { className: cn(descriptionRecipe.base, "font-medium text-foreground mb-section"), children: pool.poolName }), _jsxs("div", { className: "space-y-element", children: [_jsxs("div", { className: cn("flex justify-between", descriptionRecipe.base), children: [_jsx("span", { className: descriptionRecipe.base, children: t('availableCredits') }), _jsx("span", { className: cn("font-semibold text-foreground"), children: formatNumber(pool.available) })] }), _jsxs("div", { className: cn("flex justify-between", descriptionRecipe.base), children: [_jsx("span", { className: descriptionRecipe.base, children: t('totalPurchased') }), _jsx("span", { className: "text-foreground", children: formatNumber(pool.totalPurchased) })] }), _jsxs("div", { className: cn("flex justify-between", descriptionRecipe.base), children: [_jsx("span", { className: descriptionRecipe.base, children: t('totalConsumed') }), _jsx("span", { className: "text-foreground", children: formatNumber(pool.totalConsumed) })] })] }), pool.totalPurchased > 0 && (_jsx("div", { className: "mt-element h-2 bg-muted-foreground/20 rounded-full overflow-hidden", role: "progressbar", "aria-valuenow": pool.totalConsumed, "aria-valuemin": 0, "aria-valuemax": pool.totalPurchased, "aria-label": t('creditPoolAriaLabel', { pool: pool.poolName, consumed: formatNumber(pool.totalConsumed), total: formatNumber(pool.totalPurchased) }), children: _jsx("div", { className: cn("h-full rounded-full duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] transition-[width] motion-reduce:transition-none", usagePercentage >= 90 ? 'bg-destructive' : usagePercentage >= 70 ? 'bg-warning' : 'bg-primary'), style: { width: `${usagePercentage}%` } }) })), onTopUp && (_jsxs(Button, { variant: ButtonVariants_Variant.SECONDARY, size: ButtonSize.SM, className: "mt-section w-full", onClick: () => onTopUp(pool.poolKey), children: [renderIcon(StandardIconReference.PLUS, { size: IconSize.SM }), t('topUpCredits')] }))] }) }, pool.poolKey));
53
+ return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsxs("div", { className: cn("p-card", surfaceRecipe.base), children: [_jsx("h4", { className: cn(descriptionRecipe.base, "font-medium text-foreground mb-section"), children: pool.poolName }), _jsxs("div", { className: "space-y-element", children: [_jsxs("div", { className: cn("flex justify-between", descriptionRecipe.base), children: [_jsx("span", { className: descriptionRecipe.base, children: t('availableCredits') }), _jsx("span", { className: cn("font-semibold text-foreground"), children: formatNumber(pool.available) })] }), _jsxs("div", { className: cn("flex justify-between", descriptionRecipe.base), children: [_jsx("span", { className: descriptionRecipe.base, children: t('totalPurchased') }), _jsx("span", { className: "text-foreground", children: formatNumber(pool.totalPurchased) })] }), (pool.totalGranted ?? 0) > 0 && (_jsxs("div", { className: cn("flex justify-between", descriptionRecipe.base), children: [_jsx("span", { className: descriptionRecipe.base, children: t('totalGranted') }), _jsx("span", { className: "text-foreground", children: formatNumber(pool.totalGranted) })] })), _jsxs("div", { className: cn("flex justify-between", descriptionRecipe.base), children: [_jsx("span", { className: descriptionRecipe.base, children: t('totalConsumed') }), _jsx("span", { className: "text-foreground", children: formatNumber(pool.totalConsumed) })] })] }), totalReceived > 0 && (_jsx("div", { className: "mt-element h-2 bg-muted-foreground/20 rounded-full overflow-hidden", role: "progressbar", "aria-valuenow": pool.totalConsumed, "aria-valuemin": 0, "aria-valuemax": totalReceived, "aria-label": t('creditPoolAriaLabel', { pool: pool.poolName, consumed: formatNumber(pool.totalConsumed), total: formatNumber(totalReceived) }), children: _jsx("div", { className: cn("h-full rounded-full duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] transition-[width] motion-reduce:transition-none", usagePercentage >= 90 ? 'bg-destructive' : usagePercentage >= 70 ? 'bg-warning' : 'bg-primary'), style: { width: `${usagePercentage}%` } }) })), onTopUp && (_jsxs(Button, { variant: ButtonVariants_Variant.SECONDARY, size: ButtonSize.SM, className: "mt-section w-full", onClick: () => onTopUp(pool.poolKey), children: [renderIcon(StandardIconReference.PLUS, { size: IconSize.SM }), t('topUpCredits')] }))] }) }, pool.poolKey));
51
54
  }) })] }))] }));
52
55
  }
53
56
  //# sourceMappingURL=billing-usage-dashboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"billing-usage-dashboard.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * UsageDashboard (Preset)\n *\n * Displays usage/consumption overview for metered products and credit pool balances.\n * Reads from UsageSummary data provided by BillingContext.\n *\n * Formatting: Uses useI18n() for locale-aware formatting\n * of numbers, respecting user/org regional preferences.\n */\n\nimport React, { useMemo } from 'react';\nimport { ButtonSize, FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport {\n cn,\n useI18n,\n useIconRegistry,\n StandardIconReference,\n IconSize,\n useUI,\n Button,\n ButtonVariants_Variant,\n Skeleton,\n Alert,\n AlertDescription,\n Surface,\n UsageDashboardCreditPool,\n UsageDashboardProduct,\n UsageDashboardProps,\n} from '@wildo-ai/saas-frontend-lib';\n\n// The label contract for this component (keys + params + per-key purpose / kind\n// / variable meaning) lives in the co-located, companion-only\n// `billing-usage-dashboard.labels.ts` — statically scanned by the dev companion,\n// never imported at runtime (so it stays out of the browser bundle).\n\n// ── Component ───────────────────────────────────────────────────────\n\nexport function UsageDashboard({\n products,\n creditPools,\n onTopUp,\n isLoading,\n error,\n}: UsageDashboardProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, formatNumber, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_USAGE_DASHBOARD });\n const { renderIcon } = useIconRegistry();\n\n const surfaceRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.BASE);\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const descriptionRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n const t = useMemo(\n () => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_USAGE_DASHBOARD),\n [makeTrComponent],\n );\n\n if (error) {\n return (\n <Alert variant=\"destructive\">\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n );\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-section\">\n <Skeleton className=\"h-5 w-36\" />\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-card\">\n {[0, 1].map(i => (\n <Surface key={i} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <Skeleton className=\"h-4 w-28 mb-element\" />\n <Skeleton className=\"h-7 w-20 mb-element\" />\n <Skeleton className=\"h-2 w-full rounded-full\" />\n </div>\n </Surface>\n ))}\n </div>\n </div>\n );\n }\n\n if (!isReady) return null;\n\n const isEmpty = products.length === 0 && creditPools.length === 0;\n\n return (\n <div className=\"space-y-section\">\n <h3 className={cn(headingRecipe.base, headingRecipe.sizes?.md)}>{t('title')}</h3>\n\n {isEmpty && (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card text-center\", surfaceRecipe.base)}>\n <p className={descriptionRecipe.base}>{t('noUsageData')}</p>\n </div>\n </Surface>\n )}\n\n {/* Metered product usage */}\n {products.length > 0 && (\n <div className=\"space-y-card\">\n <p className={cn(descriptionRecipe.base, \"font-medium\")}>{t('currentPeriod')}</p>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-card\">\n {products.map(product => {\n const usagePercentage = product.limit\n ? Math.min(100, Math.round((product.currentPeriodUsage / product.limit) * 100))\n : null;\n const trend = product.previousPeriodUsage != null && product.previousPeriodUsage > 0\n ? Math.round(((product.currentPeriodUsage - product.previousPeriodUsage) / product.previousPeriodUsage) * 100)\n : null;\n\n return (\n <Surface key={product.productKey} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <div className=\"flex items-center justify-between mb-element\">\n <h4 className={cn(descriptionRecipe.base, \"font-medium text-foreground\")}>{product.productName}</h4>\n {trend !== null && (\n <span className={cn(\"text-xs font-medium\", trend >= 0 ? 'text-success' : 'text-destructive')}>\n {t('trendVsPrevious', { percentage: `${trend >= 0 ? '+' : ''}${trend}%` })}\n </span>\n )}\n </div>\n\n <div className={cn(headingRecipe.base, \"text-2xl mb-element\")}>\n {product.limit\n ? t('usageOf', { current: formatNumber(product.currentPeriodUsage), limit: formatNumber(product.limit) })\n : formatNumber(product.currentPeriodUsage)}\n </div>\n\n {usagePercentage !== null && (\n <div\n className=\"h-2 bg-muted-foreground/20 rounded-full overflow-hidden\"\n role=\"progressbar\"\n aria-valuenow={product.currentPeriodUsage}\n aria-valuemin={0}\n aria-valuemax={product.limit ?? 100}\n aria-label={t('productUsageAriaLabel', { product: product.productName, current: formatNumber(product.currentPeriodUsage), limit: formatNumber(product.limit ?? 0) })}\n >\n <div\n className={cn(\n \"h-full rounded-full duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] transition-[width] motion-reduce:transition-none\",\n usagePercentage >= 100 ? 'bg-destructive' : usagePercentage >= 80 ? 'bg-warning' : 'bg-primary',\n )}\n style={{ width: `${usagePercentage}%` }}\n />\n </div>\n )}\n </div>\n </Surface>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Credit pools */}\n {creditPools.length > 0 && (\n <div className=\"space-y-card\">\n <p className={cn(descriptionRecipe.base, \"font-medium\")}>{t('creditsTitle')}</p>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-card\">\n {creditPools.map(pool => {\n const usagePercentage = pool.totalPurchased > 0\n ? Math.round((pool.totalConsumed / pool.totalPurchased) * 100)\n : 0;\n\n return (\n <Surface key={pool.poolKey} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <h4 className={cn(descriptionRecipe.base, \"font-medium text-foreground mb-section\")}>{pool.poolName}</h4>\n\n <div className=\"space-y-element\">\n <div className={cn(\"flex justify-between\", descriptionRecipe.base)}>\n <span className={descriptionRecipe.base}>{t('availableCredits')}</span>\n <span className={cn(\"font-semibold text-foreground\")}>{formatNumber(pool.available)}</span>\n </div>\n <div className={cn(\"flex justify-between\", descriptionRecipe.base)}>\n <span className={descriptionRecipe.base}>{t('totalPurchased')}</span>\n <span className=\"text-foreground\">{formatNumber(pool.totalPurchased)}</span>\n </div>\n <div className={cn(\"flex justify-between\", descriptionRecipe.base)}>\n <span className={descriptionRecipe.base}>{t('totalConsumed')}</span>\n <span className=\"text-foreground\">{formatNumber(pool.totalConsumed)}</span>\n </div>\n </div>\n\n {pool.totalPurchased > 0 && (\n <div\n className=\"mt-element h-2 bg-muted-foreground/20 rounded-full overflow-hidden\"\n role=\"progressbar\"\n aria-valuenow={pool.totalConsumed}\n aria-valuemin={0}\n aria-valuemax={pool.totalPurchased}\n aria-label={t('creditPoolAriaLabel', { pool: pool.poolName, consumed: formatNumber(pool.totalConsumed), total: formatNumber(pool.totalPurchased) })}\n >\n <div\n className={cn(\n \"h-full rounded-full duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] transition-[width] motion-reduce:transition-none\",\n usagePercentage >= 90 ? 'bg-destructive' : usagePercentage >= 70 ? 'bg-warning' : 'bg-primary',\n )}\n style={{ width: `${usagePercentage}%` }}\n />\n </div>\n )}\n\n {onTopUp && (\n <Button\n variant={ButtonVariants_Variant.SECONDARY}\n size={ButtonSize.SM}\n className=\"mt-section w-full\"\n onClick={() => onTopUp(pool.poolKey)}\n >\n {renderIcon(StandardIconReference.PLUS, { size: IconSize.SM })}\n {t('topUpCredits')}\n </Button>\n )}\n </div>\n </Surface>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"billing-usage-dashboard.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * UsageDashboard (Preset)\n *\n * Displays usage/consumption overview for metered products and credit pool balances.\n * Reads from UsageSummary data provided by BillingContext.\n *\n * Formatting: Uses useI18n() for locale-aware formatting\n * of numbers, respecting user/org regional preferences.\n */\n\nimport React, { useMemo } from 'react';\nimport { ButtonSize, FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport {\n cn,\n useI18n,\n useIconRegistry,\n StandardIconReference,\n IconSize,\n useUI,\n Button,\n ButtonVariants_Variant,\n Skeleton,\n Alert,\n AlertDescription,\n Surface,\n UsageDashboardCreditPool,\n UsageDashboardProduct,\n UsageDashboardProps,\n} from '@wildo-ai/saas-frontend-lib';\n\n// The label contract for this component (keys + params + per-key purpose / kind\n// / variable meaning) lives in the co-located, companion-only\n// `billing-usage-dashboard.labels.ts` — statically scanned by the dev companion,\n// never imported at runtime (so it stays out of the browser bundle).\n\n// ── Component ───────────────────────────────────────────────────────\n\nexport function UsageDashboard({\n products,\n creditPools,\n onTopUp,\n isLoading,\n error,\n usageUnavailable,\n creditPoolsUnavailable,\n}: UsageDashboardProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, formatNumber, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_USAGE_DASHBOARD });\n const { renderIcon } = useIconRegistry();\n\n const surfaceRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.BASE);\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const descriptionRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n const t = useMemo(\n () => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_USAGE_DASHBOARD),\n [makeTrComponent],\n );\n\n if (error) {\n return (\n <Alert variant=\"destructive\">\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n );\n }\n\n if (isLoading) {\n return (\n <div className=\"space-y-section\">\n <Skeleton className=\"h-5 w-36\" />\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-card\">\n {[0, 1].map(i => (\n <Surface key={i} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <Skeleton className=\"h-4 w-28 mb-element\" />\n <Skeleton className=\"h-7 w-20 mb-element\" />\n <Skeleton className=\"h-2 w-full rounded-full\" />\n </div>\n </Surface>\n ))}\n </div>\n </div>\n );\n }\n\n if (!isReady) return null;\n\n const isEmpty = !usageUnavailable && !creditPoolsUnavailable && products.length === 0 && creditPools.length === 0;\n\n return (\n <div className=\"space-y-section\">\n <h3 className={cn(headingRecipe.base, headingRecipe.sizes?.md)}>{t('title')}</h3>\n\n {usageUnavailable && <Alert variant=\"destructive\"><AlertDescription>{t('usageUnavailable')}</AlertDescription></Alert>}\n {creditPoolsUnavailable && <Alert variant=\"destructive\"><AlertDescription>{t('creditPoolsUnavailable')}</AlertDescription></Alert>}\n {isEmpty && (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card text-center\", surfaceRecipe.base)}>\n <p className={descriptionRecipe.base}>{t('noUsageData')}</p>\n </div>\n </Surface>\n )}\n\n {/* Metered product usage */}\n {!usageUnavailable && products.length > 0 && (\n <div className=\"space-y-card\">\n <p className={cn(descriptionRecipe.base, \"font-medium\")}>{t('currentPeriod')}</p>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-card\">\n {products.map(product => {\n const usagePercentage = product.limit\n ? Math.min(100, Math.round((product.currentPeriodUsage / product.limit) * 100))\n : null;\n const trend = product.previousPeriodUsage != null && product.previousPeriodUsage > 0\n ? Math.round(((product.currentPeriodUsage - product.previousPeriodUsage) / product.previousPeriodUsage) * 100)\n : null;\n\n return (\n <Surface key={product.productKey} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <div className=\"flex items-center justify-between mb-element\">\n <h4 className={cn(descriptionRecipe.base, \"font-medium text-foreground\")}>{product.productName}</h4>\n {trend !== null && (\n <span className={cn(\"text-xs font-medium\", trend >= 0 ? 'text-success' : 'text-destructive')}>\n {t('trendVsPrevious', { percentage: `${trend >= 0 ? '+' : ''}${trend}%` })}\n </span>\n )}\n </div>\n\n <div className={cn(headingRecipe.base, \"text-2xl mb-element\")}>\n {product.limit\n ? t('usageOf', { current: formatNumber(product.currentPeriodUsage), limit: formatNumber(product.limit) })\n : formatNumber(product.currentPeriodUsage)}\n </div>\n\n {usagePercentage !== null && (\n <div\n className=\"h-2 bg-muted-foreground/20 rounded-full overflow-hidden\"\n role=\"progressbar\"\n aria-valuenow={product.currentPeriodUsage}\n aria-valuemin={0}\n aria-valuemax={product.limit ?? 100}\n aria-label={t('productUsageAriaLabel', { product: product.productName, current: formatNumber(product.currentPeriodUsage), limit: formatNumber(product.limit ?? 0) })}\n >\n <div\n className={cn(\n \"h-full rounded-full duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] transition-[width] motion-reduce:transition-none\",\n usagePercentage >= 100 ? 'bg-destructive' : usagePercentage >= 80 ? 'bg-warning' : 'bg-primary',\n )}\n style={{ width: `${usagePercentage}%` }}\n />\n </div>\n )}\n </div>\n </Surface>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Credit pools */}\n {!creditPoolsUnavailable && creditPools.length > 0 && (\n <div className=\"space-y-card\">\n <p className={cn(descriptionRecipe.base, \"font-medium\")}>{t('creditsTitle')}</p>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-card\">\n {creditPools.map(pool => {\n // Everything the pool ever received: purchased and granted (#1802). Consumption is measured against\n // both, or a pool topped up by a referral reward would read above 100%.\n const totalReceived = pool.totalPurchased + (pool.totalGranted ?? 0);\n const usagePercentage = totalReceived > 0\n ? Math.round((pool.totalConsumed / totalReceived) * 100)\n : 0;\n\n return (\n <Surface key={pool.poolKey} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <h4 className={cn(descriptionRecipe.base, \"font-medium text-foreground mb-section\")}>{pool.poolName}</h4>\n\n <div className=\"space-y-element\">\n <div className={cn(\"flex justify-between\", descriptionRecipe.base)}>\n <span className={descriptionRecipe.base}>{t('availableCredits')}</span>\n <span className={cn(\"font-semibold text-foreground\")}>{formatNumber(pool.available)}</span>\n </div>\n <div className={cn(\"flex justify-between\", descriptionRecipe.base)}>\n <span className={descriptionRecipe.base}>{t('totalPurchased')}</span>\n <span className=\"text-foreground\">{formatNumber(pool.totalPurchased)}</span>\n </div>\n {(pool.totalGranted ?? 0) > 0 && (\n <div className={cn(\"flex justify-between\", descriptionRecipe.base)}>\n <span className={descriptionRecipe.base}>{t('totalGranted')}</span>\n <span className=\"text-foreground\">{formatNumber(pool.totalGranted)}</span>\n </div>\n )}\n <div className={cn(\"flex justify-between\", descriptionRecipe.base)}>\n <span className={descriptionRecipe.base}>{t('totalConsumed')}</span>\n <span className=\"text-foreground\">{formatNumber(pool.totalConsumed)}</span>\n </div>\n </div>\n\n {totalReceived > 0 && (\n <div\n className=\"mt-element h-2 bg-muted-foreground/20 rounded-full overflow-hidden\"\n role=\"progressbar\"\n aria-valuenow={pool.totalConsumed}\n aria-valuemin={0}\n aria-valuemax={totalReceived}\n aria-label={t('creditPoolAriaLabel', { pool: pool.poolName, consumed: formatNumber(pool.totalConsumed), total: formatNumber(totalReceived) })}\n >\n <div\n className={cn(\n \"h-full rounded-full duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] transition-[width] motion-reduce:transition-none\",\n usagePercentage >= 90 ? 'bg-destructive' : usagePercentage >= 70 ? 'bg-warning' : 'bg-primary',\n )}\n style={{ width: `${usagePercentage}%` }}\n />\n </div>\n )}\n\n {onTopUp && (\n <Button\n variant={ButtonVariants_Variant.SECONDARY}\n size={ButtonSize.SM}\n className=\"mt-section w-full\"\n onClick={() => onTopUp(pool.poolKey)}\n >\n {renderIcon(StandardIconReference.PLUS, { size: IconSize.SM })}\n {t('topUpCredits')}\n </Button>\n )}\n </div>\n </Surface>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"billing-usage-dashboard.labels.d.ts","sourceRoot":"","sources":["../../../../src/components/billing/billing-usage-dashboard.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAa7C,eAAO,MAAM,mCAAmC,EAAE,mBAAmB,EA6CpE,CAAC"}
1
+ {"version":3,"file":"billing-usage-dashboard.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAa7C,eAAO,MAAM,mCAAmC,EAAE,mBAAmB,EAgDpE,CAAC"}
@@ -11,12 +11,15 @@ import { FrontendComponentType, LabelKind, registerComponentLabels, } from '@wil
11
11
  // what it means, so the meaning lives here (single source of truth), not in a
12
12
  // separate spec that would drift.
13
13
  export const LowLevelBillingUsageDashboardLabels = [
14
+ { ref: 'usageUnavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Metered usage is temporarily unavailable; do not imply zero consumption' },
15
+ { ref: 'creditPoolsUnavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Credit balances are temporarily unavailable; do not imply zero credit' },
14
16
  { ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the usage dashboard panel' },
15
17
  { ref: 'currentPeriod', kind: LabelKind.LABEL, purpose: 'Label for the active billing-period indicator' },
16
18
  { ref: 'noUsageData', kind: LabelKind.EMPTY_STATE, purpose: 'Shown before any usage has been recorded this period' },
17
19
  { ref: 'creditsTitle', kind: LabelKind.HEADING, purpose: 'Heading for the credits overview section' },
18
20
  { ref: 'availableCredits', kind: LabelKind.LABEL, purpose: 'Credits the customer can still spend' },
19
21
  { ref: 'totalPurchased', kind: LabelKind.LABEL, purpose: 'Total credits the customer has purchased' },
22
+ { ref: 'totalGranted', kind: LabelKind.LABEL, purpose: 'Total credits the customer was given without buying them, such as referral rewards' },
20
23
  { ref: 'totalConsumed', kind: LabelKind.LABEL, purpose: 'Total credits the customer has consumed' },
21
24
  {
22
25
  ref: 'usageOf',
@@ -52,7 +55,7 @@ export const LowLevelBillingUsageDashboardLabels = [
52
55
  params: [
53
56
  { key: 'pool', meaning: 'credit-pool name' },
54
57
  { key: 'consumed', meaning: 'credits used from the pool' },
55
- { key: 'total', meaning: 'total credits in the pool' },
58
+ { key: 'total', meaning: 'credits the pool received in total, bought and given' },
56
59
  ],
57
60
  },
58
61
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"billing-usage-dashboard.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,SAAS,EAET,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,gFAAgF;AAChF,qDAAqD;AACrD,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,+EAA+E;AAC/E,8EAA8E;AAC9E,kCAAkC;AAClC,MAAM,CAAC,MAAM,mCAAmC,GAA0B;IACxE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,uCAAuC,EAAE;IAC3F,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,+CAA+C,EAAE;IACzG,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,sDAAsD,EAAE;IACpH,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,0CAA0C,EAAE;IACrG,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,sCAAsC,EAAE;IACnG,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,0CAA0C,EAAE;IACrG,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,yCAAyC,EAAE;IACnG;QACE,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,OAAO,EAAE,yCAAyC;QAClD,MAAM,EAAE;YACN,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,gCAAgC,EAAE;YAC7D,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,kCAAkC,EAAE;SAC9D;KACF;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,OAAO,EAAE,mDAAmD;QAC5D,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,iDAAiD,EAAE,CAAC;KAC5F;IACD;QACE,GAAG,EAAE,uBAAuB;QAC5B,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,OAAO,EAAE,sDAAsD;QAC/D,KAAK,EAAE,CAAC,6CAA6C,CAAC;QACtD,MAAM,EAAE;YACN,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,wBAAwB,EAAE;YACrD,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE;YACjD,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE;SACpD;KACF;IACD;QACE,GAAG,EAAE,qBAAqB;QAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,OAAO,EAAE,wDAAwD;QACjE,KAAK,EAAE,CAAC,6CAA6C,CAAC;QACtD,MAAM,EAAE;YACN,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE;YAC5C,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,4BAA4B,EAAE;YAC1D,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE;SACvD;KACF;CACF,CAAC;AAEF,uBAAuB,CAAC,qBAAqB,CAAC,iCAAiC,EAAE,mCAAmC,CAAC,CAAC","sourcesContent":["import {\n FrontendComponentType,\n LabelKind,\n type LabellingUnitaryDef,\n registerComponentLabels,\n} from '@wildo-ai/presets-components-models';\n\n// =============================================================================\n// LABEL CONTRACT — LOW_LEVEL_BILLING_USAGE_DASHBOARD\n// =============================================================================\n//\n// Companion-only metadata: the keys this component renders, each with its\n// purpose, UI kind, and per-variable meaning. The dev companion STATICALLY\n// SCANS this file to generate labels + translations — it is NOT imported at\n// runtime, so it never ships in the browser bundle. Co-located with the\n// component on purpose: the author who declares `usageOf` is the one who knows\n// what it means, so the meaning lives here (single source of truth), not in a\n// separate spec that would drift.\nexport const LowLevelBillingUsageDashboardLabels: LabellingUnitaryDef[] = [\n { ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the usage dashboard panel' },\n { ref: 'currentPeriod', kind: LabelKind.LABEL, purpose: 'Label for the active billing-period indicator' },\n { ref: 'noUsageData', kind: LabelKind.EMPTY_STATE, purpose: 'Shown before any usage has been recorded this period' },\n { ref: 'creditsTitle', kind: LabelKind.HEADING, purpose: 'Heading for the credits overview section' },\n { ref: 'availableCredits', kind: LabelKind.LABEL, purpose: 'Credits the customer can still spend' },\n { ref: 'totalPurchased', kind: LabelKind.LABEL, purpose: 'Total credits the customer has purchased' },\n { ref: 'totalConsumed', kind: LabelKind.LABEL, purpose: 'Total credits the customer has consumed' },\n {\n ref: 'usageOf',\n kind: LabelKind.LABEL,\n purpose: 'How much of a metered quota is consumed',\n params: [\n { key: 'current', meaning: 'amount used so far this period' },\n { key: 'limit', meaning: \"the plan's quota for this metric\" },\n ],\n },\n {\n ref: 'trendVsPrevious',\n kind: LabelKind.LABEL,\n purpose: 'Change in usage compared with the previous period',\n params: [{ key: 'percentage', meaning: 'signed percentage change vs the previous period' }],\n },\n {\n ref: 'productUsageAriaLabel',\n kind: LabelKind.ARIA,\n purpose: \"Screen-reader summary of one product's metered usage\",\n notes: ['Self-contained; read aloud as a full phrase'],\n params: [\n { key: 'product', meaning: 'product / feature name' },\n { key: 'current', meaning: 'amount used so far' },\n { key: 'limit', meaning: 'quota for that product' },\n ],\n },\n {\n ref: 'creditPoolAriaLabel',\n kind: LabelKind.ARIA,\n purpose: \"Screen-reader summary of one credit pool's consumption\",\n notes: ['Self-contained; read aloud as a full phrase'],\n params: [\n { key: 'pool', meaning: 'credit-pool name' },\n { key: 'consumed', meaning: 'credits used from the pool' },\n { key: 'total', meaning: 'total credits in the pool' },\n ],\n },\n];\n\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_USAGE_DASHBOARD, LowLevelBillingUsageDashboardLabels);\n"]}
1
+ {"version":3,"file":"billing-usage-dashboard.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-usage-dashboard.labels.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n FrontendComponentType,\n LabelKind,\n type LabellingUnitaryDef,\n registerComponentLabels,\n} from '@wildo-ai/presets-components-models';\n\n// =============================================================================\n// LABEL CONTRACT — LOW_LEVEL_BILLING_USAGE_DASHBOARD\n// =============================================================================\n//\n// Companion-only metadata: the keys this component renders, each with its\n// purpose, UI kind, and per-variable meaning. The dev companion STATICALLY\n// SCANS this file to generate labels + translations — it is NOT imported at\n// runtime, so it never ships in the browser bundle. Co-located with the\n// component on purpose: the author who declares `usageOf` is the one who knows\n// what it means, so the meaning lives here (single source of truth), not in a\n// separate spec that would drift.\nexport const LowLevelBillingUsageDashboardLabels: LabellingUnitaryDef[] = [\n { ref: 'usageUnavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Metered usage is temporarily unavailable; do not imply zero consumption' },\n { ref: 'creditPoolsUnavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Credit balances are temporarily unavailable; do not imply zero credit' },\n { ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the usage dashboard panel' },\n { ref: 'currentPeriod', kind: LabelKind.LABEL, purpose: 'Label for the active billing-period indicator' },\n { ref: 'noUsageData', kind: LabelKind.EMPTY_STATE, purpose: 'Shown before any usage has been recorded this period' },\n { ref: 'creditsTitle', kind: LabelKind.HEADING, purpose: 'Heading for the credits overview section' },\n { ref: 'availableCredits', kind: LabelKind.LABEL, purpose: 'Credits the customer can still spend' },\n { ref: 'totalPurchased', kind: LabelKind.LABEL, purpose: 'Total credits the customer has purchased' },\n { ref: 'totalGranted', kind: LabelKind.LABEL, purpose: 'Total credits the customer was given without buying them, such as referral rewards' },\n { ref: 'totalConsumed', kind: LabelKind.LABEL, purpose: 'Total credits the customer has consumed' },\n {\n ref: 'usageOf',\n kind: LabelKind.LABEL,\n purpose: 'How much of a metered quota is consumed',\n params: [\n { key: 'current', meaning: 'amount used so far this period' },\n { key: 'limit', meaning: \"the plan's quota for this metric\" },\n ],\n },\n {\n ref: 'trendVsPrevious',\n kind: LabelKind.LABEL,\n purpose: 'Change in usage compared with the previous period',\n params: [{ key: 'percentage', meaning: 'signed percentage change vs the previous period' }],\n },\n {\n ref: 'productUsageAriaLabel',\n kind: LabelKind.ARIA,\n purpose: \"Screen-reader summary of one product's metered usage\",\n notes: ['Self-contained; read aloud as a full phrase'],\n params: [\n { key: 'product', meaning: 'product / feature name' },\n { key: 'current', meaning: 'amount used so far' },\n { key: 'limit', meaning: 'quota for that product' },\n ],\n },\n {\n ref: 'creditPoolAriaLabel',\n kind: LabelKind.ARIA,\n purpose: \"Screen-reader summary of one credit pool's consumption\",\n notes: ['Self-contained; read aloud as a full phrase'],\n params: [\n { key: 'pool', meaning: 'credit-pool name' },\n { key: 'consumed', meaning: 'credits used from the pool' },\n { key: 'total', meaning: 'credits the pool received in total, bought and given' },\n ],\n },\n];\n\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_USAGE_DASHBOARD, LowLevelBillingUsageDashboardLabels);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/avatar.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,cAAc,EAKf,MAAM,6BAA6B,CAAC;AA0DrC,eAAO,MAAM,MAAM,gBAAqG,CAAA"}
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/avatar.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,cAAc,EAKf,MAAM,6BAA6B,CAAC;AA0DrC,eAAO,MAAM,MAAM,gBAAqG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.labels.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/avatar.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,EAAO,CAAC"}
1
+ {"version":3,"file":"avatar.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/avatar.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,EAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAyB,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAkBpF,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAmB,EACnB,OAAe,EACf,GAAG,KAAK,EACT,EAAE,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAoBhC;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAiB7D,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAmB,EACnB,OAAe,EACf,GAAG,KAAK,EACT,EAAE,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAqBhC;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -1,23 +1,24 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Slot } from "@radix-ui/react-slot";
3
- import { IndicatorVariant, UIBehavior } from "@wildo-ai/presets-components-models";
4
- import { cn, useUI } from "@wildo-ai/saas-frontend-lib";
5
- /** Map public variant names to IndicatorVariant enum values */
6
- const VARIANT_MAP = {
7
- default: IndicatorVariant.NEUTRAL,
8
- secondary: IndicatorVariant.NEUTRAL,
9
- destructive: IndicatorVariant.ERROR,
10
- outline: IndicatorVariant.NEUTRAL,
11
- info: IndicatorVariant.INFO,
12
- success: IndicatorVariant.SUCCESS,
13
- warning: IndicatorVariant.WARNING,
14
- };
15
- /** Structure classes — layout, sizing. Theme-independent. */
16
- const STRUCTURE = "inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-item-xs [&>svg]:pointer-events-none overflow-hidden";
3
+ import { UIBehavior } from "@wildo-ai/presets-components-models";
4
+ import { badgeVariantIndicator, cn, useUI } from "@wildo-ai/saas-frontend-lib";
5
+ /**
6
+ * Structure classes — layout, sizing. Theme-independent.
7
+ *
8
+ * The gap is the `element` role, whose own definition is "between inline elements (icons, buttons,
9
+ * tags)" — which is exactly a badge's glyph beside its word. It was `item-xs`: the wrong role at
10
+ * its smallest step, and `--sp-item` being 0.25rem makes a quarter of it **one pixel**, so every
11
+ * badge that carries an icon drew the glyph flush against the label. The enum display badge and
12
+ * the enum edit controls now take the same gap from the same role, which is the point — a value
13
+ * should not be spaced one way when it is read and another when it is chosen.
14
+ */
15
+ /* `tabular-nums`: a badge is where a COUNT lives, and `2` and `14` must take the same width in a row of them (#1322). */
16
+ const STRUCTURE = "inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-element-sm [&>svg]:pointer-events-none overflow-hidden tabular-nums";
17
17
  function Badge({ className, variant = "default", asChild = false, ...props }) {
18
18
  const { getRecipe } = useUI();
19
19
  const Comp = asChild ? Slot : "span";
20
- const recipe = getRecipe(UIBehavior.INDICATOR, VARIANT_MAP[variant]);
20
+ // The variant → tone projection is the framework's one seam (`badge-tone.ts`), not this file's.
21
+ const recipe = getRecipe(UIBehavior.INDICATOR, badgeVariantIndicator(variant));
21
22
  return (_jsx(Comp, { "data-slot": "badge", className: cn(STRUCTURE, recipe.base, recipe.states.hover, recipe.states.focus, recipe.states.invalid, recipe.motion.transition, className), ...props }));
22
23
  }
23
24
  export { Badge };
@@ -1 +1 @@
1
- {"version":3,"file":"badge.js","sourceRoot":"","sources":["../../../../../src/components/data-display/badge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAyB,gBAAgB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAGzG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEvD,+DAA+D;AAC/D,MAAM,WAAW,GAAoD;IACnE,OAAO,EAAE,gBAAgB,CAAC,OAAO;IACjC,SAAS,EAAE,gBAAgB,CAAC,OAAO;IACnC,WAAW,EAAE,gBAAgB,CAAC,KAAK;IACnC,OAAO,EAAE,gBAAgB,CAAC,OAAO;IACjC,IAAI,EAAE,gBAAgB,CAAC,IAAI;IAC3B,OAAO,EAAE,gBAAgB,CAAC,OAAO;IACjC,OAAO,EAAE,gBAAgB,CAAC,OAAO;CAClC,CAAA;AAED,6DAA6D;AAC7D,MAAM,SAAS,GAAW,iJAAiJ,CAAA;AAE3K,SAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAO,GAAG,SAAS,EACnB,OAAO,GAAG,KAAK,EACf,GAAG,KAAK,EACG;IACX,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAA;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;IACpC,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;IAEpE,OAAO,CACL,KAAC,IAAI,iBACO,OAAO,EACjB,SAAS,EAAE,EAAE,CACX,SAAS,EACT,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,CAAC,KAAK,EACnB,MAAM,CAAC,MAAM,CAAC,KAAK,EACnB,MAAM,CAAC,MAAM,CAAC,OAAO,EACrB,MAAM,CAAC,MAAM,CAAC,UAAU,EACxB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAA","sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { FrontendComponentType, IndicatorVariant, UIBehavior } from \"@wildo-ai/presets-components-models\"\nimport type { BadgeVariants_Variant, BadgeProps } from '@wildo-ai/saas-frontend-lib'\n\nimport { cn, useUI } from \"@wildo-ai/saas-frontend-lib\"\n\n/** Map public variant names to IndicatorVariant enum values */\nconst VARIANT_MAP: Record<BadgeVariants_Variant, IndicatorVariant> = {\n default: IndicatorVariant.NEUTRAL,\n secondary: IndicatorVariant.NEUTRAL,\n destructive: IndicatorVariant.ERROR,\n outline: IndicatorVariant.NEUTRAL,\n info: IndicatorVariant.INFO,\n success: IndicatorVariant.SUCCESS,\n warning: IndicatorVariant.WARNING,\n}\n\n/** Structure classes — layout, sizing. Theme-independent. */\nconst STRUCTURE: string = \"inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-item-xs [&>svg]:pointer-events-none overflow-hidden\"\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: BadgeProps): React.JSX.Element {\n const { getRecipe } = useUI()\n const Comp = asChild ? Slot : \"span\"\n const recipe = getRecipe(UIBehavior.INDICATOR, VARIANT_MAP[variant])\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(\n STRUCTURE,\n recipe.base,\n recipe.states.hover,\n recipe.states.focus,\n recipe.states.invalid,\n recipe.motion.transition,\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Badge }\n"]}
1
+ {"version":3,"file":"badge.js","sourceRoot":"","sources":["../../../../../src/components/data-display/badge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAGhE,OAAO,EAAE,qBAAqB,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAE9E;;;;;;;;;GASG;AACH,yHAAyH;AACzH,MAAM,SAAS,GAAW,iKAAiK,CAAA;AAE3L,SAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAO,GAAG,SAAS,EACnB,OAAO,GAAG,KAAK,EACf,GAAG,KAAK,EACG;IACX,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAA;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;IACpC,gGAAgG;IAChG,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA;IAE9E,OAAO,CACL,KAAC,IAAI,iBACO,OAAO,EACjB,SAAS,EAAE,EAAE,CACX,SAAS,EACT,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,MAAM,CAAC,KAAK,EACnB,MAAM,CAAC,MAAM,CAAC,KAAK,EACnB,MAAM,CAAC,MAAM,CAAC,OAAO,EACrB,MAAM,CAAC,MAAM,CAAC,UAAU,EACxB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAA","sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { UIBehavior } from \"@wildo-ai/presets-components-models\"\nimport type { BadgeProps } from '@wildo-ai/saas-frontend-lib'\n\nimport { badgeVariantIndicator, cn, useUI } from \"@wildo-ai/saas-frontend-lib\"\n\n/**\n * Structure classes — layout, sizing. Theme-independent.\n *\n * The gap is the `element` role, whose own definition is \"between inline elements (icons, buttons,\n * tags)\" — which is exactly a badge's glyph beside its word. It was `item-xs`: the wrong role at\n * its smallest step, and `--sp-item` being 0.25rem makes a quarter of it **one pixel**, so every\n * badge that carries an icon drew the glyph flush against the label. The enum display badge and\n * the enum edit controls now take the same gap from the same role, which is the point — a value\n * should not be spaced one way when it is read and another when it is chosen.\n */\n/* `tabular-nums`: a badge is where a COUNT lives, and `2` and `14` must take the same width in a row of them (#1322). */\nconst STRUCTURE: string = \"inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-element-sm [&>svg]:pointer-events-none overflow-hidden tabular-nums\"\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: BadgeProps): React.JSX.Element {\n const { getRecipe } = useUI()\n const Comp = asChild ? Slot : \"span\"\n // The variant → tone projection is the framework's one seam (`badge-tone.ts`), not this file's.\n const recipe = getRecipe(UIBehavior.INDICATOR, badgeVariantIndicator(variant))\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(\n STRUCTURE,\n recipe.base,\n recipe.states.hover,\n recipe.states.focus,\n recipe.states.invalid,\n recipe.motion.transition,\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Badge }\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"badge.labels.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/badge.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,EAAO,CAAC"}
1
+ {"version":3,"file":"badge.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/badge.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,EAAO,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- export declare function DescriptionList({ className, ...props }: React.ComponentPropsWithoutRef<'dl'>): React.JSX.Element;
2
+ import type { DescriptionListProps } from '@wildo-ai/saas-frontend-lib';
3
+ export declare function DescriptionList({ className, layout, ...props }: DescriptionListProps): React.JSX.Element;
3
4
  export declare function DescriptionTerm({ className, ...props }: React.ComponentPropsWithoutRef<'dt'>): React.JSX.Element;
4
5
  export declare function DescriptionDetails({ className, ...props }: React.ComponentPropsWithoutRef<'dd'>): React.JSX.Element;
5
6
  //# sourceMappingURL=description-list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"description-list.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/description-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAgBhH;AAED,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAwBhH;AAED,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAenH"}
1
+ {"version":3,"file":"description-list.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/description-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAevE,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,MAAmC,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiBrI;AAED,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA0BhH;AAED,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkBnH"}
@@ -1,12 +1,23 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cn, useUI } from '@wildo-ai/saas-frontend-lib';
3
- import { TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';
4
- export function DescriptionList({ className, ...props }) {
3
+ import { DescriptionListLayout, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';
4
+ /**
5
+ * The two LAYOUTS (#1322). The list stamps `data-layout` and the term/detail cells read it through
6
+ * the `in-data-[layout=…]` variant, so a pair needs no prop of its own and a list nested in another
7
+ * follows the nearest `dl`. KEY_VALUE: a fixed narrow term column — `--spacing(32)` is 8rem, the
8
+ * width the mock measured for a ref or a date beside its term — details wrapping beside it and
9
+ * breaking long refs, no rules, tight row gaps.
10
+ */
11
+ const LAYOUT_STRUCTURE = {
12
+ [DescriptionListLayout.ROWS]: 'grid grid-cols-1 sm:grid-cols-[min(50%,--spacing(80))_auto]',
13
+ [DescriptionListLayout.KEY_VALUE]: 'grid grid-cols-[minmax(0,--spacing(32))_minmax(0,1fr)] gap-x-field gap-y-item-xs',
14
+ };
15
+ export function DescriptionList({ className, layout = DescriptionListLayout.ROWS, ...props }) {
5
16
  const { getRecipe } = useUI();
6
17
  const recipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.BODY);
7
- return (_jsx("dl", { ...props, className: cn(
18
+ return (_jsx("dl", { "data-layout": layout, ...props, className: cn(
8
19
  // Structure
9
- 'grid grid-cols-1 sm:grid-cols-[min(50%,--spacing(80))_auto]',
20
+ LAYOUT_STRUCTURE[layout],
10
21
  // Style from TYPOGRAPHY.BODY recipe
11
22
  recipe.base, className) }));
12
23
  }
@@ -25,15 +36,20 @@ export function DescriptionTerm({ className, ...props }) {
25
36
  * is what the "default field view" looked like until 2026-09-01. The hairline's color comes
26
37
  * from the design system's base rule (`* { border-color: var(--border) }`).
27
38
  */
28
- 'border-t sm:border-t', className) }));
39
+ 'border-t sm:border-t',
40
+ // KEY_VALUE: no rule, no row padding, the term breaks rather than overflows its narrow column.
41
+ 'in-data-[layout=key-value]:border-t-0 in-data-[layout=key-value]:pt-0 in-data-[layout=key-value]:sm:py-0 in-data-[layout=key-value]:min-w-0 in-data-[layout=key-value]:break-words', className) }));
29
42
  }
30
43
  export function DescriptionDetails({ className, ...props }) {
31
44
  return (_jsx("dd", { ...props, className: cn(
32
45
  // Structure
33
46
  'pt-item pb-group sm:py-group sm:nth-2:border-none',
34
- // Style — value text
35
- 'text-foreground',
47
+ // Style — value text. `tabular-nums` (#1322): a column of details is where counts, durations and
48
+ // timestamps line up, and the feature only touches digits, so it costs a prose detail nothing.
49
+ 'text-foreground tabular-nums',
36
50
  // Same rule as DescriptionTerm: a hairline, never the divider recipe's FILL.
37
- 'sm:border-t', className) }));
51
+ 'sm:border-t',
52
+ // KEY_VALUE: no rule, no row padding, a long ref wraps inside the column.
53
+ 'in-data-[layout=key-value]:sm:border-t-0 in-data-[layout=key-value]:pt-0 in-data-[layout=key-value]:pb-0 in-data-[layout=key-value]:sm:py-0 in-data-[layout=key-value]:min-w-0 in-data-[layout=key-value]:break-words', className) }));
38
54
  }
39
55
  //# sourceMappingURL=description-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"description-list.js","sourceRoot":"","sources":["../../../../../src/components/data-display/description-list.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAyB,iBAAiB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAE1G,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwC;IAC3F,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAEvE,OAAO,CACL,gBACM,KAAK,EACT,SAAS,EAAE,EAAE;QACX,YAAY;QACZ,6DAA6D;QAC7D,oCAAoC;QACpC,MAAM,CAAC,IAAI,EACX,SAAS,CACV,GACD,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwC;IAC3F,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAA;IAC7B,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAElF,OAAO,CACL,gBACM,KAAK,EACT,SAAS,EAAE,EAAE;QACX,YAAY;QACZ,oDAAoD;QACpD,8CAA8C;QAC9C,UAAU,CAAC,IAAI;QACf;;;;;;WAMG;QACH,sBAAsB,EACtB,SAAS,CACV,GACD,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwC;IAC9F,OAAO,CACL,gBACM,KAAK,EACT,SAAS,EAAE,EAAE;QACX,YAAY;QACZ,mDAAmD;QACnD,qBAAqB;QACrB,iBAAiB;QACjB,6EAA6E;QAC7E,aAAa,EACb,SAAS,CACV,GACD,CACH,CAAA;AACH,CAAC","sourcesContent":["import React from 'react'\nimport { cn, useUI } from '@wildo-ai/saas-frontend-lib'\nimport { FrontendComponentType, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models'\n\nexport function DescriptionList({ className, ...props }: React.ComponentPropsWithoutRef<'dl'>): React.JSX.Element {\n const { getRecipe } = useUI()\n const recipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.BODY)\n\n return (\n <dl\n {...props}\n className={cn(\n // Structure\n 'grid grid-cols-1 sm:grid-cols-[min(50%,--spacing(80))_auto]',\n // Style from TYPOGRAPHY.BODY recipe\n recipe.base,\n className\n )}\n />\n )\n}\n\nexport function DescriptionTerm({ className, ...props }: React.ComponentPropsWithoutRef<'dt'>): React.JSX.Element {\n const { getRecipe } = useUI()\n const descRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION)\n\n return (\n <dt\n {...props}\n className={cn(\n // Structure\n 'col-start-1 pt-group first:border-none sm:py-group',\n // Style — term uses description color (muted)\n descRecipe.base,\n /*\n * A plain `border-t`, NOT the divider recipe. The DIVIDER recipe's base is a background\n * FILL (`bg-border` and per-theme variants) for elements that ARE the line — Separator, menu\n * rules. Composed onto a whole `<dt>` it painted every term cell as a filled gray box, which\n * is what the \"default field view\" looked like until 2026-09-01. The hairline's color comes\n * from the design system's base rule (`* { border-color: var(--border) }`).\n */\n 'border-t sm:border-t',\n className\n )}\n />\n )\n}\n\nexport function DescriptionDetails({ className, ...props }: React.ComponentPropsWithoutRef<'dd'>): React.JSX.Element {\n return (\n <dd\n {...props}\n className={cn(\n // Structure\n 'pt-item pb-group sm:py-group sm:nth-2:border-none',\n // Style — value text\n 'text-foreground',\n // Same rule as DescriptionTerm: a hairline, never the divider recipe's FILL.\n 'sm:border-t',\n className\n )}\n />\n )\n}\n"]}
1
+ {"version":3,"file":"description-list.js","sourceRoot":"","sources":["../../../../../src/components/data-display/description-list.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEvD,OAAO,EAAE,qBAAqB,EAAyB,iBAAiB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAEjI;;;;;;GAMG;AACH,MAAM,gBAAgB,GAA0C;IAC9D,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,6DAA6D;IAC3F,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,kFAAkF;CACtH,CAAA;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,KAAK,EAAwB;IAChH,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAEvE,OAAO,CACL,4BACe,MAAM,KACf,KAAK,EACT,SAAS,EAAE,EAAE;QACX,YAAY;QACZ,gBAAgB,CAAC,MAAM,CAAC;QACxB,oCAAoC;QACpC,MAAM,CAAC,IAAI,EACX,SAAS,CACV,GACD,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwC;IAC3F,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAA;IAC7B,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAElF,OAAO,CACL,gBACM,KAAK,EACT,SAAS,EAAE,EAAE;QACX,YAAY;QACZ,oDAAoD;QACpD,8CAA8C;QAC9C,UAAU,CAAC,IAAI;QACf;;;;;;WAMG;QACH,sBAAsB;QACtB,+FAA+F;QAC/F,oLAAoL,EACpL,SAAS,CACV,GACD,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwC;IAC9F,OAAO,CACL,gBACM,KAAK,EACT,SAAS,EAAE,EAAE;QACX,YAAY;QACZ,mDAAmD;QACnD,iGAAiG;QACjG,+FAA+F;QAC/F,8BAA8B;QAC9B,6EAA6E;QAC7E,aAAa;QACb,0EAA0E;QAC1E,uNAAuN,EACvN,SAAS,CACV,GACD,CACH,CAAA;AACH,CAAC","sourcesContent":["import React from 'react'\nimport { cn, useUI } from '@wildo-ai/saas-frontend-lib'\nimport type { DescriptionListProps } from '@wildo-ai/saas-frontend-lib'\nimport { DescriptionListLayout, FrontendComponentType, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models'\n\n/**\n * The two LAYOUTS (#1322). The list stamps `data-layout` and the term/detail cells read it through\n * the `in-data-[layout=…]` variant, so a pair needs no prop of its own and a list nested in another\n * follows the nearest `dl`. KEY_VALUE: a fixed narrow term column — `--spacing(32)` is 8rem, the\n * width the mock measured for a ref or a date beside its term — details wrapping beside it and\n * breaking long refs, no rules, tight row gaps.\n */\nconst LAYOUT_STRUCTURE: Record<DescriptionListLayout, string> = {\n [DescriptionListLayout.ROWS]: 'grid grid-cols-1 sm:grid-cols-[min(50%,--spacing(80))_auto]',\n [DescriptionListLayout.KEY_VALUE]: 'grid grid-cols-[minmax(0,--spacing(32))_minmax(0,1fr)] gap-x-field gap-y-item-xs',\n}\n\nexport function DescriptionList({ className, layout = DescriptionListLayout.ROWS, ...props }: DescriptionListProps): React.JSX.Element {\n const { getRecipe } = useUI()\n const recipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.BODY)\n\n return (\n <dl\n data-layout={layout}\n {...props}\n className={cn(\n // Structure\n LAYOUT_STRUCTURE[layout],\n // Style from TYPOGRAPHY.BODY recipe\n recipe.base,\n className\n )}\n />\n )\n}\n\nexport function DescriptionTerm({ className, ...props }: React.ComponentPropsWithoutRef<'dt'>): React.JSX.Element {\n const { getRecipe } = useUI()\n const descRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION)\n\n return (\n <dt\n {...props}\n className={cn(\n // Structure\n 'col-start-1 pt-group first:border-none sm:py-group',\n // Style — term uses description color (muted)\n descRecipe.base,\n /*\n * A plain `border-t`, NOT the divider recipe. The DIVIDER recipe's base is a background\n * FILL (`bg-border` and per-theme variants) for elements that ARE the line — Separator, menu\n * rules. Composed onto a whole `<dt>` it painted every term cell as a filled gray box, which\n * is what the \"default field view\" looked like until 2026-09-01. The hairline's color comes\n * from the design system's base rule (`* { border-color: var(--border) }`).\n */\n 'border-t sm:border-t',\n // KEY_VALUE: no rule, no row padding, the term breaks rather than overflows its narrow column.\n 'in-data-[layout=key-value]:border-t-0 in-data-[layout=key-value]:pt-0 in-data-[layout=key-value]:sm:py-0 in-data-[layout=key-value]:min-w-0 in-data-[layout=key-value]:break-words',\n className\n )}\n />\n )\n}\n\nexport function DescriptionDetails({ className, ...props }: React.ComponentPropsWithoutRef<'dd'>): React.JSX.Element {\n return (\n <dd\n {...props}\n className={cn(\n // Structure\n 'pt-item pb-group sm:py-group sm:nth-2:border-none',\n // Style — value text. `tabular-nums` (#1322): a column of details is where counts, durations and\n // timestamps line up, and the feature only touches digits, so it costs a prose detail nothing.\n 'text-foreground tabular-nums',\n // Same rule as DescriptionTerm: a hairline, never the divider recipe's FILL.\n 'sm:border-t',\n // KEY_VALUE: no rule, no row padding, a long ref wraps inside the column.\n 'in-data-[layout=key-value]:sm:border-t-0 in-data-[layout=key-value]:pt-0 in-data-[layout=key-value]:pb-0 in-data-[layout=key-value]:sm:py-0 in-data-[layout=key-value]:min-w-0 in-data-[layout=key-value]:break-words',\n className\n )}\n />\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"description-list.labels.d.ts","sourceRoot":"","sources":["../../../../src/components/data-display/description-list.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,gCAAgC,EAAE,mBAAmB,EAAO,CAAC;AAG1E,eAAO,MAAM,6BAA6B,EAAE,mBAAmB,EAAO,CAAC;AAGvE,eAAO,MAAM,6BAA6B,EAAE,mBAAmB,EAAO,CAAC"}
1
+ {"version":3,"file":"description-list.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/description-list.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,gCAAgC,EAAE,mBAAmB,EAAO,CAAC;AAG1E,eAAO,MAAM,6BAA6B,EAAE,mBAAmB,EAAO,CAAC;AAGvE,eAAO,MAAM,6BAA6B,EAAE,mBAAmB,EAAO,CAAC"}
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ import type { DurationProps } from "@wildo-ai/saas-frontend-lib";
3
+ /**
4
+ * DEFAULT preset for `LOW_LEVEL_DURATION`: the elapsed span between two instants, ticking while the
5
+ * second one is unknown.
6
+ *
7
+ * `tabular-nums` is not decoration. A ticking value whose digits are proportionally spaced shifts
8
+ * every element to its right once a second, which on a board full of them reads as the surface
9
+ * twitching. Tabular figures hold the column.
10
+ */
11
+ export declare function Duration({ since, until, size, variant, className, }: DurationProps): React.JSX.Element | null;
12
+ export declare namespace Duration {
13
+ var displayName: string;
14
+ }
15
+ //# sourceMappingURL=duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/duration.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEhE;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,IAAkB,EAClB,OAA2B,EAC3B,SAAS,GACV,EAAE,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAwC1C;yBA9Ce,QAAQ"}