@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
@@ -0,0 +1,388 @@
1
+ <script lang="ts" generics="T">
2
+ import type { NeoVirtualContext, NeoVirtualItem, NeoVirtualListProps } from './neo-virtual-list.model.js';
3
+ import type { SvelteEvent } from '../utils/html-element.utils.js';
4
+
5
+ import { watch } from '@dvcol/svelte-utils/watch';
6
+ import { onDestroy, onMount, tick } from 'svelte';
7
+
8
+ import { defaultVirtualKey } from './neo-virtual-list.model.js';
9
+ import { toTransition, toTransitionProps } from '../utils/action.utils.js';
10
+
11
+ let {
12
+ // Snippet
13
+ children,
14
+ before,
15
+ after,
16
+
17
+ // State
18
+ ref: viewport = $bindable(),
19
+ tag = 'ul',
20
+ items = [],
21
+ key = defaultVirtualKey,
22
+ itemHeight,
23
+ buffer = 3,
24
+
25
+ // Style
26
+ dim,
27
+ shadow = true,
28
+ scrollbar = true,
29
+
30
+ // Events
31
+ onscroll,
32
+
33
+ // List Transition
34
+ in: inAction,
35
+ out: outAction,
36
+ transition: transitionAction,
37
+
38
+ // Other Props
39
+ contentProps,
40
+ beforeProps,
41
+ afterProps,
42
+ ...rest
43
+ }: NeoVirtualListProps<T> = $props();
44
+
45
+ const { tag: contentTag = 'div', ...contentRest } = $derived(contentProps ?? {});
46
+ const { tag: beforeTag = 'div', ...beforeRest } = $derived(beforeProps ?? {});
47
+ const { tag: afterTag = 'div', ...afterRest } = $derived(afterProps ?? {});
48
+
49
+ // Height of the list viewport
50
+ let viewportHeight = $state(0);
51
+
52
+ // Rendered items
53
+ const cursor = $state({
54
+ start: 0,
55
+ end: 0,
56
+ });
57
+
58
+ // Rows wrapper
59
+ const content = $state<{
60
+ ref?: HTMLElement;
61
+ before?: number;
62
+ after?: number;
63
+ top: number;
64
+ bottom: number;
65
+ }>({
66
+ ref: undefined,
67
+ before: undefined,
68
+ after: undefined,
69
+ top: 0,
70
+ bottom: 0,
71
+ });
72
+
73
+ // Rows items
74
+ const rows = $state<{ refs: HTMLCollectionOf<HTMLElement>; heights: number[] }>({
75
+ refs: [] as unknown as HTMLCollectionOf<HTMLElement>,
76
+ heights: [],
77
+ });
78
+
79
+ const visible: Array<NeoVirtualItem<T>> = $derived(
80
+ items.slice(cursor.start, cursor.end).map((item, index) => {
81
+ return { id: key?.(item) ?? index + cursor.start, index, item };
82
+ }),
83
+ );
84
+
85
+ const getTotalHeight = () => {
86
+ let total = rows.heights.reduce((x, y) => x + y, 0);
87
+ if (!viewport) return total;
88
+ const style = getComputedStyle(viewport);
89
+ total += Number.parseInt(style.paddingBlockEnd, 10);
90
+ total += Number.parseInt(style.paddingBlockStart, 10);
91
+ // add before and after height
92
+ total += Math.max(content.before ?? 0, 0);
93
+ total += Math.max(content.after ?? 0, 0);
94
+ return total;
95
+ };
96
+
97
+ const getAverageHeight = () => {
98
+ if (!cursor.end) return 0;
99
+ // Calculate averageHeight based on all known heights, not just rendered
100
+ const heights = rows.heights.filter(Boolean);
101
+ return (heights.reduce((x, y) => x + y, 0) / heights.length) || itemHeight || 1;
102
+ };
103
+
104
+ async function computeCursor(scrollTop: number) {
105
+ let contentHeight = content.top - scrollTop;
106
+ let i = cursor.start;
107
+
108
+ const averageHeight = getAverageHeight();
109
+ while (contentHeight < viewportHeight && i < items.length) {
110
+ let row = rows.refs[i - cursor.start];
111
+ if (!row) {
112
+ cursor.end = i + 1;
113
+ await tick(); // render the newly visible row
114
+ row = rows.refs[i - cursor.start];
115
+ }
116
+ contentHeight += (rows.heights[i] = row?.offsetHeight || averageHeight);
117
+ i += 1;
118
+ }
119
+
120
+ cursor.end = Math.min(items.length, i + buffer); // Add buffer to the end
121
+ }
122
+
123
+ function computeBottomPadding() {
124
+ const averageHeight = getAverageHeight();
125
+ // Calculate bottom padding based on the remaining items
126
+ const remaining = items.length - cursor.end;
127
+ content.bottom = remaining * averageHeight;
128
+
129
+ // Ensure heights array is long enough
130
+ rows.heights.length = items.length;
131
+
132
+ // Fill remaining heights with averageHeight
133
+ for (let k = cursor.end; k < items.length; k++) {
134
+ if (rows.heights[k] === undefined) rows.heights[k] = averageHeight;
135
+ }
136
+ }
137
+
138
+ function ensureViewport() {
139
+ if (!viewport) return;
140
+ const { scrollTop } = viewport;
141
+ const totalHeight = getTotalHeight();
142
+ // If we scroll outside the viewport scroll to the top to prevent extra space at the bottom.
143
+ if ((scrollTop + viewportHeight > totalHeight) && viewport) {
144
+ viewport?.scrollTo(0, Math.max(0, totalHeight - viewportHeight));
145
+ }
146
+ }
147
+
148
+ const rowObserver: ResizeObserver = new ResizeObserver(refresh);
149
+ export async function refresh() {
150
+ // wait until the DOM is up to date
151
+ await tick();
152
+
153
+ if (!viewport) return;
154
+ const { scrollTop } = viewport;
155
+
156
+ await computeCursor(scrollTop);
157
+ computeBottomPadding();
158
+ ensureViewport();
159
+
160
+ for (const row of rows.refs) rowObserver?.observe(row);
161
+ }
162
+
163
+ function handleResize() {
164
+ if (!viewport) return;
165
+ const { scrollTop } = viewport;
166
+
167
+ for (let v = 0; v < rows.refs.length; v += 1) {
168
+ const itemIndex = cursor.start + v;
169
+ if (itemIndex >= items.length) continue;
170
+ rows.heights[itemIndex] = itemHeight || (rows.refs[v]).offsetHeight;
171
+ }
172
+
173
+ let i = 0;
174
+ let y = 0;
175
+
176
+ const averageHeight = getAverageHeight();
177
+ // Fill top padding until the first item is visible
178
+ while (i < items.length) {
179
+ // Ensure rowHeight is not 0
180
+ const rowHeight = rows.heights[i] || averageHeight;
181
+ // Stop if the current item's bottom edge is past the scrollTop minus buffer considerations
182
+ if (y + rowHeight > scrollTop) break;
183
+ y += rowHeight;
184
+ i += 1;
185
+ }
186
+
187
+ cursor.start = Math.max(0, i - buffer);
188
+
189
+ // Re-compute the top padding including buffer
190
+ content.top = 0;
191
+ for (let k = 0; k < cursor.start; k++) content.top += rows.heights[k] || averageHeight;
192
+
193
+ // Fill until we reach the bottom of the viewport
194
+ while (i < items.length) {
195
+ y += rows.heights[i] || averageHeight;
196
+ i += 1;
197
+ if (y > scrollTop + viewportHeight) break;
198
+ }
199
+ cursor.end = Math.min(items.length, i + buffer);
200
+
201
+ // Fill unknown heights with the new average
202
+ for (let k = 0; k < items.length; k++) if (!rows.heights[k]) rows.heights[k] = averageHeight;
203
+
204
+ // Calculate bottom padding including buffer
205
+ content.bottom = 0;
206
+ for (let k = cursor.end; k < items.length; k++) content.bottom += rows.heights[k] || averageHeight;
207
+
208
+ ensureViewport();
209
+ }
210
+
211
+ export function handleScroll(e: SvelteEvent<UIEvent>) {
212
+ if (!viewport) return onscroll?.(e);
213
+ handleResize();
214
+ return onscroll?.(e);
215
+ }
216
+
217
+ // whenever `items` changes, invalidate the current heightmap
218
+ $effect(() => {
219
+ void refresh();
220
+ });
221
+
222
+ watch(handleResize, () => items.length, { skip: 1 });
223
+
224
+ // trigger initial refresh
225
+ onMount(() => {
226
+ if (!content.ref) return;
227
+ rows.refs = content.ref.children as HTMLCollectionOf<HTMLElement>;
228
+ });
229
+
230
+ onDestroy(() => {
231
+ rowObserver?.disconnect();
232
+ });
233
+
234
+ const context = $derived<NeoVirtualContext<T>>({
235
+ items,
236
+ visible,
237
+ start: cursor.start,
238
+ end: cursor.end,
239
+ });
240
+
241
+ const inFn = $derived(toTransition(inAction ?? transitionAction));
242
+ const inProps = $derived(toTransitionProps(inAction ?? transitionAction));
243
+ const outFn = $derived(toTransition(outAction ?? transitionAction));
244
+ const outProps = $derived(toTransitionProps(outAction ?? transitionAction));
245
+ </script>
246
+
247
+ <svelte:element
248
+ this={tag}
249
+ class:neo-virtual-list={true}
250
+ class:neo-scroll={scrollbar}
251
+ class:neo-shadow={shadow}
252
+ bind:this={viewport}
253
+ bind:offsetHeight={viewportHeight}
254
+ {...rest}
255
+ onscroll={handleScroll}
256
+ in:inFn={inProps}
257
+ out:outFn={outProps}
258
+ >
259
+ <svelte:element
260
+ this={contentTag}
261
+ class:neo-virtual-list-contents={true}
262
+ class:neo-dim={dim}
263
+ bind:this={content.ref}
264
+ style:padding-top="{content.top}px"
265
+ style:padding-bottom="{content.bottom}px"
266
+ {...contentRest}
267
+ >
268
+ {#if before && cursor.start === 0}
269
+ <svelte:element
270
+ this={beforeTag}
271
+ bind:offsetHeight={content.before}
272
+ class:neo-virtual-list-before={true}
273
+ role="none"
274
+ {...beforeRest}
275
+ >
276
+ {@render before(context)}
277
+ </svelte:element>
278
+ {/if}
279
+ {#each visible as { id, index, item } (id)}
280
+ {@render children?.({ id, index, item }, context)}
281
+ {/each}
282
+
283
+ {#if after && cursor.end === items.length}
284
+ <svelte:element
285
+ this={afterTag}
286
+ bind:offsetHeight={content.after}
287
+ class:neo-virtual-list-after={true}
288
+ role="none"
289
+ {...afterRest}
290
+ >
291
+ {@render after(context)}
292
+ </svelte:element>
293
+ {/if}
294
+ </svelte:element>
295
+ </svelte:element>
296
+
297
+ <style>.neo-virtual-list {
298
+ position: relative;
299
+ display: flex;
300
+ flex: 1 1 auto;
301
+ flex-direction: column;
302
+ height: 100%;
303
+ overflow-y: auto;
304
+ -webkit-overflow-scrolling: touch;
305
+ padding-inline: var(--neo-list-padding, 0.375rem);
306
+ padding-block: var(--neo-list-padding, 0.375rem);
307
+ }
308
+ .neo-virtual-list-contents {
309
+ display: flex;
310
+ flex: 0 0 auto;
311
+ flex-direction: column;
312
+ }
313
+ .neo-virtual-list-contents.neo-dim:hover :global(> *:not(:hover, :has(*:focus-visible))), .neo-virtual-list-contents.neo-dim:has(> * :global(*:focus-visible)) > *:not(:hover, :has(:global(*:focus-visible))) {
314
+ opacity: 0.6;
315
+ transition-timing-function: linear;
316
+ transition-duration: 0.6s;
317
+ }
318
+ .neo-virtual-list-before, .neo-virtual-list-after {
319
+ display: flex;
320
+ flex-direction: column;
321
+ }
322
+ .neo-virtual-list.neo-scroll {
323
+ padding-block: var(--neo-list-scroll-padding, 0.625rem);
324
+ }
325
+ .neo-virtual-list.neo-scroll.neo-shadow {
326
+ mask-image: linear-gradient(to var(--neo-scroll-direction, top), black, black, transparent 0, black var(--neo-scroll-shadow-size, 1rem), black calc(100% - var(--neo-scroll-shadow-size, 1rem)), transparent);
327
+ }
328
+ .neo-virtual-list.neo-scroll {
329
+ scrollbar-gutter: stable both-edges;
330
+ overflow: var(--neo-scrollbar-overflow, auto);
331
+ transition: --neo-thumb-color 0.45s ease 0.1s;
332
+ }
333
+ .neo-virtual-list.neo-scroll:focus-within, .neo-virtual-list.neo-scroll:focus, .neo-virtual-list.neo-scroll:hover {
334
+ --neo-thumb-color: var(--neo-scrollbar-color);
335
+ transition: --neo-thumb-color 0.45s ease 0s;
336
+ }
337
+ .neo-virtual-list.neo-scroll::-webkit-scrollbar {
338
+ width: var(--neo-scrollbar-width, 0.375rem);
339
+ background-color: transparent;
340
+ border: none;
341
+ cursor: pointer;
342
+ }
343
+ .neo-virtual-list.neo-scroll::-webkit-scrollbar:vertical {
344
+ width: var(--neo-scrollbar-width, 0.375rem);
345
+ }
346
+ .neo-virtual-list.neo-scroll::-webkit-scrollbar:horizontal {
347
+ height: var(--neo-scrollbar-width, 0.375rem);
348
+ }
349
+ .neo-virtual-list.neo-scroll::-webkit-scrollbar-button {
350
+ display: block;
351
+ }
352
+ .neo-virtual-list.neo-scroll::-webkit-scrollbar-button:hover {
353
+ background-color: var(--neo-thumb-color, transparent);
354
+ }
355
+ .neo-virtual-list.neo-scroll::-webkit-scrollbar-button:vertical {
356
+ height: var(--neo-list-scrollbar-padding, 0.625rem);
357
+ }
358
+ .neo-virtual-list.neo-scroll::-webkit-scrollbar-button:horizontal {
359
+ width: var(--neo-list-scrollbar-padding, 0.625rem);
360
+ }
361
+ .neo-virtual-list.neo-scroll::-webkit-scrollbar-thumb {
362
+ background-color: var(--neo-thumb-color, transparent);
363
+ border: none;
364
+ border-radius: var(--neo-border-radius);
365
+ cursor: pointer;
366
+ }
367
+ .neo-virtual-list.neo-scroll::-webkit-scrollbar-corner {
368
+ background-color: transparent;
369
+ background-clip: border-box;
370
+ border: none;
371
+ outline: none;
372
+ }
373
+ .neo-virtual-list.neo-scroll::-webkit-resizer {
374
+ background: url("../assets/neo-icon-resizer-bottom-right.svg") no-repeat bottom;
375
+ background-clip: border-box;
376
+ }
377
+ @supports not selector(::-webkit-scrollbar) {
378
+ .neo-virtual-list.neo-scroll {
379
+ scrollbar-width: thin;
380
+ scrollbar-color: var(--neo-scrollbar-color);
381
+ padding-inline: calc(var(--neo-scrollbar-width, 0.375rem) * 2);
382
+ }
383
+ }
384
+ @supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {
385
+ .neo-virtual-list.neo-scroll {
386
+ padding-inline: calc(var(--neo-scrollbar-width, 0.375rem) * 2);
387
+ }
388
+ }</style>
@@ -0,0 +1,22 @@
1
+ import type { NeoVirtualListProps } from './neo-virtual-list.model.js';
2
+ import type { SvelteEvent } from '../utils/html-element.utils.js';
3
+ declare class __sveltets_Render<T> {
4
+ props(): NeoVirtualListProps<T, "ul">;
5
+ events(): {};
6
+ slots(): {};
7
+ bindings(): "ref";
8
+ exports(): {
9
+ refresh: () => Promise<void>;
10
+ handleScroll: (e: SvelteEvent<UIEvent>) => any;
11
+ };
12
+ }
13
+ interface $$IsomorphicComponent {
14
+ new <T>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
15
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
16
+ } & ReturnType<__sveltets_Render<T>['exports']>;
17
+ <T>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
18
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
19
+ }
20
+ declare const NeoVirtualList: $$IsomorphicComponent;
21
+ type NeoVirtualList<T> = InstanceType<typeof NeoVirtualList<T>>;
22
+ export default NeoVirtualList;
@@ -3,6 +3,8 @@ export { default as NeoListBaseItem } from './NeoListBaseItem.svelte';
3
3
  export { default as NeoListBaseLoader } from './NeoListBaseLoader.svelte';
4
4
  export { default as NeoListBaseSection } from './NeoListBaseSection.svelte';
5
5
  export { default as NeoListSearch } from './NeoListSearch.svelte';
6
+ export { default as NeoVirtualList } from './NeoSimpleList.svelte';
7
+ export { default as NeoSimpleList } from './NeoSimpleList.svelte';
6
8
  export { itemLabelSort, itemSearchFilter } from './neo-list-search.model.js';
7
9
  export { isSection } from './neo-list.model.js';
8
10
  export type * from './neo-list-base-item.model.js';
@@ -10,3 +12,5 @@ export type * from './neo-list-base-loader.model.js';
10
12
  export type * from './neo-list-base-section.model.js';
11
13
  export type * from './neo-list-search.model.js';
12
14
  export type * from './neo-list.model.js';
15
+ export type * from './neo-simple-list.model.js';
16
+ export type * from './neo-virtual-list.model.js';
@@ -3,5 +3,7 @@ export { default as NeoListBaseItem } from './NeoListBaseItem.svelte';
3
3
  export { default as NeoListBaseLoader } from './NeoListBaseLoader.svelte';
4
4
  export { default as NeoListBaseSection } from './NeoListBaseSection.svelte';
5
5
  export { default as NeoListSearch } from './NeoListSearch.svelte';
6
+ export { default as NeoVirtualList } from './NeoSimpleList.svelte';
7
+ export { default as NeoSimpleList } from './NeoSimpleList.svelte';
6
8
  export { itemLabelSort, itemSearchFilter } from './neo-list-search.model.js';
7
9
  export { isSection } from './neo-list.model.js';
@@ -1,7 +1,10 @@
1
1
  import type { NeoButtonProps } from '../buttons/neo-button.model.js';
2
2
  import type { NeoBaseListItem } from './neo-list.model.js';
3
- import type { NeoSkeletonTextProps } from '../skeletons/neo-skeleton-text.model.js';
4
- export type NeoListBaseItemProps<Value = unknown, Context = any, Tag extends keyof HTMLElementTagNameMap = 'li', Item extends NeoBaseListItem<Value, Tag, Context> = NeoBaseListItem<Value, Tag, Context>> = {
3
+ import type { NeoMediaProps } from '../media/neo-media.model.js';
4
+ import type { NeoMarkProps } from '../text/neo-mark.model.js';
5
+ import type { BorderRadiusInput } from '../utils/border.utils.js';
6
+ import type { HTMLNeoBaseElement, HTMLTagProps } from '../utils/html-element.utils.js';
7
+ export interface NeoListBaseItemProps<Value = unknown, Context = any, Tag extends keyof HTMLElementTagNameMap = 'li', Item extends NeoBaseListItem<Value, Tag, Context> = NeoBaseListItem<Value, Tag, Context>> extends HTMLNeoBaseElement, HTMLTagProps, Pick<NeoButtonProps, 'hovered' | 'focused' | 'toggle' | 'glass' | 'tinted' | 'filled'> {
5
8
  /**
6
9
  * Snippet to display before the list item.
7
10
  * e.g. an icon or avatar.
@@ -26,9 +29,9 @@ export type NeoListBaseItemProps<Value = unknown, Context = any, Tag extends key
26
29
  */
27
30
  highlight?: string;
28
31
  /**
29
- * If true, the item will display as a skeleton.
32
+ * Reference to the button element (if any) within the list item.
30
33
  */
31
- skeleton?: boolean;
34
+ buttonRef?: NeoButtonProps['ref'];
32
35
  /**
33
36
  * If true, the item will display as a selectable button.
34
37
  *
@@ -71,17 +74,43 @@ export type NeoListBaseItemProps<Value = unknown, Context = any, Tag extends key
71
74
  * @default '.neo-list-item.neo-list-item-select'
72
75
  */
73
76
  selector?: string;
77
+ /**
78
+ * Reverse the next/previous focusable sibling selection direction using arrow keys.
79
+ */
80
+ flip?: boolean;
74
81
  /**
75
82
  * If true, the item will be rounded.
76
83
  */
77
- rounded?: boolean;
84
+ rounded?: BorderRadiusInput;
85
+ /**
86
+ * Reverse the direction of the item.
87
+ *
88
+ * @default false
89
+ */
90
+ reverse?: boolean;
91
+ /**
92
+ * The maximum number of lines to display before truncating the text.
93
+ * @default label: 1, description: 2
94
+ */
95
+ ellipsis?: number | {
96
+ label?: number;
97
+ description?: number;
98
+ };
78
99
  /**
79
100
  * Optional callback to handle the item click event.
80
101
  * @param index
81
102
  */
82
- onclick: NeoButtonProps['onclick'];
103
+ onclick?: NeoButtonProps['onclick'];
83
104
  /**
84
105
  * Optional props to pass to the button.
85
106
  */
86
107
  buttonProps?: NeoButtonProps;
87
- } & NeoSkeletonTextProps & Pick<NeoButtonProps, 'hovered' | 'focused' | 'toggle'>;
108
+ /**
109
+ * Optional props to pass to the media.
110
+ */
111
+ mediaProps?: NeoMediaProps;
112
+ /**
113
+ * Optional props to pass to the marks.
114
+ */
115
+ markProps?: NeoMarkProps;
116
+ }
@@ -1 +1,2 @@
1
+ ;
1
2
  export {};
@@ -1,3 +1,4 @@
1
+ import type { NeoMediaProps } from '../media/neo-media.model.js';
1
2
  import type { NeoSkeletonTextProps } from '../skeletons/neo-skeleton-text.model.js';
2
3
  import type { HTMLTransitionProps } from '../utils/action.utils.js';
3
4
  import type { HTMLNeoBaseElement } from '../utils/html-element.utils.js';
@@ -25,7 +26,7 @@ export type NeoListBaseLoaderProps = {
25
26
  /**
26
27
  * Whether to style each 2n item as a description.
27
28
  */
28
- description?: string;
29
+ description?: boolean;
29
30
  /**
30
31
  * Whether to show the checkmark skeleton.
31
32
  */
@@ -38,6 +39,22 @@ export type NeoListBaseLoaderProps = {
38
39
  * Whether to show an after skeleton.
39
40
  */
40
41
  after?: boolean;
42
+ /**
43
+ * Whether to show a header skeleton.
44
+ */
45
+ header?: number;
46
+ /**
47
+ * Whether to show a media skeleton.
48
+ */
49
+ media?: boolean;
50
+ /**
51
+ * Optional props to pass to the header skeleton.
52
+ */
53
+ headerProps?: NeoSkeletonTextProps;
54
+ /**
55
+ * Optional props to pass to the media skeleton.
56
+ */
57
+ mediaProps?: NeoMediaProps;
41
58
  /**
42
59
  * Optional props to pass to the before skeleton.
43
60
  */
@@ -1,5 +1,4 @@
1
1
  import type { NeoListContext, NeoListRender, NeoListSection } from './neo-list.model.js';
2
- import type { NeoSkeletonTextProps } from '../skeletons/neo-skeleton-text.model.js';
3
2
  import type { HTMLNeoBaseElement } from '../utils/html-element.utils.js';
4
3
  export type NeoListBaseSectionProps<Value = unknown, Tag extends keyof HTMLElementTagNameMap = 'ul'> = {
5
4
  /**
@@ -24,11 +23,15 @@ export type NeoListBaseSectionProps<Value = unknown, Tag extends keyof HTMLEleme
24
23
  */
25
24
  highlight?: string;
26
25
  /**
27
- * If true, the section will display as a skeleton.
26
+ * Reverse the direction of the item.
27
+ *
28
+ * @default false
28
29
  */
29
- skeleton?: boolean;
30
+ reverse?: boolean;
30
31
  /**
31
- * Optional props to pass to the skeleton loader.
32
+ * Inverts the flow of the list (flex-direction: column-reverse).
33
+ *
34
+ * @default false
32
35
  */
33
- skeletonProps?: NeoSkeletonTextProps;
36
+ flip?: boolean;
34
37
  } & HTMLNeoBaseElement<HTMLElementTagNameMap[Tag]>;
@@ -29,7 +29,7 @@ export type NeoListSearchProps<Tag extends keyof HTMLElementTagNameMap = 'div'>
29
29
  * Custom sort function to apply to the list (overrides default list sort).
30
30
  * Defaults unsorted and toggles between ascending and descending alphabetical label order.
31
31
  */
32
- sort?: NeoListSearchSort;
32
+ sort?: NeoListSearchSort | false;
33
33
  /**
34
34
  * List context (used to extract the highlight filter).
35
35
  */
@@ -38,6 +38,6 @@ export type NeoListSearchProps<Tag extends keyof HTMLElementTagNameMap = 'div'>
38
38
  * Optional props to pass to the input.
39
39
  */
40
40
  inputProps?: NeoInputProps;
41
- } & HTMLRefProps<HTMLInputElement> & Pick<NeoInputProps, 'value' | 'valid' | 'dirty' | 'touched' | 'hovered' | 'focused' | 'focusin' | 'loading' | 'elevation' | 'hover' | 'placeholder'> & HTMLNeoBaseElement<HTMLElementTagNameMap[Tag]>;
41
+ } & HTMLRefProps<HTMLInputElement> & Pick<NeoInputProps, 'value' | 'valid' | 'dirty' | 'touched' | 'hovered' | 'focused' | 'focusin' | 'loading' | 'elevation' | 'hover' | 'blur' | 'pressed' | 'placeholder' | 'rounded' | 'borderless' | 'glass' | 'tinted' | 'color' | 'disabled' | 'skeleton' | 'readonly'> & HTMLNeoBaseElement<HTMLElementTagNameMap[Tag]>;
42
42
  export declare const itemSearchFilter: NeoListSearchFilter;
43
43
  export declare function itemLabelSort(a: NeoListItemOrSection, b: NeoListItemOrSection, reverse?: boolean): number;