@kapiuara/ui 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +764 -2
  3. package/dist/components/data/KapiPagination.d.ts +36 -0
  4. package/dist/components/data/KapiPagination.js +102 -0
  5. package/dist/components/data/KapiTable.d.ts +245 -0
  6. package/dist/components/data/KapiTable.js +748 -0
  7. package/dist/components/data/KapiTableFilter.d.ts +48 -0
  8. package/dist/components/data/KapiTableFilter.js +81 -0
  9. package/dist/components/data/index.d.ts +10 -0
  10. package/dist/components/data/tableLogic.d.ts +197 -0
  11. package/dist/components/data/tableLogic.js +145 -0
  12. package/dist/components/data/tableResizeLogic.d.ts +28 -0
  13. package/dist/components/data/tableResizeLogic.js +20 -0
  14. package/dist/components/display/KapiAnnotation.d.ts +32 -0
  15. package/dist/components/display/KapiAnnotation.js +130 -0
  16. package/dist/components/display/KapiAvatar.d.ts +27 -0
  17. package/dist/components/display/KapiAvatar.js +43 -0
  18. package/dist/components/display/KapiAvatarGroup.d.ts +19 -0
  19. package/dist/components/display/KapiAvatarGroup.js +38 -0
  20. package/dist/components/display/KapiBadge.d.ts +21 -0
  21. package/dist/components/display/KapiBadge.js +28 -0
  22. package/dist/components/display/KapiComment.d.ts +27 -0
  23. package/dist/components/display/KapiComment.js +66 -0
  24. package/dist/components/display/KapiCommentComposer.d.ts +49 -0
  25. package/dist/components/display/KapiCommentComposer.js +76 -0
  26. package/dist/components/display/KapiDescriptionList.d.ts +19 -0
  27. package/dist/components/display/KapiDescriptionList.js +35 -0
  28. package/dist/components/display/KapiFileItem.d.ts +39 -0
  29. package/dist/components/display/KapiFileItem.js +74 -0
  30. package/dist/components/display/KapiFileViewer.d.ts +51 -0
  31. package/dist/components/display/KapiFileViewer.js +107 -0
  32. package/dist/components/display/KapiIconTile.d.ts +16 -0
  33. package/dist/components/display/KapiIconTile.js +29 -0
  34. package/dist/components/display/KapiStat.d.ts +24 -0
  35. package/dist/components/display/KapiStat.js +41 -0
  36. package/dist/components/display/KapiTag.d.ts +27 -0
  37. package/dist/components/display/KapiTag.js +44 -0
  38. package/dist/components/display/KapiTimeline.d.ts +15 -0
  39. package/dist/components/display/KapiTimeline.js +30 -0
  40. package/dist/components/display/annotationLogic.d.ts +26 -0
  41. package/dist/components/display/annotationLogic.js +17 -0
  42. package/dist/components/display/avatarGroupLogic.d.ts +14 -0
  43. package/dist/components/display/avatarGroupLogic.js +13 -0
  44. package/dist/components/display/avatarLogic.d.ts +5 -0
  45. package/dist/components/display/avatarLogic.js +9 -0
  46. package/dist/components/display/commentLogic.d.ts +18 -0
  47. package/dist/components/display/commentLogic.js +7 -0
  48. package/dist/components/display/fileItemLogic.d.ts +9 -0
  49. package/dist/components/display/fileItemLogic.js +12 -0
  50. package/dist/components/display/iconTileLogic.d.ts +13 -0
  51. package/dist/components/display/iconTileLogic.js +13 -0
  52. package/dist/components/display/index.d.ts +40 -0
  53. package/dist/components/display/statLogic.d.ts +10 -0
  54. package/dist/components/display/statLogic.js +10 -0
  55. package/dist/components/display/tagLogic.d.ts +11 -0
  56. package/dist/components/display/tagLogic.js +10 -0
  57. package/dist/components/display/timelineLogic.d.ts +5 -0
  58. package/dist/components/display/timelineLogic.js +4 -0
  59. package/dist/components/feedback/KapiAlert.d.ts +28 -0
  60. package/dist/components/feedback/KapiAlert.js +53 -0
  61. package/dist/components/feedback/KapiBulkBar.d.ts +30 -0
  62. package/dist/components/feedback/KapiBulkBar.js +34 -0
  63. package/dist/components/feedback/KapiCountdown.d.ts +26 -0
  64. package/dist/components/feedback/KapiCountdown.js +43 -0
  65. package/dist/components/feedback/KapiEmpty.d.ts +14 -0
  66. package/dist/components/feedback/KapiEmpty.js +31 -0
  67. package/dist/components/feedback/KapiFab.d.ts +34 -0
  68. package/dist/components/feedback/KapiFab.js +116 -0
  69. package/dist/components/feedback/KapiOfflineBanner.d.ts +25 -0
  70. package/dist/components/feedback/KapiOfflineBanner.js +40 -0
  71. package/dist/components/feedback/KapiProgress.d.ts +24 -0
  72. package/dist/components/feedback/KapiProgress.js +94 -0
  73. package/dist/components/feedback/KapiSkeleton.d.ts +12 -0
  74. package/dist/components/feedback/KapiSkeleton.js +16 -0
  75. package/dist/components/feedback/KapiToastContainer.d.ts +16 -0
  76. package/dist/components/feedback/KapiToastContainer.js +81 -0
  77. package/dist/components/feedback/KapiTour.d.ts +40 -0
  78. package/dist/components/feedback/KapiTour.js +157 -0
  79. package/dist/components/feedback/KapiUnsavedBar.d.ts +35 -0
  80. package/dist/components/feedback/KapiUnsavedBar.js +47 -0
  81. package/dist/components/feedback/bulkBarLogic.d.ts +2 -0
  82. package/dist/components/feedback/bulkBarLogic.js +7 -0
  83. package/dist/components/feedback/countdownLogic.d.ts +74 -0
  84. package/dist/components/feedback/countdownLogic.js +70 -0
  85. package/dist/components/feedback/fabLogic.d.ts +17 -0
  86. package/dist/components/feedback/fabLogic.js +10 -0
  87. package/dist/components/feedback/index.d.ts +33 -0
  88. package/dist/components/feedback/offlineBannerLogic.d.ts +10 -0
  89. package/dist/components/feedback/offlineBannerLogic.js +8 -0
  90. package/dist/components/feedback/progressLogic.d.ts +17 -0
  91. package/dist/components/feedback/progressLogic.js +16 -0
  92. package/dist/components/feedback/toastStore.d.ts +62 -0
  93. package/dist/components/feedback/toastStore.js +38 -0
  94. package/dist/components/feedback/tourLogic.d.ts +64 -0
  95. package/dist/components/feedback/tourLogic.js +31 -0
  96. package/dist/components/feedback/unsavedBarLogic.d.ts +2 -0
  97. package/dist/components/feedback/unsavedBarLogic.js +8 -0
  98. package/dist/components/inputs/KapiAutocomplete.d.ts +81 -0
  99. package/dist/components/inputs/KapiAutocomplete.js +205 -0
  100. package/dist/components/inputs/KapiButton.d.ts +23 -0
  101. package/dist/components/inputs/KapiButton.js +25 -0
  102. package/dist/components/inputs/KapiCalendar.d.ts +35 -0
  103. package/dist/components/inputs/KapiCalendar.js +60 -0
  104. package/dist/components/inputs/KapiCalendarGrid.d.ts +29 -0
  105. package/dist/components/inputs/KapiCalendarGrid.js +65 -0
  106. package/dist/components/inputs/KapiCheckCard.d.ts +28 -0
  107. package/dist/components/inputs/KapiCheckCard.js +41 -0
  108. package/dist/components/inputs/KapiCheckbox.d.ts +7 -0
  109. package/dist/components/inputs/KapiCheckbox.js +5 -0
  110. package/dist/components/inputs/KapiDatePicker.d.ts +46 -0
  111. package/dist/components/inputs/KapiDatePicker.js +189 -0
  112. package/dist/components/inputs/KapiDateRangePicker.d.ts +49 -0
  113. package/dist/components/inputs/KapiDateRangePicker.js +179 -0
  114. package/dist/components/inputs/KapiFacetedSearch.d.ts +45 -0
  115. package/dist/components/inputs/KapiFacetedSearch.js +188 -0
  116. package/dist/components/inputs/KapiField.d.ts +33 -0
  117. package/dist/components/inputs/KapiField.js +60 -0
  118. package/dist/components/inputs/KapiFileUpload.d.ts +58 -0
  119. package/dist/components/inputs/KapiFileUpload.js +134 -0
  120. package/dist/components/inputs/KapiIconButton.d.ts +13 -0
  121. package/dist/components/inputs/KapiIconButton.js +16 -0
  122. package/dist/components/inputs/KapiInput.d.ts +92 -0
  123. package/dist/components/inputs/KapiInput.js +123 -0
  124. package/dist/components/inputs/KapiInputGroup.d.ts +37 -0
  125. package/dist/components/inputs/KapiInputGroup.js +29 -0
  126. package/dist/components/inputs/KapiMaskedInput.d.ts +52 -0
  127. package/dist/components/inputs/KapiMaskedInput.js +78 -0
  128. package/dist/components/inputs/KapiNumberStepper.d.ts +44 -0
  129. package/dist/components/inputs/KapiNumberStepper.js +100 -0
  130. package/dist/components/inputs/KapiRadio.d.ts +7 -0
  131. package/dist/components/inputs/KapiRadio.js +5 -0
  132. package/dist/components/inputs/KapiRating.d.ts +55 -0
  133. package/dist/components/inputs/KapiRating.js +99 -0
  134. package/dist/components/inputs/KapiSegmented.d.ts +41 -0
  135. package/dist/components/inputs/KapiSegmented.js +83 -0
  136. package/dist/components/inputs/KapiSelect.d.ts +109 -0
  137. package/dist/components/inputs/KapiSelect.js +443 -0
  138. package/dist/components/inputs/KapiSlider.d.ts +42 -0
  139. package/dist/components/inputs/KapiSlider.js +70 -0
  140. package/dist/components/inputs/KapiSwitch.d.ts +13 -0
  141. package/dist/components/inputs/KapiSwitch.js +28 -0
  142. package/dist/components/inputs/KapiTagInput.d.ts +79 -0
  143. package/dist/components/inputs/KapiTagInput.js +115 -0
  144. package/dist/components/inputs/KapiTextarea.d.ts +32 -0
  145. package/dist/components/inputs/KapiTextarea.js +67 -0
  146. package/dist/components/inputs/asyncSelectLogic.d.ts +42 -0
  147. package/dist/components/inputs/asyncSelectLogic.js +46 -0
  148. package/dist/components/inputs/autocompleteLogic.d.ts +73 -0
  149. package/dist/components/inputs/autocompleteLogic.js +67 -0
  150. package/dist/components/inputs/checkControl.d.ts +20 -0
  151. package/dist/components/inputs/checkControl.js +31 -0
  152. package/dist/components/inputs/datePickerLogic.d.ts +92 -0
  153. package/dist/components/inputs/datePickerLogic.js +174 -0
  154. package/dist/components/inputs/dateRangeLogic.d.ts +31 -0
  155. package/dist/components/inputs/dateRangeLogic.js +44 -0
  156. package/dist/components/inputs/facetedSearchLogic.d.ts +69 -0
  157. package/dist/components/inputs/facetedSearchLogic.js +39 -0
  158. package/dist/components/inputs/fieldLogic.d.ts +67 -0
  159. package/dist/components/inputs/fieldLogic.js +35 -0
  160. package/dist/components/inputs/fileUploadLogic.d.ts +13 -0
  161. package/dist/components/inputs/fileUploadLogic.js +9 -0
  162. package/dist/components/inputs/index.d.ts +55 -0
  163. package/dist/components/inputs/inputGroupLogic.d.ts +22 -0
  164. package/dist/components/inputs/inputGroupLogic.js +9 -0
  165. package/dist/components/inputs/inputLogic.d.ts +25 -0
  166. package/dist/components/inputs/inputLogic.js +10 -0
  167. package/dist/components/inputs/maskLogic.d.ts +34 -0
  168. package/dist/components/inputs/maskLogic.js +57 -0
  169. package/dist/components/inputs/numberStepLogic.d.ts +14 -0
  170. package/dist/components/inputs/numberStepLogic.js +21 -0
  171. package/dist/components/inputs/ratingLogic.d.ts +9 -0
  172. package/dist/components/inputs/ratingLogic.js +22 -0
  173. package/dist/components/inputs/segmentedLogic.d.ts +6 -0
  174. package/dist/components/inputs/segmentedLogic.js +14 -0
  175. package/dist/components/inputs/selectLogic.d.ts +89 -0
  176. package/dist/components/inputs/selectLogic.js +82 -0
  177. package/dist/components/inputs/sliderLogic.d.ts +9 -0
  178. package/dist/components/inputs/sliderLogic.js +17 -0
  179. package/dist/components/inputs/tagInputLogic.d.ts +40 -0
  180. package/dist/components/inputs/tagInputLogic.js +40 -0
  181. package/dist/components/inputs/textareaLogic.d.ts +17 -0
  182. package/dist/components/inputs/textareaLogic.js +13 -0
  183. package/dist/components/inputs/useCalendarFocus.d.ts +13 -0
  184. package/dist/components/inputs/useCalendarFocus.js +25 -0
  185. package/dist/components/inputs/useDatePopSide.d.ts +15 -0
  186. package/dist/components/inputs/useDatePopSide.js +20 -0
  187. package/dist/components/labelsLogic.d.ts +6 -0
  188. package/dist/components/labelsLogic.js +11 -0
  189. package/dist/components/layout/KapiAccessCard.d.ts +40 -0
  190. package/dist/components/layout/KapiAccessCard.js +66 -0
  191. package/dist/components/layout/KapiAccountMenu.d.ts +61 -0
  192. package/dist/components/layout/KapiAccountMenu.js +212 -0
  193. package/dist/components/layout/KapiCard.d.ts +43 -0
  194. package/dist/components/layout/KapiCard.js +53 -0
  195. package/dist/components/layout/KapiCluster.d.ts +15 -0
  196. package/dist/components/layout/KapiCluster.js +21 -0
  197. package/dist/components/layout/KapiContextSlot.d.ts +45 -0
  198. package/dist/components/layout/KapiContextSlot.js +92 -0
  199. package/dist/components/layout/KapiDivider.d.ts +16 -0
  200. package/dist/components/layout/KapiDivider.js +41 -0
  201. package/dist/components/layout/KapiGrid.d.ts +19 -0
  202. package/dist/components/layout/KapiGrid.js +25 -0
  203. package/dist/components/layout/KapiNotificationBell.d.ts +75 -0
  204. package/dist/components/layout/KapiNotificationBell.js +196 -0
  205. package/dist/components/layout/KapiPageHeader.d.ts +28 -0
  206. package/dist/components/layout/KapiPageHeader.js +47 -0
  207. package/dist/components/layout/KapiPanelParts.d.ts +35 -0
  208. package/dist/components/layout/KapiPanelParts.js +63 -0
  209. package/dist/components/layout/KapiRail.d.ts +40 -0
  210. package/dist/components/layout/KapiRail.js +102 -0
  211. package/dist/components/layout/KapiScrollArea.d.ts +40 -0
  212. package/dist/components/layout/KapiScrollArea.js +49 -0
  213. package/dist/components/layout/KapiShell.d.ts +40 -0
  214. package/dist/components/layout/KapiShell.js +48 -0
  215. package/dist/components/layout/KapiStack.d.ts +11 -0
  216. package/dist/components/layout/KapiStack.js +19 -0
  217. package/dist/components/layout/accessCardLogic.d.ts +18 -0
  218. package/dist/components/layout/accessCardLogic.js +11 -0
  219. package/dist/components/layout/cardLogic.d.ts +9 -0
  220. package/dist/components/layout/cardLogic.js +11 -0
  221. package/dist/components/layout/index.d.ts +33 -0
  222. package/dist/components/layout/layoutPrimitives.d.ts +51 -0
  223. package/dist/components/layout/layoutPrimitives.js +58 -0
  224. package/dist/components/layout/notificationBellLogic.d.ts +20 -0
  225. package/dist/components/layout/notificationBellLogic.js +14 -0
  226. package/dist/components/layout/railLogic.d.ts +52 -0
  227. package/dist/components/layout/railLogic.js +16 -0
  228. package/dist/components/locale/KapiLocaleProvider.d.ts +29 -0
  229. package/dist/components/locale/KapiLocaleProvider.js +27 -0
  230. package/dist/components/locale/index.d.ts +5 -0
  231. package/dist/components/locale/labelRegistry.d.ts +110 -0
  232. package/dist/components/locale/linkLabels.d.ts +6 -0
  233. package/dist/components/locale/linkLabels.js +4 -0
  234. package/dist/components/navigation/CtxSlidingList.d.ts +11 -0
  235. package/dist/components/navigation/CtxSlidingList.js +24 -0
  236. package/dist/components/navigation/KapiAccordion.d.ts +24 -0
  237. package/dist/components/navigation/KapiAccordion.js +68 -0
  238. package/dist/components/navigation/KapiBreadcrumb.d.ts +23 -0
  239. package/dist/components/navigation/KapiBreadcrumb.js +32 -0
  240. package/dist/components/navigation/KapiCollapsiblePanel.d.ts +63 -0
  241. package/dist/components/navigation/KapiCollapsiblePanel.js +83 -0
  242. package/dist/components/navigation/KapiContextPanel.d.ts +117 -0
  243. package/dist/components/navigation/KapiContextPanel.js +265 -0
  244. package/dist/components/navigation/KapiFilterChips.d.ts +30 -0
  245. package/dist/components/navigation/KapiFilterChips.js +40 -0
  246. package/dist/components/navigation/KapiNavBadge.d.ts +26 -0
  247. package/dist/components/navigation/KapiNavBadge.js +33 -0
  248. package/dist/components/navigation/KapiPanelGroup.d.ts +69 -0
  249. package/dist/components/navigation/KapiPanelGroup.js +149 -0
  250. package/dist/components/navigation/KapiSteps.d.ts +43 -0
  251. package/dist/components/navigation/KapiSteps.js +63 -0
  252. package/dist/components/navigation/KapiTabs.d.ts +56 -0
  253. package/dist/components/navigation/KapiTabs.js +81 -0
  254. package/dist/components/navigation/KapiTree.d.ts +56 -0
  255. package/dist/components/navigation/KapiTree.js +157 -0
  256. package/dist/components/navigation/KapiWizard.d.ts +49 -0
  257. package/dist/components/navigation/KapiWizard.js +104 -0
  258. package/dist/components/navigation/MiniNavItem.d.ts +35 -0
  259. package/dist/components/navigation/MiniNavItem.js +57 -0
  260. package/dist/components/navigation/accordionLogic.d.ts +4 -0
  261. package/dist/components/navigation/accordionLogic.js +4 -0
  262. package/dist/components/navigation/activeItemLogic.d.ts +7 -0
  263. package/dist/components/navigation/activeItemLogic.js +4 -0
  264. package/dist/components/navigation/breadcrumbLogic.d.ts +8 -0
  265. package/dist/components/navigation/breadcrumbLogic.js +4 -0
  266. package/dist/components/navigation/contextPanelLogic.d.ts +27 -0
  267. package/dist/components/navigation/contextPanelLogic.js +11 -0
  268. package/dist/components/navigation/filterChipsLogic.d.ts +23 -0
  269. package/dist/components/navigation/filterChipsLogic.js +20 -0
  270. package/dist/components/navigation/index.d.ts +39 -0
  271. package/dist/components/navigation/navBadgeLogic.d.ts +26 -0
  272. package/dist/components/navigation/navBadgeLogic.js +16 -0
  273. package/dist/components/navigation/panelGroupLogic.d.ts +15 -0
  274. package/dist/components/navigation/panelGroupLogic.js +13 -0
  275. package/dist/components/navigation/panelMini.d.ts +13 -0
  276. package/dist/components/navigation/panelMini.js +9 -0
  277. package/dist/components/navigation/panelMiniLogic.d.ts +19 -0
  278. package/dist/components/navigation/panelMiniLogic.js +6 -0
  279. package/dist/components/navigation/stepsLogic.d.ts +25 -0
  280. package/dist/components/navigation/stepsLogic.js +10 -0
  281. package/dist/components/navigation/tabsLogic.d.ts +12 -0
  282. package/dist/components/navigation/tabsLogic.js +14 -0
  283. package/dist/components/navigation/treeLogic.d.ts +80 -0
  284. package/dist/components/navigation/treeLogic.js +91 -0
  285. package/dist/components/navigation/wizardLogic.d.ts +11 -0
  286. package/dist/components/navigation/wizardLogic.js +7 -0
  287. package/dist/components/overlays/KapiCanvasForm.d.ts +42 -0
  288. package/dist/components/overlays/KapiCanvasForm.js +60 -0
  289. package/dist/components/overlays/KapiCommandPalette.d.ts +58 -0
  290. package/dist/components/overlays/KapiCommandPalette.js +152 -0
  291. package/dist/components/overlays/KapiConfirm.d.ts +48 -0
  292. package/dist/components/overlays/KapiConfirm.js +94 -0
  293. package/dist/components/overlays/KapiContextMenu.d.ts +51 -0
  294. package/dist/components/overlays/KapiContextMenu.js +90 -0
  295. package/dist/components/overlays/KapiDialogHost.d.ts +23 -0
  296. package/dist/components/overlays/KapiDialogHost.js +129 -0
  297. package/dist/components/overlays/KapiDropdown.d.ts +30 -0
  298. package/dist/components/overlays/KapiDropdown.js +84 -0
  299. package/dist/components/overlays/KapiLoading.d.ts +14 -0
  300. package/dist/components/overlays/KapiLoading.js +43 -0
  301. package/dist/components/overlays/KapiMenuButton.d.ts +25 -0
  302. package/dist/components/overlays/KapiMenuButton.js +109 -0
  303. package/dist/components/overlays/KapiModal.d.ts +61 -0
  304. package/dist/components/overlays/KapiModal.js +106 -0
  305. package/dist/components/overlays/KapiOffcanvas.d.ts +96 -0
  306. package/dist/components/overlays/KapiOffcanvas.js +209 -0
  307. package/dist/components/overlays/KapiOffcanvasStack.d.ts +58 -0
  308. package/dist/components/overlays/KapiOffcanvasStack.js +84 -0
  309. package/dist/components/overlays/KapiPhotoView.d.ts +60 -0
  310. package/dist/components/overlays/KapiPhotoView.js +122 -0
  311. package/dist/components/overlays/KapiPopover.d.ts +46 -0
  312. package/dist/components/overlays/KapiPopover.js +68 -0
  313. package/dist/components/overlays/KapiShapeSheet.d.ts +34 -0
  314. package/dist/components/overlays/KapiShapeSheet.js +82 -0
  315. package/dist/components/overlays/KapiSplitModal.d.ts +41 -0
  316. package/dist/components/overlays/KapiSplitModal.js +125 -0
  317. package/dist/components/overlays/KapiTooltip.d.ts +38 -0
  318. package/dist/components/overlays/KapiTooltip.js +105 -0
  319. package/dist/components/overlays/canvasFormLogic.d.ts +18 -0
  320. package/dist/components/overlays/canvasFormLogic.js +16 -0
  321. package/dist/components/overlays/commandPaletteLogic.d.ts +29 -0
  322. package/dist/components/overlays/commandPaletteLogic.js +19 -0
  323. package/dist/components/overlays/dialogStore.d.ts +114 -0
  324. package/dist/components/overlays/dialogStore.js +76 -0
  325. package/dist/components/overlays/dialogUtils.d.ts +72 -0
  326. package/dist/components/overlays/dialogUtils.js +62 -0
  327. package/dist/components/overlays/exitPresenceLogic.d.ts +14 -0
  328. package/dist/components/overlays/exitPresenceLogic.js +5 -0
  329. package/dist/components/overlays/index.d.ts +38 -0
  330. package/dist/components/overlays/menuButtonLogic.d.ts +58 -0
  331. package/dist/components/overlays/menuButtonLogic.js +9 -0
  332. package/dist/components/overlays/menuKeyboardLogic.d.ts +25 -0
  333. package/dist/components/overlays/menuKeyboardLogic.js +30 -0
  334. package/dist/components/overlays/offcanvasCompanion.d.ts +16 -0
  335. package/dist/components/overlays/offcanvasCompanion.js +6 -0
  336. package/dist/components/overlays/offcanvasResize.d.ts +22 -0
  337. package/dist/components/overlays/offcanvasResize.js +10 -0
  338. package/dist/components/overlays/offcanvasSide.d.ts +30 -0
  339. package/dist/components/overlays/offcanvasSide.js +29 -0
  340. package/dist/components/overlays/offcanvasStack.d.ts +76 -0
  341. package/dist/components/overlays/offcanvasStack.js +72 -0
  342. package/dist/components/overlays/overlayPortal.d.ts +9 -0
  343. package/dist/components/overlays/overlayPortal.js +6 -0
  344. package/dist/components/overlays/popoverLogic.d.ts +94 -0
  345. package/dist/components/overlays/popoverLogic.js +47 -0
  346. package/dist/components/overlays/splitModalLayout.d.ts +8 -0
  347. package/dist/components/overlays/splitModalLayout.js +5 -0
  348. package/dist/components/overlays/useExitPresence.d.ts +14 -0
  349. package/dist/components/overlays/useExitPresence.js +34 -0
  350. package/dist/components/overlays/useNativeDialog.d.ts +30 -0
  351. package/dist/components/overlays/useNativeDialog.js +56 -0
  352. package/dist/components/rootProps.d.ts +17 -0
  353. package/dist/components/rootProps.js +4 -0
  354. package/dist/hooks/breakpointOpenLogic.d.ts +7 -0
  355. package/dist/hooks/breakpointOpenLogic.js +4 -0
  356. package/dist/hooks/dateFormat.d.ts +12 -0
  357. package/dist/hooks/dateFormat.js +15 -0
  358. package/dist/hooks/downloadLogic.d.ts +31 -0
  359. package/dist/hooks/downloadLogic.js +85 -0
  360. package/dist/hooks/focusLogic.d.ts +18 -0
  361. package/dist/hooks/focusLogic.js +17 -0
  362. package/dist/hooks/growOriginLogic.d.ts +22 -0
  363. package/dist/hooks/growOriginLogic.js +10 -0
  364. package/dist/hooks/hotkeyLogic.d.ts +22 -0
  365. package/dist/hooks/hotkeyLogic.js +32 -0
  366. package/dist/hooks/index.d.ts +49 -0
  367. package/dist/hooks/kapiRoot.d.ts +16 -0
  368. package/dist/hooks/kapiRoot.js +9 -0
  369. package/dist/hooks/onlineStatusLogic.d.ts +31 -0
  370. package/dist/hooks/onlineStatusLogic.js +28 -0
  371. package/dist/hooks/persistentStateLogic.d.ts +12 -0
  372. package/dist/hooks/persistentStateLogic.js +17 -0
  373. package/dist/hooks/rafThrottle.d.ts +33 -0
  374. package/dist/hooks/rafThrottle.js +33 -0
  375. package/dist/hooks/recentLogic.d.ts +9 -0
  376. package/dist/hooks/recentLogic.js +10 -0
  377. package/dist/hooks/reducedMotion.d.ts +13 -0
  378. package/dist/hooks/reducedMotion.js +5 -0
  379. package/dist/hooks/rightClick.d.ts +37 -0
  380. package/dist/hooks/rightClick.js +30 -0
  381. package/dist/hooks/scrollCollapseLogic.d.ts +12 -0
  382. package/dist/hooks/scrollCollapseLogic.js +4 -0
  383. package/dist/hooks/scrollEdgesLogic.d.ts +49 -0
  384. package/dist/hooks/scrollEdgesLogic.js +19 -0
  385. package/dist/hooks/slidingIndicatorLogic.d.ts +25 -0
  386. package/dist/hooks/slidingIndicatorLogic.js +15 -0
  387. package/dist/hooks/storageLogic.d.ts +15 -0
  388. package/dist/hooks/storageLogic.js +24 -0
  389. package/dist/hooks/unsavedGuardLogic.d.ts +17 -0
  390. package/dist/hooks/unsavedGuardLogic.js +17 -0
  391. package/dist/hooks/useDragScroll.d.ts +12 -0
  392. package/dist/hooks/useDragScroll.js +32 -0
  393. package/dist/hooks/useGlobalRightClick.d.ts +14 -0
  394. package/dist/hooks/useGlobalRightClick.js +35 -0
  395. package/dist/hooks/useGrowOrigin.d.ts +13 -0
  396. package/dist/hooks/useGrowOrigin.js +16 -0
  397. package/dist/hooks/useHotkey.d.ts +15 -0
  398. package/dist/hooks/useHotkey.js +31 -0
  399. package/dist/hooks/useKapiTheme.d.ts +69 -0
  400. package/dist/hooks/useKapiTheme.js +88 -0
  401. package/dist/hooks/useMediaQuery.d.ts +6 -0
  402. package/dist/hooks/useMediaQuery.js +13 -0
  403. package/dist/hooks/useObjectUrl.d.ts +6 -0
  404. package/dist/hooks/useObjectUrl.js +19 -0
  405. package/dist/hooks/useOnlineStatus.d.ts +7 -0
  406. package/dist/hooks/useOnlineStatus.js +7 -0
  407. package/dist/hooks/usePersistentState.d.ts +19 -0
  408. package/dist/hooks/usePersistentState.js +37 -0
  409. package/dist/hooks/usePlacement.d.ts +36 -0
  410. package/dist/hooks/usePlacement.js +84 -0
  411. package/dist/hooks/useRecent.d.ts +17 -0
  412. package/dist/hooks/useRecent.js +16 -0
  413. package/dist/hooks/useScrollCollapse.d.ts +10 -0
  414. package/dist/hooks/useScrollCollapse.js +27 -0
  415. package/dist/hooks/useScrollEdges.d.ts +32 -0
  416. package/dist/hooks/useScrollEdges.js +91 -0
  417. package/dist/hooks/useSlidingIndicator.d.ts +23 -0
  418. package/dist/hooks/useSlidingIndicator.js +51 -0
  419. package/dist/hooks/useUnsavedGuard.d.ts +70 -0
  420. package/dist/hooks/useUnsavedGuard.js +47 -0
  421. package/dist/index.d.ts +12 -0
  422. package/dist/index.js +162 -0
  423. package/dist/kapi.css +2 -0
  424. package/dist/kapi.layered.css +4 -0
  425. package/package.json +87 -4
@@ -0,0 +1,17 @@
1
+ export type FabPosition = {
2
+ x: number;
3
+ y: number;
4
+ };
5
+ export type FabSize = {
6
+ width: number;
7
+ height: number;
8
+ };
9
+ export type FabViewport = {
10
+ width: number;
11
+ height: number;
12
+ };
13
+ /** Mantiene el FAB completo dentro del viewport (con margen). Si no entra, pega arriba/izquierda. */
14
+ export declare const clampFabPosition: (pos: FabPosition, size: FabSize, viewport: FabViewport, margin?: number) => FabPosition;
15
+ /** Umbral (px, Manhattan) a partir del cual un gesto cuenta como arrastre y no como click. */
16
+ export declare const FAB_DRAG_THRESHOLD = 3;
17
+ export declare const isDragMove: (dx: number, dy: number, threshold?: number) => boolean;
@@ -0,0 +1,10 @@
1
+ //#region src/components/feedback/fabLogic.ts
2
+ var e = (e, t, n, r = 8) => {
3
+ let i = Math.max(r, n.width - t.width - r), a = Math.max(r, n.height - t.height - r);
4
+ return {
5
+ x: Math.min(Math.max(r, e.x), i),
6
+ y: Math.min(Math.max(r, e.y), a)
7
+ };
8
+ }, t = (e, t, n = 3) => Math.abs(e) + Math.abs(t) > n;
9
+ //#endregion
10
+ export { e as clampFabPosition, t as isDragMove };
@@ -0,0 +1,33 @@
1
+ export { KapiAlert, alertRole } from "./KapiAlert";
2
+ export type { KapiAlertProps, KapiAlertRole, KapiAlertVariant } from "./KapiAlert";
3
+ export { KapiToastContainer, DEFAULT_TOAST_LABELS } from "./KapiToastContainer";
4
+ export type { KapiToastContainerProps, KapiToastLabels } from "./KapiToastContainer";
5
+ export { kapiToast, toastStore, createToastStore, TOAST_ACTION_DURATION, TOAST_DEFAULT_DURATION } from "./toastStore";
6
+ export type { KapiToastAction, KapiToastItem, KapiToastOptions, KapiToastStore, KapiToastStoreOptions, KapiToastVariant } from "./toastStore";
7
+ export { KapiSkeleton } from "./KapiSkeleton";
8
+ export type { KapiSkeletonProps } from "./KapiSkeleton";
9
+ export { KapiFab, DEFAULT_FAB_LABELS } from "./KapiFab";
10
+ export type { KapiFabAction, KapiFabLabels, KapiFabPlacement, KapiFabProps } from "./KapiFab";
11
+ export { KapiTour, useKapiTour } from "./KapiTour";
12
+ export type { KapiTourLabels, KapiTourProps } from "./KapiTour";
13
+ export { TOUR_STORAGE_KEY, tourStorageKey } from "./tourLogic";
14
+ export type { TourStep } from "./tourLogic";
15
+ export { KapiProgress } from "./KapiProgress";
16
+ export type { KapiProgressProps, KapiProgressSize } from "./KapiProgress";
17
+ export { circleDash, clampPercent, formatPercent, progressClasses } from "./progressLogic";
18
+ export type { KapiProgressTone } from "./progressLogic";
19
+ export { KapiEmpty } from "./KapiEmpty";
20
+ export type { KapiEmptyProps } from "./KapiEmpty";
21
+ export { KapiCountdown } from "./KapiCountdown";
22
+ export type { KapiCountdownProps } from "./KapiCountdown";
23
+ export { KapiUnsavedBar, DEFAULT_UNSAVED_BAR_LABELS } from "./KapiUnsavedBar";
24
+ export type { KapiUnsavedBarProps, KapiUnsavedBarLabels } from "./KapiUnsavedBar";
25
+ export { KapiBulkBar, DEFAULT_BULK_BAR_LABELS } from "./KapiBulkBar";
26
+ export type { KapiBulkBarProps, KapiBulkBarLabels } from "./KapiBulkBar";
27
+ export { selectedCountLabel } from "./bulkBarLogic";
28
+ export { KapiOfflineBanner, DEFAULT_OFFLINE_BANNER_LABELS } from "./KapiOfflineBanner";
29
+ export type { KapiOfflineBannerProps, KapiOfflineBannerLabels } from "./KapiOfflineBanner";
30
+ export { DEFAULT_RESTORED_DURATION, nextOfflineBannerPhase, offlineBannerClasses } from "./offlineBannerLogic";
31
+ export type { KapiOfflineBannerPhase } from "./offlineBannerLogic";
32
+ export { DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LOCALE, bucketFor, breakdown, chipText, describe, formatClock, formatDuration, parseTarget, remainingMs, resolveTones } from "./countdownLogic";
33
+ export type { KapiCountdownBucket, KapiCountdownLabels, KapiCountdownTarget, KapiCountdownToneMap, KapiCountdownUnitForms, KapiCountdownTone } from "./countdownLogic";
@@ -0,0 +1,10 @@
1
+ /** `hidden`: no se muestra · `offline`: sin conexión · `restored`: aviso breve al volver. */
2
+ export type KapiOfflineBannerPhase = "hidden" | "offline" | "restored";
3
+ /** Duración por defecto del aviso "Conexión restablecida" (ms). */
4
+ export declare const DEFAULT_RESTORED_DURATION = 3000;
5
+ /**
6
+ * Próxima fase ante el estado de conexión. Sin conexión siempre `offline`; al volver, `restored`
7
+ * (o `hidden` si el aviso está apagado). `restored` → `hidden` lo hace el timer del componente.
8
+ */
9
+ export declare const nextOfflineBannerPhase: (phase: KapiOfflineBannerPhase, online: boolean, showRestored: boolean) => KapiOfflineBannerPhase;
10
+ export declare const offlineBannerClasses: (phase: KapiOfflineBannerPhase, className?: string) => string;
@@ -0,0 +1,8 @@
1
+ //#region src/components/feedback/offlineBannerLogic.ts
2
+ var e = 3e3, t = (e, t, n) => t ? e === "offline" ? n ? "restored" : "hidden" : e : "offline", n = (e, t) => [
3
+ "kapi-offline-banner",
4
+ `kapi-offline-banner--${e}`,
5
+ t
6
+ ].filter(Boolean).join(" ");
7
+ //#endregion
8
+ export { e as DEFAULT_RESTORED_DURATION, t as nextOfflineBannerPhase, n as offlineBannerClasses };
@@ -0,0 +1,17 @@
1
+ export type KapiProgressTone = "primary" | "success" | "warning" | "danger";
2
+ /** Lleva `value` al rango 0–100. NaN/undefined/Infinity-negativo -> 0; +Infinity -> 100. */
3
+ export declare const clampPercent: (value: number) => number;
4
+ /** Texto del valor, sin decimales sueltos: `42%`. */
5
+ export declare const formatPercent: (value: number) => string;
6
+ /** Geometría del anillo SVG: circunferencia y desplazamiento del trazo para `value`. */
7
+ export declare const circleDash: (value: number, radius: number) => {
8
+ circumference: number;
9
+ offset: number;
10
+ };
11
+ /** Clases del contenedor de progreso. */
12
+ export declare const progressClasses: ({ tone, size, variant, className }?: {
13
+ tone?: KapiProgressTone | undefined;
14
+ size?: "sm" | "md" | "lg" | undefined;
15
+ variant?: "bar" | "circle" | undefined;
16
+ className?: string | undefined;
17
+ }) => string;
@@ -0,0 +1,16 @@
1
+ //#region src/components/feedback/progressLogic.ts
2
+ var e = (e) => Number.isNaN(e) ? 0 : Math.min(100, Math.max(0, e)), t = (t) => `${Math.round(e(t))}%`, n = (t, n) => {
3
+ let r = 2 * Math.PI * n;
4
+ return {
5
+ circumference: r,
6
+ offset: r * (1 - e(t) / 100)
7
+ };
8
+ }, r = ({ tone: e = "primary", size: t = "md", variant: n = "bar", className: r = "" } = {}) => [
9
+ "kapi-progress",
10
+ n === "circle" && "kapi-progress--circle",
11
+ `kapi-progress--${e}`,
12
+ t !== "md" && `kapi-progress--${t}`,
13
+ r
14
+ ].filter(Boolean).join(" ");
15
+ //#endregion
16
+ export { n as circleDash, e as clampPercent, t as formatPercent, r as progressClasses };
@@ -0,0 +1,62 @@
1
+ export type KapiToastVariant = "success" | "error" | "info" | "warning";
2
+ /** Botón de acción dentro de un toast ("Ver trámite", "Deshacer"). Al hacer click corre `onClick` y cierra el toast. */
3
+ export type KapiToastAction = {
4
+ /** Texto del botón. */
5
+ label: string;
6
+ /** Qué hace la acción; después el toast se cierra. */
7
+ onClick: () => void;
8
+ };
9
+ /** Opciones de un toast (segundo argumento de `kapiToast.success(…)` y compañía). */
10
+ export type KapiToastOptions = {
11
+ /** Milisegundos hasta que se cierra solo (default `TOAST_DEFAULT_DURATION`, o `TOAST_ACTION_DURATION` con `action`). */
12
+ duration?: number | undefined;
13
+ /** Botón de acción del toast. */
14
+ action?: KapiToastAction | undefined;
15
+ };
16
+ export type KapiToastItem = {
17
+ id: number;
18
+ variant: KapiToastVariant;
19
+ message: string;
20
+ /** Acción opcional (botón dentro del toast). */
21
+ action?: KapiToastAction;
22
+ /** true durante la animación de salida. */
23
+ leaving: boolean;
24
+ };
25
+ export declare const TOAST_DEFAULT_DURATION = 2800;
26
+ /** Duración por defecto de un toast con acción: más larga, para que dé tiempo a llegar al botón. */
27
+ export declare const TOAST_ACTION_DURATION = 6000;
28
+ /**
29
+ * Red de seguridad de la salida. El toast se elimina en el `animationend` de `kapi-toast-out`
30
+ * (dura `--kapi-dur-fast`, así que el tiempo real sale del token); este timer solo actúa si ese
31
+ * evento no llega (p. ej. `animation: none` o pestaña en segundo plano). = dur-fast + margen.
32
+ */
33
+ export declare const TOAST_LEAVE_MS = 200;
34
+ /** Tope visual de toasts apilados. */
35
+ export declare const TOAST_MAX = 6;
36
+ export type KapiToastStore = {
37
+ subscribe: (listener: () => void) => () => void;
38
+ getSnapshot: () => readonly KapiToastItem[];
39
+ /** Agrega un toast; el tercer argumento es la duración en ms (firma corta) o las opciones. Devuelve el id. */
40
+ push: (variant: KapiToastVariant, message: string, options?: number | KapiToastOptions) => number;
41
+ dismiss: (id: number) => void;
42
+ /** Elimina un toast que ya está saliendo (llamalo en el `animationend` de su salida). */
43
+ remove: (id: number) => void;
44
+ };
45
+ export type KapiToastStoreOptions = {
46
+ /** Espera máxima de la salida si no llega `animationend` (default `TOAST_LEAVE_MS`). */
47
+ leaveFallbackMs?: number;
48
+ };
49
+ /** Store imperativo e inmutable (compatible con `useSyncExternalStore`). Exportado para testear. */
50
+ export declare const createToastStore: ({ leaveFallbackMs }?: KapiToastStoreOptions) => KapiToastStore;
51
+ export declare const toastStore: KapiToastStore;
52
+ /**
53
+ * API imperativa: `kapiToast.success("Guardado")` → id. El segundo argumento es la duración en ms o
54
+ * las opciones: `kapiToast.success("Trámite creado", { action: { label: "Ver trámite", onClick } })`.
55
+ */
56
+ export declare const kapiToast: {
57
+ success: (message: string, options?: number | KapiToastOptions) => number;
58
+ error: (message: string, options?: number | KapiToastOptions) => number;
59
+ info: (message: string, options?: number | KapiToastOptions) => number;
60
+ warning: (message: string, options?: number | KapiToastOptions) => number;
61
+ dismiss: (id: number) => void;
62
+ };
@@ -0,0 +1,38 @@
1
+ //#region src/components/feedback/toastStore.ts
2
+ var e = 2800, t = 6e3, n = ({ leaveFallbackMs: e = 200 } = {}) => {
3
+ let t = [], n = 0, r = /* @__PURE__ */ new Set(), i = () => r.forEach((e) => e()), a = (n) => {
4
+ let r = t.find((e) => e.id === n);
5
+ r && !r.leaving && (t = t.map((e) => e.id === n ? {
6
+ ...e,
7
+ leaving: !0
8
+ } : e), i(), setTimeout(() => o(n), e));
9
+ }, o = (e) => {
10
+ t.some((t) => t.id === e && t.leaving) && (t = t.filter((t) => t.id !== e), i());
11
+ };
12
+ return {
13
+ subscribe: (e) => (r.add(e), () => {
14
+ r.delete(e);
15
+ }),
16
+ getSnapshot: () => t,
17
+ push: (e, r, o) => {
18
+ let { duration: s, action: c } = typeof o == "number" ? { duration: o } : o ?? {}, l = ++n;
19
+ return t = [{
20
+ id: l,
21
+ variant: e,
22
+ message: r,
23
+ leaving: !1,
24
+ ...c ? { action: c } : {}
25
+ }, ...t].slice(0, 6), i(), setTimeout(() => a(l), s ?? (c ? 6e3 : 2800)), l;
26
+ },
27
+ dismiss: a,
28
+ remove: o
29
+ };
30
+ }, r = n(), i = {
31
+ success: (e, t) => r.push("success", e, t),
32
+ error: (e, t) => r.push("error", e, t),
33
+ info: (e, t) => r.push("info", e, t),
34
+ warning: (e, t) => r.push("warning", e, t),
35
+ dismiss: (e) => r.dismiss(e)
36
+ };
37
+ //#endregion
38
+ export { t as TOAST_ACTION_DURATION, e as TOAST_DEFAULT_DURATION, n as createToastStore, i as kapiToast, r as toastStore };
@@ -0,0 +1,64 @@
1
+ export type TourStep = {
2
+ /** Selector CSS del elemento a destacar. */
3
+ element: string;
4
+ title: string;
5
+ description: string;
6
+ };
7
+ export type Rect = {
8
+ top: number;
9
+ left: number;
10
+ right: number;
11
+ bottom: number;
12
+ width: number;
13
+ height: number;
14
+ };
15
+ export type Box = {
16
+ top: number;
17
+ left: number;
18
+ width: number;
19
+ height: number;
20
+ };
21
+ /** Clave de "tour visto" de un namespace (default `kapi` → `kapi:tour-seen`). Pasala a `markSeen`. */
22
+ export declare const tourStorageKey: (namespace?: string) => string;
23
+ export declare const TOUR_STORAGE_KEY: string;
24
+ /** Clave vieja sin namespace: se migra en la primera lectura de una clave `*:tour-seen`. */
25
+ export declare const LEGACY_TOUR_STORAGE_KEY = "v2_tour_seen";
26
+ export declare const TOUR_PAD = 6;
27
+ export declare const TOUR_POP_WIDTH = 300;
28
+ export declare const TOUR_POP_HEIGHT = 180;
29
+ export declare const TOUR_GAP = 12;
30
+ /** Deja sólo los pasos cuyo selector existe (`exists` se inyecta para testear sin DOM). */
31
+ export declare const filterAvailableSteps: (steps: readonly TourStep[], exists: (selector: string) => boolean) => TourStep[];
32
+ /** Caja del spotlight: el rect del elemento con padding. */
33
+ export declare const highlightBox: (rect: Rect, pad?: number) => Box;
34
+ /** Opciones del motor para el popover del tour (las usa `popoverPosition` y el componente). */
35
+ export declare const TOUR_PLACEMENT: {
36
+ readonly side: "bottom";
37
+ readonly align: "start";
38
+ readonly offset: 12;
39
+ readonly margin: 12;
40
+ readonly flip: "if-overflow";
41
+ readonly mainMin: 12;
42
+ readonly fallback: {
43
+ readonly x: 24;
44
+ readonly y: 24;
45
+ };
46
+ };
47
+ /**
48
+ * Posición del popover: debajo del elemento; arriba si no entra (aunque arriba haya menos lugar, con
49
+ * piso `TOUR_GAP`); horizontal clampeado al viewport. Wrapper de `placePopover`.
50
+ */
51
+ export declare const popoverPosition: (rect: Rect | null, viewport: {
52
+ width: number;
53
+ height: number;
54
+ }, size?: {
55
+ width: number;
56
+ height: number;
57
+ }) => {
58
+ top: number;
59
+ left: number;
60
+ width: number;
61
+ };
62
+ /** Marca el tour como visto (no-op si el storage no está disponible). */
63
+ export declare const markTourSeen: (key?: string) => void;
64
+ export declare const hasSeenTour: (key?: string) => boolean;
@@ -0,0 +1,31 @@
1
+ import { storageKey as e } from "../../hooks/storageLogic.js";
2
+ //#region src/components/feedback/tourLogic.ts
3
+ var t = "tour-seen", n = (n) => e(n, t), r = n(), i = (e, t) => e.filter((e) => {
4
+ try {
5
+ return t(e.element);
6
+ } catch {
7
+ return !1;
8
+ }
9
+ }), a = (e, t = 6) => ({
10
+ top: e.top - t,
11
+ left: e.left - t,
12
+ width: e.width + t * 2,
13
+ height: e.height + t * 2
14
+ }), o = {
15
+ side: "bottom",
16
+ align: "start",
17
+ offset: 12,
18
+ margin: 12,
19
+ flip: "if-overflow",
20
+ mainMin: 12,
21
+ fallback: {
22
+ x: 24,
23
+ y: 24
24
+ }
25
+ }, s = (e = r) => {
26
+ try {
27
+ localStorage.setItem(e, "1");
28
+ } catch {}
29
+ };
30
+ //#endregion
31
+ export { o as TOUR_PLACEMENT, r as TOUR_STORAGE_KEY, i as filterAvailableSteps, a as highlightBox, s as markTourSeen, n as tourStorageKey };
@@ -0,0 +1,2 @@
1
+ /** Etiqueta pluralizada: "1 cambio sin guardar" / "N cambios sin guardar"; sin conteo, genérica. */
2
+ export declare const unsavedCountLabel: (count?: number) => string;
@@ -0,0 +1,8 @@
1
+ //#region src/components/feedback/unsavedBarLogic.ts
2
+ var e = (e) => {
3
+ if (e === void 0 || !Number.isFinite(e)) return "Cambios sin guardar";
4
+ let t = Math.max(0, Math.floor(e));
5
+ return `${t} ${t === 1 ? "cambio" : "cambios"} sin guardar`;
6
+ };
7
+ //#endregion
8
+ export { e as unsavedCountLabel };
@@ -0,0 +1,81 @@
1
+ import { type InputHTMLAttributes, type ReactNode, type Ref } from "react";
2
+ import { type KapiInputSize } from "./KapiInput";
3
+ import type { KapiFieldStatus } from "./KapiField";
4
+ import "./KapiAutocomplete.css";
5
+ import type { KapiLabelsOverride } from "../labelsLogic";
6
+ export type KapiAutocompleteRenderContext = {
7
+ /** Current input text (for custom highlighting). */
8
+ query: string;
9
+ /** Whether this option is the keyboard/hover active one. */
10
+ active: boolean;
11
+ };
12
+ type KapiAutocompleteBaseProps<T> = {
13
+ /** Input text (controlled). */
14
+ value: string;
15
+ /** Called with the new text on every keystroke, and with the option label on select (see `fillOnSelect`). */
16
+ onChange: (text: string) => void;
17
+ /** Called when a suggestion is chosen (Enter or click). */
18
+ onSelect?: (option: T) => void;
19
+ /** Text of an option. Defaults to the string itself or its `label` property. */
20
+ getLabel?: (option: T) => string;
21
+ /** Stable React key of an option. Defaults to its label. */
22
+ getKey?: (option: T) => string | number;
23
+ /** Custom option content. Defaults to the label with the matched fragment highlighted. */
24
+ renderOption?: (option: T, context: KapiAutocompleteRenderContext) => ReactNode;
25
+ /** Write the chosen option label into the input via `onChange` on select. Default `true`. */
26
+ fillOnSelect?: boolean;
27
+ /** Minimum trimmed characters before the dropdown opens (and async loads fire). Default `0`. */
28
+ minChars?: number;
29
+ /** Max suggestions shown. Default `8`. */
30
+ maxResults?: number;
31
+ /** Debounce for `loadOptions`, in ms. Default `250`. */
32
+ debounceMs?: number;
33
+ /** Empty state copy. Wins over `labels.noResults` ("Sin resultados"). */
34
+ noResultsText?: string;
35
+ /** Loading state copy. Wins over `labels.loading` ("Buscando…"). */
36
+ loadingText?: string;
37
+ /** Fixed copy (key `autocomplete`). */
38
+ labels?: KapiLabelsOverride<KapiAutocompleteLabels> | undefined;
39
+ /** Tamaño del campo: `sm` · `md` · `lg`. */
40
+ size?: KapiInputSize;
41
+ /** Estado de validación (borde y ayuda); con `label`/`help` lo pinta el `KapiField`. */
42
+ status?: KapiFieldStatus;
43
+ /** Etiqueta visible; con ella (o `help`) el input se envuelve en un `KapiField`. */
44
+ label?: ReactNode;
45
+ /** Marca el campo obligatorio (`required` en el input y en el `KapiField`). */
46
+ required?: boolean;
47
+ /** Texto de ayuda o error bajo el campo. */
48
+ help?: ReactNode;
49
+ /** Class of the `KapiField` wrapper (if `label`/`help`). `className` goes to the input. */
50
+ fieldClassName?: string;
51
+ /** Clase del `<input>` (la del envoltorio va en `fieldClassName`). */
52
+ className?: string;
53
+ /** Ref al `<input>` (React 19 pasa `ref` como prop). */
54
+ ref?: Ref<HTMLInputElement>;
55
+ };
56
+ /** Synchronous suggestions: filtered locally by label. */
57
+ type KapiAutocompleteSyncProps<T> = {
58
+ /** Sugerencias fijas; se filtran localmente por su texto. Excluye `loadOptions`. */
59
+ options: readonly T[];
60
+ /** Solo en el modo asíncrono (excluye `options`). */
61
+ loadOptions?: never;
62
+ };
63
+ /** Asynchronous suggestions: `loadOptions` owns the filtering; results are not re-filtered. */
64
+ type KapiAutocompleteAsyncProps<T> = {
65
+ /** Busca las sugerencias para el texto tipeado; el resultado se muestra tal cual (sin refiltrar). */
66
+ loadOptions: (query: string) => Promise<readonly T[]>;
67
+ /** Solo en el modo síncrono (excluye `loadOptions`). */
68
+ options?: never;
69
+ };
70
+ export type KapiAutocompleteProps<T> = KapiAutocompleteBaseProps<T> & (KapiAutocompleteSyncProps<T> | KapiAutocompleteAsyncProps<T>) & Omit<InputHTMLAttributes<HTMLInputElement>, keyof KapiAutocompleteBaseProps<T> | "size" | "role" | "type" | "defaultValue" | "onSelect" | "autoComplete" | "aria-expanded" | "aria-controls" | "aria-activedescendant">;
71
+ export type KapiAutocompleteLabels = {
72
+ noResults: string;
73
+ loading: string;
74
+ };
75
+ export declare const DEFAULT_AUTOCOMPLETE_LABELS: KapiAutocompleteLabels;
76
+ /**
77
+ * Free-text typeahead (ARIA combobox + listbox). Suggestions come from `options` (filtered locally)
78
+ * or `loadOptions` (debounced, with a loading state and a stale-response guard).
79
+ */
80
+ export declare const KapiAutocomplete: <T>(props: KapiAutocompleteProps<T>) => import("react").JSX.Element;
81
+ export {};
@@ -0,0 +1,205 @@
1
+ "use client";
2
+ import { assignRef as e, fieldControlProps as t, joinIds as n } from "./fieldLogic.js";
3
+ import { KapiField as r, useKapiField as ee } from "./KapiField.js";
4
+ import { useLabels as te } from "../locale/KapiLocaleProvider.js";
5
+ import { inputClasses as ne } from "./KapiInput.js";
6
+ import { resolveKapiRoot as re } from "../../hooks/kapiRoot.js";
7
+ import { AUTOCOMPLETE_MENU_PLACEMENT as ie, clampActiveIndex as ae, createRequestTracker as oe, defaultGetLabel as se, filterOptions as ce, highlightParts as le, moveActiveIndex as ue, shouldOpen as de } from "./autocompleteLogic.js";
8
+ import { usePlacement as fe } from "../../hooks/usePlacement.js";
9
+ /* empty css */
10
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
11
+ import { useCallback as o, useEffect as s, useId as pe, useLayoutEffect as me, useMemo as he, useRef as c, useState as l } from "react";
12
+ import { createPortal as ge } from "react-dom";
13
+ //#region src/components/inputs/KapiAutocomplete.tsx
14
+ var u = {
15
+ noResults: "Sin resultados",
16
+ loading: "Buscando…"
17
+ }, _e = 6, d = (d) => {
18
+ let { value: f, onChange: p, onSelect: m, getLabel: h, getKey: g, renderOption: _, fillOnSelect: v = !0, minChars: ve = 0, maxResults: y = 8, debounceMs: b = 250, noResultsText: ye, loadingText: be, labels: xe, size: Se, status: x, label: S, required: C, help: w, fieldClassName: Ce, className: we, ref: T, options: E, loadOptions: D, id: Te, onFocus: Ee, onBlur: De, onKeyDown: Oe, ...O } = d, k = te("autocomplete", u, xe), ke = ye ?? k.noResults, Ae = be ?? k.loading, je = ee(), A = S != null || !!w, j = pe(), M = Te ?? (A ? j : je?.controlId ?? j), N = `${M}-listbox`, P = w ? `${M}-help` : void 0, F = (e) => `${M}-opt-${e}`, I = h ?? se, Me = o((t) => {
19
+ e(T, t);
20
+ }, [T]), [Ne, L] = l(!1), [Pe, R] = l(!1), [Fe, z] = l(-1), [B, V] = l({
21
+ query: "",
22
+ options: []
23
+ }), [H] = l(oe), U = c(null), W = c(null), G = c(null), K = c(D);
24
+ s(() => {
25
+ K.current = D;
26
+ });
27
+ let q = D !== void 0, J = de({
28
+ focused: Ne,
29
+ dismissed: Pe,
30
+ query: f,
31
+ minChars: ve
32
+ }), Y = f.trim();
33
+ s(() => {
34
+ if (!q || !J) return;
35
+ let e = Y, t = setTimeout(() => {
36
+ let t = K.current;
37
+ if (!t) return;
38
+ let n = H.next();
39
+ t(e).then((t) => {
40
+ H.isCurrent(n) && V({
41
+ query: e,
42
+ options: t
43
+ });
44
+ }, () => {
45
+ H.isCurrent(n) && V({
46
+ query: e,
47
+ options: []
48
+ });
49
+ });
50
+ }, b);
51
+ return () => clearTimeout(t);
52
+ }, [
53
+ q,
54
+ J,
55
+ Y,
56
+ b,
57
+ H
58
+ ]), s(() => (J || H.cancel(), () => H.cancel()), [J, H]);
59
+ let X = q && J && B.query !== Y, Ie = he(() => q ? B.options.slice(0, y > 0 ? y : void 0) : ce(E ?? [], f, I, y), [
60
+ q,
61
+ B.options,
62
+ E,
63
+ f,
64
+ y
65
+ ]), Z = X ? [] : Ie, Q = ae(Fe, Z.length);
66
+ s(() => {
67
+ if (!J || Q < 0) return;
68
+ let e = U.current?.children[Q];
69
+ e instanceof HTMLElement && typeof e.scrollIntoView == "function" && e.scrollIntoView({ block: "nearest" });
70
+ }, [J, Q]);
71
+ let Le = J && !X && Z.length === 0, $ = J && (X || Z.length > 0 || Le), { placement: Re, style: ze, update: Be } = fe({
72
+ open: $,
73
+ anchor: W,
74
+ floatingRef: G,
75
+ ...ie,
76
+ offset: _e
77
+ });
78
+ me(() => {
79
+ $ && Be();
80
+ }, [
81
+ $,
82
+ Z.length,
83
+ X,
84
+ Be
85
+ ]);
86
+ let Ve = o((e) => {
87
+ v && p(I(e)), m?.(e), R(!0), z(-1);
88
+ }, [
89
+ v,
90
+ p,
91
+ m,
92
+ h
93
+ ]), He = (e) => {
94
+ p(e.target.value), R(!1), z(-1);
95
+ }, Ue = (e) => {
96
+ if (Oe?.(e), !e.defaultPrevented) switch (e.key) {
97
+ case "ArrowDown":
98
+ case "ArrowUp":
99
+ if (e.preventDefault(), !J) {
100
+ R(!1);
101
+ return;
102
+ }
103
+ z(ue(Q, Z.length, e.key === "ArrowDown" ? 1 : -1));
104
+ break;
105
+ case "Enter":
106
+ if (J && Q >= 0) {
107
+ e.preventDefault();
108
+ let t = Z[Q];
109
+ t !== void 0 && Ve(t);
110
+ }
111
+ break;
112
+ case "Escape": J && (e.preventDefault(), e.stopPropagation(), R(!0), z(-1));
113
+ }
114
+ }, We = (e) => {
115
+ L(!0), R(!1), Ee?.(e);
116
+ }, Ge = (e) => {
117
+ L(!1), z(-1), De?.(e);
118
+ }, Ke = $ ? re(W.current) : null, qe = /* @__PURE__ */ a("div", {
119
+ ref: W,
120
+ className: ["kapi-ac", X && "kapi-ac--loading"].filter(Boolean).join(" "),
121
+ children: [
122
+ /* @__PURE__ */ i("input", {
123
+ ...O,
124
+ ref: Me,
125
+ type: "text",
126
+ role: "combobox",
127
+ autoComplete: "off",
128
+ "aria-autocomplete": "list",
129
+ "aria-expanded": $,
130
+ "aria-controls": N,
131
+ "aria-activedescendant": $ && Q >= 0 ? F(Q) : void 0,
132
+ "aria-busy": X || void 0,
133
+ ...t(A ? null : je, {
134
+ id: M,
135
+ describedBy: n(P, O["aria-describedby"]),
136
+ invalid: x ? x === "err" : void 0
137
+ }),
138
+ required: C,
139
+ className: ne({
140
+ size: Se,
141
+ status: x,
142
+ className: we
143
+ }),
144
+ value: f,
145
+ onChange: He,
146
+ onKeyDown: Ue,
147
+ onFocus: We,
148
+ onBlur: Ge
149
+ }),
150
+ X && /* @__PURE__ */ i("span", {
151
+ className: "kapi-ac__spinner kapi-spinner kapi-spinner--sm",
152
+ "aria-hidden": "true"
153
+ }),
154
+ Ke && ge(/* @__PURE__ */ a("div", {
155
+ ref: G,
156
+ className: "kapi-ac__menu",
157
+ "data-side": Re?.side ?? "bottom",
158
+ style: ze,
159
+ onMouseDown: (e) => e.preventDefault(),
160
+ children: [/* @__PURE__ */ i("ul", {
161
+ ref: U,
162
+ id: N,
163
+ role: "listbox",
164
+ className: "kapi-ac__list",
165
+ hidden: Z.length === 0,
166
+ children: Z.map((e, t) => {
167
+ let n = I(e), r = t === Q;
168
+ return /* @__PURE__ */ i("li", {
169
+ id: F(t),
170
+ role: "option",
171
+ "aria-selected": r,
172
+ className: ["kapi-ac__opt", r && "kapi-ac__opt--active"].filter(Boolean).join(" "),
173
+ onMouseEnter: () => z(t),
174
+ onClick: () => Ve(e),
175
+ children: _ ? _(e, {
176
+ query: f,
177
+ active: r
178
+ }) : le(n, f).map((e, t) => e.match ? /* @__PURE__ */ i("mark", {
179
+ className: "kapi-ac__mark",
180
+ children: e.text
181
+ }, t) : /* @__PURE__ */ i("span", { children: e.text }, t))
182
+ }, g ? g(e) : `${n}-${t}`);
183
+ })
184
+ }), (X || Le) && /* @__PURE__ */ i("div", {
185
+ className: "kapi-ac__status",
186
+ role: "status",
187
+ "aria-live": "polite",
188
+ children: X ? Ae : ke
189
+ })]
190
+ }), Ke)
191
+ ]
192
+ });
193
+ return A ? /* @__PURE__ */ i(r, {
194
+ label: S,
195
+ htmlFor: M,
196
+ required: C,
197
+ help: w,
198
+ helpId: P,
199
+ status: x,
200
+ className: Ce,
201
+ children: qe
202
+ }) : qe;
203
+ };
204
+ //#endregion
205
+ export { u as DEFAULT_AUTOCOMPLETE_LABELS, d as KapiAutocomplete };
@@ -0,0 +1,23 @@
1
+ import type { ButtonHTMLAttributes, ReactNode, Ref } from "react";
2
+ export type KapiButtonVariant = "default" | "primary" | "danger" | "success" | "warning" | "info" | "tonal" | "ghost" | "outline-primary" | "outline-success" | "outline-warning" | "outline-danger" | "tonal-primary" | "tonal-success" | "tonal-warning" | "tonal-danger";
3
+ export type KapiButtonSize = "sm" | "md" | "lg";
4
+ export type KapiButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
5
+ /** Estilo del botón. `default` es el neutro (borde + card). */
6
+ variant?: KapiButtonVariant;
7
+ /** Escala de control compartida con inputs y selects (sm / md / lg). */
8
+ size?: KapiButtonSize;
9
+ /** Botón cuadrado sólo de ícono (pasa `aria-label`). */
10
+ iconOnly?: boolean;
11
+ /** Borde con el color del texto (`currentColor`). */
12
+ bordered?: boolean;
13
+ /** Ícono (lucide-react) a la izquierda del texto. */
14
+ icon?: ReactNode;
15
+ /** Texto del botón (va a la derecha del `icon`). */
16
+ children?: ReactNode;
17
+ /** Ref al `<button>` nativo. */
18
+ ref?: Ref<HTMLButtonElement>;
19
+ };
20
+ /** Clases de un botón. Pura y exportada: es lo que se testea (no el markup). */
21
+ export declare const buttonClasses: ({ variant, size, iconOnly, bordered, className }?: Pick<KapiButtonProps, "variant" | "size" | "iconOnly" | "bordered" | "className">) => string;
22
+ /** Botón base: variantes de color, tamaños, sólo ícono y borde. Acepta los atributos nativos de `<button>`. */
23
+ export declare const KapiButton: ({ variant, size, iconOnly, bordered, icon, className, type, children, ref, ...rest }: KapiButtonProps) => import("react").JSX.Element;