@floegence/floe-webapp-core 0.86.60 → 0.86.62
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/components/chat/blocks/BlockRenderer.js +1 -1
- package/dist/components/chat/blocks/CodeDiffBlock.js +56 -56
- package/dist/components/chat/blocks/ImageBlock.js +1 -1
- package/dist/components/chat/blocks/ToolCallBlock.js +57 -57
- package/dist/components/chat/status/ConnectionStatus.js +10 -10
- package/dist/components/deck/DeckCell.js +25 -25
- package/dist/components/deck/DeckContextMenu.js +20 -20
- package/dist/components/deck/DeckGrid.js +1 -1
- package/dist/components/deck/DeckTopBar.js +42 -42
- package/dist/components/deck/DropZonePreview.js +6 -6
- package/dist/components/deck/LayoutSelector.js +53 -53
- package/dist/components/deck/WidgetFrame.js +28 -28
- package/dist/components/deck/WidgetPalette.js +31 -31
- package/dist/components/deck/WidgetTypeSwitcher.js +31 -31
- package/dist/components/file-browser/Breadcrumb.js +27 -27
- package/dist/components/file-browser/DirectoryTree.js +15 -15
- package/dist/components/file-browser/DragPreview.js +58 -58
- package/dist/components/file-browser/FileBrowser.js +17 -17
- package/dist/components/file-browser/FileBrowserStatusBar.js +18 -18
- package/dist/components/file-browser/FileBrowserToolbar.js +27 -27
- package/dist/components/file-browser/FileContextMenu.js +47 -47
- package/dist/components/file-browser/FileGridView.js +53 -51
- package/dist/components/file-browser/FileItemDecorations.js +30 -27
- package/dist/components/file-browser/FileListView.js +114 -114
- package/dist/components/icons/index.js +1357 -1357
- package/dist/components/launchpad/Launchpad.js +14 -14
- package/dist/components/launchpad/LaunchpadGrid.js +7 -7
- package/dist/components/launchpad/LaunchpadItem.js +11 -11
- package/dist/components/launchpad/LaunchpadPagination.js +16 -16
- package/dist/components/launchpad/LaunchpadSearch.js +9 -9
- package/dist/components/layout/ActivityBar.js +52 -55
- package/dist/components/layout/BottomBar.js +17 -17
- package/dist/components/layout/MobileNavigationPanel.js +36 -36
- package/dist/components/layout/MobileTabBar.js +39 -39
- package/dist/components/layout/Panel.js +16 -16
- package/dist/components/layout/ResizeHandle.js +19 -19
- package/dist/components/layout/Shell.js +50 -50
- package/dist/components/layout/Sidebar.js +37 -36
- package/dist/components/layout/SidebarPane.js +19 -19
- package/dist/components/layout/TopBar.js +16 -16
- package/dist/components/layout/TopBarIconButton.js +15 -15
- package/dist/components/loading/LoadingOverlay.js +9 -9
- package/dist/components/loading/Skeleton.js +11 -11
- package/dist/components/ui/Button.js +36 -36
- package/dist/components/ui/Card.d.ts +11 -62
- package/dist/components/ui/Card.js +64 -237
- package/dist/components/ui/Checkbox.js +79 -79
- package/dist/components/ui/CommandPalette.js +56 -55
- package/dist/components/ui/Dialog.js +91 -93
- package/dist/components/ui/DirectoryInput.js +22 -22
- package/dist/components/ui/DirectoryPicker.js +8 -8
- package/dist/components/ui/Dropdown.js +89 -87
- package/dist/components/ui/FeedbackIndicator.js +57 -57
- package/dist/components/ui/FileOpenPicker.js +37 -37
- package/dist/components/ui/FileSavePicker.js +41 -41
- package/dist/components/ui/FloatingWindow.js +213 -205
- package/dist/components/ui/Form.js +76 -76
- package/dist/components/ui/HighlightBlock.js +14 -14
- package/dist/components/ui/Input.js +106 -109
- package/dist/components/ui/Pagination.js +86 -86
- package/dist/components/ui/Popover.d.ts +33 -0
- package/dist/components/ui/Popover.js +133 -0
- package/dist/components/ui/ProcessingIndicator.js +344 -345
- package/dist/components/ui/Progress.js +94 -97
- package/dist/components/ui/QuoteBlock.js +25 -25
- package/dist/components/ui/Radio.js +91 -91
- package/dist/components/ui/SegmentedControl.js +24 -24
- package/dist/components/ui/Stepper.js +68 -60
- package/dist/components/ui/Switch.js +25 -25
- package/dist/components/ui/Tabs.js +99 -87
- package/dist/components/ui/Tag.js +12 -9
- package/dist/components/ui/Tooltip.js +30 -30
- package/dist/components/ui/floatingPresence.d.ts +7 -0
- package/dist/components/ui/floatingPresence.js +80 -39
- package/dist/components/ui/index.d.ts +2 -1
- package/dist/components/ui/picker/DirectoryFavorites.js +27 -27
- package/dist/components/ui/picker/PickerBase.js +107 -107
- package/dist/context/NotificationContext.js +4 -4
- package/dist/context/ThemeContext.js +71 -70
- package/dist/floe.css +205 -43
- package/dist/full.js +650 -652
- package/dist/language.css +320 -0
- package/dist/primitives.css +23 -17
- package/dist/standalone.css +1 -0
- package/dist/styles/themes/classicSemanticTokens.d.ts +122 -122
- package/dist/styles/themes/classicSemanticTokens.js +140 -138
- package/dist/styles/themes/index.d.ts +3 -1
- package/dist/styles/themes/index.js +10 -10
- package/dist/styles/themes/presets.d.ts +2 -2
- package/dist/styles/themes/presets.js +34 -34
- package/dist/styles/tokens.d.ts +152 -68
- package/dist/styles/tokens.js +87 -49
- package/dist/styles.css +1 -1
- package/dist/surface.css +161 -116
- package/dist/themes/dark.css +64 -64
- package/dist/themes/light.css +64 -64
- package/dist/ui.css +171 -255
- package/dist/ui.js +176 -178
- package/dist/utils/hotInteraction.d.ts +7 -0
- package/dist/utils/hotInteraction.js +12 -12
- package/dist/widgets/TerminalWidget.js +28 -28
- package/dist/workbench-composition.css +15 -15
- package/package.json +1 -1
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Floe visual language — the single source of truth for planes, ink, state and
|
|
3
|
+
* elevation. Every component recipe derives from this file; nothing here is a
|
|
4
|
+
* component. A theme only supplies the six base colors, and the rest of the
|
|
5
|
+
* ladder is derived from them, so every preset inherits the same system.
|
|
6
|
+
*
|
|
7
|
+
* Four ideas carry the whole language:
|
|
8
|
+
*
|
|
9
|
+
* 1. Depth is a fill step, not a line. Planes separate by a few percent of ink;
|
|
10
|
+
* a hairline appears only where two planes would otherwise land on the same
|
|
11
|
+
* value. Cards therefore carry no border at rest.
|
|
12
|
+
* 2. One state ramp. Hover, press and selection are all percentages of ink —
|
|
13
|
+
* the same three alphas everywhere, so a row, a tab and a menu item respond
|
|
14
|
+
* with one gesture. Brand color never means "hovered".
|
|
15
|
+
* 3. Corners are concentric. A child radius is its parent's radius minus the
|
|
16
|
+
* gap between them, so nested groups never show a mismatched curve.
|
|
17
|
+
* 4. Motion is decisive. Short, decelerating, color-and-transform only.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
:root,
|
|
21
|
+
[data-floe-theme] {
|
|
22
|
+
/* ---------------------------------------------------------------------
|
|
23
|
+
* Planes — four steps of depth. `plane` is the page ground, `surface` is a
|
|
24
|
+
* content plane sitting on it, `well` is recessed into a surface (fields,
|
|
25
|
+
* code, rails, track backgrounds), `float` is lifted above everything with
|
|
26
|
+
* a real shadow. Values are derived so a preset only has to pick its canvas.
|
|
27
|
+
* ------------------------------------------------------------------- */
|
|
28
|
+
--floe-plane: var(--background);
|
|
29
|
+
--floe-plane-raised: var(--card);
|
|
30
|
+
--floe-plane-float: var(--popover);
|
|
31
|
+
--floe-well: color-mix(in srgb, var(--foreground) 4.5%, var(--card));
|
|
32
|
+
--floe-well-strong: color-mix(in srgb, var(--foreground) 7%, var(--card));
|
|
33
|
+
--floe-well-on-plane: color-mix(in srgb, var(--foreground) 4%, var(--background));
|
|
34
|
+
|
|
35
|
+
/* ---------------------------------------------------------------------
|
|
36
|
+
* Ink — a four-step reading ramp. `ink` is body, `ink-soft` secondary copy,
|
|
37
|
+
* `ink-quiet` metadata and icons that sit outside the reading path,
|
|
38
|
+
* `ink-ghost` placeholders and disabled. Never invent a fifth grey.
|
|
39
|
+
* ------------------------------------------------------------------- */
|
|
40
|
+
--floe-ink: var(--foreground);
|
|
41
|
+
--floe-ink-soft: var(--muted-foreground);
|
|
42
|
+
--floe-ink-quiet: color-mix(in srgb, var(--foreground) 62%, var(--background));
|
|
43
|
+
--floe-ink-ghost: color-mix(in srgb, var(--foreground) 44%, var(--background));
|
|
44
|
+
|
|
45
|
+
/* ---------------------------------------------------------------------
|
|
46
|
+
* Hairlines — one width (1px), three strengths. `line` separates equal-value
|
|
47
|
+
* planes, `line-strong` marks an editable boundary that must stay findable,
|
|
48
|
+
* `line-quiet` is a divider inside dense content.
|
|
49
|
+
* ------------------------------------------------------------------- */
|
|
50
|
+
--floe-line: color-mix(in srgb, var(--foreground) 9%, transparent);
|
|
51
|
+
--floe-line-strong: color-mix(in srgb, var(--foreground) 18%, transparent);
|
|
52
|
+
--floe-line-quiet: color-mix(in srgb, var(--foreground) 5.5%, transparent);
|
|
53
|
+
--floe-line-inverse: color-mix(in srgb, var(--primary-foreground) 16%, transparent);
|
|
54
|
+
|
|
55
|
+
/* ---------------------------------------------------------------------
|
|
56
|
+
* Fields — a well with a whisper of an edge. The fill (not a line) says
|
|
57
|
+
* "you can type here"; the edge exists so the well has a boundary at all,
|
|
58
|
+
* and it brightens on hover, then more on focus.
|
|
59
|
+
*
|
|
60
|
+
* The edge is calibrated against the field's own fill, not the card, since
|
|
61
|
+
* that is the pair that decides whether a boundary is visible. 22% ink is
|
|
62
|
+
* the lowest value where every preset lands inside the quiet band this
|
|
63
|
+
* repository already uses for idle fields (1.25–2:1, set for porcelain-dark
|
|
64
|
+
* in b80c3e8): it measures 1.26 at the narrowest (solarized-light) and 1.76
|
|
65
|
+
* at the widest (forest). 16% left ten presets below 1.25, and in the dark
|
|
66
|
+
* presets it collapsed onto the fill entirely.
|
|
67
|
+
*
|
|
68
|
+
* The resting edge is deliberately below the 3:1 of a hit-area boundary:
|
|
69
|
+
* the well fill, the visible label and the field's own text identify the
|
|
70
|
+
* control, and `--ring` carries the 3:1 focus boundary. A labelled text
|
|
71
|
+
* field is what WCAG 1.4.11 excepts; the check that guards this file
|
|
72
|
+
* enforces the band rather than letting the edge disappear.
|
|
73
|
+
* ------------------------------------------------------------------- */
|
|
74
|
+
--floe-field-fill: var(--floe-well);
|
|
75
|
+
--floe-field-fill-hover: var(--floe-well-strong);
|
|
76
|
+
--floe-field-edge: color-mix(in srgb, var(--foreground) 22%, var(--card));
|
|
77
|
+
--floe-field-edge-hover: color-mix(in srgb, var(--foreground) 32%, var(--card));
|
|
78
|
+
--floe-field-placeholder: color-mix(in srgb, var(--foreground) 42%, var(--background));
|
|
79
|
+
/* An unchecked box or switch has no fill of its own, so its boundary *is*
|
|
80
|
+
* the control and must clear 3:1 against every plane it can sit on. */
|
|
81
|
+
--floe-control-edge: color-mix(in srgb, var(--foreground) 50%, var(--card));
|
|
82
|
+
--floe-control-edge-hover: color-mix(in srgb, var(--foreground) 66%, var(--card));
|
|
83
|
+
|
|
84
|
+
/* ---------------------------------------------------------------------
|
|
85
|
+
* State — the only hover/press/selection values in the system. They are
|
|
86
|
+
* translucent so they compose over any plane without a second palette.
|
|
87
|
+
* ------------------------------------------------------------------- */
|
|
88
|
+
--floe-state-hover: color-mix(in srgb, var(--foreground) 5.5%, transparent);
|
|
89
|
+
--floe-state-press: color-mix(in srgb, var(--foreground) 9%, transparent);
|
|
90
|
+
--floe-state-selected: color-mix(in srgb, var(--primary) 8%, transparent);
|
|
91
|
+
--floe-state-selected-strong: color-mix(in srgb, var(--primary) 12%, transparent);
|
|
92
|
+
--floe-state-on-inverse-hover: color-mix(in srgb, var(--primary-foreground) 12%, transparent);
|
|
93
|
+
|
|
94
|
+
/* Accent — jade is the one chromatic voice: focus, selection and positive
|
|
95
|
+
* emphasis. It is never used for a resting surface. */
|
|
96
|
+
--floe-accent-ink: var(--ring);
|
|
97
|
+
--floe-accent-soft: color-mix(in srgb, var(--ring) 12%, transparent);
|
|
98
|
+
--floe-accent-line: color-mix(in srgb, var(--ring) 34%, transparent);
|
|
99
|
+
|
|
100
|
+
/* ---------------------------------------------------------------------
|
|
101
|
+
* Elevation — three steps, used sparingly. Resting cards get `none`; the
|
|
102
|
+
* hairline + fill step already separate them. `raised` is for interactive
|
|
103
|
+
* cards on hover, `float` for popovers, menus, dialogs and windows.
|
|
104
|
+
* ------------------------------------------------------------------- */
|
|
105
|
+
--floe-elevation-raised:
|
|
106
|
+
0 1px 2px -1px color-mix(in srgb, #000 8%, transparent),
|
|
107
|
+
0 1px 1px -0.5px color-mix(in srgb, #000 5%, transparent);
|
|
108
|
+
--floe-elevation-float:
|
|
109
|
+
0 12px 32px -8px color-mix(in srgb, #000 18%, transparent),
|
|
110
|
+
0 4px 10px -4px color-mix(in srgb, #000 10%, transparent),
|
|
111
|
+
0 1px 2px -1px color-mix(in srgb, #000 8%, transparent);
|
|
112
|
+
--floe-elevation-float-strong:
|
|
113
|
+
0 24px 56px -12px color-mix(in srgb, #000 26%, transparent),
|
|
114
|
+
0 8px 20px -8px color-mix(in srgb, #000 14%, transparent),
|
|
115
|
+
0 1px 2px -1px color-mix(in srgb, #000 8%, transparent);
|
|
116
|
+
|
|
117
|
+
/* ---------------------------------------------------------------------
|
|
118
|
+
* Shape — concentric ladder. sm 6 · md 8 · control 10 · group 12 ·
|
|
119
|
+
* card 16 · panel 20 · float 20. A 10px control inside a 16px card with
|
|
120
|
+
* 8px padding lands on 8px, which is md: the curve stays parallel.
|
|
121
|
+
* ------------------------------------------------------------------- */
|
|
122
|
+
--floe-radius-xs: 0.25rem;
|
|
123
|
+
--floe-radius-sm: 0.375rem;
|
|
124
|
+
--floe-radius-md: 0.5rem;
|
|
125
|
+
--floe-radius-control: 0.625rem;
|
|
126
|
+
--floe-radius-field: 0.625rem;
|
|
127
|
+
--floe-radius-group: 0.75rem;
|
|
128
|
+
--floe-radius-card: 1rem;
|
|
129
|
+
--floe-radius-panel: 1.25rem;
|
|
130
|
+
--floe-radius-floating: 1.25rem;
|
|
131
|
+
|
|
132
|
+
/* ---------------------------------------------------------------------
|
|
133
|
+
* Density — one control scale, one row scale. sm 28 · md 32 · lg 36.
|
|
134
|
+
* Rows sit at 30 so a list of rows reads calmer than a toolbar.
|
|
135
|
+
* ------------------------------------------------------------------- */
|
|
136
|
+
--floe-control-height-xs: 1.5rem;
|
|
137
|
+
--floe-control-height-sm: 1.75rem;
|
|
138
|
+
--floe-control-height-md: 2rem;
|
|
139
|
+
--floe-control-height-lg: 2.25rem;
|
|
140
|
+
--floe-control-padding-sm: 0.5rem;
|
|
141
|
+
--floe-control-padding-md: 0.625rem;
|
|
142
|
+
--floe-control-padding-lg: 0.875rem;
|
|
143
|
+
--floe-row-height: 1.875rem;
|
|
144
|
+
--floe-row-height-compact: 1.625rem;
|
|
145
|
+
|
|
146
|
+
/* ---------------------------------------------------------------------
|
|
147
|
+
* Box rhythm — five paddings and three gaps. A control pad keeps a 10px
|
|
148
|
+
* radius concentric inside a 12px group; a card pad is the gutter that
|
|
149
|
+
* makes a plane read as an object rather than a rectangle.
|
|
150
|
+
* ------------------------------------------------------------------- */
|
|
151
|
+
--floe-pad-tight: 0.375rem;
|
|
152
|
+
--floe-pad-control: 0.5rem;
|
|
153
|
+
--floe-pad-group: 0.75rem;
|
|
154
|
+
--floe-pad-card: 0.875rem;
|
|
155
|
+
--floe-pad-panel: 1rem;
|
|
156
|
+
--floe-gap-inline: 0.25rem;
|
|
157
|
+
--floe-gap-control: 0.375rem;
|
|
158
|
+
--floe-gap-group: 0.75rem;
|
|
159
|
+
--floe-gap-section: 1.25rem;
|
|
160
|
+
|
|
161
|
+
/* ---------------------------------------------------------------------
|
|
162
|
+
* Type — 11 caption · 12 supporting · 13 control and body · 16 heading.
|
|
163
|
+
* One step per role; no component picks its own size.
|
|
164
|
+
* ------------------------------------------------------------------- */
|
|
165
|
+
--floe-type-caption: 0.6875rem;
|
|
166
|
+
--floe-type-supporting: 0.75rem;
|
|
167
|
+
--floe-type-control: 0.8125rem;
|
|
168
|
+
--floe-type-body: 0.8125rem;
|
|
169
|
+
--floe-type-heading: 1rem;
|
|
170
|
+
--floe-type-heading-sm: 0.9375rem;
|
|
171
|
+
--floe-type-display: 1.375rem;
|
|
172
|
+
/* Below caption. Only decorative chips that must fit inside an 8-10px
|
|
173
|
+
* badge belong here — never running text, metadata or a control label. */
|
|
174
|
+
--floe-type-micro: 0.5rem;
|
|
175
|
+
--floe-type-nano: 0.4375rem;
|
|
176
|
+
--floe-line-caption: 0.9375rem;
|
|
177
|
+
--floe-line-control: 1.25rem;
|
|
178
|
+
--floe-line-body: 1.375rem;
|
|
179
|
+
--floe-line-heading: 1.375rem;
|
|
180
|
+
|
|
181
|
+
/* ---------------------------------------------------------------------
|
|
182
|
+
* Motion — one decelerating curve and one settle curve. Nothing bounces
|
|
183
|
+
* except a deliberate spring for a control that changes shape.
|
|
184
|
+
* ------------------------------------------------------------------- */
|
|
185
|
+
--floe-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
186
|
+
--floe-ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
187
|
+
--floe-ease-spring: cubic-bezier(0.34, 1.35, 0.64, 1);
|
|
188
|
+
--floe-duration-instant: 90ms;
|
|
189
|
+
--floe-duration-fast: 140ms;
|
|
190
|
+
--floe-duration-base: 200ms;
|
|
191
|
+
--floe-duration-slow: 280ms;
|
|
192
|
+
--floe-duration-float: 240ms;
|
|
193
|
+
--floe-hover-lift: -1px;
|
|
194
|
+
--floe-press-scale: 0.985;
|
|
195
|
+
--floe-hover-lift-strong: -2px;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/*
|
|
199
|
+
* The interaction primitives. Components compose these instead of writing
|
|
200
|
+
* their own hover recipes, which is what kept the old set inconsistent.
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
/* Every interactive surface moves through the same transition set. */
|
|
204
|
+
[data-floe-interactive] {
|
|
205
|
+
transition:
|
|
206
|
+
background-color var(--floe-duration-fast) var(--floe-ease-out),
|
|
207
|
+
border-color var(--floe-duration-fast) var(--floe-ease-out),
|
|
208
|
+
color var(--floe-duration-fast) var(--floe-ease-out),
|
|
209
|
+
box-shadow var(--floe-duration-base) var(--floe-ease-out),
|
|
210
|
+
transform var(--floe-duration-fast) var(--floe-ease-out);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* Rows, tabs, menu items: fill is transparent, so the state layer composes
|
|
214
|
+
* over whatever plane hosts them. A control that declares a surface part owns
|
|
215
|
+
* its own face (surface.css) and keeps the state layer off its fill, so a
|
|
216
|
+
* selected tab is not repainted by the generic selection tint. */
|
|
217
|
+
[data-floe-interactive]:where(
|
|
218
|
+
[data-floe-interactive='row'],
|
|
219
|
+
[data-floe-interactive='item']
|
|
220
|
+
):not([data-floe-surface-part]):hover {
|
|
221
|
+
background-color: var(--floe-state-hover);
|
|
222
|
+
color: var(--floe-ink);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
[data-floe-interactive]:where(
|
|
226
|
+
[data-floe-interactive='row'],
|
|
227
|
+
[data-floe-interactive='item']
|
|
228
|
+
):not([data-floe-surface-part]):active {
|
|
229
|
+
background-color: var(--floe-state-press);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
[data-floe-interactive]:not([data-floe-surface-part]):where(
|
|
233
|
+
[aria-selected='true'],
|
|
234
|
+
[data-selected='true']
|
|
235
|
+
) {
|
|
236
|
+
background-color: var(--floe-state-selected);
|
|
237
|
+
color: var(--floe-ink);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* Icon buttons rise a single step of ink on hover, in addition to the fill. */
|
|
241
|
+
[data-floe-interactive='icon']:hover {
|
|
242
|
+
color: var(--floe-ink);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/* Pressible controls settle rather than travel. */
|
|
246
|
+
[data-floe-interactive='press']:active {
|
|
247
|
+
transform: scale(var(--floe-press-scale));
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* Clickable planes rise one step and take the first elevation. A card is not a
|
|
251
|
+
* control: it travels instead of settling, and the shadow says it detached from
|
|
252
|
+
* the canvas rather than competing with the fill step. */
|
|
253
|
+
[data-floe-interactive='lift']:hover {
|
|
254
|
+
transform: translateY(var(--floe-hover-lift));
|
|
255
|
+
box-shadow: var(--floe-elevation-raised);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/*
|
|
259
|
+
* The field surface. One recipe for every editable boundary — text inputs,
|
|
260
|
+
* textareas, compound number/select fields, dropdown triggers and directory
|
|
261
|
+
* pickers — so a form never mixes two field looks. It is a filled well with a
|
|
262
|
+
* whisper edge, not a box: the fill carries the affordance, the edge only
|
|
263
|
+
* gives the well an end, and focus brightens the edge (see input-focus.css,
|
|
264
|
+
* which owns the color-only focus contract).
|
|
265
|
+
*/
|
|
266
|
+
@layer components {
|
|
267
|
+
.floe-field {
|
|
268
|
+
border: 1px solid var(--floe-field-edge);
|
|
269
|
+
border-radius: var(--floe-radius-field);
|
|
270
|
+
background-color: var(--floe-field-fill);
|
|
271
|
+
color: var(--floe-ink);
|
|
272
|
+
transition:
|
|
273
|
+
background-color var(--floe-duration-fast) var(--floe-ease-out),
|
|
274
|
+
border-color var(--floe-duration-fast) var(--floe-ease-out);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.floe-field:hover:not(:disabled):not([aria-disabled='true']) {
|
|
278
|
+
border-color: var(--floe-field-edge-hover);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.floe-field::placeholder {
|
|
282
|
+
color: var(--floe-field-placeholder);
|
|
283
|
+
opacity: 1;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.floe-field[aria-invalid='true'] {
|
|
287
|
+
border-color: color-mix(in srgb, var(--error) 62%, var(--card));
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.floe-field:disabled,
|
|
291
|
+
.floe-field[aria-disabled='true'] {
|
|
292
|
+
background-color: var(--floe-plane);
|
|
293
|
+
border-color: var(--floe-line);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
@media (prefers-reduced-motion: reduce) {
|
|
298
|
+
[data-floe-interactive] {
|
|
299
|
+
transition-duration: 1ms;
|
|
300
|
+
}
|
|
301
|
+
[data-floe-interactive='press']:active {
|
|
302
|
+
transform: none;
|
|
303
|
+
}
|
|
304
|
+
[data-floe-interactive='lift']:hover {
|
|
305
|
+
transform: none;
|
|
306
|
+
box-shadow: none;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
@media (forced-colors: active) {
|
|
311
|
+
:root,
|
|
312
|
+
[data-floe-theme] {
|
|
313
|
+
--floe-line: CanvasText;
|
|
314
|
+
--floe-line-strong: CanvasText;
|
|
315
|
+
--floe-state-hover: Highlight;
|
|
316
|
+
--floe-state-selected: Highlight;
|
|
317
|
+
--floe-elevation-float: none;
|
|
318
|
+
--floe-elevation-float-strong: none;
|
|
319
|
+
}
|
|
320
|
+
}
|
package/dist/primitives.css
CHANGED
|
@@ -1,26 +1,32 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/*
|
|
2
|
+
* Fonts, tracking, spacing, and the coarse-pointer touch scale.
|
|
3
|
+
*
|
|
4
|
+
* Shape, type, motion and elevation tokens live in `language.css`, the single
|
|
5
|
+
* source of truth for the visual scale. This file must not restate them: both
|
|
6
|
+
* used to declare the same names with different values, so whichever file was
|
|
7
|
+
* imported last silently won. What stays here is what `language.css` does not
|
|
8
|
+
* own, plus the touch overrides that must land on `body` instead of `:root`.
|
|
9
|
+
*/
|
|
2
10
|
:root {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
--floe-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
--
|
|
11
|
-
--
|
|
12
|
-
|
|
13
|
-
--floe-
|
|
14
|
-
--floe-
|
|
15
|
-
--floe-
|
|
11
|
+
/* `--radius` predates the language ladder and is still read by downstream
|
|
12
|
+
* consumers. Point it at the ladder rather than hard-coding a second control
|
|
13
|
+
* radius; the reference resolves at computed-value time, so import order no
|
|
14
|
+
* longer decides the result. */
|
|
15
|
+
--radius: var(--floe-radius-control);
|
|
16
|
+
|
|
17
|
+
/* Type: a precise geometric humanist voice with optical sizing. */
|
|
18
|
+
--font-sans: 'Inter', 'InterVariable', ui-sans-serif, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;
|
|
19
|
+
--font-mono: 'JetBrains Mono', 'SFMono-Regular', 'Fira Code', 'SF Mono', Menlo, Monaco, Consolas, monospace;
|
|
20
|
+
/* Soft tracking keeps rounded geometry from reading as loose at small sizes. */
|
|
21
|
+
--floe-tracking-tight: -0.02em;
|
|
22
|
+
--floe-tracking-normal: -0.011em;
|
|
23
|
+
--floe-tracking-caps: 0.06em;
|
|
24
|
+
|
|
16
25
|
--floe-space-1: 0.25rem;
|
|
17
26
|
--floe-space-2: 0.5rem;
|
|
18
27
|
--floe-space-3: 0.75rem;
|
|
19
28
|
--floe-space-4: 1rem;
|
|
20
29
|
--floe-space-6: 1.5rem;
|
|
21
|
-
--floe-radius-control: 0.375rem;
|
|
22
|
-
--floe-radius-group: 0.5rem;
|
|
23
|
-
--floe-radius-floating: 12px;
|
|
24
30
|
}
|
|
25
31
|
|
|
26
32
|
/* Action labels stay on one line; their containing toolbar owns reflow. */
|
package/dist/standalone.css
CHANGED
|
@@ -1,71 +1,71 @@
|
|
|
1
1
|
export declare const CLASSIC_LIGHT_CSS_TOKENS: {
|
|
2
2
|
'--floe-window-background': "var(--popover)";
|
|
3
3
|
'--floe-window-titlebar-background': "var(--popover)";
|
|
4
|
-
'--background': "#
|
|
5
|
-
'--foreground': "#
|
|
6
|
-
'--inline-code-foreground': "#
|
|
7
|
-
'--inline-code-background': "#
|
|
8
|
-
'--primary': "#
|
|
9
|
-
'--primary-foreground': "#
|
|
10
|
-
'--secondary': "#
|
|
11
|
-
'--secondary-foreground': "#
|
|
12
|
-
'--muted': "#
|
|
13
|
-
'--muted-foreground': "#
|
|
14
|
-
'--accent': "#
|
|
15
|
-
'--accent-foreground': "#
|
|
16
|
-
'--border': "#
|
|
17
|
-
'--input': "#
|
|
18
|
-
'--ring': "#
|
|
19
|
-
'--chrome-border': "#
|
|
4
|
+
'--background': "#f6f4ef";
|
|
5
|
+
'--foreground': "#1a1b19";
|
|
6
|
+
'--inline-code-foreground': "#1c6b57";
|
|
7
|
+
'--inline-code-background': "#eeebe4";
|
|
8
|
+
'--primary': "#1c1d1b";
|
|
9
|
+
'--primary-foreground': "#fbfaf7";
|
|
10
|
+
'--secondary': "#edeae3";
|
|
11
|
+
'--secondary-foreground': "#4a4b46";
|
|
12
|
+
'--muted': "#efede7";
|
|
13
|
+
'--muted-foreground': "#6b6a64";
|
|
14
|
+
'--accent': "#eeebe4";
|
|
15
|
+
'--accent-foreground': "#1a1b19";
|
|
16
|
+
'--border': "#e4e1d9";
|
|
17
|
+
'--input': "#c9c6bd";
|
|
18
|
+
'--ring': "#2f7d63";
|
|
19
|
+
'--chrome-border': "#eeebe4";
|
|
20
20
|
'--top-bar-border': "var(--chrome-border)";
|
|
21
21
|
'--activity-bar-border': "var(--chrome-border)";
|
|
22
22
|
'--bottom-bar-border': "var(--chrome-border)";
|
|
23
23
|
'--terminal-panel-border': "var(--chrome-border)";
|
|
24
|
-
'--card': "#
|
|
25
|
-
'--card-foreground': "#
|
|
26
|
-
'--popover': "#
|
|
27
|
-
'--popover-foreground': "#
|
|
28
|
-
'--success': "#
|
|
29
|
-
'--success-foreground': "#
|
|
30
|
-
'--warning': "#
|
|
31
|
-
'--warning-foreground': "#
|
|
32
|
-
'--error': "#
|
|
33
|
-
'--error-foreground': "#
|
|
34
|
-
'--info': "#
|
|
35
|
-
'--info-foreground': "#
|
|
36
|
-
'--highlight-block-info-accent': "oklch(0.52 0.
|
|
37
|
-
'--highlight-block-warning-accent': "oklch(0.
|
|
38
|
-
'--highlight-block-success-accent': "oklch(0.55 0.
|
|
39
|
-
'--highlight-block-error-accent': "oklch(0.55 0.
|
|
40
|
-
'--highlight-block-note-accent': "oklch(0.
|
|
41
|
-
'--highlight-block-tip-accent': "oklch(0.
|
|
42
|
-
'--sidebar': "#
|
|
43
|
-
'--sidebar-foreground': "#
|
|
44
|
-
'--sidebar-primary': "#
|
|
45
|
-
'--sidebar-primary-foreground': "#
|
|
46
|
-
'--sidebar-accent': "#
|
|
47
|
-
'--sidebar-accent-foreground': "#
|
|
48
|
-
'--sidebar-border': "#
|
|
49
|
-
'--sidebar-ring': "#
|
|
50
|
-
'--activity-bar': "#
|
|
51
|
-
'--activity-bar-foreground': "#
|
|
52
|
-
'--activity-bar-foreground-active': "#
|
|
53
|
-
'--activity-bar-badge': "#
|
|
54
|
-
'--activity-bar-badge-foreground': "#
|
|
55
|
-
'--terminal-background': "
|
|
56
|
-
'--terminal-foreground': "
|
|
57
|
-
'--chart-1': "
|
|
58
|
-
'--chart-2': "
|
|
59
|
-
'--chart-3': "
|
|
60
|
-
'--chart-4': "
|
|
61
|
-
'--chart-5': "
|
|
62
|
-
'--selection-bg': "
|
|
63
|
-
'--selection-fg': "
|
|
64
|
-
'--selection-on-primary-bg': "
|
|
65
|
-
'--selection-on-primary-fg': "
|
|
66
|
-
'--selection-code-bg': "
|
|
67
|
-
'--selection-code-fg': "
|
|
68
|
-
'--glow': "#
|
|
24
|
+
'--card': "#fefdfb";
|
|
25
|
+
'--card-foreground': "#1a1b19";
|
|
26
|
+
'--popover': "#fffefc";
|
|
27
|
+
'--popover-foreground': "#1a1b19";
|
|
28
|
+
'--success': "#227a50";
|
|
29
|
+
'--success-foreground': "#ffffff";
|
|
30
|
+
'--warning': "#8f5c0d";
|
|
31
|
+
'--warning-foreground': "#ffffff";
|
|
32
|
+
'--error': "#b8352c";
|
|
33
|
+
'--error-foreground': "#ffffff";
|
|
34
|
+
'--info': "#2a5f9e";
|
|
35
|
+
'--info-foreground': "#ffffff";
|
|
36
|
+
'--highlight-block-info-accent': "oklch(0.52 0.13 250)";
|
|
37
|
+
'--highlight-block-warning-accent': "oklch(0.64 0.13 72)";
|
|
38
|
+
'--highlight-block-success-accent': "oklch(0.55 0.12 160)";
|
|
39
|
+
'--highlight-block-error-accent': "oklch(0.55 0.17 27)";
|
|
40
|
+
'--highlight-block-note-accent': "oklch(0.53 0.15 292)";
|
|
41
|
+
'--highlight-block-tip-accent': "oklch(0.56 0.09 195)";
|
|
42
|
+
'--sidebar': "#f1efe9";
|
|
43
|
+
'--sidebar-foreground': "#1a1b19";
|
|
44
|
+
'--sidebar-primary': "#1c1d1b";
|
|
45
|
+
'--sidebar-primary-foreground': "#fbfaf7";
|
|
46
|
+
'--sidebar-accent': "#eeebe4";
|
|
47
|
+
'--sidebar-accent-foreground': "#1a1b19";
|
|
48
|
+
'--sidebar-border': "#e8e5dd";
|
|
49
|
+
'--sidebar-ring': "#2f7d63";
|
|
50
|
+
'--activity-bar': "#edeae3";
|
|
51
|
+
'--activity-bar-foreground': "#5f5f58";
|
|
52
|
+
'--activity-bar-foreground-active': "#1a1b19";
|
|
53
|
+
'--activity-bar-badge': "#1c1d1b";
|
|
54
|
+
'--activity-bar-badge-foreground': "#fbfaf7";
|
|
55
|
+
'--terminal-background': "#16171a";
|
|
56
|
+
'--terminal-foreground': "#e9e7e2";
|
|
57
|
+
'--chart-1': "#2f7d63";
|
|
58
|
+
'--chart-2': "#5f5f58";
|
|
59
|
+
'--chart-3': "#8f5c0d";
|
|
60
|
+
'--chart-4': "#b8352c";
|
|
61
|
+
'--chart-5': "#2a5f9e";
|
|
62
|
+
'--selection-bg': "#cde7db";
|
|
63
|
+
'--selection-fg': "#10211b";
|
|
64
|
+
'--selection-on-primary-bg': "#6fd0a8";
|
|
65
|
+
'--selection-on-primary-fg': "#082016";
|
|
66
|
+
'--selection-code-bg': "#bcded0";
|
|
67
|
+
'--selection-code-fg': "#0c1f18";
|
|
68
|
+
'--glow': "#2f7d63";
|
|
69
69
|
'--floe-window-foreground': "var(--foreground)";
|
|
70
70
|
'--floe-window-muted-foreground': "var(--muted-foreground)";
|
|
71
71
|
'--floe-window-border': "color-mix(in srgb, var(--floe-window-background) 88%, var(--foreground))";
|
|
@@ -74,71 +74,71 @@ export declare const CLASSIC_LIGHT_CSS_TOKENS: {
|
|
|
74
74
|
export declare const CLASSIC_DARK_CSS_TOKENS: {
|
|
75
75
|
'--floe-window-background': "var(--popover)";
|
|
76
76
|
'--floe-window-titlebar-background': "var(--popover)";
|
|
77
|
-
'--background': "#
|
|
78
|
-
'--foreground': "#
|
|
79
|
-
'--inline-code-foreground': "#
|
|
80
|
-
'--inline-code-background': "#
|
|
81
|
-
'--primary': "#
|
|
82
|
-
'--primary-foreground': "#
|
|
83
|
-
'--secondary': "#
|
|
84
|
-
'--secondary-foreground': "#
|
|
85
|
-
'--muted': "#
|
|
86
|
-
'--muted-foreground': "#
|
|
87
|
-
'--accent': "#
|
|
88
|
-
'--accent-foreground': "#
|
|
89
|
-
'--border': "#
|
|
90
|
-
'--input': "#
|
|
91
|
-
'--ring': "#
|
|
92
|
-
'--chrome-border': "#
|
|
77
|
+
'--background': "#0d0e0d";
|
|
78
|
+
'--foreground': "#e9e8e3";
|
|
79
|
+
'--inline-code-foreground': "#5fd6a8";
|
|
80
|
+
'--inline-code-background': "#17201c";
|
|
81
|
+
'--primary': "#e9e8e3";
|
|
82
|
+
'--primary-foreground': "#101110";
|
|
83
|
+
'--secondary': "#1e1f1e";
|
|
84
|
+
'--secondary-foreground': "#c3c4be";
|
|
85
|
+
'--muted': "#1b1c1b";
|
|
86
|
+
'--muted-foreground': "#93948d";
|
|
87
|
+
'--accent': "#242524";
|
|
88
|
+
'--accent-foreground': "#e9e8e3";
|
|
89
|
+
'--border': "#262726";
|
|
90
|
+
'--input': "#3b3c3a";
|
|
91
|
+
'--ring': "#62b898";
|
|
92
|
+
'--chrome-border': "#1a1b1a";
|
|
93
93
|
'--top-bar-border': "var(--chrome-border)";
|
|
94
94
|
'--activity-bar-border': "var(--chrome-border)";
|
|
95
95
|
'--bottom-bar-border': "var(--chrome-border)";
|
|
96
96
|
'--terminal-panel-border': "var(--chrome-border)";
|
|
97
|
-
'--card': "#
|
|
98
|
-
'--card-foreground': "#
|
|
99
|
-
'--popover': "#
|
|
100
|
-
'--popover-foreground': "#
|
|
101
|
-
'--success': "#
|
|
102
|
-
'--success-foreground': "#
|
|
103
|
-
'--warning': "#
|
|
104
|
-
'--warning-foreground': "#
|
|
105
|
-
'--error': "
|
|
106
|
-
'--error-foreground': "#
|
|
107
|
-
'--info': "
|
|
108
|
-
'--info-foreground': "#
|
|
109
|
-
'--highlight-block-info-accent': "oklch(0.
|
|
110
|
-
'--highlight-block-warning-accent': "oklch(0.
|
|
111
|
-
'--highlight-block-success-accent': "oklch(0.
|
|
112
|
-
'--highlight-block-error-accent': "oklch(0.
|
|
113
|
-
'--highlight-block-note-accent': "oklch(0.
|
|
114
|
-
'--highlight-block-tip-accent': "oklch(0.
|
|
115
|
-
'--sidebar': "#
|
|
116
|
-
'--sidebar-foreground': "#
|
|
117
|
-
'--sidebar-primary': "#
|
|
118
|
-
'--sidebar-primary-foreground': "#
|
|
119
|
-
'--sidebar-accent': "#
|
|
120
|
-
'--sidebar-accent-foreground': "#
|
|
121
|
-
'--sidebar-border': "#
|
|
122
|
-
'--sidebar-ring': "#
|
|
123
|
-
'--activity-bar': "#
|
|
124
|
-
'--activity-bar-foreground': "#
|
|
125
|
-
'--activity-bar-foreground-active': "#
|
|
126
|
-
'--activity-bar-badge': "#
|
|
127
|
-
'--activity-bar-badge-foreground': "#
|
|
128
|
-
'--terminal-background': "
|
|
129
|
-
'--terminal-foreground': "
|
|
130
|
-
'--chart-1': "
|
|
131
|
-
'--chart-2': "
|
|
132
|
-
'--chart-3': "
|
|
133
|
-
'--chart-4': "
|
|
134
|
-
'--chart-5': "
|
|
135
|
-
'--selection-bg': "
|
|
136
|
-
'--selection-fg': "
|
|
137
|
-
'--selection-on-primary-bg': "
|
|
138
|
-
'--selection-on-primary-fg': "
|
|
139
|
-
'--selection-code-bg': "
|
|
140
|
-
'--selection-code-fg': "
|
|
141
|
-
'--glow': "
|
|
97
|
+
'--card': "#161716";
|
|
98
|
+
'--card-foreground': "#e9e8e3";
|
|
99
|
+
'--popover': "#1a1b1a";
|
|
100
|
+
'--popover-foreground': "#e9e8e3";
|
|
101
|
+
'--success': "#62bf93";
|
|
102
|
+
'--success-foreground': "#07200f";
|
|
103
|
+
'--warning': "#d9ac5f";
|
|
104
|
+
'--warning-foreground': "#1d1607";
|
|
105
|
+
'--error': "#e8756b";
|
|
106
|
+
'--error-foreground': "#210907";
|
|
107
|
+
'--info': "#79a9e6";
|
|
108
|
+
'--info-foreground': "#061322";
|
|
109
|
+
'--highlight-block-info-accent': "oklch(0.7 0.12 248)";
|
|
110
|
+
'--highlight-block-warning-accent': "oklch(0.78 0.12 76)";
|
|
111
|
+
'--highlight-block-success-accent': "oklch(0.74 0.12 160)";
|
|
112
|
+
'--highlight-block-error-accent': "oklch(0.68 0.17 25)";
|
|
113
|
+
'--highlight-block-note-accent': "oklch(0.7 0.14 292)";
|
|
114
|
+
'--highlight-block-tip-accent': "oklch(0.7 0.09 192)";
|
|
115
|
+
'--sidebar': "#111211";
|
|
116
|
+
'--sidebar-foreground': "#e9e8e3";
|
|
117
|
+
'--sidebar-primary': "#e9e8e3";
|
|
118
|
+
'--sidebar-primary-foreground': "#101110";
|
|
119
|
+
'--sidebar-accent': "#242524";
|
|
120
|
+
'--sidebar-accent-foreground': "#e9e8e3";
|
|
121
|
+
'--sidebar-border': "#202120";
|
|
122
|
+
'--sidebar-ring': "#62b898";
|
|
123
|
+
'--activity-bar': "#0a0b0a";
|
|
124
|
+
'--activity-bar-foreground': "#8c8d86";
|
|
125
|
+
'--activity-bar-foreground-active': "#e9e8e3";
|
|
126
|
+
'--activity-bar-badge': "#62b898";
|
|
127
|
+
'--activity-bar-badge-foreground': "#07200f";
|
|
128
|
+
'--terminal-background': "#080908";
|
|
129
|
+
'--terminal-foreground': "#e2e1dc";
|
|
130
|
+
'--chart-1': "#62b898";
|
|
131
|
+
'--chart-2': "#93948d";
|
|
132
|
+
'--chart-3': "#d9ac5f";
|
|
133
|
+
'--chart-4': "#e8756b";
|
|
134
|
+
'--chart-5': "#79a9e6";
|
|
135
|
+
'--selection-bg': "#1f4a3a";
|
|
136
|
+
'--selection-fg': "#eafaf2";
|
|
137
|
+
'--selection-on-primary-bg': "#62b898";
|
|
138
|
+
'--selection-on-primary-fg': "#07200f";
|
|
139
|
+
'--selection-code-bg': "#2c6350";
|
|
140
|
+
'--selection-code-fg': "#eafaf2";
|
|
141
|
+
'--glow': "#62b898";
|
|
142
142
|
'--floe-window-foreground': "var(--foreground)";
|
|
143
143
|
'--floe-window-muted-foreground': "color-mix(in srgb, var(--muted-foreground) 72%, var(--foreground))";
|
|
144
144
|
'--floe-window-border': "color-mix(in srgb, var(--floe-window-background) 88%, var(--foreground))";
|