react-restyle-components 0.4.39 → 0.4.40

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 (232) hide show
  1. package/lib/index.js +3 -1
  2. package/lib/src/core-components/index.js +1 -1
  3. package/lib/src/core-components/src/components/Accordion/AccordionSection/Accordion.js +15 -1
  4. package/lib/src/core-components/src/components/Accordion/AccordionSection/AccordionContext.js +6 -1
  5. package/lib/src/core-components/src/components/Accordion/AccordionSection/AccordionSection.js +39 -1
  6. package/lib/src/core-components/src/components/Accordion/AccordionSection/Header.js +39 -1
  7. package/lib/src/core-components/src/components/Accordion/AccordionSection/elements.js +94 -57
  8. package/lib/src/core-components/src/components/Accordion/AccordionSection/hooks/useCurrentAccordionIndex.js +13 -1
  9. package/lib/src/core-components/src/components/Accordion/AccordionSection/index.js +3 -1
  10. package/lib/src/core-components/src/components/Accordion/AccordionSection/types.js +9 -1
  11. package/lib/src/core-components/src/components/Accordion/Collapsible/Collapsible2.component.js +249 -1
  12. package/lib/src/core-components/src/components/Action/types.js +8 -1
  13. package/lib/src/core-components/src/components/AlertBanner/AlertBanner.js +45 -1
  14. package/lib/src/core-components/src/components/AlertBanner/elements.js +120 -45
  15. package/lib/src/core-components/src/components/AlertBanner/index.js +2 -1
  16. package/lib/src/core-components/src/components/AlertBanner/types.js +10 -1
  17. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-group-by-multiple-select-multiple-fields-display/auto-complete-filter-group-by-multiple-select-multiple-fields-display.component.js +334 -1
  18. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-multi-select-multi-fields-display-drag-drop/auto-complete-filter-multi-select-multi-fields-display-drag-drop.component.js +229 -1
  19. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-multi-select-selected-top-display/auto-complete-filter-multi-select-selected-top-display.component.js +174 -1
  20. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-multiple-select-multiple-fields-display/auto-complete-filter-multiple-select-multiple-fields-display.component.js +129 -2
  21. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-single-select/auto-complete-filter-single-select.component.js +55 -1
  22. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-single-select-multiple-fields-display/auto-complete-filter-single-select-multiple-fields-display.component.js +308 -2
  23. package/lib/src/core-components/src/components/AutoComplete/auto-complete-group-by/auto-complete-group-by.component.js +115 -1
  24. package/lib/src/core-components/src/components/AutoComplete/autocomplete/autocomplete.js +442 -2
  25. package/lib/src/core-components/src/components/AutoComplete/index.js +8 -1
  26. package/lib/src/core-components/src/components/Avatar/Avatar.js +148 -14
  27. package/lib/src/core-components/src/components/Badge/Badge.js +25 -2
  28. package/lib/src/core-components/src/components/Badge/InnerBadge/Inline.js +25 -1
  29. package/lib/src/core-components/src/components/Badge/InnerBadge/InnerBadge.js +25 -1
  30. package/lib/src/core-components/src/components/Badge/InnerBadge/elements.js +78 -32
  31. package/lib/src/core-components/src/components/Badge/InnerBadge/index.js +1 -1
  32. package/lib/src/core-components/src/components/Badge/index.js +1 -1
  33. package/lib/src/core-components/src/components/Badge/types.js +5 -1
  34. package/lib/src/core-components/src/components/Breadcrumb/Breadcrumb.js +83 -1
  35. package/lib/src/core-components/src/components/Breadcrumb/elements.js +166 -94
  36. package/lib/src/core-components/src/components/Breadcrumb/index.js +3 -1
  37. package/lib/src/core-components/src/components/Breadcrumb/types.js +3 -1
  38. package/lib/src/core-components/src/components/Button/button.component.js +18 -1
  39. package/lib/src/core-components/src/components/Button/buttonGroup/buttonGroup.component.js +4 -1
  40. package/lib/src/core-components/src/components/Button/index.js +2 -1
  41. package/lib/src/core-components/src/components/Button/types.js +1 -1
  42. package/lib/src/core-components/src/components/Chip/Chip.js +64 -1
  43. package/lib/src/core-components/src/components/Chip/elements.js +148 -48
  44. package/lib/src/core-components/src/components/Chip/index.js +2 -1
  45. package/lib/src/core-components/src/components/Chip/types.js +4 -1
  46. package/lib/src/core-components/src/components/Divider/Divider.js +25 -1
  47. package/lib/src/core-components/src/components/Divider/elements.js +68 -31
  48. package/lib/src/core-components/src/components/Divider/index.js +2 -1
  49. package/lib/src/core-components/src/components/Divider/types.js +4 -1
  50. package/lib/src/core-components/src/components/DynamicGrid/DynamicGrid.js +147 -1
  51. package/lib/src/core-components/src/components/DynamicGrid/GridContainer.js +24 -17
  52. package/lib/src/core-components/src/components/DynamicGrid/elements.js +162 -100
  53. package/lib/src/core-components/src/components/DynamicGrid/index.js +3 -1
  54. package/lib/src/core-components/src/components/DynamicGrid/types.js +28 -1
  55. package/lib/src/core-components/src/components/DynamicGrid/utils.js +193 -1
  56. package/lib/src/core-components/src/components/FormField/FormField.js +103 -1
  57. package/lib/src/core-components/src/components/FormField/components/CheckboxGroupInput.js +37 -1
  58. package/lib/src/core-components/src/components/FormField/components/CheckboxInput.js +8 -1
  59. package/lib/src/core-components/src/components/FormField/components/CssMultilineInput.js +192 -1
  60. package/lib/src/core-components/src/components/FormField/components/DatePickerInput.js +99 -1
  61. package/lib/src/core-components/src/components/FormField/components/DropdownInput.js +70 -1
  62. package/lib/src/core-components/src/components/FormField/components/OtpInput.js +81 -1
  63. package/lib/src/core-components/src/components/FormField/components/PasswordInput.js +40 -1
  64. package/lib/src/core-components/src/components/FormField/components/PinInput.js +75 -1
  65. package/lib/src/core-components/src/components/FormField/components/RadioInput.js +54 -1
  66. package/lib/src/core-components/src/components/FormField/components/TextDropdownInput.js +94 -1
  67. package/lib/src/core-components/src/components/FormField/components/ToggleInput.js +36 -1
  68. package/lib/src/core-components/src/components/FormField/components/index.js +11 -1
  69. package/lib/src/core-components/src/components/FormField/css-properties.js +161 -1
  70. package/lib/src/core-components/src/components/FormField/index.js +2 -1
  71. package/lib/src/core-components/src/components/Icon/Icon.js +79 -1
  72. package/lib/src/core-components/src/components/Icon/index.js +2 -1
  73. package/lib/src/core-components/src/components/Icon/types.js +9 -1
  74. package/lib/src/core-components/src/components/Loader/loader.component.js +215 -2
  75. package/lib/src/core-components/src/components/Masonry/Masonry.js +73 -1
  76. package/lib/src/core-components/src/components/Masonry/elements.js +46 -29
  77. package/lib/src/core-components/src/components/Masonry/hooks.js +100 -1
  78. package/lib/src/core-components/src/components/Masonry/index.js +3 -1
  79. package/lib/src/core-components/src/components/Masonry/types.js +1 -1
  80. package/lib/src/core-components/src/components/Modal/BasicModal/modal.component.js +116 -1
  81. package/lib/src/core-components/src/components/Modal/index.js +2 -1
  82. package/lib/src/core-components/src/components/Modal/modal-confirm/modal-confirm.component.js +147 -1
  83. package/lib/src/core-components/src/components/Picker/color-picker/color-picker.component.js +12 -1
  84. package/lib/src/core-components/src/components/Picker/color-picker-modal/color-picker-modal.component.js +40 -1
  85. package/lib/src/core-components/src/components/Picker/index.js +2 -1
  86. package/lib/src/core-components/src/components/Selection/index.js +4 -1
  87. package/lib/src/core-components/src/components/Selection/multi-select/multi-select.component.js +49 -1
  88. package/lib/src/core-components/src/components/Selection/multi-select-with-field/multi-select-with-field.component.js +58 -1
  89. package/lib/src/core-components/src/components/Selection/multi-selection-dropdown/multi-selection-dropdown.component.js +43 -1
  90. package/lib/src/core-components/src/components/Selection/single-select/single-select.component.js +87 -1
  91. package/lib/src/core-components/src/components/Skeleton/Skeleton.js +51 -1
  92. package/lib/src/core-components/src/components/Skeleton/elements.js +143 -54
  93. package/lib/src/core-components/src/components/Skeleton/index.js +2 -1
  94. package/lib/src/core-components/src/components/Skeleton/types.js +4 -1
  95. package/lib/src/core-components/src/components/SpeedDial/SpeedDial.js +128 -1
  96. package/lib/src/core-components/src/components/SpeedDial/elements.js +132 -62
  97. package/lib/src/core-components/src/components/SpeedDial/index.js +2 -1
  98. package/lib/src/core-components/src/components/SpeedDial/types.js +3 -1
  99. package/lib/src/core-components/src/components/Stepper2/stepper.component.js +139 -1
  100. package/lib/src/core-components/src/components/Switch/Switch.js +26 -1
  101. package/lib/src/core-components/src/components/Switch/elements.js +103 -34
  102. package/lib/src/core-components/src/components/Switch/index.js +2 -1
  103. package/lib/src/core-components/src/components/Switch/types.js +3 -1
  104. package/lib/src/core-components/src/components/Table/Table.js +1332 -1
  105. package/lib/src/core-components/src/components/Table/columnReorder.d.ts +128 -0
  106. package/lib/src/core-components/src/components/Table/columnReorder.js +530 -0
  107. package/lib/src/core-components/src/components/Table/columnResize.d.ts +99 -0
  108. package/lib/src/core-components/src/components/Table/columnResize.js +399 -0
  109. package/lib/src/core-components/src/components/Table/elements.d.ts +9 -1
  110. package/lib/src/core-components/src/components/Table/elements.js +324 -155
  111. package/lib/src/core-components/src/components/Table/filters.js +555 -30
  112. package/lib/src/core-components/src/components/Table/hooks.js +536 -2
  113. package/lib/src/core-components/src/components/Table/index.d.ts +4 -0
  114. package/lib/src/core-components/src/components/Table/index.js +6 -1
  115. package/lib/src/core-components/src/components/Table/types.d.ts +58 -0
  116. package/lib/src/core-components/src/components/Table/types.js +1 -1
  117. package/lib/src/core-components/src/components/Tabs/tabs.component.js +22 -1
  118. package/lib/src/core-components/src/components/Tags1/Tags.component.js +118 -1
  119. package/lib/src/core-components/src/components/Tags1/types.js +20 -1
  120. package/lib/src/core-components/src/components/Timer1/timer.component.js +76 -1
  121. package/lib/src/core-components/src/components/Toast/Toast.js +50 -1
  122. package/lib/src/core-components/src/components/Toast/elements.js +122 -41
  123. package/lib/src/core-components/src/components/Toast/index.js +2 -1
  124. package/lib/src/core-components/src/components/Toast/types.js +9 -1
  125. package/lib/src/core-components/src/components/Tooltip/Tooltip.js +200 -1
  126. package/lib/src/core-components/src/components/Tooltip/elements.js +117 -55
  127. package/lib/src/core-components/src/components/Tooltip/index.js +2 -1
  128. package/lib/src/core-components/src/components/Tooltip/types.js +17 -1
  129. package/lib/src/core-components/src/components/Tooltip/utils.js +140 -1
  130. package/lib/src/core-components/src/components/TreeSelect/TreeSelect.js +303 -1
  131. package/lib/src/core-components/src/components/TreeSelect/elements.js +216 -117
  132. package/lib/src/core-components/src/components/TreeSelect/hooks.js +252 -1
  133. package/lib/src/core-components/src/components/TreeSelect/index.js +3 -1
  134. package/lib/src/core-components/src/components/TreeSelect/types.js +1 -1
  135. package/lib/src/core-components/src/components/index.js +30 -1
  136. package/lib/src/core-components/src/components/pdf/pdf-images.components.js +7 -1
  137. package/lib/src/core-components/src/components/pdf/pdf-table.components.js +48 -5
  138. package/lib/src/core-components/src/components/pdf/pdf-typography.components.js +70 -1
  139. package/lib/src/core-components/src/components/pdf/pdf-wrapped-view.components.js +50 -1
  140. package/lib/src/core-components/src/core-components/Avatar.js +33 -4
  141. package/lib/src/core-components/src/core-components/CoreButton/CoreButton.js +10 -1
  142. package/lib/src/core-components/src/core-components/CoreButton/elements.js +176 -67
  143. package/lib/src/core-components/src/core-components/CoreButton/index.js +3 -1
  144. package/lib/src/core-components/src/core-components/CoreButton/types.js +6 -1
  145. package/lib/src/core-components/src/core-components/CoreButton/utils.js +12 -1
  146. package/lib/src/core-components/src/core-components/Divider/Divider.js +19 -4
  147. package/lib/src/core-components/src/core-components/Divider/index.js +1 -1
  148. package/lib/src/core-components/src/core-components/SelectionCardStrip/index.js +1 -1
  149. package/lib/src/core-components/src/core-components/SelectionCardStrip/selectionCardStrip.js +33 -10
  150. package/lib/src/core-components/src/core-components/StateLayer.js +5 -3
  151. package/lib/src/core-components/src/core-components/ToggleCore/elements.js +50 -25
  152. package/lib/src/core-components/src/core-components/ToggleCore/index.js +2 -1
  153. package/lib/src/core-components/src/core-components/ToggleCore/toggleCore.js +14 -1
  154. package/lib/src/core-components/src/core-components/atoms/Input/Input.js +22 -1
  155. package/lib/src/core-components/src/core-components/atoms/Label/Label.js +21 -1
  156. package/lib/src/core-components/src/core-components/atoms/Textarea/Textarea.js +19 -1
  157. package/lib/src/core-components/src/core-components/index.js +3 -1
  158. package/lib/src/core-components/src/helpers/constants.js +11 -1
  159. package/lib/src/core-components/src/hooks/index.js +1 -1
  160. package/lib/src/core-components/src/hooks/outside.hook.js +28 -1
  161. package/lib/src/core-components/src/index.js +12 -1
  162. package/lib/src/core-components/src/tc.global.css +12 -1
  163. package/lib/src/core-components/src/tc.module.css +1 -1
  164. package/lib/src/core-components/src/utils/abstracts/breakpoints/index.js +28 -1
  165. package/lib/src/core-components/src/utils/abstracts/colors/index.js +49 -1
  166. package/lib/src/core-components/src/utils/abstracts/index.js +5 -1
  167. package/lib/src/core-components/src/utils/abstracts/space/index.js +26 -1
  168. package/lib/src/core-components/src/utils/abstracts/theme/ThemeBoundary.js +8 -1
  169. package/lib/src/core-components/src/utils/abstracts/theme/default-themes.js +30 -1
  170. package/lib/src/core-components/src/utils/abstracts/theme/index.js +3 -1
  171. package/lib/src/core-components/src/utils/abstracts/theme/theme.js +30 -1
  172. package/lib/src/core-components/src/utils/abstracts/theme/types.js +1 -1
  173. package/lib/src/core-components/src/utils/abstracts/theme/useTheme.js +17 -1
  174. package/lib/src/core-components/src/utils/abstracts/typography/index.js +25 -1
  175. package/lib/src/core-components/src/utils/context/DefaultsProvider.js +8 -1
  176. package/lib/src/core-components/src/utils/context/InternalProvider.js +24 -1
  177. package/lib/src/core-components/src/utils/context/index.js +2 -1
  178. package/lib/src/core-components/src/utils/designTokens.js +125 -1
  179. package/lib/src/core-components/src/utils/helpers/attachSubComponents.js +23 -1
  180. package/lib/src/core-components/src/utils/helpers/flattenChildren.js +11 -1
  181. package/lib/src/core-components/src/utils/helpers/getChildByType.js +3 -1
  182. package/lib/src/core-components/src/utils/helpers/index.js +5 -1
  183. package/lib/src/core-components/src/utils/helpers/isComponentType.js +16 -1
  184. package/lib/src/core-components/src/utils/helpers/separateChildrenByType.js +12 -1
  185. package/lib/src/core-components/src/utils/hooks/index.js +18 -1
  186. package/lib/src/core-components/src/utils/hooks/useClickOutside.js +18 -1
  187. package/lib/src/core-components/src/utils/hooks/useCombinedRefs.js +17 -1
  188. package/lib/src/core-components/src/utils/hooks/useDebouncedCallback.js +12 -1
  189. package/lib/src/core-components/src/utils/hooks/useDebouncedValue.js +20 -1
  190. package/lib/src/core-components/src/utils/hooks/useDeprecation.js +40 -1
  191. package/lib/src/core-components/src/utils/hooks/useDeviceDetect.js +10 -1
  192. package/lib/src/core-components/src/utils/hooks/useDeviceForm.js +24 -1
  193. package/lib/src/core-components/src/utils/hooks/useDisableBodyScroll.js +16 -1
  194. package/lib/src/core-components/src/utils/hooks/useHoverState.js +36 -1
  195. package/lib/src/core-components/src/utils/hooks/useId.js +7 -1
  196. package/lib/src/core-components/src/utils/hooks/useIsBrowser.js +11 -1
  197. package/lib/src/core-components/src/utils/hooks/useMediaQuery.js +16 -1
  198. package/lib/src/core-components/src/utils/hooks/useOverflow.js +22 -1
  199. package/lib/src/core-components/src/utils/hooks/useSafeLayoutEffect.js +5 -1
  200. package/lib/src/core-components/src/utils/hooks/useScrollingUp.js +18 -1
  201. package/lib/src/core-components/src/utils/hooks/useTrapFocus.js +30 -1
  202. package/lib/src/core-components/src/utils/hooks/useWindowDimensions.js +23 -1
  203. package/lib/src/core-components/src/utils/index.js +9 -1
  204. package/lib/src/core-components/src/utils/stories/Wrappers.js +23 -8
  205. package/lib/src/core-components/src/utils/stories/cleanProps.js +5 -1
  206. package/lib/src/core-components/src/utils/stories/index.js +4 -1
  207. package/lib/src/core-components/src/utils/stories/sleep.js +4 -1
  208. package/lib/src/core-components/src/utils/stories/view-ports.js +50 -1
  209. package/lib/src/core-components/src/utils/styling/calcWidthOfColumns.js +5 -1
  210. package/lib/src/core-components/src/utils/styling/createGridContainer.js +12 -6
  211. package/lib/src/core-components/src/utils/styling/createTransition.js +7 -2
  212. package/lib/src/core-components/src/utils/styling/forwardProps.js +10 -1
  213. package/lib/src/core-components/src/utils/styling/index.js +5 -1
  214. package/lib/src/core-components/src/utils/styling/pxToRem.js +6 -1
  215. package/lib/src/core-components/src/utils/testing/getComputedStyle.js +3 -1
  216. package/lib/src/core-components/src/utils/testing/index.js +1 -1
  217. package/lib/src/core-components/src/utils/utility.util.js +14 -1
  218. package/lib/src/core-components/tailwind.config.js +233 -1
  219. package/lib/src/core-hooks/index.js +3 -1
  220. package/lib/src/core-hooks/src/useClickOutside/useClickOutside.hook.js +46 -1
  221. package/lib/src/core-hooks/src/useDebounce/useDebounce.hook.js +30 -1
  222. package/lib/src/core-hooks/src/usePreventEKey/usePreventEKey.hook.js +8 -1
  223. package/lib/src/core-utils/index.js +7 -1
  224. package/lib/src/core-utils/src/calculation/calculation.util.js +89 -1
  225. package/lib/src/core-utils/src/colors/color.util.js +15 -1
  226. package/lib/src/core-utils/src/convert/numberToWords/numToWords.util.js +145 -1
  227. package/lib/src/core-utils/src/convert/typography/camelCaseToTitleCase.util.js +5 -1
  228. package/lib/src/core-utils/src/form-helper/form-helper.util.js +82 -1
  229. package/lib/src/core-utils/src/index.js +7 -1
  230. package/lib/src/core-utils/src/utility/utility.util.js +12 -1
  231. package/lib/src/core-utils/src/uuid/uuid.util.js +8 -1
  232. package/package.json +1 -1
@@ -1,39 +1,173 @@
1
- "use strict";import{jsx as a}from"react/jsx-runtime";import{styled as u}from"styled-components";import{Icon as b}from"../Icon/Icon";const h={sm:"2rem",md:"2.5rem",lg:"3rem",xl:"4rem",xxl:"5rem"},p=u.div`
2
- width: ${({$size:e})=>h[e]};
3
- height: ${({$size:e})=>h[e]};
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { styled } from 'styled-components';
3
+ import { Icon } from '../Icon/Icon';
4
+ // Avatar size configuration
5
+ const sizeMap = {
6
+ sm: '2rem',
7
+ md: '2.5rem',
8
+ lg: '3rem',
9
+ xl: '4rem',
10
+ xxl: '5rem', // 80px
11
+ };
12
+ // Styled components
13
+ const AvatarContainer = styled.div `
14
+ width: ${({ $size }) => sizeMap[$size]};
15
+ height: ${({ $size }) => sizeMap[$size]};
4
16
  border-radius: 50%;
5
- background-color: ${({$backgroundColor:e})=>e};
6
- color: ${({$textColor:e})=>e};
17
+ background-color: ${({ $backgroundColor }) => $backgroundColor};
18
+ color: ${({ $textColor }) => $textColor};
7
19
  display: inline-flex;
8
20
  align-items: center;
9
21
  justify-content: center;
10
22
  overflow: hidden;
11
23
  position: relative;
12
24
  user-select: none;
13
- cursor: ${({$clickable:e})=>e?"pointer":"default"};
25
+ cursor: ${({ $clickable }) => ($clickable ? 'pointer' : 'default')};
14
26
  transition: all 0.2s ease-in-out;
15
27
 
16
28
  &:hover {
17
- ${({$clickable:e})=>e&&`
29
+ ${({ $clickable }) => $clickable &&
30
+ `
18
31
  transform: scale(1.05);
19
32
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
20
33
  `}
21
34
  }
22
- `,C=u.img`
35
+ `;
36
+ const AvatarImage = styled.img `
23
37
  width: 100%;
24
38
  height: 100%;
25
39
  object-fit: cover;
26
40
  border-radius: 50%;
27
- `,A=u.span`
41
+ `;
42
+ const InitialsText = styled.span `
28
43
  font-weight: 600;
29
- font-size: ${({$size:e})=>{switch(e){case"sm":return"0.75rem";case"md":return"0.875rem";case"lg":return"1rem";case"xl":return"1.25rem";case"xxl":return"1.5rem";default:return"0.875rem"}}};
44
+ font-size: ${({ $size }) => {
45
+ switch ($size) {
46
+ case 'sm':
47
+ return '0.75rem'; // 12px
48
+ case 'md':
49
+ return '0.875rem'; // 14px
50
+ case 'lg':
51
+ return '1rem'; // 16px
52
+ case 'xl':
53
+ return '1.25rem'; // 20px
54
+ case 'xxl':
55
+ return '1.5rem'; // 24px
56
+ default:
57
+ return '0.875rem';
58
+ }
59
+ }};
30
60
  line-height: 1;
31
61
  text-transform: uppercase;
32
62
  letter-spacing: 0.5px;
33
- `,v=u.div`
63
+ `;
64
+ const IconWrapper = styled.div `
34
65
  display: flex;
35
66
  align-items: center;
36
67
  justify-content: center;
37
- width: ${({$size:e})=>{switch(e){case"sm":return"1rem";case"md":return"1.25rem";case"lg":return"1.5rem";case"xl":return"2rem";case"xxl":return"2.5rem";default:return"1.25rem"}}};
38
- height: ${({$size:e})=>{switch(e){case"sm":return"1rem";case"md":return"1.25rem";case"lg":return"1.5rem";case"xl":return"2rem";case"xxl":return"2.5rem";default:return"1.25rem"}}};
39
- `,I=e=>{if(!e)return"";const r=e.trim().split(/\s+/);if(r.length===1)return r[0].charAt(0).toUpperCase();const t=r[0].charAt(0).toUpperCase(),n=r[r.length-1].charAt(0).toUpperCase();return t+n},k=e=>{const r=["#f56565","#ed8936","#ecc94b","#48bb78","#38b2ac","#4299e1","#667eea","#9f7aea","#ed64a6","#f687b3","#fc8181","#f6ad55","#fbd38d","#68d391","#4fd1c7","#63b3ed","#7c3aed","#a78bfa","#f093fb","#fbb6ce"];let t=0;for(let n=0;n<e.length;n++)t=e.charCodeAt(n)+((t<<5)-t);return r[Math.abs(t)%r.length]},w=e=>(["#f56565","#ed8936","#667eea","#9f7aea","#7c3aed"].includes(e),"#ffffff");export const Avatar=({name:e="",initials:r,src:t,alt:n,size:s="md",backgroundColor:g,textColor:$,iconName:x="FaUser",className:m,classNames:o={},styles:c={},onClick:i})=>{const l=r||I(e),d=g||k(l||e||"User"),f=$||w(d);return t?a(p,{$size:s,$backgroundColor:d,$textColor:f,$clickable:!!i,className:`${m||""} ${o.container||""}`,style:c.container,onClick:i,title:e||n,children:a(C,{src:t,alt:n||e||"Avatar",className:o.image,style:c.image})}):l?a(p,{$size:s,$backgroundColor:d,$textColor:f,$clickable:!!i,className:`${m||""} ${o.container||""}`,style:c.container,onClick:i,title:e||`${l} Avatar`,children:a(A,{$size:s,className:o.initials,style:c.initials,children:l})}):a(p,{$size:s,$backgroundColor:d,$textColor:f,$clickable:!!i,className:`${m||""} ${o.container||""}`,style:c.container,onClick:i,title:"User Avatar",children:a(v,{$size:s,className:o.iconWrapper,style:c.iconWrapper,children:a(b,{nameIcon:x,propsIcon:{color:f,size:"100%"}})})})},AVATAR_SIZES=Object.keys(h);export default Avatar;
68
+ width: ${({ $size }) => {
69
+ switch ($size) {
70
+ case 'sm':
71
+ return '1rem';
72
+ case 'md':
73
+ return '1.25rem';
74
+ case 'lg':
75
+ return '1.5rem';
76
+ case 'xl':
77
+ return '2rem';
78
+ case 'xxl':
79
+ return '2.5rem';
80
+ default:
81
+ return '1.25rem';
82
+ }
83
+ }};
84
+ height: ${({ $size }) => {
85
+ switch ($size) {
86
+ case 'sm':
87
+ return '1rem';
88
+ case 'md':
89
+ return '1.25rem';
90
+ case 'lg':
91
+ return '1.5rem';
92
+ case 'xl':
93
+ return '2rem';
94
+ case 'xxl':
95
+ return '2.5rem';
96
+ default:
97
+ return '1.25rem';
98
+ }
99
+ }};
100
+ `;
101
+ // Utility functions
102
+ const getInitials = (name) => {
103
+ if (!name)
104
+ return '';
105
+ const nameParts = name.trim().split(/\s+/);
106
+ if (nameParts.length === 1) {
107
+ return nameParts[0].charAt(0).toUpperCase();
108
+ }
109
+ // Take first letter of first name and first letter of last name
110
+ const firstInitial = nameParts[0].charAt(0).toUpperCase();
111
+ const lastInitial = nameParts[nameParts.length - 1].charAt(0).toUpperCase();
112
+ return firstInitial + lastInitial;
113
+ };
114
+ const generateBackgroundColor = (text) => {
115
+ // Generate a consistent color based on text
116
+ const colors = [
117
+ '#f56565',
118
+ '#ed8936',
119
+ '#ecc94b',
120
+ '#48bb78',
121
+ '#38b2ac',
122
+ '#4299e1',
123
+ '#667eea',
124
+ '#9f7aea',
125
+ '#ed64a6',
126
+ '#f687b3',
127
+ '#fc8181',
128
+ '#f6ad55',
129
+ '#fbd38d',
130
+ '#68d391',
131
+ '#4fd1c7',
132
+ '#63b3ed',
133
+ '#7c3aed',
134
+ '#a78bfa',
135
+ '#f093fb',
136
+ '#fbb6ce',
137
+ ];
138
+ let hash = 0;
139
+ for (let i = 0; i < text.length; i++) {
140
+ hash = text.charCodeAt(i) + ((hash << 5) - hash);
141
+ }
142
+ return colors[Math.abs(hash) % colors.length];
143
+ };
144
+ const getContrastColor = (backgroundColor) => {
145
+ // Simple contrast calculation
146
+ const darkColors = ['#f56565', '#ed8936', '#667eea', '#9f7aea', '#7c3aed'];
147
+ return darkColors.includes(backgroundColor) ? '#ffffff' : '#ffffff';
148
+ };
149
+ // Main Avatar component
150
+ export const Avatar = ({ name = '', initials, src, alt, size = 'md', backgroundColor, textColor, iconName = 'FaUser', className, classNames = {}, styles = {}, onClick, }) => {
151
+ // Determine what to display
152
+ const displayInitials = initials || getInitials(name);
153
+ const defaultBgColor = backgroundColor ||
154
+ generateBackgroundColor(displayInitials || name || 'User');
155
+ const defaultTextColor = textColor || getContrastColor(defaultBgColor);
156
+ // Render image if src is provided
157
+ if (src) {
158
+ return (_jsx(AvatarContainer, { "$size": size, "$backgroundColor": defaultBgColor, "$textColor": defaultTextColor, "$clickable": !!onClick, className: `${className || ''} ${classNames.container || ''}`, style: styles.container, onClick: onClick, title: name || alt, children: _jsx(AvatarImage, { src: src, alt: alt || name || 'Avatar', className: classNames.image, style: styles.image }) }));
159
+ }
160
+ // Render initials if name or initials are provided
161
+ if (displayInitials) {
162
+ return (_jsx(AvatarContainer, { "$size": size, "$backgroundColor": defaultBgColor, "$textColor": defaultTextColor, "$clickable": !!onClick, className: `${className || ''} ${classNames.container || ''}`, style: styles.container, onClick: onClick, title: name || `${displayInitials} Avatar`, children: _jsx(InitialsText, { "$size": size, className: classNames.initials, style: styles.initials, children: displayInitials }) }));
163
+ }
164
+ // Render icon as fallback
165
+ return (_jsx(AvatarContainer, { "$size": size, "$backgroundColor": defaultBgColor, "$textColor": defaultTextColor, "$clickable": !!onClick, className: `${className || ''} ${classNames.container || ''}`, style: styles.container, onClick: onClick, title: "User Avatar", children: _jsx(IconWrapper, { "$size": size, className: classNames.iconWrapper, style: styles.iconWrapper, children: _jsx(Icon, { nameIcon: iconName, propsIcon: {
166
+ color: defaultTextColor,
167
+ size: '100%',
168
+ } }) }) }));
169
+ };
170
+ // Export size constants for external use
171
+ export const AVATAR_SIZES = Object.keys(sizeMap);
172
+ // Default export
173
+ export default Avatar;
@@ -1,5 +1,28 @@
1
- "use strict";import{jsx as g,jsxs as b}from"react/jsx-runtime";import B,{memo as u,useMemo as y}from"react";import{attachSubComponents as h}from"../../utils";import{InnerBadge as x}from"./InnerBadge/InnerBadge";import{styled as j}from"styled-components";import{InlineBadge as v}from"./InnerBadge/Inline";const C=j.div`
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { memo, useMemo } from 'react';
3
+ import { attachSubComponents } from '../../utils';
4
+ import { InnerBadge } from './InnerBadge/InnerBadge';
5
+ import { styled } from 'styled-components';
6
+ import { InlineBadge } from './InnerBadge/Inline';
7
+ const BadgeContainer = styled.div `
2
8
  position: relative;
3
9
  width: min-content;
4
10
  display: inline-block;
5
- `,t=B.forwardRef(({size:n="hint",overlap:r="circular",children:o,position:a="bottom-right",variant:s="notification",iconSrc:m,count:e,"aria-label":i,classNames:d={},styles:f={},...l},p)=>{const c=y(()=>{if(i)return i;if(typeof e=="number")return`${e} notifications`;if(typeof e=="string"&&e)return`${e} notifications`},[i,e]);return b(C,{ref:p,"data-aui":"badge",className:d.container,style:f.container,...l,children:[g(x,{position:a,size:n,overlap:r,variant:s,iconSrc:m,count:e,"aria-label":c}),o]})});t.displayName="Badge";export const Badge=h("Badge",u(t),{Inline:v});
11
+ `;
12
+ const BadgeComponent = React.forwardRef(({ size = 'hint', overlap = 'circular', children, position = 'bottom-right', variant = 'notification', iconSrc, count, 'aria-label': ariaLabel, classNames = {}, styles = {}, ...props }, ref) => {
13
+ // Generate accessible label for the badge
14
+ const badgeAriaLabel = useMemo(() => {
15
+ if (ariaLabel)
16
+ return ariaLabel;
17
+ if (typeof count === 'number')
18
+ return `${count} notifications`;
19
+ if (typeof count === 'string' && count)
20
+ return `${count} notifications`;
21
+ return undefined;
22
+ }, [ariaLabel, count]);
23
+ return (_jsxs(BadgeContainer, { ref: ref, "data-aui": "badge", className: classNames.container, style: styles.container, ...props, children: [_jsx(InnerBadge, { position: position, size: size, overlap: overlap, variant: variant, iconSrc: iconSrc, count: count, "aria-label": badgeAriaLabel }), children] }));
24
+ });
25
+ BadgeComponent.displayName = 'Badge';
26
+ export const Badge = attachSubComponents('Badge', memo(BadgeComponent), {
27
+ Inline: InlineBadge,
28
+ });
@@ -1 +1,25 @@
1
- "use strict";import{jsx as l}from"react/jsx-runtime";import s,{forwardRef as f,useMemo as p}from"react";import{StyledIcon as u,StyledText as I,StyledInline as y}from"./elements";import{Icon as h}from"../../Icon/Icon";export const InlineBadge=s.memo(f(({size:r="md",variant:o="positive",iconSrc:n,count:e,children:t,...i},m)=>{const a=p(()=>{if(r==="hint")return null;if(n)return l(u,{$size:r,children:l(h,{nameIcon:n,propsIcon:{size:r==="sm"?"0.625rem":"0.75rem",color:"currentColor"}})});if(e!=null&&e!==""){const d=typeof e=="number"&&e>99?"99+":e;return l(I,{$size:r,children:d})}return t||null},[r,n,e,t]);return l(y,{"data-aui":"inline-badge",ref:m,$size:r,$variant:o,$hasIcon:!!n,role:"status",...i,children:a})}));InlineBadge.displayName="InlineBadge";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { forwardRef, useMemo } from 'react';
3
+ import { StyledIcon, StyledText, StyledInline } from './elements';
4
+ import { Icon } from '../../Icon/Icon';
5
+ export const InlineBadge = React.memo(forwardRef(({ size = 'md', variant = 'positive', iconSrc, count, children, ...props }, ref) => {
6
+ const childElement = useMemo(() => {
7
+ if (size === 'hint') {
8
+ return null;
9
+ }
10
+ if (iconSrc) {
11
+ return (_jsx(StyledIcon, { "$size": size, children: _jsx(Icon, { nameIcon: iconSrc, propsIcon: {
12
+ size: size === 'sm' ? '0.625rem' : '0.75rem',
13
+ color: 'currentColor',
14
+ } }) }));
15
+ }
16
+ if (count !== undefined && count !== null && count !== '') {
17
+ const displayCount = typeof count === 'number' && count > 99 ? '99+' : count;
18
+ return _jsx(StyledText, { "$size": size, children: displayCount });
19
+ }
20
+ // Render children as text content when no iconSrc or count
21
+ return children || null;
22
+ }, [size, iconSrc, count, children]);
23
+ return (_jsx(StyledInline, { "data-aui": "inline-badge", ref: ref, "$size": size, "$variant": variant, "$hasIcon": !!iconSrc, role: "status", ...props, children: childElement }));
24
+ }));
25
+ InlineBadge.displayName = 'InlineBadge';
@@ -1 +1,25 @@
1
- "use strict";import{jsx as t}from"react/jsx-runtime";import p,{useMemo as s}from"react";import{StyledIcon as f,StyledText as u,StyledBadge as h}from"./elements";import{Icon as I}from"../../Icon/Icon";export const InnerBadge=p.memo(({position:o="top-right",size:r="md",overlap:l="circular",variant:i="notification",iconSrc:n,count:e,...m})=>{const a=s(()=>{if(r==="hint")return null;if(n)return t(f,{$size:r,children:t(I,{nameIcon:n,propsIcon:{size:r==="sm"?"0.625rem":"0.75rem",color:"currentColor"}})});if(e!=null&&e!==""){const d=typeof e=="number"&&e>99?"99+":e;return t(u,{$size:r,children:d})}return null},[r,n,e]);return t(h,{$position:o,$size:r,$overlap:l,$variant:i,$hasIcon:!!n,role:"status","aria-live":"polite",...m,children:a})});InnerBadge.displayName="InnerBadge";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { useMemo } from 'react';
3
+ import { StyledIcon, StyledText, StyledBadge } from './elements';
4
+ import { Icon } from '../../Icon/Icon';
5
+ export const InnerBadge = React.memo(({ position = 'top-right', size = 'md', overlap = 'circular', variant = 'notification', iconSrc, count, ...props }) => {
6
+ const childElement = useMemo(() => {
7
+ if (size === 'hint') {
8
+ return null;
9
+ }
10
+ if (iconSrc) {
11
+ return (_jsx(StyledIcon, { "$size": size, children: _jsx(Icon, { nameIcon: iconSrc, propsIcon: {
12
+ size: size === 'sm' ? '0.625rem' : '0.75rem',
13
+ color: 'currentColor',
14
+ } }) }));
15
+ }
16
+ if (count !== undefined && count !== null && count !== '') {
17
+ // Format count display: show 99+ for numbers > 99
18
+ const displayCount = typeof count === 'number' && count > 99 ? '99+' : count;
19
+ return _jsx(StyledText, { "$size": size, children: displayCount });
20
+ }
21
+ return null;
22
+ }, [size, iconSrc, count]);
23
+ return (_jsx(StyledBadge, { "$position": position, "$size": size, "$overlap": overlap, "$variant": variant, "$hasIcon": !!iconSrc, role: "status", "aria-live": "polite", ...props, children: childElement }));
24
+ });
25
+ InnerBadge.displayName = 'InnerBadge';
@@ -1,65 +1,111 @@
1
- "use strict";import{styled as n,css as r}from"styled-components";import{sizeMap as l}from"../types";const u=(t,e)=>{const[o,s]=e.split("-");let a,i;return o==="top"?a="-50%":a="50%",s==="right"?i="50%":i="-50%",t==="square"?r`
2
- transform: translate(${i}, ${a});
3
- ${o}: 0;
4
- ${s}: 0;
5
- `:r`
6
- transform: translate(${i}, ${a});
7
- ${o}: 14%;
8
- ${s}: 14%;
9
- `},d=t=>{switch(t){case"alert":return r`
1
+ import { styled, css } from 'styled-components';
2
+ import { sizeMap, } from '../types';
3
+ const getTransform = (overlap, position) => {
4
+ const [vertical, horizontal] = position.split('-');
5
+ let verticalTranslate, horizontalTranslate;
6
+ vertical === 'top'
7
+ ? (verticalTranslate = '-50%')
8
+ : (verticalTranslate = '50%');
9
+ horizontal === 'right'
10
+ ? (horizontalTranslate = '50%')
11
+ : (horizontalTranslate = '-50%');
12
+ if (overlap === 'square') {
13
+ return css `
14
+ transform: translate(${horizontalTranslate}, ${verticalTranslate});
15
+ ${vertical}: 0;
16
+ ${horizontal}: 0;
17
+ `;
18
+ }
19
+ return css `
20
+ transform: translate(${horizontalTranslate}, ${verticalTranslate});
21
+ ${vertical}: 14%;
22
+ ${horizontal}: 14%;
23
+ `;
24
+ };
25
+ const getColor = (variant) => {
26
+ switch (variant) {
27
+ case 'alert':
28
+ return css `
10
29
  background-color: var(--aui-status-error);
11
30
  color: var(--aui-status-on-error);
12
- `;case"warn":return r`
31
+ `;
32
+ case 'warn':
33
+ return css `
13
34
  background-color: var(--aui-status-warning);
14
35
  color: var(--aui-status-on-warning);
15
- `;case"positive":return r`
36
+ `;
37
+ case 'positive':
38
+ return css `
16
39
  background-color: var(--aui-status-success);
17
40
  color: var(--aui-status-on-success);
18
- `;case"neutral":return r`
41
+ `;
42
+ case 'neutral':
43
+ return css `
19
44
  background-color: var(--aui-neutral-soft);
20
45
  color: var(--aui-on-neutral-soft);
21
46
  border: 1px solid var(--aui-outline);
22
- `;default:return r`
47
+ `;
48
+ default:
49
+ return css `
23
50
  background-color: var(--aui-primary);
24
51
  color: var(--aui-on-primary);
25
- `}},g=(t,e)=>t==="sm"&&!e?r`
52
+ `;
53
+ }
54
+ };
55
+ const getPadding = (size, hasIcon) => {
56
+ if (size === 'sm' && !hasIcon) {
57
+ return css `
26
58
  padding: 0 var(--aui-spacing-050);
27
- `:t==="md"&&!e?r`
59
+ `;
60
+ }
61
+ else if (size === 'md' && !hasIcon) {
62
+ return css `
28
63
  padding: 0 var(--aui-spacing-075);
29
- `:r`
64
+ `;
65
+ }
66
+ else {
67
+ return css `
30
68
  padding: 0;
31
- `,c=t=>r`
69
+ `;
70
+ }
71
+ };
72
+ const getSharedStyles = (props) => css `
32
73
  display: flex;
33
74
  align-items: center;
34
75
  justify-content: center;
35
76
  box-sizing: border-box;
36
77
  border-radius: 1rem;
37
78
  width: fit-content;
38
- min-height: ${l[t.$size]};
39
- min-width: ${l[t.$size]};
40
- ${t.$size==="hint"&&r`
79
+ min-height: ${sizeMap[props.$size]};
80
+ min-width: ${sizeMap[props.$size]};
81
+ ${props.$size === 'hint' &&
82
+ css `
41
83
  outline: 2px solid var(--aui-surface);
42
84
  `}
43
- ${d(t.$variant)};
44
- ${g(t.$size,t.$hasIcon)}
45
- `;export const StyledBadge=n.div`
85
+ ${getColor(props.$variant)};
86
+ ${getPadding(props.$size, props.$hasIcon)}
87
+ `;
88
+ export const StyledBadge = styled.div `
46
89
  position: absolute;
47
- ${c}
48
- ${t=>u(t.$overlap,t.$position)};
49
- `,StyledInline=n.div`
50
- ${c}
51
- `,StyledText=n.span`
52
- font-size: ${({$size:t})=>t==="sm"?"0.75rem":"0.875rem"};
90
+ ${getSharedStyles}
91
+ ${(props) => getTransform(props.$overlap, props.$position)};
92
+ `;
93
+ export const StyledInline = styled.div `
94
+ ${getSharedStyles}
95
+ `;
96
+ export const StyledText = styled.span `
97
+ font-size: ${({ $size }) => ($size === 'sm' ? '0.75rem' : '0.875rem')};
53
98
  font-weight: 700;
54
99
  line-height: 1rem;
55
100
  vertical-align: middle;
56
101
  font-variant-numeric: tabular-nums lining-nums;
57
- `,StyledIcon=n.div`
102
+ `;
103
+ export const StyledIcon = styled.div `
58
104
  display: flex;
59
105
  align-items: center;
60
106
  justify-content: center;
61
- width: ${({$size:t})=>t==="sm"?"0.625rem":"0.75rem"};
62
- height: ${({$size:t})=>t==="sm"?"0.625rem":"0.75rem"};
107
+ width: ${({ $size }) => ($size === 'sm' ? '0.625rem' : '0.75rem')};
108
+ height: ${({ $size }) => ($size === 'sm' ? '0.625rem' : '0.75rem')};
63
109
 
64
110
  .iconContainer {
65
111
  width: 100%;
@@ -1 +1 @@
1
- "use strict";export{InnerBadge}from"./InnerBadge";
1
+ export { InnerBadge } from './InnerBadge';
@@ -1 +1 @@
1
- "use strict";export*from"./Badge";
1
+ export * from './Badge';
@@ -1 +1,5 @@
1
- "use strict";export const sizeMap={hint:"0.5rem",sm:"1rem",md:"1.25rem"};
1
+ export const sizeMap = {
2
+ hint: '0.5rem',
3
+ sm: '1rem',
4
+ md: '1.25rem',
5
+ };
@@ -1 +1,83 @@
1
- "use strict";"use client";import{jsx as r,jsxs as a}from"react/jsx-runtime";import d,{forwardRef as z,useEffect as y,useMemo as F,useRef as L,useState as H,useCallback as _}from"react";import{useCombinedRefs as q}from"../../utils/hooks";import{Container as K,BreadcrumbList as N,Item as B,Separator as R,SeparatorText as p,OverflowDots as G,IconWrapper as S,DropdownMenu as J,DropdownItem as P}from"./elements";const j=()=>r("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:r("polyline",{points:"9 18 15 12 9 6"})}),Q=()=>a("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[r("path",{d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),r("polyline",{points:"9 22 9 12 15 12 15 22"})]}),U=(C,t)=>{switch(C){case"chevron":return r(j,{});case"slash":return r(p,{$size:t,children:"/"});case"arrow":return r(p,{$size:t,children:"\u2192"});case"dot":return r(p,{$size:t,children:"\u2022"});default:return r(j,{})}};export const Breadcrumb=z(function({children:t,maxItems:i,showOverflowDots:E=!1,variant:l="default",size:n="medium",separatorType:u="chevron",customSeparator:D,showHomeIcon:O=!1,collapsedItems:A,onCollapsedToggle:$,ariaLabel:I,...m},M){const c=L(null),W=q(M,c),[s,v]=H(!1),h=L(null),b=A??[],w=_(()=>{const e=!s;v(e),$?.(e)},[s,$]);y(()=>{const e=o=>{h.current&&!h.current.contains(o.target)&&v(!1)};return s&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[s]);const k=F(()=>{const e=d.Children.toArray(t);return i&&e.length>i?e.slice(-i):e},[t,i]);y(()=>{if(c.current){const e=c.current.querySelector("ol")?.lastElementChild;e&&c.current.scroll?.(e.offsetLeft,0)}},[]);const g=D||U(u,n),x=d.Children.count(k);return r(K,{"data-aui":"breadcrumb","aria-label":I||m["aria-label"]||"Breadcrumb navigation",ref:W,$variant:l,$size:n,role:"navigation",...m,children:a(N,{$variant:l,$size:n,children:[E&&i&&d.Children.count(t)>i&&a(B,{$variant:l,$size:n,$isActive:!1,$isCollapsed:!0,"aria-hidden":"true",children:[r(G,{$size:n,onClick:w,role:"button",tabIndex:0,onKeyDown:e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),w())},children:"\u2022\u2022\u2022"}),b.length>0&&r(J,{ref:h,$isOpen:s,children:b.map((e,o)=>a(P,{href:e.href||"#",children:[e.icon&&r(S,{$size:n,children:e.icon}),e.label]},o))}),r(R,{$type:u,$size:n,"aria-hidden":"true",children:g})]}),d.Children.map(k,(e,o)=>{const f=o===x-1;return a(B,{$variant:l,$size:n,$isActive:f,$isCollapsed:!1,"aria-current":f?"page":void 0,children:[O&&o===0&&r(S,{$size:n,children:r(Q,{})}),e,!f&&r(R,{$type:u,$size:n,"aria-hidden":"true",children:g})]},o)})]})})});Breadcrumb.displayName="Breadcrumb";
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React, { forwardRef, useEffect, useMemo, useRef, useState, useCallback, } from 'react';
4
+ import { useCombinedRefs } from '../../utils/hooks';
5
+ import { Container, BreadcrumbList, Item, Separator, SeparatorText, OverflowDots, IconWrapper, DropdownMenu, DropdownItem, } from './elements';
6
+ const ChevronIcon = () => (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("polyline", { points: "9 18 15 12 9 6" }) }));
7
+ const HomeIconSvg = () => (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }), _jsx("polyline", { points: "9 22 9 12 15 12 15 22" })] }));
8
+ const getSeparatorContent = (type, size) => {
9
+ switch (type) {
10
+ case 'chevron':
11
+ return _jsx(ChevronIcon, {});
12
+ case 'slash':
13
+ return _jsx(SeparatorText, { "$size": size, children: "/" });
14
+ case 'arrow':
15
+ return _jsx(SeparatorText, { "$size": size, children: "\u2192" });
16
+ case 'dot':
17
+ return _jsx(SeparatorText, { "$size": size, children: "\u2022" });
18
+ default:
19
+ return _jsx(ChevronIcon, {});
20
+ }
21
+ };
22
+ export const Breadcrumb = forwardRef(function BreadcrumbComponent({ children, maxItems, showOverflowDots = false, variant = 'default', size = 'medium', separatorType = 'chevron', customSeparator, showHomeIcon = false, collapsedItems, onCollapsedToggle, ariaLabel, ...rest }, fRef) {
23
+ const innerRef = useRef(null);
24
+ const combinedRef = useCombinedRefs(fRef, innerRef);
25
+ const [isCollapsedOpen, setIsCollapsedOpen] = useState(false);
26
+ const dropdownRef = useRef(null);
27
+ // Ensure collapsedItems is always an array
28
+ const safeCollapsedItems = collapsedItems ?? [];
29
+ // Handle collapsed items
30
+ const handleCollapsedToggle = useCallback(() => {
31
+ const newState = !isCollapsedOpen;
32
+ setIsCollapsedOpen(newState);
33
+ onCollapsedToggle?.(newState);
34
+ }, [isCollapsedOpen, onCollapsedToggle]);
35
+ // Close dropdown when clicking outside
36
+ useEffect(() => {
37
+ const handleClickOutside = (event) => {
38
+ if (dropdownRef.current &&
39
+ !dropdownRef.current.contains(event.target)) {
40
+ setIsCollapsedOpen(false);
41
+ }
42
+ };
43
+ if (isCollapsedOpen) {
44
+ document.addEventListener('mousedown', handleClickOutside);
45
+ }
46
+ return () => {
47
+ document.removeEventListener('mousedown', handleClickOutside);
48
+ };
49
+ }, [isCollapsedOpen]);
50
+ // Process children with maxItems limit
51
+ const breadcrumbChildren = useMemo(() => {
52
+ const childArray = React.Children.toArray(children);
53
+ if (maxItems && childArray.length > maxItems) {
54
+ return childArray.slice(-maxItems);
55
+ }
56
+ return childArray;
57
+ }, [children, maxItems]);
58
+ // Scroll to last item on mount
59
+ useEffect(() => {
60
+ if (innerRef.current) {
61
+ const lastElementChild = innerRef.current.querySelector('ol')
62
+ ?.lastElementChild;
63
+ if (lastElementChild) {
64
+ innerRef.current.scroll?.(lastElementChild.offsetLeft, 0);
65
+ }
66
+ }
67
+ }, []);
68
+ const separatorContent = customSeparator || getSeparatorContent(separatorType, size);
69
+ const childCount = React.Children.count(breadcrumbChildren);
70
+ return (_jsx(Container, { "data-aui": "breadcrumb", "aria-label": ariaLabel || rest['aria-label'] || 'Breadcrumb navigation', ref: combinedRef, "$variant": variant, "$size": size, role: "navigation", ...rest, children: _jsxs(BreadcrumbList, { "$variant": variant, "$size": size, children: [showOverflowDots &&
71
+ maxItems &&
72
+ React.Children.count(children) > maxItems && (_jsxs(Item, { "$variant": variant, "$size": size, "$isActive": false, "$isCollapsed": true, "aria-hidden": "true", children: [_jsx(OverflowDots, { "$size": size, onClick: handleCollapsedToggle, role: "button", tabIndex: 0, onKeyDown: (e) => {
73
+ if (e.key === 'Enter' || e.key === ' ') {
74
+ e.preventDefault();
75
+ handleCollapsedToggle();
76
+ }
77
+ }, children: "\u2022\u2022\u2022" }), safeCollapsedItems.length > 0 && (_jsx(DropdownMenu, { ref: dropdownRef, "$isOpen": isCollapsedOpen, children: safeCollapsedItems.map((item, idx) => (_jsxs(DropdownItem, { href: item.href || '#', children: [item.icon && (_jsx(IconWrapper, { "$size": size, children: item.icon })), item.label] }, idx))) })), _jsx(Separator, { "$type": separatorType, "$size": size, "aria-hidden": "true", children: separatorContent })] })), React.Children.map(breadcrumbChildren, (child, index) => {
78
+ const isLast = index === childCount - 1;
79
+ const isFirst = index === 0;
80
+ return (_jsxs(Item, { "$variant": variant, "$size": size, "$isActive": isLast, "$isCollapsed": false, "aria-current": isLast ? 'page' : undefined, children: [showHomeIcon && isFirst && (_jsx(IconWrapper, { "$size": size, children: _jsx(HomeIconSvg, {}) })), child, !isLast && (_jsx(Separator, { "$type": separatorType, "$size": size, "aria-hidden": "true", children: separatorContent }))] }, index));
81
+ })] }) }));
82
+ });
83
+ Breadcrumb.displayName = 'Breadcrumb';