@dvcol/neo-svelte 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +15 -7
  3. package/dist/badge/neo-badge.model.d.ts +1 -1
  4. package/dist/buttons/NeoArrowButton.svelte +4 -4
  5. package/dist/buttons/NeoButton.svelte +110 -24
  6. package/dist/buttons/NeoButtonGroup.svelte +18 -9
  7. package/dist/buttons/NeoButtonGroup.svelte.d.ts +1 -1
  8. package/dist/buttons/NeoButtonRow.svelte +137 -0
  9. package/dist/buttons/NeoButtonRow.svelte.d.ts +4 -0
  10. package/dist/buttons/NeoCancelButton.svelte +2 -2
  11. package/dist/buttons/NeoCheckboxButton.svelte +6 -4
  12. package/dist/buttons/NeoCheckboxButton.svelte.d.ts +1 -1
  13. package/dist/buttons/NeoCloseButton.svelte +37 -6
  14. package/dist/buttons/NeoCloseButton.svelte.d.ts +2 -2
  15. package/dist/buttons/NeoRadioButton.svelte +6 -4
  16. package/dist/buttons/NeoSwitchButton.svelte +5 -3
  17. package/dist/buttons/index.d.ts +2 -0
  18. package/dist/buttons/index.js +1 -0
  19. package/dist/buttons/neo-arrow-button.model.d.ts +3 -3
  20. package/dist/buttons/neo-button-group.model.d.ts +12 -3
  21. package/dist/buttons/neo-button-row.model.d.ts +33 -0
  22. package/dist/buttons/neo-button-row.model.js +1 -0
  23. package/dist/buttons/neo-button.model.d.ts +11 -4
  24. package/dist/buttons/neo-close-button.model.d.ts +13 -0
  25. package/dist/buttons/neo-close-button.model.js +5 -0
  26. package/dist/buttons/neo-icon-button.model.d.ts +2 -2
  27. package/dist/cards/NeoCard.svelte +22 -20
  28. package/dist/cards/neo-card.model.d.ts +3 -2
  29. package/dist/collapse/NeoAccordion.svelte +3 -1
  30. package/dist/collapse/NeoCollapse.svelte +2 -2
  31. package/dist/collapse/NeoCollapse.svelte.d.ts +3 -1
  32. package/dist/collapse/neo-accordion.model.d.ts +2 -1
  33. package/dist/containers/NeoTransitionContainer.svelte +10 -0
  34. package/dist/containers/neo-transition-container.model.d.ts +9 -0
  35. package/dist/cursor/NeoCursor.svelte.d.ts +1 -1
  36. package/dist/divider/NeoDivider.svelte +4 -2
  37. package/dist/divider/neo-divider.model.d.ts +2 -1
  38. package/dist/floating/common/NeoConfirm.svelte +5 -5
  39. package/dist/floating/common/NeoConfirm.svelte.d.ts +1 -1
  40. package/dist/floating/common/NeoFloatingStepper.svelte +1 -1
  41. package/dist/floating/common/NeoFloatingStepper.svelte.d.ts +1 -1
  42. package/dist/floating/common/NeoHandle.svelte +2 -1
  43. package/dist/floating/common/neo-confirm.model.d.ts +2 -1
  44. package/dist/floating/common/neo-floating-stepper.model.d.ts +1 -1
  45. package/dist/floating/common/neo-placement.model.d.ts +56 -4
  46. package/dist/floating/common/neo-placement.model.js +22 -0
  47. package/dist/floating/dialog/NeoDialog.svelte +23 -21
  48. package/dist/floating/dialog/NeoDialog.svelte.d.ts +1 -1
  49. package/dist/floating/dialog/NeoDialogConfirm.svelte.d.ts +1 -1
  50. package/dist/floating/dialog/NeoDialogStepper.svelte.d.ts +1 -1
  51. package/dist/floating/dialog/neo-dialog-confirm.model.d.ts +5 -5
  52. package/dist/floating/dialog/neo-dialog-stepper.model.d.ts +4 -4
  53. package/dist/floating/dialog/neo-dialog.model.d.ts +2 -1
  54. package/dist/floating/dialog/use-movable.svelte.js +2 -1
  55. package/dist/floating/drawer/NeoDrawer.svelte +9 -9
  56. package/dist/floating/drawer/NeoDrawer.svelte.d.ts +2 -2
  57. package/dist/floating/drawer/NeoDrawerConfirm.svelte +2 -4
  58. package/dist/floating/drawer/NeoDrawerConfirm.svelte.d.ts +2 -2
  59. package/dist/floating/drawer/NeoDrawerStepper.svelte +2 -4
  60. package/dist/floating/drawer/NeoDrawerStepper.svelte.d.ts +2 -2
  61. package/dist/floating/drawer/neo-drawer.model.d.ts +6 -0
  62. package/dist/floating/drawer/neo-drawer.model.js +1 -0
  63. package/dist/floating/index.d.ts +1 -0
  64. package/dist/floating/index.js +1 -0
  65. package/dist/floating/menu/NeoMenu.svelte +55 -17
  66. package/dist/floating/menu/NeoMenu.svelte.d.ts +1 -1
  67. package/dist/floating/menu/NeoMenuList.svelte +60 -67
  68. package/dist/floating/menu/NeoMenuListItem.svelte +157 -24
  69. package/dist/floating/menu/NeoMenuListItem.svelte.d.ts +1 -0
  70. package/dist/floating/menu/index.d.ts +1 -0
  71. package/dist/floating/menu/neo-menu-list-item.model.d.ts +48 -11
  72. package/dist/floating/menu/neo-menu-list.model.d.ts +24 -4
  73. package/dist/floating/menu/neo-menu.model.d.ts +3 -3
  74. package/dist/floating/notification/NeoNotificationItem.svelte +459 -0
  75. package/dist/floating/notification/NeoNotificationItem.svelte.d.ts +4 -0
  76. package/dist/floating/notification/NeoNotificationProvider.svelte +49 -0
  77. package/dist/floating/notification/NeoNotificationProvider.svelte.d.ts +4 -0
  78. package/dist/floating/notification/NeoNotificationStack.svelte +345 -0
  79. package/dist/floating/notification/NeoNotificationStack.svelte.d.ts +16 -0
  80. package/dist/floating/notification/NeoSimpleNotification.svelte +304 -0
  81. package/dist/floating/notification/NeoSimpleNotification.svelte.d.ts +4 -0
  82. package/dist/floating/notification/index.d.ts +8 -0
  83. package/dist/floating/notification/index.js +7 -0
  84. package/dist/floating/notification/neo-notification-item.model.d.ts +54 -0
  85. package/dist/floating/notification/neo-notification-item.model.js +1 -0
  86. package/dist/floating/notification/neo-notification-provider.model.d.ts +78 -0
  87. package/dist/floating/notification/neo-notification-provider.model.js +18 -0
  88. package/dist/floating/notification/neo-notification-stack.model.d.ts +48 -0
  89. package/dist/floating/notification/neo-notification-stack.model.js +1 -0
  90. package/dist/floating/notification/neo-notification.model.d.ts +271 -0
  91. package/dist/floating/notification/neo-notification.model.js +70 -0
  92. package/dist/floating/notification/neo-simple-notification.model.d.ts +14 -0
  93. package/dist/floating/notification/neo-simple-notification.model.js +1 -0
  94. package/dist/floating/portal/NeoPortal.svelte +11 -8
  95. package/dist/floating/portal/NeoPortalTarget.svelte +7 -0
  96. package/dist/floating/portal/NeoPortalTarget.svelte.d.ts +7 -0
  97. package/dist/floating/portal/neo-portal-context.svelte.d.ts +1 -1
  98. package/dist/floating/portal/neo-portal.model.d.ts +4 -5
  99. package/dist/floating/tooltips/NeoPopConfirm.svelte +2 -0
  100. package/dist/floating/tooltips/NeoPopConfirm.svelte.d.ts +1 -1
  101. package/dist/floating/tooltips/NeoPopSelect.svelte +5 -3
  102. package/dist/floating/tooltips/NeoPopSelect.svelte.d.ts +1 -1
  103. package/dist/floating/tooltips/NeoPopStepper.svelte +2 -0
  104. package/dist/floating/tooltips/NeoPopStepper.svelte.d.ts +1 -1
  105. package/dist/floating/tooltips/NeoTooltip.svelte +43 -23
  106. package/dist/floating/tooltips/NeoTooltip.svelte.d.ts +5 -1
  107. package/dist/floating/tooltips/neo-pop-confirm.model.d.ts +1 -1
  108. package/dist/floating/tooltips/neo-pop-select.model.d.ts +1 -3
  109. package/dist/floating/tooltips/neo-pop-stepper.model.d.ts +2 -2
  110. package/dist/floating/tooltips/neo-tooltip.model.d.ts +7 -2
  111. package/dist/form/NeoForm.svelte +1 -1
  112. package/dist/form/NeoForm.svelte.d.ts +3 -1
  113. package/dist/form/neo-form-context.svelte.d.ts +2 -0
  114. package/dist/icons/{IconAccount.svelte → NeoIconAccount.svelte} +2 -2
  115. package/dist/icons/NeoIconAccount.svelte.d.ts +4 -0
  116. package/dist/icons/{IconAdd.svelte → NeoIconAdd.svelte} +11 -6
  117. package/dist/icons/NeoIconAdd.svelte.d.ts +4 -0
  118. package/dist/icons/{IconAddress.svelte → NeoIconAddress.svelte} +2 -2
  119. package/dist/icons/NeoIconAddress.svelte.d.ts +4 -0
  120. package/dist/icons/{IconAlert.svelte → NeoIconAlert.svelte} +11 -6
  121. package/dist/icons/NeoIconAlert.svelte.d.ts +4 -0
  122. package/dist/icons/{IconAlignBottom.svelte → NeoIconAlignBottom.svelte} +11 -6
  123. package/dist/icons/NeoIconAlignBottom.svelte.d.ts +4 -0
  124. package/dist/icons/{IconAlignMiddle.svelte → NeoIconAlignMiddle.svelte} +11 -6
  125. package/dist/icons/NeoIconAlignMiddle.svelte.d.ts +4 -0
  126. package/dist/icons/{IconAlignTop.svelte → NeoIconAlignTop.svelte} +11 -6
  127. package/dist/icons/NeoIconAlignTop.svelte.d.ts +4 -0
  128. package/dist/icons/{IconArrow.svelte → NeoIconArrow.svelte} +9 -9
  129. package/dist/icons/NeoIconArrow.svelte.d.ts +4 -0
  130. package/dist/icons/NeoIconAudio.svelte +83 -0
  131. package/dist/icons/NeoIconAudio.svelte.d.ts +4 -0
  132. package/dist/icons/NeoIconBouncingDots.svelte +82 -0
  133. package/dist/icons/NeoIconBouncingDots.svelte.d.ts +4 -0
  134. package/dist/icons/{IconCalendar.svelte → NeoIconCalendar.svelte} +11 -6
  135. package/dist/icons/NeoIconCalendar.svelte.d.ts +4 -0
  136. package/dist/icons/{IconCancel.svelte → NeoIconCancel.svelte} +2 -2
  137. package/dist/icons/NeoIconCancel.svelte.d.ts +4 -0
  138. package/dist/icons/{IconCheckbox.svelte → NeoIconCheckbox.svelte} +2 -2
  139. package/dist/icons/NeoIconCheckbox.svelte.d.ts +4 -0
  140. package/dist/icons/NeoIconCircle.svelte +18 -0
  141. package/dist/icons/NeoIconCircle.svelte.d.ts +4 -0
  142. package/dist/icons/{IconCircleLoading.svelte → NeoIconCircleLoading.svelte} +2 -2
  143. package/dist/icons/{IconCircleLoading.svelte.d.ts → NeoIconCircleLoading.svelte.d.ts} +55 -39
  144. package/dist/icons/{IconClear.svelte → NeoIconClear.svelte} +11 -6
  145. package/dist/icons/NeoIconClear.svelte.d.ts +4 -0
  146. package/dist/icons/{IconClose.svelte → NeoIconClose.svelte} +2 -2
  147. package/dist/icons/NeoIconClose.svelte.d.ts +4 -0
  148. package/dist/icons/NeoIconCog.svelte +36 -0
  149. package/dist/icons/NeoIconCog.svelte.d.ts +4 -0
  150. package/dist/icons/{IconConfirm.svelte → NeoIconConfirm.svelte} +11 -6
  151. package/dist/icons/NeoIconConfirm.svelte.d.ts +4 -0
  152. package/dist/icons/NeoIconCube.svelte +31 -0
  153. package/dist/icons/NeoIconCube.svelte.d.ts +4 -0
  154. package/dist/icons/{IconDoubleChevron.svelte → NeoIconDoubleChevron.svelte} +11 -5
  155. package/dist/icons/NeoIconDoubleChevron.svelte.d.ts +4 -0
  156. package/dist/icons/{IconDoubleChevronLeft.svelte → NeoIconDoubleChevronLeft.svelte} +11 -6
  157. package/dist/icons/NeoIconDoubleChevronLeft.svelte.d.ts +4 -0
  158. package/dist/icons/{IconDoubleChevronRight.svelte → NeoIconDoubleChevronRight.svelte} +11 -6
  159. package/dist/icons/NeoIconDoubleChevronRight.svelte.d.ts +4 -0
  160. package/dist/icons/{IconDownload.svelte → NeoIconDownload.svelte} +11 -6
  161. package/dist/icons/NeoIconDownload.svelte.d.ts +4 -0
  162. package/dist/icons/NeoIconEmpty.svelte +26 -0
  163. package/dist/icons/NeoIconEmpty.svelte.d.ts +4 -0
  164. package/dist/icons/NeoIconError.svelte +30 -0
  165. package/dist/icons/NeoIconError.svelte.d.ts +4 -0
  166. package/dist/icons/{IconFileUpload.svelte → NeoIconFileUpload.svelte} +11 -6
  167. package/dist/icons/NeoIconFileUpload.svelte.d.ts +4 -0
  168. package/dist/icons/NeoIconFire.svelte +33 -0
  169. package/dist/icons/NeoIconFire.svelte.d.ts +4 -0
  170. package/dist/icons/{IconGithub.svelte → NeoIconGithub.svelte} +11 -6
  171. package/dist/icons/NeoIconGithub.svelte.d.ts +4 -0
  172. package/dist/icons/NeoIconImage.svelte +39 -0
  173. package/dist/icons/NeoIconImage.svelte.d.ts +4 -0
  174. package/dist/icons/NeoIconInfo.svelte +30 -0
  175. package/dist/icons/NeoIconInfo.svelte.d.ts +4 -0
  176. package/dist/icons/{IconList.svelte → NeoIconList.svelte} +11 -6
  177. package/dist/icons/NeoIconList.svelte.d.ts +4 -0
  178. package/dist/icons/{IconListSmall.svelte → NeoIconListSmall.svelte} +2 -2
  179. package/dist/icons/NeoIconListSmall.svelte.d.ts +4 -0
  180. package/dist/icons/{IconLoadingMatrix.svelte → NeoIconLoadingMatrix.svelte} +2 -2
  181. package/dist/icons/NeoIconLoadingMatrix.svelte.d.ts +4 -0
  182. package/dist/icons/{IconMail.svelte → NeoIconMail.svelte} +11 -6
  183. package/dist/icons/NeoIconMail.svelte.d.ts +4 -0
  184. package/dist/icons/{IconMinus.svelte → NeoIconMinus.svelte} +11 -6
  185. package/dist/icons/NeoIconMinus.svelte.d.ts +4 -0
  186. package/dist/icons/{IconPaint.svelte → NeoIconPaint.svelte} +11 -6
  187. package/dist/icons/NeoIconPaint.svelte.d.ts +4 -0
  188. package/dist/icons/{IconPencil.svelte → NeoIconPencil.svelte} +11 -6
  189. package/dist/icons/NeoIconPencil.svelte.d.ts +4 -0
  190. package/dist/icons/{IconPlayPause.svelte → NeoIconPlayPause.svelte} +2 -2
  191. package/dist/icons/NeoIconPlayPause.svelte.d.ts +4 -0
  192. package/dist/icons/{IconQuestionMark.svelte → NeoIconQuestionMark.svelte} +11 -6
  193. package/dist/icons/NeoIconQuestionMark.svelte.d.ts +4 -0
  194. package/dist/icons/{IconRadio.svelte → NeoIconRadio.svelte} +2 -2
  195. package/dist/icons/NeoIconRadio.svelte.d.ts +4 -0
  196. package/dist/icons/NeoIconRefresh.svelte +38 -0
  197. package/dist/icons/NeoIconRefresh.svelte.d.ts +4 -0
  198. package/dist/icons/NeoIconRestore.svelte +20 -0
  199. package/dist/icons/NeoIconRestore.svelte.d.ts +4 -0
  200. package/dist/icons/NeoIconSave.svelte +35 -0
  201. package/dist/icons/NeoIconSave.svelte.d.ts +4 -0
  202. package/dist/icons/NeoIconSaveOff.svelte +42 -0
  203. package/dist/icons/NeoIconSaveOff.svelte.d.ts +4 -0
  204. package/dist/icons/{IconSearch.svelte → NeoIconSearch.svelte} +11 -6
  205. package/dist/icons/NeoIconSearch.svelte.d.ts +4 -0
  206. package/dist/icons/NeoIconSuccess.svelte +26 -0
  207. package/dist/icons/NeoIconSuccess.svelte.d.ts +4 -0
  208. package/dist/icons/{IconSun.svelte → NeoIconSun.svelte} +11 -6
  209. package/dist/icons/NeoIconSun.svelte.d.ts +4 -0
  210. package/dist/icons/{IconSunMoon.svelte → NeoIconSunMoon.svelte} +11 -64
  211. package/dist/icons/NeoIconSunMoon.svelte.d.ts +4 -0
  212. package/dist/icons/{IconTextHighlight.svelte → NeoIconTextHighlight.svelte} +11 -6
  213. package/dist/icons/NeoIconTextHighlight.svelte.d.ts +4 -0
  214. package/dist/icons/NeoIconTheme.svelte +14 -0
  215. package/dist/icons/NeoIconTheme.svelte.d.ts +3 -0
  216. package/dist/icons/NeoIconTrend.svelte +39 -0
  217. package/dist/icons/NeoIconTrend.svelte.d.ts +4 -0
  218. package/dist/icons/NeoIconUnplug.svelte +63 -0
  219. package/dist/icons/NeoIconUnplug.svelte.d.ts +4 -0
  220. package/dist/icons/{IconVideo.svelte → NeoIconVideo.svelte} +11 -6
  221. package/dist/icons/NeoIconVideo.svelte.d.ts +4 -0
  222. package/dist/icons/NeoIconWarning.svelte +30 -0
  223. package/dist/icons/NeoIconWarning.svelte.d.ts +4 -0
  224. package/dist/icons/NeoIconWatch.svelte +41 -0
  225. package/dist/icons/NeoIconWatch.svelte.d.ts +4 -0
  226. package/dist/icons/NeoIconWatchOff.svelte +50 -0
  227. package/dist/icons/NeoIconWatchOff.svelte.d.ts +4 -0
  228. package/dist/icons/NeoIconWave.svelte +31 -0
  229. package/dist/icons/NeoIconWave.svelte.d.ts +4 -0
  230. package/dist/icons/index.d.ts +54 -0
  231. package/dist/icons/index.js +54 -0
  232. package/dist/icons/{icon.model.d.ts → neo-icon.model.d.ts} +41 -13
  233. package/dist/icons/{icon.model.js → neo-icon.model.js} +1 -1
  234. package/dist/index.d.ts +2 -0
  235. package/dist/index.js +2 -0
  236. package/dist/inputs/NeoCheckbox.svelte +6 -4
  237. package/dist/inputs/NeoCheckbox.svelte.d.ts +1 -1
  238. package/dist/inputs/NeoColorPicker.svelte +6 -3
  239. package/dist/inputs/NeoColorPicker.svelte.d.ts +1 -1
  240. package/dist/inputs/NeoColorPickerSelector.svelte +2 -2
  241. package/dist/inputs/NeoColorPickerSelector.svelte.d.ts +1 -1
  242. package/dist/inputs/NeoDateTime.svelte +6 -3
  243. package/dist/inputs/NeoDateTime.svelte.d.ts +1 -1
  244. package/dist/inputs/NeoFilePicker.svelte +11 -6
  245. package/dist/inputs/NeoFilePicker.svelte.d.ts +1 -1
  246. package/dist/inputs/NeoFilePickerCard.svelte +20 -14
  247. package/dist/inputs/NeoNativeSelect.svelte +6 -3
  248. package/dist/inputs/NeoNativeSelect.svelte.d.ts +1 -1
  249. package/dist/inputs/NeoNumberStep.svelte +13 -8
  250. package/dist/inputs/NeoNumberStep.svelte.d.ts +1 -1
  251. package/dist/inputs/NeoPassword.svelte +4 -4
  252. package/dist/inputs/NeoPassword.svelte.d.ts +1 -1
  253. package/dist/inputs/NeoPin.svelte +10 -10
  254. package/dist/inputs/NeoPin.svelte.d.ts +10 -1
  255. package/dist/inputs/NeoRadio.svelte +3 -3
  256. package/dist/inputs/NeoRadio.svelte.d.ts +1 -1
  257. package/dist/inputs/NeoRange.svelte +29 -27
  258. package/dist/inputs/NeoRange.svelte.d.ts +5 -2
  259. package/dist/inputs/NeoSelect.svelte +17 -8
  260. package/dist/inputs/NeoSelect.svelte.d.ts +1 -1
  261. package/dist/inputs/NeoSwitch.svelte +2 -2
  262. package/dist/inputs/NeoSwitch.svelte.d.ts +1 -1
  263. package/dist/inputs/common/NeoAffix.svelte +10 -10
  264. package/dist/inputs/common/NeoBaseInput.svelte +16 -2
  265. package/dist/inputs/common/NeoBaseInput.svelte.d.ts +1 -1
  266. package/dist/inputs/common/NeoInput.svelte +12 -4
  267. package/dist/inputs/common/NeoInput.svelte.d.ts +1 -1
  268. package/dist/inputs/common/NeoTextarea.svelte +18 -6
  269. package/dist/inputs/common/NeoTextarea.svelte.d.ts +2 -1
  270. package/dist/inputs/common/NeoValidation.svelte +6 -4
  271. package/dist/inputs/common/neo-input.model.d.ts +8 -1
  272. package/dist/inputs/common/neo-validation.model.d.ts +2 -1
  273. package/dist/inputs/neo-range.model.d.ts +2 -1
  274. package/dist/inputs/neo-select.model.d.ts +8 -4
  275. package/dist/list/NeoList.svelte +100 -62
  276. package/dist/list/NeoList.svelte.d.ts +5 -2
  277. package/dist/list/NeoListBaseItem.svelte +222 -92
  278. package/dist/list/NeoListBaseItem.svelte.d.ts +1 -1
  279. package/dist/list/NeoListBaseLoader.svelte +28 -4
  280. package/dist/list/NeoListBaseSection.svelte +18 -15
  281. package/dist/list/NeoListSearch.svelte +36 -20
  282. package/dist/list/NeoListSearch.svelte.d.ts +1 -1
  283. package/dist/list/NeoSimpleList.svelte +391 -0
  284. package/dist/list/NeoSimpleList.svelte.d.ts +8 -0
  285. package/dist/list/NeoVirtualList.svelte +388 -0
  286. package/dist/list/NeoVirtualList.svelte.d.ts +22 -0
  287. package/dist/list/index.d.ts +4 -0
  288. package/dist/list/index.js +2 -0
  289. package/dist/list/neo-list-base-item.model.d.ts +36 -7
  290. package/dist/list/neo-list-base-item.model.js +1 -0
  291. package/dist/list/neo-list-base-loader.model.d.ts +18 -1
  292. package/dist/list/neo-list-base-section.model.d.ts +8 -5
  293. package/dist/list/neo-list-search.model.d.ts +2 -2
  294. package/dist/list/neo-list.model.d.ts +120 -51
  295. package/dist/list/neo-list.model.js +18 -0
  296. package/dist/list/neo-simple-list.model.d.ts +124 -0
  297. package/dist/list/neo-simple-list.model.js +1 -0
  298. package/dist/list/neo-virtual-list.model.d.ts +69 -0
  299. package/dist/list/neo-virtual-list.model.js +6 -0
  300. package/dist/loading/NeoLoadingMatrix.svelte +2 -2
  301. package/dist/loading/neo-lazy.model.d.ts +2 -2
  302. package/dist/loading/neo-suspense.model.d.ts +1 -1
  303. package/dist/media/NeoImage.svelte +204 -0
  304. package/dist/media/NeoImage.svelte.d.ts +4 -0
  305. package/dist/media/NeoMedia.svelte +204 -0
  306. package/dist/media/NeoMedia.svelte.d.ts +4 -0
  307. package/dist/media/index.d.ts +2 -0
  308. package/dist/media/index.js +1 -0
  309. package/dist/media/neo-image.model.d.ts +67 -0
  310. package/dist/media/neo-image.model.js +1 -0
  311. package/dist/media/neo-media.model.d.ts +120 -0
  312. package/dist/media/neo-media.model.js +5 -0
  313. package/dist/nav/NeoTab.svelte +20 -15
  314. package/dist/nav/NeoTab.svelte.d.ts +17 -2
  315. package/dist/nav/NeoTabPanel.svelte +7 -5
  316. package/dist/nav/NeoTabPanel.svelte.d.ts +17 -2
  317. package/dist/nav/NeoTabs.svelte +21 -17
  318. package/dist/nav/NeoTabs.svelte.d.ts +19 -3
  319. package/dist/nav/NeoTabsCard.svelte +5 -3
  320. package/dist/nav/NeoTabsCard.svelte.d.ts +17 -2
  321. package/dist/nav/NeoTabsRow.svelte +225 -0
  322. package/dist/nav/NeoTabsRow.svelte.d.ts +19 -0
  323. package/dist/nav/index.d.ts +2 -0
  324. package/dist/nav/index.js +1 -0
  325. package/dist/nav/neo-tab-panel.model.d.ts +3 -3
  326. package/dist/nav/neo-tab.model.d.ts +15 -5
  327. package/dist/nav/neo-tabs-card.model.d.ts +3 -2
  328. package/dist/nav/neo-tabs-context.svelte.d.ts +35 -29
  329. package/dist/nav/neo-tabs-context.svelte.js +17 -3
  330. package/dist/nav/neo-tabs-row.model.d.ts +85 -0
  331. package/dist/nav/neo-tabs-row.model.js +1 -0
  332. package/dist/nav/neo-tabs.model.d.ts +12 -11
  333. package/dist/pill/NeoPill.svelte +73 -14
  334. package/dist/pill/neo-pill.model.d.ts +25 -1
  335. package/dist/progress/NeoProgress.svelte +203 -42
  336. package/dist/progress/NeoProgress.svelte.d.ts +8 -8
  337. package/dist/progress/NeoProgressBar.svelte +37 -6
  338. package/dist/progress/NeoProgressBar.svelte.d.ts +9 -1
  339. package/dist/progress/index.d.ts +1 -0
  340. package/dist/progress/index.js +1 -0
  341. package/dist/progress/neo-progress-bar.model.d.ts +11 -6
  342. package/dist/progress/neo-progress-service.svelte.d.ts +47 -0
  343. package/dist/progress/neo-progress-service.svelte.js +157 -0
  344. package/dist/progress/neo-progress.model.d.ts +98 -41
  345. package/dist/progress/neo-progress.model.js +6 -1
  346. package/dist/providers/NeoRememberSelector.svelte +43 -0
  347. package/dist/providers/NeoRememberSelector.svelte.d.ts +4 -0
  348. package/dist/providers/NeoResetSelector.svelte +40 -0
  349. package/dist/providers/NeoResetSelector.svelte.d.ts +4 -0
  350. package/dist/providers/NeoSourceSelector.svelte +63 -0
  351. package/dist/providers/NeoSourceSelector.svelte.d.ts +4 -0
  352. package/dist/providers/NeoThemeProvider.svelte +25 -10
  353. package/dist/providers/NeoThemeProvider.svelte.d.ts +1 -2
  354. package/dist/providers/NeoThemeSelector.svelte +26 -108
  355. package/dist/providers/NeoThemeSelector.svelte.d.ts +1 -1
  356. package/dist/providers/NeoThemeSelectors.svelte +57 -0
  357. package/dist/providers/NeoThemeSelectors.svelte.d.ts +4 -0
  358. package/dist/providers/NeoTransitionSelector.svelte +57 -0
  359. package/dist/providers/NeoTransitionSelector.svelte.d.ts +4 -0
  360. package/dist/providers/index.d.ts +10 -0
  361. package/dist/providers/index.js +5 -0
  362. package/dist/providers/neo-remember-selector.model.d.ts +9 -0
  363. package/dist/providers/neo-remember-selector.model.js +2 -0
  364. package/dist/providers/neo-reset-selector.model.d.ts +9 -0
  365. package/dist/providers/neo-reset-selector.model.js +1 -0
  366. package/dist/providers/neo-source-selector.model.d.ts +9 -0
  367. package/dist/providers/neo-source-selector.model.js +2 -0
  368. package/dist/providers/neo-theme-provider-context.svelte.d.ts +14 -3
  369. package/dist/providers/neo-theme-provider-context.svelte.js +94 -11
  370. package/dist/providers/neo-theme-provider.model.d.ts +31 -3
  371. package/dist/providers/neo-theme-provider.model.js +9 -0
  372. package/dist/providers/neo-theme-selector.model.d.ts +3 -48
  373. package/dist/providers/neo-theme-selector.model.js +1 -0
  374. package/dist/providers/neo-theme-selectors.model.d.ts +84 -0
  375. package/dist/providers/neo-theme-selectors.model.js +1 -0
  376. package/dist/providers/neo-transition-selector.model.d.ts +9 -0
  377. package/dist/providers/neo-transition-selector.model.js +2 -0
  378. package/dist/skeletons/NeoSkeletonContainer.svelte +3 -1
  379. package/dist/skeletons/NeoSkeletonMedia.svelte +26 -18
  380. package/dist/skeletons/NeoSkeletonText.svelte +5 -3
  381. package/dist/skeletons/neo-skeleton-container.model.d.ts +9 -0
  382. package/dist/skeletons/neo-skeleton-media.model.d.ts +20 -10
  383. package/dist/skeletons/neo-skeleton-media.model.js +7 -1
  384. package/dist/skeletons/neo-skeleton-text.model.d.ts +5 -0
  385. package/dist/stepper/NeoStepper.svelte +20 -20
  386. package/dist/stepper/NeoStepper.svelte.d.ts +9 -2
  387. package/dist/stepper/neo-stepper.model.d.ts +5 -5
  388. package/dist/styles/animation.scss +76 -0
  389. package/dist/styles/common/colors.scss +15 -9
  390. package/dist/styles/common/properties.css +18 -0
  391. package/dist/styles/common/spacing.scss +8 -4
  392. package/dist/styles/common/typography.scss +13 -3
  393. package/dist/styles/common/utils.scss +2 -2
  394. package/dist/styles/mixin.scss +125 -11
  395. package/dist/styles/theme.scss +20 -0
  396. package/dist/styles/transition.scss +101 -0
  397. package/dist/text/NeoEllipsis.svelte +1 -0
  398. package/dist/text/NeoHtml.svelte +26 -0
  399. package/dist/text/NeoHtml.svelte.d.ts +7 -0
  400. package/dist/text/NeoMark.svelte +18 -5
  401. package/dist/text/NeoTypewriter.svelte +5 -4
  402. package/dist/text/NeoTypewriter.svelte.d.ts +5 -1
  403. package/dist/text/index.d.ts +2 -0
  404. package/dist/text/index.js +1 -0
  405. package/dist/text/neo-html.model.d.ts +4 -0
  406. package/dist/text/neo-html.model.js +1 -0
  407. package/dist/text/neo-mark.model.d.ts +8 -0
  408. package/dist/text/typewriter.utils.d.ts +2 -2
  409. package/dist/text/typewriter.utils.js +8 -9
  410. package/dist/utils/action.utils.d.ts +1 -21
  411. package/dist/utils/border.utils.d.ts +13 -0
  412. package/dist/utils/border.utils.js +18 -0
  413. package/dist/utils/colors.utils.d.ts +1 -1
  414. package/dist/utils/error.utils.d.ts +22 -0
  415. package/dist/utils/error.utils.js +36 -0
  416. package/dist/utils/style.utils.d.ts +1 -1
  417. package/package.json +55 -39
  418. package/dist/icons/IconAccount.svelte.d.ts +0 -4
  419. package/dist/icons/IconAdd.svelte.d.ts +0 -26
  420. package/dist/icons/IconAddress.svelte.d.ts +0 -4
  421. package/dist/icons/IconAlert.svelte.d.ts +0 -26
  422. package/dist/icons/IconAlignBottom.svelte.d.ts +0 -26
  423. package/dist/icons/IconAlignMiddle.svelte.d.ts +0 -26
  424. package/dist/icons/IconAlignTop.svelte.d.ts +0 -26
  425. package/dist/icons/IconArrow.svelte.d.ts +0 -4
  426. package/dist/icons/IconBouncingDots.svelte +0 -63
  427. package/dist/icons/IconBouncingDots.svelte.d.ts +0 -4
  428. package/dist/icons/IconCalendar.svelte.d.ts +0 -26
  429. package/dist/icons/IconCancel.svelte.d.ts +0 -4
  430. package/dist/icons/IconCheckbox.svelte.d.ts +0 -4
  431. package/dist/icons/IconClear.svelte.d.ts +0 -26
  432. package/dist/icons/IconClose.svelte.d.ts +0 -4
  433. package/dist/icons/IconConfirm.svelte.d.ts +0 -26
  434. package/dist/icons/IconDoubleChevron.svelte.d.ts +0 -26
  435. package/dist/icons/IconDoubleChevronLeft.svelte.d.ts +0 -26
  436. package/dist/icons/IconDoubleChevronRight.svelte.d.ts +0 -26
  437. package/dist/icons/IconDownload.svelte.d.ts +0 -26
  438. package/dist/icons/IconEmpty.svelte +0 -18
  439. package/dist/icons/IconEmpty.svelte.d.ts +0 -26
  440. package/dist/icons/IconFileUpload.svelte.d.ts +0 -26
  441. package/dist/icons/IconGithub.svelte.d.ts +0 -26
  442. package/dist/icons/IconImage.svelte +0 -26
  443. package/dist/icons/IconImage.svelte.d.ts +0 -26
  444. package/dist/icons/IconList.svelte.d.ts +0 -26
  445. package/dist/icons/IconListSmall.svelte.d.ts +0 -4
  446. package/dist/icons/IconLoadingMatrix.svelte.d.ts +0 -4
  447. package/dist/icons/IconMail.svelte.d.ts +0 -26
  448. package/dist/icons/IconMinus.svelte.d.ts +0 -26
  449. package/dist/icons/IconPaint.svelte.d.ts +0 -26
  450. package/dist/icons/IconPencil.svelte.d.ts +0 -26
  451. package/dist/icons/IconPlayPause.svelte.d.ts +0 -4
  452. package/dist/icons/IconQuestionMark.svelte.d.ts +0 -26
  453. package/dist/icons/IconRadio.svelte.d.ts +0 -4
  454. package/dist/icons/IconSave.svelte +0 -25
  455. package/dist/icons/IconSave.svelte.d.ts +0 -26
  456. package/dist/icons/IconSaveOff.svelte +0 -32
  457. package/dist/icons/IconSaveOff.svelte.d.ts +0 -26
  458. package/dist/icons/IconSearch.svelte.d.ts +0 -26
  459. package/dist/icons/IconSun.svelte.d.ts +0 -26
  460. package/dist/icons/IconSunMoon.svelte.d.ts +0 -4
  461. package/dist/icons/IconTextHighlight.svelte.d.ts +0 -26
  462. package/dist/icons/IconVideo.svelte.d.ts +0 -26
  463. package/dist/icons/IconWatch.svelte +0 -29
  464. package/dist/icons/IconWatch.svelte.d.ts +0 -26
  465. package/dist/icons/IconWatchOff.svelte +0 -34
  466. package/dist/icons/IconWatchOff.svelte.d.ts +0 -26
@@ -2,125 +2,43 @@
2
2
  import type { NeoThemeSelectorProps } from './neo-theme-selector.model.js';
3
3
 
4
4
  import NeoButton from '../buttons/NeoButton.svelte';
5
- import NeoButtonGroup from '../buttons/NeoButtonGroup.svelte';
6
- import IconImage from '../icons/IconImage.svelte';
7
- import IconSave from '../icons/IconSave.svelte';
8
- import IconSaveOff from '../icons/IconSaveOff.svelte';
9
- import IconSun from '../icons/IconSun.svelte';
10
- import IconSunMoon from '../icons/IconSunMoon.svelte';
5
+ import NeoIconSunMoon from '../icons/NeoIconSunMoon.svelte';
11
6
  import { useNeoThemeContext } from './neo-theme-provider-context.svelte.js';
12
- import { NeoSource, NeoTheme } from './neo-theme-provider.model.js';
13
-
14
- const {
15
- // Snippet
16
- children,
7
+ import { NeoTheme } from './neo-theme-provider.model.js';
17
8
 
9
+ let {
18
10
  // state
19
- remember: showRemember,
20
- sourceLabel = 'Source',
21
- source: showSource = true,
22
- themeLabel = 'Theme',
23
- theme: showTheme = true,
24
- reset: showReset,
11
+ label = 'Theme',
12
+
13
+ // Button props
14
+ ref = $bindable(),
15
+ hovered = $bindable(false),
16
+ focused = $bindable(false),
25
17
 
26
18
  // Other props
27
- rememberProps,
28
- sourceProps,
29
- themeProps,
30
- resetProps,
31
19
  ...rest
32
20
  }: NeoThemeSelectorProps = $props();
33
21
 
34
22
  const context = useNeoThemeContext();
35
23
 
36
- const reset = $derived(context.reset);
37
24
  const dark = $derived(context.theme === NeoTheme.Dark);
38
- const source = $derived(context.source);
39
- const remember = $derived(context.remember);
40
-
41
- const sources = Object.values(NeoSource);
42
- const sourceMap = { ...sources };
43
- const sourceIndexMap = Object.fromEntries(Object.entries(sourceMap).map(([k, v]) => [v, Number(k)]));
44
25
 
45
- let angle = $state(sourceIndexMap[context.source] * 90);
46
- const onCycleSource = () => {
47
- angle += 90;
48
- context.update({ source: sourceMap[(sourceIndexMap[source] + 1) % sources.length] });
49
- };
50
-
51
- const onTheme = () => context.update({ theme: dark ? NeoTheme.Light : NeoTheme.Dark });
52
- const onReset = () => context.update({ reset: !reset });
53
- const onRemember = () => context.update({ remember: !remember });
26
+ const onTheme = () => context.update({ theme: dark ? NeoTheme.Light : NeoTheme.Dark }, ref);
54
27
  </script>
55
28
 
56
- <NeoButtonGroup elevation="2" {...rest}>
57
- {#if showSource}
58
- <NeoButton
59
- aria-label="Cycle light source origin"
60
- title="Cycle light source origin"
61
- checked
62
- onclick={onCycleSource}
63
- label={sourceLabel}
64
- {...sourceProps}
65
- >
66
- {#snippet icon()}
67
- <span class="neo-source-icon" style:--neo-source-rotate="{angle}deg">
68
- <IconSun />
69
- </span>
70
- {/snippet}
71
- </NeoButton>
72
- {/if}
73
- {#if showTheme}
74
- <NeoButton
75
- aria-label="Toggle {dark ? 'light' : 'dark'} theme"
76
- title="Toggle {dark ? 'light' : 'dark'} theme"
77
- toggle
78
- checked={dark}
79
- onclick={onTheme}
80
- label={themeLabel}
81
- {...themeProps}
82
- >
83
- {#snippet icon()}
84
- <IconSunMoon state={dark ? 'moon' : 'sun'} />
85
- {/snippet}
86
- </NeoButton>
87
- {/if}
88
- {#if showReset}
89
- <NeoButton
90
- aria-label="Toggle {reset ? 'off' : 'on'} style reset"
91
- title="Toggle {reset ? 'off' : 'on'} style reset"
92
- toggle
93
- checked={reset}
94
- onclick={onReset}
95
- {...resetProps}
96
- >
97
- {#snippet icon()}
98
- <IconImage />
99
- {/snippet}
100
- </NeoButton>
101
- {/if}
102
- {#if showRemember}
103
- <NeoButton aria-label="Remember theme settings" title="Remember theme settings" toggle checked={remember} onclick={onRemember} {...rememberProps}>
104
- {#snippet icon()}
105
- {#if remember}
106
- <IconSave />
107
- {:else}
108
- <IconSaveOff />
109
- {/if}
110
- {/snippet}
111
- </NeoButton>
112
- {/if}
113
- {@render children?.(context.state)}
114
- </NeoButtonGroup>
115
-
116
- <style>.neo-source-icon {
117
- overflow: hidden;
118
- border-radius: var(--neo-theme-selector-border-radius, var(--neo-border-radius-lg));
119
- rotate: var(--neo-source-rotate, 0);
120
- transition: rotate 0.5s ease;
121
- }
122
- .neo-source-icon :global(> svg) {
123
- width: 1.25rem;
124
- height: 1.25rem;
125
- translate: -30% -30%;
126
- }</style>
29
+ <NeoButton
30
+ bind:ref
31
+ bind:hovered
32
+ bind:focused
33
+ aria-label="Toggle {dark ? 'light' : 'dark'} theme"
34
+ title="Toggle {dark ? 'light' : 'dark'} theme"
35
+ toggle
36
+ checked={dark}
37
+ onclick={onTheme}
38
+ {label}
39
+ {...rest}
40
+ >
41
+ {#snippet icon()}
42
+ <NeoIconSunMoon state={dark ? 'moon' : 'sun'} />
43
+ {/snippet}
44
+ </NeoButton>
@@ -1,4 +1,4 @@
1
1
  import type { NeoThemeSelectorProps } from './neo-theme-selector.model.js';
2
- declare const NeoThemeSelector: import("svelte").Component<NeoThemeSelectorProps, {}, "">;
2
+ declare const NeoThemeSelector: import("svelte").Component<NeoThemeSelectorProps, {}, "ref" | "hovered" | "focused">;
3
3
  type NeoThemeSelector = ReturnType<typeof NeoThemeSelector>;
4
4
  export default NeoThemeSelector;
@@ -0,0 +1,57 @@
1
+ <script lang="ts">
2
+ import type { NeoThemeSelectorsProps } from './neo-theme-selectors.model.js';
3
+
4
+ import NeoButtonGroup from '../buttons/NeoButtonGroup.svelte';
5
+ import { useNeoThemeContext } from './neo-theme-provider-context.svelte.js';
6
+ import NeoRememberSelector from './NeoRememberSelector.svelte';
7
+ import NeoResetSelector from './NeoResetSelector.svelte';
8
+ import NeoSourceSelector from './NeoSourceSelector.svelte';
9
+ import NeoThemeSelector from './NeoThemeSelector.svelte';
10
+ import NeoTransitionSelector from './NeoTransitionSelector.svelte';
11
+
12
+ const {
13
+ // Snippet
14
+ children,
15
+
16
+ // state
17
+ sourceLabel,
18
+ source: showSource,
19
+ themeLabel,
20
+ theme: showTheme = true,
21
+ resetLabel,
22
+ reset: showReset,
23
+ rememberLabel,
24
+ remember: showRemember,
25
+ themeTransitionLabel,
26
+ themeTransition: showTransition,
27
+
28
+ // Other props
29
+ themeTransitionProps,
30
+ rememberProps,
31
+ sourceProps,
32
+ themeProps,
33
+ resetProps,
34
+ ...rest
35
+ }: NeoThemeSelectorsProps = $props();
36
+
37
+ const context = useNeoThemeContext();
38
+ </script>
39
+
40
+ <NeoButtonGroup elevation="2" {...rest}>
41
+ {#if showSource}
42
+ <NeoSourceSelector label={sourceLabel} {...sourceProps} />
43
+ {/if}
44
+ {#if showTheme}
45
+ <NeoThemeSelector label={themeLabel} {...themeProps} />
46
+ {/if}
47
+ {#if showTransition}
48
+ <NeoTransitionSelector label={themeTransitionLabel} {...themeTransitionProps} />
49
+ {/if}
50
+ {#if showReset}
51
+ <NeoResetSelector label={resetLabel} {...resetProps} />
52
+ {/if}
53
+ {#if showRemember}
54
+ <NeoRememberSelector label={rememberLabel} {...rememberProps} />
55
+ {/if}
56
+ {@render children?.(context.state)}
57
+ </NeoButtonGroup>
@@ -0,0 +1,4 @@
1
+ import type { NeoThemeSelectorsProps } from './neo-theme-selectors.model.js';
2
+ declare const NeoThemeSelectors: import("svelte").Component<NeoThemeSelectorsProps, {}, "">;
3
+ type NeoThemeSelectors = ReturnType<typeof NeoThemeSelectors>;
4
+ export default NeoThemeSelectors;
@@ -0,0 +1,57 @@
1
+ <script lang="ts">
2
+ import type { NeoSourceSelectorProps } from './neo-source-selector.model.js';
3
+
4
+ import NeoButton from '../buttons/NeoButton.svelte';
5
+ import NeoIconCircle from '../icons/NeoIconCircle.svelte';
6
+ import NeoIconCube from '../icons/NeoIconCube.svelte';
7
+ import NeoIconEmpty from '../icons/NeoIconEmpty.svelte';
8
+ import NeoIconWave from '../icons/NeoIconWave.svelte';
9
+ import { useNeoThemeContext } from './neo-theme-provider-context.svelte.js';
10
+ import { NeoTransition } from './neo-theme-provider.model.js';
11
+
12
+ const {
13
+ // state
14
+ label = 'Transition',
15
+
16
+ // Button props
17
+ ref = $bindable(),
18
+ hovered = $bindable(false),
19
+ focused = $bindable(false),
20
+
21
+ // Other props
22
+ ...rest
23
+ }: NeoSourceSelectorProps = $props();
24
+
25
+ const context = useNeoThemeContext();
26
+
27
+ const transition = $derived(context.transition);
28
+
29
+ const transitions = Object.values(NeoTransition);
30
+ const sourceMap = { ...transitions };
31
+ const indexMap = Object.fromEntries(Object.entries(sourceMap).map(([k, v]) => [v, Number(k)]));
32
+
33
+ const onclick = () => {
34
+ context.update({ transition: sourceMap[(indexMap[transition] + 1) % transitions.length] });
35
+ };
36
+
37
+ </script>
38
+
39
+ <NeoButton
40
+ aria-label="Cycle theme transition"
41
+ title="Cycle theme transition - {transition}"
42
+ {onclick}
43
+ {label}
44
+ {...rest}
45
+ >
46
+ {#snippet icon()}
47
+ {#if transition === NeoTransition.Spin}
48
+ <NeoIconCube />
49
+ {:else if transition === NeoTransition.Wave}
50
+ <NeoIconWave />
51
+ {:else if transition === NeoTransition.Circle}
52
+ <NeoIconCircle />
53
+ {:else}
54
+ <NeoIconEmpty />
55
+ {/if}
56
+ {/snippet}
57
+ </NeoButton>
@@ -0,0 +1,4 @@
1
+ import type { NeoSourceSelectorProps } from './neo-source-selector.model.js';
2
+ declare const NeoTransitionSelector: import("svelte").Component<NeoSourceSelectorProps, {}, "ref" | "hovered" | "focused">;
3
+ type NeoTransitionSelector = ReturnType<typeof NeoTransitionSelector>;
4
+ export default NeoTransitionSelector;
@@ -1,7 +1,17 @@
1
+ export { default as NeoRememberSelector } from './NeoRememberSelector.svelte';
2
+ export { default as NeoResetSelector } from './NeoResetSelector.svelte';
3
+ export { default as NeoSourceSelector } from './NeoSourceSelector.svelte';
1
4
  export { default as NeoThemePicker } from './NeoThemePicker.svelte';
2
5
  export { default as NeoThemeProvider } from './NeoThemeProvider.svelte';
3
6
  export { default as NeoThemeSelector } from './NeoThemeSelector.svelte';
7
+ export { default as NeoThemeSelectors } from './NeoThemeSelectors.svelte';
8
+ export { useNeoThemeContext } from './neo-theme-provider-context.svelte.js';
4
9
  export { NeoSource, NeoTheme, NeoThemeRoot, NeoThemeStorageKey } from './neo-theme-provider.model.js';
10
+ export type { NeoThemeProviderContext, NeoThemeProviderContextState } from './neo-theme-provider-context.svelte.js';
11
+ export type * from './neo-remember-selector.model.js';
12
+ export type * from './neo-reset-selector.model.js';
13
+ export type * from './neo-source-selector.model.js';
5
14
  export type * from './neo-theme-picker.model.js';
6
15
  export type * from './neo-theme-provider.model.js';
7
16
  export type * from './neo-theme-selector.model.js';
17
+ export type * from './neo-theme-selectors.model.js';
@@ -1,4 +1,9 @@
1
+ export { default as NeoRememberSelector } from './NeoRememberSelector.svelte';
2
+ export { default as NeoResetSelector } from './NeoResetSelector.svelte';
3
+ export { default as NeoSourceSelector } from './NeoSourceSelector.svelte';
1
4
  export { default as NeoThemePicker } from './NeoThemePicker.svelte';
2
5
  export { default as NeoThemeProvider } from './NeoThemeProvider.svelte';
3
6
  export { default as NeoThemeSelector } from './NeoThemeSelector.svelte';
7
+ export { default as NeoThemeSelectors } from './NeoThemeSelectors.svelte';
8
+ export { useNeoThemeContext } from './neo-theme-provider-context.svelte.js';
4
9
  export { NeoSource, NeoTheme, NeoThemeRoot, NeoThemeStorageKey } from './neo-theme-provider.model.js';
@@ -0,0 +1,9 @@
1
+ import type { NeoButtonProps } from '../buttons/neo-button.model.js';
2
+ export interface NeoRememberSelectorProps extends NeoButtonProps {
3
+ /**
4
+ * The label to show in the Remember selector.
5
+ *
6
+ * @default Remember
7
+ */
8
+ label?: string;
9
+ }
@@ -0,0 +1,2 @@
1
+ ;
2
+ export {};
@@ -0,0 +1,9 @@
1
+ import type { NeoButtonProps } from '../buttons/neo-button.model.js';
2
+ export interface NeoResetSelectorProps extends NeoButtonProps {
3
+ /**
4
+ * The label to show in the reset selector.
5
+ *
6
+ * @default Reset
7
+ */
8
+ label?: string;
9
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import type { NeoButtonProps } from '../buttons/neo-button.model.js';
2
+ export interface NeoSourceSelectorProps extends NeoButtonProps {
3
+ /**
4
+ * The label to show in the source selector.
5
+ *
6
+ * @default Source
7
+ */
8
+ label?: string;
9
+ }
@@ -0,0 +1,2 @@
1
+ ;
2
+ export {};
@@ -1,5 +1,12 @@
1
1
  import type { INeoThemeProviderContext } from './neo-theme-provider.model.js';
2
2
  type NeoThemeProviderRoot = INeoThemeProviderContext['root'] | (() => INeoThemeProviderContext['root']);
3
+ export declare function computeCircleStart(element?: HTMLElement, { viewportWidth, viewportHeight }?: {
4
+ viewportWidth?: number | undefined;
5
+ viewportHeight?: number | undefined;
6
+ }): {
7
+ x?: number;
8
+ y?: number;
9
+ };
3
10
  export type NeoThemeProviderContextState = Partial<Omit<INeoThemeProviderContext, 'root'>> & {
4
11
  root?: NeoThemeProviderRoot;
5
12
  };
@@ -9,19 +16,23 @@ export declare class NeoThemeProviderContext implements INeoThemeProviderContext
9
16
  get theme(): import("./neo-theme-provider.model.js").NeoThemes;
10
17
  get source(): import("./neo-theme-provider.model.js").NeoSources;
11
18
  get remember(): boolean;
19
+ get transition(): import("./neo-theme-provider.model.js").NeoTransitions;
12
20
  get root(): HTMLElement | ShadowRoot | undefined;
21
+ get ready(): boolean | undefined;
13
22
  get state(): {
14
23
  reset: boolean | undefined;
15
24
  theme: import("./neo-theme-provider.model.js").NeoThemes;
16
25
  source: import("./neo-theme-provider.model.js").NeoSources;
17
26
  remember: boolean;
27
+ transition: import("./neo-theme-provider.model.js").NeoTransitions;
18
28
  root: HTMLElement | ShadowRoot | undefined;
19
29
  };
20
- constructor({ reset, theme, source, remember, root }: NeoThemeProviderContextState);
21
- update(partial: Partial<NeoThemeProviderContextState>): void;
30
+ constructor({ reset, theme, source, remember, transition, root }: NeoThemeProviderContextState);
31
+ update(partial: Partial<NeoThemeProviderContextState>, trigger?: HTMLElement): void;
22
32
  private setTheme;
23
33
  private setSource;
24
- sync(): void;
34
+ import(target?: HTMLElement | ShadowRoot | undefined): void;
35
+ sync(trigger?: HTMLElement): void;
25
36
  destroy(): void;
26
37
  }
27
38
  export declare function setNeoThemeContext(context: NeoThemeProviderContextState): NeoThemeProviderContext;
@@ -1,13 +1,58 @@
1
1
  import { wait } from '@dvcol/common-utils/common/promise';
2
2
  import { getContext, setContext, untrack } from 'svelte';
3
- import { getRemember, getReset, getSource, getTheme, NeoThemeRoot, NeoThemeStorageKey } from './neo-theme-provider.model.js';
3
+ import { getRemember, getReset, getSource, getTheme, getTransition, NeoThemeRoot, NeoThemeStorageKey } from './neo-theme-provider.model.js';
4
4
  import { NeoErrorThemeContextNotFound, NeoErrorThemeInvalidTarget, NeoErrorThemeTargetNotFound } from '../utils/error.utils.js';
5
+ import styles from './neo-theme-provider.scss?url';
6
+ function isRootElement(root) {
7
+ return !!root && root instanceof HTMLElement;
8
+ }
9
+ export function computeCircleStart(element, { viewportWidth = window.innerWidth, viewportHeight = window.innerHeight } = {}) {
10
+ if (!element)
11
+ return {};
12
+ // Get button's position relative to the viewport
13
+ const rect = element.getBoundingClientRect();
14
+ // Calculate center of the button
15
+ const buttonCenterX = rect.left + (rect.width / 2);
16
+ const buttonCenterY = rect.top + (rect.height / 2);
17
+ // Convert to percentages
18
+ const xPercentage = (buttonCenterX / viewportWidth) * 100;
19
+ const yPercentage = (buttonCenterY / viewportHeight) * 100;
20
+ return {
21
+ x: Math.round(xPercentage),
22
+ y: Math.round(yPercentage),
23
+ };
24
+ }
25
+ async function transitionViewTheme(root, theme, trigger) {
26
+ if (trigger && isRootElement(root)) {
27
+ const { x, y } = computeCircleStart(trigger);
28
+ if (x)
29
+ root.style.setProperty('--neo-transition-trigger-x', `${x}%`);
30
+ if (y)
31
+ root.style.setProperty('--neo-transition-trigger-y', `${y}%`);
32
+ }
33
+ const transition = document.startViewTransition(() => {
34
+ if (!root)
35
+ throw new NeoErrorThemeTargetNotFound();
36
+ if (!('setAttribute' in root))
37
+ throw new NeoErrorThemeInvalidTarget();
38
+ root.setAttribute(NeoThemeStorageKey.InFlight, 'true');
39
+ root.setAttribute(NeoThemeStorageKey.Theme, theme);
40
+ });
41
+ await transition.finished;
42
+ if (!isRootElement(root))
43
+ return;
44
+ root.removeAttribute(NeoThemeStorageKey.InFlight);
45
+ root.style.removeProperty('--neo-transition-trigger-x');
46
+ root.style.removeProperty('--neo-transition-trigger-y');
47
+ }
5
48
  export class NeoThemeProviderContext {
6
49
  #reset = $state(getReset());
7
50
  #theme = $state(getTheme());
8
51
  #source = $state(getSource());
9
52
  #remember = $state(getRemember());
53
+ #transition = $state(getTransition());
10
54
  #root = $state(document?.documentElement);
55
+ #ready = $state(false);
11
56
  get reset() {
12
57
  return this.#reset;
13
58
  }
@@ -20,27 +65,34 @@ export class NeoThemeProviderContext {
20
65
  get remember() {
21
66
  return this.#remember;
22
67
  }
68
+ get transition() {
69
+ return this.#transition;
70
+ }
23
71
  get root() {
24
72
  return typeof this.#root === 'function' ? this.#root() : this.#root;
25
73
  }
74
+ get ready() {
75
+ return this.#ready;
76
+ }
26
77
  get state() {
27
78
  return {
28
79
  reset: this.reset,
29
80
  theme: this.theme,
30
81
  source: this.source,
31
82
  remember: this.remember,
83
+ transition: this.transition,
32
84
  root: this.root,
33
85
  };
34
86
  }
35
- constructor({ reset, theme, source, remember, root }) {
87
+ constructor({ reset, theme, source, remember, transition, root }) {
36
88
  this.#reset = reset ?? this.reset;
37
89
  this.#theme = theme ?? this.theme;
38
90
  this.#source = source ?? this.source;
39
91
  this.#remember = remember ?? this.remember;
92
+ this.#transition = transition ?? this.transition;
40
93
  this.#root = root ?? this.root;
41
- this.sync();
42
94
  }
43
- update(partial) {
95
+ update(partial, trigger) {
44
96
  untrack(() => {
45
97
  if (partial.reset !== undefined)
46
98
  this.#reset = partial.reset;
@@ -50,22 +102,28 @@ export class NeoThemeProviderContext {
50
102
  this.#source = partial.source;
51
103
  if (partial.remember !== undefined)
52
104
  this.#remember = partial.remember;
105
+ if (partial.transition !== undefined)
106
+ this.#transition = partial.transition;
53
107
  if (partial.root !== undefined)
54
108
  this.#root = partial.root;
55
- this.sync();
109
+ this.sync(trigger);
56
110
  });
57
111
  }
58
- async setTheme(theme) {
112
+ async setTheme(theme, trigger) {
59
113
  if (!this.root)
60
114
  throw new NeoErrorThemeTargetNotFound();
61
115
  if (!('setAttribute' in this.root))
62
116
  throw new NeoErrorThemeInvalidTarget();
63
- if (this.theme === this.root.getAttribute(NeoThemeStorageKey.Theme))
64
- return;
117
+ if (this.theme === this.root.getAttribute(NeoThemeStorageKey.Theme)) {
118
+ return this.root.setAttribute(NeoThemeStorageKey.Transition, this.transition);
119
+ }
120
+ if ('startViewTransition' in document && this.root.getAttribute(NeoThemeStorageKey.Transition)?.startsWith('neo')) {
121
+ return transitionViewTheme(this.root, theme, trigger);
122
+ }
65
123
  this.root.setAttribute(NeoThemeStorageKey.Transition, 'false');
66
124
  this.root.setAttribute(NeoThemeStorageKey.Theme, theme);
67
125
  await wait();
68
- this.root.removeAttribute(NeoThemeStorageKey.Transition);
126
+ this.root.setAttribute(NeoThemeStorageKey.Transition, this.transition);
69
127
  }
70
128
  setSource(source) {
71
129
  if (!this.root)
@@ -76,13 +134,34 @@ export class NeoThemeProviderContext {
76
134
  return;
77
135
  this.root.setAttribute(NeoThemeStorageKey.Source, source);
78
136
  }
79
- sync() {
137
+ import(target = this.root) {
138
+ if (!target)
139
+ throw new NeoErrorThemeTargetNotFound();
140
+ if (!('setAttribute' in target))
141
+ throw new NeoErrorThemeInvalidTarget();
142
+ if (target.parentElement?.querySelector('#neo-theme-provider'))
143
+ return;
144
+ const link = document.createElement('link');
145
+ link.setAttribute('type', 'text/css');
146
+ link.setAttribute('id', 'neo-theme-provider');
147
+ link.setAttribute('rel', 'stylesheet');
148
+ link.setAttribute('href', new URL(styles, import.meta.url).href);
149
+ link.addEventListener('load', () => {
150
+ this.#ready = true;
151
+ });
152
+ if (target === document?.documentElement)
153
+ document.head.appendChild(link);
154
+ else
155
+ target.after(link);
156
+ }
157
+ sync(trigger) {
80
158
  if (!this.root)
81
159
  throw new NeoErrorThemeTargetNotFound();
82
160
  if (!('setAttribute' in this.root))
83
161
  throw new NeoErrorThemeInvalidTarget();
162
+ this.import(this.root);
84
163
  this.root.setAttribute(NeoThemeRoot, '');
85
- void this.setTheme(this.theme);
164
+ void this.setTheme(this.theme, trigger);
86
165
  this.setSource(this.source);
87
166
  if (this.reset)
88
167
  this.root.setAttribute(NeoThemeStorageKey.Reset, '');
@@ -95,11 +174,13 @@ export class NeoThemeProviderContext {
95
174
  localStorage.setItem(NeoThemeStorageKey.Reset, Boolean(this.reset).toString());
96
175
  localStorage.setItem(NeoThemeStorageKey.Theme, this.theme);
97
176
  localStorage.setItem(NeoThemeStorageKey.Source, this.source);
177
+ localStorage.setItem(NeoThemeStorageKey.Transition, this.transition);
98
178
  }
99
179
  else {
100
180
  localStorage.removeItem(NeoThemeStorageKey.Reset);
101
181
  localStorage.removeItem(NeoThemeStorageKey.Theme);
102
182
  localStorage.removeItem(NeoThemeStorageKey.Source);
183
+ localStorage.removeItem(NeoThemeStorageKey.Transition);
103
184
  }
104
185
  }
105
186
  destroy() {
@@ -111,6 +192,8 @@ export class NeoThemeProviderContext {
111
192
  this.root.removeAttribute(NeoThemeStorageKey.Reset);
112
193
  this.root.removeAttribute(NeoThemeStorageKey.Theme);
113
194
  this.root.removeAttribute(NeoThemeStorageKey.Source);
195
+ this.root.removeAttribute(NeoThemeStorageKey.Transition);
196
+ this.#ready = false;
114
197
  }
115
198
  }
116
199
  const NeoContextKey = Symbol('NeoThemeProviderContext');
@@ -1,4 +1,5 @@
1
1
  import type { Snippet } from 'svelte';
2
+ import type { HTMLNeoBaseElement } from '../utils/html-element.utils.js';
2
3
  /**
3
4
  * The active theme (`dark` or `light`)
4
5
  */
@@ -16,8 +17,19 @@ export declare const NeoSource: {
16
17
  readonly BottomRight: "bottom-right";
17
18
  readonly BottomLeft: "bottom-left";
18
19
  };
20
+ export declare const NeoTransition: {
21
+ readonly None: "none";
22
+ readonly Spin: "neo-spin";
23
+ readonly Wave: "neo-wave";
24
+ readonly Circle: "neo-circle";
25
+ };
26
+ export type NeoTransitions = (typeof NeoTransition)[keyof typeof NeoTransition];
19
27
  export type NeoSources = (typeof NeoSource)[keyof typeof NeoSource];
20
28
  export interface INeoThemeProviderContext {
29
+ /**
30
+ * If styles have finished loading.
31
+ */
32
+ readonly ready?: boolean;
21
33
  /**
22
34
  * If a style reset is applied.
23
35
  */
@@ -34,16 +46,30 @@ export interface INeoThemeProviderContext {
34
46
  * If the reset, theme and source are stored in local-storage
35
47
  */
36
48
  readonly remember: boolean;
49
+ /**
50
+ * The theme transition to apply when changing theme.
51
+ */
52
+ readonly transition: NeoTransitions;
37
53
  /**
38
54
  * The target to which scope the theme variables
39
55
  */
40
56
  readonly root?: HTMLElement | ShadowRoot;
41
57
  }
42
- export interface NeoThemeProviderProps {
58
+ export interface NeoThemeProviderProps<Tag extends keyof HTMLElementTagNameMap = 'div'> extends Omit<HTMLNeoBaseElement<HTMLElementTagNameMap[Tag]>, 'children'> {
43
59
  /**
44
60
  * Child element to wrap in the theme context.
45
61
  */
46
62
  children?: Snippet<[INeoThemeProviderContext]>;
63
+ /**
64
+ * The HTML reference to the inner element when target is `self`.
65
+ * @see target
66
+ */
67
+ ref?: HTMLElement;
68
+ /**
69
+ * The HTML tag to use for the container.
70
+ * @default 'div'
71
+ */
72
+ tag?: Tag;
47
73
  /**
48
74
  * If `true`, injects a css reset for common styling.
49
75
  */
@@ -71,10 +97,10 @@ export interface NeoThemeProviderProps {
71
97
  *
72
98
  * @default document.documentElement
73
99
  */
74
- target?: HTMLElement | ShadowRoot | (() => HTMLElement | ShadowRoot);
100
+ target?: 'self' | HTMLElement | ShadowRoot | (() => HTMLElement | ShadowRoot);
75
101
  }
76
102
  export declare const NeoThemeRoot = "neo-theme-root";
77
- export declare const NeoThemeStorageKey: Record<string, `neo-${keyof INeoThemeProviderContext | 'transition'}`>;
103
+ export declare const NeoThemeStorageKey: Record<string, `neo-${keyof INeoThemeProviderContext | 'in-flight'}`>;
78
104
  export type NeoThemeStorageKeys = (typeof NeoThemeStorageKey)[keyof typeof NeoThemeStorageKey];
79
105
  export declare const getSavedTheme: () => NeoThemes | null;
80
106
  export declare const getPreferTheme: () => NeoThemes;
@@ -85,3 +111,5 @@ export declare const getSavedReset: () => string | null;
85
111
  export declare const getReset: () => boolean;
86
112
  export declare const getSavedRemember: () => string | null;
87
113
  export declare const getRemember: () => boolean;
114
+ export declare const getSavedTransition: () => NeoTransitions | null;
115
+ export declare const getTransition: () => NeoTransitions;