@plumile/ui 0.1.54 → 0.1.56

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 (217) hide show
  1. package/lib/atomic/atoms/button/Button.d.ts.map +1 -1
  2. package/lib/atomic/atoms/button/Button.js +5 -2
  3. package/lib/atomic/atoms/formatted-date/FormattedDate.d.ts +14 -0
  4. package/lib/atomic/atoms/formatted-date/FormattedDate.d.ts.map +1 -0
  5. package/lib/atomic/atoms/formatted-date/FormattedDate.js +29 -0
  6. package/lib/atomic/atoms/icon-button/IconMenuButton.d.ts +8 -0
  7. package/lib/atomic/atoms/icon-button/IconMenuButton.d.ts.map +1 -0
  8. package/lib/atomic/atoms/icon-button/IconMenuButton.js +10 -0
  9. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.d.ts +14 -0
  10. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.d.ts.map +1 -0
  11. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.js +16 -0
  12. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.d.ts +13 -0
  13. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.d.ts.map +1 -0
  14. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js +42 -0
  15. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.d.ts +13 -0
  16. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.d.ts.map +1 -0
  17. package/lib/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.js +37 -0
  18. package/lib/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.d.ts +25 -0
  19. package/lib/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.d.ts.map +1 -0
  20. package/lib/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js +221 -0
  21. package/lib/atomic/molecules/breadcrumb_navigation/types.d.ts +15 -0
  22. package/lib/atomic/molecules/breadcrumb_navigation/types.d.ts.map +1 -0
  23. package/lib/atomic/molecules/breadcrumb_navigation/types.js +2 -0
  24. package/lib/atomic/molecules/dropdown/Dropdown.d.ts +26 -0
  25. package/lib/atomic/molecules/dropdown/Dropdown.d.ts.map +1 -0
  26. package/lib/atomic/molecules/dropdown/Dropdown.js +271 -0
  27. package/lib/atomic/molecules/dropdown/dropdown.css.d.ts +8 -0
  28. package/lib/atomic/molecules/dropdown/dropdown.css.d.ts.map +1 -0
  29. package/lib/atomic/molecules/dropdown/dropdown.css.js +30 -0
  30. package/lib/atomic/molecules/form-actions/FormActions.d.ts +16 -0
  31. package/lib/atomic/molecules/form-actions/FormActions.d.ts.map +1 -0
  32. package/lib/atomic/molecules/form-actions/FormActions.js +27 -0
  33. package/lib/atomic/molecules/toast/ToastProvider.d.ts +19 -0
  34. package/lib/atomic/molecules/toast/ToastProvider.d.ts.map +1 -0
  35. package/lib/atomic/molecules/toast/ToastProvider.js +113 -0
  36. package/lib/atomic/molecules/toast/ToastViewport.d.ts +24 -0
  37. package/lib/atomic/molecules/toast/ToastViewport.d.ts.map +1 -0
  38. package/lib/atomic/molecules/toast/ToastViewport.js +40 -0
  39. package/lib/atomic/molecules/toast/constants.d.ts +2 -0
  40. package/lib/atomic/molecules/toast/constants.d.ts.map +1 -0
  41. package/lib/atomic/molecules/toast/constants.js +2 -0
  42. package/lib/atomic/molecules/toast/toast.css.d.ts +25 -0
  43. package/lib/atomic/molecules/toast/toast.css.d.ts.map +1 -0
  44. package/lib/atomic/molecules/toast/toast.css.js +106 -0
  45. package/lib/components/data-table/DataTable.css.d.ts +61 -0
  46. package/lib/components/data-table/DataTable.css.d.ts.map +1 -0
  47. package/lib/components/data-table/DataTable.css.js +285 -0
  48. package/lib/components/data-table/DataTable.d.ts +32 -0
  49. package/lib/components/data-table/DataTable.d.ts.map +1 -0
  50. package/lib/components/data-table/DataTable.js +95 -0
  51. package/lib/components/data-table/TableCell.css.d.ts +26 -0
  52. package/lib/components/data-table/TableCell.css.d.ts.map +1 -0
  53. package/lib/components/data-table/TableCell.css.js +45 -0
  54. package/lib/components/data-table/TableCell.d.ts +46 -0
  55. package/lib/components/data-table/TableCell.d.ts.map +1 -0
  56. package/lib/components/data-table/TableCell.js +72 -0
  57. package/lib/components/data-table/TableCellBase.d.ts +13 -0
  58. package/lib/components/data-table/TableCellBase.d.ts.map +1 -0
  59. package/lib/components/data-table/TableCellBase.js +11 -0
  60. package/lib/components/data-table/VirtualizedConnectionTable.css.d.ts +5 -0
  61. package/lib/components/data-table/VirtualizedConnectionTable.css.d.ts.map +1 -0
  62. package/lib/components/data-table/VirtualizedConnectionTable.css.js +18 -0
  63. package/lib/components/data-table/VirtualizedConnectionTable.d.ts +32 -0
  64. package/lib/components/data-table/VirtualizedConnectionTable.d.ts.map +1 -0
  65. package/lib/components/data-table/VirtualizedConnectionTable.js +304 -0
  66. package/lib/components/data-table/tableBreakpoints.d.ts +9 -0
  67. package/lib/components/data-table/tableBreakpoints.d.ts.map +1 -0
  68. package/lib/components/data-table/tableBreakpoints.js +34 -0
  69. package/lib/components/select/SimpleSelect.css.d.ts +23 -0
  70. package/lib/components/select/SimpleSelect.css.d.ts.map +1 -0
  71. package/lib/components/select/SimpleSelect.css.js +175 -0
  72. package/lib/components/select/SimpleSelect.d.ts +22 -0
  73. package/lib/components/select/SimpleSelect.d.ts.map +1 -0
  74. package/lib/components/select/SimpleSelect.js +218 -0
  75. package/lib/components/subscriptions/RefetchNeededBanner.css.d.ts +5 -0
  76. package/lib/components/subscriptions/RefetchNeededBanner.css.d.ts.map +1 -0
  77. package/lib/components/subscriptions/RefetchNeededBanner.css.js +32 -0
  78. package/lib/components/subscriptions/RefetchNeededBanner.d.ts +9 -0
  79. package/lib/components/subscriptions/RefetchNeededBanner.d.ts.map +1 -0
  80. package/lib/components/subscriptions/RefetchNeededBanner.js +17 -0
  81. package/lib/esm/atomic/atoms/button/Button.js +35 -33
  82. package/lib/esm/atomic/atoms/button/Button.js.map +1 -1
  83. package/lib/esm/atomic/atoms/formatted-date/FormattedDate.js +32 -0
  84. package/lib/esm/atomic/atoms/formatted-date/FormattedDate.js.map +1 -0
  85. package/lib/esm/atomic/atoms/icon-button/IconMenuButton.js +26 -0
  86. package/lib/esm/atomic/atoms/icon-button/IconMenuButton.js.map +1 -0
  87. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.js +55 -0
  88. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.js.map +1 -0
  89. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js +61 -0
  90. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js.map +1 -0
  91. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.js +64 -0
  92. package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.js.map +1 -0
  93. package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js +30 -0
  94. package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js.map +1 -0
  95. package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.ts.vanilla-Bhz61Foa.css +1 -0
  96. package/lib/esm/atomic/molecules/breadcrumb_navigation/types.js +2 -0
  97. package/lib/esm/atomic/molecules/breadcrumb_navigation/types.js.map +1 -0
  98. package/lib/esm/atomic/molecules/dropdown/Dropdown.js +178 -0
  99. package/lib/esm/atomic/molecules/dropdown/Dropdown.js.map +1 -0
  100. package/lib/esm/atomic/molecules/dropdown/dropdown.css.js +13 -0
  101. package/lib/esm/atomic/molecules/dropdown/dropdown.css.js.map +1 -0
  102. package/lib/esm/atomic/molecules/form-actions/FormActions.js +57 -0
  103. package/lib/esm/atomic/molecules/form-actions/FormActions.js.map +1 -0
  104. package/lib/esm/atomic/molecules/toast/ToastProvider.js +78 -0
  105. package/lib/esm/atomic/molecules/toast/ToastProvider.js.map +1 -0
  106. package/lib/esm/atomic/molecules/toast/ToastViewport.js +71 -0
  107. package/lib/esm/atomic/molecules/toast/ToastViewport.js.map +1 -0
  108. package/lib/esm/atomic/molecules/toast/constants.js +5 -0
  109. package/lib/esm/atomic/molecules/toast/constants.js.map +1 -0
  110. package/lib/esm/atomic/molecules/toast/toast.css.js +17 -0
  111. package/lib/esm/atomic/molecules/toast/toast.css.js.map +1 -0
  112. package/lib/esm/atomic/molecules/toast/toast.css.ts.vanilla-2GtcGJsi.css +1 -0
  113. package/lib/esm/components/data-table/DataTable.css.js +24 -0
  114. package/lib/esm/components/data-table/DataTable.css.js.map +1 -0
  115. package/lib/esm/components/data-table/DataTable.css.ts.vanilla-BLE98fwj.css +1 -0
  116. package/lib/esm/components/data-table/DataTable.js +141 -0
  117. package/lib/esm/components/data-table/DataTable.js.map +1 -0
  118. package/lib/esm/components/data-table/TableCell.css.js +15 -0
  119. package/lib/esm/components/data-table/TableCell.css.js.map +1 -0
  120. package/lib/esm/components/data-table/TableCell.css.ts.vanilla-i5QJvdbl.css +1 -0
  121. package/lib/esm/components/data-table/TableCell.js +74 -0
  122. package/lib/esm/components/data-table/TableCell.js.map +1 -0
  123. package/lib/esm/components/data-table/TableCellBase.js +16 -0
  124. package/lib/esm/components/data-table/TableCellBase.js.map +1 -0
  125. package/lib/esm/components/data-table/VirtualizedConnectionTable.css.js +10 -0
  126. package/lib/esm/components/data-table/VirtualizedConnectionTable.css.js.map +1 -0
  127. package/lib/esm/components/data-table/VirtualizedConnectionTable.js +249 -0
  128. package/lib/esm/components/data-table/VirtualizedConnectionTable.js.map +1 -0
  129. package/lib/esm/components/data-table/tableBreakpoints.js +37 -0
  130. package/lib/esm/components/data-table/tableBreakpoints.js.map +1 -0
  131. package/lib/esm/components/select/SimpleSelect.css.js +22 -0
  132. package/lib/esm/components/select/SimpleSelect.css.js.map +1 -0
  133. package/lib/esm/components/select/SimpleSelect.css.ts.vanilla-Bil1v8q6.css +1 -0
  134. package/lib/esm/components/select/SimpleSelect.js +185 -0
  135. package/lib/esm/components/select/SimpleSelect.js.map +1 -0
  136. package/lib/esm/components/subscriptions/RefetchNeededBanner.css.js +10 -0
  137. package/lib/esm/components/subscriptions/RefetchNeededBanner.css.js.map +1 -0
  138. package/lib/esm/components/subscriptions/RefetchNeededBanner.js +24 -0
  139. package/lib/esm/components/subscriptions/RefetchNeededBanner.js.map +1 -0
  140. package/lib/esm/i18n/useUiTranslation.js +8 -0
  141. package/lib/esm/i18n/useUiTranslation.js.map +1 -0
  142. package/lib/esm/index.js +68 -47
  143. package/lib/esm/index.js.map +1 -1
  144. package/lib/esm/styles/slots.js +2 -0
  145. package/lib/esm/styles/slots.js.map +1 -0
  146. package/lib/i18n/useUiTranslation.d.ts +3 -0
  147. package/lib/i18n/useUiTranslation.d.ts.map +1 -0
  148. package/lib/i18n/useUiTranslation.js +5 -0
  149. package/lib/index.d.ts +10 -0
  150. package/lib/index.d.ts.map +1 -1
  151. package/lib/index.js +11 -1
  152. package/lib/styles/slots.d.ts +2 -0
  153. package/lib/styles/slots.d.ts.map +1 -0
  154. package/lib/styles/slots.js +2 -0
  155. package/lib/types/atomic/atoms/button/Button.d.ts.map +1 -1
  156. package/lib/types/atomic/atoms/formatted-date/FormattedDate.d.ts +14 -0
  157. package/lib/types/atomic/atoms/formatted-date/FormattedDate.d.ts.map +1 -0
  158. package/lib/types/atomic/atoms/icon-button/IconMenuButton.d.ts +8 -0
  159. package/lib/types/atomic/atoms/icon-button/IconMenuButton.d.ts.map +1 -0
  160. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.d.ts +14 -0
  161. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.d.ts.map +1 -0
  162. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.d.ts +13 -0
  163. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.d.ts.map +1 -0
  164. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.d.ts +13 -0
  165. package/lib/types/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.d.ts.map +1 -0
  166. package/lib/types/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.d.ts +25 -0
  167. package/lib/types/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.d.ts.map +1 -0
  168. package/lib/types/atomic/molecules/breadcrumb_navigation/types.d.ts +15 -0
  169. package/lib/types/atomic/molecules/breadcrumb_navigation/types.d.ts.map +1 -0
  170. package/lib/types/atomic/molecules/dropdown/Dropdown.d.ts +26 -0
  171. package/lib/types/atomic/molecules/dropdown/Dropdown.d.ts.map +1 -0
  172. package/lib/types/atomic/molecules/dropdown/dropdown.css.d.ts +8 -0
  173. package/lib/types/atomic/molecules/dropdown/dropdown.css.d.ts.map +1 -0
  174. package/lib/types/atomic/molecules/form-actions/FormActions.d.ts +16 -0
  175. package/lib/types/atomic/molecules/form-actions/FormActions.d.ts.map +1 -0
  176. package/lib/types/atomic/molecules/toast/ToastProvider.d.ts +19 -0
  177. package/lib/types/atomic/molecules/toast/ToastProvider.d.ts.map +1 -0
  178. package/lib/types/atomic/molecules/toast/ToastViewport.d.ts +24 -0
  179. package/lib/types/atomic/molecules/toast/ToastViewport.d.ts.map +1 -0
  180. package/lib/types/atomic/molecules/toast/constants.d.ts +2 -0
  181. package/lib/types/atomic/molecules/toast/constants.d.ts.map +1 -0
  182. package/lib/types/atomic/molecules/toast/toast.css.d.ts +25 -0
  183. package/lib/types/atomic/molecules/toast/toast.css.d.ts.map +1 -0
  184. package/lib/types/components/data-table/DataTable.css.d.ts +61 -0
  185. package/lib/types/components/data-table/DataTable.css.d.ts.map +1 -0
  186. package/lib/types/components/data-table/DataTable.d.ts +32 -0
  187. package/lib/types/components/data-table/DataTable.d.ts.map +1 -0
  188. package/lib/types/components/data-table/TableCell.css.d.ts +26 -0
  189. package/lib/types/components/data-table/TableCell.css.d.ts.map +1 -0
  190. package/lib/types/components/data-table/TableCell.d.ts +46 -0
  191. package/lib/types/components/data-table/TableCell.d.ts.map +1 -0
  192. package/lib/types/components/data-table/TableCellBase.d.ts +13 -0
  193. package/lib/types/components/data-table/TableCellBase.d.ts.map +1 -0
  194. package/lib/types/components/data-table/VirtualizedConnectionTable.css.d.ts +5 -0
  195. package/lib/types/components/data-table/VirtualizedConnectionTable.css.d.ts.map +1 -0
  196. package/lib/types/components/data-table/VirtualizedConnectionTable.d.ts +32 -0
  197. package/lib/types/components/data-table/VirtualizedConnectionTable.d.ts.map +1 -0
  198. package/lib/types/components/data-table/tableBreakpoints.d.ts +9 -0
  199. package/lib/types/components/data-table/tableBreakpoints.d.ts.map +1 -0
  200. package/lib/types/components/select/SimpleSelect.css.d.ts +23 -0
  201. package/lib/types/components/select/SimpleSelect.css.d.ts.map +1 -0
  202. package/lib/types/components/select/SimpleSelect.d.ts +22 -0
  203. package/lib/types/components/select/SimpleSelect.d.ts.map +1 -0
  204. package/lib/types/components/subscriptions/RefetchNeededBanner.css.d.ts +5 -0
  205. package/lib/types/components/subscriptions/RefetchNeededBanner.css.d.ts.map +1 -0
  206. package/lib/types/components/subscriptions/RefetchNeededBanner.d.ts +9 -0
  207. package/lib/types/components/subscriptions/RefetchNeededBanner.d.ts.map +1 -0
  208. package/lib/types/i18n/useUiTranslation.d.ts +3 -0
  209. package/lib/types/i18n/useUiTranslation.d.ts.map +1 -0
  210. package/lib/types/index.d.ts +10 -0
  211. package/lib/types/index.d.ts.map +1 -1
  212. package/lib/types/styles/slots.d.ts +2 -0
  213. package/lib/types/styles/slots.d.ts.map +1 -0
  214. package/package.json +10 -3
  215. package/src/i18n/locales/en/ui.json +53 -0
  216. package/src/i18n/locales/fr/ui.json +53 -0
  217. package/src/i18n/useUiTranslation.ts +6 -0
@@ -0,0 +1,15 @@
1
+ export type BreadcrumbNode = {
2
+ name: string;
3
+ to: string;
4
+ };
5
+ export type BreadcrumbMenuItem = {
6
+ id: string;
7
+ name: string;
8
+ to: string;
9
+ description?: string | null;
10
+ };
11
+ export type BreadcrumbMenuConfig = {
12
+ items: readonly BreadcrumbMenuItem[];
13
+ selectedId?: string | null;
14
+ };
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/atomic/molecules/breadcrumb_navigation/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXRvbWljL21vbGVjdWxlcy9icmVhZGNydW1iX25hdmlnYXRpb24vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEJyZWFkY3J1bWJOb2RlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRvOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBCcmVhZGNydW1iTWVudUl0ZW0gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgQnJlYWRjcnVtYk1lbnVDb25maWcgPSB7XG4gIGl0ZW1zOiByZWFkb25seSBCcmVhZGNydW1iTWVudUl0ZW1bXTtcbiAgc2VsZWN0ZWRJZD86IHN0cmluZyB8IG51bGw7XG59O1xuIl19
@@ -0,0 +1,26 @@
1
+ import { type ReactNode, type ReactElement, type JSX } from 'react';
2
+ export type DropdownPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
3
+ interface DropdownContextValue {
4
+ close: () => void;
5
+ open: () => void;
6
+ isOpen: boolean;
7
+ }
8
+ export declare const useDropdown: () => DropdownContextValue;
9
+ export interface DropdownProps {
10
+ trigger: ReactElement | ((isOpen: boolean) => ReactElement);
11
+ children: ReactNode;
12
+ className?: string;
13
+ contentClassName?: string;
14
+ placement?: DropdownPlacement;
15
+ offset?: number;
16
+ matchTriggerWidth?: boolean;
17
+ open?: boolean;
18
+ defaultOpen?: boolean;
19
+ onOpenChange?: (open: boolean) => void;
20
+ closeOnItemClick?: boolean;
21
+ portalContainer?: HTMLElement | null;
22
+ ariaLabel?: string;
23
+ }
24
+ export declare const Dropdown: ({ trigger, children, className, contentClassName, placement, offset, matchTriggerWidth, open, defaultOpen, onOpenChange, closeOnItemClick, portalContainer, ariaLabel, }: DropdownProps) => JSX.Element;
25
+ export {};
26
+ //# sourceMappingURL=Dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../../../src/atomic/molecules/dropdown/Dropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,GAAG,EAUT,MAAM,OAAO,CAAC;AAOf,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,YAAY,GACZ,WAAW,GACX,SAAS,CAAC;AAEd,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAMD,eAAO,MAAM,WAAW,QAAO,oBAM9B,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,YAAY,CAAC,CAAC;IAC5D,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAErC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsBD,eAAO,MAAM,QAAQ,GAAI,0KActB,aAAa,KAAG,GAAG,CAAC,OA0TtB,CAAC"}
@@ -0,0 +1,271 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect, useLayoutEffect, useCallback, createContext, useContext, isValidElement, cloneElement, } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import * as classes from './dropdown.css.js';
5
+ import { cx } from '../../../theme/tools.js';
6
+ const DropdownContext = createContext(null);
7
+ export const useDropdown = () => {
8
+ const ctx = useContext(DropdownContext);
9
+ if (ctx == null) {
10
+ throw new Error('useDropdown must be used within a <Dropdown />');
11
+ }
12
+ return ctx;
13
+ };
14
+ const isForwardRefComponent = (type) => {
15
+ if (type == null || typeof type !== 'object') {
16
+ return false;
17
+ }
18
+ return (type.$$typeof === Symbol.for('react.forward_ref'));
19
+ };
20
+ export const Dropdown = ({ trigger, children, className, contentClassName, placement = 'bottom-start', offset = 4, matchTriggerWidth = true, open, defaultOpen = false, onOpenChange, closeOnItemClick = false, portalContainer, ariaLabel, }) => {
21
+ const isControlled = open != null;
22
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
23
+ let isOpen = uncontrolledOpen;
24
+ if (isControlled) {
25
+ isOpen = Boolean(open);
26
+ }
27
+ const containerRef = useRef(null);
28
+ const triggerRef = useRef(null);
29
+ const contentRef = useRef(null);
30
+ const [position, setPosition] = useState(null);
31
+ const cleanupRef = useRef([]);
32
+ const setOpen = useCallback((next) => {
33
+ if (!isControlled) {
34
+ setUncontrolledOpen(next);
35
+ }
36
+ onOpenChange?.(next);
37
+ }, [isControlled, onOpenChange]);
38
+ const toggle = useCallback(() => {
39
+ setOpen(!isOpen);
40
+ }, [isOpen, setOpen]);
41
+ const close = useCallback(() => {
42
+ setOpen(false);
43
+ }, [setOpen]);
44
+ const openFn = useCallback(() => {
45
+ setOpen(true);
46
+ }, [setOpen]);
47
+ const computePosition = useCallback(() => {
48
+ const triggerEl = triggerRef.current;
49
+ const contentEl = contentRef.current;
50
+ if (triggerEl == null) {
51
+ return;
52
+ }
53
+ if (contentEl == null) {
54
+ return;
55
+ }
56
+ const rect = triggerEl.getBoundingClientRect();
57
+ let top = 0;
58
+ let left = 0;
59
+ switch (placement) {
60
+ case 'bottom-start':
61
+ top = rect.bottom + offset;
62
+ left = rect.left;
63
+ break;
64
+ case 'bottom-end':
65
+ top = rect.bottom + offset;
66
+ left = rect.right - contentEl.offsetWidth;
67
+ break;
68
+ case 'top-start':
69
+ top = rect.top - contentEl.offsetHeight - offset;
70
+ left = rect.left;
71
+ break;
72
+ case 'top-end':
73
+ top = rect.top - contentEl.offsetHeight - offset;
74
+ left = rect.right - contentEl.offsetWidth;
75
+ break;
76
+ default:
77
+ top = rect.bottom + offset;
78
+ left = rect.left;
79
+ }
80
+ const vw = window.innerWidth;
81
+ const vh = window.innerHeight;
82
+ let width;
83
+ if (matchTriggerWidth) {
84
+ width = rect.width;
85
+ }
86
+ const contentWidth = width ?? contentEl.offsetWidth;
87
+ if (left + contentWidth > vw - 4) {
88
+ left = Math.max(4, vw - contentWidth - 4);
89
+ }
90
+ if (left < 4)
91
+ left = 4;
92
+ const contentHeight = contentEl.offsetHeight;
93
+ if (top + contentHeight > vh - 4) {
94
+ if (placement.startsWith('bottom')) {
95
+ const flippedTop = rect.top - contentHeight - offset;
96
+ if (flippedTop >= 4) {
97
+ top = flippedTop;
98
+ }
99
+ else {
100
+ top = Math.max(4, vh - contentHeight - 4);
101
+ }
102
+ }
103
+ else {
104
+ top = Math.max(4, vh - contentHeight - 4);
105
+ }
106
+ }
107
+ if (top < 4)
108
+ top = 4;
109
+ setPosition({ top, left, width });
110
+ }, [placement, offset, matchTriggerWidth]);
111
+ useLayoutEffect(() => {
112
+ if (isOpen)
113
+ computePosition();
114
+ }, [isOpen, computePosition, children]);
115
+ useEffect(() => {
116
+ if (!isOpen)
117
+ return;
118
+ const handle = () => {
119
+ computePosition();
120
+ };
121
+ window.addEventListener('resize', handle);
122
+ window.addEventListener('scroll', handle, true);
123
+ const cleanup = () => {
124
+ window.removeEventListener('resize', handle);
125
+ window.removeEventListener('scroll', handle, true);
126
+ };
127
+ cleanupRef.current.push(cleanup);
128
+ }, [isOpen, computePosition]);
129
+ useEffect(() => {
130
+ if (!isOpen)
131
+ return;
132
+ const onDocMouseDown = (e) => {
133
+ const target = e.target;
134
+ if (containerRef.current != null &&
135
+ contentRef.current != null &&
136
+ !containerRef.current.contains(target) &&
137
+ !contentRef.current.contains(target)) {
138
+ close();
139
+ }
140
+ };
141
+ const onKey = (e) => {
142
+ if (e.key === 'Escape') {
143
+ close();
144
+ triggerRef.current?.focus();
145
+ }
146
+ };
147
+ document.addEventListener('mousedown', onDocMouseDown);
148
+ document.addEventListener('keydown', onKey);
149
+ const cleanup = () => {
150
+ document.removeEventListener('mousedown', onDocMouseDown);
151
+ document.removeEventListener('keydown', onKey);
152
+ };
153
+ cleanupRef.current.push(cleanup);
154
+ }, [isOpen, close]);
155
+ useEffect(() => {
156
+ if (!isOpen)
157
+ return;
158
+ const firstFocusable = contentRef.current?.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
159
+ firstFocusable?.focus();
160
+ }, [isOpen]);
161
+ useEffect(() => {
162
+ if (!isOpen || !closeOnItemClick)
163
+ return;
164
+ const handler = (e) => {
165
+ if (contentRef.current?.contains(e.target)) {
166
+ close();
167
+ }
168
+ };
169
+ document.addEventListener('click', handler, { capture: true });
170
+ const cleanup = () => {
171
+ document.removeEventListener('click', handler, { capture: true });
172
+ };
173
+ cleanupRef.current.push(cleanup);
174
+ }, [isOpen, closeOnItemClick, close]);
175
+ useEffect(() => {
176
+ return () => {
177
+ cleanupRef.current.forEach((fn) => {
178
+ fn();
179
+ });
180
+ cleanupRef.current = [];
181
+ };
182
+ }, []);
183
+ let triggerElement = trigger;
184
+ if (typeof trigger === 'function') {
185
+ triggerElement = trigger(isOpen);
186
+ }
187
+ if (!isValidElement(triggerElement)) {
188
+ throw new Error('Dropdown trigger must be a React element.');
189
+ }
190
+ const isHostElement = typeof triggerElement.type === 'string';
191
+ const isButtonElement = isHostElement && triggerElement.type === 'button';
192
+ const canAttachRef = isHostElement ||
193
+ typeof triggerElement.type === 'function' ||
194
+ isForwardRefComponent(triggerElement.type);
195
+ if (!canAttachRef) {
196
+ throw new Error('Dropdown trigger must be a DOM element or component that accepts a ref.');
197
+ }
198
+ const triggerElementRef = triggerElement.props.ref ??
199
+ triggerElement.ref;
200
+ const setTriggerRef = (node) => {
201
+ triggerRef.current = node;
202
+ if (typeof triggerElementRef === 'function') {
203
+ triggerElementRef(node);
204
+ }
205
+ else if (triggerElementRef != null) {
206
+ triggerElementRef.current =
207
+ node;
208
+ }
209
+ };
210
+ const triggerProps = triggerElement.props;
211
+ const handleTriggerClick = (event) => {
212
+ triggerProps.onClick?.(event);
213
+ if (event.defaultPrevented) {
214
+ return;
215
+ }
216
+ toggle();
217
+ };
218
+ const handleTriggerKeyDown = (event) => {
219
+ triggerProps.onKeyDown?.(event);
220
+ if (event.defaultPrevented) {
221
+ return;
222
+ }
223
+ if (event.key === 'Enter' || event.key === ' ') {
224
+ event.preventDefault();
225
+ toggle();
226
+ }
227
+ };
228
+ const mergedTriggerProps = {
229
+ onClick: handleTriggerClick,
230
+ 'aria-haspopup': 'menu',
231
+ 'aria-expanded': isOpen,
232
+ };
233
+ if (ariaLabel != null && ariaLabel !== '') {
234
+ mergedTriggerProps['aria-label'] = ariaLabel;
235
+ }
236
+ if (isButtonElement) {
237
+ if (triggerProps.type == null) {
238
+ mergedTriggerProps.type = 'button';
239
+ }
240
+ }
241
+ else {
242
+ mergedTriggerProps.onKeyDown = handleTriggerKeyDown;
243
+ if (triggerProps.role == null) {
244
+ mergedTriggerProps.role = 'button';
245
+ }
246
+ if (triggerProps.tabIndex == null) {
247
+ mergedTriggerProps.tabIndex = 0;
248
+ }
249
+ }
250
+ mergedTriggerProps.ref = setTriggerRef;
251
+ let contentStyles = {};
252
+ if (position != null) {
253
+ contentStyles = {
254
+ top: position.top,
255
+ left: position.left,
256
+ width: position.width,
257
+ };
258
+ }
259
+ const portalTarget = portalContainer ?? document.body;
260
+ const contextValue = {
261
+ close,
262
+ open: openFn,
263
+ isOpen,
264
+ };
265
+ let dropdownContent = null;
266
+ if (isOpen) {
267
+ dropdownContent = createPortal(_jsx("div", { ref: contentRef, role: "menu", className: cx(classes.content, classes.contentPositioned, contentClassName), style: contentStyles, children: children }), portalTarget);
268
+ }
269
+ return (_jsxs(DropdownContext.Provider, { value: contextValue, children: [_jsx("div", { className: cx(classes.container, className), ref: containerRef, children: cloneElement(triggerElement, mergedTriggerProps) }), dropdownContent] }));
270
+ };
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHJvcGRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXRvbWljL21vbGVjdWxlcy9kcm9wZG93bi9Ecm9wZG93bi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxlQUFlLEVBQ2YsV0FBVyxFQVNYLGFBQWEsRUFDYixVQUFVLEVBQ1YsY0FBYyxFQUNkLFlBQVksR0FDYixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsT0FBTyxLQUFLLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFlN0MsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUE4QixJQUFJLENBQUMsQ0FBQztBQUl6RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBeUIsRUFBRTtJQUNwRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQXlCRixNQUFNLHFCQUFxQixHQUFHLENBQUMsSUFBYSxFQUFXLEVBQUU7SUFDdkQsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sQ0FDSixJQUE4QixDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQzdFLENBQUM7QUFDSixDQUFDLENBQUM7QUFPRixNQUFNLENBQUMsTUFBTSxRQUFRLEdB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ZUFBZSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFFdEQsTUFBTSxZQUFZLEdBQXlCO1FBQ3pDLEtBQUs7UUFDTCxJQUFJLEVBQUUsTUFBTTtRQUNaLE1BQU07S0FDUCxDQUFDO0lBRUYsSUFBSSxlQUFlLEdBQXVCLElBQUksQ0FBQztJQUMvQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsZUFBZSxHQUFHLFlBQVksQ0FDNUIsY0FDRSxHQUFHLEVBQUUsVUFBVSxFQUNmLElBQUksRUFBQyxNQUFNLEVBQ1gsU0FBUyxFQUFFLEVBQUUsQ0FDWCxPQUFPLENBQUMsT0FBTyxFQUNmLE9BQU8sQ0FBQyxpQkFBaUIsRUFDekIsZ0JBQWdCLENBQ2pCLEVBQ0QsS0FBSyxFQUFFLGFBQWEsWUFFbkIsUUFBUSxHQUNMLEVBQ04sWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxDQUNMLE1BQUMsZUFBZSxDQUFDLFFBQVEsSUFBQyxLQUFLLEVBQUUsWUFBWSxhQUMzQyxjQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxZQUNoRSxZQUFZLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLEdBQzdDLEVBQ0wsZUFBZSxJQUNTLENBQzVCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VTdGF0ZSxcbiAgdXNlUmVmLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHR5cGUgUmVhY3ROb2RlLFxuICB0eXBlIFJlYWN0RWxlbWVudCxcbiAgdHlwZSBKU1gsXG4gIHR5cGUgUmVmLFxuICB0eXBlIE11dGFibGVSZWZPYmplY3QsXG4gIHR5cGUgSFRNTEF0dHJpYnV0ZXMsXG4gIHR5cGUgTW91c2VFdmVudCBhcyBSZWFjdE1vdXNlRXZlbnQsXG4gIHR5cGUgS2V5Ym9hcmRFdmVudCBhcyBSZWFjdEtleWJvYXJkRXZlbnQsXG4gIGNyZWF0ZUNvbnRleHQsXG4gIHVzZUNvbnRleHQsXG4gIGlzVmFsaWRFbGVtZW50LFxuICBjbG9uZUVsZW1lbnQsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSc7XG5cbmltcG9ydCAqIGFzIGNsYXNzZXMgZnJvbSAnLi9kcm9wZG93bi5jc3MuanMnO1xuaW1wb3J0IHsgY3ggfSBmcm9tICcuLi8uLi8uLi90aGVtZS90b29scy5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSBEcm9wZG93blBsYWNlbWVudCA9XG4gIHwgJ2JvdHRvbS1zdGFydCdcbiAgfCAnYm90dG9tLWVuZCdcbiAgfCAndG9wLXN0YXJ0J1xuICB8ICd0b3AtZW5kJztcblxuaW50ZXJmYWNlIERyb3Bkb3duQ29udGV4dFZhbHVlIHtcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG4gIG9wZW46ICgpID0+IHZvaWQ7XG4gIGlzT3BlbjogYm9vbGVhbjtcbn1cblxuY29uc3QgRHJvcGRvd25Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxEcm9wZG93bkNvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuLyoqXG4gKiBBY2Nlc3MgdGhlIG5lYXJlc3QgRHJvcGRvd24gY29udGV4dC4gVGhyb3dzIGlmIHVzZWQgb3V0c2lkZSBhIDxEcm9wZG93biAvPi5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZURyb3Bkb3duID0gKCk6IERyb3Bkb3duQ29udGV4dFZhbHVlID0+IHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChEcm9wZG93bkNvbnRleHQpO1xuICBpZiAoY3R4ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZURyb3Bkb3duIG11c3QgYmUgdXNlZCB3aXRoaW4gYSA8RHJvcGRvd24gLz4nKTtcbiAgfVxuICByZXR1cm4gY3R4O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93blByb3BzIHtcbiAgdHJpZ2dlcjogUmVhY3RFbGVtZW50IHwgKChpc09wZW46IGJvb2xlYW4pID0+IFJlYWN0RWxlbWVudCk7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGVudENsYXNzTmFtZT86IHN0cmluZztcbiAgcGxhY2VtZW50PzogRHJvcGRvd25QbGFjZW1lbnQ7XG4gIG9mZnNldD86IG51bWJlcjtcbiAgbWF0Y2hUcmlnZ2VyV2lkdGg/OiBib29sZWFuO1xuICBvcGVuPzogYm9vbGVhbjsgLy8gY29udHJvbGxlZFxuICBkZWZhdWx0T3Blbj86IGJvb2xlYW47IC8vIHVuY29udHJvbGxlZFxuICBvbk9wZW5DaGFuZ2U/OiAob3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbiAgY2xvc2VPbkl0ZW1DbGljaz86IGJvb2xlYW47XG4gIHBvcnRhbENvbnRhaW5lcj86IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgLy8gQWNjZXNzaWJsZSBsYWJlbCBpZiB0cmlnZ2VyIGlzIGFuIGljb24gb25seVxuICBhcmlhTGFiZWw/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQb3NpdGlvblN0YXRlIHtcbiAgdG9wOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgd2lkdGg/OiBudW1iZXI7XG59XG5cbmNvbnN0IGlzRm9yd2FyZFJlZkNvbXBvbmVudCA9ICh0eXBlOiB1bmtub3duKTogYm9vbGVhbiA9PiB7XG4gIGlmICh0eXBlID09IG51bGwgfHwgdHlwZW9mIHR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgKHR5cGUgYXMgeyAkJHR5cGVvZj86IHN5bWJvbCB9KS4kJHR5cGVvZiA9PT0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKVxuICApO1xufTtcblxuLyoqXG4gKiBBIHNjYWxhYmxlLCBwb3J0YWwtYmFzZWQgZHJvcGRvd24gY29tcG9uZW50IHdpdGggYmFzaWMgY29sbGlzaW9uIGhhbmRsaW5nLFxuICogY29udHJvbGxlZC91bmNvbnRyb2xsZWQgbW9kZXMsIGFjY2Vzc2liaWxpdHkgYXR0cmlidXRlcywgYW5kIG9wdGlvbmFsXG4gKiB0cmlnZ2VyIHdpZHRoIG1hdGNoaW5nLiBDb250ZW50IGlzIHJlbmRlcmVkIGluIGEgUmVhY3QgcG9ydGFsIChkZWZhdWx0OiBkb2N1bWVudC5ib2R5KS5cbiAqL1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duID0gKHtcbiAgdHJpZ2dlcixcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGVudENsYXNzTmFtZSxcbiAgcGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCcsXG4gIG9mZnNldCA9IDQsXG4gIG1hdGNoVHJpZ2dlcldpZHRoID0gdHJ1ZSxcbiAgb3BlbixcbiAgZGVmYXVsdE9wZW4gPSBmYWxzZSxcbiAgb25PcGVuQ2hhbmdlLFxuICBjbG9zZU9uSXRlbUNsaWNrID0gZmFsc2UsXG4gIHBvcnRhbENvbnRhaW5lcixcbiAgYXJpYUxhYmVsLFxufTogRHJvcGRvd25Qcm9wcyk6IEpTWC5FbGVtZW50ID0+IHtcbiAgY29uc3QgaXNDb250cm9sbGVkID0gb3BlbiAhPSBudWxsO1xuICBjb25zdCBbdW5jb250cm9sbGVkT3Blbiwgc2V0VW5jb250cm9sbGVkT3Blbl0gPSB1c2VTdGF0ZShkZWZhdWx0T3Blbik7XG4gIGxldCBpc09wZW4gPSB1bmNvbnRyb2xsZWRPcGVuO1xuICBpZiAoaXNDb250cm9sbGVkKSB7XG4gICAgaXNPcGVuID0gQm9vbGVhbihvcGVuKTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBjb250ZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW3Bvc2l0aW9uLCBzZXRQb3NpdGlvbl0gPSB1c2VTdGF0ZTxQb3NpdGlvblN0YXRlIHwgbnVsbD4obnVsbCk7XG4gIC8vIEFjY3VtdWxhdGUgbWFudWFsIGNsZWFudXBzIGZvciBlZmZlY3RzIHdoZXJlIHJldHVybmluZyBhIGZ1bmN0aW9uIHZpb2xhdGVzIGxpbnQgcnVsZXMuXG4gIGNvbnN0IGNsZWFudXBSZWYgPSB1c2VSZWY8KCgpID0+IHZvaWQpW10+KFtdKTtcblxuICBjb25zdCBzZXRPcGVuID0gdXNlQ2FsbGJhY2soXG4gICAgKG5leHQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICAgIHNldFVuY29udHJvbGxlZE9wZW4obmV4dCk7XG4gICAgICB9XG4gICAgICBvbk9wZW5DaGFuZ2U/LihuZXh0KTtcbiAgICB9LFxuICAgIFtpc0NvbnRyb2xsZWQsIG9uT3BlbkNoYW5nZV0sXG4gICk7XG5cbiAgY29uc3QgdG9nZ2xlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4oIWlzT3Blbik7XG4gIH0sIFtpc09wZW4sIHNldE9wZW5dKTtcbiAgY29uc3QgY2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0T3BlbihmYWxzZSk7XG4gIH0sIFtzZXRPcGVuXSk7XG4gIGNvbnN0IG9wZW5GbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRPcGVuKHRydWUpO1xuICB9LCBbc2V0T3Blbl0pO1xuXG4gIC8vIFBvc2l0aW9uaW5nIGxvZ2ljXG4gIGNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0cmlnZ2VyRWwgPSB0cmlnZ2VyUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgY29udGVudEVsID0gY29udGVudFJlZi5jdXJyZW50O1xuICAgIGlmICh0cmlnZ2VyRWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29udGVudEVsID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0ID0gdHJpZ2dlckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCB0b3AgPSAwO1xuICAgIGxldCBsZWZ0ID0gMDtcblxuICAgIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgICBjYXNlICdib3R0b20tc3RhcnQnOlxuICAgICAgICB0b3AgPSByZWN0LmJvdHRvbSArIG9mZnNldDtcbiAgICAgICAgbGVmdCA9IHJlY3QubGVmdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b20tZW5kJzpcbiAgICAgICAgdG9wID0gcmVjdC5ib3R0b20gKyBvZmZzZXQ7XG4gICAgICAgIGxlZnQgPSByZWN0LnJpZ2h0IC0gY29udGVudEVsLm9mZnNldFdpZHRoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcC1zdGFydCc6XG4gICAgICAgIHRvcCA9IHJlY3QudG9wIC0gY29udGVudEVsLm9mZnNldEhlaWdodCAtIG9mZnNldDtcbiAgICAgICAgbGVmdCA9IHJlY3QubGVmdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3AtZW5kJzpcbiAgICAgICAgdG9wID0gcmVjdC50b3AgLSBjb250ZW50RWwub2Zmc2V0SGVpZ2h0IC0gb2Zmc2V0O1xuICAgICAgICBsZWZ0ID0gcmVjdC5yaWdodCAtIGNvbnRlbnRFbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0b3AgPSByZWN0LmJvdHRvbSArIG9mZnNldDtcbiAgICAgICAgbGVmdCA9IHJlY3QubGVmdDtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHdpdGhpbiB2aWV3cG9ydCAoYmFzaWMgY29sbGlzaW9uIGhhbmRsaW5nKVxuICAgIGNvbnN0IHZ3ID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgY29uc3QgdmggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgbGV0IHdpZHRoOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKG1hdGNoVHJpZ2dlcldpZHRoKSB7XG4gICAgICB3aWR0aCA9IHJlY3Qud2lkdGg7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHdpZHRoID8/IGNvbnRlbnRFbC5vZmZzZXRXaWR0aDtcblxuICAgIGlmIChsZWZ0ICsgY29udGVudFdpZHRoID4gdncgLSA0KSB7XG4gICAgICBsZWZ0ID0gTWF0aC5tYXgoNCwgdncgLSBjb250ZW50V2lkdGggLSA0KTtcbiAgICB9XG4gICAgaWYgKGxlZnQgPCA0KSBsZWZ0ID0gNDtcbiAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gY29udGVudEVsLm9mZnNldEhlaWdodDtcbiAgICBpZiAodG9wICsgY29udGVudEhlaWdodCA+IHZoIC0gNCkge1xuICAgICAgLy8gVHJ5IGZsaXAgdG8gdG9wIGlmIGJvdHRvbSBvdmVyZmxvd3MgYW5kIGluaXRpYWwgd2FzIGJvdHRvbVxuICAgICAgaWYgKHBsYWNlbWVudC5zdGFydHNXaXRoKCdib3R0b20nKSkge1xuICAgICAgICBjb25zdCBmbGlwcGVkVG9wID0gcmVjdC50b3AgLSBjb250ZW50SGVpZ2h0IC0gb2Zmc2V0O1xuICAgICAgICBpZiAoZmxpcHBlZFRvcCA+PSA0KSB7XG4gICAgICAgICAgdG9wID0gZmxpcHBlZFRvcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3AgPSBNYXRoLm1heCg0LCB2aCAtIGNvbnRlbnRIZWlnaHQgLSA0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gTWF0aC5tYXgoNCwgdmggLSBjb250ZW50SGVpZ2h0IC0gNCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0b3AgPCA0KSB0b3AgPSA0O1xuXG4gICAgc2V0UG9zaXRpb24oeyB0b3AsIGxlZnQsIHdpZHRoIH0pO1xuICB9LCBbcGxhY2VtZW50LCBvZmZzZXQsIG1hdGNoVHJpZ2dlcldpZHRoXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuKSBjb21wdXRlUG9zaXRpb24oKTtcbiAgfSwgW2lzT3BlbiwgY29tcHV0ZVBvc2l0aW9uLCBjaGlsZHJlbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHJldHVybjtcbiAgICBjb25zdCBoYW5kbGUgPSAoKSA9PiB7XG4gICAgICBjb21wdXRlUG9zaXRpb24oKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGUsIHRydWUpO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGUsIHRydWUpO1xuICAgIH07XG4gICAgY2xlYW51cFJlZi5jdXJyZW50LnB1c2goY2xlYW51cCk7XG4gIH0sIFtpc09wZW4sIGNvbXB1dGVQb3NpdGlvbl0pO1xuXG4gIC8vIE91dHNpZGUgY2xpY2sgJiBFc2NhcGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3BlbikgcmV0dXJuO1xuICAgIGNvbnN0IG9uRG9jTW91c2VEb3duID0gKGU6IGdsb2JhbFRoaXMuTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgTm9kZTtcbiAgICAgIGlmIChcbiAgICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQgIT0gbnVsbCAmJlxuICAgICAgICBjb250ZW50UmVmLmN1cnJlbnQgIT0gbnVsbCAmJlxuICAgICAgICAhY29udGFpbmVyUmVmLmN1cnJlbnQuY29udGFpbnModGFyZ2V0KSAmJlxuICAgICAgICAhY29udGVudFJlZi5jdXJyZW50LmNvbnRhaW5zKHRhcmdldClcbiAgICAgICkge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25LZXkgPSAoZTogZ2xvYmFsVGhpcy5LZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGNsb3NlKCk7XG4gICAgICAgIHRyaWdnZXJSZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uRG9jTW91c2VEb3duKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXkpO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkRvY01vdXNlRG93bik7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXkpO1xuICAgIH07XG4gICAgY2xlYW51cFJlZi5jdXJyZW50LnB1c2goY2xlYW51cCk7XG4gIH0sIFtpc09wZW4sIGNsb3NlXSk7XG5cbiAgLy8gS2V5Ym9hcmQgbmF2aWdhdGlvbiBiYXNpYyAoQXJyb3dEb3duIGZvY3VzZXMgZmlyc3QgZm9jdXNhYmxlKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSByZXR1cm47XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSBjb250ZW50UmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuICAgICAgJ2J1dHRvbiwgW2hyZWZdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyxcbiAgICApO1xuICAgIGZpcnN0Rm9jdXNhYmxlPy5mb2N1cygpO1xuICB9LCBbaXNPcGVuXSk7XG5cbiAgLy8gQ2xvc2Ugb24gaXRlbSBjbGljayBpZiBlbmFibGVkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4gfHwgIWNsb3NlT25JdGVtQ2xpY2spIHJldHVybjtcbiAgICBjb25zdCBoYW5kbGVyID0gKGU6IGdsb2JhbFRoaXMuTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKGNvbnRlbnRSZWYuY3VycmVudD8uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlciwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIC8vIEV4cGxpY2l0IGNsZWFudXAgd2l0aG91dCByZXR1cm5pbmcgKGxpbnQgcnVsZSBmb3JiaWRzIHJldHVybmluZyBhcnJvdyBmbilcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgfTtcbiAgICAvLyBTdG9yZSBpbiByZWYgdG8gcnVuIG9uIHVubW91bnQgLyBkZXBlbmRlbmN5IGNoYW5nZVxuICAgIGNsZWFudXBSZWYuY3VycmVudC5wdXNoKGNsZWFudXApO1xuICB9LCBbaXNPcGVuLCBjbG9zZU9uSXRlbUNsaWNrLCBjbG9zZV0pO1xuICAvLyBSdW4gYWNjdW11bGF0ZWQgY2xlYW51cHMgb24gdW5tb3VudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhbnVwUmVmLmN1cnJlbnQuZm9yRWFjaCgoZm4pID0+IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0pO1xuICAgICAgY2xlYW51cFJlZi5jdXJyZW50ID0gW107XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIGxldCB0cmlnZ2VyRWxlbWVudCA9IHRyaWdnZXI7XG4gIGlmICh0eXBlb2YgdHJpZ2dlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyaWdnZXJFbGVtZW50ID0gdHJpZ2dlcihpc09wZW4pO1xuICB9XG5cbiAgaWYgKCFpc1ZhbGlkRWxlbWVudCh0cmlnZ2VyRWxlbWVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Ryb3Bkb3duIHRyaWdnZXIgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQuJyk7XG4gIH1cblxuICBjb25zdCBpc0hvc3RFbGVtZW50ID0gdHlwZW9mIHRyaWdnZXJFbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnO1xuICBjb25zdCBpc0J1dHRvbkVsZW1lbnQgPSBpc0hvc3RFbGVtZW50ICYmIHRyaWdnZXJFbGVtZW50LnR5cGUgPT09ICdidXR0b24nO1xuICBjb25zdCBjYW5BdHRhY2hSZWYgPVxuICAgIGlzSG9zdEVsZW1lbnQgfHxcbiAgICB0eXBlb2YgdHJpZ2dlckVsZW1lbnQudHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgIGlzRm9yd2FyZFJlZkNvbXBvbmVudCh0cmlnZ2VyRWxlbWVudC50eXBlKTtcblxuICBpZiAoIWNhbkF0dGFjaFJlZikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdEcm9wZG93biB0cmlnZ2VyIG11c3QgYmUgYSBET00gZWxlbWVudCBvciBjb21wb25lbnQgdGhhdCBhY2NlcHRzIGEgcmVmLicsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRyaWdnZXJFbGVtZW50UmVmID1cbiAgICAodHJpZ2dlckVsZW1lbnQucHJvcHMgYXMgeyByZWY/OiBSZWY8SFRNTEVsZW1lbnQ+IH0pLnJlZiA/P1xuICAgICh0cmlnZ2VyRWxlbWVudCBhcyBSZWFjdEVsZW1lbnQgJiB7IHJlZj86IFJlZjxIVE1MRWxlbWVudD4gfSkucmVmO1xuICBjb25zdCBzZXRUcmlnZ2VyUmVmID0gKG5vZGU6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgIHRyaWdnZXJSZWYuY3VycmVudCA9IG5vZGU7XG4gICAgaWYgKHR5cGVvZiB0cmlnZ2VyRWxlbWVudFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJpZ2dlckVsZW1lbnRSZWYobm9kZSk7XG4gICAgfSBlbHNlIGlmICh0cmlnZ2VyRWxlbWVudFJlZiAhPSBudWxsKSB7XG4gICAgICAodHJpZ2dlckVsZW1lbnRSZWYgYXMgTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+KS5jdXJyZW50ID1cbiAgICAgICAgbm9kZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlclByb3BzID0gdHJpZ2dlckVsZW1lbnQucHJvcHMgYXMgSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+ICYge1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlckNsaWNrID0gKGV2ZW50OiBSZWFjdE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgdHJpZ2dlclByb3BzLm9uQ2xpY2s/LihldmVudCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9nZ2xlKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlcktleURvd24gPSAoZXZlbnQ6IFJlYWN0S2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pID0+IHtcbiAgICB0cmlnZ2VyUHJvcHMub25LZXlEb3duPy4oZXZlbnQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0b2dnbGUoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbWVyZ2VkVHJpZ2dlclByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBvbkNsaWNrOiBoYW5kbGVUcmlnZ2VyQ2xpY2ssXG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAnbWVudScsXG4gICAgJ2FyaWEtZXhwYW5kZWQnOiBpc09wZW4sXG4gIH07XG5cbiAgaWYgKGFyaWFMYWJlbCAhPSBudWxsICYmIGFyaWFMYWJlbCAhPT0gJycpIHtcbiAgICBtZXJnZWRUcmlnZ2VyUHJvcHNbJ2FyaWEtbGFiZWwnXSA9IGFyaWFMYWJlbDtcbiAgfVxuXG4gIGlmIChpc0J1dHRvbkVsZW1lbnQpIHtcbiAgICBpZiAodHJpZ2dlclByb3BzLnR5cGUgPT0gbnVsbCkge1xuICAgICAgbWVyZ2VkVHJpZ2dlclByb3BzLnR5cGUgPSAnYnV0dG9uJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWVyZ2VkVHJpZ2dlclByb3BzLm9uS2V5RG93biA9IGhhbmRsZVRyaWdnZXJLZXlEb3duO1xuICAgIGlmICh0cmlnZ2VyUHJvcHMucm9sZSA9PSBudWxsKSB7XG4gICAgICBtZXJnZWRUcmlnZ2VyUHJvcHMucm9sZSA9ICdidXR0b24nO1xuICAgIH1cbiAgICBpZiAodHJpZ2dlclByb3BzLnRhYkluZGV4ID09IG51bGwpIHtcbiAgICAgIG1lcmdlZFRyaWdnZXJQcm9wcy50YWJJbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgbWVyZ2VkVHJpZ2dlclByb3BzLnJlZiA9IHNldFRyaWdnZXJSZWY7XG5cbiAgbGV0IGNvbnRlbnRTdHlsZXM6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fTtcbiAgaWYgKHBvc2l0aW9uICE9IG51bGwpIHtcbiAgICBjb250ZW50U3R5bGVzID0ge1xuICAgICAgdG9wOiBwb3NpdGlvbi50b3AsXG4gICAgICBsZWZ0OiBwb3NpdGlvbi5sZWZ0LFxuICAgICAgd2lkdGg6IHBvc2l0aW9uLndpZHRoLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwb3J0YWxUYXJnZXQgPSBwb3J0YWxDb250YWluZXIgPz8gZG9jdW1lbnQuYm9keTtcblxuICBjb25zdCBjb250ZXh0VmFsdWU6IERyb3Bkb3duQ29udGV4dFZhbHVlID0ge1xuICAgIGNsb3NlLFxuICAgIG9wZW46IG9wZW5GbixcbiAgICBpc09wZW4sXG4gIH07XG5cbiAgbGV0IGRyb3Bkb3duQ29udGVudDogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgaWYgKGlzT3Blbikge1xuICAgIGRyb3Bkb3duQ29udGVudCA9IGNyZWF0ZVBvcnRhbChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtjb250ZW50UmVmfVxuICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgY2xhc3Nlcy5jb250ZW50LFxuICAgICAgICAgIGNsYXNzZXMuY29udGVudFBvc2l0aW9uZWQsXG4gICAgICAgICAgY29udGVudENsYXNzTmFtZSxcbiAgICAgICAgKX1cbiAgICAgICAgc3R5bGU9e2NvbnRlbnRTdHlsZXN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PixcbiAgICAgIHBvcnRhbFRhcmdldCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25Db250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2N4KGNsYXNzZXMuY29udGFpbmVyLCBjbGFzc05hbWUpfSByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgIHtjbG9uZUVsZW1lbnQodHJpZ2dlckVsZW1lbnQsIG1lcmdlZFRyaWdnZXJQcm9wcyl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtkcm9wZG93bkNvbnRlbnR9XG4gICAgPC9Ecm9wZG93bkNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIl19
@@ -0,0 +1,8 @@
1
+ export declare const container: string;
2
+ export declare const content: string;
3
+ export declare const contentPositioned: string;
4
+ export declare const hidden: string;
5
+ export declare const focusOutlineReset: string;
6
+ export declare const menu: string;
7
+ export declare const menuItem: string;
8
+ //# sourceMappingURL=dropdown.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown.css.d.ts","sourceRoot":"","sources":["../../../../src/atomic/molecules/dropdown/dropdown.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,QAEpB,CAAC;AAGH,eAAO,MAAM,OAAO,QAKlB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAI5B,CAAC;AAEH,eAAO,MAAM,MAAM,QAEjB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAE5B,CAAC;AAEH,eAAO,MAAM,IAAI,QAIf,CAAC;AAEH,eAAO,MAAM,QAAQ,QAEnB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { sprinkles } from '../../../theme/sprinkles.css.js';
2
+ export const container = sprinkles({
3
+ position: 'relative',
4
+ });
5
+ export const content = sprinkles({
6
+ backgroundColor: 'white',
7
+ borderRadius: 'xl',
8
+ zIndex: 'modal',
9
+ overflow: 'hidden',
10
+ });
11
+ export const contentPositioned = sprinkles({
12
+ position: 'fixed',
13
+ top: 0,
14
+ left: 0,
15
+ });
16
+ export const hidden = sprinkles({
17
+ display: 'none',
18
+ });
19
+ export const focusOutlineReset = sprinkles({
20
+ outline: 'none',
21
+ });
22
+ export const menu = sprinkles({
23
+ listStyleType: 'none',
24
+ margin: 0,
25
+ padding: 0,
26
+ });
27
+ export const menuItem = sprinkles({
28
+ cursor: 'pointer',
29
+ });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY3NzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F0b21pYy9tb2xlY3VsZXMvZHJvcGRvd24vZHJvcGRvd24uY3NzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc1RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLFFBQVEsRUFBRSxVQUFVO0NBQ3JCLENBQUMsQ0FBQztBQUdILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7SUFDL0IsZUFBZSxFQUFFLE9BQU87SUFDeEIsWUFBWSxFQUFFLElBQUk7SUFDbEIsTUFBTSxFQUFFLE9BQU87SUFDZixRQUFRLEVBQUUsUUFBUTtDQUNuQixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUM7SUFDekMsUUFBUSxFQUFFLE9BQU87SUFDakIsR0FBRyxFQUFFLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQztDQUNSLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDOUIsT0FBTyxFQUFFLE1BQU07Q0FDaEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDO0lBQ3pDLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUM7SUFDNUIsYUFBYSxFQUFFLE1BQU07SUFDckIsTUFBTSxFQUFFLENBQUM7SUFDVCxPQUFPLEVBQUUsQ0FBQztDQUNYLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFDaEMsTUFBTSxFQUFFLFNBQVM7Q0FDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3ByaW5rbGVzIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWUvc3ByaW5rbGVzLmNzcy5qcyc7XG5cbi8vIENvbnRhaW5lciBvbmx5IHdyYXBzIHRoZSB0cmlnZ2VyIG5vdzsgbWVudSBjb250ZW50IGlzIHBvcnRhbGVkIHRvIGJvZHkuXG5leHBvcnQgY29uc3QgY29udGFpbmVyID0gc3ByaW5rbGVzKHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG59KTtcblxuLy8gQmFzZSB2aXN1YWwgc3R5bGluZyBmb3IgdGhlIGRyb3Bkb3duIGNvbnRlbnQuIFBvc2l0aW9uICh0b3AvbGVmdCkgaXMgYXBwbGllZCBpbmxpbmUuXG5leHBvcnQgY29uc3QgY29udGVudCA9IHNwcmlua2xlcyh7XG4gIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgYm9yZGVyUmFkaXVzOiAneGwnLFxuICB6SW5kZXg6ICdtb2RhbCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbn0pO1xuXG5leHBvcnQgY29uc3QgY29udGVudFBvc2l0aW9uZWQgPSBzcHJpbmtsZXMoe1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxufSk7XG5cbmV4cG9ydCBjb25zdCBoaWRkZW4gPSBzcHJpbmtsZXMoe1xuICBkaXNwbGF5OiAnbm9uZScsXG59KTtcblxuZXhwb3J0IGNvbnN0IGZvY3VzT3V0bGluZVJlc2V0ID0gc3ByaW5rbGVzKHtcbiAgb3V0bGluZTogJ25vbmUnLFxufSk7XG5cbmV4cG9ydCBjb25zdCBtZW51ID0gc3ByaW5rbGVzKHtcbiAgbGlzdFN0eWxlVHlwZTogJ25vbmUnLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6IDAsXG59KTtcblxuZXhwb3J0IGNvbnN0IG1lbnVJdGVtID0gc3ByaW5rbGVzKHtcbiAgY3Vyc29yOiAncG9pbnRlcicsXG59KTtcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { type ComponentProps, type JSX, type ReactNode } from 'react';
2
+ import { Button } from '../../atoms/button/Button.js';
3
+ export type FormActionsProps = {
4
+ onCancel: () => void;
5
+ cancelLabel?: string;
6
+ submitLabel?: string;
7
+ submitLoadingLabel?: string;
8
+ isSubmitting?: boolean;
9
+ submitDisabled?: boolean;
10
+ className?: string;
11
+ renderSubmitContent?: (isSubmitting: boolean) => ReactNode;
12
+ submitButtonProps?: Omit<ComponentProps<typeof Button>, 'children' | 'type'>;
13
+ cancelButtonProps?: Omit<ComponentProps<typeof Button>, 'children' | 'type' | 'variant'>;
14
+ };
15
+ export declare const FormActions: ({ onCancel, cancelLabel, submitLabel, submitLoadingLabel, isSubmitting, submitDisabled, className, renderSubmitContent, submitButtonProps, cancelButtonProps, }: FormActionsProps) => JSX.Element;
16
+ //# sourceMappingURL=FormActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormActions.d.ts","sourceRoot":"","sources":["../../../../src/atomic/molecules/form-actions/FormActions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAGtD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,SAAS,CAAC;IAC3D,iBAAiB,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;IAC7E,iBAAiB,CAAC,EAAE,IAAI,CACtB,cAAc,CAAC,OAAO,MAAM,CAAC,EAC7B,UAAU,GAAG,MAAM,GAAG,SAAS,CAChC,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,iKAWzB,gBAAgB,KAAG,GAAG,CAAC,OAyDzB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from '../../atoms/button/Button.js';
3
+ import { useUiTranslation } from '../../../i18n/useUiTranslation.js';
4
+ export const FormActions = ({ onCancel, cancelLabel, submitLabel, submitLoadingLabel, isSubmitting = false, submitDisabled = false, className, renderSubmitContent, submitButtonProps, cancelButtonProps, }) => {
5
+ const { t } = useUiTranslation();
6
+ const resolvedCancelLabel = cancelLabel ?? t('common.actions.cancel');
7
+ const resolvedSubmitLabel = submitLabel ?? t('common.actions.save');
8
+ const resolvedSubmitLoadingLabel = submitLoadingLabel ?? t('common.actions.saving');
9
+ const cancelProps = cancelButtonProps ?? {};
10
+ const { className: cancelClassName, disabled: cancelDisabled, ...restCancelButtonProps } = cancelProps;
11
+ const submitProps = submitButtonProps ?? {};
12
+ const { className: submitClassName, disabled: submitDisabledOverride, ...restSubmitButtonProps } = submitProps;
13
+ let submitContent;
14
+ if (renderSubmitContent != null) {
15
+ submitContent = renderSubmitContent(isSubmitting);
16
+ }
17
+ else if (isSubmitting) {
18
+ submitContent = resolvedSubmitLoadingLabel;
19
+ }
20
+ else {
21
+ submitContent = resolvedSubmitLabel;
22
+ }
23
+ const isCancelDisabled = Boolean(cancelDisabled);
24
+ const isSubmitDisabled = Boolean(submitDisabled) || isSubmitting || submitDisabledOverride === true;
25
+ return (_jsxs("div", { className: className, children: [_jsx(Button, { type: "button", variant: "text", onClick: onCancel, disabled: isCancelDisabled, className: cancelClassName, ...restCancelButtonProps, children: resolvedCancelLabel }), _jsx(Button, { type: "submit", variant: "primary", disabled: isSubmitDisabled, className: submitClassName, ...restSubmitButtonProps, children: submitContent })] }));
26
+ };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybUFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXRvbWljL21vbGVjdWxlcy9mb3JtLWFjdGlvbnMvRm9ybUFjdGlvbnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFrQnJFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQzFCLFFBQVEsRUFDUixXQUFXLEVBQ1gsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixZQUFZLEdBQUcsS0FBSyxFQUNwQixjQUFjLEdBQUcsS0FBSyxFQUN0QixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixpQkFBaUIsR0FDQSxFQUFlLEVBQUU7SUFDbEMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDakMsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDdEUsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDcEUsTUFBTSwwQkFBMEIsR0FDOUIsa0JBQWtCLElBQUksQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDbkQsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLElBQUksRUFBRSxDQUFDO0lBQzVDLE1BQU0sRUFDSixTQUFTLEVBQUUsZUFBZSxFQUMxQixRQUFRLEVBQUUsY0FBYyxFQUN4QixHQUFHLHFCQUFxQixFQUN6QixHQUFHLFdBQVcsQ0FBQztJQUVoQixNQUFNLFdBQVcsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7SUFDNUMsTUFBTSxFQUNKLFNBQVMsRUFBRSxlQUFlLEVBQzFCLFFBQVEsRUFBRSxzQkFBc0IsRUFDaEMsR0FBRyxxQkFBcUIsRUFDekIsR0FBRyxXQUFXLENBQUM7SUFFaEIsSUFBSSxhQUF3QixDQUFDO0lBRTdCLElBQUksbUJBQW1CLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEMsYUFBYSxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BELENBQUM7U0FBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hCLGFBQWEsR0FBRywwQkFBMEIsQ0FBQztJQUM3QyxDQUFDO1NBQU0sQ0FBQztRQUNOLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakQsTUFBTSxnQkFBZ0IsR0FDcEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLFlBQVksSUFBSSxzQkFBc0IsS0FBSyxJQUFJLENBQUM7SUFFN0UsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFFLFNBQVMsYUFDdkIsS0FBQyxNQUFNLElBQ0wsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUMsTUFBTSxFQUNkLE9BQU8sRUFBRSxRQUFRLEVBQ2pCLFFBQVEsRUFBRSxnQkFBZ0IsRUFDMUIsU0FBUyxFQUFFLGVBQWUsS0FDdEIscUJBQXFCLFlBRXhCLG1CQUFtQixHQUNiLEVBQ1QsS0FBQyxNQUFNLElBQ0wsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUMsU0FBUyxFQUNqQixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLFNBQVMsRUFBRSxlQUFlLEtBQ3RCLHFCQUFxQixZQUV4QixhQUFhLEdBQ1AsSUFDTCxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbXBvbmVudFByb3BzLCB0eXBlIEpTWCwgdHlwZSBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9CdXR0b24uanMnO1xuaW1wb3J0IHsgdXNlVWlUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2kxOG4vdXNlVWlUcmFuc2xhdGlvbi5qcyc7XG5cbmV4cG9ydCB0eXBlIEZvcm1BY3Rpb25zUHJvcHMgPSB7XG4gIG9uQ2FuY2VsOiAoKSA9PiB2b2lkO1xuICBjYW5jZWxMYWJlbD86IHN0cmluZztcbiAgc3VibWl0TGFiZWw/OiBzdHJpbmc7XG4gIHN1Ym1pdExvYWRpbmdMYWJlbD86IHN0cmluZztcbiAgaXNTdWJtaXR0aW5nPzogYm9vbGVhbjtcbiAgc3VibWl0RGlzYWJsZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHJlbmRlclN1Ym1pdENvbnRlbnQ/OiAoaXNTdWJtaXR0aW5nOiBib29sZWFuKSA9PiBSZWFjdE5vZGU7XG4gIHN1Ym1pdEJ1dHRvblByb3BzPzogT21pdDxDb21wb25lbnRQcm9wczx0eXBlb2YgQnV0dG9uPiwgJ2NoaWxkcmVuJyB8ICd0eXBlJz47XG4gIGNhbmNlbEJ1dHRvblByb3BzPzogT21pdDxcbiAgICBDb21wb25lbnRQcm9wczx0eXBlb2YgQnV0dG9uPixcbiAgICAnY2hpbGRyZW4nIHwgJ3R5cGUnIHwgJ3ZhcmlhbnQnXG4gID47XG59O1xuXG5leHBvcnQgY29uc3QgRm9ybUFjdGlvbnMgPSAoe1xuICBvbkNhbmNlbCxcbiAgY2FuY2VsTGFiZWwsXG4gIHN1Ym1pdExhYmVsLFxuICBzdWJtaXRMb2FkaW5nTGFiZWwsXG4gIGlzU3VibWl0dGluZyA9IGZhbHNlLFxuICBzdWJtaXREaXNhYmxlZCA9IGZhbHNlLFxuICBjbGFzc05hbWUsXG4gIHJlbmRlclN1Ym1pdENvbnRlbnQsXG4gIHN1Ym1pdEJ1dHRvblByb3BzLFxuICBjYW5jZWxCdXR0b25Qcm9wcyxcbn06IEZvcm1BY3Rpb25zUHJvcHMpOiBKU1guRWxlbWVudCA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVWlUcmFuc2xhdGlvbigpO1xuICBjb25zdCByZXNvbHZlZENhbmNlbExhYmVsID0gY2FuY2VsTGFiZWwgPz8gdCgnY29tbW9uLmFjdGlvbnMuY2FuY2VsJyk7XG4gIGNvbnN0IHJlc29sdmVkU3VibWl0TGFiZWwgPSBzdWJtaXRMYWJlbCA/PyB0KCdjb21tb24uYWN0aW9ucy5zYXZlJyk7XG4gIGNvbnN0IHJlc29sdmVkU3VibWl0TG9hZGluZ0xhYmVsID1cbiAgICBzdWJtaXRMb2FkaW5nTGFiZWwgPz8gdCgnY29tbW9uLmFjdGlvbnMuc2F2aW5nJyk7XG4gIGNvbnN0IGNhbmNlbFByb3BzID0gY2FuY2VsQnV0dG9uUHJvcHMgPz8ge307XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWU6IGNhbmNlbENsYXNzTmFtZSxcbiAgICBkaXNhYmxlZDogY2FuY2VsRGlzYWJsZWQsXG4gICAgLi4ucmVzdENhbmNlbEJ1dHRvblByb3BzXG4gIH0gPSBjYW5jZWxQcm9wcztcblxuICBjb25zdCBzdWJtaXRQcm9wcyA9IHN1Ym1pdEJ1dHRvblByb3BzID8/IHt9O1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lOiBzdWJtaXRDbGFzc05hbWUsXG4gICAgZGlzYWJsZWQ6IHN1Ym1pdERpc2FibGVkT3ZlcnJpZGUsXG4gICAgLi4ucmVzdFN1Ym1pdEJ1dHRvblByb3BzXG4gIH0gPSBzdWJtaXRQcm9wcztcblxuICBsZXQgc3VibWl0Q29udGVudDogUmVhY3ROb2RlO1xuXG4gIGlmIChyZW5kZXJTdWJtaXRDb250ZW50ICE9IG51bGwpIHtcbiAgICBzdWJtaXRDb250ZW50ID0gcmVuZGVyU3VibWl0Q29udGVudChpc1N1Ym1pdHRpbmcpO1xuICB9IGVsc2UgaWYgKGlzU3VibWl0dGluZykge1xuICAgIHN1Ym1pdENvbnRlbnQgPSByZXNvbHZlZFN1Ym1pdExvYWRpbmdMYWJlbDtcbiAgfSBlbHNlIHtcbiAgICBzdWJtaXRDb250ZW50ID0gcmVzb2x2ZWRTdWJtaXRMYWJlbDtcbiAgfVxuXG4gIGNvbnN0IGlzQ2FuY2VsRGlzYWJsZWQgPSBCb29sZWFuKGNhbmNlbERpc2FibGVkKTtcbiAgY29uc3QgaXNTdWJtaXREaXNhYmxlZCA9XG4gICAgQm9vbGVhbihzdWJtaXREaXNhYmxlZCkgfHwgaXNTdWJtaXR0aW5nIHx8IHN1Ym1pdERpc2FibGVkT3ZlcnJpZGUgPT09IHRydWU7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgb25DbGljaz17b25DYW5jZWx9XG4gICAgICAgIGRpc2FibGVkPXtpc0NhbmNlbERpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NhbmNlbENsYXNzTmFtZX1cbiAgICAgICAgey4uLnJlc3RDYW5jZWxCdXR0b25Qcm9wc31cbiAgICAgID5cbiAgICAgICAge3Jlc29sdmVkQ2FuY2VsTGFiZWx9XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0RGlzYWJsZWR9XG4gICAgICAgIGNsYXNzTmFtZT17c3VibWl0Q2xhc3NOYW1lfVxuICAgICAgICB7Li4ucmVzdFN1Ym1pdEJ1dHRvblByb3BzfVxuICAgICAgPlxuICAgICAgICB7c3VibWl0Q29udGVudH1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { type JSX, type ReactNode } from 'react';
2
+ import { type ToastItem } from './ToastViewport.js';
3
+ export type ToastApi = {
4
+ push: (toast: Omit<ToastItem, 'id'> & {
5
+ id?: string;
6
+ }) => string;
7
+ dismiss: (toastId: string) => void;
8
+ clear: () => void;
9
+ info: (title: ReactNode, message?: ReactNode) => string;
10
+ warning: (title: ReactNode, message?: ReactNode) => string;
11
+ error: (title: ReactNode, message?: ReactNode) => string;
12
+ };
13
+ export type ToastProviderProps = {
14
+ children: ReactNode;
15
+ maxToasts?: number;
16
+ };
17
+ export declare const ToastProvider: ({ children, maxToasts, }: ToastProviderProps) => JSX.Element;
18
+ export declare const useToast: () => ToastApi;
19
+ //# sourceMappingURL=ToastProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToastProvider.d.ts","sourceRoot":"","sources":["../../../../src/atomic/molecules/toast/ToastProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,GAAG,EACR,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACjE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,SAAS,KAAK,MAAM,CAAC;IACxD,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,SAAS,KAAK,MAAM,CAAC;IAC3D,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,SAAS,KAAK,MAAM,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF,eAAO,MAAM,aAAa,GAAI,0BAG3B,kBAAkB,KAAG,GAAG,CAAC,OAgH3B,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,QAM3B,CAAC"}