@lostgradient/cinder 0.4.0 → 0.4.1

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 (1086) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/components.json +2 -2
  3. package/dist/components/_sortable-item.svelte.d.ts +1 -1
  4. package/dist/components/autocomplete/index.js +76 -63
  5. package/dist/components/avatar-group/index.js +96 -16
  6. package/dist/components/chat/index.js +294 -142
  7. package/dist/components/chat-conversation-header/index.js +69 -3
  8. package/dist/components/combobox/combobox.schema.js +5 -1
  9. package/dist/components/combobox/combobox.types.d.ts +2 -0
  10. package/dist/components/combobox/index.js +108 -47
  11. package/dist/components/command-menu/index.js +8 -4
  12. package/dist/components/command-palette/index.js +8 -4
  13. package/dist/components/context-menu/index.js +69 -3
  14. package/dist/components/data-table/data-table.css +20 -0
  15. package/dist/components/data-table/data-table.schema.js +30 -1
  16. package/dist/components/data-table/data-table.svelte.d.ts +4 -4
  17. package/dist/components/data-table/data-table.types.d.ts +26 -0
  18. package/dist/components/data-table/index.d.ts +1 -1
  19. package/dist/components/data-table/index.js +708 -303
  20. package/dist/components/diff-viewer/index.js +75 -9
  21. package/dist/components/dropdown/index.js +69 -3
  22. package/dist/components/dropdown-item/dropdown-item.schema.js +4 -4
  23. package/dist/components/dropdown-item/dropdown-item.types.d.ts +3 -3
  24. package/dist/components/dropdown-item/index.js +2 -2
  25. package/dist/components/dropdown-menu/index.js +68 -2
  26. package/dist/components/experimental/json-viewer/index.d.ts +3 -1
  27. package/dist/components/experimental/json-viewer/index.js +396 -3
  28. package/dist/components/experimental/message/index.d.ts +3 -1
  29. package/dist/components/experimental/message/index.js +81 -3
  30. package/dist/components/hover-card/index.js +67 -8
  31. package/dist/components/json-schema-editor/diff-view.svelte.d.ts +1 -1
  32. package/dist/components/json-schema-editor/form-view.svelte.d.ts +1 -1
  33. package/dist/components/json-schema-editor/index.js +256 -110
  34. package/dist/components/json-schema-editor/json-schema-editor-state.svelte.d.ts +2 -12
  35. package/dist/components/json-schema-editor/json-schema-editor-state.types.d.ts +13 -0
  36. package/dist/components/json-schema-editor/json-schema-toolbar.svelte.d.ts +1 -1
  37. package/dist/components/json-schema-editor/json-view.svelte.d.ts +1 -1
  38. package/dist/components/markdown-editor/index.js +311 -159
  39. package/dist/components/menu-bar/index.d.ts +3 -1
  40. package/dist/components/menu-bar/index.js +3702 -3
  41. package/dist/components/review-editor/index.js +404 -252
  42. package/dist/components/segment/index.js +8 -4
  43. package/dist/components/segmented-control/index.js +71 -5
  44. package/dist/components/segmented-control/segmented-control.schema.js +5 -1
  45. package/dist/components/segmented-control/segmented-control.types.d.ts +2 -0
  46. package/dist/components/sortable-list/sortable-list.types.d.ts +4 -4
  47. package/dist/components/tag-input/index.d.ts +3 -1
  48. package/dist/components/tag-input/index.js +566 -3
  49. package/dist/components/tooltip/index.js +96 -16
  50. package/dist/components/tree/index.js +66 -44
  51. package/dist/index.d.ts +5 -5
  52. package/dist/server/components/access-gate/access-gate.schema.js +2 -4
  53. package/dist/server/components/access-gate/access-gate.variables.js +2 -4
  54. package/dist/server/components/access-gate/index.js +21 -1559
  55. package/dist/server/components/accordion/accordion.schema.js +2 -4
  56. package/dist/server/components/accordion/accordion.variables.js +2 -4
  57. package/dist/server/components/accordion/index.js +10 -122
  58. package/dist/server/components/accordion-item/accordion-item.schema.js +2 -4
  59. package/dist/server/components/accordion-item/accordion-item.variables.js +2 -4
  60. package/dist/server/components/accordion-item/index.js +9 -46
  61. package/dist/server/components/alert/alert.schema.js +2 -4
  62. package/dist/server/components/alert/alert.variables.js +2 -4
  63. package/dist/server/components/alert/index.js +9 -108
  64. package/dist/server/components/alert-dialog/alert-dialog.schema.js +2 -4
  65. package/dist/server/components/alert-dialog/alert-dialog.variables.js +2 -4
  66. package/dist/server/components/alert-dialog/index.js +16 -785
  67. package/dist/server/components/approval-card/approval-card.schema.js +2 -4
  68. package/dist/server/components/approval-card/approval-card.variables.js +2 -4
  69. package/dist/server/components/approval-card/index.js +36 -2494
  70. package/dist/server/components/area-chart/area-chart.schema.js +2 -4
  71. package/dist/server/components/area-chart/area-chart.variables.js +2 -4
  72. package/dist/server/components/area-chart/index.js +9 -1138
  73. package/dist/server/components/aspect-ratio/aspect-ratio.schema.js +2 -4
  74. package/dist/server/components/aspect-ratio/aspect-ratio.variables.js +2 -4
  75. package/dist/server/components/aspect-ratio/index.js +7 -42
  76. package/dist/server/components/autocomplete/autocomplete.schema.js +2 -4
  77. package/dist/server/components/autocomplete/autocomplete.variables.js +2 -4
  78. package/dist/server/components/autocomplete/index.js +19 -854
  79. package/dist/server/components/avatar/avatar.schema.js +2 -4
  80. package/dist/server/components/avatar/avatar.variables.js +2 -4
  81. package/dist/server/components/avatar/index.js +10 -94
  82. package/dist/server/components/avatar-group/avatar-group.schema.js +2 -4
  83. package/dist/server/components/avatar-group/avatar-group.variables.js +2 -4
  84. package/dist/server/components/avatar-group/index.js +16 -481
  85. package/dist/server/components/backdrop/backdrop.schema.js +2 -4
  86. package/dist/server/components/backdrop/backdrop.variables.js +2 -4
  87. package/dist/server/components/backdrop/index.js +9 -134
  88. package/dist/server/components/badge/badge.schema.js +2 -4
  89. package/dist/server/components/badge/badge.variables.js +2 -4
  90. package/dist/server/components/badge/index.js +9 -107
  91. package/dist/server/components/banner/banner.schema.js +2 -4
  92. package/dist/server/components/banner/banner.variables.js +2 -4
  93. package/dist/server/components/banner/index.js +7 -107
  94. package/dist/server/components/bar-chart/bar-chart.schema.js +2 -4
  95. package/dist/server/components/bar-chart/bar-chart.variables.js +2 -4
  96. package/dist/server/components/bar-chart/index.js +9 -1135
  97. package/dist/server/components/breadcrumbs/breadcrumbs.schema.js +2 -4
  98. package/dist/server/components/breadcrumbs/breadcrumbs.variables.js +2 -4
  99. package/dist/server/components/breadcrumbs/index.js +7 -52
  100. package/dist/server/components/button/button.schema.js +2 -4
  101. package/dist/server/components/button/button.variables.js +2 -4
  102. package/dist/server/components/button/index.js +11 -167
  103. package/dist/server/components/button-group/button-group.schema.js +2 -4
  104. package/dist/server/components/button-group/button-group.variables.js +2 -4
  105. package/dist/server/components/button-group/index.js +12 -132
  106. package/dist/server/components/callout/callout.schema.js +2 -4
  107. package/dist/server/components/callout/callout.variables.js +2 -4
  108. package/dist/server/components/callout/index.js +7 -67
  109. package/dist/server/components/capability-gate/capability-gate.schema.js +2 -4
  110. package/dist/server/components/capability-gate/capability-gate.variables.js +2 -4
  111. package/dist/server/components/capability-gate/index.js +9 -132
  112. package/dist/server/components/card/card.schema.js +2 -4
  113. package/dist/server/components/card/card.variables.js +2 -4
  114. package/dist/server/components/card/index.js +9 -82
  115. package/dist/server/components/chat/chat.schema.js +2 -4
  116. package/dist/server/components/chat/chat.variables.js +2 -4
  117. package/dist/server/components/chat/index.js +96 -8868
  118. package/dist/server/components/chat-conversation-header/chat-conversation-header.schema.js +2 -4
  119. package/dist/server/components/chat-conversation-header/chat-conversation-header.variables.js +2 -4
  120. package/dist/server/components/chat-conversation-header/index.js +36 -1661
  121. package/dist/server/components/chat-conversation-list/chat-conversation-list.schema.js +2 -4
  122. package/dist/server/components/chat-conversation-list/chat-conversation-list.variables.js +2 -4
  123. package/dist/server/components/chat-conversation-list/index.js +12 -348
  124. package/dist/server/components/checkbox/checkbox.schema.js +2 -4
  125. package/dist/server/components/checkbox/checkbox.variables.js +2 -4
  126. package/dist/server/components/checkbox/index.js +15 -192
  127. package/dist/server/components/checkbox-group/checkbox-group.schema.js +2 -4
  128. package/dist/server/components/checkbox-group/checkbox-group.variables.js +2 -4
  129. package/dist/server/components/checkbox-group/index.js +10 -116
  130. package/dist/server/components/chip/chip.schema.js +2 -4
  131. package/dist/server/components/chip/chip.variables.js +2 -4
  132. package/dist/server/components/chip/index.js +9 -136
  133. package/dist/server/components/choice-grid/choice-grid.schema.js +2 -4
  134. package/dist/server/components/choice-grid/choice-grid.variables.js +2 -4
  135. package/dist/server/components/choice-grid/index.js +12 -347
  136. package/dist/server/components/choice-grid-item/choice-grid-item.schema.js +2 -4
  137. package/dist/server/components/choice-grid-item/choice-grid-item.variables.js +2 -4
  138. package/dist/server/components/choice-grid-item/index.js +12 -103
  139. package/dist/server/components/click-away-listener/click-away-listener.schema.js +2 -4
  140. package/dist/server/components/click-away-listener/click-away-listener.variables.js +2 -4
  141. package/dist/server/components/click-away-listener/index.js +7 -37
  142. package/dist/server/components/code-block/code-block.schema.js +2 -4
  143. package/dist/server/components/code-block/code-block.variables.js +2 -4
  144. package/dist/server/components/code-block/index.js +19 -330
  145. package/dist/server/components/collapsible/collapsible.schema.js +2 -4
  146. package/dist/server/components/collapsible/collapsible.variables.js +2 -4
  147. package/dist/server/components/collapsible/index.js +10 -88
  148. package/dist/server/components/color-field/color-field.schema.js +2 -4
  149. package/dist/server/components/color-field/color-field.variables.js +2 -4
  150. package/dist/server/components/color-field/index.js +15 -687
  151. package/dist/server/components/color-picker/color-picker.schema.js +2 -4
  152. package/dist/server/components/color-picker/color-picker.variables.js +2 -4
  153. package/dist/server/components/color-picker/index.js +15 -923
  154. package/dist/server/components/color-swatch-picker/color-swatch-picker.schema.js +2 -4
  155. package/dist/server/components/color-swatch-picker/color-swatch-picker.variables.js +2 -4
  156. package/dist/server/components/color-swatch-picker/index.js +16 -478
  157. package/dist/server/components/combobox/combobox.schema.js +6 -4
  158. package/dist/server/components/combobox/combobox.variables.js +2 -4
  159. package/dist/server/components/combobox/index.js +19 -710
  160. package/dist/server/components/command-item/command-item.schema.js +2 -4
  161. package/dist/server/components/command-item/command-item.variables.js +2 -4
  162. package/dist/server/components/command-item/index.js +8 -121
  163. package/dist/server/components/command-menu/command-menu.schema.js +2 -4
  164. package/dist/server/components/command-menu/command-menu.variables.js +2 -4
  165. package/dist/server/components/command-menu/index.js +16 -552
  166. package/dist/server/components/command-palette/command-palette.schema.js +2 -4
  167. package/dist/server/components/command-palette/command-palette.variables.js +2 -4
  168. package/dist/server/components/command-palette/index.js +12 -402
  169. package/dist/server/components/confirm-dialog/confirm-dialog.schema.js +2 -4
  170. package/dist/server/components/confirm-dialog/confirm-dialog.variables.js +2 -4
  171. package/dist/server/components/confirm-dialog/index.js +16 -785
  172. package/dist/server/components/container/container.schema.js +2 -4
  173. package/dist/server/components/container/container.variables.js +2 -4
  174. package/dist/server/components/container/index.js +7 -44
  175. package/dist/server/components/context-menu/context-menu.schema.js +2 -4
  176. package/dist/server/components/context-menu/context-menu.variables.js +2 -4
  177. package/dist/server/components/context-menu/index.js +26 -1096
  178. package/dist/server/components/context-menu-trigger/context-menu-trigger.schema.js +2 -4
  179. package/dist/server/components/context-menu-trigger/context-menu-trigger.variables.js +2 -4
  180. package/dist/server/components/context-menu-trigger/index.js +10 -162
  181. package/dist/server/components/copy-button/copy-button.schema.js +2 -4
  182. package/dist/server/components/copy-button/copy-button.variables.js +2 -4
  183. package/dist/server/components/copy-button/index.js +16 -255
  184. package/dist/server/components/data-grid/data-grid.schema.js +2 -4
  185. package/dist/server/components/data-grid/data-grid.variables.js +2 -4
  186. package/dist/server/components/data-grid/index.js +11 -2819
  187. package/dist/server/components/data-list/data-list.schema.js +2 -4
  188. package/dist/server/components/data-list/data-list.variables.js +2 -4
  189. package/dist/server/components/data-list/index.js +9 -82
  190. package/dist/server/components/data-table/data-table.schema.js +31 -4
  191. package/dist/server/components/data-table/data-table.variables.js +2 -4
  192. package/dist/server/components/data-table/index.js +23 -721
  193. package/dist/server/components/date-range-field/date-range-field.schema.js +2 -4
  194. package/dist/server/components/date-range-field/date-range-field.variables.js +2 -4
  195. package/dist/server/components/date-range-field/index.js +8 -318
  196. package/dist/server/components/description-list/description-list.schema.js +2 -4
  197. package/dist/server/components/description-list/description-list.variables.js +2 -4
  198. package/dist/server/components/description-list/index.js +11 -72
  199. package/dist/server/components/diff-statistics/diff-statistics.schema.js +2 -4
  200. package/dist/server/components/diff-statistics/diff-statistics.variables.js +2 -4
  201. package/dist/server/components/diff-statistics/index.js +9 -99
  202. package/dist/server/components/diff-viewer/diff-viewer.schema.js +2 -4
  203. package/dist/server/components/diff-viewer/diff-viewer.variables.js +2 -4
  204. package/dist/server/components/diff-viewer/index.js +29 -1946
  205. package/dist/server/components/divider/divider.schema.js +2 -4
  206. package/dist/server/components/divider/divider.variables.js +2 -4
  207. package/dist/server/components/divider/index.js +7 -78
  208. package/dist/server/components/drawer/drawer.schema.js +2 -4
  209. package/dist/server/components/drawer/drawer.variables.js +2 -4
  210. package/dist/server/components/drawer/index.js +17 -761
  211. package/dist/server/components/dropdown/dropdown.schema.js +2 -4
  212. package/dist/server/components/dropdown/dropdown.variables.js +2 -4
  213. package/dist/server/components/dropdown/index.js +27 -1008
  214. package/dist/server/components/dropdown-group/dropdown-group.schema.js +2 -4
  215. package/dist/server/components/dropdown-group/dropdown-group.variables.js +2 -4
  216. package/dist/server/components/dropdown-group/index.js +9 -64
  217. package/dist/server/components/dropdown-item/dropdown-item.schema.js +5 -7
  218. package/dist/server/components/dropdown-item/dropdown-item.variables.js +2 -4
  219. package/dist/server/components/dropdown-item/index.js +10 -128
  220. package/dist/server/components/dropdown-label/dropdown-label.schema.js +2 -4
  221. package/dist/server/components/dropdown-label/dropdown-label.variables.js +2 -4
  222. package/dist/server/components/dropdown-label/index.js +9 -35
  223. package/dist/server/components/dropdown-menu/dropdown-menu.schema.js +2 -4
  224. package/dist/server/components/dropdown-menu/dropdown-menu.variables.js +2 -4
  225. package/dist/server/components/dropdown-menu/index.js +19 -442
  226. package/dist/server/components/dropdown-separator/dropdown-separator.schema.js +2 -4
  227. package/dist/server/components/dropdown-separator/dropdown-separator.variables.js +2 -4
  228. package/dist/server/components/dropdown-separator/index.js +9 -27
  229. package/dist/server/components/dropdown-trigger/dropdown-trigger.schema.js +2 -4
  230. package/dist/server/components/dropdown-trigger/dropdown-trigger.variables.js +2 -4
  231. package/dist/server/components/dropdown-trigger/index.js +10 -81
  232. package/dist/server/components/empty-state/empty-state.schema.js +2 -4
  233. package/dist/server/components/empty-state/empty-state.variables.js +2 -4
  234. package/dist/server/components/empty-state/index.js +9 -72
  235. package/dist/server/components/event-stream-viewer/event-stream-viewer.schema.js +2 -4
  236. package/dist/server/components/event-stream-viewer/event-stream-viewer.variables.js +2 -4
  237. package/dist/server/components/event-stream-viewer/index.js +17 -889
  238. package/dist/server/components/experimental/json-viewer/index.js +14 -17
  239. package/dist/server/components/experimental/message/index.js +13 -17
  240. package/dist/server/components/faceted-filter-bar/faceted-filter-bar.schema.js +2 -4
  241. package/dist/server/components/faceted-filter-bar/faceted-filter-bar.variables.js +2 -4
  242. package/dist/server/components/faceted-filter-bar/index.js +21 -749
  243. package/dist/server/components/feed/feed.schema.js +2 -4
  244. package/dist/server/components/feed/feed.variables.js +2 -4
  245. package/dist/server/components/feed/index.js +9 -96
  246. package/dist/server/components/feed-event/feed-event.schema.js +2 -4
  247. package/dist/server/components/feed-event/feed-event.variables.js +2 -4
  248. package/dist/server/components/feed-event/index.js +9 -69
  249. package/dist/server/components/file-upload/file-upload.schema.js +2 -4
  250. package/dist/server/components/file-upload/file-upload.variables.js +2 -4
  251. package/dist/server/components/file-upload/index.js +14 -459
  252. package/dist/server/components/floating-action-button/floating-action-button.schema.js +2 -4
  253. package/dist/server/components/floating-action-button/floating-action-button.variables.js +2 -4
  254. package/dist/server/components/floating-action-button/index.js +11 -101
  255. package/dist/server/components/focus-trap/focus-trap.schema.js +2 -4
  256. package/dist/server/components/focus-trap/focus-trap.variables.js +2 -4
  257. package/dist/server/components/focus-trap/index.js +10 -249
  258. package/dist/server/components/form-field/form-field.schema.js +2 -4
  259. package/dist/server/components/form-field/form-field.variables.js +2 -4
  260. package/dist/server/components/form-field/index.js +10 -145
  261. package/dist/server/components/form-section/form-section.schema.js +2 -4
  262. package/dist/server/components/form-section/form-section.variables.js +2 -4
  263. package/dist/server/components/form-section/index.js +9 -87
  264. package/dist/server/components/grid/grid.schema.js +2 -4
  265. package/dist/server/components/grid/grid.variables.js +2 -4
  266. package/dist/server/components/grid/index.js +9 -109
  267. package/dist/server/components/grid-item/grid-item.schema.js +2 -4
  268. package/dist/server/components/grid-item/grid-item.variables.js +2 -4
  269. package/dist/server/components/grid-item/index.js +9 -57
  270. package/dist/server/components/grid-list/grid-list.schema.js +2 -4
  271. package/dist/server/components/grid-list/grid-list.variables.js +2 -4
  272. package/dist/server/components/grid-list/index.js +8 -128
  273. package/dist/server/components/grid-list-item/grid-list-item.schema.js +2 -4
  274. package/dist/server/components/grid-list-item/grid-list-item.variables.js +2 -4
  275. package/dist/server/components/grid-list-item/index.js +9 -102
  276. package/dist/server/components/hover-card/hover-card.schema.js +2 -4
  277. package/dist/server/components/hover-card/hover-card.variables.js +2 -4
  278. package/dist/server/components/hover-card/index.js +13 -312
  279. package/dist/server/components/image/image.schema.js +2 -4
  280. package/dist/server/components/image/image.variables.js +2 -4
  281. package/dist/server/components/image/index.js +7 -83
  282. package/dist/server/components/input/index.js +15 -243
  283. package/dist/server/components/input/input.schema.js +2 -4
  284. package/dist/server/components/input/input.variables.js +2 -4
  285. package/dist/server/components/invocation-rule-builder/index.js +7 -367
  286. package/dist/server/components/invocation-rule-builder/invocation-rule-builder.schema.js +2 -4
  287. package/dist/server/components/invocation-rule-builder/invocation-rule-builder.variables.js +2 -4
  288. package/dist/server/components/json-schema-editor/index.js +56 -5676
  289. package/dist/server/components/json-schema-editor/json-schema-editor.schema.js +2 -4
  290. package/dist/server/components/json-schema-editor/json-schema-editor.variables.js +2 -4
  291. package/dist/server/components/json-viewer/index.js +9 -230
  292. package/dist/server/components/json-viewer/json-viewer.schema.js +2 -4
  293. package/dist/server/components/json-viewer/json-viewer.variables.js +2 -4
  294. package/dist/server/components/kanban-board/index.js +11 -1141
  295. package/dist/server/components/kanban-board/kanban-board.schema.js +2 -4
  296. package/dist/server/components/kanban-board/kanban-board.variables.js +2 -4
  297. package/dist/server/components/kbd/index.js +9 -44
  298. package/dist/server/components/kbd/kbd.schema.js +2 -4
  299. package/dist/server/components/kbd/kbd.variables.js +2 -4
  300. package/dist/server/components/keyboard-shortcuts/index.js +8 -113
  301. package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.schema.js +2 -4
  302. package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.variables.js +2 -4
  303. package/dist/server/components/label/index.js +7 -46
  304. package/dist/server/components/label/label.schema.js +2 -4
  305. package/dist/server/components/label/label.variables.js +2 -4
  306. package/dist/server/components/line-chart/index.js +9 -1147
  307. package/dist/server/components/line-chart/line-chart.schema.js +2 -4
  308. package/dist/server/components/line-chart/line-chart.variables.js +2 -4
  309. package/dist/server/components/link/index.js +9 -93
  310. package/dist/server/components/link/link.schema.js +2 -4
  311. package/dist/server/components/link/link.variables.js +2 -4
  312. package/dist/server/components/load-more/index.js +9 -141
  313. package/dist/server/components/load-more/load-more.schema.js +2 -4
  314. package/dist/server/components/load-more/load-more.variables.js +2 -4
  315. package/dist/server/components/locale-provider/index.js +8 -50
  316. package/dist/server/components/locale-provider/locale-provider.schema.js +2 -4
  317. package/dist/server/components/locale-provider/locale-provider.variables.js +2 -4
  318. package/dist/server/components/markdown-editor/index.js +44 -3998
  319. package/dist/server/components/markdown-editor/markdown-editor.schema.js +2 -4
  320. package/dist/server/components/markdown-editor/markdown-editor.variables.js +2 -4
  321. package/dist/server/components/masonry/index.js +7 -43
  322. package/dist/server/components/masonry/masonry.schema.js +2 -4
  323. package/dist/server/components/masonry/masonry.variables.js +2 -4
  324. package/dist/server/components/matrix-chart/index.js +10 -1017
  325. package/dist/server/components/matrix-chart/matrix-chart.schema.js +2 -4
  326. package/dist/server/components/matrix-chart/matrix-chart.variables.js +2 -4
  327. package/dist/server/components/media-controls/index.js +8 -161
  328. package/dist/server/components/media-controls/media-controls.schema.js +2 -4
  329. package/dist/server/components/media-controls/media-controls.variables.js +2 -4
  330. package/dist/server/components/menu-bar/index.js +23 -6
  331. package/dist/server/components/menu-bar/menu-bar.schema.js +2 -4
  332. package/dist/server/components/menu-bar/menu-bar.variables.js +2 -4
  333. package/dist/server/components/message/index.js +7 -55
  334. package/dist/server/components/message/message.schema.js +2 -4
  335. package/dist/server/components/message/message.variables.js +2 -4
  336. package/dist/server/components/modal/index.js +16 -547
  337. package/dist/server/components/modal/modal.schema.js +2 -4
  338. package/dist/server/components/modal/modal.variables.js +2 -4
  339. package/dist/server/components/navigation-bar/index.js +7 -152
  340. package/dist/server/components/navigation-bar/navigation-bar.schema.js +2 -4
  341. package/dist/server/components/navigation-bar/navigation-bar.variables.js +2 -4
  342. package/dist/server/components/navigation-item/index.js +9 -81
  343. package/dist/server/components/navigation-item/navigation-item.schema.js +2 -4
  344. package/dist/server/components/navigation-item/navigation-item.variables.js +2 -4
  345. package/dist/server/components/number-input/index.js +14 -488
  346. package/dist/server/components/number-input/number-input.schema.js +2 -4
  347. package/dist/server/components/number-input/number-input.variables.js +2 -4
  348. package/dist/server/components/pagination/index.js +8 -101
  349. package/dist/server/components/pagination/pagination.schema.js +2 -4
  350. package/dist/server/components/pagination/pagination.variables.js +2 -4
  351. package/dist/server/components/payload-inspector/index.js +31 -1476
  352. package/dist/server/components/payload-inspector/payload-inspector.schema.js +2 -4
  353. package/dist/server/components/payload-inspector/payload-inspector.variables.js +2 -4
  354. package/dist/server/components/permission-matrix/index.js +11 -289
  355. package/dist/server/components/permission-matrix/permission-matrix.schema.js +2 -4
  356. package/dist/server/components/permission-matrix/permission-matrix.variables.js +2 -4
  357. package/dist/server/components/phone-input/index.js +13 -4532
  358. package/dist/server/components/phone-input/phone-input.schema.js +2 -4
  359. package/dist/server/components/phone-input/phone-input.variables.js +2 -4
  360. package/dist/server/components/pin-input/index.js +12 -322
  361. package/dist/server/components/pin-input/pin-input.schema.js +2 -4
  362. package/dist/server/components/pin-input/pin-input.variables.js +2 -4
  363. package/dist/server/components/popover/index.js +17 -428
  364. package/dist/server/components/popover/popover.schema.js +2 -4
  365. package/dist/server/components/popover/popover.variables.js +2 -4
  366. package/dist/server/components/portal/index.js +11 -109
  367. package/dist/server/components/portal/portal.schema.js +2 -4
  368. package/dist/server/components/portal/portal.variables.js +2 -4
  369. package/dist/server/components/pricing-card/index.js +10 -237
  370. package/dist/server/components/pricing-card/pricing-card.schema.js +2 -4
  371. package/dist/server/components/pricing-card/pricing-card.variables.js +2 -4
  372. package/dist/server/components/progress/index.js +11 -71
  373. package/dist/server/components/progress/progress.schema.js +2 -4
  374. package/dist/server/components/progress/progress.variables.js +2 -4
  375. package/dist/server/components/radio-group/index.js +10 -198
  376. package/dist/server/components/radio-group/radio-group.schema.js +2 -4
  377. package/dist/server/components/radio-group/radio-group.variables.js +2 -4
  378. package/dist/server/components/rating/index.js +12 -357
  379. package/dist/server/components/rating/rating.schema.js +2 -4
  380. package/dist/server/components/rating/rating.variables.js +2 -4
  381. package/dist/server/components/resizable-panels/index.js +10 -721
  382. package/dist/server/components/resizable-panels/resizable-panels.schema.js +2 -4
  383. package/dist/server/components/resizable-panels/resizable-panels.variables.js +2 -4
  384. package/dist/server/components/review-editor/index.js +83 -9393
  385. package/dist/server/components/review-editor/review-editor.schema.js +2 -4
  386. package/dist/server/components/review-editor/review-editor.variables.js +2 -4
  387. package/dist/server/components/run-step-timeline/index.js +15 -755
  388. package/dist/server/components/run-step-timeline/run-step-timeline.schema.js +2 -4
  389. package/dist/server/components/run-step-timeline/run-step-timeline.variables.js +2 -4
  390. package/dist/server/components/schema-form/index.js +21 -1978
  391. package/dist/server/components/schema-form/schema-form.schema.js +2 -4
  392. package/dist/server/components/schema-form/schema-form.variables.js +2 -4
  393. package/dist/server/components/scroll-area/index.js +7 -52
  394. package/dist/server/components/scroll-area/scroll-area.schema.js +2 -4
  395. package/dist/server/components/scroll-area/scroll-area.variables.js +2 -4
  396. package/dist/server/components/search-field/index.js +19 -289
  397. package/dist/server/components/search-field/search-field.schema.js +2 -4
  398. package/dist/server/components/search-field/search-field.variables.js +2 -4
  399. package/dist/server/components/secret-value-field/index.js +11 -168
  400. package/dist/server/components/secret-value-field/secret-value-field.schema.js +2 -4
  401. package/dist/server/components/secret-value-field/secret-value-field.variables.js +2 -4
  402. package/dist/server/components/section-heading/index.js +7 -77
  403. package/dist/server/components/section-heading/section-heading.schema.js +2 -4
  404. package/dist/server/components/section-heading/section-heading.variables.js +2 -4
  405. package/dist/server/components/segment/index.js +12 -306
  406. package/dist/server/components/segment/segment.schema.js +2 -4
  407. package/dist/server/components/segment/segment.variables.js +2 -4
  408. package/dist/server/components/segmented-control/index.js +12 -308
  409. package/dist/server/components/segmented-control/segmented-control.schema.js +6 -4
  410. package/dist/server/components/segmented-control/segmented-control.variables.js +2 -4
  411. package/dist/server/components/select/index.js +14 -180
  412. package/dist/server/components/select/select.schema.js +2 -4
  413. package/dist/server/components/select/select.variables.js +2 -4
  414. package/dist/server/components/selection-popover/index.js +16 -443
  415. package/dist/server/components/selection-popover/selection-popover.schema.js +2 -4
  416. package/dist/server/components/selection-popover/selection-popover.variables.js +2 -4
  417. package/dist/server/components/share-card/index.js +9 -240
  418. package/dist/server/components/share-card/share-card.schema.js +2 -4
  419. package/dist/server/components/share-card/share-card.variables.js +2 -4
  420. package/dist/server/components/sheet/index.js +15 -768
  421. package/dist/server/components/sheet/sheet.schema.js +2 -4
  422. package/dist/server/components/sheet/sheet.variables.js +2 -4
  423. package/dist/server/components/shortcut-hint/index.js +8 -98
  424. package/dist/server/components/shortcut-hint/shortcut-hint.schema.js +2 -4
  425. package/dist/server/components/shortcut-hint/shortcut-hint.variables.js +2 -4
  426. package/dist/server/components/side-navigation/index.js +12 -240
  427. package/dist/server/components/side-navigation/side-navigation.schema.js +2 -4
  428. package/dist/server/components/side-navigation/side-navigation.variables.js +2 -4
  429. package/dist/server/components/side-navigation-group/index.js +11 -119
  430. package/dist/server/components/side-navigation-group/side-navigation-group.schema.js +2 -4
  431. package/dist/server/components/side-navigation-group/side-navigation-group.variables.js +2 -4
  432. package/dist/server/components/side-navigation-item/index.js +12 -117
  433. package/dist/server/components/side-navigation-item/side-navigation-item.schema.js +2 -4
  434. package/dist/server/components/side-navigation-item/side-navigation-item.variables.js +2 -4
  435. package/dist/server/components/sidebar/index.js +17 -921
  436. package/dist/server/components/sidebar/sidebar.schema.js +2 -4
  437. package/dist/server/components/sidebar/sidebar.variables.js +2 -4
  438. package/dist/server/components/skeleton/index.js +7 -28
  439. package/dist/server/components/skeleton/skeleton.schema.js +2 -4
  440. package/dist/server/components/skeleton/skeleton.variables.js +2 -4
  441. package/dist/server/components/skip-link/index.js +9 -105
  442. package/dist/server/components/skip-link/skip-link.schema.js +2 -4
  443. package/dist/server/components/skip-link/skip-link.variables.js +2 -4
  444. package/dist/server/components/slider/index.js +13 -563
  445. package/dist/server/components/slider/slider.schema.js +2 -4
  446. package/dist/server/components/slider/slider.variables.js +2 -4
  447. package/dist/server/components/sortable-list/index.js +9 -632
  448. package/dist/server/components/sortable-list/sortable-list.schema.js +2 -4
  449. package/dist/server/components/sortable-list/sortable-list.variables.js +2 -4
  450. package/dist/server/components/spectrogram/index.js +10 -957
  451. package/dist/server/components/spectrogram/spectrogram.schema.js +2 -4
  452. package/dist/server/components/spectrogram/spectrogram.variables.js +2 -4
  453. package/dist/server/components/spectrum-chart/index.js +9 -858
  454. package/dist/server/components/spectrum-chart/spectrum-chart.schema.js +2 -4
  455. package/dist/server/components/spectrum-chart/spectrum-chart.variables.js +2 -4
  456. package/dist/server/components/speed-dial/index.js +12 -388
  457. package/dist/server/components/speed-dial/speed-dial.schema.js +2 -4
  458. package/dist/server/components/speed-dial/speed-dial.variables.js +2 -4
  459. package/dist/server/components/speed-dial-action/index.js +12 -166
  460. package/dist/server/components/speed-dial-action/speed-dial-action.schema.js +2 -4
  461. package/dist/server/components/speed-dial-action/speed-dial-action.variables.js +2 -4
  462. package/dist/server/components/spinner/index.js +9 -36
  463. package/dist/server/components/spinner/spinner.schema.js +2 -4
  464. package/dist/server/components/spinner/spinner.variables.js +2 -4
  465. package/dist/server/components/stacked-list-item/index.js +9 -122
  466. package/dist/server/components/stacked-list-item/stacked-list-item.schema.js +2 -4
  467. package/dist/server/components/stacked-list-item/stacked-list-item.variables.js +2 -4
  468. package/dist/server/components/stat/index.js +12 -110
  469. package/dist/server/components/stat/stat.schema.js +2 -4
  470. package/dist/server/components/stat/stat.variables.js +2 -4
  471. package/dist/server/components/stat-group/index.js +11 -144
  472. package/dist/server/components/stat-group/stat-group.schema.js +2 -4
  473. package/dist/server/components/stat-group/stat-group.variables.js +2 -4
  474. package/dist/server/components/status-dot/index.js +9 -79
  475. package/dist/server/components/status-dot/status-dot.schema.js +2 -4
  476. package/dist/server/components/status-dot/status-dot.variables.js +2 -4
  477. package/dist/server/components/steps/index.js +10 -191
  478. package/dist/server/components/steps/steps.schema.js +2 -4
  479. package/dist/server/components/steps/steps.variables.js +2 -4
  480. package/dist/server/components/surface/index.js +10 -63
  481. package/dist/server/components/surface/surface.schema.js +2 -4
  482. package/dist/server/components/surface/surface.variables.js +2 -4
  483. package/dist/server/components/tab/index.js +11 -96
  484. package/dist/server/components/tab/tab.schema.js +2 -4
  485. package/dist/server/components/tab/tab.variables.js +2 -4
  486. package/dist/server/components/tab-list/index.js +10 -31
  487. package/dist/server/components/tab-list/tab-list.schema.js +2 -4
  488. package/dist/server/components/tab-list/tab-list.variables.js +2 -4
  489. package/dist/server/components/tab-panel/index.js +10 -40
  490. package/dist/server/components/tab-panel/tab-panel.schema.js +2 -4
  491. package/dist/server/components/tab-panel/tab-panel.variables.js +2 -4
  492. package/dist/server/components/table/index.js +19 -362
  493. package/dist/server/components/table/table.schema.js +2 -4
  494. package/dist/server/components/table/table.variables.js +2 -4
  495. package/dist/server/components/table-body/index.js +11 -49
  496. package/dist/server/components/table-body/table-body.schema.js +2 -4
  497. package/dist/server/components/table-body/table-body.variables.js +2 -4
  498. package/dist/server/components/table-cell/index.js +9 -41
  499. package/dist/server/components/table-cell/table-cell.schema.js +2 -4
  500. package/dist/server/components/table-cell/table-cell.variables.js +2 -4
  501. package/dist/server/components/table-header/index.js +11 -84
  502. package/dist/server/components/table-header/table-header.schema.js +2 -4
  503. package/dist/server/components/table-header/table-header.variables.js +2 -4
  504. package/dist/server/components/table-header-cell/index.js +11 -88
  505. package/dist/server/components/table-header-cell/table-header-cell.schema.js +2 -4
  506. package/dist/server/components/table-header-cell/table-header-cell.variables.js +2 -4
  507. package/dist/server/components/table-row/index.js +13 -130
  508. package/dist/server/components/table-row/table-row.schema.js +2 -4
  509. package/dist/server/components/table-row/table-row.variables.js +2 -4
  510. package/dist/server/components/tabs/index.js +16 -393
  511. package/dist/server/components/tabs/tabs.schema.js +2 -4
  512. package/dist/server/components/tabs/tabs.variables.js +2 -4
  513. package/dist/server/components/tag-input/index.js +16 -6
  514. package/dist/server/components/tag-input/tag-input.schema.js +2 -4
  515. package/dist/server/components/tag-input/tag-input.variables.js +2 -4
  516. package/dist/server/components/textarea/index.js +12 -183
  517. package/dist/server/components/textarea/textarea.schema.js +2 -4
  518. package/dist/server/components/textarea/textarea.variables.js +2 -4
  519. package/dist/server/components/time-field/index.js +10 -286
  520. package/dist/server/components/time-field/time-field.schema.js +2 -4
  521. package/dist/server/components/time-field/time-field.variables.js +2 -4
  522. package/dist/server/components/timeline/index.js +7 -248
  523. package/dist/server/components/timeline/timeline.schema.js +2 -4
  524. package/dist/server/components/timeline/timeline.variables.js +2 -4
  525. package/dist/server/components/toast-region/index.js +10 -717
  526. package/dist/server/components/toast-region/toast-region.schema.js +2 -4
  527. package/dist/server/components/toast-region/toast-region.variables.js +2 -4
  528. package/dist/server/components/toggle/index.js +10 -80
  529. package/dist/server/components/toggle/toggle.schema.js +2 -4
  530. package/dist/server/components/toggle/toggle.variables.js +2 -4
  531. package/dist/server/components/toolbar/index.js +15 -534
  532. package/dist/server/components/toolbar/toolbar.schema.js +2 -4
  533. package/dist/server/components/toolbar/toolbar.variables.js +2 -4
  534. package/dist/server/components/tooltip/index.js +15 -267
  535. package/dist/server/components/tooltip/tooltip.schema.js +2 -4
  536. package/dist/server/components/tooltip/tooltip.variables.js +2 -4
  537. package/dist/server/components/transfer-list/index.js +8 -347
  538. package/dist/server/components/transfer-list/transfer-list.schema.js +2 -4
  539. package/dist/server/components/transfer-list/transfer-list.variables.js +2 -4
  540. package/dist/server/components/tree/index.js +16 -3400
  541. package/dist/server/components/tree/tree.schema.js +2 -4
  542. package/dist/server/components/tree/tree.variables.js +2 -4
  543. package/dist/server/components/tree-item/index.js +11 -696
  544. package/dist/server/components/tree-item/tree-item.schema.js +2 -4
  545. package/dist/server/components/tree-item/tree-item.variables.js +2 -4
  546. package/dist/server/components/typography/index.js +7 -61
  547. package/dist/server/components/typography/typography.schema.js +2 -4
  548. package/dist/server/components/typography/typography.variables.js +2 -4
  549. package/dist/server/components/virtual-list/index.js +14 -200
  550. package/dist/server/components/virtual-list/virtual-list.schema.js +2 -4
  551. package/dist/server/components/virtual-list/virtual-list.variables.js +2 -4
  552. package/dist/server/components/visually-hidden/index.js +9 -37
  553. package/dist/server/components/visually-hidden/visually-hidden.schema.js +2 -4
  554. package/dist/server/components/visually-hidden/visually-hidden.variables.js +2 -4
  555. package/dist/server/components/waveform/index.js +9 -894
  556. package/dist/server/components/waveform/waveform.schema.js +2 -4
  557. package/dist/server/components/waveform/waveform.variables.js +2 -4
  558. package/dist/server/highlighters/shiki/index.js +8 -13
  559. package/dist/server/index.js +723 -44377
  560. package/dist/server/index.server-04pgs1m4.js +9 -0
  561. package/dist/server/index.server-06ak422z.js +726 -0
  562. package/dist/server/index.server-09ky0qhy.js +9 -0
  563. package/dist/server/index.server-0a8m173j.js +73 -0
  564. package/dist/server/index.server-0ed43ctm.js +3834 -0
  565. package/dist/server/index.server-0rj7syca.js +271 -0
  566. package/dist/server/index.server-0tnw5ter.js +39 -0
  567. package/dist/server/index.server-1c79f4fe.js +38 -0
  568. package/dist/server/index.server-1gsgt31t.js +9 -0
  569. package/dist/server/index.server-1k7j69zg.js +20 -0
  570. package/dist/server/index.server-1nzyv1av.js +50 -0
  571. package/dist/server/index.server-1tp7nabp.js +98 -0
  572. package/dist/server/index.server-1vsv7ngz.js +106 -0
  573. package/dist/server/index.server-1x7gd5rm.js +55 -0
  574. package/dist/server/index.server-1yn62azq.js +145 -0
  575. package/dist/server/index.server-20y4mdhm.js +167 -0
  576. package/dist/server/index.server-24kf2kgd.js +9 -0
  577. package/dist/server/index.server-27c3ewc8.js +9 -0
  578. package/dist/server/index.server-2fa12eg1.js +153 -0
  579. package/dist/server/index.server-2fz89mxv.js +9 -0
  580. package/dist/server/index.server-2g8qr4nk.js +72 -0
  581. package/dist/server/index.server-2h3y9v3e.js +15 -0
  582. package/dist/server/index.server-2q8eszkm.js +319 -0
  583. package/dist/server/index.server-2sjf4r4j.js +1036 -0
  584. package/dist/server/index.server-2tr8ba51.js +114 -0
  585. package/dist/server/index.server-2ymxf0ra.js +71 -0
  586. package/dist/server/index.server-317enkqq.js +2 -0
  587. package/dist/server/index.server-324f5vcc.js +195 -0
  588. package/dist/server/index.server-338vqndh.js +9 -0
  589. package/dist/server/index.server-34p02y48.js +149 -0
  590. package/dist/server/index.server-36yahywm.js +423 -0
  591. package/dist/server/index.server-37x76zdn.js +6 -0
  592. package/dist/server/index.server-3cwyrz8f.js +84 -0
  593. package/dist/server/index.server-3f5f7jd4.js +371 -0
  594. package/dist/server/index.server-3fvz5gak.js +30 -0
  595. package/dist/server/index.server-3jz24pb5.js +38 -0
  596. package/dist/server/index.server-3mbgzhq8.js +59 -0
  597. package/dist/server/index.server-3zzwg4ew.js +60 -0
  598. package/dist/server/index.server-41003crj.js +125 -0
  599. package/dist/server/index.server-42qeekwc.js +10 -0
  600. package/dist/server/index.server-493m9fm5.js +14 -0
  601. package/dist/server/index.server-4jc5ny87.js +174 -0
  602. package/dist/server/index.server-4p5znv15.js +92 -0
  603. package/dist/server/index.server-4pv40879.js +68 -0
  604. package/dist/server/index.server-4pyw3ask.js +86 -0
  605. package/dist/server/index.server-4t03p6p4.js +113 -0
  606. package/dist/server/index.server-4wphqyck.js +73 -0
  607. package/dist/server/index.server-52fkd3c2.js +53 -0
  608. package/dist/server/index.server-5599w5gj.js +41 -0
  609. package/dist/server/index.server-578qndbg.js +221 -0
  610. package/dist/server/index.server-5bxfjsbc.js +74 -0
  611. package/dist/server/index.server-5h2t2v49.js +9 -0
  612. package/dist/server/index.server-5hvm9w79.js +9 -0
  613. package/dist/server/index.server-5kt7t4y4.js +69 -0
  614. package/dist/server/index.server-5qknw2zb.js +46 -0
  615. package/dist/server/index.server-5s9645md.js +97 -0
  616. package/dist/server/index.server-5v74e1fz.js +29 -0
  617. package/dist/server/index.server-5zbf7wta.js +4463 -0
  618. package/dist/server/index.server-61g7sxkr.js +191 -0
  619. package/dist/server/index.server-62gb3jcw.js +9 -0
  620. package/dist/server/index.server-6492n4zt.js +107 -0
  621. package/dist/server/index.server-64bppvdn.js +9 -0
  622. package/dist/server/index.server-68hbjs6n.js +1642 -0
  623. package/dist/server/index.server-6dfav8r0.js +142 -0
  624. package/dist/server/index.server-6evw00zj.js +245 -0
  625. package/dist/server/index.server-6jnnp1s8.js +32 -0
  626. package/dist/server/index.server-6mdy1500.js +31 -0
  627. package/dist/server/index.server-6pdmym90.js +11 -0
  628. package/dist/server/index.server-6rw2v7f4.js +457 -0
  629. package/dist/server/index.server-6tc4k9n2.js +281 -0
  630. package/dist/server/index.server-6zgzghtm.js +157 -0
  631. package/dist/server/index.server-70c570r3.js +109 -0
  632. package/dist/server/index.server-76y146qj.js +141 -0
  633. package/dist/server/index.server-77gpgvab.js +68 -0
  634. package/dist/server/index.server-78d33trm.js +88 -0
  635. package/dist/server/index.server-7d9fgwdv.js +284 -0
  636. package/dist/server/index.server-7pdq2w0a.js +17 -0
  637. package/dist/server/index.server-7ptnbrtg.js +9 -0
  638. package/dist/server/index.server-7pxzf0ch.js +9 -0
  639. package/dist/server/index.server-7wsshxkg.js +166 -0
  640. package/dist/server/index.server-7yg3rd66.js +126 -0
  641. package/dist/server/index.server-8bqpdv5z.js +63 -0
  642. package/dist/server/index.server-8cvkc386.js +271 -0
  643. package/dist/server/index.server-8d3tttbj.js +31 -0
  644. package/dist/server/index.server-8gakk9d5.js +168 -0
  645. package/dist/server/index.server-8hdvr9bt.js +18 -0
  646. package/dist/server/index.server-8jm0z4vp.js +38 -0
  647. package/dist/server/index.server-8ysrmagt.js +9 -0
  648. package/dist/server/index.server-92ae8fk6.js +83 -0
  649. package/dist/server/index.server-93xr1xx4.js +192 -0
  650. package/dist/server/index.server-94b7tjs5.js +27 -0
  651. package/dist/server/index.server-94p65bqz.js +38 -0
  652. package/dist/server/index.server-94wsps5p.js +9 -0
  653. package/dist/server/index.server-96fg085d.js +9 -0
  654. package/dist/server/index.server-9cyktwxj.js +9 -0
  655. package/dist/server/index.server-9kas8kq5.js +462 -0
  656. package/dist/server/index.server-9pbg150a.js +9 -0
  657. package/dist/server/index.server-9r0zg6d9.js +102 -0
  658. package/dist/server/index.server-9r6rts7c.js +2 -0
  659. package/dist/server/index.server-9vqgsfds.js +9 -0
  660. package/dist/server/index.server-9w7qdn8h.js +22 -0
  661. package/dist/server/index.server-9xyn021z.js +9 -0
  662. package/dist/server/index.server-abm21gz1.js +41 -0
  663. package/dist/server/index.server-adgnf7ez.js +190 -0
  664. package/dist/server/index.server-ah91j894.js +564 -0
  665. package/dist/server/index.server-ajzk1x9v.js +224 -0
  666. package/dist/server/index.server-amfq2v2p.js +12 -0
  667. package/dist/server/index.server-ans2v9y9.js +45 -0
  668. package/dist/server/index.server-anyk9x1r.js +282 -0
  669. package/dist/server/index.server-att810se.js +362 -0
  670. package/dist/server/index.server-awaramqw.js +277 -0
  671. package/dist/server/index.server-axzcx0e9.js +9 -0
  672. package/dist/server/index.server-b14k8cq5.js +458 -0
  673. package/dist/server/index.server-b54c3kn2.js +22 -0
  674. package/dist/server/index.server-bfkka7x4.js +2 -0
  675. package/dist/server/index.server-bgcpy5vk.js +47 -0
  676. package/dist/server/index.server-bktae19b.js +75 -0
  677. package/dist/server/index.server-bkz7h7jx.js +100 -0
  678. package/dist/server/index.server-br63fj2h.js +9 -0
  679. package/dist/server/index.server-bs46fdxd.js +54 -0
  680. package/dist/server/index.server-bte0dfkh.js +30 -0
  681. package/dist/server/index.server-bxmyxbfm.js +95 -0
  682. package/dist/server/index.server-c29mzp9r.js +48 -0
  683. package/dist/server/index.server-c3gbtj71.js +65 -0
  684. package/dist/server/index.server-c5jyrshr.js +9 -0
  685. package/dist/server/index.server-c7t8taqa.js +23 -0
  686. package/dist/server/index.server-chh0fzxj.js +8 -0
  687. package/dist/server/index.server-chj73na5.js +655 -0
  688. package/dist/server/index.server-cjkcwy18.js +9 -0
  689. package/dist/server/index.server-d2e6xxc3.js +94 -0
  690. package/dist/server/index.server-d63pwytk.js +85 -0
  691. package/dist/server/index.server-d6peankz.js +563 -0
  692. package/dist/server/index.server-dbkczma7.js +83 -0
  693. package/dist/server/index.server-dezmeg8v.js +244 -0
  694. package/dist/server/index.server-dpnwk6w4.js +9 -0
  695. package/dist/server/index.server-dr17jbt2.js +162 -0
  696. package/dist/server/index.server-dsf1bjt5.js +9 -0
  697. package/dist/server/index.server-dt2rpjtk.js +90 -0
  698. package/dist/server/index.server-dxkrc7sf.js +9 -0
  699. package/dist/server/index.server-dyryxwe8.js +67 -0
  700. package/dist/server/index.server-e10j3s54.js +93 -0
  701. package/dist/server/index.server-e1gjs02r.js +147 -0
  702. package/dist/server/index.server-e39mgany.js +9 -0
  703. package/dist/server/index.server-e967et3j.js +77 -0
  704. package/dist/server/index.server-e9g5b01k.js +9 -0
  705. package/dist/server/index.server-ecv75266.js +9 -0
  706. package/dist/server/index.server-eeq2c9pm.js +78 -0
  707. package/dist/server/index.server-eknv9erd.js +169 -0
  708. package/dist/server/index.server-emt82wev.js +447 -0
  709. package/dist/server/index.server-en97tw08.js +9 -0
  710. package/dist/server/index.server-eq2ca4j4.js +105 -0
  711. package/dist/server/index.server-eqa0xxbt.js +72 -0
  712. package/dist/server/index.server-et3p2cfq.js +14 -0
  713. package/dist/server/index.server-ezn8d6zv.js +285 -0
  714. package/dist/server/index.server-f1j0pjt8.js +99 -0
  715. package/dist/server/index.server-f42dvea7.js +294 -0
  716. package/dist/server/index.server-fankxd0h.js +362 -0
  717. package/dist/server/index.server-fcgycatb.js +9 -0
  718. package/dist/server/index.server-fdmb571x.js +116 -0
  719. package/dist/server/index.server-fgpfrjbw.js +9 -0
  720. package/dist/server/index.server-fhnhfrf4.js +9 -0
  721. package/dist/server/index.server-fjzvm2c4.js +175 -0
  722. package/dist/server/index.server-fn57dr4e.js +21 -0
  723. package/dist/server/index.server-fnj6xyr0.js +1028 -0
  724. package/dist/server/index.server-fy9eb0xp.js +101 -0
  725. package/dist/server/index.server-fz2jddt8.js +613 -0
  726. package/dist/server/index.server-g75bhbvb.js +2 -0
  727. package/dist/server/index.server-g8kdhzf2.js +146 -0
  728. package/dist/server/index.server-gae09raw.js +75 -0
  729. package/dist/server/index.server-gbzsb04q.js +71 -0
  730. package/dist/server/index.server-ge07r1p8.js +8 -0
  731. package/dist/server/index.server-ghvqpc50.js +71 -0
  732. package/dist/server/index.server-gj3eb1ce.js +23 -0
  733. package/dist/server/index.server-grb4gyta.js +210 -0
  734. package/dist/server/index.server-gtsdsv75.js +230 -0
  735. package/dist/server/index.server-gw4atb82.js +216 -0
  736. package/dist/server/index.server-gxhj1st8.js +9 -0
  737. package/dist/server/index.server-h1vdh0nc.js +107 -0
  738. package/dist/server/index.server-h54v6c32.js +21 -0
  739. package/dist/server/index.server-h68sx7bz.js +37 -0
  740. package/dist/server/index.server-hmw4afhn.js +25 -0
  741. package/dist/server/index.server-hn1n8dwr.js +9 -0
  742. package/dist/server/index.server-htmd13mc.js +2 -0
  743. package/dist/server/index.server-hxz0tnr9.js +57 -0
  744. package/dist/server/index.server-hzamrkgk.js +256 -0
  745. package/dist/server/index.server-j2kh5fhy.js +9 -0
  746. package/dist/server/index.server-jda8tyzf.js +53 -0
  747. package/dist/server/index.server-jev5qwr3.js +9 -0
  748. package/dist/server/index.server-jh1te4hy.js +9 -0
  749. package/dist/server/index.server-jhvs517p.js +384 -0
  750. package/dist/server/index.server-jky3p49s.js +9 -0
  751. package/dist/server/index.server-js3eva86.js +8 -0
  752. package/dist/server/index.server-jwwwgx0d.js +9 -0
  753. package/dist/server/index.server-jx2qn5an.js +9 -0
  754. package/dist/server/index.server-k02nvs46.js +50 -0
  755. package/dist/server/index.server-k15sq5qf.js +294 -0
  756. package/dist/server/index.server-k1hd2e0x.js +9 -0
  757. package/dist/server/index.server-k454ba7j.js +291 -0
  758. package/dist/server/index.server-k5fmb7tw.js +35 -0
  759. package/dist/server/index.server-k7py0pfc.js +151 -0
  760. package/dist/server/index.server-kb6w1a7c.js +27 -0
  761. package/dist/server/index.server-kjtb596w.js +163 -0
  762. package/dist/server/index.server-kq859dmc.js +1543 -0
  763. package/dist/server/index.server-kykvc153.js +3393 -0
  764. package/dist/server/index.server-m6phax03.js +137 -0
  765. package/dist/server/index.server-m8d6yz6b.js +47 -0
  766. package/dist/server/index.server-m9axazfh.js +9 -0
  767. package/dist/server/index.server-m9n4b1bv.js +9 -0
  768. package/dist/server/index.server-mc6vc1pm.js +63 -0
  769. package/dist/server/index.server-mm4g29h0.js +85 -0
  770. package/dist/server/index.server-msf37rwk.js +9 -0
  771. package/dist/server/index.server-n3zbnw3w.js +194 -0
  772. package/dist/server/index.server-n4zvbkvq.js +9 -0
  773. package/dist/server/index.server-n562tmxd.js +197 -0
  774. package/dist/server/index.server-n86bmg5s.js +393 -0
  775. package/dist/server/index.server-najpstc3.js +224 -0
  776. package/dist/server/index.server-nav1z5d8.js +59 -0
  777. package/dist/server/index.server-nhnvxwz3.js +9 -0
  778. package/dist/server/index.server-nj8mebze.js +14 -0
  779. package/dist/server/index.server-nvktnr2d.js +2311 -0
  780. package/dist/server/index.server-nw1n32dx.js +100 -0
  781. package/dist/server/index.server-nwjjp9t6.js +71 -0
  782. package/dist/server/index.server-nxx9ckb3.js +123 -0
  783. package/dist/server/index.server-ny1hfypg.js +1138 -0
  784. package/dist/server/index.server-nzjy03c0.js +189 -0
  785. package/dist/server/index.server-p045dgmk.js +49 -0
  786. package/dist/server/index.server-p3aw22qv.js +40 -0
  787. package/dist/server/index.server-p617pg5j.js +9 -0
  788. package/dist/server/index.server-p78n7r6g.js +37 -0
  789. package/dist/server/index.server-pa4qcv70.js +9 -0
  790. package/dist/server/index.server-pehx7yrn.js +72 -0
  791. package/dist/server/index.server-pg65gmdb.js +117 -0
  792. package/dist/server/index.server-ps1p8xrf.js +9 -0
  793. package/dist/server/index.server-q160a4x5.js +9 -0
  794. package/dist/server/index.server-q4qh8a6x.js +126 -0
  795. package/dist/server/index.server-q550gsbe.js +83 -0
  796. package/dist/server/index.server-qjdkp02z.js +117 -0
  797. package/dist/server/index.server-qkfd0qa7.js +2 -0
  798. package/dist/server/index.server-qkwnbj88.js +149 -0
  799. package/dist/server/index.server-qq12yqwb.js +76 -0
  800. package/dist/server/index.server-qreadmdy.js +85 -0
  801. package/dist/server/index.server-qwn3yfyq.js +74 -0
  802. package/dist/server/index.server-qxd1ej6r.js +161 -0
  803. package/dist/server/index.server-qz23rh6j.js +34 -0
  804. package/dist/server/index.server-r0wzpqh7.js +113 -0
  805. package/dist/server/index.server-r30hm3ep.js +159 -0
  806. package/dist/server/index.server-rf67m8v5.js +2 -0
  807. package/dist/server/index.server-rpenapvz.js +57 -0
  808. package/dist/server/index.server-rsjrjd13.js +223 -0
  809. package/dist/server/index.server-s0xz0vmh.js +117 -0
  810. package/dist/server/index.server-s84epxbr.js +134 -0
  811. package/dist/server/index.server-sg3pthbn.js +81 -0
  812. package/dist/server/index.server-sk2damtz.js +150 -0
  813. package/dist/server/index.server-sz7qa1vs.js +9 -0
  814. package/dist/server/index.server-sz8sxsj6.js +15 -0
  815. package/dist/server/index.server-t437b1td.js +71 -0
  816. package/dist/server/index.server-t9a3m15z.js +691 -0
  817. package/dist/server/index.server-tesf3qd9.js +446 -0
  818. package/dist/server/index.server-thp727nz.js +9 -0
  819. package/dist/server/index.server-tjbpdh7b.js +47 -0
  820. package/dist/server/index.server-tm012b9x.js +421 -0
  821. package/dist/server/index.server-tp1j7few.js +53 -0
  822. package/dist/server/index.server-tys344bj.js +61 -0
  823. package/dist/server/index.server-v5qqrjej.js +30 -0
  824. package/dist/server/index.server-v6kp8px5.js +68 -0
  825. package/dist/server/index.server-va9x168w.js +30 -0
  826. package/dist/server/index.server-vbnc9fac.js +377 -0
  827. package/dist/server/index.server-vmsmaztb.js +35 -0
  828. package/dist/server/index.server-vqgwwdzz.js +9 -0
  829. package/dist/server/index.server-vqhdvsx5.js +151 -0
  830. package/dist/server/index.server-vzvz108c.js +9 -0
  831. package/dist/server/index.server-w6am2dxc.js +12 -0
  832. package/dist/server/index.server-weae7gs2.js +15 -0
  833. package/dist/server/index.server-wj91h1wk.js +666 -0
  834. package/dist/server/index.server-wqkzae6a.js +41 -0
  835. package/dist/server/index.server-wrx4sd6j.js +9 -0
  836. package/dist/server/index.server-wrz6jqw1.js +59 -0
  837. package/dist/server/index.server-x83rwh0m.js +49 -0
  838. package/dist/server/index.server-xb4r3skb.js +9 -0
  839. package/dist/server/index.server-xecgaeth.js +102 -0
  840. package/dist/server/index.server-xjmx6rm8.js +1162 -0
  841. package/dist/server/index.server-xmphf30z.js +9 -0
  842. package/dist/server/index.server-xnh932xs.js +85 -0
  843. package/dist/server/index.server-xp53vmj5.js +129 -0
  844. package/dist/server/index.server-xpghbgpz.js +22 -0
  845. package/dist/server/index.server-xqmtg1tq.js +9 -0
  846. package/dist/server/index.server-xxddjkmm.js +9 -0
  847. package/dist/server/index.server-y0q949bm.js +27 -0
  848. package/dist/server/index.server-y16zcjfw.js +38 -0
  849. package/dist/server/index.server-y3r39npa.js +54 -0
  850. package/dist/server/index.server-y3xyech8.js +9 -0
  851. package/dist/server/index.server-y68tcxw3.js +52 -0
  852. package/dist/server/index.server-ya3f9g84.js +9 -0
  853. package/dist/server/index.server-yaejrcc0.js +53 -0
  854. package/dist/server/index.server-ygk52jt8.js +62 -0
  855. package/dist/server/index.server-yheh2spx.js +66 -0
  856. package/dist/server/index.server-yr9zjj1r.js +31 -0
  857. package/dist/server/index.server-ytdfzwh1.js +56 -0
  858. package/dist/server/index.server-z63wz94j.js +9 -0
  859. package/dist/server/index.server-z7nvkz8v.js +8 -0
  860. package/dist/server/index.server-zbcza3tc.js +62 -0
  861. package/dist/server/index.server-zbf09rvx.js +111 -0
  862. package/dist/server/index.server-zcfnwc9r.js +37 -0
  863. package/dist/server/index.server-zdg2zpx1.js +28 -0
  864. package/dist/server/index.server-zf0r6cj7.js +9 -0
  865. package/dist/server/index.server-zm9kbbpp.js +9 -0
  866. package/dist/server/index.server-zt7rjnct.js +100 -0
  867. package/dist/server/index.server-zwjp26z8.js +21 -0
  868. package/dist/server/styles/base-guard.js +6 -8
  869. package/dist/utilities/change-tracker.svelte.d.ts +1 -20
  870. package/dist/utilities/change-tracker.types.d.ts +20 -0
  871. package/dist/utilities/document-order.d.ts +0 -16
  872. package/dist/utilities/sortable-controller.svelte.d.ts +1 -47
  873. package/dist/utilities/sortable-controller.types.d.ts +48 -0
  874. package/dist/utilities/typeahead.d.ts +13 -0
  875. package/dist/utilities/use-announcer.svelte.d.ts +1 -24
  876. package/dist/utilities/use-announcer.types.d.ts +24 -0
  877. package/dist/utilities/use-history.svelte.d.ts +1 -52
  878. package/dist/utilities/use-history.types.d.ts +52 -0
  879. package/dist/utilities/use-intersection.svelte.d.ts +2 -13
  880. package/dist/utilities/use-intersection.types.d.ts +13 -0
  881. package/dist/utilities/use-mutation-observer.svelte.d.ts +2 -21
  882. package/dist/utilities/use-mutation-observer.types.d.ts +21 -0
  883. package/dist/utilities/use-reduced-motion.svelte.d.ts +1 -4
  884. package/dist/utilities/use-reduced-motion.types.d.ts +4 -0
  885. package/dist/utilities/use-resize-observer.svelte.d.ts +2 -9
  886. package/dist/utilities/use-resize-observer.types.d.ts +9 -0
  887. package/package.json +347 -174
  888. package/src/_internal/tree-registry.svelte.ts +13 -15
  889. package/src/components/_sortable-item.svelte +1 -1
  890. package/src/components/autocomplete/autocomplete.svelte +15 -2
  891. package/src/components/combobox/README.md +1 -0
  892. package/src/components/combobox/combobox.svelte +55 -0
  893. package/src/components/combobox/combobox.types.ts +2 -0
  894. package/src/components/data-table/README.md +21 -15
  895. package/src/components/data-table/data-table.css +20 -0
  896. package/src/components/data-table/data-table.svelte +157 -5
  897. package/src/components/data-table/data-table.types.ts +27 -0
  898. package/src/components/data-table/index.ts +6 -1
  899. package/src/components/dropdown-item/README.md +12 -12
  900. package/src/components/dropdown-item/dropdown-item.svelte +3 -1
  901. package/src/components/dropdown-item/dropdown-item.types.ts +3 -3
  902. package/src/components/dropdown-menu/dropdown-menu.svelte +32 -1
  903. package/src/components/experimental/json-viewer/index.ts +3 -1
  904. package/src/components/experimental/message/index.ts +3 -1
  905. package/src/components/hover-card/hover-card.svelte +6 -7
  906. package/src/components/json-schema-editor/diff-view.svelte +1 -1
  907. package/src/components/json-schema-editor/form-view.svelte +1 -1
  908. package/src/components/json-schema-editor/json-schema-editor-state.svelte.ts +3 -20
  909. package/src/components/json-schema-editor/json-schema-editor-state.types.ts +21 -0
  910. package/src/components/json-schema-editor/json-schema-toolbar.svelte +1 -1
  911. package/src/components/json-schema-editor/json-view.svelte +1 -1
  912. package/src/components/menu-bar/index.ts +4 -1
  913. package/src/components/menu-bar/menu-bar.svelte +248 -1
  914. package/src/components/segmented-control/README.md +1 -0
  915. package/src/components/segmented-control/segmented-control.svelte +54 -1
  916. package/src/components/segmented-control/segmented-control.types.ts +2 -0
  917. package/src/components/sortable-list/sortable-list.types.ts +4 -4
  918. package/src/components/tag-input/index.ts +4 -1
  919. package/src/components/tooltip/tooltip.svelte +39 -14
  920. package/src/components/tree/tree.svelte +19 -39
  921. package/src/index.ts +5 -4
  922. package/src/utilities/change-tracker.svelte.ts +1 -21
  923. package/src/utilities/change-tracker.types.ts +21 -0
  924. package/src/utilities/document-order.ts +8 -3
  925. package/src/utilities/sortable-controller.svelte.ts +5 -47
  926. package/src/utilities/sortable-controller.types.ts +49 -0
  927. package/src/utilities/typeahead.ts +63 -0
  928. package/src/utilities/use-announcer.svelte.ts +1 -26
  929. package/src/utilities/use-announcer.types.ts +26 -0
  930. package/src/utilities/use-history.svelte.ts +6 -56
  931. package/src/utilities/use-history.types.ts +56 -0
  932. package/src/utilities/use-intersection.svelte.ts +6 -15
  933. package/src/utilities/use-intersection.types.ts +16 -0
  934. package/src/utilities/use-mutation-observer.svelte.ts +6 -23
  935. package/src/utilities/use-mutation-observer.types.ts +24 -0
  936. package/src/utilities/use-reduced-motion.svelte.ts +1 -4
  937. package/src/utilities/use-reduced-motion.types.ts +4 -0
  938. package/src/utilities/use-resize-observer.svelte.ts +6 -11
  939. package/src/utilities/use-resize-observer.types.ts +12 -0
  940. package/dist/server/components/access-gate/index.css +0 -130
  941. package/dist/server/components/accordion/index.css +0 -125
  942. package/dist/server/components/accordion-item/index.css +0 -110
  943. package/dist/server/components/alert/index.css +0 -91
  944. package/dist/server/components/alert-dialog/index.css +0 -14
  945. package/dist/server/components/approval-card/index.css +0 -1767
  946. package/dist/server/components/area-chart/index.css +0 -167
  947. package/dist/server/components/aspect-ratio/index.css +0 -19
  948. package/dist/server/components/autocomplete/index.css +0 -100
  949. package/dist/server/components/avatar/index.css +0 -74
  950. package/dist/server/components/avatar-group/index.css +0 -98
  951. package/dist/server/components/backdrop/index.css +0 -26
  952. package/dist/server/components/badge/index.css +0 -77
  953. package/dist/server/components/banner/index.css +0 -102
  954. package/dist/server/components/bar-chart/index.css +0 -161
  955. package/dist/server/components/breadcrumbs/index.css +0 -90
  956. package/dist/server/components/button/index.css +0 -356
  957. package/dist/server/components/button-group/index.css +0 -109
  958. package/dist/server/components/callout/index.css +0 -84
  959. package/dist/server/components/capability-gate/index.css +0 -132
  960. package/dist/server/components/card/index.css +0 -79
  961. package/dist/server/components/chat/index.css +0 -61
  962. package/dist/server/components/chat-conversation-header/index.css +0 -315
  963. package/dist/server/components/chat-conversation-list/index.css +0 -123
  964. package/dist/server/components/checkbox/index.css +0 -155
  965. package/dist/server/components/checkbox-group/index.css +0 -87
  966. package/dist/server/components/chip/index.css +0 -199
  967. package/dist/server/components/choice-grid/index.css +0 -103
  968. package/dist/server/components/choice-grid-item/index.css +0 -86
  969. package/dist/server/components/code-block/index.css +0 -129
  970. package/dist/server/components/collapsible/index.css +0 -88
  971. package/dist/server/components/color-field/index.css +0 -49
  972. package/dist/server/components/color-picker/index.css +0 -134
  973. package/dist/server/components/color-swatch-picker/index.css +0 -113
  974. package/dist/server/components/combobox/index.css +0 -180
  975. package/dist/server/components/command-item/index.css +0 -90
  976. package/dist/server/components/command-menu/index.css +0 -131
  977. package/dist/server/components/command-palette/index.css +0 -259
  978. package/dist/server/components/confirm-dialog/index.css +0 -10
  979. package/dist/server/components/container/index.css +0 -36
  980. package/dist/server/components/context-menu/index.css +0 -274
  981. package/dist/server/components/copy-button/index.css +0 -46
  982. package/dist/server/components/data-grid/index.css +0 -268
  983. package/dist/server/components/data-list/index.css +0 -20
  984. package/dist/server/components/data-table/index.css +0 -235
  985. package/dist/server/components/date-range-field/index.css +0 -178
  986. package/dist/server/components/description-list/index.css +0 -83
  987. package/dist/server/components/diff-statistics/index.css +0 -81
  988. package/dist/server/components/divider/index.css +0 -45
  989. package/dist/server/components/drawer/index.css +0 -191
  990. package/dist/server/components/dropdown/index.css +0 -265
  991. package/dist/server/components/empty-state/index.css +0 -43
  992. package/dist/server/components/event-stream-viewer/index.css +0 -737
  993. package/dist/server/components/faceted-filter-bar/index.css +0 -117
  994. package/dist/server/components/feed/index.css +0 -74
  995. package/dist/server/components/file-upload/index.css +0 -183
  996. package/dist/server/components/floating-action-button/index.css +0 -149
  997. package/dist/server/components/form-field/index.css +0 -40
  998. package/dist/server/components/form-section/index.css +0 -54
  999. package/dist/server/components/grid/index.css +0 -26
  1000. package/dist/server/components/grid-list/index.css +0 -96
  1001. package/dist/server/components/hover-card/index.css +0 -53
  1002. package/dist/server/components/image/index.css +0 -37
  1003. package/dist/server/components/input/index.css +0 -213
  1004. package/dist/server/components/invocation-rule-builder/index.css +0 -307
  1005. package/dist/server/components/json-schema-editor/index.css +0 -334
  1006. package/dist/server/components/json-viewer/index.css +0 -123
  1007. package/dist/server/components/kanban-board/index.css +0 -233
  1008. package/dist/server/components/kbd/index.css +0 -44
  1009. package/dist/server/components/keyboard-shortcuts/index.css +0 -86
  1010. package/dist/server/components/label/index.css +0 -19
  1011. package/dist/server/components/line-chart/index.css +0 -168
  1012. package/dist/server/components/link/index.css +0 -70
  1013. package/dist/server/components/load-more/index.css +0 -82
  1014. package/dist/server/components/masonry/index.css +0 -14
  1015. package/dist/server/components/matrix-chart/index.css +0 -56
  1016. package/dist/server/components/media-controls/index.css +0 -117
  1017. package/dist/server/components/menu-bar/index.css +0 -378
  1018. package/dist/server/components/message/index.css +0 -54
  1019. package/dist/server/components/modal/index.css +0 -143
  1020. package/dist/server/components/navigation-bar/index.css +0 -157
  1021. package/dist/server/components/navigation-item/index.css +0 -88
  1022. package/dist/server/components/number-input/index.css +0 -111
  1023. package/dist/server/components/pagination/index.css +0 -110
  1024. package/dist/server/components/payload-inspector/index.css +0 -760
  1025. package/dist/server/components/permission-matrix/index.css +0 -169
  1026. package/dist/server/components/phone-input/index.css +0 -108
  1027. package/dist/server/components/pin-input/index.css +0 -91
  1028. package/dist/server/components/popover/index.css +0 -124
  1029. package/dist/server/components/pricing-card/index.css +0 -131
  1030. package/dist/server/components/progress/index.css +0 -136
  1031. package/dist/server/components/radio-group/index.css +0 -246
  1032. package/dist/server/components/rating/index.css +0 -117
  1033. package/dist/server/components/resizable-panels/index.css +0 -101
  1034. package/dist/server/components/review-editor/index.css +0 -259
  1035. package/dist/server/components/run-step-timeline/index.css +0 -658
  1036. package/dist/server/components/schema-form/index.css +0 -107
  1037. package/dist/server/components/scroll-area/index.css +0 -74
  1038. package/dist/server/components/search-field/index.css +0 -162
  1039. package/dist/server/components/secret-value-field/index.css +0 -124
  1040. package/dist/server/components/section-heading/index.css +0 -72
  1041. package/dist/server/components/segmented-control/index.css +0 -237
  1042. package/dist/server/components/select/index.css +0 -150
  1043. package/dist/server/components/selection-popover/index.css +0 -205
  1044. package/dist/server/components/share-card/index.css +0 -121
  1045. package/dist/server/components/sheet/index.css +0 -176
  1046. package/dist/server/components/shortcut-hint/index.css +0 -28
  1047. package/dist/server/components/side-navigation/index.css +0 -220
  1048. package/dist/server/components/side-navigation-group/index.css +0 -109
  1049. package/dist/server/components/sidebar/index.css +0 -86
  1050. package/dist/server/components/skeleton/index.css +0 -31
  1051. package/dist/server/components/slider/index.css +0 -116
  1052. package/dist/server/components/sortable-list/index.css +0 -117
  1053. package/dist/server/components/spectrogram/index.css +0 -46
  1054. package/dist/server/components/spectrum-chart/index.css +0 -51
  1055. package/dist/server/components/speed-dial/index.css +0 -111
  1056. package/dist/server/components/spinner/index.css +0 -57
  1057. package/dist/server/components/stacked-list-item/index.css +0 -114
  1058. package/dist/server/components/stat/index.css +0 -70
  1059. package/dist/server/components/stat-group/index.css +0 -64
  1060. package/dist/server/components/status-dot/index.css +0 -114
  1061. package/dist/server/components/steps/index.css +0 -287
  1062. package/dist/server/components/surface/index.css +0 -25
  1063. package/dist/server/components/tab/index.css +0 -2
  1064. package/dist/server/components/tab-list/index.css +0 -2
  1065. package/dist/server/components/tab-panel/index.css +0 -2
  1066. package/dist/server/components/table/index.css +0 -187
  1067. package/dist/server/components/table-body/index.css +0 -2
  1068. package/dist/server/components/table-cell/index.css +0 -2
  1069. package/dist/server/components/table-header/index.css +0 -2
  1070. package/dist/server/components/table-header-cell/index.css +0 -2
  1071. package/dist/server/components/table-row/index.css +0 -2
  1072. package/dist/server/components/tabs/index.css +0 -152
  1073. package/dist/server/components/tag-input/index.css +0 -170
  1074. package/dist/server/components/textarea/index.css +0 -118
  1075. package/dist/server/components/time-field/index.css +0 -58
  1076. package/dist/server/components/timeline/index.css +0 -143
  1077. package/dist/server/components/toast-region/index.css +0 -227
  1078. package/dist/server/components/toggle/index.css +0 -109
  1079. package/dist/server/components/toolbar/index.css +0 -63
  1080. package/dist/server/components/tooltip/index.css +0 -50
  1081. package/dist/server/components/transfer-list/index.css +0 -132
  1082. package/dist/server/components/tree/index.css +0 -341
  1083. package/dist/server/components/typography/index.css +0 -115
  1084. package/dist/server/components/virtual-list/index.css +0 -30
  1085. package/dist/server/components/waveform/index.css +0 -55
  1086. package/dist/server/index.css +0 -15602
@@ -0,0 +1,3393 @@
1
+ import {
2
+ Selection_popover
3
+ } from "./index.server-r30hm3ep.js";
4
+ import {
5
+ Textarea
6
+ } from "./index.server-41003crj.js";
7
+ import {
8
+ Diff_statistics
9
+ } from "./index.server-4p5znv15.js";
10
+ import {
11
+ Diff_viewer
12
+ } from "./index.server-fnj6xyr0.js";
13
+ import {
14
+ Checkbox
15
+ } from "./index.server-qjdkp02z.js";
16
+ import {
17
+ Markdown_editor
18
+ } from "./index.server-xjmx6rm8.js";
19
+ import {
20
+ Segment
21
+ } from "./index.server-qreadmdy.js";
22
+ import {
23
+ Segmented_control
24
+ } from "./index.server-nxx9ckb3.js";
25
+ import {
26
+ Input
27
+ } from "./index.server-8gakk9d5.js";
28
+ import {
29
+ createCopyState,
30
+ stringifyOrNull
31
+ } from "./index.server-nwjjp9t6.js";
32
+ import {
33
+ Dropdown
34
+ } from "./index.server-kjtb596w.js";
35
+ import {
36
+ Dropdown_trigger
37
+ } from "./index.server-77gpgvab.js";
38
+ import {
39
+ Dropdown_item
40
+ } from "./index.server-r0wzpqh7.js";
41
+ import {
42
+ Dropdown_menu
43
+ } from "./index.server-4jc5ny87.js";
44
+ import {
45
+ createAnchoredOverlay
46
+ } from "./index.server-94b7tjs5.js";
47
+ import {
48
+ useReducedMotion
49
+ } from "./index.server-8hdvr9bt.js";
50
+ import {
51
+ Git_branch,
52
+ Message_square,
53
+ Plus,
54
+ Trash_2
55
+ } from "./index.server-eq2ca4j4.js";
56
+ import {
57
+ Ellipsis,
58
+ Pencil
59
+ } from "./index.server-nav1z5d8.js";
60
+ import {
61
+ X
62
+ } from "./index.server-3fvz5gak.js";
63
+ import {
64
+ Rotate_ccw
65
+ } from "./index.server-e10j3s54.js";
66
+ import {
67
+ File_code
68
+ } from "./index.server-p78n7r6g.js";
69
+ import {
70
+ File_text
71
+ } from "./index.server-y16zcjfw.js";
72
+ import {
73
+ Badge
74
+ } from "./index.server-bkz7h7jx.js";
75
+ import {
76
+ Copy
77
+ } from "./index.server-ans2v9y9.js";
78
+ import {
79
+ Check
80
+ } from "./index.server-y0q949bm.js";
81
+ import {
82
+ Button
83
+ } from "./index.server-34p02y48.js";
84
+ import {
85
+ devWarn
86
+ } from "./index.server-nj8mebze.js";
87
+ import {
88
+ classNames
89
+ } from "./index.server-z7nvkz8v.js";
90
+
91
+ // src/components/review-editor/review-editor.svelte
92
+ import * as $11 from "svelte/internal/server";
93
+
94
+ // src/components/review-editor/review-editor-impl.svelte
95
+ import * as $10 from "svelte/internal/server";
96
+
97
+ // src/components/review-editor/focus-navigation.ts
98
+ var FOCUSABLE_SELECTOR = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
99
+ function createFocusRegionNavigator(regions, options = {}) {
100
+ const { isRegionActive, customFocusHandler } = options;
101
+ function getActiveRegions() {
102
+ if (!isRegionActive) {
103
+ return regions;
104
+ }
105
+ return regions.filter(isRegionActive);
106
+ }
107
+ function getFallbackRegion() {
108
+ const firstRegion = regions[0];
109
+ if (!firstRegion) {
110
+ throw new Error("createFocusRegionNavigator requires at least one focus region.");
111
+ }
112
+ return firstRegion;
113
+ }
114
+ function getCurrentRegion(container) {
115
+ const active = document.activeElement;
116
+ if (!active || !container.contains(active)) {
117
+ return null;
118
+ }
119
+ for (const region of regions) {
120
+ const element = container.querySelector(region.selector);
121
+ if (element?.contains(active)) {
122
+ return region;
123
+ }
124
+ }
125
+ return null;
126
+ }
127
+ function getNextRegion(current, reverse = false) {
128
+ const activeRegions = getActiveRegions();
129
+ if (activeRegions.length === 0) {
130
+ return getFallbackRegion();
131
+ }
132
+ if (!current) {
133
+ return activeRegions[0] ?? getFallbackRegion();
134
+ }
135
+ const currentIndex = activeRegions.findIndex((r) => r.id === current.id);
136
+ if (currentIndex === -1) {
137
+ return activeRegions[0] ?? getFallbackRegion();
138
+ }
139
+ const nextIndex = reverse ? (currentIndex - 1 + activeRegions.length) % activeRegions.length : (currentIndex + 1) % activeRegions.length;
140
+ return activeRegions[nextIndex] ?? getFallbackRegion();
141
+ }
142
+ function focusRegion(container, region) {
143
+ if (customFocusHandler?.(region, container)) {
144
+ return;
145
+ }
146
+ const element = container.querySelector(region.selector);
147
+ if (element instanceof HTMLElement) {
148
+ const focusable = element.querySelector(FOCUSABLE_SELECTOR);
149
+ (focusable ?? element).focus();
150
+ }
151
+ }
152
+ return {
153
+ getCurrentRegion,
154
+ getNextRegion,
155
+ focusRegion,
156
+ getActiveRegions
157
+ };
158
+ }
159
+
160
+ // src/utilities/change-tracker.svelte.ts
161
+ import * as $ from "svelte/internal/server";
162
+ import { contentEquals, contentEqualsWithFrontMatter } from "@lostgradient/cinder/markdown/pipeline";
163
+ function simpleHash(str) {
164
+ let hash = 5381;
165
+ for (let i = 0;i < str.length; i++) {
166
+ hash = (hash << 5) + hash ^ str.charCodeAt(i);
167
+ }
168
+ return hash >>> 0;
169
+ }
170
+ function createChangeTracker(options = {}) {
171
+ const { debounceMs = 300, includeFrontMatter = false } = options;
172
+ let baseline = "";
173
+ let current = "";
174
+ let baselineHash = 0;
175
+ let currentHash = 0;
176
+ let isPending = false;
177
+ let semanticResult = null;
178
+ let verifyTimeout = null;
179
+ const isDirtyFast = $.derived(() => {
180
+ if (baseline === current)
181
+ return false;
182
+ if (baseline.length !== current.length)
183
+ return true;
184
+ return currentHash !== baselineHash;
185
+ });
186
+ const hasChanges = $.derived(() => {
187
+ if (!isDirtyFast())
188
+ return false;
189
+ if (semanticResult !== null)
190
+ return semanticResult;
191
+ return true;
192
+ });
193
+ function doSemanticVerification() {
194
+ const equals = includeFrontMatter ? contentEqualsWithFrontMatter(baseline, current) : contentEquals(baseline, current);
195
+ semanticResult = !equals;
196
+ isPending = false;
197
+ }
198
+ function scheduleVerification(base, curr, baseHash, currHash) {
199
+ if (verifyTimeout) {
200
+ clearTimeout(verifyTimeout);
201
+ verifyTimeout = null;
202
+ }
203
+ semanticResult = null;
204
+ if (base === curr) {
205
+ isPending = false;
206
+ return;
207
+ }
208
+ if (baseHash === currHash && base.length === curr.length) {
209
+ isPending = true;
210
+ verifyTimeout = setTimeout(doSemanticVerification, debounceMs);
211
+ return;
212
+ }
213
+ isPending = true;
214
+ verifyTimeout = setTimeout(doSemanticVerification, debounceMs);
215
+ }
216
+ return {
217
+ get hasChanges() {
218
+ return hasChanges();
219
+ },
220
+ get isPending() {
221
+ return isPending;
222
+ },
223
+ setBaseline(value) {
224
+ baseline = value;
225
+ baselineHash = simpleHash(value);
226
+ semanticResult = null;
227
+ },
228
+ setCurrent(value) {
229
+ current = value;
230
+ currentHash = simpleHash(value);
231
+ semanticResult = null;
232
+ },
233
+ verifyNow() {
234
+ if (verifyTimeout) {
235
+ clearTimeout(verifyTimeout);
236
+ verifyTimeout = null;
237
+ }
238
+ if (baseline === current) {
239
+ isPending = false;
240
+ semanticResult = false;
241
+ return false;
242
+ }
243
+ doSemanticVerification();
244
+ return semanticResult ?? false;
245
+ },
246
+ destroy() {
247
+ if (verifyTimeout) {
248
+ clearTimeout(verifyTimeout);
249
+ verifyTimeout = null;
250
+ }
251
+ }
252
+ };
253
+ }
254
+
255
+ // src/components/review-editor/review-editor-impl.svelte
256
+ import { contentEquals as contentEquals2, normalize } from "@lostgradient/cinder/markdown/pipeline";
257
+ import { textOffsetToProseMirrorPosition } from "@lostgradient/cinder/editor";
258
+ import { createAnchorPlugin, anchorPluginKey } from "@lostgradient/cinder/commentary/anchor-decorations";
259
+ import {
260
+ reanchorQuote,
261
+ ANCHOR_CONTEXT_LENGTH,
262
+ generateId,
263
+ extractMentions,
264
+ createDocumentAnchor
265
+ } from "@lostgradient/cinder/commentary/comments";
266
+ import { buildAnchorFromSelection } from "@lostgradient/cinder/commentary/anchoring";
267
+
268
+ // src/components/review-editor/thread-popover.svelte
269
+ import * as $4 from "svelte/internal/server";
270
+ import { isDocumentAnchor } from "@lostgradient/cinder/commentary/comments";
271
+
272
+ // src/components/review-editor/comment-list.svelte
273
+ import * as $2 from "svelte/internal/server";
274
+
275
+ // src/utilities/format-date.ts
276
+ var MINUTE = 60000;
277
+ var HOUR = 3600000;
278
+ var DAY = 86400000;
279
+ var WEEK = 604800000;
280
+ var MONTH = 2592000000;
281
+ function toDate(input) {
282
+ if (input instanceof Date)
283
+ return input;
284
+ if (typeof input === "number")
285
+ return new Date(input);
286
+ return new Date(input);
287
+ }
288
+ function formatRelativeTime(input) {
289
+ const date = toDate(input);
290
+ const now = Date.now();
291
+ const elapsed = now - date.getTime();
292
+ if (elapsed < MINUTE)
293
+ return "just now";
294
+ if (elapsed < HOUR)
295
+ return `${Math.floor(elapsed / MINUTE)}m ago`;
296
+ if (elapsed < DAY)
297
+ return `${Math.floor(elapsed / HOUR)}h ago`;
298
+ if (elapsed < WEEK)
299
+ return `${Math.floor(elapsed / DAY)}d ago`;
300
+ if (elapsed < MONTH)
301
+ return `${Math.floor(elapsed / WEEK)}w ago`;
302
+ return new Intl.DateTimeFormat("en-US", {
303
+ month: "short",
304
+ day: "numeric",
305
+ year: "numeric",
306
+ timeZone: "UTC"
307
+ }).format(date);
308
+ }
309
+ // src/components/review-editor/comment-list.svelte
310
+ function Comment_list($$renderer, $$props) {
311
+ $$renderer.component(($$renderer2) => {
312
+ let {
313
+ comments,
314
+ currentUserId,
315
+ mode = "edit",
316
+ class: className,
317
+ onupdate,
318
+ ondelete
319
+ } = $$props;
320
+ const visibleComments = $2.derived(() => comments.filter((c) => !("deletedAt" in c) || !c.deletedAt));
321
+ let editingCommentId = null;
322
+ let editingBody = "";
323
+ function startEdit(comment) {
324
+ editingCommentId = comment.id;
325
+ editingBody = comment.body;
326
+ }
327
+ function cancelEdit() {
328
+ editingCommentId = null;
329
+ editingBody = "";
330
+ }
331
+ function saveEdit(commentId) {
332
+ if (editingBody.trim()) {
333
+ onupdate?.(commentId, editingBody.trim());
334
+ }
335
+ cancelEdit();
336
+ }
337
+ function handleEditKeyDown(event, commentId) {
338
+ if (event.key === "Escape") {
339
+ cancelEdit();
340
+ } else if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) {
341
+ event.preventDefault();
342
+ saveEdit(commentId);
343
+ }
344
+ }
345
+ function canEditComment(comment) {
346
+ return mode !== "readonly" && comment.authorId === currentUserId;
347
+ }
348
+ function canDeleteComment(comment) {
349
+ return mode !== "readonly" && comment.authorId === currentUserId;
350
+ }
351
+ $$renderer2.push(`<div${$2.attr_class($2.clsx(classNames("comment-list", className)), "svelte-11dydst")}><!--[-->`);
352
+ const each_array = $2.ensure_array_like(visibleComments());
353
+ for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
354
+ let comment = each_array[$$index];
355
+ $$renderer2.push(`<article class="comment svelte-11dydst"${$2.attr("data-comment-id", comment.id)}><header class="comment-header svelte-11dydst"><div class="comment-author svelte-11dydst"><div class="comment-avatar svelte-11dydst" aria-hidden="true">${$2.escape(comment.authorId.charAt(0).toUpperCase())}</div> <span class="comment-author-name svelte-11dydst">${$2.escape(comment.authorId)}</span></div> <div class="comment-meta svelte-11dydst"><time class="comment-time svelte-11dydst"${$2.attr("datetime", comment.createdAt)}${$2.attr("title", comment.createdAt)}>${$2.escape(formatRelativeTime(comment.createdAt))}</time> `);
356
+ if ("editedAt" in comment && comment.editedAt) {
357
+ $$renderer2.push("<!--[0-->");
358
+ $$renderer2.push(`<span class="comment-edited svelte-11dydst"${$2.attr("title", `Edited ${comment.editedAt}`)}>(edited)</span>`);
359
+ } else {
360
+ $$renderer2.push("<!--[-1-->");
361
+ }
362
+ $$renderer2.push(`<!--]--></div></header> `);
363
+ if (editingCommentId === comment.id) {
364
+ $$renderer2.push("<!--[0-->");
365
+ $$renderer2.push(`<div class="comment-edit svelte-11dydst"><label${$2.attr("for", `${$2.stringify(comment.id)}-edit`)} class="sr-only svelte-11dydst">Edit comment</label> <textarea${$2.attr("id", `${$2.stringify(comment.id)}-edit`)} class="comment-edit-textarea svelte-11dydst"${$2.attr("rows", 3)}>`);
366
+ const $$body = $2.escape(editingBody);
367
+ if ($$body) {
368
+ $$renderer2.push(`${$$body}`);
369
+ } else {}
370
+ $$renderer2.push(`</textarea> <div class="comment-edit-actions svelte-11dydst">`);
371
+ Button($$renderer2, {
372
+ variant: "ghost",
373
+ size: "xs",
374
+ onclick: cancelEdit,
375
+ children: ($$renderer3) => {
376
+ $$renderer3.push(`<!---->Cancel`);
377
+ },
378
+ $$slots: { default: true }
379
+ });
380
+ $$renderer2.push(`<!----> `);
381
+ Button($$renderer2, {
382
+ variant: "primary",
383
+ size: "xs",
384
+ onclick: () => saveEdit(comment.id),
385
+ disabled: !editingBody.trim(),
386
+ children: ($$renderer3) => {
387
+ $$renderer3.push(`<!---->Save`);
388
+ },
389
+ $$slots: { default: true }
390
+ });
391
+ $$renderer2.push(`<!----></div></div>`);
392
+ } else {
393
+ $$renderer2.push("<!--[-1-->");
394
+ $$renderer2.push(`<div class="comment-body svelte-11dydst">${$2.escape(comment.body)}</div>`);
395
+ }
396
+ $$renderer2.push(`<!--]--> `);
397
+ if (mode !== "readonly" && editingCommentId !== comment.id) {
398
+ $$renderer2.push("<!--[0-->");
399
+ $$renderer2.push(`<div class="comment-actions svelte-11dydst">`);
400
+ if (canEditComment(comment)) {
401
+ $$renderer2.push("<!--[0-->");
402
+ $$renderer2.push(`<button type="button" class="comment-action svelte-11dydst" aria-label="Edit comment" title="Edit comment">`);
403
+ Pencil($$renderer2, { class: "icon-sm" });
404
+ $$renderer2.push(`<!----></button>`);
405
+ } else {
406
+ $$renderer2.push("<!--[-1-->");
407
+ }
408
+ $$renderer2.push(`<!--]--> `);
409
+ if (canDeleteComment(comment)) {
410
+ $$renderer2.push("<!--[0-->");
411
+ $$renderer2.push(`<button type="button" class="comment-action comment-action-danger svelte-11dydst" aria-label="Delete comment" title="Delete comment">`);
412
+ Trash_2($$renderer2, { class: "icon-sm" });
413
+ $$renderer2.push(`<!----></button>`);
414
+ } else {
415
+ $$renderer2.push("<!--[-1-->");
416
+ }
417
+ $$renderer2.push(`<!--]--></div>`);
418
+ } else {
419
+ $$renderer2.push("<!--[-1-->");
420
+ }
421
+ $$renderer2.push(`<!--]--></article>`);
422
+ }
423
+ $$renderer2.push(`<!--]--> `);
424
+ if (visibleComments().length === 0) {
425
+ $$renderer2.push("<!--[0-->");
426
+ $$renderer2.push(`<p class="comment-list-empty svelte-11dydst">No comments yet.</p>`);
427
+ } else {
428
+ $$renderer2.push("<!--[-1-->");
429
+ }
430
+ $$renderer2.push(`<!--]--></div>`);
431
+ });
432
+ }
433
+
434
+ // src/components/review-editor/comment-composer.svelte
435
+ import * as $3 from "svelte/internal/server";
436
+ function Comment_composer($$renderer, $$props) {
437
+ $$renderer.component(($$renderer2) => {
438
+ let {
439
+ id,
440
+ value = "",
441
+ placeholder = "Write a comment...",
442
+ disabled = false,
443
+ loading = false,
444
+ error,
445
+ minRows = 3,
446
+ maxRows,
447
+ autoExpand = true,
448
+ class: className,
449
+ onsubmit,
450
+ oncancel,
451
+ actions,
452
+ $$slots,
453
+ $$events,
454
+ ...rest
455
+ } = $$props;
456
+ let textareaElement = null;
457
+ const isMac = $3.derived(() => {
458
+ if (typeof navigator === "undefined")
459
+ return false;
460
+ if ("userAgentData" in navigator && navigator.userAgentData) {
461
+ return navigator.userAgentData.platform === "macOS";
462
+ }
463
+ return /Mac|iPhone|iPad|iPod/.test(navigator.userAgent);
464
+ });
465
+ const errorId = $3.derived(() => `${id}-error`);
466
+ const canSubmit = $3.derived(() => value.trim().length > 0 && !disabled && !loading);
467
+ const dynamicRows = $3.derived(() => {
468
+ if (!autoExpand)
469
+ return minRows;
470
+ const lineCount = (value.match(/\n/g) || []).length + 1;
471
+ let rows = Math.max(minRows, lineCount);
472
+ if (maxRows !== undefined) {
473
+ rows = Math.min(rows, maxRows);
474
+ }
475
+ return rows;
476
+ });
477
+ function handleSubmit(event) {
478
+ event.preventDefault();
479
+ if (!canSubmit())
480
+ return;
481
+ onsubmit?.(value.trim());
482
+ value = "";
483
+ textareaElement?.focus();
484
+ }
485
+ function handleKeyDown(event) {
486
+ if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) {
487
+ event.preventDefault();
488
+ if (canSubmit()) {
489
+ onsubmit?.(value.trim());
490
+ value = "";
491
+ textareaElement?.focus();
492
+ }
493
+ return;
494
+ }
495
+ if (event.key === "Escape" && oncancel) {
496
+ event.preventDefault();
497
+ oncancel();
498
+ }
499
+ }
500
+ function focus() {
501
+ textareaElement?.focus();
502
+ }
503
+ function selectAll() {
504
+ textareaElement?.select();
505
+ }
506
+ function clear() {
507
+ value = "";
508
+ textareaElement?.focus();
509
+ }
510
+ $$renderer2.push(`<form${$3.attr_class($3.clsx(classNames("comment-composer", className)), "svelte-uu92gn")}><label${$3.attr("for", id)} class="sr-only svelte-uu92gn">Comment</label> <div class="comment-composer-textarea-container svelte-uu92gn"><textarea${$3.attributes({
511
+ id,
512
+ class: "comment-composer-textarea",
513
+ "data-has-error": !!error,
514
+ placeholder,
515
+ disabled: disabled || loading,
516
+ rows: dynamicRows(),
517
+ "aria-invalid": error ? "true" : undefined,
518
+ "aria-describedby": error ? errorId() : undefined,
519
+ "aria-busy": loading ? "true" : undefined,
520
+ ...rest
521
+ }, "svelte-uu92gn")}>`);
522
+ const $$body = $3.escape(value);
523
+ if ($$body) {
524
+ $$renderer2.push(`${$$body}`);
525
+ } else {}
526
+ $$renderer2.push(`</textarea> <div class="comment-composer-inline-submit svelte-uu92gn">`);
527
+ Button($$renderer2, {
528
+ type: "submit",
529
+ variant: "primary",
530
+ size: "xs",
531
+ disabled: !canSubmit(),
532
+ loading,
533
+ children: ($$renderer3) => {
534
+ $$renderer3.push(`<!---->${$3.escape(loading ? "Sending..." : "Comment")}`);
535
+ },
536
+ $$slots: { default: true }
537
+ });
538
+ $$renderer2.push(`<!----></div></div> `);
539
+ if (error) {
540
+ $$renderer2.push("<!--[0-->");
541
+ $$renderer2.push(`<p${$3.attr("id", errorId())} class="comment-composer-error svelte-uu92gn" role="alert">${$3.escape(error)}</p>`);
542
+ } else {
543
+ $$renderer2.push("<!--[-1-->");
544
+ }
545
+ $$renderer2.push(`<!--]--> <div class="comment-composer-footer svelte-uu92gn"><span class="comment-composer-hint svelte-uu92gn"><kbd class="svelte-uu92gn">${$3.escape(isMac() ? "⌘" : "Ctrl")}</kbd><kbd class="svelte-uu92gn">↵</kbd> to submit</span> <div class="comment-composer-actions svelte-uu92gn">`);
546
+ if (actions) {
547
+ $$renderer2.push("<!--[0-->");
548
+ actions($$renderer2);
549
+ $$renderer2.push(`<!---->`);
550
+ } else if (oncancel) {
551
+ $$renderer2.push("<!--[1-->");
552
+ Button($$renderer2, {
553
+ variant: "ghost",
554
+ size: "xs",
555
+ onclick: oncancel,
556
+ disabled: loading,
557
+ children: ($$renderer3) => {
558
+ $$renderer3.push(`<!---->Cancel`);
559
+ },
560
+ $$slots: { default: true }
561
+ });
562
+ } else {
563
+ $$renderer2.push("<!--[-1-->");
564
+ }
565
+ $$renderer2.push(`<!--]--></div></div></form>`);
566
+ $3.bind_props($$props, { value, focus, selectAll, clear });
567
+ });
568
+ }
569
+
570
+ // src/components/review-editor/thread-popover.svelte
571
+ function Thread_popover($$renderer, $$props) {
572
+ $$renderer.component(($$renderer2) => {
573
+ let {
574
+ id,
575
+ thread,
576
+ currentUserId,
577
+ mode = "edit",
578
+ position,
579
+ class: className,
580
+ onclose,
581
+ ondelete,
582
+ oncommentcreate,
583
+ oncommentupdate,
584
+ oncommentdelete
585
+ } = $$props;
586
+ const isReadonly = $4.derived(() => mode === "readonly");
587
+ let popoverElement = null;
588
+ const virtualAnchor = $4.derived(() => {
589
+ if (!position)
590
+ return null;
591
+ return {
592
+ getBoundingClientRect: () => ({
593
+ x: position.x,
594
+ y: position.y,
595
+ top: position.y,
596
+ left: position.x,
597
+ right: position.x,
598
+ bottom: position.y,
599
+ width: 0,
600
+ height: 0
601
+ })
602
+ };
603
+ });
604
+ const anchoredOverlay = createAnchoredOverlay({
605
+ open: () => Boolean(position),
606
+ anchor: () => virtualAnchor(),
607
+ panel: () => popoverElement,
608
+ placement: () => "right-start",
609
+ offset: () => 8,
610
+ widthMode: () => "content"
611
+ });
612
+ function handleKeyDown(event) {
613
+ if (event.key === "Escape" && !event.defaultPrevented) {
614
+ event.preventDefault();
615
+ onclose?.();
616
+ }
617
+ }
618
+ function handleDelete() {
619
+ ondelete?.(thread.id);
620
+ }
621
+ function handleCommentUpdate(commentId, body) {
622
+ oncommentupdate?.(thread.id, commentId, body);
623
+ }
624
+ function handleCommentDelete(commentId) {
625
+ oncommentdelete?.(thread.id, commentId);
626
+ }
627
+ function handleCommentCreate(body) {
628
+ oncommentcreate?.(thread.id, body);
629
+ }
630
+ const isDocumentComment = $4.derived(() => isDocumentAnchor(thread.anchor));
631
+ const displayTitle = $4.derived(() => {
632
+ if (isDocumentComment()) {
633
+ return null;
634
+ }
635
+ const quote = thread.anchor.quote;
636
+ return quote.length > 30 ? `${quote.slice(0, 30)}...` : quote;
637
+ });
638
+ $$renderer2.push(`<div${$4.attr("id", id)} role="dialog" aria-modal="true"${$4.attr("aria-labelledby", `${$4.stringify(id)}-title`)} tabindex="-1"${$4.attr_class($4.clsx(classNames("thread-popover", className)), "svelte-jqotwh")}${$4.attr_style(anchoredOverlay.positionStyle)}${$4.attr("data-position-ready", anchoredOverlay.positionReady)}${$4.attr("inert", !anchoredOverlay.positionReady ? true : undefined, true)}><header class="thread-popover-header svelte-jqotwh"><div class="thread-popover-title-row svelte-jqotwh"><h2${$4.attr("id", `${$4.stringify(id)}-title`)} class="thread-popover-title svelte-jqotwh">`);
639
+ if (isDocumentComment()) {
640
+ $$renderer2.push("<!--[0-->");
641
+ $$renderer2.push(`<span class="thread-popover-document-label svelte-jqotwh">`);
642
+ File_text($$renderer2, { class: "icon-xs" });
643
+ $$renderer2.push(`<!----> Document comment</span>`);
644
+ } else {
645
+ $$renderer2.push("<!--[-1-->");
646
+ $$renderer2.push(`<span class="thread-popover-quote svelte-jqotwh"${$4.attr("title", thread.anchor.quote)}>"${$4.escape(displayTitle())}"</span>`);
647
+ }
648
+ $$renderer2.push(`<!--]--></h2> <div class="thread-popover-header-actions svelte-jqotwh">`);
649
+ if (!isReadonly()) {
650
+ $$renderer2.push("<!--[0-->");
651
+ Button($$renderer2, {
652
+ variant: "ghost",
653
+ size: "xs",
654
+ onclick: handleDelete,
655
+ disabled: !currentUserId,
656
+ "aria-label": "Delete thread",
657
+ children: ($$renderer3) => {
658
+ Trash_2($$renderer3, { class: "icon-sm" });
659
+ },
660
+ $$slots: { default: true }
661
+ });
662
+ } else {
663
+ $$renderer2.push("<!--[-1-->");
664
+ }
665
+ $$renderer2.push(`<!--]--> <button type="button" class="thread-popover-close svelte-jqotwh" aria-label="Close">`);
666
+ X($$renderer2, { class: "icon-sm" });
667
+ $$renderer2.push(`<!----></button></div></div></header> <div class="thread-popover-content svelte-jqotwh">`);
668
+ Comment_list($$renderer2, {
669
+ comments: thread.comments,
670
+ currentUserId,
671
+ mode,
672
+ onupdate: handleCommentUpdate,
673
+ ondelete: handleCommentDelete
674
+ });
675
+ $$renderer2.push(`<!----></div> `);
676
+ if (!isReadonly() && currentUserId) {
677
+ $$renderer2.push("<!--[0-->");
678
+ $$renderer2.push(`<div class="thread-popover-composer svelte-jqotwh">`);
679
+ Comment_composer($$renderer2, {
680
+ id: `${$4.stringify(id)}-composer`,
681
+ placeholder: "Reply...",
682
+ onsubmit: handleCommentCreate
683
+ });
684
+ $$renderer2.push(`<!----></div>`);
685
+ } else {
686
+ $$renderer2.push("<!--[-1-->");
687
+ }
688
+ $$renderer2.push(`<!--]--></div>`);
689
+ });
690
+ }
691
+
692
+ // src/components/review-editor/live-region.svelte
693
+ import * as $5 from "svelte/internal/server";
694
+ function Live_region($$renderer, $$props) {
695
+ $$renderer.component(($$renderer2) => {
696
+ let { class: className } = $$props;
697
+ let message = "";
698
+ let priority = "polite";
699
+ let clearTimeoutId = null;
700
+ let announceVersion = 0;
701
+ let isDestroyed = false;
702
+ function announce(text, announcePriority = "polite") {
703
+ if (isDestroyed)
704
+ return;
705
+ const version = ++announceVersion;
706
+ if (clearTimeoutId) {
707
+ clearTimeout(clearTimeoutId);
708
+ clearTimeoutId = null;
709
+ }
710
+ message = "";
711
+ priority = announcePriority;
712
+ queueMicrotask(() => {
713
+ if (isDestroyed || announceVersion !== version)
714
+ return;
715
+ message = text;
716
+ clearTimeoutId = setTimeout(() => {
717
+ if (isDestroyed || announceVersion !== version)
718
+ return;
719
+ message = "";
720
+ clearTimeoutId = null;
721
+ }, 1000);
722
+ });
723
+ }
724
+ if (priority === "polite") {
725
+ $$renderer2.push("<!--[0-->");
726
+ $$renderer2.push(`<div role="status" aria-live="polite" aria-atomic="true"${$5.attr_class($5.clsx(classNames("sr-only", className)))}>${$5.escape(message)}</div>`);
727
+ } else {
728
+ $$renderer2.push("<!--[-1-->");
729
+ $$renderer2.push(`<div role="alert" aria-live="assertive" aria-atomic="true"${$5.attr_class($5.clsx(classNames("sr-only", className)))}>${$5.escape(message)}</div>`);
730
+ }
731
+ $$renderer2.push(`<!--]-->`);
732
+ $5.bind_props($$props, { announce });
733
+ });
734
+ }
735
+
736
+ // src/components/review-editor/export-actions.svelte
737
+ import * as $6 from "svelte/internal/server";
738
+ function Export_actions($$renderer, $$props) {
739
+ $$renderer.component(($$renderer2) => {
740
+ let {
741
+ id,
742
+ onexportcontent,
743
+ onexportsummary,
744
+ onexportjson,
745
+ onexportdiff,
746
+ onexportcomments,
747
+ class: className
748
+ } = $$props;
749
+ const copyState = createCopyState();
750
+ async function handleCopy(format) {
751
+ let content;
752
+ switch (format) {
753
+ case "content":
754
+ if (!onexportcontent)
755
+ return;
756
+ content = onexportcontent();
757
+ break;
758
+ case "summary":
759
+ content = onexportsummary();
760
+ break;
761
+ case "json":
762
+ content = onexportjson();
763
+ break;
764
+ case "diff":
765
+ content = onexportdiff();
766
+ break;
767
+ case "comments":
768
+ if (!onexportcomments)
769
+ return;
770
+ content = onexportcomments();
771
+ break;
772
+ }
773
+ await copyState.trigger(format, content);
774
+ }
775
+ const formatLabels = {
776
+ content: "Content",
777
+ summary: "Summary (for LLM)",
778
+ json: "JSON",
779
+ diff: "Git Diff",
780
+ comments: "Comments"
781
+ };
782
+ $$renderer2.push(`<div${$6.attr_class($6.clsx(classNames("export-actions", className)), "svelte-1cj1bq5")}><div class="cinder-sr-only" aria-live="polite" aria-atomic="true">`);
783
+ if (copyState.copiedKey) {
784
+ $$renderer2.push("<!--[0-->");
785
+ $$renderer2.push(`Copied ${$6.escape(formatLabels[copyState.copiedKey])}`);
786
+ } else {
787
+ $$renderer2.push("<!--[-1-->");
788
+ }
789
+ $$renderer2.push(`<!--]--></div> `);
790
+ Dropdown($$renderer2, {
791
+ id,
792
+ children: ($$renderer3) => {
793
+ Dropdown_trigger($$renderer3, {
794
+ class: "export-trigger",
795
+ "aria-label": "Copy to clipboard",
796
+ showCaret: false,
797
+ children: ($$renderer4) => {
798
+ Copy($$renderer4, { class: "icon-sm" });
799
+ $$renderer4.push(`<!----> <span class="cinder-sr-only">Copy</span>`);
800
+ },
801
+ $$slots: { default: true }
802
+ });
803
+ $$renderer3.push(`<!----> `);
804
+ Dropdown_menu($$renderer3, {
805
+ children: ($$renderer4) => {
806
+ if (onexportcontent) {
807
+ $$renderer4.push("<!--[0-->");
808
+ Dropdown_item($$renderer4, {
809
+ onclick: () => handleCopy("content"),
810
+ children: ($$renderer5) => {
811
+ if (copyState.copiedKey === "content") {
812
+ $$renderer5.push("<!--[0-->");
813
+ Check($$renderer5, { class: "icon-sm export-icon-success" });
814
+ } else {
815
+ $$renderer5.push("<!--[-1-->");
816
+ File_text($$renderer5, { class: "icon-sm" });
817
+ }
818
+ $$renderer5.push(`<!--]--> <span>${$6.escape(formatLabels.content)}</span> `);
819
+ if (copyState.copiedKey === "content") {
820
+ $$renderer5.push("<!--[0-->");
821
+ $$renderer5.push(`<span class="copied-label svelte-1cj1bq5">Copied!</span>`);
822
+ } else {
823
+ $$renderer5.push("<!--[-1-->");
824
+ }
825
+ $$renderer5.push(`<!--]-->`);
826
+ },
827
+ $$slots: { default: true }
828
+ });
829
+ } else {
830
+ $$renderer4.push("<!--[-1-->");
831
+ }
832
+ $$renderer4.push(`<!--]--> `);
833
+ Dropdown_item($$renderer4, {
834
+ onclick: () => handleCopy("summary"),
835
+ children: ($$renderer5) => {
836
+ if (copyState.copiedKey === "summary") {
837
+ $$renderer5.push("<!--[0-->");
838
+ Check($$renderer5, { class: "icon-sm export-icon-success" });
839
+ } else {
840
+ $$renderer5.push("<!--[-1-->");
841
+ File_text($$renderer5, { class: "icon-sm" });
842
+ }
843
+ $$renderer5.push(`<!--]--> <span>${$6.escape(formatLabels.summary)}</span> `);
844
+ if (copyState.copiedKey === "summary") {
845
+ $$renderer5.push("<!--[0-->");
846
+ $$renderer5.push(`<span class="copied-label svelte-1cj1bq5">Copied!</span>`);
847
+ } else {
848
+ $$renderer5.push("<!--[-1-->");
849
+ }
850
+ $$renderer5.push(`<!--]-->`);
851
+ },
852
+ $$slots: { default: true }
853
+ });
854
+ $$renderer4.push(`<!----> `);
855
+ Dropdown_item($$renderer4, {
856
+ onclick: () => handleCopy("diff"),
857
+ children: ($$renderer5) => {
858
+ if (copyState.copiedKey === "diff") {
859
+ $$renderer5.push("<!--[0-->");
860
+ Check($$renderer5, { class: "icon-sm export-icon-success" });
861
+ } else {
862
+ $$renderer5.push("<!--[-1-->");
863
+ Git_branch($$renderer5, { class: "icon-sm" });
864
+ }
865
+ $$renderer5.push(`<!--]--> <span>${$6.escape(formatLabels.diff)}</span> `);
866
+ if (copyState.copiedKey === "diff") {
867
+ $$renderer5.push("<!--[0-->");
868
+ $$renderer5.push(`<span class="copied-label svelte-1cj1bq5">Copied!</span>`);
869
+ } else {
870
+ $$renderer5.push("<!--[-1-->");
871
+ }
872
+ $$renderer5.push(`<!--]-->`);
873
+ },
874
+ $$slots: { default: true }
875
+ });
876
+ $$renderer4.push(`<!----> `);
877
+ if (onexportcomments) {
878
+ $$renderer4.push("<!--[0-->");
879
+ Dropdown_item($$renderer4, {
880
+ onclick: () => handleCopy("comments"),
881
+ children: ($$renderer5) => {
882
+ if (copyState.copiedKey === "comments") {
883
+ $$renderer5.push("<!--[0-->");
884
+ Check($$renderer5, { class: "icon-sm export-icon-success" });
885
+ } else {
886
+ $$renderer5.push("<!--[-1-->");
887
+ Message_square($$renderer5, { class: "icon-sm" });
888
+ }
889
+ $$renderer5.push(`<!--]--> <span>${$6.escape(formatLabels.comments)}</span> `);
890
+ if (copyState.copiedKey === "comments") {
891
+ $$renderer5.push("<!--[0-->");
892
+ $$renderer5.push(`<span class="copied-label svelte-1cj1bq5">Copied!</span>`);
893
+ } else {
894
+ $$renderer5.push("<!--[-1-->");
895
+ }
896
+ $$renderer5.push(`<!--]-->`);
897
+ },
898
+ $$slots: { default: true }
899
+ });
900
+ } else {
901
+ $$renderer4.push("<!--[-1-->");
902
+ }
903
+ $$renderer4.push(`<!--]--> `);
904
+ Dropdown_item($$renderer4, {
905
+ onclick: () => handleCopy("json"),
906
+ children: ($$renderer5) => {
907
+ if (copyState.copiedKey === "json") {
908
+ $$renderer5.push("<!--[0-->");
909
+ Check($$renderer5, { class: "icon-sm export-icon-success" });
910
+ } else {
911
+ $$renderer5.push("<!--[-1-->");
912
+ File_code($$renderer5, { class: "icon-sm" });
913
+ }
914
+ $$renderer5.push(`<!--]--> <span>${$6.escape(formatLabels.json)}</span> `);
915
+ if (copyState.copiedKey === "json") {
916
+ $$renderer5.push("<!--[0-->");
917
+ $$renderer5.push(`<span class="copied-label svelte-1cj1bq5">Copied!</span>`);
918
+ } else {
919
+ $$renderer5.push("<!--[-1-->");
920
+ }
921
+ $$renderer5.push(`<!--]-->`);
922
+ },
923
+ $$slots: { default: true }
924
+ });
925
+ $$renderer4.push(`<!---->`);
926
+ },
927
+ $$slots: { default: true }
928
+ });
929
+ $$renderer3.push(`<!---->`);
930
+ },
931
+ $$slots: { default: true }
932
+ });
933
+ $$renderer2.push(`<!----></div>`);
934
+ });
935
+ }
936
+
937
+ // src/components/review-editor/comment-sidebar.svelte
938
+ import * as $7 from "svelte/internal/server";
939
+
940
+ // src/utilities/truncate.ts
941
+ function truncate(text, maxLength, ellipsis = "…") {
942
+ if (text.length <= maxLength)
943
+ return text;
944
+ if (maxLength <= ellipsis.length)
945
+ return text.slice(0, maxLength);
946
+ return text.slice(0, maxLength - ellipsis.length) + ellipsis;
947
+ }
948
+ // src/components/review-editor/comment-sidebar.svelte
949
+ import { getVisibleComments, isDocumentAnchor as isDocumentAnchor2 } from "@lostgradient/cinder/commentary/comments";
950
+ function Comment_sidebar($$renderer, $$props) {
951
+ $$renderer.component(($$renderer2) => {
952
+ let {
953
+ id,
954
+ threads,
955
+ activeThreadId = null,
956
+ readonly = false,
957
+ onthreadselect,
958
+ onclearall,
959
+ onadddocumentcomment,
960
+ class: className
961
+ } = $$props;
962
+ let showConfirmClear = false;
963
+ let composingDocumentComment = false;
964
+ function handleStartDocumentComment() {
965
+ composingDocumentComment = true;
966
+ }
967
+ function handleCancelDocumentComment() {
968
+ composingDocumentComment = false;
969
+ }
970
+ function handleSubmitDocumentComment(body) {
971
+ onadddocumentcomment?.(body);
972
+ composingDocumentComment = false;
973
+ }
974
+ const $$d = $7.derived(() => {
975
+ const visible = threads.filter((thread) => getVisibleComments(thread).length > 0);
976
+ const docThreads = visible.filter((thread) => isDocumentAnchor2(thread.anchor));
977
+ const txtThreads = visible.filter((thread) => !isDocumentAnchor2(thread.anchor)).sort((a, b) => {
978
+ const posA = a.anchor.from ?? a.anchor.originalPosition?.offset ?? 0;
979
+ const posB = b.anchor.from ?? b.anchor.originalPosition?.offset ?? 0;
980
+ return posA - posB;
981
+ });
982
+ return { documentThreads: docThreads, textThreads: txtThreads };
983
+ }), documentThreads = $7.derived(() => $$d().documentThreads), textThreads = $7.derived(() => $$d().textThreads);
984
+ const visibleThreads = $7.derived(() => [...documentThreads(), ...textThreads()]);
985
+ function getPreview(thread) {
986
+ const comments = getVisibleComments(thread);
987
+ const firstComment = comments[0];
988
+ if (!firstComment)
989
+ return "";
990
+ return truncate(firstComment.body, 80);
991
+ }
992
+ function handleThreadClick(threadId) {
993
+ onthreadselect?.(threadId);
994
+ }
995
+ function handleClearAllClick() {
996
+ showConfirmClear = true;
997
+ }
998
+ function handleConfirmClear() {
999
+ onclearall?.();
1000
+ showConfirmClear = false;
1001
+ }
1002
+ function handleCancelClear() {
1003
+ showConfirmClear = false;
1004
+ }
1005
+ $$renderer2.push(`<aside${$7.attr("id", id)}${$7.attr_class($7.clsx(classNames("comment-sidebar", className)), "svelte-1g8l8sh")} aria-label="Comment threads"><div class="sidebar-header svelte-1g8l8sh">`);
1006
+ Message_square($$renderer2, { class: "icon-sm" });
1007
+ $$renderer2.push(`<!----> <h2 class="sidebar-title svelte-1g8l8sh">Comments</h2> <span class="thread-count svelte-1g8l8sh">${$7.escape(visibleThreads().length)}</span> `);
1008
+ if (!readonly) {
1009
+ $$renderer2.push("<!--[0-->");
1010
+ Button($$renderer2, {
1011
+ variant: "ghost",
1012
+ size: "xs",
1013
+ "aria-label": composingDocumentComment ? "Cancel document comment" : "Add document comment",
1014
+ title: composingDocumentComment ? "Cancel adding document comment" : "Add comment about the entire document",
1015
+ onclick: composingDocumentComment ? handleCancelDocumentComment : handleStartDocumentComment,
1016
+ children: ($$renderer3) => {
1017
+ if (composingDocumentComment) {
1018
+ $$renderer3.push("<!--[0-->");
1019
+ X($$renderer3, { class: "icon-sm" });
1020
+ } else {
1021
+ $$renderer3.push("<!--[-1-->");
1022
+ Plus($$renderer3, { class: "icon-sm" });
1023
+ }
1024
+ $$renderer3.push(`<!--]-->`);
1025
+ },
1026
+ $$slots: { default: true }
1027
+ });
1028
+ } else {
1029
+ $$renderer2.push("<!--[-1-->");
1030
+ }
1031
+ $$renderer2.push(`<!--]--> `);
1032
+ if (!readonly && visibleThreads().length > 0) {
1033
+ $$renderer2.push("<!--[0-->");
1034
+ Dropdown($$renderer2, {
1035
+ id: `${$7.stringify(id)}-actions`,
1036
+ children: ($$renderer3) => {
1037
+ Dropdown_trigger($$renderer3, {
1038
+ class: "actions-trigger",
1039
+ "aria-label": "Comment actions",
1040
+ showCaret: false,
1041
+ children: ($$renderer4) => {
1042
+ Ellipsis($$renderer4, { class: "icon-sm" });
1043
+ },
1044
+ $$slots: { default: true }
1045
+ });
1046
+ $$renderer3.push(`<!----> `);
1047
+ Dropdown_menu($$renderer3, {
1048
+ children: ($$renderer4) => {
1049
+ Dropdown_item($$renderer4, {
1050
+ variant: "danger",
1051
+ onclick: handleClearAllClick,
1052
+ children: ($$renderer5) => {
1053
+ Trash_2($$renderer5, { class: "icon-sm" });
1054
+ $$renderer5.push(`<!----> Clear all comments`);
1055
+ },
1056
+ $$slots: { default: true }
1057
+ });
1058
+ },
1059
+ $$slots: { default: true }
1060
+ });
1061
+ $$renderer3.push(`<!---->`);
1062
+ },
1063
+ $$slots: { default: true }
1064
+ });
1065
+ } else {
1066
+ $$renderer2.push("<!--[-1-->");
1067
+ }
1068
+ $$renderer2.push(`<!--]--></div> `);
1069
+ if (showConfirmClear) {
1070
+ $$renderer2.push("<!--[0-->");
1071
+ $$renderer2.push(`<div class="confirm-clear svelte-1g8l8sh" role="alertdialog"${$7.attr("aria-labelledby", `${$7.stringify(id)}-confirm-title`)}><p${$7.attr("id", `${$7.stringify(id)}-confirm-title`)} class="confirm-message svelte-1g8l8sh">Delete all ${$7.escape(visibleThreads().length)} comment threads?</p> <div class="confirm-actions svelte-1g8l8sh">`);
1072
+ Button($$renderer2, {
1073
+ variant: "secondary",
1074
+ size: "xs",
1075
+ onclick: handleCancelClear,
1076
+ children: ($$renderer3) => {
1077
+ $$renderer3.push(`<!---->Cancel`);
1078
+ },
1079
+ $$slots: { default: true }
1080
+ });
1081
+ $$renderer2.push(`<!----> `);
1082
+ Button($$renderer2, {
1083
+ variant: "danger",
1084
+ size: "xs",
1085
+ onclick: handleConfirmClear,
1086
+ children: ($$renderer3) => {
1087
+ $$renderer3.push(`<!---->Delete All`);
1088
+ },
1089
+ $$slots: { default: true }
1090
+ });
1091
+ $$renderer2.push(`<!----></div></div>`);
1092
+ } else {
1093
+ $$renderer2.push("<!--[-1-->");
1094
+ }
1095
+ $$renderer2.push(`<!--]--> `);
1096
+ if (composingDocumentComment) {
1097
+ $$renderer2.push("<!--[0-->");
1098
+ $$renderer2.push(`<div class="document-comment-composer svelte-1g8l8sh"><div class="document-comment-header svelte-1g8l8sh">`);
1099
+ File_text($$renderer2, { class: "icon-xs" });
1100
+ $$renderer2.push(`<!----> <span>Document comment</span></div> `);
1101
+ Comment_composer($$renderer2, {
1102
+ id: `${$7.stringify(id)}-document-composer`,
1103
+ placeholder: "Add a comment about the entire document...",
1104
+ onsubmit: handleSubmitDocumentComment,
1105
+ oncancel: handleCancelDocumentComment
1106
+ });
1107
+ $$renderer2.push(`<!----></div>`);
1108
+ } else {
1109
+ $$renderer2.push("<!--[-1-->");
1110
+ }
1111
+ $$renderer2.push(`<!--]--> <div class="thread-list svelte-1g8l8sh">`);
1112
+ if (visibleThreads().length === 0) {
1113
+ $$renderer2.push("<!--[0-->");
1114
+ $$renderer2.push(`<div class="empty-state svelte-1g8l8sh"><p class="empty-message svelte-1g8l8sh">No comments yet</p> <p class="empty-hint svelte-1g8l8sh">Select text or click + to add a comment</p></div>`);
1115
+ } else {
1116
+ $$renderer2.push("<!--[-1-->");
1117
+ $$renderer2.push(`<!--[-->`);
1118
+ const each_array = $7.ensure_array_like(documentThreads());
1119
+ for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
1120
+ let thread = each_array[$$index];
1121
+ $$renderer2.push(`<button type="button" class="thread-item svelte-1g8l8sh" data-document="true"${$7.attr("data-active", activeThreadId === thread.id || undefined)}${$7.attr("aria-current", activeThreadId === thread.id ? "true" : undefined)}><div class="thread-document-label svelte-1g8l8sh">`);
1122
+ File_text($$renderer2, { class: "icon-xs" });
1123
+ $$renderer2.push(`<!----> <span>Document comment</span></div> <p class="thread-preview svelte-1g8l8sh">${$7.escape(getPreview(thread))}</p></button>`);
1124
+ }
1125
+ $$renderer2.push(`<!--]--> <!--[-->`);
1126
+ const each_array_1 = $7.ensure_array_like(textThreads());
1127
+ for (let $$index_1 = 0, $$length = each_array_1.length;$$index_1 < $$length; $$index_1++) {
1128
+ let thread = each_array_1[$$index_1];
1129
+ $$renderer2.push(`<button type="button" class="thread-item svelte-1g8l8sh"${$7.attr("data-active", activeThreadId === thread.id || undefined)}${$7.attr("aria-current", activeThreadId === thread.id ? "true" : undefined)}><blockquote class="thread-quote svelte-1g8l8sh">${$7.escape(truncate(thread.anchor.quote, 60))}</blockquote> <p class="thread-preview svelte-1g8l8sh">${$7.escape(getPreview(thread))}</p></button>`);
1130
+ }
1131
+ $$renderer2.push(`<!--]-->`);
1132
+ }
1133
+ $$renderer2.push(`<!--]--></div></aside>`);
1134
+ });
1135
+ }
1136
+
1137
+ // src/components/review-editor/front-matter-fields.svelte
1138
+ import * as $8 from "svelte/internal/server";
1139
+ import { untrack } from "svelte";
1140
+ import { parseFrontMatter as parseFrontMatter2, validateFrontMatter as validateFrontMatter2 } from "@lostgradient/cinder/markdown/pipeline";
1141
+
1142
+ // src/components/review-editor/review-editor-front-matter.ts
1143
+ import {
1144
+ parseFrontMatter,
1145
+ serializeYaml,
1146
+ stringifyFrontMatter,
1147
+ validateFrontMatter
1148
+ } from "@lostgradient/cinder/markdown/pipeline";
1149
+ function parseReviewEditorFrontMatter(markdown) {
1150
+ const parsed = parseFrontMatter(markdown);
1151
+ const bodyOffset = parsed.hasFrontMatter ? markdown.length - parsed.body.length : 0;
1152
+ return {
1153
+ hasFrontMatter: parsed.hasFrontMatter,
1154
+ data: parsed.data,
1155
+ raw: parsed.hasFrontMatter ? parsed.raw ?? "" : null,
1156
+ body: parsed.hasFrontMatter ? parsed.body : markdown,
1157
+ bodyOffset
1158
+ };
1159
+ }
1160
+ function reviewStateToMarkdown(state) {
1161
+ if (parseReviewEditorFrontMatter(state.content).hasFrontMatter)
1162
+ return state.content;
1163
+ if (state.frontMatterRaw == null && state.frontMatter == null)
1164
+ return state.content;
1165
+ if (state.frontMatterRaw === undefined)
1166
+ return state.content;
1167
+ return stringifyFrontMatter(state.frontMatter ?? null, state.content, {
1168
+ originalRaw: state.frontMatterRaw,
1169
+ originalData: state.frontMatter ?? null,
1170
+ preserveEmptyFrontMatter: true
1171
+ });
1172
+ }
1173
+ function combineFrontMatterAndBody(frontMatter, body) {
1174
+ if (!frontMatter.hasFrontMatter)
1175
+ return body;
1176
+ if (frontMatter.data === null && frontMatter.raw !== null && frontMatter.raw.trim() !== "") {
1177
+ return `---
1178
+ ${frontMatter.raw}
1179
+ ---
1180
+ ${body}`;
1181
+ }
1182
+ return stringifyFrontMatter(frontMatter.data, body, {
1183
+ originalRaw: frontMatter.raw,
1184
+ originalData: frontMatter.data,
1185
+ preserveEmptyFrontMatter: true
1186
+ });
1187
+ }
1188
+ function replaceFrontMatterData(markdown, data) {
1189
+ const frontMatter = parseReviewEditorFrontMatter(markdown);
1190
+ if (!frontMatter.hasFrontMatter)
1191
+ return markdown;
1192
+ return stringifyFrontMatter(data, frontMatter.body, {
1193
+ originalRaw: frontMatter.raw,
1194
+ originalData: frontMatter.data,
1195
+ preserveEmptyFrontMatter: true
1196
+ });
1197
+ }
1198
+ function serializeYamlFieldValue(value) {
1199
+ const raw = serializeYaml({ value });
1200
+ if (raw.startsWith(`value:
1201
+ `)) {
1202
+ return raw.slice(`value:
1203
+ `.length).replace(/^ /gm, "");
1204
+ }
1205
+ return raw.replace(/^value:\s?/, "");
1206
+ }
1207
+ function parseYamlFieldValue(raw) {
1208
+ const validation = validateFrontMatter(`value:
1209
+ ${indentYaml(raw)}`);
1210
+ if (!validation.valid) {
1211
+ return { valid: false, error: validation.error ?? "Invalid YAML syntax" };
1212
+ }
1213
+ const parsed = parseFrontMatter(`---
1214
+ value:
1215
+ ${indentYaml(raw)}
1216
+ ---
1217
+ `);
1218
+ return { valid: true, value: parsed.data?.["value"] };
1219
+ }
1220
+ function documentPositionToBodyPosition(position, bodyOffset) {
1221
+ return Math.max(0, position - bodyOffset);
1222
+ }
1223
+ function bodyPositionToDocumentPosition(position, bodyOffset) {
1224
+ return position + bodyOffset;
1225
+ }
1226
+ function documentAnchorToBodyAnchor(anchor, bodyOffset) {
1227
+ return offsetAnchor(anchor, -bodyOffset);
1228
+ }
1229
+ function documentPersistedAnchorToBodyAnchor(anchor, bodyOffset) {
1230
+ return offsetPersistedAnchor(anchor, -bodyOffset);
1231
+ }
1232
+ function bodyAnchorToDocumentAnchor(anchor, bodyOffset, documentText) {
1233
+ return offsetAnchor(anchor, bodyOffset, documentText);
1234
+ }
1235
+ function remapDocumentAnchorBodyOffset(anchor, previousBodyOffset, nextBodyOffset, nextDocumentText) {
1236
+ if (previousBodyOffset === nextBodyOffset)
1237
+ return anchor;
1238
+ return bodyAnchorToDocumentAnchor(documentAnchorToBodyAnchor(anchor, previousBodyOffset), nextBodyOffset, nextDocumentText);
1239
+ }
1240
+ function bodyAnchorUpdateToDocumentAnchorUpdate(update, bodyOffset) {
1241
+ const documentUpdate = {
1242
+ ...update,
1243
+ from: bodyPositionToDocumentPosition(update.from, bodyOffset),
1244
+ to: bodyPositionToDocumentPosition(update.to, bodyOffset)
1245
+ };
1246
+ if (update.lastKnownOffset !== undefined) {
1247
+ documentUpdate.lastKnownOffset = bodyPositionToDocumentPosition(update.lastKnownOffset, bodyOffset);
1248
+ }
1249
+ return documentUpdate;
1250
+ }
1251
+ function offsetAnchor(anchor, offset, documentText) {
1252
+ if (anchor.type === "document")
1253
+ return anchor;
1254
+ const originalPosition = anchor.originalPosition;
1255
+ const originalPositionOffset = originalPosition === undefined ? undefined : Math.max(0, originalPosition.offset + offset);
1256
+ return {
1257
+ ...anchor,
1258
+ from: Math.max(0, anchor.from + offset),
1259
+ to: Math.max(0, anchor.to + offset),
1260
+ lastKnownOffset: anchor.lastKnownOffset === undefined ? undefined : Math.max(0, anchor.lastKnownOffset + offset),
1261
+ originalPosition: originalPosition === undefined || originalPositionOffset === undefined ? undefined : textOffsetToLineColumn(documentText, originalPositionOffset, originalPosition)
1262
+ };
1263
+ }
1264
+ function offsetPersistedAnchor(anchor, offset) {
1265
+ if (anchor.type === "document")
1266
+ return anchor;
1267
+ const originalPosition = anchor.originalPosition;
1268
+ const originalPositionOffset = originalPosition === undefined ? undefined : Math.max(0, originalPosition.offset + offset);
1269
+ return {
1270
+ ...anchor,
1271
+ lastKnownOffset: anchor.lastKnownOffset === undefined ? undefined : Math.max(0, anchor.lastKnownOffset + offset),
1272
+ originalPosition: originalPosition === undefined || originalPositionOffset === undefined ? undefined : { ...originalPosition, offset: originalPositionOffset }
1273
+ };
1274
+ }
1275
+ function indentYaml(raw) {
1276
+ if (raw.trim() === "")
1277
+ return " null";
1278
+ return raw.split(`
1279
+ `).map((line) => line.trim() === "" ? line : ` ${line}`).join(`
1280
+ `);
1281
+ }
1282
+ function textOffsetToLineColumn(documentText, offset, fallback) {
1283
+ if (documentText === undefined) {
1284
+ return { ...fallback, offset };
1285
+ }
1286
+ let line = 1;
1287
+ let column = 1;
1288
+ const clampedOffset = Math.max(0, Math.min(offset, documentText.length));
1289
+ for (let index = 0;index < clampedOffset; index++) {
1290
+ if (documentText[index] === `
1291
+ `) {
1292
+ line++;
1293
+ column = 1;
1294
+ } else {
1295
+ column++;
1296
+ }
1297
+ }
1298
+ return { offset: clampedOffset, line, column };
1299
+ }
1300
+
1301
+ // src/components/review-editor/front-matter-fields.svelte
1302
+ function Front_matter_fields($$renderer, $$props) {
1303
+ $$renderer.component(($$renderer2) => {
1304
+ let { id, data, raw, readonly = false, onchange } = $$props;
1305
+ const entries = $8.derived(() => Object.entries(data ?? {}));
1306
+ const hasParsedFields = $8.derived(() => data !== null && entries().length > 0);
1307
+ const shouldShowRawYaml = $8.derived(() => !hasParsedFields() && raw !== null);
1308
+ let rawDraft = untrack(() => raw) ?? "";
1309
+ let rawError = undefined;
1310
+ let lastRaw = null;
1311
+ let complexDrafts = {};
1312
+ let complexErrors = {};
1313
+ let lastComplexKeys = "";
1314
+ function patchField(name, value) {
1315
+ if (readonly)
1316
+ return;
1317
+ onchange({ ...data ?? {}, [name]: value });
1318
+ }
1319
+ function handleNumberInput(name, rawValue) {
1320
+ if (rawValue.trim() === "") {
1321
+ patchField(name, null);
1322
+ return;
1323
+ }
1324
+ const parsed = Number(rawValue);
1325
+ if (!Number.isFinite(parsed))
1326
+ return;
1327
+ patchField(name, parsed);
1328
+ }
1329
+ function handleComplexInput(name, rawValue) {
1330
+ complexDrafts = { ...complexDrafts, [name]: rawValue };
1331
+ const parsed = parseYamlFieldValue(rawValue);
1332
+ if (!parsed.valid) {
1333
+ complexErrors = { ...complexErrors, [name]: parsed.error };
1334
+ return;
1335
+ }
1336
+ const nextErrors = { ...complexErrors };
1337
+ delete nextErrors[name];
1338
+ complexErrors = nextErrors;
1339
+ patchField(name, parsed.value);
1340
+ }
1341
+ function handleRawInput(rawValue) {
1342
+ rawDraft = rawValue;
1343
+ const validation = validateFrontMatter2(rawValue);
1344
+ rawError = validation.error;
1345
+ if (!validation.valid || readonly)
1346
+ return;
1347
+ const parsed = parseFrontMatter2(`---
1348
+ ${rawValue}
1349
+ ---
1350
+ `);
1351
+ onchange(parsed.data);
1352
+ }
1353
+ function fieldId(name) {
1354
+ return `${id}-${name.replace(/[^a-zA-Z0-9_-]/g, "-")}`;
1355
+ }
1356
+ function isComplexValue(value) {
1357
+ return typeof value === "object" && value !== null;
1358
+ }
1359
+ $$renderer2.push(`<section class="review-editor-front-matter"${$8.attr("aria-labelledby", `${id}-heading`)}><div class="review-editor-front-matter__header"><h3${$8.attr("id", `${id}-heading`)} class="review-editor-front-matter__title">Front matter</h3></div> <div class="review-editor-front-matter__body">`);
1360
+ if (hasParsedFields()) {
1361
+ $$renderer2.push("<!--[0-->");
1362
+ $$renderer2.push(`<!--[-->`);
1363
+ const each_array = $8.ensure_array_like(entries());
1364
+ for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
1365
+ let [name, fieldValue] = each_array[$$index];
1366
+ $$renderer2.push(`<div class="review-editor-front-matter__field">`);
1367
+ if (typeof fieldValue === "boolean") {
1368
+ $$renderer2.push("<!--[0-->");
1369
+ Checkbox($$renderer2, {
1370
+ id: fieldId(name),
1371
+ label: name,
1372
+ checked: fieldValue,
1373
+ disabled: readonly,
1374
+ onchange: (event) => patchField(name, event.currentTarget.checked)
1375
+ });
1376
+ } else if (typeof fieldValue === "number") {
1377
+ $$renderer2.push("<!--[1-->");
1378
+ Input($$renderer2, {
1379
+ id: fieldId(name),
1380
+ label: name,
1381
+ value: String(fieldValue),
1382
+ disabled: readonly,
1383
+ oninput: (event) => handleNumberInput(name, event.currentTarget.value)
1384
+ });
1385
+ } else if (typeof fieldValue === "string") {
1386
+ $$renderer2.push("<!--[2-->");
1387
+ Input($$renderer2, {
1388
+ id: fieldId(name),
1389
+ label: name,
1390
+ value: fieldValue,
1391
+ disabled: readonly,
1392
+ oninput: (event) => patchField(name, event.currentTarget.value)
1393
+ });
1394
+ } else if (isComplexValue(fieldValue)) {
1395
+ $$renderer2.push("<!--[3-->");
1396
+ Textarea($$renderer2, {
1397
+ id: fieldId(name),
1398
+ label: name,
1399
+ value: complexDrafts[name] ?? serializeYamlFieldValue(fieldValue),
1400
+ error: complexErrors[name] ?? "",
1401
+ disabled: readonly,
1402
+ rows: Math.max(3, (complexDrafts[name] ?? serializeYamlFieldValue(fieldValue)).split(`
1403
+ `).length),
1404
+ oninput: (event) => handleComplexInput(name, event.currentTarget.value)
1405
+ });
1406
+ } else {
1407
+ $$renderer2.push("<!--[-1-->");
1408
+ Input($$renderer2, {
1409
+ id: fieldId(name),
1410
+ label: name,
1411
+ value: fieldValue === null ? "null" : String(fieldValue),
1412
+ disabled: readonly,
1413
+ oninput: (event) => patchField(name, event.currentTarget.value)
1414
+ });
1415
+ }
1416
+ $$renderer2.push(`<!--]--></div>`);
1417
+ }
1418
+ $$renderer2.push(`<!--]-->`);
1419
+ } else if (shouldShowRawYaml()) {
1420
+ $$renderer2.push("<!--[1-->");
1421
+ Textarea($$renderer2, {
1422
+ id: `${id}-raw`,
1423
+ label: "YAML",
1424
+ value: rawDraft,
1425
+ error: rawError ?? "",
1426
+ disabled: readonly,
1427
+ rows: Math.max(3, rawDraft.split(`
1428
+ `).length),
1429
+ oninput: (event) => handleRawInput(event.currentTarget.value)
1430
+ });
1431
+ } else {
1432
+ $$renderer2.push("<!--[-1-->");
1433
+ $$renderer2.push(`<p class="review-editor-front-matter__empty">No front matter fields.</p>`);
1434
+ }
1435
+ $$renderer2.push(`<!--]--></div></section>`);
1436
+ });
1437
+ }
1438
+
1439
+ // src/components/review-editor/review-editor-controls.svelte
1440
+ import * as $9 from "svelte/internal/server";
1441
+ function Review_editor_controls($$renderer, $$props) {
1442
+ $$renderer.component(($$renderer2) => {
1443
+ let {
1444
+ id,
1445
+ activeView,
1446
+ viewPanelIds,
1447
+ onViewChange,
1448
+ showDiffTabs = true,
1449
+ diffStats,
1450
+ diffViewMode = "unified",
1451
+ hasContentChanges = false,
1452
+ readonly = false,
1453
+ onRevertAll,
1454
+ commentCount = 0,
1455
+ sidebarOpen = false,
1456
+ onSidebarToggle,
1457
+ trailing,
1458
+ class: className
1459
+ } = $$props;
1460
+ function handleViewChange(view) {
1461
+ onViewChange?.(view);
1462
+ }
1463
+ const commentsToggleLabel = $9.derived(() => `${sidebarOpen ? "Close" : "Open"} comments sidebar (${commentCount} ${commentCount === 1 ? "comment" : "comments"})`);
1464
+ let previousCommentCount = null;
1465
+ let liveAnnouncementText = "";
1466
+ let $$settled = true;
1467
+ let $$inner_renderer;
1468
+ function $$render_inner($$renderer3) {
1469
+ $$renderer3.push(`<div${$9.attr("id", id)}${$9.attr_class($9.clsx(classNames("review-editor-controls", className)), "svelte-161pl7w")} role="toolbar" aria-label="Review editor controls"><div class="controls-leading svelte-161pl7w">`);
1470
+ Segmented_control($$renderer3, {
1471
+ id: `${$9.stringify(id)}-view-mode`,
1472
+ label: "Review editor view",
1473
+ hideLabel: true,
1474
+ variant: "tablist",
1475
+ size: "sm",
1476
+ density: "toolbar",
1477
+ value: activeView,
1478
+ onchange: handleViewChange,
1479
+ children: ($$renderer4) => {
1480
+ {
1481
+ let leading = function($$renderer5) {
1482
+ Pencil($$renderer5, { class: "icon-xs" });
1483
+ };
1484
+ Segment($$renderer4, {
1485
+ value: "editor",
1486
+ controls: viewPanelIds?.editor,
1487
+ leading,
1488
+ children: ($$renderer5) => {
1489
+ $$renderer5.push(`<!---->Editor`);
1490
+ },
1491
+ $$slots: { leading: true, default: true }
1492
+ });
1493
+ }
1494
+ $$renderer4.push(`<!----> `);
1495
+ if (showDiffTabs) {
1496
+ $$renderer4.push("<!--[0-->");
1497
+ {
1498
+ let leading = function($$renderer5) {
1499
+ Git_branch($$renderer5, { class: "icon-xs" });
1500
+ };
1501
+ Segment($$renderer4, {
1502
+ value: "diff",
1503
+ controls: viewPanelIds?.diff,
1504
+ leading,
1505
+ children: ($$renderer5) => {
1506
+ $$renderer5.push(`<!---->Diff`);
1507
+ },
1508
+ $$slots: { leading: true, default: true }
1509
+ });
1510
+ }
1511
+ $$renderer4.push(`<!----> `);
1512
+ {
1513
+ let leading = function($$renderer5) {
1514
+ File_text($$renderer5, { class: "icon-xs" });
1515
+ };
1516
+ Segment($$renderer4, {
1517
+ value: "summary",
1518
+ controls: viewPanelIds?.summary,
1519
+ leading,
1520
+ children: ($$renderer5) => {
1521
+ $$renderer5.push(`<!---->Summary`);
1522
+ },
1523
+ $$slots: { leading: true, default: true }
1524
+ });
1525
+ }
1526
+ $$renderer4.push(`<!---->`);
1527
+ } else {
1528
+ $$renderer4.push("<!--[-1-->");
1529
+ }
1530
+ $$renderer4.push(`<!--]-->`);
1531
+ },
1532
+ $$slots: { default: true }
1533
+ });
1534
+ $$renderer3.push(`<!----> `);
1535
+ if (diffStats && (diffStats.added > 0 || diffStats.removed > 0 || diffStats.modified > 0)) {
1536
+ $$renderer3.push("<!--[0-->");
1537
+ Diff_statistics($$renderer3, {
1538
+ variant: "compact",
1539
+ density: "toolbar",
1540
+ added: diffStats.added,
1541
+ removed: diffStats.removed,
1542
+ modified: diffStats.modified,
1543
+ hideZero: true
1544
+ });
1545
+ } else {
1546
+ $$renderer3.push("<!--[-1-->");
1547
+ }
1548
+ $$renderer3.push(`<!--]--> `);
1549
+ if (activeView === "diff") {
1550
+ $$renderer3.push("<!--[0-->");
1551
+ $$renderer3.push(`<div class="controls-separator svelte-161pl7w" aria-hidden="true"></div> `);
1552
+ Segmented_control($$renderer3, {
1553
+ id: `${$9.stringify(id)}-diff-view-mode`,
1554
+ selectionMode: "single",
1555
+ size: "sm",
1556
+ density: "toolbar",
1557
+ label: "Diff view mode",
1558
+ hideLabel: true,
1559
+ get value() {
1560
+ return diffViewMode;
1561
+ },
1562
+ set value($$value) {
1563
+ diffViewMode = $$value;
1564
+ $$settled = false;
1565
+ },
1566
+ children: ($$renderer4) => {
1567
+ Segment($$renderer4, {
1568
+ value: "unified",
1569
+ children: ($$renderer5) => {
1570
+ $$renderer5.push(`<!---->Unified`);
1571
+ },
1572
+ $$slots: { default: true }
1573
+ });
1574
+ $$renderer4.push(`<!----> `);
1575
+ Segment($$renderer4, {
1576
+ value: "final",
1577
+ children: ($$renderer5) => {
1578
+ $$renderer5.push(`<!---->Final`);
1579
+ },
1580
+ $$slots: { default: true }
1581
+ });
1582
+ $$renderer4.push(`<!----> `);
1583
+ Segment($$renderer4, {
1584
+ value: "original",
1585
+ children: ($$renderer5) => {
1586
+ $$renderer5.push(`<!---->Original`);
1587
+ },
1588
+ $$slots: { default: true }
1589
+ });
1590
+ $$renderer4.push(`<!---->`);
1591
+ },
1592
+ $$slots: { default: true }
1593
+ });
1594
+ $$renderer3.push(`<!---->`);
1595
+ } else {
1596
+ $$renderer3.push("<!--[-1-->");
1597
+ }
1598
+ $$renderer3.push(`<!--]--></div> <div class="controls-trailing svelte-161pl7w">`);
1599
+ if (activeView === "diff" && hasContentChanges && !readonly) {
1600
+ $$renderer3.push("<!--[0-->");
1601
+ Button($$renderer3, {
1602
+ variant: "ghost",
1603
+ size: "sm",
1604
+ onclick: onRevertAll,
1605
+ "aria-label": "Revert all changes",
1606
+ title: "Revert all changes",
1607
+ children: ($$renderer4) => {
1608
+ Rotate_ccw($$renderer4, { class: "icon-sm" });
1609
+ $$renderer4.push(`<!----> <span class="cinder-sr-only">Revert All</span>`);
1610
+ },
1611
+ $$slots: { default: true }
1612
+ });
1613
+ } else {
1614
+ $$renderer3.push("<!--[-1-->");
1615
+ }
1616
+ $$renderer3.push(`<!--]--> <div class="comments-toggle-wrapper svelte-161pl7w">`);
1617
+ Button($$renderer3, {
1618
+ variant: "ghost",
1619
+ size: "sm",
1620
+ onclick: onSidebarToggle,
1621
+ "aria-expanded": sidebarOpen,
1622
+ "aria-controls": `${$9.stringify(id)}-sidebar`,
1623
+ "aria-label": commentsToggleLabel(),
1624
+ title: sidebarOpen ? "Close comments sidebar" : "Open comments sidebar",
1625
+ children: ($$renderer4) => {
1626
+ Message_square($$renderer4, { class: "icon-sm" });
1627
+ $$renderer4.push(`<!----> `);
1628
+ Badge($$renderer4, {
1629
+ "aria-hidden": "true",
1630
+ size: "sm",
1631
+ variant: "neutral",
1632
+ children: ($$renderer5) => {
1633
+ $$renderer5.push(`<!---->${$9.escape(commentCount)}`);
1634
+ },
1635
+ $$slots: { default: true }
1636
+ });
1637
+ $$renderer4.push(`<!---->`);
1638
+ },
1639
+ $$slots: { default: true }
1640
+ });
1641
+ $$renderer3.push(`<!----></div> `);
1642
+ if (trailing) {
1643
+ $$renderer3.push("<!--[0-->");
1644
+ trailing($$renderer3);
1645
+ $$renderer3.push(`<!---->`);
1646
+ } else {
1647
+ $$renderer3.push("<!--[-1-->");
1648
+ }
1649
+ $$renderer3.push(`<!--]--></div></div> <div role="status" aria-live="polite" aria-atomic="true" class="comments-count-announcer cinder-sr-only">${$9.escape(liveAnnouncementText)}</div>`);
1650
+ }
1651
+ do {
1652
+ $$settled = true;
1653
+ $$inner_renderer = $$renderer2.copy();
1654
+ $$render_inner($$inner_renderer);
1655
+ } while (!$$settled);
1656
+ $$renderer2.subsume($$inner_renderer);
1657
+ $9.bind_props($$props, { diffViewMode });
1658
+ });
1659
+ }
1660
+
1661
+ // src/components/review-editor/review-editor-selection-geometry.ts
1662
+ function getSelectionAnchorRect(range) {
1663
+ const rect = Array.from(range.getClientRects()).find((clientRect) => {
1664
+ return clientRect.width > 0 && clientRect.height > 0;
1665
+ }) ?? range.getBoundingClientRect();
1666
+ if (rect.width === 0 && rect.height === 0)
1667
+ return null;
1668
+ return rect;
1669
+ }
1670
+ function getSelectionAnchorPosition(range) {
1671
+ const rect = getSelectionAnchorRect(range);
1672
+ if (!rect)
1673
+ return null;
1674
+ return {
1675
+ x: rect.left + rect.width / 2,
1676
+ y: rect.top,
1677
+ height: rect.height
1678
+ };
1679
+ }
1680
+
1681
+ // src/components/review-editor/review-editor-impl.svelte
1682
+ import { computeLineDiff, getDiffStats } from "@lostgradient/cinder/markdown/diff/line-diff";
1683
+ import {
1684
+ generateMarkdownSummary,
1685
+ generateUnifiedDiff,
1686
+ generateCommentsExport
1687
+ } from "@lostgradient/cinder/commentary/export";
1688
+ function Review_editor_impl($$renderer, $$props) {
1689
+ $$renderer.component(($$renderer2) => {
1690
+ const reducedMotion = useReducedMotion();
1691
+ let {
1692
+ id,
1693
+ original = "",
1694
+ value = "",
1695
+ threads = [],
1696
+ mode = "edit",
1697
+ currentUserId,
1698
+ placeholder = "Start writing...",
1699
+ name,
1700
+ class: className,
1701
+ onchange,
1702
+ onthreadcreate,
1703
+ onthreaddelete,
1704
+ oncommentcreate,
1705
+ oncommentupdate,
1706
+ oncommentdelete,
1707
+ snapshotMode = false
1708
+ } = $$props;
1709
+ let containerElement = null;
1710
+ let editorRef = undefined;
1711
+ let liveRegionRef = undefined;
1712
+ let editorViewReady = false;
1713
+ let currentSelection = null;
1714
+ let popoverThreadId = null;
1715
+ let popoverPosition = null;
1716
+ let selectTimeoutId = null;
1717
+ let activeThreadId = null;
1718
+ let sidebarOpen = false;
1719
+ const currentDocument = $10.derived(() => parseReviewEditorFrontMatter(value));
1720
+ const editorValue = $10.derived(() => currentDocument().body);
1721
+ const viewPanelIds = $10.derived(() => ({
1722
+ editor: `${id}-editor-panel`,
1723
+ diff: `${id}-diff-panel`,
1724
+ summary: `${id}-summary-panel`
1725
+ }));
1726
+ let activeView = "editor";
1727
+ let diffViewMode = "unified";
1728
+ const diffStats = $10.derived(() => {
1729
+ if (!original) {
1730
+ return { added: 0, removed: 0, modified: 0 };
1731
+ }
1732
+ const normalizedOriginal = normalize(original);
1733
+ const normalizedCurrent = normalize(value);
1734
+ const lineDiffs = computeLineDiff(normalizedOriginal, normalizedCurrent);
1735
+ return getDiffStats(lineDiffs);
1736
+ });
1737
+ const hasContentChanges = $10.derived(() => diffStats().added > 0 || diffStats().removed > 0 || diffStats().modified > 0);
1738
+ const commentCount = $10.derived(() => threads.reduce((count, thread) => {
1739
+ return count + thread.comments.filter((c) => !c.deletedAt).length;
1740
+ }, 0));
1741
+ const summaryContent = $10.derived(() => {
1742
+ const result = exportMarkdownSummary();
1743
+ return result.markdown.replace(/^# Review Summary\n+/, "");
1744
+ });
1745
+ let selectionPopoverPosition = null;
1746
+ let capturedSelectionForPopover = null;
1747
+ let selectionPopoverExpanded = false;
1748
+ const showSelectionPopover = $10.derived(() => activeView === "editor" && mode === "edit" && currentUserId !== undefined && (selectionPopoverPosition !== null || selectionPopoverExpanded) && popoverThreadId === null);
1749
+ const POSITION_DELAY_MS = 350;
1750
+ function getScrollBehavior() {
1751
+ return reducedMotion.current ? "instant" : "smooth";
1752
+ }
1753
+ function announce(message, priority = "polite") {
1754
+ liveRegionRef?.announce(message, priority);
1755
+ }
1756
+ const popoverThread = $10.derived(() => {
1757
+ if (!popoverThreadId)
1758
+ return null;
1759
+ return threads.find((t) => t.id === popoverThreadId) ?? null;
1760
+ });
1761
+ function scrollAnchorIntoView(threadId) {
1762
+ const editorDom = editorRef?.getView()?.dom;
1763
+ const anchorElement = editorDom?.querySelector(`[data-thread-id="${threadId}"]`);
1764
+ if (anchorElement) {
1765
+ anchorElement.scrollIntoView({ behavior: getScrollBehavior(), block: "center" });
1766
+ }
1767
+ }
1768
+ function handlePopoverClose() {
1769
+ if (selectTimeoutId !== null) {
1770
+ clearTimeout(selectTimeoutId);
1771
+ selectTimeoutId = null;
1772
+ }
1773
+ popoverThreadId = null;
1774
+ popoverPosition = null;
1775
+ activeThreadId = null;
1776
+ }
1777
+ function handlePopoverDelete(threadId) {
1778
+ if (currentUserId) {
1779
+ deleteThread(threadId);
1780
+ handlePopoverClose();
1781
+ }
1782
+ }
1783
+ function handlePopoverCommentUpdate(threadId, commentId, body) {
1784
+ updateComment(threadId, commentId, body);
1785
+ }
1786
+ function handlePopoverCommentDelete(threadId, commentId) {
1787
+ deleteComment(threadId, commentId);
1788
+ }
1789
+ function handlePopoverCommentCreate(threadId, body) {
1790
+ if (currentUserId) {
1791
+ createComment(threadId, body, currentUserId);
1792
+ }
1793
+ }
1794
+ function calculateViewportPosition(from) {
1795
+ const view = editorRef?.getView();
1796
+ if (!view)
1797
+ return null;
1798
+ try {
1799
+ const coords = view.coordsAtPos(documentPositionToBodyPosition(from, currentDocument().bodyOffset));
1800
+ if (coords) {
1801
+ return {
1802
+ top: coords.top + 24,
1803
+ left: Math.max(16, coords.left)
1804
+ };
1805
+ }
1806
+ } catch {}
1807
+ return null;
1808
+ }
1809
+ let lastSyncedFingerprint = null;
1810
+ let pendingState = null;
1811
+ function createSyncFingerprint(threadsToSync) {
1812
+ return threadsToSync.map((t) => {
1813
+ const a = t.anchor;
1814
+ return `${t.id}:${a.from}:${a.to}:${a.quote}:${a.prefix}:${a.suffix}:${a.lastKnownOffset ?? ""}`;
1815
+ }).join("|");
1816
+ }
1817
+ function createPluginSyncFingerprint(threadsToSync) {
1818
+ return `${currentDocument().bodyOffset}|${createSyncFingerprint(threadsToSync)}`;
1819
+ }
1820
+ function handleAnchorsUpdate(updates) {
1821
+ threads = threads.map((thread) => {
1822
+ const update = updates.find((u) => u.threadId === thread.id);
1823
+ if (update) {
1824
+ const documentUpdate = bodyAnchorUpdateToDocumentAnchorUpdate(update, currentDocument().bodyOffset);
1825
+ return {
1826
+ ...thread,
1827
+ anchor: {
1828
+ ...thread.anchor,
1829
+ from: documentUpdate.from,
1830
+ to: documentUpdate.to,
1831
+ quote: documentUpdate.quote,
1832
+ prefix: documentUpdate.prefix,
1833
+ suffix: documentUpdate.suffix,
1834
+ lastKnownOffset: documentUpdate.lastKnownOffset
1835
+ }
1836
+ };
1837
+ }
1838
+ return thread;
1839
+ });
1840
+ lastSyncedFingerprint = createPluginSyncFingerprint(threads);
1841
+ }
1842
+ const anchorPlugin = createAnchorPlugin({
1843
+ onAnchorsUpdate: handleAnchorsUpdate,
1844
+ onAnchorClick: handleAnchorClick
1845
+ });
1846
+ function handleAnchorClick(threadId, event) {
1847
+ if (selectTimeoutId !== null) {
1848
+ clearTimeout(selectTimeoutId);
1849
+ selectTimeoutId = null;
1850
+ }
1851
+ selectionPopoverPosition = null;
1852
+ capturedSelectionForPopover = null;
1853
+ selectionPopoverExpanded = false;
1854
+ activeThreadId = threadId;
1855
+ const thread = threads.find((t) => t.id === threadId);
1856
+ if (thread) {
1857
+ popoverPosition = { x: event.clientX + 16, y: event.clientY };
1858
+ popoverThreadId = threadId;
1859
+ }
1860
+ }
1861
+ function syncThreadsToPlugin(threadsToSync) {
1862
+ const view = editorRef?.getView();
1863
+ if (!view)
1864
+ return;
1865
+ const fingerprint = createPluginSyncFingerprint(threadsToSync);
1866
+ if (fingerprint === lastSyncedFingerprint)
1867
+ return;
1868
+ lastSyncedFingerprint = fingerprint;
1869
+ view.dispatch(view.state.tr.setMeta(anchorPluginKey, {
1870
+ type: "sync",
1871
+ threads: threadsToSync.map((thread) => ({
1872
+ ...thread,
1873
+ anchor: documentAnchorToBodyAnchor(thread.anchor, currentDocument().bodyOffset)
1874
+ })),
1875
+ source: "external"
1876
+ }));
1877
+ }
1878
+ function attemptReanchoring() {
1879
+ if (!pendingState)
1880
+ return;
1881
+ const view = editorRef?.getView();
1882
+ if (!view)
1883
+ return;
1884
+ const currentMarkdown = editorRef?.getMarkdown() ?? "";
1885
+ const pendingDocument = parseReviewEditorFrontMatter(pendingState.content);
1886
+ const expectedMarkdown = pendingDocument.body;
1887
+ if (!contentEquals2(currentMarkdown, expectedMarkdown)) {
1888
+ return;
1889
+ }
1890
+ const state = pendingState;
1891
+ pendingState = null;
1892
+ const { doc } = view.state;
1893
+ const documentText = doc.textBetween(0, doc.content.size, `
1894
+ `);
1895
+ const reanchoredThreads = [];
1896
+ for (const persistedThread of state.threads) {
1897
+ const bodyPersistedAnchor = documentPersistedAnchorToBodyAnchor(persistedThread.anchor, pendingDocument.bodyOffset);
1898
+ const result = reanchorQuote(documentText, bodyPersistedAnchor);
1899
+ if (!result.found) {
1900
+ onthreaddelete?.({ threadId: persistedThread.id });
1901
+ continue;
1902
+ }
1903
+ const from = textOffsetToProseMirrorPosition(doc, result.from);
1904
+ const to = textOffsetToProseMirrorPosition(doc, result.to);
1905
+ if (from !== null && to !== null) {
1906
+ const matchedQuote = documentText.slice(result.from, result.to);
1907
+ const newPrefix = documentText.slice(Math.max(0, result.from - ANCHOR_CONTEXT_LENGTH), result.from);
1908
+ const newSuffix = documentText.slice(result.to, Math.min(documentText.length, result.to + ANCHOR_CONTEXT_LENGTH));
1909
+ reanchoredThreads.push({
1910
+ ...persistedThread,
1911
+ anchor: {
1912
+ ...persistedThread.anchor,
1913
+ from: from + pendingDocument.bodyOffset,
1914
+ to: to + pendingDocument.bodyOffset,
1915
+ quote: matchedQuote,
1916
+ prefix: newPrefix,
1917
+ suffix: newSuffix,
1918
+ status: "anchored",
1919
+ lastKnownOffset: result.from + pendingDocument.bodyOffset
1920
+ }
1921
+ });
1922
+ }
1923
+ }
1924
+ threads = reanchoredThreads;
1925
+ syncThreadsToPlugin(threads);
1926
+ }
1927
+ const isReadonly = $10.derived(() => mode === "readonly");
1928
+ const changeTracker = createChangeTracker({ debounceMs: 300, includeFrontMatter: true });
1929
+ let selectionTimeoutId = null;
1930
+ const SELECTION_DEBOUNCE_MS = 20;
1931
+ function handleSelectionChange(selection) {
1932
+ if (!editorViewReady) {
1933
+ editorViewReady = true;
1934
+ }
1935
+ currentSelection = selection;
1936
+ }
1937
+ function handleChange(newValue) {
1938
+ value = newValue;
1939
+ onchange?.(newValue);
1940
+ }
1941
+ function handleEditorBodyChange(newBody) {
1942
+ handleChange(combineFrontMatterAndBody(currentDocument(), newBody));
1943
+ }
1944
+ function handleFrontMatterChange(data) {
1945
+ const previousBodyOffset = currentDocument().bodyOffset;
1946
+ const nextValue = replaceFrontMatterData(value, data);
1947
+ const nextDocument = parseReviewEditorFrontMatter(nextValue);
1948
+ if (previousBodyOffset !== nextDocument.bodyOffset) {
1949
+ threads = threads.map((thread) => ({
1950
+ ...thread,
1951
+ anchor: remapDocumentAnchorBodyOffset(thread.anchor, previousBodyOffset, nextDocument.bodyOffset, nextValue)
1952
+ }));
1953
+ }
1954
+ handleChange(nextValue);
1955
+ }
1956
+ function focus() {
1957
+ editorRef?.focus();
1958
+ }
1959
+ function getMarkdown() {
1960
+ const body = editorRef?.getMarkdown() ?? currentDocument().body;
1961
+ return combineFrontMatterAndBody(currentDocument(), body);
1962
+ }
1963
+ function setMarkdown(content) {
1964
+ value = content;
1965
+ editorRef?.setMarkdown(parseReviewEditorFrontMatter(content).body);
1966
+ }
1967
+ function getAst() {
1968
+ return editorRef?.getAst();
1969
+ }
1970
+ function getSelection() {
1971
+ const selection = editorRef?.getSelection();
1972
+ if (!selection)
1973
+ return null;
1974
+ return {
1975
+ ...selection,
1976
+ from: selection.from + currentDocument().bodyOffset,
1977
+ to: selection.to + currentDocument().bodyOffset
1978
+ };
1979
+ }
1980
+ function scrollToThread(threadId) {
1981
+ const thread = threads.find((t) => t.id === threadId);
1982
+ if (!thread)
1983
+ return;
1984
+ const view = editorRef?.getView();
1985
+ if (view && thread.anchor.from !== undefined) {
1986
+ const coords = view.coordsAtPos(documentPositionToBodyPosition(thread.anchor.from, currentDocument().bodyOffset));
1987
+ if (coords) {
1988
+ view.dom.scrollTo({
1989
+ top: coords.top - 100,
1990
+ behavior: getScrollBehavior()
1991
+ });
1992
+ }
1993
+ }
1994
+ }
1995
+ function handleSidebarThreadSelect(threadId) {
1996
+ const thread = threads.find((t) => t.id === threadId);
1997
+ if (!thread)
1998
+ return;
1999
+ activeThreadId = threadId;
2000
+ scrollToThread(threadId);
2001
+ setTimeout(() => {
2002
+ const view = editorRef?.getView();
2003
+ if (view && thread.anchor.from !== undefined) {
2004
+ const coords = view.coordsAtPos(documentPositionToBodyPosition(thread.anchor.from, currentDocument().bodyOffset));
2005
+ if (coords) {
2006
+ popoverPosition = { x: coords.left + 16, y: coords.top };
2007
+ popoverThreadId = threadId;
2008
+ }
2009
+ }
2010
+ }, POSITION_DELAY_MS);
2011
+ }
2012
+ function handleAddDocumentComment(body) {
2013
+ if (!currentUserId) {
2014
+ devWarn("Cannot add document comment: no currentUserId");
2015
+ return;
2016
+ }
2017
+ createDocumentThread(body, currentUserId);
2018
+ }
2019
+ function getState() {
2020
+ const persistedThreads = threads.map((thread) => ({
2021
+ ...thread,
2022
+ anchor: {
2023
+ quote: thread.anchor.quote,
2024
+ prefix: thread.anchor.prefix,
2025
+ suffix: thread.anchor.suffix,
2026
+ status: thread.anchor.status,
2027
+ blockId: thread.anchor.blockId,
2028
+ originalPosition: thread.anchor.originalPosition,
2029
+ originalQuote: thread.anchor.originalQuote,
2030
+ lastKnownOffset: thread.anchor.lastKnownOffset
2031
+ }
2032
+ }));
2033
+ return {
2034
+ schemaVersion: 4,
2035
+ content: value,
2036
+ original: original || undefined,
2037
+ threads: persistedThreads,
2038
+ reviewSession: undefined,
2039
+ frontMatter: currentDocument().data,
2040
+ frontMatterRaw: currentDocument().raw,
2041
+ updatedAt: new Date().toISOString()
2042
+ };
2043
+ }
2044
+ function setState(state) {
2045
+ const nextValue = reviewStateToMarkdown(state);
2046
+ value = nextValue;
2047
+ if (state.original !== undefined) {
2048
+ original = state.original;
2049
+ }
2050
+ pendingState = { ...state, content: nextValue };
2051
+ attemptReanchoring();
2052
+ }
2053
+ function getView() {
2054
+ return editorRef?.getView() ?? null;
2055
+ }
2056
+ function getEditor() {
2057
+ return editorRef?.getEditor() ?? null;
2058
+ }
2059
+ function exportMarkdownSummary(options = undefined) {
2060
+ return generateMarkdownSummary(getState(), options);
2061
+ }
2062
+ function exportUnifiedDiff(options = undefined) {
2063
+ return generateUnifiedDiff(getState(), options);
2064
+ }
2065
+ function handleExportContent() {
2066
+ return value;
2067
+ }
2068
+ function handleExportSummary() {
2069
+ return exportMarkdownSummary().markdown;
2070
+ }
2071
+ function handleExportJSON() {
2072
+ const json = stringifyOrNull(getState());
2073
+ if (json === null) {
2074
+ return '{"error": "Failed to serialize editor state"}';
2075
+ }
2076
+ return json;
2077
+ }
2078
+ function handleExportDiff() {
2079
+ return exportUnifiedDiff().diff;
2080
+ }
2081
+ function handleExportComments() {
2082
+ return generateCommentsExport(getState()).markdown;
2083
+ }
2084
+ function getFieldName(field) {
2085
+ return name ? `${name}-${field}` : field;
2086
+ }
2087
+ const formOriginal = $10.derived(() => original);
2088
+ const formCurrent = $10.derived(() => value);
2089
+ const formComments = $10.derived(() => JSON.stringify(threads));
2090
+ const formDiff = $10.derived(() => exportUnifiedDiff().diff);
2091
+ const formSummary = $10.derived(() => exportMarkdownSummary().markdown);
2092
+ function getFormData() {
2093
+ return {
2094
+ original: formOriginal(),
2095
+ current: formCurrent(),
2096
+ comments: formComments(),
2097
+ diff: formDiff(),
2098
+ summary: formSummary()
2099
+ };
2100
+ }
2101
+ function reset() {
2102
+ value = original;
2103
+ onchange?.(original);
2104
+ for (const thread of threads) {
2105
+ onthreaddelete?.({ threadId: thread.id });
2106
+ }
2107
+ popoverThreadId = null;
2108
+ popoverPosition = null;
2109
+ activeThreadId = null;
2110
+ activeView = "editor";
2111
+ selectionPopoverPosition = null;
2112
+ capturedSelectionForPopover = null;
2113
+ selectionPopoverExpanded = false;
2114
+ announce("Review reset");
2115
+ }
2116
+ function handleSelectionComment(body) {
2117
+ function failWithMessage(message) {
2118
+ devWarn(message);
2119
+ selectionPopoverPosition = null;
2120
+ capturedSelectionForPopover = null;
2121
+ selectionPopoverExpanded = false;
2122
+ announce("Could not add comment. Please try selecting text again.", "assertive");
2123
+ }
2124
+ if (!currentUserId) {
2125
+ failWithMessage("Cannot create comment: no currentUserId set");
2126
+ return;
2127
+ }
2128
+ if (!capturedSelectionForPopover) {
2129
+ failWithMessage("Cannot create comment: no captured selection");
2130
+ return;
2131
+ }
2132
+ if (mode === "readonly") {
2133
+ failWithMessage("Cannot create thread: editor is readonly");
2134
+ return;
2135
+ }
2136
+ const view = editorRef?.getView();
2137
+ if (!view) {
2138
+ failWithMessage("Cannot create thread: editor view not available");
2139
+ return;
2140
+ }
2141
+ const { from, to } = capturedSelectionForPopover;
2142
+ const docSize = view.state.doc.content.size;
2143
+ if (from < 0 || to > docSize || from > to) {
2144
+ failWithMessage("Cannot create thread: captured selection is out of bounds");
2145
+ return;
2146
+ }
2147
+ const anchor = bodyAnchorToDocumentAnchor(buildAnchorFromSelection(view, from, to), currentDocument().bodyOffset, value);
2148
+ const requestId = generateId();
2149
+ const mentions = extractMentions(body);
2150
+ const event = {
2151
+ requestId,
2152
+ anchor,
2153
+ body,
2154
+ authorId: currentUserId,
2155
+ mentions: mentions.length > 0 ? mentions : undefined
2156
+ };
2157
+ onthreadcreate?.(event);
2158
+ capturedSelectionForPopover = null;
2159
+ selectionPopoverPosition = null;
2160
+ selectionPopoverExpanded = false;
2161
+ announce("Comment added");
2162
+ }
2163
+ function handleSelectionPopoverExpand() {
2164
+ selectionPopoverExpanded = true;
2165
+ }
2166
+ function handleSelectionPopoverCancel() {
2167
+ selectionPopoverExpanded = false;
2168
+ }
2169
+ function handleSelectionPopoverClose() {
2170
+ selectionPopoverPosition = null;
2171
+ capturedSelectionForPopover = null;
2172
+ selectionPopoverExpanded = false;
2173
+ }
2174
+ function createThread(body, authorId) {
2175
+ if (!currentSelection || currentSelection.isCollapsed) {
2176
+ devWarn("Cannot create thread: no text selected");
2177
+ return null;
2178
+ }
2179
+ if (mode === "readonly") {
2180
+ devWarn("Cannot create thread: editor is readonly");
2181
+ return null;
2182
+ }
2183
+ const view = editorRef?.getView();
2184
+ if (!view) {
2185
+ devWarn("Cannot create thread: editor view not available");
2186
+ return null;
2187
+ }
2188
+ const { from, to } = currentSelection;
2189
+ const anchor = bodyAnchorToDocumentAnchor(buildAnchorFromSelection(view, from, to), currentDocument().bodyOffset, value);
2190
+ const mentions = extractMentions(body);
2191
+ const requestId = generateId();
2192
+ const event = {
2193
+ requestId,
2194
+ anchor,
2195
+ body,
2196
+ authorId,
2197
+ mentions: mentions.length > 0 ? mentions : undefined
2198
+ };
2199
+ onthreadcreate?.(event);
2200
+ announce("Comment added");
2201
+ return requestId;
2202
+ }
2203
+ function createDocumentThread(body, authorId) {
2204
+ if (mode === "readonly") {
2205
+ devWarn("Cannot create thread: editor is readonly");
2206
+ return null;
2207
+ }
2208
+ const anchor = createDocumentAnchor();
2209
+ const mentions = extractMentions(body);
2210
+ const requestId = generateId();
2211
+ const event = {
2212
+ requestId,
2213
+ anchor,
2214
+ body,
2215
+ authorId,
2216
+ mentions: mentions.length > 0 ? mentions : undefined
2217
+ };
2218
+ onthreadcreate?.(event);
2219
+ announce("Document comment added");
2220
+ return requestId;
2221
+ }
2222
+ function deleteThread(threadId) {
2223
+ if (mode === "readonly")
2224
+ return;
2225
+ const thread = threads.find((t) => t.id === threadId);
2226
+ if (!thread)
2227
+ return;
2228
+ onthreaddelete?.({ threadId });
2229
+ }
2230
+ function clearAllThreads() {
2231
+ if (mode === "readonly")
2232
+ return;
2233
+ if (threads.length === 0)
2234
+ return;
2235
+ for (const thread of threads) {
2236
+ onthreaddelete?.({ threadId: thread.id });
2237
+ }
2238
+ popoverThreadId = null;
2239
+ popoverPosition = null;
2240
+ activeThreadId = null;
2241
+ announce("All comments cleared");
2242
+ }
2243
+ function createComment(threadId, body, authorId) {
2244
+ if (mode === "readonly")
2245
+ return null;
2246
+ const thread = threads.find((t) => t.id === threadId);
2247
+ if (!thread)
2248
+ return null;
2249
+ const mentions = extractMentions(body);
2250
+ const requestId = generateId();
2251
+ oncommentcreate?.({
2252
+ requestId,
2253
+ threadId,
2254
+ body,
2255
+ authorId,
2256
+ mentions: mentions.length > 0 ? mentions : undefined
2257
+ });
2258
+ announce("Comment added");
2259
+ return requestId;
2260
+ }
2261
+ function updateComment(threadId, commentId, body) {
2262
+ if (mode === "readonly")
2263
+ return;
2264
+ const thread = threads.find((t) => t.id === threadId);
2265
+ const comment = thread?.comments.find((c) => c.id === commentId);
2266
+ if (!comment || comment.deletedAt)
2267
+ return;
2268
+ const mentions = extractMentions(body);
2269
+ oncommentupdate?.({
2270
+ threadId,
2271
+ commentId,
2272
+ body,
2273
+ mentions: mentions.length > 0 ? mentions : undefined
2274
+ });
2275
+ }
2276
+ function deleteComment(threadId, commentId, soft = true) {
2277
+ if (mode === "readonly")
2278
+ return;
2279
+ const thread = threads.find((t) => t.id === threadId);
2280
+ const comment = thread?.comments.find((c) => c.id === commentId);
2281
+ if (!comment || soft && comment.deletedAt)
2282
+ return;
2283
+ oncommentdelete?.({ threadId, commentId, soft });
2284
+ announce("Comment deleted");
2285
+ }
2286
+ function createBlockThread(body, authorId) {
2287
+ if (mode === "readonly") {
2288
+ devWarn("Cannot create block thread: editor is readonly");
2289
+ return null;
2290
+ }
2291
+ const view = editorRef?.getView();
2292
+ if (!view) {
2293
+ devWarn("Cannot create block thread: editor view not available");
2294
+ return null;
2295
+ }
2296
+ const { from } = view.state.selection;
2297
+ const resolvedPos = view.state.doc.resolve(from);
2298
+ for (let depth = resolvedPos.depth;depth > 0; depth--) {
2299
+ const node = resolvedPos.node(depth);
2300
+ if (!node.isBlock)
2301
+ continue;
2302
+ const blockFrom = resolvedPos.start(depth);
2303
+ const blockTo = resolvedPos.end(depth);
2304
+ const anchor = bodyAnchorToDocumentAnchor(buildAnchorFromSelection(view, blockFrom, blockTo), currentDocument().bodyOffset, value);
2305
+ const mentions = extractMentions(body);
2306
+ const requestId = generateId();
2307
+ onthreadcreate?.({
2308
+ requestId,
2309
+ anchor,
2310
+ body,
2311
+ authorId,
2312
+ mentions: mentions.length > 0 ? mentions : undefined
2313
+ });
2314
+ return requestId;
2315
+ }
2316
+ devWarn("Cannot create block thread: cursor not inside a block");
2317
+ return null;
2318
+ }
2319
+ const focusRegions = [
2320
+ {
2321
+ id: "editor",
2322
+ selector: ".review-editor-main",
2323
+ label: "Editor"
2324
+ },
2325
+ { id: "popover", selector: ".thread-popover", label: "Thread" }
2326
+ ];
2327
+ const focusNavigator = createFocusRegionNavigator(focusRegions, {
2328
+ isRegionActive: (region) => {
2329
+ if (region.id === "popover") {
2330
+ return popoverThread() !== null;
2331
+ }
2332
+ return true;
2333
+ },
2334
+ customFocusHandler: (region) => {
2335
+ if (region.id === "editor") {
2336
+ editorRef?.getView()?.focus();
2337
+ return true;
2338
+ }
2339
+ return false;
2340
+ }
2341
+ });
2342
+ function handleContainerKeyDown(event) {
2343
+ if (event.key !== "F6")
2344
+ return;
2345
+ const container = event.currentTarget;
2346
+ if (!(container instanceof HTMLElement))
2347
+ return;
2348
+ event.preventDefault();
2349
+ const current = focusNavigator.getCurrentRegion(container);
2350
+ const next = focusNavigator.getNextRegion(current, event.shiftKey);
2351
+ focusNavigator.focusRegion(container, next);
2352
+ }
2353
+ function exportActionsSnippet($$renderer3) {
2354
+ Export_actions($$renderer3, {
2355
+ id: `${$10.stringify(id)}-export`,
2356
+ onexportcontent: handleExportContent,
2357
+ onexportsummary: handleExportSummary,
2358
+ onexportjson: handleExportJSON,
2359
+ onexportdiff: handleExportDiff,
2360
+ onexportcomments: handleExportComments
2361
+ });
2362
+ }
2363
+ let $$settled = true;
2364
+ let $$inner_renderer;
2365
+ function $$render_inner($$renderer3) {
2366
+ $$renderer3.push(`<div data-testid="review-editor"${$10.attr_class($10.clsx(classNames("review-editor-container", className)), "svelte-1rnat08")}${$10.attr("data-mode", mode)}${$10.attr("data-view", activeView)}${$10.attr("data-ready", editorViewReady && !pendingState ? true : undefined)}${$10.attr("data-snapshot-mode", snapshotMode || undefined)}>`);
2367
+ Live_region($$renderer3, {});
2368
+ $$renderer3.push(`<!----> `);
2369
+ if (name) {
2370
+ $$renderer3.push("<!--[0-->");
2371
+ $$renderer3.push(`<input type="hidden"${$10.attr("name", getFieldName("original"))}${$10.attr("value", formOriginal())} class="svelte-1rnat08"/> <input type="hidden"${$10.attr("name", getFieldName("current"))}${$10.attr("value", formCurrent())} class="svelte-1rnat08"/> <input type="hidden"${$10.attr("name", getFieldName("comments"))}${$10.attr("value", formComments())} class="svelte-1rnat08"/> <input type="hidden"${$10.attr("name", getFieldName("diff"))}${$10.attr("value", formDiff())} class="svelte-1rnat08"/> <input type="hidden"${$10.attr("name", getFieldName("summary"))}${$10.attr("value", formSummary())} class="svelte-1rnat08"/>`);
2372
+ } else {
2373
+ $$renderer3.push("<!--[-1-->");
2374
+ }
2375
+ $$renderer3.push(`<!--]--> `);
2376
+ Review_editor_controls($$renderer3, {
2377
+ id: `${$10.stringify(id)}-controls`,
2378
+ activeView,
2379
+ viewPanelIds: viewPanelIds(),
2380
+ onViewChange: (view) => {
2381
+ if (view !== "editor") {
2382
+ selectionPopoverPosition = null;
2383
+ capturedSelectionForPopover = null;
2384
+ selectionPopoverExpanded = false;
2385
+ }
2386
+ activeView = view;
2387
+ announce(`Switched to ${view} view`);
2388
+ },
2389
+ showDiffTabs: !!original,
2390
+ diffStats: diffStats(),
2391
+ hasContentChanges: hasContentChanges(),
2392
+ readonly: isReadonly(),
2393
+ onRevertAll: () => {
2394
+ value = original;
2395
+ onchange?.(original);
2396
+ announce("All changes reverted");
2397
+ },
2398
+ commentCount: commentCount(),
2399
+ sidebarOpen,
2400
+ onSidebarToggle: () => sidebarOpen = !sidebarOpen,
2401
+ trailing: exportActionsSnippet,
2402
+ get diffViewMode() {
2403
+ return diffViewMode;
2404
+ },
2405
+ set diffViewMode($$value) {
2406
+ diffViewMode = $$value;
2407
+ $$settled = false;
2408
+ }
2409
+ });
2410
+ $$renderer3.push(`<!----> <div class="review-editor-main svelte-1rnat08">`);
2411
+ if (activeView === "editor") {
2412
+ $$renderer3.push("<!--[0-->");
2413
+ $$renderer3.push(`<div${$10.attr("id", viewPanelIds().editor)} class="review-editor-view-panel svelte-1rnat08" role="tabpanel" aria-label="Editor view">`);
2414
+ if (currentDocument().hasFrontMatter) {
2415
+ $$renderer3.push("<!--[0-->");
2416
+ Front_matter_fields($$renderer3, {
2417
+ id: `${id}-front-matter`,
2418
+ data: currentDocument().data,
2419
+ raw: currentDocument().raw,
2420
+ readonly: isReadonly(),
2421
+ onchange: handleFrontMatterChange
2422
+ });
2423
+ } else {
2424
+ $$renderer3.push("<!--[-1-->");
2425
+ }
2426
+ $$renderer3.push(`<!--]--> `);
2427
+ Markdown_editor($$renderer3, {
2428
+ id,
2429
+ value: editorValue(),
2430
+ mode: "wysiwyg",
2431
+ readonly: isReadonly(),
2432
+ placeholder,
2433
+ plugins: [anchorPlugin],
2434
+ snapshotMode,
2435
+ onchange: handleEditorBodyChange,
2436
+ onready: () => {
2437
+ if (!editorViewReady) {
2438
+ editorViewReady = true;
2439
+ }
2440
+ },
2441
+ onselectionchange: handleSelectionChange
2442
+ });
2443
+ $$renderer3.push(`<!----></div>`);
2444
+ } else if (activeView === "diff") {
2445
+ $$renderer3.push("<!--[1-->");
2446
+ $$renderer3.push(`<div${$10.attr("id", viewPanelIds().diff)} class="review-editor-view-panel svelte-1rnat08" role="tabpanel" aria-label="Diff view">`);
2447
+ {
2448
+ let toolbar = function($$renderer4) {};
2449
+ Diff_viewer($$renderer3, {
2450
+ original,
2451
+ current: value,
2452
+ readonly: isReadonly(),
2453
+ get viewMode() {
2454
+ return diffViewMode;
2455
+ },
2456
+ set viewMode($$value) {
2457
+ diffViewMode = $$value;
2458
+ $$settled = false;
2459
+ },
2460
+ toolbar,
2461
+ $$slots: { toolbar: true }
2462
+ });
2463
+ }
2464
+ $$renderer3.push(`<!----></div>`);
2465
+ } else {
2466
+ $$renderer3.push("<!--[-1-->");
2467
+ $$renderer3.push(`<div${$10.attr("id", viewPanelIds().summary)} class="review-editor-view-panel svelte-1rnat08" role="tabpanel" aria-label="Summary view">`);
2468
+ if (hasContentChanges() || threads.length > 0) {
2469
+ $$renderer3.push("<!--[0-->");
2470
+ Markdown_editor($$renderer3, {
2471
+ id: `${$10.stringify(id)}-summary`,
2472
+ value: summaryContent(),
2473
+ mode: "wysiwyg",
2474
+ readonly: true,
2475
+ showToolbar: false,
2476
+ placeholder: ""
2477
+ });
2478
+ } else {
2479
+ $$renderer3.push("<!--[-1-->");
2480
+ $$renderer3.push(`<div class="summary-view svelte-1rnat08" role="region" aria-label="Review summary"><div class="summary-empty svelte-1rnat08"><p class="svelte-1rnat08">No changes or comments to summarize.</p> <p class="summary-hint svelte-1rnat08">Edit the document or add comments to generate a summary.</p></div></div>`);
2481
+ }
2482
+ $$renderer3.push(`<!--]--></div>`);
2483
+ }
2484
+ $$renderer3.push(`<!--]--></div> `);
2485
+ if (sidebarOpen) {
2486
+ $$renderer3.push("<!--[0-->");
2487
+ Comment_sidebar($$renderer3, {
2488
+ id: `${$10.stringify(id)}-sidebar`,
2489
+ threads,
2490
+ activeThreadId,
2491
+ readonly: isReadonly(),
2492
+ onthreadselect: handleSidebarThreadSelect,
2493
+ onclearall: clearAllThreads,
2494
+ onadddocumentcomment: handleAddDocumentComment
2495
+ });
2496
+ } else {
2497
+ $$renderer3.push("<!--[-1-->");
2498
+ }
2499
+ $$renderer3.push(`<!--]--> `);
2500
+ if (popoverThread() && popoverPosition) {
2501
+ $$renderer3.push("<!--[0-->");
2502
+ Thread_popover($$renderer3, {
2503
+ id: `${$10.stringify(id)}-thread-popover`,
2504
+ thread: popoverThread(),
2505
+ currentUserId,
2506
+ mode,
2507
+ position: popoverPosition,
2508
+ onclose: handlePopoverClose,
2509
+ ondelete: handlePopoverDelete,
2510
+ oncommentcreate: handlePopoverCommentCreate,
2511
+ oncommentupdate: handlePopoverCommentUpdate,
2512
+ oncommentdelete: handlePopoverCommentDelete
2513
+ });
2514
+ } else {
2515
+ $$renderer3.push("<!--[-1-->");
2516
+ }
2517
+ $$renderer3.push(`<!--]--> `);
2518
+ if (showSelectionPopover()) {
2519
+ $$renderer3.push("<!--[0-->");
2520
+ Selection_popover($$renderer3, {
2521
+ id: `${$10.stringify(id)}-selection-popover`,
2522
+ position: selectionPopoverPosition,
2523
+ open: showSelectionPopover(),
2524
+ oncommentsubmit: handleSelectionComment,
2525
+ onexpand: handleSelectionPopoverExpand,
2526
+ oncancel: handleSelectionPopoverCancel,
2527
+ onclose: handleSelectionPopoverClose
2528
+ });
2529
+ } else {
2530
+ $$renderer3.push("<!--[-1-->");
2531
+ }
2532
+ $$renderer3.push(`<!--]--></div>`);
2533
+ }
2534
+ do {
2535
+ $$settled = true;
2536
+ $$inner_renderer = $$renderer2.copy();
2537
+ $$render_inner($$inner_renderer);
2538
+ } while (!$$settled);
2539
+ $$renderer2.subsume($$inner_renderer);
2540
+ $10.bind_props($$props, {
2541
+ original,
2542
+ value,
2543
+ threads,
2544
+ focus,
2545
+ getMarkdown,
2546
+ setMarkdown,
2547
+ getAst,
2548
+ getSelection,
2549
+ scrollToThread,
2550
+ getState,
2551
+ setState,
2552
+ getView,
2553
+ getEditor,
2554
+ exportMarkdownSummary,
2555
+ exportUnifiedDiff,
2556
+ getFormData,
2557
+ reset,
2558
+ createThread,
2559
+ createDocumentThread,
2560
+ deleteThread,
2561
+ clearAllThreads,
2562
+ createComment,
2563
+ updateComment,
2564
+ deleteComment,
2565
+ createBlockThread
2566
+ });
2567
+ });
2568
+ }
2569
+
2570
+ // src/components/review-editor/review-editor.svelte
2571
+ function Review_editor($$renderer, $$props) {
2572
+ $$renderer.component(($$renderer2) => {
2573
+ let {
2574
+ class: customClassName,
2575
+ original = "",
2576
+ value = "",
2577
+ threads = [],
2578
+ $$slots,
2579
+ $$events,
2580
+ ...rest
2581
+ } = $$props;
2582
+ const mergedClassName = $11.derived(() => classNames(customClassName));
2583
+ let $$settled = true;
2584
+ let $$inner_renderer;
2585
+ function $$render_inner($$renderer3) {
2586
+ Review_editor_impl($$renderer3, $11.spread_props([
2587
+ { class: mergedClassName() },
2588
+ rest,
2589
+ {
2590
+ get original() {
2591
+ return original;
2592
+ },
2593
+ set original($$value) {
2594
+ original = $$value;
2595
+ $$settled = false;
2596
+ },
2597
+ get value() {
2598
+ return value;
2599
+ },
2600
+ set value($$value) {
2601
+ value = $$value;
2602
+ $$settled = false;
2603
+ },
2604
+ get threads() {
2605
+ return threads;
2606
+ },
2607
+ set threads($$value) {
2608
+ threads = $$value;
2609
+ $$settled = false;
2610
+ }
2611
+ }
2612
+ ]));
2613
+ }
2614
+ do {
2615
+ $$settled = true;
2616
+ $$inner_renderer = $$renderer2.copy();
2617
+ $$render_inner($$inner_renderer);
2618
+ } while (!$$settled);
2619
+ $$renderer2.subsume($$inner_renderer);
2620
+ $11.bind_props($$props, { original, value, threads });
2621
+ });
2622
+ }
2623
+
2624
+ // src/components/review-editor/review-editor-state.svelte.ts
2625
+ import * as $12 from "svelte/internal/server";
2626
+ import { generateMarkdownSummary as generateMarkdownSummary2 } from "@lostgradient/cinder/commentary/export";
2627
+ import { computeLineDiff as computeLineDiff2, getDiffStats as getDiffStats2 } from "@lostgradient/cinder/markdown/diff/line-diff";
2628
+ import { normalize as normalize2 } from "@lostgradient/cinder/markdown/pipeline";
2629
+ function createReviewEditorState(options) {
2630
+ const { getOriginal, getValue, getThreads } = options;
2631
+ let activeView = "editor";
2632
+ let diffViewMode = "unified";
2633
+ const diffStats = $12.derived(() => {
2634
+ const original = getOriginal();
2635
+ if (!original) {
2636
+ return { added: 0, removed: 0, modified: 0 };
2637
+ }
2638
+ const normalizedOriginal = normalize2(original);
2639
+ const normalizedCurrent = normalize2(getValue());
2640
+ const lineDiffs = computeLineDiff2(normalizedOriginal, normalizedCurrent);
2641
+ return getDiffStats2(lineDiffs);
2642
+ });
2643
+ const hasContentChanges = $12.derived(() => diffStats().added > 0 || diffStats().removed > 0 || diffStats().modified > 0);
2644
+ const commentCount = $12.derived(() => {
2645
+ const threads = getThreads();
2646
+ return threads.reduce((count, thread) => {
2647
+ return count + thread.comments.filter((c) => !c.deletedAt).length;
2648
+ }, 0);
2649
+ });
2650
+ const summaryContent = $12.derived(() => {
2651
+ const threads = getThreads();
2652
+ const state = {
2653
+ schemaVersion: 4,
2654
+ content: getValue(),
2655
+ original: getOriginal() || undefined,
2656
+ threads: threads.map((t) => ({
2657
+ ...t,
2658
+ anchor: {
2659
+ quote: t.anchor.quote,
2660
+ prefix: t.anchor.prefix,
2661
+ suffix: t.anchor.suffix,
2662
+ status: t.anchor.status,
2663
+ blockId: t.anchor.blockId,
2664
+ originalPosition: t.anchor.originalPosition,
2665
+ originalQuote: t.anchor.originalQuote,
2666
+ lastKnownOffset: t.anchor.lastKnownOffset
2667
+ }
2668
+ })),
2669
+ updatedAt: ""
2670
+ };
2671
+ const result = generateMarkdownSummary2(state);
2672
+ return result.markdown.replace(/^# Review Summary\n+/, "");
2673
+ });
2674
+ return {
2675
+ get activeView() {
2676
+ return activeView;
2677
+ },
2678
+ setActiveView(view) {
2679
+ activeView = view;
2680
+ },
2681
+ get diffViewMode() {
2682
+ return diffViewMode;
2683
+ },
2684
+ setDiffViewMode(mode) {
2685
+ diffViewMode = mode;
2686
+ },
2687
+ get diffStats() {
2688
+ return diffStats();
2689
+ },
2690
+ get hasContentChanges() {
2691
+ return hasContentChanges();
2692
+ },
2693
+ get commentCount() {
2694
+ return commentCount();
2695
+ },
2696
+ get summaryContent() {
2697
+ return summaryContent();
2698
+ }
2699
+ };
2700
+ }
2701
+ // src/components/review-editor/review-editor-threads.svelte.ts
2702
+ import * as $13 from "svelte/internal/server";
2703
+ import { buildAnchorFromSelection as buildAnchorFromSelection2 } from "@lostgradient/cinder/commentary/anchoring";
2704
+ import { createDocumentAnchor as createDocumentAnchor2, extractMentions as extractMentions2, generateId as generateId2 } from "@lostgradient/cinder/commentary/comments";
2705
+ var POSITION_DELAY_MS = 350;
2706
+ function createThreadManager(options) {
2707
+ const {
2708
+ getThreads,
2709
+ getEditorView,
2710
+ getMode,
2711
+ getCurrentUserId,
2712
+ getScrollBehavior,
2713
+ announce,
2714
+ onthreadcreate,
2715
+ onthreaddelete,
2716
+ oncommentcreate,
2717
+ oncommentupdate,
2718
+ oncommentdelete,
2719
+ onBeforePopoverOpen
2720
+ } = options;
2721
+ let popoverThreadId = null;
2722
+ let popoverPosition = null;
2723
+ let activeThreadId = null;
2724
+ let selectTimeoutId = null;
2725
+ const popoverThread = $13.derived(() => {
2726
+ if (!popoverThreadId)
2727
+ return null;
2728
+ return getThreads().find((t) => t.id === popoverThreadId) ?? null;
2729
+ });
2730
+ function calculateViewportPosition(from) {
2731
+ const view = getEditorView();
2732
+ if (!view)
2733
+ return null;
2734
+ try {
2735
+ const coords = view.coordsAtPos(from);
2736
+ if (coords) {
2737
+ return { x: Math.max(16, coords.left), y: coords.top + 24 };
2738
+ }
2739
+ } catch {}
2740
+ return null;
2741
+ }
2742
+ function scrollAnchorIntoView(threadId) {
2743
+ const editorDom = getEditorView()?.dom;
2744
+ const anchorElement = editorDom?.querySelector(`[data-thread-id="${threadId}"]`);
2745
+ if (anchorElement) {
2746
+ anchorElement.scrollIntoView({ behavior: getScrollBehavior(), block: "center" });
2747
+ }
2748
+ }
2749
+ function scrollToThread(threadId) {
2750
+ const thread = getThreads().find((t) => t.id === threadId);
2751
+ if (!thread)
2752
+ return;
2753
+ const view = getEditorView();
2754
+ if (view && thread.anchor.from !== undefined) {
2755
+ const coords = view.coordsAtPos(thread.anchor.from);
2756
+ if (coords) {
2757
+ view.dom.scrollTo({ top: coords.top - 100, behavior: getScrollBehavior() });
2758
+ }
2759
+ }
2760
+ }
2761
+ function openPopover(threadId, position) {
2762
+ popoverThreadId = threadId;
2763
+ popoverPosition = position;
2764
+ activeThreadId = threadId;
2765
+ }
2766
+ function closePopover() {
2767
+ if (selectTimeoutId !== null) {
2768
+ clearTimeout(selectTimeoutId);
2769
+ selectTimeoutId = null;
2770
+ }
2771
+ popoverThreadId = null;
2772
+ popoverPosition = null;
2773
+ activeThreadId = null;
2774
+ }
2775
+ function handleAnchorClick(threadId, event) {
2776
+ if (selectTimeoutId !== null) {
2777
+ clearTimeout(selectTimeoutId);
2778
+ selectTimeoutId = null;
2779
+ }
2780
+ onBeforePopoverOpen?.();
2781
+ activeThreadId = threadId;
2782
+ const thread = getThreads().find((t) => t.id === threadId);
2783
+ if (thread) {
2784
+ popoverPosition = { x: event.clientX + 16, y: event.clientY };
2785
+ popoverThreadId = threadId;
2786
+ }
2787
+ }
2788
+ function handleSidebarThreadSelect(threadId) {
2789
+ const thread = getThreads().find((t) => t.id === threadId);
2790
+ if (!thread)
2791
+ return;
2792
+ onBeforePopoverOpen?.();
2793
+ activeThreadId = threadId;
2794
+ scrollToThread(threadId);
2795
+ selectTimeoutId = setTimeout(() => {
2796
+ selectTimeoutId = null;
2797
+ const view = getEditorView();
2798
+ if (view && thread.anchor.from !== undefined) {
2799
+ const coords = view.coordsAtPos(thread.anchor.from);
2800
+ if (coords) {
2801
+ popoverPosition = { x: coords.left + 16, y: coords.top };
2802
+ popoverThreadId = threadId;
2803
+ }
2804
+ }
2805
+ }, POSITION_DELAY_MS);
2806
+ }
2807
+ function createThread(body, authorId, selection) {
2808
+ if (!selection || selection.from === selection.to) {
2809
+ devWarn("Cannot create thread: no text selected");
2810
+ return null;
2811
+ }
2812
+ if (getMode() === "readonly") {
2813
+ devWarn("Cannot create thread: editor is readonly");
2814
+ return null;
2815
+ }
2816
+ const view = getEditorView();
2817
+ if (!view) {
2818
+ devWarn("Cannot create thread: editor view not available");
2819
+ return null;
2820
+ }
2821
+ const { from, to } = selection;
2822
+ const anchor = buildAnchorFromSelection2(view, from, to);
2823
+ const mentions = extractMentions2(body);
2824
+ const requestId = generateId2();
2825
+ const event = {
2826
+ requestId,
2827
+ anchor,
2828
+ body,
2829
+ authorId,
2830
+ mentions: mentions.length > 0 ? mentions : undefined
2831
+ };
2832
+ onthreadcreate?.(event);
2833
+ announce("Comment added");
2834
+ return requestId;
2835
+ }
2836
+ function createDocumentThread(body, authorId) {
2837
+ if (getMode() === "readonly") {
2838
+ devWarn("Cannot create thread: editor is readonly");
2839
+ return null;
2840
+ }
2841
+ const anchor = createDocumentAnchor2();
2842
+ const mentions = extractMentions2(body);
2843
+ const requestId = generateId2();
2844
+ const event = {
2845
+ requestId,
2846
+ anchor,
2847
+ body,
2848
+ authorId,
2849
+ mentions: mentions.length > 0 ? mentions : undefined
2850
+ };
2851
+ onthreadcreate?.(event);
2852
+ announce("Document comment added");
2853
+ return requestId;
2854
+ }
2855
+ function createBlockThread(body, authorId) {
2856
+ if (getMode() === "readonly") {
2857
+ devWarn("Cannot create block thread: editor is readonly");
2858
+ return null;
2859
+ }
2860
+ const view = getEditorView();
2861
+ if (!view) {
2862
+ devWarn("Cannot create block thread: editor view not available");
2863
+ return null;
2864
+ }
2865
+ const { from } = view.state.selection;
2866
+ const resolvedPos = view.state.doc.resolve(from);
2867
+ for (let depth = resolvedPos.depth;depth > 0; depth--) {
2868
+ const node = resolvedPos.node(depth);
2869
+ if (!node.isBlock)
2870
+ continue;
2871
+ const blockFrom = resolvedPos.start(depth);
2872
+ const blockTo = resolvedPos.end(depth);
2873
+ const anchor = buildAnchorFromSelection2(view, blockFrom, blockTo);
2874
+ const mentions = extractMentions2(body);
2875
+ const requestId = generateId2();
2876
+ onthreadcreate?.({
2877
+ requestId,
2878
+ anchor,
2879
+ body,
2880
+ authorId,
2881
+ mentions: mentions.length > 0 ? mentions : undefined
2882
+ });
2883
+ return requestId;
2884
+ }
2885
+ devWarn("Cannot create block thread: cursor not inside a block");
2886
+ return null;
2887
+ }
2888
+ function deleteThread(threadId) {
2889
+ if (getMode() === "readonly")
2890
+ return;
2891
+ const thread = getThreads().find((t) => t.id === threadId);
2892
+ if (!thread)
2893
+ return;
2894
+ onthreaddelete?.({ threadId });
2895
+ }
2896
+ function clearAllThreads() {
2897
+ if (getMode() === "readonly")
2898
+ return;
2899
+ const threads = getThreads();
2900
+ if (threads.length === 0)
2901
+ return;
2902
+ for (const thread of threads) {
2903
+ onthreaddelete?.({ threadId: thread.id });
2904
+ }
2905
+ popoverThreadId = null;
2906
+ popoverPosition = null;
2907
+ activeThreadId = null;
2908
+ announce("All comments cleared");
2909
+ }
2910
+ function createComment(threadId, body, authorId) {
2911
+ if (getMode() === "readonly")
2912
+ return null;
2913
+ const thread = getThreads().find((t) => t.id === threadId);
2914
+ if (!thread)
2915
+ return null;
2916
+ const mentions = extractMentions2(body);
2917
+ const requestId = generateId2();
2918
+ oncommentcreate?.({
2919
+ requestId,
2920
+ threadId,
2921
+ body,
2922
+ authorId,
2923
+ mentions: mentions.length > 0 ? mentions : undefined
2924
+ });
2925
+ announce("Comment added");
2926
+ return requestId;
2927
+ }
2928
+ function updateComment(threadId, commentId, body) {
2929
+ if (getMode() === "readonly")
2930
+ return;
2931
+ const thread = getThreads().find((t) => t.id === threadId);
2932
+ const comment = thread?.comments.find((c) => c.id === commentId);
2933
+ if (!comment || comment.deletedAt)
2934
+ return;
2935
+ const mentions = extractMentions2(body);
2936
+ oncommentupdate?.({
2937
+ threadId,
2938
+ commentId,
2939
+ body,
2940
+ mentions: mentions.length > 0 ? mentions : undefined
2941
+ });
2942
+ }
2943
+ function deleteComment(threadId, commentId, soft = true) {
2944
+ if (getMode() === "readonly")
2945
+ return;
2946
+ const thread = getThreads().find((t) => t.id === threadId);
2947
+ const comment = thread?.comments.find((c) => c.id === commentId);
2948
+ if (!comment || soft && comment.deletedAt)
2949
+ return;
2950
+ oncommentdelete?.({ threadId, commentId, soft });
2951
+ announce("Comment deleted");
2952
+ }
2953
+ function handlePopoverClose() {
2954
+ closePopover();
2955
+ }
2956
+ function handlePopoverDelete(threadId) {
2957
+ const currentUserId = getCurrentUserId();
2958
+ if (currentUserId) {
2959
+ deleteThread(threadId);
2960
+ closePopover();
2961
+ }
2962
+ }
2963
+ function handlePopoverCommentCreate(threadId, body) {
2964
+ const currentUserId = getCurrentUserId();
2965
+ if (currentUserId) {
2966
+ createComment(threadId, body, currentUserId);
2967
+ }
2968
+ }
2969
+ function handlePopoverCommentUpdate(threadId, commentId, body) {
2970
+ updateComment(threadId, commentId, body);
2971
+ }
2972
+ function handlePopoverCommentDelete(threadId, commentId) {
2973
+ deleteComment(threadId, commentId);
2974
+ }
2975
+ function destroy() {
2976
+ if (selectTimeoutId !== null) {
2977
+ clearTimeout(selectTimeoutId);
2978
+ selectTimeoutId = null;
2979
+ }
2980
+ }
2981
+ return {
2982
+ get popoverThreadId() {
2983
+ return popoverThreadId;
2984
+ },
2985
+ get popoverPosition() {
2986
+ return popoverPosition;
2987
+ },
2988
+ get popoverThread() {
2989
+ return popoverThread();
2990
+ },
2991
+ get activeThreadId() {
2992
+ return activeThreadId;
2993
+ },
2994
+ openPopover,
2995
+ closePopover,
2996
+ handleAnchorClick,
2997
+ handleSidebarThreadSelect,
2998
+ createThread,
2999
+ createDocumentThread,
3000
+ createBlockThread,
3001
+ deleteThread,
3002
+ clearAllThreads,
3003
+ createComment,
3004
+ updateComment,
3005
+ deleteComment,
3006
+ handlePopoverClose,
3007
+ handlePopoverDelete,
3008
+ handlePopoverCommentCreate,
3009
+ handlePopoverCommentUpdate,
3010
+ handlePopoverCommentDelete,
3011
+ scrollAnchorIntoView,
3012
+ scrollToThread,
3013
+ calculateViewportPosition,
3014
+ destroy
3015
+ };
3016
+ }
3017
+ // src/components/review-editor/review-editor-selection.svelte.ts
3018
+ import * as $14 from "svelte/internal/server";
3019
+ import { buildAnchorFromSelection as buildAnchorFromSelection3 } from "@lostgradient/cinder/commentary/anchoring";
3020
+ import { extractMentions as extractMentions3, generateId as generateId3 } from "@lostgradient/cinder/commentary/comments";
3021
+ var SELECTION_DEBOUNCE_MS = 20;
3022
+ function createSelectionPopover(options) {
3023
+ const {
3024
+ getId,
3025
+ getMainRef,
3026
+ getEditorView,
3027
+ getMode,
3028
+ getActiveView,
3029
+ getCurrentUserId,
3030
+ isThreadPopoverOpen,
3031
+ announce,
3032
+ onthreadcreate
3033
+ } = options;
3034
+ let position = null;
3035
+ let capturedSelection = null;
3036
+ let expanded = false;
3037
+ let selectionTimeoutId = null;
3038
+ let isListening = false;
3039
+ let computeVersion = 0;
3040
+ const visible = $14.derived(() => {
3041
+ return getActiveView() === "editor" && getMode() === "edit" && getCurrentUserId() !== undefined && (position !== null || expanded) && !isThreadPopoverOpen();
3042
+ });
3043
+ function clearTimeouts() {
3044
+ if (selectionTimeoutId !== null) {
3045
+ clearTimeout(selectionTimeoutId);
3046
+ selectionTimeoutId = null;
3047
+ }
3048
+ }
3049
+ function clear() {
3050
+ clearTimeouts();
3051
+ position = null;
3052
+ capturedSelection = null;
3053
+ expanded = false;
3054
+ computeVersion++;
3055
+ }
3056
+ function close() {
3057
+ clear();
3058
+ }
3059
+ function handleExpand() {
3060
+ expanded = true;
3061
+ }
3062
+ function handleCancel() {
3063
+ expanded = false;
3064
+ }
3065
+ function handleComment(body) {
3066
+ function failWithMessage(message) {
3067
+ devWarn(message);
3068
+ clear();
3069
+ announce("Could not add comment. Please try selecting text again.", "assertive");
3070
+ }
3071
+ const currentUserId = getCurrentUserId();
3072
+ if (!currentUserId) {
3073
+ failWithMessage("Cannot create comment: no currentUserId set");
3074
+ return;
3075
+ }
3076
+ if (!capturedSelection) {
3077
+ failWithMessage("Cannot create comment: no captured selection");
3078
+ return;
3079
+ }
3080
+ if (getMode() === "readonly") {
3081
+ failWithMessage("Cannot create thread: editor is readonly");
3082
+ return;
3083
+ }
3084
+ const view = getEditorView();
3085
+ if (!view) {
3086
+ failWithMessage("Cannot create thread: editor view not available");
3087
+ return;
3088
+ }
3089
+ const { from, to } = capturedSelection;
3090
+ const docSize = view.state.doc.content.size;
3091
+ if (from < 0 || to > docSize || from > to) {
3092
+ failWithMessage("Cannot create thread: captured selection is out of bounds");
3093
+ return;
3094
+ }
3095
+ const anchor = buildAnchorFromSelection3(view, from, to);
3096
+ const requestId = generateId3();
3097
+ const mentions = extractMentions3(body);
3098
+ const event = {
3099
+ requestId,
3100
+ anchor,
3101
+ body,
3102
+ authorId: currentUserId,
3103
+ mentions: mentions.length > 0 ? mentions : undefined
3104
+ };
3105
+ onthreadcreate?.(event);
3106
+ clear();
3107
+ announce("Comment added");
3108
+ }
3109
+ function handleBrowserSelectionChange() {
3110
+ clearTimeouts();
3111
+ if (getMode() !== "edit") {
3112
+ position = null;
3113
+ capturedSelection = null;
3114
+ return;
3115
+ }
3116
+ const selectionPopoverElement = document.getElementById(`${getId()}-selection-popover`);
3117
+ if (selectionPopoverElement?.contains(document.activeElement)) {
3118
+ return;
3119
+ }
3120
+ if (expanded) {
3121
+ return;
3122
+ }
3123
+ const browserSelection = window.getSelection();
3124
+ if (!browserSelection || browserSelection.isCollapsed) {
3125
+ position = null;
3126
+ capturedSelection = null;
3127
+ expanded = false;
3128
+ return;
3129
+ }
3130
+ const mainRef = getMainRef();
3131
+ const anchorNode = browserSelection.anchorNode;
3132
+ if (!mainRef || !anchorNode || !mainRef.contains(anchorNode)) {
3133
+ position = null;
3134
+ capturedSelection = null;
3135
+ expanded = false;
3136
+ return;
3137
+ }
3138
+ const version = ++computeVersion;
3139
+ selectionTimeoutId = setTimeout(() => {
3140
+ selectionTimeoutId = null;
3141
+ if (computeVersion !== version)
3142
+ return;
3143
+ const sel = window.getSelection();
3144
+ if (!sel || sel.isCollapsed) {
3145
+ position = null;
3146
+ capturedSelection = null;
3147
+ return;
3148
+ }
3149
+ const range = sel.getRangeAt(0);
3150
+ const anchorPosition = getSelectionAnchorPosition(range);
3151
+ if (anchorPosition) {
3152
+ const view = getEditorView();
3153
+ if (view) {
3154
+ const { from, to } = view.state.selection;
3155
+ if (from !== to) {
3156
+ capturedSelection = { from, to };
3157
+ position = anchorPosition;
3158
+ }
3159
+ }
3160
+ }
3161
+ }, SELECTION_DEBOUNCE_MS);
3162
+ }
3163
+ function startListening() {
3164
+ if (isListening || typeof document === "undefined")
3165
+ return;
3166
+ document.addEventListener("selectionchange", handleBrowserSelectionChange);
3167
+ isListening = true;
3168
+ }
3169
+ function stopListening() {
3170
+ if (!isListening || typeof document === "undefined")
3171
+ return;
3172
+ document.removeEventListener("selectionchange", handleBrowserSelectionChange);
3173
+ isListening = false;
3174
+ }
3175
+ function destroy() {
3176
+ stopListening();
3177
+ clearTimeouts();
3178
+ }
3179
+ return {
3180
+ get position() {
3181
+ return position;
3182
+ },
3183
+ get capturedSelection() {
3184
+ return capturedSelection;
3185
+ },
3186
+ get expanded() {
3187
+ return expanded;
3188
+ },
3189
+ get visible() {
3190
+ return visible();
3191
+ },
3192
+ handleComment,
3193
+ handleExpand,
3194
+ handleCancel,
3195
+ close,
3196
+ clear,
3197
+ startListening,
3198
+ stopListening,
3199
+ destroy
3200
+ };
3201
+ }
3202
+ // src/components/review-editor/review-editor-anchors.svelte.ts
3203
+ import * as $15 from "svelte/internal/server";
3204
+ import { anchorPluginKey as anchorPluginKey2, createAnchorPlugin as createAnchorPlugin2 } from "@lostgradient/cinder/commentary/anchor-decorations";
3205
+ import { ANCHOR_CONTEXT_LENGTH as ANCHOR_CONTEXT_LENGTH2, reanchorQuote as reanchorQuote2 } from "@lostgradient/cinder/commentary/comments";
3206
+ import { textOffsetToProseMirrorPosition as textOffsetToProseMirrorPosition2 } from "@lostgradient/cinder/editor";
3207
+ import { contentEquals as contentEquals3 } from "@lostgradient/cinder/markdown/pipeline";
3208
+ function createSyncFingerprint(threads) {
3209
+ return threads.map((thread) => {
3210
+ const anchor = thread.anchor;
3211
+ return `${thread.id}:${anchor.from}:${anchor.to}:${anchor.quote}:${anchor.prefix}:${anchor.suffix}:${anchor.lastKnownOffset ?? ""}`;
3212
+ }).join("|");
3213
+ }
3214
+ function createAnchorManager(options) {
3215
+ const {
3216
+ getThreads,
3217
+ setThreads,
3218
+ getEditorView,
3219
+ getMarkdown,
3220
+ getValue,
3221
+ onAnchorClick,
3222
+ onthreaddelete
3223
+ } = options;
3224
+ let lastSyncedFingerprint = null;
3225
+ let pendingState = null;
3226
+ function handleAnchorsUpdate(updates) {
3227
+ const threads = getThreads();
3228
+ const updatedThreads = threads.map((thread) => {
3229
+ const update = updates.find((u) => u.threadId === thread.id);
3230
+ if (update) {
3231
+ return {
3232
+ ...thread,
3233
+ anchor: {
3234
+ ...thread.anchor,
3235
+ from: update.from,
3236
+ to: update.to,
3237
+ quote: update.quote,
3238
+ prefix: update.prefix,
3239
+ suffix: update.suffix,
3240
+ lastKnownOffset: update.lastKnownOffset
3241
+ }
3242
+ };
3243
+ }
3244
+ return thread;
3245
+ });
3246
+ setThreads(updatedThreads);
3247
+ lastSyncedFingerprint = createSyncFingerprint(updatedThreads);
3248
+ }
3249
+ const plugin = createAnchorPlugin2({ onAnchorsUpdate: handleAnchorsUpdate, onAnchorClick });
3250
+ function syncThreadsToPlugin(threads) {
3251
+ const view = getEditorView();
3252
+ if (!view)
3253
+ return;
3254
+ const fingerprint = createSyncFingerprint(threads);
3255
+ if (fingerprint === lastSyncedFingerprint)
3256
+ return;
3257
+ lastSyncedFingerprint = fingerprint;
3258
+ view.dispatch(view.state.tr.setMeta(anchorPluginKey2, { type: "sync", threads, source: "external" }));
3259
+ }
3260
+ function attemptReanchoring() {
3261
+ if (!pendingState)
3262
+ return;
3263
+ const view = getEditorView();
3264
+ if (!view)
3265
+ return;
3266
+ const currentMarkdown = getMarkdown();
3267
+ const expectedMarkdown = pendingState.content;
3268
+ if (!contentEquals3(currentMarkdown, expectedMarkdown)) {
3269
+ return;
3270
+ }
3271
+ const state = pendingState;
3272
+ pendingState = null;
3273
+ const { doc } = view.state;
3274
+ const documentText = doc.textBetween(0, doc.content.size, `
3275
+ `);
3276
+ const reanchoredThreads = [];
3277
+ for (const persistedThread of state.threads) {
3278
+ const result = reanchorQuote2(documentText, persistedThread.anchor);
3279
+ if (!result.found) {
3280
+ onthreaddelete?.({ threadId: persistedThread.id });
3281
+ continue;
3282
+ }
3283
+ const from = textOffsetToProseMirrorPosition2(doc, result.from);
3284
+ const to = textOffsetToProseMirrorPosition2(doc, result.to);
3285
+ if (from !== null && to !== null) {
3286
+ const matchedQuote = documentText.slice(result.from, result.to);
3287
+ const newPrefix = documentText.slice(Math.max(0, result.from - ANCHOR_CONTEXT_LENGTH2), result.from);
3288
+ const newSuffix = documentText.slice(result.to, Math.min(documentText.length, result.to + ANCHOR_CONTEXT_LENGTH2));
3289
+ reanchoredThreads.push({
3290
+ ...persistedThread,
3291
+ anchor: {
3292
+ ...persistedThread.anchor,
3293
+ from,
3294
+ to,
3295
+ quote: matchedQuote,
3296
+ prefix: newPrefix,
3297
+ suffix: newSuffix,
3298
+ status: "anchored",
3299
+ lastKnownOffset: result.from
3300
+ }
3301
+ });
3302
+ }
3303
+ }
3304
+ setThreads(reanchoredThreads);
3305
+ syncThreadsToPlugin(reanchoredThreads);
3306
+ }
3307
+ return {
3308
+ get plugin() {
3309
+ return plugin;
3310
+ },
3311
+ get pendingState() {
3312
+ return pendingState;
3313
+ },
3314
+ setPendingState(state) {
3315
+ pendingState = state;
3316
+ },
3317
+ attemptReanchoring,
3318
+ syncThreadsToPlugin,
3319
+ createSyncFingerprint,
3320
+ handleAnchorsUpdate
3321
+ };
3322
+ }
3323
+ function toPersistedThreads(threads) {
3324
+ return threads.map((thread) => ({
3325
+ ...thread,
3326
+ anchor: {
3327
+ quote: thread.anchor.quote,
3328
+ prefix: thread.anchor.prefix,
3329
+ suffix: thread.anchor.suffix,
3330
+ status: thread.anchor.status,
3331
+ blockId: thread.anchor.blockId,
3332
+ originalPosition: thread.anchor.originalPosition,
3333
+ originalQuote: thread.anchor.originalQuote,
3334
+ lastKnownOffset: thread.anchor.lastKnownOffset
3335
+ }
3336
+ }));
3337
+ }
3338
+ // src/components/review-editor/review-editor-exports.ts
3339
+ import {
3340
+ generateCommentsExport as generateCommentsExport2,
3341
+ generateMarkdownSummary as generateMarkdownSummary3,
3342
+ generateUnifiedDiff as generateUnifiedDiff2
3343
+ } from "@lostgradient/cinder/commentary/export";
3344
+ function buildFormData(state) {
3345
+ return {
3346
+ original: state.original ?? "",
3347
+ current: state.content,
3348
+ comments: JSON.stringify(state.threads),
3349
+ diff: generateUnifiedDiff2(state).diff,
3350
+ summary: generateMarkdownSummary3(state).markdown
3351
+ };
3352
+ }
3353
+ function buildFormDataFromValues(original, current, threads) {
3354
+ const state = {
3355
+ schemaVersion: 4,
3356
+ content: current,
3357
+ original,
3358
+ threads: threads.map((t) => ({
3359
+ ...t,
3360
+ anchor: {
3361
+ quote: t.anchor.quote,
3362
+ prefix: t.anchor.prefix,
3363
+ suffix: t.anchor.suffix,
3364
+ status: t.anchor.status,
3365
+ blockId: t.anchor.blockId,
3366
+ originalPosition: t.anchor.originalPosition,
3367
+ originalQuote: t.anchor.originalQuote,
3368
+ lastKnownOffset: t.anchor.lastKnownOffset
3369
+ }
3370
+ })),
3371
+ updatedAt: new Date().toISOString()
3372
+ };
3373
+ return buildFormData(state);
3374
+ }
3375
+ function exportMarkdownSummary(state, options) {
3376
+ return generateMarkdownSummary3(state, options);
3377
+ }
3378
+ function exportUnifiedDiff(state, options) {
3379
+ return generateUnifiedDiff2(state, options);
3380
+ }
3381
+ function exportCommentsMarkdown(state) {
3382
+ return generateCommentsExport2(state).markdown;
3383
+ }
3384
+ function getSummaryContentWithoutHeading(state) {
3385
+ const result = generateMarkdownSummary3(state);
3386
+ return result.markdown.replace(/^# Review Summary\n+/, "");
3387
+ }
3388
+
3389
+ // src/components/review-editor/index.ts
3390
+ var review_editor_default = Review_editor;
3391
+ export { Comment_list, Comment_composer, Thread_popover, Export_actions, Review_editor, createReviewEditorState, createThreadManager, createSelectionPopover, createAnchorManager, toPersistedThreads, buildFormData, buildFormDataFromValues, exportMarkdownSummary, exportUnifiedDiff, exportCommentsMarkdown, getSummaryContentWithoutHeading, review_editor_default };
3392
+
3393
+ //# debugId=07F3B0BEC63F9CCF64756E2164756E21