@signalflare-ai/ui 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/CHANGELOG.md +154 -1
  2. package/ai/component-registry.json +208 -550
  3. package/ai/component-registry.md +3042 -3115
  4. package/ai/schemas.ts +504 -96
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts.map +1 -1
  7. package/dist/{ai-actions-BdUZI3Gk.js → ai-actions-CBfz5XEf.js} +4 -4
  8. package/dist/{ai-actions-BdUZI3Gk.js.map → ai-actions-CBfz5XEf.js.map} +1 -1
  9. package/dist/{ai-agent-card-BR2NIYhi.js → ai-agent-card-CByAUe0q.js} +3 -3
  10. package/dist/ai-agent-card-CByAUe0q.js.map +1 -0
  11. package/dist/{ai-approval-Ba7mrKba.js → ai-approval-Ci8N70a7.js} +4 -3
  12. package/dist/{ai-approval-Ba7mrKba.js.map → ai-approval-Ci8N70a7.js.map} +1 -1
  13. package/dist/{ai-code-block-CZtoL73R.js → ai-code-block-P9TJHvaC.js} +37 -39
  14. package/dist/ai-code-block-P9TJHvaC.js.map +1 -0
  15. package/dist/{ai-conversation-Cc7WlaBg.js → ai-conversation-Qslfdi1t.js} +28 -42
  16. package/dist/ai-conversation-Qslfdi1t.js.map +1 -0
  17. package/dist/{ai-info-banner-C7EWPBj7.js → ai-info-banner-B_9vtGK3.js} +3 -3
  18. package/dist/{ai-info-banner-C7EWPBj7.js.map → ai-info-banner-B_9vtGK3.js.map} +1 -1
  19. package/dist/{ai-message-Bp7L68U_.js → ai-message-Ci3gwM7G.js} +6 -6
  20. package/dist/{ai-message-Bp7L68U_.js.map → ai-message-Ci3gwM7G.js.map} +1 -1
  21. package/dist/{ai-mission-header-TiCJfTNt.js → ai-mission-header-CaBc19-t.js} +2 -2
  22. package/dist/{ai-mission-header-TiCJfTNt.js.map → ai-mission-header-CaBc19-t.js.map} +1 -1
  23. package/dist/{ai-part-group-DNb9I446.js → ai-part-group-Dx1Mr92B.js} +5 -4
  24. package/dist/ai-part-group-Dx1Mr92B.js.map +1 -0
  25. package/dist/{ai-prompt-input-BVvov_KF.js → ai-prompt-input-Bm4XoSj2.js} +19 -17
  26. package/dist/ai-prompt-input-Bm4XoSj2.js.map +1 -0
  27. package/dist/{ai-question-GPPMk7YM.js → ai-question-OyJovxGe.js} +4 -3
  28. package/dist/{ai-question-GPPMk7YM.js.map → ai-question-OyJovxGe.js.map} +1 -1
  29. package/dist/{ai-reasoning-_feFjk56.js → ai-reasoning-BLfBXx3F.js} +9 -5
  30. package/dist/ai-reasoning-BLfBXx3F.js.map +1 -0
  31. package/dist/{ai-response-CvjV3WhV.js → ai-response-hbVCZJmo.js} +2 -2
  32. package/dist/{ai-response-CvjV3WhV.js.map → ai-response-hbVCZJmo.js.map} +1 -1
  33. package/dist/{ai-shimmer-j6lKIrjj.js → ai-shimmer-BamNMNK3.js} +2 -2
  34. package/dist/{ai-shimmer-j6lKIrjj.js.map → ai-shimmer-BamNMNK3.js.map} +1 -1
  35. package/dist/{ai-status-badge-CSU_QOdz.js → ai-status-badge-BZLczdkI.js} +2 -2
  36. package/dist/{ai-status-badge-CSU_QOdz.js.map → ai-status-badge-BZLczdkI.js.map} +1 -1
  37. package/dist/{ai-streaming-text-IWW1BhvZ.js → ai-streaming-text-DgYu64UH.js} +1 -1
  38. package/dist/{ai-streaming-text-IWW1BhvZ.js.map → ai-streaming-text-DgYu64UH.js.map} +1 -1
  39. package/dist/{ai-subagent-JA4iIMW3.js → ai-subagent-p97AI1h9.js} +3 -3
  40. package/dist/{ai-subagent-JA4iIMW3.js.map → ai-subagent-p97AI1h9.js.map} +1 -1
  41. package/dist/{ai-suggestion-BdO6MBuH.js → ai-suggestion-Bj6vF7CT.js} +3 -3
  42. package/dist/{ai-suggestion-BdO6MBuH.js.map → ai-suggestion-Bj6vF7CT.js.map} +1 -1
  43. package/dist/{ai-task-list-DYw4R1FA.js → ai-task-list-C_UQYpk9.js} +6 -4
  44. package/dist/{ai-task-list-DYw4R1FA.js.map → ai-task-list-C_UQYpk9.js.map} +1 -1
  45. package/dist/{ai-timeline-C42tOUT8.js → ai-timeline-CePL1LOU.js} +3 -3
  46. package/dist/ai-timeline-CePL1LOU.js.map +1 -0
  47. package/dist/{ai-tool-03jOTwUI.js → ai-tool-CfRcwmHT.js} +17 -11
  48. package/dist/ai-tool-CfRcwmHT.js.map +1 -0
  49. package/dist/{ai-usage-bar-BRf5LC_b.js → ai-usage-bar-45pVRCGA.js} +2 -2
  50. package/dist/{ai-usage-bar-BRf5LC_b.js.map → ai-usage-bar-45pVRCGA.js.map} +1 -1
  51. package/dist/{badge-BheXjMc8.js → badge-Beb-6uut.js} +5 -5
  52. package/dist/{badge-BheXjMc8.js.map → badge-Beb-6uut.js.map} +1 -1
  53. package/dist/{banner-CcsjunJg.js → banner-CCEksxPg.js} +3 -3
  54. package/dist/{banner-CcsjunJg.js.map → banner-CCEksxPg.js.map} +1 -1
  55. package/dist/{breadcrumbs-CouSyy3H.js → breadcrumbs-HiTmgaZ4.js} +5 -5
  56. package/dist/{breadcrumbs-CouSyy3H.js.map → breadcrumbs-HiTmgaZ4.js.map} +1 -1
  57. package/dist/{button-CO6-qPax.js → button-BHOgXJRU.js} +4 -4
  58. package/dist/{button-CO6-qPax.js.map → button-BHOgXJRU.js.map} +1 -1
  59. package/dist/catalog.js +1 -1
  60. package/dist/catalog.js.map +1 -1
  61. package/dist/{chart-Dg0qUeSc.js → chart-B9FfZdKs.js} +7 -7
  62. package/dist/chart-B9FfZdKs.js.map +1 -0
  63. package/dist/{checkbox-D7p4QKsC.js → checkbox-Cy_OCyay.js} +3 -3
  64. package/dist/{checkbox-D7p4QKsC.js.map → checkbox-Cy_OCyay.js.map} +1 -1
  65. package/dist/{clipboard-text-kLaMogs3.js → clipboard-text-CKSvNp9L.js} +6 -5
  66. package/dist/clipboard-text-CKSvNp9L.js.map +1 -0
  67. package/dist/{cn-YROP2_ox.js → cn-CmAOpn49.js} +2 -2
  68. package/dist/{cn-YROP2_ox.js.map → cn-CmAOpn49.js.map} +1 -1
  69. package/dist/{code-BN8InC0G.js → code-JsQz-0G_.js} +4 -4
  70. package/dist/{code-BN8InC0G.js.map → code-JsQz-0G_.js.map} +1 -1
  71. package/dist/{collapsible-D_ueZ0jz.js → collapsible-1kOZ-89L.js} +2 -2
  72. package/dist/{collapsible-D_ueZ0jz.js.map → collapsible-1kOZ-89L.js.map} +1 -1
  73. package/dist/{combobox-B7TOK0U2.js → combobox-CQwDmqgA.js} +4 -4
  74. package/dist/{combobox-B7TOK0U2.js.map → combobox-CQwDmqgA.js.map} +1 -1
  75. package/dist/command-line/cli.js +3 -3
  76. package/dist/{command-palette-CuNUyJca.js → command-palette-Bkuv3e6o.js} +20 -5
  77. package/dist/command-palette-Bkuv3e6o.js.map +1 -0
  78. package/dist/components/ai-actions.js +1 -1
  79. package/dist/components/ai-agent-card.js +1 -1
  80. package/dist/components/ai-approval.js +1 -1
  81. package/dist/components/ai-code-block.js +1 -1
  82. package/dist/components/ai-conversation.js +1 -1
  83. package/dist/components/ai-info-banner.js +1 -1
  84. package/dist/components/ai-message.js +1 -1
  85. package/dist/components/ai-mission-header.js +1 -1
  86. package/dist/components/ai-part-group.js +1 -1
  87. package/dist/components/ai-prompt-input.js +1 -1
  88. package/dist/components/ai-question.js +1 -1
  89. package/dist/components/ai-reasoning.js +1 -1
  90. package/dist/components/ai-response.js +1 -1
  91. package/dist/components/ai-shimmer.js +1 -1
  92. package/dist/components/ai-status-badge.js +1 -1
  93. package/dist/components/ai-streaming-text.js +1 -1
  94. package/dist/components/ai-subagent.js +1 -1
  95. package/dist/components/ai-suggestion.js +1 -1
  96. package/dist/components/ai-task-list.js +1 -1
  97. package/dist/components/ai-timeline.js +1 -1
  98. package/dist/components/ai-tool.js +1 -1
  99. package/dist/components/ai-usage-bar.js +1 -1
  100. package/dist/components/badge.js +1 -1
  101. package/dist/components/banner.js +1 -1
  102. package/dist/components/breadcrumbs.js +1 -1
  103. package/dist/components/button.js +1 -1
  104. package/dist/components/chart.js +2 -2
  105. package/dist/components/checkbox.js +1 -1
  106. package/dist/components/clipboard-text.js +1 -1
  107. package/dist/components/code.js +1 -1
  108. package/dist/components/collapsible.js +1 -1
  109. package/dist/components/combobox.js +1 -1
  110. package/dist/components/command-palette.js +1 -1
  111. package/dist/components/data-grid.js +1 -1
  112. package/dist/components/date-picker.js +1 -1
  113. package/dist/components/date-range-picker.js +1 -1
  114. package/dist/components/dialog.js +1 -1
  115. package/dist/components/dropdown.js +1 -1
  116. package/dist/components/empty.js +1 -1
  117. package/dist/components/field.js +1 -1
  118. package/dist/components/filters.js +1 -1
  119. package/dist/components/flow.js +1 -1
  120. package/dist/components/grid.js +1 -1
  121. package/dist/components/input.js +2 -2
  122. package/dist/components/label.js +1 -1
  123. package/dist/components/layer-card.js +1 -1
  124. package/dist/components/link.js +3 -3
  125. package/dist/components/link.js.map +1 -1
  126. package/dist/components/loader.js +2 -2
  127. package/dist/components/menubar.js +1 -1
  128. package/dist/components/meter.js +1 -1
  129. package/dist/components/pagination.js +1 -1
  130. package/dist/components/popover.js +1 -1
  131. package/dist/components/radio.js +1 -1
  132. package/dist/components/select.js +1 -1
  133. package/dist/components/sensitive-input.js +1 -1
  134. package/dist/components/sidebar.js +1 -1
  135. package/dist/components/signalflare-ai-logo.js +1 -1
  136. package/dist/components/sparkline.js +1 -1
  137. package/dist/components/stat-card.js +1 -1
  138. package/dist/components/surface.js +1 -1
  139. package/dist/components/switch.js +1 -1
  140. package/dist/components/table.js +1 -1
  141. package/dist/components/tabs.js +1 -1
  142. package/dist/components/text-roll.js +1 -1
  143. package/dist/components/text.js +1 -1
  144. package/dist/components/theme-toggle.js +1 -1
  145. package/dist/components/toast.js +1 -1
  146. package/dist/components/tooltip.js +1 -1
  147. package/dist/components/use-agent-harness.js +1 -1
  148. package/dist/data-grid-DrguJq_H.js +395 -0
  149. package/dist/data-grid-DrguJq_H.js.map +1 -0
  150. package/dist/{date-picker--ox89RBy.js → date-picker-O34AqG3f.js} +2 -2
  151. package/dist/{date-picker--ox89RBy.js.map → date-picker-O34AqG3f.js.map} +1 -1
  152. package/dist/{date-range-picker-DVa7QBqE.js → date-range-picker-YKYvum_r.js} +29 -39
  153. package/dist/{date-range-picker-DVa7QBqE.js.map → date-range-picker-YKYvum_r.js.map} +1 -1
  154. package/dist/{dialog-Bv1oSFOd.js → dialog-DYqu4aDO.js} +3 -3
  155. package/dist/{dialog-Bv1oSFOd.js.map → dialog-DYqu4aDO.js.map} +1 -1
  156. package/dist/{dist-B6iWiWwp.js → dist-6AtBsaJE.js} +153 -47
  157. package/dist/dist-6AtBsaJE.js.map +1 -0
  158. package/dist/{dropdown-B_nrGXjV.js → dropdown-XzbnRLYR.js} +15 -5
  159. package/dist/dropdown-XzbnRLYR.js.map +1 -0
  160. package/dist/{echart-CdOUaT-r.js → echart-DGBIVAv1.js} +23 -57
  161. package/dist/{echart-CdOUaT-r.js.map → echart-DGBIVAv1.js.map} +1 -1
  162. package/dist/{empty-DZnN0zKX.js → empty-C1tAkawe.js} +6 -6
  163. package/dist/{empty-DZnN0zKX.js.map → empty-C1tAkawe.js.map} +1 -1
  164. package/dist/{field-B_yVof52.js → field-DBpFzzBS.js} +3 -3
  165. package/dist/{field-B_yVof52.js.map → field-DBpFzzBS.js.map} +1 -1
  166. package/dist/{filters-cpJCY21R.js → filters-SmEl93za.js} +10 -10
  167. package/dist/filters-SmEl93za.js.map +1 -0
  168. package/dist/{flow-B4v198ot.js → flow-BLzgbq1T.js} +6 -6
  169. package/dist/flow-BLzgbq1T.js.map +1 -0
  170. package/dist/genui.js +2 -2
  171. package/dist/genui.js.map +1 -1
  172. package/dist/{grid-CEd64Lnh.js → grid-CifjQL-5.js} +2 -2
  173. package/dist/{grid-CEd64Lnh.js.map → grid-CifjQL-5.js.map} +1 -1
  174. package/dist/{highlight-to-react-D0Yav4jk.js → highlight-to-react-DN9dUCS2.js} +9 -15
  175. package/dist/highlight-to-react-DN9dUCS2.js.map +1 -0
  176. package/dist/index.js +71 -71
  177. package/dist/index.js.map +1 -1
  178. package/dist/{input-ClB_E4Lb.js → input-COmx2M_R.js} +5 -5
  179. package/dist/{input-ClB_E4Lb.js.map → input-COmx2M_R.js.map} +1 -1
  180. package/dist/{input-B2bbijRh.js → input-GkfMQZC_.js} +3 -3
  181. package/dist/{input-B2bbijRh.js.map → input-GkfMQZC_.js.map} +1 -1
  182. package/dist/{label-DUv_urO1.js → label-CiGZ464N.js} +3 -3
  183. package/dist/{label-DUv_urO1.js.map → label-CiGZ464N.js.map} +1 -1
  184. package/dist/{layer-card-BK7eYfwn.js → layer-card-8l8GuLQr.js} +2 -2
  185. package/dist/{layer-card-BK7eYfwn.js.map → layer-card-8l8GuLQr.js.map} +1 -1
  186. package/dist/{layout-DJHMMap2.js → layout-CWBE0qwx.js} +258 -154
  187. package/dist/layout-CWBE0qwx.js.map +1 -0
  188. package/dist/{link-provider-BUZKXaNE.js → link-provider-BSn8YJon.js} +2 -2
  189. package/dist/link-provider-BSn8YJon.js.map +1 -0
  190. package/dist/{loader-DAcc-Uag.js → loader-BEMz8pJO.js} +1 -1
  191. package/dist/{loader-DAcc-Uag.js.map → loader-BEMz8pJO.js.map} +1 -1
  192. package/dist/{measured-text-BI3dTJmH.js → measured-text-CXkdw9Yr.js} +45 -30
  193. package/dist/measured-text-CXkdw9Yr.js.map +1 -0
  194. package/dist/{menubar-Cxf3xeAt.js → menubar-CoOr4ocj.js} +3 -3
  195. package/dist/{menubar-Cxf3xeAt.js.map → menubar-CoOr4ocj.js.map} +1 -1
  196. package/dist/{meter-BFFe9l5b.js → meter-Pf_VOl59.js} +2 -2
  197. package/dist/{meter-BFFe9l5b.js.map → meter-Pf_VOl59.js.map} +1 -1
  198. package/dist/{pagination-yS372Tr4.js → pagination-DSY279Ta.js} +2 -2
  199. package/dist/{pagination-yS372Tr4.js.map → pagination-DSY279Ta.js.map} +1 -1
  200. package/dist/{popover-SRoJaCZr.js → popover-BY-e9co1.js} +2 -2
  201. package/dist/{popover-SRoJaCZr.js.map → popover-BY-e9co1.js.map} +1 -1
  202. package/dist/{radio-BcwhwYNB.js → radio-DZwL13j0.js} +2 -2
  203. package/dist/{radio-BcwhwYNB.js.map → radio-DZwL13j0.js.map} +1 -1
  204. package/dist/{select-DMhdoHMa.js → select-BFifYqHA.js} +6 -6
  205. package/dist/{select-DMhdoHMa.js.map → select-BFifYqHA.js.map} +1 -1
  206. package/dist/{sensitive-input-CJUpIRal.js → sensitive-input-DHLZcM73.js} +4 -4
  207. package/dist/{sensitive-input-CJUpIRal.js.map → sensitive-input-DHLZcM73.js.map} +1 -1
  208. package/dist/{sidebar-D4zrlYpn.js → sidebar-odGsdvG4.js} +6 -7
  209. package/dist/sidebar-odGsdvG4.js.map +1 -0
  210. package/dist/{signalflare-ai-logo-Bipogceq.js → signalflare-ai-logo-CNaDT_w8.js} +2 -2
  211. package/dist/{signalflare-ai-logo-Bipogceq.js.map → signalflare-ai-logo-CNaDT_w8.js.map} +1 -1
  212. package/dist/{skeleton-line-CH1-h6e2.js → skeleton-line-CxxYVTO2.js} +2 -2
  213. package/dist/{skeleton-line-CH1-h6e2.js.map → skeleton-line-CxxYVTO2.js.map} +1 -1
  214. package/dist/{sparkline-DHmgj1d0.js → sparkline-BQ-4j2W2.js} +2 -2
  215. package/dist/{sparkline-DHmgj1d0.js.map → sparkline-BQ-4j2W2.js.map} +1 -1
  216. package/dist/src/blocks/agent-harness/agent-harness.tsx +11 -11
  217. package/dist/src/blocks/commander/commander.tsx +15 -15
  218. package/dist/src/blocks/map-block/map-block.d.ts.map +1 -1
  219. package/dist/src/blocks/map-block/map-block.tsx +11 -7
  220. package/dist/src/components/ai-approval/ai-approval.d.ts.map +1 -1
  221. package/dist/src/components/ai-code-block/ai-code-block.d.ts +14 -13
  222. package/dist/src/components/ai-code-block/ai-code-block.d.ts.map +1 -1
  223. package/dist/src/components/ai-conversation/ai-conversation.d.ts.map +1 -1
  224. package/dist/src/components/ai-part-group/ai-part-group.d.ts.map +1 -1
  225. package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  226. package/dist/src/components/ai-prompt-input/controller.d.ts.map +1 -1
  227. package/dist/src/components/ai-prompt-input/types.d.ts.map +1 -1
  228. package/dist/src/components/ai-question/ai-question.d.ts.map +1 -1
  229. package/dist/src/components/ai-reasoning/ai-reasoning.d.ts.map +1 -1
  230. package/dist/src/components/ai-response/ai-response.d.ts.map +1 -1
  231. package/dist/src/components/ai-subagent/ai-subagent.d.ts.map +1 -1
  232. package/dist/src/components/ai-tool/ai-tool.d.ts.map +1 -1
  233. package/dist/src/components/chart/echart.d.ts.map +1 -1
  234. package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -1
  235. package/dist/src/components/data-grid/data-grid.d.ts +2 -1
  236. package/dist/src/components/data-grid/data-grid.d.ts.map +1 -1
  237. package/dist/src/components/data-grid/features.d.ts +20 -0
  238. package/dist/src/components/data-grid/features.d.ts.map +1 -0
  239. package/dist/src/components/data-grid/types.d.ts +38 -7
  240. package/dist/src/components/data-grid/types.d.ts.map +1 -1
  241. package/dist/src/components/filters/filters.d.ts.map +1 -1
  242. package/dist/src/components/flow/use-children.d.ts +1 -1
  243. package/dist/src/components/link/link.d.ts.map +1 -1
  244. package/dist/src/components/sidebar/sidebar.d.ts +1 -1
  245. package/dist/src/components/signalflare-ai-logo/signalflare-ai-logo.d.ts.map +1 -1
  246. package/dist/src/components/text/text.d.ts +2 -1
  247. package/dist/src/components/text/text.d.ts.map +1 -1
  248. package/dist/src/components/text-roll/text-roll.d.ts.map +1 -1
  249. package/dist/src/components/theme-toggle/theme-toggle.d.ts.map +1 -1
  250. package/dist/src/components/toast/toast.d.ts.map +1 -1
  251. package/dist/src/utils/highlight-to-react.d.ts.map +1 -1
  252. package/dist/src/utils/measured-text.d.ts.map +1 -1
  253. package/dist/src/utils/use-measured-text.d.ts.map +1 -1
  254. package/dist/{stat-card-Ew-ofzEm.js → stat-card-Bspk4XFr.js} +4 -4
  255. package/dist/stat-card-Bspk4XFr.js.map +1 -0
  256. package/dist/styles/sf-standalone.css +1 -1
  257. package/dist/styles/theme-fedramp.css +3 -12
  258. package/dist/styles/theme-minimal.css +26 -104
  259. package/dist/styles/theme-sf.css +37 -142
  260. package/dist/{surface-DGwRlC0o.js → surface-CWdSFVUx.js} +3 -3
  261. package/dist/{surface-DGwRlC0o.js.map → surface-CWdSFVUx.js.map} +1 -1
  262. package/dist/{switch-BxAMfHdt.js → switch-TA4cByCJ.js} +5 -5
  263. package/dist/switch-TA4cByCJ.js.map +1 -0
  264. package/dist/{table-BBeAtYVZ.js → table-BM8JBGBs.js} +3 -3
  265. package/dist/{table-BBeAtYVZ.js.map → table-BM8JBGBs.js.map} +1 -1
  266. package/dist/{tabs-CeHu7Scn.js → tabs-bnH2vGLv.js} +2 -2
  267. package/dist/{tabs-CeHu7Scn.js.map → tabs-bnH2vGLv.js.map} +1 -1
  268. package/dist/{text-Cqryz7rk.js → text-iQ0YUFNg.js} +4 -5
  269. package/dist/{text-Cqryz7rk.js.map → text-iQ0YUFNg.js.map} +1 -1
  270. package/dist/{text-roll-Ch52hcQj.js → text-roll-C3U2jd2u.js} +5 -2
  271. package/dist/text-roll-C3U2jd2u.js.map +1 -0
  272. package/dist/{theme-toggle-LDfIKEqx.js → theme-toggle-BTVxD-fD.js} +10 -9
  273. package/dist/theme-toggle-BTVxD-fD.js.map +1 -0
  274. package/dist/{toast-CaFQNYng.js → toast-CgZVaAkw.js} +3 -3
  275. package/dist/{toast-CaFQNYng.js.map → toast-CgZVaAkw.js.map} +1 -1
  276. package/dist/{tooltip-g9lFsvcT.js → tooltip-uobk6Oh-.js} +3 -3
  277. package/dist/{tooltip-g9lFsvcT.js.map → tooltip-uobk6Oh-.js.map} +1 -1
  278. package/dist/{use-agent-harness-BTcNJdw4.js → use-agent-harness-Dl8w6X5O.js} +3 -3
  279. package/dist/{use-agent-harness-BTcNJdw4.js.map → use-agent-harness-Dl8w6X5O.js.map} +1 -1
  280. package/dist/utils.js +3 -3
  281. package/package.json +27 -25
  282. package/scripts/component-registry/discovery.ts +11 -10
  283. package/scripts/component-registry/example-cleanup.ts +8 -8
  284. package/scripts/component-registry/index.ts +6 -6
  285. package/scripts/component-registry/schema-generator.ts +1 -1
  286. package/scripts/component-registry/sub-components.ts +35 -23
  287. package/scripts/component-registry/utils.ts +11 -11
  288. package/scripts/component-registry/variant-parser.ts +17 -15
  289. package/scripts/convert-demos-to-stories.ts +5 -5
  290. package/scripts/theme-generator/config.ts +1 -5
  291. package/scripts/theme-generator/generate-css.ts +1 -1
  292. package/scripts/theme-generator/migrate.ts +3 -3
  293. package/dist/ai-agent-card-BR2NIYhi.js.map +0 -1
  294. package/dist/ai-code-block-CZtoL73R.js.map +0 -1
  295. package/dist/ai-conversation-Cc7WlaBg.js.map +0 -1
  296. package/dist/ai-part-group-DNb9I446.js.map +0 -1
  297. package/dist/ai-prompt-input-BVvov_KF.js.map +0 -1
  298. package/dist/ai-reasoning-_feFjk56.js.map +0 -1
  299. package/dist/ai-timeline-C42tOUT8.js.map +0 -1
  300. package/dist/ai-tool-03jOTwUI.js.map +0 -1
  301. package/dist/chart-Dg0qUeSc.js.map +0 -1
  302. package/dist/clipboard-text-kLaMogs3.js.map +0 -1
  303. package/dist/command-palette-CuNUyJca.js.map +0 -1
  304. package/dist/data-grid-DGHmU0w3.js +0 -305
  305. package/dist/data-grid-DGHmU0w3.js.map +0 -1
  306. package/dist/dist-B6iWiWwp.js.map +0 -1
  307. package/dist/dropdown-B_nrGXjV.js.map +0 -1
  308. package/dist/filters-cpJCY21R.js.map +0 -1
  309. package/dist/flow-B4v198ot.js.map +0 -1
  310. package/dist/highlight-to-react-D0Yav4jk.js.map +0 -1
  311. package/dist/layout-DJHMMap2.js.map +0 -1
  312. package/dist/link-provider-BUZKXaNE.js.map +0 -1
  313. package/dist/measured-text-BI3dTJmH.js.map +0 -1
  314. package/dist/sidebar-D4zrlYpn.js.map +0 -1
  315. package/dist/stat-card-Ew-ofzEm.js.map +0 -1
  316. package/dist/switch-BxAMfHdt.js.map +0 -1
  317. package/dist/text-roll-Ch52hcQj.js.map +0 -1
  318. package/dist/theme-toggle-LDfIKEqx.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- //#region ../../node_modules/.bun/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/generated/bidi-data.js
2
+ //#region ../../node_modules/.bun/@chenglou+pretext@0.0.7/node_modules/@chenglou/pretext/dist/generated/bidi-data.js
3
3
  var latin1BidiTypes = [
4
4
  "BN",
5
5
  "BN",
@@ -3831,7 +3831,7 @@ var nonLatin1BidiRanges = [
3831
3831
  ]
3832
3832
  ];
3833
3833
  //#endregion
3834
- //#region ../../node_modules/.bun/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/bidi.js
3834
+ //#region ../../node_modules/.bun/@chenglou+pretext@0.0.7/node_modules/@chenglou/pretext/dist/bidi.js
3835
3835
  function classifyCodePoint(codePoint) {
3836
3836
  if (codePoint <= 255) return latin1BidiTypes[codePoint];
3837
3837
  let lo = 0;
@@ -3947,7 +3947,7 @@ function computeSegmentLevels(normalized, segStarts) {
3947
3947
  return segLevels;
3948
3948
  }
3949
3949
  //#endregion
3950
- //#region ../../node_modules/.bun/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/analysis.js
3950
+ //#region ../../node_modules/.bun/@chenglou+pretext@0.0.7/node_modules/@chenglou/pretext/dist/analysis.js
3951
3951
  var collapsibleWhitespaceRunRe = /[ \t\n\r\f]+/g;
3952
3952
  var needsWhitespaceNormalizationRe = /[\t\n\r\f]| {2,}|^ | $/;
3953
3953
  function getWhiteSpaceProfile(whiteSpace) {
@@ -4014,15 +4014,26 @@ var keepAllGlueChars = new Set([
4014
4014
  "⁠",
4015
4015
  ""
4016
4016
  ]);
4017
- function containsCJKText(text) {
4018
- return isCJK(text);
4019
- }
4017
+ var keepAllDashBreakChars = new Set([
4018
+ "-",
4019
+ "‐",
4020
+ "–",
4021
+ "—"
4022
+ ]);
4020
4023
  function endsWithKeepAllGlueText(text) {
4021
4024
  const last = getLastCodePoint(text);
4022
4025
  return last !== null && keepAllGlueChars.has(last);
4023
4026
  }
4024
- function canContinueKeepAllTextRun(previousText) {
4025
- return !endsWithLineStartProhibitedText(previousText) && !endsWithKeepAllGlueText(previousText);
4027
+ function endsWithKeepAllDashBreakText(text) {
4028
+ const last = getLastCodePoint(text);
4029
+ return last !== null && keepAllDashBreakChars.has(last);
4030
+ }
4031
+ function canContinueKeepAllTextRun(previousText, breakAfterPunctuation) {
4032
+ if (endsWithKeepAllGlueText(previousText)) return false;
4033
+ if (!breakAfterPunctuation) return true;
4034
+ if (endsWithLineStartProhibitedText(previousText)) return false;
4035
+ if (endsWithKeepAllDashBreakText(previousText)) return false;
4036
+ return true;
4026
4037
  }
4027
4038
  var kinsokuStart = new Set([
4028
4039
  ",",
@@ -4057,10 +4068,15 @@ var kinsokuEnd = new Set([
4057
4068
  "(",
4058
4069
  "[",
4059
4070
  "{",
4071
+ "¡",
4072
+ "¿",
4060
4073
  "“",
4061
4074
  "‘",
4075
+ "‚",
4076
+ "„",
4062
4077
  "«",
4063
4078
  "‹",
4079
+ "⸘",
4064
4080
  "(",
4065
4081
  "〔",
4066
4082
  "〈",
@@ -4125,7 +4141,7 @@ function isLeftStickyPunctuationSegment(segment) {
4125
4141
  if (isEscapedQuoteClusterSegment(segment)) return true;
4126
4142
  let sawPunctuation = false;
4127
4143
  for (const ch of segment) {
4128
- if (leftStickyPunctuation.has(ch)) {
4144
+ if (leftStickyPunctuation.has(ch) || isLineBreakNumericAffix(ch)) {
4129
4145
  sawPunctuation = true;
4130
4146
  continue;
4131
4147
  }
@@ -4140,7 +4156,7 @@ function isCJKLineStartProhibitedSegment(segment) {
4140
4156
  }
4141
4157
  function isForwardStickyClusterSegment(segment) {
4142
4158
  if (isEscapedQuoteClusterSegment(segment)) return true;
4143
- for (const ch of segment) if (!kinsokuEnd.has(ch) && !forwardStickyGlue.has(ch) && !combiningMarkRe.test(ch)) return false;
4159
+ for (const ch of segment) if (!kinsokuEnd.has(ch) && !forwardStickyGlue.has(ch) && !combiningMarkRe.test(ch) && !isLineBreakNumericAffix(ch)) return false;
4144
4160
  return segment.length > 0;
4145
4161
  }
4146
4162
  function isEscapedQuoteClusterSegment(segment) {
@@ -4170,6 +4186,103 @@ function getLastCodePoint(text) {
4170
4186
  const start = previousCodePointStart(text, text.length);
4171
4187
  return text.slice(start);
4172
4188
  }
4189
+ function getFirstSignificantCodePoint(text) {
4190
+ for (const ch of text) if (!combiningMarkRe.test(ch)) return ch;
4191
+ return null;
4192
+ }
4193
+ function getLastSignificantCodePoint(text) {
4194
+ for (let end = text.length; end > 0;) {
4195
+ const start = previousCodePointStart(text, end);
4196
+ const ch = text.slice(start, end);
4197
+ if (!combiningMarkRe.test(ch)) return ch;
4198
+ end = start;
4199
+ }
4200
+ return null;
4201
+ }
4202
+ var lineBreakNumericAffixRanges = [
4203
+ 36,
4204
+ 37,
4205
+ 43,
4206
+ 43,
4207
+ 92,
4208
+ 92,
4209
+ 162,
4210
+ 165,
4211
+ 176,
4212
+ 177,
4213
+ 1423,
4214
+ 1423,
4215
+ 1545,
4216
+ 1547,
4217
+ 1642,
4218
+ 1642,
4219
+ 2046,
4220
+ 2047,
4221
+ 2546,
4222
+ 2547,
4223
+ 2553,
4224
+ 2555,
4225
+ 2801,
4226
+ 2801,
4227
+ 3065,
4228
+ 3065,
4229
+ 3449,
4230
+ 3449,
4231
+ 3647,
4232
+ 3647,
4233
+ 6107,
4234
+ 6107,
4235
+ 8240,
4236
+ 8247,
4237
+ 8279,
4238
+ 8279,
4239
+ 8352,
4240
+ 8399,
4241
+ 8451,
4242
+ 8451,
4243
+ 8457,
4244
+ 8457,
4245
+ 8470,
4246
+ 8470,
4247
+ 8722,
4248
+ 8723,
4249
+ 43064,
4250
+ 43064,
4251
+ 65020,
4252
+ 65020,
4253
+ 65129,
4254
+ 65130,
4255
+ 65284,
4256
+ 65285,
4257
+ 65504,
4258
+ 65505,
4259
+ 65509,
4260
+ 65510,
4261
+ 73693,
4262
+ 73696,
4263
+ 123647,
4264
+ 123647,
4265
+ 126124,
4266
+ 126124,
4267
+ 126128,
4268
+ 126128
4269
+ ];
4270
+ function isCodePointInRanges(codePoint, ranges) {
4271
+ for (let i = 0; i < ranges.length; i += 2) if (codePoint >= ranges[i] && codePoint <= ranges[i + 1]) return true;
4272
+ return false;
4273
+ }
4274
+ function isLineBreakNumericAffix(ch) {
4275
+ const codePoint = ch.codePointAt(0);
4276
+ return codePoint !== void 0 && isCodePointInRanges(codePoint, lineBreakNumericAffixRanges);
4277
+ }
4278
+ function endsWithLineBreakNumericAffix(text) {
4279
+ const last = getLastSignificantCodePoint(text);
4280
+ return last !== null && isLineBreakNumericAffix(last);
4281
+ }
4282
+ function startsWithDecimalDigit(text) {
4283
+ const first = getFirstSignificantCodePoint(text);
4284
+ return first !== null && decimalDigitRe.test(first);
4285
+ }
4173
4286
  function splitTrailingForwardStickyCluster(text) {
4174
4287
  const chars = Array.from(text);
4175
4288
  let splitIndex = chars.length;
@@ -4398,8 +4511,27 @@ var numericJoinerChars = new Set([
4398
4511
  "–",
4399
4512
  "—"
4400
4513
  ]);
4401
- var asciiPunctuationChainSegmentRe = /^[A-Za-z0-9_]+[,:;]*$/;
4402
- var asciiPunctuationChainTrailingJoinersRe = /[,:;]+$/;
4514
+ var noSpacePunctuationChainJoiners = new Set([
4515
+ ".",
4516
+ ",",
4517
+ ":",
4518
+ ";"
4519
+ ]);
4520
+ function endsWithNoSpacePunctuationChainJoiner(text) {
4521
+ for (let end = text.length; end > 0;) {
4522
+ const start = previousCodePointStart(text, end);
4523
+ const ch = text.slice(start, end);
4524
+ if (combiningMarkRe.test(ch)) {
4525
+ end = start;
4526
+ continue;
4527
+ }
4528
+ return noSpacePunctuationChainJoiners.has(ch) || isLineBreakNumericAffix(ch);
4529
+ }
4530
+ return false;
4531
+ }
4532
+ function isNoSpacePunctuationChainSegment(text, wordLike) {
4533
+ return wordLike && !isCJK(text);
4534
+ }
4403
4535
  function segmentContainsDecimalDigit(text) {
4404
4536
  for (const ch of text) if (decimalDigitRe.test(ch)) return true;
4405
4537
  return false;
@@ -4447,7 +4579,7 @@ function mergeNumericRuns(segmentation) {
4447
4579
  starts
4448
4580
  };
4449
4581
  }
4450
- function mergeAsciiPunctuationChains(segmentation) {
4582
+ function mergeNoSpacePunctuationChains(segmentation) {
4451
4583
  const texts = [];
4452
4584
  const isWordLike = [];
4453
4585
  const kinds = [];
@@ -4456,14 +4588,14 @@ function mergeAsciiPunctuationChains(segmentation) {
4456
4588
  const text = segmentation.texts[i];
4457
4589
  const kind = segmentation.kinds[i];
4458
4590
  const wordLike = segmentation.isWordLike[i];
4459
- if (kind === "text" && wordLike && asciiPunctuationChainSegmentRe.test(text)) {
4591
+ if (kind === "text" && endsWithNoSpacePunctuationChainJoiner(text) && (wordLike || endsWithLineBreakNumericAffix(text)) && !isCJK(text)) {
4460
4592
  const mergedParts = [text];
4461
- let endsWithJoiners = asciiPunctuationChainTrailingJoinersRe.test(text);
4593
+ let endsWithJoiners = true;
4462
4594
  let j = i + 1;
4463
- while (endsWithJoiners && j < segmentation.len && segmentation.kinds[j] === "text" && segmentation.isWordLike[j] && asciiPunctuationChainSegmentRe.test(segmentation.texts[j])) {
4595
+ while (endsWithJoiners && j < segmentation.len && segmentation.kinds[j] === "text" && isNoSpacePunctuationChainSegment(segmentation.texts[j], segmentation.isWordLike[j])) {
4464
4596
  const nextText = segmentation.texts[j];
4465
4597
  mergedParts.push(nextText);
4466
- endsWithJoiners = asciiPunctuationChainTrailingJoinersRe.test(nextText);
4598
+ endsWithJoiners = endsWithNoSpacePunctuationChainJoiner(nextText);
4467
4599
  j++;
4468
4600
  }
4469
4601
  texts.push(joinTextParts(mergedParts));
@@ -4691,7 +4823,7 @@ function buildMergedSegmentation(normalized, profile, whiteSpaceProfile) {
4691
4823
  for (let i = mergedLen - 1; i >= 0; i--) {
4692
4824
  const text = mergedTexts[i];
4693
4825
  if (text.length === 0) continue;
4694
- if (mergedKinds[i] === "text" && !mergedWordLike[i] && isForwardStickyClusterSegment(text) && nextLiveIndex >= 0 && mergedKinds[nextLiveIndex] === "text") {
4826
+ if (mergedKinds[i] === "text" && !mergedWordLike[i] && nextLiveIndex >= 0 && mergedKinds[nextLiveIndex] === "text" && (isForwardStickyClusterSegment(text) || text === "-" && startsWithDecimalDigit(mergedTexts[nextLiveIndex]))) {
4695
4827
  const prefixParts = forwardStickyPrefixParts[nextLiveIndex] ?? [];
4696
4828
  prefixParts.push(text);
4697
4829
  forwardStickyPrefixParts[nextLiveIndex] = prefixParts;
@@ -4722,7 +4854,7 @@ function buildMergedSegmentation(normalized, profile, whiteSpaceProfile) {
4722
4854
  mergedWordLike.length = compactLen;
4723
4855
  mergedKinds.length = compactLen;
4724
4856
  mergedStarts.length = compactLen;
4725
- const withMergedUrls = carryTrailingForwardStickyAcrossCJKBoundary(mergeAsciiPunctuationChains(splitHyphenatedNumericRuns(mergeNumericRuns(mergeUrlQueryRuns(mergeUrlLikeRuns(mergeGlueConnectedTextRuns({
4857
+ const withMergedUrls = carryTrailingForwardStickyAcrossCJKBoundary(mergeNoSpacePunctuationChains(splitHyphenatedNumericRuns(mergeNumericRuns(mergeUrlQueryRuns(mergeUrlLikeRuns(mergeGlueConnectedTextRuns({
4726
4858
  len: compactLen,
4727
4859
  texts: mergedTexts,
4728
4860
  isWordLike: mergedWordLike,
@@ -4766,55 +4898,54 @@ function compileAnalysisChunks(segmentation, whiteSpaceProfile) {
4766
4898
  });
4767
4899
  return chunks;
4768
4900
  }
4769
- function mergeKeepAllTextSegments(segmentation) {
4901
+ function mergeKeepAllTextSegments(normalized, segmentation, breakAfterPunctuation) {
4770
4902
  if (segmentation.len <= 1) return segmentation;
4771
4903
  const texts = [];
4772
4904
  const isWordLike = [];
4773
4905
  const kinds = [];
4774
4906
  const starts = [];
4775
- let pendingTextParts = null;
4776
- let pendingWordLike = false;
4777
- let pendingStart = 0;
4778
- let pendingContainsCJK = false;
4779
- let pendingCanContinue = false;
4780
- function flushPendingText() {
4781
- if (pendingTextParts === null) return;
4782
- texts.push(joinTextParts(pendingTextParts));
4783
- isWordLike.push(pendingWordLike);
4907
+ let groupStart = -1;
4908
+ let groupContainsCJK = false;
4909
+ function pushOriginalText(index) {
4910
+ texts.push(segmentation.texts[index]);
4911
+ isWordLike.push(segmentation.isWordLike[index]);
4784
4912
  kinds.push("text");
4785
- starts.push(pendingStart);
4786
- pendingTextParts = null;
4913
+ starts.push(segmentation.starts[index]);
4914
+ }
4915
+ function pushMergedText(start, end) {
4916
+ let wordLike = false;
4917
+ for (let i = start; i < end; i++) wordLike = wordLike || segmentation.isWordLike[i];
4918
+ const sourceStart = segmentation.starts[start];
4919
+ const sourceEnd = end < segmentation.len ? segmentation.starts[end] : normalized.length;
4920
+ texts.push(normalized.slice(sourceStart, sourceEnd));
4921
+ isWordLike.push(wordLike);
4922
+ kinds.push("text");
4923
+ starts.push(sourceStart);
4924
+ }
4925
+ function flushGroup(end) {
4926
+ if (groupStart < 0) return;
4927
+ if (groupContainsCJK) if (groupStart + 1 === end) pushOriginalText(groupStart);
4928
+ else pushMergedText(groupStart, end);
4929
+ else for (let i = groupStart; i < end; i++) pushOriginalText(i);
4930
+ groupStart = -1;
4931
+ groupContainsCJK = false;
4787
4932
  }
4788
4933
  for (let i = 0; i < segmentation.len; i++) {
4789
4934
  const text = segmentation.texts[i];
4790
4935
  const kind = segmentation.kinds[i];
4791
- const wordLike = segmentation.isWordLike[i];
4792
- const start = segmentation.starts[i];
4793
4936
  if (kind === "text") {
4794
- const textContainsCJK = containsCJKText(text);
4795
- const textCanContinue = canContinueKeepAllTextRun(text);
4796
- if (pendingTextParts !== null && pendingContainsCJK && pendingCanContinue) {
4797
- pendingTextParts.push(text);
4798
- pendingWordLike = pendingWordLike || wordLike;
4799
- pendingContainsCJK = pendingContainsCJK || textContainsCJK;
4800
- pendingCanContinue = textCanContinue;
4801
- continue;
4802
- }
4803
- flushPendingText();
4804
- pendingTextParts = [text];
4805
- pendingWordLike = wordLike;
4806
- pendingStart = start;
4807
- pendingContainsCJK = textContainsCJK;
4808
- pendingCanContinue = textCanContinue;
4937
+ if (groupStart >= 0 && !canContinueKeepAllTextRun(segmentation.texts[i - 1], breakAfterPunctuation)) flushGroup(i);
4938
+ if (groupStart < 0) groupStart = i;
4939
+ groupContainsCJK = groupContainsCJK || isCJK(text);
4809
4940
  continue;
4810
4941
  }
4811
- flushPendingText();
4942
+ flushGroup(i);
4812
4943
  texts.push(text);
4813
- isWordLike.push(wordLike);
4944
+ isWordLike.push(segmentation.isWordLike[i]);
4814
4945
  kinds.push(kind);
4815
- starts.push(start);
4946
+ starts.push(segmentation.starts[i]);
4816
4947
  }
4817
- flushPendingText();
4948
+ flushGroup(segmentation.len);
4818
4949
  return {
4819
4950
  len: texts.length,
4820
4951
  texts,
@@ -4835,7 +4966,8 @@ function analyzeText(text, profile, whiteSpace = "normal", wordBreak = "normal")
4835
4966
  kinds: [],
4836
4967
  starts: []
4837
4968
  };
4838
- const segmentation = wordBreak === "keep-all" ? mergeKeepAllTextSegments(buildMergedSegmentation(normalized, profile, whiteSpaceProfile)) : buildMergedSegmentation(normalized, profile, whiteSpaceProfile);
4969
+ const mergedSegmentation = buildMergedSegmentation(normalized, profile, whiteSpaceProfile);
4970
+ const segmentation = wordBreak === "keep-all" ? mergeKeepAllTextSegments(normalized, mergedSegmentation, profile.breakKeepAllAfterPunctuation) : mergedSegmentation;
4839
4971
  return {
4840
4972
  normalized,
4841
4973
  chunks: compileAnalysisChunks(segmentation, whiteSpaceProfile),
@@ -4843,7 +4975,7 @@ function analyzeText(text, profile, whiteSpace = "normal", wordBreak = "normal")
4843
4975
  };
4844
4976
  }
4845
4977
  //#endregion
4846
- //#region ../../node_modules/.bun/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/measurement.js
4978
+ //#region ../../node_modules/.bun/@chenglou+pretext@0.0.7/node_modules/@chenglou/pretext/dist/measurement.js
4847
4979
  var measureContext = null;
4848
4980
  var segmentMetricCaches = /* @__PURE__ */ new Map();
4849
4981
  var cachedEngineProfile = null;
@@ -4889,6 +5021,7 @@ function getEngineProfile() {
4889
5021
  cachedEngineProfile = {
4890
5022
  lineFitEpsilon: .005,
4891
5023
  carryCJKAfterClosingQuote: false,
5024
+ breakKeepAllAfterPunctuation: true,
4892
5025
  preferPrefixWidthsForBreakableRuns: false,
4893
5026
  preferEarlySoftHyphenBreak: false
4894
5027
  };
@@ -4900,6 +5033,7 @@ function getEngineProfile() {
4900
5033
  cachedEngineProfile = {
4901
5034
  lineFitEpsilon: isSafari ? 1 / 64 : .005,
4902
5035
  carryCJKAfterClosingQuote: isChromium,
5036
+ breakKeepAllAfterPunctuation: !isSafari,
4903
5037
  preferPrefixWidthsForBreakableRuns: isSafari,
4904
5038
  preferEarlySoftHyphenBreak: isSafari
4905
5039
  };
@@ -5017,7 +5151,7 @@ function getFontMeasurementState(font, needsEmojiCorrection) {
5017
5151
  };
5018
5152
  }
5019
5153
  //#endregion
5020
- //#region ../../node_modules/.bun/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/line-break.js
5154
+ //#region ../../node_modules/.bun/@chenglou+pretext@0.0.7/node_modules/@chenglou/pretext/dist/line-break.js
5021
5155
  function consumesAtLineStart(kind) {
5022
5156
  return kind === "space" || kind === "zero-width-break" || kind === "soft-hyphen";
5023
5157
  }
@@ -5062,19 +5196,23 @@ function getBreakableGraphemeAdvance(prepared, hasContent, baseAdvance) {
5062
5196
  function getBreakableCandidateFitWidth(prepared, candidatePaintWidth) {
5063
5197
  return prepared.letterSpacing === 0 ? candidatePaintWidth : candidatePaintWidth + prepared.letterSpacing;
5064
5198
  }
5065
- function fitSoftHyphenBreak(graphemeFitAdvances, initialWidth, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, letterSpacing) {
5066
- let fitCount = 0;
5067
- let fittedWidth = initialWidth;
5068
- while (fitCount < graphemeFitAdvances.length) {
5069
- const nextWidth = fittedWidth + graphemeFitAdvances[fitCount] + letterSpacing;
5070
- if ((fitCount + 1 < graphemeFitAdvances.length ? nextWidth + discretionaryHyphenWidth : nextWidth) > maxWidth + lineFitEpsilon) break;
5071
- fittedWidth = nextWidth;
5072
- fitCount++;
5199
+ function getTerminalLetterSpacing(prepared, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) {
5200
+ if (prepared.letterSpacing === 0) return 0;
5201
+ if (endGraphemeIndex > 0) return prepared.spacingGraphemeCounts[endSegmentIndex] > 0 ? prepared.letterSpacing : 0;
5202
+ for (let i = endSegmentIndex - 1; i >= startSegmentIndex; i--) {
5203
+ const kind = prepared.kinds[i];
5204
+ if (kind === "space" || kind === "zero-width-break" || kind === "hard-break") continue;
5205
+ if (kind === "soft-hyphen") {
5206
+ if (i === endSegmentIndex - 1) return 0;
5207
+ continue;
5208
+ }
5209
+ if (i === startSegmentIndex && startGraphemeIndex > 0) return prepared.letterSpacing;
5210
+ return prepared.spacingGraphemeCounts[i] > 0 ? prepared.letterSpacing : 0;
5073
5211
  }
5074
- return {
5075
- fitCount,
5076
- fittedWidth
5077
- };
5212
+ return 0;
5213
+ }
5214
+ function finalizeLinePaintWidth(prepared, width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) {
5215
+ return width + getTerminalLetterSpacing(prepared, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex);
5078
5216
  }
5079
5217
  function findChunkIndexForStart(prepared, segmentIndex) {
5080
5218
  let lo = 0;
@@ -5107,7 +5245,7 @@ function normalizeLineStartInChunk(prepared, chunkIndex, cursor) {
5107
5245
  cursor.graphemeIndex = 0;
5108
5246
  return chunkIndex + 1;
5109
5247
  }
5110
- function normalizeLineStartChunkIndex(prepared, cursor) {
5248
+ function normalizePreparedLineStart(prepared, cursor) {
5111
5249
  if (cursor.segmentIndex >= prepared.widths.length) return -1;
5112
5250
  const chunkIndex = findChunkIndexForStart(prepared, cursor.segmentIndex);
5113
5251
  if (chunkIndex < 0) return -1;
@@ -5249,8 +5387,7 @@ function walkPreparedLinesRaw(prepared, maxWidth, onLine) {
5249
5387
  const { widths, kinds, breakableFitAdvances, discretionaryHyphenWidth, chunks } = prepared;
5250
5388
  if (widths.length === 0 || chunks.length === 0) return 0;
5251
5389
  const engineProfile = getEngineProfile();
5252
- const lineFitEpsilon = engineProfile.lineFitEpsilon;
5253
- const fitLimit = maxWidth + lineFitEpsilon;
5390
+ const fitLimit = maxWidth + engineProfile.lineFitEpsilon;
5254
5391
  let lineCount = 0;
5255
5392
  let lineW = 0;
5256
5393
  let hasContent = false;
@@ -5268,9 +5405,12 @@ function walkPreparedLinesRaw(prepared, maxWidth, onLine) {
5268
5405
  pendingBreakPaintWidth = 0;
5269
5406
  pendingBreakKind = null;
5270
5407
  }
5271
- function emitCurrentLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {
5408
+ function getCurrentLinePaintWidth() {
5409
+ return pendingBreakKind === "soft-hyphen" && pendingBreakSegmentIndex === lineEndSegmentIndex && lineEndGraphemeIndex === 0 ? pendingBreakPaintWidth : lineW;
5410
+ }
5411
+ function emitCurrentLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width) {
5272
5412
  lineCount++;
5273
- onLine?.(width, lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex);
5413
+ if (onLine !== void 0) onLine(finalizeLinePaintWidth(prepared, width ?? getCurrentLinePaintWidth(), lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex), lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex);
5274
5414
  lineW = 0;
5275
5415
  hasContent = false;
5276
5416
  clearPendingBreak();
@@ -5332,25 +5472,6 @@ function walkPreparedLinesRaw(prepared, maxWidth, onLine) {
5332
5472
  lineEndGraphemeIndex = 0;
5333
5473
  }
5334
5474
  }
5335
- function continueSoftHyphenBreakableSegment(segmentIndex) {
5336
- if (pendingBreakKind !== "soft-hyphen") return false;
5337
- const fitWidths = breakableFitAdvances[segmentIndex];
5338
- if (fitWidths == null) return false;
5339
- const { fitCount, fittedWidth } = fitSoftHyphenBreak(fitWidths, lineW, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, prepared.letterSpacing);
5340
- if (fitCount === 0) return false;
5341
- lineW = fittedWidth;
5342
- lineEndSegmentIndex = segmentIndex;
5343
- lineEndGraphemeIndex = fitCount;
5344
- clearPendingBreak();
5345
- if (fitCount === fitWidths.length) {
5346
- lineEndSegmentIndex = segmentIndex + 1;
5347
- lineEndGraphemeIndex = 0;
5348
- return true;
5349
- }
5350
- emitCurrentLine(segmentIndex, fitCount, fittedWidth + discretionaryHyphenWidth);
5351
- appendBreakableSegmentFrom(segmentIndex, fitCount);
5352
- return true;
5353
- }
5354
5475
  function emitEmptyChunk(chunk) {
5355
5476
  lineCount++;
5356
5477
  onLine?.(0, chunk.startSegmentIndex, 0, chunk.consumedEndSegmentIndex, 0);
@@ -5407,10 +5528,6 @@ function walkPreparedLinesRaw(prepared, maxWidth, onLine) {
5407
5528
  emitCurrentLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);
5408
5529
  continue;
5409
5530
  }
5410
- if (pendingBreakKind === "soft-hyphen" && continueSoftHyphenBreakableSegment(i)) {
5411
- i++;
5412
- continue;
5413
- }
5414
5531
  if (breakAfter && currentBreakFitWidth <= fitLimit) {
5415
5532
  appendWholeSegment(i, advance);
5416
5533
  emitCurrentLine(i + 1, 0, currentBreakPaintWidth);
@@ -5456,8 +5573,9 @@ function stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth) {
5456
5573
  }
5457
5574
  const { widths, kinds, breakableFitAdvances, discretionaryHyphenWidth } = prepared;
5458
5575
  const engineProfile = getEngineProfile();
5459
- const lineFitEpsilon = engineProfile.lineFitEpsilon;
5460
- const fitLimit = maxWidth + lineFitEpsilon;
5576
+ const fitLimit = maxWidth + engineProfile.lineFitEpsilon;
5577
+ const lineStartSegmentIndex = cursor.segmentIndex;
5578
+ const lineStartGraphemeIndex = cursor.graphemeIndex;
5461
5579
  let lineW = 0;
5462
5580
  let hasContent = false;
5463
5581
  let lineEndSegmentIndex = cursor.segmentIndex;
@@ -5466,17 +5584,14 @@ function stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth) {
5466
5584
  let pendingBreakFitWidth = 0;
5467
5585
  let pendingBreakPaintWidth = 0;
5468
5586
  let pendingBreakKind = null;
5469
- function clearPendingBreak() {
5470
- pendingBreakSegmentIndex = -1;
5471
- pendingBreakFitWidth = 0;
5472
- pendingBreakPaintWidth = 0;
5473
- pendingBreakKind = null;
5587
+ function getCurrentLinePaintWidth() {
5588
+ return pendingBreakKind === "soft-hyphen" && pendingBreakSegmentIndex === lineEndSegmentIndex && lineEndGraphemeIndex === 0 ? pendingBreakPaintWidth : lineW;
5474
5589
  }
5475
- function finishLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {
5590
+ function finishLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = getCurrentLinePaintWidth()) {
5476
5591
  if (!hasContent) return null;
5477
5592
  cursor.segmentIndex = endSegmentIndex;
5478
5593
  cursor.graphemeIndex = endGraphemeIndex;
5479
- return width;
5594
+ return finalizeLinePaintWidth(prepared, width, lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex);
5480
5595
  }
5481
5596
  function startLineAtSegment(segmentIndex, width) {
5482
5597
  hasContent = true;
@@ -5528,20 +5643,8 @@ function stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth) {
5528
5643
  }
5529
5644
  return null;
5530
5645
  }
5531
- function maybeFinishAtSoftHyphen(segmentIndex) {
5646
+ function maybeFinishAtSoftHyphen() {
5532
5647
  if (pendingBreakKind !== "soft-hyphen" || pendingBreakSegmentIndex < 0) return null;
5533
- const fitWidths = breakableFitAdvances[segmentIndex] ?? null;
5534
- if (fitWidths !== null) {
5535
- const { fitCount, fittedWidth } = fitSoftHyphenBreak(fitWidths, lineW, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, prepared.letterSpacing);
5536
- if (fitCount === fitWidths.length) {
5537
- lineW = fittedWidth;
5538
- lineEndSegmentIndex = segmentIndex + 1;
5539
- lineEndGraphemeIndex = 0;
5540
- clearPendingBreak();
5541
- return null;
5542
- }
5543
- if (fitCount > 0) return finishLine(segmentIndex, fitCount, fittedWidth + discretionaryHyphenWidth);
5544
- }
5545
5648
  if (pendingBreakFitWidth <= fitLimit) return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);
5546
5649
  return null;
5547
5650
  }
@@ -5579,7 +5682,7 @@ function stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth) {
5579
5682
  const currentBreakFitWidth = lineW + getBreakOpportunityFitContribution(prepared, kind, i, leadingSpacing);
5580
5683
  const currentBreakPaintWidth = lineW + getLineEndPaintContribution(prepared, kind, i, leadingSpacing, w);
5581
5684
  if (pendingBreakKind === "soft-hyphen" && engineProfile.preferEarlySoftHyphenBreak && pendingBreakFitWidth <= fitLimit) return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);
5582
- const softBreakLine = maybeFinishAtSoftHyphen(i);
5685
+ const softBreakLine = maybeFinishAtSoftHyphen();
5583
5686
  if (softBreakLine !== null) return softBreakLine;
5584
5687
  if (breakAfter && currentBreakFitWidth <= fitLimit) {
5585
5688
  appendWholeSegment(i, advance);
@@ -5686,12 +5789,15 @@ function stepPreparedSimpleLineGeometry(prepared, cursor, maxWidth) {
5686
5789
  cursor.graphemeIndex = lineEndGraphemeIndex;
5687
5790
  return lineW;
5688
5791
  }
5689
- function stepPreparedLineGeometry(prepared, cursor, maxWidth) {
5690
- const chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);
5691
- if (chunkIndex < 0) return null;
5792
+ function stepPreparedLineGeometryFromChunk(prepared, cursor, chunkIndex, maxWidth) {
5692
5793
  if (prepared.simpleLineWalkFastPath) return stepPreparedSimpleLineGeometry(prepared, cursor, maxWidth);
5693
5794
  return stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth);
5694
5795
  }
5796
+ function stepPreparedLineGeometry(prepared, cursor, maxWidth) {
5797
+ const chunkIndex = normalizePreparedLineStart(prepared, cursor);
5798
+ if (chunkIndex < 0) return null;
5799
+ return stepPreparedLineGeometryFromChunk(prepared, cursor, chunkIndex, maxWidth);
5800
+ }
5695
5801
  function measurePreparedLineGeometry(prepared, maxWidth) {
5696
5802
  if (prepared.widths.length === 0) return {
5697
5803
  lineCount: 0,
@@ -5704,7 +5810,7 @@ function measurePreparedLineGeometry(prepared, maxWidth) {
5704
5810
  let lineCount = 0;
5705
5811
  let maxLineWidth = 0;
5706
5812
  if (!prepared.simpleLineWalkFastPath) {
5707
- let chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);
5813
+ let chunkIndex = normalizePreparedLineStart(prepared, cursor);
5708
5814
  while (chunkIndex >= 0) {
5709
5815
  const lineWidth = stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth);
5710
5816
  if (lineWidth === null) return {
@@ -5731,7 +5837,7 @@ function measurePreparedLineGeometry(prepared, maxWidth) {
5731
5837
  }
5732
5838
  }
5733
5839
  //#endregion
5734
- //#region ../../node_modules/.bun/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/line-text.js
5840
+ //#region ../../node_modules/.bun/@chenglou+pretext@0.0.7/node_modules/@chenglou/pretext/dist/line-text.js
5735
5841
  var sharedGraphemeSegmenter$1 = null;
5736
5842
  var sharedLineTextCaches = /* @__PURE__ */ new WeakMap();
5737
5843
  function getSharedGraphemeSegmenter$1() {
@@ -5747,8 +5853,8 @@ function getSegmentGraphemes(segmentIndex, segments, cache) {
5747
5853
  cache.set(segmentIndex, graphemes);
5748
5854
  return graphemes;
5749
5855
  }
5750
- function lineHasDiscretionaryHyphen(kinds, startSegmentIndex, startGraphemeIndex, endSegmentIndex) {
5751
- return endSegmentIndex > 0 && kinds[endSegmentIndex - 1] === "soft-hyphen" && !(startSegmentIndex === endSegmentIndex && startGraphemeIndex > 0);
5856
+ function lineHasDiscretionaryHyphen(kinds, startSegmentIndex, endSegmentIndex) {
5857
+ return endSegmentIndex > startSegmentIndex && kinds[endSegmentIndex - 1] === "soft-hyphen";
5752
5858
  }
5753
5859
  function appendSegmentGraphemeRange(text, graphemes, startGraphemeIndex, endGraphemeIndex) {
5754
5860
  for (let i = startGraphemeIndex; i < endGraphemeIndex; i++) text += graphemes[i];
@@ -5763,7 +5869,7 @@ function getLineTextCache(prepared) {
5763
5869
  }
5764
5870
  function buildLineTextFromRange(prepared, cache, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) {
5765
5871
  let text = "";
5766
- const endsWithDiscretionaryHyphen = lineHasDiscretionaryHyphen(prepared.kinds, startSegmentIndex, startGraphemeIndex, endSegmentIndex);
5872
+ const endsWithDiscretionaryHyphen = lineHasDiscretionaryHyphen(prepared.kinds, startSegmentIndex, endSegmentIndex);
5767
5873
  for (let i = startSegmentIndex; i < endSegmentIndex; i++) {
5768
5874
  if (prepared.kinds[i] === "soft-hyphen" || prepared.kinds[i] === "hard-break") continue;
5769
5875
  if (i === startSegmentIndex && startGraphemeIndex > 0) {
@@ -5779,7 +5885,7 @@ function buildLineTextFromRange(prepared, cache, startSegmentIndex, startGraphem
5779
5885
  return text;
5780
5886
  }
5781
5887
  //#endregion
5782
- //#region ../../node_modules/.bun/@chenglou+pretext@0.0.6/node_modules/@chenglou/pretext/dist/layout.js
5888
+ //#region ../../node_modules/.bun/@chenglou+pretext@0.0.7/node_modules/@chenglou/pretext/dist/layout.js
5783
5889
  var sharedGraphemeSegmenter = null;
5784
5890
  function getSharedGraphemeSegmenter() {
5785
5891
  if (sharedGraphemeSegmenter === null) sharedGraphemeSegmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
@@ -5870,36 +5976,34 @@ function buildBaseCjkUnits(segText, engineProfile) {
5870
5976
  pushUnit();
5871
5977
  return units;
5872
5978
  }
5873
- function mergeKeepAllTextUnits(units) {
5979
+ function mergeKeepAllTextUnits(segText, units, breakAfterPunctuation) {
5874
5980
  if (units.length <= 1) return units;
5875
5981
  const merged = [];
5876
- let currentTextParts = [units[0].text];
5877
- let currentStart = units[0].start;
5878
- let currentContainsCJK = isCJK(units[0].text);
5879
- let currentCanContinue = canContinueKeepAllTextRun(units[0].text);
5880
- function flushCurrent() {
5982
+ let groupStart = -1;
5983
+ let groupContainsCJK = false;
5984
+ function pushMergedUnit(start, end) {
5985
+ const sourceStart = units[start].start;
5986
+ const sourceEnd = end < units.length ? units[end].start : segText.length;
5881
5987
  merged.push({
5882
- text: currentTextParts.length === 1 ? currentTextParts[0] : currentTextParts.join(""),
5883
- start: currentStart
5988
+ text: segText.slice(sourceStart, sourceEnd),
5989
+ start: sourceStart
5884
5990
  });
5885
5991
  }
5886
- for (let i = 1; i < units.length; i++) {
5887
- const next = units[i];
5888
- const nextContainsCJK = isCJK(next.text);
5889
- const nextCanContinue = canContinueKeepAllTextRun(next.text);
5890
- if (currentContainsCJK && currentCanContinue) {
5891
- currentTextParts.push(next.text);
5892
- currentContainsCJK = currentContainsCJK || nextContainsCJK;
5893
- currentCanContinue = nextCanContinue;
5894
- continue;
5895
- }
5896
- flushCurrent();
5897
- currentTextParts = [next.text];
5898
- currentStart = next.start;
5899
- currentContainsCJK = nextContainsCJK;
5900
- currentCanContinue = nextCanContinue;
5992
+ function flushGroup(end) {
5993
+ if (groupStart < 0) return;
5994
+ if (groupContainsCJK) if (groupStart + 1 === end) merged.push(units[groupStart]);
5995
+ else pushMergedUnit(groupStart, end);
5996
+ else for (let i = groupStart; i < end; i++) merged.push(units[i]);
5997
+ groupStart = -1;
5998
+ groupContainsCJK = false;
5999
+ }
6000
+ for (let i = 0; i < units.length; i++) {
6001
+ const unit = units[i];
6002
+ if (groupStart >= 0 && !canContinueKeepAllTextRun(units[i - 1].text, breakAfterPunctuation)) flushGroup(i);
6003
+ if (groupStart < 0) groupStart = i;
6004
+ groupContainsCJK = groupContainsCJK || isCJK(unit.text);
5901
6005
  }
5902
- flushCurrent();
6006
+ flushGroup(units.length);
5903
6007
  return merged;
5904
6008
  }
5905
6009
  function countRenderedSpacingGraphemes(text, kind) {
@@ -5916,7 +6020,7 @@ function addInternalLetterSpacing(width, graphemeCount, letterSpacing) {
5916
6020
  function measureAnalysis(analysis, font, includeSegments, wordBreak, letterSpacing) {
5917
6021
  const engineProfile = getEngineProfile();
5918
6022
  const { cache, emojiCorrection } = getFontMeasurementState(font, textMayContainEmoji(analysis.normalized));
5919
- const discretionaryHyphenWidth = getCorrectedSegmentWidth("-", getSegmentMetrics("-", cache), emojiCorrection) + (letterSpacing === 0 ? 0 : letterSpacing);
6023
+ const discretionaryHyphenWidth = getCorrectedSegmentWidth("-", getSegmentMetrics("-", cache), emojiCorrection) + (letterSpacing === 0 ? 0 : letterSpacing * 2);
5920
6024
  const tabStopAdvance = getCorrectedSegmentWidth(" ", getSegmentMetrics(" ", cache), emojiCorrection) * 8;
5921
6025
  const hasLetterSpacing = letterSpacing !== 0;
5922
6026
  if (analysis.len === 0) return createEmptyPrepared(includeSegments);
@@ -5979,7 +6083,7 @@ function measureAnalysis(analysis, font, includeSegments, wordBreak, letterSpaci
5979
6083
  const segMetrics = getSegmentMetrics(segText, cache);
5980
6084
  if (segKind === "text" && segMetrics.containsCJK) {
5981
6085
  const baseUnits = buildBaseCjkUnits(segText, engineProfile);
5982
- const measuredUnits = wordBreak === "keep-all" ? mergeKeepAllTextUnits(baseUnits) : baseUnits;
6086
+ const measuredUnits = wordBreak === "keep-all" ? mergeKeepAllTextUnits(segText, baseUnits, engineProfile.breakKeepAllAfterPunctuation) : baseUnits;
5983
6087
  for (let i = 0; i < measuredUnits.length; i++) {
5984
6088
  const unit = measuredUnits[i];
5985
6089
  pushMeasuredTextSegment(unit.text, "text", segStart + unit.start, segWordLike, wordBreak === "keep-all" || !isCJK(unit.text));
@@ -6100,4 +6204,4 @@ function layoutWithLines(prepared, maxWidth, lineHeight) {
6100
6204
  //#endregion
6101
6205
  export { prepare as a, measureNaturalWidth as i, layoutWithLines as n, prepareWithSegments as o, measureLineStats as r, layout as t };
6102
6206
 
6103
- //# sourceMappingURL=layout-DJHMMap2.js.map
6207
+ //# sourceMappingURL=layout-CWBE0qwx.js.map