@xenosystem/elements-react 0.0.1 → 0.0.2

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 (49) hide show
  1. package/LICENSE +18 -18
  2. package/README.md +41 -41
  3. package/package.json +58 -58
  4. package/src/chrome-separated.css +132 -132
  5. package/src/chrome-unified.css +72 -72
  6. package/src/containers/Badges.css +116 -116
  7. package/src/containers/avatar.css +70 -70
  8. package/src/containers/card.css +75 -75
  9. package/src/containers/chip.css +103 -103
  10. package/src/containers/list-row.css +132 -132
  11. package/src/containers/message-bubble.css +112 -112
  12. package/src/containers/panel.css +120 -120
  13. package/src/containers/table.css +102 -102
  14. package/src/containers/tile.css +17 -17
  15. package/src/content/callout.css +77 -77
  16. package/src/content/caret.css +30 -30
  17. package/src/content/code-block.css +159 -159
  18. package/src/content/collapsible.css +80 -80
  19. package/src/content/inline-code.css +14 -14
  20. package/src/content/model-picker.css +219 -219
  21. package/src/content/source-card.css +99 -99
  22. package/src/content/sources-disclosure.css +118 -118
  23. package/src/controls.css +453 -453
  24. package/src/fonts.css +34 -34
  25. package/src/forms/Checkbox.css +114 -114
  26. package/src/forms/RadioGroup.css +115 -115
  27. package/src/goo.css +97 -97
  28. package/src/icon-motion.css +1909 -1909
  29. package/src/layout/ResizablePanel.css +79 -79
  30. package/src/nav/sidebar.css +296 -296
  31. package/src/overlays/date-time-picker.css +238 -238
  32. package/src/overlays/menu.css +195 -195
  33. package/src/overlays/modal.css +167 -167
  34. package/src/overlays/picker-field.css +81 -81
  35. package/src/overlays/pill-filter.css +129 -129
  36. package/src/overlays/reveal.css +56 -56
  37. package/src/overlays/segmented-control.css +185 -185
  38. package/src/overlays/tabs.css +143 -143
  39. package/src/overlays/tooltip.css +126 -126
  40. package/src/scrollbar.css +184 -184
  41. package/src/size.css +179 -179
  42. package/src/status/progress-bar.css +88 -88
  43. package/src/status/spinner.css +33 -33
  44. package/src/status/statusindicator.css +65 -65
  45. package/src/status/steptimeline.css +137 -137
  46. package/src/status/thinkingcube.css +75 -75
  47. package/src/xeno-element.css +60 -60
  48. package/src/xeno-elements.css +71 -71
  49. package/src/xeno-theme.css +99 -99
@@ -1,238 +1,238 @@
1
- /*
2
- * DateTimePicker — a faithful port of the chat's "Scheduled" date/time popover. Monochrome, tokens
3
- * only, `rounded-md` (6px) everywhere. The SELECTION is a soft `--xeno-control` fill (never bright
4
- * inverted ink); adjacent-month days are greyed; the time columns are quiet bordered lists with a thin
5
- * scrollbar, and AM/PM is two flat buttons. State is CSS-first via `data-selection` on the cells.
6
- */
7
-
8
- /* ── DatePicker ──────────────────────────────────────────────────────────────────── */
9
- .xeno-datepicker {
10
- --xeno-cell: 26px;
11
- display: inline-flex;
12
- flex-direction: column;
13
- gap: 3px;
14
- width: fit-content;
15
- padding: 6px;
16
- background: var(--xeno-surface);
17
- border: 1px solid var(--xeno-border);
18
- border-radius: var(--xeno-radius-md);
19
- color: var(--xeno-text);
20
- user-select: none;
21
- }
22
-
23
- .xeno-datepicker-header {
24
- display: flex;
25
- align-items: center;
26
- justify-content: space-between;
27
- gap: 8px;
28
- padding: 2px 2px 0;
29
- }
30
-
31
- .xeno-datepicker-title {
32
- flex: 1 1 auto;
33
- min-width: 0;
34
- text-align: center;
35
- font-size: 12px;
36
- font-weight: 600;
37
- line-height: 1.2;
38
- white-space: nowrap;
39
- overflow: hidden;
40
- text-overflow: ellipsis;
41
- color: var(--xeno-text);
42
- }
43
-
44
- /* The prev/next chevrons are one glyph (chevron-right); the prev button mirrors it to point left. */
45
- .xeno-datepicker-prev .xeno-element {
46
- transform: rotate(180deg);
47
- }
48
-
49
- .xeno-datepicker-weekdays {
50
- display: grid;
51
- grid-template-columns: repeat(7, var(--xeno-cell));
52
- gap: 2px;
53
- }
54
-
55
- .xeno-datepicker-weekday {
56
- display: flex;
57
- align-items: center;
58
- justify-content: center;
59
- height: 16px;
60
- font-size: 10px;
61
- font-weight: 500;
62
- color: var(--xeno-muted);
63
- }
64
-
65
- .xeno-datepicker-grid {
66
- display: flex;
67
- flex-direction: column;
68
- gap: 2px;
69
- }
70
-
71
- .xeno-datepicker-week {
72
- display: grid;
73
- grid-template-columns: repeat(7, var(--xeno-cell));
74
- gap: 2px;
75
- }
76
-
77
- .xeno-datepicker-cell {
78
- width: var(--xeno-cell);
79
- height: var(--xeno-cell);
80
- }
81
-
82
- .xeno-datepicker-day {
83
- display: inline-flex;
84
- align-items: center;
85
- justify-content: center;
86
- padding: 0;
87
- font-family: inherit;
88
- font-size: 12px;
89
- font-weight: 500;
90
- font-variant-numeric: tabular-nums;
91
- color: var(--xeno-text);
92
- background: transparent;
93
- border: 1px solid transparent;
94
- border-radius: var(--xeno-radius-md);
95
- cursor: pointer;
96
- transition:
97
- background var(--xeno-dur) ease,
98
- color var(--xeno-dur) ease;
99
- }
100
- .xeno-datepicker-day:hover {
101
- background: var(--xeno-hover);
102
- }
103
- .xeno-datepicker-day:focus-visible {
104
- outline: none;
105
- box-shadow:
106
- 0 0 0 2px var(--xeno-surface),
107
- 0 0 0 4px var(--xeno-border);
108
- }
109
- /* Adjacent-month days: present (real, clickable) but greyed back. */
110
- .xeno-datepicker-day[data-outside] {
111
- color: var(--xeno-muted);
112
- opacity: 0.45;
113
- }
114
- /* Selection — the soft control fill the product uses, not bright inverted ink. */
115
- .xeno-datepicker-day[data-selection='on'] {
116
- color: var(--xeno-text);
117
- opacity: 1;
118
- background: var(--xeno-control);
119
- }
120
-
121
- .xeno-datepicker-footer {
122
- display: flex;
123
- align-items: center;
124
- justify-content: space-between;
125
- gap: 8px;
126
- margin-top: 2px;
127
- padding-top: 6px;
128
- border-top: 1px solid var(--xeno-border);
129
- }
130
- /* If Clear is hidden, Today still sits at the right edge. */
131
- .xeno-datepicker-footer > .xeno-datepicker-today:only-child {
132
- margin-left: auto;
133
- }
134
-
135
- /* ── TimePicker ──────────────────────────────────────────────────────────────────── */
136
- .xeno-timepicker {
137
- display: flex;
138
- gap: 4px;
139
- width: fit-content;
140
- /* Match the calendar's natural height (26px cells → ~258px) so the two fields' panels are consistent
141
- in size; the Hour/Min lists fill and scroll within it. */
142
- min-height: 258px;
143
- padding: 6px;
144
- background: var(--xeno-surface);
145
- border: 1px solid var(--xeno-border);
146
- border-radius: var(--xeno-radius-md);
147
- color: var(--xeno-text);
148
- user-select: none;
149
- }
150
-
151
- /* Equal-width columns that stretch to the panel height, so all three boxes match — and the panel can
152
- grow to match a taller sibling (e.g. the calendar) with the lists filling it, not leaving a gap. */
153
- .xeno-timepicker-col {
154
- display: flex;
155
- flex: 1 1 0;
156
- flex-direction: column;
157
- gap: 4px;
158
- min-width: 58px;
159
- min-height: 0;
160
- }
161
-
162
- .xeno-timepicker-col-head {
163
- flex: 0 0 auto;
164
- padding: 0 2px;
165
- font-size: 10px;
166
- font-weight: 500;
167
- letter-spacing: 0.06em;
168
- text-transform: uppercase;
169
- color: var(--xeno-muted);
170
- }
171
-
172
- .xeno-timepicker-list {
173
- display: flex;
174
- /* basis 0: the list FILLS the column height without its content inflating the panel — so the
175
- calendar drives the shared height and the time panel matches it exactly (scrolling within). */
176
- flex: 1 1 0;
177
- flex-direction: column;
178
- gap: 2px;
179
- min-height: 0;
180
- padding: 2px;
181
- border: 1px solid var(--xeno-border);
182
- border-radius: var(--xeno-radius-md);
183
- }
184
- /* Hour + Min scroll within the shared height; AM/PM (no data-scroll) sits flush at the top.
185
- The scrollbar itself comes from `scrollbar.css`; a column this narrow only wants a slimmer one, so
186
- it re-declares the SIZE TOKEN and nothing else. It used to re-implement the whole thing — and set
187
- `scrollbar-width` alongside its own `::-webkit-scrollbar` rules, which since Chrome 121 means Blink
188
- ignored every one of them and drew the default bar. */
189
- .xeno-timepicker-list[data-scroll] {
190
- --xeno-scroll-size: 9px;
191
- --xeno-scroll-pad: 2px;
192
- --xeno-scroll-pad-hover: 1px;
193
- --xeno-scroll-rail-pad: 4px; /* 9 − 2×4 = a 1px rail; the default 5 would leave none at all */
194
- overflow-y: auto;
195
- }
196
-
197
- .xeno-timepicker-option {
198
- display: flex;
199
- flex: 0 0 auto;
200
- align-items: center;
201
- justify-content: center;
202
- height: 26px;
203
- width: 100%;
204
- padding: 0;
205
- font-family: inherit;
206
- font-size: 12px;
207
- font-weight: 500;
208
- font-variant-numeric: tabular-nums;
209
- color: var(--xeno-muted);
210
- background: transparent;
211
- border: none;
212
- border-radius: var(--xeno-radius-sm);
213
- cursor: pointer;
214
- transition:
215
- background var(--xeno-dur) ease,
216
- color var(--xeno-dur) ease;
217
- }
218
- .xeno-timepicker-option:hover {
219
- color: var(--xeno-text);
220
- background: var(--xeno-hover);
221
- }
222
- .xeno-timepicker-option:focus-visible {
223
- outline: none;
224
- box-shadow:
225
- 0 0 0 2px var(--xeno-surface),
226
- 0 0 0 4px var(--xeno-border);
227
- }
228
- .xeno-timepicker-option[data-selection='on'] {
229
- color: var(--xeno-text);
230
- background: var(--xeno-control);
231
- }
232
-
233
- @media (prefers-reduced-motion: reduce) {
234
- .xeno-datepicker-day,
235
- .xeno-timepicker-option {
236
- transition: none;
237
- }
238
- }
1
+ /*
2
+ * DateTimePicker — a faithful port of the chat's "Scheduled" date/time popover. Monochrome, tokens
3
+ * only, `rounded-md` (6px) everywhere. The SELECTION is a soft `--xeno-control` fill (never bright
4
+ * inverted ink); adjacent-month days are greyed; the time columns are quiet bordered lists with a thin
5
+ * scrollbar, and AM/PM is two flat buttons. State is CSS-first via `data-selection` on the cells.
6
+ */
7
+
8
+ /* ── DatePicker ──────────────────────────────────────────────────────────────────── */
9
+ .xeno-datepicker {
10
+ --xeno-cell: 26px;
11
+ display: inline-flex;
12
+ flex-direction: column;
13
+ gap: 3px;
14
+ width: fit-content;
15
+ padding: 6px;
16
+ background: var(--xeno-surface);
17
+ border: 1px solid var(--xeno-border);
18
+ border-radius: var(--xeno-radius-md);
19
+ color: var(--xeno-text);
20
+ user-select: none;
21
+ }
22
+
23
+ .xeno-datepicker-header {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: space-between;
27
+ gap: 8px;
28
+ padding: 2px 2px 0;
29
+ }
30
+
31
+ .xeno-datepicker-title {
32
+ flex: 1 1 auto;
33
+ min-width: 0;
34
+ text-align: center;
35
+ font-size: 12px;
36
+ font-weight: 600;
37
+ line-height: 1.2;
38
+ white-space: nowrap;
39
+ overflow: hidden;
40
+ text-overflow: ellipsis;
41
+ color: var(--xeno-text);
42
+ }
43
+
44
+ /* The prev/next chevrons are one glyph (chevron-right); the prev button mirrors it to point left. */
45
+ .xeno-datepicker-prev .xeno-element {
46
+ transform: rotate(180deg);
47
+ }
48
+
49
+ .xeno-datepicker-weekdays {
50
+ display: grid;
51
+ grid-template-columns: repeat(7, var(--xeno-cell));
52
+ gap: 2px;
53
+ }
54
+
55
+ .xeno-datepicker-weekday {
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ height: 16px;
60
+ font-size: 10px;
61
+ font-weight: 500;
62
+ color: var(--xeno-muted);
63
+ }
64
+
65
+ .xeno-datepicker-grid {
66
+ display: flex;
67
+ flex-direction: column;
68
+ gap: 2px;
69
+ }
70
+
71
+ .xeno-datepicker-week {
72
+ display: grid;
73
+ grid-template-columns: repeat(7, var(--xeno-cell));
74
+ gap: 2px;
75
+ }
76
+
77
+ .xeno-datepicker-cell {
78
+ width: var(--xeno-cell);
79
+ height: var(--xeno-cell);
80
+ }
81
+
82
+ .xeno-datepicker-day {
83
+ display: inline-flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ padding: 0;
87
+ font-family: inherit;
88
+ font-size: 12px;
89
+ font-weight: 500;
90
+ font-variant-numeric: tabular-nums;
91
+ color: var(--xeno-text);
92
+ background: transparent;
93
+ border: 1px solid transparent;
94
+ border-radius: var(--xeno-radius-md);
95
+ cursor: pointer;
96
+ transition:
97
+ background var(--xeno-dur) ease,
98
+ color var(--xeno-dur) ease;
99
+ }
100
+ .xeno-datepicker-day:hover {
101
+ background: var(--xeno-hover);
102
+ }
103
+ .xeno-datepicker-day:focus-visible {
104
+ outline: none;
105
+ box-shadow:
106
+ 0 0 0 2px var(--xeno-surface),
107
+ 0 0 0 4px var(--xeno-border);
108
+ }
109
+ /* Adjacent-month days: present (real, clickable) but greyed back. */
110
+ .xeno-datepicker-day[data-outside] {
111
+ color: var(--xeno-muted);
112
+ opacity: 0.45;
113
+ }
114
+ /* Selection — the soft control fill the product uses, not bright inverted ink. */
115
+ .xeno-datepicker-day[data-selection='on'] {
116
+ color: var(--xeno-text);
117
+ opacity: 1;
118
+ background: var(--xeno-control);
119
+ }
120
+
121
+ .xeno-datepicker-footer {
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: space-between;
125
+ gap: 8px;
126
+ margin-top: 2px;
127
+ padding-top: 6px;
128
+ border-top: 1px solid var(--xeno-border);
129
+ }
130
+ /* If Clear is hidden, Today still sits at the right edge. */
131
+ .xeno-datepicker-footer > .xeno-datepicker-today:only-child {
132
+ margin-left: auto;
133
+ }
134
+
135
+ /* ── TimePicker ──────────────────────────────────────────────────────────────────── */
136
+ .xeno-timepicker {
137
+ display: flex;
138
+ gap: 4px;
139
+ width: fit-content;
140
+ /* Match the calendar's natural height (26px cells → ~258px) so the two fields' panels are consistent
141
+ in size; the Hour/Min lists fill and scroll within it. */
142
+ min-height: 258px;
143
+ padding: 6px;
144
+ background: var(--xeno-surface);
145
+ border: 1px solid var(--xeno-border);
146
+ border-radius: var(--xeno-radius-md);
147
+ color: var(--xeno-text);
148
+ user-select: none;
149
+ }
150
+
151
+ /* Equal-width columns that stretch to the panel height, so all three boxes match — and the panel can
152
+ grow to match a taller sibling (e.g. the calendar) with the lists filling it, not leaving a gap. */
153
+ .xeno-timepicker-col {
154
+ display: flex;
155
+ flex: 1 1 0;
156
+ flex-direction: column;
157
+ gap: 4px;
158
+ min-width: 58px;
159
+ min-height: 0;
160
+ }
161
+
162
+ .xeno-timepicker-col-head {
163
+ flex: 0 0 auto;
164
+ padding: 0 2px;
165
+ font-size: 10px;
166
+ font-weight: 500;
167
+ letter-spacing: 0.06em;
168
+ text-transform: uppercase;
169
+ color: var(--xeno-muted);
170
+ }
171
+
172
+ .xeno-timepicker-list {
173
+ display: flex;
174
+ /* basis 0: the list FILLS the column height without its content inflating the panel — so the
175
+ calendar drives the shared height and the time panel matches it exactly (scrolling within). */
176
+ flex: 1 1 0;
177
+ flex-direction: column;
178
+ gap: 2px;
179
+ min-height: 0;
180
+ padding: 2px;
181
+ border: 1px solid var(--xeno-border);
182
+ border-radius: var(--xeno-radius-md);
183
+ }
184
+ /* Hour + Min scroll within the shared height; AM/PM (no data-scroll) sits flush at the top.
185
+ The scrollbar itself comes from `scrollbar.css`; a column this narrow only wants a slimmer one, so
186
+ it re-declares the SIZE TOKEN and nothing else. It used to re-implement the whole thing — and set
187
+ `scrollbar-width` alongside its own `::-webkit-scrollbar` rules, which since Chrome 121 means Blink
188
+ ignored every one of them and drew the default bar. */
189
+ .xeno-timepicker-list[data-scroll] {
190
+ --xeno-scroll-size: 9px;
191
+ --xeno-scroll-pad: 2px;
192
+ --xeno-scroll-pad-hover: 1px;
193
+ --xeno-scroll-rail-pad: 4px; /* 9 − 2×4 = a 1px rail; the default 5 would leave none at all */
194
+ overflow-y: auto;
195
+ }
196
+
197
+ .xeno-timepicker-option {
198
+ display: flex;
199
+ flex: 0 0 auto;
200
+ align-items: center;
201
+ justify-content: center;
202
+ height: 26px;
203
+ width: 100%;
204
+ padding: 0;
205
+ font-family: inherit;
206
+ font-size: 12px;
207
+ font-weight: 500;
208
+ font-variant-numeric: tabular-nums;
209
+ color: var(--xeno-muted);
210
+ background: transparent;
211
+ border: none;
212
+ border-radius: var(--xeno-radius-sm);
213
+ cursor: pointer;
214
+ transition:
215
+ background var(--xeno-dur) ease,
216
+ color var(--xeno-dur) ease;
217
+ }
218
+ .xeno-timepicker-option:hover {
219
+ color: var(--xeno-text);
220
+ background: var(--xeno-hover);
221
+ }
222
+ .xeno-timepicker-option:focus-visible {
223
+ outline: none;
224
+ box-shadow:
225
+ 0 0 0 2px var(--xeno-surface),
226
+ 0 0 0 4px var(--xeno-border);
227
+ }
228
+ .xeno-timepicker-option[data-selection='on'] {
229
+ color: var(--xeno-text);
230
+ background: var(--xeno-control);
231
+ }
232
+
233
+ @media (prefers-reduced-motion: reduce) {
234
+ .xeno-datepicker-day,
235
+ .xeno-timepicker-option {
236
+ transition: none;
237
+ }
238
+ }