@taicode/common-web 1.1.21 → 3.1.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 (112) hide show
  1. package/output/cache-api/cache-api.js +1 -1
  2. package/output/cache-api/cache-api.test.js +1 -1
  3. package/output/cache-api/index.d.ts +1 -1
  4. package/output/cache-api/index.d.ts.map +1 -1
  5. package/output/cache-api/index.js +1 -1
  6. package/output/loading-button/LoadingButtonDemo.d.ts +5 -0
  7. package/output/loading-button/LoadingButtonDemo.d.ts.map +1 -0
  8. package/output/loading-button/LoadingButtonDemo.js +33 -0
  9. package/output/loading-button/index.d.ts +31 -13
  10. package/output/loading-button/index.d.ts.map +1 -1
  11. package/output/loading-button/index.js +50 -26
  12. package/output/loading-button/index.test.d.ts +2 -0
  13. package/output/loading-button/index.test.d.ts.map +1 -0
  14. package/output/loading-button/index.test.js +203 -0
  15. package/output/service/index.d.ts +1 -1
  16. package/output/service/index.d.ts.map +1 -1
  17. package/output/service/index.js +1 -1
  18. package/output/service/service.d.ts +1 -1
  19. package/output/service/service.d.ts.map +1 -1
  20. package/output/service/service.js +9 -8
  21. package/output/service/service.test.js +2 -1
  22. package/output/side-cache/index.d.ts +1 -1
  23. package/output/side-cache/index.d.ts.map +1 -1
  24. package/output/side-cache/index.js +1 -1
  25. package/output/side-cache/side-cache.test.js +1 -1
  26. package/output/signin/context.d.ts +1 -2
  27. package/output/signin/context.d.ts.map +1 -1
  28. package/output/signin/context.js +3 -3
  29. package/output/signin/index.d.ts +3 -3
  30. package/output/signin/index.d.ts.map +1 -1
  31. package/output/signin/index.js +36 -18
  32. package/output/signin/service.d.ts +1 -1
  33. package/output/signin/service.d.ts.map +1 -1
  34. package/output/signin/service.js +6 -6
  35. package/output/signin/service.test.js +7 -3
  36. package/output/size-provider/index.d.ts +1 -1
  37. package/output/size-provider/index.d.ts.map +1 -1
  38. package/output/size-provider/index.js +1 -1
  39. package/output/size-provider/size-provider.d.ts +1 -1
  40. package/output/size-provider/size-provider.d.ts.map +1 -1
  41. package/output/size-provider/size-provider.js +1 -1
  42. package/output/toaster/index.d.ts +0 -1
  43. package/output/toaster/index.d.ts.map +1 -1
  44. package/output/toaster/index.js +7 -8
  45. package/output/use-observer/index.d.ts +1 -1
  46. package/output/use-observer/index.d.ts.map +1 -1
  47. package/output/use-observer/index.js +1 -1
  48. package/output/use-observer/use-observer.js +2 -2
  49. package/output/use-observer/use-observer.test.js +2 -2
  50. package/package.json +26 -18
  51. package/output/catalyst/alert.jsx +0 -55
  52. package/output/catalyst/auth-layout.jsx +0 -7
  53. package/output/catalyst/avatar.jsx +0 -45
  54. package/output/catalyst/badge.jsx +0 -53
  55. package/output/catalyst/button.jsx +0 -187
  56. package/output/catalyst/checkbox.jsx +0 -105
  57. package/output/catalyst/combobox.jsx +0 -120
  58. package/output/catalyst/description-list.jsx +0 -24
  59. package/output/catalyst/dialog.jsx +0 -55
  60. package/output/catalyst/divider.jsx +0 -16
  61. package/output/catalyst/dropdown.jsx +0 -102
  62. package/output/catalyst/fieldset.jsx +0 -41
  63. package/output/catalyst/heading.jsx +0 -22
  64. package/output/catalyst/input.jsx +0 -73
  65. package/output/catalyst/link.jsx +0 -14
  66. package/output/catalyst/listbox.jsx +0 -120
  67. package/output/catalyst/navbar.jsx +0 -67
  68. package/output/catalyst/pagination.jsx +0 -52
  69. package/output/catalyst/radio.jsx +0 -103
  70. package/output/catalyst/select.jsx +0 -59
  71. package/output/catalyst/sidebar-layout.jsx +0 -58
  72. package/output/catalyst/sidebar.jsx +0 -85
  73. package/output/catalyst/stacked-layout.jsx +0 -55
  74. package/output/catalyst/switch.jsx +0 -161
  75. package/output/catalyst/table.jsx +0 -68
  76. package/output/catalyst/text.jsx +0 -29
  77. package/output/catalyst/textarea.jsx +0 -49
  78. package/output/helpers/cache-api/cache-api.d.ts +0 -13
  79. package/output/helpers/cache-api/cache-api.d.ts.map +0 -1
  80. package/output/helpers/cache-api/cache-api.js +0 -114
  81. package/output/helpers/cache-api/cache-api.test.d.ts +0 -2
  82. package/output/helpers/cache-api/cache-api.test.d.ts.map +0 -1
  83. package/output/helpers/cache-api/cache-api.test.js +0 -348
  84. package/output/helpers/cache-api/index.d.ts +0 -2
  85. package/output/helpers/cache-api/index.d.ts.map +0 -1
  86. package/output/helpers/cache-api/index.js +0 -1
  87. package/output/helpers/service/index.d.ts +0 -1
  88. package/output/helpers/service/index.d.ts.map +0 -1
  89. package/output/helpers/service/index.js +0 -1
  90. package/output/helpers/service/service.d.ts +0 -5
  91. package/output/helpers/service/service.d.ts.map +0 -1
  92. package/output/helpers/service/service.js +0 -2
  93. package/output/helpers/side-cache/index.d.ts +0 -2
  94. package/output/helpers/side-cache/index.d.ts.map +0 -1
  95. package/output/helpers/side-cache/index.js +0 -1
  96. package/output/helpers/side-cache/side-cache.d.ts +0 -10
  97. package/output/helpers/side-cache/side-cache.d.ts.map +0 -1
  98. package/output/helpers/side-cache/side-cache.js +0 -137
  99. package/output/helpers/side-cache/side-cache.test.d.ts +0 -2
  100. package/output/helpers/side-cache/side-cache.test.d.ts.map +0 -1
  101. package/output/helpers/side-cache/side-cache.test.js +0 -179
  102. package/output/helpers/use-observer/index.d.ts +0 -2
  103. package/output/helpers/use-observer/index.d.ts.map +0 -1
  104. package/output/helpers/use-observer/index.js +0 -1
  105. package/output/helpers/use-observer/use-observer.d.ts +0 -3
  106. package/output/helpers/use-observer/use-observer.d.ts.map +0 -1
  107. package/output/helpers/use-observer/use-observer.js +0 -16
  108. package/output/helpers/use-observer/use-observer.test.d.ts +0 -2
  109. package/output/helpers/use-observer/use-observer.test.d.ts.map +0 -1
  110. package/output/helpers/use-observer/use-observer.test.jsx +0 -134
  111. package/output/service/service.test.jsx +0 -367
  112. package/output/use-observer/use-observer.test.jsx +0 -134
@@ -1,187 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import * as Headless from '@headlessui/react';
13
- import clsx from 'clsx';
14
- import React, { forwardRef } from 'react';
15
- import { Link } from './link';
16
- const styles = {
17
- base: [
18
- // Base
19
- 'relative isolate inline-flex items-baseline justify-center gap-x-2 rounded-lg border text-base/6 font-semibold',
20
- // Sizing
21
- 'px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6',
22
- // Focus
23
- 'focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500',
24
- // Disabled
25
- 'data-disabled:opacity-50',
26
- // Icon
27
- '*:data-[slot=icon]:-mx-0.5 *:data-[slot=icon]:my-0.5 *:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:self-center *:data-[slot=icon]:text-(--btn-icon) sm:*:data-[slot=icon]:my-1 sm:*:data-[slot=icon]:size-4 forced-colors:[--btn-icon:ButtonText] forced-colors:data-hover:[--btn-icon:ButtonText]',
28
- ],
29
- solid: [
30
- // Optical border, implemented as the button background to avoid corner artifacts
31
- 'border-transparent bg-(--btn-border)',
32
- // Dark mode: border is rendered on `after` so background is set to button background
33
- 'dark:bg-(--btn-bg)',
34
- // Button background, implemented as foreground layer to stack on top of pseudo-border layer
35
- 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(var(--radius-lg)-1px)] before:bg-(--btn-bg)',
36
- // Drop shadow, applied to the inset `before` layer so it blends with the border
37
- 'before:shadow-sm',
38
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
39
- 'dark:before:hidden',
40
- // Dark mode: Subtle white outline is applied using a border
41
- 'dark:border-white/5',
42
- // Shim/overlay, inset to match button foreground and used for hover state + highlight shadow
43
- 'after:absolute after:inset-0 after:-z-10 after:rounded-[calc(var(--radius-lg)-1px)]',
44
- // Inner highlight shadow
45
- 'after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
46
- // White overlay on hover
47
- 'data-active:after:bg-(--btn-hover-overlay) data-hover:after:bg-(--btn-hover-overlay)',
48
- // Dark mode: `after` layer expands to cover entire button
49
- 'dark:after:-inset-px dark:after:rounded-lg',
50
- // Disabled
51
- 'data-disabled:before:shadow-none data-disabled:after:shadow-none',
52
- ],
53
- outline: [
54
- // Base
55
- 'border-zinc-950/10 text-zinc-950 data-active:bg-zinc-950/2.5 data-hover:bg-zinc-950/2.5',
56
- // Dark mode
57
- 'dark:border-white/15 dark:text-white dark:[--btn-bg:transparent] dark:data-active:bg-white/5 dark:data-hover:bg-white/5',
58
- // Icon
59
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
60
- ],
61
- plain: [
62
- // Base
63
- 'border-transparent text-zinc-950 data-active:bg-zinc-950/5 data-hover:bg-zinc-950/5',
64
- // Dark mode
65
- 'dark:text-white dark:data-active:bg-white/10 dark:data-hover:bg-white/10',
66
- // Icon
67
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
68
- ],
69
- colors: {
70
- 'dark/zinc': [
71
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
72
- 'dark:text-white dark:[--btn-bg:var(--color-zinc-600)] dark:[--btn-hover-overlay:var(--color-white)]/5',
73
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
74
- ],
75
- light: [
76
- 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',
77
- 'dark:text-white dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',
78
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
79
- ],
80
- 'dark/white': [
81
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
82
- 'dark:text-zinc-950 dark:[--btn-bg:white] dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',
83
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
84
- ],
85
- dark: [
86
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
87
- 'dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',
88
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
89
- ],
90
- white: [
91
- 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',
92
- 'dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',
93
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-500)] data-hover:[--btn-icon:var(--color-zinc-500)]',
94
- ],
95
- zinc: [
96
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-zinc-600)] [--btn-border:var(--color-zinc-700)]/90',
97
- 'dark:[--btn-hover-overlay:var(--color-white)]/5',
98
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
99
- ],
100
- indigo: [
101
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-indigo-500)] [--btn-border:var(--color-indigo-600)]/90',
102
- '[--btn-icon:var(--color-indigo-300)] data-active:[--btn-icon:var(--color-indigo-200)] data-hover:[--btn-icon:var(--color-indigo-200)]',
103
- ],
104
- cyan: [
105
- 'text-cyan-950 [--btn-bg:var(--color-cyan-300)] [--btn-border:var(--color-cyan-400)]/80 [--btn-hover-overlay:var(--color-white)]/25',
106
- '[--btn-icon:var(--color-cyan-500)]',
107
- ],
108
- red: [
109
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-red-600)] [--btn-border:var(--color-red-700)]/90',
110
- '[--btn-icon:var(--color-red-300)] data-active:[--btn-icon:var(--color-red-200)] data-hover:[--btn-icon:var(--color-red-200)]',
111
- ],
112
- orange: [
113
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-orange-500)] [--btn-border:var(--color-orange-600)]/90',
114
- '[--btn-icon:var(--color-orange-300)] data-active:[--btn-icon:var(--color-orange-200)] data-hover:[--btn-icon:var(--color-orange-200)]',
115
- ],
116
- amber: [
117
- 'text-amber-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-amber-400)] [--btn-border:var(--color-amber-500)]/80',
118
- '[--btn-icon:var(--color-amber-600)]',
119
- ],
120
- yellow: [
121
- 'text-yellow-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-yellow-300)] [--btn-border:var(--color-yellow-400)]/80',
122
- '[--btn-icon:var(--color-yellow-600)] data-active:[--btn-icon:var(--color-yellow-700)] data-hover:[--btn-icon:var(--color-yellow-700)]',
123
- ],
124
- lime: [
125
- 'text-lime-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-lime-300)] [--btn-border:var(--color-lime-400)]/80',
126
- '[--btn-icon:var(--color-lime-600)] data-active:[--btn-icon:var(--color-lime-700)] data-hover:[--btn-icon:var(--color-lime-700)]',
127
- ],
128
- green: [
129
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-green-600)] [--btn-border:var(--color-green-700)]/90',
130
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
131
- ],
132
- emerald: [
133
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-emerald-600)] [--btn-border:var(--color-emerald-700)]/90',
134
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
135
- ],
136
- teal: [
137
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-teal-600)] [--btn-border:var(--color-teal-700)]/90',
138
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
139
- ],
140
- sky: [
141
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-sky-500)] [--btn-border:var(--color-sky-600)]/80',
142
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
143
- ],
144
- blue: [
145
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-blue-600)] [--btn-border:var(--color-blue-700)]/90',
146
- '[--btn-icon:var(--color-blue-400)] data-active:[--btn-icon:var(--color-blue-300)] data-hover:[--btn-icon:var(--color-blue-300)]',
147
- ],
148
- violet: [
149
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-violet-500)] [--btn-border:var(--color-violet-600)]/90',
150
- '[--btn-icon:var(--color-violet-300)] data-active:[--btn-icon:var(--color-violet-200)] data-hover:[--btn-icon:var(--color-violet-200)]',
151
- ],
152
- purple: [
153
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-purple-500)] [--btn-border:var(--color-purple-600)]/90',
154
- '[--btn-icon:var(--color-purple-300)] data-active:[--btn-icon:var(--color-purple-200)] data-hover:[--btn-icon:var(--color-purple-200)]',
155
- ],
156
- fuchsia: [
157
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-fuchsia-500)] [--btn-border:var(--color-fuchsia-600)]/90',
158
- '[--btn-icon:var(--color-fuchsia-300)] data-active:[--btn-icon:var(--color-fuchsia-200)] data-hover:[--btn-icon:var(--color-fuchsia-200)]',
159
- ],
160
- pink: [
161
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-pink-500)] [--btn-border:var(--color-pink-600)]/90',
162
- '[--btn-icon:var(--color-pink-300)] data-active:[--btn-icon:var(--color-pink-200)] data-hover:[--btn-icon:var(--color-pink-200)]',
163
- ],
164
- rose: [
165
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-rose-500)] [--btn-border:var(--color-rose-600)]/90',
166
- '[--btn-icon:var(--color-rose-300)] data-active:[--btn-icon:var(--color-rose-200)] data-hover:[--btn-icon:var(--color-rose-200)]',
167
- ],
168
- },
169
- };
170
- export const Button = forwardRef(function Button(_a, ref) {
171
- var { color, outline, plain, className, children } = _a, props = __rest(_a, ["color", "outline", "plain", "className", "children"]);
172
- let classes = clsx(className, styles.base, outline ? styles.outline : plain ? styles.plain : clsx(styles.solid, styles.colors[color !== null && color !== void 0 ? color : 'dark/zinc']));
173
- return 'href' in props ? (<Link {...props} className={classes} ref={ref}>
174
- <TouchTarget>{children}</TouchTarget>
175
- </Link>) : (<Headless.Button {...props} className={clsx(classes, 'cursor-default')} ref={ref}>
176
- <TouchTarget>{children}</TouchTarget>
177
- </Headless.Button>);
178
- });
179
- /**
180
- * Expand the hit area to at least 44×44px on touch devices
181
- */
182
- export function TouchTarget({ children }) {
183
- return (<>
184
- <span className="absolute top-1/2 left-1/2 size-[max(100%,2.75rem)] -translate-x-1/2 -translate-y-1/2 pointer-fine:hidden" aria-hidden="true"/>
185
- {children}
186
- </>);
187
- }
@@ -1,105 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import * as Headless from '@headlessui/react';
13
- import clsx from 'clsx';
14
- export function CheckboxGroup(_a) {
15
- var { className } = _a, props = __rest(_a, ["className"]);
16
- return (<div data-slot="control" {...props} className={clsx(className,
17
- // Basic groups
18
- 'space-y-3',
19
- // With descriptions
20
- 'has-data-[slot=description]:space-y-6 has-data-[slot=description]:**:data-[slot=label]:font-medium')}/>);
21
- }
22
- export function CheckboxField(_a) {
23
- var { className } = _a, props = __rest(_a, ["className"]);
24
- return (<Headless.Field data-slot="field" {...props} className={clsx(className,
25
- // Base layout
26
- 'grid grid-cols-[1.125rem_1fr] gap-x-4 gap-y-1 sm:grid-cols-[1rem_1fr]',
27
- // Control layout
28
- '*:data-[slot=control]:col-start-1 *:data-[slot=control]:row-start-1 *:data-[slot=control]:mt-0.75 sm:*:data-[slot=control]:mt-1',
29
- // Label layout
30
- '*:data-[slot=label]:col-start-2 *:data-[slot=label]:row-start-1',
31
- // Description layout
32
- '*:data-[slot=description]:col-start-2 *:data-[slot=description]:row-start-2',
33
- // With description
34
- 'has-data-[slot=description]:**:data-[slot=label]:font-medium')}/>);
35
- }
36
- const base = [
37
- // Basic layout
38
- 'relative isolate flex size-4.5 items-center justify-center rounded-[0.3125rem] sm:size-4',
39
- // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode
40
- 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(0.3125rem-1px)] before:bg-white before:shadow-sm',
41
- // Background color when checked
42
- 'group-data-checked:before:bg-(--checkbox-checked-bg)',
43
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
44
- 'dark:before:hidden',
45
- // Background color applied to control in dark mode
46
- 'dark:bg-white/5 dark:group-data-checked:bg-(--checkbox-checked-bg)',
47
- // Border
48
- 'border border-zinc-950/15 group-data-checked:border-transparent group-data-hover:group-data-checked:border-transparent group-data-hover:border-zinc-950/30 group-data-checked:bg-(--checkbox-checked-border)',
49
- 'dark:border-white/15 dark:group-data-checked:border-white/5 dark:group-data-hover:group-data-checked:border-white/5 dark:group-data-hover:border-white/30',
50
- // Inner highlight shadow
51
- 'after:absolute after:inset-0 after:rounded-[calc(0.3125rem-1px)] after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
52
- 'dark:after:-inset-px dark:after:hidden dark:after:rounded-[0.3125rem] dark:group-data-checked:after:block',
53
- // Focus ring
54
- 'group-data-focus:outline-2 group-data-focus:outline-offset-2 group-data-focus:outline-blue-500',
55
- // Disabled state
56
- 'group-data-disabled:opacity-50',
57
- 'group-data-disabled:border-zinc-950/25 group-data-disabled:bg-zinc-950/5 group-data-disabled:[--checkbox-check:var(--color-zinc-950)]/50 group-data-disabled:before:bg-transparent',
58
- 'dark:group-data-disabled:border-white/20 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:[--checkbox-check:var(--color-white)]/50 dark:group-data-checked:group-data-disabled:after:hidden',
59
- // Forced colors mode
60
- 'forced-colors:[--checkbox-check:HighlightText] forced-colors:[--checkbox-checked-bg:Highlight] forced-colors:group-data-disabled:[--checkbox-check:Highlight]',
61
- 'dark:forced-colors:[--checkbox-check:HighlightText] dark:forced-colors:[--checkbox-checked-bg:Highlight] dark:forced-colors:group-data-disabled:[--checkbox-check:Highlight]',
62
- ];
63
- const colors = {
64
- 'dark/zinc': [
65
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
66
- 'dark:[--checkbox-checked-bg:var(--color-zinc-600)]',
67
- ],
68
- 'dark/white': [
69
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
70
- 'dark:[--checkbox-check:var(--color-zinc-900)] dark:[--checkbox-checked-bg:var(--color-white)] dark:[--checkbox-checked-border:var(--color-zinc-950)]/15',
71
- ],
72
- white: '[--checkbox-check:var(--color-zinc-900)] [--checkbox-checked-bg:var(--color-white)] [--checkbox-checked-border:var(--color-zinc-950)]/15',
73
- dark: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
74
- zinc: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-600)] [--checkbox-checked-border:var(--color-zinc-700)]/90',
75
- red: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-red-600)] [--checkbox-checked-border:var(--color-red-700)]/90',
76
- orange: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-orange-500)] [--checkbox-checked-border:var(--color-orange-600)]/90',
77
- amber: '[--checkbox-check:var(--color-amber-950)] [--checkbox-checked-bg:var(--color-amber-400)] [--checkbox-checked-border:var(--color-amber-500)]/80',
78
- yellow: '[--checkbox-check:var(--color-yellow-950)] [--checkbox-checked-bg:var(--color-yellow-300)] [--checkbox-checked-border:var(--color-yellow-400)]/80',
79
- lime: '[--checkbox-check:var(--color-lime-950)] [--checkbox-checked-bg:var(--color-lime-300)] [--checkbox-checked-border:var(--color-lime-400)]/80',
80
- green: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-green-600)] [--checkbox-checked-border:var(--color-green-700)]/90',
81
- emerald: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-emerald-600)] [--checkbox-checked-border:var(--color-emerald-700)]/90',
82
- teal: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-teal-600)] [--checkbox-checked-border:var(--color-teal-700)]/90',
83
- cyan: '[--checkbox-check:var(--color-cyan-950)] [--checkbox-checked-bg:var(--color-cyan-300)] [--checkbox-checked-border:var(--color-cyan-400)]/80',
84
- sky: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-sky-500)] [--checkbox-checked-border:var(--color-sky-600)]/80',
85
- blue: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-blue-600)] [--checkbox-checked-border:var(--color-blue-700)]/90',
86
- indigo: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-indigo-500)] [--checkbox-checked-border:var(--color-indigo-600)]/90',
87
- violet: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-violet-500)] [--checkbox-checked-border:var(--color-violet-600)]/90',
88
- purple: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-purple-500)] [--checkbox-checked-border:var(--color-purple-600)]/90',
89
- fuchsia: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-fuchsia-500)] [--checkbox-checked-border:var(--color-fuchsia-600)]/90',
90
- pink: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-pink-500)] [--checkbox-checked-border:var(--color-pink-600)]/90',
91
- rose: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-rose-500)] [--checkbox-checked-border:var(--color-rose-600)]/90',
92
- };
93
- export function Checkbox(_a) {
94
- var { color = 'dark/zinc', className } = _a, props = __rest(_a, ["color", "className"]);
95
- return (<Headless.Checkbox data-slot="control" {...props} className={clsx(className, 'group inline-flex focus:outline-hidden')}>
96
- <span className={clsx([base, colors[color]])}>
97
- <svg className="size-4 stroke-(--checkbox-check) opacity-0 group-data-checked:opacity-100 sm:h-3.5 sm:w-3.5" viewBox="0 0 14 14" fill="none">
98
- {/* Checkmark icon */}
99
- <path className="opacity-100 group-data-indeterminate:opacity-0" d="M3 8L6 11L11 3.5" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round"/>
100
- {/* Indeterminate icon */}
101
- <path className="opacity-0 group-data-indeterminate:opacity-100" d="M3 7H11" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round"/>
102
- </svg>
103
- </span>
104
- </Headless.Checkbox>);
105
- }
@@ -1,120 +0,0 @@
1
- 'use client';
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- import * as Headless from '@headlessui/react';
14
- import clsx from 'clsx';
15
- import { useState } from 'react';
16
- export function Combobox(_a) {
17
- var { options, displayValue, filter, anchor = 'bottom', className, placeholder, autoFocus, 'aria-label': ariaLabel, children } = _a, props = __rest(_a, ["options", "displayValue", "filter", "anchor", "className", "placeholder", "autoFocus", 'aria-label', "children"]);
18
- const [query, setQuery] = useState('');
19
- const filteredOptions = query === ''
20
- ? options
21
- : options.filter((option) => { var _a; return filter ? filter(option, query) : (_a = displayValue(option)) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(query.toLowerCase()); });
22
- return (<Headless.Combobox {...props} multiple={false} virtual={{ options: filteredOptions }} onClose={() => setQuery('')}>
23
- <span data-slot="control" className={clsx([
24
- className,
25
- // Basic layout
26
- 'relative block w-full',
27
- // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode
28
- 'before:absolute before:inset-px before:rounded-[calc(var(--radius-lg)-1px)] before:bg-white before:shadow-sm',
29
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
30
- 'dark:before:hidden',
31
- // Focus ring
32
- 'after:pointer-events-none after:absolute after:inset-0 after:rounded-lg after:ring-transparent after:ring-inset sm:focus-within:after:ring-2 sm:focus-within:after:ring-blue-500',
33
- // Disabled state
34
- 'has-data-disabled:opacity-50 has-data-disabled:before:bg-zinc-950/5 has-data-disabled:before:shadow-none',
35
- // Invalid state
36
- 'has-data-invalid:before:shadow-red-500/10',
37
- ])}>
38
- <Headless.ComboboxInput autoFocus={autoFocus} data-slot="control" aria-label={ariaLabel} displayValue={(option) => { var _a; return (_a = displayValue(option)) !== null && _a !== void 0 ? _a : ''; }} onChange={(event) => setQuery(event.target.value)} placeholder={placeholder} className={clsx([
39
- className,
40
- // Basic layout
41
- 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',
42
- // Horizontal padding
43
- 'pr-[calc(--spacing(10)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pr-[calc(--spacing(9)-1px)] sm:pl-[calc(--spacing(3)-1px)]',
44
- // Typography
45
- 'text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white',
46
- // Border
47
- 'border border-zinc-950/10 data-hover:border-zinc-950/20 dark:border-white/10 dark:data-hover:border-white/20',
48
- // Background color
49
- 'bg-transparent dark:bg-white/5',
50
- // Hide default focus styles
51
- 'focus:outline-hidden',
52
- // Invalid state
53
- 'data-invalid:border-red-500 data-invalid:data-hover:border-red-500 dark:data-invalid:border-red-500 dark:data-invalid:data-hover:border-red-500',
54
- // Disabled state
55
- 'data-disabled:border-zinc-950/20 dark:data-disabled:border-white/15 dark:data-disabled:bg-white/2.5 dark:data-hover:data-disabled:border-white/15',
56
- // System icons
57
- 'dark:scheme-dark',
58
- ])}/>
59
- <Headless.ComboboxButton className="group absolute inset-y-0 right-0 flex items-center px-2">
60
- <svg className="size-5 stroke-zinc-500 group-data-disabled:stroke-zinc-600 group-data-hover:stroke-zinc-700 sm:size-4 dark:stroke-zinc-400 dark:group-data-hover:stroke-zinc-300 forced-colors:stroke-[CanvasText]" viewBox="0 0 16 16" aria-hidden="true" fill="none">
61
- <path d="M5.75 10.75L8 13L10.25 10.75" strokeWidth={1.5} strokeLinecap="round" strokeLinejoin="round"/>
62
- <path d="M10.25 5.25L8 3L5.75 5.25" strokeWidth={1.5} strokeLinecap="round" strokeLinejoin="round"/>
63
- </svg>
64
- </Headless.ComboboxButton>
65
- </span>
66
- <Headless.ComboboxOptions transition anchor={anchor} className={clsx(
67
- // Anchor positioning
68
- '[--anchor-gap:--spacing(2)] [--anchor-padding:--spacing(4)] sm:data-[anchor~=start]:[--anchor-offset:-4px]',
69
- // Base styles,
70
- 'isolate min-w-[calc(var(--input-width)+8px)] scroll-py-1 rounded-xl p-1 select-none empty:invisible',
71
- // Invisible border that is only visible in `forced-colors` mode for accessibility purposes
72
- 'outline outline-transparent focus:outline-hidden',
73
- // Handle scrolling when menu won't fit in viewport
74
- 'overflow-y-scroll overscroll-contain',
75
- // Popover background
76
- 'bg-white/75 backdrop-blur-xl dark:bg-zinc-800/75',
77
- // Shadows
78
- 'shadow-lg ring-1 ring-zinc-950/10 dark:ring-white/10 dark:ring-inset',
79
- // Transitions
80
- 'transition-opacity duration-100 ease-in data-closed:data-leave:opacity-0 data-transition:pointer-events-none')}>
81
- {({ option }) => children(option)}
82
- </Headless.ComboboxOptions>
83
- </Headless.Combobox>);
84
- }
85
- export function ComboboxOption(_a) {
86
- var { children, className } = _a, props = __rest(_a, ["children", "className"]);
87
- let sharedClasses = clsx(
88
- // Base
89
- 'flex min-w-0 items-center',
90
- // Icons
91
- '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4', '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400', 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',
92
- // Avatars
93
- '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5');
94
- return (<Headless.ComboboxOption {...props} className={clsx(
95
- // Basic layout
96
- 'group/option grid w-full cursor-default grid-cols-[1fr_--spacing(5)] items-baseline gap-x-2 rounded-lg py-2.5 pr-2 pl-3.5 sm:grid-cols-[1fr_--spacing(4)] sm:py-1.5 sm:pr-2 sm:pl-3',
97
- // Typography
98
- 'text-base/6 text-zinc-950 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',
99
- // Focus
100
- 'outline-hidden data-focus:bg-blue-500 data-focus:text-white',
101
- // Forced colors mode
102
- 'forced-color-adjust-none forced-colors:data-focus:bg-[Highlight] forced-colors:data-focus:text-[HighlightText]',
103
- // Disabled
104
- 'data-disabled:opacity-50')}>
105
- <span className={clsx(className, sharedClasses)}>{children}</span>
106
- <svg className="relative col-start-2 hidden size-5 self-center stroke-current group-data-selected/option:inline sm:size-4" viewBox="0 0 16 16" fill="none" aria-hidden="true">
107
- <path d="M4 8.5l3 3L12 4" strokeWidth={1.5} strokeLinecap="round" strokeLinejoin="round"/>
108
- </svg>
109
- </Headless.ComboboxOption>);
110
- }
111
- export function ComboboxLabel(_a) {
112
- var { className } = _a, props = __rest(_a, ["className"]);
113
- return <span {...props} className={clsx(className, 'ml-2.5 truncate first:ml-0 sm:ml-2 sm:first:ml-0')}/>;
114
- }
115
- export function ComboboxDescription(_a) {
116
- var { className, children } = _a, props = __rest(_a, ["className", "children"]);
117
- return (<span {...props} className={clsx(className, 'flex flex-1 overflow-hidden text-zinc-500 group-data-focus/option:text-white before:w-2 before:min-w-0 before:shrink dark:text-zinc-400')}>
118
- <span className="flex-1 truncate">{children}</span>
119
- </span>);
120
- }
@@ -1,24 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import clsx from 'clsx';
13
- export function DescriptionList(_a) {
14
- var { className } = _a, props = __rest(_a, ["className"]);
15
- return (<dl {...props} className={clsx(className, 'grid grid-cols-1 text-base/6 sm:grid-cols-[min(50%,--spacing(80))_auto] sm:text-sm/6')}/>);
16
- }
17
- export function DescriptionTerm(_a) {
18
- var { className } = _a, props = __rest(_a, ["className"]);
19
- return (<dt {...props} className={clsx(className, 'col-start-1 border-t border-zinc-950/5 pt-3 text-zinc-500 first:border-none sm:border-t sm:border-zinc-950/5 sm:py-3 dark:border-white/5 dark:text-zinc-400 sm:dark:border-white/5')}/>);
20
- }
21
- export function DescriptionDetails(_a) {
22
- var { className } = _a, props = __rest(_a, ["className"]);
23
- return (<dd {...props} className={clsx(className, 'pt-1 pb-3 text-zinc-950 sm:border-t sm:border-zinc-950/5 sm:py-3 sm:nth-2:border-none dark:text-white dark:sm:border-white/5')}/>);
24
- }
@@ -1,55 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import * as Headless from '@headlessui/react';
13
- import clsx from 'clsx';
14
- import { Text } from './text';
15
- const sizes = {
16
- xs: 'sm:max-w-xs',
17
- sm: 'sm:max-w-sm',
18
- md: 'sm:max-w-md',
19
- lg: 'sm:max-w-lg',
20
- xl: 'sm:max-w-xl',
21
- '2xl': 'sm:max-w-2xl',
22
- '3xl': 'sm:max-w-3xl',
23
- '4xl': 'sm:max-w-4xl',
24
- '5xl': 'sm:max-w-5xl',
25
- };
26
- export function Dialog(_a) {
27
- var { size = 'lg', className, children } = _a, props = __rest(_a, ["size", "className", "children"]);
28
- return (<Headless.Dialog {...props}>
29
- <Headless.DialogBackdrop transition className="fixed inset-0 flex w-screen justify-center overflow-y-auto bg-zinc-950/25 px-2 py-2 transition duration-100 focus:outline-0 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in sm:px-6 sm:py-8 lg:px-8 lg:py-16 dark:bg-zinc-950/50"/>
30
-
31
- <div className="fixed inset-0 w-screen overflow-y-auto pt-6 sm:pt-0">
32
- <div className="grid min-h-full grid-rows-[1fr_auto] justify-items-center sm:grid-rows-[1fr_auto_3fr] sm:p-4">
33
- <Headless.DialogPanel transition className={clsx(className, sizes[size], 'row-start-2 w-full min-w-0 rounded-t-3xl bg-white p-(--gutter) shadow-lg ring-1 ring-zinc-950/10 [--gutter:--spacing(8)] sm:mb-auto sm:rounded-2xl dark:bg-zinc-900 dark:ring-white/10 forced-colors:outline', 'transition duration-100 will-change-transform data-closed:translate-y-12 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in sm:data-closed:translate-y-0 sm:data-closed:data-enter:scale-95')}>
34
- {children}
35
- </Headless.DialogPanel>
36
- </div>
37
- </div>
38
- </Headless.Dialog>);
39
- }
40
- export function DialogTitle(_a) {
41
- var { className } = _a, props = __rest(_a, ["className"]);
42
- return (<Headless.DialogTitle {...props} className={clsx(className, 'text-lg/6 font-semibold text-balance text-zinc-950 sm:text-base/6 dark:text-white')}/>);
43
- }
44
- export function DialogDescription(_a) {
45
- var { className } = _a, props = __rest(_a, ["className"]);
46
- return <Headless.Description as={Text} {...props} className={clsx(className, 'mt-2 text-pretty')}/>;
47
- }
48
- export function DialogBody(_a) {
49
- var { className } = _a, props = __rest(_a, ["className"]);
50
- return <div {...props} className={clsx(className, 'mt-6')}/>;
51
- }
52
- export function DialogActions(_a) {
53
- var { className } = _a, props = __rest(_a, ["className"]);
54
- return (<div {...props} className={clsx(className, 'mt-8 flex flex-col-reverse items-center justify-end gap-3 *:w-full sm:flex-row sm:*:w-auto')}/>);
55
- }
@@ -1,16 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import clsx from 'clsx';
13
- export function Divider(_a) {
14
- var { soft = false, className } = _a, props = __rest(_a, ["soft", "className"]);
15
- return (<hr role="presentation" {...props} className={clsx(className, 'w-full border-t', soft && 'border-zinc-950/5 dark:border-white/5', !soft && 'border-zinc-950/10 dark:border-white/10')}/>);
16
- }
@@ -1,102 +0,0 @@
1
- 'use client';
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- import * as Headless from '@headlessui/react';
14
- import clsx from 'clsx';
15
- import { Button } from './button';
16
- import { Link } from './link';
17
- export function Dropdown(props) {
18
- return <Headless.Menu {...props}/>;
19
- }
20
- export function DropdownButton(_a) {
21
- var { as = Button } = _a, props = __rest(_a, ["as"]);
22
- return <Headless.MenuButton as={as} {...props}/>;
23
- }
24
- export function DropdownMenu(_a) {
25
- var { anchor = 'bottom', className } = _a, props = __rest(_a, ["anchor", "className"]);
26
- return (<Headless.MenuItems {...props} transition anchor={anchor} className={clsx(className,
27
- // Anchor positioning
28
- '[--anchor-gap:--spacing(2)] [--anchor-padding:--spacing(1)] data-[anchor~=end]:[--anchor-offset:6px] data-[anchor~=start]:[--anchor-offset:-6px] sm:data-[anchor~=end]:[--anchor-offset:4px] sm:data-[anchor~=start]:[--anchor-offset:-4px]',
29
- // Base styles
30
- 'isolate w-max rounded-xl p-1',
31
- // Invisible border that is only visible in `forced-colors` mode for accessibility purposes
32
- 'outline outline-transparent focus:outline-hidden',
33
- // Handle scrolling when menu won't fit in viewport
34
- 'overflow-y-auto',
35
- // Popover background
36
- 'bg-white/75 backdrop-blur-xl dark:bg-zinc-800/75',
37
- // Shadows
38
- 'shadow-lg ring-1 ring-zinc-950/10 dark:ring-white/10 dark:ring-inset',
39
- // Define grid at the menu level if subgrid is supported
40
- 'supports-[grid-template-columns:subgrid]:grid supports-[grid-template-columns:subgrid]:grid-cols-[auto_1fr_1.5rem_0.5rem_auto]',
41
- // Transitions
42
- 'transition data-leave:duration-100 data-leave:ease-in data-closed:data-leave:opacity-0')}/>);
43
- }
44
- export function DropdownItem(_a) {
45
- var { className } = _a, props = __rest(_a, ["className"]);
46
- let classes = clsx(className,
47
- // Base styles
48
- 'group cursor-default rounded-lg px-3.5 py-2.5 focus:outline-hidden sm:px-3 sm:py-1.5',
49
- // Text styles
50
- 'text-left text-base/6 text-zinc-950 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',
51
- // Focus
52
- 'data-focus:bg-blue-500 data-focus:text-white',
53
- // Disabled state
54
- 'data-disabled:opacity-50',
55
- // Forced colors mode
56
- 'forced-color-adjust-none forced-colors:data-focus:bg-[Highlight] forced-colors:data-focus:text-[HighlightText] forced-colors:data-focus:*:data-[slot=icon]:text-[HighlightText]',
57
- // Use subgrid when available but fallback to an explicit grid layout if not
58
- 'col-span-full grid grid-cols-[auto_1fr_1.5rem_0.5rem_auto] items-center supports-[grid-template-columns:subgrid]:grid-cols-subgrid',
59
- // Icons
60
- '*:data-[slot=icon]:col-start-1 *:data-[slot=icon]:row-start-1 *:data-[slot=icon]:mr-2.5 *:data-[slot=icon]:-ml-0.5 *:data-[slot=icon]:size-5 sm:*:data-[slot=icon]:mr-2 sm:*:data-[slot=icon]:size-4', '*:data-[slot=icon]:text-zinc-500 data-focus:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400 dark:data-focus:*:data-[slot=icon]:text-white',
61
- // Avatar
62
- '*:data-[slot=avatar]:mr-2.5 *:data-[slot=avatar]:-ml-1 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:mr-2 sm:*:data-[slot=avatar]:size-5');
63
- return 'href' in props ? (<Headless.MenuItem as={Link} {...props} className={classes}/>) : (<Headless.MenuItem as="button" type="button" {...props} className={classes}/>);
64
- }
65
- export function DropdownHeader(_a) {
66
- var { className } = _a, props = __rest(_a, ["className"]);
67
- return <div {...props} className={clsx(className, 'col-span-5 px-3.5 pt-2.5 pb-1 sm:px-3')}/>;
68
- }
69
- export function DropdownSection(_a) {
70
- var { className } = _a, props = __rest(_a, ["className"]);
71
- return (<Headless.MenuSection {...props} className={clsx(className,
72
- // Define grid at the section level instead of the item level if subgrid is supported
73
- 'col-span-full supports-[grid-template-columns:subgrid]:grid supports-[grid-template-columns:subgrid]:grid-cols-[auto_1fr_1.5rem_0.5rem_auto]')}/>);
74
- }
75
- export function DropdownHeading(_a) {
76
- var { className } = _a, props = __rest(_a, ["className"]);
77
- return (<Headless.MenuHeading {...props} className={clsx(className, 'col-span-full grid grid-cols-[1fr_auto] gap-x-12 px-3.5 pt-2 pb-1 text-sm/5 font-medium text-zinc-500 sm:px-3 sm:text-xs/5 dark:text-zinc-400')}/>);
78
- }
79
- export function DropdownDivider(_a) {
80
- var { className } = _a, props = __rest(_a, ["className"]);
81
- return (<Headless.MenuSeparator {...props} className={clsx(className, 'col-span-full mx-3.5 my-1 h-px border-0 bg-zinc-950/5 sm:mx-3 dark:bg-white/10 forced-colors:bg-[CanvasText]')}/>);
82
- }
83
- export function DropdownLabel(_a) {
84
- var { className } = _a, props = __rest(_a, ["className"]);
85
- return <div {...props} data-slot="label" className={clsx(className, 'col-start-2 row-start-1')} {...props}/>;
86
- }
87
- export function DropdownDescription(_a) {
88
- var { className } = _a, props = __rest(_a, ["className"]);
89
- return (<Headless.Description data-slot="description" {...props} className={clsx(className, 'col-span-2 col-start-2 row-start-2 text-sm/5 text-zinc-500 group-data-focus:text-white sm:text-xs/5 dark:text-zinc-400 forced-colors:group-data-focus:text-[HighlightText]')}/>);
90
- }
91
- export function DropdownShortcut(_a) {
92
- var { keys, className } = _a, props = __rest(_a, ["keys", "className"]);
93
- return (<Headless.Description as="kbd" {...props} className={clsx(className, 'col-start-5 row-start-1 flex justify-self-end')}>
94
- {(Array.isArray(keys) ? keys : keys.split('')).map((char, index) => (<kbd key={index} className={clsx([
95
- 'min-w-[2ch] text-center font-sans text-zinc-400 capitalize group-data-focus:text-white forced-colors:group-data-focus:text-[HighlightText]',
96
- // Make sure key names that are longer than one character (like "Tab") have extra space
97
- index > 0 && char.length > 1 && 'pl-1',
98
- ])}>
99
- {char}
100
- </kbd>))}
101
- </Headless.Description>);
102
- }