@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,99 @@
1
+ @layer components {/* Overrides sonner's inline `z-index: 999999999` with a tamed, token-friendly
2
+ value. Consumers can lower it via `--z-toast` if their app pushes something
3
+ legitimately higher (rare — toasts should sit above modals and headers). */.Toaster:where([data-sonner-toaster]) {
4
+ z-index: var(--z-toast, 100000) !important;
5
+ }/* Sonner reads --normal-bg / --normal-text / --normal-border / --border-radius
6
+ from the Toaster element (wired up in Toaster.tsx). The rules below only
7
+ layer on things sonner's stylesheet doesn't cover on its own. */.Toast {
8
+ --toast-icon-color: currentColor;
9
+
10
+ /* Shrink to fit: short toasts don't pad out empty space, long ones wrap
11
+ at the Toaster's --width. Sonner positions toasts absolutely, so we set
12
+ left/right: 0 + auto margins to center without touching its transform. */
13
+ width: -moz-max-content !important;
14
+ width: max-content !important;
15
+ /* On a phone Sonner insets the toaster by its mobile offsets; the toast
16
+ stays inside them instead of overflowing at the desktop width */
17
+ max-width: min(
18
+ var(--width),
19
+ calc(100vw - var(--mobile-offset-left, 16px) - var(--mobile-offset-right, 16px))
20
+ ) !important;
21
+ left: 0 !important;
22
+ right: 0 !important;
23
+ margin-inline: auto !important;
24
+ /* Tight gap between icon and content; action button gets extra breathing
25
+ room via its own margin-left below. */
26
+ gap: calc(var(--spacing) * 2) !important;
27
+ padding: calc(var(--spacing) * 3) !important;
28
+ font-size: var(--font-text-sm-size);
29
+ line-height: var(--font-text-sm-line-height);
30
+ /* Sonner's own stylesheet lives outside any @layer and hardcodes a light
31
+ drop shadow — we need !important to land our layered token value.
32
+ Same shadow + hairline combo as Menu / Popover for visual parity. */
33
+ box-shadow: var(--shadow), var(--shadow-hairline) !important;
34
+ }/* On a phone Sonner makes the toaster as wide as the screen and shifts it by
35
+ the inset, so part of it is off screen: center the toast in the rest */@media (width <= 600px) {
36
+ .Toast {
37
+ right: calc(var(--mobile-offset-left, 16px) + var(--mobile-offset-right, 16px)) !important;
38
+ }
39
+
40
+ .Toaster[dir="rtl"] .Toast {
41
+ left: calc(var(--mobile-offset-left, 16px) + var(--mobile-offset-right, 16px)) !important;
42
+ right: 0 !important;
43
+ }
44
+ }.Title {
45
+ color: var(--color-text);
46
+ font-size: var(--font-text-sm-size);
47
+ line-height: var(--font-text-sm-line-height);
48
+ /* Sonner pins font-weight: 500; keep that for title-only toasts and only
49
+ lift to semibold when a description sits alongside (so the title is
50
+ visually anchored against the secondary text). */
51
+ font-weight: var(--font-weight-medium);
52
+ text-wrap: pretty;
53
+ }.Content:has(.Description) .Title {
54
+ font-weight: var(--font-weight-semibold) !important;
55
+ }.Description {
56
+ color: var(--color-text-secondary);
57
+ font-size: var(--font-text-sm-size);
58
+ line-height: var(--font-text-sm-line-height);
59
+ text-wrap: pretty;
60
+ }.Content {
61
+ gap: 0 !important;
62
+ }.Icon {
63
+ color: var(--toast-icon-color);
64
+ }
65
+
66
+ .Icon > svg {
67
+ width: 20px;
68
+ height: 20px;
69
+ }.ActionButton {
70
+ margin-left: calc(var(--spacing) * 2) !important;
71
+ background: var(--color-background-primary-solid) !important;
72
+ color: var(--color-text-primary-solid) !important;
73
+ font-weight: var(--font-weight-medium);
74
+ }
75
+
76
+ .ActionButton:hover {
77
+ background: var(--color-background-primary-solid-hover) !important;
78
+ }.CancelButton {
79
+ color: var(--color-text-secondary) !important;
80
+ font-weight: var(--font-weight-medium);
81
+ }/* =============================================
82
+ Centered text variant — shrink-to-fit is already the default
83
+ ============================================= */.Compact {
84
+ justify-content: center;
85
+ }.Compact .Title,
86
+ .Compact .Description {
87
+ text-align: center;
88
+ }/* =============================================
89
+ Semantic variants — driven by tokens
90
+ ============================================= */.Success {
91
+ --toast-icon-color: var(--color-text-success-outline);
92
+ }.Error {
93
+ --toast-icon-color: var(--color-text-danger-outline);
94
+ }.Warning {
95
+ --toast-icon-color: var(--color-text-warning-outline);
96
+ }.Info {
97
+ --toast-icon-color: var(--color-text-info-outline);
98
+ }
99
+ }
@@ -0,0 +1,91 @@
1
+ @layer components {.Tooltip {
2
+ z-index: 50;
3
+ max-width: 300px;
4
+ border-radius: var(--radius-md);
5
+ /* animation-duration: 0.3s; */
6
+ /* animation-name: scale-in; */
7
+ /* animation-timing-function: var(--cubic-enter); */
8
+ background: var(--color-surface-elevated);
9
+ box-shadow: var(--shadow), var(--shadow-hairline);
10
+ font-size: 14px;
11
+ line-height: 1.45;
12
+ /* transform-origin: var(--radix-tooltip-content-transform-origin); */
13
+ /* transition: background-color 0.15s ease; */
14
+
15
+ /* &[data-state="closed"] {
16
+ animation: scale-out 0.2s var(--cubic-exit);
17
+ } */
18
+ }
19
+
20
+ /*
21
+ * Default cursor is slightly more pleasing than text cursor,
22
+ * if a tooltip transitions between clickable -> non-clickable (e.g., CopyTooltip)
23
+ */
24
+ .Tooltip[data-clickable="false"] {
25
+ cursor: default;
26
+ }
27
+
28
+ .Tooltip[data-clickable="true"] {
29
+ cursor: pointer;
30
+ }
31
+ @media (hover: hover) and (pointer: fine) {.Tooltip[data-compact="true"][data-clickable="true"]:hover {
32
+ background: var(--gray-600);
33
+ color: var(--gray-0);
34
+ }
35
+ }
36
+
37
+ .Tooltip[data-gutter-size="sm"] {
38
+ padding: 8px 12px;
39
+ }
40
+
41
+ .Tooltip[data-gutter-size="md"] {
42
+ padding: 12px 16px;
43
+ }
44
+
45
+ .Tooltip[data-gutter-size="lg"] {
46
+ padding: 14px 18px;
47
+ }
48
+
49
+ .Tooltip[data-compact="true"] {
50
+ padding: 2px 8px;
51
+ background: var(--gray-700);
52
+ color: var(--gray-0);
53
+ font-size: 14px;
54
+ }@keyframes scale-in {
55
+ from {
56
+ opacity: 0;
57
+ transform: scale(0.95);
58
+ }
59
+
60
+ to {
61
+ opacity: 1;
62
+ transform: scale(1);
63
+ }
64
+ }@keyframes scale-out {
65
+ from {
66
+ opacity: 1;
67
+ transform: scale(1);
68
+ }
69
+
70
+ to {
71
+ opacity: 0;
72
+ transform: scale(0.95);
73
+ }
74
+ }.TriggerDecorator {
75
+ display: inline-flex;
76
+ cursor: pointer;
77
+ -webkit-text-decoration: underline dotted;
78
+ text-decoration: underline dotted;
79
+ text-decoration-color: transparent;
80
+ /* transition: text-decoration 0.2s var(--cubic-exit); */
81
+ }
82
+
83
+ .TriggerDecorator:focus {
84
+ outline: 0;
85
+ }
86
+
87
+ .TriggerDecorator[data-state*="open"] {
88
+ text-decoration-color: var(--color-text-tertiary);
89
+ transition-timing-function: var(--cubic-enter);
90
+ }
91
+ }
@@ -0,0 +1,54 @@
1
+ @layer components {.TransitionItem {
2
+ will-change: var(--tg-will-change);
3
+
4
+ /* Removing natural DOM position allows multiple layers to occupy the same space without stacking */
5
+
6
+ /* Interruptions should not experience delay */
7
+ }
8
+ [data-transition-position="absolute"] .TransitionItem[data-exiting],
9
+
10
+ [data-transition-position="absolute"] .TransitionItem:not([data-exiting]) + .TransitionItem[data-entering] {
11
+ position: absolute;
12
+ top: 0;
13
+ left: 0;
14
+ width: 100%;
15
+ }
16
+
17
+ .TransitionItem[data-entering] {
18
+ filter: var(--tg-initial-filter);
19
+ opacity: var(--tg-initial-opacity);
20
+ transform: var(--tg-initial-transform);
21
+ }
22
+
23
+ .TransitionItem[data-exiting] {
24
+ filter: var(--tg-enter-filter);
25
+ opacity: var(--tg-enter-opacity);
26
+ transform: var(--tg-enter-transform);
27
+ }
28
+
29
+ .TransitionItem[data-entering-active],
30
+ .TransitionItem[data-entering][data-interrupted] {
31
+ filter: var(--tg-enter-filter);
32
+ opacity: var(--tg-enter-opacity);
33
+ transform: var(--tg-enter-transform);
34
+ transition:
35
+ opacity var(--tg-enter-duration) var(--tg-enter-timing-function) var(--tg-enter-delay),
36
+ transform var(--tg-enter-duration) var(--tg-enter-timing-function) var(--tg-enter-delay),
37
+ filter var(--tg-enter-duration) var(--tg-enter-timing-function) var(--tg-enter-delay);
38
+ }
39
+
40
+ .TransitionItem[data-exiting-active],
41
+ .TransitionItem[data-exiting][data-interrupted] {
42
+ filter: var(--tg-exit-filter, none);
43
+ opacity: var(--tg-exit-opacity, 0);
44
+ transform: var(--tg-exit-transform, none);
45
+ transition:
46
+ opacity var(--tg-exit-duration) var(--tg-exit-timing-function) var(--tg-exit-delay),
47
+ transform var(--tg-exit-duration) var(--tg-exit-timing-function) var(--tg-exit-delay),
48
+ filter var(--tg-exit-duration) var(--tg-exit-timing-function) var(--tg-exit-delay);
49
+ }
50
+ .TransitionItem[data-entering][data-interrupted],
51
+ .TransitionItem[data-exiting][data-interrupted] {
52
+ transition-delay: 0ms;
53
+ }
54
+ }
@@ -0,0 +1,101 @@
1
+ @layer components {.Layout {
2
+ position: relative;
3
+ display: block;
4
+ flex-shrink: 0;
5
+ transition-property: height, width;
6
+
7
+ /* The container is considered to have three directional states by the latest action: */
8
+ /* - "in": (default) a new child entered with no other siblings present */
9
+ }
10
+
11
+ .Layout[data-clip="true"] {
12
+ overflow: hidden;
13
+ }
14
+ /* - "move": a new child entered while another sibling was present */
15
+ .Layout[data-direction="in"] {
16
+ transition-delay: var(--tg-layout-enter-delay);
17
+ transition-duration: var(--tg-layout-enter-duration);
18
+ transition-timing-function: var(--tg-layout-enter-timing-function);
19
+ }
20
+ /* - "out": a child exited */
21
+
22
+ .Layout[data-direction="out"] {
23
+ transition-delay: var(--tg-layout-exit-delay);
24
+ transition-duration: var(--tg-layout-exit-duration);
25
+ transition-timing-function: var(--tg-layout-exit-timing-function);
26
+ }
27
+
28
+ /* "move" defaults to "in" values */
29
+ .Layout[data-direction="move"] {
30
+ transition-delay: var(--tg-layout-move-delay);
31
+ transition-duration: var(--tg-layout-move-duration);
32
+ transition-timing-function: var(--tg-layout-move-timing-function);
33
+ }
34
+
35
+ /* Interruptions should not experience delays */
36
+ .Layout[data-interrupted="true"] {
37
+ transition-delay: 0ms;
38
+ }.TransitionItem {
39
+ flex-shrink: 0;
40
+ will-change: var(--tg-will-change, auto);
41
+
42
+ /* Interruptions are allowed to experience delay, as opposed to <Animate> */
43
+ /* This is because they may involve interplay with a non-clipped container, which then creates */
44
+ /* unintended visual artifacts if the interruption is not delayed. */
45
+ }
46
+
47
+ .TransitionItem[data-entering],
48
+ .TransitionItem[data-exiting] {
49
+ position: absolute;
50
+ top: 0;
51
+ left: 0;
52
+ width: 100%;
53
+ }
54
+
55
+ .Layout[data-dimension="width"] > .TransitionItem[data-entering], .Layout[data-dimension="width"] > .TransitionItem[data-exiting] {
56
+ width: auto;
57
+ }
58
+
59
+ .Layout[data-item-anchor="end"] > .TransitionItem[data-entering], .Layout[data-item-anchor="end"] > .TransitionItem[data-exiting] {
60
+ top: initial;
61
+ bottom: 0;
62
+ }
63
+
64
+ .Layout[data-item-anchor="end"][data-dimension="width"] > .TransitionItem[data-entering], .Layout[data-item-anchor="end"][data-dimension="width"] > .TransitionItem[data-exiting] {
65
+ right: 0;
66
+ left: initial;
67
+ }
68
+
69
+ .TransitionItem[data-entering] {
70
+ filter: var(--tg-initial-filter);
71
+ opacity: var(--tg-initial-opacity);
72
+ transform: var(--tg-initial-transform);
73
+ }
74
+
75
+ .TransitionItem[data-exiting] {
76
+ filter: var(--tg-enter-filter);
77
+ opacity: var(--tg-enter-opacity);
78
+ transform: var(--tg-enter-transform);
79
+ }
80
+ .TransitionItem[data-entering-active],
81
+ .TransitionItem[data-entering][data-interrupted] {
82
+ filter: var(--tg-enter-filter);
83
+ opacity: var(--tg-enter-opacity);
84
+ transform: var(--tg-enter-transform);
85
+ transition:
86
+ opacity var(--tg-enter-duration) var(--tg-enter-timing-function) var(--tg-enter-delay),
87
+ transform var(--tg-enter-duration) var(--tg-enter-timing-function) var(--tg-enter-delay),
88
+ filter var(--tg-enter-duration) var(--tg-enter-timing-function) var(--tg-enter-delay);
89
+ }
90
+
91
+ .TransitionItem[data-exiting-active],
92
+ .TransitionItem[data-exiting][data-interrupted] {
93
+ filter: var(--tg-exit-filter);
94
+ opacity: var(--tg-exit-opacity);
95
+ transform: var(--tg-exit-transform);
96
+ transition:
97
+ opacity var(--tg-exit-duration) var(--tg-exit-timing-function) var(--tg-exit-delay),
98
+ transform var(--tg-exit-duration) var(--tg-exit-timing-function) var(--tg-exit-delay),
99
+ filter var(--tg-exit-duration) var(--tg-exit-timing-function) var(--tg-exit-delay);
100
+ }
101
+ }
@@ -0,0 +1,88 @@
1
+ @layer components {.LayoutItem {
2
+ position: relative;
3
+ flex-shrink: 0;
4
+
5
+ /* Enter & Exit staging occurs in JS */
6
+ }
7
+
8
+ .LayoutItem[data-entering-active],
9
+ .LayoutItem[data-entering][data-interrupted] {
10
+ transition:
11
+ height var(--tg-layout-enter-duration) var(--tg-layout-enter-timing-function)
12
+ var(--tg-layout-enter-delay),
13
+ width var(--tg-layout-enter-duration) var(--tg-layout-enter-timing-function)
14
+ var(--tg-layout-enter-delay);
15
+ }
16
+
17
+ .LayoutItem[data-exiting-active],
18
+ .LayoutItem[data-exiting][data-interrupted] {
19
+ transition:
20
+ height var(--tg-layout-exit-duration) var(--tg-layout-exit-timing-function)
21
+ var(--tg-layout-exit-delay),
22
+ width var(--tg-layout-exit-duration) var(--tg-layout-exit-timing-function)
23
+ var(--tg-layout-exit-delay);
24
+ }.TransitionItem {
25
+ display: block;
26
+ will-change: var(--tg-will-change);
27
+
28
+ /* Interruptions are allowed to experience delay, as opposed to <Animate> */
29
+ /* This is because they may involve interplay with a non-clipped container, which then creates */
30
+ /* unintended visual artifacts if the interruption is not delayed. */
31
+ }
32
+
33
+ .LayoutItem[data-entering] > .TransitionItem {
34
+ filter: var(--tg-initial-filter);
35
+ opacity: var(--tg-initial-opacity);
36
+ transform: var(--tg-initial-transform);
37
+ }
38
+
39
+ .LayoutItem[data-exiting] > .TransitionItem {
40
+ filter: var(--tg-enter-filter);
41
+ opacity: var(--tg-enter-opacity);
42
+ transform: var(--tg-enter-transform);
43
+ }
44
+
45
+ /* Width cannot be measured like height can in some scenarios */
46
+ .LayoutItem[data-entering] > .TransitionItem[data-dimension="width"] {
47
+ position: absolute;
48
+ top: 0;
49
+ left: 0;
50
+ }
51
+
52
+ /* itemAnchor="end": the item pins to the end side while its wrapper resizes */
53
+ .LayoutItem:is([data-entering], [data-exiting]) > .TransitionItem[data-item-anchor="end"] {
54
+ position: absolute;
55
+ bottom: 0;
56
+ left: 0;
57
+ width: 100%;
58
+ }
59
+
60
+ .LayoutItem:is([data-entering], [data-exiting]) > .TransitionItem[data-item-anchor="end"][data-dimension="width"] {
61
+ top: 0;
62
+ right: 0;
63
+ bottom: auto;
64
+ left: auto;
65
+ width: auto;
66
+ }
67
+ .LayoutItem[data-entering-active] > .TransitionItem,
68
+ .LayoutItem[data-entering][data-interrupted] > .TransitionItem {
69
+ filter: var(--tg-enter-filter);
70
+ opacity: var(--tg-enter-opacity);
71
+ transform: var(--tg-enter-transform);
72
+ transition:
73
+ opacity var(--tg-enter-duration) var(--tg-enter-timing-function) var(--tg-enter-delay),
74
+ transform var(--tg-enter-duration) var(--tg-enter-timing-function) var(--tg-enter-delay),
75
+ filter var(--tg-enter-duration) var(--tg-enter-timing-function) var(--tg-enter-delay);
76
+ }
77
+
78
+ .LayoutItem[data-exiting-active] > .TransitionItem,
79
+ .LayoutItem[data-exiting][data-interrupted] > .TransitionItem {
80
+ filter: var(--tg-exit-filter);
81
+ opacity: var(--tg-exit-opacity, 0);
82
+ transform: var(--tg-exit-transform);
83
+ transition:
84
+ opacity var(--tg-exit-duration) var(--tg-exit-timing-function) var(--tg-exit-delay),
85
+ transform var(--tg-exit-duration) var(--tg-exit-timing-function) var(--tg-exit-delay),
86
+ filter var(--tg-exit-duration) var(--tg-exit-timing-function) var(--tg-exit-delay);
87
+ }
88
+ }
@@ -0,0 +1,4 @@
1
+ @layer components {.TransitionGroupChild {
2
+ display: block;
3
+ }
4
+ }
@@ -0,0 +1,102 @@
1
+ /* =============================================
2
+ Opinionated resets
3
+ ============================================= */
4
+ @layer base {
5
+ html,
6
+ :host {
7
+ /* Disallow browsers from synthesizing bold weights when missing */
8
+ font-synthesis-weight: none;
9
+ }
10
+
11
+ textarea {
12
+ /* Prevent resizing by default */
13
+ resize: none;
14
+ }
15
+
16
+ img,
17
+ svg {
18
+ flex-grow: 0;
19
+ /* Prevent flexbox from forcing visual assets to shrink/grow size unintentionally */
20
+ flex-shrink: 0;
21
+ }
22
+
23
+ input,
24
+ textarea,
25
+ select,
26
+ optgroup {
27
+ /* Normalize mobile Safari styles */
28
+ -webkit-appearance: none;
29
+ -moz-appearance: none;
30
+ appearance: none;
31
+ box-shadow: none;
32
+ /* Prevent Firefox autofill coloring (preview and confirmed modes) */
33
+ filter: none;
34
+ /* Normalize default outline offset and width in Safari */
35
+ outline-offset: 0;
36
+ outline-width: 2px;
37
+ }
38
+
39
+ /*
40
+ * Prevent non-standard gestures on interactive Elements, like double-tap to zoom.
41
+ * Single taps will be dispatched immediately, instead of delayed.
42
+ */
43
+ a,
44
+ button,
45
+ input,
46
+ label,
47
+ select,
48
+ textarea,
49
+ :where([aria-role="button"]) {
50
+ touch-action: manipulation;
51
+ }
52
+
53
+ button {
54
+ /* Reset default transform */
55
+ text-transform: none;
56
+ /* Remove gap below button in certain conditions where inline-block is used */
57
+ vertical-align: middle;
58
+ }
59
+
60
+ button:not(:disabled),
61
+ [role="button"]:not(:disabled) {
62
+ /* Normalize cursor to pointer type */
63
+ cursor: pointer;
64
+ }
65
+
66
+ pre {
67
+ /* Avoid overflow by default in preformatted text */
68
+ white-space: pre-wrap;
69
+ }
70
+
71
+ table {
72
+ /* Remove gaps between table borders by default */
73
+ border-spacing: 0;
74
+ }
75
+
76
+ /* Remove default quote elements */
77
+ blockquote,
78
+ q {
79
+ quotes: none;
80
+ }
81
+
82
+ blockquote::before,
83
+ blockquote::after,
84
+ q::before,
85
+ q::after {
86
+ content: none;
87
+ }
88
+ }
89
+
90
+ /* =============================================
91
+ Directives
92
+ ============================================= */
93
+ @custom-variant hover {
94
+ @media (hover: hover) and (pointer: fine) {
95
+ &:hover {
96
+ @slot;
97
+ }
98
+ }
99
+ }
100
+
101
+ @custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
102
+ @custom-variant light (&:where([data-theme=light], [data-theme=light] *));
@@ -0,0 +1,50 @@
1
+ /* =============================================
2
+ Opinionated globals
3
+ ============================================= */
4
+ @layer base {
5
+ html,
6
+ :host {
7
+ /* Apply default color */
8
+ color: var(--color-text);
9
+ /* Smooth font rendering by default */
10
+ -webkit-font-smoothing: antialiased;
11
+ -moz-osx-font-smoothing: grayscale;
12
+ /* Apply default letter-spacing */
13
+ letter-spacing: var(--tracking-normal);
14
+ /* Prevent rubber-band / bounce overscroll */
15
+ overscroll-behavior: none;
16
+ }
17
+
18
+ [data-theme="light"] {
19
+ color-scheme: light;
20
+ }
21
+
22
+ [data-theme="dark"] {
23
+ color-scheme: dark;
24
+ }
25
+
26
+ * {
27
+ /* Aesthetic scrollbar defaults */
28
+ scrollbar-color: var(--scrollbar-color) transparent;
29
+ scrollbar-width: thin;
30
+ }
31
+
32
+ /* All exiting <TransitionGroup> components should be non-interactive */
33
+ [data-exiting] {
34
+ pointer-events: none;
35
+ }
36
+
37
+ /* Default placeholder text color */
38
+ ::-moz-placeholder {
39
+ color: var(--color-text-tertiary);
40
+ }
41
+ ::placeholder {
42
+ color: var(--color-text-tertiary);
43
+ }
44
+
45
+ /* Use semibold weight as the defacto bold */
46
+ b,
47
+ strong {
48
+ font-weight: var(--font-weight-semibold);
49
+ }
50
+ }
@@ -0,0 +1,22 @@
1
+ /* Tailwind & Reset */
2
+ @import "./base";
3
+ /* Tier 0: radius / font / font-weight tokens, declared in an unlayered
4
+ :root so semantic and components tiers can reference `var(--radius-*)`,
5
+ `var(--font-sans)`, `var(--font-weight-*)`. Not `@theme static {…}`,
6
+ which would reset Tailwind's namespaces with `--radius-*: initial`.
7
+ Unlayered, they override the same names from Tailwind's theme layer,
8
+ so the consumer's `rounded-*` and font utilities use the Plex values
9
+ (see variables-tokens-root.css and /docs/installation). */
10
+ @import "./variables-tokens-root";
11
+ /* Tier 1 tokens: Primitives */
12
+ @import "./variables-primitive";
13
+ /* Tier 2 tokens: Semantic */
14
+ @import "./variables-semantic";
15
+ /* Tier 3 tokens: Components */
16
+ @import "./variables-components";
17
+ /* Tailwind-only variables for utility classes */
18
+ @import "./tailwind-utilities";
19
+ /* Opinionated globals */
20
+ @import "./globals";
21
+ /* Katex bundled global CSS */
22
+ @import "./katex.min.css" layer(base);