@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":"DTooltip.js","sources":["../../../../dist-transpiled/components/DTooltip/DTooltip.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useState, useRef, useMemo } from 'react';\nimport { autoUpdate, offset, flip, shift, arrow, useClick, useDismiss, useFocus, useFloating, useHover, useInteractions, useRole, FloatingPortal, FloatingArrow, } from '@floating-ui/react';\nimport classNames from 'classnames';\nconst ARROW_WIDTH = 8;\nconst ARROW_HEIGHT = 4;\nconst GAP = 2;\n/**\n * Tooltip is an abstraction component that wraps any element (`Component`) and displays\n * floating contextual content (`children`) positioned relative to it using Floating UI.\n * Use it to add short, non-critical hints or descriptions triggered by hover, focus, or\n * click, without altering the surrounding layout.\n */\nexport default function DTooltip({ className, childrenClassName, style, offSet = ARROW_HEIGHT + GAP, padding, withFocus = false, withClick = false, withHover = true, open = false, placement = 'top', size, Component, children, }) {\n const [isOpen, setIsOpen] = useState(open);\n const arrowRef = useRef(null);\n const { refs, context, floatingStyles, } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n placement,\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(offSet),\n flip(),\n shift({\n padding,\n }),\n arrow({\n element: arrowRef,\n }),\n ],\n });\n const hover = useHover(context, { move: false });\n const focus = useFocus(context);\n const dismiss = useDismiss(context, { ancestorScroll: true });\n const click = useClick(context);\n const role = useRole(context, { role: 'tooltip' });\n const { getReferenceProps, getFloatingProps } = useInteractions([\n withHover ? hover : undefined,\n withClick ? click : undefined,\n withFocus ? focus : undefined,\n dismiss,\n role,\n ]);\n const generateClasses = useMemo(() => (Object.assign({ 'tooltip show': true, [`tooltip-${size}`]: !!size }, className && { [className]: true })), [size, className]);\n return (_jsxs(_Fragment, { children: [_jsx(\"div\", Object.assign({ className: childrenClassName, ref: refs.setReference }, getReferenceProps(), { children: Component })), _jsx(FloatingPortal, { children: isOpen && (_jsxs(\"div\", Object.assign({ className: classNames(generateClasses), ref: refs.setFloating, style: Object.assign(Object.assign({}, floatingStyles), style) }, getFloatingProps(), { children: [_jsx(FloatingArrow, { ref: arrowRef, context: context, width: ARROW_WIDTH, height: ARROW_HEIGHT }), _jsx(\"div\", { className: \"tooltip-inner\", children: children })] }))) })] }));\n}\n//# sourceMappingURL=DTooltip.js.map"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import DTooltip from './DTooltip.js';
2
+
3
+
4
+
5
+ export { DTooltip as default };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,55 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import classNames from 'classnames';
3
+ import useScreenshotDownload from './hooks/useScreenshotDownload.js';
4
+ import useScreenshotWebShare from './hooks/useScreenshotWebShare.js';
5
+ import DIcon from '../DIcon/DIcon.js';
6
+ import DButton from '../DButton/DButton.js';
7
+
8
+ function DVoucher({ amount, amountDetails, icon, title, onError, message, downloadText = 'Download', shareText = 'Share', fileName = 'voucher', hideActions = false, className, children, }) {
9
+ const { shareRef, share } = useScreenshotWebShare();
10
+ const { downloadRef, download } = useScreenshotDownload();
11
+ const handleShare = () => {
12
+ share(fileName)
13
+ .catch(async (err) => {
14
+ if (onError) {
15
+ await onError(err);
16
+ }
17
+ })
18
+ .catch(() => {
19
+ // Error already handled by onError
20
+ });
21
+ };
22
+ const handleDownload = () => {
23
+ download(fileName)
24
+ .catch(async (err) => {
25
+ if (onError) {
26
+ await onError(err);
27
+ }
28
+ })
29
+ .catch(() => {
30
+ // Error already handled by onError
31
+ });
32
+ };
33
+ const defaultIconProps = {
34
+ icon: 'CircleCheckBig',
35
+ color: 'success',
36
+ size: '2rem',
37
+ hasCircle: true,
38
+ };
39
+ const resolvedIconProps = (() => {
40
+ if (icon === false || icon == null)
41
+ return null;
42
+ if (typeof icon === 'string')
43
+ return Object.assign(Object.assign({}, defaultIconProps), { icon });
44
+ if (typeof icon === 'object')
45
+ return Object.assign(Object.assign({}, defaultIconProps), icon);
46
+ return defaultIconProps;
47
+ })();
48
+ return (jsx("div", { className: classNames('d-voucher', className), ref: (el) => {
49
+ shareRef.current = el;
50
+ downloadRef.current = el;
51
+ }, children: jsxs("div", { children: [jsxs("div", { className: "d-voucher-header", children: [resolvedIconProps && (jsx(DIcon, Object.assign({}, resolvedIconProps))), jsxs("div", { className: "d-voucher-title-group", children: [jsx("h3", { className: "d-voucher-title", children: title }), jsx("p", { className: "d-voucher-message", children: message })] })] }), amount && (jsxs("div", { className: "d-voucher-amount", children: [jsx("div", { className: classNames('d-voucher-amount-value', { 'd-voucher-amount-value-with-details': !!amountDetails }), children: amount }), amountDetails] })), jsx("hr", { className: "d-voucher-divider" }), children, !hideActions && (jsxs(Fragment, { children: [jsx("hr", { className: "my-4" }), jsxs("div", { className: "d-voucher-footer", children: [jsx(DButton, { onClick: handleShare, iconStart: "Share2", text: shareText, variant: "outline", size: "sm" }), jsx(DButton, { onClick: handleDownload, iconStart: "Download", text: downloadText, variant: "outline", size: "sm" })] })] }))] }) }));
52
+ }
53
+
54
+ export { DVoucher as default };
55
+ //# sourceMappingURL=DVoucher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DVoucher.js","sources":["../../../../dist-transpiled/components/DVoucher/DVoucher.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport classNames from 'classnames';\nimport useScreenshotDownload from './hooks/useScreenshotDownload';\nimport useScreenshotWebShare from './hooks/useScreenshotWebShare';\nimport DIcon from '../DIcon';\nimport DButton from '../DButton';\nexport default function DVoucher({ amount, amountDetails, icon, title, onError, message, downloadText = 'Download', shareText = 'Share', fileName = 'voucher', hideActions = false, className, children, }) {\n const { shareRef, share } = useScreenshotWebShare();\n const { downloadRef, download } = useScreenshotDownload();\n const handleShare = () => {\n share(fileName)\n .catch(async (err) => {\n if (onError) {\n await onError(err);\n }\n })\n .catch(() => {\n // Error already handled by onError\n });\n };\n const handleDownload = () => {\n download(fileName)\n .catch(async (err) => {\n if (onError) {\n await onError(err);\n }\n })\n .catch(() => {\n // Error already handled by onError\n });\n };\n const defaultIconProps = {\n icon: 'CircleCheckBig',\n color: 'success',\n size: '2rem',\n hasCircle: true,\n };\n const resolvedIconProps = (() => {\n if (icon === false || icon == null)\n return null;\n if (typeof icon === 'string')\n return Object.assign(Object.assign({}, defaultIconProps), { icon });\n if (typeof icon === 'object')\n return Object.assign(Object.assign({}, defaultIconProps), icon);\n return defaultIconProps;\n })();\n return (_jsx(\"div\", { className: classNames('d-voucher', className), ref: (el) => {\n shareRef.current = el;\n downloadRef.current = el;\n }, children: _jsxs(\"div\", { children: [_jsxs(\"div\", { className: \"d-voucher-header\", children: [resolvedIconProps && (_jsx(DIcon, Object.assign({}, resolvedIconProps))), _jsxs(\"div\", { className: \"d-voucher-title-group\", children: [_jsx(\"h3\", { className: \"d-voucher-title\", children: title }), _jsx(\"p\", { className: \"d-voucher-message\", children: message })] })] }), amount && (_jsxs(\"div\", { className: \"d-voucher-amount\", children: [_jsx(\"div\", { className: classNames('d-voucher-amount-value', { 'd-voucher-amount-value-with-details': !!amountDetails }), children: amount }), amountDetails] })), _jsx(\"hr\", { className: \"d-voucher-divider\" }), children, !hideActions && (_jsxs(_Fragment, { children: [_jsx(\"hr\", { className: \"my-4\" }), _jsxs(\"div\", { className: \"d-voucher-footer\", children: [_jsx(DButton, { onClick: handleShare, iconStart: \"Share2\", text: shareText, variant: \"outline\", size: \"sm\" }), _jsx(DButton, { onClick: handleDownload, iconStart: \"Download\", text: downloadText, variant: \"outline\", size: \"sm\" })] })] }))] }) }));\n}\n//# sourceMappingURL=DVoucher.js.map"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import html2canvas from 'html2canvas';
2
+ import { useRef, useCallback } from 'react';
3
+
4
+ function useScreenshot() {
5
+ const clipRef = useRef(null);
6
+ const takeBlob = useCallback(async (type) => {
7
+ if (!clipRef.current) {
8
+ throw new Error('set the clipRef');
9
+ }
10
+ const canvas = await html2canvas(clipRef === null || clipRef === void 0 ? void 0 : clipRef.current, {
11
+ allowTaint: true,
12
+ useCORS: true,
13
+ });
14
+ return (new Promise((resolve, reject) => {
15
+ canvas.toBlob((innerBlob) => {
16
+ if (!innerBlob) {
17
+ return reject();
18
+ }
19
+ return resolve(innerBlob);
20
+ }, type);
21
+ }));
22
+ }, []);
23
+ return {
24
+ clipRef,
25
+ takeBlob,
26
+ };
27
+ }
28
+
29
+ export { useScreenshot as default };
30
+ //# sourceMappingURL=useScreenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScreenshot.js","sources":["../../../../../dist-transpiled/components/DVoucher/hooks/useScreenshot.js"],"sourcesContent":["import html2canvas from 'html2canvas';\nimport { useRef, useCallback } from 'react';\nexport default function useScreenshot() {\n const clipRef = useRef(null);\n const takeBlob = useCallback(async (type) => {\n if (!clipRef.current) {\n throw new Error('set the clipRef');\n }\n const canvas = await html2canvas(clipRef === null || clipRef === void 0 ? void 0 : clipRef.current, {\n allowTaint: true,\n useCORS: true,\n });\n return (new Promise((resolve, reject) => {\n canvas.toBlob((innerBlob) => {\n if (!innerBlob) {\n return reject();\n }\n return resolve(innerBlob);\n }, type);\n }));\n }, []);\n return {\n clipRef,\n takeBlob,\n };\n}\n//# sourceMappingURL=useScreenshot.js.map"],"names":[],"mappings":";;;AAEe,SAAS,aAAa,GAAG;AACxC,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AAChC,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,IAAI,KAAK;AACjD,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC9B,YAAY,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AAC9C,QAAQ;AACR,QAAQ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE;AAC5G,YAAY,UAAU,EAAE,IAAI;AAC5B,YAAY,OAAO,EAAE,IAAI;AACzB,SAAS,CAAC;AACV,QAAQ,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACjD,YAAY,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK;AACzC,gBAAgB,IAAI,CAAC,SAAS,EAAE;AAChC,oBAAoB,OAAO,MAAM,EAAE;AACnC,gBAAgB;AAChB,gBAAgB,OAAO,OAAO,CAAC,SAAS,CAAC;AACzC,YAAY,CAAC,EAAE,IAAI,CAAC;AACpB,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC,EAAE,EAAE,CAAC;AACV,IAAI,OAAO;AACX,QAAQ,OAAO;AACf,QAAQ,QAAQ;AAChB,KAAK;AACL;;;;"}
@@ -0,0 +1,30 @@
1
+ import { useCallback } from 'react';
2
+ import useScreenshot from './useScreenshot.js';
3
+
4
+ function useScreenshotDownload() {
5
+ const { clipRef, takeBlob } = useScreenshot();
6
+ const download = useCallback(async (fileName = 'voucher') => {
7
+ const blob = await takeBlob('image/jpeg');
8
+ const url = window.URL.createObjectURL(blob);
9
+ const link = window.document.createElement('a');
10
+ link.style.display = 'none';
11
+ link.href = url;
12
+ // Fall back to the default base name when the caller passes a blank/whitespace value,
13
+ // so the file is never named just ".jpg".
14
+ const safeFileName = fileName.trim() || 'voucher';
15
+ // The extension is always appended by the hook to guarantee a valid image file,
16
+ // regardless of what fileName the caller passes (e.g. "receipt.png" -> "receipt.png.jpg").
17
+ link.download = `${safeFileName}.jpg`;
18
+ document.body.appendChild(link);
19
+ link.click();
20
+ document.body.removeChild(link);
21
+ window.URL.revokeObjectURL(url);
22
+ }, [takeBlob]);
23
+ return {
24
+ download,
25
+ downloadRef: clipRef,
26
+ };
27
+ }
28
+
29
+ export { useScreenshotDownload as default };
30
+ //# sourceMappingURL=useScreenshotDownload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScreenshotDownload.js","sources":["../../../../../dist-transpiled/components/DVoucher/hooks/useScreenshotDownload.js"],"sourcesContent":["import { useCallback } from 'react';\nimport useScreenshot from './useScreenshot';\nexport default function useScreenshotDownload() {\n const { clipRef, takeBlob } = useScreenshot();\n const download = useCallback(async (fileName = 'voucher') => {\n const blob = await takeBlob('image/jpeg');\n const url = window.URL.createObjectURL(blob);\n const link = window.document.createElement('a');\n link.style.display = 'none';\n link.href = url;\n // Fall back to the default base name when the caller passes a blank/whitespace value,\n // so the file is never named just \".jpg\".\n const safeFileName = fileName.trim() || 'voucher';\n // The extension is always appended by the hook to guarantee a valid image file,\n // regardless of what fileName the caller passes (e.g. \"receipt.png\" -> \"receipt.png.jpg\").\n link.download = `${safeFileName}.jpg`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n }, [takeBlob]);\n return {\n download,\n downloadRef: clipRef,\n };\n}\n//# sourceMappingURL=useScreenshotDownload.js.map"],"names":[],"mappings":";;;AAEe,SAAS,qBAAqB,GAAG;AAChD,IAAI,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE;AACjD,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,QAAQ,GAAG,SAAS,KAAK;AACjE,QAAQ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC;AACjD,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACpD,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACvD,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AACnC,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;AACvB;AACA;AACA,QAAQ,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,SAAS;AACzD;AACA;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC;AAC7C,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,QAAQ,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AACvC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAClB,IAAI,OAAO;AACX,QAAQ,QAAQ;AAChB,QAAQ,WAAW,EAAE,OAAO;AAC5B,KAAK;AACL;;;;"}
@@ -0,0 +1,27 @@
1
+ import { useCallback } from 'react';
2
+ import useScreenshot from './useScreenshot.js';
3
+
4
+ function useScreenshotWebShare() {
5
+ const { takeBlob, clipRef } = useScreenshot();
6
+ const share = useCallback(async (fileName = 'voucher') => {
7
+ const blob = await takeBlob('image/jpeg');
8
+ // Fall back to the default base name when the caller passes a blank/whitespace value,
9
+ // so the file is never named just ".jpeg".
10
+ const safeFileName = fileName.trim() || 'voucher';
11
+ // The extension is always appended by the hook to guarantee a valid image file,
12
+ // regardless of what fileName the caller passes (e.g. "receipt.png" -> "receipt.png.jpeg").
13
+ const image = new File([blob], `${safeFileName}.jpeg`, { type: 'image/jpeg' });
14
+ if (!navigator.canShare || !navigator.canShare({ files: [image] })) {
15
+ window.print();
16
+ return;
17
+ }
18
+ await navigator.share({ files: [image] });
19
+ }, [takeBlob]);
20
+ return {
21
+ share,
22
+ shareRef: clipRef,
23
+ };
24
+ }
25
+
26
+ export { useScreenshotWebShare as default };
27
+ //# sourceMappingURL=useScreenshotWebShare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScreenshotWebShare.js","sources":["../../../../../dist-transpiled/components/DVoucher/hooks/useScreenshotWebShare.js"],"sourcesContent":["import { useCallback } from 'react';\nimport useScreenshot from './useScreenshot';\nexport default function useScreenshotWebShare() {\n const { takeBlob, clipRef } = useScreenshot();\n const share = useCallback(async (fileName = 'voucher') => {\n const blob = await takeBlob('image/jpeg');\n // Fall back to the default base name when the caller passes a blank/whitespace value,\n // so the file is never named just \".jpeg\".\n const safeFileName = fileName.trim() || 'voucher';\n // The extension is always appended by the hook to guarantee a valid image file,\n // regardless of what fileName the caller passes (e.g. \"receipt.png\" -> \"receipt.png.jpeg\").\n const image = new File([blob], `${safeFileName}.jpeg`, { type: 'image/jpeg' });\n if (!navigator.canShare || !navigator.canShare({ files: [image] })) {\n window.print();\n return;\n }\n await navigator.share({ files: [image] });\n }, [takeBlob]);\n return {\n share,\n shareRef: clipRef,\n };\n}\n//# sourceMappingURL=useScreenshotWebShare.js.map"],"names":[],"mappings":";;;AAEe,SAAS,qBAAqB,GAAG;AAChD,IAAI,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE;AACjD,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,QAAQ,GAAG,SAAS,KAAK;AAC9D,QAAQ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC;AACjD;AACA;AACA,QAAQ,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,SAAS;AACzD;AACA;AACA,QAAQ,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AACtF,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAC5E,YAAY,MAAM,CAAC,KAAK,EAAE;AAC1B,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACjD,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAClB,IAAI,OAAO;AACX,QAAQ,KAAK;AACb,QAAQ,QAAQ,EAAE,OAAO;AACzB,KAAK;AACL;;;;"}
@@ -0,0 +1,9 @@
1
+ import DVoucher from './DVoucher.js';
2
+ export { default as useScreenshot } from './hooks/useScreenshot.js';
3
+ export { default as useScreenshotDownload } from './hooks/useScreenshotDownload.js';
4
+ export { default as useScreenshotWebShare } from './hooks/useScreenshotWebShare.js';
5
+
6
+
7
+
8
+ export { DVoucher as default };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,14 @@
1
+ const PREFIX_BS = 'bs-';
2
+ /**
3
+ * Default icon-font family configured by `DContextProvider`.
4
+ *
5
+ * `DIconBase` compares the family it receives against these values to tell an
6
+ * unconfigured consumer apart from one that deliberately opted into an icon
7
+ * font (Material Symbols, Bootstrap Icons). Only the former gets the
8
+ * development warning for an unresolved icon name.
9
+ */
10
+ const DEFAULT_ICON_FAMILY_CLASS = 'bi';
11
+ const DEFAULT_ICON_FAMILY_PREFIX = 'bi-';
12
+
13
+ export { DEFAULT_ICON_FAMILY_CLASS, DEFAULT_ICON_FAMILY_PREFIX, PREFIX_BS };
14
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sources":["../../../dist-transpiled/components/config.js"],"sourcesContent":["export const PREFIX_BS = 'bs-';\n/**\n * Default icon-font family configured by `DContextProvider`.\n *\n * `DIconBase` compares the family it receives against these values to tell an\n * unconfigured consumer apart from one that deliberately opted into an icon\n * font (Material Symbols, Bootstrap Icons). Only the former gets the\n * development warning for an unresolved icon name.\n */\nexport const DEFAULT_ICON_FAMILY_CLASS = 'bi';\nexport const DEFAULT_ICON_FAMILY_PREFIX = 'bi-';\n//# sourceMappingURL=config.js.map"],"names":[],"mappings":"AAAY,MAAC,SAAS,GAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,yBAAyB,GAAG;AAC7B,MAAC,0BAA0B,GAAG;;;;"}
@@ -0,0 +1,46 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import labelClickGuard from '../../utils/labelClickGuard.js';
3
+
4
+ /**
5
+ * The `<label>` every form control renders, with the click guard already wired.
6
+ *
7
+ * Internal: it exists so the guard — and the lint exception it needs — lives in
8
+ * one place instead of being repeated across every input component.
9
+ *
10
+ * The guard runs in the capture phase, not on bubble: a tooltip or modal
11
+ * trigger that calls `stopPropagation()` in its own handler — a common pattern —
12
+ * would otherwise keep the guard from ever running, and the browser would go on
13
+ * to activate the labelled control. Confirmed in Chromium, where the same
14
+ * trigger toggles the control with a bubble-phase guard and does not with this
15
+ * one. Capturing changes nothing else: `preventDefault` applies to the default
16
+ * action, which is evaluated after propagation either way.
17
+ *
18
+ * The `jsx-a11y` rules below assume a click handler is being used to make a
19
+ * non-interactive element interactive, which then owes the keyboard an
20
+ * equivalent. This handler does the opposite: it suppresses a pointer-only
21
+ * behaviour, the click a label forwards to its control, and adds no way to
22
+ * activate anything. Keyboard support for a nested trigger is the consumer's:
23
+ * `<a href>` carries its own, while a `span` with a role and a tabindex is
24
+ * focusable but inert until they handle Enter and Space themselves.
25
+ */
26
+ function DFormLabel({ htmlFor, className, children }) {
27
+ /**
28
+ * React 19 renders a bigint child; React 18 throws on one, and this package
29
+ * supports both (`react: >=18 <20`). The label helpers count bigint as text
30
+ * because that is what it draws as, so it is turned into its string form here
31
+ * — the one place every control's label passes through — rather than pushing
32
+ * a version check onto consumers.
33
+ *
34
+ * Only a bigint at the top level: one buried inside an array or a fragment is
35
+ * the consumer's own React child, and normalising it would mean walking and
36
+ * rebuilding the whole subtree.
37
+ */
38
+ const content = typeof children === 'bigint' ? String(children) : children;
39
+ return (
40
+ /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,
41
+ jsx-a11y/no-noninteractive-element-interactions */
42
+ jsx("label", { htmlFor: htmlFor, className: className, onClickCapture: labelClickGuard, children: content }));
43
+ }
44
+
45
+ export { DFormLabel as default };
46
+ //# sourceMappingURL=DFormLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DFormLabel.js","sources":["../../../../dist-transpiled/components/internal/DFormLabel.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport labelClickGuard from '../../utils/labelClickGuard';\n/**\n * The `<label>` every form control renders, with the click guard already wired.\n *\n * Internal: it exists so the guard — and the lint exception it needs — lives in\n * one place instead of being repeated across every input component.\n *\n * The guard runs in the capture phase, not on bubble: a tooltip or modal\n * trigger that calls `stopPropagation()` in its own handler — a common pattern —\n * would otherwise keep the guard from ever running, and the browser would go on\n * to activate the labelled control. Confirmed in Chromium, where the same\n * trigger toggles the control with a bubble-phase guard and does not with this\n * one. Capturing changes nothing else: `preventDefault` applies to the default\n * action, which is evaluated after propagation either way.\n *\n * The `jsx-a11y` rules below assume a click handler is being used to make a\n * non-interactive element interactive, which then owes the keyboard an\n * equivalent. This handler does the opposite: it suppresses a pointer-only\n * behaviour, the click a label forwards to its control, and adds no way to\n * activate anything. Keyboard support for a nested trigger is the consumer's:\n * `<a href>` carries its own, while a `span` with a role and a tabindex is\n * focusable but inert until they handle Enter and Space themselves.\n */\nexport default function DFormLabel({ htmlFor, className, children }) {\n /**\n * React 19 renders a bigint child; React 18 throws on one, and this package\n * supports both (`react: >=18 <20`). The label helpers count bigint as text\n * because that is what it draws as, so it is turned into its string form here\n * — the one place every control's label passes through — rather than pushing\n * a version check onto consumers.\n *\n * Only a bigint at the top level: one buried inside an array or a fragment is\n * the consumer's own React child, and normalising it would mean walking and\n * rebuilding the whole subtree.\n */\n const content = typeof children === 'bigint' ? String(children) : children;\n return (\n /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,\n jsx-a11y/no-noninteractive-element-interactions */\n _jsx(\"label\", { htmlFor: htmlFor, className: className, onClickCapture: labelClickGuard, children: content }));\n}\n//# sourceMappingURL=DFormLabel.js.map"],"names":["_jsx"],"mappings":";;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ;AAC9E,IAAI;AACJ;AACA;AACA,IAAIA,GAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACjH;;;;"}
@@ -0,0 +1,124 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { createContext, useContext, useState, useCallback, useLayoutEffect, useMemo } from 'react';
3
+ import { DPortalContextProvider } from './DPortalContext.js';
4
+ import { createConfirmModalStore, ConfirmModalStoreContext } from '../components/DConfirmModal/confirmModalStore.js';
5
+ import { DEFAULT_ICON_FAMILY_PREFIX, DEFAULT_ICON_FAMILY_CLASS, PREFIX_BS } from '../components/config.js';
6
+ import getCssVariable from '../utils/getCssVariable.js';
7
+
8
+ const DEFAULT_STATE = {
9
+ language: 'en',
10
+ currency: {
11
+ symbol: '$',
12
+ precision: 2,
13
+ separator: ',',
14
+ decimal: '.',
15
+ },
16
+ icon: {
17
+ familyClass: DEFAULT_ICON_FAMILY_CLASS,
18
+ familyPrefix: DEFAULT_ICON_FAMILY_PREFIX,
19
+ materialStyle: false,
20
+ },
21
+ iconRegistry: undefined,
22
+ iconMap: {
23
+ x: 'X',
24
+ xLg: 'X',
25
+ chevronUp: 'ChevronUp',
26
+ chevronDown: 'ChevronDown',
27
+ chevronLeft: 'ChevronLeft',
28
+ chevronRight: 'ChevronRight',
29
+ upload: 'Upload',
30
+ calendar: 'Calendar',
31
+ check: 'Check',
32
+ alert: {
33
+ warning: 'AlertCircle',
34
+ danger: 'AlertTriangle',
35
+ success: 'CheckCircle',
36
+ info: 'Info',
37
+ },
38
+ input: {
39
+ search: 'Search',
40
+ show: 'Eye',
41
+ hide: 'EyeOff',
42
+ increase: 'Plus',
43
+ decrease: 'Minus',
44
+ },
45
+ },
46
+ breakpoints: {
47
+ xs: '',
48
+ sm: '',
49
+ md: '',
50
+ lg: '',
51
+ xl: '',
52
+ xxl: '',
53
+ },
54
+ setContext: () => { },
55
+ };
56
+ const DContext = createContext(DEFAULT_STATE);
57
+ /**
58
+ * Root context provider for Dynamic UI. Wrap your application with this
59
+ * component to configure icons, currency, language, and portal settings
60
+ * for all descendant Dynamic UI components.
61
+ *
62
+ * To enable confirmation modals you must also mount `DConfirmModalContainer`
63
+ * somewhere inside this provider (typically right before the closing tag of
64
+ * your root layout), similar to how `DToastContainer` works:
65
+ *
66
+ * ```tsx
67
+ * // Default: portalName="d-portal"
68
+ * <DContextProvider>
69
+ * <App />
70
+ * <DConfirmModalContainer nodeId="d-portal" />
71
+ * </DContextProvider>
72
+ * ```
73
+ *
74
+ * If you customize `portalName`, match it in `DConfirmModalContainer.nodeId`:
75
+ *
76
+ * ```tsx
77
+ * // Custom portalName
78
+ * <DContextProvider portalName="my-custom-portal">
79
+ * <App />
80
+ * <DConfirmModalContainer nodeId="my-custom-portal" />
81
+ * </DContextProvider>
82
+ * ```
83
+ *
84
+ * @template T - Map of portal name → payload shape (e.g. `{ modal: { title: string } }`).
85
+ * Pass it once at the top level: `<DContextProvider<MyPortals> ...>`.
86
+ */
87
+ function DContextProvider({ language = DEFAULT_STATE.language, currency = DEFAULT_STATE.currency, icon = DEFAULT_STATE.icon, iconRegistry = DEFAULT_STATE.iconRegistry, iconMap = DEFAULT_STATE.iconMap, portalName = 'd-portal', availablePortals, children, }) {
88
+ const [internalContext, setInternalContext,] = useState({
89
+ language,
90
+ currency,
91
+ icon,
92
+ iconRegistry,
93
+ iconMap,
94
+ breakpoints: DEFAULT_STATE.breakpoints,
95
+ });
96
+ const setContext = useCallback((newValue) => (setInternalContext((prevInternalContext) => (Object.assign(Object.assign({}, prevInternalContext), newValue)))), []);
97
+ useLayoutEffect(() => {
98
+ setContext({
99
+ breakpoints: {
100
+ xs: getCssVariable(`--${PREFIX_BS}breakpoint-xs`),
101
+ sm: getCssVariable(`--${PREFIX_BS}breakpoint-sm`),
102
+ md: getCssVariable(`--${PREFIX_BS}breakpoint-md`),
103
+ lg: getCssVariable(`--${PREFIX_BS}breakpoint-lg`),
104
+ xl: getCssVariable(`--${PREFIX_BS}breakpoint-xl`),
105
+ xxl: getCssVariable(`--${PREFIX_BS}breakpoint-xxl`),
106
+ },
107
+ });
108
+ }, [setContext]);
109
+ const value = useMemo(() => (Object.assign(Object.assign({}, internalContext), { setContext })), [internalContext, setContext]);
110
+ const confirmStore = useMemo(() => createConfirmModalStore(), []);
111
+ return (jsx(ConfirmModalStoreContext.Provider, { value: confirmStore, children: jsx(DContext.Provider, { value: value, children: jsx(DPortalContextProvider, { portalName: portalName, availablePortals: availablePortals, children: children }) }) }));
112
+ }
113
+ /**
114
+ * Returns the Dynamic UI context value set by `DContextProvider`.
115
+ * Falls back to the library's built-in defaults when no `DContextProvider`
116
+ * is present in the tree — wrap your application with `DContextProvider`
117
+ * to customise icons, currency, language, and portal settings.
118
+ */
119
+ function useDContext() {
120
+ return useContext(DContext);
121
+ }
122
+
123
+ export { DContext, DContextProvider, useDContext };
124
+ //# sourceMappingURL=DContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DContext.js","sources":["../../../dist-transpiled/contexts/DContext.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useCallback, useContext, useLayoutEffect, useMemo, useState, } from 'react';\nimport { DPortalContextProvider, } from './DPortalContext';\nimport { createConfirmModalStore, ConfirmModalStoreContext, } from '../components/DConfirmModal/confirmModalStore';\nimport { DEFAULT_ICON_FAMILY_CLASS, DEFAULT_ICON_FAMILY_PREFIX, PREFIX_BS, } from '../components/config';\nimport getCssVariable from '../utils/getCssVariable';\nconst DEFAULT_STATE = {\n language: 'en',\n currency: {\n symbol: '$',\n precision: 2,\n separator: ',',\n decimal: '.',\n },\n icon: {\n familyClass: DEFAULT_ICON_FAMILY_CLASS,\n familyPrefix: DEFAULT_ICON_FAMILY_PREFIX,\n materialStyle: false,\n },\n iconRegistry: undefined,\n iconMap: {\n x: 'X',\n xLg: 'X',\n chevronUp: 'ChevronUp',\n chevronDown: 'ChevronDown',\n chevronLeft: 'ChevronLeft',\n chevronRight: 'ChevronRight',\n upload: 'Upload',\n calendar: 'Calendar',\n check: 'Check',\n alert: {\n warning: 'AlertCircle',\n danger: 'AlertTriangle',\n success: 'CheckCircle',\n info: 'Info',\n },\n input: {\n search: 'Search',\n show: 'Eye',\n hide: 'EyeOff',\n increase: 'Plus',\n decrease: 'Minus',\n },\n },\n breakpoints: {\n xs: '',\n sm: '',\n md: '',\n lg: '',\n xl: '',\n xxl: '',\n },\n setContext: () => { },\n};\nexport const DContext = createContext(DEFAULT_STATE);\n/**\n * Root context provider for Dynamic UI. Wrap your application with this\n * component to configure icons, currency, language, and portal settings\n * for all descendant Dynamic UI components.\n *\n * To enable confirmation modals you must also mount `DConfirmModalContainer`\n * somewhere inside this provider (typically right before the closing tag of\n * your root layout), similar to how `DToastContainer` works:\n *\n * ```tsx\n * // Default: portalName=\"d-portal\"\n * <DContextProvider>\n * <App />\n * <DConfirmModalContainer nodeId=\"d-portal\" />\n * </DContextProvider>\n * ```\n *\n * If you customize `portalName`, match it in `DConfirmModalContainer.nodeId`:\n *\n * ```tsx\n * // Custom portalName\n * <DContextProvider portalName=\"my-custom-portal\">\n * <App />\n * <DConfirmModalContainer nodeId=\"my-custom-portal\" />\n * </DContextProvider>\n * ```\n *\n * @template T - Map of portal name → payload shape (e.g. `{ modal: { title: string } }`).\n * Pass it once at the top level: `<DContextProvider<MyPortals> ...>`.\n */\nexport function DContextProvider({ language = DEFAULT_STATE.language, currency = DEFAULT_STATE.currency, icon = DEFAULT_STATE.icon, iconRegistry = DEFAULT_STATE.iconRegistry, iconMap = DEFAULT_STATE.iconMap, portalName = 'd-portal', availablePortals, children, }) {\n const [internalContext, setInternalContext,] = useState({\n language,\n currency,\n icon,\n iconRegistry,\n iconMap,\n breakpoints: DEFAULT_STATE.breakpoints,\n });\n const setContext = useCallback((newValue) => (setInternalContext((prevInternalContext) => (Object.assign(Object.assign({}, prevInternalContext), newValue)))), []);\n useLayoutEffect(() => {\n setContext({\n breakpoints: {\n xs: getCssVariable(`--${PREFIX_BS}breakpoint-xs`),\n sm: getCssVariable(`--${PREFIX_BS}breakpoint-sm`),\n md: getCssVariable(`--${PREFIX_BS}breakpoint-md`),\n lg: getCssVariable(`--${PREFIX_BS}breakpoint-lg`),\n xl: getCssVariable(`--${PREFIX_BS}breakpoint-xl`),\n xxl: getCssVariable(`--${PREFIX_BS}breakpoint-xxl`),\n },\n });\n }, [setContext]);\n const value = useMemo(() => (Object.assign(Object.assign({}, internalContext), { setContext })), [internalContext, setContext]);\n const confirmStore = useMemo(() => createConfirmModalStore(), []);\n return (_jsx(ConfirmModalStoreContext.Provider, { value: confirmStore, children: _jsx(DContext.Provider, { value: value, children: _jsx(DPortalContextProvider, { portalName: portalName, availablePortals: availablePortals, children: children }) }) }));\n}\n/**\n * Returns the Dynamic UI context value set by `DContextProvider`.\n * Falls back to the library's built-in defaults when no `DContextProvider`\n * is present in the tree — wrap your application with `DContextProvider`\n * to customise icons, currency, language, and portal settings.\n */\nexport function useDContext() {\n return useContext(DContext);\n}\n//# sourceMappingURL=DContext.js.map"],"names":["_jsx"],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { createContext, useState, useRef, useEffect, useCallback, useMemo, useContext } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import useDisableBodyScrollEffect from '../hooks/useDisableBodyScrollEffect.js';
5
+ import usePortal from '../hooks/usePortal.js';
6
+ import useStackState from '../hooks/useStackState.js';
7
+ import getKeyboardFocusableElements from '../utils/getKeyboardFocusableElements.js';
8
+
9
+ const loadPortalStack = () => import('./portal/DPortalStack.js').then((module) => module.default);
10
+ const DPortalContext = createContext(undefined);
11
+ function DPortalContextProvider({ portalName, children, availablePortals, }) {
12
+ const { created } = usePortal(portalName);
13
+ const [stack, { push, pop }] = useStackState([]);
14
+ const [PortalStack, setPortalStack] = useState(null);
15
+ const pending = useRef([]);
16
+ const ready = useRef(false);
17
+ useDisableBodyScrollEffect(Boolean(stack.length));
18
+ // Loads framer-motion off the critical path only when portals are configured,
19
+ // so the first openPortal does not wait for it.
20
+ const hasPortals = Object.keys(availablePortals !== null && availablePortals !== void 0 ? availablePortals : {}).length > 0;
21
+ useEffect(() => {
22
+ if (!hasPortals)
23
+ return;
24
+ loadPortalStack()
25
+ .then((Stack) => {
26
+ ready.current = true;
27
+ setPortalStack(() => Stack);
28
+ })
29
+ .catch(() => {
30
+ // openPortal retries the import and reports the failure.
31
+ });
32
+ }, [hasPortals]);
33
+ const openPortal = useCallback(
34
+ // eslint-disable-next-line prefer-arrow-callback
35
+ function openPortalImpl(name, payload) {
36
+ var _a;
37
+ if (!availablePortals) {
38
+ throw new Error('openPortal was called but DContextProvider has no availablePortals configured. '
39
+ + 'Pass an availablePortals map to DContextProvider.');
40
+ }
41
+ const Component = availablePortals[name];
42
+ if (!Component) {
43
+ throw new Error(`No component registered for portal "${String(name)}". `
44
+ + `Ensure "${String(name)}" has an entry in the availablePortals map on DContextProvider.`);
45
+ }
46
+ // K is a specific member of keyof T & string so the object satisfies
47
+ // InternalStackItem<T>, but TS can't verify generic-over-union assignability.
48
+ const item = { name, Component, payload };
49
+ if (ready.current) {
50
+ push(item);
51
+ }
52
+ else {
53
+ // Not loaded yet: the portal enters the stack together with its renderer.
54
+ pending.current.push(item);
55
+ loadPortalStack().then((Stack) => {
56
+ ready.current = true;
57
+ setPortalStack(() => Stack);
58
+ pending.current.splice(0).forEach(push);
59
+ }).catch((error) => {
60
+ pending.current = [];
61
+ // eslint-disable-next-line no-console
62
+ console.error('[DPortalContext] Could not load the portal stack', error);
63
+ });
64
+ }
65
+ (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.blur();
66
+ }, [availablePortals, push]);
67
+ const closePortal = useCallback(() => {
68
+ if (pending.current.length > 0) {
69
+ pending.current.pop();
70
+ return;
71
+ }
72
+ // pop() is safe on empty stacks, so close remains idempotent.
73
+ pop();
74
+ }, [pop]);
75
+ const publicStack = useMemo(() => stack.map(({ name, payload }) => ({ name, payload })), [stack]);
76
+ const value = useMemo(() => ({
77
+ stack: publicStack,
78
+ openPortal,
79
+ closePortal,
80
+ }), [publicStack, openPortal, closePortal]);
81
+ const handleClose = useCallback((target) => {
82
+ if (!(target instanceof HTMLDivElement)) {
83
+ return;
84
+ }
85
+ if (target.classList.contains('portal') && !('bsBackdrop' in target.dataset)) {
86
+ closePortal();
87
+ return;
88
+ }
89
+ if (target.classList.contains('backdrop')) {
90
+ const lastPortal = target.nextElementSibling;
91
+ if (lastPortal && lastPortal.classList.contains('portal') && !('bsBackdrop' in lastPortal.dataset)) {
92
+ closePortal();
93
+ }
94
+ }
95
+ }, [closePortal]);
96
+ useEffect(() => {
97
+ const keyEvent = (event) => {
98
+ const lastPortal = document.querySelector(`#${portalName} > div > div:last-child`);
99
+ if (event.key === 'Escape') {
100
+ if (lastPortal) {
101
+ handleClose(lastPortal);
102
+ return;
103
+ }
104
+ }
105
+ if (event.key === 'Tab') {
106
+ const focusableElements = getKeyboardFocusableElements(lastPortal);
107
+ if (focusableElements.length === 0)
108
+ return;
109
+ const firstElement = focusableElements[0];
110
+ const lastElement = focusableElements[focusableElements.length - 1];
111
+ if (event.shiftKey && document.activeElement === firstElement) {
112
+ event.preventDefault();
113
+ lastElement.focus();
114
+ }
115
+ else if (!event.shiftKey && document.activeElement === lastElement) {
116
+ event.preventDefault();
117
+ firstElement.focus();
118
+ }
119
+ }
120
+ };
121
+ if (stack.length !== 0) {
122
+ window.addEventListener('keydown', keyEvent);
123
+ }
124
+ return () => {
125
+ window.removeEventListener('keydown', keyEvent);
126
+ };
127
+ }, [handleClose, portalName, stack.length]);
128
+ return (jsxs(DPortalContext.Provider, { value: value, children: [children, created && PortalStack && createPortal(
129
+ // eslint-disable-next-line max-len
130
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
131
+ jsx("div", { onClick: ({ target }) => handleClose(target), onKeyDown: () => { }, children: jsx(PortalStack, { stack: stack }) }), document.getElementById(portalName))] }));
132
+ }
133
+ /**
134
+ * Hook to open/close registered portals (modals, offcanvas, etc.).
135
+ *
136
+ * **Prerequisite**: must be called inside a `DContextProvider` configured with
137
+ * `portalName` and `availablePortals`. `DContextProvider` mounts
138
+ * `DPortalContextProvider` internally — consumers never use
139
+ * `DPortalContextProvider` directly.
140
+ *
141
+ * @template T - Map of portal name → payload shape (e.g. `ModalPayloads`).
142
+ * Typing this generic gives you autocomplete on `openPortal` arguments.
143
+ * @returns `{ openPortal, closePortal, stack }` from the nearest portal context.
144
+ * @throws If called outside of `DContextProvider` / `DPortalContextProvider`.
145
+ *
146
+ * @requires DContextProvider
147
+ *
148
+ * @example
149
+ * ```tsx
150
+ * const { openPortal, closePortal } = useDPortalContext<ModalPayloads>();
151
+ * openPortal('confirm', { message: 'Are you sure?' });
152
+ * ```
153
+ */
154
+ function useDPortalContext() {
155
+ const context = useContext(DPortalContext);
156
+ if (context === undefined) {
157
+ throw new Error('useDPortalContext was used outside of DPortalContextProvider');
158
+ }
159
+ return context;
160
+ }
161
+
162
+ export { DPortalContext, DPortalContextProvider, useDPortalContext };
163
+ //# sourceMappingURL=DPortalContext.js.map