@xenosystem/elements-react 0.0.4 → 0.0.5

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 (51) hide show
  1. package/LICENSE +18 -18
  2. package/README.md +41 -41
  3. package/dist/containers/Chip.js +1 -1
  4. package/dist/containers/Panel.js +1 -1
  5. package/package.json +58 -58
  6. package/src/chrome-separated.css +132 -132
  7. package/src/chrome-unified.css +72 -72
  8. package/src/containers/Badges.css +116 -116
  9. package/src/containers/avatar.css +70 -70
  10. package/src/containers/card.css +75 -75
  11. package/src/containers/chip.css +103 -103
  12. package/src/containers/list-row.css +132 -132
  13. package/src/containers/message-bubble.css +112 -112
  14. package/src/containers/panel.css +125 -120
  15. package/src/containers/table.css +102 -102
  16. package/src/containers/tile.css +17 -17
  17. package/src/content/callout.css +77 -77
  18. package/src/content/caret.css +30 -30
  19. package/src/content/code-block.css +159 -159
  20. package/src/content/collapsible.css +80 -80
  21. package/src/content/inline-code.css +14 -14
  22. package/src/content/model-picker.css +219 -219
  23. package/src/content/source-card.css +99 -99
  24. package/src/content/sources-disclosure.css +118 -118
  25. package/src/controls.css +453 -453
  26. package/src/fonts.css +34 -34
  27. package/src/forms/Checkbox.css +114 -114
  28. package/src/forms/RadioGroup.css +115 -115
  29. package/src/goo.css +97 -97
  30. package/src/icon-motion.css +1909 -1909
  31. package/src/layout/ResizablePanel.css +79 -79
  32. package/src/nav/sidebar.css +296 -296
  33. package/src/overlays/date-time-picker.css +238 -238
  34. package/src/overlays/menu.css +195 -195
  35. package/src/overlays/modal.css +167 -167
  36. package/src/overlays/picker-field.css +81 -81
  37. package/src/overlays/pill-filter.css +129 -129
  38. package/src/overlays/reveal.css +56 -56
  39. package/src/overlays/segmented-control.css +185 -185
  40. package/src/overlays/tabs.css +143 -143
  41. package/src/overlays/tooltip.css +126 -126
  42. package/src/scrollbar.css +184 -184
  43. package/src/size.css +179 -179
  44. package/src/status/progress-bar.css +88 -88
  45. package/src/status/spinner.css +33 -33
  46. package/src/status/statusindicator.css +65 -65
  47. package/src/status/steptimeline.css +137 -137
  48. package/src/status/thinkingcube.css +75 -75
  49. package/src/xeno-element.css +60 -60
  50. package/src/xeno-elements.css +71 -71
  51. package/src/xeno-theme.css +112 -112
@@ -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
+ }