lostcoords-ui 0.4.1 → 0.5.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.
- checksums.yaml +4 -4
- data/README.md +303 -89
- data/app/assets/tailwind/lostcoords/ui/avatar.css +6 -6
- data/app/assets/tailwind/lostcoords/ui/base.css +45 -0
- data/app/assets/tailwind/lostcoords/ui/card.css +20 -22
- data/app/assets/tailwind/lostcoords/ui/choice.css +39 -0
- data/app/assets/tailwind/lostcoords/ui/code-block.css +10 -0
- data/app/assets/tailwind/lostcoords/ui/components.css +25 -0
- data/app/assets/tailwind/lostcoords/ui/copy-button.css +9 -9
- data/app/assets/tailwind/lostcoords/ui/dialog.css +17 -17
- data/app/assets/tailwind/lostcoords/ui/disclosure.css +5 -5
- data/app/assets/tailwind/lostcoords/ui/emoji-picker.css +43 -43
- data/app/assets/tailwind/lostcoords/ui/field.css +2 -2
- data/app/assets/tailwind/lostcoords/ui/glass.css +9 -8
- data/app/assets/tailwind/lostcoords/ui/layout.css +2 -2
- data/app/assets/tailwind/lostcoords/ui/popover.css +14 -14
- data/app/assets/tailwind/lostcoords/ui/reading.css +24 -24
- data/app/assets/tailwind/lostcoords/ui/sheet.css +60 -60
- data/app/assets/tailwind/lostcoords/ui/squircle.css +7 -27
- data/app/assets/tailwind/lostcoords/ui/table.css +51 -0
- data/app/assets/tailwind/lostcoords/ui/theme.css +194 -225
- data/app/assets/tailwind/lostcoords/ui/tooltip.css +50 -0
- data/app/assets/tailwind/lostcoords/ui/typography.css +37 -61
- data/app/assets/tailwind/lostcoords/ui/ui.css +2 -21
- data/app/assets/tailwind/lostcoords/ui/utilities.css +14 -22
- data/app/helpers/lostcoords/ui/badge_helper.rb +67 -110
- data/app/helpers/lostcoords/ui/button_helper.rb +36 -33
- data/app/helpers/lostcoords/ui/card_helper.rb +9 -52
- data/app/helpers/lostcoords/ui/choice_helper.rb +83 -0
- data/app/helpers/lostcoords/ui/code_block_helper.rb +22 -0
- data/app/helpers/lostcoords/ui/copy_button_helper.rb +7 -7
- data/app/helpers/lostcoords/ui/description_list_helper.rb +12 -0
- data/app/helpers/lostcoords/ui/dialog_helper.rb +6 -13
- data/app/helpers/lostcoords/ui/feedback_helper.rb +25 -6
- data/app/helpers/lostcoords/ui/form_helper.rb +36 -59
- data/app/helpers/lostcoords/ui/glass_helper.rb +7 -7
- data/app/helpers/lostcoords/ui/layout_helper.rb +13 -11
- data/app/helpers/lostcoords/ui/menu_helper.rb +8 -8
- data/app/helpers/lostcoords/ui/navigation_helper.rb +131 -0
- data/app/helpers/lostcoords/ui/overlay_helper.rb +17 -0
- data/app/helpers/lostcoords/ui/primitives_helper.rb +39 -61
- data/app/helpers/lostcoords/ui/reading_helper.rb +2 -2
- data/app/helpers/lostcoords/ui/sheet_helper.rb +3 -45
- data/app/helpers/lostcoords/ui/structures_helper.rb +55 -64
- data/app/helpers/lostcoords/ui/table_helper.rb +11 -0
- data/app/helpers/lostcoords/ui/tailwind_helper.rb +13 -4
- data/app/helpers/lostcoords/ui/typography_helper.rb +11 -11
- data/app/javascript/lostcoords/ui/controllers/lc_code_block_controller.js +23 -0
- data/app/javascript/lostcoords/ui/controllers/{disclosure_controller.js → lc_collapsible_controller.js} +3 -3
- data/app/javascript/lostcoords/ui/controllers/{confirm_dialog_controller.js → lc_confirm_dialog_controller.js} +4 -4
- data/app/javascript/lostcoords/ui/controllers/{modal_controller.js → lc_dialog_controller.js} +1 -1
- data/app/javascript/lostcoords/ui/controllers/{emoji_picker_controller.js → lc_emoji_picker_controller.js} +4 -4
- data/app/javascript/lostcoords/ui/controllers/{row_menu_controller.js → lc_menu_controller.js} +3 -3
- data/app/javascript/lostcoords/ui/controllers/{ui_popover_controller.js → lc_popover_controller.js} +1 -1
- data/app/javascript/lostcoords/ui/controllers/{ui_selection_controller.js → lc_selection_controller.js} +1 -1
- data/app/javascript/lostcoords/ui/controllers/{sheet_controller.js → lc_sheet_controller.js} +15 -15
- data/app/javascript/lostcoords/ui/controllers/lc_tabs_controller.js +39 -0
- data/app/javascript/lostcoords/ui/controllers/{toast_controller.js → lc_toast_controller.js} +2 -2
- data/app/javascript/lostcoords/ui/controllers/lc_tooltip_controller.js +14 -0
- data/app/javascript/lostcoords/ui/helpers/catalog_picker.js +5 -5
- data/app/javascript/lostcoords/ui/helpers/context_dialog.js +6 -6
- data/app/javascript/lostcoords/ui/helpers/dialog.js +2 -2
- data/app/javascript/lostcoords/ui/helpers/dismiss_stack.js +7 -7
- data/app/javascript/lostcoords/ui/helpers/floating_panel.js +2 -2
- data/app/javascript/lostcoords/ui/helpers/sheet_motion.js +4 -4
- data/app/javascript/lostcoords/ui/index.js +51 -0
- data/app/views/lostcoords/ui/components/_emoji_picker.html.erb +30 -30
- data/app/views/lostcoords/ui/components/_lc_code_block.html.erb +18 -0
- data/app/views/lostcoords/ui/components/_lc_collapsible.html.erb +5 -0
- data/app/views/lostcoords/ui/components/_lc_dialog.html.erb +11 -8
- data/app/views/lostcoords/ui/components/_lc_floating_panel.html.erb +8 -0
- data/config/helper_renames.json +23 -25
- data/config/importmap.rb +10 -2
- data/config/locales/en.yml +23 -0
- data/config/locales/es.yml +23 -0
- data/config/locales/ja.yml +23 -0
- data/lib/lostcoords/ui/action_view.rb +5 -3
- data/lib/lostcoords/ui/builders.rb +1 -1
- data/lib/lostcoords/ui/form_builder.rb +113 -0
- data/lib/lostcoords/ui/parts.rb +154 -0
- data/lib/lostcoords/ui/tokens.rb +24 -1
- data/lib/lostcoords/ui/version.rb +1 -1
- metadata +33 -17
- data/app/views/lostcoords/ui/components/_form_alert.html.erb +0 -4
- data/app/views/lostcoords/ui/components/_lc_disclosure.html.erb +0 -5
- data/app/views/lostcoords/ui/components/_skeleton.html.erb +0 -4
- data/app/views/lostcoords/ui/components/_spinner.html.erb +0 -10
- data/app/views/lostcoords/ui/components/_ui_floating_panel.html.erb +0 -8
- /data/app/javascript/lostcoords/ui/controllers/{ui_copy_controller.js → lc_copy_controller.js} +0 -0
- /data/app/javascript/lostcoords/ui/controllers/{ui_toggle_controller.js → lc_toggle_controller.js} +0 -0
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
@layer utilities {
|
|
2
|
-
.
|
|
3
|
-
--tw-prose-body: var(--
|
|
4
|
-
--tw-prose-headings: var(--
|
|
5
|
-
--tw-prose-lead: var(--
|
|
6
|
-
--tw-prose-links: var(--
|
|
7
|
-
--tw-prose-bold: var(--
|
|
8
|
-
--tw-prose-counters: var(--
|
|
9
|
-
--tw-prose-bullets: var(--
|
|
10
|
-
--tw-prose-hr: var(--
|
|
11
|
-
--tw-prose-quotes: var(--
|
|
12
|
-
--tw-prose-quote-borders: var(--
|
|
13
|
-
--tw-prose-captions: var(--
|
|
14
|
-
--tw-prose-code: var(--
|
|
15
|
-
--tw-prose-pre-code: var(--
|
|
16
|
-
--tw-prose-pre-bg: var(--
|
|
17
|
-
--tw-prose-th-borders: var(--
|
|
18
|
-
--tw-prose-td-borders: var(--
|
|
2
|
+
.lc-prose {
|
|
3
|
+
--tw-prose-body: var(--muted-foreground);
|
|
4
|
+
--tw-prose-headings: var(--foreground);
|
|
5
|
+
--tw-prose-lead: var(--muted-foreground);
|
|
6
|
+
--tw-prose-links: var(--primary);
|
|
7
|
+
--tw-prose-bold: var(--foreground);
|
|
8
|
+
--tw-prose-counters: var(--muted-foreground);
|
|
9
|
+
--tw-prose-bullets: var(--muted-foreground);
|
|
10
|
+
--tw-prose-hr: var(--border);
|
|
11
|
+
--tw-prose-quotes: var(--foreground);
|
|
12
|
+
--tw-prose-quote-borders: var(--border);
|
|
13
|
+
--tw-prose-captions: var(--muted-foreground);
|
|
14
|
+
--tw-prose-code: var(--foreground);
|
|
15
|
+
--tw-prose-pre-code: var(--foreground);
|
|
16
|
+
--tw-prose-pre-bg: var(--muted);
|
|
17
|
+
--tw-prose-th-borders: var(--border);
|
|
18
|
+
--tw-prose-td-borders: var(--border);
|
|
19
19
|
|
|
20
20
|
& :where(p, ul, ol, dl, blockquote, pre, table, figure, hr):not(:where(.not-prose, .not-prose *)) {
|
|
21
|
-
margin-block: var(--
|
|
21
|
+
margin-block: var(--lc-reading-flow, 1.25em) 0;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
& :where(h1, h2, h3, h4):not(:where(.not-prose, .not-prose *)) {
|
|
25
|
-
margin-block: calc(var(--
|
|
25
|
+
margin-block: calc(var(--lc-reading-flow, 1.25em) * 1.6) 0;
|
|
26
26
|
font-family: var(--font-display, inherit);
|
|
27
|
-
line-height: var(--
|
|
27
|
+
line-height: var(--lc-reading-heading-leading, 1.25);
|
|
28
28
|
text-wrap: balance;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
& :where(h1, h2, h3, h4) + :where(p, ul, ol):not(:where(.not-prose, .not-prose *)) {
|
|
32
|
-
margin-block-start: calc(var(--
|
|
32
|
+
margin-block-start: calc(var(--lc-reading-flow, 1.25em) * 0.5);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
& :where(li > p, li > ul, li > ol):not(:where(.not-prose, .not-prose *)) {
|
|
36
|
-
margin-block-start: calc(var(--
|
|
36
|
+
margin-block-start: calc(var(--lc-reading-flow, 1.25em) * 0.5);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
& > :where(:first-child):not(:where(.not-prose, .not-prose *)) {
|
|
@@ -47,13 +47,13 @@
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
&:lang(ja) :where(h1, h2, h3, h4):not(:where(.not-prose, .not-prose *)) {
|
|
50
|
-
line-height: var(--
|
|
50
|
+
line-height: var(--lc-reading-heading-leading, 1.4);
|
|
51
51
|
letter-spacing: normal;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
@supports (word-break: auto-phrase) {
|
|
56
|
-
.
|
|
56
|
+
.lc-prose:lang(ja) :where(h1, h2, h3, h4):not(:where(.not-prose, .not-prose *)) {
|
|
57
57
|
word-break: auto-phrase;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -1,74 +1,74 @@
|
|
|
1
1
|
@layer components {
|
|
2
2
|
@media (width < 40rem) {
|
|
3
|
-
.sheet {
|
|
3
|
+
.lc-sheet {
|
|
4
4
|
position: fixed;
|
|
5
5
|
|
|
6
6
|
/* Anchored from the top edge at the screen height it opened at
|
|
7
7
|
(sheet_controller), then lifted by its own height. In-app browsers
|
|
8
8
|
(Brave, Chrome) resize the page under the keyboard; anything hung
|
|
9
9
|
from the bottom edge jumps a frame as they do, but the top holds. */
|
|
10
|
-
inset: var(--sheet-floor, 100dvh) 0 auto;
|
|
10
|
+
inset: var(--lc-sheet-floor, 100dvh) 0 auto;
|
|
11
11
|
translate: 0 -100%;
|
|
12
12
|
margin: 0;
|
|
13
|
-
z-index: var(--z-
|
|
13
|
+
z-index: var(--lc-z-sheet);
|
|
14
14
|
inline-size: 100%;
|
|
15
|
-
max-block-size: calc(var(--sheet-floor, 100dvh) * 0.9);
|
|
15
|
+
max-block-size: calc(var(--lc-sheet-floor, 100dvh) * 0.9);
|
|
16
16
|
overflow-y: auto;
|
|
17
17
|
overscroll-behavior: contain;
|
|
18
18
|
padding-block-end: max(env(safe-area-inset-bottom), 1rem);
|
|
19
|
-
border: 1px solid var(--glass-edge);
|
|
19
|
+
border: 1px solid var(--lc-glass-edge);
|
|
20
20
|
border-start-start-radius: var(--radius-3xl);
|
|
21
21
|
border-start-end-radius: var(--radius-3xl);
|
|
22
22
|
|
|
23
23
|
/* Published as a variable, not just applied, because the sticky chrome
|
|
24
24
|
that rides on top of the sheet — the grabber bar, the pinned action
|
|
25
25
|
row — has to paint the *same* surface or it reads as a seam. In dark
|
|
26
|
-
mode the sheet is a lightened paper-2/paper-3 mix while --
|
|
26
|
+
mode the sheet is a lightened paper-2/paper-3 mix while --background is
|
|
27
27
|
0.045 lightness darker, which is exactly the band you could see. */
|
|
28
|
-
--sheet-bg: var(--
|
|
28
|
+
--lc-sheet-bg: var(--background);
|
|
29
29
|
@supports (background: light-dark(white, black)) {
|
|
30
|
-
--sheet-bg: light-dark(var(--
|
|
30
|
+
--lc-sheet-bg: light-dark(var(--background), color-mix(in oklab, var(--muted) 92%, var(--accent)));
|
|
31
31
|
}
|
|
32
|
-
background: var(--sheet-bg);
|
|
33
|
-
color: var(--
|
|
34
|
-
box-shadow: 0 -12px 40px -12px color-mix(in oklab, var(--
|
|
35
|
-
transform: translateY(var(--sheet-offscreen));
|
|
32
|
+
background: var(--lc-sheet-bg);
|
|
33
|
+
color: var(--foreground);
|
|
34
|
+
box-shadow: 0 -12px 40px -12px color-mix(in oklab, var(--foreground) 45%, transparent);
|
|
35
|
+
transform: translateY(var(--lc-sheet-offscreen));
|
|
36
36
|
transition:
|
|
37
|
-
transform var(--sheet-duration) var(--ease-sheet),
|
|
38
|
-
display var(--sheet-duration) allow-discrete,
|
|
39
|
-
overlay var(--sheet-duration) allow-discrete;
|
|
37
|
+
transform var(--lc-sheet-duration) var(--lc-ease-sheet),
|
|
38
|
+
display var(--lc-sheet-duration) allow-discrete,
|
|
39
|
+
overlay var(--lc-sheet-duration) allow-discrete;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/* Popover-API reveal (currency): top layer drives display, so showPopover()/
|
|
43
43
|
hidePopover() animate the slide both ways, with a native ::backdrop. */
|
|
44
|
-
.sheet[popover] { display: none; flex-direction: column; max-block-size: min(calc(var(--sheet-floor, 100svh) * 0.72), 34rem); }
|
|
45
|
-
.sheet[popover]:popover-open {
|
|
44
|
+
.lc-sheet[popover] { display: none; flex-direction: column; max-block-size: min(calc(var(--lc-sheet-floor, 100svh) * 0.72), 34rem); }
|
|
45
|
+
.lc-sheet[popover]:popover-open {
|
|
46
46
|
display: flex;
|
|
47
47
|
transform: translateY(0);
|
|
48
48
|
|
|
49
|
-
@starting-style { transform: translateY(var(--sheet-offscreen)); }
|
|
49
|
+
@starting-style { transform: translateY(var(--lc-sheet-offscreen)); }
|
|
50
50
|
}
|
|
51
|
-
.sheet[popover]::backdrop {
|
|
52
|
-
background: var(--scrim);
|
|
51
|
+
.lc-sheet[popover]::backdrop {
|
|
52
|
+
background: var(--lc-scrim);
|
|
53
53
|
backdrop-filter: blur(2px);
|
|
54
54
|
opacity: 0;
|
|
55
55
|
transition:
|
|
56
|
-
opacity var(--sheet-duration) var(--ease-sheet),
|
|
57
|
-
display var(--sheet-duration) allow-discrete,
|
|
58
|
-
overlay var(--sheet-duration) allow-discrete;
|
|
56
|
+
opacity var(--lc-sheet-duration) var(--lc-ease-sheet),
|
|
57
|
+
display var(--lc-sheet-duration) allow-discrete,
|
|
58
|
+
overlay var(--lc-sheet-duration) allow-discrete;
|
|
59
59
|
|
|
60
60
|
@media (prefers-reduced-motion: reduce) { transition: none; }
|
|
61
61
|
}
|
|
62
|
-
.sheet[popover]:popover-open::backdrop { opacity: 1; @starting-style { opacity: 0; } }
|
|
62
|
+
.lc-sheet[popover]:popover-open::backdrop { opacity: 1; @starting-style { opacity: 0; } }
|
|
63
63
|
|
|
64
64
|
/* UIKit's 36×5 grabber. */
|
|
65
|
-
:is([data-sheet-target~="handle"], dialog[data-controller~="sheet"])::before {
|
|
65
|
+
:is([data-lc-sheet-target~="handle"], dialog[data-controller~="lc-sheet"])::before {
|
|
66
66
|
content: "";
|
|
67
67
|
display: block;
|
|
68
68
|
inline-size: 2.25rem;
|
|
69
69
|
block-size: 0.3125rem;
|
|
70
70
|
border-radius: 9999px;
|
|
71
|
-
background: color-mix(in oklab, var(--
|
|
71
|
+
background: color-mix(in oklab, var(--muted-foreground) 45%, transparent);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
}
|
|
@@ -76,67 +76,67 @@
|
|
|
76
76
|
@layer modules {
|
|
77
77
|
/* Phones: every modal dialog is an iOS sheet (sheet_controller). It floats
|
|
78
78
|
inset with all corners round while it is short, and docks to the screen
|
|
79
|
-
edges as it reaches the large detent: --sheet-p runs 0 → 1 between them.
|
|
79
|
+
edges as it reaches the large detent: --lc-sheet-p runs 0 → 1 between them.
|
|
80
80
|
Lives in this layer so it out-ranks a dialog's own frame. */
|
|
81
81
|
@media (width < 40rem) {
|
|
82
|
-
dialog[data-controller~="sheet"] {
|
|
83
|
-
--sheet-p: 0;
|
|
84
|
-
--sheet-inset: 0.5rem;
|
|
85
|
-
--sheet-radius: 2.25rem;
|
|
86
|
-
--sheet-bg: var(--
|
|
87
|
-
--sheet-gap: calc(var(--sheet-inset) * (1 - var(--sheet-p)));
|
|
82
|
+
dialog[data-controller~="lc-sheet"] {
|
|
83
|
+
--lc-sheet-p: 0;
|
|
84
|
+
--lc-sheet-inset: 0.5rem;
|
|
85
|
+
--lc-sheet-radius: 2.25rem;
|
|
86
|
+
--lc-sheet-bg: var(--background);
|
|
87
|
+
--lc-sheet-gap: calc(var(--lc-sheet-inset) * (1 - var(--lc-sheet-p)));
|
|
88
88
|
|
|
89
89
|
position: fixed;
|
|
90
90
|
|
|
91
|
-
/* Anchored from the top edge, like .sheet: the keyboard covers it and
|
|
91
|
+
/* Anchored from the top edge, like .lc-sheet: the keyboard covers it and
|
|
92
92
|
nothing moves. */
|
|
93
|
-
inset: calc(var(--sheet-floor, 100dvh) - var(--sheet-gap)) 0 auto;
|
|
93
|
+
inset: calc(var(--lc-sheet-floor, 100dvh) - var(--lc-sheet-gap)) 0 auto;
|
|
94
94
|
translate: 0 -100%;
|
|
95
|
-
margin: 0 var(--sheet-gap);
|
|
95
|
+
margin: 0 var(--lc-sheet-gap);
|
|
96
96
|
inline-size: auto;
|
|
97
97
|
max-inline-size: none;
|
|
98
98
|
block-size: auto;
|
|
99
|
-
max-block-size: calc(var(--sheet-floor, 100dvh) - max(env(safe-area-inset-top), 0.75rem) - 0.625rem);
|
|
100
|
-
padding: 0 0 max(0px, calc(env(safe-area-inset-bottom) - var(--sheet-gap)));
|
|
99
|
+
max-block-size: calc(var(--lc-sheet-floor, 100dvh) - max(env(safe-area-inset-top), 0.75rem) - 0.625rem);
|
|
100
|
+
padding: 0 0 max(0px, calc(env(safe-area-inset-bottom) - var(--lc-sheet-gap)));
|
|
101
101
|
overflow: hidden auto;
|
|
102
102
|
overscroll-behavior: contain;
|
|
103
103
|
scrollbar-width: none;
|
|
104
|
-
border: 1px solid var(--glass-edge);
|
|
104
|
+
border: 1px solid var(--lc-glass-edge);
|
|
105
105
|
border-radius:
|
|
106
|
-
var(--sheet-radius) var(--sheet-radius)
|
|
107
|
-
calc(var(--sheet-radius) * (1 - var(--sheet-p))) calc(var(--sheet-radius) * (1 - var(--sheet-p)));
|
|
108
|
-
background: var(--sheet-bg);
|
|
109
|
-
box-shadow: var(--glass-rim), 0 -8px 40px -12px rgb(0 0 0 / 0.28);
|
|
106
|
+
var(--lc-sheet-radius) var(--lc-sheet-radius)
|
|
107
|
+
calc(var(--lc-sheet-radius) * (1 - var(--lc-sheet-p))) calc(var(--lc-sheet-radius) * (1 - var(--lc-sheet-p)));
|
|
108
|
+
background: var(--lc-sheet-bg);
|
|
109
|
+
box-shadow: var(--lc-glass-rim), 0 -8px 40px -12px rgb(0 0 0 / 0.28);
|
|
110
110
|
opacity: 1;
|
|
111
|
-
transform: translateY(var(--sheet-offscreen));
|
|
111
|
+
transform: translateY(var(--lc-sheet-offscreen));
|
|
112
112
|
transform-origin: bottom center;
|
|
113
113
|
transition:
|
|
114
|
-
transform var(--sheet-duration) var(--ease-sheet),
|
|
115
|
-
display var(--sheet-duration) allow-discrete,
|
|
116
|
-
overlay var(--sheet-duration) allow-discrete;
|
|
114
|
+
transform var(--lc-sheet-duration) var(--lc-ease-sheet),
|
|
115
|
+
display var(--lc-sheet-duration) allow-discrete,
|
|
116
|
+
overlay var(--lc-sheet-duration) allow-discrete;
|
|
117
117
|
|
|
118
118
|
&[open] {
|
|
119
119
|
transform: none;
|
|
120
120
|
|
|
121
|
-
@starting-style { transform: translateY(var(--sheet-offscreen)); }
|
|
121
|
+
@starting-style { transform: translateY(var(--lc-sheet-offscreen)); }
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
&::before {
|
|
125
125
|
position: absolute;
|
|
126
|
-
z-index:
|
|
126
|
+
z-index: 1;
|
|
127
127
|
inset: 0.3125rem auto auto 50%;
|
|
128
128
|
translate: -50% 0;
|
|
129
129
|
pointer-events: none;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
&::backdrop {
|
|
133
|
-
background: var(--scrim-sheet);
|
|
133
|
+
background: var(--lc-scrim-sheet);
|
|
134
134
|
backdrop-filter: none;
|
|
135
135
|
opacity: 0;
|
|
136
136
|
transition:
|
|
137
|
-
opacity var(--sheet-duration) var(--ease-sheet),
|
|
138
|
-
display var(--sheet-duration) allow-discrete,
|
|
139
|
-
overlay var(--sheet-duration) allow-discrete;
|
|
137
|
+
opacity var(--lc-sheet-duration) var(--lc-ease-sheet),
|
|
138
|
+
display var(--lc-sheet-duration) allow-discrete,
|
|
139
|
+
overlay var(--lc-sheet-duration) allow-discrete;
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
&[open]::backdrop {
|
|
@@ -152,18 +152,18 @@
|
|
|
152
152
|
|
|
153
153
|
/* Behind a large sheet the page shrinks back and rounds off, over black,
|
|
154
154
|
as UIKit's page sheet does; sheet_controller drives the variables. */
|
|
155
|
-
html[data-sheet-page] {
|
|
155
|
+
html[data-lc-sheet-page] {
|
|
156
156
|
background: #000;
|
|
157
157
|
|
|
158
158
|
> body {
|
|
159
|
-
transform-origin: 50% var(--sheet-page-origin, 0);
|
|
159
|
+
transform-origin: 50% var(--lc-sheet-page-origin, 0);
|
|
160
160
|
transform:
|
|
161
|
-
translateY(calc(var(--sheet-page-p, 0) * (max(env(safe-area-inset-top), 0.75rem) - 0.25rem)))
|
|
162
|
-
scale(var(--sheet-page-scale, 1));
|
|
163
|
-
clip-path: inset(var(--sheet-page-origin, 0) 0 0 round calc(var(--sheet-page-p, 0) * 0.75rem));
|
|
161
|
+
translateY(calc(var(--lc-sheet-page-p, 0) * (max(env(safe-area-inset-top), 0.75rem) - 0.25rem)))
|
|
162
|
+
scale(var(--lc-sheet-page-scale, 1));
|
|
163
|
+
clip-path: inset(var(--lc-sheet-page-origin, 0) 0 0 round calc(var(--lc-sheet-page-p, 0) * 0.75rem));
|
|
164
164
|
transition:
|
|
165
|
-
transform var(--sheet-page-transition, 0s),
|
|
166
|
-
clip-path var(--sheet-page-transition, 0s);
|
|
165
|
+
transform var(--lc-sheet-page-transition, 0s),
|
|
166
|
+
clip-path var(--lc-sheet-page-transition, 0s);
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
}
|
|
@@ -1,31 +1,11 @@
|
|
|
1
|
-
/*
|
|
2
|
-
tighter than a circular arc of the same
|
|
3
|
-
|
|
1
|
+
/* Squircle corners where the browser supports corner-shape. WebKit keeps plain
|
|
2
|
+
rounded corners. A squircle reads tighter than a circular arc of the same
|
|
3
|
+
radius, so its radius grows by a third. Library surfaces carry this class;
|
|
4
|
+
host elements are never matched by their rounded-* classes. */
|
|
5
|
+
@utility lc-squircle {
|
|
4
6
|
@supports (corner-shape: squircle) {
|
|
5
|
-
|
|
6
|
-
--
|
|
7
|
-
--radius-2xl: 1.5rem;
|
|
8
|
-
--radius-3xl: 2rem;
|
|
9
|
-
|
|
10
|
-
& :is(
|
|
11
|
-
[class*="rounded-xl"], [class*="rounded-2xl"], [class*="rounded-3xl"],
|
|
12
|
-
[class*="rounded-t-"], [class*="rounded-b-"],
|
|
13
|
-
[class*="rounded-ss-"], [class*="rounded-se-"],
|
|
14
|
-
[class*="rounded-es-"], [class*="rounded-ee-"],
|
|
15
|
-
[class*="[&_button]:rounded-xl"] button,
|
|
16
|
-
[class*="before:rounded-xl"]::before
|
|
17
|
-
):not([class*="rounded-full"]) {
|
|
18
|
-
corner-shape: squircle;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/* For surfaces whose radius comes from a variable or a stylesheet, which the class
|
|
25
|
-
match above can't see. The card, dialog, menu, badge and picker builders carry it. */
|
|
26
|
-
@utility squircle {
|
|
27
|
-
@supports (corner-shape: squircle) {
|
|
28
|
-
&:not([class*="rounded-full"]) {
|
|
7
|
+
&:not([class*="rounded-full"], [class*="rounded-pill"]) {
|
|
8
|
+
--lc-corner-scale: 1.333;
|
|
29
9
|
corner-shape: squircle;
|
|
30
10
|
}
|
|
31
11
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.lc-table {
|
|
3
|
+
--table-rule: color-mix(in oklab, var(--foreground) 8%, transparent);
|
|
4
|
+
border-collapse: collapse;
|
|
5
|
+
|
|
6
|
+
& :where(th, td) {
|
|
7
|
+
padding: var(--spacing-heading) var(--spacing-content);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
& :where(th) {
|
|
11
|
+
text-align: inherit;
|
|
12
|
+
font-weight: 600;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
& :where(thead th) {
|
|
16
|
+
background-color: var(--muted);
|
|
17
|
+
color: var(--muted-foreground);
|
|
18
|
+
font-size: var(--text-caption);
|
|
19
|
+
line-height: var(--text-caption--line-height);
|
|
20
|
+
border-block-end: thin solid color-mix(in oklab, var(--foreground) 14%, transparent);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
& :where(tbody tr > *) {
|
|
24
|
+
border-block-end: thin solid var(--table-rule);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
& :where(tbody:last-of-type tr:last-child > *) {
|
|
28
|
+
border-block-end: 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
& :where(tbody tr) {
|
|
32
|
+
transition: background-color 150ms ease-out;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
& :where(tbody tr:hover) {
|
|
36
|
+
background-color: color-mix(in oklab, var(--foreground) 4%, transparent);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
& :where(caption) {
|
|
40
|
+
padding: 0 var(--spacing-content) var(--spacing-heading);
|
|
41
|
+
color: var(--muted-foreground);
|
|
42
|
+
text-align: start;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@media (prefers-reduced-motion: reduce) {
|
|
47
|
+
.lc-table :where(tbody tr) {
|
|
48
|
+
transition: none;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|