@xenide-io/the-old-ui-theme 0.6.2 → 0.6.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.
- package/dist/suite.d.mts +7 -4
- package/dist/suite.d.ts +7 -4
- package/dist/suite.js +377 -180
- package/dist/suite.mjs +389 -181
- package/package.json +1 -1
- package/src/styles/suite-skin.css +136 -32
- package/src/suite/components/ai-panel.tsx +306 -137
- package/src/suite/components/suite-layout.test.tsx +5 -0
- package/src/suite/components/suite-layout.tsx +22 -12
- package/src/suite/components/suite-sidebar.tsx +3 -1
- package/src/suite/components/suite-user-menu.tsx +43 -7
- package/src/suite/components/today-page-frame.tsx +4 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xenide-io/the-old-ui-theme",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.5",
|
|
4
4
|
"description": "Props-driven React components and theme tokens inspired by classic interface design \u2014 optimized for Next.js apps and internal tools.",
|
|
5
5
|
"author": "Xenide",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,13 +27,14 @@ html {
|
|
|
27
27
|
--suite-page-pad-x: var(--suite-space-4);
|
|
28
28
|
--suite-page-pad-x-sm: var(--suite-space-5);
|
|
29
29
|
--suite-page-pad-x-lg: var(--suite-space-6);
|
|
30
|
-
--suite-page-pad-y-top: var(--suite-space-
|
|
31
|
-
--suite-page-pad-y-top-sm: var(--suite-space-
|
|
30
|
+
--suite-page-pad-y-top: var(--suite-space-4);
|
|
31
|
+
--suite-page-pad-y-top-sm: var(--suite-space-5);
|
|
32
32
|
--suite-page-pad-y-bottom: 20px;
|
|
33
33
|
--suite-page-pad-y-bottom-sm: var(--suite-space-5);
|
|
34
34
|
/* Today needs a calmer opening rhythm than dense workspace screens. */
|
|
35
35
|
--suite-today-pad-y-top: var(--suite-space-4);
|
|
36
36
|
--suite-today-pad-y-top-sm: var(--suite-space-5);
|
|
37
|
+
--suite-scroll-fade: var(--suite-space-5);
|
|
37
38
|
--suite-section-gap: var(--suite-space-5);
|
|
38
39
|
--suite-header-gap: var(--suite-space-4);
|
|
39
40
|
--suite-content-max: 96rem; /* used only by content/narrow caps, not default pages */
|
|
@@ -132,9 +133,25 @@ body {
|
|
|
132
133
|
}
|
|
133
134
|
}
|
|
134
135
|
|
|
135
|
-
/* Today visual treatment — shared geometry, colours supplied by each app
|
|
136
|
+
/* Today visual treatment — shared geometry, colours supplied by each app
|
|
137
|
+
theme. The backdrop is sticky so the original glow/cloud composition stays
|
|
138
|
+
fixed while only the page content scrolls. */
|
|
136
139
|
.today-page-frame {
|
|
137
140
|
background-color: var(--ph-canvas);
|
|
141
|
+
/* clip does not create a scroll container, so the title can stick to
|
|
142
|
+
#main-content. overflow-x: hidden would trap sticky inside the frame. */
|
|
143
|
+
overflow-x: clip;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.today-page-frame__backdrop {
|
|
147
|
+
position: sticky;
|
|
148
|
+
top: 0;
|
|
149
|
+
width: 100%;
|
|
150
|
+
/* Pinned to the scrollport top; height in vh (not %) so the cancelling
|
|
151
|
+
negative margin below matches it — % margins resolve against width. */
|
|
152
|
+
height: 100vh;
|
|
153
|
+
flex: none;
|
|
154
|
+
margin-bottom: -100vh;
|
|
138
155
|
}
|
|
139
156
|
|
|
140
157
|
.today-page-frame__glow {
|
|
@@ -251,28 +268,57 @@ html.dark .today-page-frame__cloud--2 {
|
|
|
251
268
|
color: var(--ph-canvas);
|
|
252
269
|
}
|
|
253
270
|
|
|
254
|
-
/*
|
|
271
|
+
/* ── Page title parks at the top of the scrollport ──────────────────────
|
|
272
|
+
Every product page, not just Today. Which element actually scrolls varies:
|
|
273
|
+
`#main-content` on normal pages, `.today-page-frame` on Today, and an inner
|
|
274
|
+
pane on screens that lock main scroll (settings, kanban, editors) — where
|
|
275
|
+
the title simply never moves. Sticky resolves against whichever of those is
|
|
276
|
+
the nearest scroll container, so one rule covers all three.
|
|
277
|
+
|
|
278
|
+
The sticky offset equals the title's resting page inset, so the title never
|
|
279
|
+
shifts upward before it sticks. ::before bleeds up over that inset and out
|
|
280
|
+
to the page edges, so content dissolves behind the title instead of sliding
|
|
281
|
+
through the gap above it. */
|
|
255
282
|
.suite-page-header-sticky {
|
|
256
283
|
position: sticky;
|
|
257
|
-
top:
|
|
284
|
+
top: var(--suite-page-pad-y-top);
|
|
258
285
|
z-index: 20;
|
|
286
|
+
isolation: isolate;
|
|
259
287
|
margin-left: calc(-1 * var(--suite-page-pad-x));
|
|
260
288
|
margin-right: calc(-1 * var(--suite-page-pad-x));
|
|
261
289
|
padding-left: var(--suite-page-pad-x);
|
|
262
290
|
padding-right: var(--suite-page-pad-x);
|
|
263
|
-
background:
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
291
|
+
background: transparent;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.suite-page-header-sticky::before {
|
|
295
|
+
content: "";
|
|
296
|
+
position: absolute;
|
|
297
|
+
inset-inline: 0;
|
|
298
|
+
top: calc(-1 * var(--suite-page-pad-y-top));
|
|
299
|
+
height: calc(100% + var(--suite-page-pad-y-top));
|
|
300
|
+
z-index: -1;
|
|
301
|
+
background: var(--ph-canvas);
|
|
302
|
+
pointer-events: none;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/* Hairline appears only once content has actually travelled under the title. */
|
|
306
|
+
.suite-page-header-sticky[data-stuck="true"]::before {
|
|
307
|
+
box-shadow: 0 1px 0 var(--ph-border-subtle);
|
|
268
308
|
}
|
|
309
|
+
|
|
269
310
|
@media (min-width: 640px) {
|
|
270
311
|
.suite-page-header-sticky {
|
|
312
|
+
top: var(--suite-page-pad-y-top-sm);
|
|
271
313
|
margin-left: calc(-1 * var(--suite-page-pad-x-sm));
|
|
272
314
|
margin-right: calc(-1 * var(--suite-page-pad-x-sm));
|
|
273
315
|
padding-left: var(--suite-page-pad-x-sm);
|
|
274
316
|
padding-right: var(--suite-page-pad-x-sm);
|
|
275
317
|
}
|
|
318
|
+
.suite-page-header-sticky::before {
|
|
319
|
+
top: calc(-1 * var(--suite-page-pad-y-top-sm));
|
|
320
|
+
height: calc(100% + var(--suite-page-pad-y-top-sm));
|
|
321
|
+
}
|
|
276
322
|
}
|
|
277
323
|
@media (min-width: 1024px) {
|
|
278
324
|
.suite-page-header-sticky {
|
|
@@ -282,34 +328,92 @@ html.dark .today-page-frame__cloud--2 {
|
|
|
282
328
|
padding-right: var(--suite-page-pad-x-lg);
|
|
283
329
|
}
|
|
284
330
|
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
331
|
+
|
|
332
|
+
/* Lock-scroll pages (tracker, reports, boards, settings, Ask): the page
|
|
333
|
+
stage is the sticky containing block, so the header's static position is
|
|
334
|
+
already after the page inset. The default `top` would double-count that
|
|
335
|
+
inset, jump the title down, and paint over the first content. */
|
|
336
|
+
#main-content[data-lock-scroll] .suite-page-header-sticky,
|
|
337
|
+
.suite-page-stage.overflow-hidden > .suite-page-header-sticky {
|
|
338
|
+
top: 0;
|
|
289
339
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
340
|
+
|
|
341
|
+
/* Today only: the title sits on the fixed sky, so it stays transparent and
|
|
342
|
+
content dissolves into the backdrop instead of meeting an opaque edge. */
|
|
343
|
+
.today-page-frame .suite-page-header-sticky {
|
|
344
|
+
top: var(--suite-today-pad-y-top);
|
|
345
|
+
}
|
|
346
|
+
.today-page-frame .suite-page-header-sticky::before {
|
|
347
|
+
top: calc(-1 * var(--suite-today-pad-y-top));
|
|
348
|
+
height: calc(100% + var(--suite-today-pad-y-top) + var(--suite-scroll-fade));
|
|
349
|
+
background: linear-gradient(
|
|
350
|
+
to bottom,
|
|
351
|
+
color-mix(in srgb, var(--ph-canvas) 18%, transparent)
|
|
352
|
+
calc(100% - var(--suite-scroll-fade)),
|
|
353
|
+
transparent
|
|
354
|
+
);
|
|
355
|
+
-webkit-backdrop-filter: blur(8px);
|
|
356
|
+
backdrop-filter: blur(8px);
|
|
357
|
+
-webkit-mask-image: linear-gradient(
|
|
358
|
+
to bottom,
|
|
359
|
+
#000 calc(100% - var(--suite-scroll-fade)),
|
|
360
|
+
transparent
|
|
361
|
+
);
|
|
362
|
+
mask-image: linear-gradient(
|
|
363
|
+
to bottom,
|
|
364
|
+
#000 calc(100% - var(--suite-scroll-fade)),
|
|
365
|
+
transparent
|
|
366
|
+
);
|
|
367
|
+
box-shadow: none;
|
|
368
|
+
}
|
|
369
|
+
.today-page-frame .suite-page-header-sticky[data-stuck="true"]::before {
|
|
370
|
+
box-shadow: none;
|
|
371
|
+
}
|
|
372
|
+
@media (min-width: 640px) {
|
|
373
|
+
.today-page-frame .suite-page-header-sticky {
|
|
374
|
+
top: var(--suite-today-pad-y-top-sm);
|
|
375
|
+
}
|
|
376
|
+
.today-page-frame .suite-page-header-sticky::before {
|
|
377
|
+
top: calc(-1 * var(--suite-today-pad-y-top-sm));
|
|
378
|
+
height: calc(
|
|
379
|
+
100% + var(--suite-today-pad-y-top-sm) + var(--suite-scroll-fade)
|
|
380
|
+
);
|
|
293
381
|
}
|
|
294
382
|
}
|
|
295
383
|
|
|
296
|
-
/*
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
margin-left: 0;
|
|
302
|
-
margin-right: 0;
|
|
303
|
-
padding-left: 0;
|
|
304
|
-
padding-right: 0;
|
|
305
|
-
background: none;
|
|
384
|
+
/* Public landing nav — same sit-on-the-page fade as Today. No bar, no border;
|
|
385
|
+
the page background shows through and only scrolling content dissolves. */
|
|
386
|
+
.landing-page-nav {
|
|
387
|
+
isolation: isolate;
|
|
388
|
+
background: transparent;
|
|
306
389
|
border-bottom: none;
|
|
307
|
-
-webkit-backdrop-filter: none;
|
|
308
|
-
backdrop-filter: none;
|
|
309
390
|
}
|
|
310
|
-
.
|
|
311
|
-
|
|
312
|
-
|
|
391
|
+
.landing-page-nav::before {
|
|
392
|
+
content: "";
|
|
393
|
+
position: absolute;
|
|
394
|
+
inset-inline: 0;
|
|
395
|
+
top: 0;
|
|
396
|
+
height: calc(100% + var(--suite-scroll-fade));
|
|
397
|
+
z-index: -1;
|
|
398
|
+
background: linear-gradient(
|
|
399
|
+
to bottom,
|
|
400
|
+
color-mix(in srgb, var(--ph-canvas) 18%, transparent)
|
|
401
|
+
calc(100% - var(--suite-scroll-fade)),
|
|
402
|
+
transparent
|
|
403
|
+
);
|
|
404
|
+
-webkit-backdrop-filter: blur(8px);
|
|
405
|
+
backdrop-filter: blur(8px);
|
|
406
|
+
-webkit-mask-image: linear-gradient(
|
|
407
|
+
to bottom,
|
|
408
|
+
#000 calc(100% - var(--suite-scroll-fade)),
|
|
409
|
+
transparent
|
|
410
|
+
);
|
|
411
|
+
mask-image: linear-gradient(
|
|
412
|
+
to bottom,
|
|
413
|
+
#000 calc(100% - var(--suite-scroll-fade)),
|
|
414
|
+
transparent
|
|
415
|
+
);
|
|
416
|
+
pointer-events: none;
|
|
313
417
|
}
|
|
314
418
|
|
|
315
419
|
/* Page stage — ONE layout standard for every suite app.
|