@proj-airi/ui 0.6.0 → 0.7.0-alpha.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 (56) hide show
  1. package/package.json +9 -20
  2. package/src/components/Animations/TransitionHorizontal.vue +36 -0
  3. package/src/components/Animations/index.ts +1 -0
  4. package/src/components/Form/Field/FieldCheckbox.vue +6 -2
  5. package/src/components/Form/Field/FieldInput.vue +27 -5
  6. package/src/components/Form/Field/FieldKeyValues.vue +6 -2
  7. package/src/components/Form/Field/FieldRange.vue +13 -6
  8. package/src/components/Form/Field/FieldSelect.vue +50 -0
  9. package/src/components/Form/Field/FieldValues.vue +66 -0
  10. package/src/components/Form/Field/index.ts +2 -0
  11. package/src/components/Form/Input/Input.vue +1 -1
  12. package/src/components/Form/Range/ColorHueRange.vue +8 -8
  13. package/src/components/Form/Range/Range.vue +47 -20
  14. package/src/components/Form/Range/RoundRange.vue +277 -0
  15. package/src/components/Form/Range/index.ts +1 -0
  16. package/src/components/Form/Select/Option.vue +29 -0
  17. package/src/components/Form/Select/Select.vue +45 -26
  18. package/src/components/Form/Select/index.ts +1 -0
  19. package/src/components/Form/Textarea/Basic.vue +8 -0
  20. package/build.config.ts +0 -11
  21. package/dist/components/Animations/TransitionVertical.vue +0 -95
  22. package/dist/components/Animations/index.d.ts +0 -1
  23. package/dist/components/Animations/index.mjs +0 -1
  24. package/dist/components/Form/Checkbox/Checkbox.vue +0 -26
  25. package/dist/components/Form/Checkbox/index.d.ts +0 -1
  26. package/dist/components/Form/Checkbox/index.mjs +0 -1
  27. package/dist/components/Form/Field/FieldCheckbox.vue +0 -24
  28. package/dist/components/Form/Field/FieldInput.vue +0 -34
  29. package/dist/components/Form/Field/FieldKeyValues.vue +0 -54
  30. package/dist/components/Form/Field/FieldRange.vue +0 -37
  31. package/dist/components/Form/Field/index.d.ts +0 -4
  32. package/dist/components/Form/Field/index.mjs +0 -4
  33. package/dist/components/Form/Input/Input.vue +0 -20
  34. package/dist/components/Form/Input/InputFile.vue +0 -65
  35. package/dist/components/Form/Input/InputKeyValue.vue +0 -17
  36. package/dist/components/Form/Input/index.d.ts +0 -3
  37. package/dist/components/Form/Input/index.mjs +0 -3
  38. package/dist/components/Form/Radio/Radio.vue +0 -103
  39. package/dist/components/Form/Radio/index.d.ts +0 -1
  40. package/dist/components/Form/Radio/index.mjs +0 -1
  41. package/dist/components/Form/Range/ColorHueRange.vue +0 -60
  42. package/dist/components/Form/Range/Range.vue +0 -315
  43. package/dist/components/Form/Range/index.d.ts +0 -2
  44. package/dist/components/Form/Range/index.mjs +0 -2
  45. package/dist/components/Form/Select/Select.vue +0 -98
  46. package/dist/components/Form/Select/index.d.ts +0 -1
  47. package/dist/components/Form/Select/index.mjs +0 -1
  48. package/dist/components/Form/Textarea/Basic.vue +0 -32
  49. package/dist/components/Form/Textarea/Textarea.vue +0 -17
  50. package/dist/components/Form/Textarea/index.d.ts +0 -2
  51. package/dist/components/Form/Textarea/index.mjs +0 -2
  52. package/dist/components/Form/index.d.ts +0 -7
  53. package/dist/components/Form/index.mjs +0 -7
  54. package/dist/index.d.ts +0 -2
  55. package/dist/index.mjs +0 -2
  56. package/uno.config.ts +0 -8
@@ -1,315 +0,0 @@
1
- <script setup>
2
- import { computed, onMounted, ref } from "vue";
3
- const props = defineProps({
4
- min: { type: Number, required: false, default: 0 },
5
- max: { type: Number, required: false, default: 100 },
6
- step: { type: Number, required: false, default: 1 },
7
- disabled: { type: Boolean, required: false, default: false },
8
- thumbColor: { type: String, required: false, default: "#9090906e" },
9
- trackColor: { type: String, required: false, default: "gray" },
10
- trackValueColor: { type: String, required: false, default: "red" }
11
- });
12
- const modelValue = defineModel("modelValue", { type: Number, ...{ required: true } });
13
- const scaledMin = computed(() => props.min * 1e4);
14
- const scaledMax = computed(() => props.max * 1e4);
15
- const scaledStep = computed(() => props.step * 1e4);
16
- const sliderRef = ref();
17
- const sliderValue = computed({
18
- get: () => modelValue.value * 1e4,
19
- set: (value) => {
20
- modelValue.value = value / 1e4;
21
- updateTrackColor();
22
- }
23
- });
24
- onMounted(() => {
25
- updateTrackColor();
26
- });
27
- function updateTrackColor() {
28
- if (!sliderRef.value)
29
- return;
30
- sliderRef.value.style.setProperty("--value", sliderRef.value.value);
31
- sliderRef.value.style.setProperty("--min", !sliderRef.value.min ? props.min.toString() : sliderRef.value.min);
32
- sliderRef.value.style.setProperty("--max", !sliderRef.value.max ? props.max.toString() : sliderRef.value.max);
33
- }
34
- function handleInput(e) {
35
- const target = e.target;
36
- target.style.setProperty("--value", target.value);
37
- }
38
- </script>
39
-
40
- <template>
41
- <input
42
- ref="sliderRef"
43
- v-model.number="sliderValue"
44
- type="range"
45
- :min="scaledMin"
46
- :max="scaledMax"
47
- :step="scaledStep"
48
- class="slider-progress form_input-range"
49
- @input="handleInput"
50
- >
51
- </template>
52
-
53
- <style scoped>
54
- /*generated with Input range slider CSS style generator (version 20211225)
55
- https://toughengineer.github.io/demo/slider-styler*/
56
- .form_input-range {
57
- --height: 2em;
58
-
59
- min-height: var(--height);
60
- appearance: none;
61
- background: transparent;
62
- border-radius: 4px;
63
- transition: background-color 0.2s ease;
64
-
65
- --thumb-width: 4px;
66
- --thumb-height: var(--height);
67
- --thumb-box-shadow: 0 0 0px #e6e6e6;
68
- --thumb-border: none;
69
- --thumb-border-radius: 999px;
70
- --thumb-background: oklch(80% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
71
- --thumb-background-hover: oklch(90% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
72
- --thumb-background-active: oklch(70% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
73
-
74
- --track-height: calc(var(--height) - var(--track-value-padding) * 2);
75
- --track-box-shadow: none;
76
- --track-border: solid 2px rgb(238, 238, 238);
77
- --track-border-radius: 6px;
78
- --track-background: rgb(238, 238, 238);
79
- --track-background-hover: rgb(238, 238, 238);
80
- --track-background-active: rgb(238, 238, 238);
81
-
82
- --track-value-background: rgb(255, 255, 255);
83
- --track-value-background-hover: rgb(255, 255, 255);
84
- --track-value-background-active: rgb(255, 255, 255);
85
- --track-value-padding: 2px;
86
- }
87
-
88
- .dark .form_input-range {
89
- --thumb-background: oklch(70% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
90
- --thumb-background-hover: oklch(90% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
91
- --thumb-background-active: oklch(80% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
92
-
93
- --track-border: solid 2px rgb(44, 44, 44);
94
- --track-background: rgb(44, 44, 44);
95
- --track-background-hover: rgb(44, 44, 44);
96
- --track-background-active: rgb(44, 44, 44);
97
-
98
- --track-value-background: rgb(164, 164, 164);
99
- --track-value-background-hover: rgb(164, 164, 164);
100
- --track-value-background-active: rgb(164, 164, 164);
101
- }
102
-
103
- /*progress support*/
104
- .form_input-range.slider-progress {
105
- --range: calc(var(--max) - var(--min));
106
- --ratio: calc((var(--value) - var(--min)) / var(--range));
107
- --sx: calc(0.5 * 0em + var(--ratio) * (100% - 0em));
108
- }
109
-
110
- .form_input-range:focus {
111
- outline: none;
112
- }
113
-
114
- /*webkit*/
115
- .form_input-range::-webkit-slider-thumb {
116
- appearance: none;
117
- width: var(--thumb-width);
118
- height: var(--thumb-height);
119
- border-radius: var(--thumb-border-radius);
120
- background: var(--thumb-background);
121
- border: var(--thumb-border);
122
- box-shadow: var(--thumb-box-shadow);
123
- margin-top: calc(var(--track-height) * 0.5 - var(--thumb-height) * 0.5 - 2px);
124
- margin-left: calc(0 - var(--track-value-padding));
125
- cursor: col-resize;
126
- transition:
127
- background 0.2s ease-in-out,
128
- box-shadow 0.2s ease-in-out,
129
- border-color 0.2s ease-in-out,
130
- transform 0.2s ease-in-out;
131
- }
132
-
133
- .form_input-range::-webkit-slider-runnable-track {
134
- height: var(--track-height);
135
- border: var(--track-border);
136
- border-radius: var(--track-border-radius);
137
- background: var(--track-background);
138
- box-shadow: var(--track-box-shadow);
139
- position: relative;
140
- cursor: col-resize;
141
- transition:
142
- box-shadow 0.2s ease-in-out,
143
- border-color 0.2s ease-in-out;
144
- }
145
-
146
- .form_input-range::-webkit-slider-thumb:hover {
147
- background: var(--thumb-background-hover);
148
- }
149
-
150
- .form_input-range:hover::-webkit-slider-runnable-track {
151
- background: var(--track-background-hover);
152
- }
153
-
154
- .form_input-range::-webkit-slider-thumb:active {
155
- background: var(--thumb-background-active);
156
- }
157
-
158
- .form_input-range:active::-webkit-slider-runnable-track {
159
- background: var(--track-background-active);
160
- }
161
-
162
- .form_input-range.slider-progress::-webkit-slider-runnable-track {
163
- /* margin-left: var(--track-value-padding); */
164
- margin-right: calc(0 - var(--track-value-padding));
165
- background:
166
- linear-gradient(var(--track-value-background), var(--track-value-background)) 0 / var(--sx) 100% no-repeat,
167
- var(--track-background);
168
- }
169
-
170
- .form_input-range.slider-progress:hover::-webkit-slider-runnable-track {
171
- background:
172
- linear-gradient(var(--track-value-background-hover), var(--track-value-background-hover)) 0 / var(--sx) 100%
173
- no-repeat,
174
- var(--track-background-hover);
175
- }
176
-
177
- .form_input-range.slider-progress:active::-webkit-slider-runnable-track {
178
- background:
179
- linear-gradient(var(--track-value-background-active), var(--track-value-background-active)) 0 / var(--sx) 100%
180
- no-repeat,
181
- var(--track-background-active);
182
- }
183
-
184
- /*mozilla*/
185
- .form_input-range::-moz-range-thumb {
186
- width: var(--thumb-width);
187
- height: var(--thumb-height);
188
- border-radius: var(--thumb-border-radius);
189
- background: var(--thumb-background);
190
- border: none;
191
- box-shadow: var(--thumb-box-shadow);
192
- cursor: col-resize;
193
- margin-left: calc(0 - var(--track-value-padding));
194
- }
195
-
196
- .form_input-range::-moz-range-track {
197
- height: var(--track-height);
198
- border: var(--track-border);
199
- border-radius: var(--track-border-radius);
200
- background: var(--track-background);
201
- box-shadow: var(--track-box-shadow);
202
- cursor: col-resize;
203
- /* Trim left and right paddings of track */
204
- width: calc(100% - var(--track-value-padding) * 2);
205
- }
206
-
207
- .form_input-range::-moz-range-thumb:hover {
208
- background: var(--thumb-background-hover);
209
- }
210
-
211
- .form_input-range:hover::-moz-range-track {
212
- background: var(--track-background-hover);
213
- }
214
-
215
- .form_input-range::-moz-range-thumb:active {
216
- background: var(--thumb-background-active);
217
- }
218
-
219
- .form_input-range:active::-moz-range-track {
220
- background: var(--track-background-active);
221
- }
222
-
223
- .form_input-range.slider-progress::-moz-range-track {
224
- background:
225
- linear-gradient(var(--track-value-background), var(--track-value-background)) 0 / var(--sx) 100% no-repeat,
226
- var(--track-background);
227
- }
228
-
229
- .form_input-range.slider-progress:hover::-moz-range-track {
230
- background:
231
- linear-gradient(var(--track-value-background-hover), var(--track-value-background-hover)) 0 / var(--sx) 100%
232
- no-repeat,
233
- var(--track-background-hover);
234
- }
235
-
236
- .form_input-range.slider-progress:active::-moz-range-track {
237
- background:
238
- linear-gradient(var(--track-value-background-active), var(--track-value-background-active)) 0 / var(--sx) 100%
239
- no-repeat,
240
- var(--track-background-active);
241
- }
242
-
243
- /*ms*/
244
- .form_input-range::-ms-fill-upper {
245
- background: transparent;
246
- border-color: transparent;
247
- }
248
-
249
- .form_input-range::-ms-fill-lower {
250
- background: transparent;
251
- border-color: transparent;
252
- }
253
-
254
- .form_input-range::-ms-thumb {
255
- width: var(--thumb-width);
256
- height: var(--thumb-height);
257
- border-radius: var(--thumb-border-radius);
258
- background: var(--thumb-background);
259
- border: var(--thumb-border);
260
- box-shadow: var(--thumb-box-shadow);
261
- /** Center thumb */
262
- margin-top: 0;
263
- /** Shift left thumb */
264
- margin-left: calc(0 - var(--track-value-padding));
265
- box-sizing: border-box;
266
- cursor: col-resize;
267
- }
268
-
269
- .form_input-range::-ms-track {
270
- height: var(--track-height);
271
- border-radius: var(--track-border-radius);
272
- background: var(--track-background);
273
- border: var(--track-border);
274
- box-shadow: var(--track-box-shadow);
275
- box-sizing: border-box;
276
- cursor: col-resize;
277
- }
278
-
279
- .form_input-range::-ms-thumb:hover {
280
- background: var(--thumb-background-hover);
281
- }
282
-
283
- .form_input-range:hover::-ms-track {
284
- background: var(--track-background-hover);
285
- }
286
-
287
- .form_input-range::-ms-thumb:active {
288
- background: var(--thumb-background-active);
289
- }
290
-
291
- .form_input-range:active::-ms-track {
292
- background: var(--track-background-active);
293
- }
294
-
295
- .form_input-range.slider-progress::-ms-fill-lower {
296
- height: var(--track-height);
297
- border-radius: var(--track-border-radius) 0 0 var(--track-border-radius);
298
- margin: 0;
299
- background: var(--track-value-background);
300
- border: none;
301
- border-right-width: 0;
302
- /** Shift left thumb */
303
- margin-left: calc(var(--track-value-padding));
304
- /** Shift right thumb */
305
- margin-right: calc(0 - var(--track-value-padding));
306
- }
307
-
308
- .form_input-range.slider-progress:hover::-ms-fill-lower {
309
- background: var(--track-value-background-hover);
310
- }
311
-
312
- .form_input-range.slider-progress:active::-ms-fill-lower {
313
- background: var(--track-value-background-active);
314
- }
315
- </style>
@@ -1,2 +0,0 @@
1
- export { default as ColorHueRange } from './ColorHueRange.vue';
2
- export { default as Range } from './Range.vue';
@@ -1,2 +0,0 @@
1
- export { default as ColorHueRange } from "./ColorHueRange.vue";
2
- export { default as Range } from "./Range.vue";
@@ -1,98 +0,0 @@
1
- <script setup>
2
- import { Dropdown as VDropdown } from "floating-vue";
3
- import { computed } from "vue";
4
- const props = defineProps({
5
- options: { type: Array, required: true },
6
- placeholder: { type: String, required: false },
7
- disabled: { type: Boolean, required: false },
8
- title: { type: String, required: false }
9
- });
10
- const modelValue = defineModel({ type: [String, Number], ...{ required: true } });
11
- const selectedLabel = computed(() => {
12
- const selected = props.options.find((opt) => opt.value === modelValue.value);
13
- return selected ? selected.label : props.placeholder;
14
- });
15
- function selectOption(value) {
16
- modelValue.value = value;
17
- }
18
- </script>
19
-
20
- <template>
21
- <VDropdown
22
- auto-size
23
- auto-boundary-max-size
24
- >
25
- <div
26
- class="min-w-[160px] flex cursor-pointer items-center justify-between gap-2 border rounded-lg bg-white p-2.5 text-xs text-neutral-700 shadow-sm outline-none transition-colors disabled:cursor-not-allowed dark:border-neutral-800 dark:bg-neutral-900 disabled:bg-neutral-100 hover:bg-neutral-50 dark:text-neutral-200 disabled:text-neutral-400 focus:ring-2 focus:ring-black/10 dark:disabled:bg-neutral-800 dark:hover:bg-neutral-800 dark:disabled:text-neutral-600"
27
- :class="{ 'pointer-events-none': props.disabled }"
28
- >
29
- <div class="flex-1 truncate">
30
- <slot :label="selectedLabel">
31
- {{ selectedLabel }}
32
- </slot>
33
- </div>
34
- <div i-solar:alt-arrow-down-bold-duotone class="h-3.5 w-3.5 text-neutral-500 dark:text-neutral-400" />
35
- </div>
36
-
37
- <template #popper="{ hide }">
38
- <div class="min-w-[160px] flex flex-col gap-0.5 border border-neutral-200 rounded-lg bg-white p-1 shadow-lg dark:border-neutral-800 dark:bg-neutral-900">
39
- <div
40
- v-for="option of props.options"
41
- v-bind="{ ...$attrs, class: null, style: null }"
42
- :key="option.value"
43
- class="cursor-pointer rounded px-2 py-1.5 text-sm text-neutral-700 hover:bg-neutral-100 dark:text-neutral-200 dark:hover:bg-neutral-800"
44
- :class="{
45
- 'bg-neutral-100 dark:bg-neutral-800': modelValue === option.value,
46
- }"
47
- @click="selectOption(option.value); hide()"
48
- >
49
- {{ option.label }}
50
- </div>
51
- </div>
52
- </template>
53
- </VDropdown>
54
- </template>
55
-
56
- <style>
57
- .resize-observer[data-v-b329ee4c] {
58
- position: absolute;
59
- top: 0;
60
- left: 0;
61
- z-index: -1;
62
- width: 100%;
63
- height: 100%;
64
- border: none;
65
- background-color: transparent;
66
- pointer-events: none;
67
- display: block;
68
- overflow: hidden;
69
- opacity: 0;
70
- }
71
-
72
- .resize-observer[data-v-b329ee4c] object {
73
- display: block;
74
- position: absolute;
75
- top: 0;
76
- left: 0;
77
- height: 100%;
78
- width: 100%;
79
- overflow: hidden;
80
- pointer-events: none;
81
- z-index: -1;
82
- }
83
-
84
- .v-popper__popper {
85
- z-index: 10000;
86
- top: 0;
87
- left: 0;
88
- outline: none;
89
- }
90
-
91
- .v-popper__arrow-container {
92
- display: none;
93
- }
94
-
95
- .v-popper__inner {
96
- border: none !important;
97
- }
98
- </style>
@@ -1 +0,0 @@
1
- export { default as Select } from './Select.vue';
@@ -1 +0,0 @@
1
- export { default as Select } from "./Select.vue";
@@ -1,32 +0,0 @@
1
- <script setup>
2
- import { ref, watch } from "vue";
3
- const events = defineEmits(["submit"]);
4
- const input = defineModel({ type: String, ...{
5
- default: ""
6
- } });
7
- const textareaRef = ref();
8
- const textareaHeight = ref("auto");
9
- function onKeyDown(e) {
10
- if (e.code === "Enter" && !e.shiftKey) {
11
- e.preventDefault();
12
- events("submit", input.value);
13
- }
14
- }
15
- watch(input, () => {
16
- textareaHeight.value = "auto";
17
- requestAnimationFrame(() => {
18
- if (!textareaRef.value)
19
- return;
20
- textareaHeight.value = `${textareaRef.value.scrollHeight}px`;
21
- });
22
- }, { immediate: true });
23
- </script>
24
-
25
- <template>
26
- <textarea
27
- ref="textareaRef"
28
- v-model="input"
29
- :style="{ height: textareaHeight }"
30
- @keydown="onKeyDown"
31
- />
32
- </template>
@@ -1,17 +0,0 @@
1
- <script setup>
2
- import BasicTextarea from "./Basic.vue";
3
- const modelValue = defineModel({ type: String, ...{ default: "" } });
4
- </script>
5
-
6
- <template>
7
- <BasicTextarea
8
- v-model="modelValue"
9
- border="focus:primary-300 dark:focus:primary-400/50 2 solid neutral-100 dark:neutral-900"
10
- transition="all duration-200 ease-in-out"
11
- text="disabled:neutral-400 dark:disabled:neutral-600"
12
- cursor="disabled:not-allowed"
13
- w-full rounded-lg px-2 py-1 text-sm outline-none
14
- shadow="sm"
15
- bg="neutral-50 dark:neutral-950 focus:neutral-50 dark:focus:neutral-900"
16
- />
17
- </template>
@@ -1,2 +0,0 @@
1
- export { default as BasicTextarea } from './Basic.vue';
2
- export { default as Textarea } from './Textarea.vue';
@@ -1,2 +0,0 @@
1
- export { default as BasicTextarea } from "./Basic.vue";
2
- export { default as Textarea } from "./Textarea.vue";
@@ -1,7 +0,0 @@
1
- export * from './Checkbox';
2
- export * from './Field';
3
- export * from './Input';
4
- export * from './Radio';
5
- export * from './Range';
6
- export * from './Select';
7
- export * from './Textarea';
@@ -1,7 +0,0 @@
1
- export * from "./Checkbox/index.mjs";
2
- export * from "./Field/index.mjs";
3
- export * from "./Input/index.mjs";
4
- export * from "./Radio/index.mjs";
5
- export * from "./Range/index.mjs";
6
- export * from "./Select/index.mjs";
7
- export * from "./Textarea/index.mjs";
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './components/Animations';
2
- export * from './components/Form';
package/dist/index.mjs DELETED
@@ -1,2 +0,0 @@
1
- export * from "./components/Animations/index.mjs";
2
- export * from "./components/Form/index.mjs";
package/uno.config.ts DELETED
@@ -1,8 +0,0 @@
1
- import { mergeConfigs } from 'unocss'
2
-
3
- import { histoireUnoConfig, sharedUnoConfig } from '../../uno.config'
4
-
5
- export default mergeConfigs([
6
- sharedUnoConfig(),
7
- histoireUnoConfig(),
8
- ])