@xenosystem/elements-react 0.0.3 → 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 -99
@@ -1,219 +1,219 @@
1
- /*
2
- * <ModelPicker> — a trigger + an absolute panel (tray rows / rail chips). Monochrome shell: hairline
3
- * borders + one soft (uncoloured) shadow for the panel depth. Only the theme custom properties from
4
- * xeno-theme.css are used; no literal colours, no hues. Motion is transform/opacity only, gated behind
5
- * prefers-reduced-motion.
6
- */
7
-
8
- .xeno-model-picker {
9
- position: relative;
10
- display: inline-flex;
11
- }
12
-
13
- /* ── Trigger ─────────────────────────────────────────────────────────────────────── */
14
- /* Extends .xeno-btn (controls.css) — here we just lay out glyph · label · chevron. */
15
- .xeno-mp-trigger {
16
- justify-content: flex-start;
17
- min-width: 180px;
18
- max-width: 320px;
19
- }
20
- .xeno-mp-label {
21
- flex: 1;
22
- min-width: 0;
23
- overflow: hidden;
24
- text-align: left;
25
- text-overflow: ellipsis;
26
- white-space: nowrap;
27
- }
28
- .xeno-mp-placeholder {
29
- color: var(--xeno-muted);
30
- font-weight: 400;
31
- }
32
- .xeno-mp-chevron {
33
- display: inline-flex;
34
- color: var(--xeno-muted);
35
- transition: transform var(--xeno-dur) var(--xeno-ease);
36
- }
37
- .xeno-model-picker[data-open='true'] .xeno-mp-chevron {
38
- transform: rotate(180deg);
39
- }
40
-
41
- /* ── Panel (shared) ──────────────────────────────────────────────────────────────── */
42
- .xeno-mp-panel {
43
- position: absolute;
44
- top: calc(100% + 6px);
45
- left: 0;
46
- z-index: 40;
47
- background: var(--xeno-elevated);
48
- border: 1px solid var(--xeno-border);
49
- border-radius: var(--xeno-radius-md);
50
- box-shadow: 0 8px 24px -6px rgba(0, 0, 0, 0.35);
51
- outline: none;
52
- animation: xeno-mp-in var(--xeno-dur) var(--xeno-ease);
53
- }
54
- .xeno-mp-panel:focus-visible {
55
- border-color: var(--xeno-muted);
56
- }
57
-
58
- @keyframes xeno-mp-in {
59
- from {
60
- opacity: 0;
61
- transform: translateY(-4px);
62
- }
63
- to {
64
- opacity: 1;
65
- transform: translateY(0);
66
- }
67
- }
68
-
69
- /* ── Tray layout ─────────────────────────────────────────────────────────────────── */
70
- .xeno-mp-panel--tray {
71
- min-width: max(100%, 220px);
72
- max-height: 320px;
73
- padding: 4px;
74
- overflow-y: auto;
75
- }
76
- .xeno-mp-group + .xeno-mp-group {
77
- margin-top: 4px;
78
- padding-top: 4px;
79
- border-top: 1px solid var(--xeno-border);
80
- }
81
- .xeno-mp-group-label {
82
- padding: 6px 8px 4px;
83
- color: var(--xeno-muted);
84
- font-size: 11px;
85
- font-weight: 600;
86
- letter-spacing: 0.06em;
87
- text-transform: uppercase;
88
- }
89
- .xeno-mp-option {
90
- display: flex;
91
- align-items: center;
92
- gap: 8px;
93
- padding: 7px 8px;
94
- border-radius: var(--xeno-radius-sm);
95
- color: var(--xeno-text);
96
- font-size: 14px;
97
- cursor: pointer;
98
- transition: background var(--xeno-dur) ease;
99
- }
100
- .xeno-mp-option[data-active='true'] {
101
- background: var(--xeno-hover);
102
- }
103
- .xeno-mp-option[data-selection='on'] {
104
- background: var(--xeno-control);
105
- }
106
- .xeno-mp-check {
107
- display: inline-flex;
108
- flex: none;
109
- width: 16px;
110
- color: var(--xeno-text);
111
- }
112
- .xeno-mp-option-name {
113
- flex: 1;
114
- min-width: 0;
115
- overflow: hidden;
116
- text-overflow: ellipsis;
117
- white-space: nowrap;
118
- }
119
-
120
- /* ── Rail layout ─────────────────────────────────────────────────────────────────── */
121
- .xeno-mp-panel--rail {
122
- min-width: max(100%, 240px);
123
- max-width: 420px;
124
- padding: 8px;
125
- }
126
- /* Viewport clips the scroller and carries the left/right fade edges. */
127
- .xeno-mp-rail-viewport {
128
- position: relative;
129
- }
130
- .xeno-mp-rail-viewport::before,
131
- .xeno-mp-rail-viewport::after {
132
- content: '';
133
- position: absolute;
134
- top: 0;
135
- bottom: 0;
136
- width: 20px;
137
- pointer-events: none;
138
- z-index: 1;
139
- }
140
- .xeno-mp-rail-viewport::before {
141
- left: 0;
142
- background: linear-gradient(to right, var(--xeno-elevated), transparent);
143
- }
144
- .xeno-mp-rail-viewport::after {
145
- right: 0;
146
- background: linear-gradient(to left, var(--xeno-elevated), transparent);
147
- }
148
- .xeno-mp-rail {
149
- display: flex;
150
- gap: 6px;
151
- overflow-x: auto;
152
- padding: 2px 4px;
153
- scrollbar-width: none;
154
- }
155
- .xeno-mp-rail::-webkit-scrollbar {
156
- display: none;
157
- }
158
- .xeno-mp-chip {
159
- display: inline-flex;
160
- flex-direction: column;
161
- align-items: flex-start;
162
- gap: 1px;
163
- flex: none;
164
- position: relative;
165
- padding: 6px 12px;
166
- border: 1px solid var(--xeno-border);
167
- border-radius: var(--xeno-radius-control);
168
- color: var(--xeno-text);
169
- cursor: pointer;
170
- white-space: nowrap;
171
- transition:
172
- background var(--xeno-dur) ease,
173
- border-color var(--xeno-dur) ease;
174
- }
175
- .xeno-mp-chip[data-active='true'] {
176
- background: var(--xeno-hover);
177
- border-color: var(--xeno-muted);
178
- }
179
- .xeno-mp-chip[data-selection='on'] {
180
- background: var(--xeno-control);
181
- border-color: var(--xeno-muted);
182
- padding-right: 26px;
183
- }
184
- .xeno-mp-chip-provider {
185
- color: var(--xeno-muted);
186
- font-size: 10px;
187
- font-weight: 600;
188
- letter-spacing: 0.04em;
189
- text-transform: uppercase;
190
- }
191
- .xeno-mp-chip-label {
192
- font-size: 13px;
193
- font-weight: 500;
194
- line-height: 1.2;
195
- }
196
- .xeno-mp-chip-check {
197
- display: inline-flex;
198
- position: absolute;
199
- top: 6px;
200
- right: 8px;
201
- color: var(--xeno-text);
202
- }
203
-
204
- /* ── Disabled ────────────────────────────────────────────────────────────────────── */
205
- .xeno-model-picker[data-availability='disabled'] {
206
- opacity: 0.4;
207
- pointer-events: none;
208
- }
209
-
210
- @media (prefers-reduced-motion: reduce) {
211
- .xeno-mp-chevron,
212
- .xeno-mp-option,
213
- .xeno-mp-chip {
214
- transition: none;
215
- }
216
- .xeno-mp-panel {
217
- animation: none;
218
- }
219
- }
1
+ /*
2
+ * <ModelPicker> — a trigger + an absolute panel (tray rows / rail chips). Monochrome shell: hairline
3
+ * borders + one soft (uncoloured) shadow for the panel depth. Only the theme custom properties from
4
+ * xeno-theme.css are used; no literal colours, no hues. Motion is transform/opacity only, gated behind
5
+ * prefers-reduced-motion.
6
+ */
7
+
8
+ .xeno-model-picker {
9
+ position: relative;
10
+ display: inline-flex;
11
+ }
12
+
13
+ /* ── Trigger ─────────────────────────────────────────────────────────────────────── */
14
+ /* Extends .xeno-btn (controls.css) — here we just lay out glyph · label · chevron. */
15
+ .xeno-mp-trigger {
16
+ justify-content: flex-start;
17
+ min-width: 180px;
18
+ max-width: 320px;
19
+ }
20
+ .xeno-mp-label {
21
+ flex: 1;
22
+ min-width: 0;
23
+ overflow: hidden;
24
+ text-align: left;
25
+ text-overflow: ellipsis;
26
+ white-space: nowrap;
27
+ }
28
+ .xeno-mp-placeholder {
29
+ color: var(--xeno-muted);
30
+ font-weight: 400;
31
+ }
32
+ .xeno-mp-chevron {
33
+ display: inline-flex;
34
+ color: var(--xeno-muted);
35
+ transition: transform var(--xeno-dur) var(--xeno-ease);
36
+ }
37
+ .xeno-model-picker[data-open='true'] .xeno-mp-chevron {
38
+ transform: rotate(180deg);
39
+ }
40
+
41
+ /* ── Panel (shared) ──────────────────────────────────────────────────────────────── */
42
+ .xeno-mp-panel {
43
+ position: absolute;
44
+ top: calc(100% + 6px);
45
+ left: 0;
46
+ z-index: 40;
47
+ background: var(--xeno-elevated);
48
+ border: 1px solid var(--xeno-border);
49
+ border-radius: var(--xeno-radius-md);
50
+ box-shadow: 0 8px 24px -6px rgba(0, 0, 0, 0.35);
51
+ outline: none;
52
+ animation: xeno-mp-in var(--xeno-dur) var(--xeno-ease);
53
+ }
54
+ .xeno-mp-panel:focus-visible {
55
+ border-color: var(--xeno-muted);
56
+ }
57
+
58
+ @keyframes xeno-mp-in {
59
+ from {
60
+ opacity: 0;
61
+ transform: translateY(-4px);
62
+ }
63
+ to {
64
+ opacity: 1;
65
+ transform: translateY(0);
66
+ }
67
+ }
68
+
69
+ /* ── Tray layout ─────────────────────────────────────────────────────────────────── */
70
+ .xeno-mp-panel--tray {
71
+ min-width: max(100%, 220px);
72
+ max-height: 320px;
73
+ padding: 4px;
74
+ overflow-y: auto;
75
+ }
76
+ .xeno-mp-group + .xeno-mp-group {
77
+ margin-top: 4px;
78
+ padding-top: 4px;
79
+ border-top: 1px solid var(--xeno-border);
80
+ }
81
+ .xeno-mp-group-label {
82
+ padding: 6px 8px 4px;
83
+ color: var(--xeno-muted);
84
+ font-size: 11px;
85
+ font-weight: 600;
86
+ letter-spacing: 0.06em;
87
+ text-transform: uppercase;
88
+ }
89
+ .xeno-mp-option {
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 8px;
93
+ padding: 7px 8px;
94
+ border-radius: var(--xeno-radius-sm);
95
+ color: var(--xeno-text);
96
+ font-size: 14px;
97
+ cursor: pointer;
98
+ transition: background var(--xeno-dur) ease;
99
+ }
100
+ .xeno-mp-option[data-active='true'] {
101
+ background: var(--xeno-hover);
102
+ }
103
+ .xeno-mp-option[data-selection='on'] {
104
+ background: var(--xeno-control);
105
+ }
106
+ .xeno-mp-check {
107
+ display: inline-flex;
108
+ flex: none;
109
+ width: 16px;
110
+ color: var(--xeno-text);
111
+ }
112
+ .xeno-mp-option-name {
113
+ flex: 1;
114
+ min-width: 0;
115
+ overflow: hidden;
116
+ text-overflow: ellipsis;
117
+ white-space: nowrap;
118
+ }
119
+
120
+ /* ── Rail layout ─────────────────────────────────────────────────────────────────── */
121
+ .xeno-mp-panel--rail {
122
+ min-width: max(100%, 240px);
123
+ max-width: 420px;
124
+ padding: 8px;
125
+ }
126
+ /* Viewport clips the scroller and carries the left/right fade edges. */
127
+ .xeno-mp-rail-viewport {
128
+ position: relative;
129
+ }
130
+ .xeno-mp-rail-viewport::before,
131
+ .xeno-mp-rail-viewport::after {
132
+ content: '';
133
+ position: absolute;
134
+ top: 0;
135
+ bottom: 0;
136
+ width: 20px;
137
+ pointer-events: none;
138
+ z-index: 1;
139
+ }
140
+ .xeno-mp-rail-viewport::before {
141
+ left: 0;
142
+ background: linear-gradient(to right, var(--xeno-elevated), transparent);
143
+ }
144
+ .xeno-mp-rail-viewport::after {
145
+ right: 0;
146
+ background: linear-gradient(to left, var(--xeno-elevated), transparent);
147
+ }
148
+ .xeno-mp-rail {
149
+ display: flex;
150
+ gap: 6px;
151
+ overflow-x: auto;
152
+ padding: 2px 4px;
153
+ scrollbar-width: none;
154
+ }
155
+ .xeno-mp-rail::-webkit-scrollbar {
156
+ display: none;
157
+ }
158
+ .xeno-mp-chip {
159
+ display: inline-flex;
160
+ flex-direction: column;
161
+ align-items: flex-start;
162
+ gap: 1px;
163
+ flex: none;
164
+ position: relative;
165
+ padding: 6px 12px;
166
+ border: 1px solid var(--xeno-border);
167
+ border-radius: var(--xeno-radius-control);
168
+ color: var(--xeno-text);
169
+ cursor: pointer;
170
+ white-space: nowrap;
171
+ transition:
172
+ background var(--xeno-dur) ease,
173
+ border-color var(--xeno-dur) ease;
174
+ }
175
+ .xeno-mp-chip[data-active='true'] {
176
+ background: var(--xeno-hover);
177
+ border-color: var(--xeno-muted);
178
+ }
179
+ .xeno-mp-chip[data-selection='on'] {
180
+ background: var(--xeno-control);
181
+ border-color: var(--xeno-muted);
182
+ padding-right: 26px;
183
+ }
184
+ .xeno-mp-chip-provider {
185
+ color: var(--xeno-muted);
186
+ font-size: 10px;
187
+ font-weight: 600;
188
+ letter-spacing: 0.04em;
189
+ text-transform: uppercase;
190
+ }
191
+ .xeno-mp-chip-label {
192
+ font-size: 13px;
193
+ font-weight: 500;
194
+ line-height: 1.2;
195
+ }
196
+ .xeno-mp-chip-check {
197
+ display: inline-flex;
198
+ position: absolute;
199
+ top: 6px;
200
+ right: 8px;
201
+ color: var(--xeno-text);
202
+ }
203
+
204
+ /* ── Disabled ────────────────────────────────────────────────────────────────────── */
205
+ .xeno-model-picker[data-availability='disabled'] {
206
+ opacity: 0.4;
207
+ pointer-events: none;
208
+ }
209
+
210
+ @media (prefers-reduced-motion: reduce) {
211
+ .xeno-mp-chevron,
212
+ .xeno-mp-option,
213
+ .xeno-mp-chip {
214
+ transition: none;
215
+ }
216
+ .xeno-mp-panel {
217
+ animation: none;
218
+ }
219
+ }
@@ -1,99 +1,99 @@
1
- /*
2
- * <SourceCard> — a link-embed row. Monochrome shell: card radius, hairline border, hover lifts the
3
- * border to --xeno-muted. Only theme tokens; motion is transform/opacity behind reduced-motion.
4
- */
5
- .xeno-source-card {
6
- display: flex;
7
- align-items: flex-start;
8
- gap: 12px;
9
- padding: 12px;
10
- background: var(--xeno-surface);
11
- border: 1px solid var(--xeno-border);
12
- border-radius: var(--xeno-radius-card);
13
- color: var(--xeno-text);
14
- text-decoration: none;
15
- transition:
16
- border-color var(--xeno-dur) var(--xeno-ease),
17
- background var(--xeno-dur) var(--xeno-ease);
18
- }
19
-
20
- a.xeno-source-card {
21
- cursor: pointer;
22
- }
23
- a.xeno-source-card:hover {
24
- border-color: var(--xeno-muted);
25
- background: var(--xeno-hover);
26
- }
27
- a.xeno-source-card:focus-visible {
28
- outline: none;
29
- box-shadow:
30
- 0 0 0 2px var(--xeno-canvas),
31
- 0 0 0 4px var(--xeno-border);
32
- }
33
-
34
- /* Leading tile — square rounded (radius-md), favicon or domain-initial placeholder. */
35
- .xeno-source-card-tile {
36
- flex: none;
37
- display: inline-flex;
38
- align-items: center;
39
- justify-content: center;
40
- width: 36px;
41
- height: 36px;
42
- overflow: hidden;
43
- background: var(--xeno-control);
44
- border: 1px solid var(--xeno-border);
45
- border-radius: var(--xeno-radius-md);
46
- color: var(--xeno-muted);
47
- font-size: 15px;
48
- font-weight: 600;
49
- line-height: 1;
50
- user-select: none;
51
- }
52
- .xeno-source-card-favicon {
53
- display: block;
54
- width: 100%;
55
- height: 100%;
56
- object-fit: cover;
57
- }
58
-
59
- .xeno-source-card-body {
60
- display: flex;
61
- flex: 1;
62
- min-width: 0;
63
- flex-direction: column;
64
- gap: 2px;
65
- }
66
- .xeno-source-card-title {
67
- overflow: hidden;
68
- color: var(--xeno-text);
69
- font-size: 14px;
70
- font-weight: 500;
71
- line-height: 1.35;
72
- white-space: nowrap;
73
- text-overflow: ellipsis;
74
- }
75
- .xeno-source-card-domain {
76
- overflow: hidden;
77
- color: var(--xeno-muted);
78
- font-size: 12px;
79
- line-height: 1.35;
80
- white-space: nowrap;
81
- text-overflow: ellipsis;
82
- }
83
- .xeno-source-card-snippet {
84
- display: -webkit-box;
85
- margin-top: 2px;
86
- overflow: hidden;
87
- color: var(--xeno-muted);
88
- font-size: 13px;
89
- line-height: 1.45;
90
- -webkit-line-clamp: 2;
91
- line-clamp: 2;
92
- -webkit-box-orient: vertical;
93
- }
94
-
95
- @media (prefers-reduced-motion: reduce) {
96
- .xeno-source-card {
97
- transition: none;
98
- }
99
- }
1
+ /*
2
+ * <SourceCard> — a link-embed row. Monochrome shell: card radius, hairline border, hover lifts the
3
+ * border to --xeno-muted. Only theme tokens; motion is transform/opacity behind reduced-motion.
4
+ */
5
+ .xeno-source-card {
6
+ display: flex;
7
+ align-items: flex-start;
8
+ gap: 12px;
9
+ padding: 12px;
10
+ background: var(--xeno-surface);
11
+ border: 1px solid var(--xeno-border);
12
+ border-radius: var(--xeno-radius-card);
13
+ color: var(--xeno-text);
14
+ text-decoration: none;
15
+ transition:
16
+ border-color var(--xeno-dur) var(--xeno-ease),
17
+ background var(--xeno-dur) var(--xeno-ease);
18
+ }
19
+
20
+ a.xeno-source-card {
21
+ cursor: pointer;
22
+ }
23
+ a.xeno-source-card:hover {
24
+ border-color: var(--xeno-muted);
25
+ background: var(--xeno-hover);
26
+ }
27
+ a.xeno-source-card:focus-visible {
28
+ outline: none;
29
+ box-shadow:
30
+ 0 0 0 2px var(--xeno-canvas),
31
+ 0 0 0 4px var(--xeno-border);
32
+ }
33
+
34
+ /* Leading tile — square rounded (radius-md), favicon or domain-initial placeholder. */
35
+ .xeno-source-card-tile {
36
+ flex: none;
37
+ display: inline-flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ width: 36px;
41
+ height: 36px;
42
+ overflow: hidden;
43
+ background: var(--xeno-control);
44
+ border: 1px solid var(--xeno-border);
45
+ border-radius: var(--xeno-radius-md);
46
+ color: var(--xeno-muted);
47
+ font-size: 15px;
48
+ font-weight: 600;
49
+ line-height: 1;
50
+ user-select: none;
51
+ }
52
+ .xeno-source-card-favicon {
53
+ display: block;
54
+ width: 100%;
55
+ height: 100%;
56
+ object-fit: cover;
57
+ }
58
+
59
+ .xeno-source-card-body {
60
+ display: flex;
61
+ flex: 1;
62
+ min-width: 0;
63
+ flex-direction: column;
64
+ gap: 2px;
65
+ }
66
+ .xeno-source-card-title {
67
+ overflow: hidden;
68
+ color: var(--xeno-text);
69
+ font-size: 14px;
70
+ font-weight: 500;
71
+ line-height: 1.35;
72
+ white-space: nowrap;
73
+ text-overflow: ellipsis;
74
+ }
75
+ .xeno-source-card-domain {
76
+ overflow: hidden;
77
+ color: var(--xeno-muted);
78
+ font-size: 12px;
79
+ line-height: 1.35;
80
+ white-space: nowrap;
81
+ text-overflow: ellipsis;
82
+ }
83
+ .xeno-source-card-snippet {
84
+ display: -webkit-box;
85
+ margin-top: 2px;
86
+ overflow: hidden;
87
+ color: var(--xeno-muted);
88
+ font-size: 13px;
89
+ line-height: 1.45;
90
+ -webkit-line-clamp: 2;
91
+ line-clamp: 2;
92
+ -webkit-box-orient: vertical;
93
+ }
94
+
95
+ @media (prefers-reduced-motion: reduce) {
96
+ .xeno-source-card {
97
+ transition: none;
98
+ }
99
+ }