@getaster/elements 0.3.5 → 0.4.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/NOTICE +4 -0
- package/README.md +13 -4
- package/bin/aster-theme-check.js +35 -4
- package/dist/base/element.d.ts +8 -1
- package/dist/base/element.js +7 -2
- package/dist/button/button.d.ts +17 -2
- package/dist/button/button.js +42 -8
- package/dist/composition/builtins.d.ts +623 -1
- package/dist/composition/builtins.js +232 -4
- package/dist/date/calendar.d.ts +3 -0
- package/dist/date/calendar.js +8 -2
- package/dist/date/date-field.d.ts +23 -3
- package/dist/date/date-field.js +77 -9
- package/dist/date/dates.d.ts +10 -2
- package/dist/date/dates.js +23 -3
- package/dist/dialog/config.d.ts +4 -0
- package/dist/dialog/config.js +8 -0
- package/dist/dialog/dialog.d.ts +34 -6
- package/dist/dialog/dialog.js +151 -14
- package/dist/field/bound-field.d.ts +17 -1
- package/dist/field/bound-field.js +68 -7
- package/dist/field/check.js +1 -0
- package/dist/field/field.js +1 -1
- package/dist/field/input.d.ts +1 -0
- package/dist/field/input.js +2 -2
- package/dist/field/number-field.js +2 -2
- package/dist/filter/filter-builder.d.ts +7 -1
- package/dist/filter/filter-builder.js +8 -1
- package/dist/form/controls.d.ts +40 -8
- package/dist/form/controls.js +58 -15
- package/dist/form/custom-field.d.ts +1 -0
- package/dist/form/custom-field.js +23 -0
- package/dist/form/features.d.ts +27 -0
- package/dist/form/features.js +52 -0
- package/dist/form/form.d.ts +67 -7
- package/dist/form/form.js +267 -24
- package/dist/form/policy.d.ts +29 -0
- package/dist/form/policy.js +16 -0
- package/dist/grid/appearance.d.ts +365 -0
- package/dist/grid/appearance.js +814 -0
- package/dist/grid/features.d.ts +38 -0
- package/dist/grid/features.js +78 -0
- package/dist/grid/grid.d.ts +216 -4
- package/dist/grid/grid.js +1810 -308
- package/dist/grid/policy.d.ts +58 -0
- package/dist/grid/policy.js +17 -0
- package/dist/grid/view.d.ts +32 -2
- package/dist/grid/view.js +89 -4
- package/dist/index.d.ts +14 -11
- package/dist/index.js +2 -1
- package/dist/menu/config.d.ts +7 -0
- package/dist/menu/config.js +44 -0
- package/dist/menu/menu.d.ts +23 -0
- package/dist/menu/menu.js +69 -17
- package/dist/picker/picker.js +8 -3
- package/dist/section/accordion.d.ts +26 -0
- package/dist/section/accordion.js +86 -8
- package/dist/section/policy.d.ts +8 -0
- package/dist/section/policy.js +17 -0
- package/dist/section/section.d.ts +30 -0
- package/dist/section/section.js +106 -3
- package/dist/select/choice-element.d.ts +12 -0
- package/dist/select/choice-element.js +36 -0
- package/dist/select/choice.d.ts +12 -2
- package/dist/select/choice.js +93 -28
- package/dist/select/select.d.ts +12 -0
- package/dist/select/select.js +37 -1
- package/dist/styles/contract.d.ts +14 -0
- package/dist/styles/contract.js +15 -0
- package/dist/switch/switch.d.ts +16 -0
- package/dist/switch/switch.js +56 -6
- package/dist/tree/navigator.d.ts +3 -0
- package/dist/tree/navigator.js +26 -2
- package/dist/window/chrome.d.ts +5 -1
- package/dist/window/chrome.js +4 -3
- package/dist/window/config.d.ts +71 -0
- package/dist/window/config.js +40 -0
- package/dist/window/window.d.ts +51 -13
- package/dist/window/window.js +233 -38
- package/dist/yaml.d.ts +19 -0
- package/dist/yaml.js +57 -0
- package/package.json +10 -4
- package/styles/aster-ui.css +181 -10
- package/styles/base.css +14 -0
- package/styles/contract.ts +16 -0
- package/styles/elements.css +167 -10
- package/styles/fonts/OFL-bricolage-grotesque.txt +93 -0
- package/styles/fonts/OFL-fraunces.txt +93 -0
- package/styles/fonts/bricolage-grotesque-latin-opsz-normal.woff2 +0 -0
- package/styles/fonts/fraunces-latin-full-normal.woff2 +0 -0
- package/styles/fonts.css +17 -0
- package/styles/theme-harbour.css +5 -0
- package/styles/theme-lamplight.css +5 -0
package/styles/elements.css
CHANGED
|
@@ -50,6 +50,8 @@
|
|
|
50
50
|
.aster-number:has(.aster-number-steps) { height:auto; min-height:48px; }
|
|
51
51
|
.aster-number-steps button, .aster-split-tools button, .aster-breadcrumbs :is(a,button) { min-width:44px; min-height:44px; }
|
|
52
52
|
.aster-accordion > .aster-accordion-item > aster-section > .aster-section-head button { min-height:44px; }
|
|
53
|
+
.aster-accordion-reorder button { width:44px; height:44px; }
|
|
54
|
+
.aster-section-head > .aster-section-close { width:44px; height:44px; }
|
|
53
55
|
}
|
|
54
56
|
@media (forced-colors:active) { .aster-number-steps button { border:1px solid ButtonText; } }
|
|
55
57
|
aster-component { display: block; min-width: 0; }
|
|
@@ -163,6 +165,17 @@
|
|
|
163
165
|
.aster-button[aria-busy="true"] .aster-label-swap { opacity: .75; }
|
|
164
166
|
.aster-button[aria-disabled="true"] { opacity: .45; box-shadow: var(--aster-ring); transform: none; }
|
|
165
167
|
.aster-button[data-variant="primary"][aria-disabled="true"] { background: var(--aster-text-3); }
|
|
168
|
+
.aster-button[data-tone="danger"] { color: var(--aster-negative); box-shadow: inset 0 0 0 .5px oklch(from var(--aster-negative) l c h / .55), var(--aster-e1); }
|
|
169
|
+
.aster-button[data-tone="danger"]:hover { background: oklch(from var(--aster-negative) l c h / .08); box-shadow: inset 0 0 0 .5px var(--aster-negative), var(--aster-e2); }
|
|
170
|
+
.aster-button[data-tone="danger"]:active { box-shadow: inset 1px 1px 2px var(--aster-press), inset 0 0 0 .5px var(--aster-negative); }
|
|
171
|
+
.aster-button[data-size="sm"] { height: var(--aster-ctl-tight); padding: 0 8px; font-size: 12.5px; }
|
|
172
|
+
.aster-button[data-size="lg"] { height: var(--aster-ctl); padding: 0 16px; font-size: 13.5px; }
|
|
173
|
+
@media (forced-colors: active) {
|
|
174
|
+
/* The button edge is a shadow; forced colours drop shadows, so draw it. */
|
|
175
|
+
.aster-button { border: 1px solid ButtonText; }
|
|
176
|
+
.aster-button[aria-disabled="true"], .aster-button:disabled { border-color: GrayText; color: GrayText; }
|
|
177
|
+
}
|
|
178
|
+
.aster-button:disabled { opacity: .45; box-shadow: var(--aster-ring); cursor: not-allowed; transform: none; }
|
|
166
179
|
.aster-button svg { width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-width: 1.7; }
|
|
167
180
|
.aster-label-swap { display: inline-grid; }
|
|
168
181
|
.aster-label-swap > * { grid-area: 1 / 1; transition: opacity 120ms; }
|
|
@@ -201,6 +214,10 @@
|
|
|
201
214
|
aster-switch:last-child { border-bottom: 0; }
|
|
202
215
|
aster-switch .aster-error { padding-bottom: 8px; }
|
|
203
216
|
.aster-switch-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: calc(var(--aster-row-y) + 2px) 0; user-select: none; }
|
|
217
|
+
.aster-switch-end { display: flex; align-items: center; gap: 10px; flex: none; }
|
|
218
|
+
.aster-switch-state { font-size: 12px; color: var(--aster-text-3); }
|
|
219
|
+
.aster-switch-row[data-disabled] { opacity: .55; }
|
|
220
|
+
.aster-switch-row[data-disabled], .aster-switch-row[data-readonly] { cursor: default; }
|
|
204
221
|
.aster-switch {
|
|
205
222
|
position: relative; width: 28px; height: 16px; flex: none; border-radius: 999px;
|
|
206
223
|
background: var(--aster-sunk); box-shadow: var(--aster-well); transition: background var(--aster-t-micro);
|
|
@@ -261,10 +278,16 @@
|
|
|
261
278
|
.aster-dialog[open]::backdrop { opacity: 1; }
|
|
262
279
|
@starting-style { .aster-dialog[open]::backdrop { opacity: 0; } }
|
|
263
280
|
.aster-dialog-panel {
|
|
264
|
-
width: var(--dialog-width, 372px); max-width: 100
|
|
281
|
+
width: var(--dialog-width, 372px); max-width: min(var(--aster-dialog-max-width), 100%); border-radius: var(--aster-r-dialog); overflow: hidden;
|
|
265
282
|
background: var(--aster-surface); box-shadow: var(--aster-e3);
|
|
266
283
|
view-transition-name: aster-dialog-panel; corner-shape: squircle;
|
|
267
284
|
}
|
|
285
|
+
.aster-dialog-head { display: flex; align-items: center; gap: 8px; padding: 12px 10px 0 16px; }
|
|
286
|
+
.aster-dialog-title { flex: 1; min-width: 0; margin: 0; font-size: 15px; font-weight: var(--aster-weight-strong); }
|
|
287
|
+
.aster-dialog-close { display: grid; place-items: center; flex: none; width: var(--aster-ctl); height: var(--aster-ctl); border-radius: var(--aster-r-ctl); color: var(--aster-text-2); }
|
|
288
|
+
.aster-dialog-close:hover { background: var(--aster-accent-soft); color: var(--aster-text); }
|
|
289
|
+
.aster-dialog-close svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.4; stroke-linecap: round; }
|
|
290
|
+
.aster-dialog-footer { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--aster-rule-2); }
|
|
268
291
|
::view-transition-group(aster-dialog-panel) { animation-duration: var(--aster-t-morph); animation-timing-function: var(--aster-ease); }
|
|
269
292
|
::view-transition-old(aster-dialog-panel) { animation: 90ms ease both aster-vt-out; }
|
|
270
293
|
::view-transition-new(aster-dialog-panel) { animation: var(--aster-t-ink) ease 80ms both aster-vt-in; }
|
|
@@ -298,12 +321,22 @@
|
|
|
298
321
|
/* Against an element, and every submenu: anchor positioning, flipping at the edges. */
|
|
299
322
|
.aster-menu[data-anchored] { left: auto; top: auto; translate: none; margin: 4px 0; position-area: bottom span-right; position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline; }
|
|
300
323
|
.aster-menu[data-depth]:not([data-depth="0"]) { margin: 0 2px; position-area: right span-bottom; position-try-fallbacks: flip-inline, flip-block, flip-inline flip-block; }
|
|
301
|
-
.aster-menu
|
|
324
|
+
.aster-menu[data-depth]:not([data-depth="0"])[data-submenu="end"] { position-area: right span-bottom; position-try-fallbacks: flip-block; }
|
|
325
|
+
.aster-menu[data-depth]:not([data-depth="0"])[data-submenu="start"] { position-area: left span-bottom; position-try-fallbacks: flip-block; }
|
|
326
|
+
:dir(rtl) .aster-menu[data-depth]:not([data-depth="0"])[data-submenu="end"] { position-area: left span-bottom; }
|
|
327
|
+
:dir(rtl) .aster-menu[data-depth]:not([data-depth="0"])[data-submenu="start"] { position-area: right span-bottom; }
|
|
328
|
+
.aster-menu [role^="menuitem"] { display: flex; align-items: center; gap: 6px; min-height: var(--aster-menu-cell-height); padding: var(--aster-row-y) 10px var(--aster-row-y) 6px; border-radius: var(--aster-r-ctl); text-align: left; }
|
|
302
329
|
.aster-menu [role^="menuitem"]:hover, .aster-menu [role^="menuitem"]:focus, .aster-menu [aria-expanded="true"] { background: var(--aster-accent-soft); outline: none; }
|
|
303
330
|
.aster-menu [role^="menuitem"]:focus-visible { outline: 2px solid var(--aster-focus); outline-offset: -2px; }
|
|
304
331
|
.aster-menu [aria-disabled="true"] { color: var(--aster-text-3); }
|
|
305
332
|
.aster-menu-mark { width: 12px; flex: none; text-align: center; color: var(--aster-accent); }
|
|
333
|
+
.aster-menu-icon { display: grid; place-items: center; flex: none; width: calc(var(--aster-menu-icon-size) + 2px); color: var(--aster-text-2); }
|
|
334
|
+
.aster-menu-icon svg { width: var(--aster-menu-icon-size); height: var(--aster-menu-icon-size); fill: none; stroke: currentColor; stroke-width: 1.4; }
|
|
335
|
+
.aster-menu-shortcut { margin-inline-start: auto; padding-inline-start: 24px; color: var(--aster-text-3); font-size: 11.5px; white-space: nowrap; }
|
|
336
|
+
.aster-menu-shortcut + .aster-menu-more { margin-left: 8px; padding-left: 0; }
|
|
306
337
|
.aster-menu-more { margin-left: auto; padding-left: 16px; color: var(--aster-text-3); }
|
|
338
|
+
.aster-menu-empty { padding: calc(var(--aster-row-y) + 2px) 10px; color: var(--aster-text-2); font-size: 12.5px; }
|
|
339
|
+
.aster-menu:focus-visible { outline: 2px solid var(--aster-focus); outline-offset: 2px; }
|
|
307
340
|
.aster-menu-separator { height: 1px; margin: 4px 6px; background: var(--aster-rule-2); }
|
|
308
341
|
.aster-menu-heading { padding: var(--aster-row-y) 10px 2px 24px; font-size: 11.5px; font-weight: var(--aster-weight-label); color: var(--aster-text-3); }
|
|
309
342
|
|
|
@@ -326,6 +359,9 @@
|
|
|
326
359
|
.aster-list-edit-row[data-new] .aster-field { box-shadow: var(--aster-well), inset 2px 0 0 var(--aster-accent); }
|
|
327
360
|
[data-readonly] .aster-field { background: transparent; box-shadow: inset 0 0 0 .5px var(--aster-rule); }
|
|
328
361
|
[data-readonly] .aster-field :is(input, select) { color: var(--aster-text-2); }
|
|
362
|
+
[data-disabled] .aster-field { background: var(--aster-sunk); opacity: .6; }
|
|
363
|
+
[data-disabled] .aster-field :is(input, textarea) { cursor: not-allowed; }
|
|
364
|
+
[data-disabled] .aster-field-head { opacity: .6; }
|
|
329
365
|
|
|
330
366
|
/* ── check ── */
|
|
331
367
|
aster-check { display: grid; gap: 6px; }
|
|
@@ -336,6 +372,15 @@
|
|
|
336
372
|
.aster-select-value { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; outline: none; user-select: none; }
|
|
337
373
|
.aster-select-value[data-placeholder] { color: var(--aster-text-3); }
|
|
338
374
|
[data-readonly] .aster-select-value { color: var(--aster-text-2); }
|
|
375
|
+
.aster-select:has([aria-disabled="true"]) { opacity: .55; cursor: not-allowed; }
|
|
376
|
+
.aster-select-clear {
|
|
377
|
+
display: grid; place-items: center; flex: none; width: 18px; height: 18px; border-radius: 999px;
|
|
378
|
+
color: var(--aster-text-2);
|
|
379
|
+
}
|
|
380
|
+
.aster-select-clear:hover { background: oklch(from var(--aster-text) l c h / .08); color: var(--aster-text); }
|
|
381
|
+
.aster-select-clear:focus-visible { outline: 2px solid var(--aster-focus); outline-offset: -1px; }
|
|
382
|
+
.aster-select-clear svg { width: 10px; height: 10px; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; }
|
|
383
|
+
.aster-choice-empty { padding: var(--aster-row-y) 10px; color: var(--aster-text-2); font-size: 12.5px; }
|
|
339
384
|
|
|
340
385
|
/* ── picker ── */
|
|
341
386
|
.aster-picker { position: relative; }
|
|
@@ -350,18 +395,28 @@
|
|
|
350
395
|
aster-window { display: contents; }
|
|
351
396
|
.aster-window {
|
|
352
397
|
position: fixed; inset: auto; margin: 0; left: var(--window-x, auto); top: var(--window-y, 24px); right: auto;
|
|
353
|
-
display: none; flex-direction: column; width: 340px; height: 420px;
|
|
354
|
-
|
|
398
|
+
display: none; flex-direction: column; width: 340px; height: 420px;
|
|
399
|
+
min-width: min(240px, var(--window-cap-width, calc(100vw - 16px))); min-height: min(160px, var(--window-cap-height, calc(100dvh - 16px)));
|
|
400
|
+
max-width: var(--window-cap-width, calc(100vw - 16px)); max-height: var(--window-cap-height, calc(100dvh - 16px));
|
|
401
|
+
padding: 0; border: 0; overflow: hidden; resize: both;
|
|
355
402
|
border-radius: var(--aster-r-pop); background: var(--aster-surface); color: inherit; box-shadow: var(--aster-e3);
|
|
356
403
|
}
|
|
357
404
|
.aster-window:popover-open { display: flex; }
|
|
405
|
+
/* A modal window is a native dialog's child: the dialog supplies inertness and focus containment. */
|
|
406
|
+
.aster-window-modal {
|
|
407
|
+
position: fixed; inset: 0; width: auto; height: auto; max-width: none; max-height: none;
|
|
408
|
+
margin: 0; padding: 0; border: 0; background: transparent; overflow: visible;
|
|
409
|
+
}
|
|
410
|
+
.aster-window-modal::backdrop { background: var(--aster-scrim); }
|
|
411
|
+
.aster-window-modal[open] > .aster-window { display: flex; }
|
|
412
|
+
.aster-window[data-resizer="false"] { resize: none; }
|
|
358
413
|
.aster-window[data-state="maximized"] {
|
|
359
414
|
left: 8px; top: 8px; width: calc(100vw - 16px) !important; height: calc(100dvh - 16px) !important; resize: none;
|
|
360
415
|
}
|
|
361
416
|
.aster-window[data-active="true"] { outline: 1px solid var(--aster-rule); }
|
|
362
417
|
.aster-window:focus-visible { outline: 2px solid var(--aster-focus); outline-offset: 2px; }
|
|
363
418
|
.aster-window-bar {
|
|
364
|
-
display: flex; align-items: center; gap: 2px; padding: calc(var(--aster-pad) / 2) 6px calc(var(--aster-pad) / 2) 14px; cursor: grab; touch-action: none; user-select: none;
|
|
419
|
+
display: flex; align-items: center; gap: 2px; min-height: var(--aster-window-header-height); padding: calc(var(--aster-pad) / 2) 6px calc(var(--aster-pad) / 2) 14px; cursor: grab; touch-action: none; user-select: none;
|
|
365
420
|
border-bottom: 1px solid var(--aster-rule-2);
|
|
366
421
|
}
|
|
367
422
|
.aster-window-bar:active { cursor: grabbing; }
|
|
@@ -378,6 +433,8 @@
|
|
|
378
433
|
.aster-window-bar .aster-window-move, .aster-window-bar button[aria-describedby$="-resize-help"] { display:none; }
|
|
379
434
|
}
|
|
380
435
|
.aster-window-body { flex: 1; min-height: 0; overflow: auto; padding: var(--aster-pad) 14px; }
|
|
436
|
+
.aster-window-footer { flex: none; padding: calc(var(--aster-pad) / 2) 14px; border-top: 1px solid var(--aster-rule-2); }
|
|
437
|
+
.aster-window-status { flex: none; padding: 3px 14px; border-top: 1px solid var(--aster-rule-2); color: var(--aster-text-2); font-size: 11.5px; }
|
|
381
438
|
/* Dashboard geometry stays in CSS; stored sizes are column/row intent. */
|
|
382
439
|
aster-dashboard { display: block; min-width: 0; container-type: inline-size; }
|
|
383
440
|
.aster-dashboard-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-auto-rows: var(--dashboard-row, 300px); gap: var(--dashboard-gap, 16px); }
|
|
@@ -427,6 +484,8 @@
|
|
|
427
484
|
.aster-calendar td[role="gridcell"]:hover { background: var(--aster-accent-soft); }
|
|
428
485
|
.aster-calendar td[aria-current="date"] { font-weight: var(--aster-weight-label); color: var(--aster-accent); }
|
|
429
486
|
.aster-calendar td[aria-selected="true"] { background: var(--aster-accent); color: var(--aster-on-accent); }
|
|
487
|
+
.aster-calendar td[aria-disabled="true"] { color: var(--aster-text-3); text-decoration: line-through; cursor: not-allowed; }
|
|
488
|
+
.aster-calendar td[aria-disabled="true"]:hover { background: none; }
|
|
430
489
|
.aster-calendar td:focus { outline: 2px solid var(--aster-focus); outline-offset: -2px; }
|
|
431
490
|
.aster-picker-list {
|
|
432
491
|
min-width: anchor-size(width); max-width: min(480px, 100vw - 32px); max-height: min(280px, 45vh); overflow: auto;
|
|
@@ -503,11 +562,34 @@
|
|
|
503
562
|
|
|
504
563
|
/* ── section ── */
|
|
505
564
|
aster-section { display: block; }
|
|
565
|
+
.aster-accordion-tools { display: flex; justify-content: flex-end; padding-bottom: 4px; }
|
|
566
|
+
.aster-accordion-tools button { min-height: var(--aster-ctl); padding: 0 8px; border-radius: var(--aster-r-ctl); color: var(--aster-accent); font-size: 12.5px; font-weight: var(--aster-weight-strong); }
|
|
567
|
+
.aster-accordion-tools button:hover { background: var(--aster-accent-soft); }
|
|
568
|
+
.aster-accordion-reorder { display: inline-flex; gap: 2px; }
|
|
569
|
+
.aster-accordion-reorder button { width: var(--aster-ctl); height: var(--aster-ctl); border-radius: var(--aster-r-ctl); color: var(--aster-text-2); }
|
|
570
|
+
.aster-accordion-reorder button:hover:not(:disabled) { background: var(--aster-accent-soft); color: var(--aster-text); }
|
|
571
|
+
.aster-accordion-reorder button:disabled { opacity: .4; }
|
|
506
572
|
.aster-section-head { display: flex; align-items: center; gap: 10px; margin: 0; padding: var(--aster-pad) 0 calc(var(--aster-pad) - 4px); font: inherit; border-bottom: 1px solid var(--aster-rule-2); }
|
|
507
573
|
.aster-section-head button { display: flex; align-items: center; gap: 8px; font-size: 13.5px; font-weight: var(--aster-weight-strong); color: var(--aster-text); }
|
|
508
574
|
.aster-section-head svg { width: 10px; height: 10px; fill: none; stroke: currentColor; stroke-width: 1.5; transition: rotate var(--aster-t-micro) var(--aster-ease); }
|
|
509
|
-
aster-section[data-open] > .aster-section-head > button > svg { rotate: 90deg; }
|
|
575
|
+
aster-section[data-open] > .aster-section-head > button:not(.aster-section-close) > svg { rotate: 90deg; }
|
|
576
|
+
.aster-section-title { font-size: 13.5px; font-weight: var(--aster-weight-strong); color: var(--aster-text); }
|
|
510
577
|
.aster-section-summary { font-size: 12px; color: var(--aster-text-3); }
|
|
578
|
+
.aster-section-head > .aster-section-close {
|
|
579
|
+
flex: none; display: grid; place-items: center; width: calc(var(--aster-ctl) - 2px); height: calc(var(--aster-ctl) - 2px);
|
|
580
|
+
border-radius: var(--aster-r-ctl); color: var(--aster-text-2);
|
|
581
|
+
}
|
|
582
|
+
.aster-section-head > .aster-section-close:hover { background: var(--aster-accent-soft); color: var(--aster-text); }
|
|
583
|
+
.aster-section-head > .aster-section-close:focus-visible { outline: 2px solid var(--aster-focus); outline-offset: -2px; }
|
|
584
|
+
.aster-section-close svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.4; stroke-linecap: round; }
|
|
585
|
+
/* The window bar without its drag affordance: an in-flow panel. */
|
|
586
|
+
aster-section > .aster-window-bar { cursor: default; touch-action: auto; user-select: auto; }
|
|
587
|
+
aster-section > .aster-window-bar > h2 { display: flex; align-items: baseline; gap: 6px; }
|
|
588
|
+
.aster-window-bar .aster-section-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
589
|
+
.aster-window-bar .aster-section-summary { flex: none; font-weight: var(--aster-weight); }
|
|
590
|
+
.aster-window-bar .aster-section-fold svg { transition: rotate var(--aster-t-micro) var(--aster-ease); }
|
|
591
|
+
aster-section[data-open] > .aster-window-bar > .aster-section-fold svg { rotate: 180deg; }
|
|
592
|
+
.aster-section-footer { margin-top: var(--aster-pad); padding-top: calc(var(--aster-pad) - 4px); border-top: 1px solid var(--aster-rule-2); }
|
|
511
593
|
/* Height animates as a grid track, so nothing is measured in JS. */
|
|
512
594
|
.aster-section-body { display: grid; grid-template-rows: 0fr; transition: grid-template-rows var(--aster-t-morph) var(--aster-ease); }
|
|
513
595
|
aster-section[data-open] > .aster-section-body { grid-template-rows: 1fr; }
|
|
@@ -518,9 +600,26 @@
|
|
|
518
600
|
aster-form { display: block; container-type: inline-size; }
|
|
519
601
|
.aster-form-grid { display: grid; grid-template-columns: repeat(var(--columns, 2), minmax(0, 1fr)); gap: var(--aster-gap) calc(var(--aster-gap) + 4px); padding: var(--aster-gap) 0 calc(var(--aster-gap) + 4px); }
|
|
520
602
|
.aster-form-grid > * { grid-column: span min(var(--span, 1), var(--columns, 2)); }
|
|
603
|
+
.aster-form-summary {
|
|
604
|
+
margin: 0 0 var(--aster-gap); padding: var(--aster-pad); border-radius: var(--aster-r-card);
|
|
605
|
+
background: var(--aster-sunk); box-shadow: inset 0 0 0 .5px var(--aster-negative), var(--aster-well);
|
|
606
|
+
}
|
|
607
|
+
.aster-form-summary-title { margin: 0 0 4px; color: var(--aster-negative); font-size: 13px; font-weight: var(--aster-weight-strong); }
|
|
608
|
+
.aster-form-summary-form { margin: 4px 0; color: var(--aster-text); font-size: 12.5px; }
|
|
609
|
+
.aster-form-summary ul { display: grid; gap: 2px; margin: 0; padding-left: 18px; }
|
|
610
|
+
.aster-form-summary button { color: var(--aster-negative); font-size: 12.5px; text-align: left; text-decoration: underline; text-underline-offset: 2px; border-radius: 2px; }
|
|
611
|
+
.aster-form-summary button:focus-visible { outline: 2px solid var(--aster-focus); outline-offset: 1px; }
|
|
612
|
+
aster-form[data-title-orientation="start"] .aster-form-grid > * {
|
|
613
|
+
display: grid; grid-template-columns: var(--aster-form-label-width, 9rem) minmax(0, 1fr);
|
|
614
|
+
column-gap: var(--aster-gap); row-gap: 6px; align-items: start;
|
|
615
|
+
}
|
|
616
|
+
aster-form[data-title-orientation="start"] .aster-form-grid > * > .aster-field-head { grid-column: 1; grid-row: 1; align-self: center; }
|
|
617
|
+
aster-form[data-title-orientation="start"] .aster-form-grid > * > :not(.aster-field-head) { grid-column: 2; }
|
|
521
618
|
@container (max-width: 520px) {
|
|
522
619
|
.aster-form-grid { grid-template-columns: minmax(0, 1fr); }
|
|
523
620
|
.aster-form-grid > * { grid-column: auto; }
|
|
621
|
+
aster-form[data-title-orientation="start"] .aster-form-grid > * { display: grid; grid-template-columns: minmax(0, 1fr); }
|
|
622
|
+
aster-form[data-title-orientation="start"] .aster-form-grid > * > :not(.aster-field-head) { grid-column: auto; }
|
|
524
623
|
}
|
|
525
624
|
|
|
526
625
|
/* ── split ── */
|
|
@@ -680,11 +779,22 @@
|
|
|
680
779
|
|
|
681
780
|
/* ── grid ── */
|
|
682
781
|
aster-grid { position: relative; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; min-height: 0; container: aster-grid / inline-size; }
|
|
782
|
+
/* The chrome row is always present: a hidden toolbar leaves it empty, and the table still takes the middle row. */
|
|
783
|
+
/* A hidden header stays in the accessibility tree so columnheader names and aria-rowcount arithmetic survive. */
|
|
784
|
+
.aster-grid-scroll[data-head-hidden] .aster-grid-head { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
|
|
683
785
|
|
|
684
786
|
aster-grid[data-dragging], aster-grid[data-dragging] * { cursor: grabbing; }
|
|
685
|
-
.aster-grid-
|
|
787
|
+
.aster-grid-chrome { min-width: 0; }
|
|
788
|
+
.aster-grid-toolbar { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: 4px; min-height: var(--aster-grid-toolbar-height); padding: var(--aster-row-y) 12px; border-bottom: 1px solid var(--aster-rule-2); }
|
|
789
|
+
/* Drift lives outside the toolbar: hiding the toolbar cannot silence it. */
|
|
790
|
+
.aster-grid-drift { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; padding: var(--aster-row-y) 12px; border-bottom: 1px solid var(--aster-rule-2); font-size: 12.5px; color: var(--aster-text-2); background: var(--aster-surface); }
|
|
791
|
+
.aster-grid-drift > span { flex: 1; min-width: 0; }
|
|
792
|
+
.aster-grid-drift button { flex: none; color: var(--aster-accent); font-weight: var(--aster-weight-label); }
|
|
793
|
+
.aster-grid-paging { display: flex; align-items: center; gap: 4px; padding: var(--aster-row-y) 12px; border-bottom: 1px solid var(--aster-rule-2); background: var(--aster-surface); }
|
|
794
|
+
.aster-grid-page { flex: 1; min-width: 0; text-align: center; font-size: 12.5px; color: var(--aster-text-2); font-variant-numeric: tabular-nums; }
|
|
795
|
+
.aster-grid-paging button:disabled { opacity: .4; }
|
|
686
796
|
.aster-grid-group-tools { display: inline-flex; align-items: center; max-width: 100%; }
|
|
687
|
-
.aster-grid-summary { flex: none; padding: var(--aster-row-y) 12px; border-top: 1px solid var(--aster-rule-2); font-size: 12.5px; }
|
|
797
|
+
.aster-grid-summary { flex: none; min-height: var(--aster-grid-summary-height); padding: var(--aster-row-y) 12px; border-top: 1px solid var(--aster-rule-2); font-size: 12.5px; }
|
|
688
798
|
.aster-grid-summary dl { display: flex; flex-wrap: wrap; gap: 8px 24px; margin: 0; }
|
|
689
799
|
.aster-grid-summary dl > div { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; min-width: 0; }
|
|
690
800
|
.aster-grid-summary dt { color: var(--aster-text-2); overflow-wrap: anywhere; }
|
|
@@ -750,6 +860,8 @@
|
|
|
750
860
|
.aster-drill-crumbs button { color: var(--aster-accent); font-size: 12.5px; }
|
|
751
861
|
.aster-drill-crumbs button:hover { text-decoration: underline; }
|
|
752
862
|
.aster-drill-crumbs button[aria-current] { color: var(--aster-text); font-weight: var(--aster-weight-strong); }
|
|
863
|
+
.aster-drill-search { flex: none; margin-inline-start: auto; }
|
|
864
|
+
.aster-drill-search input { width: 9rem; min-height: var(--aster-ctl); max-width: 34vw; font-size: 12.5px; }
|
|
753
865
|
.aster-drill-heading { margin: 0; font-size: 14px; font-weight: var(--aster-weight-label); }
|
|
754
866
|
.aster-drill-heading:focus-visible { outline: 2px solid var(--aster-focus); outline-offset: 2px; border-radius: 2px; }
|
|
755
867
|
.aster-drill-viewport { position: relative; isolation: isolate; overflow: hidden; min-height: 48px; }
|
|
@@ -780,11 +892,13 @@
|
|
|
780
892
|
.aster-grid-row[data-drop="ok"] > .aster-grid-cell { background: var(--aster-accent-soft); box-shadow: inset 0 -2px 0 var(--aster-accent); }
|
|
781
893
|
.aster-grid-row[data-drop="refused"] > .aster-grid-cell { background: oklch(from var(--aster-negative) l c h / .08); cursor: not-allowed; }
|
|
782
894
|
/* Tree grid: the first column's indent and opener. */
|
|
783
|
-
.aster-grid-tree { display: inline-flex; align-items: center; flex: none; padding-left: calc(var(--level, 0) *
|
|
895
|
+
.aster-grid-tree { display: inline-flex; align-items: center; flex: none; padding-left: calc(var(--level, 0) * var(--aster-grid-tree-indent)); margin-right: 4px; vertical-align: middle; }
|
|
784
896
|
.aster-grid-opener { display: grid; place-items: center; width: 18px; height: 18px; border-radius: var(--aster-r-ctl); color: var(--aster-text-2); }
|
|
785
897
|
button.aster-grid-opener:hover { background: var(--aster-accent-soft); color: var(--aster-text); }
|
|
786
898
|
.aster-grid-opener svg { width: 10px; height: 10px; fill: none; stroke: currentColor; stroke-width: 1.4; transition: rotate var(--aster-t-micro) var(--aster-ease); }
|
|
787
899
|
.aster-grid-opener[data-open] svg { rotate: 90deg; }
|
|
900
|
+
.aster-grid-tree-icon { display: inline-grid; place-items: center; flex: none; width: 18px; height: 18px; margin-inline-end: 4px; color: var(--aster-text-2); }
|
|
901
|
+
.aster-grid-tree-icon svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.4; }
|
|
788
902
|
.aster-grid-note { font-size: 12.5px; color: var(--aster-text-2); }
|
|
789
903
|
/* A popover under its toolbar button, aligned to the button's right edge. */
|
|
790
904
|
.aster-grid-panel {
|
|
@@ -811,6 +925,7 @@
|
|
|
811
925
|
.aster-grid-sort-panel li { gap: 8px; }
|
|
812
926
|
.aster-grid-sort-name { flex: 1; min-width: 0; color: var(--aster-text-2); }
|
|
813
927
|
.aster-grid-sort-title { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
928
|
+
.aster-grid-sort-reason { display: block; margin-top: 2px; font-size: 11px; color: var(--aster-text-3); overflow-wrap: anywhere; }
|
|
814
929
|
.aster-grid-sort-panel li:has([aria-pressed="true"]) .aster-grid-sort-name { color: var(--aster-text); }
|
|
815
930
|
.aster-grid-sort-actions { flex: none; display: flex; align-items: center; gap: 2px; }
|
|
816
931
|
.aster-grid-sort-priority { width: 14px; flex: none; text-align: right; font-size: 10px; font-variant-numeric: tabular-nums; color: var(--aster-text-3); }
|
|
@@ -847,10 +962,42 @@
|
|
|
847
962
|
min-width: 0; padding: var(--aster-pad-y) 12px; background: var(--aster-surface);
|
|
848
963
|
overflow-wrap: anywhere; line-height: 1.4;
|
|
849
964
|
}
|
|
965
|
+
/* Record rows keep at least a single line's height; the header, filter row,
|
|
966
|
+
group headers and the card layout set their own geometry. */
|
|
967
|
+
.aster-grid-row:not(.aster-grid-head, .aster-grid-filters, .aster-grid-group) > .aster-grid-cell { min-height: var(--aster-grid-row-min-height); }
|
|
968
|
+
.aster-grid-head .aster-grid-cell { min-height: var(--aster-grid-header-height); }
|
|
850
969
|
.aster-grid-cell[data-numeric] { text-align: right; font-variant-numeric: tabular-nums; }
|
|
970
|
+
.aster-grid-cell[data-align="start"] { text-align: start; }
|
|
971
|
+
.aster-grid-cell[data-align="center"] { text-align: center; }
|
|
972
|
+
.aster-grid-cell[data-align="end"] { text-align: end; }
|
|
973
|
+
/* A row tone is a leading edge above the cells, never a background the cells cover. */
|
|
974
|
+
.aster-grid-row[data-tone]::before {
|
|
975
|
+
content: ""; position: absolute; inset-block: 0; inset-inline-start: 0; z-index: 3;
|
|
976
|
+
width: 3px; background: var(--aster-text-3); pointer-events: none;
|
|
977
|
+
}
|
|
978
|
+
.aster-grid-row[data-tone="positive"]::before { background: var(--aster-positive); }
|
|
979
|
+
.aster-grid-row[data-tone="caution"]::before { background: var(--aster-caution); }
|
|
980
|
+
.aster-grid-row[data-tone="negative"]::before { background: var(--aster-negative); }
|
|
981
|
+
@media (forced-colors: active) { .aster-grid-row[data-tone]::before { background: CanvasText; } }
|
|
851
982
|
.aster-grid-cell[data-frozen] { position: sticky; z-index: 1; }
|
|
852
983
|
.aster-grid-cell[data-frozen]:last-of-type, .aster-grid-cell[data-frozen]:has(+ :not([data-frozen])) { box-shadow: 1px 0 0 var(--aster-rule); }
|
|
853
984
|
.aster-grid-row[aria-selected="true"] > .aster-grid-cell { background: color-mix(in oklch, var(--aster-accent-soft), var(--aster-surface)); }
|
|
985
|
+
/* Cell selection: mark the active column instead of the whole row. */
|
|
986
|
+
.aster-grid-scroll[data-selection-appearance="cell"] .aster-grid-row[aria-selected="true"] > .aster-grid-cell { background: var(--aster-surface); }
|
|
987
|
+
.aster-grid-scroll[data-selection-appearance="cell"] .aster-grid-cell[data-selected-cell] { background: color-mix(in oklch, var(--aster-accent-soft), var(--aster-surface)); }
|
|
988
|
+
.aster-grid-cell[data-tone="positive"] { background: color-mix(in oklch, var(--aster-positive) 9%, var(--aster-surface)); }
|
|
989
|
+
.aster-grid-cell[data-tone="caution"] { background: color-mix(in oklch, var(--aster-caution) 9%, var(--aster-surface)); }
|
|
990
|
+
.aster-grid-cell[data-tone="negative"] { background: color-mix(in oklch, var(--aster-negative) 9%, var(--aster-surface)); }
|
|
991
|
+
.aster-grid-cell[data-tone="neutral"] { background: color-mix(in oklch, var(--aster-text-3) 9%, var(--aster-surface)); }
|
|
992
|
+
/* The selection column: a leading, always-present track of its own. */
|
|
993
|
+
.aster-grid-cell.aster-grid-select {
|
|
994
|
+
position: sticky; left: 0; z-index: 1; display: grid; place-items: center; padding: 0;
|
|
995
|
+
background: var(--aster-surface); box-shadow: inset -1px 0 0 var(--aster-rule-2);
|
|
996
|
+
}
|
|
997
|
+
.aster-grid-head .aster-grid-cell.aster-grid-select { z-index: 3; }
|
|
998
|
+
.aster-grid-select input { width: 16px; height: 16px; margin: 0; accent-color: var(--aster-accent); cursor: pointer; }
|
|
999
|
+
.aster-grid-select input:focus-visible { outline: 2px solid var(--aster-focus); outline-offset: 2px; border-radius: 2px; }
|
|
1000
|
+
.aster-grid-select-rank { position: absolute; inset-inline-end: 2px; bottom: 1px; font-size: 10px; color: var(--aster-text-3); font-variant-numeric: tabular-nums; }
|
|
854
1001
|
/* The header and filter row stick together. */
|
|
855
1002
|
.aster-grid-headgroup { position: sticky; top: 0; z-index: 2; display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; }
|
|
856
1003
|
.aster-grid-head { border-bottom: 1px solid var(--aster-rule); }
|
|
@@ -864,6 +1011,7 @@
|
|
|
864
1011
|
.aster-grid-resize::after { content: ""; position: absolute; top: 25%; bottom: 25%; left: 3px; width: 2px; border-radius: 1px; background: transparent; transition: background var(--aster-t-micro); }
|
|
865
1012
|
.aster-grid-resize:hover::after { background: var(--aster-accent); }
|
|
866
1013
|
.aster-grid-filters .aster-grid-cell { padding: 4px 6px; background: var(--aster-surface); }
|
|
1014
|
+
.aster-grid-filter-refused { display: inline-flex; align-items: center; height: var(--aster-ctl-tight); font-size: 12.5px; color: var(--aster-text-3); }
|
|
867
1015
|
.aster-grid-filters .aster-field { height: var(--aster-ctl-tight); padding: 0 8px; font-size: 12.5px; }
|
|
868
1016
|
.aster-grid-filters .aster-error { font-size: 11.5px; }
|
|
869
1017
|
.aster-grid-sort {
|
|
@@ -871,6 +1019,9 @@
|
|
|
871
1019
|
font-size: 12px; font-weight: var(--aster-weight-label); color: var(--aster-text-2);
|
|
872
1020
|
}
|
|
873
1021
|
.aster-grid-header[data-numeric] .aster-grid-sort { justify-content: flex-end; }
|
|
1022
|
+
.aster-grid-header[data-align="start"] .aster-grid-sort { justify-content: flex-start; }
|
|
1023
|
+
.aster-grid-header[data-align="center"] .aster-grid-sort { justify-content: center; }
|
|
1024
|
+
.aster-grid-header[data-align="end"] .aster-grid-sort { justify-content: flex-end; }
|
|
874
1025
|
.aster-grid-sort:hover { color: var(--aster-text); }
|
|
875
1026
|
.aster-grid-sort-mark { width: 10px; height: 10px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.5; }
|
|
876
1027
|
.aster-grid-sort small { font-size: 10px; color: var(--aster-text-3); }
|
|
@@ -895,6 +1046,10 @@
|
|
|
895
1046
|
.aster-grid-row-note button { color: var(--aster-accent); font-weight: var(--aster-weight-strong); }
|
|
896
1047
|
.aster-grid-skeleton { display: block; height: 10px; margin-block: 4px; border-radius: 3px; background: oklch(from var(--aster-text) l c h / .06); }
|
|
897
1048
|
.aster-grid-empty { padding: 24px 14px; color: var(--aster-text-3); }
|
|
1049
|
+
.aster-grid-loading { padding: 24px 14px; color: var(--aster-text-2); }
|
|
1050
|
+
.aster-grid-failure { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; padding: var(--aster-row-y) 12px; border-bottom: 1px solid var(--aster-rule-2); background: var(--aster-surface); color: var(--aster-negative); font-size: 12.5px; }
|
|
1051
|
+
.aster-grid-failure > span { flex: 1; min-width: 0; }
|
|
1052
|
+
.aster-grid-failure button { flex: none; color: var(--aster-accent); font-weight: var(--aster-weight-label); }
|
|
898
1053
|
|
|
899
1054
|
/* Touch: larger targets, same look. */
|
|
900
1055
|
@media (pointer: coarse) {
|
|
@@ -920,13 +1075,15 @@
|
|
|
920
1075
|
.aster-grid-row:not(.aster-grid-head) { display: block; padding: calc(var(--aster-pad) - 4px) var(--aster-pad); border-bottom: 1px solid var(--aster-rule); }
|
|
921
1076
|
.aster-grid-row:not(.aster-grid-head) > .aster-grid-cell {
|
|
922
1077
|
position: static; display: grid; grid-template-columns: minmax(6.5rem, 34%) minmax(0, 1fr); gap: 8px;
|
|
923
|
-
padding: 3px 0; box-shadow: none; text-align: left;
|
|
1078
|
+
min-height: 0; padding: 3px 0; box-shadow: none; text-align: left;
|
|
924
1079
|
}
|
|
925
1080
|
.aster-grid-row:not(.aster-grid-head) > .aster-grid-cell[data-numeric] { justify-content: initial; }
|
|
926
1081
|
/* The card, not its cells, carries the row's background, so selection and drop targets cover its padding too. */
|
|
927
1082
|
.aster-grid-row:not(.aster-grid-head) { background: var(--aster-surface); }
|
|
928
1083
|
.aster-grid-row:not(.aster-grid-head) > .aster-grid-cell { background: none; }
|
|
929
1084
|
.aster-grid-row[aria-selected="true"]:not(.aster-grid-head) { background: color-mix(in oklch, var(--aster-accent-soft), var(--aster-surface)); }
|
|
1085
|
+
.aster-grid-scroll[data-selection-appearance="cell"] .aster-grid-row[aria-selected="true"]:not(.aster-grid-head) { background: var(--aster-surface); }
|
|
1086
|
+
.aster-grid-row:not(.aster-grid-head) > .aster-grid-cell.aster-grid-select { position: static; box-shadow: none; padding: 3px 0; }
|
|
930
1087
|
.aster-grid-row[data-drop="ok"]:not(.aster-grid-head) { background: var(--aster-accent-soft); box-shadow: inset 0 -2px 0 var(--aster-accent); }
|
|
931
1088
|
.aster-grid-row[data-drop="refused"]:not(.aster-grid-head) { background: oklch(from var(--aster-negative) l c h / .08); }
|
|
932
1089
|
.aster-grid-row:not(.aster-grid-head) > .aster-grid-cell[data-label]::before {
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2022 The Bricolage Grotesque Project Authors (https://github.com/ateliertriay/bricolage)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2020 The Fraunces Project Authors (github.com/undercasetype/Fraunces) Fraunces-Italic[SOFT,WONK,opsz,wght].ttf: Copyright 2020 The Fraunces Project Authors (github.com/undercasetype/Fraunces)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
Binary file
|
package/styles/fonts.css
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* The faces Lamplight names, Latin subsets only. Bun's CSS minifier drops the
|
|
2
|
+
`+` from `unicode-range`, so the files are declared per subset instead; it
|
|
3
|
+
also unquotes `format("woff2")`, which stays valid. */
|
|
4
|
+
@font-face {
|
|
5
|
+
font-family: "Bricolage Grotesque Variable";
|
|
6
|
+
font-style: normal;
|
|
7
|
+
font-display: swap;
|
|
8
|
+
font-weight: 200 800;
|
|
9
|
+
src: url("./fonts/bricolage-grotesque-latin-opsz-normal.woff2") format("woff2");
|
|
10
|
+
}
|
|
11
|
+
@font-face {
|
|
12
|
+
font-family: "Fraunces Variable";
|
|
13
|
+
font-style: normal;
|
|
14
|
+
font-display: swap;
|
|
15
|
+
font-weight: 100 900;
|
|
16
|
+
src: url("./fonts/fraunces-latin-full-normal.woff2") format("woff2");
|
|
17
|
+
}
|