@arbor-education/design-system.components 0.0.7 → 0.1.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 (143) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/components/button/Button.d.ts +3 -3
  3. package/dist/components/button/Button.d.ts.map +1 -1
  4. package/dist/components/button/Button.js +7 -6
  5. package/dist/components/button/Button.js.map +1 -1
  6. package/dist/components/button/Button.test.js +1 -1
  7. package/dist/components/button/Button.test.js.map +1 -1
  8. package/dist/components/dropdown/Dropdown.d.ts +15 -0
  9. package/dist/components/dropdown/Dropdown.d.ts.map +1 -0
  10. package/dist/components/dropdown/Dropdown.js +15 -0
  11. package/dist/components/dropdown/Dropdown.js.map +1 -0
  12. package/dist/components/dropdown/Dropdown.stories.d.ts +20 -0
  13. package/dist/components/dropdown/Dropdown.stories.d.ts.map +1 -0
  14. package/dist/components/dropdown/Dropdown.stories.js +30 -0
  15. package/dist/components/dropdown/Dropdown.stories.js.map +1 -0
  16. package/dist/components/dropdown/Dropdown.test.d.ts.map +1 -0
  17. package/dist/components/dropdown/Dropdown.test.js +136 -0
  18. package/dist/components/dropdown/Dropdown.test.js.map +1 -0
  19. package/dist/components/dropdown/DropdownContent.d.ts +9 -0
  20. package/dist/components/dropdown/DropdownContent.d.ts.map +1 -0
  21. package/dist/components/dropdown/DropdownContent.js +10 -0
  22. package/dist/components/dropdown/DropdownContent.js.map +1 -0
  23. package/dist/components/dropdown/DropdownTrigger.d.ts +5 -0
  24. package/dist/components/dropdown/DropdownTrigger.d.ts.map +1 -0
  25. package/dist/components/dropdown/DropdownTrigger.js +7 -0
  26. package/dist/components/dropdown/DropdownTrigger.js.map +1 -0
  27. package/dist/components/dropdown/items/DropdownItem.d.ts +3 -0
  28. package/dist/components/dropdown/items/DropdownItem.d.ts.map +1 -0
  29. package/dist/components/dropdown/items/DropdownItem.js +8 -0
  30. package/dist/components/dropdown/items/DropdownItem.js.map +1 -0
  31. package/dist/components/dropdown/items/DropdownSelectItem.d.ts +8 -0
  32. package/dist/components/dropdown/items/DropdownSelectItem.d.ts.map +1 -0
  33. package/dist/components/dropdown/items/DropdownSelectItem.js +11 -0
  34. package/dist/components/dropdown/items/DropdownSelectItem.js.map +1 -0
  35. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts +11 -0
  36. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.d.ts.map +1 -0
  37. package/dist/components/formField/inputs/{dropdown/Dropdown.js → selectDropdown/SelectDropdown.js} +20 -9
  38. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js.map +1 -0
  39. package/dist/components/formField/inputs/{dropdown/Dropdown.stories.d.ts → selectDropdown/SelectDropdown.stories.d.ts} +3 -3
  40. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts.map +1 -0
  41. package/dist/components/formField/inputs/{dropdown/Dropdown.stories.js → selectDropdown/SelectDropdown.stories.js} +4 -4
  42. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js.map +1 -0
  43. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.d.ts +2 -0
  44. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.d.ts.map +1 -0
  45. package/dist/components/formField/inputs/{dropdown/Dropdown.test.js → selectDropdown/SelectDropdown.test.js} +14 -14
  46. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js.map +1 -0
  47. package/dist/components/formField/inputs/selectDropdown/items/item/SelectDropdownItem.d.ts +16 -0
  48. package/dist/components/formField/inputs/selectDropdown/items/item/SelectDropdownItem.d.ts.map +1 -0
  49. package/dist/components/formField/inputs/selectDropdown/items/item/SelectDropdownItem.js +13 -0
  50. package/dist/components/formField/inputs/selectDropdown/items/item/SelectDropdownItem.js.map +1 -0
  51. package/dist/components/heading/Heading.stories.js +3 -3
  52. package/dist/components/heading/Heading.stories.js.map +1 -1
  53. package/dist/components/section/Section.d.ts +2 -2
  54. package/dist/components/section/Section.d.ts.map +1 -1
  55. package/dist/components/section/Section.js +2 -2
  56. package/dist/components/section/Section.js.map +1 -1
  57. package/dist/components/section/Section.test.js +1 -1
  58. package/dist/components/section/Section.test.js.map +1 -1
  59. package/dist/components/slideover/Slideover.js +1 -1
  60. package/dist/components/slideover/Slideover.js.map +1 -1
  61. package/dist/components/slideoverManager/SlideoverManager.stories.js +7 -7
  62. package/dist/components/slideoverManager/SlideoverManager.stories.js.map +1 -1
  63. package/dist/components/table/BulkActionsDropdown.d.ts.map +1 -1
  64. package/dist/components/table/BulkActionsDropdown.js +3 -4
  65. package/dist/components/table/BulkActionsDropdown.js.map +1 -1
  66. package/dist/components/table/Table.stories.js +3 -3
  67. package/dist/components/table/Table.stories.js.map +1 -1
  68. package/dist/components/table/Table.test.js +5 -5
  69. package/dist/components/table/Table.test.js.map +1 -1
  70. package/dist/index.css +70 -159
  71. package/dist/index.css.map +1 -1
  72. package/dist/index.d.ts +2 -1
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +2 -1
  75. package/dist/index.js.map +1 -1
  76. package/package.json +1 -1
  77. package/release/design-system.components.tgz +0 -0
  78. package/src/components/button/Button.test.tsx +1 -1
  79. package/src/components/button/Button.tsx +10 -7
  80. package/src/components/dropdown/Dropdown.stories.tsx +62 -0
  81. package/src/components/dropdown/Dropdown.test.tsx +368 -0
  82. package/src/components/dropdown/Dropdown.tsx +19 -0
  83. package/src/components/dropdown/DropdownContent.tsx +22 -0
  84. package/src/components/dropdown/DropdownTrigger.tsx +10 -0
  85. package/src/components/dropdown/dropdown.scss +48 -0
  86. package/src/components/dropdown/items/DropdownItem.tsx +11 -0
  87. package/src/components/dropdown/items/DropdownSelectItem.tsx +28 -0
  88. package/src/components/formField/inputs/{dropdown/Dropdown.stories.tsx → selectDropdown/SelectDropdown.stories.tsx} +4 -4
  89. package/src/components/formField/inputs/{dropdown/Dropdown.test.tsx → selectDropdown/SelectDropdown.test.tsx} +13 -13
  90. package/src/components/formField/inputs/selectDropdown/SelectDropdown.tsx +102 -0
  91. package/src/components/formField/inputs/selectDropdown/items/item/SelectDropdownItem.tsx +46 -0
  92. package/src/components/formField/inputs/selectDropdown/selectDropdown.scss +22 -0
  93. package/src/components/heading/Heading.stories.tsx +3 -3
  94. package/src/components/icon/icon.scss +3 -0
  95. package/src/components/section/Section.test.tsx +1 -1
  96. package/src/components/section/Section.tsx +4 -4
  97. package/src/components/slideover/Slideover.tsx +1 -1
  98. package/src/components/slideoverManager/SlideoverManager.stories.tsx +14 -14
  99. package/src/components/table/BulkActionsDropdown.tsx +19 -23
  100. package/src/components/table/Table.stories.tsx +4 -4
  101. package/src/components/table/Table.test.tsx +5 -5
  102. package/src/index.scss +3 -5
  103. package/src/index.ts +2 -1
  104. package/src/tokens.scss +1 -0
  105. package/dist/components/formField/inputs/dropdown/Dropdown.d.ts +0 -11
  106. package/dist/components/formField/inputs/dropdown/Dropdown.d.ts.map +0 -1
  107. package/dist/components/formField/inputs/dropdown/Dropdown.js.map +0 -1
  108. package/dist/components/formField/inputs/dropdown/Dropdown.stories.d.ts.map +0 -1
  109. package/dist/components/formField/inputs/dropdown/Dropdown.stories.js.map +0 -1
  110. package/dist/components/formField/inputs/dropdown/Dropdown.test.d.ts.map +0 -1
  111. package/dist/components/formField/inputs/dropdown/Dropdown.test.js.map +0 -1
  112. package/dist/components/formField/inputs/dropdown/buttons/dropdownButton/DropdownButton.d.ts +0 -12
  113. package/dist/components/formField/inputs/dropdown/buttons/dropdownButton/DropdownButton.d.ts.map +0 -1
  114. package/dist/components/formField/inputs/dropdown/buttons/dropdownButton/DropdownButton.js +0 -15
  115. package/dist/components/formField/inputs/dropdown/buttons/dropdownButton/DropdownButton.js.map +0 -1
  116. package/dist/components/formField/inputs/dropdown/items/DropdownItemRenderer.d.ts +0 -10
  117. package/dist/components/formField/inputs/dropdown/items/DropdownItemRenderer.d.ts.map +0 -1
  118. package/dist/components/formField/inputs/dropdown/items/DropdownItemRenderer.js +0 -12
  119. package/dist/components/formField/inputs/dropdown/items/DropdownItemRenderer.js.map +0 -1
  120. package/dist/components/formField/inputs/dropdown/items/dropdownItem/DropdownItem.d.ts +0 -9
  121. package/dist/components/formField/inputs/dropdown/items/dropdownItem/DropdownItem.d.ts.map +0 -1
  122. package/dist/components/formField/inputs/dropdown/items/dropdownItem/DropdownItem.js +0 -21
  123. package/dist/components/formField/inputs/dropdown/items/dropdownItem/DropdownItem.js.map +0 -1
  124. package/dist/components/formField/inputs/dropdown/items/dropdownMultiLineItem/DropdownMultiLineItem.d.ts +0 -7
  125. package/dist/components/formField/inputs/dropdown/items/dropdownMultiLineItem/DropdownMultiLineItem.d.ts.map +0 -1
  126. package/dist/components/formField/inputs/dropdown/items/dropdownMultiLineItem/DropdownMultiLineItem.js +0 -16
  127. package/dist/components/formField/inputs/dropdown/items/dropdownMultiLineItem/DropdownMultiLineItem.js.map +0 -1
  128. package/dist/components/formField/inputs/dropdown/wrapper/DropdownWrapper.d.ts +0 -17
  129. package/dist/components/formField/inputs/dropdown/wrapper/DropdownWrapper.d.ts.map +0 -1
  130. package/dist/components/formField/inputs/dropdown/wrapper/DropdownWrapper.js +0 -151
  131. package/dist/components/formField/inputs/dropdown/wrapper/DropdownWrapper.js.map +0 -1
  132. package/src/components/formField/inputs/dropdown/Dropdown.tsx +0 -82
  133. package/src/components/formField/inputs/dropdown/buttons/dropdownButton/DropdownButton.tsx +0 -44
  134. package/src/components/formField/inputs/dropdown/buttons/dropdownButton/dropdownButton.scss +0 -12
  135. package/src/components/formField/inputs/dropdown/dropdown.scss +0 -24
  136. package/src/components/formField/inputs/dropdown/items/DropdownItemRenderer.tsx +0 -38
  137. package/src/components/formField/inputs/dropdown/items/dropdownItem/DropdownItem.tsx +0 -53
  138. package/src/components/formField/inputs/dropdown/items/dropdownItem/dropdownItem.scss +0 -62
  139. package/src/components/formField/inputs/dropdown/items/dropdownMultiLineItem/DropdownMultiLineItem.tsx +0 -48
  140. package/src/components/formField/inputs/dropdown/items/dropdownMultiLineItem/dropdownMultiLineItem.scss +0 -52
  141. package/src/components/formField/inputs/dropdown/wrapper/DropdownWrapper.tsx +0 -248
  142. package/src/components/formField/inputs/dropdown/wrapper/dropdownWrapper.scss +0 -37
  143. /package/dist/components/{formField/inputs/dropdown → dropdown}/Dropdown.test.d.ts +0 -0
@@ -1,12 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- // DropdownItemRenderer.tsx
3
- import { DropdownItem } from './dropdownItem/DropdownItem';
4
- import { DropdownMultiLineItem } from './dropdownMultiLineItem/DropdownMultiLineItem';
5
- import {} from '../wrapper/DropdownWrapper';
6
- export const DropdownItemRenderer = (props) => {
7
- const { value, label, header, icon, selected, onSelection } = props;
8
- return (header
9
- ? (_jsx(DropdownMultiLineItem, { value: value, label: label, header: header, selected: selected, onSelection: onSelection }))
10
- : (_jsx(DropdownItem, { value: value, label: label, icon: icon, selected: selected, onSelection: onSelection })));
11
- };
12
- //# sourceMappingURL=DropdownItemRenderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DropdownItemRenderer.js","sourceRoot":"","sources":["../../../../../../src/components/formField/inputs/dropdown/items/DropdownItemRenderer.tsx"],"names":[],"mappings":";AAAA,2BAA2B;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAA8B,MAAM,4BAA4B,CAAC;AAUxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAA2B,EAAE,EAAE;IAClE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAEpE,OAAO,CACL,MAAM;QACJ,CAAC,CAAC,CACE,KAAC,qBAAqB,IACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,GACxB,CACH;QACH,CAAC,CAAC,CACE,KAAC,YAAY,IACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,GACxB,CACH,CACN,CAAC;AACJ,CAAC,CAAC"}
@@ -1,9 +0,0 @@
1
- import { allowedIcons } from '../../../../../icon/allowedIcons';
2
- import type { DropdownItemBaseProps } from '../../../../../formField/inputs/dropdown/wrapper/DropdownWrapper';
3
- export type DropdownItemProps = {
4
- value: string;
5
- label?: string;
6
- icon?: keyof typeof allowedIcons;
7
- } & DropdownItemBaseProps;
8
- export declare const DropdownItem: (props: DropdownItemProps) => import("react/jsx-runtime").JSX.Element;
9
- //# sourceMappingURL=DropdownItem.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DropdownItem.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/formField/inputs/dropdown/items/dropdownItem/DropdownItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8DAA8D,CAAC;AAE1G,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,OAAO,YAAY,CAAC;CAClC,GAAG,qBAAqB,CAAC;AAE1B,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,4CAyCpD,CAAC"}
@@ -1,21 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { allowedIcons } from '../../../../../icon/allowedIcons';
3
- import { Icon } from '../../../../../icon/Icon';
4
- import classNames from 'classnames';
5
- export const DropdownItem = (props) => {
6
- const { label, value, icon, selected = false, onSelection, id } = props;
7
- const itemClassNames = classNames('ds-dropdown-item', {
8
- 'ds-dropdown-item--pressed': selected,
9
- });
10
- return (_jsx("div", { role: "option", id: id, className: itemClassNames, onClick: (e) => {
11
- e.preventDefault();
12
- e.stopPropagation();
13
- return onSelection?.(value);
14
- }, tabIndex: 0, "aria-selected": selected, onKeyDown: (e) => {
15
- if (e.key === 'Enter' || e.key === ' ') {
16
- e.preventDefault();
17
- onSelection?.(value);
18
- }
19
- }, children: _jsxs("div", { className: "ds-dropdown-item--content", children: [icon && (_jsx("span", { className: "ds-dropdown-item--icon", children: _jsx(Icon, { name: icon, size: 16 }) })), _jsx("span", { className: "ds-dropdown-item--label", children: label ? label : value }), selected && (_jsx("span", { className: "ds-dropdown-item--check-icon", children: _jsx(Icon, { name: "check", size: 16 }) }))] }) }));
20
- };
21
- //# sourceMappingURL=DropdownItem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DropdownItem.js","sourceRoot":"","sources":["../../../../../../../src/components/formField/inputs/dropdown/items/dropdownItem/DropdownItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,UAAU,MAAM,YAAY,CAAC;AASpC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE;IACvD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IAExE,MAAM,cAAc,GAAG,UAAU,CAAC,kBAAkB,EAAE;QACpD,2BAA2B,EAAE,QAAQ;KACtC,CAAC,CAAC;IAEH,OAAO,CACL,cACE,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,OAAO,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,EACD,QAAQ,EAAE,CAAC,mBACI,QAAQ,EACvB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACvC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,YAED,eAAK,SAAS,EAAC,2BAA2B,aACvC,IAAI,IAAI,CACP,eAAM,SAAS,EAAC,wBAAwB,YACtC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAI,GACzB,CACR,EACD,eAAM,SAAS,EAAC,yBAAyB,YAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAQ,EACvE,QAAQ,IAAI,CACX,eAAM,SAAS,EAAC,8BAA8B,YAC5C,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAE,EAAE,GAAI,GAC1B,CACR,IACG,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { DropdownItemBaseProps } from '../../../../../formField/inputs/dropdown/wrapper/DropdownWrapper';
2
- export type DropdownMultiLineItemProps = {
3
- header: string;
4
- label: string;
5
- } & DropdownItemBaseProps;
6
- export declare const DropdownMultiLineItem: (props: DropdownMultiLineItemProps) => import("react/jsx-runtime").JSX.Element;
7
- //# sourceMappingURL=DropdownMultiLineItem.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DropdownMultiLineItem.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/formField/inputs/dropdown/items/dropdownMultiLineItem/DropdownMultiLineItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8DAA8D,CAAC;AAG1G,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,qBAAqB,CAAC;AAE1B,eAAO,MAAM,qBAAqB,GAAI,OAAO,0BAA0B,4CAqCtE,CAAC"}
@@ -1,16 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import classNames from 'classnames'; // Import the classNames utility
3
- import { Icon } from '../../../../../icon/Icon'; // Import the Icon component
4
- export const DropdownMultiLineItem = (props) => {
5
- const { value, label, header, selected, onSelection, id } = props;
6
- const itemClassNames = classNames('ds-dropdown-item', {
7
- 'ds-dropdown-item--pressed': selected,
8
- });
9
- return (_jsx("div", { role: "option", id: id, className: itemClassNames, onClick: () => onSelection?.(value), tabIndex: 0, "aria-selected": selected, onKeyDown: (e) => {
10
- if (e.key === 'Enter' || e.key === ' ') {
11
- e.preventDefault();
12
- onSelection?.(value);
13
- }
14
- }, children: _jsxs("div", { className: "ds-dropdown-item-multiline ds-dropdown-item--content", children: [_jsxs("h4", { className: "ds-dropdown-item-multiline--header", children: [header, selected && (_jsx("span", { className: "ds-dropdown-item-multiline--check-icon", children: _jsx(Icon, { name: "check", size: 16 }) }))] }), _jsx("div", { className: "ds-dropdown-item-multiline--content", children: label ? label : value })] }) }));
15
- };
16
- //# sourceMappingURL=DropdownMultiLineItem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DropdownMultiLineItem.js","sourceRoot":"","sources":["../../../../../../../src/components/formField/inputs/dropdown/items/dropdownMultiLineItem/DropdownMultiLineItem.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC,CAAC,gCAAgC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC,CAAC,4BAA4B;AASzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAiC,EAAE,EAAE;IACzE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IAElE,MAAM,cAAc,GAAG,UAAU,CAAC,kBAAkB,EAAE;QACpD,2BAA2B,EAAE,QAAQ;KACtC,CAAC,CAAC;IAEH,OAAO,CACL,cACE,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EACnC,QAAQ,EAAE,CAAC,mBACI,QAAQ,EACvB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACvC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,YAED,eAAK,SAAS,EAAC,sDAAsD,aACnE,cAAI,SAAS,EAAC,oCAAoC,aAC/C,MAAM,EACN,QAAQ,IAAI,CACX,eAAM,SAAS,EAAC,wCAAwC,YACtD,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAE,EAAE,GAAI,GAC1B,CACR,IACE,EACL,cAAK,SAAS,EAAC,qCAAqC,YACjD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAClB,IACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,17 +0,0 @@
1
- import React, { type SelectHTMLAttributes, type ReactNode } from 'react';
2
- export type DropdownItemBaseProps = {
3
- value: string;
4
- selected?: boolean;
5
- onSelection?: (value: string) => void;
6
- } & React.HTMLAttributes<HTMLDivElement>;
7
- export type DropdownWrapperProps = {
8
- placeholder?: string;
9
- multiple?: boolean;
10
- disabled?: boolean;
11
- errorText?: string;
12
- children: ReactNode;
13
- onSelectionChange: (value: string[]) => void;
14
- dropdownWidth?: string;
15
- } & SelectHTMLAttributes<HTMLSelectElement>;
16
- export declare const DropdownWrapper: (props: DropdownWrapperProps) => import("react/jsx-runtime").JSX.Element;
17
- //# sourceMappingURL=DropdownWrapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DropdownWrapper.d.ts","sourceRoot":"","sources":["../../../../../../src/components/formField/inputs/dropdown/wrapper/DropdownWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,KAAK,oBAAoB,EAEzB,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAQf,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAE5C,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,4CAuN1D,CAAC"}
@@ -1,151 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React, { useState, cloneElement, useEffect, useRef, useContext, } from 'react';
3
- import { DropdownButton } from '../../../../formField/inputs/dropdown/buttons/dropdownButton/DropdownButton';
4
- import { PopupParentContext } from '../../../../../utils/PopupParentContext';
5
- import { createPortal } from 'react-dom';
6
- import { getFloatingElementPosition } from '../../../../../utils/getFloatingElementPosition';
7
- import useResizeObserver from '@react-hook/resize-observer';
8
- import { useComponentDidMount } from '../../../../../utils/hooks/useComponentDidMount';
9
- export const DropdownWrapper = (props) => {
10
- const { placeholder, disabled, errorText, multiple, children, onSelectionChange, dropdownWidth = '200px', } = props;
11
- const [dropdownOpen, setDropdownOpen] = useState(false);
12
- const [selected, setSelected] = useState([]);
13
- const [focusedIndex, setFocusedIndex] = useState(-1);
14
- const dropdownFieldRef = useRef(null);
15
- const dropdownContentsRef = useRef(null);
16
- const [dropdownPosition, setDropdownPosition] = useState(null);
17
- useComponentDidMount(() => {
18
- const clickListener = (e) => {
19
- // Listen for clicks outside the dropdown and close the dropdown
20
- if (!(dropdownFieldRef.current?.contains(e.target)
21
- || dropdownContentsRef.current?.contains(e.target))) {
22
- setDropdownOpen(false);
23
- }
24
- };
25
- document.addEventListener('click', clickListener);
26
- return () => {
27
- document.removeEventListener('click', clickListener);
28
- };
29
- });
30
- const repositionDropdown = () => {
31
- if (dropdownFieldRef.current && dropdownContentsRef.current) {
32
- setDropdownPosition(getFloatingElementPosition(dropdownFieldRef.current, dropdownContentsRef.current, {
33
- offset: 4,
34
- allowHorizontal: false,
35
- }));
36
- }
37
- ;
38
- };
39
- useResizeObserver(dropdownFieldRef.current, () => {
40
- if (dropdownOpen) {
41
- repositionDropdown();
42
- }
43
- });
44
- useEffect(() => {
45
- const onScroll = (e) => {
46
- if (dropdownContentsRef.current?.contains(e.target)) {
47
- // Don't reposition on scrolls inside the dropdown contents, so that
48
- // dropdowns can scroll internally without affecting anything
49
- return;
50
- }
51
- repositionDropdown();
52
- };
53
- const onResize = () => {
54
- repositionDropdown();
55
- };
56
- if (dropdownOpen) {
57
- // While dropdown was closed, the screen may have been resized, scrolled, and so
58
- // positioning twice helps us ensure that the position is accurate.
59
- repositionDropdown();
60
- setTimeout(() => {
61
- repositionDropdown();
62
- });
63
- document.addEventListener('scroll', onScroll, true);
64
- window.addEventListener('resize', onResize);
65
- }
66
- else {
67
- document.removeEventListener('scroll', onScroll, true);
68
- window.removeEventListener('resize', onResize);
69
- }
70
- }, [dropdownOpen]);
71
- const popupParentRef = useContext(PopupParentContext);
72
- const toggleDropdown = (e) => {
73
- e.preventDefault();
74
- e.stopPropagation();
75
- if (!disabled) {
76
- setDropdownOpen(!dropdownOpen);
77
- }
78
- };
79
- const handleItemClick = (value) => {
80
- if (!multiple) {
81
- setSelected([value]);
82
- setDropdownOpen(false);
83
- }
84
- else {
85
- setSelected(prev => prev.includes(value) ? prev.filter(sel => sel !== value) : [...prev, value]);
86
- }
87
- };
88
- const handleKeyDown = (e) => {
89
- if (!dropdownOpen) {
90
- if (e.key === 'ArrowDown' || e.key === 'Enter') {
91
- e.preventDefault();
92
- setDropdownOpen(true);
93
- setFocusedIndex(0);
94
- }
95
- return;
96
- }
97
- const items = React.Children.toArray(children).filter(child => React.isValidElement(child));
98
- switch (e.key) {
99
- case 'ArrowDown':
100
- e.preventDefault();
101
- setFocusedIndex(prev => (prev + 1) % items.length);
102
- break;
103
- case 'ArrowUp':
104
- e.preventDefault();
105
- setFocusedIndex(prev => (prev - 1 + items.length) % items.length);
106
- break;
107
- case 'Enter':
108
- e.preventDefault();
109
- if (focusedIndex >= 0 && focusedIndex < items.length) {
110
- const item = items[focusedIndex];
111
- handleItemClick(item.props.value);
112
- }
113
- break;
114
- case 'Escape':
115
- e.preventDefault();
116
- setDropdownOpen(false);
117
- break;
118
- default:
119
- break;
120
- }
121
- };
122
- useEffect(() => {
123
- onSelectionChange(selected);
124
- }, [selected]);
125
- return (_jsxs("div", { className: "ds-dropdown-wrapper", onKeyDown: handleKeyDown, role: "combobox", "aria-expanded": dropdownOpen, "aria-haspopup": "listbox", "aria-disabled": disabled, children: [_jsx(DropdownButton, { label: placeholder ?? '', disabled: disabled, error: !!errorText, pressed: dropdownOpen, onClick: toggleDropdown, ref: dropdownFieldRef }), dropdownOpen && popupParentRef.current && createPortal(_jsx("div", { role: "listbox", id: "dropdownList", className: "ds-dropdown-wrapper--items", "aria-activedescendant": focusedIndex >= 0 ? `dropdown-item-${focusedIndex}` : undefined, ref: dropdownContentsRef, style: {
126
- ...(dropdownWidth
127
- ? { minWidth: `min(100vw, ${dropdownWidth})` }
128
- : {}),
129
- ...(dropdownPosition !== null && typeof dropdownPosition !== 'undefined'
130
- ? {
131
- left: `${dropdownPosition.x}px`,
132
- ...(dropdownPosition.position === 'top'
133
- ? { bottom: dropdownPosition.bottom }
134
- : { top: `${dropdownPosition.y}px` }),
135
- maxWidth: dropdownPosition.maxWidth,
136
- maxHeight: dropdownPosition.maxHeight,
137
- width: dropdownPosition.fixedElementWidth,
138
- }
139
- : {}),
140
- }, children: React.Children.map(children, (child, index) => {
141
- if (React.isValidElement(child)) {
142
- return cloneElement(child, {
143
- selected: selected.includes(child.props.value),
144
- onSelection: handleItemClick,
145
- id: `dropdown-item-${index}`,
146
- });
147
- }
148
- return child;
149
- }) }), popupParentRef.current)] }));
150
- };
151
- //# sourceMappingURL=DropdownWrapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DropdownWrapper.js","sourceRoot":"","sources":["../../../../../../src/components/formField/inputs/dropdown/wrapper/DropdownWrapper.tsx"],"names":[],"mappings":"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"}
@@ -1,82 +0,0 @@
1
- import { useEffect, useState } from 'react';
2
- import { DropdownWrapper } from 'Components/formField/inputs/dropdown/wrapper/DropdownWrapper';
3
- import {
4
- DropdownItemRenderer,
5
- type DropdownOptionsProps,
6
- } from 'Components/formField/inputs/dropdown/items/DropdownItemRenderer';
7
-
8
- export type DropdownInputProps = {
9
- placeholder?: string;
10
- options: DropdownOptionsProps[];
11
- multiple?: boolean;
12
- disabled?: boolean;
13
- errorText?: string;
14
- onSelectionChange: (value: string[]) => void;
15
- };
16
-
17
- export const Dropdown = (props: DropdownInputProps) => {
18
- const { options, disabled, multiple, placeholder, errorText, onSelectionChange } = props;
19
-
20
- const [selectedValues, setSelectedValues] = useState<string[]>([]);
21
- const [renderedSelectContent, setRenderedSelectContent] = useState('');
22
-
23
- useEffect(() => {
24
- onSelectionChange(selectedValues);
25
-
26
- if (selectedValues.length === 0) {
27
- setRenderedSelectContent(placeholder ?? 'Select');
28
- }
29
- else if (selectedValues.length === 1) {
30
- const selectedLabel = options.find(option => option.value === selectedValues[0])?.label;
31
- if (selectedLabel) setRenderedSelectContent(selectedLabel);
32
- }
33
- else {
34
- setRenderedSelectContent(placeholder ?? `Select (${selectedValues.length})`);
35
- }
36
- }, [selectedValues, options, placeholder, onSelectionChange]);
37
-
38
- // Flatten grouped options into a single array with headers
39
- const UNGROUPED_KEY = 'Ungrouped';
40
- const groupedOptions = options.reduce((acc, option) => {
41
- const key = option.group ?? UNGROUPED_KEY;
42
- if (!acc[key]) acc[key] = [];
43
- acc[key].push(option);
44
- return acc;
45
- }, {} as Record<string, DropdownOptionsProps[]>);
46
-
47
- const flatOptions: (DropdownOptionsProps | { headerLabel: string })[] = [];
48
- Object.entries(groupedOptions).forEach(([groupName, groupItems]) => {
49
- if (Object.keys(groupedOptions).length > 1) {
50
- flatOptions.push({ headerLabel: groupName });
51
- }
52
- flatOptions.push(...groupItems);
53
- });
54
-
55
- return (
56
- <DropdownWrapper
57
- placeholder={renderedSelectContent}
58
- multiple={multiple}
59
- errorText={errorText}
60
- onSelectionChange={(value: string[]) => setSelectedValues(value)}
61
- disabled={disabled}
62
- >
63
- {flatOptions.map(item =>
64
- 'headerLabel' in item
65
- ? (
66
- <h3 key={`${item.headerLabel}-header`} className="ds-dropdown-wrapper--items--header">
67
- {item.headerLabel}
68
- </h3>
69
- )
70
- : (
71
- <DropdownItemRenderer
72
- value={item.value}
73
- header={item.header}
74
- label={item.label}
75
- icon={item.icon}
76
- key={item.value}
77
- />
78
- ),
79
- )}
80
- </DropdownWrapper>
81
- );
82
- };
@@ -1,44 +0,0 @@
1
- import React, { type RefObject } from 'react';
2
- import { Icon } from 'Components/icon/Icon';
3
- import { Button } from 'Components/button/Button';
4
-
5
- type DropdownButtonProps = {
6
- label: string;
7
- disabled?: boolean;
8
- error?: boolean;
9
- pressed?: boolean;
10
- onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
11
- ref?: RefObject<HTMLButtonElement | null>;
12
- };
13
-
14
- export const DropdownButton: React.FC<DropdownButtonProps> = (props: DropdownButtonProps) => {
15
- const {
16
- label,
17
- disabled,
18
- error,
19
- pressed,
20
- onClick,
21
- ref,
22
- } = props;
23
-
24
- const classNames = [
25
- 'ds-dropdown-select',
26
- pressed ? 'ds-dropdown-select--pressed' : '',
27
- ]
28
- .filter(Boolean)
29
- .join(' ');
30
-
31
- return (
32
- <Button
33
- error={error}
34
- type="dropdown"
35
- className={classNames}
36
- disabled={disabled}
37
- onClick={onClick}
38
- ref={ref}
39
- >
40
- <span>{label}</span>
41
- <span className="ds-dropdown-select--icon"><Icon name="chevron-down" /></span>
42
- </Button>
43
- );
44
- };
@@ -1,12 +0,0 @@
1
- .ds-dropdown-select {
2
- &--pressed {
3
- border: 1px solid var(--button-medium-secondary-default-color-border);
4
- background: var(--button-medium-secondary-active-color-background);
5
- }
6
-
7
- &--icon {
8
- margin-left: var(--spacing-small);
9
- display: inline-flex;
10
- align-items: center;
11
- }
12
- }
@@ -1,24 +0,0 @@
1
-
2
- .ds-dropdown {
3
- select {
4
- display: flex;
5
- padding: var(--spacing-small) var(--spacing-small) var(--spacing-small) var(--spacing-medium);
6
- justify-content: space-between;
7
- align-items: center;
8
- flex-shrink: 0;
9
- border-radius: var(--border-radius-small);
10
- background: var(--button-medium-secondary-default-color-background);
11
-
12
- &:focus-visible {
13
- outline: none;
14
- box-shadow: 0 0 0 3px var(--color-brand-500);
15
- background: var(--button-medium-secondary-default-color-background);
16
- }
17
-
18
- &:hover {
19
- border: 1px solid var(--color-grey-500);
20
- background: var(--color-mono-white);
21
- cursor: pointer;
22
- }
23
- }
24
- }
@@ -1,38 +0,0 @@
1
- // DropdownItemRenderer.tsx
2
- import { DropdownItem } from './dropdownItem/DropdownItem';
3
- import { DropdownMultiLineItem } from './dropdownMultiLineItem/DropdownMultiLineItem';
4
- import { type DropdownItemBaseProps } from '../wrapper/DropdownWrapper';
5
- import type { allowedIcons } from 'Components/icon/allowedIcons';
6
-
7
- export type DropdownOptionsProps = {
8
- label: string;
9
- header?: string;
10
- group?: string;
11
- icon?: keyof typeof allowedIcons;
12
- } & DropdownItemBaseProps;
13
-
14
- export const DropdownItemRenderer = (props: DropdownOptionsProps) => {
15
- const { value, label, header, icon, selected, onSelection } = props;
16
-
17
- return (
18
- header
19
- ? (
20
- <DropdownMultiLineItem
21
- value={value}
22
- label={label}
23
- header={header}
24
- selected={selected}
25
- onSelection={onSelection}
26
- />
27
- )
28
- : (
29
- <DropdownItem
30
- value={value}
31
- label={label}
32
- icon={icon}
33
- selected={selected}
34
- onSelection={onSelection}
35
- />
36
- )
37
- );
38
- };
@@ -1,53 +0,0 @@
1
- import { allowedIcons } from 'Components/icon/allowedIcons';
2
- import { Icon } from 'Components/icon/Icon';
3
- import classNames from 'classnames';
4
- import type { DropdownItemBaseProps } from 'Components/formField/inputs/dropdown/wrapper/DropdownWrapper';
5
-
6
- export type DropdownItemProps = {
7
- value: string;
8
- label?: string;
9
- icon?: keyof typeof allowedIcons;
10
- } & DropdownItemBaseProps;
11
-
12
- export const DropdownItem = (props: DropdownItemProps) => {
13
- const { label, value, icon, selected = false, onSelection, id } = props;
14
-
15
- const itemClassNames = classNames('ds-dropdown-item', {
16
- 'ds-dropdown-item--pressed': selected,
17
- });
18
-
19
- return (
20
- <div
21
- role="option"
22
- id={id}
23
- className={itemClassNames}
24
- onClick={(e) => {
25
- e.preventDefault();
26
- e.stopPropagation();
27
- return onSelection?.(value);
28
- }}
29
- tabIndex={0} // Ensure the item is focusable
30
- aria-selected={selected}
31
- onKeyDown={(e) => {
32
- if (e.key === 'Enter' || e.key === ' ') {
33
- e.preventDefault();
34
- onSelection?.(value);
35
- }
36
- }}
37
- >
38
- <div className="ds-dropdown-item--content">
39
- {icon && (
40
- <span className="ds-dropdown-item--icon">
41
- <Icon name={icon} size={16} />
42
- </span>
43
- )}
44
- <span className="ds-dropdown-item--label">{label ? label : value}</span>
45
- {selected && (
46
- <span className="ds-dropdown-item--check-icon">
47
- <Icon name="check" size={16} />
48
- </span>
49
- )}
50
- </div>
51
- </div>
52
- );
53
- };
@@ -1,62 +0,0 @@
1
-
2
- .ds-dropdown-item {
3
- display: flex;
4
- padding: var(--form-dropdown-form-drop-item-spacing-vertical)
5
- var(--form-dropdown-form-drop-item-spacing-horizontal);
6
- align-items: center;
7
- border-radius: var(--form-dropdown-form-drop-item-radius);
8
- background: var(--form-dropdown-form-drop-item-default-color-background);
9
- cursor: pointer;
10
- color: var(--form-dropdown-form-drop-item-default-color-text);
11
-
12
- /* typography/body/p1-regular */
13
- font-family: var(--type-body-p-family);
14
- font-size: var(--type-body-p-size);
15
- font-style: normal;
16
- font-weight: var(--type-body-p-weight);
17
- line-height: 150%;
18
-
19
- &:focus-visible {
20
- outline: none;
21
- box-shadow: 0 0 0 3px var(--color-brand-500);
22
- background: var(--button-medium-secondary-default-color-background);
23
- }
24
-
25
- &:hover {
26
- background: var(--form-dropdown-form-drop-item-hover-color-background);
27
- }
28
-
29
- &--pressed {
30
- background: var(--form-dropdown-form-drop-item-active-color-background);
31
- color: var(--form-dropdown-form-drop-item-active-color-text);
32
- }
33
-
34
- &--content {
35
- display: flex;
36
- justify-content: space-between;
37
- align-items: center;
38
- width: 100%;
39
- }
40
-
41
- &--icon {
42
- display: flex;
43
- align-items: center;
44
- justify-content: center;
45
- margin-right: 8px;
46
- }
47
-
48
- &--check-icon {
49
- display: flex;
50
- align-items: center;
51
- justify-content: center;
52
- margin-right: 8px;
53
- }
54
-
55
- &--label {
56
- flex: 1;
57
- }
58
-
59
- &--check {
60
- margin-left: auto;
61
- }
62
- }
@@ -1,48 +0,0 @@
1
- import classNames from 'classnames'; // Import the classNames utility
2
- import { Icon } from 'Components/icon/Icon'; // Import the Icon component
3
- import type { DropdownItemBaseProps } from 'Components/formField/inputs/dropdown/wrapper/DropdownWrapper'; // Import the base props type
4
-
5
- // Define or import the DropdownMultiLineItemProps type
6
- export type DropdownMultiLineItemProps = {
7
- header: string;
8
- label: string;
9
- } & DropdownItemBaseProps;
10
-
11
- export const DropdownMultiLineItem = (props: DropdownMultiLineItemProps) => {
12
- const { value, label, header, selected, onSelection, id } = props;
13
-
14
- const itemClassNames = classNames('ds-dropdown-item', {
15
- 'ds-dropdown-item--pressed': selected,
16
- });
17
-
18
- return (
19
- <div
20
- role="option"
21
- id={id}
22
- className={itemClassNames}
23
- onClick={() => onSelection?.(value)}
24
- tabIndex={0} // Ensure focusability
25
- aria-selected={selected}
26
- onKeyDown={(e) => {
27
- if (e.key === 'Enter' || e.key === ' ') {
28
- e.preventDefault();
29
- onSelection?.(value);
30
- }
31
- }}
32
- >
33
- <div className="ds-dropdown-item-multiline ds-dropdown-item--content">
34
- <h4 className="ds-dropdown-item-multiline--header">
35
- {header}
36
- {selected && (
37
- <span className="ds-dropdown-item-multiline--check-icon">
38
- <Icon name="check" size={16} />
39
- </span>
40
- )}
41
- </h4>
42
- <div className="ds-dropdown-item-multiline--content">
43
- {label ? label : value}
44
- </div>
45
- </div>
46
- </div>
47
- );
48
- };