@svgrid/grid 2.6.5 → 2.6.7

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 (389) hide show
  1. package/CHANGELOG.md +346 -0
  2. package/README.md +199 -199
  3. package/dist/FlexRender.svelte +96 -96
  4. package/dist/GridFooter.svelte +178 -178
  5. package/dist/GridMenus.svelte +705 -705
  6. package/dist/SvAutoComplete.svelte +165 -165
  7. package/dist/SvAvatar.svelte +75 -75
  8. package/dist/SvCalendar.svelte +503 -503
  9. package/dist/SvCarousel.svelte +141 -141
  10. package/dist/SvCheckBox.svelte +102 -102
  11. package/dist/SvCircularProgress.svelte +109 -109
  12. package/dist/SvColorInput.svelte +181 -181
  13. package/dist/SvComboBox.svelte +275 -275
  14. package/dist/SvContextMenu.svelte +116 -116
  15. package/dist/SvCountryInput.svelte +163 -163
  16. package/dist/SvDrawer.svelte +254 -254
  17. package/dist/SvDropDownList.svelte +374 -374
  18. package/dist/SvDurationInput.svelte +126 -126
  19. package/dist/SvField.svelte +293 -293
  20. package/dist/SvForm.svelte +437 -437
  21. package/dist/SvGrid.controller.svelte.d.ts +1 -0
  22. package/dist/SvGrid.controller.svelte.js +2 -1
  23. package/dist/SvGrid.css +2856 -2846
  24. package/dist/SvGrid.svelte +2956 -3548
  25. package/dist/SvGridCellEditor.svelte +662 -0
  26. package/dist/SvGridCellEditor.svelte.d.ts +46 -0
  27. package/dist/SvGridChart.svelte +1716 -1716
  28. package/dist/SvGridChartPanel.svelte +485 -485
  29. package/dist/SvGridChartView.svelte +70 -70
  30. package/dist/SvGridDropdown.svelte +728 -728
  31. package/dist/SvGridSelect.svelte +266 -266
  32. package/dist/SvGroupCell.svelte +116 -116
  33. package/dist/SvListBox.svelte +326 -326
  34. package/dist/SvMaskedInput.svelte +122 -122
  35. package/dist/SvMenu.svelte +124 -124
  36. package/dist/SvMenuList.svelte +146 -146
  37. package/dist/SvMultiSelect.svelte +289 -289
  38. package/dist/SvNumberInput.svelte +168 -168
  39. package/dist/SvOtpInput.svelte +158 -158
  40. package/dist/SvPasswordInput.svelte +151 -151
  41. package/dist/SvPhoneInput.svelte +133 -133
  42. package/dist/SvPopover.svelte +197 -197
  43. package/dist/SvProgress.svelte +116 -116
  44. package/dist/SvRadioGroup.svelte +107 -107
  45. package/dist/SvRating.svelte +112 -112
  46. package/dist/SvResult.svelte +73 -73
  47. package/dist/SvRichText.svelte +211 -211
  48. package/dist/SvRowGroupPanel.svelte +170 -170
  49. package/dist/SvScrollArea.svelte +61 -61
  50. package/dist/SvSlider.svelte +203 -203
  51. package/dist/SvSwitchButton.svelte +108 -108
  52. package/dist/SvTagsInput.svelte +115 -115
  53. package/dist/SvTextInput.svelte +147 -147
  54. package/dist/SvTimePicker.svelte +245 -245
  55. package/dist/SvToaster.svelte +159 -159
  56. package/dist/SvToggleButton.svelte +85 -85
  57. package/dist/SvTooltip.svelte +161 -161
  58. package/dist/SvTour.svelte +208 -208
  59. package/dist/SvTree.svelte +444 -444
  60. package/dist/SvTreeSelect.svelte +235 -235
  61. package/dist/cdn/GridMenus-0i2QnChI.js +488 -0
  62. package/dist/cdn/{GridMenus-CBvjL5u4.js → GridMenus-C7SFm3Dp.js} +29 -28
  63. package/dist/cdn/{SvDateTimePicker-CHnUkWcH.js → SvDateTimePicker-DSUhIta8.js} +2 -2
  64. package/dist/cdn/{SvDateTimePicker-CRQH_U7E.js → SvDateTimePicker-h9kPyszT.js} +2 -2
  65. package/dist/cdn/SvGridCellEditor-DkyQO6FV.js +523 -0
  66. package/dist/cdn/SvGridCellEditor-JpJSRhDx.js +522 -0
  67. package/dist/cdn/{SvGridChart-BwVos976.js → SvGridChart-Bs2GIR2Q.js} +1 -1
  68. package/dist/cdn/{SvGridChart-BEJmNNx9.js → SvGridChart-CwhFz7GV.js} +1 -1
  69. package/dist/cdn/{SvGridChartPanel-BOknOkrP.js → SvGridChartPanel-1WXuStzM.js} +1 -1
  70. package/dist/cdn/{SvGridChartPanel-D2PjII4O.js → SvGridChartPanel-e5_nqNP9.js} +1 -1
  71. package/dist/cdn/{SvGridChartView-00LPUHL1.js → SvGridChartView-SmPW10dI.js} +1 -1
  72. package/dist/cdn/{SvGridChartView-BhUEJ5ki.js → SvGridChartView-eSPuJE6g.js} +1 -1
  73. package/dist/cdn/{SvGridDropdown-D0VdjeR8.js → SvGridDropdown-B1ZcLpgs.js} +1 -1
  74. package/dist/cdn/{SvGridDropdown-D13MtJ2j.js → SvGridDropdown-CtdbHcIS.js} +1 -1
  75. package/dist/cdn/editor-registry-CiI0xlKg.js +141 -0
  76. package/dist/cdn/row-drag-touch-Ddaa-QeB.js +91 -0
  77. package/dist/cdn/{src-3WKN7L4G.js → src-BkucJd50.js} +3468 -3991
  78. package/dist/cdn/{src-Cl7h5-Ux.js → src-V2_KUw2j.js} +9229 -9752
  79. package/dist/cdn/svgrid.js +8 -7
  80. package/dist/cdn/svgrid.svelte-external.js +8 -7
  81. package/dist/chart-export.js +8 -8
  82. package/dist/headless.d.ts +22 -0
  83. package/dist/headless.js +22 -0
  84. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/_svelte_metadata.json +1 -0
  85. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/_metadata.json +178 -0
  86. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/attachments-qzRy9DX4.js +3843 -0
  87. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/attachments-qzRy9DX4.js.map +1 -0
  88. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/constants-RLNOXCpz.js +23 -0
  89. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/constants-RLNOXCpz.js.map +1 -0
  90. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/dev-DPd12uEU.js +1925 -0
  91. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/dev-DPd12uEU.js.map +1 -0
  92. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/events-CDC4DKuQ.js +206 -0
  93. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/events-CDC4DKuQ.js.map +1 -0
  94. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/flags-BD-lYX7s.js +20 -0
  95. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/flags-BD-lYX7s.js.map +1 -0
  96. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/hydration-D3UBU2t8.js +264 -0
  97. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/hydration-D3UBU2t8.js.map +1 -0
  98. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/legacy-client-B0ZUlbSQ.js +698 -0
  99. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/legacy-client-B0ZUlbSQ.js.map +1 -0
  100. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/package.json +3 -0
  101. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte.js +135 -0
  102. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte.js.map +1 -0
  103. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_animate.js +57 -0
  104. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_animate.js.map +1 -0
  105. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_attachments.js +2 -0
  106. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_compiler.js +46691 -0
  107. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_compiler.js.map +1 -0
  108. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_easing.js +239 -0
  109. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_easing.js.map +1 -0
  110. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_events.js +2 -0
  111. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal.js +6 -0
  112. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal.js.map +1 -0
  113. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_client.js +7 -0
  114. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_disclose-version.js +6 -0
  115. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_disclose-version.js.map +1 -0
  116. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_async.js +7 -0
  117. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_async.js.map +1 -0
  118. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_legacy.js +7 -0
  119. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_legacy.js.map +1 -0
  120. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_tracing.js +7 -0
  121. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_tracing.js.map +1 -0
  122. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_server.js +6 -0
  123. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_legacy.js +85 -0
  124. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_legacy.js.map +1 -0
  125. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_motion.js +561 -0
  126. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_motion.js.map +1 -0
  127. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity.js +26 -0
  128. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity.js.map +1 -0
  129. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity_window.js +124 -0
  130. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity_window.js.map +1 -0
  131. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_server.js +2 -0
  132. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_store.js +91 -0
  133. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_store.js.map +1 -0
  134. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_transition.js +242 -0
  135. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_transition.js.map +1 -0
  136. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-lObbumRX.js +497 -0
  137. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-lObbumRX.js.map +1 -0
  138. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-mR9mAWyK.js +4929 -0
  139. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-mR9mAWyK.js.map +1 -0
  140. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/validate-CezNmRkM.js +192 -0
  141. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/validate-CezNmRkM.js.map +1 -0
  142. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/version-BHHo0WE-.js +10 -0
  143. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/version-BHHo0WE-.js.map +1 -0
  144. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/warnings-yiExAB06.js +140 -0
  145. package/dist/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/warnings-yiExAB06.js.map +1 -0
  146. package/dist/row-drag-touch.d.ts +18 -0
  147. package/dist/row-drag-touch.js +185 -0
  148. package/dist/row-drag.d.ts +2 -0
  149. package/dist/row-drag.js +156 -5
  150. package/package.json +18 -12
  151. package/src/FlexRender.svelte +96 -96
  152. package/src/GridFooter.svelte +178 -178
  153. package/src/GridMenus.svelte +705 -705
  154. package/src/SvAutoComplete.svelte +165 -165
  155. package/src/SvAvatar.svelte +75 -75
  156. package/src/SvCalendar.svelte +503 -503
  157. package/src/SvCalendar.test.ts +226 -226
  158. package/src/SvCarousel.svelte +141 -141
  159. package/src/SvCheckBox.svelte +102 -102
  160. package/src/SvCircularProgress.svelte +109 -109
  161. package/src/SvColorInput.svelte +181 -181
  162. package/src/SvComboBox.svelte +275 -275
  163. package/src/SvContextMenu.svelte +116 -116
  164. package/src/SvCountryInput.svelte +163 -163
  165. package/src/SvDrawer.svelte +254 -254
  166. package/src/SvDropDownList.svelte +374 -374
  167. package/src/SvDurationInput.svelte +126 -126
  168. package/src/SvField.svelte +293 -293
  169. package/src/SvForm.svelte +437 -437
  170. package/src/SvForm.test.ts +411 -411
  171. package/src/SvGrid.controller.svelte.ts +3859 -3858
  172. package/src/SvGrid.css +2856 -2846
  173. package/src/SvGrid.svelte +2956 -3548
  174. package/src/SvGrid.types.ts +1769 -1769
  175. package/src/SvGridCellEditor.svelte +662 -0
  176. package/src/SvGridChart.svelte +1716 -1716
  177. package/src/SvGridChartPanel.svelte +485 -485
  178. package/src/SvGridChartView.svelte +70 -70
  179. package/src/SvGridDropdown.svelte +728 -728
  180. package/src/SvGridSelect.svelte +266 -266
  181. package/src/SvGroupCell.svelte +116 -116
  182. package/src/SvListBox.svelte +326 -326
  183. package/src/SvMaskedInput.svelte +122 -122
  184. package/src/SvMenu.svelte +124 -124
  185. package/src/SvMenu.test.ts +97 -97
  186. package/src/SvMenuList.svelte +146 -146
  187. package/src/SvMultiSelect.svelte +289 -289
  188. package/src/SvNumberInput.svelte +168 -168
  189. package/src/SvOtpInput.svelte +158 -158
  190. package/src/SvPasswordInput.svelte +151 -151
  191. package/src/SvPhoneInput.svelte +133 -133
  192. package/src/SvPopover.svelte +197 -197
  193. package/src/SvProgress.svelte +116 -116
  194. package/src/SvRadioGroup.svelte +107 -107
  195. package/src/SvRating.svelte +112 -112
  196. package/src/SvResult.svelte +73 -73
  197. package/src/SvRichText.svelte +211 -211
  198. package/src/SvRowGroupPanel.svelte +170 -170
  199. package/src/SvScrollArea.svelte +61 -61
  200. package/src/SvSlider.svelte +203 -203
  201. package/src/SvSwitchButton.svelte +108 -108
  202. package/src/SvTagsInput.svelte +115 -115
  203. package/src/SvTextInput.svelte +147 -147
  204. package/src/SvTimePicker.svelte +245 -245
  205. package/src/SvToaster.svelte +159 -159
  206. package/src/SvToaster.test.ts +95 -95
  207. package/src/SvToggleButton.svelte +85 -85
  208. package/src/SvTooltip.svelte +161 -161
  209. package/src/SvTour.svelte +208 -208
  210. package/src/SvTree.svelte +444 -444
  211. package/src/SvTreeSelect.svelte +235 -235
  212. package/src/a11y/dismissable.test.ts +119 -119
  213. package/src/a11y/dismissable.ts +114 -114
  214. package/src/a11y.contract.test.ts +49 -49
  215. package/src/a11y.test.ts +59 -59
  216. package/src/a11y.ts +61 -61
  217. package/src/ai.test.ts +502 -502
  218. package/src/ai.ts +1391 -1391
  219. package/src/build-api.coverage.test.ts +633 -633
  220. package/src/build-api.ts +846 -846
  221. package/src/builtin-editors.grid.test.ts +83 -85
  222. package/src/cell-formatting.ts +169 -169
  223. package/src/cell-render.test.ts +513 -513
  224. package/src/cell-render.ts +496 -496
  225. package/src/cell-values.ts +118 -118
  226. package/src/chart-export.ts +201 -201
  227. package/src/chart-view.svelte.ts +36 -36
  228. package/src/chart.ts +2295 -2295
  229. package/src/collaboration.test.ts +104 -104
  230. package/src/collaboration.ts +167 -167
  231. package/src/core.performance.test.ts +30 -30
  232. package/src/core.ts +1261 -1261
  233. package/src/createAutocomplete.svelte.ts +132 -132
  234. package/src/createCombobox.svelte.ts +191 -191
  235. package/src/createCountryInput.svelte.ts +157 -157
  236. package/src/createDropdownList.svelte.ts +168 -168
  237. package/src/createForm.svelte.ts +386 -386
  238. package/src/createGrid.svelte.ts +42 -42
  239. package/src/createGrid.test.ts +10 -10
  240. package/src/createGridState.svelte.ts +17 -17
  241. package/src/createListbox.svelte.ts +250 -250
  242. package/src/createMenu.svelte.ts +224 -224
  243. package/src/createPopoverSelect.svelte.ts +213 -213
  244. package/src/createSlider.svelte.ts +191 -191
  245. package/src/createTooltip.svelte.ts +144 -144
  246. package/src/createTree.svelte.ts +319 -319
  247. package/src/editing.test.ts +949 -949
  248. package/src/editing.ts +606 -606
  249. package/src/editor-contract.ts +170 -170
  250. package/src/editor-registry.grid.test.ts +144 -144
  251. package/src/editor-registry.ts +122 -122
  252. package/src/export-data-api.test.ts +126 -126
  253. package/src/export-format.test.ts +107 -107
  254. package/src/export-format.ts +601 -601
  255. package/src/filter-operators.ts +160 -160
  256. package/src/flex-render.ts +3 -3
  257. package/src/form-field.ts +127 -127
  258. package/src/group-display.test.ts +167 -167
  259. package/src/group-display.ts +200 -200
  260. package/src/headless.ts +80 -0
  261. package/src/index.ts +754 -754
  262. package/src/js-scroller.svelte.ts +173 -173
  263. package/src/keyboard-handlers.ts +270 -270
  264. package/src/keyboard.test.ts +59 -59
  265. package/src/keyboard.ts +97 -97
  266. package/src/list-nav.test.ts +49 -49
  267. package/src/list-nav.ts +29 -29
  268. package/src/list-option.test.ts +56 -56
  269. package/src/list-option.ts +172 -172
  270. package/src/menus.ts +567 -567
  271. package/src/merge-objects.ts +48 -48
  272. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/_svelte_metadata.json +1 -0
  273. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/_metadata.json +178 -0
  274. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/attachments-qzRy9DX4.js +3843 -0
  275. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/attachments-qzRy9DX4.js.map +1 -0
  276. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/constants-RLNOXCpz.js +23 -0
  277. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/constants-RLNOXCpz.js.map +1 -0
  278. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/dev-DPd12uEU.js +1925 -0
  279. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/dev-DPd12uEU.js.map +1 -0
  280. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/events-CDC4DKuQ.js +206 -0
  281. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/events-CDC4DKuQ.js.map +1 -0
  282. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/flags-BD-lYX7s.js +20 -0
  283. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/flags-BD-lYX7s.js.map +1 -0
  284. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/hydration-D3UBU2t8.js +264 -0
  285. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/hydration-D3UBU2t8.js.map +1 -0
  286. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/legacy-client-B0ZUlbSQ.js +698 -0
  287. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/legacy-client-B0ZUlbSQ.js.map +1 -0
  288. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/package.json +3 -0
  289. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte.js +135 -0
  290. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte.js.map +1 -0
  291. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_animate.js +57 -0
  292. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_animate.js.map +1 -0
  293. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_attachments.js +2 -0
  294. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_compiler.js +46691 -0
  295. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_compiler.js.map +1 -0
  296. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_easing.js +239 -0
  297. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_easing.js.map +1 -0
  298. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_events.js +2 -0
  299. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal.js +6 -0
  300. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal.js.map +1 -0
  301. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_client.js +7 -0
  302. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_disclose-version.js +6 -0
  303. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_disclose-version.js.map +1 -0
  304. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_async.js +7 -0
  305. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_async.js.map +1 -0
  306. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_legacy.js +7 -0
  307. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_legacy.js.map +1 -0
  308. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_tracing.js +7 -0
  309. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_flags_tracing.js.map +1 -0
  310. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_internal_server.js +6 -0
  311. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_legacy.js +85 -0
  312. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_legacy.js.map +1 -0
  313. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_motion.js +561 -0
  314. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_motion.js.map +1 -0
  315. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity.js +26 -0
  316. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity.js.map +1 -0
  317. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity_window.js +124 -0
  318. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_reactivity_window.js.map +1 -0
  319. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_server.js +2 -0
  320. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_store.js +91 -0
  321. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_store.js.map +1 -0
  322. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_transition.js +242 -0
  323. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/svelte_transition.js.map +1 -0
  324. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-lObbumRX.js +497 -0
  325. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-lObbumRX.js.map +1 -0
  326. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-mR9mAWyK.js +4929 -0
  327. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/utils-mR9mAWyK.js.map +1 -0
  328. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/validate-CezNmRkM.js +192 -0
  329. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/validate-CezNmRkM.js.map +1 -0
  330. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/version-BHHo0WE-.js +10 -0
  331. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/version-BHHo0WE-.js.map +1 -0
  332. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/warnings-yiExAB06.js +140 -0
  333. package/src/node_modules/.vite/vitest/67d8ed22ed986c5e2e948f64d892f30be166cc36/deps___vitest__/warnings-yiExAB06.js.map +1 -0
  334. package/src/overlays.test.ts +90 -90
  335. package/src/render-component.ts +28 -28
  336. package/src/row-drag-touch.ts +211 -0
  337. package/src/row-drag.test.ts +353 -168
  338. package/src/row-drag.ts +415 -265
  339. package/src/row-resize.ts +210 -210
  340. package/src/scheduler-model.test.ts +562 -562
  341. package/src/scheduler-model.ts +872 -872
  342. package/src/selection.test.ts +754 -754
  343. package/src/selection.ts +491 -491
  344. package/src/server-data-source.test.ts +383 -383
  345. package/src/server-data-source.ts +469 -469
  346. package/src/sparkline.test.ts +68 -68
  347. package/src/sparkline.ts +169 -169
  348. package/src/spreadsheet.test.ts +488 -488
  349. package/src/spreadsheet.ts +312 -312
  350. package/src/static-functions.ts +11 -11
  351. package/src/subscribe.ts +38 -38
  352. package/src/svgrid-wrapper.types.ts +558 -558
  353. package/src/svgrid.async-editor-options.test.ts +273 -271
  354. package/src/svgrid.auto-row-height.test.ts +204 -204
  355. package/src/svgrid.behavior.test.ts +705 -705
  356. package/src/svgrid.charting.test.ts +534 -534
  357. package/src/svgrid.comments-autocomplete.test.ts +127 -123
  358. package/src/svgrid.context-menu.test.ts +147 -147
  359. package/src/svgrid.features.test.ts +157 -157
  360. package/src/svgrid.filter-depth.test.ts +163 -163
  361. package/src/svgrid.filter-menu-listbox.svelte.test.ts +331 -331
  362. package/src/svgrid.filter-menu-scroll.test.ts +112 -112
  363. package/src/svgrid.grand-total.test.ts +188 -188
  364. package/src/svgrid.group-display-mode.test.ts +171 -171
  365. package/src/svgrid.group-footers.test.ts +121 -121
  366. package/src/svgrid.group-pagination.test.ts +153 -153
  367. package/src/svgrid.new-features.wrapper.test.ts +251 -251
  368. package/src/svgrid.tree-data.test.ts +186 -186
  369. package/src/svgrid.wrapper.test.ts +63 -63
  370. package/src/svgriddropdown.async-panel.svelte.test.ts +195 -195
  371. package/src/test-setup.ts +62 -62
  372. package/src/themes/index.ts +286 -286
  373. package/src/toast-store.svelte.ts +246 -246
  374. package/src/toast-store.test.ts +147 -147
  375. package/src/tree-row-model.test.ts +168 -168
  376. package/src/ui-buttons.test.ts +144 -144
  377. package/src/ui-inputs.test.ts +118 -118
  378. package/src/ui-localization.test.ts +113 -113
  379. package/src/ui-range.test.ts +70 -70
  380. package/src/ui-selection.test.ts +155 -155
  381. package/src/ui-tier1.test.ts +142 -142
  382. package/src/virtual.test.ts +88 -88
  383. package/src/virtualization/column-virtualizer.test.ts +27 -27
  384. package/src/virtualization/column-virtualizer.ts +30 -30
  385. package/src/virtualization/svelte-virtualizer.svelte.ts +26 -26
  386. package/src/virtualization/types.ts +30 -30
  387. package/src/virtualization/virtualizer.test.ts +47 -47
  388. package/src/virtualization/virtualizer.ts +296 -296
  389. package/dist/cdn/GridMenus-DAzp6YXc.js +0 -487
@@ -0,0 +1,192 @@
1
+ import { Dr as svelte_element_invalid_this_value, Er as store_invalid_shape, Tr as snippet_without_render_tag, dr as has_own_property, hn as dynamic_void_element_content } from "./utils-mR9mAWyK.js";
2
+ import { _ as is_void, b as escape_html } from "./utils-lObbumRX.js";
3
+ //#region ../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
4
+ function r(e) {
5
+ var t, f, n = "";
6
+ if ("string" == typeof e || "number" == typeof e) n += e;
7
+ else if ("object" == typeof e) if (Array.isArray(e)) {
8
+ var o = e.length;
9
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
10
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
11
+ return n;
12
+ }
13
+ function clsx$1() {
14
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
15
+ return n;
16
+ }
17
+ //#endregion
18
+ //#region ../../../node_modules/.pnpm/svelte@5.55.9/node_modules/svelte/src/internal/shared/attributes.js
19
+ /**
20
+ * `<div translate={false}>` should be rendered as `<div translate="no">` and _not_
21
+ * `<div translate="false">`, which is equivalent to `<div translate="yes">`. There
22
+ * may be other odd cases that need to be added to this list in future
23
+ * @type {Record<string, Map<any, string>>}
24
+ */
25
+ var replacements = { translate: new Map([[true, "yes"], [false, "no"]]) };
26
+ /**
27
+ * @template V
28
+ * @param {string} name
29
+ * @param {V} value
30
+ * @param {boolean} [is_boolean]
31
+ * @returns {string}
32
+ */
33
+ function attr(name, value, is_boolean = false) {
34
+ if (name === "hidden" && value !== "until-found") is_boolean = true;
35
+ if (value == null || !value && is_boolean) return "";
36
+ const normalized = has_own_property.call(replacements, name) && replacements[name].get(value) || value;
37
+ return ` ${name}${is_boolean ? `=""` : `="${escape_html(normalized, true)}"`}`;
38
+ }
39
+ /**
40
+ * Small wrapper around clsx to preserve Svelte's (weird) handling of falsy values.
41
+ * TODO Svelte 6 revisit this, and likely turn all falsy values into the empty string (what clsx also does)
42
+ * @param {any} value
43
+ */
44
+ function clsx(value) {
45
+ if (typeof value === "object") return clsx$1(value);
46
+ else return value ?? "";
47
+ }
48
+ var whitespace = [..." \n\r\f\xA0\v"];
49
+ /**
50
+ * @param {any} value
51
+ * @param {string | null} [hash]
52
+ * @param {Record<string, boolean>} [directives]
53
+ * @returns {string | null}
54
+ */
55
+ function to_class(value, hash, directives) {
56
+ var classname = value == null ? "" : "" + value;
57
+ if (hash) classname = classname ? classname + " " + hash : hash;
58
+ if (directives) {
59
+ for (var key of Object.keys(directives)) if (directives[key]) classname = classname ? classname + " " + key : key;
60
+ else if (classname.length) {
61
+ var len = key.length;
62
+ var a = 0;
63
+ while ((a = classname.indexOf(key, a)) >= 0) {
64
+ var b = a + len;
65
+ if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1);
66
+ else a = b;
67
+ }
68
+ }
69
+ }
70
+ return classname === "" ? null : classname;
71
+ }
72
+ /**
73
+ *
74
+ * @param {Record<string,any>} styles
75
+ * @param {boolean} important
76
+ */
77
+ function append_styles(styles, important = false) {
78
+ var separator = important ? " !important;" : ";";
79
+ var css = "";
80
+ for (var key of Object.keys(styles)) {
81
+ var value = styles[key];
82
+ if (value != null && value !== "") css += " " + key + ": " + value + separator;
83
+ }
84
+ return css;
85
+ }
86
+ /**
87
+ * @param {string} name
88
+ * @returns {string}
89
+ */
90
+ function to_css_name(name) {
91
+ if (name[0] !== "-" || name[1] !== "-") return name.toLowerCase();
92
+ return name;
93
+ }
94
+ /**
95
+ * @param {any} value
96
+ * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [styles]
97
+ * @returns {string | null}
98
+ */
99
+ function to_style(value, styles) {
100
+ if (styles) {
101
+ var new_style = "";
102
+ /** @type {Record<string,any> | undefined} */
103
+ var normal_styles;
104
+ /** @type {Record<string,any> | undefined} */
105
+ var important_styles;
106
+ if (Array.isArray(styles)) {
107
+ normal_styles = styles[0];
108
+ important_styles = styles[1];
109
+ } else normal_styles = styles;
110
+ if (value) {
111
+ value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim();
112
+ /** @type {boolean | '"' | "'"} */
113
+ var in_str = false;
114
+ var in_apo = 0;
115
+ var in_comment = false;
116
+ var reserved_names = [];
117
+ if (normal_styles) reserved_names.push(...Object.keys(normal_styles).map(to_css_name));
118
+ if (important_styles) reserved_names.push(...Object.keys(important_styles).map(to_css_name));
119
+ var start_index = 0;
120
+ var name_index = -1;
121
+ const len = value.length;
122
+ for (var i = 0; i < len; i++) {
123
+ var c = value[i];
124
+ if (in_comment) {
125
+ if (c === "/" && value[i - 1] === "*") in_comment = false;
126
+ } else if (in_str) {
127
+ if (in_str === c) in_str = false;
128
+ } else if (c === "/" && value[i + 1] === "*") in_comment = true;
129
+ else if (c === "\"" || c === "'") in_str = c;
130
+ else if (c === "(") in_apo++;
131
+ else if (c === ")") in_apo--;
132
+ if (!in_comment && in_str === false && in_apo === 0) {
133
+ if (c === ":" && name_index === -1) name_index = i;
134
+ else if (c === ";" || i === len - 1) {
135
+ if (name_index !== -1) {
136
+ var name = to_css_name(value.substring(start_index, name_index).trim());
137
+ if (!reserved_names.includes(name)) {
138
+ if (c !== ";") i++;
139
+ var property = value.substring(start_index, i).trim();
140
+ new_style += " " + property + ";";
141
+ }
142
+ }
143
+ start_index = i + 1;
144
+ name_index = -1;
145
+ }
146
+ }
147
+ }
148
+ }
149
+ if (normal_styles) new_style += append_styles(normal_styles);
150
+ if (important_styles) new_style += append_styles(important_styles, true);
151
+ new_style = new_style.trim();
152
+ return new_style === "" ? null : new_style;
153
+ }
154
+ return value == null ? null : String(value);
155
+ }
156
+ //#endregion
157
+ //#region ../../../node_modules/.pnpm/svelte@5.55.9/node_modules/svelte/src/internal/shared/validate.js
158
+ /**
159
+ * @param {() => string} tag_fn
160
+ * @returns {void}
161
+ */
162
+ function validate_void_dynamic_element(tag_fn) {
163
+ const tag = tag_fn();
164
+ if (tag && is_void(tag)) dynamic_void_element_content(tag);
165
+ }
166
+ /** @param {() => unknown} tag_fn */
167
+ function validate_dynamic_element_tag(tag_fn) {
168
+ const tag = tag_fn();
169
+ if (tag && !(typeof tag === "string")) svelte_element_invalid_this_value();
170
+ }
171
+ /**
172
+ * @param {any} store
173
+ * @param {string} name
174
+ */
175
+ function validate_store(store, name) {
176
+ if (store != null && typeof store.subscribe !== "function") store_invalid_shape(name);
177
+ }
178
+ /**
179
+ * @template {(...args: any[]) => unknown} T
180
+ * @param {T} fn
181
+ */
182
+ function prevent_snippet_stringification(fn) {
183
+ fn.toString = () => {
184
+ snippet_without_render_tag();
185
+ return "";
186
+ };
187
+ return fn;
188
+ }
189
+ //#endregion
190
+ export { attr as a, to_style as c, validate_void_dynamic_element as i, validate_dynamic_element_tag as n, clsx as o, validate_store as r, to_class as s, prevent_snippet_stringification as t };
191
+
192
+ //# sourceMappingURL=validate-CezNmRkM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-CezNmRkM.js","names":["clsx","_clsx"],"sources":["../../../../../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../../../../../../node_modules/.pnpm/svelte@5.55.9/node_modules/svelte/src/internal/shared/attributes.js","../../../../../../../../node_modules/.pnpm/svelte@5.55.9/node_modules/svelte/src/internal/shared/validate.js"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { escape_html } from '../../escaping.js';\nimport { clsx as _clsx } from 'clsx';\nimport { has_own_property } from './utils.js';\n\n/**\n * `<div translate={false}>` should be rendered as `<div translate=\"no\">` and _not_\n * `<div translate=\"false\">`, which is equivalent to `<div translate=\"yes\">`. There\n * may be other odd cases that need to be added to this list in future\n * @type {Record<string, Map<any, string>>}\n */\nconst replacements = {\n\ttranslate: new Map([\n\t\t[true, 'yes'],\n\t\t[false, 'no']\n\t])\n};\n\n/**\n * @template V\n * @param {string} name\n * @param {V} value\n * @param {boolean} [is_boolean]\n * @returns {string}\n */\nexport function attr(name, value, is_boolean = false) {\n\t// attribute hidden for values other than \"until-found\" behaves like a boolean attribute\n\tif (name === 'hidden' && value !== 'until-found') {\n\t\tis_boolean = true;\n\t}\n\tif (value == null || (!value && is_boolean)) return '';\n\tconst normalized =\n\t\t(has_own_property.call(replacements, name) && replacements[name].get(value)) || value;\n\tconst assignment = is_boolean ? `=\"\"` : `=\"${escape_html(normalized, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * Small wrapper around clsx to preserve Svelte's (weird) handling of falsy values.\n * TODO Svelte 6 revisit this, and likely turn all falsy values into the empty string (what clsx also does)\n * @param {any} value\n */\nexport function clsx(value) {\n\tif (typeof value === 'object') {\n\t\treturn _clsx(value);\n\t} else {\n\t\treturn value ?? '';\n\t}\n}\n\nconst whitespace = [...' \\t\\n\\r\\f\\u00a0\\u000b\\ufeff'];\n\n/**\n * @param {any} value\n * @param {string | null} [hash]\n * @param {Record<string, boolean>} [directives]\n * @returns {string | null}\n */\nexport function to_class(value, hash, directives) {\n\tvar classname = value == null ? '' : '' + value;\n\n\tif (hash) {\n\t\tclassname = classname ? classname + ' ' + hash : hash;\n\t}\n\n\tif (directives) {\n\t\tfor (var key of Object.keys(directives)) {\n\t\t\tif (directives[key]) {\n\t\t\t\tclassname = classname ? classname + ' ' + key : key;\n\t\t\t} else if (classname.length) {\n\t\t\t\tvar len = key.length;\n\t\t\t\tvar a = 0;\n\n\t\t\t\twhile ((a = classname.indexOf(key, a)) >= 0) {\n\t\t\t\t\tvar b = a + len;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(a === 0 || whitespace.includes(classname[a - 1])) &&\n\t\t\t\t\t\t(b === classname.length || whitespace.includes(classname[b]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tclassname = (a === 0 ? '' : classname.substring(0, a)) + classname.substring(b + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = b;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn classname === '' ? null : classname;\n}\n\n/**\n *\n * @param {Record<string,any>} styles\n * @param {boolean} important\n */\nfunction append_styles(styles, important = false) {\n\tvar separator = important ? ' !important;' : ';';\n\tvar css = '';\n\n\tfor (var key of Object.keys(styles)) {\n\t\tvar value = styles[key];\n\t\tif (value != null && value !== '') {\n\t\t\tcss += ' ' + key + ': ' + value + separator;\n\t\t}\n\t}\n\n\treturn css;\n}\n\n/**\n * @param {string} name\n * @returns {string}\n */\nfunction to_css_name(name) {\n\tif (name[0] !== '-' || name[1] !== '-') {\n\t\treturn name.toLowerCase();\n\t}\n\treturn name;\n}\n\n/**\n * @param {any} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [styles]\n * @returns {string | null}\n */\nexport function to_style(value, styles) {\n\tif (styles) {\n\t\tvar new_style = '';\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar normal_styles;\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar important_styles;\n\n\t\tif (Array.isArray(styles)) {\n\t\t\tnormal_styles = styles[0];\n\t\t\timportant_styles = styles[1];\n\t\t} else {\n\t\t\tnormal_styles = styles;\n\t\t}\n\n\t\tif (value) {\n\t\t\tvalue = String(value)\n\t\t\t\t.replaceAll(/\\s*\\/\\*.*?\\*\\/\\s*/g, '')\n\t\t\t\t.trim();\n\n\t\t\t/** @type {boolean | '\"' | \"'\"} */\n\t\t\tvar in_str = false;\n\t\t\tvar in_apo = 0;\n\t\t\tvar in_comment = false;\n\n\t\t\tvar reserved_names = [];\n\n\t\t\tif (normal_styles) {\n\t\t\t\treserved_names.push(...Object.keys(normal_styles).map(to_css_name));\n\t\t\t}\n\t\t\tif (important_styles) {\n\t\t\t\treserved_names.push(...Object.keys(important_styles).map(to_css_name));\n\t\t\t}\n\n\t\t\tvar start_index = 0;\n\t\t\tvar name_index = -1;\n\n\t\t\tconst len = value.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar c = value[i];\n\n\t\t\t\tif (in_comment) {\n\t\t\t\t\tif (c === '/' && value[i - 1] === '*') {\n\t\t\t\t\t\tin_comment = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (in_str) {\n\t\t\t\t\tif (in_str === c) {\n\t\t\t\t\t\tin_str = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (c === '/' && value[i + 1] === '*') {\n\t\t\t\t\tin_comment = true;\n\t\t\t\t} else if (c === '\"' || c === \"'\") {\n\t\t\t\t\tin_str = c;\n\t\t\t\t} else if (c === '(') {\n\t\t\t\t\tin_apo++;\n\t\t\t\t} else if (c === ')') {\n\t\t\t\t\tin_apo--;\n\t\t\t\t}\n\n\t\t\t\tif (!in_comment && in_str === false && in_apo === 0) {\n\t\t\t\t\tif (c === ':' && name_index === -1) {\n\t\t\t\t\t\tname_index = i;\n\t\t\t\t\t} else if (c === ';' || i === len - 1) {\n\t\t\t\t\t\tif (name_index !== -1) {\n\t\t\t\t\t\t\tvar name = to_css_name(value.substring(start_index, name_index).trim());\n\n\t\t\t\t\t\t\tif (!reserved_names.includes(name)) {\n\t\t\t\t\t\t\t\tif (c !== ';') {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar property = value.substring(start_index, i).trim();\n\t\t\t\t\t\t\t\tnew_style += ' ' + property + ';';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart_index = i + 1;\n\t\t\t\t\t\tname_index = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (normal_styles) {\n\t\t\tnew_style += append_styles(normal_styles);\n\t\t}\n\n\t\tif (important_styles) {\n\t\t\tnew_style += append_styles(important_styles, true);\n\t\t}\n\n\t\tnew_style = new_style.trim();\n\t\treturn new_style === '' ? null : new_style;\n\t}\n\n\treturn value == null ? null : String(value);\n}\n","import { is_void } from '../../utils.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\n\nexport { invalid_default_snippet } from './errors.js';\n\n/**\n * @param {() => string} tag_fn\n * @returns {void}\n */\nexport function validate_void_dynamic_element(tag_fn) {\n\tconst tag = tag_fn();\n\tif (tag && is_void(tag)) {\n\t\tw.dynamic_void_element_content(tag);\n\t}\n}\n\n/** @param {() => unknown} tag_fn */\nexport function validate_dynamic_element_tag(tag_fn) {\n\tconst tag = tag_fn();\n\tconst is_string = typeof tag === 'string';\n\tif (tag && !is_string) {\n\t\te.svelte_element_invalid_this_value();\n\t}\n}\n\n/**\n * @param {any} store\n * @param {string} name\n */\nexport function validate_store(store, name) {\n\tif (store != null && typeof store.subscribe !== 'function') {\n\t\te.store_invalid_shape(name);\n\t}\n}\n\n/**\n * @template {(...args: any[]) => unknown} T\n * @param {T} fn\n */\nexport function prevent_snippet_stringification(fn) {\n\tfn.toString = () => {\n\t\te.snippet_without_render_tag();\n\t\treturn '';\n\t};\n\treturn fn;\n}\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ //#region ../../../node_modules/.pnpm/svelte@5.55.9/node_modules/svelte/src/version.js
2
+ /**
3
+ * The current version, as set in package.json.
4
+ * @type {string}
5
+ */
6
+ var VERSION = "5.55.9";
7
+ //#endregion
8
+ export { VERSION as t };
9
+
10
+ //# sourceMappingURL=version-BHHo0WE-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-BHHo0WE-.js","names":[],"sources":["../../../../../../../../node_modules/.pnpm/svelte@5.55.9/node_modules/svelte/src/version.js"],"sourcesContent":["// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n * @type {string}\n */\nexport const VERSION = '5.55.9';\nexport const PUBLIC_VERSION = '5';\n"],"x_google_ignoreList":[0],"mappings":";;;;;AAMA,IAAa,UAAU"}
@@ -0,0 +1,140 @@
1
+ //#region ../../../node_modules/.pnpm/svelte@5.55.9/node_modules/svelte/src/internal/client/warnings.js
2
+ var bold = "font-weight: bold";
3
+ var normal = "font-weight: normal";
4
+ /**
5
+ * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.
6
+ * @param {string} property
7
+ * @param {string} location
8
+ */
9
+ function assignment_value_stale(property, location) {
10
+ console.warn(`%c[svelte] assignment_value_stale\n%cAssignment to \`${property}\` property (${location}) will evaluate to the right-hand side, not the value of \`${property}\` following the assignment. This may result in unexpected behaviour.\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);
11
+ }
12
+ /**
13
+ * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`
14
+ * @param {string} name
15
+ */
16
+ function await_reactivity_loss(name) {
17
+ console.warn(`%c[svelte] await_reactivity_loss\n%cDetected reactivity loss when reading \`${name}\`. This happens when state is read in an async function after an earlier \`await\`\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);
18
+ }
19
+ /**
20
+ * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app
21
+ * @param {string} name
22
+ * @param {string} location
23
+ */
24
+ function await_waterfall(name, location) {
25
+ console.warn(`%c[svelte] await_waterfall\n%cAn async derived, \`${name}\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\nhttps://svelte.dev/e/await_waterfall`, bold, normal);
26
+ }
27
+ /**
28
+ * `%binding%` (%location%) is binding to a non-reactive property
29
+ * @param {string} binding
30
+ * @param {string | undefined | null} [location]
31
+ */
32
+ function binding_property_non_reactive(binding, location) {
33
+ console.warn(`%c[svelte] binding_property_non_reactive\n%c${location ? `\`${binding}\` (${location}) is binding to a non-reactive property` : `\`${binding}\` is binding to a non-reactive property`}\nhttps://svelte.dev/e/binding_property_non_reactive`, bold, normal);
34
+ }
35
+ /**
36
+ * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead
37
+ * @param {string} method
38
+ */
39
+ function console_log_state(method) {
40
+ console.warn(`%c[svelte] console_log_state\n%cYour \`console.${method}\` contained \`$state\` proxies. Consider using \`$inspect(...)\` or \`$state.snapshot(...)\` instead\nhttps://svelte.dev/e/console_log_state`, bold, normal);
41
+ }
42
+ /**
43
+ * Reading a derived belonging to a now-destroyed effect may result in stale values
44
+ */
45
+ function derived_inert() {
46
+ console.warn(`%c[svelte] derived_inert\n%cReading a derived belonging to a now-destroyed effect may result in stale values\nhttps://svelte.dev/e/derived_inert`, bold, normal);
47
+ }
48
+ /**
49
+ * %handler% should be a function. Did you mean to %suggestion%?
50
+ * @param {string} handler
51
+ * @param {string} suggestion
52
+ */
53
+ function event_handler_invalid(handler, suggestion) {
54
+ console.warn(`%c[svelte] event_handler_invalid\n%c${handler} should be a function. Did you mean to ${suggestion}?\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);
55
+ }
56
+ /**
57
+ * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value
58
+ * @param {string} attribute
59
+ * @param {string} html
60
+ * @param {string} value
61
+ */
62
+ function hydration_attribute_changed(attribute, html, value) {
63
+ console.warn(`%c[svelte] hydration_attribute_changed\n%cThe \`${attribute}\` attribute on \`${html}\` changed its value between server and client renders. The client value, \`${value}\`, will be ignored in favour of the server value\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);
64
+ }
65
+ /**
66
+ * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value
67
+ * @param {string | undefined | null} [location]
68
+ */
69
+ function hydration_html_changed(location) {
70
+ console.warn(`%c[svelte] hydration_html_changed\n%c${location ? `The value of an \`{@html ...}\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value` : "The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value"}\nhttps://svelte.dev/e/hydration_html_changed`, bold, normal);
71
+ }
72
+ /**
73
+ * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%
74
+ * @param {string | undefined | null} [location]
75
+ */
76
+ function hydration_mismatch(location) {
77
+ console.warn(`%c[svelte] hydration_mismatch\n%c${location ? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}` : "Hydration failed because the initial UI does not match what was rendered on the server"}\nhttps://svelte.dev/e/hydration_mismatch`, bold, normal);
78
+ }
79
+ /**
80
+ * Tried to unmount a component that was not mounted
81
+ */
82
+ function lifecycle_double_unmount() {
83
+ console.warn(`%c[svelte] lifecycle_double_unmount\n%cTried to unmount a component that was not mounted\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);
84
+ }
85
+ /**
86
+ * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)
87
+ * @param {string} parent
88
+ * @param {string} prop
89
+ * @param {string} child
90
+ * @param {string} owner
91
+ */
92
+ function ownership_invalid_binding(parent, prop, child, owner) {
93
+ console.warn(`%c[svelte] ownership_invalid_binding\n%c${parent} passed property \`${prop}\` to ${child} with \`bind:\`, but its parent component ${owner} did not declare \`${prop}\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \`bind:${prop}={...}\` instead of \`${prop}={...}\`)\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);
94
+ }
95
+ /**
96
+ * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead
97
+ * @param {string} name
98
+ * @param {string} location
99
+ * @param {string} prop
100
+ * @param {string} parent
101
+ */
102
+ function ownership_invalid_mutation(name, location, prop, parent) {
103
+ console.warn(`%c[svelte] ownership_invalid_mutation\n%cMutating unbound props (\`${name}\`, at ${location}) is strongly discouraged. Consider using \`bind:${prop}={...}\` in ${parent} (or using a callback) instead\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);
104
+ }
105
+ /**
106
+ * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.
107
+ */
108
+ function select_multiple_invalid_value() {
109
+ console.warn(`%c[svelte] select_multiple_invalid_value\n%cThe \`value\` property of a \`<select multiple>\` element should be an array, but it received a non-array value. The selection will be kept as is.\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);
110
+ }
111
+ /**
112
+ * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results
113
+ * @param {string} operator
114
+ */
115
+ function state_proxy_equality_mismatch(operator) {
116
+ console.warn(`%c[svelte] state_proxy_equality_mismatch\n%cReactive \`$state(...)\` proxies and the values they proxy have different identities. Because of this, comparisons with \`${operator}\` will produce unexpected results\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);
117
+ }
118
+ /**
119
+ * Tried to unmount a state proxy, rather than a component
120
+ */
121
+ function state_proxy_unmount() {
122
+ console.warn(`%c[svelte] state_proxy_unmount\n%cTried to unmount a state proxy, rather than a component\nhttps://svelte.dev/e/state_proxy_unmount`, bold, normal);
123
+ }
124
+ /**
125
+ * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called
126
+ */
127
+ function svelte_boundary_reset_noop() {
128
+ console.warn(`%c[svelte] svelte_boundary_reset_noop\n%cA \`<svelte:boundary>\` \`reset\` function only resets the boundary the first time it is called\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);
129
+ }
130
+ /**
131
+ * The `slide` transition does not work correctly for elements with `display: %value%`
132
+ * @param {string} value
133
+ */
134
+ function transition_slide_display(value) {
135
+ console.warn(`%c[svelte] transition_slide_display\n%cThe \`slide\` transition does not work correctly for elements with \`display: ${value}\`\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);
136
+ }
137
+ //#endregion
138
+ export { svelte_boundary_reset_noop as _, console_log_state as a, hydration_attribute_changed as c, lifecycle_double_unmount as d, ownership_invalid_binding as f, state_proxy_unmount as g, state_proxy_equality_mismatch as h, binding_property_non_reactive as i, hydration_html_changed as l, select_multiple_invalid_value as m, await_reactivity_loss as n, derived_inert as o, ownership_invalid_mutation as p, await_waterfall as r, event_handler_invalid as s, assignment_value_stale as t, hydration_mismatch as u, transition_slide_display as v };
139
+
140
+ //# sourceMappingURL=warnings-yiExAB06.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warnings-yiExAB06.js","names":[],"sources":["../../../../../../../../node_modules/.pnpm/svelte@5.55.9/node_modules/svelte/src/internal/client/warnings.js"],"sourcesContent":["/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * Reading a derived belonging to a now-destroyed effect may result in stale values\n */\nexport function derived_inert() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] derived_inert\\n%cReading a derived belonging to a now-destroyed effect may result in stale values\\nhttps://svelte.dev/e/derived_inert`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/derived_inert`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n */\nexport function hydratable_missing_but_expected(key) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydratable_missing_but_expected\\n%cExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_expected`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydratable_missing_but_expected`);\n\t}\n}\n\n/**\n * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n * @param {string} attribute\n * @param {string} html\n * @param {string} value\n */\nexport function hydration_attribute_changed(attribute, html, value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydration_attribute_changed\\n%cThe \\`${attribute}\\` attribute on \\`${html}\\` changed its value between server and client renders. The client value, \\`${value}\\`, will be ignored in favour of the server value\\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_attribute_changed`);\n\t}\n}\n\n/**\n * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n * @param {string | undefined | null} [location]\n */\nexport function hydration_html_changed(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_html_changed\\n%c${location\n\t\t\t\t? `The value of an \\`{@html ...}\\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value`\n\t\t\t\t: 'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'}\\nhttps://svelte.dev/e/hydration_html_changed`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_html_changed`);\n\t}\n}\n\n/**\n * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n * @param {string | undefined | null} [location]\n */\nexport function hydration_mismatch(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_mismatch\\n%c${location\n\t\t\t\t? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`\n\t\t\t\t: 'Hydration failed because the initial UI does not match what was rendered on the server'}\\nhttps://svelte.dev/e/hydration_mismatch`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_mismatch`);\n\t}\n}\n\n/**\n * The `render` function passed to `createRawSnippet` should return HTML for a single element\n */\nexport function invalid_raw_snippet_render() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] invalid_raw_snippet_render\\n%cThe \\`render\\` function passed to \\`createRawSnippet\\` should return HTML for a single element\\nhttps://svelte.dev/e/invalid_raw_snippet_render`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/invalid_raw_snippet_render`);\n\t}\n}\n\n/**\n * Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n * @param {string} filename\n */\nexport function legacy_recursive_reactive_block(filename) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] legacy_recursive_reactive_block\\n%cDetected a migrated \\`$:\\` reactive block in \\`${filename}\\` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an \\`$effect\\`.\\nhttps://svelte.dev/e/legacy_recursive_reactive_block`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/legacy_recursive_reactive_block`);\n\t}\n}\n\n/**\n * Tried to unmount a component that was not mounted\n */\nexport function lifecycle_double_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] lifecycle_double_unmount\\n%cTried to unmount a component that was not mounted\\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/lifecycle_double_unmount`);\n\t}\n}\n\n/**\n * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n * @param {string} parent\n * @param {string} prop\n * @param {string} child\n * @param {string} owner\n */\nexport function ownership_invalid_binding(parent, prop, child, owner) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_binding\\n%c${parent} passed property \\`${prop}\\` to ${child} with \\`bind:\\`, but its parent component ${owner} did not declare \\`${prop}\\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \\`bind:${prop}={...}\\` instead of \\`${prop}={...}\\`)\\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_binding`);\n\t}\n}\n\n/**\n * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n * @param {string} name\n * @param {string} location\n * @param {string} prop\n * @param {string} parent\n */\nexport function ownership_invalid_mutation(name, location, prop, parent) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_mutation\\n%cMutating unbound props (\\`${name}\\`, at ${location}) is strongly discouraged. Consider using \\`bind:${prop}={...}\\` in ${parent} (or using a callback) instead\\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_mutation`);\n\t}\n}\n\n/**\n * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n */\nexport function select_multiple_invalid_value() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] select_multiple_invalid_value\\n%cThe \\`value\\` property of a \\`<select multiple>\\` element should be an array, but it received a non-array value. The selection will be kept as is.\\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/select_multiple_invalid_value`);\n\t}\n}\n\n/**\n * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n * @param {string} operator\n */\nexport function state_proxy_equality_mismatch(operator) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_equality_mismatch\\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${operator}\\` will produce unexpected results\\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);\n\t}\n}\n\n/**\n * Tried to unmount a state proxy, rather than a component\n */\nexport function state_proxy_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_unmount\\n%cTried to unmount a state proxy, rather than a component\\nhttps://svelte.dev/e/state_proxy_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_unmount`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n */\nexport function svelte_boundary_reset_noop() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] svelte_boundary_reset_noop\\n%cA \\`<svelte:boundary>\\` \\`reset\\` function only resets the boundary the first time it is called\\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);\n\t}\n}\n\n/**\n * The `slide` transition does not work correctly for elements with `display: %value%`\n * @param {string} value\n */\nexport function transition_slide_display(value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] transition_slide_display\\n%cThe \\`slide\\` transition does not work correctly for elements with \\`display: ${value}\\`\\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/transition_slide_display`);\n\t}\n}"],"x_google_ignoreList":[0],"mappings":";AAIA,IAAI,OAAO;AACX,IAAI,SAAS;;;;;;AAOb,SAAgB,uBAAuB,UAAU,UAAU;CAEzD,QAAQ,KAAK,wDAAwD,SAAS,eAAe,SAAS,6DAA6D,SAAS,qHAAqH,MAAM,MAAM;AAI/S;;;;;AAMA,SAAgB,sBAAsB,MAAM;CAE1C,QAAQ,KAAK,+EAA+E,KAAK,kIAAkI,MAAM,MAAM;AAIjP;;;;;;AAOA,SAAgB,gBAAgB,MAAM,UAAU;CAE9C,QAAQ,KAAK,qDAAqD,KAAK,MAAM,SAAS,kKAAkK,MAAM,MAAM;AAItQ;;;;;;AAOA,SAAgB,8BAA8B,SAAS,UAAU;CAE/D,QAAQ,KACP,+CAA+C,WAC5C,KAAK,QAAQ,MAAM,SAAS,2CAC5B,KAAK,QAAQ,0CAA0C,uDAC1D,MACA,MACD;AAIF;;;;;AAMA,SAAgB,kBAAkB,QAAQ;CAExC,QAAQ,KAAK,kDAAkD,OAAO,gJAAgJ,MAAM,MAAM;AAIpO;;;;AAKA,SAAgB,gBAAgB;CAE9B,QAAQ,KAAK,oJAAoJ,MAAM,MAAM;AAI/K;;;;;;AAOA,SAAgB,sBAAsB,SAAS,YAAY;CAEzD,QAAQ,KAAK,uCAAuC,QAAQ,yCAAyC,WAAW,gDAAgD,MAAM,MAAM;AAI9K;;;;;;;AAoBA,SAAgB,4BAA4B,WAAW,MAAM,OAAO;CAElE,QAAQ,KAAK,mDAAmD,UAAU,oBAAoB,KAAK,8EAA8E,MAAM,sGAAsG,MAAM,MAAM;AAI3S;;;;;AAMA,SAAgB,uBAAuB,UAAU;CAE/C,QAAQ,KACP,wCAAwC,WACrC,yCAAyC,SAAS,8GAClD,gJAAgJ,gDACnJ,MACA,MACD;AAIF;;;;;AAMA,SAAgB,mBAAmB,UAAU;CAE3C,QAAQ,KACP,oCAAoC,WACjC,mHAAmH,aACnH,yFAAyF,4CAC5F,MACA,MACD;AAIF;;;;AA4BA,SAAgB,2BAA2B;CAEzC,QAAQ,KAAK,2IAA2I,MAAM,MAAM;AAItK;;;;;;;;AASA,SAAgB,0BAA0B,QAAQ,MAAM,OAAO,OAAO;CAEpE,QAAQ,KAAK,2CAA2C,OAAO,qBAAqB,KAAK,QAAQ,MAAM,4CAA4C,MAAM,qBAAqB,KAAK,uDAAuD,MAAM,OAAO,OAAO,gBAAgB,KAAK,wBAAwB,KAAK,4DAA4D,MAAM,MAAM;AAI1X;;;;;;;;AASA,SAAgB,2BAA2B,MAAM,UAAU,MAAM,QAAQ;CAEvE,QAAQ,KAAK,sEAAsE,KAAK,SAAS,SAAS,mDAAmD,KAAK,cAAc,OAAO,kFAAkF,MAAM,MAAM;AAIvR;;;;AAKA,SAAgB,gCAAgC;CAE9C,QAAQ,KAAK,sPAAsP,MAAM,MAAM;AAIjR;;;;;AAMA,SAAgB,8BAA8B,UAAU;CAEtD,QAAQ,KAAK,yKAAyK,SAAS,yFAAyF,MAAM,MAAM;AAItS;;;;AAKA,SAAgB,sBAAsB;CAEpC,QAAQ,KAAK,uIAAuI,MAAM,MAAM;AAIlK;;;;AAKA,SAAgB,6BAA6B;CAE3C,QAAQ,KAAK,6LAA6L,MAAM,MAAM;AAIxN;;;;;AAMA,SAAgB,yBAAyB,OAAO;CAE9C,QAAQ,KAAK,wHAAwH,MAAM,oDAAoD,MAAM,MAAM;AAI7M"}
@@ -1,90 +1,90 @@
1
- /**
2
- * Component tests for the overlay trio: SvModal (dialog semantics, Escape /
3
- * backdrop close), SvPopover (click open + outside close) and SvTooltip
4
- * (focus-triggered, aria-describedby wiring).
5
- */
6
- import { describe, expect, it, vi, afterEach } from 'vitest'
7
- import { mount, unmount, flushSync, createRawSnippet } from 'svelte'
8
- import SvModal from './SvModal.svelte'
9
- import SvPopover from './SvPopover.svelte'
10
- import SvTooltip from './SvTooltip.svelte'
11
-
12
- const body = createRawSnippet(() => ({ render: () => `<p class="body">hello</p>` }))
13
- const anchorBtn = createRawSnippet(() => ({ render: () => `<button class="anchor">open</button>` }))
14
-
15
- function mountC(Comp: any, props: Record<string, unknown>) {
16
- const target = document.createElement('div')
17
- document.body.appendChild(target)
18
- const app = mount(Comp, { target, props: props as any })
19
- flushSync()
20
- return { target, destroy: () => { unmount(app); target.remove() } }
21
- }
22
- afterEach(() => {
23
- document.querySelectorAll('.sv-modal__backdrop, .sv-pop__panel, .sv-tip').forEach((n) => n.remove())
24
- })
25
-
26
- describe('SvModal', () => {
27
- it('renders a labelled modal dialog when open', () => {
28
- const { destroy } = mountC(SvModal, { open: true, title: 'Edit', children: body })
29
- try {
30
- const dialog = document.querySelector<HTMLElement>('.sv-modal')!
31
- expect(dialog.getAttribute('role')).toBe('dialog')
32
- expect(dialog.getAttribute('aria-modal')).toBe('true')
33
- const titleId = dialog.getAttribute('aria-labelledby')!
34
- expect(document.getElementById(titleId)!.textContent).toBe('Edit')
35
- expect(document.querySelector('.sv-modal .body')!.textContent).toBe('hello')
36
- } finally { destroy() }
37
- })
38
-
39
- it('Escape and the close button both fire onClose', () => {
40
- let closed = 0
41
- const { destroy } = mountC(SvModal, { open: true, title: 'X', onClose: () => (closed++), children: body })
42
- try {
43
- document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }))
44
- flushSync()
45
- expect(closed).toBe(1)
46
- } finally { destroy() }
47
- })
48
- })
49
-
50
- describe('SvPopover', () => {
51
- it('opens the panel on anchor click and closes on outside pointerdown', () => {
52
- const { target, destroy } = mountC(SvPopover, { anchor: anchorBtn, children: body })
53
- try {
54
- expect(document.querySelector('.sv-pop__panel')).toBeNull()
55
- target.querySelector<HTMLElement>('.anchor')!.click()
56
- flushSync()
57
- const panel = document.querySelector<HTMLElement>('.sv-pop__panel')!
58
- expect(panel).not.toBeNull()
59
- expect(panel.getAttribute('role')).toBe('dialog')
60
- // Outside click closes.
61
- document.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true }))
62
- flushSync()
63
- expect(document.querySelector('.sv-pop__panel')).toBeNull()
64
- } finally { destroy() }
65
- })
66
- })
67
-
68
- describe('SvTooltip', () => {
69
- it('shows after the delay on focus and wires aria-describedby', () => {
70
- vi.useFakeTimers()
71
- try {
72
- const child = createRawSnippet(() => ({ render: () => `<button class="t">i</button>` }))
73
- const { target, destroy } = mountC(SvTooltip, { text: 'Tip text', delay: 200, children: child })
74
- const anchor = target.querySelector<HTMLElement>('.sv-tip__anchor')!
75
- anchor.dispatchEvent(new FocusEvent('focusin', { bubbles: true }))
76
- vi.advanceTimersByTime(210)
77
- flushSync()
78
- const tip = document.querySelector<HTMLElement>('.sv-tip')!
79
- expect(tip).not.toBeNull()
80
- expect(tip.getAttribute('role')).toBe('tooltip')
81
- expect(anchor.getAttribute('aria-describedby')).toBe(tip.id)
82
- // The wrapper span is never itself focusable, so AT users only ever land
83
- // on the real interactive child below - it must carry the description
84
- // too, or it's never announced on focus (see SvTooltip.svelte effect).
85
- const focusEl = target.querySelector<HTMLElement>('.t')!
86
- expect(focusEl.getAttribute('aria-describedby')).toBe(tip.id)
87
- destroy()
88
- } finally { vi.useRealTimers() }
89
- })
90
- })
1
+ /**
2
+ * Component tests for the overlay trio: SvModal (dialog semantics, Escape /
3
+ * backdrop close), SvPopover (click open + outside close) and SvTooltip
4
+ * (focus-triggered, aria-describedby wiring).
5
+ */
6
+ import { describe, expect, it, vi, afterEach } from 'vitest'
7
+ import { mount, unmount, flushSync, createRawSnippet } from 'svelte'
8
+ import SvModal from './SvModal.svelte'
9
+ import SvPopover from './SvPopover.svelte'
10
+ import SvTooltip from './SvTooltip.svelte'
11
+
12
+ const body = createRawSnippet(() => ({ render: () => `<p class="body">hello</p>` }))
13
+ const anchorBtn = createRawSnippet(() => ({ render: () => `<button class="anchor">open</button>` }))
14
+
15
+ function mountC(Comp: any, props: Record<string, unknown>) {
16
+ const target = document.createElement('div')
17
+ document.body.appendChild(target)
18
+ const app = mount(Comp, { target, props: props as any })
19
+ flushSync()
20
+ return { target, destroy: () => { unmount(app); target.remove() } }
21
+ }
22
+ afterEach(() => {
23
+ document.querySelectorAll('.sv-modal__backdrop, .sv-pop__panel, .sv-tip').forEach((n) => n.remove())
24
+ })
25
+
26
+ describe('SvModal', () => {
27
+ it('renders a labelled modal dialog when open', () => {
28
+ const { destroy } = mountC(SvModal, { open: true, title: 'Edit', children: body })
29
+ try {
30
+ const dialog = document.querySelector<HTMLElement>('.sv-modal')!
31
+ expect(dialog.getAttribute('role')).toBe('dialog')
32
+ expect(dialog.getAttribute('aria-modal')).toBe('true')
33
+ const titleId = dialog.getAttribute('aria-labelledby')!
34
+ expect(document.getElementById(titleId)!.textContent).toBe('Edit')
35
+ expect(document.querySelector('.sv-modal .body')!.textContent).toBe('hello')
36
+ } finally { destroy() }
37
+ })
38
+
39
+ it('Escape and the close button both fire onClose', () => {
40
+ let closed = 0
41
+ const { destroy } = mountC(SvModal, { open: true, title: 'X', onClose: () => (closed++), children: body })
42
+ try {
43
+ document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }))
44
+ flushSync()
45
+ expect(closed).toBe(1)
46
+ } finally { destroy() }
47
+ })
48
+ })
49
+
50
+ describe('SvPopover', () => {
51
+ it('opens the panel on anchor click and closes on outside pointerdown', () => {
52
+ const { target, destroy } = mountC(SvPopover, { anchor: anchorBtn, children: body })
53
+ try {
54
+ expect(document.querySelector('.sv-pop__panel')).toBeNull()
55
+ target.querySelector<HTMLElement>('.anchor')!.click()
56
+ flushSync()
57
+ const panel = document.querySelector<HTMLElement>('.sv-pop__panel')!
58
+ expect(panel).not.toBeNull()
59
+ expect(panel.getAttribute('role')).toBe('dialog')
60
+ // Outside click closes.
61
+ document.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true }))
62
+ flushSync()
63
+ expect(document.querySelector('.sv-pop__panel')).toBeNull()
64
+ } finally { destroy() }
65
+ })
66
+ })
67
+
68
+ describe('SvTooltip', () => {
69
+ it('shows after the delay on focus and wires aria-describedby', () => {
70
+ vi.useFakeTimers()
71
+ try {
72
+ const child = createRawSnippet(() => ({ render: () => `<button class="t">i</button>` }))
73
+ const { target, destroy } = mountC(SvTooltip, { text: 'Tip text', delay: 200, children: child })
74
+ const anchor = target.querySelector<HTMLElement>('.sv-tip__anchor')!
75
+ anchor.dispatchEvent(new FocusEvent('focusin', { bubbles: true }))
76
+ vi.advanceTimersByTime(210)
77
+ flushSync()
78
+ const tip = document.querySelector<HTMLElement>('.sv-tip')!
79
+ expect(tip).not.toBeNull()
80
+ expect(tip.getAttribute('role')).toBe('tooltip')
81
+ expect(anchor.getAttribute('aria-describedby')).toBe(tip.id)
82
+ // The wrapper span is never itself focusable, so AT users only ever land
83
+ // on the real interactive child below - it must carry the description
84
+ // too, or it's never announced on focus (see SvTooltip.svelte effect).
85
+ const focusEl = target.querySelector<HTMLElement>('.t')!
86
+ expect(focusEl.getAttribute('aria-describedby')).toBe(tip.id)
87
+ destroy()
88
+ } finally { vi.useRealTimers() }
89
+ })
90
+ })