nitro_kit 2.0.0.alpha.6 → 2.0.0.beta.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +68 -1
- data/README.md +16 -2
- data/STYLE_GUIDE.md +3 -1
- data/app/assets/stylesheets/nitro_kit.css +519 -35
- data/app/components/nitro_kit/app_shell.rb +41 -5
- data/app/components/nitro_kit/avatar.rb +21 -2
- data/app/components/nitro_kit/card.rb +28 -1
- data/app/javascript/controllers/nk/app_shell_controller.js +64 -2
- data/config/locales/en.yml +1 -0
- data/docs/agent_native_spec.md +5 -4
- data/docs/component_contracts.md +93 -5
- data/docs/customization.md +2 -2
- data/docs/eject.md +86 -0
- data/docs/migration_1_to_2.md +1 -1
- data/docs/patterns/application_foundation.md +22 -0
- data/docs/patterns/inset_workspace.md +9 -1
- data/docs/rails_integration.md +1 -1
- data/lib/generators/nitro_kit/eject_generator.rb +26 -0
- data/lib/nitro_kit/ejection.rb +136 -0
- data/lib/nitro_kit/version.rb +1 -1
- data/src/stylesheets/nitro_kit/components/app_navigation.css +4 -1
- data/src/stylesheets/nitro_kit/components/app_shell.css +209 -0
- data/src/stylesheets/nitro_kit/components/avatar.css +10 -0
- data/src/stylesheets/nitro_kit/components/avatar_stack.css +9 -5
- data/src/stylesheets/nitro_kit/components/card.css +206 -15
- data/src/stylesheets/nitro_kit/components/danger_zone.css +1 -1
- data/src/stylesheets/nitro_kit/components/dropzone.css +15 -0
- data/src/stylesheets/nitro_kit/components/empty_state.css +3 -3
- data/src/stylesheets/nitro_kit/components/field_group.css +6 -2
- data/src/stylesheets/nitro_kit/components/pagination_bar.css +3 -0
- data/src/stylesheets/nitro_kit/components/progressive_image.css +2 -0
- data/src/stylesheets/nitro_kit/components/settings_layout.css +2 -0
- data/src/stylesheets/nitro_kit/components/stat_grid.css +4 -4
- data/src/stylesheets/nitro_kit/components/toolbar.css +12 -0
- data/src/stylesheets/nitro_kit/components/tooltip.css +15 -1
- data/src/stylesheets/nitro_kit/components/typeset.css +4 -0
- data/src/stylesheets/nitro_kit/reset.css +11 -1
- data/src/stylesheets/nitro_kit/tokens.css +3 -2
- metadata +5 -2
|
@@ -1,26 +1,88 @@
|
|
|
1
1
|
@layer nitro-kit.base {
|
|
2
2
|
:where([data-nk="card"]) {
|
|
3
3
|
--_nk-card-padding: calc(var(--nk-space) * 6);
|
|
4
|
+
--_nk-card-gap: calc(var(--nk-space) * 4);
|
|
5
|
+
--_nk-card-radius: var(--nk-radius-xl);
|
|
6
|
+
--_nk-card-title-size: var(--nk-text-base);
|
|
7
|
+
--_nk-card-title-leading: calc(
|
|
8
|
+
var(--_nk-card-title-size) * var(--nk-leading-tight)
|
|
9
|
+
);
|
|
4
10
|
|
|
5
11
|
display: flex;
|
|
6
12
|
flex-direction: column;
|
|
7
13
|
align-items: stretch;
|
|
8
|
-
gap:
|
|
14
|
+
gap: var(--_nk-card-gap);
|
|
9
15
|
padding: var(--_nk-card-padding);
|
|
10
16
|
color: var(--nk-color-foreground);
|
|
11
17
|
background: var(--nk-color-surface);
|
|
12
18
|
border: var(--nk-border-width) solid var(--nk-color-border);
|
|
13
|
-
border-radius: var(--
|
|
14
|
-
box-shadow: var(--nk-shadow-
|
|
19
|
+
border-radius: var(--_nk-card-radius);
|
|
20
|
+
box-shadow: var(--nk-shadow-xs);
|
|
15
21
|
}
|
|
16
22
|
|
|
17
|
-
:where(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
:where(
|
|
24
|
+
[data-nk="card"] > [data-slot="card-title"],
|
|
25
|
+
[data-nk="card"] > [data-slot="card-header"] > [data-slot="card-title"]
|
|
26
|
+
) {
|
|
27
|
+
font-size: var(--_nk-card-title-size);
|
|
28
|
+
font-weight: var(--nk-font-weight-semibold);
|
|
29
|
+
line-height: var(--_nk-card-title-leading);
|
|
21
30
|
text-wrap: balance;
|
|
22
31
|
}
|
|
23
32
|
|
|
33
|
+
:where(
|
|
34
|
+
[data-nk="card"] > [data-slot="card-description"],
|
|
35
|
+
[data-nk="card"]
|
|
36
|
+
> [data-slot="card-header"]
|
|
37
|
+
> [data-slot="card-description"]
|
|
38
|
+
) {
|
|
39
|
+
color: var(--nk-color-muted-foreground);
|
|
40
|
+
font-size: var(--nk-text-sm);
|
|
41
|
+
line-height: var(--nk-leading-normal);
|
|
42
|
+
text-wrap: pretty;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* The header pairs a title and description with trailing actions centred
|
|
46
|
+
beside them. Actions take negative block margins so a small button never
|
|
47
|
+
makes a title-only header taller than its title line. */
|
|
48
|
+
:where([data-nk="card"] > [data-slot="card-header"]) {
|
|
49
|
+
display: grid;
|
|
50
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
51
|
+
column-gap: calc(var(--nk-space) * 4);
|
|
52
|
+
align-items: start;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
:where(
|
|
56
|
+
[data-nk="card"]
|
|
57
|
+
> [data-slot="card-header"]
|
|
58
|
+
> [data-slot="card-title"]
|
|
59
|
+
+ [data-slot="card-description"]
|
|
60
|
+
) {
|
|
61
|
+
margin-block-start: calc(var(--nk-space) * 1);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
:where([data-nk="card"] > [data-slot="card-header"] > *) {
|
|
65
|
+
grid-column: 1;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
:where(
|
|
69
|
+
[data-nk="card"] > [data-slot="card-header"] > [data-slot="card-actions"]
|
|
70
|
+
) {
|
|
71
|
+
grid-column: 2;
|
|
72
|
+
grid-row: 1 / span 2;
|
|
73
|
+
align-self: center;
|
|
74
|
+
margin-block: calc(
|
|
75
|
+
(var(--_nk-card-title-leading) - var(--nk-control-height-sm)) / 2
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
:where([data-nk="card"] [data-slot="card-actions"]) {
|
|
80
|
+
display: flex;
|
|
81
|
+
align-items: center;
|
|
82
|
+
flex-wrap: wrap;
|
|
83
|
+
gap: calc(var(--nk-space) * 2);
|
|
84
|
+
}
|
|
85
|
+
|
|
24
86
|
:where([data-nk="card"] > [data-slot="card-body"]) {
|
|
25
87
|
color: var(--nk-color-muted-foreground);
|
|
26
88
|
font-size: var(--nk-text-sm);
|
|
@@ -33,10 +95,96 @@
|
|
|
33
95
|
align-items: center;
|
|
34
96
|
flex-wrap: wrap;
|
|
35
97
|
gap: calc(var(--nk-space) * 2);
|
|
98
|
+
color: var(--nk-color-muted-foreground);
|
|
99
|
+
font-size: var(--nk-text-sm);
|
|
100
|
+
line-height: var(--nk-leading-normal);
|
|
101
|
+
/* Raw text becomes an anonymous flex item. Include emergency breaks in
|
|
102
|
+
its intrinsic width so long URLs can shrink with the footer. */
|
|
103
|
+
overflow-wrap: anywhere;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
:where(
|
|
107
|
+
[data-nk="card"] > [data-slot="card-footer"] > [data-slot="card-actions"]
|
|
108
|
+
) {
|
|
109
|
+
margin-inline-start: auto;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@layer nitro-kit.variant {
|
|
114
|
+
:where([data-nk="card"][data-variant="outline"]) {
|
|
115
|
+
background: transparent;
|
|
116
|
+
box-shadow: none;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
:where([data-nk="card"][data-variant="muted"]) {
|
|
120
|
+
background: color-mix(in oklab, var(--nk-color-foreground) 4%, transparent);
|
|
121
|
+
box-shadow: none;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@layer nitro-kit.size {
|
|
126
|
+
:where([data-nk="card"][data-size="sm"]) {
|
|
127
|
+
--_nk-card-padding: calc(var(--nk-space) * 4);
|
|
128
|
+
--_nk-card-gap: calc(var(--nk-space) * 3);
|
|
129
|
+
--_nk-card-radius: var(--nk-radius-lg);
|
|
130
|
+
--_nk-card-title-size: var(--nk-text-sm);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
:where([data-nk="card"][data-size="lg"]) {
|
|
134
|
+
--_nk-card-padding: calc(var(--nk-space) * 8);
|
|
135
|
+
--_nk-card-gap: calc(var(--nk-space) * 6);
|
|
136
|
+
--_nk-card-radius: calc(var(--nk-radius-xl) + var(--nk-space));
|
|
137
|
+
--_nk-card-title-size: var(--nk-text-lg);
|
|
36
138
|
}
|
|
37
139
|
}
|
|
38
140
|
|
|
39
141
|
@layer nitro-kit.compound {
|
|
142
|
+
/* A description directly under a root-level title belongs to it. */
|
|
143
|
+
:where(
|
|
144
|
+
[data-nk="card"] > [data-slot="card-title"] + [data-slot="card-description"]
|
|
145
|
+
) {
|
|
146
|
+
margin-block-start: calc(var(--nk-space) * 1 - var(--_nk-card-gap));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* A section set apart by a divider at the card's edge is a band: the space
|
|
150
|
+
between the band and the edge matches the space between the band and its
|
|
151
|
+
divider, so a footer's actions or a header's title sit evenly. Full
|
|
152
|
+
regions keep the padding because they bleed through it. */
|
|
153
|
+
:where(
|
|
154
|
+
[data-nk="card"]:has(
|
|
155
|
+
> :first-child:not([data-slot="card-full"]):not(
|
|
156
|
+
[data-slot="card-divider"]
|
|
157
|
+
)
|
|
158
|
+
+ [data-slot="card-divider"]
|
|
159
|
+
)
|
|
160
|
+
) {
|
|
161
|
+
padding-block-start: var(--_nk-card-gap);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
:where(
|
|
165
|
+
[data-nk="card"]:has(
|
|
166
|
+
> [data-slot="card-divider"]
|
|
167
|
+
+ :last-child:not([data-slot="card-full"]):not(
|
|
168
|
+
[data-slot="card-divider"]
|
|
169
|
+
)
|
|
170
|
+
)
|
|
171
|
+
) {
|
|
172
|
+
padding-block-end: var(--_nk-card-gap);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* When a parent stretches the card, such as a grid row, the spare height
|
|
176
|
+
goes above a trailing footer and its divider, keeping actions on the
|
|
177
|
+
card's bottom edge across a row. */
|
|
178
|
+
:where(
|
|
179
|
+
[data-nk="card"]
|
|
180
|
+
> :not([data-slot="card-divider"])
|
|
181
|
+
+ [data-slot="card-footer"]:last-child,
|
|
182
|
+
[data-nk="card"]
|
|
183
|
+
> [data-slot="card-divider"]:has(+ [data-slot="card-footer"]:last-child)
|
|
184
|
+
) {
|
|
185
|
+
margin-block-start: auto;
|
|
186
|
+
}
|
|
187
|
+
|
|
40
188
|
/* Only the region that bleeds to the edge clips, never the card itself, so
|
|
41
189
|
an edge-to-edge image cannot break the card's corners while tooltips,
|
|
42
190
|
dropdowns, and other overlays inside a card stay free to escape its box. */
|
|
@@ -48,27 +196,70 @@
|
|
|
48
196
|
:where([data-nk="card"] > [data-slot="card-full"]:first-child) {
|
|
49
197
|
margin-block-start: calc(var(--_nk-card-padding) * -1);
|
|
50
198
|
border-start-start-radius: calc(
|
|
51
|
-
var(--
|
|
199
|
+
var(--_nk-card-radius) - var(--nk-border-width)
|
|
200
|
+
);
|
|
201
|
+
border-start-end-radius: calc(
|
|
202
|
+
var(--_nk-card-radius) - var(--nk-border-width)
|
|
52
203
|
);
|
|
53
|
-
border-start-end-radius: calc(var(--nk-radius-lg) - var(--nk-border-width));
|
|
54
204
|
}
|
|
55
205
|
|
|
56
206
|
:where([data-nk="card"] > [data-slot="card-full"]:last-child) {
|
|
57
207
|
margin-block-end: calc(var(--_nk-card-padding) * -1);
|
|
58
|
-
border-end-start-radius: calc(
|
|
59
|
-
|
|
208
|
+
border-end-start-radius: calc(
|
|
209
|
+
var(--_nk-card-radius) - var(--nk-border-width)
|
|
210
|
+
);
|
|
211
|
+
border-end-end-radius: calc(
|
|
212
|
+
var(--_nk-card-radius) - var(--nk-border-width)
|
|
213
|
+
);
|
|
60
214
|
}
|
|
61
215
|
|
|
62
216
|
/* Full-width media fills the card edge to edge, so the card owns the corner
|
|
63
217
|
radius and the media drops its own. */
|
|
64
218
|
:where(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
219
|
+
[data-nk="card"]
|
|
220
|
+
> [data-slot="card-full"]
|
|
221
|
+
:is(img, [data-nk="progressive-image"])
|
|
222
|
+
) {
|
|
69
223
|
border-radius: 0;
|
|
70
224
|
}
|
|
71
225
|
|
|
226
|
+
/* A table bleeding to the card's edges keeps its first and last columns
|
|
227
|
+
and its caption on the card's content gutter. */
|
|
228
|
+
:where(
|
|
229
|
+
[data-nk="card"]
|
|
230
|
+
> [data-slot="card-full"]
|
|
231
|
+
> [data-nk="table"]
|
|
232
|
+
[data-slot="table-header"]:first-child,
|
|
233
|
+
[data-nk="card"]
|
|
234
|
+
> [data-slot="card-full"]
|
|
235
|
+
> [data-nk="table"]
|
|
236
|
+
[data-slot="table-cell"]:first-child
|
|
237
|
+
) {
|
|
238
|
+
padding-inline-start: var(--_nk-card-padding);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
:where(
|
|
242
|
+
[data-nk="card"]
|
|
243
|
+
> [data-slot="card-full"]
|
|
244
|
+
> [data-nk="table"]
|
|
245
|
+
[data-slot="table-header"]:last-child,
|
|
246
|
+
[data-nk="card"]
|
|
247
|
+
> [data-slot="card-full"]
|
|
248
|
+
> [data-nk="table"]
|
|
249
|
+
[data-slot="table-cell"]:last-child
|
|
250
|
+
) {
|
|
251
|
+
padding-inline-end: var(--_nk-card-padding);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
:where(
|
|
255
|
+
[data-nk="card"]
|
|
256
|
+
> [data-slot="card-full"]
|
|
257
|
+
> [data-nk="table"]
|
|
258
|
+
[data-slot="table-caption"]
|
|
259
|
+
) {
|
|
260
|
+
padding-inline: var(--_nk-card-padding);
|
|
261
|
+
}
|
|
262
|
+
|
|
72
263
|
:where([data-nk="card"] > [data-slot="card-divider"]) {
|
|
73
264
|
margin-inline: calc(var(--_nk-card-padding) * -1);
|
|
74
265
|
border-block-start: var(--nk-border-width) solid var(--nk-color-border);
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
);
|
|
14
14
|
border: var(--nk-border-width) solid
|
|
15
15
|
color-mix(in oklab, var(--nk-color-destructive) 50%, transparent);
|
|
16
|
-
border-radius: var(--nk-radius-
|
|
16
|
+
border-radius: var(--nk-radius-xl);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
:where([data-nk="danger-zone"] > [data-slot="danger-zone-header"]) {
|
|
@@ -443,3 +443,18 @@
|
|
|
443
443
|
}
|
|
444
444
|
}
|
|
445
445
|
}
|
|
446
|
+
|
|
447
|
+
@layer nitro-kit.base {
|
|
448
|
+
/* Message children are grid items placed at start, so they size to their
|
|
449
|
+
content; cap them at the cell so one long word wraps inside the target. */
|
|
450
|
+
:where(
|
|
451
|
+
[data-nk="dropzone"]
|
|
452
|
+
[data-slot="dropzone-message"]
|
|
453
|
+
> [data-slot="dropzone-title"],
|
|
454
|
+
[data-nk="dropzone"]
|
|
455
|
+
[data-slot="dropzone-message"]
|
|
456
|
+
> [data-slot="dropzone-description"]
|
|
457
|
+
) {
|
|
458
|
+
max-inline-size: 100%;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
text-align: center;
|
|
10
10
|
background: var(--nk-color-surface);
|
|
11
11
|
border: var(--nk-border-width) dashed var(--nk-color-border);
|
|
12
|
-
border-radius: var(--nk-radius-
|
|
12
|
+
border-radius: var(--nk-radius-xl);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
:where([data-nk="empty-state"] > [data-slot="empty-state-icon"]) {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
:where([data-nk="empty-state"] > [data-slot="empty-state-title"]) {
|
|
22
|
-
max-inline-size: var(--nk-content-md);
|
|
22
|
+
max-inline-size: min(100%, var(--nk-content-md));
|
|
23
23
|
font-size: var(--nk-title-surface-size);
|
|
24
24
|
font-weight: var(--nk-title-surface-weight);
|
|
25
25
|
line-height: var(--nk-leading-tight);
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
:where([data-nk="empty-state"] > [data-slot="empty-state-description"]) {
|
|
30
|
-
max-inline-size: var(--nk-content-md);
|
|
30
|
+
max-inline-size: min(100%, var(--nk-content-md));
|
|
31
31
|
color: var(--nk-color-muted-foreground);
|
|
32
32
|
font-size: var(--nk-text-sm);
|
|
33
33
|
line-height: var(--nk-leading-relaxed);
|
|
@@ -12,8 +12,12 @@
|
|
|
12
12
|
|
|
13
13
|
/* A group keeps the same rhythm at either boundary as the fields inside it,
|
|
14
14
|
so introductory copy and trailing actions never read as attached to the
|
|
15
|
-
nearest control.
|
|
16
|
-
|
|
15
|
+
nearest control. Hidden inputs, such as the ones Rails emits at the top of
|
|
16
|
+
every form, are not visible neighbours and do not count. */
|
|
17
|
+
:where(
|
|
18
|
+
:not(input[type="hidden"]) + [data-nk="field-group"],
|
|
19
|
+
[data-nk="field-group"] + :not(input[type="hidden"])
|
|
20
|
+
) {
|
|
17
21
|
margin-block-start: calc(var(--nk-space) * 6);
|
|
18
22
|
}
|
|
19
23
|
}
|
|
@@ -28,6 +28,9 @@
|
|
|
28
28
|
@media (width < 48rem) {
|
|
29
29
|
:where([data-nk="pagination-bar"]) {
|
|
30
30
|
flex-direction: column;
|
|
31
|
+
/* A wrapping column sizes its line to the widest item, so stretch
|
|
32
|
+
could not narrow anything; one column never needs to wrap. */
|
|
33
|
+
flex-wrap: nowrap;
|
|
31
34
|
align-items: stretch;
|
|
32
35
|
}
|
|
33
36
|
|
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
display: flex;
|
|
30
30
|
gap: calc(var(--nk-space) * 2);
|
|
31
31
|
align-items: center;
|
|
32
|
+
/* The label text is an anonymous flex item with a min-content floor. */
|
|
33
|
+
overflow-wrap: anywhere;
|
|
32
34
|
min-block-size: var(--nk-control-height-sm);
|
|
33
35
|
padding: var(--nk-space) calc(var(--nk-space) * 2);
|
|
34
36
|
color: var(--nk-color-muted-foreground);
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
align-content: start;
|
|
23
23
|
gap: calc(var(--nk-space) * 2);
|
|
24
24
|
min-block-size: 100%;
|
|
25
|
-
padding: calc(var(--nk-space) *
|
|
25
|
+
padding: calc(var(--nk-space) * 6);
|
|
26
26
|
background: var(--nk-color-surface);
|
|
27
27
|
border: var(--nk-border-width) solid var(--nk-color-border);
|
|
28
|
-
border-radius: var(--nk-radius-
|
|
29
|
-
box-shadow: var(--nk-shadow-
|
|
28
|
+
border-radius: var(--nk-radius-xl);
|
|
29
|
+
box-shadow: var(--nk-shadow-xs);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
:where([data-nk="stat-grid"] [data-slot="stat-grid-label"]) {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
:where([data-nk="stat-grid"] [data-slot="stat-grid-value"]) {
|
|
39
39
|
font-size: var(--nk-text-2xl);
|
|
40
40
|
font-variant-numeric: tabular-nums;
|
|
41
|
-
font-weight: var(--nk-font-weight-
|
|
41
|
+
font-weight: var(--nk-font-weight-semibold);
|
|
42
42
|
line-height: var(--nk-leading-tight);
|
|
43
43
|
overflow-wrap: anywhere;
|
|
44
44
|
}
|
|
@@ -26,12 +26,24 @@
|
|
|
26
26
|
justify-content: flex-end;
|
|
27
27
|
margin-inline-start: auto;
|
|
28
28
|
}
|
|
29
|
+
|
|
30
|
+
/* Application content in a region is a flex item; without this a heading
|
|
31
|
+
holding one long word keeps its min-content width and widens the page. */
|
|
32
|
+
:where(
|
|
33
|
+
[data-nk="toolbar"] > [data-slot="toolbar-leading"] > *,
|
|
34
|
+
[data-nk="toolbar"] > [data-slot="toolbar-trailing"] > *
|
|
35
|
+
) {
|
|
36
|
+
min-inline-size: 0;
|
|
37
|
+
}
|
|
29
38
|
}
|
|
30
39
|
|
|
31
40
|
@layer nitro-kit.state {
|
|
32
41
|
@media (width < 48rem) {
|
|
33
42
|
:where([data-nk="toolbar"]) {
|
|
34
43
|
flex-direction: column;
|
|
44
|
+
/* A wrapping column sizes its line to the widest item, so stretch
|
|
45
|
+
could not narrow anything; one column never needs to wrap. */
|
|
46
|
+
flex-wrap: nowrap;
|
|
35
47
|
align-items: stretch;
|
|
36
48
|
}
|
|
37
49
|
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
line-height: var(--nk-leading-normal);
|
|
20
20
|
text-wrap: pretty;
|
|
21
21
|
pointer-events: auto;
|
|
22
|
+
/* Hidden tooltips leave layout entirely; a merely invisible one still
|
|
23
|
+
widens the page when it hangs past the viewport edge. */
|
|
24
|
+
display: none;
|
|
22
25
|
visibility: hidden;
|
|
23
26
|
background: var(--nk-color-elevated);
|
|
24
27
|
border: var(--nk-border-width) solid var(--nk-color-border);
|
|
@@ -27,7 +30,8 @@
|
|
|
27
30
|
opacity: 0;
|
|
28
31
|
transition:
|
|
29
32
|
opacity var(--nk-duration-fast) var(--nk-ease),
|
|
30
|
-
visibility var(--nk-duration-fast) var(--nk-ease) allow-discrete
|
|
33
|
+
visibility var(--nk-duration-fast) var(--nk-ease) allow-discrete,
|
|
34
|
+
display var(--nk-duration-fast) var(--nk-ease) allow-discrete;
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
:where([data-nk="tooltip"] > [data-slot="tooltip-content"]::before) {
|
|
@@ -111,8 +115,13 @@
|
|
|
111
115
|
[data-nk="tooltip"]:not([data-dismissed]):focus-within
|
|
112
116
|
> [data-slot="tooltip-content"]
|
|
113
117
|
) {
|
|
118
|
+
display: block;
|
|
114
119
|
visibility: visible;
|
|
115
120
|
opacity: 1;
|
|
121
|
+
|
|
122
|
+
@starting-style {
|
|
123
|
+
opacity: 0;
|
|
124
|
+
}
|
|
116
125
|
}
|
|
117
126
|
|
|
118
127
|
@media (hover: hover) {
|
|
@@ -120,8 +129,13 @@
|
|
|
120
129
|
[data-nk="tooltip"]:not([data-dismissed]):hover
|
|
121
130
|
> [data-slot="tooltip-content"]
|
|
122
131
|
) {
|
|
132
|
+
display: block;
|
|
123
133
|
visibility: visible;
|
|
124
134
|
opacity: 1;
|
|
135
|
+
|
|
136
|
+
@starting-style {
|
|
137
|
+
opacity: 0;
|
|
138
|
+
}
|
|
125
139
|
}
|
|
126
140
|
}
|
|
127
141
|
|
|
@@ -118,6 +118,9 @@
|
|
|
118
118
|
padding: calc(var(--nk-space) * 2) calc(var(--nk-space) * 3);
|
|
119
119
|
text-align: start;
|
|
120
120
|
vertical-align: top;
|
|
121
|
+
/* Prose tables have no scroll wrapper, so an unbroken email or
|
|
122
|
+
identifier must be allowed to break inside its cell. */
|
|
123
|
+
overflow-wrap: anywhere;
|
|
121
124
|
border-block-end: var(--nk-border-width) solid var(--nk-color-border);
|
|
122
125
|
}
|
|
123
126
|
|
|
@@ -259,6 +262,7 @@
|
|
|
259
262
|
padding: calc(var(--nk-space) * 2) calc(var(--nk-space) * 3);
|
|
260
263
|
text-align: start;
|
|
261
264
|
vertical-align: top;
|
|
265
|
+
overflow-wrap: anywhere;
|
|
262
266
|
border-block-end: var(--nk-border-width) solid var(--nk-color-border);
|
|
263
267
|
}
|
|
264
268
|
|
|
@@ -17,9 +17,19 @@
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/* Nitro-owned boxes never establish a min-content floor, so long slot
|
|
20
|
-
content shrinks instead of overflowing its flex or grid parent
|
|
20
|
+
content shrinks instead of overflowing its flex or grid parent, and a
|
|
21
|
+
word too long for its line breaks rather than painting past the box.
|
|
22
|
+
`break-word` leaves intrinsic sizing alone, so nothing shrinks that would
|
|
23
|
+
not have shrunk already; `nowrap` slots keep their single line. */
|
|
21
24
|
:where([data-nk], [data-nk] [data-slot]) {
|
|
22
25
|
min-inline-size: 0;
|
|
26
|
+
overflow-wrap: break-word;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* A legend sizes to its content regardless of its fieldset, so a long
|
|
30
|
+
label would widen the page; cap it and let it wrap like any label. */
|
|
31
|
+
:where([data-nk] legend) {
|
|
32
|
+
max-inline-size: 100%;
|
|
23
33
|
}
|
|
24
34
|
|
|
25
35
|
:where(html, :host) {
|
|
@@ -25,8 +25,9 @@
|
|
|
25
25
|
|
|
26
26
|
/* The title scale. Four roles cover every owned title and legend: page
|
|
27
27
|
for the one page heading, section for full-width section headers,
|
|
28
|
-
surface for
|
|
29
|
-
|
|
28
|
+
surface for dialogs, sheets, empty states, and fieldsets, and compact
|
|
29
|
+
for control-group legends and status titles. Card titles scale with
|
|
30
|
+
the card's own size instead. */
|
|
30
31
|
--nk-title-page-size: var(--nk-text-2xl);
|
|
31
32
|
--nk-title-page-weight: var(--nk-font-weight-bold);
|
|
32
33
|
--nk-title-section-size: var(--nk-text-xl);
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nitro_kit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.0.
|
|
4
|
+
version: 2.0.0.beta.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mikkel Malmberg
|
|
@@ -179,6 +179,7 @@ files:
|
|
|
179
179
|
- docs/browser_support.md
|
|
180
180
|
- docs/component_contracts.md
|
|
181
181
|
- docs/customization.md
|
|
182
|
+
- docs/eject.md
|
|
182
183
|
- docs/hotwire.md
|
|
183
184
|
- docs/initialization_prompt.md
|
|
184
185
|
- docs/migration_1_to_2.md
|
|
@@ -192,9 +193,11 @@ files:
|
|
|
192
193
|
- docs/patterns/resource_form.md
|
|
193
194
|
- docs/rails_conventions.md
|
|
194
195
|
- docs/rails_integration.md
|
|
196
|
+
- lib/generators/nitro_kit/eject_generator.rb
|
|
195
197
|
- lib/generators/nitro_kit/install_generator.rb
|
|
196
198
|
- lib/generators/nitro_kit/upgrade_smoke_tests_generator.rb
|
|
197
199
|
- lib/nitro_kit.rb
|
|
200
|
+
- lib/nitro_kit/ejection.rb
|
|
198
201
|
- lib/nitro_kit/engine.rb
|
|
199
202
|
- lib/nitro_kit/installation.rb
|
|
200
203
|
- lib/nitro_kit/migration_inventory.rb
|
|
@@ -290,7 +293,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
290
293
|
- !ruby/object:Gem::Version
|
|
291
294
|
version: '0'
|
|
292
295
|
requirements: []
|
|
293
|
-
rubygems_version: 4.0.
|
|
296
|
+
rubygems_version: 4.0.20
|
|
294
297
|
specification_version: 4
|
|
295
298
|
summary: An agent-native Phlex UI system for Rails
|
|
296
299
|
test_files: []
|