@scalar/components 0.27.10 → 0.28.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 (608) hide show
  1. package/dist/components/ScalarButton/ScalarButton.vue.script.js +2 -2
  2. package/dist/components/ScalarButton/ScalarButton.vue.script.js.map +1 -1
  3. package/dist/components/ScalarButton/constants.js.map +1 -1
  4. package/dist/components/ScalarCard/ScalarCard.vue.script.js +1 -1
  5. package/dist/components/ScalarCard/ScalarCard.vue.script.js.map +1 -1
  6. package/dist/components/ScalarCard/ScalarCardFooter.vue.script.js +1 -1
  7. package/dist/components/ScalarCard/ScalarCardFooter.vue.script.js.map +1 -1
  8. package/dist/components/ScalarCard/ScalarCardHeader.vue.script.js +1 -1
  9. package/dist/components/ScalarCard/ScalarCardHeader.vue.script.js.map +1 -1
  10. package/dist/components/ScalarCard/ScalarCardSection.vue.script.js +1 -1
  11. package/dist/components/ScalarCard/ScalarCardSection.vue.script.js.map +1 -1
  12. package/dist/components/ScalarCard/useCardHeading.js +3 -1
  13. package/dist/components/ScalarCard/useCardHeading.js.map +1 -1
  14. package/dist/components/ScalarCheckboxInput/ScalarCheckbox.vue.script.js +1 -1
  15. package/dist/components/ScalarCheckboxInput/ScalarCheckbox.vue.script.js.map +1 -1
  16. package/dist/components/ScalarCheckboxInput/ScalarCheckboxGroup.vue.d.ts.map +1 -1
  17. package/dist/components/ScalarCheckboxInput/ScalarCheckboxGroup.vue.js.map +1 -1
  18. package/dist/components/ScalarCheckboxInput/ScalarCheckboxGroup.vue.script.js +3 -3
  19. package/dist/components/ScalarCheckboxInput/ScalarCheckboxGroup.vue.script.js.map +1 -1
  20. package/dist/components/ScalarCheckboxInput/ScalarCheckboxInput.vue.script.js +2 -2
  21. package/dist/components/ScalarCheckboxInput/ScalarCheckboxInput.vue.script.js.map +1 -1
  22. package/dist/components/ScalarCheckboxInput/ScalarCheckboxRadioGroup.vue.d.ts.map +1 -1
  23. package/dist/components/ScalarCheckboxInput/ScalarCheckboxRadioGroup.vue.script.js +2 -2
  24. package/dist/components/ScalarCheckboxInput/ScalarCheckboxRadioGroup.vue.script.js.map +1 -1
  25. package/dist/components/ScalarCodeBlock/ScalarCodeBlock.vue.d.ts.map +1 -1
  26. package/dist/components/ScalarCodeBlock/ScalarCodeBlock.vue.js.map +1 -1
  27. package/dist/components/ScalarCodeBlock/ScalarCodeBlock.vue.script.js +11 -3
  28. package/dist/components/ScalarCodeBlock/ScalarCodeBlock.vue.script.js.map +1 -1
  29. package/dist/components/ScalarCodeBlock/ScalarCodeBlockCopy.vue.script.js +2 -2
  30. package/dist/components/ScalarCodeBlock/ScalarCodeBlockCopy.vue.script.js.map +1 -1
  31. package/dist/components/ScalarCodeBlock/constants.d.ts +1 -0
  32. package/dist/components/ScalarCodeBlock/constants.d.ts.map +1 -1
  33. package/dist/components/ScalarCodeBlock/constants.js +1 -0
  34. package/dist/components/ScalarCodeBlock/constants.js.map +1 -1
  35. package/dist/components/ScalarColorModeToggle/ScalarColorModeToggle.vue.d.ts.map +1 -1
  36. package/dist/components/ScalarColorModeToggle/ScalarColorModeToggle.vue.script.js +1 -1
  37. package/dist/components/ScalarColorModeToggle/ScalarColorModeToggle.vue.script.js.map +1 -1
  38. package/dist/components/ScalarColorModeToggle/ScalarColorModeToggleButton.vue.script.js +1 -1
  39. package/dist/components/ScalarColorModeToggle/ScalarColorModeToggleButton.vue.script.js.map +1 -1
  40. package/dist/components/ScalarColorModeToggle/ScalarColorModeToggleIcon.vue.js +1 -1
  41. package/dist/components/ScalarColorModeToggle/ScalarColorModeToggleIcon.vue.script.js +1 -1
  42. package/dist/components/ScalarColorModeToggle/ScalarColorModeToggleIcon.vue.script.js.map +1 -1
  43. package/dist/components/ScalarCombobox/ScalarCombobox.vue.d.ts +1 -1
  44. package/dist/components/ScalarCombobox/ScalarCombobox.vue.d.ts.map +1 -1
  45. package/dist/components/ScalarCombobox/ScalarCombobox.vue.script.js +3 -3
  46. package/dist/components/ScalarCombobox/ScalarCombobox.vue.script.js.map +1 -1
  47. package/dist/components/ScalarCombobox/ScalarComboboxMultiselect.vue.d.ts +1 -1
  48. package/dist/components/ScalarCombobox/ScalarComboboxMultiselect.vue.d.ts.map +1 -1
  49. package/dist/components/ScalarCombobox/ScalarComboboxMultiselect.vue.js.map +1 -1
  50. package/dist/components/ScalarCombobox/ScalarComboboxMultiselect.vue.script.js +4 -4
  51. package/dist/components/ScalarCombobox/ScalarComboboxMultiselect.vue.script.js.map +1 -1
  52. package/dist/components/ScalarCombobox/ScalarComboboxOption.vue.script.js +1 -1
  53. package/dist/components/ScalarCombobox/ScalarComboboxOption.vue.script.js.map +1 -1
  54. package/dist/components/ScalarCombobox/ScalarComboboxOptionGroup.vue.script.js +1 -1
  55. package/dist/components/ScalarCombobox/ScalarComboboxOptionGroup.vue.script.js.map +1 -1
  56. package/dist/components/ScalarCombobox/ScalarComboboxOptions.vue.d.ts +1 -1
  57. package/dist/components/ScalarCombobox/ScalarComboboxOptions.vue.d.ts.map +1 -1
  58. package/dist/components/ScalarCombobox/ScalarComboboxOptions.vue.js.map +1 -1
  59. package/dist/components/ScalarCombobox/ScalarComboboxOptions.vue.script.js +6 -10
  60. package/dist/components/ScalarCombobox/ScalarComboboxOptions.vue.script.js.map +1 -1
  61. package/dist/components/ScalarCombobox/ScalarComboboxPopover.vue.d.ts.map +1 -1
  62. package/dist/components/ScalarCombobox/ScalarComboboxPopover.vue.script.js +1 -1
  63. package/dist/components/ScalarCombobox/ScalarComboboxPopover.vue.script.js.map +1 -1
  64. package/dist/components/ScalarCombobox/filter-by-option-label.js.map +1 -1
  65. package/dist/components/ScalarCombobox/types.js.map +1 -1
  66. package/dist/components/ScalarCopy/ScalarCopy.vue.d.ts.map +1 -1
  67. package/dist/components/ScalarCopy/ScalarCopy.vue.script.js +2 -2
  68. package/dist/components/ScalarCopy/ScalarCopy.vue.script.js.map +1 -1
  69. package/dist/components/ScalarCopy/ScalarCopyBackdrop.vue.script.js +1 -1
  70. package/dist/components/ScalarCopy/ScalarCopyBackdrop.vue.script.js.map +1 -1
  71. package/dist/components/ScalarCopy/ScalarCopyButton.vue.script.js +2 -2
  72. package/dist/components/ScalarCopy/ScalarCopyButton.vue.script.js.map +1 -1
  73. package/dist/components/ScalarDropdown/ScalarDropdown.vue.script.js +2 -2
  74. package/dist/components/ScalarDropdown/ScalarDropdown.vue.script.js.map +1 -1
  75. package/dist/components/ScalarDropdown/ScalarDropdownButton.vue.js +1 -1
  76. package/dist/components/ScalarDropdown/ScalarDropdownButton.vue.script.js +1 -1
  77. package/dist/components/ScalarDropdown/ScalarDropdownButton.vue.script.js.map +1 -1
  78. package/dist/components/ScalarDropdown/ScalarDropdownDivider.vue.js +1 -1
  79. package/dist/components/ScalarDropdown/ScalarDropdownDivider.vue.js.map +1 -1
  80. package/dist/components/ScalarDropdown/ScalarDropdownDivider.vue.script.js.map +1 -1
  81. package/dist/components/ScalarDropdown/ScalarDropdownItem.vue.d.ts.map +1 -1
  82. package/dist/components/ScalarDropdown/ScalarDropdownItem.vue.js +1 -1
  83. package/dist/components/ScalarDropdown/ScalarDropdownItem.vue.script.js +1 -1
  84. package/dist/components/ScalarDropdown/ScalarDropdownItem.vue.script.js.map +1 -1
  85. package/dist/components/ScalarDropdown/ScalarDropdownMenu.vue.script.js +1 -1
  86. package/dist/components/ScalarDropdown/ScalarDropdownMenu.vue.script.js.map +1 -1
  87. package/dist/components/ScalarDropdown/useDropdown.js.map +1 -1
  88. package/dist/components/ScalarErrorBoundary/ScalarErrorBoundary.vue.script.js +2 -2
  89. package/dist/components/ScalarErrorBoundary/ScalarErrorBoundary.vue.script.js.map +1 -1
  90. package/dist/components/ScalarFileUpload/ScalarFileUpload.vue.d.ts.map +1 -1
  91. package/dist/components/ScalarFileUpload/ScalarFileUpload.vue.script.js +3 -3
  92. package/dist/components/ScalarFileUpload/ScalarFileUpload.vue.script.js.map +1 -1
  93. package/dist/components/ScalarFileUpload/ScalarFileUploadDropTarget.vue.script.js +1 -1
  94. package/dist/components/ScalarFileUpload/ScalarFileUploadDropTarget.vue.script.js.map +1 -1
  95. package/dist/components/ScalarFileUpload/ScalarFileUploadError.vue.script.js +1 -1
  96. package/dist/components/ScalarFileUpload/ScalarFileUploadError.vue.script.js.map +1 -1
  97. package/dist/components/ScalarFileUpload/ScalarFileUploadFileList.vue.d.ts.map +1 -1
  98. package/dist/components/ScalarFileUpload/ScalarFileUploadFileList.vue.script.js +2 -2
  99. package/dist/components/ScalarFileUpload/ScalarFileUploadFileList.vue.script.js.map +1 -1
  100. package/dist/components/ScalarFileUpload/ScalarFileUploadInput.vue.d.ts.map +1 -1
  101. package/dist/components/ScalarFileUpload/ScalarFileUploadInput.vue.script.js +1 -1
  102. package/dist/components/ScalarFileUpload/ScalarFileUploadInput.vue.script.js.map +1 -1
  103. package/dist/components/ScalarFileUpload/ScalarFileUploadInputCompact.vue.script.js +1 -1
  104. package/dist/components/ScalarFileUpload/ScalarFileUploadInputCompact.vue.script.js.map +1 -1
  105. package/dist/components/ScalarFileUpload/ScalarFileUploadLoading.vue.script.js +1 -1
  106. package/dist/components/ScalarFileUpload/ScalarFileUploadLoading.vue.script.js.map +1 -1
  107. package/dist/components/ScalarFileUpload/types.js.map +1 -1
  108. package/dist/components/ScalarFloating/ScalarFloating.vue.script.js +4 -2
  109. package/dist/components/ScalarFloating/ScalarFloating.vue.script.js.map +1 -1
  110. package/dist/components/ScalarFloating/ScalarFloatingBackdrop.vue.script.js +1 -1
  111. package/dist/components/ScalarFloating/ScalarFloatingBackdrop.vue.script.js.map +1 -1
  112. package/dist/components/ScalarFloating/useResizeWithTarget.js.map +1 -1
  113. package/dist/components/ScalarForm/ScalarForm.vue.script.js +1 -1
  114. package/dist/components/ScalarForm/ScalarForm.vue.script.js.map +1 -1
  115. package/dist/components/ScalarForm/ScalarFormError.vue.script.js +1 -1
  116. package/dist/components/ScalarForm/ScalarFormError.vue.script.js.map +1 -1
  117. package/dist/components/ScalarForm/ScalarFormField.vue.script.js +1 -1
  118. package/dist/components/ScalarForm/ScalarFormField.vue.script.js.map +1 -1
  119. package/dist/components/ScalarForm/ScalarFormInput.vue.script.js +1 -1
  120. package/dist/components/ScalarForm/ScalarFormInput.vue.script.js.map +1 -1
  121. package/dist/components/ScalarForm/ScalarFormInputGroup.vue.script.js +1 -1
  122. package/dist/components/ScalarForm/ScalarFormInputGroup.vue.script.js.map +1 -1
  123. package/dist/components/ScalarForm/ScalarFormSection.vue.js +1 -1
  124. package/dist/components/ScalarForm/ScalarFormSection.vue.js.map +1 -1
  125. package/dist/components/ScalarForm/ScalarFormSection.vue.script.js.map +1 -1
  126. package/dist/components/ScalarForm/useFormGroups.js.map +1 -1
  127. package/dist/components/ScalarHeader/ScalarHeader.vue.script.js +1 -1
  128. package/dist/components/ScalarHeader/ScalarHeader.vue.script.js.map +1 -1
  129. package/dist/components/ScalarHeader/ScalarHeaderButton.vue.script.js +1 -1
  130. package/dist/components/ScalarHeader/ScalarHeaderButton.vue.script.js.map +1 -1
  131. package/dist/components/ScalarHotkey/ScalarHotkey.vue.script.js +1 -1
  132. package/dist/components/ScalarHotkey/ScalarHotkey.vue.script.js.map +1 -1
  133. package/dist/components/ScalarHotkey/constants.js.map +1 -1
  134. package/dist/components/ScalarHotkey/formatHotkey.js +1 -8
  135. package/dist/components/ScalarHotkey/formatHotkey.js.map +1 -1
  136. package/dist/components/ScalarIcon/IconList.vue.d.ts.map +1 -1
  137. package/dist/components/ScalarIcon/ScalarIcon.vue.js +1 -1
  138. package/dist/components/ScalarIcon/ScalarIcon.vue.script.js +1 -1
  139. package/dist/components/ScalarIcon/ScalarIcon.vue.script.js.map +1 -1
  140. package/dist/components/ScalarIcon/ScalarIconLegacyAdapter.vue.script.js +1 -1
  141. package/dist/components/ScalarIcon/ScalarIconLegacyAdapter.vue.script.js.map +1 -1
  142. package/dist/components/ScalarIcon/icons/Add.svg.virtual.js +1 -1
  143. package/dist/components/ScalarIcon/icons/Add.svg.virtual.js.map +1 -1
  144. package/dist/components/ScalarIcon/icons/AddTab.svg.virtual.js +1 -1
  145. package/dist/components/ScalarIcon/icons/AddTab.svg.virtual.js.map +1 -1
  146. package/dist/components/ScalarIcon/icons/Alert.svg.virtual.js +1 -1
  147. package/dist/components/ScalarIcon/icons/Alert.svg.virtual.js.map +1 -1
  148. package/dist/components/ScalarIcon/icons/ArrowLeft.svg.virtual.js +1 -1
  149. package/dist/components/ScalarIcon/icons/ArrowLeft.svg.virtual.js.map +1 -1
  150. package/dist/components/ScalarIcon/icons/ArrowRight.svg.virtual.js +1 -1
  151. package/dist/components/ScalarIcon/icons/ArrowRight.svg.virtual.js.map +1 -1
  152. package/dist/components/ScalarIcon/icons/Brackets.svg.virtual.js +1 -1
  153. package/dist/components/ScalarIcon/icons/Brackets.svg.virtual.js.map +1 -1
  154. package/dist/components/ScalarIcon/icons/Branch.svg.virtual.js +1 -1
  155. package/dist/components/ScalarIcon/icons/Branch.svg.virtual.js.map +1 -1
  156. package/dist/components/ScalarIcon/icons/Changelog.svg.virtual.js +1 -1
  157. package/dist/components/ScalarIcon/icons/Changelog.svg.virtual.js.map +1 -1
  158. package/dist/components/ScalarIcon/icons/Checkmark.svg.virtual.js +1 -1
  159. package/dist/components/ScalarIcon/icons/Checkmark.svg.virtual.js.map +1 -1
  160. package/dist/components/ScalarIcon/icons/ChevronDown.svg.virtual.js +1 -1
  161. package/dist/components/ScalarIcon/icons/ChevronDown.svg.virtual.js.map +1 -1
  162. package/dist/components/ScalarIcon/icons/ChevronLeft.svg.virtual.js +1 -1
  163. package/dist/components/ScalarIcon/icons/ChevronLeft.svg.virtual.js.map +1 -1
  164. package/dist/components/ScalarIcon/icons/ChevronRight.svg.virtual.js +1 -1
  165. package/dist/components/ScalarIcon/icons/ChevronRight.svg.virtual.js.map +1 -1
  166. package/dist/components/ScalarIcon/icons/ChevronUp.svg.virtual.js +1 -1
  167. package/dist/components/ScalarIcon/icons/ChevronUp.svg.virtual.js.map +1 -1
  168. package/dist/components/ScalarIcon/icons/Clipboard.svg.virtual.js +1 -1
  169. package/dist/components/ScalarIcon/icons/Clipboard.svg.virtual.js.map +1 -1
  170. package/dist/components/ScalarIcon/icons/Close.svg.virtual.js +1 -1
  171. package/dist/components/ScalarIcon/icons/Close.svg.virtual.js.map +1 -1
  172. package/dist/components/ScalarIcon/icons/CloseTab.svg.virtual.js +1 -1
  173. package/dist/components/ScalarIcon/icons/CloseTab.svg.virtual.js.map +1 -1
  174. package/dist/components/ScalarIcon/icons/CloseTabs.svg.virtual.js +1 -1
  175. package/dist/components/ScalarIcon/icons/CloseTabs.svg.virtual.js.map +1 -1
  176. package/dist/components/ScalarIcon/icons/Cloud.svg.virtual.js +1 -1
  177. package/dist/components/ScalarIcon/icons/Cloud.svg.virtual.js.map +1 -1
  178. package/dist/components/ScalarIcon/icons/CodeFolder.svg.virtual.js +1 -1
  179. package/dist/components/ScalarIcon/icons/CodeFolder.svg.virtual.js.map +1 -1
  180. package/dist/components/ScalarIcon/icons/Cog.svg.virtual.js +1 -1
  181. package/dist/components/ScalarIcon/icons/Cog.svg.virtual.js.map +1 -1
  182. package/dist/components/ScalarIcon/icons/Collection.svg.virtual.js +1 -1
  183. package/dist/components/ScalarIcon/icons/Collection.svg.virtual.js.map +1 -1
  184. package/dist/components/ScalarIcon/icons/Cookie.svg.virtual.js +1 -1
  185. package/dist/components/ScalarIcon/icons/Cookie.svg.virtual.js.map +1 -1
  186. package/dist/components/ScalarIcon/icons/DarkMode.svg.virtual.js +1 -1
  187. package/dist/components/ScalarIcon/icons/DarkMode.svg.virtual.js.map +1 -1
  188. package/dist/components/ScalarIcon/icons/Delete.svg.virtual.js +1 -1
  189. package/dist/components/ScalarIcon/icons/Delete.svg.virtual.js.map +1 -1
  190. package/dist/components/ScalarIcon/icons/Discord.svg.virtual.js +1 -1
  191. package/dist/components/ScalarIcon/icons/Discord.svg.virtual.js.map +1 -1
  192. package/dist/components/ScalarIcon/icons/DocsPage.svg.virtual.js +1 -1
  193. package/dist/components/ScalarIcon/icons/DocsPage.svg.virtual.js.map +1 -1
  194. package/dist/components/ScalarIcon/icons/Download.svg.virtual.js +1 -1
  195. package/dist/components/ScalarIcon/icons/Download.svg.virtual.js.map +1 -1
  196. package/dist/components/ScalarIcon/icons/Duplicate.svg.virtual.js +1 -1
  197. package/dist/components/ScalarIcon/icons/Duplicate.svg.virtual.js.map +1 -1
  198. package/dist/components/ScalarIcon/icons/Edit.svg.virtual.js +1 -1
  199. package/dist/components/ScalarIcon/icons/Edit.svg.virtual.js.map +1 -1
  200. package/dist/components/ScalarIcon/icons/Ellipses.svg.virtual.js +1 -1
  201. package/dist/components/ScalarIcon/icons/Ellipses.svg.virtual.js.map +1 -1
  202. package/dist/components/ScalarIcon/icons/Email.svg.virtual.js +1 -1
  203. package/dist/components/ScalarIcon/icons/Email.svg.virtual.js.map +1 -1
  204. package/dist/components/ScalarIcon/icons/Error.svg.virtual.js +1 -1
  205. package/dist/components/ScalarIcon/icons/Error.svg.virtual.js.map +1 -1
  206. package/dist/components/ScalarIcon/icons/Example.svg.virtual.js +1 -1
  207. package/dist/components/ScalarIcon/icons/Example.svg.virtual.js.map +1 -1
  208. package/dist/components/ScalarIcon/icons/ExternalLink.svg.virtual.js +1 -1
  209. package/dist/components/ScalarIcon/icons/ExternalLink.svg.virtual.js.map +1 -1
  210. package/dist/components/ScalarIcon/icons/FilterList.svg.virtual.js +1 -1
  211. package/dist/components/ScalarIcon/icons/FilterList.svg.virtual.js.map +1 -1
  212. package/dist/components/ScalarIcon/icons/Folder.svg.virtual.js +1 -1
  213. package/dist/components/ScalarIcon/icons/Folder.svg.virtual.js.map +1 -1
  214. package/dist/components/ScalarIcon/icons/GitHub.svg.virtual.js +1 -1
  215. package/dist/components/ScalarIcon/icons/GitHub.svg.virtual.js.map +1 -1
  216. package/dist/components/ScalarIcon/icons/GitHubLine.svg.virtual.js +1 -1
  217. package/dist/components/ScalarIcon/icons/GitHubLine.svg.virtual.js.map +1 -1
  218. package/dist/components/ScalarIcon/icons/Globe.svg.virtual.js +1 -1
  219. package/dist/components/ScalarIcon/icons/Globe.svg.virtual.js.map +1 -1
  220. package/dist/components/ScalarIcon/icons/Google.svg.virtual.js +1 -1
  221. package/dist/components/ScalarIcon/icons/Google.svg.virtual.js.map +1 -1
  222. package/dist/components/ScalarIcon/icons/Help.svg.virtual.js +1 -1
  223. package/dist/components/ScalarIcon/icons/Help.svg.virtual.js.map +1 -1
  224. package/dist/components/ScalarIcon/icons/Hide.svg.virtual.js +1 -1
  225. package/dist/components/ScalarIcon/icons/Hide.svg.virtual.js.map +1 -1
  226. package/dist/components/ScalarIcon/icons/History.svg.virtual.js +1 -1
  227. package/dist/components/ScalarIcon/icons/History.svg.virtual.js.map +1 -1
  228. package/dist/components/ScalarIcon/icons/House.svg.virtual.js +1 -1
  229. package/dist/components/ScalarIcon/icons/House.svg.virtual.js.map +1 -1
  230. package/dist/components/ScalarIcon/icons/Import.svg.virtual.js +1 -1
  231. package/dist/components/ScalarIcon/icons/Import.svg.virtual.js.map +1 -1
  232. package/dist/components/ScalarIcon/icons/Info.svg.virtual.js +1 -1
  233. package/dist/components/ScalarIcon/icons/Info.svg.virtual.js.map +1 -1
  234. package/dist/components/ScalarIcon/icons/Key.svg.virtual.js +1 -1
  235. package/dist/components/ScalarIcon/icons/Key.svg.virtual.js.map +1 -1
  236. package/dist/components/ScalarIcon/icons/Leave.svg.virtual.js +1 -1
  237. package/dist/components/ScalarIcon/icons/Leave.svg.virtual.js.map +1 -1
  238. package/dist/components/ScalarIcon/icons/LightDarkModeToggle.svg.virtual.js +1 -1
  239. package/dist/components/ScalarIcon/icons/LightDarkModeToggle.svg.virtual.js.map +1 -1
  240. package/dist/components/ScalarIcon/icons/LightMode.svg.virtual.js +1 -1
  241. package/dist/components/ScalarIcon/icons/LightMode.svg.virtual.js.map +1 -1
  242. package/dist/components/ScalarIcon/icons/Link.svg.virtual.js +1 -1
  243. package/dist/components/ScalarIcon/icons/Link.svg.virtual.js.map +1 -1
  244. package/dist/components/ScalarIcon/icons/Lock.svg.virtual.js +1 -1
  245. package/dist/components/ScalarIcon/icons/Lock.svg.virtual.js.map +1 -1
  246. package/dist/components/ScalarIcon/icons/Logo.svg.virtual.js +1 -1
  247. package/dist/components/ScalarIcon/icons/Logo.svg.virtual.js.map +1 -1
  248. package/dist/components/ScalarIcon/icons/Magic.svg.virtual.js +1 -1
  249. package/dist/components/ScalarIcon/icons/Magic.svg.virtual.js.map +1 -1
  250. package/dist/components/ScalarIcon/icons/Markdown.svg.virtual.js +1 -1
  251. package/dist/components/ScalarIcon/icons/Markdown.svg.virtual.js.map +1 -1
  252. package/dist/components/ScalarIcon/icons/Menu.svg.virtual.js +1 -1
  253. package/dist/components/ScalarIcon/icons/Menu.svg.virtual.js.map +1 -1
  254. package/dist/components/ScalarIcon/icons/NotAllowed.svg.virtual.js +1 -1
  255. package/dist/components/ScalarIcon/icons/NotAllowed.svg.virtual.js.map +1 -1
  256. package/dist/components/ScalarIcon/icons/Page.svg.virtual.js +1 -1
  257. package/dist/components/ScalarIcon/icons/Page.svg.virtual.js.map +1 -1
  258. package/dist/components/ScalarIcon/icons/Pencil.svg.virtual.js +1 -1
  259. package/dist/components/ScalarIcon/icons/Pencil.svg.virtual.js.map +1 -1
  260. package/dist/components/ScalarIcon/icons/Play.svg.virtual.js +1 -1
  261. package/dist/components/ScalarIcon/icons/Play.svg.virtual.js.map +1 -1
  262. package/dist/components/ScalarIcon/icons/Refresh.svg.virtual.js +1 -1
  263. package/dist/components/ScalarIcon/icons/Refresh.svg.virtual.js.map +1 -1
  264. package/dist/components/ScalarIcon/icons/Roadmap.svg.virtual.js +1 -1
  265. package/dist/components/ScalarIcon/icons/Roadmap.svg.virtual.js.map +1 -1
  266. package/dist/components/ScalarIcon/icons/Scribble.svg.virtual.js +1 -1
  267. package/dist/components/ScalarIcon/icons/Scribble.svg.virtual.js.map +1 -1
  268. package/dist/components/ScalarIcon/icons/Search.svg.virtual.js +1 -1
  269. package/dist/components/ScalarIcon/icons/Search.svg.virtual.js.map +1 -1
  270. package/dist/components/ScalarIcon/icons/Server.svg.virtual.js +1 -1
  271. package/dist/components/ScalarIcon/icons/Server.svg.virtual.js.map +1 -1
  272. package/dist/components/ScalarIcon/icons/Settings.svg.virtual.js +1 -1
  273. package/dist/components/ScalarIcon/icons/Settings.svg.virtual.js.map +1 -1
  274. package/dist/components/ScalarIcon/icons/Show.svg.virtual.js +1 -1
  275. package/dist/components/ScalarIcon/icons/Show.svg.virtual.js.map +1 -1
  276. package/dist/components/ScalarIcon/icons/Sort.svg.virtual.js +1 -1
  277. package/dist/components/ScalarIcon/icons/Sort.svg.virtual.js.map +1 -1
  278. package/dist/components/ScalarIcon/icons/Terminal.svg.virtual.js +1 -1
  279. package/dist/components/ScalarIcon/icons/Terminal.svg.virtual.js.map +1 -1
  280. package/dist/components/ScalarIcon/icons/Trash.svg.virtual.js +1 -1
  281. package/dist/components/ScalarIcon/icons/Trash.svg.virtual.js.map +1 -1
  282. package/dist/components/ScalarIcon/icons/Unlock.svg.virtual.js +1 -1
  283. package/dist/components/ScalarIcon/icons/Unlock.svg.virtual.js.map +1 -1
  284. package/dist/components/ScalarIcon/icons/Unwatch.svg.virtual.js +1 -1
  285. package/dist/components/ScalarIcon/icons/Unwatch.svg.virtual.js.map +1 -1
  286. package/dist/components/ScalarIcon/icons/Upload.svg.virtual.js +1 -1
  287. package/dist/components/ScalarIcon/icons/Upload.svg.virtual.js.map +1 -1
  288. package/dist/components/ScalarIcon/icons/User.svg.virtual.js +1 -1
  289. package/dist/components/ScalarIcon/icons/User.svg.virtual.js.map +1 -1
  290. package/dist/components/ScalarIcon/icons/UserSwitch.svg.virtual.js +1 -1
  291. package/dist/components/ScalarIcon/icons/UserSwitch.svg.virtual.js.map +1 -1
  292. package/dist/components/ScalarIcon/icons/Users.svg.virtual.js +1 -1
  293. package/dist/components/ScalarIcon/icons/Users.svg.virtual.js.map +1 -1
  294. package/dist/components/ScalarIcon/icons/Versions.svg.virtual.js +1 -1
  295. package/dist/components/ScalarIcon/icons/Versions.svg.virtual.js.map +1 -1
  296. package/dist/components/ScalarIcon/icons/Wallet.svg.virtual.js +1 -1
  297. package/dist/components/ScalarIcon/icons/Wallet.svg.virtual.js.map +1 -1
  298. package/dist/components/ScalarIcon/icons/Watch.svg.virtual.js +1 -1
  299. package/dist/components/ScalarIcon/icons/Watch.svg.virtual.js.map +1 -1
  300. package/dist/components/ScalarIcon/icons/Workspace.svg.virtual.js +1 -1
  301. package/dist/components/ScalarIcon/icons/Workspace.svg.virtual.js.map +1 -1
  302. package/dist/components/ScalarIcon/icons/index.d.ts +1 -1
  303. package/dist/components/ScalarIcon/icons/index.d.ts.map +1 -1
  304. package/dist/components/ScalarIcon/icons/programming-framework-angular.svg.virtual.js +1 -1
  305. package/dist/components/ScalarIcon/icons/programming-framework-angular.svg.virtual.js.map +1 -1
  306. package/dist/components/ScalarIcon/icons/programming-framework-astro.svg.virtual.js +1 -1
  307. package/dist/components/ScalarIcon/icons/programming-framework-astro.svg.virtual.js.map +1 -1
  308. package/dist/components/ScalarIcon/icons/programming-framework-laravel.svg.virtual.js +1 -1
  309. package/dist/components/ScalarIcon/icons/programming-framework-laravel.svg.virtual.js.map +1 -1
  310. package/dist/components/ScalarIcon/icons/programming-framework-nextdotjs.svg.virtual.js +1 -1
  311. package/dist/components/ScalarIcon/icons/programming-framework-nextdotjs.svg.virtual.js.map +1 -1
  312. package/dist/components/ScalarIcon/icons/programming-framework-react.svg.virtual.js +1 -1
  313. package/dist/components/ScalarIcon/icons/programming-framework-react.svg.virtual.js.map +1 -1
  314. package/dist/components/ScalarIcon/icons/programming-framework-vuedotjs.svg.virtual.js +1 -1
  315. package/dist/components/ScalarIcon/icons/programming-framework-vuedotjs.svg.virtual.js.map +1 -1
  316. package/dist/components/ScalarIcon/icons/programming-language-c.svg.virtual.js +1 -1
  317. package/dist/components/ScalarIcon/icons/programming-language-c.svg.virtual.js.map +1 -1
  318. package/dist/components/ScalarIcon/icons/programming-language-clojure.svg.virtual.js +1 -1
  319. package/dist/components/ScalarIcon/icons/programming-language-clojure.svg.virtual.js.map +1 -1
  320. package/dist/components/ScalarIcon/icons/programming-language-csharp.svg.virtual.js +1 -1
  321. package/dist/components/ScalarIcon/icons/programming-language-csharp.svg.virtual.js.map +1 -1
  322. package/dist/components/ScalarIcon/icons/programming-language-css3.svg.virtual.js +1 -1
  323. package/dist/components/ScalarIcon/icons/programming-language-css3.svg.virtual.js.map +1 -1
  324. package/dist/components/ScalarIcon/icons/programming-language-dart.svg.virtual.js +1 -1
  325. package/dist/components/ScalarIcon/icons/programming-language-dart.svg.virtual.js.map +1 -1
  326. package/dist/components/ScalarIcon/icons/programming-language-fsharp.svg.virtual.js +1 -1
  327. package/dist/components/ScalarIcon/icons/programming-language-fsharp.svg.virtual.js.map +1 -1
  328. package/dist/components/ScalarIcon/icons/programming-language-go.svg.virtual.js +1 -1
  329. package/dist/components/ScalarIcon/icons/programming-language-go.svg.virtual.js.map +1 -1
  330. package/dist/components/ScalarIcon/icons/programming-language-html5.svg.virtual.js +1 -1
  331. package/dist/components/ScalarIcon/icons/programming-language-html5.svg.virtual.js.map +1 -1
  332. package/dist/components/ScalarIcon/icons/programming-language-http.svg.virtual.js +1 -1
  333. package/dist/components/ScalarIcon/icons/programming-language-http.svg.virtual.js.map +1 -1
  334. package/dist/components/ScalarIcon/icons/programming-language-java.svg.virtual.js +1 -1
  335. package/dist/components/ScalarIcon/icons/programming-language-java.svg.virtual.js.map +1 -1
  336. package/dist/components/ScalarIcon/icons/programming-language-javascript.svg.virtual.js +1 -1
  337. package/dist/components/ScalarIcon/icons/programming-language-javascript.svg.virtual.js.map +1 -1
  338. package/dist/components/ScalarIcon/icons/programming-language-json.svg.virtual.js +1 -1
  339. package/dist/components/ScalarIcon/icons/programming-language-json.svg.virtual.js.map +1 -1
  340. package/dist/components/ScalarIcon/icons/programming-language-julia.svg.virtual.js +36 -0
  341. package/dist/components/ScalarIcon/icons/programming-language-julia.svg.virtual.js.map +1 -0
  342. package/dist/components/ScalarIcon/icons/programming-language-kotlin.svg.virtual.js +1 -1
  343. package/dist/components/ScalarIcon/icons/programming-language-kotlin.svg.virtual.js.map +1 -1
  344. package/dist/components/ScalarIcon/icons/programming-language-node.svg.virtual.js +1 -1
  345. package/dist/components/ScalarIcon/icons/programming-language-node.svg.virtual.js.map +1 -1
  346. package/dist/components/ScalarIcon/icons/programming-language-objc.svg.virtual.js +1 -1
  347. package/dist/components/ScalarIcon/icons/programming-language-objc.svg.virtual.js.map +1 -1
  348. package/dist/components/ScalarIcon/icons/programming-language-ocaml.svg.virtual.js +1 -1
  349. package/dist/components/ScalarIcon/icons/programming-language-ocaml.svg.virtual.js.map +1 -1
  350. package/dist/components/ScalarIcon/icons/programming-language-php.svg.virtual.js +1 -1
  351. package/dist/components/ScalarIcon/icons/programming-language-php.svg.virtual.js.map +1 -1
  352. package/dist/components/ScalarIcon/icons/programming-language-powershell.svg.virtual.js +1 -1
  353. package/dist/components/ScalarIcon/icons/programming-language-powershell.svg.virtual.js.map +1 -1
  354. package/dist/components/ScalarIcon/icons/programming-language-python.svg.virtual.js +1 -1
  355. package/dist/components/ScalarIcon/icons/programming-language-python.svg.virtual.js.map +1 -1
  356. package/dist/components/ScalarIcon/icons/programming-language-r.svg.virtual.js +1 -1
  357. package/dist/components/ScalarIcon/icons/programming-language-r.svg.virtual.js.map +1 -1
  358. package/dist/components/ScalarIcon/icons/programming-language-ruby.svg.virtual.js +1 -1
  359. package/dist/components/ScalarIcon/icons/programming-language-ruby.svg.virtual.js.map +1 -1
  360. package/dist/components/ScalarIcon/icons/programming-language-rust.svg.virtual.js +1 -1
  361. package/dist/components/ScalarIcon/icons/programming-language-rust.svg.virtual.js.map +1 -1
  362. package/dist/components/ScalarIcon/icons/programming-language-scala.svg.virtual.js +1 -1
  363. package/dist/components/ScalarIcon/icons/programming-language-scala.svg.virtual.js.map +1 -1
  364. package/dist/components/ScalarIcon/icons/programming-language-shell.svg.virtual.js +1 -1
  365. package/dist/components/ScalarIcon/icons/programming-language-shell.svg.virtual.js.map +1 -1
  366. package/dist/components/ScalarIcon/icons/programming-language-swift.svg.virtual.js +1 -1
  367. package/dist/components/ScalarIcon/icons/programming-language-swift.svg.virtual.js.map +1 -1
  368. package/dist/components/ScalarIcon/icons/programming-language-typescript.svg.virtual.js +1 -1
  369. package/dist/components/ScalarIcon/icons/programming-language-typescript.svg.virtual.js.map +1 -1
  370. package/dist/components/ScalarIcon/icons/programming-script-code.svg.virtual.js +1 -1
  371. package/dist/components/ScalarIcon/icons/programming-script-code.svg.virtual.js.map +1 -1
  372. package/dist/components/ScalarIcon/icons/programming-tool-git.svg.virtual.js +1 -1
  373. package/dist/components/ScalarIcon/icons/programming-tool-git.svg.virtual.js.map +1 -1
  374. package/dist/components/ScalarIcon/icons/programming-tool-tailwindcss.svg.virtual.js +1 -1
  375. package/dist/components/ScalarIcon/icons/programming-tool-tailwindcss.svg.virtual.js.map +1 -1
  376. package/dist/components/ScalarIcon/logos/Adonisjs.svg.virtual.js +1 -1
  377. package/dist/components/ScalarIcon/logos/Adonisjs.svg.virtual.js.map +1 -1
  378. package/dist/components/ScalarIcon/logos/Astro.svg.virtual.js +1 -1
  379. package/dist/components/ScalarIcon/logos/Astro.svg.virtual.js.map +1 -1
  380. package/dist/components/ScalarIcon/logos/Docusaurus.svg.virtual.js +1 -1
  381. package/dist/components/ScalarIcon/logos/Docusaurus.svg.virtual.js.map +1 -1
  382. package/dist/components/ScalarIcon/logos/Dotnet.svg.virtual.js +1 -1
  383. package/dist/components/ScalarIcon/logos/Dotnet.svg.virtual.js.map +1 -1
  384. package/dist/components/ScalarIcon/logos/Elysiajs.svg.virtual.js +1 -1
  385. package/dist/components/ScalarIcon/logos/Elysiajs.svg.virtual.js.map +1 -1
  386. package/dist/components/ScalarIcon/logos/Express.svg.virtual.js +1 -1
  387. package/dist/components/ScalarIcon/logos/Express.svg.virtual.js.map +1 -1
  388. package/dist/components/ScalarIcon/logos/Fastapi.svg.virtual.js +1 -1
  389. package/dist/components/ScalarIcon/logos/Fastapi.svg.virtual.js.map +1 -1
  390. package/dist/components/ScalarIcon/logos/Fastify.svg.virtual.js +1 -1
  391. package/dist/components/ScalarIcon/logos/Fastify.svg.virtual.js.map +1 -1
  392. package/dist/components/ScalarIcon/logos/Go.svg.virtual.js +1 -1
  393. package/dist/components/ScalarIcon/logos/Go.svg.virtual.js.map +1 -1
  394. package/dist/components/ScalarIcon/logos/Hono.svg.virtual.js +1 -1
  395. package/dist/components/ScalarIcon/logos/Hono.svg.virtual.js.map +1 -1
  396. package/dist/components/ScalarIcon/logos/Laravel.svg.virtual.js +1 -1
  397. package/dist/components/ScalarIcon/logos/Laravel.svg.virtual.js.map +1 -1
  398. package/dist/components/ScalarIcon/logos/Litestar.svg.virtual.js +1 -1
  399. package/dist/components/ScalarIcon/logos/Litestar.svg.virtual.js.map +1 -1
  400. package/dist/components/ScalarIcon/logos/Nestjs.svg.virtual.js +1 -1
  401. package/dist/components/ScalarIcon/logos/Nestjs.svg.virtual.js.map +1 -1
  402. package/dist/components/ScalarIcon/logos/Nextjs.svg.virtual.js +1 -1
  403. package/dist/components/ScalarIcon/logos/Nextjs.svg.virtual.js.map +1 -1
  404. package/dist/components/ScalarIcon/logos/Nitro.svg.virtual.js +1 -1
  405. package/dist/components/ScalarIcon/logos/Nitro.svg.virtual.js.map +1 -1
  406. package/dist/components/ScalarIcon/logos/Nuxt.svg.virtual.js +1 -1
  407. package/dist/components/ScalarIcon/logos/Nuxt.svg.virtual.js.map +1 -1
  408. package/dist/components/ScalarIcon/logos/Openapi.svg.virtual.js +1 -1
  409. package/dist/components/ScalarIcon/logos/Openapi.svg.virtual.js.map +1 -1
  410. package/dist/components/ScalarIcon/logos/Platformatic.svg.virtual.js +1 -1
  411. package/dist/components/ScalarIcon/logos/Platformatic.svg.virtual.js.map +1 -1
  412. package/dist/components/ScalarIcon/logos/React.svg.virtual.js +1 -1
  413. package/dist/components/ScalarIcon/logos/React.svg.virtual.js.map +1 -1
  414. package/dist/components/ScalarIcon/logos/Rust.svg.virtual.js +1 -1
  415. package/dist/components/ScalarIcon/logos/Rust.svg.virtual.js.map +1 -1
  416. package/dist/components/ScalarIcon/logos/Svelte.svg.virtual.js +1 -1
  417. package/dist/components/ScalarIcon/logos/Svelte.svg.virtual.js.map +1 -1
  418. package/dist/components/ScalarIcon/logos/Vue.svg.virtual.js +1 -1
  419. package/dist/components/ScalarIcon/logos/Vue.svg.virtual.js.map +1 -1
  420. package/dist/components/ScalarIcon/utils/index.js +4 -2
  421. package/dist/components/ScalarIcon/utils/index.js.map +1 -1
  422. package/dist/components/ScalarIcon/variants.js.map +1 -1
  423. package/dist/components/ScalarIconButton/ScalarIconButton.vue.script.js +1 -1
  424. package/dist/components/ScalarIconButton/ScalarIconButton.vue.script.js.map +1 -1
  425. package/dist/components/ScalarListbox/ScalarListbox.vue.d.ts.map +1 -1
  426. package/dist/components/ScalarListbox/ScalarListbox.vue.script.js +1 -1
  427. package/dist/components/ScalarListbox/ScalarListbox.vue.script.js.map +1 -1
  428. package/dist/components/ScalarListbox/ScalarListboxCheckbox.vue.script.js +1 -1
  429. package/dist/components/ScalarListbox/ScalarListboxCheckbox.vue.script.js.map +1 -1
  430. package/dist/components/ScalarListbox/ScalarListboxInput.vue.script.js +1 -1
  431. package/dist/components/ScalarListbox/ScalarListboxInput.vue.script.js.map +1 -1
  432. package/dist/components/ScalarListbox/ScalarListboxItem.vue.script.js +1 -1
  433. package/dist/components/ScalarListbox/ScalarListboxItem.vue.script.js.map +1 -1
  434. package/dist/components/ScalarLoading/ScalarLoading.vue.js +1 -1
  435. package/dist/components/ScalarLoading/ScalarLoading.vue.script.js +1 -1
  436. package/dist/components/ScalarLoading/ScalarLoading.vue.script.js.map +1 -1
  437. package/dist/components/ScalarLoading/useLoadingState.js.map +1 -1
  438. package/dist/components/ScalarMarkdown/ScalarMarkdown.vue.script.js +1 -1
  439. package/dist/components/ScalarMarkdown/ScalarMarkdown.vue.script.js.map +1 -1
  440. package/dist/components/ScalarMarkdown/ScalarMarkdownSummary.vue.script.js +2 -2
  441. package/dist/components/ScalarMarkdown/ScalarMarkdownSummary.vue.script.js.map +1 -1
  442. package/dist/components/ScalarMenu/ScalarMenu.vue.script.js +1 -1
  443. package/dist/components/ScalarMenu/ScalarMenu.vue.script.js.map +1 -1
  444. package/dist/components/ScalarMenu/ScalarMenuButton.vue.script.js +1 -1
  445. package/dist/components/ScalarMenu/ScalarMenuButton.vue.script.js.map +1 -1
  446. package/dist/components/ScalarMenu/ScalarMenuLink.vue.script.js +1 -1
  447. package/dist/components/ScalarMenu/ScalarMenuLink.vue.script.js.map +1 -1
  448. package/dist/components/ScalarMenu/ScalarMenuProduct.vue.script.js +1 -1
  449. package/dist/components/ScalarMenu/ScalarMenuProduct.vue.script.js.map +1 -1
  450. package/dist/components/ScalarMenu/ScalarMenuProducts.vue.d.ts.map +1 -1
  451. package/dist/components/ScalarMenu/ScalarMenuProducts.vue.script.js +1 -1
  452. package/dist/components/ScalarMenu/ScalarMenuProducts.vue.script.js.map +1 -1
  453. package/dist/components/ScalarMenu/ScalarMenuResources.vue.script.js +1 -1
  454. package/dist/components/ScalarMenu/ScalarMenuResources.vue.script.js.map +1 -1
  455. package/dist/components/ScalarMenu/ScalarMenuSection.vue.script.js +1 -1
  456. package/dist/components/ScalarMenu/ScalarMenuSection.vue.script.js.map +1 -1
  457. package/dist/components/ScalarMenu/ScalarMenuSupport.vue.script.js +1 -1
  458. package/dist/components/ScalarMenu/ScalarMenuSupport.vue.script.js.map +1 -1
  459. package/dist/components/ScalarMenu/ScalarMenuTeamPicker.vue.d.ts.map +1 -1
  460. package/dist/components/ScalarMenu/ScalarMenuTeamPicker.vue.script.js +1 -1
  461. package/dist/components/ScalarMenu/ScalarMenuTeamPicker.vue.script.js.map +1 -1
  462. package/dist/components/ScalarMenu/ScalarMenuTeamProfile.vue.script.js +1 -1
  463. package/dist/components/ScalarMenu/ScalarMenuTeamProfile.vue.script.js.map +1 -1
  464. package/dist/components/ScalarMenu/ScalarMenuWorkspacePicker.vue.d.ts.map +1 -1
  465. package/dist/components/ScalarMenu/ScalarMenuWorkspacePicker.vue.script.js +3 -3
  466. package/dist/components/ScalarMenu/ScalarMenuWorkspacePicker.vue.script.js.map +1 -1
  467. package/dist/components/ScalarModal/ScalarModal.vue.d.ts.map +1 -1
  468. package/dist/components/ScalarModal/ScalarModal.vue.js +3 -3
  469. package/dist/components/ScalarModal/ScalarModal.vue.script.js +1 -1
  470. package/dist/components/ScalarModal/ScalarModal.vue.script.js.map +1 -1
  471. package/dist/components/ScalarPopover/ScalarPopover.vue.script.js +1 -1
  472. package/dist/components/ScalarPopover/ScalarPopover.vue.script.js.map +1 -1
  473. package/dist/components/ScalarSavePrompt/ScalarSavePrompt.vue.d.ts.map +1 -1
  474. package/dist/components/ScalarSavePrompt/ScalarSavePrompt.vue.script.js +3 -3
  475. package/dist/components/ScalarSavePrompt/ScalarSavePrompt.vue.script.js.map +1 -1
  476. package/dist/components/ScalarSearchInput/ScalarSearchInput.vue.d.ts.map +1 -1
  477. package/dist/components/ScalarSearchInput/ScalarSearchInput.vue.script.js +2 -2
  478. package/dist/components/ScalarSearchInput/ScalarSearchInput.vue.script.js.map +1 -1
  479. package/dist/components/ScalarSearchResults/ScalarSearchResultItem.vue.script.js +1 -1
  480. package/dist/components/ScalarSearchResults/ScalarSearchResultItem.vue.script.js.map +1 -1
  481. package/dist/components/ScalarSearchResults/ScalarSearchResultList.vue.script.js +3 -3
  482. package/dist/components/ScalarSearchResults/ScalarSearchResultList.vue.script.js.map +1 -1
  483. package/dist/components/ScalarSidebar/ScalarSidebar.vue.script.js +1 -1
  484. package/dist/components/ScalarSidebar/ScalarSidebar.vue.script.js.map +1 -1
  485. package/dist/components/ScalarSidebar/ScalarSidebarButton.vue.js.map +1 -1
  486. package/dist/components/ScalarSidebar/ScalarSidebarButton.vue.script.js +3 -3
  487. package/dist/components/ScalarSidebar/ScalarSidebarButton.vue.script.js.map +1 -1
  488. package/dist/components/ScalarSidebar/ScalarSidebarFooter.vue.script.js +1 -1
  489. package/dist/components/ScalarSidebar/ScalarSidebarFooter.vue.script.js.map +1 -1
  490. package/dist/components/ScalarSidebar/ScalarSidebarGroup.vue.d.ts.map +1 -1
  491. package/dist/components/ScalarSidebar/ScalarSidebarGroup.vue.js.map +1 -1
  492. package/dist/components/ScalarSidebar/ScalarSidebarGroup.vue.script.js +19 -26
  493. package/dist/components/ScalarSidebar/ScalarSidebarGroup.vue.script.js.map +1 -1
  494. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggle.vue.script.js +1 -1
  495. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggle.vue.script.js.map +1 -1
  496. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleButton.vue.d.ts +64 -0
  497. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleButton.vue.d.ts.map +1 -0
  498. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleButton.vue.js +7 -0
  499. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleButton.vue.js.map +1 -0
  500. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleButton.vue.script.js +41 -0
  501. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleButton.vue.script.js.map +1 -0
  502. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleSpacer.vue.d.ts +16 -0
  503. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleSpacer.vue.d.ts.map +1 -0
  504. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleSpacer.vue.js +7 -0
  505. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleSpacer.vue.js.map +1 -0
  506. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleSpacer.vue.script.js +16 -0
  507. package/dist/components/ScalarSidebar/ScalarSidebarGroupToggleSpacer.vue.script.js.map +1 -0
  508. package/dist/components/ScalarSidebar/ScalarSidebarIndent.vue.js +1 -1
  509. package/dist/components/ScalarSidebar/ScalarSidebarIndent.vue.script.js +1 -1
  510. package/dist/components/ScalarSidebar/ScalarSidebarIndent.vue.script.js.map +1 -1
  511. package/dist/components/ScalarSidebar/ScalarSidebarItem.vue.script.js +1 -1
  512. package/dist/components/ScalarSidebar/ScalarSidebarItem.vue.script.js.map +1 -1
  513. package/dist/components/ScalarSidebar/ScalarSidebarItems.vue.script.js +1 -1
  514. package/dist/components/ScalarSidebar/ScalarSidebarItems.vue.script.js.map +1 -1
  515. package/dist/components/ScalarSidebar/ScalarSidebarLoading.vue.script.js +1 -1
  516. package/dist/components/ScalarSidebar/ScalarSidebarLoading.vue.script.js.map +1 -1
  517. package/dist/components/ScalarSidebar/ScalarSidebarNestedItems.vue.d.ts.map +1 -1
  518. package/dist/components/ScalarSidebar/ScalarSidebarNestedItems.vue.script.js +4 -4
  519. package/dist/components/ScalarSidebar/ScalarSidebarNestedItems.vue.script.js.map +1 -1
  520. package/dist/components/ScalarSidebar/ScalarSidebarSearchButton.vue.d.ts.map +1 -1
  521. package/dist/components/ScalarSidebar/ScalarSidebarSearchButton.vue.js.map +1 -1
  522. package/dist/components/ScalarSidebar/ScalarSidebarSearchButton.vue.script.js +6 -6
  523. package/dist/components/ScalarSidebar/ScalarSidebarSearchButton.vue.script.js.map +1 -1
  524. package/dist/components/ScalarSidebar/ScalarSidebarSearchInput.vue.d.ts.map +1 -1
  525. package/dist/components/ScalarSidebar/ScalarSidebarSearchInput.vue.script.js +2 -2
  526. package/dist/components/ScalarSidebar/ScalarSidebarSearchInput.vue.script.js.map +1 -1
  527. package/dist/components/ScalarSidebar/ScalarSidebarSection.vue.script.js +2 -2
  528. package/dist/components/ScalarSidebar/ScalarSidebarSection.vue.script.js.map +1 -1
  529. package/dist/components/ScalarSidebar/ScalarSidebarSpacer.vue.script.js +1 -1
  530. package/dist/components/ScalarSidebar/ScalarSidebarSpacer.vue.script.js.map +1 -1
  531. package/dist/components/ScalarSidebar/findScrollContainer.js.map +1 -1
  532. package/dist/components/ScalarSidebar/index.d.ts +2 -0
  533. package/dist/components/ScalarSidebar/index.d.ts.map +1 -1
  534. package/dist/components/ScalarSidebar/index.js +3 -1
  535. package/dist/components/ScalarSidebar/useSidebarGroups.js +1 -1
  536. package/dist/components/ScalarSidebar/useSidebarGroups.js.map +1 -1
  537. package/dist/components/ScalarSidebar/useSidebarNestedItems.js +3 -1
  538. package/dist/components/ScalarSidebar/useSidebarNestedItems.js.map +1 -1
  539. package/dist/components/ScalarTeleport/ScalarTeleport.vue.script.js +1 -1
  540. package/dist/components/ScalarTeleport/ScalarTeleport.vue.script.js.map +1 -1
  541. package/dist/components/ScalarTeleport/ScalarTeleportRoot.vue.script.js +1 -1
  542. package/dist/components/ScalarTeleport/ScalarTeleportRoot.vue.script.js.map +1 -1
  543. package/dist/components/ScalarTeleport/useTeleport.js.map +1 -1
  544. package/dist/components/ScalarTextArea/ScalarTextArea.vue.d.ts.map +1 -1
  545. package/dist/components/ScalarTextArea/ScalarTextArea.vue.js.map +1 -1
  546. package/dist/components/ScalarTextArea/ScalarTextArea.vue.script.js +2 -2
  547. package/dist/components/ScalarTextArea/ScalarTextArea.vue.script.js.map +1 -1
  548. package/dist/components/ScalarTextInput/ScalarTextInput.vue.d.ts.map +1 -1
  549. package/dist/components/ScalarTextInput/ScalarTextInput.vue.js.map +1 -1
  550. package/dist/components/ScalarTextInput/ScalarTextInput.vue.script.js +4 -4
  551. package/dist/components/ScalarTextInput/ScalarTextInput.vue.script.js.map +1 -1
  552. package/dist/components/ScalarTextInput/ScalarTextInputCopy.vue.d.ts.map +1 -1
  553. package/dist/components/ScalarTextInput/ScalarTextInputCopy.vue.js.map +1 -1
  554. package/dist/components/ScalarTextInput/ScalarTextInputCopy.vue.script.js +4 -4
  555. package/dist/components/ScalarTextInput/ScalarTextInputCopy.vue.script.js.map +1 -1
  556. package/dist/components/ScalarThemeSwatches/ScalarThemeSwatches.vue.script.js +1 -1
  557. package/dist/components/ScalarThemeSwatches/ScalarThemeSwatches.vue.script.js.map +1 -1
  558. package/dist/components/ScalarThemeSwatches/useThemeSwatches.js.map +1 -1
  559. package/dist/components/ScalarToggle/ScalarToggle.vue.d.ts.map +1 -1
  560. package/dist/components/ScalarToggle/ScalarToggle.vue.script.js +2 -2
  561. package/dist/components/ScalarToggle/ScalarToggle.vue.script.js.map +1 -1
  562. package/dist/components/ScalarToggle/ScalarToggleGroup.vue.d.ts.map +1 -1
  563. package/dist/components/ScalarToggle/ScalarToggleGroup.vue.js.map +1 -1
  564. package/dist/components/ScalarToggle/ScalarToggleGroup.vue.script.js +3 -3
  565. package/dist/components/ScalarToggle/ScalarToggleGroup.vue.script.js.map +1 -1
  566. package/dist/components/ScalarToggle/ScalarToggleInput.vue.script.js +1 -1
  567. package/dist/components/ScalarToggle/ScalarToggleInput.vue.script.js.map +1 -1
  568. package/dist/components/ScalarToggle/ScalarToggleSlider.vue.script.js +1 -1
  569. package/dist/components/ScalarToggle/ScalarToggleSlider.vue.script.js.map +1 -1
  570. package/dist/components/ScalarToggle/ScalarTristateToggle.vue.d.ts.map +1 -1
  571. package/dist/components/ScalarToggle/ScalarTristateToggle.vue.script.js +2 -2
  572. package/dist/components/ScalarToggle/ScalarTristateToggle.vue.script.js.map +1 -1
  573. package/dist/components/ScalarToggle/ScalarTristateToggleGroup.vue.d.ts.map +1 -1
  574. package/dist/components/ScalarToggle/ScalarTristateToggleGroup.vue.js.map +1 -1
  575. package/dist/components/ScalarToggle/ScalarTristateToggleGroup.vue.script.js +3 -3
  576. package/dist/components/ScalarToggle/ScalarTristateToggleGroup.vue.script.js.map +1 -1
  577. package/dist/components/ScalarToggle/ScalarTristateToggleInput.vue.script.js +1 -1
  578. package/dist/components/ScalarToggle/ScalarTristateToggleInput.vue.script.js.map +1 -1
  579. package/dist/components/ScalarTooltip/ScalarHotkeyTooltip.vue.script.js +1 -1
  580. package/dist/components/ScalarTooltip/ScalarHotkeyTooltip.vue.script.js.map +1 -1
  581. package/dist/components/ScalarTooltip/ScalarTooltip.vue.d.ts.map +1 -1
  582. package/dist/components/ScalarTooltip/ScalarTooltip.vue.js.map +1 -1
  583. package/dist/components/ScalarTooltip/ScalarTooltip.vue.script.js +1 -1
  584. package/dist/components/ScalarTooltip/ScalarTooltip.vue.script.js.map +1 -1
  585. package/dist/components/ScalarTooltip/useTooltip.d.ts.map +1 -1
  586. package/dist/components/ScalarTooltip/useTooltip.js +40 -1
  587. package/dist/components/ScalarTooltip/useTooltip.js.map +1 -1
  588. package/dist/components/ScalarVirtualCodeBlock/ScalarVirtualCodeBlock.vue.script.js +1 -1
  589. package/dist/components/ScalarVirtualCodeBlock/ScalarVirtualCodeBlock.vue.script.js.map +1 -1
  590. package/dist/components/ScalarVirtualText/ScalarVirtualText.vue.d.ts.map +1 -1
  591. package/dist/components/ScalarVirtualText/ScalarVirtualText.vue.js +1 -1
  592. package/dist/components/ScalarVirtualText/ScalarVirtualText.vue.script.js +1 -1
  593. package/dist/components/ScalarVirtualText/ScalarVirtualText.vue.script.js.map +1 -1
  594. package/dist/components/ScalarVirtualText/ScalarVirtualTextSearch.vue.js +1 -1
  595. package/dist/components/ScalarVirtualText/ScalarVirtualTextSearch.vue.script.js +1 -1
  596. package/dist/components/ScalarVirtualText/ScalarVirtualTextSearch.vue.script.js.map +1 -1
  597. package/dist/components/ScalarWrappingText/ScalarWrappingText.vue.d.ts.map +1 -1
  598. package/dist/components/ScalarWrappingText/ScalarWrappingText.vue.script.js +1 -1
  599. package/dist/components/ScalarWrappingText/ScalarWrappingText.vue.script.js.map +1 -1
  600. package/dist/components/ScalarWrappingText/constants.js +5 -0
  601. package/dist/components/ScalarWrappingText/constants.js.map +1 -1
  602. package/dist/helpers/add-scalar-classes.js.map +1 -1
  603. package/dist/index.d.ts +1 -1
  604. package/dist/index.d.ts.map +1 -1
  605. package/dist/index.js +3 -1
  606. package/dist/style.css +76 -46
  607. package/dist/vue-styles.css +20 -21
  608. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"useTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/ScalarTooltip/useTooltip.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,oBAAoB,EAAE,MAAM,SAAS,CAAA;AA+I1D;;GAEG;AACH,wBAAgB,qBAAqB,SAGpC;AA2ED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,oBAAoB,QAwEpD"}
1
+ {"version":3,"file":"useTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/ScalarTooltip/useTooltip.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,oBAAoB,EAAE,MAAM,SAAS,CAAA;AA4J1D;;GAEG;AACH,wBAAgB,qBAAqB,SAGpC;AAgID;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,oBAAoB,QA8EpD"}
@@ -20,7 +20,7 @@ var el = ref();
20
20
  * If no tooltip is active it should be undefined
21
21
  */
22
22
  var config = ref();
23
- var { floatingStyles, placement } = useFloating(computed(() => unref(config.value?.targetRef)), el, {
23
+ var { floatingStyles, placement, update } = useFloating(computed(() => unref(config.value?.targetRef)), el, {
24
24
  placement: computed(() => unref(config.value?.placement)),
25
25
  whileElementsMounted: autoUpdate,
26
26
  middleware: computed(() => [flip(), shift()])
@@ -40,6 +40,7 @@ watch(floatingStyles, () => {
40
40
  watch(config, (opts) => {
41
41
  if (!el.value) return;
42
42
  if (opts) {
43
+ if (moveTooltipToHost(unref(opts.targetRef))) update();
43
44
  const contentTarget = unref(opts?.contentTarget) ?? "textContent";
44
45
  el.value[contentTarget] = unref(opts?.content) ?? "";
45
46
  const offset = unref(opts?.offset) ?? 4;
@@ -50,6 +51,7 @@ watch(config, (opts) => {
50
51
  el.value.innerHTML = "";
51
52
  el.value.style.removeProperty("--scalar-tooltip-offset");
52
53
  el.value.style.setProperty("display", "none");
54
+ moveTooltipToHost(void 0);
53
55
  }
54
56
  }, { deep: true });
55
57
  /**
@@ -96,6 +98,42 @@ function handleEscape(e) {
96
98
  hideTooltip(e);
97
99
  }
98
100
  }
101
+ /**
102
+ * Find the modal dialog containing an element, if there is one
103
+ *
104
+ * Only a dialog opened with `showModal()` is promoted to the browser's top layer, and
105
+ * `:modal` matches exactly those. The `open` property is not a substitute: it is also
106
+ * true for `dialog.show()`, which leaves the dialog in the normal flow where the
107
+ * tooltip already paints correctly.
108
+ */
109
+ function getModalDialog(target) {
110
+ const dialog = target?.closest("dialog");
111
+ if (!dialog) return;
112
+ try {
113
+ return dialog.matches(":modal") ? dialog : void 0;
114
+ } catch {
115
+ return;
116
+ }
117
+ }
118
+ /**
119
+ * Move the tooltip element into the host it needs to paint above
120
+ *
121
+ * Top layer content paints above the rest of the document whatever `z-index` anything
122
+ * else carries, so the only way to sit above a modal dialog is to live inside it.
123
+ * Everywhere else the tooltip belongs on the body.
124
+ *
125
+ * This doubles as a repair step: appending an element that is no longer in the document
126
+ * puts it back, which covers a dialog being unmounted while the tooltip sat inside it.
127
+ *
128
+ * Returns whether the element actually moved.
129
+ */
130
+ function moveTooltipToHost(target) {
131
+ if (!el.value) return false;
132
+ const host = getModalDialog(target) ?? document.body;
133
+ if (el.value.parentElement === host) return false;
134
+ host.appendChild(el.value);
135
+ return true;
136
+ }
99
137
  /** Clears the current timer */
100
138
  function clearTimer() {
101
139
  if (timer.value) {
@@ -147,6 +185,7 @@ function useTooltip(opts) {
147
185
  once: true,
148
186
  capture: true
149
187
  });
188
+ moveTooltipToHost(unref(opts.targetRef));
150
189
  config.value = opts;
151
190
  }
152
191
  watch(() => unref(opts.targetRef), (newRef, oldRef) => {
@@ -1 +1 @@
1
- {"version":3,"file":"useTooltip.js","names":[],"sources":["../../../src/components/ScalarTooltip/useTooltip.ts"],"sourcesContent":["import { autoUpdate, flip, shift, useFloating } from '@floating-ui/vue'\nimport { computed, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { DEFAULT_DELAY, DEFAULT_OFFSET, ELEMENT_CLASS, ELEMENT_ID } from './constants'\nimport type { Timer, TooltipConfiguration } from './types'\n\n// ---------------------------------------------------------------------------\n// State\n// ---------------------------------------------------------------------------\n\n/**\n * The delay timer for the tooltip\n *\n * If there's not a timer running it should be undefined\n */\nconst timer = ref<Timer>()\n\n/**\n * A reference to the tooltip element\n *\n * If the hook hasn't been initialized it should be undefined\n */\nconst el = ref<HTMLElement>()\n\n/**\n * The configuration for the active tooltip\n *\n * If no tooltip is active it should be undefined\n */\nconst config = ref<TooltipConfiguration>()\n\n// ---------------------------------------------------------------------------\n// Core watcher and floating UI setup\n// ---------------------------------------------------------------------------\n\n// Set up floating UI\nconst { floatingStyles, placement } = useFloating(\n computed(() => unref(config.value?.targetRef)),\n el,\n {\n placement: computed(() => unref(config.value?.placement)),\n whileElementsMounted: autoUpdate,\n middleware: computed(() => [flip(), shift()]),\n },\n)\n\n// Expose the resolved placement side (post-flip) so the CSS can apply the offset\n// gap only on the side facing the target. We key off the side (the part before\n// the '-') because that is where the tooltip sits relative to the target. The\n// initial side is set synchronously when the tooltip is shown (see the config\n// watcher below); this watcher keeps it in sync once Floating UI flips it.\nwatch(placement, (value) => {\n if (!el.value || !value) {\n return\n }\n el.value.dataset.side = value.split('-')[0]\n})\n\n// Update the tooltip element's positioning when Floating UI updates the styles\nwatch(floatingStyles, () => {\n if (!el.value) {\n return\n }\n\n el.value.style.position = floatingStyles.value.position\n el.value.style.top = floatingStyles.value.top\n el.value.style.left = floatingStyles.value.left\n el.value.style.transform = floatingStyles.value.transform ?? ''\n el.value.style.willChange = floatingStyles.value.willChange ?? ''\n})\n\n// Show or hide the tooltip when the config changes\nwatch(\n config,\n (opts) => {\n if (!el.value) {\n return\n }\n\n if (opts) {\n const contentTarget = unref(opts?.contentTarget) ?? 'textContent'\n\n // Update the tooltip content\n el.value[contentTarget] = unref(opts?.content) ?? ''\n\n // Show the tooltip\n const offset = unref(opts?.offset) ?? DEFAULT_OFFSET\n el.value.style.setProperty('--scalar-tooltip-offset', `${offset}px`)\n\n // Set the side the tooltip sits on so the offset gap is only applied to\n // the target-facing side. Floating UI defaults to 'bottom' when no\n // placement is provided; the placement watcher above refines this after\n // any flip.\n el.value.dataset.side = (unref(opts?.placement) ?? 'bottom').split('-')[0]\n\n el.value.style.setProperty('display', 'block')\n } else {\n // Clear the tooltip content\n el.value.innerHTML = ''\n\n // Hide the tooltip\n el.value.style.removeProperty('--scalar-tooltip-offset')\n el.value.style.setProperty('display', 'none')\n }\n },\n { deep: true },\n)\n\n// ---------------------------------------------------------------------------\n// Lifecycle Functions\n// ---------------------------------------------------------------------------\n\n/**\n * Initialize the tooltip element\n *\n * If the tooltip is already initialized it will be ignored\n */\nfunction initializeTooltipElement(): void {\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n // Skip tooltip initialization during SSR\n return\n }\n\n if (el.value) {\n // Tooltip already initialized\n return\n }\n\n // See if the tooltip element already exists\n // (Sometimes this happens with HMR)\n const existingTooltipElement = document.getElementById(ELEMENT_ID)\n\n if (existingTooltipElement) {\n el.value = existingTooltipElement\n } else {\n // Create the tooltip element\n el.value = document.createElement('div')\n el.value.role = 'tooltip'\n el.value.id = ELEMENT_ID\n el.value.classList.add(ELEMENT_CLASS)\n el.value.classList.add('scalar-app')\n el.value.style.setProperty('display', 'none')\n el.value.addEventListener('mouseleave', hideTooltip)\n document.body.appendChild(el.value)\n }\n}\n\n/**\n * Cleanup and reset the tooltip element\n */\nexport function cleanupTooltipElement() {\n document.getElementById(ELEMENT_ID)?.remove()\n el.value = undefined\n}\n\n// ---------------------------------------------------------------------------\n// Helper Functions\n// ---------------------------------------------------------------------------\n\n/**\n * Hide the tooltip\n *\n * If the mouse is moving between the tooltip and the target we don't hide the tooltip\n */\nfunction hideTooltip(_e: Event) {\n if (!isMovingOffElements(_e)) {\n // Don't hide the tooltip if the mouse is moving between the tooltip and the target\n return\n }\n\n // Clear any existing timer\n clearTimer()\n\n // Hide the tooltip\n config.value = undefined\n}\n\n/**\n * Handle the escape key\n *\n * If the escape key is pressed we need to hide the tooltip\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/tooltip_role#keyboard_interactions\n */\nfunction handleEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n hideTooltip(e)\n }\n}\n\n/** Clears the current timer */\nfunction clearTimer() {\n if (timer.value) {\n clearTimeout(timer.value)\n timer.value = undefined\n }\n}\n\n/** Get all the parents of an element */\nfunction getAllParents(el: Element): Element[] {\n const parents: Element[] = []\n let parent = el.parentElement\n while (parent) {\n parents.push(parent)\n parent = parent.parentElement\n }\n return parents\n}\n\n/** Check if mouse moved off the target but onto the tooltip */\nfunction isMovingOffElements(e: Event): boolean {\n const target = unref(config.value?.targetRef)\n if (e instanceof MouseEvent && e.relatedTarget instanceof Element && target) {\n const relatedTargetParents = getAllParents(e.relatedTarget)\n return (\n e.relatedTarget.id !== ELEMENT_ID &&\n !relatedTargetParents.some((parent) => parent.id === ELEMENT_ID) &&\n e.relatedTarget !== target\n )\n }\n return true\n}\n\n// ---------------------------------------------------------------------------\n// Tooltip Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Create a tooltip\n *\n * If there isn't a tooltip element it will be created\n */\nexport function useTooltip(opts: TooltipConfiguration) {\n initializeTooltipElement()\n\n /**\n * Show the tooltip after the delay if configured\n */\n function showTooltipAfterDelay(_e: Event) {\n const delay = unref(opts.delay) ?? DEFAULT_DELAY\n clearTimer()\n\n // Show the tooltip after the delay\n if (delay > 0) {\n timer.value = setTimeout(() => showTooltip(_e), delay)\n } else {\n showTooltip(_e)\n }\n }\n\n /**\n * Show the tooltip\n */\n function showTooltip(_e: Event) {\n clearTimer()\n\n // Handle the escape key\n document.addEventListener('keydown', handleEscape, { once: true, capture: true })\n\n // Show the tooltip\n config.value = opts\n }\n\n watch(\n () => unref(opts.targetRef),\n (newRef, oldRef) => {\n if (oldRef) {\n oldRef.removeEventListener('mouseenter', showTooltipAfterDelay)\n oldRef.removeEventListener('mouseleave', hideTooltip)\n oldRef.removeEventListener('focus', showTooltip)\n oldRef.removeEventListener('blur', hideTooltip)\n\n oldRef.removeAttribute('aria-describedby')\n }\n if (newRef) {\n newRef.addEventListener('mouseenter', showTooltipAfterDelay)\n newRef.addEventListener('mouseleave', hideTooltip)\n newRef.addEventListener('focus', showTooltip)\n newRef.addEventListener('blur', hideTooltip)\n\n newRef.setAttribute('aria-describedby', ELEMENT_ID)\n }\n },\n { immediate: true },\n )\n\n // Cleanup the tooltip when the component is unmounted\n onScopeDispose(() => {\n clearTimer()\n\n const target = unref(opts.targetRef)\n if (target) {\n target.removeEventListener('mouseenter', showTooltipAfterDelay)\n target.removeEventListener('mouseleave', hideTooltip)\n target.removeEventListener('focus', showTooltip)\n target.removeEventListener('blur', hideTooltip)\n target.removeAttribute('aria-describedby')\n }\n\n // If the tooltip is showing on this target hide it\n if (unref(config.value?.targetRef) === unref(opts.targetRef)) {\n config.value = undefined\n }\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useTooltip.js","names":[],"sources":["../../../src/components/ScalarTooltip/useTooltip.ts"],"sourcesContent":["import { autoUpdate, flip, shift, useFloating } from '@floating-ui/vue'\nimport { computed, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { DEFAULT_DELAY, DEFAULT_OFFSET, ELEMENT_CLASS, ELEMENT_ID } from './constants'\nimport type { Timer, TooltipConfiguration } from './types'\n\n// ---------------------------------------------------------------------------\n// State\n// ---------------------------------------------------------------------------\n\n/**\n * The delay timer for the tooltip\n *\n * If there's not a timer running it should be undefined\n */\nconst timer = ref<Timer>()\n\n/**\n * A reference to the tooltip element\n *\n * If the hook hasn't been initialized it should be undefined\n */\nconst el = ref<HTMLElement>()\n\n/**\n * The configuration for the active tooltip\n *\n * If no tooltip is active it should be undefined\n */\nconst config = ref<TooltipConfiguration>()\n\n// ---------------------------------------------------------------------------\n// Core watcher and floating UI setup\n// ---------------------------------------------------------------------------\n\n// Set up floating UI\nconst { floatingStyles, placement, update } = useFloating(\n computed(() => unref(config.value?.targetRef)),\n el,\n {\n placement: computed(() => unref(config.value?.placement)),\n whileElementsMounted: autoUpdate,\n middleware: computed(() => [flip(), shift()]),\n },\n)\n\n// Expose the resolved placement side (post-flip) so the CSS can apply the offset\n// gap only on the side facing the target. We key off the side (the part before\n// the '-') because that is where the tooltip sits relative to the target. The\n// initial side is set synchronously when the tooltip is shown (see the config\n// watcher below); this watcher keeps it in sync once Floating UI flips it.\nwatch(placement, (value) => {\n if (!el.value || !value) {\n return\n }\n el.value.dataset.side = value.split('-')[0]\n})\n\n// Update the tooltip element's positioning when Floating UI updates the styles\nwatch(floatingStyles, () => {\n if (!el.value) {\n return\n }\n\n el.value.style.position = floatingStyles.value.position\n el.value.style.top = floatingStyles.value.top\n el.value.style.left = floatingStyles.value.left\n el.value.style.transform = floatingStyles.value.transform ?? ''\n el.value.style.willChange = floatingStyles.value.willChange ?? ''\n})\n\n// Show or hide the tooltip when the config changes\nwatch(\n config,\n (opts) => {\n if (!el.value) {\n return\n }\n\n if (opts) {\n // Keep the element in the right host if the target moved into or out of a modal\n // dialog while the tooltip was already showing. Opening a tooltip is handled in\n // `showTooltip` before the config is assigned, so this only fires when `targetRef`\n // changes underneath an open tooltip, and it has to ask Floating UI for a fresh\n // position because a reparent is neither a scroll nor a resize.\n if (moveTooltipToHost(unref(opts.targetRef))) {\n update()\n }\n\n const contentTarget = unref(opts?.contentTarget) ?? 'textContent'\n\n // Update the tooltip content\n el.value[contentTarget] = unref(opts?.content) ?? ''\n\n // Show the tooltip\n const offset = unref(opts?.offset) ?? DEFAULT_OFFSET\n el.value.style.setProperty('--scalar-tooltip-offset', `${offset}px`)\n\n // Set the side the tooltip sits on so the offset gap is only applied to\n // the target-facing side. Floating UI defaults to 'bottom' when no\n // placement is provided; the placement watcher above refines this after\n // any flip.\n el.value.dataset.side = (unref(opts?.placement) ?? 'bottom').split('-')[0]\n\n el.value.style.setProperty('display', 'block')\n } else {\n // Clear the tooltip content\n el.value.innerHTML = ''\n\n // Hide the tooltip\n el.value.style.removeProperty('--scalar-tooltip-offset')\n el.value.style.setProperty('display', 'none')\n\n // Park the element back on the body. Left inside a dialog it would be removed from\n // the document when that dialog unmounts, taking the shared tooltip with it.\n moveTooltipToHost(undefined)\n }\n },\n { deep: true },\n)\n\n// ---------------------------------------------------------------------------\n// Lifecycle Functions\n// ---------------------------------------------------------------------------\n\n/**\n * Initialize the tooltip element\n *\n * If the tooltip is already initialized it will be ignored\n */\nfunction initializeTooltipElement(): void {\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n // Skip tooltip initialization during SSR\n return\n }\n\n if (el.value) {\n // Tooltip already initialized\n return\n }\n\n // See if the tooltip element already exists\n // (Sometimes this happens with HMR)\n const existingTooltipElement = document.getElementById(ELEMENT_ID)\n\n if (existingTooltipElement) {\n el.value = existingTooltipElement\n } else {\n // Create the tooltip element\n el.value = document.createElement('div')\n el.value.role = 'tooltip'\n el.value.id = ELEMENT_ID\n el.value.classList.add(ELEMENT_CLASS)\n el.value.classList.add('scalar-app')\n el.value.style.setProperty('display', 'none')\n el.value.addEventListener('mouseleave', hideTooltip)\n document.body.appendChild(el.value)\n }\n}\n\n/**\n * Cleanup and reset the tooltip element\n */\nexport function cleanupTooltipElement() {\n document.getElementById(ELEMENT_ID)?.remove()\n el.value = undefined\n}\n\n// ---------------------------------------------------------------------------\n// Helper Functions\n// ---------------------------------------------------------------------------\n\n/**\n * Hide the tooltip\n *\n * If the mouse is moving between the tooltip and the target we don't hide the tooltip\n */\nfunction hideTooltip(_e: Event) {\n if (!isMovingOffElements(_e)) {\n // Don't hide the tooltip if the mouse is moving between the tooltip and the target\n return\n }\n\n // Clear any existing timer\n clearTimer()\n\n // Hide the tooltip\n config.value = undefined\n}\n\n/**\n * Handle the escape key\n *\n * If the escape key is pressed we need to hide the tooltip\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/tooltip_role#keyboard_interactions\n */\nfunction handleEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n hideTooltip(e)\n }\n}\n\n/**\n * Find the modal dialog containing an element, if there is one\n *\n * Only a dialog opened with `showModal()` is promoted to the browser's top layer, and\n * `:modal` matches exactly those. The `open` property is not a substitute: it is also\n * true for `dialog.show()`, which leaves the dialog in the normal flow where the\n * tooltip already paints correctly.\n */\nfunction getModalDialog(target: Element | undefined | null): HTMLDialogElement | undefined {\n const dialog = target?.closest('dialog')\n\n if (!dialog) {\n return undefined\n }\n\n try {\n return dialog.matches(':modal') ? dialog : undefined\n } catch {\n // `:modal` reached Safari a couple of releases after `showModal()` did, and an\n // unknown pseudo-class throws. Treating it as \"not modal\" degrades to the old\n // behaviour for that one case instead of breaking every tooltip on the page.\n return undefined\n }\n}\n\n/**\n * Move the tooltip element into the host it needs to paint above\n *\n * Top layer content paints above the rest of the document whatever `z-index` anything\n * else carries, so the only way to sit above a modal dialog is to live inside it.\n * Everywhere else the tooltip belongs on the body.\n *\n * This doubles as a repair step: appending an element that is no longer in the document\n * puts it back, which covers a dialog being unmounted while the tooltip sat inside it.\n *\n * Returns whether the element actually moved.\n */\nfunction moveTooltipToHost(target: Element | undefined | null): boolean {\n if (!el.value) {\n return false\n }\n\n const host = getModalDialog(target) ?? document.body\n\n if (el.value.parentElement === host) {\n return false\n }\n\n host.appendChild(el.value)\n\n return true\n}\n\n/** Clears the current timer */\nfunction clearTimer() {\n if (timer.value) {\n clearTimeout(timer.value)\n timer.value = undefined\n }\n}\n\n/** Get all the parents of an element */\nfunction getAllParents(el: Element): Element[] {\n const parents: Element[] = []\n let parent = el.parentElement\n while (parent) {\n parents.push(parent)\n parent = parent.parentElement\n }\n return parents\n}\n\n/** Check if mouse moved off the target but onto the tooltip */\nfunction isMovingOffElements(e: Event): boolean {\n const target = unref(config.value?.targetRef)\n if (e instanceof MouseEvent && e.relatedTarget instanceof Element && target) {\n const relatedTargetParents = getAllParents(e.relatedTarget)\n return (\n e.relatedTarget.id !== ELEMENT_ID &&\n !relatedTargetParents.some((parent) => parent.id === ELEMENT_ID) &&\n e.relatedTarget !== target\n )\n }\n return true\n}\n\n// ---------------------------------------------------------------------------\n// Tooltip Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Create a tooltip\n *\n * If there isn't a tooltip element it will be created\n */\nexport function useTooltip(opts: TooltipConfiguration) {\n initializeTooltipElement()\n\n /**\n * Show the tooltip after the delay if configured\n */\n function showTooltipAfterDelay(_e: Event) {\n const delay = unref(opts.delay) ?? DEFAULT_DELAY\n clearTimer()\n\n // Show the tooltip after the delay\n if (delay > 0) {\n timer.value = setTimeout(() => showTooltip(_e), delay)\n } else {\n showTooltip(_e)\n }\n }\n\n /**\n * Show the tooltip\n */\n function showTooltip(_e: Event) {\n clearTimer()\n\n // Handle the escape key\n document.addEventListener('keydown', handleEscape, { once: true, capture: true })\n\n // Move the element before the config is assigned, not after. Floating UI watches the\n // target with `flush: 'sync'`, so it measures the position the instant the config\n // lands, and that measurement has to happen with the tooltip already in its final\n // parent or the first frame is positioned against the wrong offset parent.\n moveTooltipToHost(unref(opts.targetRef))\n\n // Show the tooltip\n config.value = opts\n }\n\n watch(\n () => unref(opts.targetRef),\n (newRef, oldRef) => {\n if (oldRef) {\n oldRef.removeEventListener('mouseenter', showTooltipAfterDelay)\n oldRef.removeEventListener('mouseleave', hideTooltip)\n oldRef.removeEventListener('focus', showTooltip)\n oldRef.removeEventListener('blur', hideTooltip)\n\n oldRef.removeAttribute('aria-describedby')\n }\n if (newRef) {\n newRef.addEventListener('mouseenter', showTooltipAfterDelay)\n newRef.addEventListener('mouseleave', hideTooltip)\n newRef.addEventListener('focus', showTooltip)\n newRef.addEventListener('blur', hideTooltip)\n\n newRef.setAttribute('aria-describedby', ELEMENT_ID)\n }\n },\n { immediate: true },\n )\n\n // Cleanup the tooltip when the component is unmounted\n onScopeDispose(() => {\n clearTimer()\n\n const target = unref(opts.targetRef)\n if (target) {\n target.removeEventListener('mouseenter', showTooltipAfterDelay)\n target.removeEventListener('mouseleave', hideTooltip)\n target.removeEventListener('focus', showTooltip)\n target.removeEventListener('blur', hideTooltip)\n target.removeAttribute('aria-describedby')\n }\n\n // If the tooltip is showing on this target hide it\n if (unref(config.value?.targetRef) === unref(opts.targetRef)) {\n config.value = undefined\n }\n })\n}\n"],"mappings":";;;;;;;;;AAeA,IAAM,QAAQ,IAAW;;;;;;AAOzB,IAAM,KAAK,IAAiB;;;;;;AAO5B,IAAM,SAAS,IAA0B;AAOzC,IAAM,EAAE,gBAAgB,WAAW,WAAW,YAC5C,eAAe,MAAM,OAAO,OAAO,SAAS,CAAC,GAC7C,IACA;CACE,WAAW,eAAe,MAAM,OAAO,OAAO,SAAS,CAAC;CACxD,sBAAsB;CACtB,YAAY,eAAe,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AAC9C,CACF;AAOA,MAAM,YAAY,UAAU;CAC1B,IAAI,CAAC,GAAG,SAAS,CAAC,OAChB;CAEF,GAAG,MAAM,QAAQ,OAAO,MAAM,MAAM,GAAG,CAAC,CAAC;AAC3C,CAAC;AAGD,MAAM,sBAAsB;CAC1B,IAAI,CAAC,GAAG,OACN;CAGF,GAAG,MAAM,MAAM,WAAW,eAAe,MAAM;CAC/C,GAAG,MAAM,MAAM,MAAM,eAAe,MAAM;CAC1C,GAAG,MAAM,MAAM,OAAO,eAAe,MAAM;CAC3C,GAAG,MAAM,MAAM,YAAY,eAAe,MAAM,aAAa;CAC7D,GAAG,MAAM,MAAM,aAAa,eAAe,MAAM,cAAc;AACjE,CAAC;AAGD,MACE,SACC,SAAS;CACR,IAAI,CAAC,GAAG,OACN;CAGF,IAAI,MAAM;EAMR,IAAI,kBAAkB,MAAM,KAAK,SAAS,CAAC,GACzC,OAAO;EAGT,MAAM,gBAAgB,MAAM,MAAM,aAAa,KAAK;EAGpD,GAAG,MAAM,iBAAiB,MAAM,MAAM,OAAO,KAAK;EAGlD,MAAM,SAAS,MAAM,MAAM,MAAM,KAAA;EACjC,GAAG,MAAM,MAAM,YAAY,2BAA2B,GAAG,OAAO,GAAG;EAMnE,GAAG,MAAM,QAAQ,QAAQ,MAAM,MAAM,SAAS,KAAK,SAAA,CAAU,MAAM,GAAG,CAAC,CAAC;EAExE,GAAG,MAAM,MAAM,YAAY,WAAW,OAAO;CAC/C,OAAO;EAEL,GAAG,MAAM,YAAY;EAGrB,GAAG,MAAM,MAAM,eAAe,yBAAyB;EACvD,GAAG,MAAM,MAAM,YAAY,WAAW,MAAM;EAI5C,kBAAkB,KAAA,CAAS;CAC7B;AACF,GACA,EAAE,MAAM,KAAK,CACf;;;;;;AAWA,SAAS,2BAAiC;CACxC,IAAI,OAAO,aAAa,eAAe,OAAO,WAAW,aAEvD;CAGF,IAAI,GAAG,OAEL;CAKF,MAAM,yBAAyB,SAAS,eAAe,UAAU;CAEjE,IAAI,wBACF,GAAG,QAAQ;MACN;EAEL,GAAG,QAAQ,SAAS,cAAc,KAAK;EACvC,GAAG,MAAM,OAAO;EAChB,GAAG,MAAM,KAAK;EACd,GAAG,MAAM,UAAU,IAAI,aAAa;EACpC,GAAG,MAAM,UAAU,IAAI,YAAY;EACnC,GAAG,MAAM,MAAM,YAAY,WAAW,MAAM;EAC5C,GAAG,MAAM,iBAAiB,cAAc,WAAW;EACnD,SAAS,KAAK,YAAY,GAAG,KAAK;CACpC;AACF;;;;;;AAmBA,SAAS,YAAY,IAAW;CAC9B,IAAI,CAAC,oBAAoB,EAAE,GAEzB;CAIF,WAAW;CAGX,OAAO,QAAQ,KAAA;AACjB;;;;;;;;AASA,SAAS,aAAa,GAAkB;CACtC,IAAI,EAAE,QAAQ,UAAU;EACtB,EAAE,gBAAgB;EAClB,YAAY,CAAC;CACf;AACF;;;;;;;;;AAUA,SAAS,eAAe,QAAmE;CACzF,MAAM,SAAS,QAAQ,QAAQ,QAAQ;CAEvC,IAAI,CAAC,QACH;CAGF,IAAI;EACF,OAAO,OAAO,QAAQ,QAAQ,IAAI,SAAS,KAAA;CAC7C,QAAQ;EAIN;CACF;AACF;;;;;;;;;;;;;AAcA,SAAS,kBAAkB,QAA6C;CACtE,IAAI,CAAC,GAAG,OACN,OAAO;CAGT,MAAM,OAAO,eAAe,MAAM,KAAK,SAAS;CAEhD,IAAI,GAAG,MAAM,kBAAkB,MAC7B,OAAO;CAGT,KAAK,YAAY,GAAG,KAAK;CAEzB,OAAO;AACT;;AAGA,SAAS,aAAa;CACpB,IAAI,MAAM,OAAO;EACf,aAAa,MAAM,KAAK;EACxB,MAAM,QAAQ,KAAA;CAChB;AACF;;AAGA,SAAS,cAAc,IAAwB;CAC7C,MAAM,UAAqB,CAAC;CAC5B,IAAI,SAAS,GAAG;CAChB,OAAO,QAAQ;EACb,QAAQ,KAAK,MAAM;EACnB,SAAS,OAAO;CAClB;CACA,OAAO;AACT;;AAGA,SAAS,oBAAoB,GAAmB;CAC9C,MAAM,SAAS,MAAM,OAAO,OAAO,SAAS;CAC5C,IAAI,aAAa,cAAc,EAAE,yBAAyB,WAAW,QAAQ;EAC3E,MAAM,uBAAuB,cAAc,EAAE,aAAa;EAC1D,OACE,EAAE,cAAc,OAAA,oBAChB,CAAC,qBAAqB,MAAM,WAAW,OAAO,OAAA,gBAAiB,KAC/D,EAAE,kBAAkB;CAExB;CACA,OAAO;AACT;;;;;;AAWA,SAAgB,WAAW,MAA4B;CACrD,yBAAyB;;;;CAKzB,SAAS,sBAAsB,IAAW;EACxC,MAAM,QAAQ,MAAM,KAAK,KAAK,KAAA;EAC9B,WAAW;EAGX,IAAI,QAAQ,GACV,MAAM,QAAQ,iBAAiB,YAAY,EAAE,GAAG,KAAK;OAErD,YAAY,EAAE;CAElB;;;;CAKA,SAAS,YAAY,IAAW;EAC9B,WAAW;EAGX,SAAS,iBAAiB,WAAW,cAAc;GAAE,MAAM;GAAM,SAAS;EAAK,CAAC;EAMhF,kBAAkB,MAAM,KAAK,SAAS,CAAC;EAGvC,OAAO,QAAQ;CACjB;CAEA,YACQ,MAAM,KAAK,SAAS,IACzB,QAAQ,WAAW;EAClB,IAAI,QAAQ;GACV,OAAO,oBAAoB,cAAc,qBAAqB;GAC9D,OAAO,oBAAoB,cAAc,WAAW;GACpD,OAAO,oBAAoB,SAAS,WAAW;GAC/C,OAAO,oBAAoB,QAAQ,WAAW;GAE9C,OAAO,gBAAgB,kBAAkB;EAC3C;EACA,IAAI,QAAQ;GACV,OAAO,iBAAiB,cAAc,qBAAqB;GAC3D,OAAO,iBAAiB,cAAc,WAAW;GACjD,OAAO,iBAAiB,SAAS,WAAW;GAC5C,OAAO,iBAAiB,QAAQ,WAAW;GAE3C,OAAO,aAAa,oBAAoB,UAAU;EACpD;CACF,GACA,EAAE,WAAW,KAAK,CACpB;CAGA,qBAAqB;EACnB,WAAW;EAEX,MAAM,SAAS,MAAM,KAAK,SAAS;EACnC,IAAI,QAAQ;GACV,OAAO,oBAAoB,cAAc,qBAAqB;GAC9D,OAAO,oBAAoB,cAAc,WAAW;GACpD,OAAO,oBAAoB,SAAS,WAAW;GAC/C,OAAO,oBAAoB,QAAQ,WAAW;GAC9C,OAAO,gBAAgB,kBAAkB;EAC3C;EAGA,IAAI,MAAM,OAAO,OAAO,SAAS,MAAM,MAAM,KAAK,SAAS,GACzD,OAAO,QAAQ,KAAA;CAEnB,CAAC;AACH"}
@@ -3,7 +3,7 @@ import ScalarCodeBlockCopy_default from "../ScalarCodeBlock/ScalarCodeBlockCopy.
3
3
  import ScalarVirtualText_default from "../ScalarVirtualText/ScalarVirtualText.vue.js";
4
4
  import { useBindCx } from "@scalar/use-hooks/useBindCx";
5
5
  import { createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, guardReactiveProps, normalizeClass, normalizeProps, openBlock, unref, withCtx } from "vue";
6
- var ScalarVirtualCodeBlock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var ScalarVirtualCodeBlock_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  inheritAttrs: false,
8
8
  __name: "ScalarVirtualCodeBlock",
9
9
  props: {
@@ -1 +1 @@
1
- {"version":3,"file":"ScalarVirtualCodeBlock.vue.script.js","names":[],"sources":["../../../src/components/ScalarVirtualCodeBlock/ScalarVirtualCodeBlock.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Scalar Virtual Code Block component\n *\n * Renders large blocks of code using virtualized scrolling with a copy button.\n * Used as a fallback for ScalarCodeBlock when content exceeds the performance\n * threshold for syntax highlighting.\n *\n * @example\n * <ScalarVirtualCodeBlock content=\"large json string\" lang=\"json\" />\n */\nexport default {}\n</script>\n<script lang=\"ts\" setup>\nimport { useBindCx } from '@scalar/use-hooks/useBindCx'\n\nimport ScalarCodeBlockCopy from '../ScalarCodeBlock/ScalarCodeBlockCopy.vue'\nimport type { StandardLanguageKey } from '../ScalarCodeBlock/types'\nimport ScalarCopyBackdrop from '../ScalarCopy/ScalarCopyBackdrop.vue'\nimport ScalarVirtualText from '../ScalarVirtualText/ScalarVirtualText.vue'\n\nconst {\n content,\n lang = 'plaintext',\n copy = 'hover',\n lineHeight = 20,\n} = defineProps<{\n /** Text content to display */\n content: string\n /** Language label for the copy button */\n lang?: StandardLanguageKey | string\n /** Copy button visibility: 'always', 'hover', or false */\n copy?: 'always' | 'hover' | false\n /** Height of each line in pixels */\n lineHeight?: number\n}>()\n\ndefineOptions({ inheritAttrs: false })\nconst { cx } = useBindCx()\n</script>\n<template>\n <div\n v-bind=\"\n cx(\n 'scalar-code-block group/code-block flex flex-col',\n 'relative bg-b-1 min-h-0 min-w-0',\n )\n \">\n <ScalarVirtualText\n containerClass=\"custom-scroll overflow-auto flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base p-2\"\n :lineHeight=\"lineHeight\"\n :text=\"content\" />\n <ScalarCodeBlockCopy\n v-if=\"copy\"\n class=\"scalar-code-copy absolute top-2.5 right-2.5\"\n :class=\"[{ 'opacity-100': copy === 'always' }]\"\n :content=\"content\"\n :showLang=\"true\"\n :lang=\"lang\">\n <template #backdrop>\n <ScalarCopyBackdrop\n class=\"scalar-code-copy-backdrop -right-1.5 -top-1\" />\n </template>\n </ScalarCodeBlockCopy>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAsCA,MAAM,EAAE,OAAO,WAAU;;uBAGvB,mBAwBM,OAAA,eAAA,mBAvBW,MAAA,GAAE,CAAA,oDAAA,kCAAA,CAAA,CAAA,EAAA,CAMjB,YAIoB,2BAAA;IAHlB,gBAAe;IACf,cAAa;IACZ,YAAY,QAAA;IACZ,MAAM,QAAA;wCAED,QAAA,QAAA,WAAA,EADR,YAWsB,6BAAA;;IATpB,OAAK,eAAA,CAAC,+CAA6C,CAAA,EAAA,eACzB,QAAA,SAAI,UAAA,CAAA,CAAA,CAAA;IAC7B,SAAS,QAAA;IACT,UAAU;IACV,MAAM,QAAA;;IACI,UAAQ,cAEuC,CADxD,YACwD,4BAAA,EAAtD,OAAM,+CAA6C,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ScalarVirtualCodeBlock.vue.script.js","names":[],"sources":["../../../src/components/ScalarVirtualCodeBlock/ScalarVirtualCodeBlock.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Scalar Virtual Code Block component\n *\n * Renders large blocks of code using virtualized scrolling with a copy button.\n * Used as a fallback for ScalarCodeBlock when content exceeds the performance\n * threshold for syntax highlighting.\n *\n * @example\n * <ScalarVirtualCodeBlock content=\"large json string\" lang=\"json\" />\n */\nexport default {}\n</script>\n<script lang=\"ts\" setup>\nimport { useBindCx } from '@scalar/use-hooks/useBindCx'\n\nimport ScalarCodeBlockCopy from '../ScalarCodeBlock/ScalarCodeBlockCopy.vue'\nimport type { StandardLanguageKey } from '../ScalarCodeBlock/types'\nimport ScalarCopyBackdrop from '../ScalarCopy/ScalarCopyBackdrop.vue'\nimport ScalarVirtualText from '../ScalarVirtualText/ScalarVirtualText.vue'\n\nconst {\n content,\n lang = 'plaintext',\n copy = 'hover',\n lineHeight = 20,\n} = defineProps<{\n /** Text content to display */\n content: string\n /** Language label for the copy button */\n lang?: StandardLanguageKey | string\n /** Copy button visibility: 'always', 'hover', or false */\n copy?: 'always' | 'hover' | false\n /** Height of each line in pixels */\n lineHeight?: number\n}>()\n\ndefineOptions({ inheritAttrs: false })\nconst { cx } = useBindCx()\n</script>\n<template>\n <div\n v-bind=\"\n cx(\n 'scalar-code-block group/code-block flex flex-col',\n 'relative bg-b-1 min-h-0 min-w-0',\n )\n \">\n <ScalarVirtualText\n containerClass=\"custom-scroll overflow-auto flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base p-2\"\n :lineHeight=\"lineHeight\"\n :text=\"content\" />\n <ScalarCodeBlockCopy\n v-if=\"copy\"\n class=\"scalar-code-copy absolute top-2.5 right-2.5\"\n :class=\"[{ 'opacity-100': copy === 'always' }]\"\n :content=\"content\"\n :showLang=\"true\"\n :lang=\"lang\">\n <template #backdrop>\n <ScalarCopyBackdrop\n class=\"scalar-code-copy-backdrop -right-1.5 -top-1\" />\n </template>\n </ScalarCodeBlockCopy>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAsCA,MAAM,EAAE,OAAO,UAAU;;uBAGvB,mBAwBM,OAAA,eAAA,mBAvBW,MAAA,EAAA,CAAE,CAAA,oDAAA,iCAAA,CAAA,CAAA,GAAA,CAMjB,YAIoB,2BAAA;IAHlB,gBAAe;IACf,cAAa;IACZ,YAAY,QAAA;IACZ,MAAM,QAAA;wCAED,QAAA,QAAA,UAAA,GADR,YAWsB,6BAAA;;IATpB,OAAK,eAAA,CAAC,+CAA6C,CAAA,EAAA,eACzB,QAAA,SAAI,SAAA,CAAA,CAAA,CAAA;IAC7B,SAAS,QAAA;IACT,UAAU;IACV,MAAM,QAAA;;IACI,UAAQ,cAEuC,CADxD,YACwD,4BAAA,EAAtD,OAAM,8CAA6C,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScalarVirtualText.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ScalarVirtualText/ScalarVirtualText.vue"],"names":[],"mappings":"AAkXA;;;;;;;;;;;;GAYG;wBACkB,OAAO,YAAY;AAAxC,wBAAyC;AAGzC,QAAA,MAAM,YAAY;IAEd,sBAAsB;UAChB,MAAM;IACZ;;;OAGG;iBACU,MAAM;qBACF,MAAM;mBACR,MAAM;gBACT,MAAM;IAClB,6CAA6C;iBAChC,OAAO;;IAXpB,sBAAsB;UAChB,MAAM;IACZ;;;OAGG;iBACU,MAAM;qBACF,MAAM;mBACR,MAAM;gBACT,MAAM;IAClB,6CAA6C;iBAChC,OAAO;;gBALP,MAAM;oBACF,MAAM;kBACR,MAAM;eACT,MAAM;gBAEL,OAAO;6EA+ZpB,CAAC"}
1
+ {"version":3,"file":"ScalarVirtualText.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ScalarVirtualText/ScalarVirtualText.vue"],"names":[],"mappings":"AAkXA;;;;;;;;;;;;GAYG;wBACkB,OAAO,YAAY;AAAxC,wBAAyC;AAGzC,QAAA,MAAM,YAAY;IAEd,sBAAsB;UAChB,MAAM;IACZ;;;OAGG;iBACU,MAAM;qBACF,MAAM;mBACR,MAAM;gBACT,MAAM;IAClB,6CAA6C;iBAChC,OAAO;;IAXpB,sBAAsB;UAChB,MAAM;IACZ;;;OAGG;iBACU,MAAM;qBACF,MAAM;mBACR,MAAM;gBACT,MAAM;IAClB,6CAA6C;iBAChC,OAAO;;gBALP,MAAM;oBACF,MAAM;kBACR,MAAM;eACT,MAAM;gBAEL,OAAO;6EAoapB,CAAC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../_virtual/_plugin-vue_export
2
2
  import ScalarVirtualText_vue_vue_type_script_setup_true_lang_default from "./ScalarVirtualText.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/ScalarVirtualText/ScalarVirtualText.vue
5
- var ScalarVirtualText_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ScalarVirtualText_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-77b9d685"]]);
5
+ var ScalarVirtualText_default = /*#__PURE__*/ _plugin_vue_export_helper_default(ScalarVirtualText_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-77b9d685"]]);
6
6
  //#endregion
7
7
  export { ScalarVirtualText_default as default };
8
8
 
@@ -5,7 +5,7 @@ var _hoisted_1 = {
5
5
  key: 0,
6
6
  class: "sticky top-0 z-10 flex h-0 w-full justify-end overflow-visible"
7
7
  };
8
- var ScalarVirtualText_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
8
+ var ScalarVirtualText_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
9
9
  __name: "ScalarVirtualText",
10
10
  props: {
11
11
  text: {},
@@ -1 +1 @@
1
- {"version":3,"file":"ScalarVirtualText.vue.script.js","names":[],"sources":["../../../src/components/ScalarVirtualText/ScalarVirtualText.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Scalar Virtual Text component\n *\n * Renders large blocks of text efficiently using virtualized scrolling.\n * Only the visible lines are rendered to the DOM. Supports in-content\n * search with match highlighting and navigation (Cmd/Ctrl+F).\n *\n * @example\n * <ScalarVirtualText text=\"line1\\nline2\\nline3\" :lineHeight=\"20\" />\n *\n * @example\n * <ScalarVirtualText text=\"lots of text\" searchable />\n */\nexport default {}\n</script>\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport ScalarVirtualTextSearch from './ScalarVirtualTextSearch.vue'\n\nconst props = withDefaults(\n defineProps<{\n /** Text to display */\n text: string\n /**\n * Height of each line\n * @default 20\n */\n lineHeight?: number\n containerClass?: string\n contentClass?: string\n lineClass?: string\n /** Enable built-in search with Cmd/Ctrl+F */\n searchable?: boolean\n }>(),\n {\n lineHeight: 20,\n containerClass: '',\n contentClass: '',\n lineClass: '',\n searchable: false,\n },\n)\n\nconst containerRef = ref<HTMLElement | null>(null)\nconst searchRef = ref<InstanceType<typeof ScalarVirtualTextSearch> | null>(null)\nconst scrollPosition = ref(0)\nconst containerHeight = ref(0)\n\nconst searchQuery = ref('')\nconst searchOpen = ref(false)\nconst activeMatchIndex = ref(0)\n\n/** Array of text broken into lines */\nconst lines = computed(() => props.text.split('\\n'))\n/** Total height of all lines combined */\nconst totalHeight = computed(() => lines.value.length * props.lineHeight)\n\n/** Index of the first visible line */\nconst visibleStartIndex = computed(() =>\n Math.floor(scrollPosition.value / props.lineHeight),\n)\n\n/** Index of the last visible line */\nconst visibleEndIndex = computed(() =>\n Math.min(\n Math.ceil(\n (scrollPosition.value + containerHeight.value) / props.lineHeight,\n ),\n lines.value.length,\n ),\n)\n\nconst BUFFER = 10\n\n/** Index of the first rendered line (clamped, shared between slice and offset) */\nconst renderStartIndex = computed(() =>\n Math.max(0, visibleStartIndex.value - BUFFER),\n)\n\n/** Array of visible lines, including buffer for smooth scrolling */\nconst visibleLines = computed(() => {\n const end = Math.min(lines.value.length, visibleEndIndex.value + BUFFER)\n return lines.value.slice(renderStartIndex.value, end)\n})\n\n/** Pixel offset for the visible content slice */\nconst contentOffset = computed(() => renderStartIndex.value * props.lineHeight)\n\n// ── Search ────────────────────────────────────────────────────────────\n\ntype SearchMatch = { line: number; start: number; end: number }\n\n/** All matches across the full text, computed only when the query changes */\nconst searchMatches = computed<SearchMatch[]>(() => {\n const query = searchQuery.value\n if (!query) return []\n\n const lowerQuery = query.toLowerCase()\n const matches: SearchMatch[] = []\n\n for (let i = 0; i < lines.value.length; i++) {\n const line = lines.value[i]\n if (!line) continue\n const lowerLine = line.toLowerCase()\n let pos = 0\n while (pos < lowerLine.length) {\n const idx = lowerLine.indexOf(lowerQuery, pos)\n if (idx === -1) break\n matches.push({ line: i, start: idx, end: idx + query.length })\n pos = idx + lowerQuery.length\n }\n }\n return matches\n})\n\n/** Set of line indices that contain at least one match, for quick lookup */\nconst matchLineSet = computed(() => {\n const set = new Set<number>()\n for (const m of searchMatches.value) set.add(m.line)\n return set\n})\n\n/** Clamp active index when match count changes */\nwatch(\n () => searchMatches.value.length,\n (count) => {\n if (count === 0) {\n activeMatchIndex.value = 0\n } else if (activeMatchIndex.value >= count) {\n activeMatchIndex.value = count - 1\n }\n },\n)\n\n/** Scroll the container so the active match's line is visible */\nconst scrollToMatch = (match: SearchMatch) => {\n if (!containerRef.value) return\n\n const targetScroll = match.line * props.lineHeight\n const viewTop = containerRef.value.scrollTop\n const viewBottom = viewTop + containerRef.value.clientHeight\n\n if (targetScroll < viewTop || targetScroll + props.lineHeight > viewBottom) {\n containerRef.value.scrollTop =\n targetScroll - containerRef.value.clientHeight / 2\n }\n}\n\nconst goToMatch = (index: number) => {\n const match = searchMatches.value[index]\n if (!match) return\n activeMatchIndex.value = index\n scrollToMatch(match)\n}\n\nconst nextMatch = () => {\n if (searchMatches.value.length === 0) return\n goToMatch((activeMatchIndex.value + 1) % searchMatches.value.length)\n}\n\nconst prevMatch = () => {\n if (searchMatches.value.length === 0) return\n goToMatch(\n (activeMatchIndex.value - 1 + searchMatches.value.length) %\n searchMatches.value.length,\n )\n}\n\nconst openSearch = () => {\n searchOpen.value = true\n void nextTick(() => searchRef.value?.focus())\n}\n\nconst closeSearch = () => {\n searchOpen.value = false\n searchQuery.value = ''\n activeMatchIndex.value = 0\n}\n\n/** Intercepts Cmd/Ctrl+F when searchable and the container has focus */\nconst handleKeydown = (e: KeyboardEvent) => {\n if (!props.searchable) return\n\n const modifier = e.metaKey || e.ctrlKey\n if (modifier && e.key === 'f') {\n e.preventDefault()\n e.stopPropagation()\n openSearch()\n }\n if (e.key === 'Escape' && searchOpen.value) {\n e.preventDefault()\n closeSearch()\n }\n}\n\n/** Jump to the first match whenever the query changes */\nwatch(searchQuery, () => {\n activeMatchIndex.value = 0\n const first = searchMatches.value[0]\n if (first) {\n scrollToMatch(first)\n }\n})\n\n// ── Scroll / resize ───────────────────────────────────────────────────\n\n/** Updates the scroll position when the container is scrolled */\nconst handleScroll = () =>\n containerRef.value && (scrollPosition.value = containerRef.value.scrollTop)\n\n/** Updates the container height when the window is resized */\nconst updateContainerHeight = () =>\n containerRef.value &&\n (containerHeight.value = containerRef.value.clientHeight)\n\nonMounted(() => {\n updateContainerHeight()\n window.addEventListener('resize', updateContainerHeight)\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('resize', updateContainerHeight)\n})\n\n// ── Line rendering with highlights ────────────────────────────────────\n\ntype LineSegment = { text: string; highlight: boolean; active: boolean }\n\n/**\n * For a given absolute line index, splits the line text into segments\n * with match highlighting metadata.\n */\nconst getLineSegments = (absoluteIndex: number): LineSegment[] => {\n const lineText = lines.value[absoluteIndex] ?? ''\n if (!searchQuery.value || !matchLineSet.value.has(absoluteIndex)) {\n return [{ text: lineText, highlight: false, active: false }]\n }\n\n const lineMatches = searchMatches.value.filter(\n (m) => m.line === absoluteIndex,\n )\n const segments: LineSegment[] = []\n let cursor = 0\n\n for (const match of lineMatches) {\n if (match.start > cursor) {\n segments.push({\n text: lineText.slice(cursor, match.start),\n highlight: false,\n active: false,\n })\n }\n\n const isActive =\n searchMatches.value.indexOf(match) === activeMatchIndex.value\n\n segments.push({\n text: lineText.slice(match.start, match.end),\n highlight: true,\n active: isActive,\n })\n cursor = match.end\n }\n\n if (cursor < lineText.length) {\n segments.push({\n text: lineText.slice(cursor),\n highlight: false,\n active: false,\n })\n }\n\n return segments\n}\n\n/**\n * Converts a relative visible-line index to the absolute line index\n * in the full text.\n */\nconst toAbsoluteIndex = (relativeIndex: number): number =>\n renderStartIndex.value + relativeIndex\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"scalar-virtual-text relative overflow-auto\"\n :class=\"containerClass\"\n tabindex=\"0\"\n @keydown=\"handleKeydown\"\n @scroll=\"handleScroll\">\n <!-- Zero-height wrapper so the search bar does not contribute to scrollHeight -->\n <div\n v-if=\"searchable && searchOpen\"\n class=\"sticky top-0 z-10 flex h-0 w-full justify-end overflow-visible\">\n <ScalarVirtualTextSearch\n ref=\"searchRef\"\n v-model:query=\"searchQuery\"\n :activeMatchIndex=\"activeMatchIndex\"\n :matchCount=\"searchMatches.length\"\n @close=\"closeSearch\"\n @next=\"nextMatch\"\n @prev=\"prevMatch\" />\n </div>\n\n <!-- Invisible spacer that defines the full scrollable height -->\n <div :style=\"{ height: `${totalHeight}px` }\" />\n <code\n class=\"scalar-virtual-text-content absolute left-0 right-0 top-0\"\n :class=\"contentClass\"\n :style=\"{ transform: `translateY(${contentOffset}px)` }\">\n <div\n v-for=\"(line, index) in visibleLines\"\n :key=\"renderStartIndex + index\"\n class=\"scalar-virtual-text-line\"\n :class=\"lineClass\"\n :style=\"{\n height: `${props.lineHeight}px`,\n lineHeight: `${props.lineHeight}px`,\n }\">\n <template\n v-if=\"searchQuery && matchLineSet.has(toAbsoluteIndex(index))\">\n <template\n v-for=\"(segment, sIdx) in getLineSegments(toAbsoluteIndex(index))\"\n :key=\"sIdx\">\n <mark\n v-if=\"segment.highlight\"\n class=\"scalar-virtual-text-highlight\"\n :class=\"\n segment.active ? 'scalar-virtual-text-highlight-active' : ''\n \">\n {{ segment.text }}\n </mark>\n <template v-else>{{ segment.text }}</template>\n </template>\n </template>\n <template v-else>{{ line }}</template>\n </div>\n </code>\n </div>\n</template>\n\n<style scoped>\n.scalar-virtual-text:focus {\n outline: none;\n}\n\n.scalar-virtual-text-highlight {\n background: var(--scalar-background-accent);\n color: inherit;\n border-radius: var(--scalar-radius);\n padding: 1px 0;\n}\n\n.scalar-virtual-text-highlight-active {\n background: var(--scalar-color-accent);\n color: var(--scalar-background-1);\n border-radius: var(--scalar-radius);\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"ScalarVirtualText.vue.script.js","names":[],"sources":["../../../src/components/ScalarVirtualText/ScalarVirtualText.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Scalar Virtual Text component\n *\n * Renders large blocks of text efficiently using virtualized scrolling.\n * Only the visible lines are rendered to the DOM. Supports in-content\n * search with match highlighting and navigation (Cmd/Ctrl+F).\n *\n * @example\n * <ScalarVirtualText text=\"line1\\nline2\\nline3\" :lineHeight=\"20\" />\n *\n * @example\n * <ScalarVirtualText text=\"lots of text\" searchable />\n */\nexport default {}\n</script>\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport ScalarVirtualTextSearch from './ScalarVirtualTextSearch.vue'\n\nconst props = withDefaults(\n defineProps<{\n /** Text to display */\n text: string\n /**\n * Height of each line\n * @default 20\n */\n lineHeight?: number\n containerClass?: string\n contentClass?: string\n lineClass?: string\n /** Enable built-in search with Cmd/Ctrl+F */\n searchable?: boolean\n }>(),\n {\n lineHeight: 20,\n containerClass: '',\n contentClass: '',\n lineClass: '',\n searchable: false,\n },\n)\n\nconst containerRef = ref<HTMLElement | null>(null)\nconst searchRef = ref<InstanceType<typeof ScalarVirtualTextSearch> | null>(null)\nconst scrollPosition = ref(0)\nconst containerHeight = ref(0)\n\nconst searchQuery = ref('')\nconst searchOpen = ref(false)\nconst activeMatchIndex = ref(0)\n\n/** Array of text broken into lines */\nconst lines = computed(() => props.text.split('\\n'))\n/** Total height of all lines combined */\nconst totalHeight = computed(() => lines.value.length * props.lineHeight)\n\n/** Index of the first visible line */\nconst visibleStartIndex = computed(() =>\n Math.floor(scrollPosition.value / props.lineHeight),\n)\n\n/** Index of the last visible line */\nconst visibleEndIndex = computed(() =>\n Math.min(\n Math.ceil(\n (scrollPosition.value + containerHeight.value) / props.lineHeight,\n ),\n lines.value.length,\n ),\n)\n\nconst BUFFER = 10\n\n/** Index of the first rendered line (clamped, shared between slice and offset) */\nconst renderStartIndex = computed(() =>\n Math.max(0, visibleStartIndex.value - BUFFER),\n)\n\n/** Array of visible lines, including buffer for smooth scrolling */\nconst visibleLines = computed(() => {\n const end = Math.min(lines.value.length, visibleEndIndex.value + BUFFER)\n return lines.value.slice(renderStartIndex.value, end)\n})\n\n/** Pixel offset for the visible content slice */\nconst contentOffset = computed(() => renderStartIndex.value * props.lineHeight)\n\n// ── Search ────────────────────────────────────────────────────────────\n\ntype SearchMatch = { line: number; start: number; end: number }\n\n/** All matches across the full text, computed only when the query changes */\nconst searchMatches = computed<SearchMatch[]>(() => {\n const query = searchQuery.value\n if (!query) return []\n\n const lowerQuery = query.toLowerCase()\n const matches: SearchMatch[] = []\n\n for (let i = 0; i < lines.value.length; i++) {\n const line = lines.value[i]\n if (!line) continue\n const lowerLine = line.toLowerCase()\n let pos = 0\n while (pos < lowerLine.length) {\n const idx = lowerLine.indexOf(lowerQuery, pos)\n if (idx === -1) break\n matches.push({ line: i, start: idx, end: idx + query.length })\n pos = idx + lowerQuery.length\n }\n }\n return matches\n})\n\n/** Set of line indices that contain at least one match, for quick lookup */\nconst matchLineSet = computed(() => {\n const set = new Set<number>()\n for (const m of searchMatches.value) set.add(m.line)\n return set\n})\n\n/** Clamp active index when match count changes */\nwatch(\n () => searchMatches.value.length,\n (count) => {\n if (count === 0) {\n activeMatchIndex.value = 0\n } else if (activeMatchIndex.value >= count) {\n activeMatchIndex.value = count - 1\n }\n },\n)\n\n/** Scroll the container so the active match's line is visible */\nconst scrollToMatch = (match: SearchMatch) => {\n if (!containerRef.value) return\n\n const targetScroll = match.line * props.lineHeight\n const viewTop = containerRef.value.scrollTop\n const viewBottom = viewTop + containerRef.value.clientHeight\n\n if (targetScroll < viewTop || targetScroll + props.lineHeight > viewBottom) {\n containerRef.value.scrollTop =\n targetScroll - containerRef.value.clientHeight / 2\n }\n}\n\nconst goToMatch = (index: number) => {\n const match = searchMatches.value[index]\n if (!match) return\n activeMatchIndex.value = index\n scrollToMatch(match)\n}\n\nconst nextMatch = () => {\n if (searchMatches.value.length === 0) return\n goToMatch((activeMatchIndex.value + 1) % searchMatches.value.length)\n}\n\nconst prevMatch = () => {\n if (searchMatches.value.length === 0) return\n goToMatch(\n (activeMatchIndex.value - 1 + searchMatches.value.length) %\n searchMatches.value.length,\n )\n}\n\nconst openSearch = () => {\n searchOpen.value = true\n void nextTick(() => searchRef.value?.focus())\n}\n\nconst closeSearch = () => {\n searchOpen.value = false\n searchQuery.value = ''\n activeMatchIndex.value = 0\n}\n\n/** Intercepts Cmd/Ctrl+F when searchable and the container has focus */\nconst handleKeydown = (e: KeyboardEvent) => {\n if (!props.searchable) return\n\n const modifier = e.metaKey || e.ctrlKey\n if (modifier && e.key === 'f') {\n e.preventDefault()\n e.stopPropagation()\n openSearch()\n }\n if (e.key === 'Escape' && searchOpen.value) {\n e.preventDefault()\n closeSearch()\n }\n}\n\n/** Jump to the first match whenever the query changes */\nwatch(searchQuery, () => {\n activeMatchIndex.value = 0\n const first = searchMatches.value[0]\n if (first) {\n scrollToMatch(first)\n }\n})\n\n// ── Scroll / resize ───────────────────────────────────────────────────\n\n/** Updates the scroll position when the container is scrolled */\nconst handleScroll = () =>\n containerRef.value && (scrollPosition.value = containerRef.value.scrollTop)\n\n/** Updates the container height when the window is resized */\nconst updateContainerHeight = () =>\n containerRef.value &&\n (containerHeight.value = containerRef.value.clientHeight)\n\nonMounted(() => {\n updateContainerHeight()\n window.addEventListener('resize', updateContainerHeight)\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('resize', updateContainerHeight)\n})\n\n// ── Line rendering with highlights ────────────────────────────────────\n\ntype LineSegment = { text: string; highlight: boolean; active: boolean }\n\n/**\n * For a given absolute line index, splits the line text into segments\n * with match highlighting metadata.\n */\nconst getLineSegments = (absoluteIndex: number): LineSegment[] => {\n const lineText = lines.value[absoluteIndex] ?? ''\n if (!searchQuery.value || !matchLineSet.value.has(absoluteIndex)) {\n return [{ text: lineText, highlight: false, active: false }]\n }\n\n const lineMatches = searchMatches.value.filter(\n (m) => m.line === absoluteIndex,\n )\n const segments: LineSegment[] = []\n let cursor = 0\n\n for (const match of lineMatches) {\n if (match.start > cursor) {\n segments.push({\n text: lineText.slice(cursor, match.start),\n highlight: false,\n active: false,\n })\n }\n\n const isActive =\n searchMatches.value.indexOf(match) === activeMatchIndex.value\n\n segments.push({\n text: lineText.slice(match.start, match.end),\n highlight: true,\n active: isActive,\n })\n cursor = match.end\n }\n\n if (cursor < lineText.length) {\n segments.push({\n text: lineText.slice(cursor),\n highlight: false,\n active: false,\n })\n }\n\n return segments\n}\n\n/**\n * Converts a relative visible-line index to the absolute line index\n * in the full text.\n */\nconst toAbsoluteIndex = (relativeIndex: number): number =>\n renderStartIndex.value + relativeIndex\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"scalar-virtual-text relative overflow-auto\"\n :class=\"containerClass\"\n tabindex=\"0\"\n @keydown=\"handleKeydown\"\n @scroll=\"handleScroll\">\n <!-- Zero-height wrapper so the search bar does not contribute to scrollHeight -->\n <div\n v-if=\"searchable && searchOpen\"\n class=\"sticky top-0 z-10 flex h-0 w-full justify-end overflow-visible\">\n <ScalarVirtualTextSearch\n ref=\"searchRef\"\n v-model:query=\"searchQuery\"\n :activeMatchIndex=\"activeMatchIndex\"\n :matchCount=\"searchMatches.length\"\n @close=\"closeSearch\"\n @next=\"nextMatch\"\n @prev=\"prevMatch\" />\n </div>\n\n <!-- Invisible spacer that defines the full scrollable height -->\n <div :style=\"{ height: `${totalHeight}px` }\" />\n <code\n class=\"scalar-virtual-text-content absolute left-0 right-0 top-0\"\n :class=\"contentClass\"\n :style=\"{ transform: `translateY(${contentOffset}px)` }\">\n <div\n v-for=\"(line, index) in visibleLines\"\n :key=\"renderStartIndex + index\"\n class=\"scalar-virtual-text-line\"\n :class=\"lineClass\"\n :style=\"{\n height: `${props.lineHeight}px`,\n lineHeight: `${props.lineHeight}px`,\n }\">\n <template\n v-if=\"searchQuery && matchLineSet.has(toAbsoluteIndex(index))\">\n <template\n v-for=\"(segment, sIdx) in getLineSegments(toAbsoluteIndex(index))\"\n :key=\"sIdx\">\n <mark\n v-if=\"segment.highlight\"\n class=\"scalar-virtual-text-highlight\"\n :class=\"\n segment.active ? 'scalar-virtual-text-highlight-active' : ''\n \">\n {{ segment.text }}\n </mark>\n <template v-else>{{ segment.text }}</template>\n </template>\n </template>\n <template v-else>{{ line }}</template>\n </div>\n </code>\n </div>\n</template>\n\n<style scoped>\n.scalar-virtual-text:focus {\n outline: none;\n}\n\n.scalar-virtual-text-highlight {\n background: var(--scalar-background-accent);\n color: inherit;\n border-radius: var(--scalar-radius);\n padding: 1px 0;\n}\n\n.scalar-virtual-text-highlight-active {\n background: var(--scalar-color-accent);\n color: var(--scalar-background-1);\n border-radius: var(--scalar-radius);\n}\n</style>\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../_virtual/_plugin-vue_export
2
2
  import ScalarVirtualTextSearch_vue_vue_type_script_setup_true_lang_default from "./ScalarVirtualTextSearch.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/ScalarVirtualText/ScalarVirtualTextSearch.vue
5
- var ScalarVirtualTextSearch_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ScalarVirtualTextSearch_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-95edadbb"]]);
5
+ var ScalarVirtualTextSearch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(ScalarVirtualTextSearch_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-95edadbb"]]);
6
6
  //#endregion
7
7
  export { ScalarVirtualTextSearch_default as default };
8
8
 
@@ -7,7 +7,7 @@ var _hoisted_1 = {
7
7
  };
8
8
  var _hoisted_2 = ["disabled"];
9
9
  var _hoisted_3 = ["disabled"];
10
- var ScalarVirtualTextSearch_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
10
+ var ScalarVirtualTextSearch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
11
11
  __name: "ScalarVirtualTextSearch",
12
12
  props: {
13
13
  query: {},
@@ -1 +1 @@
1
- {"version":3,"file":"ScalarVirtualTextSearch.vue.script.js","names":[],"sources":["../../../src/components/ScalarVirtualText/ScalarVirtualTextSearch.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Floating search bar for ScalarVirtualText\n *\n * Provides find-in-text functionality with match navigation (next/prev)\n * and result count display.\n *\n * @example\n * <ScalarVirtualTextSearch\n * v-model:query=\"searchQuery\"\n * :matchCount=\"searchMatches.length\"\n * :activeMatchIndex=\"activeMatchIndex\"\n * @next=\"nextMatch\"\n * @prev=\"prevMatch\"\n * @close=\"closeSearch\" />\n */\nexport default {}\n</script>\n<script setup lang=\"ts\">\nimport {\n ScalarIconCaretDown,\n ScalarIconCaretUp,\n ScalarIconMagnifyingGlass,\n ScalarIconX,\n} from '@scalar/icons'\nimport { nextTick, ref, watch } from 'vue'\n\nconst props = defineProps<{\n /** Current search query (v-model) */\n query: string\n /** Total number of matches */\n matchCount: number\n /** Zero-based index of the currently active match */\n activeMatchIndex: number\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:query', value: string): void\n (e: 'next'): void\n (e: 'prev'): void\n (e: 'close'): void\n}>()\n\nconst searchInputRef = ref<HTMLInputElement | null>(null)\n\nconst localQuery = ref(props.query)\n\nwatch(\n () => props.query,\n (val) => {\n localQuery.value = val\n },\n)\n\nwatch(localQuery, (val) => {\n emit('update:query', val)\n})\n\n/** Focus the input when mounted */\nconst focus = () => {\n void nextTick(() => searchInputRef.value?.focus())\n}\n\n/** Navigate on Enter / Shift+Enter inside the search input */\nconst handleSearchKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n if (e.shiftKey) emit('prev')\n else emit('next')\n }\n if (e.key === 'Escape') {\n e.preventDefault()\n emit('close')\n }\n}\n\ndefineExpose({ focus })\n</script>\n\n<template>\n <div\n class=\"scalar-virtual-text-search ml-auto mr-2 mt-2 flex h-fit w-fit items-center gap-1 overflow-visible rounded-lg bg-b-2 px-2 py-1 shadow-md\"\n @click.stop>\n <ScalarIconMagnifyingGlass\n class=\"pointer-events-none size-3.5 shrink-0 text-c-3\" />\n <input\n ref=\"searchInputRef\"\n v-model=\"localQuery\"\n aria-label=\"Search in text\"\n autocomplete=\"off\"\n class=\"scalar-virtual-text-search-input min-w-0 w-36 appearance-none border-none bg-transparent px-1 py-0.5 text-xs text-c-1 outline-none\"\n placeholder=\"Find...\"\n spellcheck=\"false\"\n type=\"search\"\n @keydown=\"handleSearchKeydown\" />\n <span\n v-if=\"localQuery\"\n class=\"shrink-0 whitespace-nowrap text-xs tabular-nums text-c-3\">\n {{\n matchCount > 0\n ? `${activeMatchIndex + 1} of ${matchCount}`\n : 'No results'\n }}\n </span>\n <span class=\"mx-0.5 h-3.5 w-px bg-b-3\" />\n <button\n aria-label=\"Previous match\"\n class=\"flex size-5 items-center justify-center rounded text-c-3 hover:bg-b-3 hover:text-c-1 disabled:pointer-events-none disabled:opacity-30\"\n :disabled=\"matchCount === 0\"\n title=\"Previous match (Shift+Enter)\"\n type=\"button\"\n @click=\"emit('prev')\">\n <ScalarIconCaretUp class=\"size-3\" />\n </button>\n <button\n aria-label=\"Next match\"\n class=\"flex size-5 items-center justify-center rounded text-c-3 hover:bg-b-3 hover:text-c-1 disabled:pointer-events-none disabled:opacity-30\"\n :disabled=\"matchCount === 0\"\n title=\"Next match (Enter)\"\n type=\"button\"\n @click=\"emit('next')\">\n <ScalarIconCaretDown class=\"size-3\" />\n </button>\n <button\n aria-label=\"Close search\"\n class=\"flex size-5 items-center justify-center rounded text-c-3 hover:bg-b-3 hover:text-c-1\"\n title=\"Close (Escape)\"\n type=\"button\"\n @click=\"emit('close')\">\n <ScalarIconX class=\"size-3\" />\n </button>\n </div>\n</template>\n\n<style scoped>\n.scalar-virtual-text-search-input::-webkit-search-cancel-button {\n display: none;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EA2BA,MAAM,QAAQ;EASd,MAAM,OAAO;EAOb,MAAM,iBAAiB,IAA6B,KAAI;EAExD,MAAM,aAAa,IAAI,MAAM,MAAK;AAElC,cACQ,MAAM,QACX,QAAQ;AACP,cAAW,QAAQ;IAEvB;AAEA,QAAM,aAAa,QAAQ;AACzB,QAAK,gBAAgB,IAAG;IACzB;;EAGD,MAAM,cAAc;AACb,kBAAe,eAAe,OAAO,OAAO,CAAA;;;EAInD,MAAM,uBAAuB,MAAqB;AAChD,OAAI,EAAE,QAAQ,SAAS;AACrB,MAAE,gBAAe;AACjB,QAAI,EAAE,SAAU,MAAK,OAAM;QACtB,MAAK,OAAM;;AAElB,OAAI,EAAE,QAAQ,UAAU;AACtB,MAAE,gBAAe;AACjB,SAAK,QAAO;;;AAIhB,WAAa,EAAE,OAAO,CAAA;;uBAIpB,mBAmDM,OAAA;IAlDJ,OAAM;IACL,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;;IACX,YAC2D,MAAA,0BAAA,EAAA,EAAzD,OAAM,kDAAgD,CAAA;mBACxD,mBASmC,SAAA;cAR7B;KAAJ,KAAI;6EACe,QAAA;KACnB,cAAW;KACX,cAAa;KACb,OAAM;KACN,aAAY;KACZ,YAAW;KACX,MAAK;KACJ,WAAS;iCAPD,WAAA,MAAU,CAAA,CAAA;IASb,WAAA,SAAA,WAAA,EADR,mBAQO,QARP,YAQO,gBAJH,QAAA,aAAU,IAAA,GAAoB,QAAA,mBAAgB,EAAA,MAAW,QAAA,eAAA,aAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;8BAK7D,mBAAyC,QAAA,EAAnC,OAAM,4BAA0B,EAAA,MAAA,GAAA;IACtC,mBAQS,UAAA;KAPP,cAAW;KACX,OAAM;KACL,UAAU,QAAA,eAAU;KACrB,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,OAAA;QACZ,YAAoC,MAAA,kBAAA,EAAA,EAAjB,OAAM,UAAQ,CAAA,CAAA,EAAA,GAAA,WAAA;IAEnC,mBAQS,UAAA;KAPP,cAAW;KACX,OAAM;KACL,UAAU,QAAA,eAAU;KACrB,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,OAAA;QACZ,YAAsC,MAAA,oBAAA,EAAA,EAAjB,OAAM,UAAQ,CAAA,CAAA,EAAA,GAAA,WAAA;IAErC,mBAOS,UAAA;KANP,cAAW;KACX,OAAM;KACN,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;QACZ,YAA8B,MAAA,YAAA,EAAA,EAAjB,OAAM,UAAQ,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ScalarVirtualTextSearch.vue.script.js","names":[],"sources":["../../../src/components/ScalarVirtualText/ScalarVirtualTextSearch.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Floating search bar for ScalarVirtualText\n *\n * Provides find-in-text functionality with match navigation (next/prev)\n * and result count display.\n *\n * @example\n * <ScalarVirtualTextSearch\n * v-model:query=\"searchQuery\"\n * :matchCount=\"searchMatches.length\"\n * :activeMatchIndex=\"activeMatchIndex\"\n * @next=\"nextMatch\"\n * @prev=\"prevMatch\"\n * @close=\"closeSearch\" />\n */\nexport default {}\n</script>\n<script setup lang=\"ts\">\nimport {\n ScalarIconCaretDown,\n ScalarIconCaretUp,\n ScalarIconMagnifyingGlass,\n ScalarIconX,\n} from '@scalar/icons'\nimport { nextTick, ref, watch } from 'vue'\n\nconst props = defineProps<{\n /** Current search query (v-model) */\n query: string\n /** Total number of matches */\n matchCount: number\n /** Zero-based index of the currently active match */\n activeMatchIndex: number\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:query', value: string): void\n (e: 'next'): void\n (e: 'prev'): void\n (e: 'close'): void\n}>()\n\nconst searchInputRef = ref<HTMLInputElement | null>(null)\n\nconst localQuery = ref(props.query)\n\nwatch(\n () => props.query,\n (val) => {\n localQuery.value = val\n },\n)\n\nwatch(localQuery, (val) => {\n emit('update:query', val)\n})\n\n/** Focus the input when mounted */\nconst focus = () => {\n void nextTick(() => searchInputRef.value?.focus())\n}\n\n/** Navigate on Enter / Shift+Enter inside the search input */\nconst handleSearchKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n if (e.shiftKey) emit('prev')\n else emit('next')\n }\n if (e.key === 'Escape') {\n e.preventDefault()\n emit('close')\n }\n}\n\ndefineExpose({ focus })\n</script>\n\n<template>\n <div\n class=\"scalar-virtual-text-search ml-auto mr-2 mt-2 flex h-fit w-fit items-center gap-1 overflow-visible rounded-lg bg-b-2 px-2 py-1 shadow-md\"\n @click.stop>\n <ScalarIconMagnifyingGlass\n class=\"pointer-events-none size-3.5 shrink-0 text-c-3\" />\n <input\n ref=\"searchInputRef\"\n v-model=\"localQuery\"\n aria-label=\"Search in text\"\n autocomplete=\"off\"\n class=\"scalar-virtual-text-search-input min-w-0 w-36 appearance-none border-none bg-transparent px-1 py-0.5 text-xs text-c-1 outline-none\"\n placeholder=\"Find...\"\n spellcheck=\"false\"\n type=\"search\"\n @keydown=\"handleSearchKeydown\" />\n <span\n v-if=\"localQuery\"\n class=\"shrink-0 whitespace-nowrap text-xs tabular-nums text-c-3\">\n {{\n matchCount > 0\n ? `${activeMatchIndex + 1} of ${matchCount}`\n : 'No results'\n }}\n </span>\n <span class=\"mx-0.5 h-3.5 w-px bg-b-3\" />\n <button\n aria-label=\"Previous match\"\n class=\"flex size-5 items-center justify-center rounded text-c-3 hover:bg-b-3 hover:text-c-1 disabled:pointer-events-none disabled:opacity-30\"\n :disabled=\"matchCount === 0\"\n title=\"Previous match (Shift+Enter)\"\n type=\"button\"\n @click=\"emit('prev')\">\n <ScalarIconCaretUp class=\"size-3\" />\n </button>\n <button\n aria-label=\"Next match\"\n class=\"flex size-5 items-center justify-center rounded text-c-3 hover:bg-b-3 hover:text-c-1 disabled:pointer-events-none disabled:opacity-30\"\n :disabled=\"matchCount === 0\"\n title=\"Next match (Enter)\"\n type=\"button\"\n @click=\"emit('next')\">\n <ScalarIconCaretDown class=\"size-3\" />\n </button>\n <button\n aria-label=\"Close search\"\n class=\"flex size-5 items-center justify-center rounded text-c-3 hover:bg-b-3 hover:text-c-1\"\n title=\"Close (Escape)\"\n type=\"button\"\n @click=\"emit('close')\">\n <ScalarIconX class=\"size-3\" />\n </button>\n </div>\n</template>\n\n<style scoped>\n.scalar-virtual-text-search-input::-webkit-search-cancel-button {\n display: none;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EA2BA,MAAM,QAAQ;EASd,MAAM,OAAO;EAOb,MAAM,iBAAiB,IAA6B,IAAI;EAExD,MAAM,aAAa,IAAI,MAAM,KAAK;EAElC,YACQ,MAAM,QACX,QAAQ;GACP,WAAW,QAAQ;EACrB,CACF;EAEA,MAAM,aAAa,QAAQ;GACzB,KAAK,gBAAgB,GAAG;EAC1B,CAAC;;EAGD,MAAM,cAAc;GAClB,eAAoB,eAAe,OAAO,MAAM,CAAC;EACnD;;EAGA,MAAM,uBAAuB,MAAqB;GAChD,IAAI,EAAE,QAAQ,SAAS;IACrB,EAAE,eAAe;IACjB,IAAI,EAAE,UAAU,KAAK,MAAM;SACtB,KAAK,MAAM;GAClB;GACA,IAAI,EAAE,QAAQ,UAAU;IACtB,EAAE,eAAe;IACjB,KAAK,OAAO;GACd;EACF;EAEA,SAAa,EAAE,MAAM,CAAC;;uBAIpB,mBAmDM,OAAA;IAlDJ,OAAM;IACL,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;;IACX,YAC2D,MAAA,yBAAA,GAAA,EAAzD,OAAM,iDAAgD,CAAA;mBACxD,mBASmC,SAAA;cAR7B;KAAJ,KAAI;6EACe,QAAA;KACnB,cAAW;KACX,cAAa;KACb,OAAM;KACN,aAAY;KACZ,YAAW;KACX,MAAK;KACJ,WAAS;iCAPD,WAAA,KAAU,CAAA,CAAA;IASb,WAAA,SAAA,UAAA,GADR,mBAQO,QARP,YAQO,gBAJH,QAAA,aAAU,IAAA,GAAoB,QAAA,mBAAgB,EAAA,MAAW,QAAA,eAAA,YAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;8BAK7D,mBAAyC,QAAA,EAAnC,OAAM,2BAA0B,GAAA,MAAA,EAAA;IACtC,mBAQS,UAAA;KAPP,cAAW;KACX,OAAM;KACL,UAAU,QAAA,eAAU;KACrB,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,MAAA;QACZ,YAAoC,MAAA,iBAAA,GAAA,EAAjB,OAAM,SAAQ,CAAA,CAAA,GAAA,GAAA,UAAA;IAEnC,mBAQS,UAAA;KAPP,cAAW;KACX,OAAM;KACL,UAAU,QAAA,eAAU;KACrB,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,MAAA;QACZ,YAAsC,MAAA,mBAAA,GAAA,EAAjB,OAAM,SAAQ,CAAA,CAAA,GAAA,GAAA,UAAA;IAErC,mBAOS,UAAA;KANP,cAAW;KACX,OAAM;KACN,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,OAAA;QACZ,YAA8B,MAAA,WAAA,GAAA,EAAjB,OAAM,SAAQ,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScalarWrappingText.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ScalarWrappingText/ScalarWrappingText.vue"],"names":[],"mappings":"AAwDA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAGtD;;;;;;;;;GASG;wBACkB,OAAO,YAAY;AAAxC,wBAAyC;AAGzC,QAAA,MAAM,YAAY,0TA2Dd,CAAC"}
1
+ {"version":3,"file":"ScalarWrappingText.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ScalarWrappingText/ScalarWrappingText.vue"],"names":[],"mappings":"AAwDA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAGtD;;;;;;;;;GASG;wBACkB,OAAO,YAAY;AAAxC,wBAAyC;AAGzC,QAAA,MAAM,YAAY,0TA6Dd,CAAC"}
@@ -2,7 +2,7 @@ import { PRESETS } from "./constants.js";
2
2
  import { Fragment, computed, createCommentVNode, createElementBlock, createTextVNode, defineComponent, openBlock, renderList, toDisplayString } from "vue";
3
3
  //#region src/components/ScalarWrappingText/ScalarWrappingText.vue?vue&type=script&setup=true&lang.ts
4
4
  var _hoisted_1 = { key: 0 };
5
- var ScalarWrappingText_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var ScalarWrappingText_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  inheritAttrs: false,
7
7
  __name: "ScalarWrappingText",
8
8
  props: {
@@ -1 +1 @@
1
- {"version":3,"file":"ScalarWrappingText.vue.script.js","names":[],"sources":["../../../src/components/ScalarWrappingText/ScalarWrappingText.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Scalar Text Wrapping component\n *\n * Adds word breaks to the text to allow improved line wrapping\n *\n * Does not inherit any attributes because it returns a set of html nodes\n *\n * @example\n * <ScalarWrappingText text=\"/this/is/a/long/path/that/needs/to/be/wrapped\" />\n */\nexport default {}\n</script>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { PRESETS } from './constants'\nimport type { ScalarWrappingTextProps } from './types'\n\nconst {\n text = '',\n preset = 'path',\n regex,\n} = defineProps<ScalarWrappingTextProps>()\n\n/**\n * Unicode character for zero-width non-joiner\n *\n * @see https://en.wikipedia.org/wiki/Zero-width_non-joiner\n */\nconst ZWNJ = '\\u2060'\n\n// We don't want to inherit any attributes because we going to return many nodes\ndefineOptions({ inheritAttrs: false })\n\nconst words = computed<string[]>(() => {\n const wrapRegex = new RegExp(regex ?? PRESETS[preset], 'g')\n // Insert the marker before each delimiter\n const marked = text.replace(wrapRegex, `${ZWNJ}$&`)\n // Split on the marker and filter out any empty strings\n return marked.split(ZWNJ).filter(Boolean)\n})\n</script>\n<template>\n <template\n v-for=\"(word, i) in words\"\n :key=\"i\">\n <wbr v-if=\"i !== 0\" />{{ word }}\n </template>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EA8BA,MAAM,OAAO;EAKb,MAAM,QAAQ,eAAyB;GACrC,MAAM,YAAY,IAAI,OAAO,QAAA,SAAS,QAAQ,QAAA,SAAS,IAAG;AAI1D,UAFe,QAAA,KAAK,QAAQ,WAAW,GAAG,KAAK,IAAG,CAEpC,MAAM,KAAK,CAAC,OAAO,QAAO;IACzC;;2BAGC,mBAIW,UAAA,MAAA,WAHW,MAAA,QAAZ,MAAM,MAAC;4DACT,GAAC,EAAA,CACI,MAAC,KAAA,WAAA,EAAZ,mBAAsB,OAAA,WAAA,IAAA,mBAAA,IAAA,KAAA,EAAA,gBAAA,gBAAG,KAAI,EAAA,EAAA,CAAA,EAAA,GAAA"}
1
+ {"version":3,"file":"ScalarWrappingText.vue.script.js","names":[],"sources":["../../../src/components/ScalarWrappingText/ScalarWrappingText.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Scalar Text Wrapping component\n *\n * Adds word breaks to the text to allow improved line wrapping\n *\n * Does not inherit any attributes because it returns a set of html nodes\n *\n * @example\n * <ScalarWrappingText text=\"/this/is/a/long/path/that/needs/to/be/wrapped\" />\n */\nexport default {}\n</script>\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport { PRESETS } from './constants'\nimport type { ScalarWrappingTextProps } from './types'\n\nconst {\n text = '',\n preset = 'path',\n regex,\n} = defineProps<ScalarWrappingTextProps>()\n\n/**\n * Unicode character for zero-width non-joiner\n *\n * @see https://en.wikipedia.org/wiki/Zero-width_non-joiner\n */\nconst ZWNJ = '\\u2060'\n\n// We don't want to inherit any attributes because we going to return many nodes\ndefineOptions({ inheritAttrs: false })\n\nconst words = computed<string[]>(() => {\n const wrapRegex = new RegExp(regex ?? PRESETS[preset], 'g')\n // Insert the marker before each delimiter\n const marked = text.replace(wrapRegex, `${ZWNJ}$&`)\n // Split on the marker and filter out any empty strings\n return marked.split(ZWNJ).filter(Boolean)\n})\n</script>\n<template>\n <template\n v-for=\"(word, i) in words\"\n :key=\"i\">\n <wbr v-if=\"i !== 0\" />{{ word }}\n </template>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EA8BA,MAAM,OAAO;EAKb,MAAM,QAAQ,eAAyB;GACrC,MAAM,YAAY,IAAI,OAAO,QAAA,SAAS,QAAQ,QAAA,SAAS,GAAG;GAI1D,OAFe,QAAA,KAAK,QAAQ,WAAW,GAAG,KAAK,GAExC,CAAA,CAAO,MAAM,IAAI,CAAC,CAAC,OAAO,OAAO;EAC1C,CAAC;;2BAGC,mBAIW,UAAA,MAAA,WAHW,MAAA,QAAZ,MAAM,MAAC;4DACT,EAAC,GAAA,CACI,MAAC,KAAA,UAAA,GAAZ,mBAAsB,OAAA,UAAA,KAAA,mBAAA,IAAA,IAAA,GAAA,gBAAA,gBAAG,IAAI,GAAA,CAAA,CAAA,GAAA,EAAA"}
@@ -3,7 +3,12 @@
3
3
  * A list of preset regexes for word breaks
4
4
  */
5
5
  var PRESETS = {
6
+ /** Breaks on `/`, '.' and `-` for urls or file paths */
6
7
  "path": /[\/\.-]/,
8
+ /**
9
+ * Breaks on capitals, `_` and `.` for properties written in
10
+ * camel, pascal or snake case
11
+ */
7
12
  "property": /[A-Z\_\.-]/
8
13
  };
9
14
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../../../src/components/ScalarWrappingText/constants.ts"],"sourcesContent":["/**\n * A list of preset regexes for word breaks\n */\nexport const PRESETS = {\n /** Breaks on `/`, '.' and `-` for urls or file paths */\n 'path': /[\\/\\.-]/,\n /**\n * Breaks on capitals, `_` and `.` for properties written in\n * camel, pascal or snake case\n */\n 'property': /[A-Z\\_\\.-]/,\n} as const satisfies Record<string, RegExp>\n"],"mappings":";;;;AAGA,IAAa,UAAU;CAErB,QAAQ;CAKR,YAAY;CACb"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../src/components/ScalarWrappingText/constants.ts"],"sourcesContent":["/**\n * A list of preset regexes for word breaks\n */\nexport const PRESETS = {\n /** Breaks on `/`, '.' and `-` for urls or file paths */\n 'path': /[\\/\\.-]/,\n /**\n * Breaks on capitals, `_` and `.` for properties written in\n * camel, pascal or snake case\n */\n 'property': /[A-Z\\_\\.-]/,\n} as const satisfies Record<string, RegExp>\n"],"mappings":";;;;AAGA,IAAa,UAAU;;CAErB,QAAQ;;;;;CAKR,YAAY;AACd"}
@@ -1 +1 @@
1
- {"version":3,"file":"add-scalar-classes.js","names":[],"sources":["../../src/helpers/add-scalar-classes.ts"],"sourcesContent":["const CLASS_NAME = 'scalar-app'\nconst ROOT_ID = 'headlessui-portal-root'\n\n/**\n * Type guard to check if an element is an HTMLElement\n */\nconst isHTMLElement = (element: Node | Element | null): element is HTMLElement => {\n return element !== null && element instanceof HTMLElement\n}\n\n/**\n * Helper method for adding the scalar classes to an element\n */\nconst addClasses = (el?: HTMLElement | undefined | null) => {\n if (!el || el.classList.contains(CLASS_NAME)) {\n return\n }\n\n el.classList.add(CLASS_NAME)\n}\n\n/**\n * Makes sure the scalar classes are added to the HeadlessUI portal root\n *\n * Returns the mutation observer instance\n */\nexport const addScalarClassesToHeadless = () => {\n // Add classes to the element if it already exists\n addClasses(document.getElementById(ROOT_ID))\n\n // Mutation observer to catch the element being added or removed later\n const observer = new MutationObserver((records: MutationRecord[]) =>\n records.forEach(({ addedNodes }) =>\n addedNodes.forEach((node) => {\n if (isHTMLElement(node) && node.id === ROOT_ID) {\n addClasses(node)\n }\n }),\n ),\n )\n\n // Observe the body for changes to the portal root\n observer.observe(document.body, { childList: true })\n\n return observer\n}\n"],"mappings":";AAAA,IAAM,aAAa;AACnB,IAAM,UAAU;;;;AAKhB,IAAM,iBAAiB,YAA2D;AAChF,QAAO,YAAY,QAAQ,mBAAmB;;;;;AAMhD,IAAM,cAAc,OAAwC;AAC1D,KAAI,CAAC,MAAM,GAAG,UAAU,SAAS,WAAW,CAC1C;AAGF,IAAG,UAAU,IAAI,WAAW;;;;;;;AAQ9B,IAAa,mCAAmC;AAE9C,YAAW,SAAS,eAAe,QAAQ,CAAC;CAG5C,MAAM,WAAW,IAAI,kBAAkB,YACrC,QAAQ,SAAS,EAAE,iBACjB,WAAW,SAAS,SAAS;AAC3B,MAAI,cAAc,KAAK,IAAI,KAAK,OAAO,QACrC,YAAW,KAAK;GAElB,CACH,CACF;AAGD,UAAS,QAAQ,SAAS,MAAM,EAAE,WAAW,MAAM,CAAC;AAEpD,QAAO"}
1
+ {"version":3,"file":"add-scalar-classes.js","names":[],"sources":["../../src/helpers/add-scalar-classes.ts"],"sourcesContent":["const CLASS_NAME = 'scalar-app'\nconst ROOT_ID = 'headlessui-portal-root'\n\n/**\n * Type guard to check if an element is an HTMLElement\n */\nconst isHTMLElement = (element: Node | Element | null): element is HTMLElement => {\n return element !== null && element instanceof HTMLElement\n}\n\n/**\n * Helper method for adding the scalar classes to an element\n */\nconst addClasses = (el?: HTMLElement | undefined | null) => {\n if (!el || el.classList.contains(CLASS_NAME)) {\n return\n }\n\n el.classList.add(CLASS_NAME)\n}\n\n/**\n * Makes sure the scalar classes are added to the HeadlessUI portal root\n *\n * Returns the mutation observer instance\n */\nexport const addScalarClassesToHeadless = () => {\n // Add classes to the element if it already exists\n addClasses(document.getElementById(ROOT_ID))\n\n // Mutation observer to catch the element being added or removed later\n const observer = new MutationObserver((records: MutationRecord[]) =>\n records.forEach(({ addedNodes }) =>\n addedNodes.forEach((node) => {\n if (isHTMLElement(node) && node.id === ROOT_ID) {\n addClasses(node)\n }\n }),\n ),\n )\n\n // Observe the body for changes to the portal root\n observer.observe(document.body, { childList: true })\n\n return observer\n}\n"],"mappings":";AAAA,IAAM,aAAa;AACnB,IAAM,UAAU;;;;AAKhB,IAAM,iBAAiB,YAA2D;CAChF,OAAO,YAAY,QAAQ,mBAAmB;AAChD;;;;AAKA,IAAM,cAAc,OAAwC;CAC1D,IAAI,CAAC,MAAM,GAAG,UAAU,SAAS,UAAU,GACzC;CAGF,GAAG,UAAU,IAAI,UAAU;AAC7B;;;;;;AAOA,IAAa,mCAAmC;CAE9C,WAAW,SAAS,eAAe,OAAO,CAAC;CAG3C,MAAM,WAAW,IAAI,kBAAkB,YACrC,QAAQ,SAAS,EAAE,iBACjB,WAAW,SAAS,SAAS;EAC3B,IAAI,cAAc,IAAI,KAAK,KAAK,OAAO,SACrC,WAAW,IAAI;CAEnB,CAAC,CACH,CACF;CAGA,SAAS,QAAQ,SAAS,MAAM,EAAE,WAAW,KAAK,CAAC;CAEnD,OAAO;AACT"}
package/dist/index.d.ts CHANGED
@@ -35,7 +35,7 @@ export { ScalarPopover } from './components/ScalarPopover/index.js';
35
35
  export { ScalarSavePrompt } from './components/ScalarSavePrompt/index.js';
36
36
  export { ScalarSearchInput } from './components/ScalarSearchInput/index.js';
37
37
  export { ScalarSearchResultItem, ScalarSearchResultList } from './components/ScalarSearchResults/index.js';
38
- export { ScalarSidebar, ScalarSidebarButton, ScalarSidebarFooter, ScalarSidebarGroup, ScalarSidebarGroupToggle, ScalarSidebarIndent, ScalarSidebarItem, ScalarSidebarItems, ScalarSidebarNestedItems, ScalarSidebarSearchButton, ScalarSidebarSearchInput, ScalarSidebarSection, ScalarSidebarSpacer, } from './components/ScalarSidebar/index.js';
38
+ export { ScalarSidebar, ScalarSidebarButton, ScalarSidebarFooter, ScalarSidebarGroup, ScalarSidebarGroupToggle, ScalarSidebarGroupToggleButton, ScalarSidebarGroupToggleSpacer, ScalarSidebarIndent, ScalarSidebarItem, ScalarSidebarItems, ScalarSidebarNestedItems, ScalarSidebarSearchButton, ScalarSidebarSearchInput, ScalarSidebarSection, ScalarSidebarSpacer, } from './components/ScalarSidebar/index.js';
39
39
  export { ScalarTeleport, ScalarTeleportRoot, TELEPORT_SYMBOL, useProvideTeleport, useTeleport, } from './components/ScalarTeleport/index.js';
40
40
  export { ScalarTextArea } from './components/ScalarTextArea/index.js';
41
41
  export { ScalarTextInput, ScalarTextInputCopy } from './components/ScalarTextInput/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE7E,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3G,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAChG,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACnF,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,oCAAoC,CAAA;AAC3C,YAAY,EACV,4BAA4B,EAC5B,oBAAoB,EACpB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAC/G,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,+BAA+B,CAAA;AACtC,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpF,OAAO,EACL,UAAU,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC5E,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC7E,YAAY,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACxH,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnF,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAChE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AACjG,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,8BAA8B,EAC9B,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,WAAW,GACZ,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACxF,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAA;AAClC,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -83,6 +83,8 @@ import ScalarSidebarIndent_default from "./components/ScalarSidebar/ScalarSideba
83
83
  import ScalarSidebarButton_default from "./components/ScalarSidebar/ScalarSidebarButton.vue.js";
84
84
  import ScalarSidebarFooter_default from "./components/ScalarSidebar/ScalarSidebarFooter.vue.js";
85
85
  import ScalarSidebarGroupToggle_default from "./components/ScalarSidebar/ScalarSidebarGroupToggle.vue.js";
86
+ import ScalarSidebarGroupToggleButton_default from "./components/ScalarSidebar/ScalarSidebarGroupToggleButton.vue.js";
87
+ import ScalarSidebarGroupToggleSpacer_default from "./components/ScalarSidebar/ScalarSidebarGroupToggleSpacer.vue.js";
86
88
  import ScalarSidebarItem_default from "./components/ScalarSidebar/ScalarSidebarItem.vue.js";
87
89
  import ScalarSidebarGroup_default from "./components/ScalarSidebar/ScalarSidebarGroup.vue.js";
88
90
  import ScalarSidebarItems_default from "./components/ScalarSidebar/ScalarSidebarItems.vue.js";
@@ -107,4 +109,4 @@ import ScalarVirtualCodeBlock_default from "./components/ScalarVirtualCodeBlock/
107
109
  import ScalarWrappingText_default from "./components/ScalarWrappingText/ScalarWrappingText.vue.js";
108
110
  import { addScalarClassesToHeadless } from "./helpers/add-scalar-classes.js";
109
111
  import { compose, cva, cx, tw, useBindCx } from "@scalar/use-hooks/useBindCx";
110
- export { ScalarButton_default as ScalarButton, ScalarCard_default as ScalarCard, ScalarCardFooter_default as ScalarCardFooter, ScalarCardHeader_default as ScalarCardHeader, ScalarCardSection_default as ScalarCardSection, ScalarCheckbox_default as ScalarCheckbox, ScalarCheckboxGroup_default as ScalarCheckboxGroup, ScalarCheckboxInput_default as ScalarCheckboxInput, ScalarCheckboxRadioGroup_default as ScalarCheckboxRadioGroup, ScalarCodeBlock_default as ScalarCodeBlock, ScalarCodeBlockCopy_default as ScalarCodeBlockCopy, ScalarColorModeToggle_default as ScalarColorModeToggle, ScalarColorModeToggleButton_default as ScalarColorModeToggleButton, ScalarColorModeToggleIcon_default as ScalarColorModeToggleIcon, ScalarCombobox_default as ScalarCombobox, ScalarComboboxMultiselect_default as ScalarComboboxMultiselect, ScalarCopy_default as ScalarCopy, ScalarCopyBackdrop_default as ScalarCopyBackdrop, ScalarCopyButton_default as ScalarCopyButton, ScalarDropdown_default as ScalarDropdown, ScalarDropdownButton_default as ScalarDropdownButton, ScalarDropdownDivider_default as ScalarDropdownDivider, ScalarDropdownItem_default as ScalarDropdownItem, ScalarDropdownMenu_default as ScalarDropdownMenu, ScalarErrorBoundary_default as ScalarErrorBoundary, ScalarFileUpload_default as ScalarFileUpload, ScalarFileUploadDropTarget_default as ScalarFileUploadDropTarget, ScalarFileUploadError_default as ScalarFileUploadError, ScalarFileUploadFileList_default as ScalarFileUploadFileList, ScalarFileUploadInput_default as ScalarFileUploadInput, ScalarFileUploadInputCompact_default as ScalarFileUploadInputCompact, ScalarFileUploadLoading_default as ScalarFileUploadLoading, ScalarFloating_default as ScalarFloating, ScalarFloatingBackdrop_default as ScalarFloatingBackdrop, ScalarForm_default as ScalarForm, ScalarFormError_default as ScalarFormError, ScalarFormField_default as ScalarFormField, ScalarFormInput_default as ScalarFormInput, ScalarFormInputGroup_default as ScalarFormInputGroup, ScalarFormSection_default as ScalarFormSection, ScalarHeader_default as ScalarHeader, ScalarHeaderButton_default as ScalarHeaderButton, ScalarHotkey_default as ScalarHotkey, ScalarHotkeyTooltip_default as ScalarHotkeyTooltip, ScalarIcon_default as ScalarIcon, ScalarIconButton_default as ScalarIconButton, ScalarIconLegacyAdapter_default as ScalarIconLegacyAdapter, ScalarListbox_default as ScalarListbox, ScalarListboxCheckbox_default as ScalarListboxCheckbox, ScalarListboxInput_default as ScalarListboxInput, ScalarListboxItem_default as ScalarListboxItem, ScalarLoading_default as ScalarLoading, ScalarMarkdown_default as ScalarMarkdown, ScalarMarkdownSummary_default as ScalarMarkdownSummary, ScalarMenu_default as ScalarMenu, ScalarMenuButton_default as ScalarMenuButton, ScalarMenuLink_default as ScalarMenuLink, ScalarMenuProduct_default as ScalarMenuProduct, ScalarMenuProducts_default as ScalarMenuProducts, ScalarMenuResources_default as ScalarMenuResources, ScalarMenuSection_default as ScalarMenuSection, ScalarMenuSupport_default as ScalarMenuSupport, ScalarMenuTeamPicker_default as ScalarMenuTeamPicker, ScalarMenuTeamProfile_default as ScalarMenuTeamProfile, ScalarMenuWorkspacePicker_default as ScalarMenuWorkspacePicker, ScalarModal_default as ScalarModal, ScalarPopover_default as ScalarPopover, ScalarSavePrompt_default as ScalarSavePrompt, ScalarSearchInput_default as ScalarSearchInput, ScalarSearchResultItem_default as ScalarSearchResultItem, ScalarSearchResultList_default as ScalarSearchResultList, ScalarSidebar_default as ScalarSidebar, ScalarSidebarButton_default as ScalarSidebarButton, ScalarSidebarFooter_default as ScalarSidebarFooter, ScalarSidebarGroup_default as ScalarSidebarGroup, ScalarSidebarGroupToggle_default as ScalarSidebarGroupToggle, ScalarSidebarIndent_default as ScalarSidebarIndent, ScalarSidebarItem_default as ScalarSidebarItem, ScalarSidebarItems_default as ScalarSidebarItems, ScalarSidebarNestedItems_default as ScalarSidebarNestedItems, ScalarSidebarSearchButton_default as ScalarSidebarSearchButton, ScalarSidebarSearchInput_default as ScalarSidebarSearchInput, ScalarSidebarSection_default as ScalarSidebarSection, ScalarSidebarSpacer_default as ScalarSidebarSpacer, ScalarTeleport_default as ScalarTeleport, ScalarTeleportRoot_default as ScalarTeleportRoot, ScalarTextArea_default as ScalarTextArea, ScalarTextInput_default as ScalarTextInput, ScalarTextInputCopy_default as ScalarTextInputCopy, ScalarThemeSwatches_default as ScalarThemeSwatches, ScalarToggle_default as ScalarToggle, ScalarToggleGroup_default as ScalarToggleGroup, ScalarToggleInput_default as ScalarToggleInput, ScalarTooltip_default as ScalarTooltip, ScalarTristateToggle_default as ScalarTristateToggle, ScalarTristateToggleGroup_default as ScalarTristateToggleGroup, ScalarTristateToggleInput_default as ScalarTristateToggleInput, ScalarVirtualCodeBlock_default as ScalarVirtualCodeBlock, ScalarVirtualText_default as ScalarVirtualText, ScalarWrappingText_default as ScalarWrappingText, TELEPORT_SYMBOL, addScalarClassesToHeadless, compose, cva, cx, formatHotkeySymbols, isGroups as isScalarComboboxGroups, tw, useBindCx, useLoadingState, useModal, useProvideTeleport, useTeleport, useThemeSwatches, useTooltip };
112
+ export { ScalarButton_default as ScalarButton, ScalarCard_default as ScalarCard, ScalarCardFooter_default as ScalarCardFooter, ScalarCardHeader_default as ScalarCardHeader, ScalarCardSection_default as ScalarCardSection, ScalarCheckbox_default as ScalarCheckbox, ScalarCheckboxGroup_default as ScalarCheckboxGroup, ScalarCheckboxInput_default as ScalarCheckboxInput, ScalarCheckboxRadioGroup_default as ScalarCheckboxRadioGroup, ScalarCodeBlock_default as ScalarCodeBlock, ScalarCodeBlockCopy_default as ScalarCodeBlockCopy, ScalarColorModeToggle_default as ScalarColorModeToggle, ScalarColorModeToggleButton_default as ScalarColorModeToggleButton, ScalarColorModeToggleIcon_default as ScalarColorModeToggleIcon, ScalarCombobox_default as ScalarCombobox, ScalarComboboxMultiselect_default as ScalarComboboxMultiselect, ScalarCopy_default as ScalarCopy, ScalarCopyBackdrop_default as ScalarCopyBackdrop, ScalarCopyButton_default as ScalarCopyButton, ScalarDropdown_default as ScalarDropdown, ScalarDropdownButton_default as ScalarDropdownButton, ScalarDropdownDivider_default as ScalarDropdownDivider, ScalarDropdownItem_default as ScalarDropdownItem, ScalarDropdownMenu_default as ScalarDropdownMenu, ScalarErrorBoundary_default as ScalarErrorBoundary, ScalarFileUpload_default as ScalarFileUpload, ScalarFileUploadDropTarget_default as ScalarFileUploadDropTarget, ScalarFileUploadError_default as ScalarFileUploadError, ScalarFileUploadFileList_default as ScalarFileUploadFileList, ScalarFileUploadInput_default as ScalarFileUploadInput, ScalarFileUploadInputCompact_default as ScalarFileUploadInputCompact, ScalarFileUploadLoading_default as ScalarFileUploadLoading, ScalarFloating_default as ScalarFloating, ScalarFloatingBackdrop_default as ScalarFloatingBackdrop, ScalarForm_default as ScalarForm, ScalarFormError_default as ScalarFormError, ScalarFormField_default as ScalarFormField, ScalarFormInput_default as ScalarFormInput, ScalarFormInputGroup_default as ScalarFormInputGroup, ScalarFormSection_default as ScalarFormSection, ScalarHeader_default as ScalarHeader, ScalarHeaderButton_default as ScalarHeaderButton, ScalarHotkey_default as ScalarHotkey, ScalarHotkeyTooltip_default as ScalarHotkeyTooltip, ScalarIcon_default as ScalarIcon, ScalarIconButton_default as ScalarIconButton, ScalarIconLegacyAdapter_default as ScalarIconLegacyAdapter, ScalarListbox_default as ScalarListbox, ScalarListboxCheckbox_default as ScalarListboxCheckbox, ScalarListboxInput_default as ScalarListboxInput, ScalarListboxItem_default as ScalarListboxItem, ScalarLoading_default as ScalarLoading, ScalarMarkdown_default as ScalarMarkdown, ScalarMarkdownSummary_default as ScalarMarkdownSummary, ScalarMenu_default as ScalarMenu, ScalarMenuButton_default as ScalarMenuButton, ScalarMenuLink_default as ScalarMenuLink, ScalarMenuProduct_default as ScalarMenuProduct, ScalarMenuProducts_default as ScalarMenuProducts, ScalarMenuResources_default as ScalarMenuResources, ScalarMenuSection_default as ScalarMenuSection, ScalarMenuSupport_default as ScalarMenuSupport, ScalarMenuTeamPicker_default as ScalarMenuTeamPicker, ScalarMenuTeamProfile_default as ScalarMenuTeamProfile, ScalarMenuWorkspacePicker_default as ScalarMenuWorkspacePicker, ScalarModal_default as ScalarModal, ScalarPopover_default as ScalarPopover, ScalarSavePrompt_default as ScalarSavePrompt, ScalarSearchInput_default as ScalarSearchInput, ScalarSearchResultItem_default as ScalarSearchResultItem, ScalarSearchResultList_default as ScalarSearchResultList, ScalarSidebar_default as ScalarSidebar, ScalarSidebarButton_default as ScalarSidebarButton, ScalarSidebarFooter_default as ScalarSidebarFooter, ScalarSidebarGroup_default as ScalarSidebarGroup, ScalarSidebarGroupToggle_default as ScalarSidebarGroupToggle, ScalarSidebarGroupToggleButton_default as ScalarSidebarGroupToggleButton, ScalarSidebarGroupToggleSpacer_default as ScalarSidebarGroupToggleSpacer, ScalarSidebarIndent_default as ScalarSidebarIndent, ScalarSidebarItem_default as ScalarSidebarItem, ScalarSidebarItems_default as ScalarSidebarItems, ScalarSidebarNestedItems_default as ScalarSidebarNestedItems, ScalarSidebarSearchButton_default as ScalarSidebarSearchButton, ScalarSidebarSearchInput_default as ScalarSidebarSearchInput, ScalarSidebarSection_default as ScalarSidebarSection, ScalarSidebarSpacer_default as ScalarSidebarSpacer, ScalarTeleport_default as ScalarTeleport, ScalarTeleportRoot_default as ScalarTeleportRoot, ScalarTextArea_default as ScalarTextArea, ScalarTextInput_default as ScalarTextInput, ScalarTextInputCopy_default as ScalarTextInputCopy, ScalarThemeSwatches_default as ScalarThemeSwatches, ScalarToggle_default as ScalarToggle, ScalarToggleGroup_default as ScalarToggleGroup, ScalarToggleInput_default as ScalarToggleInput, ScalarTooltip_default as ScalarTooltip, ScalarTristateToggle_default as ScalarTristateToggle, ScalarTristateToggleGroup_default as ScalarTristateToggleGroup, ScalarTristateToggleInput_default as ScalarTristateToggleInput, ScalarVirtualCodeBlock_default as ScalarVirtualCodeBlock, ScalarVirtualText_default as ScalarVirtualText, ScalarWrappingText_default as ScalarWrappingText, TELEPORT_SYMBOL, addScalarClassesToHeadless, compose, cva, cx, formatHotkeySymbols, isGroups as isScalarComboboxGroups, tw, useBindCx, useLoadingState, useModal, useProvideTeleport, useTeleport, useThemeSwatches, useTooltip };