iryx-ui 0.6.0 → 0.7.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 (40) hide show
  1. package/README.md +150 -2
  2. package/dist/component-names.d.ts +1 -1
  3. package/dist/components/DatePicker.vue.d.ts +52 -0
  4. package/dist/components/DateRangePicker.vue.d.ts +60 -0
  5. package/dist/components/Input.vue.d.ts +39 -1
  6. package/dist/components/Pagination.vue.d.ts +1 -1
  7. package/dist/components/PasswordInput.vue.d.ts +54 -0
  8. package/dist/components/Textarea.vue.d.ts +16 -1
  9. package/dist/components/index.d.ts +3 -0
  10. package/dist/composables/date.d.ts +21 -0
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.js +51 -44
  13. package/dist/node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js +91 -8
  14. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js +122 -0
  15. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/DateFormatter.js +84 -0
  16. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +91 -0
  17. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/conversion.js +107 -0
  18. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/manipulation.js +159 -0
  19. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js +29 -0
  20. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js +37 -0
  21. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/utils.js +6 -0
  22. package/dist/packages/iryx-ui/src/component-names.js +1 -1
  23. package/dist/packages/iryx-ui/src/components/DatePicker.js +5 -0
  24. package/dist/packages/iryx-ui/src/components/DatePicker.vue_vue_type_script_setup_true_lang.js +186 -0
  25. package/dist/packages/iryx-ui/src/components/DateRangePicker.js +5 -0
  26. package/dist/packages/iryx-ui/src/components/DateRangePicker.vue_vue_type_script_setup_true_lang.js +210 -0
  27. package/dist/packages/iryx-ui/src/components/Input.vue_vue_type_script_setup_true_lang.js +94 -25
  28. package/dist/packages/iryx-ui/src/components/PasswordInput.js +5 -0
  29. package/dist/packages/iryx-ui/src/components/PasswordInput.vue_vue_type_script_setup_true_lang.js +113 -0
  30. package/dist/packages/iryx-ui/src/components/Textarea.vue_vue_type_script_setup_true_lang.js +47 -21
  31. package/dist/packages/iryx-ui/src/components/index.js +50 -44
  32. package/dist/packages/iryx-ui/src/composables/date.js +25 -0
  33. package/dist/packages/iryx-ui/src/theme/date-picker.js +45 -0
  34. package/dist/packages/iryx-ui/src/theme/input.js +22 -6
  35. package/dist/packages/iryx-ui/src/theme/password-input.js +22 -0
  36. package/dist/theme/date-picker.d.ts +254 -0
  37. package/dist/theme/index.d.ts +2 -0
  38. package/dist/theme/input.d.ts +94 -15
  39. package/dist/theme/password-input.d.ts +79 -0
  40. package/package.json +2 -1
@@ -0,0 +1,254 @@
1
+ export declare const datePickerTheme: import("tailwind-variants").TVReturnType<{
2
+ size: {
3
+ sm: {
4
+ trigger: string;
5
+ };
6
+ md: {
7
+ trigger: string;
8
+ };
9
+ lg: {
10
+ trigger: string;
11
+ };
12
+ };
13
+ invalid: {
14
+ true: {
15
+ trigger: string;
16
+ };
17
+ };
18
+ /**
19
+ * A single date is the whole selection, so it takes the solid fill. In a
20
+ * range only the two endpoints do, and the days between get a flat tint —
21
+ * emphasising all of them equally turns a long span into one solid block
22
+ * that no longer shows where it starts and stops.
23
+ *
24
+ * The middle style excludes the endpoints with `not-*` rather than relying
25
+ * on class order, so the two rules never compete for the background.
26
+ */
27
+ range: {
28
+ false: {
29
+ cellTrigger: string;
30
+ };
31
+ /**
32
+ * Reka's `data-highlighted` hover preview is deliberately left unstyled:
33
+ * a band that follows the cursor has to reshape its rounded ends on
34
+ * every move, and no combination of transitioning or not transitioning
35
+ * the radius looks right while it does. Only the committed range is
36
+ * drawn, so nothing under the pointer changes shape.
37
+ *
38
+ * The band goes on the cell and the endpoint pills on the trigger, so
39
+ * a single element never has to be both. Only the run's outer edges are
40
+ * rounded, so the days between meet flush.
41
+ */
42
+ true: {
43
+ cell: string;
44
+ cellTrigger: string;
45
+ };
46
+ };
47
+ }, {
48
+ trigger: string;
49
+ /** Shown in place of the value, so it reads as absent rather than chosen. */
50
+ placeholder: string;
51
+ content: string;
52
+ header: string;
53
+ heading: string;
54
+ nav: string;
55
+ /**
56
+ * `items-start`: flex would otherwise stretch a short month to match a
57
+ * taller neighbour, spreading its rows apart. Paired with `fixed-weeks`
58
+ * on the calendar, which keeps every month six rows tall so the popover
59
+ * does not resize as you page through it.
60
+ */
61
+ months: string;
62
+ grid: string;
63
+ headCell: string;
64
+ /**
65
+ * The range bands are painted here, not on the trigger — see `range`.
66
+ *
67
+ * `transition-colors` fades the band in and out but deliberately leaves
68
+ * `border-radius` untransitioned: animating the radius morphs the band's
69
+ * shape as the preview moves, which reads as the corners wobbling.
70
+ */
71
+ cell: string;
72
+ /**
73
+ * `w-full`, not a fixed `size-8`: the table cell is wider than 32px, so a
74
+ * fixed-width pill leaves a gap between consecutive days and a run renders
75
+ * as a chain of lozenges with pinched corners instead of one band.
76
+ *
77
+ * Hover is suppressed on already-selected days so it cannot paint a
78
+ * competing pill over the solid endpoint fill.
79
+ *
80
+ * Selection colour is added by the `range` variant, which differs per mode.
81
+ */
82
+ cellTrigger: string;
83
+ footer: string;
84
+ action: string;
85
+ }, undefined, {
86
+ size: {
87
+ sm: {
88
+ trigger: string;
89
+ };
90
+ md: {
91
+ trigger: string;
92
+ };
93
+ lg: {
94
+ trigger: string;
95
+ };
96
+ };
97
+ invalid: {
98
+ true: {
99
+ trigger: string;
100
+ };
101
+ };
102
+ /**
103
+ * A single date is the whole selection, so it takes the solid fill. In a
104
+ * range only the two endpoints do, and the days between get a flat tint —
105
+ * emphasising all of them equally turns a long span into one solid block
106
+ * that no longer shows where it starts and stops.
107
+ *
108
+ * The middle style excludes the endpoints with `not-*` rather than relying
109
+ * on class order, so the two rules never compete for the background.
110
+ */
111
+ range: {
112
+ false: {
113
+ cellTrigger: string;
114
+ };
115
+ /**
116
+ * Reka's `data-highlighted` hover preview is deliberately left unstyled:
117
+ * a band that follows the cursor has to reshape its rounded ends on
118
+ * every move, and no combination of transitioning or not transitioning
119
+ * the radius looks right while it does. Only the committed range is
120
+ * drawn, so nothing under the pointer changes shape.
121
+ *
122
+ * The band goes on the cell and the endpoint pills on the trigger, so
123
+ * a single element never has to be both. Only the run's outer edges are
124
+ * rounded, so the days between meet flush.
125
+ */
126
+ true: {
127
+ cell: string;
128
+ cellTrigger: string;
129
+ };
130
+ };
131
+ }, {
132
+ trigger: string;
133
+ /** Shown in place of the value, so it reads as absent rather than chosen. */
134
+ placeholder: string;
135
+ content: string;
136
+ header: string;
137
+ heading: string;
138
+ nav: string;
139
+ /**
140
+ * `items-start`: flex would otherwise stretch a short month to match a
141
+ * taller neighbour, spreading its rows apart. Paired with `fixed-weeks`
142
+ * on the calendar, which keeps every month six rows tall so the popover
143
+ * does not resize as you page through it.
144
+ */
145
+ months: string;
146
+ grid: string;
147
+ headCell: string;
148
+ /**
149
+ * The range bands are painted here, not on the trigger — see `range`.
150
+ *
151
+ * `transition-colors` fades the band in and out but deliberately leaves
152
+ * `border-radius` untransitioned: animating the radius morphs the band's
153
+ * shape as the preview moves, which reads as the corners wobbling.
154
+ */
155
+ cell: string;
156
+ /**
157
+ * `w-full`, not a fixed `size-8`: the table cell is wider than 32px, so a
158
+ * fixed-width pill leaves a gap between consecutive days and a run renders
159
+ * as a chain of lozenges with pinched corners instead of one band.
160
+ *
161
+ * Hover is suppressed on already-selected days so it cannot paint a
162
+ * competing pill over the solid endpoint fill.
163
+ *
164
+ * Selection colour is added by the `range` variant, which differs per mode.
165
+ */
166
+ cellTrigger: string;
167
+ footer: string;
168
+ action: string;
169
+ }, import("tailwind-variants").TVReturnType<{
170
+ size: {
171
+ sm: {
172
+ trigger: string;
173
+ };
174
+ md: {
175
+ trigger: string;
176
+ };
177
+ lg: {
178
+ trigger: string;
179
+ };
180
+ };
181
+ invalid: {
182
+ true: {
183
+ trigger: string;
184
+ };
185
+ };
186
+ /**
187
+ * A single date is the whole selection, so it takes the solid fill. In a
188
+ * range only the two endpoints do, and the days between get a flat tint —
189
+ * emphasising all of them equally turns a long span into one solid block
190
+ * that no longer shows where it starts and stops.
191
+ *
192
+ * The middle style excludes the endpoints with `not-*` rather than relying
193
+ * on class order, so the two rules never compete for the background.
194
+ */
195
+ range: {
196
+ false: {
197
+ cellTrigger: string;
198
+ };
199
+ /**
200
+ * Reka's `data-highlighted` hover preview is deliberately left unstyled:
201
+ * a band that follows the cursor has to reshape its rounded ends on
202
+ * every move, and no combination of transitioning or not transitioning
203
+ * the radius looks right while it does. Only the committed range is
204
+ * drawn, so nothing under the pointer changes shape.
205
+ *
206
+ * The band goes on the cell and the endpoint pills on the trigger, so
207
+ * a single element never has to be both. Only the run's outer edges are
208
+ * rounded, so the days between meet flush.
209
+ */
210
+ true: {
211
+ cell: string;
212
+ cellTrigger: string;
213
+ };
214
+ };
215
+ }, {
216
+ trigger: string;
217
+ /** Shown in place of the value, so it reads as absent rather than chosen. */
218
+ placeholder: string;
219
+ content: string;
220
+ header: string;
221
+ heading: string;
222
+ nav: string;
223
+ /**
224
+ * `items-start`: flex would otherwise stretch a short month to match a
225
+ * taller neighbour, spreading its rows apart. Paired with `fixed-weeks`
226
+ * on the calendar, which keeps every month six rows tall so the popover
227
+ * does not resize as you page through it.
228
+ */
229
+ months: string;
230
+ grid: string;
231
+ headCell: string;
232
+ /**
233
+ * The range bands are painted here, not on the trigger — see `range`.
234
+ *
235
+ * `transition-colors` fades the band in and out but deliberately leaves
236
+ * `border-radius` untransitioned: animating the radius morphs the band's
237
+ * shape as the preview moves, which reads as the corners wobbling.
238
+ */
239
+ cell: string;
240
+ /**
241
+ * `w-full`, not a fixed `size-8`: the table cell is wider than 32px, so a
242
+ * fixed-width pill leaves a gap between consecutive days and a run renders
243
+ * as a chain of lozenges with pinched corners instead of one band.
244
+ *
245
+ * Hover is suppressed on already-selected days so it cannot paint a
246
+ * competing pill over the solid endpoint fill.
247
+ *
248
+ * Selection colour is added by the `range` variant, which differs per mode.
249
+ */
250
+ cellTrigger: string;
251
+ footer: string;
252
+ action: string;
253
+ }, undefined, unknown, unknown, undefined>>;
254
+ export type DatePickerSlots = keyof ReturnType<typeof datePickerTheme>;
@@ -7,6 +7,7 @@ export * from './button-group';
7
7
  export * from './card';
8
8
  export * from './checkbox';
9
9
  export * from './combobox';
10
+ export * from './date-picker';
10
11
  export * from './dialog';
11
12
  export * from './dropdown-menu';
12
13
  export * from './empty-state';
@@ -14,6 +15,7 @@ export * from './input';
14
15
  export * from './label';
15
16
  export * from './number-input';
16
17
  export * from './pagination';
18
+ export * from './password-input';
17
19
  export * from './presets';
18
20
  export * from './progress';
19
21
  export * from './radio-group';
@@ -1,33 +1,90 @@
1
1
  /** Shared field chrome for Input, Textarea and the Select trigger. */
2
2
  export declare const fieldBase = "w-full rounded-xl border border-border bg-input text-foreground transition-colors outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-primary/50 disabled:cursor-not-allowed disabled:opacity-50";
3
+ /**
4
+ * The chrome lives on `root`, not on the `<input>`, so leading and trailing
5
+ * content can take real space in a flex row. Reserving room with padding
6
+ * instead would mean guessing the width of arbitrary slot content, and long
7
+ * values would slide underneath it.
8
+ */
3
9
  export declare const inputTheme: import("tailwind-variants").TVReturnType<{
4
10
  size: {
5
- sm: string;
6
- md: string;
7
- lg: string;
11
+ sm: {
12
+ root: string;
13
+ input: string;
14
+ };
15
+ md: {
16
+ root: string;
17
+ input: string;
18
+ };
19
+ lg: {
20
+ root: string;
21
+ input: string;
22
+ };
8
23
  };
9
24
  invalid: {
10
- true: string;
25
+ true: {
26
+ root: string;
27
+ };
11
28
  };
12
- }, undefined, "flex w-full rounded-xl border border-border bg-input text-foreground transition-colors outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-primary/50 disabled:cursor-not-allowed disabled:opacity-50", {
29
+ }, {
30
+ root: string;
31
+ input: string;
32
+ leading: string;
33
+ trailing: string;
34
+ clear: string;
35
+ }, undefined, {
13
36
  size: {
14
- sm: string;
15
- md: string;
16
- lg: string;
37
+ sm: {
38
+ root: string;
39
+ input: string;
40
+ };
41
+ md: {
42
+ root: string;
43
+ input: string;
44
+ };
45
+ lg: {
46
+ root: string;
47
+ input: string;
48
+ };
17
49
  };
18
50
  invalid: {
19
- true: string;
51
+ true: {
52
+ root: string;
53
+ };
20
54
  };
21
- }, undefined, import("tailwind-variants").TVReturnType<{
55
+ }, {
56
+ root: string;
57
+ input: string;
58
+ leading: string;
59
+ trailing: string;
60
+ clear: string;
61
+ }, import("tailwind-variants").TVReturnType<{
22
62
  size: {
23
- sm: string;
24
- md: string;
25
- lg: string;
63
+ sm: {
64
+ root: string;
65
+ input: string;
66
+ };
67
+ md: {
68
+ root: string;
69
+ input: string;
70
+ };
71
+ lg: {
72
+ root: string;
73
+ input: string;
74
+ };
26
75
  };
27
76
  invalid: {
28
- true: string;
77
+ true: {
78
+ root: string;
79
+ };
29
80
  };
30
- }, undefined, "flex w-full rounded-xl border border-border bg-input text-foreground transition-colors outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-primary/50 disabled:cursor-not-allowed disabled:opacity-50", unknown, unknown, undefined>>;
81
+ }, {
82
+ root: string;
83
+ input: string;
84
+ leading: string;
85
+ trailing: string;
86
+ clear: string;
87
+ }, undefined, unknown, unknown, undefined>>;
31
88
  export declare const textareaTheme: import("tailwind-variants").TVReturnType<{
32
89
  size: {
33
90
  sm: string;
@@ -37,6 +94,13 @@ export declare const textareaTheme: import("tailwind-variants").TVReturnType<{
37
94
  invalid: {
38
95
  true: string;
39
96
  };
97
+ /**
98
+ * The measured height is the whole point, so drop the size variant's
99
+ * `min-h` floor and the drag handle that would fight it.
100
+ */
101
+ autosize: {
102
+ true: string;
103
+ };
40
104
  }, undefined, "block resize-y w-full rounded-xl border border-border bg-input text-foreground transition-colors outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-primary/50 disabled:cursor-not-allowed disabled:opacity-50", {
41
105
  size: {
42
106
  sm: string;
@@ -46,6 +110,13 @@ export declare const textareaTheme: import("tailwind-variants").TVReturnType<{
46
110
  invalid: {
47
111
  true: string;
48
112
  };
113
+ /**
114
+ * The measured height is the whole point, so drop the size variant's
115
+ * `min-h` floor and the drag handle that would fight it.
116
+ */
117
+ autosize: {
118
+ true: string;
119
+ };
49
120
  }, undefined, import("tailwind-variants").TVReturnType<{
50
121
  size: {
51
122
  sm: string;
@@ -55,6 +126,14 @@ export declare const textareaTheme: import("tailwind-variants").TVReturnType<{
55
126
  invalid: {
56
127
  true: string;
57
128
  };
129
+ /**
130
+ * The measured height is the whole point, so drop the size variant's
131
+ * `min-h` floor and the drag handle that would fight it.
132
+ */
133
+ autosize: {
134
+ true: string;
135
+ };
58
136
  }, undefined, "block resize-y w-full rounded-xl border border-border bg-input text-foreground transition-colors outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-primary/50 disabled:cursor-not-allowed disabled:opacity-50", unknown, unknown, undefined>>;
59
137
  export type InputVariants = Parameters<typeof inputTheme>[0];
138
+ export type InputSlots = keyof ReturnType<typeof inputTheme>;
60
139
  export type TextareaVariants = Parameters<typeof textareaTheme>[0];
@@ -0,0 +1,79 @@
1
+ /**
2
+ * The meter's colour is the same deliberate exception `IProgress` makes: the
3
+ * coloured bar *is* the reading, not decoration on a surface. Everywhere else
4
+ * status colour belongs in the mark, not the chrome.
5
+ */
6
+ export declare const passwordInputTheme: import("tailwind-variants").TVReturnType<{
7
+ score: {
8
+ 0: {};
9
+ 1: {
10
+ segment: string;
11
+ };
12
+ 2: {
13
+ segment: string;
14
+ };
15
+ 3: {
16
+ segment: string;
17
+ };
18
+ 4: {
19
+ segment: string;
20
+ };
21
+ };
22
+ }, {
23
+ root: string;
24
+ toggle: string;
25
+ meter: string;
26
+ track: string;
27
+ /** Unfilled by default; the `score` variant paints the ones below it. */
28
+ segment: string;
29
+ label: string;
30
+ }, undefined, {
31
+ score: {
32
+ 0: {};
33
+ 1: {
34
+ segment: string;
35
+ };
36
+ 2: {
37
+ segment: string;
38
+ };
39
+ 3: {
40
+ segment: string;
41
+ };
42
+ 4: {
43
+ segment: string;
44
+ };
45
+ };
46
+ }, {
47
+ root: string;
48
+ toggle: string;
49
+ meter: string;
50
+ track: string;
51
+ /** Unfilled by default; the `score` variant paints the ones below it. */
52
+ segment: string;
53
+ label: string;
54
+ }, import("tailwind-variants").TVReturnType<{
55
+ score: {
56
+ 0: {};
57
+ 1: {
58
+ segment: string;
59
+ };
60
+ 2: {
61
+ segment: string;
62
+ };
63
+ 3: {
64
+ segment: string;
65
+ };
66
+ 4: {
67
+ segment: string;
68
+ };
69
+ };
70
+ }, {
71
+ root: string;
72
+ toggle: string;
73
+ meter: string;
74
+ track: string;
75
+ /** Unfilled by default; the `score` variant paints the ones below it. */
76
+ segment: string;
77
+ label: string;
78
+ }, undefined, unknown, unknown, undefined>>;
79
+ export type PasswordInputSlots = keyof ReturnType<typeof passwordInputTheme>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "iryx-ui",
3
3
  "type": "module",
4
- "version": "0.6.0",
4
+ "version": "0.7.0",
5
5
  "description": "A Vue 3 component library built on Reka UI and Tailwind CSS v4.",
6
6
  "author": "therok1",
7
7
  "license": "MIT",
@@ -47,6 +47,7 @@
47
47
  "dependencies": {
48
48
  "@hugeicons/core-free-icons": "^4.2.3",
49
49
  "@hugeicons/vue": "^1.0.7",
50
+ "@internationalized/date": "^3.12.3",
50
51
  "@nuxt/kit": "^4.4.8",
51
52
  "reka-ui": "^2.9.10",
52
53
  "tailwind-merge": "^3.6.0",