@lidofinance/lido-app-ui 1.7.0 → 1.9.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 (157) hide show
  1. package/dist/cjs/button/Button.cjs +11 -3
  2. package/dist/cjs/button/Button.cjs.map +1 -1
  3. package/dist/cjs/counter/Counter.module.css.cjs +1 -1
  4. package/dist/cjs/counter/CounterSlot.cjs +22 -0
  5. package/dist/cjs/counter/CounterSlot.cjs.map +1 -0
  6. package/dist/cjs/counter/CounterSlot.module.css.cjs +6 -0
  7. package/dist/cjs/counter/CounterSlot.module.css.cjs.map +1 -0
  8. package/dist/cjs/disclaimer/Disclaimer.cjs +33 -0
  9. package/dist/cjs/disclaimer/Disclaimer.cjs.map +1 -0
  10. package/dist/cjs/disclaimer/Disclaimer.module.css.cjs +6 -0
  11. package/dist/cjs/disclaimer/Disclaimer.module.css.cjs.map +1 -0
  12. package/dist/cjs/error-page/ErrorPage.cjs +64 -0
  13. package/dist/cjs/error-page/ErrorPage.cjs.map +1 -0
  14. package/dist/cjs/error-page/ErrorPage.module.css.cjs +6 -0
  15. package/dist/cjs/error-page/ErrorPage.module.css.cjs.map +1 -0
  16. package/dist/cjs/footer/Footer.cjs +30 -0
  17. package/dist/cjs/footer/Footer.cjs.map +1 -0
  18. package/dist/cjs/footer/Footer.module.css.cjs +6 -0
  19. package/dist/cjs/footer/Footer.module.css.cjs.map +1 -0
  20. package/dist/cjs/icon-button/IconButton.cjs +8 -3
  21. package/dist/cjs/icon-button/IconButton.cjs.map +1 -1
  22. package/dist/cjs/icons/TokenIcon.cjs +9 -1
  23. package/dist/cjs/icons/TokenIcon.cjs.map +1 -1
  24. package/dist/cjs/icons/components/base/IconEtherscan.cjs +25 -0
  25. package/dist/cjs/icons/components/base/IconEtherscan.cjs.map +1 -0
  26. package/dist/cjs/icons/components/base/IconNumber.cjs +28 -0
  27. package/dist/cjs/icons/components/base/IconNumber.cjs.map +1 -0
  28. package/dist/cjs/icons/components/base/iconsMap.cjs +5 -1
  29. package/dist/cjs/icons/components/base/iconsMap.cjs.map +1 -1
  30. package/dist/cjs/identicon/Identicon.cjs +35 -3
  31. package/dist/cjs/identicon/Identicon.cjs.map +1 -1
  32. package/dist/cjs/index.cjs +12 -1
  33. package/dist/cjs/index.cjs.map +1 -1
  34. package/dist/cjs/index.css +3 -3
  35. package/dist/cjs/notification/Notification.cjs +29 -36
  36. package/dist/cjs/notification/Notification.cjs.map +1 -1
  37. package/dist/cjs/notification/Notification.module.css.cjs +1 -1
  38. package/dist/cjs/rich-input/RichInput.cjs +28 -25
  39. package/dist/cjs/rich-input/RichInput.cjs.map +1 -1
  40. package/dist/cjs/rich-input/RichInput.module.css.cjs +1 -1
  41. package/dist/cjs/skeleton/Skeleton.cjs +40 -0
  42. package/dist/cjs/skeleton/Skeleton.cjs.map +1 -0
  43. package/dist/cjs/skeleton/Skeleton.module.css.cjs +6 -0
  44. package/dist/cjs/skeleton/Skeleton.module.css.cjs.map +1 -0
  45. package/dist/cjs/tag/Tag.cjs +12 -8
  46. package/dist/cjs/tag/Tag.cjs.map +1 -1
  47. package/dist/cjs/tag/Tag.module.css.cjs +1 -1
  48. package/dist/cjs/token-selector/TokenSelector.cjs +6 -6
  49. package/dist/cjs/token-selector/TokenSelector.cjs.map +1 -1
  50. package/dist/cjs/tooltip/Tooltip.cjs +85 -48
  51. package/dist/cjs/tooltip/Tooltip.cjs.map +1 -1
  52. package/dist/cjs/tooltip/Tooltip.module.css.cjs +1 -1
  53. package/dist/cjs/tx-status/TxStatus.cjs +2 -2
  54. package/dist/cjs/tx-status/TxStatus.cjs.map +1 -1
  55. package/dist/esm/button/Button.mjs +11 -3
  56. package/dist/esm/button/Button.mjs.map +1 -1
  57. package/dist/esm/counter/Counter.module.css.mjs +1 -1
  58. package/dist/esm/counter/CounterSlot.mjs +18 -0
  59. package/dist/esm/counter/CounterSlot.mjs.map +1 -0
  60. package/dist/esm/counter/CounterSlot.module.css.mjs +4 -0
  61. package/dist/esm/counter/CounterSlot.module.css.mjs.map +1 -0
  62. package/dist/esm/disclaimer/Disclaimer.mjs +29 -0
  63. package/dist/esm/disclaimer/Disclaimer.mjs.map +1 -0
  64. package/dist/esm/disclaimer/Disclaimer.module.css.mjs +4 -0
  65. package/dist/esm/disclaimer/Disclaimer.module.css.mjs.map +1 -0
  66. package/dist/esm/error-page/ErrorPage.mjs +60 -0
  67. package/dist/esm/error-page/ErrorPage.mjs.map +1 -0
  68. package/dist/esm/error-page/ErrorPage.module.css.mjs +4 -0
  69. package/dist/esm/error-page/ErrorPage.module.css.mjs.map +1 -0
  70. package/dist/esm/footer/Footer.mjs +26 -0
  71. package/dist/esm/footer/Footer.mjs.map +1 -0
  72. package/dist/esm/footer/Footer.module.css.mjs +4 -0
  73. package/dist/esm/footer/Footer.module.css.mjs.map +1 -0
  74. package/dist/esm/icon-button/IconButton.mjs +9 -4
  75. package/dist/esm/icon-button/IconButton.mjs.map +1 -1
  76. package/dist/esm/icons/TokenIcon.mjs +9 -1
  77. package/dist/esm/icons/TokenIcon.mjs.map +1 -1
  78. package/dist/esm/icons/components/base/IconEtherscan.mjs +21 -0
  79. package/dist/esm/icons/components/base/IconEtherscan.mjs.map +1 -0
  80. package/dist/esm/icons/components/base/IconNumber.mjs +24 -0
  81. package/dist/esm/icons/components/base/IconNumber.mjs.map +1 -0
  82. package/dist/esm/icons/components/base/iconsMap.mjs +5 -1
  83. package/dist/esm/icons/components/base/iconsMap.mjs.map +1 -1
  84. package/dist/esm/identicon/Identicon.mjs +15 -2
  85. package/dist/esm/identicon/Identicon.mjs.map +1 -1
  86. package/dist/esm/index.css +3 -3
  87. package/dist/esm/index.mjs +7 -1
  88. package/dist/esm/index.mjs.map +1 -1
  89. package/dist/esm/notification/Notification.mjs +31 -37
  90. package/dist/esm/notification/Notification.mjs.map +1 -1
  91. package/dist/esm/notification/Notification.module.css.mjs +1 -1
  92. package/dist/esm/rich-input/RichInput.mjs +28 -25
  93. package/dist/esm/rich-input/RichInput.mjs.map +1 -1
  94. package/dist/esm/rich-input/RichInput.module.css.mjs +1 -1
  95. package/dist/esm/skeleton/Skeleton.mjs +36 -0
  96. package/dist/esm/skeleton/Skeleton.mjs.map +1 -0
  97. package/dist/esm/skeleton/Skeleton.module.css.mjs +4 -0
  98. package/dist/esm/skeleton/Skeleton.module.css.mjs.map +1 -0
  99. package/dist/esm/tag/Tag.mjs +13 -9
  100. package/dist/esm/tag/Tag.mjs.map +1 -1
  101. package/dist/esm/tag/Tag.module.css.mjs +1 -1
  102. package/dist/esm/token-selector/TokenSelector.mjs +6 -6
  103. package/dist/esm/token-selector/TokenSelector.mjs.map +1 -1
  104. package/dist/esm/tooltip/Tooltip.mjs +87 -50
  105. package/dist/esm/tooltip/Tooltip.mjs.map +1 -1
  106. package/dist/esm/tooltip/Tooltip.module.css.mjs +1 -1
  107. package/dist/esm/tx-status/TxStatus.mjs +2 -2
  108. package/dist/esm/tx-status/TxStatus.mjs.map +1 -1
  109. package/dist/index.css +3 -3
  110. package/dist/styles/typography-mixins.css +8 -0
  111. package/dist/types/button/Button.d.ts +14 -2
  112. package/dist/types/button/Button.d.ts.map +1 -1
  113. package/dist/types/counter/CounterSlot.d.ts +8 -0
  114. package/dist/types/counter/CounterSlot.d.ts.map +1 -0
  115. package/dist/types/disclaimer/Disclaimer.d.ts +9 -0
  116. package/dist/types/disclaimer/Disclaimer.d.ts.map +1 -0
  117. package/dist/types/disclaimer/index.d.ts +3 -0
  118. package/dist/types/disclaimer/index.d.ts.map +1 -0
  119. package/dist/types/error-page/ErrorPage.d.ts +20 -0
  120. package/dist/types/error-page/ErrorPage.d.ts.map +1 -0
  121. package/dist/types/error-page/index.d.ts +3 -0
  122. package/dist/types/error-page/index.d.ts.map +1 -0
  123. package/dist/types/footer/Footer.d.ts +7 -0
  124. package/dist/types/footer/Footer.d.ts.map +1 -0
  125. package/dist/types/footer/index.d.ts +3 -0
  126. package/dist/types/footer/index.d.ts.map +1 -0
  127. package/dist/types/icon-button/IconButton.d.ts +4 -1
  128. package/dist/types/icon-button/IconButton.d.ts.map +1 -1
  129. package/dist/types/icons/TokenIcon.d.ts +1 -1
  130. package/dist/types/icons/TokenIcon.d.ts.map +1 -1
  131. package/dist/types/icons/components/base/IconEtherscan.d.ts +3 -0
  132. package/dist/types/icons/components/base/IconEtherscan.d.ts.map +1 -0
  133. package/dist/types/icons/components/base/IconNumber.d.ts +3 -0
  134. package/dist/types/icons/components/base/IconNumber.d.ts.map +1 -0
  135. package/dist/types/icons/components/base/iconsMap.d.ts +2 -0
  136. package/dist/types/icons/components/base/iconsMap.d.ts.map +1 -1
  137. package/dist/types/icons/components/base/index.d.ts +2 -0
  138. package/dist/types/icons/components/base/index.d.ts.map +1 -1
  139. package/dist/types/identicon/Identicon.d.ts.map +1 -1
  140. package/dist/types/index.d.ts +4 -0
  141. package/dist/types/index.d.ts.map +1 -1
  142. package/dist/types/notification/Notification.d.ts +5 -11
  143. package/dist/types/notification/Notification.d.ts.map +1 -1
  144. package/dist/types/notification/index.d.ts +2 -2
  145. package/dist/types/notification/index.d.ts.map +1 -1
  146. package/dist/types/rich-input/RichInput.d.ts +4 -2
  147. package/dist/types/rich-input/RichInput.d.ts.map +1 -1
  148. package/dist/types/skeleton/Skeleton.d.ts +9 -0
  149. package/dist/types/skeleton/Skeleton.d.ts.map +1 -0
  150. package/dist/types/skeleton/index.d.ts +2 -0
  151. package/dist/types/skeleton/index.d.ts.map +1 -0
  152. package/dist/types/tag/Tag.d.ts +4 -1
  153. package/dist/types/tag/Tag.d.ts.map +1 -1
  154. package/dist/types/tooltip/Tooltip.d.ts +1 -1
  155. package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
  156. package/dist/types/tx-status/TxStatus.d.ts.map +1 -1
  157. package/package.json +1 -1
@@ -14,14 +14,17 @@ const MaxTag = _ref => {
14
14
  let {
15
15
  onClick,
16
16
  className,
17
+ disabled,
17
18
  ...rest
18
19
  } = _ref;
19
20
  return /*#__PURE__*/jsxRuntime.jsx(Tag.Tag, {
20
21
  role: "button",
21
- tabIndex: 0,
22
- className: cn(RichInput_module.maxTag, className),
23
- onClick: onClick,
22
+ tabIndex: disabled ? -1 : 0,
23
+ "aria-disabled": disabled || undefined,
24
+ className: cn(RichInput_module.maxTag, disabled && RichInput_module.maxTagDisabled, className),
25
+ onClick: disabled ? undefined : onClick,
24
26
  onKeyDown: event => {
27
+ if (disabled) return;
25
28
  if (event.key !== 'Enter' && event.key !== ' ') return;
26
29
  event.preventDefault();
27
30
  onClick?.(event);
@@ -48,8 +51,10 @@ const RichInput = _ref2 => {
48
51
  balance,
49
52
  tokenSelector,
50
53
  error,
54
+ errorText,
51
55
  showMaxButton = true,
52
56
  onMaxClick,
57
+ maxDisabled,
53
58
  maxTooltip,
54
59
  onChange,
55
60
  className,
@@ -61,9 +66,8 @@ const RichInput = _ref2 => {
61
66
  const inputRef = react.useRef(null);
62
67
  const fallbackId = react.useId();
63
68
  const inputId = id ?? fallbackId;
64
- const hasError = Boolean(error);
65
- const errorMessage = typeof error === 'boolean' ? null : error;
66
- const showErrorMessage = errorMessage != null && errorMessage !== '';
69
+ const hasError = !!error;
70
+ const showErrorMessage = !!errorText;
67
71
  const errorId = `${inputId}-error`;
68
72
  const showMax = showMaxButton && !disabled;
69
73
  const hasBottomRow = secondaryValue != null || balance != null || showMax;
@@ -92,21 +96,18 @@ const RichInput = _ref2 => {
92
96
  }
93
97
  inputRef.current?.focus();
94
98
  };
95
- return (
96
- /*#__PURE__*/
97
- // Clicking the padding around the field focuses it — a pointer convenience
98
- // on top of the real control. Keyboard users tab straight to the input.
99
- // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
100
- jsxRuntime.jsxs("div", {
101
- className: cn(RichInput_module.root, hasError && RichInput_module.error, className),
99
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
100
+ className: cn(RichInput_module.root, className),
101
+ "data-testid": dataTestId?.root,
102
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
103
+ className: cn(RichInput_module.card, hasError && RichInput_module.error),
102
104
  onClick: handleRootClick,
103
- "data-testid": dataTestId?.root,
104
105
  children: [label != null ? /*#__PURE__*/jsxRuntime.jsxs("span", {
105
106
  className: RichInput_module.labelRow,
106
107
  children: [/*#__PURE__*/jsxRuntime.jsx("label", {
108
+ "data-testid": dataTestId?.label,
107
109
  className: RichInput_module.label,
108
110
  htmlFor: inputId,
109
- "data-testid": dataTestId?.label,
110
111
  children: label
111
112
  }), labelTooltip != null ? /*#__PURE__*/jsxRuntime.jsx(Tooltip.Tooltip, {
112
113
  content: labelTooltip,
@@ -135,8 +136,8 @@ const RichInput = _ref2 => {
135
136
  }), hasBottomRow ? /*#__PURE__*/jsxRuntime.jsxs("div", {
136
137
  className: RichInput_module.bottomRow,
137
138
  children: [secondaryValue != null ? /*#__PURE__*/jsxRuntime.jsx("span", {
138
- className: RichInput_module.secondary,
139
139
  "data-testid": dataTestId?.secondaryValue,
140
+ className: RichInput_module.secondary,
140
141
  children: secondaryValue
141
142
  }) : null, /*#__PURE__*/jsxRuntime.jsxs("div", {
142
143
  className: RichInput_module.balanceGroup,
@@ -149,24 +150,26 @@ const RichInput = _ref2 => {
149
150
  position: "bottom-left",
150
151
  width: 240,
151
152
  children: /*#__PURE__*/jsxRuntime.jsx(MaxTag, {
152
- onClick: onMaxClick,
153
153
  "data-testid": dataTestId?.maxButton,
154
+ onClick: onMaxClick,
155
+ disabled: maxDisabled,
154
156
  children: "Max"
155
157
  })
156
158
  }) : /*#__PURE__*/jsxRuntime.jsx(MaxTag, {
157
- onClick: onMaxClick,
158
159
  "data-testid": dataTestId?.maxButton,
160
+ onClick: onMaxClick,
161
+ disabled: maxDisabled,
159
162
  children: "Max"
160
163
  }) : null]
161
164
  })]
162
- }) : null, showErrorMessage ? /*#__PURE__*/jsxRuntime.jsx("div", {
163
- id: errorId,
164
- className: RichInput_module.errorMessage,
165
- "data-testid": dataTestId?.error,
166
- children: errorMessage
167
165
  }) : null]
168
- })
169
- );
166
+ }), showErrorMessage ? /*#__PURE__*/jsxRuntime.jsx("div", {
167
+ id: errorId,
168
+ className: RichInput_module.errorMessage,
169
+ "data-testid": dataTestId?.error,
170
+ children: errorText
171
+ }) : null]
172
+ });
170
173
  };
171
174
 
172
175
  exports.RichInput = RichInput;
@@ -1 +1 @@
1
- {"version":3,"file":"RichInput.cjs","sources":["../../../src/rich-input/RichInput.tsx"],"sourcesContent":["import {\n useId,\n useRef,\n type ChangeEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type MouseEventHandler,\n type ReactNode,\n} from 'react'\n\nimport cn from 'classnames'\nimport { IconInfo } from '../icons'\nimport { Tag, type TagProps } from '../tag'\nimport { Tooltip } from '../tooltip'\n\nimport styles from './RichInput.module.css'\n\nexport type RichInputDataTestId = {\n root?: string\n label?: string\n input?: string\n secondaryValue?: string\n balance?: string\n maxButton?: string\n error?: string\n}\n\nexport type RichInputProps = InputHTMLAttributes<HTMLInputElement> & {\n label?: ReactNode\n labelTooltip?: ReactNode\n secondaryValue?: ReactNode\n balance?: ReactNode\n tokenSelector?: ReactNode\n error?: ReactNode | boolean\n showMaxButton?: boolean\n onMaxClick?: MouseEventHandler<HTMLSpanElement>\n maxTooltip?: ReactNode\n dataTestId?: RichInputDataTestId\n}\n\nconst MaxTag = ({ onClick, className, ...rest }: TagProps) => (\n <Tag\n role='button'\n tabIndex={0}\n className={cn(styles.maxTag, className)}\n onClick={onClick}\n onKeyDown={(event: KeyboardEvent<HTMLSpanElement>) => {\n if (event.key !== 'Enter' && event.key !== ' ') return\n event.preventDefault()\n onClick?.(event as unknown as MouseEvent<HTMLSpanElement>)\n }}\n {...rest}\n />\n)\n\n// Keep only digits and a single decimal point; comma is treated as the\n// decimal separator and normalized to a dot (en-US canonical form).\nconst sanitizeDecimal = (raw: string): string => {\n const normalized = raw.replace(/,/g, '.').replace(/[^\\d.]/g, '')\n const firstDot = normalized.indexOf('.')\n if (firstDot === -1) return normalized\n const head = normalized.slice(0, firstDot + 1)\n const tail = normalized.slice(firstDot + 1).replace(/\\./g, '')\n return head + tail\n}\n\nexport const RichInput = ({\n label,\n labelTooltip,\n secondaryValue,\n balance,\n tokenSelector,\n error,\n showMaxButton = true,\n onMaxClick,\n maxTooltip,\n onChange,\n className,\n id,\n disabled,\n dataTestId,\n ...inputProps\n}: RichInputProps) => {\n const inputRef = useRef<HTMLInputElement>(null)\n const fallbackId = useId()\n const inputId = id ?? fallbackId\n\n const hasError = Boolean(error)\n const errorMessage = typeof error === 'boolean' ? null : error\n const showErrorMessage = errorMessage != null && errorMessage !== ''\n const errorId = `${inputId}-error`\n const showMax = showMaxButton && !disabled\n const hasBottomRow = secondaryValue != null || balance != null || showMax\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const { value: rawValue, selectionStart } = event.target\n const sanitized = sanitizeDecimal(rawValue)\n\n if (sanitized !== rawValue) {\n // Rewrite the DOM value before bubbling up so the parent (controlled\n // or not) only ever sees the clean value and no invalid char sticks.\n const removed = rawValue.length - sanitized.length\n event.target.value = sanitized\n if (selectionStart != null) {\n const caret = Math.max(0, selectionStart - removed)\n event.target.setSelectionRange(caret, caret)\n }\n }\n\n onChange?.(event)\n }\n\n const handleRootClick = (event: MouseEvent<HTMLDivElement>) => {\n if (!(event.target instanceof Element)) return\n if (event.target.closest('button, input, label, [role=\"listbox\"]')) {\n return\n }\n inputRef.current?.focus()\n }\n\n return (\n // Clicking the padding around the field focuses it — a pointer convenience\n // on top of the real control. Keyboard users tab straight to the input.\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <div\n className={cn(styles.root, hasError && styles.error, className)}\n onClick={handleRootClick}\n data-testid={dataTestId?.root}\n >\n {label != null ? (\n <span className={styles.labelRow}>\n <label\n className={styles.label}\n htmlFor={inputId}\n data-testid={dataTestId?.label}\n >\n {label}\n </label>\n {labelTooltip != null ? (\n <Tooltip content={labelTooltip}>\n <IconInfo\n className={styles.labelTooltipIcon}\n aria-hidden='true'\n />\n </Tooltip>\n ) : null}\n </span>\n ) : null}\n <div className={styles.amountRow}>\n <input\n ref={inputRef}\n id={inputId}\n className={styles.input}\n inputMode='decimal'\n disabled={disabled}\n aria-invalid={hasError || undefined}\n aria-describedby={showErrorMessage ? errorId : undefined}\n onChange={handleChange}\n data-testid={dataTestId?.input}\n {...inputProps}\n />\n {tokenSelector != null ? (\n <div className={styles.token}>{tokenSelector}</div>\n ) : null}\n </div>\n {hasBottomRow ? (\n <div className={styles.bottomRow}>\n {secondaryValue != null ? (\n <span\n className={styles.secondary}\n data-testid={dataTestId?.secondaryValue}\n >\n {secondaryValue}\n </span>\n ) : null}\n <div className={styles.balanceGroup}>\n {balance != null ? (\n <span\n className={styles.balance}\n data-testid={dataTestId?.balance}\n >\n {balance}\n </span>\n ) : null}\n {showMax ? (\n maxTooltip != null ? (\n <Tooltip\n content={maxTooltip}\n position='bottom-left'\n width={240}\n >\n <MaxTag\n onClick={onMaxClick}\n data-testid={dataTestId?.maxButton}\n >\n Max\n </MaxTag>\n </Tooltip>\n ) : (\n <MaxTag\n onClick={onMaxClick}\n data-testid={dataTestId?.maxButton}\n >\n Max\n </MaxTag>\n )\n ) : null}\n </div>\n </div>\n ) : null}\n {showErrorMessage ? (\n <div\n id={errorId}\n className={styles.errorMessage}\n data-testid={dataTestId?.error}\n >\n {errorMessage}\n </div>\n ) : null}\n </div>\n )\n}\n"],"names":["MaxTag","_ref","onClick","className","rest","_jsx","Tag","role","tabIndex","cn","styles","maxTag","onKeyDown","event","key","preventDefault","sanitizeDecimal","raw","normalized","replace","firstDot","indexOf","head","slice","tail","RichInput","_ref2","label","labelTooltip","secondaryValue","balance","tokenSelector","error","showMaxButton","onMaxClick","maxTooltip","onChange","id","disabled","dataTestId","inputProps","inputRef","useRef","fallbackId","useId","inputId","hasError","Boolean","errorMessage","showErrorMessage","errorId","showMax","hasBottomRow","handleChange","value","rawValue","selectionStart","target","sanitized","removed","length","caret","Math","max","setSelectionRange","handleRootClick","Element","closest","current","focus","_jsxs","root","children","labelRow","htmlFor","Tooltip","content","IconInfo","labelTooltipIcon","amountRow","ref","input","inputMode","undefined","token","bottomRow","secondary","balanceGroup","position","width","maxButton"],"mappings":"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"}
1
+ {"version":3,"file":"RichInput.cjs","sources":["../../../src/rich-input/RichInput.tsx"],"sourcesContent":["import {\n useId,\n useRef,\n type ChangeEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type MouseEventHandler,\n type ReactNode,\n} from 'react'\n\nimport cn from 'classnames'\nimport { IconInfo } from '../icons'\nimport { Tag, type TagProps } from '../tag'\nimport { Tooltip } from '../tooltip'\n\nimport styles from './RichInput.module.css'\n\nexport type RichInputDataTestId = {\n root?: string\n label?: string\n input?: string\n secondaryValue?: string\n balance?: string\n maxButton?: string\n error?: string\n}\n\nexport type RichInputProps = InputHTMLAttributes<HTMLInputElement> & {\n label?: ReactNode\n labelTooltip?: ReactNode\n secondaryValue?: ReactNode\n balance?: ReactNode\n tokenSelector?: ReactNode\n error?: boolean\n errorText?: ReactNode\n showMaxButton?: boolean\n onMaxClick?: MouseEventHandler<HTMLSpanElement>\n maxDisabled?: boolean\n maxTooltip?: ReactNode\n dataTestId?: RichInputDataTestId\n}\n\nconst MaxTag = ({\n onClick,\n className,\n disabled,\n ...rest\n}: TagProps & { disabled?: boolean }) => (\n <Tag\n role='button'\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n className={cn(styles.maxTag, disabled && styles.maxTagDisabled, className)}\n onClick={disabled ? undefined : onClick}\n onKeyDown={(event: KeyboardEvent<HTMLSpanElement>) => {\n if (disabled) return\n if (event.key !== 'Enter' && event.key !== ' ') return\n event.preventDefault()\n onClick?.(event as unknown as MouseEvent<HTMLSpanElement>)\n }}\n {...rest}\n />\n)\n\n// Keep only digits and a single decimal point; comma is treated as the\n// decimal separator and normalized to a dot (en-US canonical form).\nconst sanitizeDecimal = (raw: string): string => {\n const normalized = raw.replace(/,/g, '.').replace(/[^\\d.]/g, '')\n const firstDot = normalized.indexOf('.')\n if (firstDot === -1) return normalized\n const head = normalized.slice(0, firstDot + 1)\n const tail = normalized.slice(firstDot + 1).replace(/\\./g, '')\n return head + tail\n}\n\nexport const RichInput = ({\n label,\n labelTooltip,\n secondaryValue,\n balance,\n tokenSelector,\n error,\n errorText,\n showMaxButton = true,\n onMaxClick,\n maxDisabled,\n maxTooltip,\n onChange,\n className,\n id,\n disabled,\n dataTestId,\n ...inputProps\n}: RichInputProps) => {\n const inputRef = useRef<HTMLInputElement>(null)\n const fallbackId = useId()\n const inputId = id ?? fallbackId\n\n const hasError = !!error\n const showErrorMessage = !!errorText\n const errorId = `${inputId}-error`\n const showMax = showMaxButton && !disabled\n const hasBottomRow = secondaryValue != null || balance != null || showMax\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const { value: rawValue, selectionStart } = event.target\n const sanitized = sanitizeDecimal(rawValue)\n\n if (sanitized !== rawValue) {\n // Rewrite the DOM value before bubbling up so the parent (controlled\n // or not) only ever sees the clean value and no invalid char sticks.\n const removed = rawValue.length - sanitized.length\n event.target.value = sanitized\n if (selectionStart != null) {\n const caret = Math.max(0, selectionStart - removed)\n event.target.setSelectionRange(caret, caret)\n }\n }\n\n onChange?.(event)\n }\n\n const handleRootClick = (event: MouseEvent<HTMLDivElement>) => {\n if (!(event.target instanceof Element)) return\n if (event.target.closest('button, input, label, [role=\"listbox\"]')) {\n return\n }\n inputRef.current?.focus()\n }\n\n return (\n <div className={cn(styles.root, className)} data-testid={dataTestId?.root}>\n {/*\n Clicking the padding around the field focuses it — a pointer convenience\n on top of the real control. Keyboard users tab straight to the input.\n */}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n <div\n className={cn(styles.card, hasError && styles.error)}\n onClick={handleRootClick}\n >\n {label != null ? (\n <span className={styles.labelRow}>\n <label\n data-testid={dataTestId?.label}\n className={styles.label}\n htmlFor={inputId}\n >\n {label}\n </label>\n {labelTooltip != null ? (\n <Tooltip content={labelTooltip}>\n <IconInfo\n className={styles.labelTooltipIcon}\n aria-hidden='true'\n />\n </Tooltip>\n ) : null}\n </span>\n ) : null}\n <div className={styles.amountRow}>\n <input\n ref={inputRef}\n id={inputId}\n className={styles.input}\n inputMode='decimal'\n disabled={disabled}\n aria-invalid={hasError || undefined}\n aria-describedby={showErrorMessage ? errorId : undefined}\n onChange={handleChange}\n data-testid={dataTestId?.input}\n {...inputProps}\n />\n {tokenSelector != null ? (\n <div className={styles.token}>{tokenSelector}</div>\n ) : null}\n </div>\n {hasBottomRow ? (\n <div className={styles.bottomRow}>\n {secondaryValue != null ? (\n <span\n data-testid={dataTestId?.secondaryValue}\n className={styles.secondary}\n >\n {secondaryValue}\n </span>\n ) : null}\n <div className={styles.balanceGroup}>\n {balance != null ? (\n <span\n className={styles.balance}\n data-testid={dataTestId?.balance}\n >\n {balance}\n </span>\n ) : null}\n {showMax ? (\n maxTooltip != null ? (\n <Tooltip\n content={maxTooltip}\n position='bottom-left'\n width={240}\n >\n <MaxTag\n data-testid={dataTestId?.maxButton}\n onClick={onMaxClick}\n disabled={maxDisabled}\n >\n Max\n </MaxTag>\n </Tooltip>\n ) : (\n <MaxTag\n data-testid={dataTestId?.maxButton}\n onClick={onMaxClick}\n disabled={maxDisabled}\n >\n Max\n </MaxTag>\n )\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n {showErrorMessage ? (\n <div\n id={errorId}\n className={styles.errorMessage}\n data-testid={dataTestId?.error}\n >\n {errorText}\n </div>\n ) : null}\n </div>\n )\n}\n"],"names":["MaxTag","_ref","onClick","className","disabled","rest","_jsx","Tag","role","tabIndex","undefined","cn","styles","maxTag","maxTagDisabled","onKeyDown","event","key","preventDefault","sanitizeDecimal","raw","normalized","replace","firstDot","indexOf","head","slice","tail","RichInput","_ref2","label","labelTooltip","secondaryValue","balance","tokenSelector","error","errorText","showMaxButton","onMaxClick","maxDisabled","maxTooltip","onChange","id","dataTestId","inputProps","inputRef","useRef","fallbackId","useId","inputId","hasError","showErrorMessage","errorId","showMax","hasBottomRow","handleChange","value","rawValue","selectionStart","target","sanitized","removed","length","caret","Math","max","setSelectionRange","handleRootClick","Element","closest","current","focus","_jsxs","root","children","card","labelRow","htmlFor","Tooltip","content","IconInfo","labelTooltipIcon","amountRow","ref","input","inputMode","token","bottomRow","secondary","balanceGroup","position","width","maxButton","errorMessage"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const styles = {"root":"RichInput-module_root__2RrAF","error":"RichInput-module_error__iuacN","input":"RichInput-module_input__G69-P","labelRow":"RichInput-module_labelRow__bh0KF","label":"RichInput-module_label__FNaLW","labelTooltipIcon":"RichInput-module_labelTooltipIcon__A4QBG","amountRow":"RichInput-module_amountRow__GWqIG","token":"RichInput-module_token__qSEX1","bottomRow":"RichInput-module_bottomRow__2SnLx","secondary":"RichInput-module_secondary__pftTQ","balanceGroup":"RichInput-module_balanceGroup__q4-lT","balance":"RichInput-module_balance__y-Ukz","errorMessage":"RichInput-module_errorMessage__axdve","maxTag":"RichInput-module_maxTag__gQd1Y"};
3
+ const styles = {"root":"RichInput-module_root__2RrAF","card":"RichInput-module_card__wDqv1","error":"RichInput-module_error__iuacN","input":"RichInput-module_input__G69-P","labelRow":"RichInput-module_labelRow__bh0KF","label":"RichInput-module_label__FNaLW","labelTooltipIcon":"RichInput-module_labelTooltipIcon__A4QBG","amountRow":"RichInput-module_amountRow__GWqIG","token":"RichInput-module_token__qSEX1","bottomRow":"RichInput-module_bottomRow__2SnLx","secondary":"RichInput-module_secondary__pftTQ","balanceGroup":"RichInput-module_balanceGroup__q4-lT","balance":"RichInput-module_balance__y-Ukz","balanceError":"RichInput-module_balanceError__pwA4q","errorMessage":"RichInput-module_errorMessage__axdve","maxTag":"RichInput-module_maxTag__gQd1Y","maxTagDisabled":"RichInput-module_maxTagDisabled__VD8AE"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=RichInput.module.css.cjs.map
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const cn = require('classnames');
6
+ const Skeleton_module = require('./Skeleton.module.css.cjs');
7
+ const jsxRuntime = require('react/jsx-runtime');
8
+
9
+ const Skeleton = _ref => {
10
+ let {
11
+ variant = 'block',
12
+ lines = 1,
13
+ fill = false,
14
+ className,
15
+ style,
16
+ ...rest
17
+ } = _ref;
18
+ if (variant === 'text' && lines > 1) {
19
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
20
+ className: cn(Skeleton_module.pulse, Skeleton_module.textStack, fill && Skeleton_module.fill, className),
21
+ style: style,
22
+ "aria-hidden": "true",
23
+ ...rest,
24
+ children: Array.from({
25
+ length: lines
26
+ }, (_, index) => /*#__PURE__*/jsxRuntime.jsx("div", {
27
+ className: cn(Skeleton_module.shape, Skeleton_module.text)
28
+ }, index))
29
+ });
30
+ }
31
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
32
+ className: cn(Skeleton_module.pulse, Skeleton_module.shape, Skeleton_module[variant], fill && Skeleton_module.fill, className),
33
+ style: style,
34
+ "aria-hidden": "true",
35
+ ...rest
36
+ });
37
+ };
38
+
39
+ exports.Skeleton = Skeleton;
40
+ //# sourceMappingURL=Skeleton.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.cjs","sources":["../../../src/skeleton/Skeleton.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Skeleton.module.css'\n\nexport type SkeletonVariant = 'text' | 'block' | 'circle'\n\nexport type SkeletonProps = HTMLAttributes<HTMLDivElement> & {\n variant?: SkeletonVariant\n lines?: number\n fill?: boolean\n}\n\nexport const Skeleton = ({\n variant = 'block',\n lines = 1,\n fill = false,\n className,\n style,\n ...rest\n}: SkeletonProps) => {\n if (variant === 'text' && lines > 1) {\n return (\n <div\n className={cn(\n styles.pulse,\n styles.textStack,\n fill && styles.fill,\n className,\n )}\n style={style}\n aria-hidden='true'\n {...rest}\n >\n {Array.from({ length: lines }, (_, index) => (\n <div key={index} className={cn(styles.shape, styles.text)} />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\n styles.pulse,\n styles.shape,\n styles[variant],\n fill && styles.fill,\n className,\n )}\n style={style}\n aria-hidden='true'\n {...rest}\n />\n )\n}\n"],"names":["Skeleton","_ref","variant","lines","fill","className","style","rest","_jsx","cn","styles","pulse","textStack","children","Array","from","length","_","index","shape","text"],"mappings":";;;;;;;;AAcaA,MAAAA,QAAQ,GAAGC,IAAA,IAOH;EAAA,IAPI;AACvBC,IAAAA,OAAO,GAAG,OAAO;AACjBC,IAAAA,KAAK,GAAG,CAAC;AACTC,IAAAA,IAAI,GAAG,KAAK;IACZC,SAAS;IACTC,KAAK;IACL,GAAGC,IAAAA;AACU,GAAC,GAAAN,IAAA,CAAA;AACd,EAAA,IAAIC,OAAO,KAAK,MAAM,IAAIC,KAAK,GAAG,CAAC,EAAE;AACnC,IAAA,oBACEK,cAAA,CAAA,KAAA,EAAA;AACEH,MAAAA,SAAS,EAAEI,EAAE,CACXC,eAAM,CAACC,KAAK,EACZD,eAAM,CAACE,SAAS,EAChBR,IAAI,IAAIM,eAAM,CAACN,IAAI,EACnBC,SACF,CAAE;AACFC,MAAAA,KAAK,EAAEA,KAAM;AACb,MAAA,aAAA,EAAY,MAAM;AAAA,MAAA,GACdC,IAAI;AAAAM,MAAAA,QAAA,EAEPC,KAAK,CAACC,IAAI,CAAC;AAAEC,QAAAA,MAAM,EAAEb,KAAAA;AAAM,OAAC,EAAE,CAACc,CAAC,EAAEC,KAAK,kBACtCV,cAAA,CAAA,KAAA,EAAA;QAAiBH,SAAS,EAAEI,EAAE,CAACC,eAAM,CAACS,KAAK,EAAET,eAAM,CAACU,IAAI,CAAA;AAAE,OAAA,EAAhDF,KAAkD,CAC7D,CAAA;AAAC,KACC,CAAC,CAAA;AAEV,GAAA;AAEA,EAAA,oBACEV,cAAA,CAAA,KAAA,EAAA;IACEH,SAAS,EAAEI,EAAE,CACXC,eAAM,CAACC,KAAK,EACZD,eAAM,CAACS,KAAK,EACZT,eAAM,CAACR,OAAO,CAAC,EACfE,IAAI,IAAIM,eAAM,CAACN,IAAI,EACnBC,SACF,CAAE;AACFC,IAAAA,KAAK,EAAEA,KAAM;AACb,IAAA,aAAA,EAAY,MAAM;IAAA,GACdC,IAAAA;AAAI,GACT,CAAC,CAAA;AAEN;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const styles = {"pulse":"Skeleton-module_pulse__DpApf","shape":"Skeleton-module_shape__XlLlr","text":"Skeleton-module_text__vCxjS","block":"Skeleton-module_block__wbK1r","circle":"Skeleton-module_circle__0yf54","fill":"Skeleton-module_fill__YJkSg","textStack":"Skeleton-module_textStack__82OYo"};
4
+
5
+ module.exports = styles;
6
+ //# sourceMappingURL=Skeleton.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -10,30 +10,34 @@ const IconCross = require('../icons/components/base/IconCross.cjs');
10
10
  const Tag = _ref => {
11
11
  let {
12
12
  variant = 'default',
13
+ active = false,
13
14
  icon,
15
+ iconPosition = 'left',
14
16
  onClose,
15
17
  className,
16
18
  children,
17
19
  dataTestId,
18
20
  ...rest
19
21
  } = _ref;
22
+ const iconElement = icon != null ? /*#__PURE__*/jsxRuntime.jsx("span", {
23
+ className: Tag_module.icon,
24
+ "aria-hidden": "true",
25
+ "data-testid": dataTestId?.icon,
26
+ children: icon
27
+ }) : null;
20
28
  return /*#__PURE__*/jsxRuntime.jsxs("span", {
21
- className: cn(Tag_module.tag, Tag_module[variant], className),
29
+ className: cn(Tag_module.tag, Tag_module[variant], rest.onClick && Tag_module.interactive, active && Tag_module.isActive, className),
22
30
  "data-testid": dataTestId?.root,
23
31
  ...rest,
24
- children: [icon != null ? /*#__PURE__*/jsxRuntime.jsx("span", {
25
- className: Tag_module.icon,
26
- "aria-hidden": "true",
27
- "data-testid": dataTestId?.icon,
28
- children: icon
29
- }) : null, children, onClose ? /*#__PURE__*/jsxRuntime.jsx("button", {
32
+ children: [iconPosition === 'left' ? iconElement : null, children, iconPosition === 'right' ? iconElement : null, onClose ? /*#__PURE__*/jsxRuntime.jsx("button", {
30
33
  type: "button",
31
34
  className: Tag_module.closeButton,
32
35
  "aria-label": "Remove",
33
36
  onClick: onClose,
34
37
  "data-testid": dataTestId?.closeButton,
35
38
  children: /*#__PURE__*/jsxRuntime.jsx(IconCross.IconCross, {
36
- "aria-hidden": "true"
39
+ "aria-hidden": "true",
40
+ className: Tag_module.crossIcon
37
41
  })
38
42
  }) : null]
39
43
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.cjs","sources":["../../../src/tag/Tag.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport { IconCross } from '../icons'\nimport styles from './Tag.module.css'\n\nexport type TagVariant =\n | 'default'\n | 'neutral'\n | 'success'\n | 'warning'\n | 'error'\n | 'info'\n | 'active'\n | 'action'\n\nexport type TagDataTestId = {\n root?: string\n icon?: string\n closeButton?: string\n}\n\nexport type TagProps = HTMLAttributes<HTMLSpanElement> & {\n variant?: TagVariant\n icon?: ReactNode\n onClose?: () => void\n dataTestId?: TagDataTestId\n}\n\nexport const Tag = ({\n variant = 'default',\n icon,\n onClose,\n className,\n children,\n dataTestId,\n ...rest\n}: TagProps) => (\n <span\n className={cn(styles.tag, styles[variant], className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n {icon != null ? (\n <span\n className={styles.icon}\n aria-hidden='true'\n data-testid={dataTestId?.icon}\n >\n {icon}\n </span>\n ) : null}\n {children}\n {onClose ? (\n <button\n type='button'\n className={styles.closeButton}\n aria-label='Remove'\n onClick={onClose}\n data-testid={dataTestId?.closeButton}\n >\n <IconCross aria-hidden='true' />\n </button>\n ) : null}\n </span>\n)\n"],"names":["Tag","_ref","variant","icon","onClose","className","children","dataTestId","rest","_jsxs","cn","styles","tag","root","_jsx","type","closeButton","onClick","IconCross"],"mappings":";;;;;;;;;AA8BO,MAAMA,GAAG,GAAGC,IAAA,IAAA;EAAA,IAAC;AAClBC,IAAAA,OAAO,GAAG,SAAS;IACnBC,IAAI;IACJC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,UAAU;IACV,GAAGC,IAAAA;AACK,GAAC,GAAAP,IAAA,CAAA;AAAA,EAAA,oBACTQ,eAAA,CAAA,MAAA,EAAA;AACEJ,IAAAA,SAAS,EAAEK,EAAE,CAACC,UAAM,CAACC,GAAG,EAAED,UAAM,CAACT,OAAO,CAAC,EAAEG,SAAS,CAAE;IACtD,aAAaE,EAAAA,UAAU,EAAEM,IAAK;AAAA,IAAA,GAC1BL,IAAI;AAAAF,IAAAA,QAAA,EAEPH,CAAAA,IAAI,IAAI,IAAI,gBACXW,cAAA,CAAA,MAAA,EAAA;MACET,SAAS,EAAEM,UAAM,CAACR,IAAK;AACvB,MAAA,aAAA,EAAY,MAAM;MAClB,aAAaI,EAAAA,UAAU,EAAEJ,IAAK;AAAAG,MAAAA,QAAA,EAE7BH,IAAAA;KACG,CAAC,GACL,IAAI,EACPG,QAAQ,EACRF,OAAO,gBACNU,cAAA,CAAA,QAAA,EAAA;AACEC,MAAAA,IAAI,EAAC,QAAQ;MACbV,SAAS,EAAEM,UAAM,CAACK,WAAY;AAC9B,MAAA,YAAA,EAAW,QAAQ;AACnBC,MAAAA,OAAO,EAAEb,OAAQ;MACjB,aAAaG,EAAAA,UAAU,EAAES,WAAY;MAAAV,QAAA,eAErCQ,cAAA,CAACI,mBAAS,EAAA;QAAC,aAAY,EAAA,MAAA;OAAQ,CAAA;KACzB,CAAC,GACP,IAAI,CAAA;AAAA,GACJ,CAAC,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"Tag.cjs","sources":["../../../src/tag/Tag.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport { IconCross } from '../icons'\nimport styles from './Tag.module.css'\n\nexport type TagVariant =\n | 'default'\n | 'neutral'\n | 'success'\n | 'warning'\n | 'error'\n | 'info'\n | 'active'\n | 'action'\n\nexport type TagDataTestId = {\n root?: string\n icon?: string\n closeButton?: string\n}\n\nexport type TagIconPosition = 'left' | 'right'\n\nexport type TagProps = HTMLAttributes<HTMLSpanElement> & {\n variant?: TagVariant\n active?: boolean\n icon?: ReactNode\n iconPosition?: TagIconPosition\n onClose?: () => void\n dataTestId?: TagDataTestId\n}\n\nexport const Tag = ({\n variant = 'default',\n active = false,\n icon,\n iconPosition = 'left',\n onClose,\n className,\n children,\n dataTestId,\n ...rest\n}: TagProps) => {\n const iconElement =\n icon != null ? (\n <span\n className={styles.icon}\n aria-hidden='true'\n data-testid={dataTestId?.icon}\n >\n {icon}\n </span>\n ) : null\n\n return (\n <span\n className={cn(\n styles.tag,\n styles[variant],\n rest.onClick && styles.interactive,\n active && styles.isActive,\n className,\n )}\n data-testid={dataTestId?.root}\n {...rest}\n >\n {iconPosition === 'left' ? iconElement : null}\n {children}\n {iconPosition === 'right' ? iconElement : null}\n {onClose ? (\n <button\n type='button'\n className={styles.closeButton}\n aria-label='Remove'\n onClick={onClose}\n data-testid={dataTestId?.closeButton}\n >\n <IconCross aria-hidden='true' className={styles.crossIcon} />\n </button>\n ) : null}\n </span>\n )\n}\n"],"names":["Tag","_ref","variant","active","icon","iconPosition","onClose","className","children","dataTestId","rest","iconElement","_jsx","styles","_jsxs","cn","tag","onClick","interactive","isActive","root","type","closeButton","IconCross","crossIcon"],"mappings":";;;;;;;;;AAkCaA,MAAAA,GAAG,GAAGC,IAAA,IAUH;EAAA,IAVI;AAClBC,IAAAA,OAAO,GAAG,SAAS;AACnBC,IAAAA,MAAM,GAAG,KAAK;IACdC,IAAI;AACJC,IAAAA,YAAY,GAAG,MAAM;IACrBC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,UAAU;IACV,GAAGC,IAAAA;AACK,GAAC,GAAAT,IAAA,CAAA;AACT,EAAA,MAAMU,WAAW,GACfP,IAAI,IAAI,IAAI,gBACVQ,cAAA,CAAA,MAAA,EAAA;IACEL,SAAS,EAAEM,UAAM,CAACT,IAAK;AACvB,IAAA,aAAA,EAAY,MAAM;IAClB,aAAaK,EAAAA,UAAU,EAAEL,IAAK;AAAAI,IAAAA,QAAA,EAE7BJ,IAAAA;GACG,CAAC,GACL,IAAI,CAAA;AAEV,EAAA,oBACEU,eAAA,CAAA,MAAA,EAAA;IACEP,SAAS,EAAEQ,EAAE,CACXF,UAAM,CAACG,GAAG,EACVH,UAAM,CAACX,OAAO,CAAC,EACfQ,IAAI,CAACO,OAAO,IAAIJ,UAAM,CAACK,WAAW,EAClCf,MAAM,IAAIU,UAAM,CAACM,QAAQ,EACzBZ,SACF,CAAE;IACF,aAAaE,EAAAA,UAAU,EAAEW,IAAK;AAAA,IAAA,GAC1BV,IAAI;IAAAF,QAAA,EAAA,CAEPH,YAAY,KAAK,MAAM,GAAGM,WAAW,GAAG,IAAI,EAC5CH,QAAQ,EACRH,YAAY,KAAK,OAAO,GAAGM,WAAW,GAAG,IAAI,EAC7CL,OAAO,gBACNM,cAAA,CAAA,QAAA,EAAA;AACES,MAAAA,IAAI,EAAC,QAAQ;MACbd,SAAS,EAAEM,UAAM,CAACS,WAAY;AAC9B,MAAA,YAAA,EAAW,QAAQ;AACnBL,MAAAA,OAAO,EAAEX,OAAQ;MACjB,aAAaG,EAAAA,UAAU,EAAEa,WAAY;MAAAd,QAAA,eAErCI,cAAA,CAACW,mBAAS,EAAA;AAAC,QAAA,aAAA,EAAY,MAAM;QAAChB,SAAS,EAAEM,UAAM,CAACW,SAAAA;OAAY,CAAA;KACtD,CAAC,GACP,IAAI,CAAA;AAAA,GACJ,CAAC,CAAA;AAEX;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const styles = {"tag":"Tag-module_tag__dpq60","icon":"Tag-module_icon__7I-oU","closeButton":"Tag-module_closeButton__d5-N3","neutral":"Tag-module_neutral__D18sJ","success":"Tag-module_success__JX1nP","warning":"Tag-module_warning__0pWSo","error":"Tag-module_error__o3vZs","info":"Tag-module_info__TJ9YE","active":"Tag-module_active__C6eCL","action":"Tag-module_action__6xjY6"};
3
+ const styles = {"tag":"Tag-module_tag__dpq60","interactive":"Tag-module_interactive__jpb40","isActive":"Tag-module_isActive__h4p9Z","icon":"Tag-module_icon__7I-oU","crossIcon":"Tag-module_crossIcon__LDgT7","closeButton":"Tag-module_closeButton__d5-N3","neutral":"Tag-module_neutral__D18sJ","success":"Tag-module_success__JX1nP","warning":"Tag-module_warning__0pWSo","error":"Tag-module_error__o3vZs","info":"Tag-module_info__TJ9YE","active":"Tag-module_active__C6eCL","action":"Tag-module_action__6xjY6"};
4
4
 
5
5
  module.exports = styles;
6
6
  //# sourceMappingURL=Tag.module.css.cjs.map
@@ -120,15 +120,15 @@ const TokenSelector = _ref => {
120
120
  className: cn(TokenSelector_module.option, TokenSelector_module[size], selected && TokenSelector_module.selected),
121
121
  onClick: () => handleOptionClick(option),
122
122
  "data-testid": option.dataTestId?.root,
123
- children: [option.icon ? /*#__PURE__*/jsxRuntime.jsx("span", {
124
- className: TokenSelector_module.icon,
125
- "data-testid": option.dataTestId?.icon,
126
- children: option.icon
127
- }) : null, /*#__PURE__*/jsxRuntime.jsxs("span", {
123
+ children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
128
124
  className: TokenSelector_module.optionContent,
129
125
  children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
130
126
  className: TokenSelector_module.optionRow,
131
- children: [/*#__PURE__*/jsxRuntime.jsx("span", {
127
+ children: [option.icon ? /*#__PURE__*/jsxRuntime.jsx("span", {
128
+ className: TokenSelector_module.icon,
129
+ "data-testid": option.dataTestId?.icon,
130
+ children: option.icon
131
+ }) : null, /*#__PURE__*/jsxRuntime.jsx("span", {
132
132
  className: TokenSelector_module.label,
133
133
  "data-testid": option.dataTestId?.label,
134
134
  children: option.label
@@ -1 +1 @@
1
- {"version":3,"file":"TokenSelector.cjs","sources":["../../../src/token-selector/TokenSelector.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\nimport { useOutsideClick } from '../hooks/useOutsideClick'\nimport { IconCheck, IconChevronDown, IconChevronUp } from '../icons'\nimport cn from 'classnames'\nimport styles from './TokenSelector.module.css'\n\nexport type TokenSelectorOptionDataTestId = {\n root?: string\n icon?: string\n label?: string\n secondaryLabel?: string\n description?: string\n}\n\nexport type TokenSelectorOption = {\n value: string\n label: ReactNode\n /** Shown next to `label`, in a muted weight — default size only. */\n secondaryLabel?: ReactNode\n /** Caption line below the label row — default size only. */\n description?: ReactNode\n icon?: ReactNode\n disabled?: boolean\n dataTestId?: TokenSelectorOptionDataTestId\n}\n\nexport type TokenSelectorSize = 'default' | 'small'\n\nexport type TokenSelectorDataTestId = {\n root?: string\n trigger?: string\n panel?: string\n}\n\nexport type TokenSelectorProps = Omit<\n ComponentPropsWithoutRef<'div'>,\n 'onChange'\n> & {\n options: TokenSelectorOption[]\n value?: string\n onChange?: (value: string) => void\n single?: boolean\n size?: TokenSelectorSize\n placeholder?: ReactNode\n dataTestId?: TokenSelectorDataTestId\n}\n\nexport const TokenSelector = ({\n options,\n value,\n onChange,\n single = false,\n size = 'default',\n placeholder = 'Select',\n className,\n dataTestId,\n ...rest\n}: TokenSelectorProps) => {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLDivElement>(null)\n const triggerRef = useRef<HTMLButtonElement>(null)\n\n const handleClose = useCallback(() => setOpen(false), [])\n useOutsideClick(rootRef, handleClose, open)\n\n useEffect(() => {\n if (!open) return\n\n const handleDocumentKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return\n setOpen(false)\n triggerRef.current?.focus()\n }\n\n document.addEventListener('keydown', handleDocumentKeyDown)\n return () => document.removeEventListener('keydown', handleDocumentKeyDown)\n }, [open])\n\n const selectedOption = options.find((option) => option.value === value)\n\n if (single) {\n return (\n <span\n className={cn(styles.single, styles[size], className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n {selectedOption?.icon ? (\n <span\n className={styles.icon}\n data-testid={selectedOption.dataTestId?.icon}\n >\n {selectedOption.icon}\n </span>\n ) : null}\n <span\n className={styles.label}\n data-testid={selectedOption?.dataTestId?.label}\n >\n {selectedOption?.label}\n </span>\n {size === 'default' && selectedOption?.secondaryLabel != null ? (\n <span\n className={styles.secondaryLabel}\n data-testid={selectedOption.dataTestId?.secondaryLabel}\n >\n {selectedOption.secondaryLabel}\n </span>\n ) : null}\n </span>\n )\n }\n\n const handleTriggerClick = () => setOpen((prev) => !prev)\n\n const handleOptionClick = (option: TokenSelectorOption) => {\n if (option.disabled) return\n onChange?.(option.value)\n setOpen(false)\n triggerRef.current?.focus()\n }\n\n return (\n <div\n ref={rootRef}\n className={cn(styles.root, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <button\n ref={triggerRef}\n type='button'\n aria-haspopup='listbox'\n aria-expanded={open}\n className={cn(styles.trigger, styles[size], open && styles.open)}\n onClick={handleTriggerClick}\n data-testid={dataTestId?.trigger}\n >\n <span className={styles.content}>\n {selectedOption ? (\n <>\n {selectedOption.icon ? (\n <span\n className={styles.icon}\n data-testid={selectedOption.dataTestId?.icon}\n >\n {selectedOption.icon}\n </span>\n ) : null}\n <span\n className={styles.label}\n data-testid={selectedOption.dataTestId?.label}\n >\n {selectedOption.label}\n </span>\n {size === 'default' && selectedOption.secondaryLabel != null ? (\n <span\n className={styles.secondaryLabel}\n data-testid={selectedOption.dataTestId?.secondaryLabel}\n >\n {selectedOption.secondaryLabel}\n </span>\n ) : null}\n </>\n ) : (\n <span className={styles.placeholder}>{placeholder}</span>\n )}\n </span>\n <span className={styles.chevron} aria-hidden='true'>\n {open ? <IconChevronUp /> : <IconChevronDown />}\n </span>\n </button>\n {open ? (\n <div\n role='listbox'\n className={styles.panel}\n data-testid={dataTestId?.panel}\n >\n <div className={styles.list}>\n {options.map((option) => {\n const selected = option.value === value\n return (\n <button\n key={option.value}\n type='button'\n role='option'\n aria-selected={selected}\n disabled={option.disabled}\n className={cn(\n styles.option,\n styles[size],\n selected && styles.selected,\n )}\n onClick={() => handleOptionClick(option)}\n data-testid={option.dataTestId?.root}\n >\n {option.icon ? (\n <span\n className={styles.icon}\n data-testid={option.dataTestId?.icon}\n >\n {option.icon}\n </span>\n ) : null}\n <span className={styles.optionContent}>\n <span className={styles.optionRow}>\n <span\n className={styles.label}\n data-testid={option.dataTestId?.label}\n >\n {option.label}\n </span>\n {size === 'default' && option.secondaryLabel != null ? (\n <span\n className={styles.secondaryLabel}\n data-testid={option.dataTestId?.secondaryLabel}\n >\n {option.secondaryLabel}\n </span>\n ) : null}\n </span>\n {size === 'default' && option.description != null ? (\n <span\n className={styles.description}\n data-testid={option.dataTestId?.description}\n >\n {option.description}\n </span>\n ) : null}\n </span>\n {size === 'default' && selected ? (\n <span className={styles.indicator} aria-hidden='true'>\n <IconCheck className={styles.checkmark} />\n </span>\n ) : null}\n </button>\n )\n })}\n </div>\n </div>\n ) : null}\n </div>\n )\n}\n"],"names":["TokenSelector","_ref","options","value","onChange","single","size","placeholder","className","dataTestId","rest","open","setOpen","useState","rootRef","useRef","triggerRef","handleClose","useCallback","useOutsideClick","useEffect","handleDocumentKeyDown","event","key","current","focus","document","addEventListener","removeEventListener","selectedOption","find","option","_jsxs","cn","styles","root","children","icon","_jsx","label","secondaryLabel","handleTriggerClick","prev","handleOptionClick","disabled","ref","type","trigger","onClick","content","_Fragment","chevron","IconChevronUp","IconChevronDown","role","panel","list","map","selected","optionContent","optionRow","description","indicator","IconCheck","checkmark"],"mappings":"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"}
1
+ {"version":3,"file":"TokenSelector.cjs","sources":["../../../src/token-selector/TokenSelector.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\nimport { useOutsideClick } from '../hooks/useOutsideClick'\nimport { IconCheck, IconChevronDown, IconChevronUp } from '../icons'\nimport cn from 'classnames'\nimport styles from './TokenSelector.module.css'\n\nexport type TokenSelectorOptionDataTestId = {\n root?: string\n icon?: string\n label?: string\n secondaryLabel?: string\n description?: string\n}\n\nexport type TokenSelectorOption = {\n value: string\n label: ReactNode\n /** Shown next to `label`, in a muted weight — default size only. */\n secondaryLabel?: ReactNode\n /** Caption line below the label row — default size only. */\n description?: ReactNode\n icon?: ReactNode\n disabled?: boolean\n dataTestId?: TokenSelectorOptionDataTestId\n}\n\nexport type TokenSelectorSize = 'default' | 'small'\n\nexport type TokenSelectorDataTestId = {\n root?: string\n trigger?: string\n panel?: string\n}\n\nexport type TokenSelectorProps = Omit<\n ComponentPropsWithoutRef<'div'>,\n 'onChange'\n> & {\n options: TokenSelectorOption[]\n value?: string\n onChange?: (value: string) => void\n single?: boolean\n size?: TokenSelectorSize\n placeholder?: ReactNode\n dataTestId?: TokenSelectorDataTestId\n}\n\nexport const TokenSelector = ({\n options,\n value,\n onChange,\n single = false,\n size = 'default',\n placeholder = 'Select',\n className,\n dataTestId,\n ...rest\n}: TokenSelectorProps) => {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLDivElement>(null)\n const triggerRef = useRef<HTMLButtonElement>(null)\n\n const handleClose = useCallback(() => setOpen(false), [])\n useOutsideClick(rootRef, handleClose, open)\n\n useEffect(() => {\n if (!open) return\n\n const handleDocumentKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return\n setOpen(false)\n triggerRef.current?.focus()\n }\n\n document.addEventListener('keydown', handleDocumentKeyDown)\n return () => document.removeEventListener('keydown', handleDocumentKeyDown)\n }, [open])\n\n const selectedOption = options.find((option) => option.value === value)\n\n if (single) {\n return (\n <span\n className={cn(styles.single, styles[size], className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n {selectedOption?.icon ? (\n <span\n className={styles.icon}\n data-testid={selectedOption.dataTestId?.icon}\n >\n {selectedOption.icon}\n </span>\n ) : null}\n <span\n className={styles.label}\n data-testid={selectedOption?.dataTestId?.label}\n >\n {selectedOption?.label}\n </span>\n {size === 'default' && selectedOption?.secondaryLabel != null ? (\n <span\n className={styles.secondaryLabel}\n data-testid={selectedOption.dataTestId?.secondaryLabel}\n >\n {selectedOption.secondaryLabel}\n </span>\n ) : null}\n </span>\n )\n }\n\n const handleTriggerClick = () => setOpen((prev) => !prev)\n\n const handleOptionClick = (option: TokenSelectorOption) => {\n if (option.disabled) return\n onChange?.(option.value)\n setOpen(false)\n triggerRef.current?.focus()\n }\n\n return (\n <div\n ref={rootRef}\n className={cn(styles.root, className)}\n data-testid={dataTestId?.root}\n {...rest}\n >\n <button\n ref={triggerRef}\n type='button'\n aria-haspopup='listbox'\n aria-expanded={open}\n className={cn(styles.trigger, styles[size], open && styles.open)}\n onClick={handleTriggerClick}\n data-testid={dataTestId?.trigger}\n >\n <span className={styles.content}>\n {selectedOption ? (\n <>\n {selectedOption.icon ? (\n <span\n className={styles.icon}\n data-testid={selectedOption.dataTestId?.icon}\n >\n {selectedOption.icon}\n </span>\n ) : null}\n <span\n className={styles.label}\n data-testid={selectedOption.dataTestId?.label}\n >\n {selectedOption.label}\n </span>\n {size === 'default' && selectedOption.secondaryLabel != null ? (\n <span\n className={styles.secondaryLabel}\n data-testid={selectedOption.dataTestId?.secondaryLabel}\n >\n {selectedOption.secondaryLabel}\n </span>\n ) : null}\n </>\n ) : (\n <span className={styles.placeholder}>{placeholder}</span>\n )}\n </span>\n <span className={styles.chevron} aria-hidden='true'>\n {open ? <IconChevronUp /> : <IconChevronDown />}\n </span>\n </button>\n {open ? (\n <div\n role='listbox'\n className={styles.panel}\n data-testid={dataTestId?.panel}\n >\n <div className={styles.list}>\n {options.map((option) => {\n const selected = option.value === value\n return (\n <button\n key={option.value}\n type='button'\n role='option'\n aria-selected={selected}\n disabled={option.disabled}\n className={cn(\n styles.option,\n styles[size],\n selected && styles.selected,\n )}\n onClick={() => handleOptionClick(option)}\n data-testid={option.dataTestId?.root}\n >\n <span className={styles.optionContent}>\n <span className={styles.optionRow}>\n {option.icon ? (\n <span\n className={styles.icon}\n data-testid={option.dataTestId?.icon}\n >\n {option.icon}\n </span>\n ) : null}\n <span\n className={styles.label}\n data-testid={option.dataTestId?.label}\n >\n {option.label}\n </span>\n {size === 'default' && option.secondaryLabel != null ? (\n <span\n className={styles.secondaryLabel}\n data-testid={option.dataTestId?.secondaryLabel}\n >\n {option.secondaryLabel}\n </span>\n ) : null}\n </span>\n {size === 'default' && option.description != null ? (\n <span\n className={styles.description}\n data-testid={option.dataTestId?.description}\n >\n {option.description}\n </span>\n ) : null}\n </span>\n {size === 'default' && selected ? (\n <span className={styles.indicator} aria-hidden='true'>\n <IconCheck className={styles.checkmark} />\n </span>\n ) : null}\n </button>\n )\n })}\n </div>\n </div>\n ) : null}\n </div>\n )\n}\n"],"names":["TokenSelector","_ref","options","value","onChange","single","size","placeholder","className","dataTestId","rest","open","setOpen","useState","rootRef","useRef","triggerRef","handleClose","useCallback","useOutsideClick","useEffect","handleDocumentKeyDown","event","key","current","focus","document","addEventListener","removeEventListener","selectedOption","find","option","_jsxs","cn","styles","root","children","icon","_jsx","label","secondaryLabel","handleTriggerClick","prev","handleOptionClick","disabled","ref","type","trigger","onClick","content","_Fragment","chevron","IconChevronUp","IconChevronDown","role","panel","list","map","selected","optionContent","optionRow","description","indicator","IconCheck","checkmark"],"mappings":";;;;;;;;;;;;;AAsDaA,MAAAA,aAAa,GAAGC,IAAA,IAUH;EAAA,IAVI;IAC5BC,OAAO;IACPC,KAAK;IACLC,QAAQ;AACRC,IAAAA,MAAM,GAAG,KAAK;AACdC,IAAAA,IAAI,GAAG,SAAS;AAChBC,IAAAA,WAAW,GAAG,QAAQ;IACtBC,SAAS;IACTC,UAAU;IACV,GAAGC,IAAAA;AACe,GAAC,GAAAT,IAAA,CAAA;EACnB,MAAM,CAACU,IAAI,EAAEC,OAAO,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC,CAAA;AACvC,EAAA,MAAMC,OAAO,GAAGC,YAAM,CAAiB,IAAI,CAAC,CAAA;AAC5C,EAAA,MAAMC,UAAU,GAAGD,YAAM,CAAoB,IAAI,CAAC,CAAA;EAElD,MAAME,WAAW,GAAGC,iBAAW,CAAC,MAAMN,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;AACzDO,EAAAA,+BAAe,CAACL,OAAO,EAAEG,WAAW,EAAEN,IAAI,CAAC,CAAA;AAE3CS,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACT,IAAI,EAAE,OAAA;IAEX,MAAMU,qBAAqB,GAAIC,KAAoB,IAAK;AACtD,MAAA,IAAIA,KAAK,CAACC,GAAG,KAAK,QAAQ,EAAE,OAAA;MAC5BX,OAAO,CAAC,KAAK,CAAC,CAAA;AACdI,MAAAA,UAAU,CAACQ,OAAO,EAAEC,KAAK,EAAE,CAAA;KAC5B,CAAA;AAEDC,IAAAA,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEN,qBAAqB,CAAC,CAAA;IAC3D,OAAO,MAAMK,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEP,qBAAqB,CAAC,CAAA;AAC7E,GAAC,EAAE,CAACV,IAAI,CAAC,CAAC,CAAA;AAEV,EAAA,MAAMkB,cAAc,GAAG3B,OAAO,CAAC4B,IAAI,CAAEC,MAAM,IAAKA,MAAM,CAAC5B,KAAK,KAAKA,KAAK,CAAC,CAAA;AAEvE,EAAA,IAAIE,MAAM,EAAE;AACV,IAAA,oBACE2B,eAAA,CAAA,MAAA,EAAA;AACExB,MAAAA,SAAS,EAAEyB,EAAE,CAACC,oBAAM,CAAC7B,MAAM,EAAE6B,oBAAM,CAAC5B,IAAI,CAAC,EAAEE,SAAS,CAAE;MACtD,aAAaC,EAAAA,UAAU,EAAE0B,IAAK;AAAA,MAAA,GAC1BzB,IAAI;AAAA0B,MAAAA,QAAA,EAEPP,CAAAA,cAAc,EAAEQ,IAAI,gBACnBC,cAAA,CAAA,MAAA,EAAA;QACE9B,SAAS,EAAE0B,oBAAM,CAACG,IAAK;AACvB,QAAA,aAAA,EAAaR,cAAc,CAACpB,UAAU,EAAE4B,IAAK;QAAAD,QAAA,EAE5CP,cAAc,CAACQ,IAAAA;AAAI,OAChB,CAAC,GACL,IAAI,eACRC,cAAA,CAAA,MAAA,EAAA;QACE9B,SAAS,EAAE0B,oBAAM,CAACK,KAAM;AACxB,QAAA,aAAA,EAAaV,cAAc,EAAEpB,UAAU,EAAE8B,KAAM;QAAAH,QAAA,EAE9CP,cAAc,EAAEU,KAAAA;AAAK,OAClB,CAAC,EACNjC,IAAI,KAAK,SAAS,IAAIuB,cAAc,EAAEW,cAAc,IAAI,IAAI,gBAC3DF,cAAA,CAAA,MAAA,EAAA;QACE9B,SAAS,EAAE0B,oBAAM,CAACM,cAAe;AACjC,QAAA,aAAA,EAAaX,cAAc,CAACpB,UAAU,EAAE+B,cAAe;QAAAJ,QAAA,EAEtDP,cAAc,CAACW,cAAAA;OACZ,CAAC,GACL,IAAI,CAAA;AAAA,KACJ,CAAC,CAAA;AAEX,GAAA;EAEA,MAAMC,kBAAkB,GAAGA,MAAM7B,OAAO,CAAE8B,IAAI,IAAK,CAACA,IAAI,CAAC,CAAA;EAEzD,MAAMC,iBAAiB,GAAIZ,MAA2B,IAAK;IACzD,IAAIA,MAAM,CAACa,QAAQ,EAAE,OAAA;AACrBxC,IAAAA,QAAQ,GAAG2B,MAAM,CAAC5B,KAAK,CAAC,CAAA;IACxBS,OAAO,CAAC,KAAK,CAAC,CAAA;AACdI,IAAAA,UAAU,CAACQ,OAAO,EAAEC,KAAK,EAAE,CAAA;GAC5B,CAAA;AAED,EAAA,oBACEO,eAAA,CAAA,KAAA,EAAA;AACEa,IAAAA,GAAG,EAAE/B,OAAQ;IACbN,SAAS,EAAEyB,EAAE,CAACC,oBAAM,CAACC,IAAI,EAAE3B,SAAS,CAAE;IACtC,aAAaC,EAAAA,UAAU,EAAE0B,IAAK;AAAA,IAAA,GAC1BzB,IAAI;AAAA0B,IAAAA,QAAA,gBAERJ,eAAA,CAAA,QAAA,EAAA;AACEa,MAAAA,GAAG,EAAE7B,UAAW;AAChB8B,MAAAA,IAAI,EAAC,QAAQ;AACb,MAAA,eAAA,EAAc,SAAS;AACvB,MAAA,eAAA,EAAenC,IAAK;AACpBH,MAAAA,SAAS,EAAEyB,EAAE,CAACC,oBAAM,CAACa,OAAO,EAAEb,oBAAM,CAAC5B,IAAI,CAAC,EAAEK,IAAI,IAAIuB,oBAAM,CAACvB,IAAI,CAAE;AACjEqC,MAAAA,OAAO,EAAEP,kBAAmB;MAC5B,aAAahC,EAAAA,UAAU,EAAEsC,OAAQ;AAAAX,MAAAA,QAAA,gBAEjCE,cAAA,CAAA,MAAA,EAAA;QAAM9B,SAAS,EAAE0B,oBAAM,CAACe,OAAQ;AAAAb,QAAAA,QAAA,EAC7BP,cAAc,gBACbG,eAAA,CAAAkB,mBAAA,EAAA;AAAAd,UAAAA,QAAA,EACGP,CAAAA,cAAc,CAACQ,IAAI,gBAClBC,cAAA,CAAA,MAAA,EAAA;YACE9B,SAAS,EAAE0B,oBAAM,CAACG,IAAK;AACvB,YAAA,aAAA,EAAaR,cAAc,CAACpB,UAAU,EAAE4B,IAAK;YAAAD,QAAA,EAE5CP,cAAc,CAACQ,IAAAA;AAAI,WAChB,CAAC,GACL,IAAI,eACRC,cAAA,CAAA,MAAA,EAAA;YACE9B,SAAS,EAAE0B,oBAAM,CAACK,KAAM;AACxB,YAAA,aAAA,EAAaV,cAAc,CAACpB,UAAU,EAAE8B,KAAM;YAAAH,QAAA,EAE7CP,cAAc,CAACU,KAAAA;AAAK,WACjB,CAAC,EACNjC,IAAI,KAAK,SAAS,IAAIuB,cAAc,CAACW,cAAc,IAAI,IAAI,gBAC1DF,cAAA,CAAA,MAAA,EAAA;YACE9B,SAAS,EAAE0B,oBAAM,CAACM,cAAe;AACjC,YAAA,aAAA,EAAaX,cAAc,CAACpB,UAAU,EAAE+B,cAAe;YAAAJ,QAAA,EAEtDP,cAAc,CAACW,cAAAA;WACZ,CAAC,GACL,IAAI,CAAA;SACR,CAAC,gBAEHF,cAAA,CAAA,MAAA,EAAA;UAAM9B,SAAS,EAAE0B,oBAAM,CAAC3B,WAAY;AAAA6B,UAAAA,QAAA,EAAE7B,WAAAA;SAAkB,CAAA;OAEtD,CAAC,eACP+B,cAAA,CAAA,MAAA,EAAA;QAAM9B,SAAS,EAAE0B,oBAAM,CAACiB,OAAQ;AAAC,QAAA,aAAA,EAAY,MAAM;AAAAf,QAAAA,QAAA,EAChDzB,IAAI,gBAAG2B,cAAA,CAACc,2BAAa,EAAE,EAAA,CAAC,gBAAGd,cAAA,CAACe,+BAAe,EAAE,EAAA,CAAA;AAAC,OAC3C,CAAC,CAAA;AAAA,KACD,CAAC,EACR1C,IAAI,gBACH2B,cAAA,CAAA,KAAA,EAAA;AACEgB,MAAAA,IAAI,EAAC,SAAS;MACd9C,SAAS,EAAE0B,oBAAM,CAACqB,KAAM;MACxB,aAAa9C,EAAAA,UAAU,EAAE8C,KAAM;AAAAnB,MAAAA,QAAA,eAE/BE,cAAA,CAAA,KAAA,EAAA;QAAK9B,SAAS,EAAE0B,oBAAM,CAACsB,IAAK;AAAApB,QAAAA,QAAA,EACzBlC,OAAO,CAACuD,GAAG,CAAE1B,MAAM,IAAK;AACvB,UAAA,MAAM2B,QAAQ,GAAG3B,MAAM,CAAC5B,KAAK,KAAKA,KAAK,CAAA;AACvC,UAAA,oBACE6B,eAAA,CAAA,QAAA,EAAA;AAEEc,YAAAA,IAAI,EAAC,QAAQ;AACbQ,YAAAA,IAAI,EAAC,QAAQ;AACb,YAAA,eAAA,EAAeI,QAAS;YACxBd,QAAQ,EAAEb,MAAM,CAACa,QAAS;AAC1BpC,YAAAA,SAAS,EAAEyB,EAAE,CACXC,oBAAM,CAACH,MAAM,EACbG,oBAAM,CAAC5B,IAAI,CAAC,EACZoD,QAAQ,IAAIxB,oBAAM,CAACwB,QACrB,CAAE;AACFV,YAAAA,OAAO,EAAEA,MAAML,iBAAiB,CAACZ,MAAM,CAAE;AACzC,YAAA,aAAA,EAAaA,MAAM,CAACtB,UAAU,EAAE0B,IAAK;AAAAC,YAAAA,QAAA,gBAErCJ,eAAA,CAAA,MAAA,EAAA;cAAMxB,SAAS,EAAE0B,oBAAM,CAACyB,aAAc;AAAAvB,cAAAA,QAAA,gBACpCJ,eAAA,CAAA,MAAA,EAAA;gBAAMxB,SAAS,EAAE0B,oBAAM,CAAC0B,SAAU;AAAAxB,gBAAAA,QAAA,EAC/BL,CAAAA,MAAM,CAACM,IAAI,gBACVC,cAAA,CAAA,MAAA,EAAA;kBACE9B,SAAS,EAAE0B,oBAAM,CAACG,IAAK;AACvB,kBAAA,aAAA,EAAaN,MAAM,CAACtB,UAAU,EAAE4B,IAAK;kBAAAD,QAAA,EAEpCL,MAAM,CAACM,IAAAA;AAAI,iBACR,CAAC,GACL,IAAI,eACRC,cAAA,CAAA,MAAA,EAAA;kBACE9B,SAAS,EAAE0B,oBAAM,CAACK,KAAM;AACxB,kBAAA,aAAA,EAAaR,MAAM,CAACtB,UAAU,EAAE8B,KAAM;kBAAAH,QAAA,EAErCL,MAAM,CAACQ,KAAAA;AAAK,iBACT,CAAC,EACNjC,IAAI,KAAK,SAAS,IAAIyB,MAAM,CAACS,cAAc,IAAI,IAAI,gBAClDF,cAAA,CAAA,MAAA,EAAA;kBACE9B,SAAS,EAAE0B,oBAAM,CAACM,cAAe;AACjC,kBAAA,aAAA,EAAaT,MAAM,CAACtB,UAAU,EAAE+B,cAAe;kBAAAJ,QAAA,EAE9CL,MAAM,CAACS,cAAAA;iBACJ,CAAC,GACL,IAAI,CAAA;AAAA,eACJ,CAAC,EACNlC,IAAI,KAAK,SAAS,IAAIyB,MAAM,CAAC8B,WAAW,IAAI,IAAI,gBAC/CvB,cAAA,CAAA,MAAA,EAAA;gBACE9B,SAAS,EAAE0B,oBAAM,CAAC2B,WAAY;AAC9B,gBAAA,aAAA,EAAa9B,MAAM,CAACtB,UAAU,EAAEoD,WAAY;gBAAAzB,QAAA,EAE3CL,MAAM,CAAC8B,WAAAA;eACJ,CAAC,GACL,IAAI,CAAA;aACJ,CAAC,EACNvD,IAAI,KAAK,SAAS,IAAIoD,QAAQ,gBAC7BpB,cAAA,CAAA,MAAA,EAAA;cAAM9B,SAAS,EAAE0B,oBAAM,CAAC4B,SAAU;AAAC,cAAA,aAAA,EAAY,MAAM;cAAA1B,QAAA,eACnDE,cAAA,CAACyB,mBAAS,EAAA;gBAACvD,SAAS,EAAE0B,oBAAM,CAAC8B,SAAAA;eAAY,CAAA;aACrC,CAAC,GACL,IAAI,CAAA;WAnDHjC,EAAAA,MAAM,CAAC5B,KAoDN,CAAC,CAAA;SAEZ,CAAA;OACE,CAAA;KACF,CAAC,GACJ,IAAI,CAAA;AAAA,GACL,CAAC,CAAA;AAEV;;;;"}