lostcoords-ui 0.4.1 → 0.6.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 +364 -96
- 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 +23 -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/{disclosure.css → collapsible.css} +6 -6
- data/app/assets/tailwind/lostcoords/ui/components/code-block.css +5 -0
- data/app/assets/tailwind/lostcoords/ui/components/collapsible.css +5 -0
- data/app/assets/tailwind/lostcoords/ui/components/dialog.css +9 -0
- data/app/assets/tailwind/lostcoords/ui/components/emoji-picker.css +5 -0
- data/app/assets/tailwind/lostcoords/ui/components/menu.css +5 -0
- data/app/assets/tailwind/lostcoords/ui/components/prose.css +3 -0
- data/app/assets/tailwind/lostcoords/ui/components/table.css +3 -0
- data/app/assets/tailwind/lostcoords/ui/components/toast.css +5 -0
- data/app/assets/tailwind/lostcoords/ui/components/tooltip.css +4 -0
- data/app/assets/tailwind/lostcoords/ui/components.css +12 -0
- data/app/assets/tailwind/lostcoords/ui/copy-button.css +9 -9
- data/app/assets/tailwind/lostcoords/ui/core.css +21 -0
- data/app/assets/tailwind/lostcoords/ui/dialog.css +17 -17
- data/app/assets/tailwind/lostcoords/ui/emoji-picker.css +86 -88
- 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/prose.css +66 -0
- data/app/assets/tailwind/lostcoords/ui/sheet.css +62 -63
- 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 +209 -225
- data/app/assets/tailwind/lostcoords/ui/toast.css +23 -0
- data/app/assets/tailwind/lostcoords/ui/tooltip.css +51 -0
- data/app/assets/tailwind/lostcoords/ui/typography.css +31 -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 +44 -35
- data/app/helpers/lostcoords/ui/card_helper.rb +9 -52
- data/app/helpers/lostcoords/ui/choice_helper.rb +87 -0
- data/app/helpers/lostcoords/ui/code_block_helper.rb +22 -0
- data/app/helpers/lostcoords/ui/collapsible_helper.rb +9 -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 +15 -17
- data/app/helpers/lostcoords/ui/emoji_picker_helper.rb +6 -0
- 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 +45 -10
- data/app/helpers/lostcoords/ui/navigation_helper.rb +144 -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/render_attributes_helper.rb +17 -1
- data/app/helpers/lostcoords/ui/sheet_helper.rb +7 -45
- data/app/helpers/lostcoords/ui/structures_helper.rb +26 -125
- 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/toast_helper.rb +22 -0
- data/app/helpers/lostcoords/ui/tooltip_helper.rb +17 -0
- data/app/helpers/lostcoords/ui/typography_helper.rb +41 -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} +4 -4
- 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} +38 -10
- data/app/javascript/lostcoords/ui/controllers/lc_kbd_controller.js +12 -0
- data/app/javascript/lostcoords/ui/controllers/{row_menu_controller.js → lc_menu_controller.js} +25 -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} +7 -15
- data/app/javascript/lostcoords/ui/controllers/{sheet_controller.js → lc_sheet_controller.js} +17 -17
- data/app/javascript/lostcoords/ui/controllers/lc_shortcut_controller.js +45 -0
- data/app/javascript/lostcoords/ui/controllers/lc_tabs_controller.js +42 -0
- data/app/javascript/lostcoords/ui/controllers/{toast_controller.js → lc_toast_controller.js} +2 -2
- data/app/javascript/lostcoords/ui/controllers/lc_toast_region_controller.js +62 -0
- data/app/javascript/lostcoords/ui/controllers/lc_tooltip_controller.js +54 -0
- data/app/javascript/lostcoords/ui/helpers/catalog_picker.js +77 -25
- 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 +30 -7
- data/app/javascript/lostcoords/ui/helpers/floating_panel.js +7 -8
- data/app/javascript/lostcoords/ui/helpers/menu_keys.js +19 -18
- data/app/javascript/lostcoords/ui/helpers/roving_focus.js +175 -0
- data/app/javascript/lostcoords/ui/helpers/sheet_motion.js +4 -4
- data/app/javascript/lostcoords/ui/helpers/shortcuts.js +162 -0
- data/app/javascript/lostcoords/ui/helpers/top_layer.js +48 -10
- data/app/javascript/lostcoords/ui/index.js +57 -0
- data/app/views/lostcoords/ui/components/_emoji_picker.html.erb +46 -46
- data/app/views/lostcoords/ui/components/_emoji_picker_grid.html.erb +3 -3
- 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/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 +6 -3
- data/lib/lostcoords/ui/builders.rb +2 -2
- data/lib/lostcoords/ui/form_builder.rb +126 -0
- data/lib/lostcoords/ui/parts.rb +154 -0
- data/lib/lostcoords/ui/stylesheets.rb +25 -0
- data/lib/lostcoords/ui/tokens.rb +24 -1
- data/lib/lostcoords/ui/version.rb +1 -1
- data/lib/tasks/lostcoords_ui.rake +11 -0
- metadata +54 -21
- data/app/assets/tailwind/lostcoords/ui/reading.css +0 -60
- 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/config/helper_renames.json +0 -113
- data/script/migrate_helpers.rb +0 -136
- /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,142 +1,141 @@
|
|
|
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
|
+
(lc-sheet), 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-index-prompt);
|
|
14
13
|
inline-size: 100%;
|
|
15
|
-
max-block-size: calc(var(--sheet-floor, 100dvh) * 0.9);
|
|
14
|
+
max-block-size: calc(var(--lc-sheet-floor, 100dvh) * 0.9);
|
|
16
15
|
overflow-y: auto;
|
|
17
16
|
overscroll-behavior: contain;
|
|
18
17
|
padding-block-end: max(env(safe-area-inset-bottom), 1rem);
|
|
19
|
-
border: 1px solid var(--glass-edge);
|
|
18
|
+
border: 1px solid var(--lc-glass-edge);
|
|
20
19
|
border-start-start-radius: var(--radius-3xl);
|
|
21
20
|
border-start-end-radius: var(--radius-3xl);
|
|
22
21
|
|
|
23
22
|
/* Published as a variable, not just applied, because the sticky chrome
|
|
24
23
|
that rides on top of the sheet — the grabber bar, the pinned action
|
|
25
24
|
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 --
|
|
25
|
+
mode the sheet is a lightened paper-2/paper-3 mix while --background is
|
|
27
26
|
0.045 lightness darker, which is exactly the band you could see. */
|
|
28
|
-
--sheet-bg: var(--
|
|
27
|
+
--lc-sheet-bg: var(--background);
|
|
29
28
|
@supports (background: light-dark(white, black)) {
|
|
30
|
-
--sheet-bg: light-dark(var(--
|
|
29
|
+
--lc-sheet-bg: light-dark(var(--background), color-mix(in oklab, var(--muted) 92%, var(--accent)));
|
|
31
30
|
}
|
|
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));
|
|
31
|
+
background: var(--lc-sheet-bg);
|
|
32
|
+
color: var(--foreground);
|
|
33
|
+
box-shadow: 0 -12px 40px -12px color-mix(in oklab, var(--foreground) 45%, transparent);
|
|
34
|
+
transform: translateY(var(--lc-sheet-offscreen));
|
|
36
35
|
transition:
|
|
37
|
-
transform var(--sheet-duration) var(--ease-sheet),
|
|
38
|
-
display var(--sheet-duration) allow-discrete,
|
|
39
|
-
overlay var(--sheet-duration) allow-discrete;
|
|
36
|
+
transform var(--lc-sheet-duration) var(--lc-ease-sheet),
|
|
37
|
+
display var(--lc-sheet-duration) allow-discrete,
|
|
38
|
+
overlay var(--lc-sheet-duration) allow-discrete;
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
/* Popover-API reveal (currency): top layer drives display, so showPopover()/
|
|
43
42
|
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 {
|
|
43
|
+
.lc-sheet[popover] { display: none; flex-direction: column; max-block-size: min(calc(var(--lc-sheet-floor, 100svh) * 0.72), 34rem); }
|
|
44
|
+
.lc-sheet[popover]:popover-open {
|
|
46
45
|
display: flex;
|
|
47
46
|
transform: translateY(0);
|
|
48
47
|
|
|
49
|
-
@starting-style { transform: translateY(var(--sheet-offscreen)); }
|
|
48
|
+
@starting-style { transform: translateY(var(--lc-sheet-offscreen)); }
|
|
50
49
|
}
|
|
51
|
-
.sheet[popover]::backdrop {
|
|
52
|
-
background: var(--scrim);
|
|
50
|
+
.lc-sheet[popover]::backdrop {
|
|
51
|
+
background: var(--lc-scrim);
|
|
53
52
|
backdrop-filter: blur(2px);
|
|
54
53
|
opacity: 0;
|
|
55
54
|
transition:
|
|
56
|
-
opacity var(--sheet-duration) var(--ease-sheet),
|
|
57
|
-
display var(--sheet-duration) allow-discrete,
|
|
58
|
-
overlay var(--sheet-duration) allow-discrete;
|
|
55
|
+
opacity var(--lc-sheet-duration) var(--lc-ease-sheet),
|
|
56
|
+
display var(--lc-sheet-duration) allow-discrete,
|
|
57
|
+
overlay var(--lc-sheet-duration) allow-discrete;
|
|
59
58
|
|
|
60
59
|
@media (prefers-reduced-motion: reduce) { transition: none; }
|
|
61
60
|
}
|
|
62
|
-
.sheet[popover]:popover-open::backdrop { opacity: 1; @starting-style { opacity: 0; } }
|
|
61
|
+
.lc-sheet[popover]:popover-open::backdrop { opacity: 1; @starting-style { opacity: 0; } }
|
|
63
62
|
|
|
64
63
|
/* UIKit's 36×5 grabber. */
|
|
65
|
-
:is([data-sheet-target~="handle"], dialog[data-controller~="sheet"])::before {
|
|
64
|
+
:is([data-lc-sheet-target~="handle"], dialog[data-controller~="lc-sheet"])::before {
|
|
66
65
|
content: "";
|
|
67
66
|
display: block;
|
|
68
67
|
inline-size: 2.25rem;
|
|
69
68
|
block-size: 0.3125rem;
|
|
70
69
|
border-radius: 9999px;
|
|
71
|
-
background: color-mix(in oklab, var(--
|
|
70
|
+
background: color-mix(in oklab, var(--muted-foreground) 45%, transparent);
|
|
72
71
|
}
|
|
73
72
|
}
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
@layer modules {
|
|
77
|
-
/* Phones: every modal dialog is an iOS sheet (
|
|
76
|
+
/* Phones: every modal dialog is an iOS sheet (lc-sheet). It floats
|
|
78
77
|
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.
|
|
78
|
+
edges as it reaches the large detent: --lc-sheet-p runs 0 → 1 between them.
|
|
80
79
|
Lives in this layer so it out-ranks a dialog's own frame. */
|
|
81
80
|
@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)));
|
|
81
|
+
dialog[data-controller~="lc-sheet"] {
|
|
82
|
+
--lc-sheet-p: 0;
|
|
83
|
+
--lc-sheet-inset: 0.5rem;
|
|
84
|
+
--lc-sheet-radius: 2.25rem;
|
|
85
|
+
--lc-sheet-bg: var(--background);
|
|
86
|
+
--lc-sheet-gap: calc(var(--lc-sheet-inset) * (1 - var(--lc-sheet-p)));
|
|
88
87
|
|
|
89
88
|
position: fixed;
|
|
90
89
|
|
|
91
|
-
/* Anchored from the top edge, like .sheet: the keyboard covers it and
|
|
90
|
+
/* Anchored from the top edge, like .lc-sheet: the keyboard covers it and
|
|
92
91
|
nothing moves. */
|
|
93
|
-
inset: calc(var(--sheet-floor, 100dvh) - var(--sheet-gap)) 0 auto;
|
|
92
|
+
inset: calc(var(--lc-sheet-floor, 100dvh) - var(--lc-sheet-gap)) 0 auto;
|
|
94
93
|
translate: 0 -100%;
|
|
95
|
-
margin: 0 var(--sheet-gap);
|
|
94
|
+
margin: 0 var(--lc-sheet-gap);
|
|
96
95
|
inline-size: auto;
|
|
97
96
|
max-inline-size: none;
|
|
98
97
|
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)));
|
|
98
|
+
max-block-size: calc(var(--lc-sheet-floor, 100dvh) - max(env(safe-area-inset-top), 0.75rem) - 0.625rem);
|
|
99
|
+
padding: 0 0 max(0px, calc(env(safe-area-inset-bottom) - var(--lc-sheet-gap)));
|
|
101
100
|
overflow: hidden auto;
|
|
102
101
|
overscroll-behavior: contain;
|
|
103
102
|
scrollbar-width: none;
|
|
104
|
-
border: 1px solid var(--glass-edge);
|
|
103
|
+
border: 1px solid var(--lc-glass-edge);
|
|
105
104
|
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);
|
|
105
|
+
var(--lc-sheet-radius) var(--lc-sheet-radius)
|
|
106
|
+
calc(var(--lc-sheet-radius) * (1 - var(--lc-sheet-p))) calc(var(--lc-sheet-radius) * (1 - var(--lc-sheet-p)));
|
|
107
|
+
background: var(--lc-sheet-bg);
|
|
108
|
+
box-shadow: var(--lc-glass-rim), 0 -8px 40px -12px rgb(0 0 0 / 0.28);
|
|
110
109
|
opacity: 1;
|
|
111
|
-
transform: translateY(var(--sheet-offscreen));
|
|
110
|
+
transform: translateY(var(--lc-sheet-offscreen));
|
|
112
111
|
transform-origin: bottom center;
|
|
113
112
|
transition:
|
|
114
|
-
transform var(--sheet-duration) var(--ease-sheet),
|
|
115
|
-
display var(--sheet-duration) allow-discrete,
|
|
116
|
-
overlay var(--sheet-duration) allow-discrete;
|
|
113
|
+
transform var(--lc-sheet-duration) var(--lc-ease-sheet),
|
|
114
|
+
display var(--lc-sheet-duration) allow-discrete,
|
|
115
|
+
overlay var(--lc-sheet-duration) allow-discrete;
|
|
117
116
|
|
|
118
117
|
&[open] {
|
|
119
118
|
transform: none;
|
|
120
119
|
|
|
121
|
-
@starting-style { transform: translateY(var(--sheet-offscreen)); }
|
|
120
|
+
@starting-style { transform: translateY(var(--lc-sheet-offscreen)); }
|
|
122
121
|
}
|
|
123
122
|
|
|
124
123
|
&::before {
|
|
125
124
|
position: absolute;
|
|
126
|
-
z-index:
|
|
125
|
+
z-index: 1;
|
|
127
126
|
inset: 0.3125rem auto auto 50%;
|
|
128
127
|
translate: -50% 0;
|
|
129
128
|
pointer-events: none;
|
|
130
129
|
}
|
|
131
130
|
|
|
132
131
|
&::backdrop {
|
|
133
|
-
background: var(--scrim-sheet);
|
|
132
|
+
background: var(--lc-scrim-sheet);
|
|
134
133
|
backdrop-filter: none;
|
|
135
134
|
opacity: 0;
|
|
136
135
|
transition:
|
|
137
|
-
opacity var(--sheet-duration) var(--ease-sheet),
|
|
138
|
-
display var(--sheet-duration) allow-discrete,
|
|
139
|
-
overlay var(--sheet-duration) allow-discrete;
|
|
136
|
+
opacity var(--lc-sheet-duration) var(--lc-ease-sheet),
|
|
137
|
+
display var(--lc-sheet-duration) allow-discrete,
|
|
138
|
+
overlay var(--lc-sheet-duration) allow-discrete;
|
|
140
139
|
}
|
|
141
140
|
|
|
142
141
|
&[open]::backdrop {
|
|
@@ -151,19 +150,19 @@
|
|
|
151
150
|
}
|
|
152
151
|
|
|
153
152
|
/* Behind a large sheet the page shrinks back and rounds off, over black,
|
|
154
|
-
as UIKit's page sheet does;
|
|
155
|
-
html[data-sheet-page] {
|
|
153
|
+
as UIKit's page sheet does; lc-sheet drives the variables. */
|
|
154
|
+
html[data-lc-sheet-page] {
|
|
156
155
|
background: #000;
|
|
157
156
|
|
|
158
157
|
> body {
|
|
159
|
-
transform-origin: 50% var(--sheet-page-origin, 0);
|
|
158
|
+
transform-origin: 50% var(--lc-sheet-page-origin, 0);
|
|
160
159
|
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));
|
|
160
|
+
translateY(calc(var(--lc-sheet-page-p, 0) * (max(env(safe-area-inset-top), 0.75rem) - 0.25rem)))
|
|
161
|
+
scale(var(--lc-sheet-page-scale, 1));
|
|
162
|
+
clip-path: inset(var(--lc-sheet-page-origin, 0) 0 0 round calc(var(--lc-sheet-page-p, 0) * 0.75rem));
|
|
164
163
|
transition:
|
|
165
|
-
transform var(--sheet-page-transition, 0s),
|
|
166
|
-
clip-path var(--sheet-page-transition, 0s);
|
|
164
|
+
transform var(--lc-sheet-page-transition, 0s),
|
|
165
|
+
clip-path var(--lc-sheet-page-transition, 0s);
|
|
167
166
|
}
|
|
168
167
|
}
|
|
169
168
|
}
|
|
@@ -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
|
+
}
|