@dynamic-framework/ui-react 2.9.0 → 2.11.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 (478) hide show
  1. package/dist/DPortalStack-6zJm6JoD.js +14 -0
  2. package/dist/DPortalStack-6zJm6JoD.js.map +1 -0
  3. package/dist/DPortalStack-D1-GGU4C.js +12 -0
  4. package/dist/DPortalStack-D1-GGU4C.js.map +1 -0
  5. package/dist/api.json +7429 -0
  6. package/dist/css/dynamic-ui.css +95 -26
  7. package/dist/css/dynamic-ui.min.css +2 -2
  8. package/dist/esm/components/DAlert/DAlert.js +16 -0
  9. package/dist/esm/components/DAlert/DAlert.js.map +1 -0
  10. package/dist/esm/components/DAlert/index.js +6 -0
  11. package/dist/esm/components/DAlert/index.js.map +1 -0
  12. package/dist/esm/components/DAvatar/DAvatar.js +23 -0
  13. package/dist/esm/components/DAvatar/DAvatar.js.map +1 -0
  14. package/dist/esm/components/DAvatar/index.js +6 -0
  15. package/dist/esm/components/DAvatar/index.js.map +1 -0
  16. package/dist/esm/components/DBadge/DBadge.js +31 -0
  17. package/dist/esm/components/DBadge/DBadge.js.map +1 -0
  18. package/dist/esm/components/DBadge/index.js +6 -0
  19. package/dist/esm/components/DBadge/index.js.map +1 -0
  20. package/dist/esm/components/DBox/DBox.js +9 -0
  21. package/dist/esm/components/DBox/DBox.js.map +1 -0
  22. package/dist/esm/components/DBox/index.js +6 -0
  23. package/dist/esm/components/DBox/index.js.map +1 -0
  24. package/dist/esm/components/DBoxFile/DBoxFile.js +26 -0
  25. package/dist/esm/components/DBoxFile/DBoxFile.js.map +1 -0
  26. package/dist/esm/components/DBoxFile/index.js +6 -0
  27. package/dist/esm/components/DBoxFile/index.js.map +1 -0
  28. package/dist/esm/components/DBoxFile/useDBoxFile.js +236 -0
  29. package/dist/esm/components/DBoxFile/useDBoxFile.js.map +1 -0
  30. package/dist/esm/components/DBoxFile/utils.js +127 -0
  31. package/dist/esm/components/DBoxFile/utils.js.map +1 -0
  32. package/dist/esm/components/DButton/DButton.js +84 -0
  33. package/dist/esm/components/DButton/DButton.js.map +1 -0
  34. package/dist/esm/components/DButton/index.js +6 -0
  35. package/dist/esm/components/DButton/index.js.map +1 -0
  36. package/dist/esm/components/DButtonIcon/DButtonIcon.js +55 -0
  37. package/dist/esm/components/DButtonIcon/DButtonIcon.js.map +1 -0
  38. package/dist/esm/components/DButtonIcon/index.js +6 -0
  39. package/dist/esm/components/DButtonIcon/index.js.map +1 -0
  40. package/dist/esm/components/DButtonIcon/warnMissingAccessibleName.js +40 -0
  41. package/dist/esm/components/DButtonIcon/warnMissingAccessibleName.js.map +1 -0
  42. package/dist/esm/components/DCard/DCard.js +17 -0
  43. package/dist/esm/components/DCard/DCard.js.map +1 -0
  44. package/dist/esm/components/DCard/components/DCardBody.js +9 -0
  45. package/dist/esm/components/DCard/components/DCardBody.js.map +1 -0
  46. package/dist/esm/components/DCard/components/DCardFooter.js +9 -0
  47. package/dist/esm/components/DCard/components/DCardFooter.js.map +1 -0
  48. package/dist/esm/components/DCard/components/DCardHeader.js +9 -0
  49. package/dist/esm/components/DCard/components/DCardHeader.js.map +1 -0
  50. package/dist/esm/components/DCard/index.js +9 -0
  51. package/dist/esm/components/DCard/index.js.map +1 -0
  52. package/dist/esm/components/DCarousel/DCarousel.js +39 -0
  53. package/dist/esm/components/DCarousel/DCarousel.js.map +1 -0
  54. package/dist/esm/components/DCarousel/components/DCarouselSlide.js +12 -0
  55. package/dist/esm/components/DCarousel/components/DCarouselSlide.js.map +1 -0
  56. package/dist/esm/components/DCarousel/index.js +7 -0
  57. package/dist/esm/components/DCarousel/index.js.map +1 -0
  58. package/dist/esm/components/DChip/DChip.js +18 -0
  59. package/dist/esm/components/DChip/DChip.js.map +1 -0
  60. package/dist/esm/components/DChip/index.js +6 -0
  61. package/dist/esm/components/DChip/index.js.map +1 -0
  62. package/dist/esm/components/DCollapse/DCollapse.js +30 -0
  63. package/dist/esm/components/DCollapse/DCollapse.js.map +1 -0
  64. package/dist/esm/components/DCollapse/index.js +6 -0
  65. package/dist/esm/components/DCollapse/index.js.map +1 -0
  66. package/dist/esm/components/DConfirmModal/DConfirmModalContainer.js +59 -0
  67. package/dist/esm/components/DConfirmModal/DConfirmModalContainer.js.map +1 -0
  68. package/dist/esm/components/DConfirmModal/DConfirmModalUI.js +39 -0
  69. package/dist/esm/components/DConfirmModal/DConfirmModalUI.js.map +1 -0
  70. package/dist/esm/components/DConfirmModal/confirmModalStore.js +38 -0
  71. package/dist/esm/components/DConfirmModal/confirmModalStore.js.map +1 -0
  72. package/dist/esm/components/DCreditCard/DCreditCard.js +15 -0
  73. package/dist/esm/components/DCreditCard/DCreditCard.js.map +1 -0
  74. package/dist/esm/components/DCreditCard/index.js +6 -0
  75. package/dist/esm/components/DCreditCard/index.js.map +1 -0
  76. package/dist/esm/components/DCurrencyText/DCurrencyText.js +10 -0
  77. package/dist/esm/components/DCurrencyText/DCurrencyText.js.map +1 -0
  78. package/dist/esm/components/DCurrencyText/index.js +6 -0
  79. package/dist/esm/components/DCurrencyText/index.js.map +1 -0
  80. package/dist/esm/components/DDataStateWrapper/DDataStateWrapper.js +42 -0
  81. package/dist/esm/components/DDataStateWrapper/DDataStateWrapper.js.map +1 -0
  82. package/dist/esm/components/DDataStateWrapper/components/EmptyState.js +10 -0
  83. package/dist/esm/components/DDataStateWrapper/components/EmptyState.js.map +1 -0
  84. package/dist/esm/components/DDataStateWrapper/components/ErrorState.js +10 -0
  85. package/dist/esm/components/DDataStateWrapper/components/ErrorState.js.map +1 -0
  86. package/dist/esm/components/DDataStateWrapper/components/LoadingState.js +8 -0
  87. package/dist/esm/components/DDataStateWrapper/components/LoadingState.js.map +1 -0
  88. package/dist/esm/components/DDataStateWrapper/index.js +9 -0
  89. package/dist/esm/components/DDataStateWrapper/index.js.map +1 -0
  90. package/dist/esm/components/DDatePicker/DDatePicker.js +54 -0
  91. package/dist/esm/components/DDatePicker/DDatePicker.js.map +1 -0
  92. package/dist/esm/components/DDatePicker/components/DDatePickerHeaderSelector.js +50 -0
  93. package/dist/esm/components/DDatePicker/components/DDatePickerHeaderSelector.js.map +1 -0
  94. package/dist/esm/components/DDatePicker/components/DDatePickerInput.js +16 -0
  95. package/dist/esm/components/DDatePicker/components/DDatePickerInput.js.map +1 -0
  96. package/dist/esm/components/DDatePicker/components/DDatePickerTime.js +11 -0
  97. package/dist/esm/components/DDatePicker/components/DDatePickerTime.js.map +1 -0
  98. package/dist/esm/components/DDatePicker/index.js +6 -0
  99. package/dist/esm/components/DDatePicker/index.js.map +1 -0
  100. package/dist/esm/components/DDropdown/DDropdown.js +315 -0
  101. package/dist/esm/components/DDropdown/DDropdown.js.map +1 -0
  102. package/dist/esm/components/DDropdown/index.js +6 -0
  103. package/dist/esm/components/DDropdown/index.js.map +1 -0
  104. package/dist/esm/components/DErrorBoundary/DErrorBoundary.js +22 -0
  105. package/dist/esm/components/DErrorBoundary/DErrorBoundary.js.map +1 -0
  106. package/dist/esm/components/DErrorBoundary/components/DefaultErrorBoundary.js +10 -0
  107. package/dist/esm/components/DErrorBoundary/components/DefaultErrorBoundary.js.map +1 -0
  108. package/dist/esm/components/DErrorBoundary/index.js +7 -0
  109. package/dist/esm/components/DErrorBoundary/index.js.map +1 -0
  110. package/dist/esm/components/DIcon/DIcon.js +21 -0
  111. package/dist/esm/components/DIcon/DIcon.js.map +1 -0
  112. package/dist/esm/components/DIcon/index.js +6 -0
  113. package/dist/esm/components/DIcon/index.js.map +1 -0
  114. package/dist/esm/components/DIconBase/DIconBase.js +146 -0
  115. package/dist/esm/components/DIconBase/DIconBase.js.map +1 -0
  116. package/dist/esm/components/DIconBase/index.js +6 -0
  117. package/dist/esm/components/DIconBase/index.js.map +1 -0
  118. package/dist/esm/components/DIconBase/resolveIconFromRegistry.js +20 -0
  119. package/dist/esm/components/DIconBase/resolveIconFromRegistry.js.map +1 -0
  120. package/dist/esm/components/DIconBase/warnUnknownIcon.js +59 -0
  121. package/dist/esm/components/DIconBase/warnUnknownIcon.js.map +1 -0
  122. package/dist/esm/components/DInput/DInput.js +95 -0
  123. package/dist/esm/components/DInput/DInput.js.map +1 -0
  124. package/dist/esm/components/DInput/index.js +6 -0
  125. package/dist/esm/components/DInput/index.js.map +1 -0
  126. package/dist/esm/components/DInputCheck/DInputCheck.js +94 -0
  127. package/dist/esm/components/DInputCheck/DInputCheck.js.map +1 -0
  128. package/dist/esm/components/DInputCheck/index.js +6 -0
  129. package/dist/esm/components/DInputCheck/index.js.map +1 -0
  130. package/dist/esm/components/DInputCounter/DInputCounter.js +107 -0
  131. package/dist/esm/components/DInputCounter/DInputCounter.js.map +1 -0
  132. package/dist/esm/components/DInputCounter/index.js +6 -0
  133. package/dist/esm/components/DInputCounter/index.js.map +1 -0
  134. package/dist/esm/components/DInputCurrency/DInputCurrency.js +25 -0
  135. package/dist/esm/components/DInputCurrency/DInputCurrency.js.map +1 -0
  136. package/dist/esm/components/DInputCurrency/index.js +6 -0
  137. package/dist/esm/components/DInputCurrency/index.js.map +1 -0
  138. package/dist/esm/components/DInputMask/DInputMask.js +13 -0
  139. package/dist/esm/components/DInputMask/DInputMask.js.map +1 -0
  140. package/dist/esm/components/DInputMask/index.js +6 -0
  141. package/dist/esm/components/DInputMask/index.js.map +1 -0
  142. package/dist/esm/components/DInputPassword/DInputPassword.js +24 -0
  143. package/dist/esm/components/DInputPassword/DInputPassword.js.map +1 -0
  144. package/dist/esm/components/DInputPassword/index.js +6 -0
  145. package/dist/esm/components/DInputPassword/index.js.map +1 -0
  146. package/dist/esm/components/DInputPhone/DInputPhone.js +108 -0
  147. package/dist/esm/components/DInputPhone/DInputPhone.js.map +1 -0
  148. package/dist/esm/components/DInputPhone/index.js +6 -0
  149. package/dist/esm/components/DInputPhone/index.js.map +1 -0
  150. package/dist/esm/components/DInputPin/DInputPin.js +88 -0
  151. package/dist/esm/components/DInputPin/DInputPin.js.map +1 -0
  152. package/dist/esm/components/DInputPin/index.js +6 -0
  153. package/dist/esm/components/DInputPin/index.js.map +1 -0
  154. package/dist/esm/components/DInputRange/DInputRange.js +60 -0
  155. package/dist/esm/components/DInputRange/DInputRange.js.map +1 -0
  156. package/dist/esm/components/DInputRange/index.js +6 -0
  157. package/dist/esm/components/DInputRange/index.js.map +1 -0
  158. package/dist/esm/components/DInputSearch/DInputSearch.js +57 -0
  159. package/dist/esm/components/DInputSearch/DInputSearch.js.map +1 -0
  160. package/dist/esm/components/DInputSearch/index.js +6 -0
  161. package/dist/esm/components/DInputSearch/index.js.map +1 -0
  162. package/dist/esm/components/DInputSelect/DInputSelect.js +104 -0
  163. package/dist/esm/components/DInputSelect/DInputSelect.js.map +1 -0
  164. package/dist/esm/components/DInputSelect/index.js +6 -0
  165. package/dist/esm/components/DInputSelect/index.js.map +1 -0
  166. package/dist/esm/components/DInputSwitch/DInputSwitch.js +43 -0
  167. package/dist/esm/components/DInputSwitch/DInputSwitch.js.map +1 -0
  168. package/dist/esm/components/DInputSwitch/index.js +6 -0
  169. package/dist/esm/components/DInputSwitch/index.js.map +1 -0
  170. package/dist/esm/components/DLayout/DLayout.js +22 -0
  171. package/dist/esm/components/DLayout/DLayout.js.map +1 -0
  172. package/dist/esm/components/DLayout/components/DLayoutPane.js +16 -0
  173. package/dist/esm/components/DLayout/components/DLayoutPane.js.map +1 -0
  174. package/dist/esm/components/DLayout/index.js +7 -0
  175. package/dist/esm/components/DLayout/index.js.map +1 -0
  176. package/dist/esm/components/DListGroup/DListGroup.js +39 -0
  177. package/dist/esm/components/DListGroup/DListGroup.js.map +1 -0
  178. package/dist/esm/components/DListGroup/ListGroupContext.js +11 -0
  179. package/dist/esm/components/DListGroup/ListGroupContext.js.map +1 -0
  180. package/dist/esm/components/DListGroup/components/DListGroupItem.js +59 -0
  181. package/dist/esm/components/DListGroup/components/DListGroupItem.js.map +1 -0
  182. package/dist/esm/components/DListGroup/components/warnInvalidListMarkup.js +30 -0
  183. package/dist/esm/components/DListGroup/components/warnInvalidListMarkup.js.map +1 -0
  184. package/dist/esm/components/DListGroup/index.js +7 -0
  185. package/dist/esm/components/DListGroup/index.js.map +1 -0
  186. package/dist/esm/components/DModal/DModal.js +37 -0
  187. package/dist/esm/components/DModal/DModal.js.map +1 -0
  188. package/dist/esm/components/DModal/components/DModalBody.js +9 -0
  189. package/dist/esm/components/DModal/components/DModalBody.js.map +1 -0
  190. package/dist/esm/components/DModal/components/DModalFooter.js +14 -0
  191. package/dist/esm/components/DModal/components/DModalFooter.js.map +1 -0
  192. package/dist/esm/components/DModal/components/DModalHeader.js +15 -0
  193. package/dist/esm/components/DModal/components/DModalHeader.js.map +1 -0
  194. package/dist/esm/components/DModal/index.js +9 -0
  195. package/dist/esm/components/DModal/index.js.map +1 -0
  196. package/dist/esm/components/DOffcanvas/DOffcanvas.js +82 -0
  197. package/dist/esm/components/DOffcanvas/DOffcanvas.js.map +1 -0
  198. package/dist/esm/components/DOffcanvas/components/DOffcanvasBody.js +9 -0
  199. package/dist/esm/components/DOffcanvas/components/DOffcanvasBody.js.map +1 -0
  200. package/dist/esm/components/DOffcanvas/components/DOffcanvasFooter.js +14 -0
  201. package/dist/esm/components/DOffcanvas/components/DOffcanvasFooter.js.map +1 -0
  202. package/dist/esm/components/DOffcanvas/components/DOffcanvasHeader.js +15 -0
  203. package/dist/esm/components/DOffcanvas/components/DOffcanvasHeader.js.map +1 -0
  204. package/dist/esm/components/DOffcanvas/index.js +9 -0
  205. package/dist/esm/components/DOffcanvas/index.js.map +1 -0
  206. package/dist/esm/components/DOtp/DOtp.js +26 -0
  207. package/dist/esm/components/DOtp/DOtp.js.map +1 -0
  208. package/dist/esm/components/DOtp/components/OtpCountdown.js +12 -0
  209. package/dist/esm/components/DOtp/components/OtpCountdown.js.map +1 -0
  210. package/dist/esm/components/DOtp/index.js +6 -0
  211. package/dist/esm/components/DOtp/index.js.map +1 -0
  212. package/dist/esm/components/DPaginator/DPaginator.js +12 -0
  213. package/dist/esm/components/DPaginator/DPaginator.js.map +1 -0
  214. package/dist/esm/components/DPaginator/index.js +6 -0
  215. package/dist/esm/components/DPaginator/index.js.map +1 -0
  216. package/dist/esm/components/DPasswordStrengthMeter/DPasswordStrengthMeter.js +27 -0
  217. package/dist/esm/components/DPasswordStrengthMeter/DPasswordStrengthMeter.js.map +1 -0
  218. package/dist/esm/components/DPasswordStrengthMeter/PasswordCheckItem.js +10 -0
  219. package/dist/esm/components/DPasswordStrengthMeter/PasswordCheckItem.js.map +1 -0
  220. package/dist/esm/components/DPasswordStrengthMeter/PasswordCheckList.js +41 -0
  221. package/dist/esm/components/DPasswordStrengthMeter/PasswordCheckList.js.map +1 -0
  222. package/dist/esm/components/DPasswordStrengthMeter/PasswordStrength.js +23 -0
  223. package/dist/esm/components/DPasswordStrengthMeter/PasswordStrength.js.map +1 -0
  224. package/dist/esm/components/DPasswordStrengthMeter/index.js +6 -0
  225. package/dist/esm/components/DPasswordStrengthMeter/index.js.map +1 -0
  226. package/dist/esm/components/DPopover/DPopover.js +49 -0
  227. package/dist/esm/components/DPopover/DPopover.js.map +1 -0
  228. package/dist/esm/components/DPopover/index.js +6 -0
  229. package/dist/esm/components/DPopover/index.js.map +1 -0
  230. package/dist/esm/components/DProgress/DProgress.js +22 -0
  231. package/dist/esm/components/DProgress/DProgress.js.map +1 -0
  232. package/dist/esm/components/DProgress/index.js +6 -0
  233. package/dist/esm/components/DProgress/index.js.map +1 -0
  234. package/dist/esm/components/DSelect/DSelect.js +88 -0
  235. package/dist/esm/components/DSelect/DSelect.js.map +1 -0
  236. package/dist/esm/components/DSelect/components/DSelectClearIndicator.js +12 -0
  237. package/dist/esm/components/DSelect/components/DSelectClearIndicator.js.map +1 -0
  238. package/dist/esm/components/DSelect/components/DSelectDropdownIndicator.js +12 -0
  239. package/dist/esm/components/DSelect/components/DSelectDropdownIndicator.js.map +1 -0
  240. package/dist/esm/components/DSelect/components/DSelectLoadingIndicator.js +12 -0
  241. package/dist/esm/components/DSelect/components/DSelectLoadingIndicator.js.map +1 -0
  242. package/dist/esm/components/DSelect/components/DSelectMultiValueRemove.js +12 -0
  243. package/dist/esm/components/DSelect/components/DSelectMultiValueRemove.js.map +1 -0
  244. package/dist/esm/components/DSelect/components/DSelectOptionCheck.js +14 -0
  245. package/dist/esm/components/DSelect/components/DSelectOptionCheck.js.map +1 -0
  246. package/dist/esm/components/DSelect/components/DSelectOptionEmoji.js +14 -0
  247. package/dist/esm/components/DSelect/components/DSelectOptionEmoji.js.map +1 -0
  248. package/dist/esm/components/DSelect/components/DSelectOptionIcon.js +15 -0
  249. package/dist/esm/components/DSelect/components/DSelectOptionIcon.js.map +1 -0
  250. package/dist/esm/components/DSelect/components/DSelectPlaceholder.js +14 -0
  251. package/dist/esm/components/DSelect/components/DSelectPlaceholder.js.map +1 -0
  252. package/dist/esm/components/DSelect/components/DSelectSingleValueEmoji.js +15 -0
  253. package/dist/esm/components/DSelect/components/DSelectSingleValueEmoji.js.map +1 -0
  254. package/dist/esm/components/DSelect/components/DSelectSingleValueEmojiText.js +15 -0
  255. package/dist/esm/components/DSelect/components/DSelectSingleValueEmojiText.js.map +1 -0
  256. package/dist/esm/components/DSelect/components/DSelectSingleValueIconText.js +16 -0
  257. package/dist/esm/components/DSelect/components/DSelectSingleValueIconText.js.map +1 -0
  258. package/dist/esm/components/DSelect/createAriaGuidance.js +57 -0
  259. package/dist/esm/components/DSelect/createAriaGuidance.js.map +1 -0
  260. package/dist/esm/components/DSelect/index.js +6 -0
  261. package/dist/esm/components/DSelect/index.js.map +1 -0
  262. package/dist/esm/components/DStepper/DStepper.js +13 -0
  263. package/dist/esm/components/DStepper/DStepper.js.map +1 -0
  264. package/dist/esm/components/DStepper/index.js +6 -0
  265. package/dist/esm/components/DStepper/index.js.map +1 -0
  266. package/dist/esm/components/DStepperDesktop/DStepperDesktop.js +27 -0
  267. package/dist/esm/components/DStepperDesktop/DStepperDesktop.js.map +1 -0
  268. package/dist/esm/components/DStepperDesktop/index.js +6 -0
  269. package/dist/esm/components/DStepperDesktop/index.js.map +1 -0
  270. package/dist/esm/components/DStepperMobile/DStepperMobile.js +37 -0
  271. package/dist/esm/components/DStepperMobile/DStepperMobile.js.map +1 -0
  272. package/dist/esm/components/DStepperMobile/index.js +6 -0
  273. package/dist/esm/components/DStepperMobile/index.js.map +1 -0
  274. package/dist/esm/components/DTabs/DTabs.js +106 -0
  275. package/dist/esm/components/DTabs/DTabs.js.map +1 -0
  276. package/dist/esm/components/DTabs/TabContext.js +14 -0
  277. package/dist/esm/components/DTabs/TabContext.js.map +1 -0
  278. package/dist/esm/components/DTabs/components/DTabContent.js +14 -0
  279. package/dist/esm/components/DTabs/components/DTabContent.js.map +1 -0
  280. package/dist/esm/components/DTabs/components/DTabsProvider.js +22 -0
  281. package/dist/esm/components/DTabs/components/DTabsProvider.js.map +1 -0
  282. package/dist/esm/components/DTabs/index.js +9 -0
  283. package/dist/esm/components/DTabs/index.js.map +1 -0
  284. package/dist/esm/components/DTimeline/DTimeline.js +12 -0
  285. package/dist/esm/components/DTimeline/DTimeline.js.map +1 -0
  286. package/dist/esm/components/DTimeline/index.js +6 -0
  287. package/dist/esm/components/DTimeline/index.js.map +1 -0
  288. package/dist/esm/components/DToast/DToast.js +20 -0
  289. package/dist/esm/components/DToast/DToast.js.map +1 -0
  290. package/dist/esm/components/DToast/components/DToastBody.js +9 -0
  291. package/dist/esm/components/DToast/components/DToastBody.js.map +1 -0
  292. package/dist/esm/components/DToast/components/DToastHeader.js +9 -0
  293. package/dist/esm/components/DToast/components/DToastHeader.js.map +1 -0
  294. package/dist/esm/components/DToast/index.js +8 -0
  295. package/dist/esm/components/DToast/index.js.map +1 -0
  296. package/dist/esm/components/DToastContainer/DToastContainer.js +9 -0
  297. package/dist/esm/components/DToastContainer/DToastContainer.js.map +1 -0
  298. package/dist/esm/components/DToastContainer/index.js +7 -0
  299. package/dist/esm/components/DToastContainer/index.js.map +1 -0
  300. package/dist/esm/components/DToastContainer/useDToast.js +58 -0
  301. package/dist/esm/components/DToastContainer/useDToast.js.map +1 -0
  302. package/dist/esm/components/DTooltip/DTooltip.js +51 -0
  303. package/dist/esm/components/DTooltip/DTooltip.js.map +1 -0
  304. package/dist/esm/components/DTooltip/index.js +6 -0
  305. package/dist/esm/components/DTooltip/index.js.map +1 -0
  306. package/dist/esm/components/DVoucher/DVoucher.js +55 -0
  307. package/dist/esm/components/DVoucher/DVoucher.js.map +1 -0
  308. package/dist/esm/components/DVoucher/hooks/useScreenshot.js +30 -0
  309. package/dist/esm/components/DVoucher/hooks/useScreenshot.js.map +1 -0
  310. package/dist/esm/components/DVoucher/hooks/useScreenshotDownload.js +30 -0
  311. package/dist/esm/components/DVoucher/hooks/useScreenshotDownload.js.map +1 -0
  312. package/dist/esm/components/DVoucher/hooks/useScreenshotWebShare.js +27 -0
  313. package/dist/esm/components/DVoucher/hooks/useScreenshotWebShare.js.map +1 -0
  314. package/dist/esm/components/DVoucher/index.js +9 -0
  315. package/dist/esm/components/DVoucher/index.js.map +1 -0
  316. package/dist/esm/components/config.js +14 -0
  317. package/dist/esm/components/config.js.map +1 -0
  318. package/dist/esm/components/internal/DFormLabel.js +46 -0
  319. package/dist/esm/components/internal/DFormLabel.js.map +1 -0
  320. package/dist/esm/contexts/DContext.js +124 -0
  321. package/dist/esm/contexts/DContext.js.map +1 -0
  322. package/dist/esm/contexts/DPortalContext.js +163 -0
  323. package/dist/esm/contexts/DPortalContext.js.map +1 -0
  324. package/dist/esm/contexts/portal/DPortalStack.js +12 -0
  325. package/dist/esm/contexts/portal/DPortalStack.js.map +1 -0
  326. package/dist/esm/hooks/useConfirmModal.js +63 -0
  327. package/dist/esm/hooks/useConfirmModal.js.map +1 -0
  328. package/dist/esm/hooks/useControlledState.js +51 -0
  329. package/dist/esm/hooks/useControlledState.js.map +1 -0
  330. package/dist/esm/hooks/useCountdown.js +45 -0
  331. package/dist/esm/hooks/useCountdown.js.map +1 -0
  332. package/dist/esm/hooks/useDisableBodyScrollEffect.js +52 -0
  333. package/dist/esm/hooks/useDisableBodyScrollEffect.js.map +1 -0
  334. package/dist/esm/hooks/useDisableInputWheel.js +17 -0
  335. package/dist/esm/hooks/useDisableInputWheel.js.map +1 -0
  336. package/dist/esm/hooks/useFormatCurrency.js +16 -0
  337. package/dist/esm/hooks/useFormatCurrency.js.map +1 -0
  338. package/dist/esm/hooks/useInputCurrency.js +130 -0
  339. package/dist/esm/hooks/useInputCurrency.js.map +1 -0
  340. package/dist/esm/hooks/useItemSelection.js +35 -0
  341. package/dist/esm/hooks/useItemSelection.js.map +1 -0
  342. package/dist/esm/hooks/useMediaBreakpointUp.js +69 -0
  343. package/dist/esm/hooks/useMediaBreakpointUp.js.map +1 -0
  344. package/dist/esm/hooks/useMediaQuery.js +11 -0
  345. package/dist/esm/hooks/useMediaQuery.js.map +1 -0
  346. package/dist/esm/hooks/useOtp.js +107 -0
  347. package/dist/esm/hooks/useOtp.js.map +1 -0
  348. package/dist/esm/hooks/usePortal.js +26 -0
  349. package/dist/esm/hooks/usePortal.js.map +1 -0
  350. package/dist/esm/hooks/useProvidedRefOrCreate.js +24 -0
  351. package/dist/esm/hooks/useProvidedRefOrCreate.js.map +1 -0
  352. package/dist/esm/hooks/useResponsiveProp.js +61 -0
  353. package/dist/esm/hooks/useResponsiveProp.js.map +1 -0
  354. package/dist/esm/hooks/useStackState.js +40 -0
  355. package/dist/esm/hooks/useStackState.js.map +1 -0
  356. package/dist/esm/icons/coreIcons.js +55 -0
  357. package/dist/esm/icons/coreIcons.js.map +1 -0
  358. package/dist/esm/index.js +99 -0
  359. package/dist/esm/index.js.map +1 -0
  360. package/dist/esm/utils/attr-accept.js +38 -0
  361. package/dist/esm/utils/attr-accept.js.map +1 -0
  362. package/dist/esm/utils/buildUrl.js +57 -0
  363. package/dist/esm/utils/buildUrl.js.map +1 -0
  364. package/dist/esm/utils/changeQueryString.js +19 -0
  365. package/dist/esm/utils/changeQueryString.js.map +1 -0
  366. package/dist/esm/utils/configureI18n.js +20 -0
  367. package/dist/esm/utils/configureI18n.js.map +1 -0
  368. package/dist/esm/utils/formatCurrency.js +8 -0
  369. package/dist/esm/utils/formatCurrency.js.map +1 -0
  370. package/dist/esm/utils/getCssVariable.js +7 -0
  371. package/dist/esm/utils/getCssVariable.js.map +1 -0
  372. package/dist/esm/utils/getKeyboardFocusableElements.js +11 -0
  373. package/dist/esm/utils/getKeyboardFocusableElements.js.map +1 -0
  374. package/dist/esm/utils/getQueryString.js +8 -0
  375. package/dist/esm/utils/getQueryString.js.map +1 -0
  376. package/dist/esm/utils/hasLabelContent.js +48 -0
  377. package/dist/esm/utils/hasLabelContent.js.map +1 -0
  378. package/dist/esm/utils/isTextLabel.js +23 -0
  379. package/dist/esm/utils/isTextLabel.js.map +1 -0
  380. package/dist/esm/utils/labelClickGuard.js +61 -0
  381. package/dist/esm/utils/labelClickGuard.js.map +1 -0
  382. package/dist/esm/utils/mediaQuery.js +13 -0
  383. package/dist/esm/utils/mediaQuery.js.map +1 -0
  384. package/dist/esm/utils/sanitizeHref.js +67 -0
  385. package/dist/esm/utils/sanitizeHref.js.map +1 -0
  386. package/dist/esm/utils/validatePhoneNumber.js +14 -0
  387. package/dist/esm/utils/validatePhoneNumber.js.map +1 -0
  388. package/dist/esm/utils/warnLabelUsage.js +57 -0
  389. package/dist/esm/utils/warnLabelUsage.js.map +1 -0
  390. package/dist/icons-core.json +33 -0
  391. package/dist/index.esm.js +1151 -184
  392. package/dist/index.esm.js.map +1 -1
  393. package/dist/index.js +1151 -182
  394. package/dist/index.js.map +1 -1
  395. package/dist/types/components/DAlert/DAlert.d.ts +16 -2
  396. package/dist/types/components/DButtonIcon/DButtonIcon.d.ts +9 -1
  397. package/dist/types/components/DButtonIcon/warnMissingAccessibleName.d.ts +18 -0
  398. package/dist/types/components/DDataStateWrapper/DDataStateWrapper.d.ts +29 -4
  399. package/dist/types/components/DDataStateWrapper/index.d.ts +1 -1
  400. package/dist/types/components/DErrorBoundary/DErrorBoundary.d.ts +6 -1
  401. package/dist/types/components/DErrorBoundary/components/DefaultErrorBoundary.d.ts +3 -1
  402. package/dist/types/components/DIcon/DIcon.d.ts +8 -0
  403. package/dist/types/components/DIconBase/DIconBase.d.ts +43 -1
  404. package/dist/types/components/DIconBase/resolveIconFromRegistry.d.ts +14 -0
  405. package/dist/types/components/DIconBase/warnUnknownIcon.d.ts +13 -0
  406. package/dist/types/components/DInput/DInput.d.ts +11 -2
  407. package/dist/types/components/DInputCheck/DInputCheck.d.ts +28 -3
  408. package/dist/types/components/DInputCounter/DInputCounter.d.ts +15 -3
  409. package/dist/types/components/DInputCurrency/DInputCurrency.d.ts +10 -3
  410. package/dist/types/components/DInputPhone/DInputPhone.d.ts +11 -2
  411. package/dist/types/components/DInputPin/DInputPin.d.ts +12 -2
  412. package/dist/types/components/DInputRange/DInputRange.d.ts +16 -3
  413. package/dist/types/components/DInputSelect/DInputSelect.d.ts +18 -3
  414. package/dist/types/components/DInputSwitch/DInputSwitch.d.ts +28 -3
  415. package/dist/types/components/DListGroup/DListGroup.d.ts +12 -1
  416. package/dist/types/components/DListGroup/ListGroupContext.d.ts +8 -0
  417. package/dist/types/components/DListGroup/components/DListGroupItem.d.ts +6 -1
  418. package/dist/types/components/DListGroup/components/warnInvalidListMarkup.d.ts +13 -0
  419. package/dist/types/components/DPasswordStrengthMeter/DPasswordStrengthMeter.d.ts +18 -3
  420. package/dist/types/components/DProgress/DProgress.d.ts +13 -1
  421. package/dist/types/components/DSelect/DSelect.d.ts +23 -3
  422. package/dist/types/components/DSelect/createAriaGuidance.d.ts +21 -0
  423. package/dist/types/components/DTabs/DTabs.d.ts +13 -2
  424. package/dist/types/components/DTabs/TabContext.d.ts +5 -0
  425. package/dist/types/components/DTabs/components/DTabsProvider.d.ts +11 -0
  426. package/dist/types/components/DTabs/index.d.ts +1 -0
  427. package/dist/types/components/DToast/DToast.d.ts +10 -3
  428. package/dist/types/components/DToastContainer/useDToast.d.ts +8 -1
  429. package/dist/types/components/config.d.ts +10 -0
  430. package/dist/types/components/index.d.ts +2 -2
  431. package/dist/types/components/interface.d.ts +7 -0
  432. package/dist/types/components/internal/DFormLabel.d.ts +30 -0
  433. package/dist/types/contexts/portal/DPortalStack.d.ts +13 -0
  434. package/dist/types/hooks/useControlledState.d.ts +17 -0
  435. package/dist/types/hooks/useInputCurrency.d.ts +26 -1
  436. package/dist/types/hooks/useMediaBreakpointUp.d.ts +10 -0
  437. package/dist/types/icons/coreIcons.d.ts +24 -0
  438. package/dist/types/icons/index.d.ts +2 -0
  439. package/dist/types/index.d.ts +1 -0
  440. package/dist/types/utils/hasLabelContent.d.ts +30 -0
  441. package/dist/types/utils/isTextLabel.d.ts +17 -0
  442. package/dist/types/utils/labelClickGuard.d.ts +20 -0
  443. package/dist/types/utils/warnLabelUsage.d.ts +43 -0
  444. package/package.json +10 -5
  445. package/src/style/abstracts/variables/_body.scss +2 -2
  446. package/src/style/abstracts/variables/_chips.scss +2 -0
  447. package/src/style/abstracts/variables/_colors.scss +2 -2
  448. package/src/style/base/_buttons.scss +4 -1
  449. package/src/style/base/_input-group.scss +5 -2
  450. package/src/style/base/_list-group.scss +55 -0
  451. package/src/style/components/_d-chip.scss +7 -2
  452. package/src/style/components/_d-tabs.scss +3 -0
  453. package/src/style/helpers/_color-bg.scss +5 -0
  454. package/src/style/root/_root.scss +9 -0
  455. package/dist/types/components/DVoucher/hooks/useScreenshotDownload.spec.d.ts +0 -1
  456. package/dist/types/components/DVoucher/hooks/useScreenshotWebShare.spec.d.ts +0 -1
  457. package/dist/types/hooks/tests/useCountdown.spec.d.ts +0 -1
  458. package/dist/types/hooks/tests/useDisableBodyScrollEffect.spec.d.ts +0 -1
  459. package/dist/types/hooks/tests/useDisableInputWheel.spec.d.ts +0 -1
  460. package/dist/types/hooks/tests/useFormatCurrency.spec.d.ts +0 -1
  461. package/dist/types/hooks/tests/useInputCurrency.spec.d.ts +0 -1
  462. package/dist/types/hooks/tests/useItemSelection.spec.d.ts +0 -1
  463. package/dist/types/hooks/tests/useMediaBreakpointUp.spec.d.ts +0 -1
  464. package/dist/types/hooks/tests/useMediaQuery.spec.d.ts +0 -1
  465. package/dist/types/hooks/tests/usePortal.spec.d.ts +0 -1
  466. package/dist/types/hooks/tests/useProvidedRefOrCreate.spec.d.ts +0 -1
  467. package/dist/types/hooks/tests/useStackState.spec.d.ts +0 -1
  468. package/dist/types/utils/tests/attr-accept.spec.d.ts +0 -1
  469. package/dist/types/utils/tests/buildUrl.spec.d.ts +0 -1
  470. package/dist/types/utils/tests/changeQueryString.spec.d.ts +0 -1
  471. package/dist/types/utils/tests/configureI18n.spec.d.ts +0 -1
  472. package/dist/types/utils/tests/formatCurrency.spec.d.ts +0 -1
  473. package/dist/types/utils/tests/getCssVariable.spec.d.ts +0 -1
  474. package/dist/types/utils/tests/getKeyboardFocusableElements.spec.d.ts +0 -1
  475. package/dist/types/utils/tests/getQueryString.spec.d.ts +0 -1
  476. package/dist/types/utils/tests/mediaQuery.spec.d.ts +0 -1
  477. package/dist/types/utils/tests/sanitizeHref.spec.d.ts +0 -1
  478. package/dist/types/utils/tests/validatePhoneNumber.spec.d.ts +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DPortalContext.js","sources":["../../../dist-transpiled/contexts/DPortalContext.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';\nimport { createPortal } from 'react-dom';\nimport useDisableBodyScrollEffect from '../hooks/useDisableBodyScrollEffect';\nimport usePortal from '../hooks/usePortal';\nimport useStackState from '../hooks/useStackState';\nimport getKeyboardFocusableElements from '../utils/getKeyboardFocusableElements';\nconst loadPortalStack = () => import('./portal/DPortalStack').then((module) => module.default);\nexport const DPortalContext = createContext(undefined);\nexport function DPortalContextProvider({ portalName, children, availablePortals, }) {\n const { created } = usePortal(portalName);\n const [stack, { push, pop }] = useStackState([]);\n const [PortalStack, setPortalStack] = useState(null);\n const pending = useRef([]);\n const ready = useRef(false);\n useDisableBodyScrollEffect(Boolean(stack.length));\n // Loads framer-motion off the critical path only when portals are configured,\n // so the first openPortal does not wait for it.\n const hasPortals = Object.keys(availablePortals !== null && availablePortals !== void 0 ? availablePortals : {}).length > 0;\n useEffect(() => {\n if (!hasPortals)\n return;\n loadPortalStack()\n .then((Stack) => {\n ready.current = true;\n setPortalStack(() => Stack);\n })\n .catch(() => {\n // openPortal retries the import and reports the failure.\n });\n }, [hasPortals]);\n const openPortal = useCallback(\n // eslint-disable-next-line prefer-arrow-callback\n function openPortalImpl(name, payload) {\n var _a;\n if (!availablePortals) {\n throw new Error('openPortal was called but DContextProvider has no availablePortals configured. '\n + 'Pass an availablePortals map to DContextProvider.');\n }\n const Component = availablePortals[name];\n if (!Component) {\n throw new Error(`No component registered for portal \"${String(name)}\". `\n + `Ensure \"${String(name)}\" has an entry in the availablePortals map on DContextProvider.`);\n }\n // K is a specific member of keyof T & string so the object satisfies\n // InternalStackItem<T>, but TS can't verify generic-over-union assignability.\n const item = { name, Component, payload };\n if (ready.current) {\n push(item);\n }\n else {\n // Not loaded yet: the portal enters the stack together with its renderer.\n pending.current.push(item);\n loadPortalStack().then((Stack) => {\n ready.current = true;\n setPortalStack(() => Stack);\n pending.current.splice(0).forEach(push);\n }).catch((error) => {\n pending.current = [];\n // eslint-disable-next-line no-console\n console.error('[DPortalContext] Could not load the portal stack', error);\n });\n }\n (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.blur();\n }, [availablePortals, push]);\n const closePortal = useCallback(() => {\n if (pending.current.length > 0) {\n pending.current.pop();\n return;\n }\n // pop() is safe on empty stacks, so close remains idempotent.\n pop();\n }, [pop]);\n const publicStack = useMemo(() => stack.map(({ name, payload }) => ({ name, payload })), [stack]);\n const value = useMemo(() => ({\n stack: publicStack,\n openPortal,\n closePortal,\n }), [publicStack, openPortal, closePortal]);\n const handleClose = useCallback((target) => {\n if (!(target instanceof HTMLDivElement)) {\n return;\n }\n if (target.classList.contains('portal') && !('bsBackdrop' in target.dataset)) {\n closePortal();\n return;\n }\n if (target.classList.contains('backdrop')) {\n const lastPortal = target.nextElementSibling;\n if (lastPortal && lastPortal.classList.contains('portal') && !('bsBackdrop' in lastPortal.dataset)) {\n closePortal();\n }\n }\n }, [closePortal]);\n useEffect(() => {\n const keyEvent = (event) => {\n const lastPortal = document.querySelector(`#${portalName} > div > div:last-child`);\n if (event.key === 'Escape') {\n if (lastPortal) {\n handleClose(lastPortal);\n return;\n }\n }\n if (event.key === 'Tab') {\n const focusableElements = getKeyboardFocusableElements(lastPortal);\n if (focusableElements.length === 0)\n return;\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n else if (!event.shiftKey && document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n };\n if (stack.length !== 0) {\n window.addEventListener('keydown', keyEvent);\n }\n return () => {\n window.removeEventListener('keydown', keyEvent);\n };\n }, [handleClose, portalName, stack.length]);\n return (_jsxs(DPortalContext.Provider, { value: value, children: [children, created && PortalStack && createPortal(\n // eslint-disable-next-line max-len\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n _jsx(\"div\", { onClick: ({ target }) => handleClose(target), onKeyDown: () => { }, children: _jsx(PortalStack, { stack: stack }) }), document.getElementById(portalName))] }));\n}\n/**\n * Hook to open/close registered portals (modals, offcanvas, etc.).\n *\n * **Prerequisite**: must be called inside a `DContextProvider` configured with\n * `portalName` and `availablePortals`. `DContextProvider` mounts\n * `DPortalContextProvider` internally — consumers never use\n * `DPortalContextProvider` directly.\n *\n * @template T - Map of portal name → payload shape (e.g. `ModalPayloads`).\n * Typing this generic gives you autocomplete on `openPortal` arguments.\n * @returns `{ openPortal, closePortal, stack }` from the nearest portal context.\n * @throws If called outside of `DContextProvider` / `DPortalContextProvider`.\n *\n * @requires DContextProvider\n *\n * @example\n * ```tsx\n * const { openPortal, closePortal } = useDPortalContext<ModalPayloads>();\n * openPortal('confirm', { message: 'Are you sure?' });\n * ```\n */\nexport function useDPortalContext() {\n const context = useContext(DPortalContext);\n if (context === undefined) {\n throw new Error('useDPortalContext was used outside of DPortalContextProvider');\n }\n return context;\n}\n//# sourceMappingURL=DPortalContext.js.map"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { AnimatePresence, motion } from 'framer-motion';
3
+
4
+ function DPortalStack({ stack }) {
5
+ return (jsx(AnimatePresence, { children: stack.flatMap(({ Component, name, payload, }) => [
6
+ jsx(motion.div, { className: "backdrop", initial: { opacity: 0 }, animate: { opacity: 0.5 }, exit: { opacity: 0, transition: { delay: 0.3 } }, transition: { duration: 0.15, ease: 'linear' } }, `${name}-backdrop`),
7
+ jsx(Component, { name: name, payload: payload }, name),
8
+ ]) }));
9
+ }
10
+
11
+ export { DPortalStack as default };
12
+ //# sourceMappingURL=DPortalStack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DPortalStack.js","sources":["../../../../dist-transpiled/contexts/portal/DPortalStack.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AnimatePresence, motion } from 'framer-motion';\nexport default function DPortalStack({ stack }) {\n return (_jsx(AnimatePresence, { children: stack.flatMap(({ Component, name, payload, }) => [\n _jsx(motion.div, { className: \"backdrop\", initial: { opacity: 0 }, animate: { opacity: 0.5 }, exit: { opacity: 0, transition: { delay: 0.3 } }, transition: { duration: 0.15, ease: 'linear' } }, `${name}-backdrop`),\n _jsx(Component, { name: name, payload: payload }, name),\n ]) }));\n}\n//# sourceMappingURL=DPortalStack.js.map"],"names":["_jsx"],"mappings":";;;AAGe,SAAS,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE;AAChD,IAAI,QAAQA,GAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK;AAC/F,YAAYA,GAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACjO,YAAYA,GAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC;AACnE,SAAS,CAAC,EAAE,CAAC;AACb;;;;"}
@@ -0,0 +1,63 @@
1
+ import { useRef, useCallback } from 'react';
2
+ import { useConfirmModalStore } from '../components/DConfirmModal/confirmModalStore.js';
3
+
4
+ /**
5
+ * Hook to display a confirmation modal.
6
+ *
7
+ * Renders into the portal node specified by `DConfirmModalContainer` (typically `#d-portal`).
8
+ * The confirm modal floats above the portal stack and handles its own Escape key,
9
+ * preventing interference with underlying modals.
10
+ *
11
+ * Requires both `DContextProvider` wrapping your application AND an explicit
12
+ * `<DConfirmModalContainer nodeId="d-portal" />` mounted in your app.
13
+ *
14
+ * @example
15
+ * function App() {
16
+ * return (
17
+ * <DContextProvider>
18
+ * <YourContent />
19
+ * <DConfirmModalContainer nodeId="d-portal" />
20
+ * </DContextProvider>
21
+ * );
22
+ * }
23
+ *
24
+ * function MyComponent() {
25
+ * const confirm = useConfirmModal({
26
+ * title: 'Delete Account',
27
+ * message: 'This action cannot be undone.',
28
+ * critical: { code: 'DELETE ACCOUNT' },
29
+ * onConfirm: async () => { await deleteAccount(); },
30
+ * });
31
+ *
32
+ * return <DButton onClick={confirm.open} text="Delete" color="danger" />;
33
+ * }
34
+ */
35
+ function useConfirmModal(config) {
36
+ const store = useConfirmModalStore();
37
+ const idRef = useRef(`confirm-modal-${Math.random().toString(36).slice(2)}`);
38
+ const close = useCallback(() => {
39
+ store.remove(idRef.current);
40
+ queueMicrotask(() => {
41
+ var _a;
42
+ (_a = config.onClose) === null || _a === void 0 ? void 0 : _a.call(config);
43
+ });
44
+ }, [store, config]);
45
+ const open = useCallback(() => {
46
+ const handleConfirmAction = async () => {
47
+ try {
48
+ await config.onConfirm();
49
+ store.remove(idRef.current);
50
+ }
51
+ catch (_a) {
52
+ // Keep modal open on error
53
+ }
54
+ };
55
+ // Remove any existing entry with this id to prevent duplicates on re-entrancy
56
+ store.remove(idRef.current);
57
+ store.push(Object.assign(Object.assign({}, config), { id: idRef.current, onConfirmAction: handleConfirmAction, onCloseAction: close }));
58
+ }, [store, config, close]);
59
+ return { open };
60
+ }
61
+
62
+ export { useConfirmModal as default };
63
+ //# sourceMappingURL=useConfirmModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConfirmModal.js","sources":["../../../dist-transpiled/hooks/useConfirmModal.js"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { useConfirmModalStore } from '../components/DConfirmModal/confirmModalStore';\n/**\n * Hook to display a confirmation modal.\n *\n * Renders into the portal node specified by `DConfirmModalContainer` (typically `#d-portal`).\n * The confirm modal floats above the portal stack and handles its own Escape key,\n * preventing interference with underlying modals.\n *\n * Requires both `DContextProvider` wrapping your application AND an explicit\n * `<DConfirmModalContainer nodeId=\"d-portal\" />` mounted in your app.\n *\n * @example\n * function App() {\n * return (\n * <DContextProvider>\n * <YourContent />\n * <DConfirmModalContainer nodeId=\"d-portal\" />\n * </DContextProvider>\n * );\n * }\n *\n * function MyComponent() {\n * const confirm = useConfirmModal({\n * title: 'Delete Account',\n * message: 'This action cannot be undone.',\n * critical: { code: 'DELETE ACCOUNT' },\n * onConfirm: async () => { await deleteAccount(); },\n * });\n *\n * return <DButton onClick={confirm.open} text=\"Delete\" color=\"danger\" />;\n * }\n */\nexport default function useConfirmModal(config) {\n const store = useConfirmModalStore();\n const idRef = useRef(`confirm-modal-${Math.random().toString(36).slice(2)}`);\n const close = useCallback(() => {\n store.remove(idRef.current);\n queueMicrotask(() => {\n var _a;\n (_a = config.onClose) === null || _a === void 0 ? void 0 : _a.call(config);\n });\n }, [store, config]);\n const open = useCallback(() => {\n const handleConfirmAction = async () => {\n try {\n await config.onConfirm();\n store.remove(idRef.current);\n }\n catch (_a) {\n // Keep modal open on error\n }\n };\n // Remove any existing entry with this id to prevent duplicates on re-entrancy\n store.remove(idRef.current);\n store.push(Object.assign(Object.assign({}, config), { id: idRef.current, onConfirmAction: handleConfirmAction, onCloseAction: close }));\n }, [store, config, close]);\n return { open };\n}\n//# sourceMappingURL=useConfirmModal.js.map"],"names":[],"mappings":";;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,eAAe,CAAC,MAAM,EAAE;AAChD,IAAI,MAAM,KAAK,GAAG,oBAAoB,EAAE;AACxC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM;AACpC,QAAQ,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AACnC,QAAQ,cAAc,CAAC,MAAM;AAC7B,YAAY,IAAI,EAAE;AAClB,YAAY,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AACtF,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACvB,IAAI,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM;AACnC,QAAQ,MAAM,mBAAmB,GAAG,YAAY;AAChD,YAAY,IAAI;AAChB,gBAAgB,MAAM,MAAM,CAAC,SAAS,EAAE;AACxC,gBAAgB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3C,YAAY;AACZ,YAAY,OAAO,EAAE,EAAE;AACvB;AACA,YAAY;AACZ,QAAQ,CAAC;AACT;AACA,QAAQ,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AACnC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/I,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC9B,IAAI,OAAO,EAAE,IAAI,EAAE;AACnB;;;;"}
@@ -0,0 +1,51 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+
3
+ /**
4
+ * Backs a value that the consumer may or may not drive, so a control works in
5
+ * both modes without a copy of the state drifting away from the props.
6
+ *
7
+ * A control counts as controlled only when the consumer passes the value *and*
8
+ * an `onChange` to push it back. The value on its own has always meant "start
9
+ * here" in this library — `<DInputCheck type="radio" checked />` inside a radio
10
+ * group, for one — so treating it as controlled would silently freeze those
11
+ * controls, and React emits no warning to say why: the components always attach
12
+ * their own `onChange` handler.
13
+ *
14
+ * @param value the value coming from props, or `undefined` when not passed.
15
+ * @param isControlled whether the consumer can drive the value back.
16
+ * @param initialValue what to start from when no value is passed.
17
+ * @returns the value to render, and a setter to call on every user change.
18
+ */
19
+ function useControlledState(value, isControlled, initialValue) {
20
+ const [internalValue, setInternalValue] = useState(value === undefined ? initialValue : value);
21
+ // The internal copy follows `value` in both modes.
22
+ //
23
+ // Uncontrolled, `value` without an `onChange` still means "start here", and a
24
+ // later flip of it from outside must still land — but between flips the
25
+ // control has to keep moving on its own, which is why this depends on `value`
26
+ // alone and not on `internalValue`.
27
+ //
28
+ // Controlled, the copy is not what gets rendered, but it is what the control
29
+ // falls back to if the consumer later stops passing a value — `value={locked
30
+ // ? undefined : x}`, say. Keeping it current means that hand-off carries on
31
+ // from where the control is instead of snapping back to the mount-time seed.
32
+ useEffect(() => {
33
+ if (value === undefined) {
34
+ return;
35
+ }
36
+ setInternalValue(value);
37
+ }, [value]);
38
+ const setValue = useCallback((next) => {
39
+ if (isControlled) {
40
+ return;
41
+ }
42
+ setInternalValue(next);
43
+ }, [isControlled]);
44
+ return [
45
+ isControlled && value !== undefined ? value : internalValue,
46
+ setValue,
47
+ ];
48
+ }
49
+
50
+ export { useControlledState as default };
51
+ //# sourceMappingURL=useControlledState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControlledState.js","sources":["../../../dist-transpiled/hooks/useControlledState.js"],"sourcesContent":["import { useCallback, useEffect, useState, } from 'react';\n/**\n * Backs a value that the consumer may or may not drive, so a control works in\n * both modes without a copy of the state drifting away from the props.\n *\n * A control counts as controlled only when the consumer passes the value *and*\n * an `onChange` to push it back. The value on its own has always meant \"start\n * here\" in this library — `<DInputCheck type=\"radio\" checked />` inside a radio\n * group, for one — so treating it as controlled would silently freeze those\n * controls, and React emits no warning to say why: the components always attach\n * their own `onChange` handler.\n *\n * @param value the value coming from props, or `undefined` when not passed.\n * @param isControlled whether the consumer can drive the value back.\n * @param initialValue what to start from when no value is passed.\n * @returns the value to render, and a setter to call on every user change.\n */\nexport default function useControlledState(value, isControlled, initialValue) {\n const [internalValue, setInternalValue] = useState(value === undefined ? initialValue : value);\n // The internal copy follows `value` in both modes.\n //\n // Uncontrolled, `value` without an `onChange` still means \"start here\", and a\n // later flip of it from outside must still land — but between flips the\n // control has to keep moving on its own, which is why this depends on `value`\n // alone and not on `internalValue`.\n //\n // Controlled, the copy is not what gets rendered, but it is what the control\n // falls back to if the consumer later stops passing a value — `value={locked\n // ? undefined : x}`, say. Keeping it current means that hand-off carries on\n // from where the control is instead of snapping back to the mount-time seed.\n useEffect(() => {\n if (value === undefined) {\n return;\n }\n setInternalValue(value);\n }, [value]);\n const setValue = useCallback((next) => {\n if (isControlled) {\n return;\n }\n setInternalValue(next);\n }, [isControlled]);\n return [\n isControlled && value !== undefined ? value : internalValue,\n setValue,\n ];\n}\n//# sourceMappingURL=useControlledState.js.map"],"names":[],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE;AAC9E,IAAI,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,KAAK,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,MAAM;AACpB,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,YAAY;AACZ,QAAQ;AACR,QAAQ,gBAAgB,CAAC,KAAK,CAAC;AAC/B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACf,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,IAAI,KAAK;AAC3C,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY;AACZ,QAAQ;AACR,QAAQ,gBAAgB,CAAC,IAAI,CAAC;AAC9B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AACtB,IAAI,OAAO;AACX,QAAQ,YAAY,IAAI,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,aAAa;AACnE,QAAQ,QAAQ;AAChB,KAAK;AACL;;;;"}
@@ -0,0 +1,45 @@
1
+ import { useState, useCallback, useEffect } from 'react';
2
+
3
+ /**
4
+ * Generic seconds-based countdown hook.
5
+ *
6
+ * Starts counting down from `seconds` to `0` and exposes `restartCountdown`
7
+ * to reset and restart the timer (e.g. for "resend code in Xs" patterns,
8
+ * session-expiry banners, or any other cooldown/throttle UI).
9
+ *
10
+ * @example
11
+ * const { secondsLeft, restartCountdown } = useCountdown(30);
12
+ */
13
+ function useCountdown(seconds) {
14
+ const [secondsLeft, setSecondsLeft] = useState(seconds);
15
+ const [isActive, setIsActive] = useState(true);
16
+ const resetCountdown = useCallback((newSeconds = seconds) => {
17
+ setIsActive(false);
18
+ setSecondsLeft(newSeconds);
19
+ }, [seconds]);
20
+ const restartCountdown = useCallback(() => {
21
+ resetCountdown(seconds);
22
+ setIsActive(true);
23
+ }, [resetCountdown, seconds]);
24
+ useEffect(() => {
25
+ if (!isActive) {
26
+ return () => { };
27
+ }
28
+ const interval = setInterval(() => {
29
+ setSecondsLeft((prevSeconds) => {
30
+ const newSeconds = prevSeconds - 1;
31
+ if (newSeconds <= 0) {
32
+ clearInterval(interval);
33
+ setIsActive(false);
34
+ return 0;
35
+ }
36
+ return newSeconds;
37
+ });
38
+ }, 1000);
39
+ return () => clearInterval(interval);
40
+ }, [isActive]);
41
+ return { secondsLeft, restartCountdown };
42
+ }
43
+
44
+ export { useCountdown as default };
45
+ //# sourceMappingURL=useCountdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCountdown.js","sources":["../../../dist-transpiled/hooks/useCountdown.js"],"sourcesContent":["import { useState, useEffect, useCallback, } from 'react';\n/**\n * Generic seconds-based countdown hook.\n *\n * Starts counting down from `seconds` to `0` and exposes `restartCountdown`\n * to reset and restart the timer (e.g. for \"resend code in Xs\" patterns,\n * session-expiry banners, or any other cooldown/throttle UI).\n *\n * @example\n * const { secondsLeft, restartCountdown } = useCountdown(30);\n */\nexport default function useCountdown(seconds) {\n const [secondsLeft, setSecondsLeft] = useState(seconds);\n const [isActive, setIsActive] = useState(true);\n const resetCountdown = useCallback((newSeconds = seconds) => {\n setIsActive(false);\n setSecondsLeft(newSeconds);\n }, [seconds]);\n const restartCountdown = useCallback(() => {\n resetCountdown(seconds);\n setIsActive(true);\n }, [resetCountdown, seconds]);\n useEffect(() => {\n if (!isActive) {\n return () => { };\n }\n const interval = setInterval(() => {\n setSecondsLeft((prevSeconds) => {\n const newSeconds = prevSeconds - 1;\n if (newSeconds <= 0) {\n clearInterval(interval);\n setIsActive(false);\n return 0;\n }\n return newSeconds;\n });\n }, 1000);\n return () => clearInterval(interval);\n }, [isActive]);\n return { secondsLeft, restartCountdown };\n}\n//# sourceMappingURL=useCountdown.js.map"],"names":[],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,YAAY,CAAC,OAAO,EAAE;AAC9C,IAAI,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;AAC3D,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;AAClD,IAAI,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,UAAU,GAAG,OAAO,KAAK;AACjE,QAAQ,WAAW,CAAC,KAAK,CAAC;AAC1B,QAAQ,cAAc,CAAC,UAAU,CAAC;AAClC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACjB,IAAI,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM;AAC/C,QAAQ,cAAc,CAAC,OAAO,CAAC;AAC/B,QAAQ,WAAW,CAAC,IAAI,CAAC;AACzB,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AACjC,IAAI,SAAS,CAAC,MAAM;AACpB,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY,OAAO,MAAM,EAAE,CAAC;AAC5B,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM;AAC3C,YAAY,cAAc,CAAC,CAAC,WAAW,KAAK;AAC5C,gBAAgB,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC;AAClD,gBAAgB,IAAI,UAAU,IAAI,CAAC,EAAE;AACrC,oBAAoB,aAAa,CAAC,QAAQ,CAAC;AAC3C,oBAAoB,WAAW,CAAC,KAAK,CAAC;AACtC,oBAAoB,OAAO,CAAC;AAC5B,gBAAgB;AAChB,gBAAgB,OAAO,UAAU;AACjC,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,EAAE,IAAI,CAAC;AAChB,QAAQ,OAAO,MAAM,aAAa,CAAC,QAAQ,CAAC;AAC5C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAClB,IAAI,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;AAC5C;;;;"}
@@ -0,0 +1,52 @@
1
+ import { useEffect } from 'react';
2
+
3
+ /* eslint-disable no-lonely-if */
4
+ function useDisableBodyScrollEffect(disable) {
5
+ useEffect(() => {
6
+ let observer;
7
+ let timer;
8
+ const lock = () => {
9
+ const { clientWidth } = document.documentElement;
10
+ const { innerWidth } = window;
11
+ const scrollbarWidth = clientWidth ? innerWidth - clientWidth : 0;
12
+ document.body.style.overflow = 'hidden';
13
+ document.body.style.paddingRight = `${Math.max(0, scrollbarWidth)}px`;
14
+ };
15
+ const unlock = () => {
16
+ document.body.style.overflow = 'unset';
17
+ document.body.style.paddingRight = '0px';
18
+ };
19
+ if (disable) {
20
+ lock();
21
+ }
22
+ else {
23
+ // Wait until all portal elements are removed (exit animations done)
24
+ if (document.querySelector('.portal')) {
25
+ observer = new MutationObserver(() => {
26
+ if (!document.querySelector('.portal')) {
27
+ unlock();
28
+ observer === null || observer === void 0 ? void 0 : observer.disconnect();
29
+ }
30
+ });
31
+ observer.observe(document.body, { childList: true, subtree: true });
32
+ // Fallback in case observer misses changes
33
+ timer = window.setTimeout(() => {
34
+ unlock();
35
+ observer === null || observer === void 0 ? void 0 : observer.disconnect();
36
+ }, 300);
37
+ }
38
+ else {
39
+ unlock();
40
+ }
41
+ }
42
+ return () => {
43
+ if (observer)
44
+ observer.disconnect();
45
+ if (timer)
46
+ window.clearTimeout(timer);
47
+ };
48
+ }, [disable]);
49
+ }
50
+
51
+ export { useDisableBodyScrollEffect as default };
52
+ //# sourceMappingURL=useDisableBodyScrollEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDisableBodyScrollEffect.js","sources":["../../../dist-transpiled/hooks/useDisableBodyScrollEffect.js"],"sourcesContent":["/* eslint-disable no-lonely-if */\nimport { useEffect } from 'react';\nexport default function useDisableBodyScrollEffect(disable) {\n useEffect(() => {\n let observer;\n let timer;\n const lock = () => {\n const { clientWidth } = document.documentElement;\n const { innerWidth } = window;\n const scrollbarWidth = clientWidth ? innerWidth - clientWidth : 0;\n document.body.style.overflow = 'hidden';\n document.body.style.paddingRight = `${Math.max(0, scrollbarWidth)}px`;\n };\n const unlock = () => {\n document.body.style.overflow = 'unset';\n document.body.style.paddingRight = '0px';\n };\n if (disable) {\n lock();\n }\n else {\n // Wait until all portal elements are removed (exit animations done)\n if (document.querySelector('.portal')) {\n observer = new MutationObserver(() => {\n if (!document.querySelector('.portal')) {\n unlock();\n observer === null || observer === void 0 ? void 0 : observer.disconnect();\n }\n });\n observer.observe(document.body, { childList: true, subtree: true });\n // Fallback in case observer misses changes\n timer = window.setTimeout(() => {\n unlock();\n observer === null || observer === void 0 ? void 0 : observer.disconnect();\n }, 300);\n }\n else {\n unlock();\n }\n }\n return () => {\n if (observer)\n observer.disconnect();\n if (timer)\n window.clearTimeout(timer);\n };\n }, [disable]);\n}\n//# sourceMappingURL=useDisableBodyScrollEffect.js.map"],"names":[],"mappings":";;AAAA;AAEe,SAAS,0BAA0B,CAAC,OAAO,EAAE;AAC5D,IAAI,SAAS,CAAC,MAAM;AACpB,QAAQ,IAAI,QAAQ;AACpB,QAAQ,IAAI,KAAK;AACjB,QAAQ,MAAM,IAAI,GAAG,MAAM;AAC3B,YAAY,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,eAAe;AAC5D,YAAY,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;AACzC,YAAY,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC;AAC7E,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AACnD,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;AACjF,QAAQ,CAAC;AACT,QAAQ,MAAM,MAAM,GAAG,MAAM;AAC7B,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAClD,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK;AACpD,QAAQ,CAAC;AACT,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,IAAI,EAAE;AAClB,QAAQ;AACR,aAAa;AACb;AACA,YAAY,IAAI,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;AACnD,gBAAgB,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAM;AACtD,oBAAoB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;AAC5D,wBAAwB,MAAM,EAAE;AAChC,wBAAwB,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE;AACjG,oBAAoB;AACpB,gBAAgB,CAAC,CAAC;AAClB,gBAAgB,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF;AACA,gBAAgB,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AAChD,oBAAoB,MAAM,EAAE;AAC5B,oBAAoB,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE;AAC7F,gBAAgB,CAAC,EAAE,GAAG,CAAC;AACvB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,EAAE;AACxB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,YAAY,IAAI,QAAQ;AACxB,gBAAgB,QAAQ,CAAC,UAAU,EAAE;AACrC,YAAY,IAAI,KAAK;AACrB,gBAAgB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;AAC1C,QAAQ,CAAC;AACT,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACjB;;;;"}
@@ -0,0 +1,17 @@
1
+ import { useCallback } from 'react';
2
+ import useProvidedRefOrCreate from './useProvidedRefOrCreate.js';
3
+
4
+ function useDisableInputWheel(ref) {
5
+ const inputRef = useProvidedRefOrCreate(ref);
6
+ const handleOnWheel = useCallback((event) => {
7
+ var _a;
8
+ event.stopPropagation();
9
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();
10
+ }, [inputRef]);
11
+ return {
12
+ handleOnWheel,
13
+ };
14
+ }
15
+
16
+ export { useDisableInputWheel as default };
17
+ //# sourceMappingURL=useDisableInputWheel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDisableInputWheel.js","sources":["../../../dist-transpiled/hooks/useDisableInputWheel.js"],"sourcesContent":["import { useCallback } from 'react';\nimport useProvidedRefOrCreate from './useProvidedRefOrCreate';\nexport default function useDisableInputWheel(ref) {\n const inputRef = useProvidedRefOrCreate(ref);\n const handleOnWheel = useCallback((event) => {\n var _a;\n event.stopPropagation();\n (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();\n }, [inputRef]);\n return {\n handleOnWheel,\n };\n}\n//# sourceMappingURL=useDisableInputWheel.js.map"],"names":[],"mappings":";;;AAEe,SAAS,oBAAoB,CAAC,GAAG,EAAE;AAClD,IAAI,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC;AAChD,IAAI,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAK,KAAK;AACjD,QAAQ,IAAI,EAAE;AACd,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE;AAC9E,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAClB,IAAI,OAAO;AACX,QAAQ,aAAa;AACrB,KAAK;AACL;;;;"}
@@ -0,0 +1,16 @@
1
+ import { useCallback } from 'react';
2
+ import formatCurrency from '../utils/formatCurrency.js';
3
+ import { useDContext } from '../contexts/DContext.js';
4
+
5
+ function useFormatCurrency(...args) {
6
+ const { currency } = useDContext();
7
+ const format = useCallback((value, currencyOptions) => formatCurrency(value, currencyOptions || currency), [currency]);
8
+ const values = (args || []).map((value) => (formatCurrency(value !== null && value !== void 0 ? value : 0, currency)));
9
+ return {
10
+ format,
11
+ values,
12
+ };
13
+ }
14
+
15
+ export { useFormatCurrency as default };
16
+ //# sourceMappingURL=useFormatCurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormatCurrency.js","sources":["../../../dist-transpiled/hooks/useFormatCurrency.js"],"sourcesContent":["import { useCallback } from 'react';\nimport { useDContext } from '../contexts';\nimport formatCurrency from '../utils/formatCurrency';\nexport default function useFormatCurrency(...args) {\n const { currency } = useDContext();\n const format = useCallback((value, currencyOptions) => formatCurrency(value, currencyOptions || currency), [currency]);\n const values = (args || []).map((value) => (formatCurrency(value !== null && value !== void 0 ? value : 0, currency)));\n return {\n format,\n values,\n };\n}\n//# sourceMappingURL=useFormatCurrency.js.map"],"names":[],"mappings":";;;;AAGe,SAAS,iBAAiB,CAAC,GAAG,IAAI,EAAE;AACnD,IAAI,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;AACtC,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,cAAc,CAAC,KAAK,EAAE,eAAe,IAAI,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1H,IAAI,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,cAAc,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1H,IAAI,OAAO;AACX,QAAQ,MAAM;AACd,QAAQ,MAAM;AACd,KAAK;AACL;;;;"}
@@ -0,0 +1,130 @@
1
+ import { useRef, useCallback, useState, useEffect, useMemo } from 'react';
2
+ import currency from 'currency.js';
3
+ import useProvidedRefOrCreate from './useProvidedRefOrCreate.js';
4
+
5
+ function formatValue(value, currencyOptions) {
6
+ if (value === undefined) {
7
+ return '';
8
+ }
9
+ return currency(value, Object.assign(Object.assign({}, currencyOptions), { symbol: '' })).format();
10
+ }
11
+ /**
12
+ * State and handlers for a currency input: a formatted string while the field
13
+ * is idle and the raw number while it is being edited.
14
+ *
15
+ * `minValue`/`maxValue` bound the value. With `clamp` (default `true`) an
16
+ * out-of-range value is brought into range whenever it is not being typed:
17
+ * on mount, when `value` or the bounds change, and on blur. Every time the
18
+ * clamp changes the value, `onChange` receives the clamped number, so the
19
+ * input and the consumer's state never disagree. While the field is focused
20
+ * the typed number is reported as is, so a partial entry is not rewritten.
21
+ *
22
+ * With `clamp: false` the value is never changed: the bounds only feed
23
+ * `isOverMax` / `isUnderMin`, so the consumer can show its own message (e.g.
24
+ * "You exceeded the limit") and keep the entered amount.
25
+ *
26
+ * Controlled usage follows the same contract as a native controlled input:
27
+ * reflect `onChange` into `value` in the same event (`setState` in the
28
+ * handler). The hook keeps showing `value` whenever it isn't being edited, so
29
+ * a consumer can reject a change by keeping `value` as it was. Deferring the
30
+ * update (a timer, awaiting a request) makes the hook see a stale `value` in
31
+ * between: the field can flash the previous amount and a clamp can be
32
+ * reported again when the deferred value arrives.
33
+ */
34
+ function useInputCurrency(currencyOptions, value, onFocus, onChange, onBlur, ref, minValue, maxValue, clamp = true) {
35
+ const inputRef = useProvidedRefOrCreate(ref);
36
+ const onChangeRef = useRef(onChange);
37
+ onChangeRef.current = onChange;
38
+ // Last clamp reported through `onChange`, as the value it came from and the
39
+ // value it produced. StrictMode replays effects, and a consumer may reflect
40
+ // `onChange` asynchronously, both before `value` catches up: the same clamp
41
+ // must not be reported twice.
42
+ const lastReportedClampRef = useRef(null);
43
+ const clampValue = useCallback((newValue) => {
44
+ if (newValue === undefined || !clamp) {
45
+ return newValue;
46
+ }
47
+ let clampedValue = newValue;
48
+ if (minValue !== undefined) {
49
+ clampedValue = Math.max(clampedValue, minValue);
50
+ }
51
+ if (maxValue !== undefined) {
52
+ clampedValue = Math.min(clampedValue, maxValue);
53
+ }
54
+ return clampedValue;
55
+ }, [minValue, maxValue, clamp]);
56
+ const [innerType, setInnerType] = useState('text');
57
+ const [innerNumber, setInnerNumber] = useState(() => clampValue(value));
58
+ const handleOnFocus = useCallback((event) => {
59
+ event.stopPropagation();
60
+ setInnerType('number');
61
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
62
+ }, [onFocus]);
63
+ const handleOnBlur = useCallback((event) => {
64
+ event.stopPropagation();
65
+ setInnerType('text');
66
+ const clampedNumber = clampValue(innerNumber);
67
+ if (clampedNumber !== innerNumber) {
68
+ setInnerNumber(clampedNumber);
69
+ // Recorded before notifying, so the sync effect that runs when editing
70
+ // ends doesn't report the same clamp again while `value` still holds the
71
+ // typed number.
72
+ lastReportedClampRef.current = { from: value, to: clampedNumber };
73
+ onChange === null || onChange === void 0 ? void 0 : onChange(clampedNumber);
74
+ }
75
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
76
+ }, [onBlur, innerNumber, clampValue, onChange, value]);
77
+ const handleOnChange = useCallback((newValue) => {
78
+ const newNumber = (newValue === undefined || newValue === '') ? undefined : Number(newValue);
79
+ if (newNumber !== innerNumber) {
80
+ setInnerNumber(newNumber);
81
+ onChange === null || onChange === void 0 ? void 0 : onChange(newNumber);
82
+ }
83
+ }, [onChange, innerNumber]);
84
+ const isEditing = innerType === 'number';
85
+ // Keep the inner value in sync with `value` and the bounds. While the user
86
+ // is typing, the consumer echoes the typed number back through `value`, so
87
+ // it is taken as is; otherwise it is clamped, and a clamp that changes it is
88
+ // reported through `onChange`.
89
+ useEffect(() => {
90
+ var _a;
91
+ const nextNumber = isEditing ? value : clampValue(value);
92
+ if (nextNumber !== innerNumber) {
93
+ setInnerNumber(nextNumber);
94
+ }
95
+ if (nextNumber !== value) {
96
+ const last = lastReportedClampRef.current;
97
+ if (!last || last.from !== value || last.to !== nextNumber) {
98
+ lastReportedClampRef.current = { from: value, to: nextNumber };
99
+ (_a = onChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onChangeRef, nextNumber);
100
+ }
101
+ }
102
+ else {
103
+ lastReportedClampRef.current = null;
104
+ }
105
+ // `innerNumber` is read, not tracked: the effect reacts to the consumer's
106
+ // value and to the bounds, not to its own updates.
107
+ // eslint-disable-next-line react-hooks/exhaustive-deps
108
+ }, [value, clampValue, isEditing]);
109
+ // Derived, not stored: the formatted text always matches the current number
110
+ // and options, even when both change in the same render. It depends on the
111
+ // options object itself, so a new custom `format` function is honored too;
112
+ // formatting is cheap and doesn't feed the synchronization effect.
113
+ const innerString = useMemo(() => formatValue(innerNumber, currencyOptions), [innerNumber, currencyOptions]);
114
+ const innerValue = useMemo(() => { var _a; return (innerType === 'number' ? (_a = innerNumber === null || innerNumber === void 0 ? void 0 : innerNumber.toString()) !== null && _a !== void 0 ? _a : '' : innerString); }, [innerType, innerNumber, innerString]);
115
+ const isOverMax = maxValue !== undefined && innerNumber !== undefined && innerNumber > maxValue;
116
+ const isUnderMin = minValue !== undefined && innerNumber !== undefined && innerNumber < minValue;
117
+ return {
118
+ inputRef,
119
+ innerValue,
120
+ innerType,
121
+ isOverMax,
122
+ isUnderMin,
123
+ handleOnFocus,
124
+ handleOnChange,
125
+ handleOnBlur,
126
+ };
127
+ }
128
+
129
+ export { useInputCurrency as default };
130
+ //# sourceMappingURL=useInputCurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputCurrency.js","sources":["../../../dist-transpiled/hooks/useInputCurrency.js"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';\nimport currency from 'currency.js';\nimport useProvidedRefOrCreate from './useProvidedRefOrCreate';\nfunction formatValue(value, currencyOptions) {\n if (value === undefined) {\n return '';\n }\n return currency(value, Object.assign(Object.assign({}, currencyOptions), { symbol: '' })).format();\n}\n/**\n * State and handlers for a currency input: a formatted string while the field\n * is idle and the raw number while it is being edited.\n *\n * `minValue`/`maxValue` bound the value. With `clamp` (default `true`) an\n * out-of-range value is brought into range whenever it is not being typed:\n * on mount, when `value` or the bounds change, and on blur. Every time the\n * clamp changes the value, `onChange` receives the clamped number, so the\n * input and the consumer's state never disagree. While the field is focused\n * the typed number is reported as is, so a partial entry is not rewritten.\n *\n * With `clamp: false` the value is never changed: the bounds only feed\n * `isOverMax` / `isUnderMin`, so the consumer can show its own message (e.g.\n * \"You exceeded the limit\") and keep the entered amount.\n *\n * Controlled usage follows the same contract as a native controlled input:\n * reflect `onChange` into `value` in the same event (`setState` in the\n * handler). The hook keeps showing `value` whenever it isn't being edited, so\n * a consumer can reject a change by keeping `value` as it was. Deferring the\n * update (a timer, awaiting a request) makes the hook see a stale `value` in\n * between: the field can flash the previous amount and a clamp can be\n * reported again when the deferred value arrives.\n */\nexport default function useInputCurrency(currencyOptions, value, onFocus, onChange, onBlur, ref, minValue, maxValue, clamp = true) {\n const inputRef = useProvidedRefOrCreate(ref);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n // Last clamp reported through `onChange`, as the value it came from and the\n // value it produced. StrictMode replays effects, and a consumer may reflect\n // `onChange` asynchronously, both before `value` catches up: the same clamp\n // must not be reported twice.\n const lastReportedClampRef = useRef(null);\n const clampValue = useCallback((newValue) => {\n if (newValue === undefined || !clamp) {\n return newValue;\n }\n let clampedValue = newValue;\n if (minValue !== undefined) {\n clampedValue = Math.max(clampedValue, minValue);\n }\n if (maxValue !== undefined) {\n clampedValue = Math.min(clampedValue, maxValue);\n }\n return clampedValue;\n }, [minValue, maxValue, clamp]);\n const [innerType, setInnerType] = useState('text');\n const [innerNumber, setInnerNumber] = useState(() => clampValue(value));\n const handleOnFocus = useCallback((event) => {\n event.stopPropagation();\n setInnerType('number');\n onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);\n }, [onFocus]);\n const handleOnBlur = useCallback((event) => {\n event.stopPropagation();\n setInnerType('text');\n const clampedNumber = clampValue(innerNumber);\n if (clampedNumber !== innerNumber) {\n setInnerNumber(clampedNumber);\n // Recorded before notifying, so the sync effect that runs when editing\n // ends doesn't report the same clamp again while `value` still holds the\n // typed number.\n lastReportedClampRef.current = { from: value, to: clampedNumber };\n onChange === null || onChange === void 0 ? void 0 : onChange(clampedNumber);\n }\n onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);\n }, [onBlur, innerNumber, clampValue, onChange, value]);\n const handleOnChange = useCallback((newValue) => {\n const newNumber = (newValue === undefined || newValue === '') ? undefined : Number(newValue);\n if (newNumber !== innerNumber) {\n setInnerNumber(newNumber);\n onChange === null || onChange === void 0 ? void 0 : onChange(newNumber);\n }\n }, [onChange, innerNumber]);\n const isEditing = innerType === 'number';\n // Keep the inner value in sync with `value` and the bounds. While the user\n // is typing, the consumer echoes the typed number back through `value`, so\n // it is taken as is; otherwise it is clamped, and a clamp that changes it is\n // reported through `onChange`.\n useEffect(() => {\n var _a;\n const nextNumber = isEditing ? value : clampValue(value);\n if (nextNumber !== innerNumber) {\n setInnerNumber(nextNumber);\n }\n if (nextNumber !== value) {\n const last = lastReportedClampRef.current;\n if (!last || last.from !== value || last.to !== nextNumber) {\n lastReportedClampRef.current = { from: value, to: nextNumber };\n (_a = onChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onChangeRef, nextNumber);\n }\n }\n else {\n lastReportedClampRef.current = null;\n }\n // `innerNumber` is read, not tracked: the effect reacts to the consumer's\n // value and to the bounds, not to its own updates.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, clampValue, isEditing]);\n // Derived, not stored: the formatted text always matches the current number\n // and options, even when both change in the same render. It depends on the\n // options object itself, so a new custom `format` function is honored too;\n // formatting is cheap and doesn't feed the synchronization effect.\n const innerString = useMemo(() => formatValue(innerNumber, currencyOptions), [innerNumber, currencyOptions]);\n const innerValue = useMemo(() => { var _a; return (innerType === 'number' ? (_a = innerNumber === null || innerNumber === void 0 ? void 0 : innerNumber.toString()) !== null && _a !== void 0 ? _a : '' : innerString); }, [innerType, innerNumber, innerString]);\n const isOverMax = maxValue !== undefined && innerNumber !== undefined && innerNumber > maxValue;\n const isUnderMin = minValue !== undefined && innerNumber !== undefined && innerNumber < minValue;\n return {\n inputRef,\n innerValue,\n innerType,\n isOverMax,\n isUnderMin,\n handleOnFocus,\n handleOnChange,\n handleOnBlur,\n };\n}\n//# sourceMappingURL=useInputCurrency.js.map"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { useCallback, useState, useMemo } from 'react';
2
+
3
+ function useItemSelection({ getItemIdentifier: getItemIdentifierProp, previousSelected = [], } = {}) {
4
+ const getItemIdentifier = useCallback((item) => (String(getItemIdentifierProp ? getItemIdentifierProp(item) : item.id)), [getItemIdentifierProp]);
5
+ const [selectionMap, setSelectionMap] = useState(() => new Map(previousSelected.map((item) => [getItemIdentifier(item), item])));
6
+ const selectedItems = useMemo(() => Array.from(selectionMap.values()), [selectionMap]);
7
+ const setSelectedItems = useCallback((items) => {
8
+ setSelectionMap(new Map(items.map((item) => [getItemIdentifier(item), item])));
9
+ }, [getItemIdentifier]);
10
+ const isSelectedItem = useCallback((item) => selectionMap.has(getItemIdentifier(item)), [getItemIdentifier, selectionMap]);
11
+ const toggleSelectedItem = useCallback((item) => {
12
+ const identifier = getItemIdentifier(item);
13
+ setSelectionMap((prev) => {
14
+ const newMap = new Map(prev);
15
+ if (newMap.has(identifier)) {
16
+ newMap.delete(identifier);
17
+ }
18
+ else {
19
+ newMap.set(identifier, item);
20
+ }
21
+ return newMap;
22
+ });
23
+ }, [getItemIdentifier]);
24
+ const resetSelectedItems = useCallback(() => setSelectionMap(new Map()), []);
25
+ return {
26
+ selectedItems,
27
+ isSelectedItem,
28
+ toggleSelectedItem,
29
+ resetSelectedItems,
30
+ setSelectedItems,
31
+ };
32
+ }
33
+
34
+ export { useItemSelection as default };
35
+ //# sourceMappingURL=useItemSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useItemSelection.js","sources":["../../../dist-transpiled/hooks/useItemSelection.js"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nexport default function useItemSelection({ getItemIdentifier: getItemIdentifierProp, previousSelected = [], } = {}) {\n const getItemIdentifier = useCallback((item) => (String(getItemIdentifierProp ? getItemIdentifierProp(item) : item.id)), [getItemIdentifierProp]);\n const [selectionMap, setSelectionMap] = useState(() => new Map(previousSelected.map((item) => [getItemIdentifier(item), item])));\n const selectedItems = useMemo(() => Array.from(selectionMap.values()), [selectionMap]);\n const setSelectedItems = useCallback((items) => {\n setSelectionMap(new Map(items.map((item) => [getItemIdentifier(item), item])));\n }, [getItemIdentifier]);\n const isSelectedItem = useCallback((item) => selectionMap.has(getItemIdentifier(item)), [getItemIdentifier, selectionMap]);\n const toggleSelectedItem = useCallback((item) => {\n const identifier = getItemIdentifier(item);\n setSelectionMap((prev) => {\n const newMap = new Map(prev);\n if (newMap.has(identifier)) {\n newMap.delete(identifier);\n }\n else {\n newMap.set(identifier, item);\n }\n return newMap;\n });\n }, [getItemIdentifier]);\n const resetSelectedItems = useCallback(() => setSelectionMap(new Map()), []);\n return {\n selectedItems,\n isSelectedItem,\n toggleSelectedItem,\n resetSelectedItems,\n setSelectedItems,\n };\n}\n//# sourceMappingURL=useItemSelection.js.map"],"names":[],"mappings":";;AACe,SAAS,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE;AACpH,IAAI,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,IAAI,MAAM,MAAM,CAAC,qBAAqB,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC;AACrJ,IAAI,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACpI,IAAI,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAC1F,IAAI,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,KAAK,KAAK;AACpD,QAAQ,eAAe,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACtF,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAC3B,IAAI,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAC9H,IAAI,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,IAAI,KAAK;AACrD,QAAQ,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAClD,QAAQ,eAAe,CAAC,CAAC,IAAI,KAAK;AAClC,YAAY,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AACxC,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACxC,gBAAgB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AACzC,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;AAC5C,YAAY;AACZ,YAAY,OAAO,MAAM;AACzB,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAC3B,IAAI,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,eAAe,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAChF,IAAI,OAAO;AACX,QAAQ,aAAa;AACrB,QAAQ,cAAc;AACtB,QAAQ,kBAAkB;AAC1B,QAAQ,kBAAkB;AAC1B,QAAQ,gBAAgB;AACxB,KAAK;AACL;;;;"}
@@ -0,0 +1,69 @@
1
+ import { useMemo } from 'react';
2
+ import { useDContext } from '../contexts/DContext.js';
3
+ import { PREFIX_BS } from '../components/config.js';
4
+ import useMediaQuery from './useMediaQuery.js';
5
+
6
+ const BREAKPOINTS = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
7
+ // Breakpoints read from the CSS on first use and shared by every component
8
+ // that resolves responsive props: one computed-style read for the page,
9
+ // instead of one per breakpoint per render. `dynamic-ui.css` has to be loaded
10
+ // before rendering; if it isn't, the empty result is kept too, so a
11
+ // misconfigured tree doesn't pay the read on every render (responsive props
12
+ // then keep their default value and useResponsiveProp warns in development).
13
+ let cssBreakpoints = null;
14
+ function readCssBreakpoint(breakpoint) {
15
+ if (cssBreakpoints)
16
+ return cssBreakpoints[breakpoint];
17
+ if (typeof document === 'undefined')
18
+ return '';
19
+ const style = getComputedStyle(document.documentElement);
20
+ const read = Object.fromEntries(BREAKPOINTS.map((name) => [
21
+ name,
22
+ style.getPropertyValue(`--${PREFIX_BS}breakpoint-${name}`).trim(),
23
+ ]));
24
+ cssBreakpoints = read;
25
+ return read[breakpoint];
26
+ }
27
+ /** Clears the cached CSS breakpoints. Only meant for tests. */
28
+ function resetCssBreakpointsCache() {
29
+ cssBreakpoints = null;
30
+ }
31
+ /**
32
+ * Pixel value of a breakpoint. `DContextProvider` reads them from the CSS and
33
+ * shares them through the context; outside of it (a tree without the
34
+ * provider, or its first render) they are read from the same CSS variables
35
+ * here, so responsive props resolve either way.
36
+ */
37
+ function useBreakpointValue(breakpoint) {
38
+ const { breakpoints } = useDContext();
39
+ const fromContext = breakpoints[breakpoint];
40
+ return useMemo(() => fromContext || readCssBreakpoint(breakpoint), [fromContext, breakpoint]);
41
+ }
42
+ function useMediaBreakpointUp(breakpoint, useListener = false) {
43
+ const value = useBreakpointValue(breakpoint);
44
+ // Without a breakpoint the query can't match; `not all` keeps it false
45
+ // instead of an invalid `(min-width: )`.
46
+ const mediaQuery = value ? `(min-width: ${value})` : 'not all';
47
+ return useMediaQuery(mediaQuery, useListener);
48
+ }
49
+ function useMediaBreakpointUpXs(useListener = false) {
50
+ return useMediaBreakpointUp('xs', useListener);
51
+ }
52
+ function useMediaBreakpointUpSm(useListener = false) {
53
+ return useMediaBreakpointUp('sm', useListener);
54
+ }
55
+ function useMediaBreakpointUpMd(useListener = false) {
56
+ return useMediaBreakpointUp('md', useListener);
57
+ }
58
+ function useMediaBreakpointUpLg(useListener = false) {
59
+ return useMediaBreakpointUp('lg', useListener);
60
+ }
61
+ function useMediaBreakpointUpXl(useListener = false) {
62
+ return useMediaBreakpointUp('xl', useListener);
63
+ }
64
+ function useMediaBreakpointUpXxl(useListener = false) {
65
+ return useMediaBreakpointUp('xxl', useListener);
66
+ }
67
+
68
+ export { resetCssBreakpointsCache, useBreakpointValue, useMediaBreakpointUpLg, useMediaBreakpointUpMd, useMediaBreakpointUpSm, useMediaBreakpointUpXl, useMediaBreakpointUpXs, useMediaBreakpointUpXxl };
69
+ //# sourceMappingURL=useMediaBreakpointUp.js.map