iryx-ui 0.6.0 → 0.8.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.
- package/README.md +201 -2
- package/dist/component-names.d.ts +1 -1
- package/dist/components/DatePicker.vue.d.ts +52 -0
- package/dist/components/DateRangePicker.vue.d.ts +60 -0
- package/dist/components/FileUpload.vue.d.ts +64 -0
- package/dist/components/Input.vue.d.ts +39 -1
- package/dist/components/Pagination.vue.d.ts +1 -1
- package/dist/components/PasswordInput.vue.d.ts +54 -0
- package/dist/components/Textarea.vue.d.ts +16 -1
- package/dist/components/index.d.ts +4 -0
- package/dist/composables/date.d.ts +21 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +53 -44
- package/dist/node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js +170 -8
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js +122 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/DateFormatter.js +84 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +91 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/conversion.js +107 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/manipulation.js +159 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js +29 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js +37 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/utils.js +6 -0
- package/dist/packages/iryx-ui/src/component-names.js +1 -1
- package/dist/packages/iryx-ui/src/components/DatePicker.js +5 -0
- package/dist/packages/iryx-ui/src/components/DatePicker.vue_vue_type_script_setup_true_lang.js +186 -0
- package/dist/packages/iryx-ui/src/components/DateRangePicker.js +5 -0
- package/dist/packages/iryx-ui/src/components/DateRangePicker.vue_vue_type_script_setup_true_lang.js +210 -0
- package/dist/packages/iryx-ui/src/components/FileUpload.js +5 -0
- package/dist/packages/iryx-ui/src/components/FileUpload.vue_vue_type_script_setup_true_lang.js +209 -0
- package/dist/packages/iryx-ui/src/components/Input.vue_vue_type_script_setup_true_lang.js +94 -25
- package/dist/packages/iryx-ui/src/components/PasswordInput.js +5 -0
- package/dist/packages/iryx-ui/src/components/PasswordInput.vue_vue_type_script_setup_true_lang.js +113 -0
- package/dist/packages/iryx-ui/src/components/Textarea.vue_vue_type_script_setup_true_lang.js +47 -21
- package/dist/packages/iryx-ui/src/components/index.js +52 -44
- package/dist/packages/iryx-ui/src/composables/date.js +25 -0
- package/dist/packages/iryx-ui/src/theme/date-picker.js +45 -0
- package/dist/packages/iryx-ui/src/theme/file-upload.js +29 -0
- package/dist/packages/iryx-ui/src/theme/input.js +22 -6
- package/dist/packages/iryx-ui/src/theme/password-input.js +23 -0
- package/dist/theme/date-picker.d.ts +254 -0
- package/dist/theme/file-upload.d.ts +143 -0
- package/dist/theme/form.d.ts +3 -3
- package/dist/theme/index.d.ts +3 -0
- package/dist/theme/input.d.ts +94 -15
- package/dist/theme/password-input.d.ts +97 -0
- package/package.json +2 -1
package/dist/packages/iryx-ui/src/components/Textarea.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useIryxUiConfig as e } from "../config.js";
|
|
2
2
|
import { useFormField as t } from "../composables/form.js";
|
|
3
3
|
import { textareaTheme as n } from "../theme/input.js";
|
|
4
|
-
import { computed as r, createElementBlock as i, defineComponent as a, mergeModels as o,
|
|
4
|
+
import { computed as r, createElementBlock as i, defineComponent as a, mergeModels as o, nextTick as s, normalizeClass as c, onMounted as l, openBlock as u, ref as d, unref as f, useModel as p, vModelText as m, watch as h, withDirectives as g } from "vue";
|
|
5
5
|
//#region src/components/Textarea.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
-
var
|
|
6
|
+
var _ = [
|
|
7
7
|
"id",
|
|
8
8
|
"rows",
|
|
9
9
|
"placeholder",
|
|
@@ -11,11 +11,12 @@ var p = [
|
|
|
11
11
|
"required",
|
|
12
12
|
"aria-invalid",
|
|
13
13
|
"aria-describedby"
|
|
14
|
-
],
|
|
14
|
+
], v = /*@__PURE__*/ a({
|
|
15
15
|
__name: "Textarea",
|
|
16
16
|
props: /*@__PURE__*/ o({
|
|
17
17
|
size: {},
|
|
18
18
|
rows: {},
|
|
19
|
+
autosize: { type: [Boolean, Object] },
|
|
19
20
|
placeholder: {},
|
|
20
21
|
disabled: { type: Boolean },
|
|
21
22
|
required: { type: Boolean },
|
|
@@ -34,24 +35,49 @@ var p = [
|
|
|
34
35
|
modelModifiers: {}
|
|
35
36
|
}),
|
|
36
37
|
emits: ["update:modelValue"],
|
|
37
|
-
setup(a) {
|
|
38
|
-
let
|
|
39
|
-
size:
|
|
40
|
-
invalid:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
setup(a, { expose: o }) {
|
|
39
|
+
let v = a, y = p(a, "modelValue"), b = t(), x = r(() => v.id ?? b?.id.value), S = r(() => v.invalid ?? b?.invalid.value ?? !1), C = e(), w = r(() => v.unstyled ?? C.unstyled), T = r(() => w.value ? v.class : n({
|
|
40
|
+
size: v.size,
|
|
41
|
+
invalid: S.value,
|
|
42
|
+
autosize: !!v.autosize,
|
|
43
|
+
class: v.class
|
|
44
|
+
})), E = d();
|
|
45
|
+
o({ textarea: E });
|
|
46
|
+
let D = r(() => typeof v.autosize == "object" ? v.autosize : {});
|
|
47
|
+
function O(e) {
|
|
48
|
+
return Number.parseFloat(e) || 0;
|
|
49
|
+
}
|
|
50
|
+
function k() {
|
|
51
|
+
let e = E.value;
|
|
52
|
+
if (!e || !v.autosize) return;
|
|
53
|
+
e.style.height = "auto";
|
|
54
|
+
let t = window.getComputedStyle(e), n = O(t.lineHeight), r = O(t.paddingTop) + O(t.paddingBottom), i = O(t.borderTopWidth) + O(t.borderBottomWidth), a = e.scrollHeight;
|
|
55
|
+
if (n) {
|
|
56
|
+
let { min: e, max: t } = D.value;
|
|
57
|
+
e != null && (a = Math.max(a, e * n + r)), t != null && (a = Math.min(a, t * n + r));
|
|
58
|
+
}
|
|
59
|
+
e.style.height = `${a + i}px`, e.style.overflowY = D.value.max != null && e.scrollHeight > a ? "auto" : "hidden";
|
|
60
|
+
}
|
|
61
|
+
return l(() => {
|
|
62
|
+
v.autosize && s(k);
|
|
63
|
+
}), h(() => [
|
|
64
|
+
y.value,
|
|
65
|
+
v.autosize,
|
|
66
|
+
v.size
|
|
67
|
+
], () => void s(k)), (e, t) => g((u(), i("textarea", {
|
|
68
|
+
id: x.value,
|
|
69
|
+
ref_key: "el",
|
|
70
|
+
ref: E,
|
|
71
|
+
"onUpdate:modelValue": t[0] ||= (e) => y.value = e,
|
|
72
|
+
rows: v.autosize ? D.value.min : v.rows,
|
|
73
|
+
placeholder: v.placeholder,
|
|
74
|
+
disabled: v.disabled,
|
|
75
|
+
required: v.required,
|
|
76
|
+
"aria-invalid": S.value || void 0,
|
|
77
|
+
"aria-describedby": f(b)?.describedBy.value,
|
|
78
|
+
class: c(T.value)
|
|
79
|
+
}, null, 10, _)), [[m, y.value]]);
|
|
54
80
|
}
|
|
55
81
|
});
|
|
56
82
|
//#endregion
|
|
57
|
-
export {
|
|
83
|
+
export { v as default };
|
|
@@ -11,29 +11,33 @@ import l from "./Checkbox.js";
|
|
|
11
11
|
import u from "./Combobox.js";
|
|
12
12
|
import d from "./Dialog.js";
|
|
13
13
|
import f from "./ConfirmDialog.js";
|
|
14
|
-
import p from "./
|
|
15
|
-
import m from "./
|
|
16
|
-
import h from "./
|
|
17
|
-
import g from "./
|
|
18
|
-
import _ from "./
|
|
19
|
-
import v from "./
|
|
20
|
-
import y from "./
|
|
21
|
-
import b from "./
|
|
22
|
-
import x from "./
|
|
23
|
-
import S from "./
|
|
24
|
-
import C from "./
|
|
25
|
-
import w from "./
|
|
26
|
-
import T from "./
|
|
27
|
-
import E from "./
|
|
28
|
-
import D from "./
|
|
29
|
-
import O from "./
|
|
30
|
-
import k from "./
|
|
31
|
-
import A from "./
|
|
32
|
-
import j from "./
|
|
33
|
-
import M from "./
|
|
34
|
-
import N from "./
|
|
14
|
+
import p from "./DatePicker.js";
|
|
15
|
+
import m from "./DateRangePicker.js";
|
|
16
|
+
import h from "./DropdownMenu.js";
|
|
17
|
+
import g from "./EmptyState.js";
|
|
18
|
+
import _ from "./FileUpload.js";
|
|
19
|
+
import v from "./Form.js";
|
|
20
|
+
import y from "./Label.js";
|
|
21
|
+
import b from "./FormField.js";
|
|
22
|
+
import x from "./Input.js";
|
|
23
|
+
import S from "./NumberInput.js";
|
|
24
|
+
import C from "./Pagination.js";
|
|
25
|
+
import w from "./PasswordInput.js";
|
|
26
|
+
import T from "./Progress.js";
|
|
27
|
+
import E from "./RadioGroup.js";
|
|
28
|
+
import D from "./Select.js";
|
|
29
|
+
import O from "./Separator.js";
|
|
30
|
+
import k from "./Skeleton.js";
|
|
31
|
+
import A from "./Stat.js";
|
|
32
|
+
import j from "./Stepper.js";
|
|
33
|
+
import M from "./Switch.js";
|
|
34
|
+
import N from "./Table.js";
|
|
35
|
+
import P from "./Tabs.js";
|
|
36
|
+
import F from "./Textarea.js";
|
|
37
|
+
import I from "./Toaster.js";
|
|
38
|
+
import L from "./Tooltip.js";
|
|
35
39
|
//#region src/components/index.ts
|
|
36
|
-
var
|
|
40
|
+
var R = /* @__PURE__ */ e({
|
|
37
41
|
Alert: () => t,
|
|
38
42
|
App: () => n,
|
|
39
43
|
Badge: () => r,
|
|
@@ -45,28 +49,32 @@ var P = /* @__PURE__ */ e({
|
|
|
45
49
|
Checkbox: () => l,
|
|
46
50
|
Combobox: () => u,
|
|
47
51
|
ConfirmDialog: () => f,
|
|
52
|
+
DatePicker: () => p,
|
|
53
|
+
DateRangePicker: () => m,
|
|
48
54
|
Dialog: () => d,
|
|
49
|
-
DropdownMenu: () =>
|
|
50
|
-
EmptyState: () =>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
55
|
+
DropdownMenu: () => h,
|
|
56
|
+
EmptyState: () => g,
|
|
57
|
+
FileUpload: () => _,
|
|
58
|
+
Form: () => v,
|
|
59
|
+
FormField: () => b,
|
|
60
|
+
Input: () => x,
|
|
61
|
+
Label: () => y,
|
|
62
|
+
NumberInput: () => S,
|
|
63
|
+
Pagination: () => C,
|
|
64
|
+
PasswordInput: () => w,
|
|
65
|
+
Progress: () => T,
|
|
66
|
+
RadioGroup: () => E,
|
|
67
|
+
Select: () => D,
|
|
68
|
+
Separator: () => O,
|
|
69
|
+
Skeleton: () => k,
|
|
70
|
+
Stat: () => A,
|
|
71
|
+
Stepper: () => j,
|
|
72
|
+
Switch: () => M,
|
|
73
|
+
Table: () => N,
|
|
74
|
+
Tabs: () => P,
|
|
75
|
+
Textarea: () => F,
|
|
76
|
+
Toaster: () => I,
|
|
77
|
+
Tooltip: () => L
|
|
70
78
|
});
|
|
71
79
|
//#endregion
|
|
72
|
-
export {
|
|
80
|
+
export { R as components_exports };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { $ad063034c8620db8$export$aa8b41735afcabd2 as e, $ad063034c8620db8$export$d0bdf45af03a6ea3 as t } from "../../../../node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js";
|
|
2
|
+
import { $58246871e4652552$export$6b862160d295c8e as n } from "../../../../node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js";
|
|
3
|
+
import "../../../../node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js";
|
|
4
|
+
import { $12a3c853105e5a70$export$ad991b66133851cf as r } from "../../../../node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/DateFormatter.js";
|
|
5
|
+
//#region src/composables/date.ts
|
|
6
|
+
var i = /^\d{4}-\d{2}-\d{2}$/;
|
|
7
|
+
function a(e) {
|
|
8
|
+
if (!(!e || !i.test(e))) try {
|
|
9
|
+
return n(e);
|
|
10
|
+
} catch {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function o(e) {
|
|
15
|
+
return e ? `${e.year.toString().padStart(4, "0")}-${e.month.toString().padStart(2, "0")}-${e.day.toString().padStart(2, "0")}` : null;
|
|
16
|
+
}
|
|
17
|
+
function s() {
|
|
18
|
+
return o(t(e()));
|
|
19
|
+
}
|
|
20
|
+
function c(t, n, i = { dateStyle: "medium" }) {
|
|
21
|
+
let o = a(t);
|
|
22
|
+
return o ? new r(n ?? "en-US", i).format(o.toDate(e())) : "";
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { c as formatIsoDate, s as isoToday, a as toCalendarDate, o as toIsoDate };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { fieldBase as e } from "./input.js";
|
|
2
|
+
import { tv as t } from "tailwind-variants";
|
|
3
|
+
//#region src/theme/date-picker.ts
|
|
4
|
+
var n = t({
|
|
5
|
+
slots: {
|
|
6
|
+
trigger: `flex items-center justify-between gap-2 ${e} cursor-pointer [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:opacity-60`,
|
|
7
|
+
placeholder: "text-muted-foreground",
|
|
8
|
+
content: "z-50 rounded-xl border border-border bg-background p-3 text-foreground shadow-md",
|
|
9
|
+
header: "flex items-center justify-between gap-2 pb-3",
|
|
10
|
+
heading: "text-sm font-medium",
|
|
11
|
+
nav: "flex size-7 items-center justify-center rounded-lg text-muted-foreground transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-primary/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4",
|
|
12
|
+
months: "flex items-start gap-4",
|
|
13
|
+
grid: "w-full border-collapse select-none",
|
|
14
|
+
headCell: "pb-1 text-xs font-normal text-muted-foreground",
|
|
15
|
+
cell: "p-0 transition-colors",
|
|
16
|
+
cellTrigger: "flex h-8 w-full min-w-8 items-center justify-center rounded-lg text-sm transition-colors outline-none not-data-[selected]:hover:bg-accent not-data-[selected]:hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-primary/50 data-[disabled]:pointer-events-none data-[disabled]:opacity-30 data-[outside-view]:text-muted-foreground/50 data-[today]:font-semibold data-[today]:text-primary data-[unavailable]:pointer-events-none data-[unavailable]:line-through data-[unavailable]:opacity-40",
|
|
17
|
+
footer: "flex items-center justify-between gap-2 pt-3",
|
|
18
|
+
action: "rounded-lg px-2 py-1 text-sm text-muted-foreground transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-primary/50"
|
|
19
|
+
},
|
|
20
|
+
variants: {
|
|
21
|
+
size: {
|
|
22
|
+
sm: { trigger: "h-8 px-2.5 text-sm" },
|
|
23
|
+
md: { trigger: "h-9 px-3 text-sm" },
|
|
24
|
+
lg: { trigger: "h-10 px-4 text-base" }
|
|
25
|
+
},
|
|
26
|
+
invalid: { true: { trigger: "border-red-500 focus-visible:ring-red-500/40" } },
|
|
27
|
+
range: {
|
|
28
|
+
false: { cellTrigger: "data-[selected]:bg-primary data-[selected]:text-primary-foreground data-[selected]:hover:bg-primary data-[selected]:data-[today]:text-primary-foreground" },
|
|
29
|
+
true: {
|
|
30
|
+
cell: [
|
|
31
|
+
"has-data-[selected]:bg-primary/15",
|
|
32
|
+
"has-data-[selection-start]:rounded-s-lg",
|
|
33
|
+
"has-data-[selection-end]:rounded-e-lg"
|
|
34
|
+
].join(" "),
|
|
35
|
+
cellTrigger: ["data-[selection-start]:bg-primary data-[selection-start]:text-primary-foreground data-[selection-start]:hover:bg-primary", "data-[selection-end]:bg-primary data-[selection-end]:text-primary-foreground data-[selection-end]:hover:bg-primary"].join(" ")
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
defaultVariants: {
|
|
40
|
+
size: "md",
|
|
41
|
+
range: !1
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
//#endregion
|
|
45
|
+
export { n as datePickerTheme };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { tv as e } from "tailwind-variants";
|
|
2
|
+
//#region src/theme/file-upload.ts
|
|
3
|
+
var t = e({
|
|
4
|
+
slots: {
|
|
5
|
+
root: "flex w-full flex-col gap-3",
|
|
6
|
+
dropzone: "flex cursor-pointer flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-border bg-input px-4 py-6 text-center transition-colors focus-within:ring-2 focus-within:ring-primary/50 hover:border-primary/50",
|
|
7
|
+
input: "sr-only",
|
|
8
|
+
icon: "flex size-12 items-center justify-center rounded-full bg-muted text-muted-foreground [&_svg]:size-5",
|
|
9
|
+
label: "text-sm text-foreground",
|
|
10
|
+
browse: "mt-2",
|
|
11
|
+
hint: "text-xs text-muted-foreground",
|
|
12
|
+
list: "flex flex-col gap-2",
|
|
13
|
+
item: "flex items-center gap-3 rounded-xl border border-border bg-input p-2",
|
|
14
|
+
thumbnail: "size-10 shrink-0 rounded-lg object-cover",
|
|
15
|
+
placeholder: "flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground [&_svg]:size-4",
|
|
16
|
+
details: "flex min-w-0 flex-1 flex-col",
|
|
17
|
+
name: "truncate text-sm text-foreground",
|
|
18
|
+
meta: "text-xs text-muted-foreground tabular-nums",
|
|
19
|
+
remove: "flex size-8 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-primary/50 [&_svg]:size-4",
|
|
20
|
+
error: "text-xs text-danger"
|
|
21
|
+
},
|
|
22
|
+
variants: {
|
|
23
|
+
dragging: { true: { dropzone: "border-primary bg-accent" } },
|
|
24
|
+
invalid: { true: { dropzone: "border-red-500 focus-within:ring-red-500/40" } },
|
|
25
|
+
disabled: { true: { dropzone: "pointer-events-none opacity-50" } }
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
//#endregion
|
|
29
|
+
export { t as fileUploadTheme };
|
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
import { tv as e } from "tailwind-variants";
|
|
2
2
|
//#region src/theme/input.ts
|
|
3
3
|
var t = "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", n = e({
|
|
4
|
-
|
|
4
|
+
slots: {
|
|
5
|
+
root: `flex items-center ${t} focus-within:ring-2 focus-within:ring-primary/50 has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-50`,
|
|
6
|
+
input: "w-full min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed",
|
|
7
|
+
leading: "flex shrink-0 items-center text-muted-foreground [&_svg]:size-4",
|
|
8
|
+
trailing: "flex shrink-0 items-center gap-1.5 text-muted-foreground [&_svg]:size-4",
|
|
9
|
+
clear: "flex items-center rounded-md text-muted-foreground transition-colors outline-none hover:text-foreground focus-visible:ring-2 focus-visible:ring-primary/50 [&_svg]:size-3.5"
|
|
10
|
+
},
|
|
5
11
|
variants: {
|
|
6
12
|
size: {
|
|
7
|
-
sm:
|
|
8
|
-
|
|
9
|
-
|
|
13
|
+
sm: {
|
|
14
|
+
root: "h-8 gap-1.5 px-2.5",
|
|
15
|
+
input: "text-sm"
|
|
16
|
+
},
|
|
17
|
+
md: {
|
|
18
|
+
root: "h-9 gap-2 px-3",
|
|
19
|
+
input: "text-sm"
|
|
20
|
+
},
|
|
21
|
+
lg: {
|
|
22
|
+
root: "h-10 gap-2 px-4",
|
|
23
|
+
input: "text-base"
|
|
24
|
+
}
|
|
10
25
|
},
|
|
11
|
-
invalid: { true: "border-red-500 focus-
|
|
26
|
+
invalid: { true: { root: "border-red-500 focus-within:ring-red-500/40" } }
|
|
12
27
|
},
|
|
13
28
|
defaultVariants: { size: "md" }
|
|
14
29
|
}), r = e({
|
|
@@ -19,7 +34,8 @@ var t = "w-full rounded-xl border border-border bg-input text-foreground transit
|
|
|
19
34
|
md: "min-h-20 px-3 py-2 text-sm",
|
|
20
35
|
lg: "min-h-24 px-4 py-2.5 text-base"
|
|
21
36
|
},
|
|
22
|
-
invalid: { true: "border-red-500 focus-visible:ring-red-500/40" }
|
|
37
|
+
invalid: { true: "border-red-500 focus-visible:ring-red-500/40" },
|
|
38
|
+
autosize: { true: "min-h-0 resize-none" }
|
|
23
39
|
},
|
|
24
40
|
defaultVariants: { size: "md" }
|
|
25
41
|
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { tv as e } from "tailwind-variants";
|
|
2
|
+
//#region src/theme/password-input.ts
|
|
3
|
+
var t = e({
|
|
4
|
+
slots: {
|
|
5
|
+
root: "flex w-full flex-col gap-2",
|
|
6
|
+
input: "[&::-ms-clear]:hidden [&::-ms-reveal]:hidden",
|
|
7
|
+
toggle: "flex items-center rounded-md text-muted-foreground transition-colors outline-none hover:text-foreground focus-visible:ring-2 focus-visible:ring-primary/50 [&_svg]:size-4",
|
|
8
|
+
meter: "flex items-center gap-2",
|
|
9
|
+
track: "flex h-1 flex-1 gap-1",
|
|
10
|
+
segment: "h-full flex-1 rounded-full bg-muted transition-colors",
|
|
11
|
+
label: "shrink-0 text-xs text-muted-foreground tabular-nums"
|
|
12
|
+
},
|
|
13
|
+
variants: { score: {
|
|
14
|
+
0: {},
|
|
15
|
+
1: { segment: "data-[filled]:bg-danger" },
|
|
16
|
+
2: { segment: "data-[filled]:bg-warning" },
|
|
17
|
+
3: { segment: "data-[filled]:bg-info" },
|
|
18
|
+
4: { segment: "data-[filled]:bg-success" }
|
|
19
|
+
} },
|
|
20
|
+
defaultVariants: { score: 0 }
|
|
21
|
+
});
|
|
22
|
+
//#endregion
|
|
23
|
+
export { t as passwordInputTheme };
|
|
@@ -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>;
|