@aurora-ds/components 0.6.8 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/components/actions/button/Button.d.ts +12 -0
  3. package/dist/cjs/components/actions/button/Button.props.d.ts +41 -0
  4. package/dist/cjs/components/actions/button/Button.styles.d.ts +18 -0
  5. package/dist/cjs/components/actions/button/index.d.ts +2 -0
  6. package/dist/cjs/components/actions/icon-button/IconButton.d.ts +4 -0
  7. package/dist/cjs/components/actions/icon-button/IconButton.props.d.ts +37 -0
  8. package/dist/cjs/components/actions/icon-button/IconButton.styles.d.ts +4 -0
  9. package/dist/cjs/components/actions/icon-button/index.d.ts +2 -0
  10. package/dist/cjs/components/data-display/chip/Chip.props.d.ts +10 -0
  11. package/dist/cjs/components/forms/form/Form.d.ts +3 -0
  12. package/dist/cjs/components/forms/form/Form.props.d.ts +9 -0
  13. package/dist/cjs/components/forms/form/Form.styles.d.ts +3 -0
  14. package/dist/cjs/components/forms/form/index.d.ts +2 -0
  15. package/dist/cjs/components/forms/input/Input.d.ts +3 -0
  16. package/dist/cjs/components/forms/input/Input.props.d.ts +32 -0
  17. package/dist/cjs/components/forms/input/Input.styles.d.ts +15 -0
  18. package/dist/cjs/components/forms/input/index.d.ts +2 -0
  19. package/dist/cjs/components/forms/textarea/TextArea.d.ts +3 -0
  20. package/dist/cjs/components/forms/textarea/TextArea.props.d.ts +27 -0
  21. package/dist/cjs/components/forms/textarea/TextArea.styles.d.ts +11 -0
  22. package/dist/cjs/components/forms/textarea/index.d.ts +2 -0
  23. package/dist/cjs/components/foundation/icon/Icon.d.ts +35 -0
  24. package/dist/cjs/components/foundation/icon/Icon.props.d.ts +24 -0
  25. package/dist/cjs/components/foundation/icon/Icon.styles.d.ts +3 -0
  26. package/dist/cjs/components/foundation/icon/index.d.ts +2 -0
  27. package/dist/cjs/components/foundation/text/Text.d.ts +21 -0
  28. package/dist/cjs/components/foundation/text/Text.props.d.ts +38 -0
  29. package/dist/cjs/components/foundation/text/Text.styles.d.ts +4 -0
  30. package/dist/cjs/components/foundation/text/index.d.ts +2 -0
  31. package/dist/cjs/components/index.d.ts +11 -5
  32. package/dist/cjs/components/inputs/input/Input.d.ts +6 -0
  33. package/dist/cjs/components/inputs/input/Input.props.d.ts +17 -0
  34. package/dist/cjs/components/inputs/input/Input.styles.d.ts +7 -0
  35. package/dist/cjs/components/inputs/input/index.d.ts +2 -0
  36. package/dist/cjs/components/layout/card/Card.props.d.ts +10 -0
  37. package/dist/cjs/components/layout/grid/Grid.props.d.ts +10 -0
  38. package/dist/cjs/components/layout/page-construction/page/Page.d.ts +10 -0
  39. package/dist/cjs/components/layout/page-construction/page/Page.props.d.ts +30 -0
  40. package/dist/cjs/components/layout/page-construction/page/Page.styles.d.ts +5 -0
  41. package/dist/cjs/components/layout/page-construction/page/index.d.ts +2 -0
  42. package/dist/cjs/components/layout/page-construction/page-section/PageSection.d.ts +10 -0
  43. package/dist/cjs/components/layout/page-construction/page-section/PageSection.props.d.ts +34 -0
  44. package/dist/cjs/components/layout/page-construction/page-section/PageSection.styles.d.ts +4 -0
  45. package/dist/cjs/components/layout/page-construction/page-section/index.d.ts +2 -0
  46. package/dist/cjs/components/layout/stack/Stack.props.d.ts +10 -0
  47. package/dist/cjs/components/navigation/breadcrumb/Breadcrumb.d.ts +12 -0
  48. package/dist/cjs/components/navigation/breadcrumb/Breadcrumb.props.d.ts +13 -0
  49. package/dist/cjs/components/navigation/breadcrumb/Breadcrumb.styles.d.ts +6 -0
  50. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.d.ts +8 -0
  51. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.props.d.ts +5 -0
  52. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.styles.d.ts +7 -0
  53. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbEllipsis/index.d.ts +2 -0
  54. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbEllipsis.d.ts +9 -0
  55. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbItem/BreadcrumbItem.d.ts +6 -0
  56. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbItem/BreadcrumbItem.styles.d.ts +6 -0
  57. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbItem/index.d.ts +1 -0
  58. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbItem.d.ts +6 -0
  59. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbLink/BreadcrumbLink.d.ts +7 -0
  60. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbLink/BreadcrumbLink.props.d.ts +14 -0
  61. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbLink/BreadcrumbLink.styles.d.ts +7 -0
  62. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbLink/index.d.ts +2 -0
  63. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbLink.d.ts +6 -0
  64. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbList/BreadcrumbList.d.ts +6 -0
  65. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbList/BreadcrumbList.styles.d.ts +6 -0
  66. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbList/index.d.ts +1 -0
  67. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbList.d.ts +6 -0
  68. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbPage/BreadcrumbPage.d.ts +7 -0
  69. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbPage/BreadcrumbPage.props.d.ts +10 -0
  70. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbPage/BreadcrumbPage.styles.d.ts +7 -0
  71. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbPage/index.d.ts +2 -0
  72. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbPage.d.ts +6 -0
  73. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.d.ts +7 -0
  74. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.props.d.ts +5 -0
  75. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.styles.d.ts +6 -0
  76. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbSeparator/index.d.ts +2 -0
  77. package/dist/cjs/components/navigation/breadcrumb/BreadcrumbSeparator.d.ts +9 -0
  78. package/dist/cjs/components/navigation/breadcrumb/index.d.ts +10 -0
  79. package/dist/cjs/components/navigation/drawer-item/DrawerItem.props.d.ts +10 -0
  80. package/dist/cjs/components/overlay/accordion/Accordion.d.ts +10 -0
  81. package/dist/cjs/components/overlay/accordion/Accordion.props.d.ts +52 -0
  82. package/dist/cjs/components/overlay/accordion/Accordion.styles.d.ts +7 -0
  83. package/dist/cjs/components/overlay/accordion/index.d.ts +2 -0
  84. package/dist/cjs/index.js +709 -185
  85. package/dist/cjs/index.js.map +1 -1
  86. package/dist/cjs/interfaces/button.types.d.ts +14 -1
  87. package/dist/cjs/resources/Icons.d.ts +5 -1
  88. package/dist/cjs/resources/icons/ChevronRightIcon.d.ts +1 -0
  89. package/dist/cjs/resources/icons/EyeIcon.d.ts +1 -0
  90. package/dist/cjs/resources/icons/EyeOffIcon.d.ts +1 -0
  91. package/dist/cjs/resources/icons/MoreHorizontalIcon.d.ts +1 -0
  92. package/dist/cjs/utils/ui/components/actions/button/getButtonSizeStyles.utils.d.ts +12 -0
  93. package/dist/cjs/utils/ui/components/actions/button/getButtonVariantStyles.utils.d.ts +7 -0
  94. package/dist/cjs/utils/ui/components/actions/icon-button/getIconButtonSizeStyles.utils.d.ts +9 -0
  95. package/dist/cjs/utils/ui/components/data-display/chip/getChipColorStyles.utils.d.ts +7 -0
  96. package/dist/cjs/utils/ui/components/data-display/chip/getChipContentSize.utils.d.ts +8 -0
  97. package/dist/cjs/utils/ui/components/data-display/chip/getChipSizeStyles.utils.d.ts +12 -0
  98. package/dist/cjs/utils/ui/components/foundation/text/getTextVariantStyles.utils.d.ts +7 -0
  99. package/dist/cjs/utils/ui/components/foundation/text/getTruncateTextStyles.utils.d.ts +17 -0
  100. package/dist/cjs/utils/ui/components/foundation/text/parseTextWithBold.utils.d.ts +7 -0
  101. package/dist/cjs/utils/ui/components/navigation/breadcrumb/buildBreadcrumbChildren.utils.d.ts +5 -0
  102. package/dist/cjs/utils/ui/components/navigation/breadcrumb/flattenChildren.utils.d.ts +5 -0
  103. package/dist/cjs/utils/ui/components/navigation/breadcrumb/insertSeparators.utils.d.ts +5 -0
  104. package/dist/cjs/utils/ui/components/navigation/breadcrumb/isSeparator.utils.d.ts +5 -0
  105. package/dist/esm/components/actions/button/Button.d.ts +12 -0
  106. package/dist/esm/components/actions/button/Button.props.d.ts +41 -0
  107. package/dist/esm/components/actions/button/Button.styles.d.ts +18 -0
  108. package/dist/esm/components/actions/button/index.d.ts +2 -0
  109. package/dist/esm/components/actions/icon-button/IconButton.d.ts +4 -0
  110. package/dist/esm/components/actions/icon-button/IconButton.props.d.ts +37 -0
  111. package/dist/esm/components/actions/icon-button/IconButton.styles.d.ts +4 -0
  112. package/dist/esm/components/actions/icon-button/index.d.ts +2 -0
  113. package/dist/esm/components/data-display/chip/Chip.props.d.ts +10 -0
  114. package/dist/esm/components/forms/form/Form.d.ts +3 -0
  115. package/dist/esm/components/forms/form/Form.props.d.ts +9 -0
  116. package/dist/esm/components/forms/form/Form.styles.d.ts +3 -0
  117. package/dist/esm/components/forms/form/index.d.ts +2 -0
  118. package/dist/esm/components/forms/input/Input.d.ts +3 -0
  119. package/dist/esm/components/forms/input/Input.props.d.ts +32 -0
  120. package/dist/esm/components/forms/input/Input.styles.d.ts +15 -0
  121. package/dist/esm/components/forms/input/index.d.ts +2 -0
  122. package/dist/esm/components/forms/textarea/TextArea.d.ts +3 -0
  123. package/dist/esm/components/forms/textarea/TextArea.props.d.ts +27 -0
  124. package/dist/esm/components/forms/textarea/TextArea.styles.d.ts +11 -0
  125. package/dist/esm/components/forms/textarea/index.d.ts +2 -0
  126. package/dist/esm/components/foundation/icon/Icon.d.ts +35 -0
  127. package/dist/esm/components/foundation/icon/Icon.props.d.ts +24 -0
  128. package/dist/esm/components/foundation/icon/Icon.styles.d.ts +3 -0
  129. package/dist/esm/components/foundation/icon/index.d.ts +2 -0
  130. package/dist/esm/components/foundation/text/Text.d.ts +21 -0
  131. package/dist/esm/components/foundation/text/Text.props.d.ts +38 -0
  132. package/dist/esm/components/foundation/text/Text.styles.d.ts +4 -0
  133. package/dist/esm/components/foundation/text/index.d.ts +2 -0
  134. package/dist/esm/components/index.d.ts +11 -5
  135. package/dist/esm/components/inputs/input/Input.d.ts +6 -0
  136. package/dist/esm/components/inputs/input/Input.props.d.ts +17 -0
  137. package/dist/esm/components/inputs/input/Input.styles.d.ts +7 -0
  138. package/dist/esm/components/inputs/input/index.d.ts +2 -0
  139. package/dist/esm/components/layout/card/Card.props.d.ts +10 -0
  140. package/dist/esm/components/layout/grid/Grid.props.d.ts +10 -0
  141. package/dist/esm/components/layout/page-construction/page/Page.d.ts +10 -0
  142. package/dist/esm/components/layout/page-construction/page/Page.props.d.ts +30 -0
  143. package/dist/esm/components/layout/page-construction/page/Page.styles.d.ts +5 -0
  144. package/dist/esm/components/layout/page-construction/page/index.d.ts +2 -0
  145. package/dist/esm/components/layout/page-construction/page-section/PageSection.d.ts +10 -0
  146. package/dist/esm/components/layout/page-construction/page-section/PageSection.props.d.ts +34 -0
  147. package/dist/esm/components/layout/page-construction/page-section/PageSection.styles.d.ts +4 -0
  148. package/dist/esm/components/layout/page-construction/page-section/index.d.ts +2 -0
  149. package/dist/esm/components/layout/stack/Stack.props.d.ts +10 -0
  150. package/dist/esm/components/navigation/breadcrumb/Breadcrumb.d.ts +12 -0
  151. package/dist/esm/components/navigation/breadcrumb/Breadcrumb.props.d.ts +13 -0
  152. package/dist/esm/components/navigation/breadcrumb/Breadcrumb.styles.d.ts +6 -0
  153. package/dist/esm/components/navigation/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.d.ts +8 -0
  154. package/dist/esm/components/navigation/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.props.d.ts +5 -0
  155. package/dist/esm/components/navigation/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.styles.d.ts +7 -0
  156. package/dist/esm/components/navigation/breadcrumb/BreadcrumbEllipsis/index.d.ts +2 -0
  157. package/dist/esm/components/navigation/breadcrumb/BreadcrumbEllipsis.d.ts +9 -0
  158. package/dist/esm/components/navigation/breadcrumb/BreadcrumbItem/BreadcrumbItem.d.ts +6 -0
  159. package/dist/esm/components/navigation/breadcrumb/BreadcrumbItem/BreadcrumbItem.styles.d.ts +6 -0
  160. package/dist/esm/components/navigation/breadcrumb/BreadcrumbItem/index.d.ts +1 -0
  161. package/dist/esm/components/navigation/breadcrumb/BreadcrumbItem.d.ts +6 -0
  162. package/dist/esm/components/navigation/breadcrumb/BreadcrumbLink/BreadcrumbLink.d.ts +7 -0
  163. package/dist/esm/components/navigation/breadcrumb/BreadcrumbLink/BreadcrumbLink.props.d.ts +14 -0
  164. package/dist/esm/components/navigation/breadcrumb/BreadcrumbLink/BreadcrumbLink.styles.d.ts +7 -0
  165. package/dist/esm/components/navigation/breadcrumb/BreadcrumbLink/index.d.ts +2 -0
  166. package/dist/esm/components/navigation/breadcrumb/BreadcrumbLink.d.ts +6 -0
  167. package/dist/esm/components/navigation/breadcrumb/BreadcrumbList/BreadcrumbList.d.ts +6 -0
  168. package/dist/esm/components/navigation/breadcrumb/BreadcrumbList/BreadcrumbList.styles.d.ts +6 -0
  169. package/dist/esm/components/navigation/breadcrumb/BreadcrumbList/index.d.ts +1 -0
  170. package/dist/esm/components/navigation/breadcrumb/BreadcrumbList.d.ts +6 -0
  171. package/dist/esm/components/navigation/breadcrumb/BreadcrumbPage/BreadcrumbPage.d.ts +7 -0
  172. package/dist/esm/components/navigation/breadcrumb/BreadcrumbPage/BreadcrumbPage.props.d.ts +10 -0
  173. package/dist/esm/components/navigation/breadcrumb/BreadcrumbPage/BreadcrumbPage.styles.d.ts +7 -0
  174. package/dist/esm/components/navigation/breadcrumb/BreadcrumbPage/index.d.ts +2 -0
  175. package/dist/esm/components/navigation/breadcrumb/BreadcrumbPage.d.ts +6 -0
  176. package/dist/esm/components/navigation/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.d.ts +7 -0
  177. package/dist/esm/components/navigation/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.props.d.ts +5 -0
  178. package/dist/esm/components/navigation/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.styles.d.ts +6 -0
  179. package/dist/esm/components/navigation/breadcrumb/BreadcrumbSeparator/index.d.ts +2 -0
  180. package/dist/esm/components/navigation/breadcrumb/BreadcrumbSeparator.d.ts +9 -0
  181. package/dist/esm/components/navigation/breadcrumb/index.d.ts +10 -0
  182. package/dist/esm/components/navigation/drawer-item/DrawerItem.props.d.ts +10 -0
  183. package/dist/esm/components/overlay/accordion/Accordion.d.ts +10 -0
  184. package/dist/esm/components/overlay/accordion/Accordion.props.d.ts +52 -0
  185. package/dist/esm/components/overlay/accordion/Accordion.styles.d.ts +7 -0
  186. package/dist/esm/components/overlay/accordion/index.d.ts +2 -0
  187. package/dist/esm/index.js +701 -187
  188. package/dist/esm/index.js.map +1 -1
  189. package/dist/esm/interfaces/button.types.d.ts +14 -1
  190. package/dist/esm/resources/Icons.d.ts +5 -1
  191. package/dist/esm/resources/icons/ChevronRightIcon.d.ts +1 -0
  192. package/dist/esm/resources/icons/EyeIcon.d.ts +1 -0
  193. package/dist/esm/resources/icons/EyeOffIcon.d.ts +1 -0
  194. package/dist/esm/resources/icons/MoreHorizontalIcon.d.ts +1 -0
  195. package/dist/esm/utils/ui/components/actions/button/getButtonSizeStyles.utils.d.ts +12 -0
  196. package/dist/esm/utils/ui/components/actions/button/getButtonVariantStyles.utils.d.ts +7 -0
  197. package/dist/esm/utils/ui/components/actions/icon-button/getIconButtonSizeStyles.utils.d.ts +9 -0
  198. package/dist/esm/utils/ui/components/data-display/chip/getChipColorStyles.utils.d.ts +7 -0
  199. package/dist/esm/utils/ui/components/data-display/chip/getChipContentSize.utils.d.ts +8 -0
  200. package/dist/esm/utils/ui/components/data-display/chip/getChipSizeStyles.utils.d.ts +12 -0
  201. package/dist/esm/utils/ui/components/foundation/text/getTextVariantStyles.utils.d.ts +7 -0
  202. package/dist/esm/utils/ui/components/foundation/text/getTruncateTextStyles.utils.d.ts +17 -0
  203. package/dist/esm/utils/ui/components/foundation/text/parseTextWithBold.utils.d.ts +7 -0
  204. package/dist/esm/utils/ui/components/navigation/breadcrumb/buildBreadcrumbChildren.utils.d.ts +5 -0
  205. package/dist/esm/utils/ui/components/navigation/breadcrumb/flattenChildren.utils.d.ts +5 -0
  206. package/dist/esm/utils/ui/components/navigation/breadcrumb/insertSeparators.utils.d.ts +5 -0
  207. package/dist/esm/utils/ui/components/navigation/breadcrumb/isSeparator.utils.d.ts +5 -0
  208. package/dist/index.d.ts +379 -45
  209. package/package.json +76 -77
package/dist/cjs/index.js CHANGED
@@ -56,7 +56,7 @@ const ICON_STYLES = theme.createStyles((theme) => ({
56
56
  * </Icon>
57
57
  * ```
58
58
  */
59
- const Icon = ({ children, size, color, backgroundColor, padding, borderRadius, }) => {
59
+ const Icon = ({ children, size, color, backgroundColor, padding, borderRadius, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
60
60
  // Clone child element to apply width and height
61
61
  const child = react.Children.only(children);
62
62
  const styledChild = react.isValidElement(child)
@@ -65,158 +65,10 @@ const Icon = ({ children, size, color, backgroundColor, padding, borderRadius, }
65
65
  height: '100%',
66
66
  })
67
67
  : child;
68
- return (jsxRuntime.jsx("div", { className: ICON_STYLES.root(size, color, backgroundColor, padding, borderRadius), children: styledChild }));
68
+ return (jsxRuntime.jsx("div", { className: ICON_STYLES.root(size, color, backgroundColor, padding, borderRadius), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: styledChild }));
69
69
  };
70
70
  Icon.displayName = 'Icon';
71
71
 
72
- const getChipColorStyles = (theme, color, variant, disabled) => {
73
- if (disabled) {
74
- return {
75
- filled: {
76
- backgroundColor: theme.colors.disabled,
77
- color: theme.colors.disabledText,
78
- borderColor: 'transparent',
79
- },
80
- outlined: {
81
- backgroundColor: 'transparent',
82
- color: theme.colors.disabledText,
83
- borderColor: theme.colors.disabled,
84
- },
85
- }[variant];
86
- }
87
- const colorMap = {
88
- default: {
89
- filled: {
90
- backgroundColor: theme.colors.surfaceHover,
91
- color: theme.colors.text,
92
- borderColor: 'transparent',
93
- },
94
- outlined: {
95
- backgroundColor: 'transparent',
96
- color: theme.colors.text,
97
- borderColor: theme.colors.border,
98
- },
99
- },
100
- primary: {
101
- filled: {
102
- backgroundColor: theme.colors.primary,
103
- color: theme.colors.onPrimary,
104
- borderColor: 'transparent',
105
- },
106
- outlined: {
107
- backgroundColor: 'transparent',
108
- color: theme.colors.primary,
109
- borderColor: theme.colors.primary,
110
- },
111
- },
112
- success: {
113
- filled: {
114
- backgroundColor: theme.colors.successSubtle,
115
- color: theme.colors.success,
116
- borderColor: 'transparent',
117
- },
118
- outlined: {
119
- backgroundColor: theme.colors.successSubtle,
120
- color: theme.colors.success,
121
- borderColor: theme.colors.success,
122
- },
123
- },
124
- warning: {
125
- filled: {
126
- backgroundColor: theme.colors.warningSubtle,
127
- color: theme.colors.warning,
128
- borderColor: 'transparent',
129
- },
130
- outlined: {
131
- backgroundColor: theme.colors.warningSubtle,
132
- color: theme.colors.warning,
133
- borderColor: theme.colors.warning,
134
- },
135
- },
136
- error: {
137
- filled: {
138
- backgroundColor: theme.colors.errorSubtle,
139
- color: theme.colors.error,
140
- borderColor: 'transparent',
141
- },
142
- outlined: {
143
- backgroundColor: theme.colors.errorSubtle,
144
- color: theme.colors.error,
145
- borderColor: theme.colors.error,
146
- },
147
- },
148
- info: {
149
- filled: {
150
- backgroundColor: theme.colors.infoSubtle,
151
- color: theme.colors.info,
152
- borderColor: 'transparent',
153
- },
154
- outlined: {
155
- backgroundColor: theme.colors.infoSubtle,
156
- color: theme.colors.info,
157
- borderColor: theme.colors.info,
158
- },
159
- },
160
- };
161
- return colorMap[color][variant];
162
- };
163
-
164
- /**
165
- * Get chip size styles based on the theme, size and icon-only state
166
- * @param theme - Theme object
167
- * @param size - Chip size
168
- * @param isIconOnly - Whether the chip has only an icon (no label)
169
- */
170
- const getChipSizeStyles = (theme, size, isIconOnly) => {
171
- const sizeMap = {
172
- '2xs': {
173
- iconOnly: { padding: theme.spacing.xs, fontSize: theme.fontSize['2xs'] },
174
- withLabel: { padding: `${theme.spacing.xs} ${theme.spacing.sm}`, fontSize: theme.fontSize['2xs'] },
175
- },
176
- xs: {
177
- iconOnly: { padding: theme.spacing.xs, fontSize: theme.fontSize.xs },
178
- withLabel: { padding: `${theme.spacing.xs} ${theme.spacing.sm}`, fontSize: theme.fontSize.xs },
179
- },
180
- sm: {
181
- iconOnly: { padding: theme.spacing.xs, fontSize: theme.fontSize.sm },
182
- withLabel: { padding: `${theme.spacing.xs} ${theme.spacing.sm}`, fontSize: theme.fontSize.sm },
183
- },
184
- md: {
185
- iconOnly: { padding: theme.spacing.sm, fontSize: theme.fontSize.md },
186
- withLabel: { padding: `${theme.spacing.sm} ${theme.spacing.md}`, fontSize: theme.fontSize.sm },
187
- },
188
- lg: {
189
- iconOnly: { padding: theme.spacing.md, fontSize: theme.fontSize.lg },
190
- withLabel: { padding: `${theme.spacing.sm} ${theme.spacing.lg}`, fontSize: theme.fontSize.md },
191
- },
192
- };
193
- return isIconOnly ? sizeMap[size].iconOnly : sizeMap[size].withLabel;
194
- };
195
-
196
- const CHIP_STYLES = theme.createStyles((theme) => ({
197
- root: ({ variant, color, size, isIconOnly, disabled, gap, radius }) => {
198
- const colorStyles = getChipColorStyles(theme, color, variant, disabled);
199
- const sizeStyles = getChipSizeStyles(theme, size, isIconOnly);
200
- return {
201
- display: 'flex',
202
- alignItems: 'center',
203
- justifyContent: 'center',
204
- gap: gap ? theme.spacing[gap] : theme.spacing.sm,
205
- borderRadius: radius ? theme.radius[radius] : theme.radius.md,
206
- border: variant === 'outlined' ? '1px solid' : 'none',
207
- aspectRatio: isIconOnly ? 1 : undefined,
208
- height: 'fit-content',
209
- width: 'fit-content',
210
- fontFamily: 'inherit',
211
- fontWeight: theme.fontWeight.medium,
212
- whiteSpace: 'nowrap',
213
- boxSizing: 'border-box',
214
- ...sizeStyles,
215
- ...colorStyles,
216
- };
217
- },
218
- }));
219
-
220
72
  /**
221
73
  * Get text variant styles based on the theme
222
74
  * @param theme
@@ -260,7 +112,7 @@ const getTextVariantStyles = (theme) => ({
260
112
  },
261
113
  p: {
262
114
  tag: 'p',
263
- fontSize: theme.fontSize.sm,
115
+ fontSize: theme.fontSize.md,
264
116
  fontWeight: theme.fontWeight.regular,
265
117
  lineHeight: theme.lineHeight.relaxed,
266
118
  },
@@ -272,7 +124,7 @@ const getTextVariantStyles = (theme) => ({
272
124
  },
273
125
  label: {
274
126
  tag: 'label',
275
- fontSize: theme.fontSize.sm,
127
+ fontSize: theme.fontSize.md,
276
128
  fontWeight: theme.fontWeight.medium,
277
129
  lineHeight: theme.lineHeight.normal,
278
130
  },
@@ -360,15 +212,170 @@ const parseTextWithBold = (children) => {
360
212
  * - Preserve whitespace with `preserveWhitespace` prop
361
213
  * - Bold text with **double asterisks** syntax
362
214
  */
363
- const Text = ({ children, variant = 'span', color, fontSize, fontFamily, maxLines, underline, preserveWhitespace, }) => {
215
+ const Text = ({ children, variant = 'span', color, fontSize, fontFamily, maxLines, underline, preserveWhitespace, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
364
216
  const theme$1 = theme.useTheme();
365
217
  const variantStyles = react.useMemo(() => getTextVariantStyles(theme$1), [theme$1]);
366
218
  const tag = variantStyles[variant].tag;
367
219
  const parsedChildren = react.useMemo(() => parseTextWithBold(children), [children]);
368
- return react.createElement(tag, { className: TEXT_STYLES.root({ variant, color, fontSize, fontFamily, maxLines, underline, preserveWhitespace }) }, parsedChildren);
220
+ return react.createElement(tag, {
221
+ className: TEXT_STYLES.root({ variant, color, fontSize, fontFamily, maxLines, underline, preserveWhitespace }),
222
+ 'aria-label': ariaLabel,
223
+ 'aria-labelledby': ariaLabelledBy,
224
+ 'aria-describedby': ariaDescribedBy,
225
+ role,
226
+ tabIndex,
227
+ }, parsedChildren);
369
228
  };
370
229
  Text.displayName = 'Text';
371
230
 
231
+ const getChipColorStyles = (theme, color, variant, disabled) => {
232
+ if (disabled) {
233
+ return {
234
+ filled: {
235
+ backgroundColor: theme.colors.disabled,
236
+ color: theme.colors.disabledText,
237
+ borderColor: 'transparent',
238
+ },
239
+ outlined: {
240
+ backgroundColor: 'transparent',
241
+ color: theme.colors.disabledText,
242
+ borderColor: theme.colors.disabled,
243
+ },
244
+ }[variant];
245
+ }
246
+ const colorMap = {
247
+ default: {
248
+ filled: {
249
+ backgroundColor: theme.colors.surfaceHover,
250
+ color: theme.colors.text,
251
+ borderColor: 'transparent',
252
+ },
253
+ outlined: {
254
+ backgroundColor: 'transparent',
255
+ color: theme.colors.text,
256
+ borderColor: theme.colors.border,
257
+ },
258
+ },
259
+ primary: {
260
+ filled: {
261
+ backgroundColor: theme.colors.primary,
262
+ color: theme.colors.onPrimary,
263
+ borderColor: 'transparent',
264
+ },
265
+ outlined: {
266
+ backgroundColor: 'transparent',
267
+ color: theme.colors.primary,
268
+ borderColor: theme.colors.primary,
269
+ },
270
+ },
271
+ success: {
272
+ filled: {
273
+ backgroundColor: theme.colors.successSubtle,
274
+ color: theme.colors.success,
275
+ borderColor: 'transparent',
276
+ },
277
+ outlined: {
278
+ backgroundColor: theme.colors.successSubtle,
279
+ color: theme.colors.success,
280
+ borderColor: theme.colors.success,
281
+ },
282
+ },
283
+ warning: {
284
+ filled: {
285
+ backgroundColor: theme.colors.warningSubtle,
286
+ color: theme.colors.warning,
287
+ borderColor: 'transparent',
288
+ },
289
+ outlined: {
290
+ backgroundColor: theme.colors.warningSubtle,
291
+ color: theme.colors.warning,
292
+ borderColor: theme.colors.warning,
293
+ },
294
+ },
295
+ error: {
296
+ filled: {
297
+ backgroundColor: theme.colors.errorSubtle,
298
+ color: theme.colors.error,
299
+ borderColor: 'transparent',
300
+ },
301
+ outlined: {
302
+ backgroundColor: theme.colors.errorSubtle,
303
+ color: theme.colors.error,
304
+ borderColor: theme.colors.error,
305
+ },
306
+ },
307
+ info: {
308
+ filled: {
309
+ backgroundColor: theme.colors.infoSubtle,
310
+ color: theme.colors.info,
311
+ borderColor: 'transparent',
312
+ },
313
+ outlined: {
314
+ backgroundColor: theme.colors.infoSubtle,
315
+ color: theme.colors.info,
316
+ borderColor: theme.colors.info,
317
+ },
318
+ },
319
+ };
320
+ return colorMap[color][variant];
321
+ };
322
+
323
+ /**
324
+ * Get chip size styles based on the theme, size and icon-only state
325
+ * @param theme - Theme object
326
+ * @param size - Chip size
327
+ * @param isIconOnly - Whether the chip has only an icon (no label)
328
+ */
329
+ const getChipSizeStyles = (theme, size, isIconOnly) => {
330
+ const sizeMap = {
331
+ '2xs': {
332
+ iconOnly: { padding: theme.spacing.xs, fontSize: theme.fontSize['2xs'] },
333
+ withLabel: { padding: `${theme.spacing.xs} ${theme.spacing.sm}`, fontSize: theme.fontSize['2xs'] },
334
+ },
335
+ xs: {
336
+ iconOnly: { padding: theme.spacing.xs, fontSize: theme.fontSize.xs },
337
+ withLabel: { padding: `${theme.spacing.xs} ${theme.spacing.sm}`, fontSize: theme.fontSize.xs },
338
+ },
339
+ sm: {
340
+ iconOnly: { padding: theme.spacing.xs, fontSize: theme.fontSize.sm },
341
+ withLabel: { padding: `${theme.spacing.xs} ${theme.spacing.sm}`, fontSize: theme.fontSize.sm },
342
+ },
343
+ md: {
344
+ iconOnly: { padding: theme.spacing.sm, fontSize: theme.fontSize.md },
345
+ withLabel: { padding: `${theme.spacing.sm} ${theme.spacing.md}`, fontSize: theme.fontSize.sm },
346
+ },
347
+ lg: {
348
+ iconOnly: { padding: theme.spacing.md, fontSize: theme.fontSize.lg },
349
+ withLabel: { padding: `${theme.spacing.sm} ${theme.spacing.lg}`, fontSize: theme.fontSize.md },
350
+ },
351
+ };
352
+ return isIconOnly ? sizeMap[size].iconOnly : sizeMap[size].withLabel;
353
+ };
354
+
355
+ const CHIP_STYLES = theme.createStyles((theme) => ({
356
+ root: ({ variant, color, size, isIconOnly, disabled, gap, radius }) => {
357
+ const colorStyles = getChipColorStyles(theme, color, variant, disabled);
358
+ const sizeStyles = getChipSizeStyles(theme, size, isIconOnly);
359
+ return {
360
+ display: 'flex',
361
+ alignItems: 'center',
362
+ justifyContent: 'center',
363
+ gap: gap ? theme.spacing[gap] : theme.spacing.sm,
364
+ borderRadius: radius ? theme.radius[radius] : theme.radius.md,
365
+ border: variant === 'outlined' ? '1px solid' : 'none',
366
+ aspectRatio: isIconOnly ? 1 : undefined,
367
+ height: 'fit-content',
368
+ width: 'fit-content',
369
+ fontFamily: 'inherit',
370
+ fontWeight: theme.fontWeight.medium,
371
+ whiteSpace: 'nowrap',
372
+ boxSizing: 'border-box',
373
+ ...sizeStyles,
374
+ ...colorStyles,
375
+ };
376
+ },
377
+ }));
378
+
372
379
  /**
373
380
  * Get chip content size based on the chip size
374
381
  * @param size
@@ -397,7 +404,7 @@ const getChipContentSize = (size) => {
397
404
  * **Colors:**
398
405
  * - `default`, `primary`, `success`, `warning`, `error`, `info`
399
406
  */
400
- const Chip = ({ label, icon, variant = 'filled', color = 'default', size = 'md', gap, radius, disabled = false, }) => {
407
+ const Chip = ({ label, icon, variant = 'filled', color = 'default', size = 'md', gap, radius, disabled = false, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
401
408
  const isIconOnly = Boolean(icon) && !label;
402
409
  return (jsxRuntime.jsxs("span", { className: CHIP_STYLES.root({
403
410
  variant,
@@ -407,13 +414,40 @@ const Chip = ({ label, icon, variant = 'filled', color = 'default', size = 'md',
407
414
  disabled,
408
415
  gap,
409
416
  radius,
410
- }), children: [icon && (jsxRuntime.jsx(Icon, { size: getChipContentSize(size), children: icon })), label && (jsxRuntime.jsx(Text, { variant: 'label', fontSize: getChipContentSize(size), children: label }))] }));
417
+ }), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: [icon && (jsxRuntime.jsx(Icon, { size: getChipContentSize(size), children: icon })), label && (jsxRuntime.jsx(Text, { variant: 'label', fontSize: getChipContentSize(size), children: label }))] }));
411
418
  };
412
419
  Chip.displayName = 'Chip';
413
420
 
414
421
  const BUTTON_SIZE = 36;
415
422
  const DRAWER_ITEM_HEIGHT = 32;
416
423
 
424
+ const getButtonSizeStyles = () => ({
425
+ small: {
426
+ height: BUTTON_SIZE - 8,
427
+ padding: {
428
+ vertical: 'xs',
429
+ horizontal: 'sm'
430
+ },
431
+ fontSize: 'sm'
432
+ },
433
+ medium: {
434
+ height: BUTTON_SIZE,
435
+ padding: {
436
+ vertical: 'sm',
437
+ horizontal: 'md'
438
+ },
439
+ fontSize: 'md'
440
+ },
441
+ large: {
442
+ height: BUTTON_SIZE + 8,
443
+ padding: {
444
+ vertical: 'sm',
445
+ horizontal: 'lg'
446
+ },
447
+ fontSize: 'lg'
448
+ }
449
+ });
450
+
417
451
  /**
418
452
  * Get button variant styles based on the theme
419
453
  * @param theme
@@ -431,6 +465,7 @@ const getButtonVariantStyles = (theme$1) => {
431
465
  const baseDisabled = {
432
466
  color: theme$1.colors.disabledText,
433
467
  cursor: 'not-allowed',
468
+ opacity: theme$1.opacity.high
434
469
  };
435
470
  return {
436
471
  contained: {
@@ -459,6 +494,24 @@ const getButtonVariantStyles = (theme$1) => {
459
494
  disabled: { ...baseDisabled, backgroundColor: 'transparent' },
460
495
  textColor: 'primary',
461
496
  },
497
+ destructive: {
498
+ default: {
499
+ backgroundColor: theme$1.colors.error,
500
+ color: theme$1.colors.onError,
501
+ border: 'none',
502
+ },
503
+ hover: { backgroundColor: theme$1.colors.errorHover },
504
+ pressed: { backgroundColor: theme$1.colors.error },
505
+ disabled: { ...baseDisabled, backgroundColor: theme$1.colors.disabled },
506
+ textColor: 'onError',
507
+ },
508
+ link: {
509
+ default: { ...transparentBase, border: 'none', textDecoration: 'underline', textDecorationColor: 'transparent', textUnderlineOffset: '3px' },
510
+ hover: { backgroundColor: 'transparent', textDecorationColor: 'currentColor' },
511
+ pressed: { backgroundColor: 'transparent', textDecorationColor: 'currentColor', color: theme$1.colors.linkActive },
512
+ disabled: { ...baseDisabled, backgroundColor: 'transparent', textDecoration: 'none' },
513
+ textColor: 'link',
514
+ },
462
515
  };
463
516
  };
464
517
 
@@ -478,8 +531,10 @@ const getButtonVariantStyles = (theme$1) => {
478
531
  */
479
532
  const BUTTON_STYLES = theme.createStyles((theme) => {
480
533
  const variantStyles = getButtonVariantStyles(theme);
534
+ const sizeStyles = getButtonSizeStyles();
481
535
  return {
482
- root: ({ variant = 'contained', active = false, textColor }) => {
536
+ root: ({ variant = 'contained', active = false, textColor, size = 'medium' }) => {
537
+ const sizeConfig = sizeStyles[size];
483
538
  const overrides = textColor ? {
484
539
  ...(variant !== 'contained' && { color: theme.colors[textColor] }),
485
540
  ...(variant === 'outlined' && { border: `1px solid ${theme.colors[textColor]}` }),
@@ -490,12 +545,12 @@ const BUTTON_STYLES = theme.createStyles((theme) => {
490
545
  justifyContent: 'center',
491
546
  boxSizing: 'border-box',
492
547
  gap: theme.spacing.sm,
493
- padding: `${theme.spacing.sm} ${theme.spacing.md}`,
548
+ padding: `${theme.spacing[sizeConfig.padding.vertical]} ${theme.spacing[sizeConfig.padding.horizontal]}`,
494
549
  borderRadius: theme.radius.md,
495
550
  cursor: 'pointer',
496
- transition: `background-color ${theme.transition.fast}, color ${theme.transition.fast}`,
497
- minHeight: BUTTON_SIZE,
498
- maxHeight: BUTTON_SIZE,
551
+ transition: `background-color ${theme.transition.fast}, color ${theme.transition.fast}, text-decoration-color ${theme.transition.fast}`,
552
+ minHeight: sizeConfig.height,
553
+ maxHeight: sizeConfig.height,
499
554
  fontFamily: 'inherit',
500
555
  ...variantStyles[variant].default,
501
556
  ...(active && variantStyles[variant].pressed),
@@ -516,11 +571,12 @@ const BUTTON_STYLES = theme.createStyles((theme) => {
516
571
  * - `outlined`: Border only button
517
572
  * - `text`: Text only button without background
518
573
  */
519
- const Button = ({ label, startIcon, endIcon, variant = 'contained', active = false, onClick, disabled, type = 'button', textColor: customTextColor, }) => {
574
+ const Button = ({ label, startIcon, endIcon, variant = 'contained', active = false, onClick, disabled, type = 'button', textColor: customTextColor, size = 'medium', ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
520
575
  const theme$1 = theme.useTheme();
521
576
  const variantStyles = getButtonVariantStyles(theme$1);
577
+ const sizeStyles = getButtonSizeStyles();
522
578
  const textColor = disabled ? 'disabledText' : (customTextColor ?? variantStyles[variant].textColor);
523
- return (jsxRuntime.jsxs("button", { onClick: onClick, disabled: disabled, type: type, className: BUTTON_STYLES.root({ variant, active, textColor: customTextColor }), children: [startIcon && (jsxRuntime.jsx(Icon, { color: textColor, children: startIcon })), jsxRuntime.jsx(Text, { variant: 'label', color: textColor, children: label }), endIcon && (jsxRuntime.jsx(Icon, { color: textColor, children: endIcon }))] }));
579
+ return (jsxRuntime.jsxs("button", { onClick: onClick, disabled: disabled, type: type, className: BUTTON_STYLES.root({ variant, active, textColor: customTextColor, size }), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: [startIcon && (jsxRuntime.jsx(Icon, { color: textColor, children: startIcon })), jsxRuntime.jsx(Text, { variant: 'label', color: textColor, fontSize: sizeStyles[size].fontSize, children: label }), endIcon && (jsxRuntime.jsx(Icon, { color: textColor, children: endIcon }))] }));
524
580
  };
525
581
  Button.displayName = 'Button';
526
582
 
@@ -578,15 +634,109 @@ const ICON_BUTTON_STYLES = theme.createStyles((theme) => {
578
634
  };
579
635
  });
580
636
 
581
- const IconButton = ({ icon, variant = 'contained', active = false, type = 'button', onClick, disabled, textColor: customTextColor, size = 'medium' }) => {
637
+ const IconButton = ({ icon, variant = 'contained', active = false, type = 'button', onClick, disabled, textColor: customTextColor, size = 'medium', ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
582
638
  const theme$1 = theme.useTheme();
583
639
  const variantStyles = getButtonVariantStyles(theme$1);
584
640
  const textColor = disabled ? 'disabledText' : (customTextColor ?? variantStyles[variant].textColor);
585
641
  const iconSize = getIconButtonSizeStyles()[size].iconSize;
586
- return (jsxRuntime.jsx("button", { onClick: onClick, disabled: disabled, type: type, className: ICON_BUTTON_STYLES.root({ variant, active, size, textColor: customTextColor }), children: jsxRuntime.jsx(Icon, { color: textColor, size: iconSize, children: icon }) }));
642
+ return (jsxRuntime.jsx("button", { onClick: onClick, disabled: disabled, type: type, className: ICON_BUTTON_STYLES.root({ variant, active, size, textColor: customTextColor }), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: jsxRuntime.jsx(Icon, { color: textColor, size: iconSize, children: icon }) }));
587
643
  };
588
644
  IconButton.displayName = 'IconButton';
589
645
 
646
+ const FORM_STYLES = theme.createStyles(() => ({
647
+ root: {
648
+ display: 'contents',
649
+ },
650
+ }));
651
+
652
+ /**
653
+ * Form component - A transparent wrapper for form elements with automatic preventDefault handling
654
+ */
655
+ const Form = ({ children, onSubmit, ariaLabel, }) => {
656
+ const handleSubmit = react.useCallback((e) => {
657
+ e.preventDefault();
658
+ onSubmit?.(e);
659
+ }, [onSubmit]);
660
+ return (jsxRuntime.jsx("form", { onSubmit: handleSubmit, className: FORM_STYLES.root, "aria-label": ariaLabel, children: children }));
661
+ };
662
+ Form.displayName = 'Form';
663
+ var Form_default = react.memo(Form);
664
+
665
+ /**
666
+ * Input styles using createStyles from @aurora-ds/theme
667
+ */
668
+ const INPUT_STYLES = theme.createStyles((theme) => ({
669
+ container: ({ width }) => ({
670
+ position: 'relative',
671
+ display: 'block',
672
+ width: width ?? '100%',
673
+ '&:hover:not(.disabled) input': {
674
+ borderColor: theme.colors.primaryHover,
675
+ },
676
+ }),
677
+ startIcon: {
678
+ position: 'absolute',
679
+ left: theme.spacing.md,
680
+ top: '50%',
681
+ transform: 'translateY(-50%)',
682
+ pointerEvents: 'none',
683
+ },
684
+ endIcon: {
685
+ position: 'absolute',
686
+ right: theme.spacing.md,
687
+ top: '50%',
688
+ transform: 'translateY(-50%)',
689
+ zIndex: 1,
690
+ },
691
+ endIconShifted: {
692
+ position: 'absolute',
693
+ right: `calc(${theme.spacing.md} + 1.5rem)`,
694
+ top: '50%',
695
+ transform: 'translateY(-50%)',
696
+ zIndex: 1,
697
+ },
698
+ passwordToggle: {
699
+ position: 'absolute',
700
+ right: theme.spacing.sm,
701
+ top: '50%',
702
+ transform: 'translateY(-50%)',
703
+ zIndex: 2,
704
+ },
705
+ root: ({ disabled = false, hasStartIcon = false, hasEndIcon = false, hasPasswordToggle = false }) => ({
706
+ boxSizing: 'border-box',
707
+ width: '100%',
708
+ padding: `${theme.spacing.sm} ${theme.spacing.md}`,
709
+ paddingLeft: hasStartIcon ? `calc(${theme.spacing.md} + 1.5rem)` : theme.spacing.md,
710
+ paddingRight: `calc(${theme.spacing.md} + ${hasEndIcon ? '1.5rem' : '0px'} + ${hasPasswordToggle ? '1.5rem' : '0px'})`,
711
+ border: `1px solid ${theme.colors.border}`,
712
+ borderRadius: theme.radius.md,
713
+ fontSize: theme.fontSize.md,
714
+ fontFamily: 'inherit',
715
+ backgroundColor: theme.colors.surface,
716
+ color: theme.colors.text,
717
+ transition: `border-color ${theme.transition.fast}`,
718
+ outline: 'none',
719
+ minHeight: BUTTON_SIZE,
720
+ maxHeight: BUTTON_SIZE,
721
+ lineHeight: theme.lineHeight.none,
722
+ textOverflow: 'ellipsis',
723
+ overflow: 'hidden',
724
+ whiteSpace: 'nowrap',
725
+ ':focus': {
726
+ borderColor: theme.colors.primary,
727
+ },
728
+ '::placeholder': {
729
+ color: theme.colors.textTertiary,
730
+ fontSize: theme.fontSize.md,
731
+ },
732
+ ...(disabled && {
733
+ color: theme.colors.disabledText,
734
+ cursor: 'not-allowed',
735
+ opacity: theme.opacity.high
736
+ }),
737
+ }),
738
+ }));
739
+
590
740
  /**
591
741
  * Stack styles using createStyles from @aurora-ds/theme
592
742
  */
@@ -613,7 +763,7 @@ const STACK_STYLES = theme.createStyles((theme) => ({
613
763
  * - `row`: Horizontal layout (default)
614
764
  * - `column`: Vertical layout
615
765
  */
616
- const Stack = ({ children, direction = 'row', gap = 'sm', width, height, align = 'center', justify, wrap, padding, }) => {
766
+ const Stack = ({ children, direction = 'row', gap = 'sm', width, height, align = 'center', justify, wrap, padding, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
617
767
  return (jsxRuntime.jsx("div", { className: STACK_STYLES.root({
618
768
  direction,
619
769
  gap,
@@ -623,10 +773,123 @@ const Stack = ({ children, direction = 'row', gap = 'sm', width, height, align =
623
773
  justify,
624
774
  wrap,
625
775
  padding,
626
- }), children: children }));
776
+ }), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: children }));
627
777
  };
628
778
  Stack.displayName = 'Stack';
629
779
 
780
+ const ChevronDownIcon = () => {
781
+ return (jsxRuntime.jsx("svg", { xmlns: 'http://www.w3.org/2000/svg', width: '100%', height: '100%', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', "stroke-width": '2', "stroke-linecap": 'round', "stroke-linejoin": 'round', className: 'lucide lucide-chevron-down-icon lucide-chevron-down', children: jsxRuntime.jsx("path", { d: 'm6 9 6 6 6-6' }) }));
782
+ };
783
+
784
+ const ChevronRightIcon = () => {
785
+ return (jsxRuntime.jsx("svg", { xmlns: 'http://www.w3.org/2000/svg', width: '24', height: '24', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', "stroke-width": '2', "stroke-linecap": 'round', "stroke-linejoin": 'round', className: 'lucide lucide-chevron-right-icon lucide-chevron-right', children: jsxRuntime.jsx("path", { d: 'm9 18 6-6-6-6' }) }));
786
+ };
787
+
788
+ const EyeIcon = () => {
789
+ return (jsxRuntime.jsxs("svg", { xmlns: 'http://www.w3.org/2000/svg', width: '24', height: '24', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', "stroke-width": '2', "stroke-linecap": 'round', "stroke-linejoin": 'round', className: 'lucide lucide-eye-icon lucide-eye', children: [jsxRuntime.jsx("path", { d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0' }), jsxRuntime.jsx("circle", { cx: '12', cy: '12', r: '3' })] }));
790
+ };
791
+
792
+ const EyeOffIcon = () => {
793
+ return (jsxRuntime.jsxs("svg", { xmlns: 'http://www.w3.org/2000/svg', width: '24', height: '24', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', "stroke-width": '2', "stroke-linecap": 'round', "stroke-linejoin": 'round', className: 'lucide lucide-eye-off-icon lucide-eye-off', children: [jsxRuntime.jsx("path", { d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49' }), jsxRuntime.jsx("path", { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242' }), jsxRuntime.jsx("path", { d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143' }), jsxRuntime.jsx("path", { d: 'm2 2 20 20' })] }));
794
+ };
795
+
796
+ const MoreHorizontalIcon = () => {
797
+ return (jsxRuntime.jsxs("svg", { xmlns: 'http://www.w3.org/2000/svg', width: '24', height: '24', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', "stroke-width": '2', "stroke-linecap": 'round', "stroke-linejoin": 'round', className: 'lucide lucide-ellipsis-icon lucide-ellipsis', children: [jsxRuntime.jsx("circle", { cx: '12', cy: '12', r: '1' }), jsxRuntime.jsx("circle", { cx: '19', cy: '12', r: '1' }), jsxRuntime.jsx("circle", { cx: '5', cy: '12', r: '1' })] }));
798
+ };
799
+
800
+ /**
801
+ * Input component
802
+ */
803
+ const Input = react.forwardRef(({ value, onChange, label, mandatory = false, placeholder, disabled = false, type = 'text', ariaLabel, startIcon, endIcon, width, }, ref) => {
804
+ const [showPassword, setShowPassword] = react.useState(false);
805
+ const handleChange = (event) => {
806
+ onChange(event.target.value);
807
+ };
808
+ const inputType = type === 'password' ? (showPassword ? 'text' : 'password') : type;
809
+ const hasPasswordToggle = type === 'password';
810
+ return (jsxRuntime.jsxs(Stack, { direction: 'column', gap: 'xs', align: 'stretch', width: width ?? '100%', children: [label && (jsxRuntime.jsxs(Stack, { direction: 'row', gap: 'xs', align: 'center', children: [jsxRuntime.jsx(Text, { variant: 'label', fontSize: 'sm', children: label }), mandatory && (jsxRuntime.jsx(Text, { variant: 'label', fontSize: 'sm', color: 'error', children: "*" }))] })), jsxRuntime.jsxs("div", { className: `${INPUT_STYLES.container({ width })} ${disabled ? 'disabled' : ''}`, children: [jsxRuntime.jsx("input", { ref: ref, type: inputType, value: value, onChange: handleChange, placeholder: placeholder, disabled: disabled, className: INPUT_STYLES.root({ disabled, hasStartIcon: !!startIcon, hasEndIcon: !!endIcon, hasPasswordToggle }), "aria-label": ariaLabel || label }), startIcon && (jsxRuntime.jsx("div", { className: INPUT_STYLES.startIcon, children: jsxRuntime.jsx(Icon, { color: 'textTertiary', children: startIcon }) })), endIcon && (jsxRuntime.jsx("div", { className: hasPasswordToggle ? INPUT_STYLES.endIconShifted : INPUT_STYLES.endIcon, children: jsxRuntime.jsx(Icon, { color: 'textTertiary', children: endIcon }) })), hasPasswordToggle && (jsxRuntime.jsx("div", { className: INPUT_STYLES.passwordToggle, children: jsxRuntime.jsx(IconButton, { icon: showPassword ? jsxRuntime.jsx(EyeOffIcon, {}) : jsxRuntime.jsx(EyeIcon, {}), onClick: () => setShowPassword(!showPassword), disabled: disabled, ariaLabel: ariaLabel || label, variant: 'text', size: 'small', textColor: 'textSecondary' }) }))] })] }));
811
+ });
812
+ Input.displayName = 'Input';
813
+ var Input_default = react.memo(Input);
814
+
815
+ /**
816
+ * TextArea styles using createStyles from @aurora-ds/theme
817
+ */
818
+ const TEXTAREA_STYLES = theme.createStyles((theme) => ({
819
+ container: ({ width }) => ({
820
+ position: 'relative',
821
+ display: 'inline-block',
822
+ width: width ?? '100%',
823
+ '&:hover:not(.disabled) textarea': {
824
+ borderColor: theme.colors.primaryHover,
825
+ },
826
+ }),
827
+ root: ({ disabled = false }) => ({
828
+ boxSizing: 'border-box',
829
+ width: '100%',
830
+ padding: `${theme.spacing.sm} ${theme.spacing.md}`,
831
+ border: `1px solid ${theme.colors.border}`,
832
+ borderRadius: theme.radius.md,
833
+ fontSize: theme.fontSize.md,
834
+ fontFamily: 'inherit',
835
+ backgroundColor: theme.colors.surface,
836
+ color: theme.colors.text,
837
+ transition: `border-color ${theme.transition.fast}`,
838
+ outline: 'none',
839
+ lineHeight: theme.lineHeight.normal,
840
+ resize: 'none',
841
+ overflow: 'hidden',
842
+ ':focus': {
843
+ borderColor: theme.colors.primary,
844
+ },
845
+ '::placeholder': {
846
+ color: theme.colors.textTertiary,
847
+ fontSize: theme.fontSize.md,
848
+ textOverflow: 'ellipsis',
849
+ overflow: 'hidden',
850
+ whiteSpace: 'nowrap',
851
+ },
852
+ ...(disabled && {
853
+ color: theme.colors.disabledText,
854
+ cursor: 'not-allowed',
855
+ opacity: theme.opacity.high
856
+ }),
857
+ }),
858
+ }));
859
+
860
+ /**
861
+ * TextArea component with auto-expanding height based on content
862
+ */
863
+ const TextArea = react.forwardRef(({ value, onChange, label, mandatory = false, placeholder, disabled = false, ariaLabel, width, minRows = 3, maxRows, }, ref) => {
864
+ const internalRef = react.useRef(null);
865
+ const textareaRef = ref || internalRef;
866
+ const adjustHeight = react.useCallback(() => {
867
+ const textarea = textareaRef.current;
868
+ if (textarea) {
869
+ // Reset height to calculate the correct scrollHeight
870
+ textarea.style.height = 'auto';
871
+ // Set minHeight based on minRows
872
+ const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20;
873
+ const minHeight = lineHeight * minRows;
874
+ const maxHeight = maxRows ? lineHeight * maxRows : Infinity;
875
+ // Set the height to the greater of minHeight or scrollHeight, but capped at maxHeight
876
+ const newHeight = Math.min(Math.max(minHeight, textarea.scrollHeight), maxHeight);
877
+ textarea.style.height = `${newHeight}px`;
878
+ // Enable scrolling if content exceeds maxHeight
879
+ textarea.style.overflowY = textarea.scrollHeight > maxHeight ? 'auto' : 'hidden';
880
+ }
881
+ }, [minRows, maxRows, textareaRef]);
882
+ react.useEffect(() => {
883
+ adjustHeight();
884
+ }, [value, adjustHeight]);
885
+ const handleChange = (event) => {
886
+ onChange(event.target.value);
887
+ };
888
+ return (jsxRuntime.jsxs(Stack, { direction: 'column', gap: 'xs', align: 'stretch', width: width ?? '100%', children: [label && (jsxRuntime.jsxs(Stack, { direction: 'row', gap: 'xs', align: 'center', children: [jsxRuntime.jsx(Text, { variant: 'label', fontSize: 'sm', children: label }), mandatory && (jsxRuntime.jsx(Text, { variant: 'label', fontSize: 'sm', color: 'error', children: "*" }))] })), jsxRuntime.jsx("div", { className: `${TEXTAREA_STYLES.container({ width })} ${disabled ? 'disabled' : ''}`, children: jsxRuntime.jsx("textarea", { ref: textareaRef, value: value, onChange: handleChange, placeholder: placeholder, disabled: disabled, className: TEXTAREA_STYLES.root({ disabled }), "aria-label": ariaLabel || label, rows: minRows }) })] }));
889
+ });
890
+ TextArea.displayName = 'TextArea';
891
+ var TextArea_default = react.memo(TextArea);
892
+
630
893
  /**
631
894
  * Card styles using createStyles from @aurora-ds/theme
632
895
  */
@@ -658,7 +921,7 @@ const CARD_STYLES = theme.createStyles((theme) => ({
658
921
  * - `column`: Vertical layout (default)
659
922
  * - `row`: Horizontal layout
660
923
  */
661
- const Card = ({ children, direction = 'column', padding = 'md', width, height, gap, radius = 'md', shadow = 'sm', align, justify, backgroundColor = 'surface', borderColor }) => {
924
+ const Card = ({ children, direction = 'column', padding = 'md', width, height, gap, radius = 'md', shadow = 'sm', align, justify, backgroundColor = 'surface', borderColor, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
662
925
  return (jsxRuntime.jsx("div", { className: CARD_STYLES.root({
663
926
  direction,
664
927
  padding,
@@ -671,7 +934,7 @@ const Card = ({ children, direction = 'column', padding = 'md', width, height, g
671
934
  justify,
672
935
  backgroundColor,
673
936
  borderColor
674
- }), children: children }));
937
+ }), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: children }));
675
938
  };
676
939
  Card.displayName = 'Card';
677
940
 
@@ -727,7 +990,7 @@ const GRID_STYLES = theme.createStyles((theme) => ({
727
990
  * - Use `rows` to define the number of rows or a custom grid-template-rows value
728
991
  * - Use `minChildWidth` for responsive auto-fill grids
729
992
  */
730
- const Grid = ({ children, columns = 1, rows, gap = 'sm', columnGap, rowGap, width, height, alignItems, justifyItems, alignContent, justifyContent, padding, minChildWidth, }) => {
993
+ const Grid = ({ children, columns = 1, rows, gap = 'sm', columnGap, rowGap, width, height, alignItems, justifyItems, alignContent, justifyContent, padding, minChildWidth, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
731
994
  return (jsxRuntime.jsx("div", { className: GRID_STYLES.root({
732
995
  columns,
733
996
  rows,
@@ -742,10 +1005,66 @@ const Grid = ({ children, columns = 1, rows, gap = 'sm', columnGap, rowGap, widt
742
1005
  justifyContent,
743
1006
  padding,
744
1007
  minChildWidth,
745
- }), children: children }));
1008
+ }), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: children }));
746
1009
  };
747
1010
  Grid.displayName = 'Grid';
748
1011
 
1012
+ const PAGE_SECTION_STYLES = theme.createStyles((theme) => ({
1013
+ root: ({ gap, paddingHorizontal, paddingVertical, alignItems = 'center', maxWidth, minHeight }) => ({
1014
+ display: 'flex',
1015
+ flexDirection: 'column',
1016
+ gap: gap || theme.spacing.xl,
1017
+ padding: `${paddingVertical ? theme.spacing[paddingVertical] : theme.spacing['3xl']} ${paddingHorizontal ? theme.spacing[paddingHorizontal] : theme.spacing.xl}`,
1018
+ alignItems,
1019
+ maxWidth,
1020
+ minHeight,
1021
+ width: '100%',
1022
+ margin: '0 auto'
1023
+ })
1024
+ }));
1025
+
1026
+ /**
1027
+ * PageSection component
1028
+ *
1029
+ * A layout component that provides consistent spacing and alignment for page sections.
1030
+ * Supports customization of gap, padding, alignment, min height and max width.
1031
+ */
1032
+ const PageSection = ({ children, gap, paddingHorizontal, paddingVertical, alignItems, maxWidth, minHeight, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
1033
+ return (jsxRuntime.jsx("section", { className: PAGE_SECTION_STYLES.root({ gap, paddingHorizontal, paddingVertical, alignItems, maxWidth, minHeight }), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: children }));
1034
+ };
1035
+ PageSection.displayName = 'PageSection';
1036
+
1037
+ const PAGE_STYLES = theme.createStyles(() => ({
1038
+ root: ({ backgroundColor, padding }) => ({
1039
+ width: '100%',
1040
+ height: '100%',
1041
+ display: 'flex',
1042
+ flexDirection: 'column',
1043
+ alignItems: 'center',
1044
+ backgroundColor,
1045
+ padding,
1046
+ }),
1047
+ children: ({ maxWidth = '100%' }) => ({
1048
+ maxWidth,
1049
+ height: '100%',
1050
+ marginLeft: 'auto',
1051
+ marginRight: 'auto',
1052
+ width: '100%',
1053
+ flex: 1,
1054
+ })
1055
+ }));
1056
+
1057
+ /**
1058
+ * Page component
1059
+ *
1060
+ * A layout component that provides consistent page structure with optional footer.
1061
+ * Supports customization of dimensions, background, and content constraints.
1062
+ */
1063
+ const Page = ({ children, footer, maxWidth, backgroundColor, padding, className, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
1064
+ return (jsxRuntime.jsxs("div", { className: `${PAGE_STYLES.root({ backgroundColor, padding })} ${className || ''}`, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: [jsxRuntime.jsx("div", { className: PAGE_STYLES.children({ maxWidth }), children: children }), footer && (jsxRuntime.jsx("div", { children: footer }))] }));
1065
+ };
1066
+ Page.displayName = 'Page';
1067
+
749
1068
  const ACCORDION_STYLES = theme.createStyles((theme) => {
750
1069
  return {
751
1070
  root: ({ disabled, width }) => ({
@@ -754,11 +1073,11 @@ const ACCORDION_STYLES = theme.createStyles((theme) => {
754
1073
  opacity: disabled ? 0.8 : 1,
755
1074
  borderRadius: theme.radius.md,
756
1075
  }),
757
- header: ({ disabled, backgroundColor }) => ({
1076
+ header: ({ disabled, backgroundColor, headerPadding }) => ({
758
1077
  display: 'flex',
759
1078
  alignItems: 'center',
760
1079
  width: '100%',
761
- padding: `${theme.spacing.sm} ${theme.spacing.md}`,
1080
+ padding: headerPadding ?? `${theme.spacing.sm} ${theme.spacing.md}`,
762
1081
  border: 'none',
763
1082
  backgroundColor: backgroundColor ? theme.colors[backgroundColor] : 'transparent',
764
1083
  cursor: disabled ? 'not-allowed' : 'pointer',
@@ -773,24 +1092,20 @@ const ACCORDION_STYLES = theme.createStyles((theme) => {
773
1092
  transition: `transform ${theme.transition.fast}`,
774
1093
  transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',
775
1094
  }),
776
- content: ({ expanded }) => ({
1095
+ content: ({ expanded, contentPadding }) => ({
777
1096
  display: expanded ? 'block' : 'none',
778
- padding: `0 ${theme.spacing.md} ${theme.spacing.md}`,
1097
+ padding: contentPadding ?? `0 ${theme.spacing.sm} ${theme.spacing.md}`,
779
1098
  }),
780
1099
  };
781
1100
  });
782
1101
 
783
- const ChevronDownIcon = () => {
784
- return (jsxRuntime.jsx("svg", { xmlns: 'http://www.w3.org/2000/svg', width: '100%', height: '100%', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', "stroke-width": '2', "stroke-linecap": 'round', "stroke-linejoin": 'round', className: 'lucide lucide-chevron-down-icon lucide-chevron-down', children: jsxRuntime.jsx("path", { d: 'm6 9 6 6 6-6' }) }));
785
- };
786
-
787
1102
  /**
788
1103
  * Accordion component
789
1104
  *
790
1105
  * A collapsible container that can show/hide content.
791
1106
  * Supports controlled and uncontrolled modes.
792
1107
  */
793
- const Accordion = ({ title, children, expanded, defaultExpanded = false, onChange, disabled = false, icon, backgroundColor, width }) => {
1108
+ const Accordion = ({ title, children, expanded, defaultExpanded = false, onChange, disabled = false, icon, backgroundColor, width, headerPadding, contentPadding, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
794
1109
  const [internalExpanded, setInternalExpanded] = react.useState(defaultExpanded);
795
1110
  // Use controlled value if provided, otherwise use internal state
796
1111
  const isExpanded = expanded !== undefined ? expanded : internalExpanded;
@@ -799,14 +1114,12 @@ const Accordion = ({ title, children, expanded, defaultExpanded = false, onChang
799
1114
  return;
800
1115
  }
801
1116
  const newExpanded = !isExpanded;
802
- // Update internal state for uncontrolled mode
803
1117
  if (expanded === undefined) {
804
1118
  setInternalExpanded(newExpanded);
805
1119
  }
806
- // Call onChange callback
807
1120
  onChange?.(newExpanded);
808
1121
  };
809
- return (jsxRuntime.jsxs("div", { className: ACCORDION_STYLES.root({ disabled, width }), children: [jsxRuntime.jsxs("button", { type: 'button', className: ACCORDION_STYLES.header({ disabled, backgroundColor }), onClick: handleToggle, disabled: disabled, "aria-expanded": isExpanded, children: [jsxRuntime.jsxs(Stack, { direction: 'row', align: 'center', gap: 'sm', width: '100%', children: [icon && (jsxRuntime.jsx(Icon, { color: disabled ? 'disabledText' : 'text', children: icon })), jsxRuntime.jsx(Text, { variant: 'label', color: disabled ? 'disabledText' : 'text', children: title })] }), jsxRuntime.jsx("div", { className: ACCORDION_STYLES.expandIcon({ expanded: isExpanded }), children: jsxRuntime.jsx(Icon, { color: disabled ? 'disabledText' : 'text', children: jsxRuntime.jsx(ChevronDownIcon, {}) }) })] }), jsxRuntime.jsx("div", { className: ACCORDION_STYLES.content({ expanded: isExpanded }), role: 'region', "aria-hidden": !isExpanded, children: children })] }));
1122
+ return (jsxRuntime.jsxs("div", { className: ACCORDION_STYLES.root({ disabled, width }), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: [jsxRuntime.jsxs("button", { type: 'button', className: ACCORDION_STYLES.header({ disabled, backgroundColor, headerPadding }), onClick: handleToggle, disabled: disabled, "aria-expanded": isExpanded, children: [jsxRuntime.jsxs(Stack, { direction: 'row', align: 'center', gap: 'sm', width: '100%', children: [icon && (jsxRuntime.jsx(Icon, { color: disabled ? 'disabledText' : 'text', children: icon })), jsxRuntime.jsx(Text, { variant: 'label', color: disabled ? 'disabledText' : 'text', children: title })] }), jsxRuntime.jsx("div", { className: ACCORDION_STYLES.expandIcon({ expanded: isExpanded }), children: jsxRuntime.jsx(Icon, { color: disabled ? 'disabledText' : 'text', children: jsxRuntime.jsx(ChevronDownIcon, {}) }) })] }), jsxRuntime.jsx("div", { className: ACCORDION_STYLES.content({ expanded: isExpanded, contentPadding }), role: 'region', "aria-hidden": !isExpanded, children: children })] }));
810
1123
  };
811
1124
  Accordion.displayName = 'Accordion';
812
1125
 
@@ -852,19 +1165,230 @@ const DRAWER_ITEM_STYLES = theme.createStyles((theme) => ({
852
1165
  * A navigation item for use in drawers/sidebars.
853
1166
  * Similar to a text button with selected state support.
854
1167
  */
855
- const DrawerItem = ({ label, startIcon, endIcon, selected = false, onClick, disabled, chip }) => {
856
- return (jsxRuntime.jsxs("button", { onClick: onClick, disabled: disabled, type: 'button', className: DRAWER_ITEM_STYLES.root({ selected }), children: [jsxRuntime.jsxs(Stack, { children: [startIcon && (jsxRuntime.jsx(Icon, { children: startIcon })), jsxRuntime.jsx(Text, { variant: 'label', maxLines: 1, children: label }), endIcon && (jsxRuntime.jsx(Icon, { children: endIcon }))] }), chip && !selected && (jsxRuntime.jsx(Chip, { ...chip, size: '2xs', color: chip.color ?? 'info', disabled: disabled }))] }));
1168
+ const DrawerItem = ({ label, startIcon, endIcon, selected = false, onClick, disabled, chip, ariaLabel, ariaLabelledBy, ariaDescribedBy, role, tabIndex, }) => {
1169
+ return (jsxRuntime.jsxs("button", { onClick: onClick, disabled: disabled, type: 'button', className: DRAWER_ITEM_STYLES.root({ selected }), "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, role: role, tabIndex: tabIndex, children: [jsxRuntime.jsxs(Stack, { children: [startIcon && (jsxRuntime.jsx(Icon, { children: startIcon })), jsxRuntime.jsx(Text, { variant: 'label', maxLines: 1, children: label }), endIcon && (jsxRuntime.jsx(Icon, { children: endIcon }))] }), chip && !selected && (jsxRuntime.jsx(Chip, { ...chip, size: '2xs', color: chip.color ?? 'info', disabled: disabled }))] }));
857
1170
  };
858
1171
  DrawerItem.displayName = 'DrawerItem';
859
1172
 
1173
+ /**
1174
+ * Breadcrumb styles using createStyles from @aurora-ds/theme
1175
+ */
1176
+ const BREADCRUMB_STYLES = theme.createStyles((theme) => ({
1177
+ list: {
1178
+ display: 'flex',
1179
+ flexWrap: 'wrap',
1180
+ alignItems: 'center',
1181
+ gap: theme.spacing.sm,
1182
+ wordBreak: 'break-word',
1183
+ fontSize: theme.fontSize.sm,
1184
+ color: theme.colors.disabledText,
1185
+ listStyle: 'none',
1186
+ margin: 0,
1187
+ padding: 0,
1188
+ },
1189
+ }));
1190
+
1191
+ /**
1192
+ * BreadcrumbEllipsis styles using createStyles from @aurora-ds/theme
1193
+ */
1194
+ const BREADCRUMB_ELLIPSIS_STYLES = theme.createStyles((theme) => ({
1195
+ item: {
1196
+ display: 'inline-flex',
1197
+ alignItems: 'center',
1198
+ gap: theme.spacing.sm,
1199
+ },
1200
+ ellipsis: {
1201
+ display: 'flex',
1202
+ height: 36,
1203
+ width: 36,
1204
+ alignItems: 'center',
1205
+ justifyContent: 'center',
1206
+ },
1207
+ }));
1208
+
1209
+ /**
1210
+ * BreadcrumbEllipsis component
1211
+ * Renders an ellipsis item in the breadcrumb (includes the li wrapper)
1212
+ */
1213
+ const BreadcrumbEllipsis = () => (jsxRuntime.jsx("li", { className: BREADCRUMB_ELLIPSIS_STYLES.item, children: jsxRuntime.jsx("span", { role: 'presentation', "aria-hidden": 'true', className: BREADCRUMB_ELLIPSIS_STYLES.ellipsis, children: jsxRuntime.jsx(Icon, { size: 'md', color: 'disabledText', children: jsxRuntime.jsx(MoreHorizontalIcon, {}) }) }) }));
1214
+ BreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis';
1215
+
1216
+ /**
1217
+ * BreadcrumbSeparator component
1218
+ */
1219
+ const BreadcrumbSeparator = () => (jsxRuntime.jsx("li", { role: 'presentation', "aria-hidden": 'true', children: jsxRuntime.jsx(Icon, { color: 'disabledText', size: 'sm', children: jsxRuntime.jsx(ChevronRightIcon, {}) }) }));
1220
+ BreadcrumbSeparator.displayName = 'BreadcrumbSeparator';
1221
+
1222
+ /**
1223
+ * Inserts separators between breadcrumb items automatically
1224
+ */
1225
+ const insertSeparators = (items, SeparatorComponent) => {
1226
+ const result = [];
1227
+ items.forEach((item, index) => {
1228
+ // Add the item with a key
1229
+ const itemWithKey = react.isValidElement(item)
1230
+ ? react.cloneElement(item, { key: `item-${index}` })
1231
+ : item;
1232
+ result.push(itemWithKey);
1233
+ // Add separator after each item except the last one
1234
+ if (index < items.length - 1) {
1235
+ result.push(jsxRuntime.jsx(SeparatorComponent, {}, `sep-${index}`));
1236
+ }
1237
+ });
1238
+ return result;
1239
+ };
1240
+
1241
+ /**
1242
+ * Builds the breadcrumb children with ellipsis logic
1243
+ */
1244
+ const buildBreadcrumbChildren = (items, maxItems, EllipsisComponent, SeparatorComponent) => {
1245
+ if (!maxItems || items.length <= maxItems) {
1246
+ return insertSeparators(items, SeparatorComponent);
1247
+ }
1248
+ // First item
1249
+ const firstItem = items[0];
1250
+ // Last (maxItems - 1) items
1251
+ const lastItemsCount = maxItems - 1;
1252
+ const lastItems = items.slice(-lastItemsCount);
1253
+ // Build the result: first + separator + ellipsis + separator + last items with separators between them
1254
+ const result = [];
1255
+ // Add first item with key
1256
+ const firstWithKey = react.isValidElement(firstItem)
1257
+ ? react.cloneElement(firstItem, { key: 'first' })
1258
+ : firstItem;
1259
+ result.push(firstWithKey);
1260
+ // Add separator + ellipsis + separator
1261
+ result.push(jsxRuntime.jsx(SeparatorComponent, {}, 'sep-ellipsis-before'));
1262
+ result.push(jsxRuntime.jsx(EllipsisComponent, {}, 'ellipsis'));
1263
+ result.push(jsxRuntime.jsx(SeparatorComponent, {}, 'sep-ellipsis-after'));
1264
+ // Add last items with separators between them
1265
+ lastItems.forEach((item, index) => {
1266
+ const itemWithKey = react.isValidElement(item)
1267
+ ? react.cloneElement(item, { key: `last-${index}` })
1268
+ : item;
1269
+ result.push(itemWithKey);
1270
+ // Add separator between items (but not after the last one)
1271
+ if (index < lastItems.length - 1) {
1272
+ result.push(jsxRuntime.jsx(SeparatorComponent, {}, `sep-last-${index}`));
1273
+ }
1274
+ });
1275
+ return result;
1276
+ };
1277
+
1278
+ /**
1279
+ * Flattens children, extracting children from Fragments
1280
+ */
1281
+ const flattenChildren = (children) => {
1282
+ const result = [];
1283
+ react.Children.forEach(children, (child) => {
1284
+ if (react.isValidElement(child) && child.type === react.Fragment) {
1285
+ result.push(...flattenChildren(child.props.children));
1286
+ }
1287
+ else {
1288
+ result.push(child);
1289
+ }
1290
+ });
1291
+ return result;
1292
+ };
1293
+
1294
+ /**
1295
+ * Checks if a React element is a BreadcrumbSeparator
1296
+ */
1297
+ const isSeparator = (child) => {
1298
+ return react.isValidElement(child) && child.type?.displayName === 'BreadcrumbSeparator';
1299
+ };
1300
+
1301
+ /**
1302
+ * Breadcrumb component
1303
+ * Navigation component for hierarchical page structures
1304
+ *
1305
+ * @param maxItems - Maximum number of items to display (minimum 2).
1306
+ * If exceeded, shows: first item + ellipsis + last (maxItems - 1) items
1307
+ * @param children
1308
+ * @param props
1309
+ */
1310
+ const Breadcrumb = react.memo(({ maxItems, children, ...props }) => {
1311
+ const allChildren = flattenChildren(children);
1312
+ // Filter out any manually added separators (in case user added them)
1313
+ const items = allChildren.filter(child => !isSeparator(child));
1314
+ const renderedChildren = react.useMemo(() => buildBreadcrumbChildren(items, maxItems, BreadcrumbEllipsis, BreadcrumbSeparator), [items, maxItems]);
1315
+ return (jsxRuntime.jsx("nav", { "aria-label": 'breadcrumb', ...props, children: jsxRuntime.jsx("ol", { className: BREADCRUMB_STYLES.list, children: renderedChildren }) }));
1316
+ });
1317
+ Breadcrumb.displayName = 'Breadcrumb';
1318
+
1319
+ /**
1320
+ * BreadcrumbLink styles using createStyles from @aurora-ds/theme
1321
+ */
1322
+ const BREADCRUMB_LINK_STYLES = theme.createStyles((theme) => ({
1323
+ item: {
1324
+ display: 'inline-flex',
1325
+ alignItems: 'center',
1326
+ gap: theme.spacing.sm,
1327
+ cursor: 'pointer'
1328
+ },
1329
+ link: {
1330
+ transition: `color ${theme.transition.fast}, text-decoration-color ${theme.transition.fast}`,
1331
+ color: theme.colors.disabledText,
1332
+ textDecoration: 'underline',
1333
+ textDecorationColor: 'transparent',
1334
+ textUnderlineOffset: '3px',
1335
+ ':hover': {
1336
+ color: theme.colors.primary,
1337
+ textDecorationColor: 'currentColor',
1338
+ },
1339
+ },
1340
+ }));
1341
+
1342
+ /**
1343
+ * BreadcrumbLink component
1344
+ * Renders a clickable breadcrumb item with a link
1345
+ */
1346
+ const BreadcrumbLink = react.memo((props) => {
1347
+ const { children, onClick } = props;
1348
+ return (jsxRuntime.jsx("li", { className: BREADCRUMB_LINK_STYLES.item, children: jsxRuntime.jsx("a", { className: BREADCRUMB_LINK_STYLES.link, onClick: onClick, children: jsxRuntime.jsx(Text, { variant: 'span', fontSize: 'sm', children: children }) }) }));
1349
+ });
1350
+ BreadcrumbLink.displayName = 'BreadcrumbLink';
1351
+
1352
+ /**
1353
+ * BreadcrumbPage styles using createStyles from @aurora-ds/theme
1354
+ */
1355
+ const BREADCRUMB_PAGE_STYLES = theme.createStyles((theme) => ({
1356
+ item: {
1357
+ display: 'inline-flex',
1358
+ alignItems: 'center',
1359
+ gap: theme.spacing.sm,
1360
+ },
1361
+ page: {
1362
+ fontWeight: theme.fontWeight.medium,
1363
+ color: theme.colors.primary,
1364
+ },
1365
+ }));
1366
+
1367
+ /**
1368
+ * BreadcrumbPage component
1369
+ * Renders the current page (non-clickable) in the breadcrumb
1370
+ */
1371
+ const BreadcrumbPage = react.memo(({ children }) => (jsxRuntime.jsx("li", { className: BREADCRUMB_PAGE_STYLES.item, children: jsxRuntime.jsx("span", { className: BREADCRUMB_PAGE_STYLES.page, children: jsxRuntime.jsx(Text, { variant: 'span', fontSize: 'sm', color: 'primary', children: children }) }) })));
1372
+ BreadcrumbPage.displayName = 'BreadcrumbPage';
1373
+
860
1374
  exports.Accordion = Accordion;
1375
+ exports.Breadcrumb = Breadcrumb;
1376
+ exports.BreadcrumbEllipsis = BreadcrumbEllipsis;
1377
+ exports.BreadcrumbLink = BreadcrumbLink;
1378
+ exports.BreadcrumbPage = BreadcrumbPage;
1379
+ exports.BreadcrumbSeparator = BreadcrumbSeparator;
861
1380
  exports.Button = Button;
862
1381
  exports.Card = Card;
863
1382
  exports.Chip = Chip;
864
1383
  exports.DrawerItem = DrawerItem;
1384
+ exports.Form = Form_default;
865
1385
  exports.Grid = Grid;
866
1386
  exports.Icon = Icon;
867
1387
  exports.IconButton = IconButton;
1388
+ exports.Input = Input_default;
1389
+ exports.Page = Page;
1390
+ exports.PageSection = PageSection;
868
1391
  exports.Stack = Stack;
869
1392
  exports.Text = Text;
1393
+ exports.TextArea = TextArea_default;
870
1394
  //# sourceMappingURL=index.js.map