@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
@@ -1,14 +1,22 @@
1
1
  <script lang="ts">
2
+ import type { NeoTooltipContext } from '../../index.js';
3
+
2
4
  import type { NeoTooltipPlacement } from '../common/neo-placement.model.js';
3
- import type { NeoMenuContext, NeoMenuListItemProps } from './neo-menu-list-item.model.js';
5
+ import type { NeoMenuContext, NeoMenuItem, NeoMenuListItemProps } from './neo-menu-list-item.model.js';
4
6
  import type { SvelteEvent } from '../../utils/html-element.utils.js';
5
7
 
6
- import { getFocusableElement } from '@dvcol/common-utils/common/element';
8
+ import { isSafari } from '@dvcol/common-utils/common/browser';
9
+ import { getFocusableElement, getLastFocusableElement } from '@dvcol/common-utils/common/element';
10
+ import { getUUID } from '@dvcol/common-utils/common/string';
7
11
  import { tick } from 'svelte';
8
12
 
13
+ import NeoDivider from '../../divider/NeoDivider.svelte';
14
+ import { reversePlacement } from '../common/neo-placement.model.js';
9
15
  import { getMenuContext, setMenuContext } from './neo-menu-context.svelte.js';
10
16
  import NeoMenuList from './NeoMenuList.svelte';
17
+ import NeoMenuListItem from './NeoMenuListItem.svelte';
11
18
  import NeoTooltip from '../tooltips/NeoTooltip.svelte';
19
+ import { showDivider } from '../../list/neo-list.model.js';
12
20
  import NeoListBaseItem from '../../list/NeoListBaseItem.svelte';
13
21
  import { getColorVariable } from '../../utils/colors.utils.js';
14
22
 
@@ -19,12 +27,15 @@
19
27
  // Item Props
20
28
  ref = $bindable(),
21
29
  tag = 'li',
30
+ menuTag = 'ul',
22
31
 
23
32
  item,
24
33
  parent,
34
+ array,
25
35
  index = 0,
26
- length,
36
+ sectionIndex,
27
37
  level = 1,
38
+ divider,
28
39
 
29
40
  // Tooltip Props
30
41
  tooltipRef = $bindable(),
@@ -32,22 +43,30 @@
32
43
  keepOpenOnSelect,
33
44
 
34
45
  placement = 'right-start',
35
- offset = (p: NeoTooltipPlacement) => ({ mainAxis: 6, crossAxis: p?.endsWith('start') ? -6 : 6 }),
46
+ offset: _offset,
36
47
 
37
48
  // Styles
38
49
  rounded,
50
+ reverse,
51
+ flip,
39
52
 
40
53
  // Events
41
54
  onMenu,
42
55
  onSelect,
43
56
 
44
57
  // Other Props
58
+ dividerProps,
45
59
  tooltipProps,
46
60
  baseProps,
47
61
  menuProps,
48
62
  ...rest
49
63
  }: NeoMenuListItemProps = $props();
50
64
 
65
+ const offset = $derived.by(() => {
66
+ if (_offset !== undefined) return _offset;
67
+ return (p?: NeoTooltipPlacement) => ({ mainAxis: rounded ? 12 : 9, crossAxis: p?.endsWith('start') ? -6 : 6 });
68
+ });
69
+
51
70
  const items = $derived(item?.items);
52
71
 
53
72
  const menuContext = getMenuContext();
@@ -62,7 +81,7 @@
62
81
  return open;
63
82
  },
64
83
  get ref() {
65
- return ref;
84
+ return ref ?? menuContext?.ref;
66
85
  },
67
86
  async dismiss() {
68
87
  tooltipOpen = false;
@@ -75,18 +94,25 @@
75
94
  open = tooltipOpen || childContext.children;
76
95
  });
77
96
 
78
- const nested = $derived(!!items?.length && !!ref);
97
+ const nested = $derived(!item.section && !!items?.length && !!ref);
79
98
 
80
99
  const onkeydown = async (e: KeyboardEvent) => {
81
100
  if (!['ArrowRight', 'ArrowLeft'].includes(e.key)) return;
82
- if (!nested && !menuContext?.ref) return;
101
+ if (!nested && !parent) return;
83
102
  e.preventDefault();
84
103
  e.stopPropagation();
85
- tooltipOpen = e.key === 'ArrowRight';
86
- if (open && e.key === 'ArrowLeft') return;
104
+ const openNested = reverse ? e.key === 'ArrowLeft' : e.key === 'ArrowRight';
105
+ if (nested) tooltipOpen = openNested;
106
+ // If we are closing the nested menu we don't change focus
107
+ if (!openNested && open) return;
108
+ // If we are on the main menu and closing, do nothing
109
+ if (!openNested && !parent) return;
87
110
  await tick();
88
- if (e.key === 'ArrowRight') getFocusableElement(tooltipRef)?.focus();
89
- if (e.key === 'ArrowLeft') getFocusableElement(menuContext?.ref)?.focus();
111
+ // Focus the first focusable element in the opened tooltip
112
+ if (openNested && flip) return getLastFocusableElement(tooltipRef)?.focus();
113
+ if (openNested) return getFocusableElement(tooltipRef)?.focus();
114
+ // Focus the first focusable element in the parent menu:
115
+ return menuContext?.ref?.focus();
90
116
  };
91
117
 
92
118
  $effect(() => {
@@ -101,36 +127,102 @@
101
127
  }
102
128
  onSelect?.(item, e);
103
129
  baseProps?.onclick?.(e, checked);
104
- if (keepOpenOnSelect) return;
130
+ if (keepOpenOnSelect || item.keepOpenOnSelect) return;
105
131
  menuContext?.dismiss();
106
132
  };
107
133
 
108
- const context = $derived<NeoMenuContext>({ item, index, length, parent, open, keepOpenOnSelect, onMenu, onSelect });
134
+ const context = $derived<NeoMenuContext>({ item, parent, array, index, sectionIndex, open, keepOpenOnSelect, onMenu, onSelect });
135
+
136
+ const nestedPlacement = $derived(reverse ? reversePlacement(placement) : placement);
137
+
138
+ const renderDivider = (index: number, array: NeoMenuItem[] = [], position: 'top' | 'bottom') => {
139
+ if (position === 'top') return index && (showDivider(array[index]?.divider, 'top') ?? showDivider(divider, 'top'));
140
+ if (index >= array.length - 1) return false;
141
+ return showDivider(array[index].divider, 'bottom') && !showDivider(array[index + 1]?.divider, 'top');
142
+ };
109
143
  </script>
110
144
 
111
145
  <svelte:element
112
146
  this={item.tag ?? tag}
113
- bind:this={ref}
114
147
  role="menuitem"
115
148
  data-index={index}
116
149
  data-level={level}
150
+ data-section={sectionIndex}
117
151
  aria-haspopup={nested ? 'menu' : undefined}
118
152
  aria-posinset={index + 1}
119
- aria-setsize={length}
153
+ aria-setsize={array?.length}
120
154
  class:neo-menu-item={true}
155
+ class:neo-section={!!item.section}
121
156
  style:--neo-list-item-color={getColorVariable(item.color)}
122
157
  {...rest}
123
158
  {...item.itemProps}
124
159
  >
160
+ {#if renderDivider(index, array, flip && !isSafari() ? 'bottom' : 'top')}
161
+ <NeoDivider aria-hidden="true" {...dividerProps} {...item.dividerProps} class={['neo-menu-item-divider', item.dividerProps?.class]} />
162
+ {/if}
163
+
125
164
  {#if children}
126
165
  {@render children?.(context)}
166
+ {:else if item.section}
167
+ {@const labelId = item.label ? `neo-menu-item-section-label-${getUUID()}` : undefined}
168
+
169
+ {#if labelId}
170
+ <span id={labelId} class="neo-menu-item-section-label" class:neo-sticky={item.sticky} class:neo-reverse={reverse || item.reverse}>
171
+ {item.label}
172
+ </span>
173
+ {/if}
174
+ {#if items}
175
+ <svelte:element this={menuTag} role="menu" class:neo-menu-item-section={true} class:neo-flip={flip}>
176
+ {#each items as child, childIndex (child.id ?? childIndex)}
177
+ <NeoMenuListItem
178
+ {children}
179
+ {tag}
180
+ {menuTag}
181
+
182
+ item={child}
183
+ parent={item}
184
+ array={items}
185
+ index={childIndex}
186
+ sectionIndex={index}
187
+
188
+ {level}
189
+ {divider}
190
+ {keepOpenOnSelect}
191
+ {placement}
192
+ {offset}
193
+
194
+ {rounded}
195
+ {reverse}
196
+ {flip}
197
+
198
+ {dividerProps}
199
+ {tooltipProps}
200
+ {baseProps}
201
+ {...rest}
202
+
203
+ menuProps={{ tag: menuTag, rounded, reverse, flip, divider, dividerProps, tooltipProps, baseProps, ...child.menuProps }}
204
+ onMenu={(i, e) => {
205
+ child.menuProps?.onMenu?.(i, e);
206
+ onMenu?.(i, e);
207
+ }}
208
+ onSelect={(i, e) => {
209
+ child.menuProps?.onSelect?.(i, e);
210
+ onSelect?.(i, e);
211
+ }}
212
+ />
213
+ {/each}
214
+ </svelte:element>
215
+ {/if}
127
216
  {:else}
128
217
  <NeoListBaseItem
218
+ bind:buttonRef={ref}
129
219
  {item}
130
220
  {index}
131
221
  {context}
132
222
  {rounded}
133
- toggle
223
+ {reverse}
224
+ {flip}
225
+ toggle={nested}
134
226
  arrow={nested}
135
227
  checked={open}
136
228
  selector=".neo-menu-item"
@@ -139,10 +231,16 @@
139
231
  {onclick}
140
232
  />
141
233
  {/if}
234
+
235
+ {#if renderDivider(index, array, flip && !isSafari() ? 'top' : 'bottom')}
236
+ <NeoDivider aria-hidden="true" {...dividerProps} {...item.dividerProps} class={['neo-menu-item-divider', item.dividerProps?.class]} />
237
+ {/if}
142
238
  </svelte:element>
143
239
 
144
- {#snippet tooltip()}
240
+ {#snippet tooltip({ placement }: NeoTooltipContext)}
145
241
  <NeoMenuList
242
+ flip={flip ?? placement.includes('top')}
243
+ tag={menuTag}
146
244
  {...menuProps}
147
245
  itemProps={{ ...rest, ...menuProps?.itemProps }}
148
246
  {keepOpenOnSelect}
@@ -165,7 +263,7 @@
165
263
  {rounded}
166
264
  {...tooltipProps}
167
265
  {...item.tooltipProps}
168
- {placement}
266
+ placement={nestedPlacement}
169
267
  {offset}
170
268
  {tooltip}
171
269
  openOnFocus={false}
@@ -173,19 +271,54 @@
173
271
  {/if}
174
272
 
175
273
  <style>.neo-menu-item {
176
- padding: 0 var(--neo-menu-padding, var(--neo-gap-tiny, 0.25rem));
274
+ --neo-btn-bg-color-hover: var(--neo-menu-bg-color-hover, transparent);
275
+ padding: 0 var(--neo-menu-padding, var(--neo-gap-4xs, 0.25rem));
177
276
  color: var(--neo-list-item-color, inherit);
277
+ list-style-type: none;
178
278
  }
179
279
  .neo-menu-item :global(> .neo-list-item-button) {
180
280
  width: 100%;
181
281
  --neo-btn-text-color-active: currentcolor;
182
282
  }
183
283
  .neo-menu-item :global(> .neo-list-item-button.neo-rounded) {
184
- border-radius: var(--neo-btn-border-radius-rounded, var(--neo-border-radius-md));
284
+ border-radius: var(--neo-btn-border-radius, var(--neo-border-radius-lg));
185
285
  }
186
- .neo-menu-item:hover :global(> .neo-list-item-button .neo-list-item-content),
187
- .neo-menu-item:hover :global(> .neo-list-item-button .neo-list-item-description), .neo-menu-item:focus :global(> .neo-list-item-button .neo-list-item-content),
188
- .neo-menu-item:focus :global(> .neo-list-item-button .neo-list-item-description), .neo-menu-item:focus-within :global(> .neo-list-item-button .neo-list-item-content),
189
- .neo-menu-item:focus-within :global(> .neo-list-item-button .neo-list-item-description) {
286
+ .neo-menu-item:hover :global(> .neo-list-item-button .neo-list-item-content), .neo-menu-item:focus :global(> .neo-list-item-button .neo-list-item-content), .neo-menu-item:focus-within :global(> .neo-list-item-button .neo-list-item-content) {
190
287
  color: var(--neo-text-color-highlight);
288
+ }
289
+ .neo-menu-item:hover :global(> .neo-list-item-button .neo-list-item-description),
290
+ .neo-menu-item:hover :global(> .neo-list-item-button .neo-list-item-tags), .neo-menu-item:focus :global(> .neo-list-item-button .neo-list-item-description),
291
+ .neo-menu-item:focus :global(> .neo-list-item-button .neo-list-item-tags), .neo-menu-item:focus-within :global(> .neo-list-item-button .neo-list-item-description),
292
+ .neo-menu-item:focus-within :global(> .neo-list-item-button .neo-list-item-tags) {
293
+ color: var(--neo-text-color-secondary-highlight);
294
+ }
295
+ .neo-menu-item.neo-section {
296
+ padding: 0;
297
+ }
298
+ .neo-menu-item-section {
299
+ display: flex;
300
+ flex-direction: column;
301
+ }
302
+ .neo-menu-item-section-label {
303
+ display: inline-flex;
304
+ width: 100%;
305
+ padding: 0.25rem 0.6125rem;
306
+ transition: color 0.3s ease;
307
+ margin-block-end: 0.125rem;
308
+ }
309
+ .neo-menu-item-section-label.neo-sticky {
310
+ position: sticky;
311
+ top: -0.5rem;
312
+ z-index: var(--neo-z-index-in-front, 1);
313
+ background: var(--neo-list-section-bg-color, linear-gradient(to top, transparent 5%, oklch(from var(--neo-background-color) l c h/50%) 20%, var(--neo-background-color)));
314
+ }
315
+ .neo-menu-item-section-label.neo-reverse {
316
+ justify-content: flex-end;
317
+ text-align: end;
318
+ }
319
+ @supports not ((hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none)) {
320
+ .neo-menu-item-section.neo-flip {
321
+ flex-direction: column-reverse;
322
+ justify-content: end;
323
+ }
191
324
  }</style>
@@ -1,4 +1,5 @@
1
1
  import type { NeoMenuListItemProps } from './neo-menu-list-item.model.js';
2
+ import NeoMenuListItem from './NeoMenuListItem.svelte';
2
3
  declare const NeoMenuListItem: import("svelte").Component<NeoMenuListItemProps, {}, "ref" | "open" | "tooltipRef">;
3
4
  type NeoMenuListItem = ReturnType<typeof NeoMenuListItem>;
4
5
  export default NeoMenuListItem;
@@ -1,2 +1,3 @@
1
1
  export { default as NeoMenu } from './NeoMenu.svelte';
2
+ export type { NeoMenuContext, NeoMenuItem } from './neo-menu-list-item.model.js';
2
3
  export type * from './neo-menu.model.js';
@@ -1,21 +1,27 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { NeoButtonProps } from '../../buttons/neo-button.model.js';
3
+ import type { NeoDividerProps } from '../../divider/neo-divider.model.js';
3
4
  import type { NeoMenuListProps } from './neo-menu-list.model.js';
4
5
  import type { NeoTooltipProps } from '../tooltips/neo-tooltip.model.js';
5
6
  import type { NeoListBaseItemProps } from '../../list/neo-list-base-item.model.js';
6
7
  import type { NeoBaseListItem } from '../../list/neo-list.model.js';
8
+ import type { BorderRadiusInput } from '../../utils/border.utils.js';
7
9
  import type { HTMLNeoBaseElement, SvelteEvent } from '../../utils/html-element.utils.js';
8
- export type NeoMenuItem<Value = unknown, Tag extends keyof HTMLElementTagNameMap = 'li'> = Omit<NeoBaseListItem<Value, Tag, NeoMenuContext<Value, Tag>>, 'containerProps'> & {
10
+ export interface NeoMenuItem<Value = unknown, Tag extends keyof HTMLElementTagNameMap = 'li'> extends Omit<NeoBaseListItem<Value, Tag, NeoMenuContext<Value, Tag>>, 'containerProps'>, Pick<NeoMenuListItemProps, 'tooltipProps' | 'baseProps'> {
9
11
  /**
10
12
  * If true, children items will be rendered as list items instead of a nested dropdown menu.
11
13
  *
12
14
  * @default false
13
15
  */
14
- section?: string;
16
+ section?: boolean;
15
17
  /**
16
18
  * If true, the menu section label will be sticky on scroll.
17
19
  */
18
20
  sticky?: boolean;
21
+ /**
22
+ * If true, the menu will stay open when the item is selected.
23
+ */
24
+ keepOpenOnSelect?: boolean;
19
25
  /**
20
26
  * The nested menu items.
21
27
  */
@@ -28,30 +34,34 @@ export type NeoMenuItem<Value = unknown, Tag extends keyof HTMLElementTagNameMap
28
34
  * Optional props to pass to the base list item.
29
35
  */
30
36
  itemProps?: Pick<NeoBaseListItem<Value, Tag, NeoMenuContext<Value, Tag>>, 'containerProps'>;
31
- } & Pick<NeoMenuListItemProps, 'tooltipProps' | 'baseProps'>;
37
+ }
32
38
  export interface NeoMenuContext<Value = unknown, Tag extends keyof HTMLElementTagNameMap = 'li'> {
33
39
  /**
34
40
  * The item itself.
35
41
  */
36
42
  item: NeoMenuItem<Value, Tag>;
43
+ /**
44
+ * The parent item (if any).
45
+ */
46
+ parent?: NeoMenuItem<Value, Tag>;
47
+ /**
48
+ * The array of items this item belongs to.
49
+ */
50
+ array?: NeoMenuItem<Value, Tag>[];
37
51
  /**
38
52
  * The index of the item in the menu.
39
53
  */
40
54
  index: number;
41
55
  /**
42
- * The length of the parent menu list.
56
+ * The index of the parent section in the menu (if any).
43
57
  */
44
- length: number;
58
+ sectionIndex?: number;
45
59
  /**
46
60
  * The nested level of the menu.
47
61
  *
48
62
  * @default 1
49
63
  */
50
64
  level?: number;
51
- /**
52
- * The parent item (if any).
53
- */
54
- parent?: NeoMenuItem<Value, Tag>;
55
65
  /**
56
66
  * Whether the item nested menu is open (if any).
57
67
  */
@@ -89,6 +99,12 @@ export type NeoMenuListItemProps<Value = unknown, Tag extends keyof HTMLElementT
89
99
  * @default 'li'
90
100
  */
91
101
  tag?: Tag;
102
+ /**
103
+ * The tag name of the menu element.
104
+ *
105
+ * @default 'ul'
106
+ */
107
+ menuTag?: keyof HTMLElementTagNameMap;
92
108
  /**
93
109
  * The reference to the tooltip element.
94
110
  */
@@ -106,7 +122,28 @@ export type NeoMenuListItemProps<Value = unknown, Tag extends keyof HTMLElementT
106
122
  /**
107
123
  * If true, the menu & items will be rounded.
108
124
  */
109
- rounded?: boolean;
125
+ rounded?: BorderRadiusInput;
126
+ /**
127
+ * Reverse the direction of the item.
128
+ *
129
+ * @default false
130
+ */
131
+ reverse?: boolean;
132
+ /**
133
+ * Whether to display a divider above items in the list.
134
+ * If an item divider option is set, it will take precedence over the list divider.
135
+ *
136
+ * @default false
137
+ */
138
+ divider?: boolean;
139
+ /**
140
+ * Reverse the next/previous focusable sibling selection direction using arrow keys.
141
+ */
142
+ flip?: boolean;
143
+ /**
144
+ * Optional props to pass to the divider (if any.
145
+ */
146
+ dividerProps?: Partial<NeoDividerProps>;
110
147
  /**
111
148
  * Optional props to pass to the tooltip (if any).
112
149
  */
@@ -123,4 +160,4 @@ export type NeoMenuListItemProps<Value = unknown, Tag extends keyof HTMLElementT
123
160
  * Optional props to pass to the button.
124
161
  */
125
162
  buttonProps?: NeoButtonProps;
126
- } & Pick<NeoMenuContext<Value, Tag>, 'item' | 'index' | 'length' | 'level' | 'parent' | 'open' | 'keepOpenOnSelect' | 'onMenu' | 'onSelect'> & Omit<HTMLNeoBaseElement<HTMLElementTagNameMap[Tag]>, 'children'>;
163
+ } & Pick<NeoMenuContext<Value, Tag>, 'item' | 'parent' | 'array' | 'index' | 'sectionIndex' | 'level' | 'parent' | 'open' | 'keepOpenOnSelect' | 'onMenu' | 'onSelect'> & Omit<HTMLNeoBaseElement<HTMLElementTagNameMap[Tag]>, 'children'>;
@@ -1,5 +1,6 @@
1
1
  import type { NeoDividerProps } from '../../divider/neo-divider.model.js';
2
2
  import type { NeoMenuItem, NeoMenuListItemProps } from './neo-menu-list-item.model.js';
3
+ import type { BorderRadiusInput } from '../../utils/border.utils.js';
3
4
  import type { HTMLNeoBaseElement } from '../../utils/html-element.utils.js';
4
5
  export type NeoMenuListProps<Value = unknown, Tag extends keyof HTMLElementTagNameMap = 'ul'> = {
5
6
  /**
@@ -11,7 +12,7 @@ export type NeoMenuListProps<Value = unknown, Tag extends keyof HTMLElementTagNa
11
12
  *
12
13
  * @default 'ul'
13
14
  */
14
- tag?: Tag;
15
+ tag?: Tag | keyof HTMLElementTagNameMap;
15
16
  /**
16
17
  * The parent item (if any).
17
18
  */
@@ -43,19 +44,38 @@ export type NeoMenuListProps<Value = unknown, Tag extends keyof HTMLElementTagNa
43
44
  /**
44
45
  * If true, the menu will be rounded.
45
46
  */
46
- rounded?: boolean;
47
+ rounded?: BorderRadiusInput;
48
+ /**
49
+ * Reverse the direction of the item.
50
+ *
51
+ * @default false
52
+ */
53
+ reverse?: boolean;
54
+ /**
55
+ * Whether to display a divider above items in the list.
56
+ * If an item divider option is set, it will take precedence over the list divider.
57
+ *
58
+ * @default false
59
+ */
60
+ divider?: boolean;
61
+ /**
62
+ * Inverts the flow of the list (flex-direction: column-reverse).
63
+ *
64
+ * @default false
65
+ */
66
+ flip?: boolean;
47
67
  /**
48
68
  * Event handler for when a menu item with a nested menu is clicked.
49
69
  * @param item - The menu item that was clicked.
50
70
  * @param e - The pointer event.
51
71
  */
52
- onMenu: NeoMenuListItemProps<Value>['onMenu'];
72
+ onMenu?: NeoMenuListItemProps<Value>['onMenu'];
53
73
  /**
54
74
  * Event handler for when a menu item without a nested menu is clicked.
55
75
  * @param item - The menu item that was clicked.
56
76
  * @param e - The pointer event.
57
77
  */
58
- onSelect: NeoMenuListItemProps<Value>['onSelect'];
78
+ onSelect?: NeoMenuListItemProps<Value>['onSelect'];
59
79
  /**
60
80
  * Optional props to pass to the tooltip (if any).
61
81
  */
@@ -8,13 +8,13 @@ export type NeoMenuProps<Value = unknown> = Omit<NeoTooltipProps, 'tooltip'> & {
8
8
  * @param item - The menu item that was clicked.
9
9
  * @param e - The pointer event.
10
10
  */
11
- onMenu: NeoMenuListProps<Value>['onMenu'];
11
+ onMenu?: NeoMenuListProps<Value>['onMenu'];
12
12
  /**
13
13
  * Event handler for when a menu item without a nested menu is clicked.
14
14
  * @param item - The menu item that was clicked.
15
15
  * @param e - The pointer event.
16
16
  */
17
- onSelect: NeoMenuListProps<Value>['onSelect'];
17
+ onSelect?: NeoMenuListProps<Value>['onSelect'];
18
18
  /**
19
19
  * If true, the menu will stay open when the item is selected.
20
20
  */
@@ -39,4 +39,4 @@ export type NeoMenuProps<Value = unknown> = Omit<NeoTooltipProps, 'tooltip'> & {
39
39
  * Optional props to pass to the divider.
40
40
  */
41
41
  dividerProps?: NeoMenuListProps<Value>['dividerProps'];
42
- } & Pick<NeoMenuListProps<Value>, 'shadow' | 'scrollbar' | 'rounded'>;
42
+ } & Pick<NeoMenuListProps<Value>, 'shadow' | 'scrollbar' | 'rounded' | 'reverse' | 'flip'>;