poe-svelte-ui-lib 1.1.15 → 1.1.16

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.
@@ -21,14 +21,14 @@
21
21
  {id}
22
22
  class={twMerge(
23
23
  `${outline ? 'border-none' : 'rounded-xl hover:shadow-md'} w-full
24
- border border-[var(--border-color)] bg-[var(--container-color)] p-0 transition-shadow duration-250`,
24
+ border border-(--border-color) bg-(--container-color) p-0 transition-shadow duration-250`,
25
25
  wrapperClass,
26
26
  )}
27
27
  transition:slide={{ duration: 250 }}
28
28
  >
29
29
  <button
30
30
  class="flex w-full cursor-pointer items-center justify-between p-4 transition-shadow duration-250
31
- {outline ? 'border-b border-[var(--border-color)]' : ''}"
31
+ {outline ? 'border-b border-(--border-color)' : ''}"
32
32
  onclick={toggle}
33
33
  >
34
34
  <div class="flex w-full items-center">
@@ -67,7 +67,7 @@
67
67
 
68
68
  {#if isOpen}
69
69
  <div
70
- class="grid w-full p-4 sm:p-3 {image ? 'gap-x-2' : 'gap-2'} {outline ? '' : 'border-t border-[var(--border-color)]'}"
70
+ class="grid w-full p-4 sm:p-3 {image ? 'gap-x-2' : 'gap-2'} {outline ? '' : 'border-t border-(--border-color)'}"
71
71
  transition:slide={{ duration: 250 }}
72
72
  style="grid-template-columns: repeat({size.width || 10}, minmax(0, 1fr));
73
73
  grid-template-rows: repeat({size.height || 2}, {image ? 'minmax(6.5rem, auto)' : 'auto'});
@@ -69,8 +69,8 @@
69
69
  {#snippet main()}
70
70
  <div class="grid grid-cols-3">
71
71
  {#each ICONS as category}
72
- <div class="relative m-1.5 rounded-xl border-2 border-[var(--border-color)] p-3">
73
- <div class="absolute -top-3.5 bg-[var(--back-color)] px-1">{$t(`constructor.props.icon.${category[0]}`)}</div>
72
+ <div class="relative m-1.5 rounded-xl border-2 border-(--border-color) p-3">
73
+ <div class="absolute -top-3.5 bg-(--back-color) px-1">{$t(`constructor.props.icon.${category[0]}`)}</div>
74
74
  <div class="grid grid-cols-3 place-items-center gap-2">
75
75
  {#each category[1] as icon}
76
76
  <button
@@ -180,8 +180,8 @@
180
180
  {#snippet main()}
181
181
  <div class="grid grid-cols-3">
182
182
  {#each ICONS as category}
183
- <div class="relative m-1.5 rounded-xl border-2 border-[var(--border-color)] p-3">
184
- <div class="absolute -top-3.5 bg-[var(--back-color)] px-1">{$t(`constructor.props.icon.${category[0]}`)}</div>
183
+ <div class="relative m-1.5 rounded-xl border-2 border-(--border-color) p-3">
184
+ <div class="absolute -top-3.5 bg-(--back-color) px-1">{$t(`constructor.props.icon.${category[0]}`)}</div>
185
185
  <div class="grid grid-cols-3 place-items-center gap-2">
186
186
  {#each category[1] as icon}
187
187
  <button
@@ -71,10 +71,10 @@
71
71
  class="{twMerge(
72
72
  `relative m-0 inline-block w-full items-center rounded-2xl
73
73
  px-2 py-1 font-semibold transition duration-200 select-none
74
- ${content.icon && !content.name ? 'bg-transparent p-0' : 'bg-blue border border-[var(--bg-color)] '}
74
+ ${content.icon && !content.name ? 'bg-transparent p-0' : 'bg-blue border border-(--bg-color) '}
75
75
  ${disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer active:scale-97'} `,
76
76
  componentClass,
77
- )} bg-[var(--bg-color)]"
77
+ )} bg-(--bg-color)"
78
78
  onclick={handleClick}
79
79
  {disabled}
80
80
  aria-label={content.name}
@@ -116,12 +116,12 @@
116
116
  {#if showInfo}
117
117
  <div
118
118
  transition:fly={{ y: -15, duration: 300 }}
119
- class="absolute bottom-full left-1/2 z-50 mb-2 w-max max-w-xs rounded-md bg-[var(--container-color)] px-3 py-1 text-sm shadow-lg"
119
+ class="absolute bottom-full left-1/2 z-50 mb-2 w-max max-w-xs rounded-md bg-(--container-color) px-3 py-1 text-sm shadow-lg"
120
120
  style="transform: translateX(-50%);"
121
121
  >
122
122
  {content.info}
123
123
  <!-- Треугольная стрелка -->
124
- <div class="absolute top-full left-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rotate-45 transform bg-[var(--container-color)]"></div>
124
+ <div class="absolute top-full left-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rotate-45 transform bg-(--container-color)"></div>
125
125
  </div>
126
126
  {/if}
127
127
  </div>
@@ -77,7 +77,7 @@
77
77
  onUpdate={(value) => updateProperty('eventHandler.Argument', value as string, component, onPropertyChange)}
78
78
  />
79
79
 
80
- {#if (component.properties.eventHandler.Argument !== 'Save' && component.properties.eventHandler.Argument !== 'NoSave') || Header.value !== 'SET'}
80
+ {#if (component.properties.eventHandler.Argument !== 'Save' && component.properties.eventHandler.Argument !== 'NoSave') || Header.value === 'SET'}
81
81
  <UI.Input
82
82
  label={{ name: $t('constructor.props.value') }}
83
83
  value={component.properties.eventHandler.Value}
@@ -189,7 +189,7 @@
189
189
  tabindex={null}
190
190
  onmousedown={(e) => handleDrag(e, 'white')}
191
191
  >
192
- <div class="absolute inset-0 bg-gradient-to-r from-black to-white"></div>
192
+ <div class="absolute inset-0 bg-linear-to-r from-black to-white"></div>
193
193
  {#if mode === 'white'}
194
194
  <div
195
195
  class="pointer-events-none absolute top-1/2 h-7 w-1 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white"
@@ -13,13 +13,13 @@
13
13
  <div class="flex-1 overflow-y-auto">
14
14
  {@render component()}
15
15
  </div>
16
- <div class=" border-t border-gray-500"></div>
17
- <div class="h-fit" transition:fade={{ duration: 200 }}>
16
+ <div class="border-t border-gray-500"></div>
17
+ <div class="max-h-[70%]" transition:fade={{ duration: 200 }}>
18
18
  {@render componentProps()}
19
19
  <div class="relative mt-3">
20
20
  <UI.Button
21
21
  wrapperClass="absolute top-3 right-5 w-6"
22
- content={{ icon: isCopied ? '<div class="rounded-md bg-[var(--green-color)] shadow-lg px-1">✓</div>' : CopyButton }}
22
+ content={{ icon: isCopied ? '<div class="rounded-md bg-(--green-color) shadow-lg px-1">✓</div>' : CopyButton }}
23
23
  onClick={() => {
24
24
  isCopied = true
25
25
  setTimeout(() => (isCopied = false), 1000)
@@ -59,7 +59,7 @@
59
59
  <div class="relative">
60
60
  <button
61
61
  class="flex items-center justify-center overflow-hidden {imageSize.form === 'circle' ? 'rounded-full' : 'rounded-2xl'}
62
- bg-[var(--back-color)] shadow-sm transition duration-250 hover:shadow-md
62
+ bg-(--back-color) shadow-sm transition duration-250 hover:shadow-md
63
63
  {disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'}"
64
64
  style={`height: ${imageSize.height}; width: ${imageSize.width}`}
65
65
  onclick={triggerFileInput}
@@ -85,9 +85,9 @@
85
85
  <input
86
86
  {id}
87
87
  type="file"
88
- class={`h-8.5 w-full rounded-2xl bg-[var(--back-color)] font-semibold shadow-sm transition duration-250 hover:shadow-md
89
- ${disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'} file:h-full file:w-1/3 file:cursor-pointer
90
- file:border-none file:bg-[var(--blue-color)] invalid:border-red-400 invalid:shadow-[0_0_6px_var(--red-color)]`}
88
+ class={`h-8.5 w-full rounded-2xl bg-(--back-color) font-semibold shadow-sm transition duration-250 hover:shadow-md
89
+ ${disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'} invalid:shadow-[0_0_6px(--red-color) file:h-full file:w-1/3
90
+ file:cursor-pointer file:border-none file:bg-(--blue-color) invalid:border-red-400`}
91
91
  {accept}
92
92
  {disabled}
93
93
  onchange={handleFileChange}
@@ -225,8 +225,8 @@
225
225
 
226
226
  <div class="flex w-full flex-row gap-4">
227
227
  <!-- График -->
228
- <div bind:this={container} class="h-64 flex-grow overflow-hidden rounded-md border border-gray-200">
229
- <canvas class="h-full w-full bg-[var(--back-color)]" bind:this={canvas}></canvas>
228
+ <div bind:this={container} class="h-64 grow overflow-hidden rounded-md border border-gray-200">
229
+ <canvas class="h-full w-full bg-(--back-color)" bind:this={canvas}></canvas>
230
230
  </div>
231
231
 
232
232
  <!-- Панель настроек -->
@@ -3,8 +3,6 @@
3
3
  import { t } from '../locales/i18n'
4
4
  import { type UIComponent, type IGraphProps, updateProperty } from '../types'
5
5
  import * as UI from '..'
6
- import ButtonAdd from '../libIcons/ButtonAdd.svelte'
7
- import ButtonDelete from '../libIcons/ButtonDelete.svelte'
8
6
 
9
7
  const {
10
8
  component,
@@ -63,7 +63,7 @@
63
63
  class={twMerge(
64
64
  `w-full rounded-2xl border px-4 py-1 text-center transition-all duration-300 outline-none focus:border-blue-400
65
65
  [&::-webkit-inner-spin-button]:hidden [&::-webkit-outer-spin-button]:hidden
66
- ${isValid ? 'border-[var(--border-color)]' : '!border-red-400 shadow-[0_0_6px_var(--red-color)]'}
66
+ ${isValid ? 'border-(--border-color)' : 'border-red-400 shadow-[0_0_6px_var(--red-color)]'}
67
67
  ${disabled ? 'opacity-50' : 'hover:shadow-md'}
68
68
  ${readonly ? '' : 'hover:shadow-md'}
69
69
  ${help?.info ? 'pl-8' : ''}
@@ -87,8 +87,8 @@
87
87
  <textarea
88
88
  bind:value
89
89
  class={twMerge(
90
- `h-full w-full resize-y rounded-2xl border border-[var(--border-color)] px-2 py-1 text-center font-mono transition-all duration-300 outline-none focus:border-blue-400
91
- ${isValid ? 'border-[var(--border-color)]' : '!border-red-400 shadow-[0_0_6px_var(--red-color)]'}
90
+ `h-full w-full resize-y rounded-2xl border border-(--border-color) px-2 py-1 text-center font-mono transition-all duration-300 outline-none focus:border-blue-400
91
+ ${isValid ? 'border-(--border-color)' : 'border-red-400 shadow-[0_0_6px_var(--red-color)]'}
92
92
  ${disabled ? 'opacity-50' : 'hover:shadow-md'}
93
93
  ${readonly ? '' : 'hover:shadow-md'}
94
94
  ${help?.info ? 'pl-8' : ''}
@@ -158,7 +158,7 @@
158
158
 
159
159
  {#if isCopied}
160
160
  <div
161
- class="absolute top-1/2 right-10 -translate-y-1/2 transform rounded-md bg-[var(--green-color)] px-2 py-1 text-sm shadow-lg"
161
+ class="absolute top-1/2 right-10 -translate-y-1/2 transform rounded-md bg-(--green-color) px-2 py-1 text-sm shadow-lg"
162
162
  transition:fly={{ x: 10, duration: 200 }}
163
163
  >
164
164
 
@@ -167,9 +167,9 @@
167
167
  {/if}
168
168
 
169
169
  {#if type === 'number' && !readonly && !disabled}
170
- <div class="absolute right-0 flex h-full w-8 flex-col items-center justify-center rounded-r-2xl border-l border-[var(--border-color)]">
170
+ <div class="absolute right-0 flex h-full w-8 flex-col items-center justify-center rounded-r-2xl border-l border-(--border-color)">
171
171
  <button
172
- class="flex h-1/2 w-full items-center rounded-tr-2xl border-b border-[var(--border-color)] pl-2 transition-colors duration-150 hover:bg-[var(--gray-color)]/30 active:bg-[var(--gray-color)]/10"
172
+ class="flex h-1/2 w-full items-center rounded-tr-2xl border-b border-(--border-color) pl-2 transition-colors duration-150 hover:bg-(--gray-color)/30 active:bg-(--gray-color)/10"
173
173
  onclick={() => {
174
174
  if (!number.maxNum || !number.step) return
175
175
  if (Number(value) + number.step >= number.maxNum) {
@@ -184,7 +184,7 @@
184
184
  >
185
185
 
186
186
  <button
187
- class="flex h-1/2 w-full items-center rounded-br-2xl pl-2 transition-colors duration-150 hover:bg-[var(--gray-color)]/30 active:bg-[var(--gray-color)]/10"
187
+ class="flex h-1/2 w-full items-center rounded-br-2xl pl-2 transition-colors duration-150 hover:bg-(--gray-color)/30 active:bg-(--gray-color)/10"
188
188
  onclick={() => {
189
189
  if (number.minNum === null || number.minNum === undefined || !number.step) return
190
190
  if (Number(value) - number.step <= number.minNum) {
@@ -223,7 +223,7 @@
223
223
  {#if showInfo}
224
224
  <div
225
225
  transition:fly={{ x: -15, duration: 250 }}
226
- class="absolute top-1/2 left-10 z-50 w-auto -translate-y-1/2 rounded bg-[var(--container-color)] px-2 py-1 shadow-lg"
226
+ class="absolute top-1/2 left-10 z-50 w-auto -translate-y-1/2 rounded bg-(--container-color) px-2 py-1 shadow-lg"
227
227
  >
228
228
  {help?.info}
229
229
  </div>
@@ -87,7 +87,7 @@
87
87
  }
88
88
  </script>
89
89
 
90
- {#if component && component.properties}
90
+ {#if forConstructor}
91
91
  <div class="relative flex flex-row items-start justify-center">
92
92
  <!-- Сообщение для отправки в ws по нажатию кнопки -->
93
93
  <div class="flex w-1/3 flex-col items-center px-2">
@@ -191,4 +191,136 @@
191
191
  />
192
192
  </div>
193
193
  </div>
194
+ {:else}
195
+ <div class="relative flex flex-row items-start justify-center">
196
+ <!-- Сообщение для отправки в ws по нажатию кнопки -->
197
+ <div class="flex w-1/3 flex-col items-center px-2">
198
+ <UI.Input
199
+ label={{ name: $t('constructor.props.id') }}
200
+ value={component.properties.id}
201
+ onUpdate={(value) => updateProperty('id', value as string)}
202
+ />
203
+ <UI.Input
204
+ label={{ name: $t('constructor.props.wrapperclass') }}
205
+ value={component.properties.wrapperClass}
206
+ onUpdate={(value) => updateProperty('wrapperClass', value as string)}
207
+ />
208
+ <UI.Input
209
+ label={{ name: $t('constructor.props.label') }}
210
+ value={component.properties.label.name}
211
+ onUpdate={(value) => updateProperty('label.name', value as string)}
212
+ />
213
+ <UI.Input
214
+ label={{ name: $t('constructor.props.label.class') }}
215
+ value={component.properties.label.class}
216
+ onUpdate={(value) => updateProperty('label.class', value as string)}
217
+ />
218
+ <UI.Input
219
+ label={{ name: $t('constructor.props.componentclass') }}
220
+ value={component.properties.componentClass}
221
+ onUpdate={(value) => updateProperty('componentClass', value as string)}
222
+ />
223
+ <UI.Select
224
+ wrapperClass="h-14"
225
+ label={{ name: $t('constructor.props.colors') }}
226
+ type="buttons"
227
+ options={$optionsStore.COLOR_OPTIONS}
228
+ value={initialColor}
229
+ onUpdate={(option) => handleOptionColorChange(option.value as string)}
230
+ />
231
+ </div>
232
+ <div class="flex w-1/3 flex-col px-2">
233
+ <UI.Input
234
+ label={{ name: $t('constructor.props.value') }}
235
+ value={component.properties.value}
236
+ onUpdate={(value) => updateProperty('value', value as string)}
237
+ />
238
+ <UI.Select
239
+ label={{ name: $t('constructor.props.type') }}
240
+ options={$optionsStore.INPUT_TYPE_OPTIONS}
241
+ type="buttons"
242
+ value={$optionsStore.INPUT_TYPE_OPTIONS.find((opt) => opt.value === (component.properties.type || 'text'))}
243
+ onUpdate={(selectedOption) => updateProperty('type', selectedOption.value as string)}
244
+ />
245
+ {#if component.properties.type === 'text' || component.properties.type === 'password' || component.properties.type === 'text-area'}
246
+ <UI.Input
247
+ label={{ name: $t('constructor.props.maxlenght') }}
248
+ value={component.properties.maxlength}
249
+ onUpdate={(value) => updateProperty('maxlength', value as string)}
250
+ />
251
+ <UI.Input
252
+ label={{ name: $t('constructor.props.regexp') }}
253
+ value={component.properties.help.regExp}
254
+ maxlength={150}
255
+ help={{ info: $t('constructor.props.regexp.info') }}
256
+ componentClass={isValidRegExp === false ? '!border-2 !border-red-400' : ''}
257
+ onUpdate={(value) => updateProperty('help.regExp', value)}
258
+ />
259
+ {#if component.properties.type === 'text-area'}
260
+ <UI.Input
261
+ label={{ name: $t('constructor.props.textarea.rows') }}
262
+ value={component.properties.textareaRows}
263
+ onUpdate={(value) => updateProperty('textareaRows', value as string)}
264
+ />
265
+ {/if}
266
+ {:else if component.properties.type === 'number' && !component.properties.readonly && !component.properties.disabled}
267
+ <UI.Input
268
+ label={{ name: $t('constructor.props.minnum') }}
269
+ value={component.properties.number.minNum as number}
270
+ type="number"
271
+ onUpdate={(value) => {
272
+ updateProperty('number.minNum', Number(value))
273
+ }}
274
+ />
275
+ <UI.Input
276
+ label={{ name: $t('constructor.props.maxnum') }}
277
+ value={component.properties.number.maxNum as number}
278
+ type="number"
279
+ onUpdate={(value) => {
280
+ updateProperty('number.maxNum', Number(value))
281
+ }}
282
+ />
283
+ <UI.Input
284
+ label={{ name: $t('constructor.props.step') }}
285
+ value={component.properties.number.step as number}
286
+ type="number"
287
+ onUpdate={(value) => updateProperty('number.step', Number(value))}
288
+ />
289
+ {/if}
290
+ </div>
291
+ <div class="flex w-1/3 flex-col px-2">
292
+ <UI.Input
293
+ label={{ name: $t('constructor.props.placeholder') }}
294
+ value={component.properties.placeholder as string}
295
+ onUpdate={(value) => updateProperty('placeholder', value)}
296
+ />
297
+ <UI.Input
298
+ label={{ name: $t('constructor.props.info') }}
299
+ value={component.properties.help.info as string}
300
+ onUpdate={(value) => updateProperty('help.info', value)}
301
+ />
302
+ <UI.Select
303
+ label={{ name: $t('constructor.props.autocomplete') }}
304
+ options={$optionsStore.AUTOCOMPLETE_OPTIONS}
305
+ value={$optionsStore.AUTOCOMPLETE_OPTIONS.find((opt) => opt.value === (component.properties.help.autocomplete || 'off'))}
306
+ onUpdate={(selectedOption) => updateProperty('help.autocomplete', selectedOption.value as string)}
307
+ />
308
+
309
+ <UI.Switch
310
+ label={{ name: $t('constructor.props.readonly') }}
311
+ value={component.properties.readonly ? 2 : 1}
312
+ onChange={(value) => updateProperty('readonly', value === 2)}
313
+ />
314
+ <UI.Switch
315
+ label={{ name: $t('constructor.props.copy') }}
316
+ value={component.properties.help.copyButton ? 2 : 1}
317
+ onChange={(value) => updateProperty('help.copyButton', value === 2)}
318
+ />
319
+ <UI.Switch
320
+ label={{ name: $t('constructor.props.disabled') }}
321
+ value={component.properties.disabled ? 2 : 1}
322
+ onChange={(value) => updateProperty('disabled', value === 2)}
323
+ />
324
+ </div>
325
+ </div>
194
326
  {/if}
package/dist/Modal.svelte CHANGED
@@ -36,10 +36,10 @@
36
36
  {#if isOpen}
37
37
  <div class="fixed inset-0 z-60 flex items-center justify-center bg-black/50" transition:fade={{ duration: 200 }}>
38
38
  <div
39
- class={twMerge(`flex w-300 flex-col overflow-hidden rounded-2xl bg-[var(--back-color)] text-center`, wrapperClass)}
39
+ class={twMerge(`flex w-300 flex-col overflow-hidden rounded-2xl bg-(--back-color) text-center`, wrapperClass)}
40
40
  transition:scale={{ duration: 250, start: 0.8 }}
41
41
  >
42
- <div class="flex items-end justify-between bg-[var(--field-color)] px-6 py-3">
42
+ <div class="flex items-end justify-between bg-(--field-color) px-6 py-3">
43
43
  <h4>{title}</h4>
44
44
  <button class="h-6 w-6 cursor-pointer" onclick={onCancel}> <CrossIcon /> </button>
45
45
  </div>
@@ -48,7 +48,7 @@
48
48
  {@render main?.()}
49
49
  </div>
50
50
  {#if footer}
51
- <div class="flex flex-row-reverse justify-between bg-[var(--field-color)] p-1.5">
51
+ <div class="flex flex-row-reverse justify-between bg-(--field-color) p-1.5">
52
52
  {@render footer?.()}
53
53
  </div>
54
54
  {/if}
@@ -5,6 +5,7 @@
5
5
 
6
6
  let {
7
7
  id = crypto.randomUUID(),
8
+ wrapperClass = '',
8
9
  label = { name: '', class: '' },
9
10
  value = $bindable(0),
10
11
  number = {
@@ -12,7 +13,6 @@
12
13
  maxNum: 100,
13
14
  units: '%',
14
15
  },
15
- wrapperClass = '',
16
16
  }: IProgressBarProps = $props()
17
17
 
18
18
  const min = $derived(number.minNum ?? 0)
@@ -24,6 +24,7 @@
24
24
  return Math.max(min, Math.min(max, value))
25
25
  } else if (typeof value === 'string') {
26
26
  const parsedValue = parseFloat(value)
27
+ console.log(value)
27
28
  if (!isNaN(parsedValue)) {
28
29
  return Math.max(min, Math.min(max, parsedValue))
29
30
  }
@@ -47,7 +48,7 @@
47
48
 
48
49
  <div class="flex w-full flex-col items-center">
49
50
  <div class="relative h-2 w-full rounded bg-gray-400">
50
- <div class="absolute top-0 left-0 h-full rounded bg-[var(--bg-color)]" style="width: {progressPercent()}%;"></div>
51
+ <div class="absolute top-0 left-0 h-full rounded bg-(--bg-color)" style="width: {progressPercent()}%;"></div>
51
52
  </div>
52
53
  <span class="ml-2 font-semibold">{numericValue?.toFixed(2)}{number.units}</span>
53
54
  </div>
@@ -32,7 +32,7 @@
32
32
  )
33
33
  </script>
34
34
 
35
- {#if component && component.properties}
35
+ {#if forConstructor}
36
36
  <div class="relative flex flex-row items-start justify-center">
37
37
  <div class="flex w-1/3 flex-col items-center px-2">
38
38
  <UI.Select
@@ -109,4 +109,68 @@
109
109
  />
110
110
  </div>
111
111
  </div>
112
+ {:else}
113
+ <div class="relative flex flex-row items-start justify-center">
114
+ <div class="flex w-1/3 flex-col items-center px-2">
115
+ <UI.Input
116
+ label={{ name: $t('constructor.props.id') }}
117
+ value={component.properties.id}
118
+ onUpdate={(value) => updateProperty('id', value as string, component, onPropertyChange)}
119
+ />
120
+ <UI.Input
121
+ label={{ name: $t('constructor.props.wrapperclass') }}
122
+ value={component.properties.wrapperClass}
123
+ onUpdate={(value) => updateProperty('wrapperClass', value as string, component, onPropertyChange)}
124
+ />
125
+ <UI.Select
126
+ wrapperClass="!h-14"
127
+ label={{ name: $t('constructor.props.colors') }}
128
+ type="buttons"
129
+ options={$optionsStore.COLOR_OPTIONS}
130
+ value={initialColor}
131
+ onUpdate={(option) => updateProperty('wrapperClass', twMerge(component.properties.wrapperClass, option.value), component, onPropertyChange)}
132
+ />
133
+ </div>
134
+ <div class="flex w-1/3 flex-col px-2">
135
+ <UI.Input
136
+ label={{ name: $t('constructor.props.label') }}
137
+ value={component.properties.label.name}
138
+ onUpdate={(value) => updateProperty('label.name', value as string, component, onPropertyChange)}
139
+ />
140
+ <UI.Input
141
+ label={{ name: $t('constructor.props.label.class') }}
142
+ value={component.properties.label.class}
143
+ onUpdate={(value) => updateProperty('label.class', value as string, component, onPropertyChange)}
144
+ />
145
+ <UI.Input
146
+ label={{ name: $t('constructor.props.value') }}
147
+ value={component.properties.value}
148
+ onUpdate={(value) => updateProperty('value', value as string, component, onPropertyChange)}
149
+ />
150
+ </div>
151
+ <div class="flex w-1/3 flex-col px-2">
152
+ <UI.Input
153
+ label={{ name: $t('constructor.props.min') }}
154
+ value={component.properties.number.minNum as number}
155
+ type="number"
156
+ onUpdate={(value) => {
157
+ updateProperty('number.minNum', Number(value), component, onPropertyChange)
158
+ }}
159
+ />
160
+ <UI.Input
161
+ label={{ name: $t('constructor.props.max') }}
162
+ value={component.properties.number.maxNum as number}
163
+ type="number"
164
+ onUpdate={(value) => {
165
+ updateProperty('number.maxNum', Number(value), component, onPropertyChange)
166
+ }}
167
+ />
168
+
169
+ <UI.Input
170
+ label={{ name: $t('constructor.props.units') }}
171
+ value={component.properties.number.units}
172
+ onUpdate={(value) => updateProperty('number.units', value, component, onPropertyChange)}
173
+ />
174
+ </div>
175
+ </div>
112
176
  {/if}
@@ -95,7 +95,7 @@
95
95
  {id}
96
96
  value={value?.value ? String(value.value) : ''}
97
97
  class={twMerge(
98
- `w-full rounded-2xl border border-[var(--border-color)] p-1 text-center duration-250
98
+ `w-full rounded-2xl border border-(--border-color) p-1 text-center duration-250
99
99
  ${disabled ? 'opacity-50' : 'cursor-pointer hover:shadow-lg'}`,
100
100
  value?.class,
101
101
  )}
@@ -110,7 +110,7 @@
110
110
 
111
111
  {#if isDropdownOpen}
112
112
  <div
113
- class="absolute top-full left-1/2 z-50 -translate-x-1/2 rounded-b-2xl border border-t-0 border-[var(--border-color)]"
113
+ class="absolute top-full left-1/2 z-50 -translate-x-1/2 rounded-b-2xl border border-t-0 border-(--border-color)"
114
114
  style="width: calc(100% - 1.8rem);"
115
115
  transition:slide={{ duration: 250 }}
116
116
  >
@@ -119,7 +119,7 @@
119
119
  id={option.id}
120
120
  value={option?.value ? String(option.value) : ''}
121
121
  class={twMerge(
122
- `flex h-full w-full cursor-pointer items-center justify-center p-1 duration-250 hover:!bg-[var(--field-color)]
122
+ `flex h-full w-full cursor-pointer items-center justify-center p-1 duration-250 hover:bg-(--field-color)
123
123
  ${index === options.length - 1 ? 'rounded-b-2xl' : ''} `,
124
124
  option.class,
125
125
  )}
@@ -133,7 +133,7 @@
133
133
  </div>
134
134
  {/if}
135
135
  {:else if type === 'buttons'}
136
- <div {id} class="flex h-full w-full flex-row justify-center rounded-full border border-[var(--bg-color)]">
136
+ <div {id} class="flex h-full w-full flex-row justify-center rounded-full border border-(--bg-color)">
137
137
  {#each options as option, index (option.id)}
138
138
  <button
139
139
  id={option.id}
@@ -143,7 +143,7 @@
143
143
  ${option.value === value?.value && value !== null ? 'z-10 py-1 shadow-[0_0_10px_var(--shadow-color)] hover:shadow-[0_0_15px_var(--shadow-color)]' : ''}
144
144
  ${options.length > 0 && index === 0 ? 'rounded-l-2xl' : ''} ${index === options.length - 1 ? 'rounded-r-2xl' : ''}`,
145
145
  option.class,
146
- )} bg-[var(--bg-color)]"
146
+ )} bg-(--bg-color)"
147
147
  onclick={(e) => selectOption(option, e)}
148
148
  disabled={option.disabled}
149
149
  >
@@ -163,7 +163,7 @@
163
163
  class="w-full appearance-none rounded-2xl border px-4 py-1 text-center transition-shadow
164
164
  outline-none hover:shadow-md focus:border-blue-400
165
165
  [&::-webkit-inner-spin-button]:hidden [&::-webkit-outer-spin-button]:hidden
166
- {disabled ? 'cursor-not-allowed opacity-50' : 'cursor-text'} border-[var(--border-color)]"
166
+ {disabled ? 'cursor-not-allowed opacity-50' : 'cursor-text'} border-(--border-color)"
167
167
  style="background: color-mix(in srgb, var(--bg-color), var(--back-color) 70%);"
168
168
  {id}
169
169
  {disabled}
@@ -178,7 +178,7 @@
178
178
 
179
179
  {#if isDropdownOpen}
180
180
  <div
181
- class="absolute top-full left-1/2 z-50 -translate-x-1/2 rounded-b-2xl border border-t-0 border-[var(--border-color)]"
181
+ class="absolute top-full left-1/2 z-50 -translate-x-1/2 rounded-b-2xl border border-t-0 border-(--border-color)"
182
182
  style="width: calc(100% - 1.8rem);"
183
183
  transition:slide={{ duration: 250 }}
184
184
  >
@@ -187,7 +187,7 @@
187
187
  id={option.id}
188
188
  value={option?.value ? String(option.value) : ''}
189
189
  class={twMerge(
190
- `flex h-full w-full cursor-pointer items-center justify-center p-1 duration-250 hover:!bg-[var(--field-color)]
190
+ `flex h-full w-full cursor-pointer items-center justify-center p-1 duration-250 hover:bg-(--field-color)
191
191
  ${index === filteredOptions.length - 1 ? 'rounded-b-2xl' : ''} `,
192
192
  option.class,
193
193
  )}