@plexui/styles 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -2
  3. package/dist/es/components/Accordion/Accordion.module.css +89 -0
  4. package/dist/es/components/Alert/Alert.module.css +210 -0
  5. package/dist/es/components/Avatar/Avatar.module.css +168 -0
  6. package/dist/es/components/Avatar/AvatarGroup.module.css +26 -0
  7. package/dist/es/components/Badge/Badge.module.css +196 -0
  8. package/dist/es/components/Breadcrumb/Breadcrumb.module.css +59 -0
  9. package/dist/es/components/Button/Button.module.css +863 -0
  10. package/dist/es/components/ButtonGroup/ButtonGroup.module.css +158 -0
  11. package/dist/es/components/Card/Card.module.css +125 -0
  12. package/dist/es/components/Checkbox/Checkbox.module.css +225 -0
  13. package/dist/es/components/CodeBlock/CodeBlock.module.css +139 -0
  14. package/dist/es/components/DataTable/DataTable.module.css +117 -0
  15. package/dist/es/components/DatePicker/Calendar.module.css +271 -0
  16. package/dist/es/components/DateRangePicker/Calendar.module.css +295 -0
  17. package/dist/es/components/DateRangePicker/Trigger.module.css +25 -0
  18. package/dist/es/components/Dialog/Dialog.module.css +240 -0
  19. package/dist/es/components/EmptyMessage/EmptyMessage.module.css +116 -0
  20. package/dist/es/components/Field/Field.module.css +152 -0
  21. package/dist/es/components/FieldError/FieldError.module.css +28 -0
  22. package/dist/es/components/FileUpload/FileUpload.module.css +133 -0
  23. package/dist/es/components/FloatingLabelInput/FloatingLabelInput.module.css +220 -0
  24. package/dist/es/components/FloatingLabelSelect/FloatingLabelSelect.module.css +152 -0
  25. package/dist/es/components/Image/Image.module.css +9 -0
  26. package/dist/es/components/Indicator/CircularProgress.module.css +28 -0
  27. package/dist/es/components/Indicator/LoadingDots.module.css +35 -0
  28. package/dist/es/components/Indicator/LoadingIndicator.module.css +41 -0
  29. package/dist/es/components/Input/Input.module.css +519 -0
  30. package/dist/es/components/InputGroup/InputGroup.module.css +309 -0
  31. package/dist/es/components/Kbd/Kbd.module.css +47 -0
  32. package/dist/es/components/Label/Label.module.css +16 -0
  33. package/dist/es/components/Markdown/Markdown.module.css +233 -0
  34. package/dist/es/components/MarkdownEditor/MarkdownEditor.module.css +297 -0
  35. package/dist/es/components/Menu/Menu.module.css +389 -0
  36. package/dist/es/components/OTPInput/OTPInput.module.css +70 -0
  37. package/dist/es/components/Popover/Popover.module.css +82 -0
  38. package/dist/es/components/Progress/Progress.module.css +34 -0
  39. package/dist/es/components/ProgressSteps/ProgressSteps.module.css +246 -0
  40. package/dist/es/components/RadioGroup/RadioGroup.module.css +159 -0
  41. package/dist/es/components/Select/Select.module.css +341 -0
  42. package/dist/es/components/SelectControl/SelectControl.module.css +558 -0
  43. package/dist/es/components/Separator/Separator.module.css +16 -0
  44. package/dist/es/components/ShimmerText/ShimmerText.module.css +43 -0
  45. package/dist/es/components/Sidebar/Sidebar.module.css +913 -0
  46. package/dist/es/components/Skeleton/Skeleton.module.css +17 -0
  47. package/dist/es/components/Slider/Slider.module.css +199 -0
  48. package/dist/es/components/StatCard/StatCard.module.css +234 -0
  49. package/dist/es/components/Switch/Switch.module.css +121 -0
  50. package/dist/es/components/Table/Table.module.css +56 -0
  51. package/dist/es/components/Tabs/Tabs.module.css +688 -0
  52. package/dist/es/components/TagInput/TagInput.module.css +320 -0
  53. package/dist/es/components/TextLink/TextLink.module.css +50 -0
  54. package/dist/es/components/Textarea/Textarea.module.css +272 -0
  55. package/dist/es/components/Toast/Toast.module.css +99 -0
  56. package/dist/es/components/Tooltip/Tooltip.module.css +91 -0
  57. package/dist/es/components/Transition/Animate.module.css +54 -0
  58. package/dist/es/components/Transition/AnimateLayout.module.css +101 -0
  59. package/dist/es/components/Transition/AnimateLayoutGroup.module.css +88 -0
  60. package/dist/es/components/Transition/TransitionGroup.module.css +4 -0
  61. package/dist/es/styles/base.css +102 -0
  62. package/dist/es/styles/globals.css +50 -0
  63. package/dist/es/styles/index.css +22 -0
  64. package/dist/es/styles/katex.min.css +1296 -0
  65. package/dist/es/styles/tailwind-utilities.css +1316 -0
  66. package/dist/es/styles/touch.css +71 -0
  67. package/dist/es/styles/variables-components.css +626 -0
  68. package/dist/es/styles/variables-primitive.css +327 -0
  69. package/dist/es/styles/variables-semantic.css +629 -0
  70. package/dist/es/styles/variables-tailwind-theme.css +34 -0
  71. package/dist/es/styles/variables-tokens-root.css +40 -0
  72. package/dist/es/types.js +4 -0
  73. package/dist/es/types.js.map +1 -0
  74. package/dist/es/vite/index.js +54 -0
  75. package/dist/es/vite/index.js.map +1 -0
  76. package/dist/types/types.d.ts +15 -0
  77. package/dist/types/vite/index.d.ts +55 -0
  78. package/package.json +109 -4
  79. package/postcss/functions.mjs +23 -0
  80. package/postcss/injectBreakpoints.mjs +47 -0
  81. package/postcss/mixins.mjs +100 -0
  82. package/postcss/parseLightDark.mjs +174 -0
  83. package/postcss/wrapModulesInLayer.mjs +21 -0
  84. package/postcss.config.mjs +52 -0
@@ -0,0 +1,341 @@
1
+ @layer components {/* =============================================
2
+ Custom Select
3
+ ============================================= */.Menu {
4
+ /* Top-level selector needs to exist */
5
+ }.MenuList[data-pill] {
6
+ --menu-radius: var(--menu-radius-pill, 22px);
7
+ --menu-item-radius: var(--radius-full);
8
+ }.MenuList {
9
+ z-index: 50;
10
+ /* Default to the width of the trigger */
11
+ width: var(--select-list-width, var(--radix-popover-trigger-width));
12
+ min-width: var(--select-list-min-width, var(--radix-popover-trigger-width));
13
+ max-width: var(--select-list-max-width, none);
14
+ border-radius: var(--menu-radius);
15
+ background: var(--color-surface-elevated);
16
+ box-shadow: var(--shadow), var(--shadow-hairline);
17
+ font-size: var(--menu-font-size);
18
+ line-height: var(--menu-line-height);
19
+ /* The transform-origin computed from the content and arrow positions/offsets */
20
+ transform-origin: var(--radix-popover-content-transform-origin);
21
+ -webkit-user-select: none;
22
+ -moz-user-select: none;
23
+ user-select: none;
24
+ will-change: opacity, transform;
25
+ }
26
+
27
+ /* Animation states applied to a wrapping parent */
28
+ .Menu[data-entering] .MenuList {
29
+ opacity: 0;
30
+ transform: scale(0.95);
31
+ }
32
+
33
+ .Menu[data-entering-active] .MenuList,
34
+ .Menu[data-entering][data-interrupted] .MenuList {
35
+ opacity: 1;
36
+ transform: scale(1);
37
+ transition-duration: 0.35s;
38
+ transition-property: opacity, transform;
39
+ transition-timing-function: var(--cubic-enter);
40
+ }
41
+
42
+ .Menu[data-exiting] .MenuList {
43
+ opacity: 1;
44
+ transform: scale(1);
45
+ }
46
+
47
+ .Menu[data-exiting-active] .MenuList,
48
+ .Menu[data-exiting][data-interrupted] .MenuList {
49
+ opacity: 0;
50
+ transform: scale(0.95);
51
+ transition-duration: 0.2s;
52
+ transition-property: opacity, transform;
53
+ transition-timing-function: var(--cubic-exit);
54
+ }.MenuInner {
55
+ display: flex;
56
+ flex-direction: column;
57
+ /* The remaining height between the trigger and the boundary edge */
58
+ max-height: min(
59
+ var(--select-list-max-height, 400px),
60
+ var(--radix-popover-content-available-height)
61
+ );
62
+ }
63
+
64
+ .MenuInner:focus {
65
+ outline: 0;
66
+ }/* =============================================
67
+ Options
68
+ ============================================= */.OptionsList {
69
+ overflow: auto;
70
+ flex: 1;
71
+ padding: var(--menu-gutter);
72
+ }
73
+
74
+ /* Focused without search: the highlighted option shows where the keys go */
75
+ .OptionsList:focus {
76
+ outline: 0;
77
+ }.Option {
78
+ position: relative;
79
+ padding: var(--menu-item-padding);
80
+ cursor: pointer;
81
+ overflow-wrap: anywhere;
82
+ /* When keyboard navigation snaps item into scrollable view, ensure 20px of spacing to show additional items below */
83
+ scroll-margin: 15px 0;
84
+ }
85
+
86
+ .Option::before {
87
+ position: absolute;
88
+ inset: 0;
89
+ display: block;
90
+ border-radius: var(--menu-item-radius, calc(var(--menu-radius) - var(--menu-gutter)));
91
+ background: var(--menu-item-background-color);
92
+ content: "";
93
+ opacity: 0;
94
+ transform: scale(var(--scale, 0.98));
95
+ transition-duration: var(--transition-duration-basic);
96
+ transition-property: opacity, background-color, transform;
97
+ transition-timing-function: var(--cubic-enter);
98
+ will-change: opacity, transform;
99
+ }
100
+
101
+ .Option[data-selected] {
102
+ font-weight: var(--font-weight-semibold);
103
+ }
104
+
105
+ /* Options with a description automatically keep their title semibold in
106
+ every state (highlighted, selected, idle). This is the "item + subtitle"
107
+ pattern — don't make consumers (or AI generating demos) remember to pass
108
+ `optionClassName="font-semibold"`. OptionDescription's own rule below
109
+ keeps the description text at normal weight. */
110
+ .Option:has(.OptionDescription) {
111
+ font-weight: var(--font-weight-semibold);
112
+ }
113
+ .Option[data-highlight]::before {
114
+ opacity: 1;
115
+ transform: scale(1);
116
+ }
117
+
118
+ .Option[data-highlight]:active::before {
119
+ transform: scale(var(--scale, 0.98));
120
+ }
121
+
122
+ .Option[data-disabled] {
123
+ cursor: not-allowed;
124
+ opacity: 0.5;
125
+ }
126
+
127
+ .Option[data-disabled]::before {
128
+ display: none;
129
+ }/* Option layout — three-column flex row so title+description stack as a
130
+ leading group, and the indicator (start or end) sits as a dedicated
131
+ trailing/leading column. This is what makes description never leak under
132
+ the end-position checkmark column. Do not inline indicators inside
133
+ `.OptionInner` again — it breaks the layout contract consumers rely on. */.PressableInner {
134
+ position: relative;
135
+ display: flex;
136
+ align-items: flex-start;
137
+ gap: var(--menu-item-gap);
138
+ }.OptionLeading {
139
+ display: flex;
140
+ flex: 1;
141
+ min-width: 0;
142
+ flex-direction: column;
143
+ }.OptionInner {
144
+ display: flex;
145
+ align-items: center;
146
+ justify-content: flex-start;
147
+ gap: var(--menu-item-gap);
148
+ }/* End-position indicator gets pushed against the right edge of PressableInner.
149
+ Start-position sits at the natural first column. */.PressableInner > .OptionIndicatorSlot[data-position="end"] {
150
+ margin-left: auto;
151
+ }.OptionCheck {
152
+ display: block;
153
+ flex-shrink: 0;
154
+ width: 16px;
155
+ height: 16px;
156
+ }.OptionIndicatorSlot {
157
+ display: flex;
158
+ align-items: center;
159
+ flex-grow: 0;
160
+ flex-shrink: 0;
161
+ width: 16px;
162
+ /* Follow the title's first line box, independently of description height. */
163
+ height: 1lh;
164
+ }.OptionDescription {
165
+ font-weight: var(--font-weight-normal);
166
+ color: var(--color-text-secondary);
167
+ }/* Option group: the `group` around a heading and its rows. No box of its own:
168
+ a plain block in the list's block flow, with no padding or border, so the
169
+ rows sit exactly where they would as the list's own children and the
170
+ heading's top margin collapses through it. The heading always opens its
171
+ group, so "first section" is the group's position, not the heading's. */.OptionGroup {
172
+ display: block;
173
+ }/* Group heading — a section label, not an option. Same size and weight as the
174
+ options made it read as a disabled row, so it carries its own type level:
175
+ smaller, semibold, secondary color. A rule between sections and the extra
176
+ space above it do the separating, the way a grouped menu does it on GitHub
177
+ (Sort by / Order). The rule bleeds past the list gutter to the popover edge
178
+ and the first section never gets one. */.OptionGroupHeading {
179
+ position: relative;
180
+ display: flex;
181
+ align-items: center;
182
+ justify-content: flex-start;
183
+ gap: var(--menu-item-gap);
184
+ padding: var(--menu-item-padding);
185
+ margin-top: calc(var(--spacing) * 2);
186
+ font-size: var(--font-text-xs-size);
187
+ line-height: var(--font-text-xs-line-height);
188
+ font-weight: var(--font-weight-semibold);
189
+ color: var(--color-text-secondary);
190
+ }
191
+
192
+ .OptionGroup:not(:first-child) > .OptionGroupHeading::before {
193
+ position: absolute;
194
+ top: calc(calc(var(--spacing) * 1) * -1);
195
+ inset-inline: calc(var(--menu-gutter) * -1);
196
+ border-top: 1px solid var(--menu-separator-background-color);
197
+ content: "";
198
+ }
199
+
200
+ .OptionGroup:first-child > .OptionGroupHeading {
201
+ margin-top: 0;
202
+ }.OptionHardLimitHeading {
203
+ display: flex;
204
+ align-items: center;
205
+ justify-content: flex-start;
206
+ gap: var(--menu-item-gap);
207
+ padding: var(--menu-item-padding);
208
+ color: var(--color-text-secondary);
209
+ }.OptionsLimit {
210
+ color: var(--link-primary-text-color);
211
+ font-weight: var(--font-weight-medium);
212
+ }/* =============================================
213
+ Action
214
+ ============================================= */.Action {
215
+ position: relative;
216
+ padding: var(--menu-item-padding);
217
+ border-radius: var(--menu-item-radius, calc(var(--menu-radius) - var(--menu-gutter)));
218
+ cursor: pointer;
219
+ transition: background-color 0.15s ease;
220
+ }
221
+
222
+ /* Background shape */
223
+ .Action::before {
224
+ position: absolute;
225
+ inset: 0;
226
+ display: block;
227
+ border-radius: var(--menu-item-radius, calc(var(--menu-radius) - var(--menu-gutter)));
228
+ content: "";
229
+ opacity: 0;
230
+ transform: scale(var(--scale, 0.98));
231
+ transition-duration: 0.15s;
232
+ transition-property: opacity, background-color, transform;
233
+ transition-timing-function: var(--cubic-enter);
234
+ will-change: opacity, transform;
235
+ }
236
+ .Action::before, :where([data-theme="light"]) .Action::before {
237
+ background: var(--gray-100);
238
+ }
239
+ :where([data-theme="dark"]) .Action::before {
240
+ background: var(--gray-25);
241
+ }
242
+
243
+ /* Focus ring */
244
+ .Action::after {
245
+ position: absolute;
246
+ inset: 0;
247
+ display: block;
248
+ border-radius: var(--menu-item-radius, calc(var(--menu-radius) - var(--menu-gutter)));
249
+ content: "";
250
+ pointer-events: none;
251
+ transition-duration: 0.15s;
252
+ transition-property: box-shadow, transform;
253
+ transition-timing-function: var(--cubic-enter);
254
+ }
255
+
256
+ @media (hover: hover) and (pointer: fine) {
257
+ .Action:hover::before {
258
+ opacity: 1;
259
+ transform: scale(1);
260
+ }
261
+ }
262
+
263
+ .Action:focus {
264
+ outline: none;
265
+ }
266
+
267
+ .Action:focus-visible::after {
268
+ box-shadow: 0 0 0 2px var(--color-ring);
269
+ }
270
+
271
+ .Action:active::before,
272
+ .Action:active::after {
273
+ transform: scale(var(--scale, 0.98));
274
+ }
275
+
276
+ .Action svg {
277
+ flex-shrink: 0;
278
+ width: 16px;
279
+ height: 16px;
280
+ }.ActionInner {
281
+ position: relative;
282
+ display: flex;
283
+ align-items: center;
284
+ justify-content: flex-start;
285
+ gap: var(--menu-item-gap);
286
+ }.ActionsContainer {
287
+ position: relative;
288
+ padding: var(--menu-gutter);
289
+ border-top: 1px solid var(--menu-separator-background-color);
290
+ }
291
+
292
+ .ActionsContainer::before {
293
+ position: absolute;
294
+ bottom: 100%;
295
+ left: 0;
296
+ width: 100%;
297
+ height: 9px;
298
+ margin-bottom: 1px;
299
+ background: var(--color-surface-elevated);
300
+ content: "";
301
+ -webkit-mask-image: linear-gradient(180deg, rgb(0 0 0 / 0%), rgb(0 0 0 / 100%));
302
+ mask-image: linear-gradient(180deg, rgb(0 0 0 / 0%), rgb(0 0 0 / 100%));
303
+ pointer-events: none;
304
+ }/* =============================================
305
+ Search
306
+ ============================================= */.Search {
307
+ position: relative;
308
+ padding: var(--menu-gutter) var(--menu-gutter) 0;
309
+ }/* Override fill for Search icon to apply fill-secondary class correctly *//* Need !important to override fill="currentColor" attribute in SVG path *//* Target SVG with fill prop and its path children */.Search svg[fill],
310
+ .Search svg[fill] path {
311
+ fill: var(--color-text-secondary) !important;
312
+ }/* Also target by class for fallback */.Search svg.fill-secondary,
313
+ .Search svg.fill-secondary path {
314
+ fill: var(--color-text-secondary) !important;
315
+ }.SearchEmpty {
316
+ padding: var(--menu-gutter);
317
+ margin: calc(var(--spacing) * 4) 0;
318
+ }
319
+
320
+ .SearchEmpty[data-text-only] {
321
+ color: var(--color-text-secondary);
322
+ text-align: center;
323
+ }/* The hidden input that submits and validates the value. Its own class, not
324
+ Tailwind utilities: an app that does not generate `sr-only` (or orders
325
+ `w-full` after it) would otherwise lay it out at full width next to the
326
+ trigger text. Full width and no height at the bottom of the trigger, so the
327
+ browser's "required" bubble points at the control. */.FormInput {
328
+ position: absolute;
329
+ bottom: 0;
330
+ left: 0;
331
+ width: 100%;
332
+ height: 0;
333
+ padding: 0;
334
+ margin: 0;
335
+ border: 0;
336
+ overflow: hidden;
337
+ clip-path: inset(50%);
338
+ white-space: nowrap;
339
+ pointer-events: none;
340
+ }
341
+ }