adjacent-ui 0.1.0
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.
- package/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/button/button.css +177 -0
- package/dist/button/button.d.ts +25 -0
- package/dist/button/button.d.ts.map +1 -0
- package/dist/button/button.js +11 -0
- package/dist/button/button.js.map +1 -0
- package/dist/card/card.css +126 -0
- package/dist/card/card.d.ts +18 -0
- package/dist/card/card.d.ts.map +1 -0
- package/dist/card/card.js +38 -0
- package/dist/card/card.js.map +1 -0
- package/dist/checkbox/checkbox.css +116 -0
- package/dist/checkbox/checkbox.d.ts +13 -0
- package/dist/checkbox/checkbox.d.ts.map +1 -0
- package/dist/checkbox/checkbox.js +32 -0
- package/dist/checkbox/checkbox.js.map +1 -0
- package/dist/data-table/data-table.css +238 -0
- package/dist/data-table/data-table.d.ts +47 -0
- package/dist/data-table/data-table.d.ts.map +1 -0
- package/dist/data-table/data-table.js +58 -0
- package/dist/data-table/data-table.js.map +1 -0
- package/dist/divider/divider.css +35 -0
- package/dist/divider/divider.d.ts +12 -0
- package/dist/divider/divider.d.ts.map +1 -0
- package/dist/divider/divider.js +7 -0
- package/dist/divider/divider.js.map +1 -0
- package/dist/floating-action-button/floating-action-button.css +132 -0
- package/dist/floating-action-button/floating-action-button.d.ts +15 -0
- package/dist/floating-action-button/floating-action-button.d.ts.map +1 -0
- package/dist/floating-action-button/floating-action-button.js +8 -0
- package/dist/floating-action-button/floating-action-button.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/list/list.css +181 -0
- package/dist/list/list.d.ts +56 -0
- package/dist/list/list.d.ts.map +1 -0
- package/dist/list/list.js +33 -0
- package/dist/list/list.js.map +1 -0
- package/dist/menu/menu.css +170 -0
- package/dist/menu/menu.d.ts +70 -0
- package/dist/menu/menu.d.ts.map +1 -0
- package/dist/menu/menu.js +69 -0
- package/dist/menu/menu.js.map +1 -0
- package/dist/navigation/header/header.css +182 -0
- package/dist/navigation/header/header.d.ts +20 -0
- package/dist/navigation/header/header.d.ts.map +1 -0
- package/dist/navigation/header/header.js +23 -0
- package/dist/navigation/header/header.js.map +1 -0
- package/dist/navigation/index.d.ts +5 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +5 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/link/link.d.ts +5 -0
- package/dist/navigation/link/link.d.ts.map +1 -0
- package/dist/navigation/link/link.js +6 -0
- package/dist/navigation/link/link.js.map +1 -0
- package/dist/navigation/shell/shell.css +21 -0
- package/dist/navigation/shell/shell.d.ts +22 -0
- package/dist/navigation/shell/shell.d.ts.map +1 -0
- package/dist/navigation/shell/shell.js +15 -0
- package/dist/navigation/shell/shell.js.map +1 -0
- package/dist/navigation/tabs/tabs.css +390 -0
- package/dist/navigation/tabs/tabs.d.ts +37 -0
- package/dist/navigation/tabs/tabs.d.ts.map +1 -0
- package/dist/navigation/tabs/tabs.js +74 -0
- package/dist/navigation/tabs/tabs.js.map +1 -0
- package/dist/page/page.css +15 -0
- package/dist/page/page.d.ts +32 -0
- package/dist/page/page.d.ts.map +1 -0
- package/dist/page/page.js +10 -0
- package/dist/page/page.js.map +1 -0
- package/dist/radio/radio.css +108 -0
- package/dist/radio/radio.d.ts +29 -0
- package/dist/radio/radio.d.ts.map +1 -0
- package/dist/radio/radio.js +23 -0
- package/dist/radio/radio.js.map +1 -0
- package/dist/runtime/use-display-mode.d.ts +9 -0
- package/dist/runtime/use-display-mode.d.ts.map +1 -0
- package/dist/runtime/use-display-mode.js +33 -0
- package/dist/runtime/use-display-mode.js.map +1 -0
- package/dist/runtime/use-keyboard.d.ts +8 -0
- package/dist/runtime/use-keyboard.d.ts.map +1 -0
- package/dist/runtime/use-keyboard.js +34 -0
- package/dist/runtime/use-keyboard.js.map +1 -0
- package/dist/runtime/use-viewport-tier.d.ts +10 -0
- package/dist/runtime/use-viewport-tier.d.ts.map +1 -0
- package/dist/runtime/use-viewport-tier.js +24 -0
- package/dist/runtime/use-viewport-tier.js.map +1 -0
- package/dist/snackbar/snackbar.css +95 -0
- package/dist/snackbar/snackbar.d.ts +15 -0
- package/dist/snackbar/snackbar.d.ts.map +1 -0
- package/dist/snackbar/snackbar.js +36 -0
- package/dist/snackbar/snackbar.js.map +1 -0
- package/dist/switch/switch.css +164 -0
- package/dist/switch/switch.d.ts +11 -0
- package/dist/switch/switch.d.ts.map +1 -0
- package/dist/switch/switch.js +11 -0
- package/dist/switch/switch.js.map +1 -0
- package/dist/tabs/tabs.css +165 -0
- package/dist/tabs/tabs.d.ts +25 -0
- package/dist/tabs/tabs.d.ts.map +1 -0
- package/dist/tabs/tabs.js +81 -0
- package/dist/tabs/tabs.js.map +1 -0
- package/dist/text/text.css +91 -0
- package/dist/text/text.d.ts +12 -0
- package/dist/text/text.d.ts.map +1 -0
- package/dist/text/text.js +17 -0
- package/dist/text/text.js.map +1 -0
- package/dist/text-area/text-area.css +11 -0
- package/dist/text-area/text-area.d.ts +13 -0
- package/dist/text-area/text-area.d.ts.map +1 -0
- package/dist/text-area/text-area.js +35 -0
- package/dist/text-area/text-area.js.map +1 -0
- package/dist/text-field/text-field.css +154 -0
- package/dist/text-field/text-field.d.ts +18 -0
- package/dist/text-field/text-field.d.ts.map +1 -0
- package/dist/text-field/text-field.js +32 -0
- package/dist/text-field/text-field.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
/*
|
|
3
|
+
* The navigation is fixed, so it is out of flow and the page has to reserve its
|
|
4
|
+
* own room for it. These publish how much, so nothing has to hardcode a height
|
|
5
|
+
* the framework is free to change. Scoped with :has(), so a page rendering no
|
|
6
|
+
* navigation reserves nothing.
|
|
7
|
+
*/
|
|
8
|
+
:root {
|
|
9
|
+
--adj-navigation-inset-block-end: 0px;
|
|
10
|
+
--adj-navigation-inset-inline-start: 0px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
:root:has(.adj-navigation-tabs) {
|
|
14
|
+
--adj-navigation-inset-block-end: calc(
|
|
15
|
+
var(--adj-navigation-bar-height, 4rem) + env(safe-area-inset-bottom, 0)
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@media (min-width: 48rem) {
|
|
20
|
+
/* A rail takes width from the side rather than height from the bottom. */
|
|
21
|
+
:root:has(.adj-navigation-tabs) {
|
|
22
|
+
--adj-navigation-inset-block-end: 0px;
|
|
23
|
+
--adj-navigation-inset-inline-start: calc(
|
|
24
|
+
var(--adj-navigation-rail-width, 6rem) + env(safe-area-inset-left, 0)
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:root:has(.adj-navigation-tabs[data-rail-expanded="true"]) {
|
|
29
|
+
--adj-navigation-inset-inline-start: calc(
|
|
30
|
+
clamp(
|
|
31
|
+
13.75rem,
|
|
32
|
+
var(--adj-navigation-expanded-rail-width, 14rem),
|
|
33
|
+
22.5rem
|
|
34
|
+
) +
|
|
35
|
+
env(safe-area-inset-left, 0)
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.adj-navigation-tabs {
|
|
41
|
+
position: fixed;
|
|
42
|
+
z-index: var(--adj-navigation-z-index, 40);
|
|
43
|
+
inset-inline: 0;
|
|
44
|
+
inset-block-end: 0;
|
|
45
|
+
box-sizing: border-box;
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: stretch;
|
|
48
|
+
justify-content: center;
|
|
49
|
+
min-height: var(--adj-navigation-bar-height, 4rem);
|
|
50
|
+
padding-block-end: env(safe-area-inset-bottom, 0);
|
|
51
|
+
background: var(--adj-navigation-background, var(--background, Canvas));
|
|
52
|
+
transition: width 220ms cubic-bezier(0.2, 0, 0, 1), padding 220ms cubic-bezier(0.2, 0, 0, 1);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.adj-navigation-tab {
|
|
56
|
+
box-sizing: border-box;
|
|
57
|
+
display: flex;
|
|
58
|
+
flex: 1 1 0;
|
|
59
|
+
flex-direction: column;
|
|
60
|
+
gap: 0.25rem;
|
|
61
|
+
align-items: center;
|
|
62
|
+
justify-content: center;
|
|
63
|
+
min-width: 4rem;
|
|
64
|
+
max-width: 10.5rem;
|
|
65
|
+
height: 4rem;
|
|
66
|
+
padding: 0.375rem 0.75rem;
|
|
67
|
+
color: var(--adj-navigation-color, color-mix(in srgb, currentColor 64%, transparent));
|
|
68
|
+
font: inherit;
|
|
69
|
+
text-decoration: none;
|
|
70
|
+
appearance: none;
|
|
71
|
+
cursor: pointer;
|
|
72
|
+
background: transparent;
|
|
73
|
+
border: 0;
|
|
74
|
+
border-radius: var(--radius-lg, var(--radius, 0.625rem));
|
|
75
|
+
transition: background-color 160ms ease;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.adj-navigation-tab[data-active="true"] {
|
|
79
|
+
color: var(--adj-navigation-active-color, currentColor);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.adj-navigation-tab:focus-visible {
|
|
83
|
+
outline: 2px solid currentColor;
|
|
84
|
+
outline-offset: -2px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.adj-navigation-tab__icon {
|
|
88
|
+
position: relative;
|
|
89
|
+
display: grid;
|
|
90
|
+
min-height: 1.5rem;
|
|
91
|
+
place-items: center;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.adj-navigation-tab__indicator {
|
|
95
|
+
display: grid;
|
|
96
|
+
width: 3.5rem;
|
|
97
|
+
height: 2rem;
|
|
98
|
+
flex: none;
|
|
99
|
+
background: transparent;
|
|
100
|
+
border-radius: var(--radius-lg, var(--radius, 0.625rem));
|
|
101
|
+
place-items: center;
|
|
102
|
+
transition: background-color 160ms ease;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.adj-navigation-tab[data-active="true"] .adj-navigation-tab__indicator {
|
|
106
|
+
color: var(--adj-navigation-indicator-color, currentColor);
|
|
107
|
+
background: var(--adj-navigation-indicator-background, color-mix(in srgb, currentColor 14%, transparent));
|
|
108
|
+
transition: width 220ms cubic-bezier(0.2, 0, 0, 1), height 220ms cubic-bezier(0.2, 0, 0, 1), background-color 160ms ease;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.adj-navigation-tab__badge {
|
|
112
|
+
position: absolute;
|
|
113
|
+
inset-block-start: -0.375rem;
|
|
114
|
+
inset-inline-start: calc(100% - 0.25rem);
|
|
115
|
+
display: grid;
|
|
116
|
+
min-width: 1rem;
|
|
117
|
+
height: 1rem;
|
|
118
|
+
padding-inline: 0.25rem;
|
|
119
|
+
color: var(--adj-navigation-badge-color, var(--background, Canvas));
|
|
120
|
+
font-size: 0.625rem;
|
|
121
|
+
font-weight: 700;
|
|
122
|
+
line-height: 1;
|
|
123
|
+
background: var(--adj-navigation-badge-background, var(--foreground, CanvasText));
|
|
124
|
+
border-radius: var(--radius-lg, var(--radius, 0.625rem));
|
|
125
|
+
place-items: center;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.adj-navigation-tab__label {
|
|
129
|
+
max-width: 12rem;
|
|
130
|
+
overflow: hidden;
|
|
131
|
+
font-size: 0.75rem;
|
|
132
|
+
font-weight: 500;
|
|
133
|
+
line-height: 1rem;
|
|
134
|
+
text-overflow: ellipsis;
|
|
135
|
+
white-space: nowrap;
|
|
136
|
+
transition: max-width 220ms cubic-bezier(0.2, 0, 0, 1), opacity 160ms ease;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.adj-navigation-tab__label[data-visible="false"] {
|
|
140
|
+
width: 0;
|
|
141
|
+
height: 0;
|
|
142
|
+
max-width: 0;
|
|
143
|
+
opacity: 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.adj-navigation-tabs__toggle {
|
|
147
|
+
display: none;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@media (min-width: 48rem) {
|
|
151
|
+
.adj-navigation-tabs {
|
|
152
|
+
/*
|
|
153
|
+
* The surface runs the full height, so the corner beside the header is the
|
|
154
|
+
* rail rather than a hole in it. The tabs still begin below the header's
|
|
155
|
+
* height, which is what lines the first one up with the content beside it,
|
|
156
|
+
* and leaves room for the toggle: that inset is padding now, not an offset
|
|
157
|
+
* the background starts after.
|
|
158
|
+
*/
|
|
159
|
+
inset-block-start: 0;
|
|
160
|
+
inset-block-end: 0;
|
|
161
|
+
inset-inline: 0 auto;
|
|
162
|
+
flex-direction: column;
|
|
163
|
+
gap: 0.25rem;
|
|
164
|
+
justify-content: flex-start;
|
|
165
|
+
width: calc(var(--adj-navigation-rail-width, 6rem) + env(safe-area-inset-left, 0));
|
|
166
|
+
height: auto;
|
|
167
|
+
min-height: 0;
|
|
168
|
+
/*
|
|
169
|
+
* The tabs start below the header's action row, which is the same height
|
|
170
|
+
* whichever variant it is: a large header grows its title underneath, and
|
|
171
|
+
* the rail lining up with that title rather than the row above it would put
|
|
172
|
+
* the first tab a long way down. The safe area is added here, so the rail
|
|
173
|
+
* still clears a display cutout when there is no header at all.
|
|
174
|
+
*/
|
|
175
|
+
padding-block: calc(
|
|
176
|
+
env(safe-area-inset-top, 0px) +
|
|
177
|
+
var(
|
|
178
|
+
--adj-navigation-rail-offset,
|
|
179
|
+
calc(var(--adj-header-bar-block-size, 0px) + 2.75rem)
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
env(safe-area-inset-bottom, 0);
|
|
183
|
+
padding-inline: env(safe-area-inset-left, 0) 0;
|
|
184
|
+
|
|
185
|
+
/*
|
|
186
|
+
* A rail is a sidebar, so it reads shadcn's sidebar tokens when the
|
|
187
|
+
* application defines them and falls back to the bar's own colours when it
|
|
188
|
+
* does not. The bottom bar is left alone: it is chrome along the edge of
|
|
189
|
+
* the content, not a surface beside it.
|
|
190
|
+
*/
|
|
191
|
+
background: var(
|
|
192
|
+
--adj-navigation-rail-background,
|
|
193
|
+
var(--sidebar, var(--adj-navigation-background, var(--background, Canvas)))
|
|
194
|
+
);
|
|
195
|
+
/* Tabs and indicators derive from currentColor, so this carries them all. */
|
|
196
|
+
color: var(
|
|
197
|
+
--adj-navigation-rail-color,
|
|
198
|
+
var(--sidebar-foreground, var(--foreground, CanvasText))
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.adj-navigation-tabs .adj-navigation-tab[data-active="true"] .adj-navigation-tab__indicator {
|
|
203
|
+
color: var(
|
|
204
|
+
--adj-navigation-rail-indicator-color,
|
|
205
|
+
var(
|
|
206
|
+
--sidebar-accent-foreground,
|
|
207
|
+
var(--adj-navigation-indicator-color, currentColor)
|
|
208
|
+
)
|
|
209
|
+
);
|
|
210
|
+
background: var(
|
|
211
|
+
--adj-navigation-rail-indicator-background,
|
|
212
|
+
var(
|
|
213
|
+
--sidebar-accent,
|
|
214
|
+
var(
|
|
215
|
+
--adj-navigation-indicator-background,
|
|
216
|
+
color-mix(in srgb, currentColor 14%, transparent)
|
|
217
|
+
)
|
|
218
|
+
)
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.adj-navigation-tab {
|
|
223
|
+
width: var(--adj-navigation-rail-width, 6rem);
|
|
224
|
+
min-width: var(--adj-navigation-rail-width, 6rem);
|
|
225
|
+
max-width: var(--adj-navigation-rail-width, 6rem);
|
|
226
|
+
height: 4rem;
|
|
227
|
+
flex: 0 0 4rem;
|
|
228
|
+
padding-block: 0.375rem 0.25rem;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.adj-navigation-tabs__toggle {
|
|
232
|
+
position: fixed;
|
|
233
|
+
inset-block-start: calc(env(safe-area-inset-top, 0) + 0.5rem);
|
|
234
|
+
inset-inline-start: calc(
|
|
235
|
+
env(safe-area-inset-left, 0) +
|
|
236
|
+
var(--adj-navigation-toggle-inset, 1.5rem)
|
|
237
|
+
);
|
|
238
|
+
display: grid;
|
|
239
|
+
width: 3rem;
|
|
240
|
+
height: 3rem;
|
|
241
|
+
flex: 0 0 3rem;
|
|
242
|
+
margin: 0;
|
|
243
|
+
color: currentColor;
|
|
244
|
+
background: transparent;
|
|
245
|
+
border: 0;
|
|
246
|
+
border-radius: var(--radius-lg, var(--radius, 0.625rem));
|
|
247
|
+
cursor: pointer;
|
|
248
|
+
place-items: center;
|
|
249
|
+
transition: inset-inline-start 220ms cubic-bezier(0.2, 0, 0, 1), background-color 160ms ease;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.adj-navigation-tabs__toggle:hover {
|
|
253
|
+
background: color-mix(in srgb, currentColor 8%, transparent);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.adj-navigation-tabs__toggle:focus-visible {
|
|
257
|
+
outline: 2px solid currentColor;
|
|
258
|
+
outline-offset: -2px;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.adj-navigation-tabs__toggle-inner {
|
|
262
|
+
position: relative;
|
|
263
|
+
display: block;
|
|
264
|
+
width: 1.375rem;
|
|
265
|
+
height: 0.875rem;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.adj-navigation-tabs__toggle-inner > span {
|
|
269
|
+
position: absolute;
|
|
270
|
+
inset-inline: 0;
|
|
271
|
+
inset-block-start: calc(50% - 1px);
|
|
272
|
+
display: block;
|
|
273
|
+
height: 2px;
|
|
274
|
+
background: currentColor;
|
|
275
|
+
border-radius: var(--radius-full, 9999px);
|
|
276
|
+
transition: transform 200ms cubic-bezier(0.645, 0.045, 0.355, 1), opacity 200ms ease;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.adj-navigation-tabs__toggle-inner > span:first-child {
|
|
280
|
+
transform: translateY(-0.375rem);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.adj-navigation-tabs__toggle-inner > span:last-child {
|
|
284
|
+
transform: translateY(0.375rem);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.adj-navigation-tabs[data-rail-expanded="true"] .adj-navigation-tabs__toggle-inner > span:first-child {
|
|
288
|
+
transform: rotate(45deg);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.adj-navigation-tabs[data-rail-expanded="true"] .adj-navigation-tabs__toggle-inner > span:nth-child(2) {
|
|
292
|
+
opacity: 0;
|
|
293
|
+
transform: scale(0);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.adj-navigation-tabs[data-rail-expanded="true"] .adj-navigation-tabs__toggle-inner > span:last-child {
|
|
297
|
+
transform: rotate(-45deg);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.adj-navigation-tabs[data-rail-expanded="true"] {
|
|
301
|
+
width: calc(
|
|
302
|
+
clamp(
|
|
303
|
+
13.75rem,
|
|
304
|
+
var(--adj-navigation-expanded-rail-width, 14rem),
|
|
305
|
+
22.5rem
|
|
306
|
+
) +
|
|
307
|
+
env(safe-area-inset-left, 0)
|
|
308
|
+
);
|
|
309
|
+
padding-inline-end: 0.75rem;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.adj-navigation-tabs[data-rail-expanded="true"] .adj-navigation-tabs__toggle {
|
|
313
|
+
inset-inline-start: calc(
|
|
314
|
+
env(safe-area-inset-left, 0) +
|
|
315
|
+
var(
|
|
316
|
+
--adj-navigation-expanded-toggle-inset,
|
|
317
|
+
var(--adj-navigation-expanded-content-inset, 1.5rem)
|
|
318
|
+
)
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.adj-navigation-tabs[data-rail-expanded="true"] .adj-navigation-tab {
|
|
323
|
+
align-self: flex-start;
|
|
324
|
+
flex: 0 0 3.5rem;
|
|
325
|
+
flex-direction: row;
|
|
326
|
+
gap: 0.75rem;
|
|
327
|
+
justify-content: flex-start;
|
|
328
|
+
width: calc(100% - var(--adj-navigation-expanded-content-inset, 2.25rem));
|
|
329
|
+
min-width: 0;
|
|
330
|
+
max-width: none;
|
|
331
|
+
height: 3.5rem;
|
|
332
|
+
margin-inline-start: var(--adj-navigation-expanded-content-inset, 1.5rem);
|
|
333
|
+
padding: 0.5rem 1rem 0.5rem 0.5rem;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/* Expanded, the whole row is the highlight rather than the icon's pill. */
|
|
337
|
+
.adj-navigation-tabs[data-rail-expanded="true"] .adj-navigation-tab[data-active="true"] {
|
|
338
|
+
background: var(
|
|
339
|
+
--adj-navigation-rail-indicator-background,
|
|
340
|
+
var(
|
|
341
|
+
--sidebar-accent,
|
|
342
|
+
var(
|
|
343
|
+
--adj-navigation-indicator-background,
|
|
344
|
+
color-mix(in srgb, currentColor 14%, transparent)
|
|
345
|
+
)
|
|
346
|
+
)
|
|
347
|
+
);
|
|
348
|
+
color: var(
|
|
349
|
+
--adj-navigation-rail-indicator-color,
|
|
350
|
+
var(
|
|
351
|
+
--sidebar-accent-foreground,
|
|
352
|
+
var(--adj-navigation-active-color, currentColor)
|
|
353
|
+
)
|
|
354
|
+
);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.adj-navigation-tabs[data-rail-expanded="true"] .adj-navigation-tab__indicator {
|
|
358
|
+
width: 2.5rem;
|
|
359
|
+
height: 2.5rem;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.adj-navigation-tabs[data-rail-expanded="true"] .adj-navigation-tab[data-active="true"] .adj-navigation-tab__indicator {
|
|
363
|
+
background: transparent;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.adj-navigation-tabs[data-rail-expanded="true"] .adj-navigation-tab__label {
|
|
367
|
+
width: auto;
|
|
368
|
+
height: auto;
|
|
369
|
+
max-width: 12rem;
|
|
370
|
+
font-size: 0.875rem;
|
|
371
|
+
opacity: 1;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
@media (prefers-reduced-motion: reduce) {
|
|
376
|
+
.adj-navigation-tabs,
|
|
377
|
+
.adj-navigation-tabs__toggle,
|
|
378
|
+
.adj-navigation-tab,
|
|
379
|
+
.adj-navigation-tab__indicator,
|
|
380
|
+
.adj-navigation-tab__label {
|
|
381
|
+
transition: none;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.adj-navigation-tabs[data-rail-transitioning="true"] .adj-navigation-tab[data-active="true"],
|
|
386
|
+
.adj-navigation-tabs[data-rail-transitioning="true"] .adj-navigation-tab[data-active="true"] .adj-navigation-tab__indicator {
|
|
387
|
+
background: transparent;
|
|
388
|
+
transition: none;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactElement, type ReactNode } from "react";
|
|
2
|
+
import "./tabs.css";
|
|
3
|
+
export type NavigationLabelVisibility = "auto" | "labeled" | "selected" | "unlabeled";
|
|
4
|
+
export interface NavigationTabsProps extends HTMLAttributes<HTMLElement> {
|
|
5
|
+
readonly children: ReactNode;
|
|
6
|
+
readonly defaultRailExpanded?: boolean;
|
|
7
|
+
readonly labelVisibility?: NavigationLabelVisibility;
|
|
8
|
+
readonly onRailExpandedChange?: (expanded: boolean) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Renders the toggle that widens the rail. On by default, because a rail
|
|
11
|
+
* with no way to widen it shows icons and nothing else. The toggle only
|
|
12
|
+
* exists from 768px: below that the navigation is a bottom bar with nothing
|
|
13
|
+
* to collapse.
|
|
14
|
+
*/
|
|
15
|
+
readonly railCollapsible?: boolean;
|
|
16
|
+
readonly railExpanded?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function Tabs({ children, className, defaultRailExpanded, labelVisibility, onRailExpandedChange, railCollapsible, railExpanded, ...props }: NavigationTabsProps): import("react").JSX.Element;
|
|
19
|
+
interface NavigationTabRootProps {
|
|
20
|
+
readonly "aria-current"?: "page";
|
|
21
|
+
readonly children?: ReactNode;
|
|
22
|
+
readonly className?: string;
|
|
23
|
+
readonly "data-active"?: "false" | "true";
|
|
24
|
+
}
|
|
25
|
+
export interface NavigationTabProps {
|
|
26
|
+
readonly active?: boolean;
|
|
27
|
+
readonly activeIcon?: ReactNode;
|
|
28
|
+
readonly badge?: ReactNode;
|
|
29
|
+
readonly className?: string;
|
|
30
|
+
readonly icon: ReactNode;
|
|
31
|
+
readonly label: ReactNode;
|
|
32
|
+
readonly render?: ReactElement<NavigationTabRootProps>;
|
|
33
|
+
readonly showLabel?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare function Tab({ active, activeIcon, badge, className, icon, label, render, showLabel, }: NavigationTabProps): import("react").JSX.Element;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../src/navigation/tabs/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,YAAY,CAAC;AAEpB,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AAYtF,MAAM,WAAW,mBAAoB,SAAQ,cAAc,CAAC,WAAW,CAAC;IACtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,yBAAyB,CAAC;IACrD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,mBAA2B,EAC3B,eAAwB,EACxB,oBAAoB,EACpB,eAAsB,EACtB,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,mBAAmB,+BA4ErB;AAED,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,sBAAsB,CAAC,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,GAAG,CAAC,EAClB,MAAc,EACd,UAAU,EACV,KAAK,EACL,SAAS,EACT,IAAI,EACJ,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,kBAAkB,+BAuCpB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { cloneElement, Children, createContext, useContext, useEffect, useRef, useState, } from "react";
|
|
4
|
+
import "./tabs.css";
|
|
5
|
+
const NavigationContext = createContext({
|
|
6
|
+
count: 0,
|
|
7
|
+
labelVisibility: "auto",
|
|
8
|
+
});
|
|
9
|
+
export function Tabs({ children, className, defaultRailExpanded = false, labelVisibility = "auto", onRailExpandedChange, railCollapsible = true, railExpanded, ...props }) {
|
|
10
|
+
const classes = ["adj-navigation-tabs", className].filter(Boolean).join(" ");
|
|
11
|
+
const count = Children.count(children);
|
|
12
|
+
const [internalRailExpanded, setInternalRailExpanded] = useState(defaultRailExpanded);
|
|
13
|
+
const [railTransitioning, setRailTransitioning] = useState(false);
|
|
14
|
+
const transitionFrame = useRef(undefined);
|
|
15
|
+
const transitionTimeout = useRef(undefined);
|
|
16
|
+
const expanded = railExpanded ?? internalRailExpanded;
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
return () => {
|
|
19
|
+
if (transitionFrame.current !== undefined) {
|
|
20
|
+
cancelAnimationFrame(transitionFrame.current);
|
|
21
|
+
}
|
|
22
|
+
if (transitionTimeout.current !== undefined) {
|
|
23
|
+
clearTimeout(transitionTimeout.current);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}, []);
|
|
27
|
+
function toggleRail() {
|
|
28
|
+
const nextExpanded = !expanded;
|
|
29
|
+
const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
30
|
+
const applyExpandedState = () => {
|
|
31
|
+
if (railExpanded === undefined)
|
|
32
|
+
setInternalRailExpanded(nextExpanded);
|
|
33
|
+
onRailExpandedChange?.(nextExpanded);
|
|
34
|
+
};
|
|
35
|
+
if (transitionFrame.current !== undefined) {
|
|
36
|
+
cancelAnimationFrame(transitionFrame.current);
|
|
37
|
+
}
|
|
38
|
+
if (transitionTimeout.current !== undefined) {
|
|
39
|
+
clearTimeout(transitionTimeout.current);
|
|
40
|
+
}
|
|
41
|
+
setRailTransitioning(true);
|
|
42
|
+
if (reducedMotion) {
|
|
43
|
+
applyExpandedState();
|
|
44
|
+
setRailTransitioning(false);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
transitionFrame.current = requestAnimationFrame(() => {
|
|
48
|
+
applyExpandedState();
|
|
49
|
+
transitionTimeout.current = setTimeout(() => setRailTransitioning(false), 220);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return (_jsx(NavigationContext, { value: { count, labelVisibility }, children: _jsxs("nav", { className: classes, "data-rail-expanded": expanded ? "true" : "false", "data-rail-transitioning": railTransitioning ? "true" : "false", "data-tab-count": count, ...props, children: [railCollapsible ? (_jsx("button", { "aria-expanded": expanded, "aria-label": expanded ? "Collapse navigation" : "Expand navigation", className: "adj-navigation-tabs__toggle", onClick: toggleRail, type: "button", children: _jsxs("span", { className: "adj-navigation-tabs__toggle-inner", "aria-hidden": "true", children: [_jsx("span", {}), _jsx("span", {}), _jsx("span", {})] }) })) : null, children] }) }));
|
|
53
|
+
}
|
|
54
|
+
export function Tab({ active = false, activeIcon, badge, className, icon, label, render, showLabel, }) {
|
|
55
|
+
const { count, labelVisibility } = useContext(NavigationContext);
|
|
56
|
+
const automaticLabelVisible = count <= 3 || active;
|
|
57
|
+
const labelVisible = showLabel ??
|
|
58
|
+
(labelVisibility === "labeled" ||
|
|
59
|
+
(labelVisibility === "selected" && active) ||
|
|
60
|
+
(labelVisibility === "auto" && automaticLabelVisible));
|
|
61
|
+
const classes = ["adj-navigation-tab", className].filter(Boolean).join(" ");
|
|
62
|
+
const content = (_jsxs(_Fragment, { children: [_jsxs("span", { className: "adj-navigation-tab__icon", children: [_jsx("span", { className: "adj-navigation-tab__indicator", children: active && activeIcon !== undefined ? activeIcon : icon }), badge !== undefined ? (_jsx("span", { className: "adj-navigation-tab__badge", children: badge })) : null] }), _jsx("span", { className: "adj-navigation-tab__label", "data-visible": labelVisible ? "true" : "false", children: label })] }));
|
|
63
|
+
const rootProps = {
|
|
64
|
+
"aria-current": active ? "page" : undefined,
|
|
65
|
+
children: content,
|
|
66
|
+
className: classes,
|
|
67
|
+
"data-active": active ? "true" : "false",
|
|
68
|
+
};
|
|
69
|
+
if (render) {
|
|
70
|
+
return cloneElement(render, rootProps);
|
|
71
|
+
}
|
|
72
|
+
return _jsx("button", { type: "button", ...rootProps });
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/navigation/tabs/tabs.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.adj-page {
|
|
3
|
+
container-type: inline-size;
|
|
4
|
+
min-width: 0;
|
|
5
|
+
min-height: 100%;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.adj-page-content {
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
width: 100%;
|
|
11
|
+
min-width: 0;
|
|
12
|
+
max-width: var(--adj-page-content-width, none);
|
|
13
|
+
margin-inline: auto;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { type HeaderAlign } from "../navigation/header/header.js";
|
|
3
|
+
import "./page.css";
|
|
4
|
+
interface PageHeaderOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Where a compact title sits. Left alone it is centred on a phone and
|
|
7
|
+
* aligned start on a larger display.
|
|
8
|
+
*/
|
|
9
|
+
readonly headerAlign?: HeaderAlign;
|
|
10
|
+
readonly headerClassName?: string;
|
|
11
|
+
readonly headerLeft?: ReactNode;
|
|
12
|
+
readonly headerRight?: ReactNode;
|
|
13
|
+
readonly headerShown?: boolean;
|
|
14
|
+
readonly headerSticky?: boolean;
|
|
15
|
+
readonly title?: ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export type PageOptions = PageHeaderOptions & ({
|
|
18
|
+
readonly headerVariant?: "compact";
|
|
19
|
+
readonly subtitle?: never;
|
|
20
|
+
} | {
|
|
21
|
+
readonly headerVariant: "large";
|
|
22
|
+
readonly subtitle?: ReactNode;
|
|
23
|
+
});
|
|
24
|
+
export interface PageProps {
|
|
25
|
+
readonly children: ReactNode;
|
|
26
|
+
readonly className?: string;
|
|
27
|
+
readonly contentClassName?: string;
|
|
28
|
+
readonly options?: PageOptions;
|
|
29
|
+
}
|
|
30
|
+
export declare function Page({ children, className, contentClassName, options, }: PageProps): import("react").JSX.Element;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/page/page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,gCAAgC,CAAC;AAExC,OAAO,YAAY,CAAC;AAEpB,UAAU,iBAAiB;IACzB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GACzC,CACI;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CACrE,CAAC;AAEJ,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;CAChC;AAED,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,OAAY,GACb,EAAE,SAAS,+BA6BX"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Header, HeaderLeft, HeaderRight, HeaderSubtitle, HeaderTitle, } from "../navigation/header/header.js";
|
|
3
|
+
import "./page.css";
|
|
4
|
+
export function Page({ children, className, contentClassName, options = {}, }) {
|
|
5
|
+
const { headerClassName, headerAlign, headerLeft, headerRight, headerShown = true, headerSticky = false, headerVariant = "compact", subtitle, title, } = options;
|
|
6
|
+
const pageClassName = ["adj-page", className].filter(Boolean).join(" ");
|
|
7
|
+
const contentClasses = ["adj-page-content", contentClassName].filter(Boolean).join(" ");
|
|
8
|
+
return (_jsxs("section", { className: pageClassName, children: [headerShown ? (_jsxs(Header, { align: headerAlign, className: headerClassName, sticky: headerSticky, variant: headerVariant, children: [_jsx(HeaderLeft, { children: headerLeft }), _jsx(HeaderTitle, { children: title }), subtitle ? _jsx(HeaderSubtitle, { children: subtitle }) : null, _jsx(HeaderRight, { children: headerRight })] })) : null, _jsx("main", { className: contentClasses, children: children })] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/page/page.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,MAAM,EACN,UAAU,EACV,WAAW,EACX,cAAc,EACd,WAAW,GAEZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,YAAY,CAAC;AA6BpB,MAAM,UAAU,IAAI,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,OAAO,GAAG,EAAE,GACF;IACV,MAAM,EACJ,eAAe,EACf,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,GAAG,IAAI,EAClB,YAAY,GAAG,KAAK,EACpB,aAAa,GAAG,SAAS,EACzB,QAAQ,EACR,KAAK,GACN,GAAG,OAAO,CAAC;IACZ,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAExF,OAAO,CACL,mBAAS,SAAS,EAAE,aAAa,aAC9B,WAAW,CAAC,CAAC,CAAC,CACb,MAAC,MAAM,IAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,aAClG,KAAC,UAAU,cAAE,UAAU,GAAc,EACrC,KAAC,WAAW,cAAE,KAAK,GAAe,EACjC,QAAQ,CAAC,CAAC,CAAC,KAAC,cAAc,cAAE,QAAQ,GAAkB,CAAC,CAAC,CAAC,IAAI,EAC9D,KAAC,WAAW,cAAE,WAAW,GAAe,IACjC,CACV,CAAC,CAAC,CAAC,IAAI,EAER,eAAM,SAAS,EAAE,cAAc,YAAG,QAAQ,GAAQ,IAC1C,CACX,CAAC;AACJ,CAAC"}
|