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.
Files changed (46) hide show
  1. package/README.md +201 -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/FileUpload.vue.d.ts +64 -0
  6. package/dist/components/Input.vue.d.ts +39 -1
  7. package/dist/components/Pagination.vue.d.ts +1 -1
  8. package/dist/components/PasswordInput.vue.d.ts +54 -0
  9. package/dist/components/Textarea.vue.d.ts +16 -1
  10. package/dist/components/index.d.ts +4 -0
  11. package/dist/composables/date.d.ts +21 -0
  12. package/dist/index.d.ts +5 -0
  13. package/dist/index.js +53 -44
  14. package/dist/node_modules/.pnpm/@hugeicons_core-free-icons@4.2.3/node_modules/@hugeicons/core-free-icons/dist/esm/index.js +170 -8
  15. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js +122 -0
  16. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/DateFormatter.js +84 -0
  17. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +91 -0
  18. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/conversion.js +107 -0
  19. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/manipulation.js +159 -0
  20. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js +29 -0
  21. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js +37 -0
  22. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/utils.js +6 -0
  23. package/dist/packages/iryx-ui/src/component-names.js +1 -1
  24. package/dist/packages/iryx-ui/src/components/DatePicker.js +5 -0
  25. package/dist/packages/iryx-ui/src/components/DatePicker.vue_vue_type_script_setup_true_lang.js +186 -0
  26. package/dist/packages/iryx-ui/src/components/DateRangePicker.js +5 -0
  27. package/dist/packages/iryx-ui/src/components/DateRangePicker.vue_vue_type_script_setup_true_lang.js +210 -0
  28. package/dist/packages/iryx-ui/src/components/FileUpload.js +5 -0
  29. package/dist/packages/iryx-ui/src/components/FileUpload.vue_vue_type_script_setup_true_lang.js +209 -0
  30. package/dist/packages/iryx-ui/src/components/Input.vue_vue_type_script_setup_true_lang.js +94 -25
  31. package/dist/packages/iryx-ui/src/components/PasswordInput.js +5 -0
  32. package/dist/packages/iryx-ui/src/components/PasswordInput.vue_vue_type_script_setup_true_lang.js +113 -0
  33. package/dist/packages/iryx-ui/src/components/Textarea.vue_vue_type_script_setup_true_lang.js +47 -21
  34. package/dist/packages/iryx-ui/src/components/index.js +52 -44
  35. package/dist/packages/iryx-ui/src/composables/date.js +25 -0
  36. package/dist/packages/iryx-ui/src/theme/date-picker.js +45 -0
  37. package/dist/packages/iryx-ui/src/theme/file-upload.js +29 -0
  38. package/dist/packages/iryx-ui/src/theme/input.js +22 -6
  39. package/dist/packages/iryx-ui/src/theme/password-input.js +23 -0
  40. package/dist/theme/date-picker.d.ts +254 -0
  41. package/dist/theme/file-upload.d.ts +143 -0
  42. package/dist/theme/form.d.ts +3 -3
  43. package/dist/theme/index.d.ts +3 -0
  44. package/dist/theme/input.d.ts +94 -15
  45. package/dist/theme/password-input.d.ts +97 -0
  46. package/package.json +2 -1
@@ -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, normalizeClass as s, openBlock as c, unref as l, useModel as u, vModelText as d, withDirectives as f } from "vue";
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 p = [
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
- ], m = /*@__PURE__*/ a({
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 o = a, m = u(a, "modelValue"), h = t(), g = r(() => o.id ?? h?.id.value), _ = r(() => o.invalid ?? h?.invalid.value ?? !1), v = e(), y = r(() => o.unstyled ?? v.unstyled), b = r(() => y.value ? o.class : n({
39
- size: o.size,
40
- invalid: _.value,
41
- class: o.class
42
- }));
43
- return (e, t) => f((c(), i("textarea", {
44
- id: g.value,
45
- "onUpdate:modelValue": t[0] ||= (e) => m.value = e,
46
- rows: o.rows,
47
- placeholder: o.placeholder,
48
- disabled: o.disabled,
49
- required: o.required,
50
- "aria-invalid": _.value || void 0,
51
- "aria-describedby": l(h)?.describedBy.value,
52
- class: s(b.value)
53
- }, null, 10, p)), [[d, m.value]]);
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 { m as default };
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 "./DropdownMenu.js";
15
- import m from "./EmptyState.js";
16
- import h from "./Form.js";
17
- import g from "./Label.js";
18
- import _ from "./FormField.js";
19
- import v from "./Input.js";
20
- import y from "./NumberInput.js";
21
- import b from "./Pagination.js";
22
- import x from "./Progress.js";
23
- import S from "./RadioGroup.js";
24
- import C from "./Select.js";
25
- import w from "./Separator.js";
26
- import T from "./Skeleton.js";
27
- import E from "./Stat.js";
28
- import D from "./Stepper.js";
29
- import O from "./Switch.js";
30
- import k from "./Table.js";
31
- import A from "./Tabs.js";
32
- import j from "./Textarea.js";
33
- import M from "./Toaster.js";
34
- import N from "./Tooltip.js";
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 P = /* @__PURE__ */ e({
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: () => p,
50
- EmptyState: () => m,
51
- Form: () => h,
52
- FormField: () => _,
53
- Input: () => v,
54
- Label: () => g,
55
- NumberInput: () => y,
56
- Pagination: () => b,
57
- Progress: () => x,
58
- RadioGroup: () => S,
59
- Select: () => C,
60
- Separator: () => w,
61
- Skeleton: () => T,
62
- Stat: () => E,
63
- Stepper: () => D,
64
- Switch: () => O,
65
- Table: () => k,
66
- Tabs: () => A,
67
- Textarea: () => j,
68
- Toaster: () => M,
69
- Tooltip: () => N
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 { P as components_exports };
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
- base: `flex ${t}`,
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: "h-8 px-2.5 text-sm",
8
- md: "h-9 px-3 text-sm",
9
- lg: "h-10 px-4 text-base"
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-visible:ring-red-500/40" }
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>;