@moises.ai/design-system 3.11.21 → 3.12.1

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 (47) hide show
  1. package/dist/{MinusIcon-BS8c20DV.js → UpgradeUpIcon-DQGpL9A5.js} +2012 -1756
  2. package/dist/colors/custom-styles.css +2 -0
  3. package/dist/icons.js +616 -588
  4. package/dist/index.js +3915 -3837
  5. package/package.json +1 -1
  6. package/src/colors/custom-styles.css +2 -0
  7. package/src/components/InputLevelMeter/InputLevelMeter.jsx +65 -2
  8. package/src/components/InputLevelMeter/InputLevelMeter.module.css +27 -3
  9. package/src/components/PanControl/PanControl.jsx +66 -3
  10. package/src/components/PanControl/PanControl.module.css +6 -1
  11. package/src/components/TrackControlButton/TrackControlButton.module.css +28 -8
  12. package/src/components/TrackControlsToggle/TrackControlsToggle.jsx +4 -0
  13. package/src/components/TrackControlsToggle/TrackControlsToggle.stories.jsx +22 -0
  14. package/src/icons/ArrowEnterIcon.jsx +13 -0
  15. package/src/icons/CloudUploadErrorIcon.jsx +10 -0
  16. package/src/icons/CommandIcon.jsx +10 -0
  17. package/src/icons/FunctionIcon.jsx +7 -0
  18. package/src/icons/MagicWandIcon.jsx +5 -63
  19. package/src/icons/MinusIcon.jsx +1 -1
  20. package/src/icons/NoSendIcon.jsx +8 -0
  21. package/src/icons/NoSmartphoneIcon.jsx +7 -0
  22. package/src/icons/OptionIcon.jsx +7 -0
  23. package/src/icons/QrCodeIcon.jsx +9 -0
  24. package/src/icons/SendIcon.jsx +16 -0
  25. package/src/icons/Settings2Icon.jsx +14 -0
  26. package/src/icons/ShapesIcon.jsx +9 -0
  27. package/src/icons/Share2Icon.jsx +6 -13
  28. package/src/icons/ShareAndroidIcon.jsx +11 -0
  29. package/src/icons/ShareIosIcon.jsx +13 -0
  30. package/src/icons/ShareWebIcon.jsx +11 -0
  31. package/src/icons/ShieldIcon.jsx +7 -0
  32. package/src/icons/ShoppingBagIcon.jsx +9 -0
  33. package/src/icons/SkillsIcon.jsx +8 -0
  34. package/src/icons/SmartphoneIcon.jsx +8 -0
  35. package/src/icons/SparklesIcon.jsx +11 -0
  36. package/src/icons/SunIcon.jsx +8 -0
  37. package/src/icons/TextFileIcon.jsx +8 -0
  38. package/src/icons/TicketIcon.jsx +8 -0
  39. package/src/icons/TimeControlIcon.jsx +8 -0
  40. package/src/icons/TouchIdPersonalIcon.jsx +8 -0
  41. package/src/icons/TrophyIcon.jsx +8 -0
  42. package/src/icons/UpgradeUpIcon.jsx +9 -0
  43. package/src/icons/UserErrorIcon.jsx +8 -0
  44. package/src/icons/UserIcon.jsx +4 -18
  45. package/src/icons/UserVoiceIcon.jsx +10 -0
  46. package/src/icons/ZipIcon.jsx +9 -0
  47. package/src/icons.jsx +29 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moises.ai/design-system",
3
- "version": "3.11.21",
3
+ "version": "3.12.1",
4
4
  "description": "Design System package based on @radix-ui/themes with custom defaults",
5
5
  "private": false,
6
6
  "type": "module",
@@ -101,6 +101,8 @@
101
101
  --Colors-Neutral-Neutral-Alpha-3: var(--colors-neutral-neutral-alpha-3);
102
102
  --Colors-Neutral-Neutral-Alpha-4: var(--colors-neutral-neutral-alpha-4);
103
103
  --Colors-Neutral-Neutral-Alpha-5: var(--colors-neutral-neutral-alpha-5);
104
+ --Colors-Neutral-Neutral-Alpha-7: var(--neutral-alpha-7);
105
+ --Colors-Neutral-Neutral-Alpha-8: var(--neutral-alpha-8);
104
106
  --Colors-Neutral-Neutral-Alpha-10: var(--colors-neutral-neutral-alpha-10);
105
107
  --Colors-Neutral-Neutral-1: var(--colors-neutral-neutral-1);
106
108
 
@@ -6,6 +6,7 @@ const SEGMENT_MIN = 5
6
6
  const SEGMENT_RANGE = 25
7
7
  const UNITY_GAIN_POS = 0.667
8
8
  const MAX_BOOST_DB = 6
9
+ const FADER_KEYBOARD_STEP = 0.02
9
10
 
10
11
  function linearToMeterLevel(linear) {
11
12
  const peakDb = 20 * Math.log10(Math.max(linear, 1e-6))
@@ -101,6 +102,9 @@ export const InputLevelMeter = memo(function InputLevelMeter({
101
102
  const [peakHoldPct, setPeakHoldPct] = useState(0)
102
103
  const [peakRising, setPeakRising] = useState(false)
103
104
 
105
+ const [thumbFocused, setThumbFocused] = useState(false)
106
+ const [hoverOpen, setHoverOpen] = useState(false)
107
+
104
108
  useEffect(() => {
105
109
  peakHoldRef.current = 0
106
110
  setPeakHoldPct(0)
@@ -184,6 +188,49 @@ export const InputLevelMeter = memo(function InputLevelMeter({
184
188
  document.body.style.cursor = ''
185
189
  }, [])
186
190
 
191
+ const handleThumbKeyDown = useCallback(
192
+ (e) => {
193
+ if (!onVolumeChange) return
194
+ const pos = gainToFaderPosition(volume)
195
+ let nextPos = pos
196
+ switch (e.key) {
197
+ case 'ArrowRight':
198
+ case 'ArrowUp':
199
+ e.preventDefault()
200
+ nextPos = Math.min(1, pos + FADER_KEYBOARD_STEP)
201
+ onVolumeChange([faderPositionToGain(nextPos)])
202
+ break
203
+ case 'ArrowLeft':
204
+ case 'ArrowDown':
205
+ e.preventDefault()
206
+ nextPos = Math.max(0, pos - FADER_KEYBOARD_STEP)
207
+ onVolumeChange([faderPositionToGain(nextPos)])
208
+ break
209
+ case 'Home':
210
+ e.preventDefault()
211
+ onVolumeChange([faderPositionToGain(0)])
212
+ break
213
+ case 'End':
214
+ e.preventDefault()
215
+ onVolumeChange([faderPositionToGain(1)])
216
+ break
217
+ case 'PageUp':
218
+ e.preventDefault()
219
+ nextPos = Math.min(1, pos + FADER_KEYBOARD_STEP * 4)
220
+ onVolumeChange([faderPositionToGain(nextPos)])
221
+ break
222
+ case 'PageDown':
223
+ e.preventDefault()
224
+ nextPos = Math.max(0, pos - FADER_KEYBOARD_STEP * 4)
225
+ onVolumeChange([faderPositionToGain(nextPos)])
226
+ break
227
+ default:
228
+ break
229
+ }
230
+ },
231
+ [onVolumeChange, volume],
232
+ )
233
+
187
234
  const hasHandler = onVolumeChange && showHandler
188
235
 
189
236
  const meterClassName = [
@@ -194,6 +241,11 @@ export const InputLevelMeter = memo(function InputLevelMeter({
194
241
  .filter(Boolean)
195
242
  .join(' ')
196
243
 
244
+ const tooltipOpen = isPressed || thumbFocused || hoverOpen
245
+
246
+ const gainDbForAria =
247
+ volume <= 0 ? -96 : 20 * Math.log10(Math.max(volume, 1e-6))
248
+
197
249
  return (
198
250
  <div
199
251
  className={styles.container}
@@ -211,15 +263,26 @@ export const InputLevelMeter = memo(function InputLevelMeter({
211
263
  {hasHandler && (
212
264
  <Tooltip
213
265
  content={formatGainDb(volume)}
214
- open={isPressed}
266
+ open={tooltipOpen}
267
+ onOpenChange={setHoverOpen}
215
268
  side="bottom"
216
269
  align="center"
217
- sideOffset={8}
270
+ sideOffset={3}
218
271
  delayDuration={0}
219
272
  >
220
273
  <div
274
+ role="slider"
275
+ tabIndex={0}
276
+ aria-label="Input gain"
277
+ aria-valuemin={-96}
278
+ aria-valuemax={MAX_BOOST_DB}
279
+ aria-valuenow={Math.round(gainDbForAria * 10) / 10}
280
+ aria-valuetext={formatGainDb(volume)}
221
281
  className={`${styles.thumb} ${isPressed ? styles.pressed : hover ? styles.hovered : ''}`}
222
282
  style={{ left: `${faderPercent}%` }}
283
+ onFocus={() => setThumbFocused(true)}
284
+ onBlur={() => setThumbFocused(false)}
285
+ onKeyDown={handleThumbKeyDown}
223
286
  />
224
287
  </Tooltip>
225
288
  )}
@@ -78,6 +78,11 @@
78
78
  background: white;
79
79
  }
80
80
 
81
+ .thumb:focus-visible {
82
+ outline: 2px solid var(--neutral-alpha-8);
83
+ outline-offset: 2px;
84
+ }
85
+
81
86
  .peakDot {
82
87
  position: absolute;
83
88
  width: 1px;
@@ -105,18 +110,37 @@
105
110
  }
106
111
 
107
112
  .zeroDbDot {
113
+ --zero-db-center-y: calc(2px + 3px + 1px + 3px + 2px + 4px);
114
+
108
115
  position: absolute;
109
116
  left: 66.7%;
110
- top: 12px;
117
+ top: calc(var(--zero-db-center-y) - 1px);
111
118
  width: 2px;
112
119
  height: 2px;
113
- border-radius: 50%;
114
- background: rgba(255, 255, 255, 0.12);
120
+ box-sizing: border-box;
121
+ border-radius: 9999px;
122
+ aspect-ratio: 1;
123
+ background: var(
124
+ --Colors-Neutral-Neutral-Alpha-7,
125
+ rgba(217, 237, 255, 0.25)
126
+ );
115
127
  pointer-events: none;
116
128
  transform: translateX(-50%);
129
+ transform-origin: center center;
130
+ backface-visibility: hidden;
131
+ transition:
132
+ width 0.1s ease,
133
+ height 0.1s ease,
134
+ top 0.1s ease,
135
+ background-color 0.1s ease;
117
136
  }
118
137
 
119
138
  .zeroDbDot.pressed {
120
139
  width: 3px;
121
140
  height: 3px;
141
+ top: calc(var(--zero-db-center-y) - 1.5px);
142
+ background: var(
143
+ --Colors-Neutral-Neutral-Alpha-8,
144
+ rgba(217, 237, 255, 0.36)
145
+ );
122
146
  }
@@ -2,13 +2,14 @@ import styles from './PanControl.module.css'
2
2
  import classNames from 'classnames'
3
3
  import { useRef, useCallback, useMemo, useState, useEffect } from 'react'
4
4
  import { useEventListener } from '../../utils/useEventListener'
5
- import { Tooltip } from '../../index'
5
+ import { Tooltip } from '../Tooltip/Tooltip'
6
6
 
7
7
  const KNOB_CENTER_X = 10
8
8
  const KNOB_CENTER_Y = 10
9
9
  const KNOB_RADIUS = 9.5
10
10
  const START_ANGLE = -Math.PI / 2
11
11
  const STEP_SIZE = 0.01
12
+ const KEYBOARD_STEP = STEP_SIZE * 12
12
13
 
13
14
  const clampNorm = (v) => Math.max(-1, Math.min(1, v))
14
15
  const denormalize = (normalized, minValue, maxValue) =>
@@ -30,6 +31,16 @@ export const PanControl = ({
30
31
  const pendingNormRef = useRef(value)
31
32
  const rafRef = useRef(0)
32
33
 
34
+ const [knobFocused, setKnobFocused] = useState(false)
35
+ const [hoverOpen, setHoverOpen] = useState(false)
36
+
37
+ useEffect(() => {
38
+ if (disabled) {
39
+ setHoverOpen(false)
40
+ setKnobFocused(false)
41
+ }
42
+ }, [disabled])
43
+
33
44
  useEffect(() => {
34
45
  if (isDragging) {
35
46
  const style = document.createElement('style')
@@ -111,6 +122,38 @@ export const PanControl = ({
111
122
  [scheduleEmit],
112
123
  )
113
124
 
125
+ const handleKnobKeyDown = useCallback(
126
+ (e) => {
127
+ if (disabled) return
128
+ let next = value
129
+ switch (e.key) {
130
+ case 'ArrowUp':
131
+ case 'ArrowRight':
132
+ e.preventDefault()
133
+ next = value + KEYBOARD_STEP
134
+ scheduleEmit(next)
135
+ break
136
+ case 'ArrowDown':
137
+ case 'ArrowLeft':
138
+ e.preventDefault()
139
+ next = value - KEYBOARD_STEP
140
+ scheduleEmit(next)
141
+ break
142
+ case 'Home':
143
+ e.preventDefault()
144
+ scheduleEmit(-1)
145
+ break
146
+ case 'End':
147
+ e.preventDefault()
148
+ scheduleEmit(1)
149
+ break
150
+ default:
151
+ break
152
+ }
153
+ },
154
+ [disabled, value, scheduleEmit],
155
+ )
156
+
114
157
  const { arcPath, pointerRotation, arcColor, pointerColor } = useMemo(() => {
115
158
  const actual = denormalize(value, minValue, maxValue)
116
159
  const displayNorm = clampNorm(actual)
@@ -138,6 +181,12 @@ export const PanControl = ({
138
181
  return `Pan: ${Math.abs(pct) < 1 ? 0 : pct}`
139
182
  }, [value, minValue, maxValue])
140
183
 
184
+ const displayNorm = clampNorm(denormalize(value, minValue, maxValue))
185
+ const ariaPanPct = Math.round(displayNorm * 100)
186
+
187
+ const tooltipOpen =
188
+ !disabled && (isDragging || knobFocused || hoverOpen)
189
+
141
190
  return (
142
191
  <div
143
192
  ref={containerRef}
@@ -148,13 +197,24 @@ export const PanControl = ({
148
197
  >
149
198
  <Tooltip
150
199
  content={panValueText}
151
- open={isDragging}
200
+ open={tooltipOpen}
201
+ onOpenChange={(next) => {
202
+ if (!disabled) setHoverOpen(next)
203
+ }}
152
204
  side="bottom"
153
205
  align="center"
154
- sideOffset={10}
206
+ sideOffset={3}
155
207
  delayDuration={0}
156
208
  >
157
209
  <div
210
+ role="slider"
211
+ tabIndex={disabled ? -1 : 0}
212
+ aria-label="Pan"
213
+ aria-valuemin={-100}
214
+ aria-valuemax={100}
215
+ aria-valuenow={ariaPanPct}
216
+ aria-valuetext={panValueText}
217
+ aria-disabled={disabled}
158
218
  className={classNames(
159
219
  styles.pan,
160
220
  isDragging && styles.active,
@@ -164,6 +224,9 @@ export const PanControl = ({
164
224
  onPointerMove={onPointerMove}
165
225
  onPointerUp={onPointerUp}
166
226
  onPointerCancel={onPointerUp}
227
+ onFocus={() => setKnobFocused(true)}
228
+ onBlur={() => setKnobFocused(false)}
229
+ onKeyDown={handleKnobKeyDown}
167
230
  >
168
231
  <svg width={20} height={20} viewBox="0 0 20 20" fill="none">
169
232
  <circle cx={KNOB_CENTER_X} cy={KNOB_CENTER_Y} r={10} />
@@ -37,4 +37,9 @@
37
37
  fill: #DDEAF8;
38
38
  fill-opacity: 0.0784314;
39
39
  }
40
-
40
+
41
+ .pan:focus-visible:not(.disabled) {
42
+ outline: 2px solid var(--neutral-alpha-8);
43
+ outline-offset: 2px;
44
+ border-radius: 50%;
45
+ }
@@ -2,8 +2,8 @@
2
2
  box-sizing: border-box;
3
3
  width: 20px;
4
4
  min-width: 20px;
5
+ height: 20px;
5
6
  min-height: 20px;
6
- height: 100%;
7
7
  margin: 0;
8
8
  padding: 2px;
9
9
  border: none;
@@ -38,15 +38,18 @@
38
38
  opacity: 0.5;
39
39
  }
40
40
 
41
- /* Auto Mute inativo — Figma */
42
41
  .button.autoMute:not(.active) {
43
42
  background: var(--Colors-Neutral-Neutral-Alpha-2, rgba(216, 244, 246, 0.04));
44
- color: var(--colors-semantic-warning-alpha-9);
43
+ color: var(--warning-alpha-12);
45
44
  }
46
45
 
47
46
  .button.autoMute:not(.active):hover:not(:disabled) {
48
47
  background: var(--Colors-Neutral-Neutral-Alpha-3, rgba(221, 234, 248, 0.08));
49
- color: var(--colors-semantic-warning-alpha-9);
48
+ color: color-mix(in srgb, var(--warning-alpha-12) 88%, var(--colors-semantic-warning-alpha-9));
49
+ }
50
+
51
+ .button.autoMute:not(.active):active:not(:disabled) {
52
+ background: var(--Colors-Neutral-Neutral-Alpha-4, rgba(211, 237, 248, 0.11));
50
53
  }
51
54
 
52
55
  .button.active.record {
@@ -59,18 +62,35 @@
59
62
  color: var(--colors-neutral-neutral-1);
60
63
  }
61
64
 
62
- .button.active.mute,
63
- .button.active.autoMute {
65
+ .button.active.mute {
64
66
  background-color: var(--colors-semantic-warning-alpha-9);
65
67
  color: var(--colors-neutral-neutral-1);
66
68
  }
67
69
 
68
- .button.active.mute:hover:not(:disabled),
69
- .button.active.autoMute:hover:not(:disabled) {
70
+ .button.active.mute:hover:not(:disabled) {
70
71
  background-color: var(--colors-semantic-warning-alpha-9);
71
72
  color: var(--colors-neutral-neutral-1);
72
73
  }
73
74
 
75
+ .button.active.mute:active:not(:disabled) {
76
+ filter: brightness(0.92);
77
+ }
78
+
79
+ .button.active.autoMute {
80
+ background-color: var(--warning-alpha-12);
81
+ color: var(--colors-neutral-neutral-1);
82
+ }
83
+
84
+ .button.active.autoMute:hover:not(:disabled) {
85
+ background-color: color-mix(in srgb, var(--warning-alpha-12) 78%, var(--colors-semantic-warning-alpha-9));
86
+ color: var(--colors-neutral-neutral-1);
87
+ }
88
+
89
+ .button.active.autoMute:active:not(:disabled) {
90
+ background-color: color-mix(in srgb, var(--warning-alpha-12) 62%, var(--colors-semantic-warning-alpha-9));
91
+ color: var(--colors-neutral-neutral-1);
92
+ }
93
+
74
94
  .button.active.solo {
75
95
  background-color: var(--colors-accent-accent-10);
76
96
  color: var(--colors-neutral-neutral-1);
@@ -3,6 +3,10 @@ import { TrackControlButton } from '../TrackControlButton/TrackControlButton'
3
3
  /**
4
4
  * @deprecated Use `TrackControlButton` with `variant={type}` and `isActive={selected}`.
5
5
  * Maintained for backward compatibility.
6
+ *
7
+ * @param {Object} props
8
+ * @param {'record' | 'mute' | 'autoMute' | 'solo'} props.type
9
+ * @param {boolean} [props.selected]
6
10
  */
7
11
  export const TrackControlsToggle = ({
8
12
  type,
@@ -98,6 +98,28 @@ export const MuteSelected = {
98
98
  },
99
99
  }
100
100
 
101
+ export const AutoMuteSelected = {
102
+ args: {
103
+ type: 'autoMute',
104
+ selected: true,
105
+ tooltipContent: {
106
+ text: 'Muted by solo',
107
+ shortcut: 'M',
108
+ },
109
+ },
110
+ }
111
+
112
+ export const AutoMuteInactive = {
113
+ args: {
114
+ type: 'autoMute',
115
+ selected: false,
116
+ tooltipContent: {
117
+ text: 'Muted by solo (inactive)',
118
+ shortcut: 'M',
119
+ },
120
+ },
121
+ }
122
+
101
123
  export const AllStates = {
102
124
  parameters: {
103
125
  docs: {
@@ -0,0 +1,13 @@
1
+ export const ArrowEnterIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
3
+ <path
4
+ d="M9.14096 7.0576L2.89832 13.3002M2.89832 13.3002L9.14096 19.5429M2.89832 13.3002L17.1017 13.3003C19.3109 13.3003 21.1018 11.5094 21.1017 9.30025L21.1017 4.45715"
5
+ stroke="currentColor"
6
+ strokeWidth="1.5"
7
+ strokeLinecap="round"
8
+ strokeLinejoin="round"
9
+ />
10
+ </svg>
11
+ )
12
+
13
+ ArrowEnterIcon.displayName = 'ArrowEnterIcon'
@@ -0,0 +1,10 @@
1
+ export const CloudUploadErrorIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg"
3
+ width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
4
+ <path
5
+ d="M9.32809 14.6719L7.99997 16M12 17V21M19.5 19C19.5 19 21.8452 17.6832 22.5798 15.9986C23.0239 14.9804 23.1162 13.8432 22.8422 12.7667C22.5682 11.6902 21.9434 10.7355 21.0666 10.0535C20.1898 9.3714 19.1108 9.00075 18 9.00001H16.74C16.4373 7.82926 15.8731 6.74235 15.0899 5.82101C14.3067 4.89967 13.3248 4.16786 12.2181 3.68062C11.1113 3.19338 9.90851 2.96337 8.70008 3.0079C7.49164 3.05242 6 3.50003 5 4.50003M2.99996 16.3C2.1992 15.3939 1.61428 14.318 1.28917 13.1533C0.964065 11.9885 0.90723 10.7653 1.12294 9.57541C1.28765 8.66685 1.608 7.79584 2.06783 7.00003M2.99997 3L21 21"
6
+ stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
7
+ </svg>
8
+ )
9
+
10
+ CloudUploadErrorIcon.displayName = 'CloudUploadErrorIcon'
@@ -0,0 +1,10 @@
1
+ export const CommandIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
3
+ <path
4
+ d="M9 9V6C9 4.34315 7.65685 3 6 3C4.34315 3 3 4.34315 3 6C3 7.65685 4.34315 9 6 9H9ZM9 9V15M9 9H15M15 9V6C15 4.34315 16.3431 3 18 3C19.6569 3 21 4.34315 21 6C21 7.65685 19.6569 9 18 9H15ZM15 9V15M9 15V18C9 19.6569 7.65685 21 6 21C4.34315 21 3 19.6569 3 18C3 16.3431 4.34315 15 6 15H9ZM9 15H15M15 15V18C15 19.6569 16.3431 21 18 21C19.6569 21 21 19.6569 21 18C21 16.3431 19.6569 15 18 15H15Z"
5
+ stroke="currentColor"
6
+ strokeWidth="1.5" />
7
+ </svg>
8
+ )
9
+
10
+ CommandIcon.displayName = 'CommandIcon'
@@ -0,0 +1,7 @@
1
+ export const FunctionIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
3
+ <path d="M5.57248 20.4999V10.0602M5.57248 10.0602V5.66871C5.57248 4.47097 6.54345 3.5 7.7412 3.5C8.38723 3.5 9.02759 3.62052 9.62941 3.85538L10 4M5.57248 10.0602H2.51178M5.57248 10.0602H10M14.1424 20.4999V15.125M14.1424 15.125C14.1424 12.0523 15.219 11.3223 16.1875 10.8125C18.4852 9.60317 21.4881 9.84375 21.4881 14.2188V20.4999M14.1424 15.125V10.0602" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" />
4
+ </svg>
5
+ )
6
+
7
+ FunctionIcon.displayName = 'FunctionIcon'
@@ -1,69 +1,11 @@
1
- export const MagicWandIcon = ({ width, height, className, ...props }) => (
2
- <svg
3
- xmlns="http://www.w3.org/2000/svg"
4
- width={width}
5
- height={height}
6
- viewBox="0 0 16 16"
7
- fill="none"
8
- className={className}
9
- {...props}
10
- >
1
+ export const MagicWandIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
11
3
  <path
12
- d="M1.33301 14.667L10.333 5.66699"
4
+ d="M19.3777 13.5788V16.3419M19.3777 16.3419V19.1051M19.3777 16.3419H22.1277M19.3777 16.3419H16.6277M14.2666 5.421L17.4999 8.66974M9.49993 5.42105C7.37965 5.42028 5.65952 3.69608 5.64637 1.56422C5.63324 3.69364 3.91687 5.41636 1.79993 5.42106C3.92455 5.42578 5.64553 7.16097 5.6463 9.30106C5.64707 7.15854 7.37197 5.42183 9.49993 5.42105ZM2.13661 19.1051L4.31785 21.2967C4.74742 21.7284 5.44391 21.7284 5.87348 21.2967L21.5589 5.53624C21.9885 5.10461 21.9885 4.40479 21.5589 3.97316L19.3777 1.78149C18.9481 1.34986 18.2517 1.34986 17.8221 1.78149L2.13661 17.542C1.70704 17.9736 1.70703 18.6734 2.13661 19.1051Z"
13
5
  stroke="currentColor"
14
- strokeWidth="1.13"
6
+ strokeWidth="1.5"
15
7
  strokeLinecap="round"
16
- strokeLinejoin="round"
17
- />
18
- <path
19
- d="M8.33301 7.66699L10.333 5.66699"
20
- stroke="currentColor"
21
- strokeWidth="1.13"
22
- strokeLinecap="round"
23
- strokeLinejoin="round"
24
- />
25
- <path
26
- d="M11.667 1.33301V4.33301"
27
- stroke="currentColor"
28
- strokeWidth="1.13"
29
- strokeLinecap="round"
30
- strokeLinejoin="round"
31
- />
32
- <path
33
- d="M13.167 2.83301H10.167"
34
- stroke="currentColor"
35
- strokeWidth="1.13"
36
- strokeLinecap="round"
37
- strokeLinejoin="round"
38
- />
39
- <path
40
- d="M5.33301 2.33301V4.33301"
41
- stroke="currentColor"
42
- strokeWidth="1.13"
43
- strokeLinecap="round"
44
- strokeLinejoin="round"
45
- />
46
- <path
47
- d="M6.33301 3.33301H4.33301"
48
- stroke="currentColor"
49
- strokeWidth="1.13"
50
- strokeLinecap="round"
51
- strokeLinejoin="round"
52
- />
53
- <path
54
- d="M13.333 9.33301V11.333"
55
- stroke="currentColor"
56
- strokeWidth="1.13"
57
- strokeLinecap="round"
58
- strokeLinejoin="round"
59
- />
60
- <path
61
- d="M14.333 10.333H12.333"
62
- stroke="currentColor"
63
- strokeWidth="1.13"
64
- strokeLinecap="round"
65
- strokeLinejoin="round"
66
- />
8
+ strokeLinejoin="round" />
67
9
  </svg>
68
10
  )
69
11
 
@@ -7,7 +7,7 @@ export const MinusIcon = ({ width = 16, height = 16, className, ...props }) => (
7
7
  fill="none"
8
8
  className={className} {...props}>
9
9
  <g >
10
- <path d="M3.33325 8H12.6666" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" />
10
+ <path d="M3.33325 8H12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
11
11
  </g>
12
12
  </svg>
13
13
  )
@@ -0,0 +1,8 @@
1
+ export const NoSendIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
3
+ <path d="M22 3L22.6568 3.36207C22.7849 3.12973 22.7807 2.84702 22.6458 2.61859C22.5109 2.39016 22.2653 2.25 22 2.25V3ZM14.2811 18.5562C14.481 18.1934 14.3491 17.7373 13.9863 17.5373C13.6236 17.3373 13.1674 17.4693 12.9675 17.832L14.2811 18.5562ZM12.0775 21L11.3659 21.2367C11.4599 21.5194 11.7124 21.7197 12.0091 21.7469C12.3058 21.7741 12.5905 21.623 12.7343 21.3621L12.0775 21ZM10.5858 14.1386C10.4551 13.7455 10.0305 13.5329 9.63745 13.6636C9.24441 13.7943 9.03175 14.2189 9.16248 14.612L10.5858 14.1386ZM2.03033 0.96967C1.73744 0.676777 1.26256 0.676777 0.96967 0.96967C0.676777 1.26256 0.676777 1.73744 0.96967 2.03033L2.03033 0.96967ZM19.9697 21.0303C20.2626 21.3232 20.7374 21.3232 21.0303 21.0303C21.3232 20.7374 21.3232 20.2626 21.0303 19.9697L19.9697 21.0303ZM2.875 3V3.75H22V3V2.25H2.875V3ZM22 3L21.613 2.35755L9.79164 9.47811L10.1786 10.1206L10.5656 10.763L22.387 3.64245L22 3ZM13.6243 18.1941L12.9675 17.832L11.4207 20.6379L12.0775 21L12.7343 21.3621L14.2811 18.5562L13.6243 18.1941ZM12.0775 21L12.7892 20.7633L10.5858 14.1386L9.87415 14.3753L9.16248 14.612L11.3659 21.2367L12.0775 21ZM1.5 1.5L0.96967 2.03033L19.9697 21.0303L20.5 20.5L21.0303 19.9697L2.03033 0.96967L1.5 1.5ZM22 3L21.3432 2.63793L14.6747 14.735L15.3315 15.0971L15.9883 15.4591L22.6568 3.36207L22 3Z"
4
+ fill="currentColor" />
5
+ </svg>
6
+ )
7
+
8
+ NoSendIcon.displayName = 'NoSendIcon'
@@ -0,0 +1,7 @@
1
+ export const NoSmartphoneIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
3
+ <path d="M17.5 23.75C17.9142 23.75 18.25 23.4142 18.25 23C18.25 22.5858 17.9142 22.25 17.5 22.25V23.75ZM4.25 4.85742C4.25 5.27164 4.58579 5.60742 5 5.60742C5.41421 5.60742 5.75 5.27164 5.75 4.85742H4.25ZM5.75 9.85742C5.75 9.44321 5.41421 9.10742 5 9.10742C4.58579 9.10742 4.25 9.44321 4.25 9.85742H5.75ZM18.25 18.8574C18.25 19.2716 18.5858 19.6074 19 19.6074C19.4142 19.6074 19.75 19.2716 19.75 18.8574H18.25ZM14.25 2.25V3C14.6642 3 15 2.66421 15 2.25H14.25ZM9.75 2.25H9C9 2.66421 9.33579 3 9.75 3V2.25ZM2.03033 0.887752C1.73744 0.594859 1.26256 0.594859 0.96967 0.887752C0.676777 1.18065 0.676777 1.65552 0.96967 1.94841L2.03033 0.887752ZM21.909 22.8878C22.2019 23.1806 22.6768 23.1806 22.9697 22.8878C23.2626 22.5949 23.2626 22.12 22.9697 21.8271L21.909 22.8878ZM7 23.75H17.5V22.25H7V23.75ZM4.25 21C4.25 22.5188 5.48122 23.75 7 23.75V22.25C6.30964 22.25 5.75 21.6904 5.75 21H4.25ZM7 0.25C5.48122 0.25 4.25 1.48122 4.25 3H5.75C5.75 2.30964 6.30964 1.75 7 1.75V0.25ZM17 1.75C17.6904 1.75 18.25 2.30964 18.25 3H19.75C19.75 1.48122 18.5188 0.25 17 0.25V1.75ZM4.25 3V4.85742H5.75V3H4.25ZM4.25 9.85742V21H5.75V9.85742H4.25ZM19.75 18.8574V3H18.25V18.8574H19.75ZM14.25 1.5H9.75V3H14.25V1.5ZM0.96967 1.94841L21.909 22.8878L22.9697 21.8271L2.03033 0.887752L0.96967 1.94841ZM17 0.25H14.25V1.75H17V0.25ZM15 2.25V1H13.5V2.25H15ZM14.25 0.25H9.75V1.75H14.25V0.25ZM9.75 0.25H7V1.75H9.75V0.25ZM10.5 2.25V1H9V2.25H10.5Z" fill="white" />
4
+ </svg>
5
+ )
6
+
7
+ NoSmartphoneIcon.displayName = 'NoSmartphoneIcon'
@@ -0,0 +1,7 @@
1
+ export const OptionIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
3
+ <path d="M1.99994 5.22729H8.08822L15.9077 18.771L22 18.7728M16 5.22732H22" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
4
+ </svg>
5
+ )
6
+
7
+ OptionIcon.displayName = 'OptionIcon'
@@ -0,0 +1,9 @@
1
+ export const QrCodeIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
3
+ <path
4
+ d="M14.75 14H14V14.75M16.75 16H16V16.75M18.75 18H18V18.75M18.75 14H18V14.75M14.75 18H14V18.75M8 2H2V8M22 8V2L16 2M16 22H22V16M2 16L2 22H8M6 6H10V10H6V6ZM14 6H18V10H14V6ZM6 14H10V18H6V14Z"
5
+ stroke="currentColor" strokeWidth="1.5" />
6
+ </svg>
7
+ )
8
+
9
+ QrCodeIcon.displayName = 'QrCodeIcon'
@@ -0,0 +1,16 @@
1
+ export const SendIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg"
3
+ width={width}
4
+ height={height}
5
+ viewBox="0 0 24 24"
6
+ fill="none"
7
+ className={className} {...props}>
8
+ <path
9
+ d="M22 3L12.0775 21L8.74605 10.9835L2 3H22ZM22 3L8.74008 10.9871"
10
+ stroke="currentColor"
11
+ strokeWidth="1.5"
12
+ strokeLinejoin="round" />
13
+ </svg>
14
+ )
15
+
16
+ SendIcon.displayName = 'SendIcon'
@@ -0,0 +1,14 @@
1
+ export const Settings2Icon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
3
+ <path
4
+ d="M16 12C16 14.2091 14.2091 16 12 16C9.79086 16 8 14.2091 8 12C8 9.79086 9.79086 8 12 8C14.2091 8 16 9.79086 16 12Z"
5
+ stroke="currentColor"
6
+ strokeWidth="1.5" />
7
+ <path
8
+ d="M10.9214 23C10.5939 23 10.3197 22.911 10.099 22.733C9.88544 22.555 9.73948 22.2951 9.66117 21.9534L9.1699 19.8175L8.42233 19.5505L6.56408 20.7146C6.27929 20.9068 5.9945 20.9851 5.70971 20.9495C5.43204 20.921 5.17573 20.7893 4.94078 20.5544L3.43495 19.0592C3.19288 18.8243 3.05761 18.5644 3.02913 18.2796C3.00065 17.9948 3.07896 17.71 3.26408 17.4252L4.43884 15.567L4.16117 14.8408L2.0466 14.3388C1.70485 14.2605 1.44498 14.1146 1.26699 13.901C1.089 13.6803 1 13.4061 1 13.0786V10.932C1 10.6045 1.089 10.334 1.26699 10.1204C1.44498 9.89968 1.70485 9.75016 2.0466 9.67184L4.16117 9.1699L4.43884 8.43301L3.26408 6.58544C3.07896 6.29353 3.00065 6.00874 3.02913 5.73107C3.05761 5.44628 3.19288 5.18641 3.43495 4.95146L4.94078 3.44563C5.17573 3.21068 5.43204 3.07896 5.70971 3.05049C5.98738 3.02201 6.27217 3.10032 6.56408 3.28544L8.42233 4.46019L9.1699 4.18252L9.66117 2.0466C9.73948 1.70485 9.88544 1.44498 10.099 1.26699C10.3197 1.089 10.5939 1 10.9214 1H13.0786C13.4133 1 13.6874 1.089 13.901 1.26699C14.1146 1.44498 14.2605 1.70485 14.3388 2.0466L14.8301 4.18252L15.567 4.46019L17.4359 3.28544C17.7207 3.10032 18.0019 3.02201 18.2796 3.05049C18.5573 3.07896 18.8136 3.21068 19.0485 3.44563L20.565 4.95146C20.8 5.18641 20.9317 5.44628 20.9602 5.73107C20.9958 6.00874 20.921 6.29353 20.7359 6.58544L19.5505 8.43301L19.8282 9.1699L21.9534 9.67184C22.2951 9.75016 22.555 9.89968 22.733 10.1204C22.911 10.334 23 10.6045 23 10.932V13.0786C23 13.4061 22.911 13.6803 22.733 13.901C22.555 14.1146 22.2951 14.2605 21.9534 14.3388L19.8282 14.8408L19.5505 15.567L20.7252 17.4252C20.9104 17.71 20.9851 17.9948 20.9495 18.2796C20.921 18.5644 20.7893 18.8243 20.5544 19.0592L19.0485 20.5544C18.8136 20.7893 18.5537 20.921 18.2689 20.9495C17.9913 20.9851 17.71 20.9068 17.4252 20.7146L15.567 19.5505L14.8301 19.8175L14.3388 21.9534C14.2605 22.2951 14.1146 22.555 13.901 22.733C13.6874 22.911 13.4133 23 13.0786 23H10.9214Z"
9
+ stroke="currentColor"
10
+ strokeWidth="1.5" />
11
+ </svg>
12
+ )
13
+
14
+ Settings2Icon.displayName = 'Settings2Icon'
@@ -0,0 +1,9 @@
1
+ export const ShapesIcon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 24 24" fill="none" className={className} {...props}>
3
+ <path
4
+ d="M16.4982 8.20641H17.2482V8.17012L17.2447 8.134L16.4982 8.20641ZM11 9.75H20V8.25H11V9.75ZM20 9.75C20.6904 9.75 21.25 10.3096 21.25 11H22.75C22.75 9.48122 21.5188 8.25 20 8.25V9.75ZM21.25 11V20H22.75V11H21.25ZM21.25 20C21.25 20.6904 20.6904 21.25 20 21.25V22.75C21.5188 22.75 22.75 21.5188 22.75 20H21.25ZM20 21.25H11V22.75H20V21.25ZM11 21.25C10.3096 21.25 9.75 20.6904 9.75 20H8.25C8.25 21.5188 9.48122 22.75 11 22.75V21.25ZM9.75 20V11H8.25V20H9.75ZM9.75 11C9.75 10.3096 10.3096 9.75 11 9.75V8.25C9.48122 8.25 8.25 9.48122 8.25 11H9.75ZM2.24817 8.93961C2.24817 5.20725 5.27739 2.18018 9.01586 2.18018V0.680176C4.45052 0.680176 0.748169 4.37727 0.748169 8.93961H2.24817ZM9.01586 2.18018C12.5309 2.18018 15.4197 4.85685 15.7517 8.27882L17.2447 8.134C16.8387 3.94945 13.3094 0.680176 9.01586 0.680176V2.18018ZM8.53162 15.682C5.01961 15.4344 2.24817 12.5094 2.24817 8.93961H0.748169C0.748169 13.3038 4.13557 16.8758 8.42614 17.1783L8.53162 15.682ZM15.7482 8.20641V8.93018H17.2482V8.20641H15.7482Z"
5
+ fill="currentColor" />
6
+ </svg>
7
+ )
8
+
9
+ ShapesIcon.displayName = 'ShapesIcon'