@crewlethq/ui 0.35.1 → 0.37.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.
- package/README.md +90 -1
- package/dist/AgentHandoffPanel/AgentHandoffPanel.d.ts +99 -0
- package/dist/AgentHandoffPanel/index.d.ts +3 -0
- package/dist/AgentHandoffPanel/index.js +16 -0
- package/dist/AgentHandoffPanel-JWSW62GU.css +151 -0
- package/dist/ArrangeFrame/index.js +1 -1
- package/dist/{ArrangeFrame-3PLZAG22.css → ArrangeFrame-QXOQTFAH.css} +22 -5
- package/dist/ArrangeList/index.js +4 -3
- package/dist/ArtifactAccess/ArtifactAccess.d.ts +40 -0
- package/dist/ArtifactAccess/index.d.ts +3 -0
- package/dist/ArtifactAccess/index.js +2 -0
- package/dist/ArtifactAccess-Y53ZTRFS.css +31 -0
- package/dist/ArtifactBar/ArtifactBar.d.ts +2 -1
- package/dist/ArtifactBar/index.js +2 -2
- package/dist/{ArtifactBar-HV5AT4RG.css → ArtifactBar-FWPBBKQ5.css} +8 -0
- package/dist/ArtifactCard/ArtifactCard.d.ts +1 -6
- package/dist/ArtifactCard/index.d.ts +2 -1
- package/dist/ArtifactCard/index.js +4 -3
- package/dist/ArtifactCover/index.js +3 -2
- package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +16 -7
- package/dist/ArtifactKindIllustration/index.js +1 -1
- package/dist/{ArtifactKindIllustration-5FPRJQ3P.css → ArtifactKindIllustration-KLFL7KBG.css} +37 -1
- package/dist/ArtifactMakeRow/ArtifactMakeRow.d.ts +39 -0
- package/dist/ArtifactMakeRow/index.d.ts +4 -0
- package/dist/ArtifactMakeRow/index.js +4 -0
- package/dist/ArtifactMakeRow-XBA2MPSY.css +167 -0
- package/dist/ArtifactNameCell/ArtifactNameCell.d.ts +37 -0
- package/dist/ArtifactNameCell/index.d.ts +4 -0
- package/dist/ArtifactNameCell/index.js +4 -0
- package/dist/ArtifactNameCell-RTVP4LO4.css +104 -0
- package/dist/ArtifactPanel/ArtifactPanel.d.ts +8 -1
- package/dist/ArtifactPanel/index.js +1 -1
- package/dist/{ArtifactPanel-HW3SU7CP.css → ArtifactPanel-KKUUIPEU.css} +9 -0
- package/dist/AuthLayout/index.js +2 -2
- package/dist/AvatarPicker/index.js +2 -2
- package/dist/Canvas/index.js +2 -2
- package/dist/CanvasBoard/CanvasBoard.d.ts +27 -13
- package/dist/CanvasBoard/index.d.ts +1 -1
- package/dist/CanvasBoard/index.js +4 -4
- package/dist/{CanvasBoard-5NNSKY6A.css → CanvasBoard-TS4P356F.css} +13 -6
- package/dist/CanvasToolbar/index.js +3 -3
- package/dist/Card/index.js +1 -1
- package/dist/{Card-KJOYHDTJ.css → Card-QOVASQNU.css} +17 -12
- package/dist/Checkbox/index.js +3 -2
- package/dist/ChoiceButtons/index.js +1 -1
- package/dist/{ChoiceButtons-DJ5EOGUA.css → ChoiceButtons-FLIFXFFS.css} +10 -0
- package/dist/ChoiceList/index.js +1 -1
- package/dist/{ChoiceList-RBL7FNQL.css → ChoiceList-EA2W6MOS.css} +36 -5
- package/dist/Combobox/index.js +3 -2
- package/dist/CommandPalette/index.js +3 -2
- package/dist/CommentThread/index.js +6 -5
- package/dist/Composer/Composer.d.ts +4 -0
- package/dist/Composer/index.js +3 -2
- package/dist/{Composer-ABGJIAIR.css → Composer-PXITWNEK.css} +26 -15
- package/dist/ConfirmField/index.js +3 -2
- package/dist/DataTable/index.js +4 -3
- package/dist/DataView/index.js +7 -6
- package/dist/DatasetSource/DatasetSource.d.ts +4 -0
- package/dist/DatasetSource/index.js +1 -1
- package/dist/{DatasetSource-XFPZBRXL.css → DatasetSource-SMGX4PS5.css} +38 -4
- package/dist/DateTimePicker/index.js +2 -1
- package/dist/{DateTimePicker-HG2KQXQ6.css → DateTimePicker-2IVTKFV2.css} +15 -2
- package/dist/DocTabsEditor/index.js +3 -2
- package/dist/Document/Document.d.ts +15 -3
- package/dist/Document/index.js +2 -1
- package/dist/{Document-JUGCSQ4L.css → Document-YFWTWXJP.css} +34 -2
- package/dist/{Editor-BVQHBF7L.js → Editor-HORWMUM3.js} +2 -1
- package/dist/FilterChip/index.js +1 -1
- package/dist/{FilterChip-EZ4QMW4E.css → FilterChip-VL33P3JL.css} +5 -1
- package/dist/Input/index.js +2 -1
- package/dist/{Input-GBZSFXLU.css → Input-ABGOFENS.css} +46 -10
- package/dist/LayersList/index.js +1 -1
- package/dist/{LayersList-NQZEIPZB.css → LayersList-TBNF4XGL.css} +16 -3
- package/dist/LinkInterstitial/index.js +2 -2
- package/dist/ListInput/index.js +3 -2
- package/dist/LivePreview/LivePreview.d.ts +120 -28
- package/dist/LivePreview/budget.d.ts +64 -20
- package/dist/LivePreview/index.d.ts +6 -4
- package/dist/LivePreview/index.js +1 -1
- package/dist/LivePreview/stills.d.ts +57 -0
- package/dist/LivePreview-BROGKR4N.css +113 -0
- package/dist/PresenterView/index.js +2 -2
- package/dist/PrincipalPicker/index.js +4 -3
- package/dist/RichEditor/index.js +1 -1
- package/dist/Select/index.js +2 -1
- package/dist/{Select-A54YS5EP.css → Select-W3CHTZXP.css} +18 -2
- package/dist/ShareDialog/index.js +3 -2
- package/dist/SheetColumnEditor/index.js +6 -5
- package/dist/SheetGrid/index.js +3 -3
- package/dist/SlideCompare/index.js +2 -2
- package/dist/SlideFilmstrip/index.js +2 -2
- package/dist/{SlideFilmstrip-4ITZLMO4.css → SlideFilmstrip-PAT7P4OG.css} +26 -7
- package/dist/SlideGrid/index.js +2 -2
- package/dist/{SlideGrid-S4LTJ4UU.css → SlideGrid-FJA33DV4.css} +11 -1
- package/dist/SlideStage/index.js +1 -1
- package/dist/{SlideStage-S2FISF4C.css → SlideStage-ZTTEQSS2.css} +4 -2
- package/dist/SourceEditor/index.js +2 -1
- package/dist/{SourceEditor-G2C3STPX.css → SourceEditor-QAYE2JS6.css} +19 -12
- package/dist/Switcher/index.js +4 -3
- package/dist/TagsInput/index.js +2 -1
- package/dist/{TagsInput-XMXTI5Q4.css → TagsInput-7EGBBXHS.css} +7 -1
- package/dist/ThemeGallery/index.js +1 -1
- package/dist/{ThemeGallery-HSUKBDWY.css → ThemeGallery-X35Y25EX.css} +26 -5
- package/dist/TimeWindowPicker/index.js +4 -3
- package/dist/{TimeWindowPicker-T763GLXH.css → TimeWindowPicker-DEFDV77Z.css} +15 -2
- package/dist/TreeCanvas/index.js +3 -3
- package/dist/VersionTimeline/index.js +2 -2
- package/dist/{chunk-V43UVX4H.js → chunk-27GD7LVR.js} +1 -1
- package/dist/{chunk-6JVRY5DQ.js → chunk-44WJLPQS.js} +2 -2
- package/dist/{chunk-ONL54WMH.js → chunk-46RL3E54.js} +1 -1
- package/dist/{chunk-UHJQDFKQ.js → chunk-4ZJLOKSS.js} +1 -1
- package/dist/{chunk-ACA27MZH.js → chunk-5QXRI35B.js} +1 -1
- package/dist/{chunk-LL5AFXU7.js → chunk-5RT5O4JR.js} +1 -1
- package/dist/{chunk-GMU6SQ6B.js → chunk-66NGUD5S.js} +2 -2
- package/dist/{chunk-3Y56GQPM.js → chunk-7VAUGG6B.js} +1 -1
- package/dist/{chunk-2CQLNML5.js → chunk-AOLCZDZ6.js} +3 -1
- package/dist/{chunk-NKZCJRKO.js → chunk-APDKUGSH.js} +2 -2
- package/dist/chunk-BGLKLXL3.js +29 -0
- package/dist/{chunk-Z6VW6CXX.js → chunk-BIQDJOJZ.js} +1 -1
- package/dist/{chunk-YSJC7AZC.js → chunk-BWOIUOO3.js} +1 -1
- package/dist/{chunk-PI7HKLIT.js → chunk-D7GNNID2.js} +3 -1
- package/dist/chunk-EAKC24BW.js +51 -0
- package/dist/{chunk-CCLNGVCM.js → chunk-EARDAJQY.js} +1 -1
- package/dist/chunk-EOQFPZEE.js +138 -0
- package/dist/{chunk-THROPJZC.js → chunk-F23N4MVU.js} +1 -1
- package/dist/{chunk-J6YZ4IYV.js → chunk-FG4O64DV.js} +3 -3
- package/dist/{chunk-E35CMI5D.js → chunk-FHHYXZSP.js} +31 -13
- package/dist/{chunk-AYB6AYNH.js → chunk-GMLAKNFY.js} +1 -1
- package/dist/{chunk-ZB5O3ELS.js → chunk-GRYZ5EP3.js} +4 -2
- package/dist/{chunk-QFNWMWWY.js → chunk-GS7ZTHPF.js} +4 -4
- package/dist/{chunk-ILAEBSLJ.js → chunk-H5NOLRGH.js} +2 -2
- package/dist/{chunk-W3UVOZKL.js → chunk-IPAU6FLH.js} +6 -2
- package/dist/{chunk-6QFAK2WV.js → chunk-IUYUS2SO.js} +4 -1
- package/dist/{chunk-22CQQDFW.js → chunk-JML75PGJ.js} +1 -1
- package/dist/{chunk-AXBRWRGV.js → chunk-JQLS3MZB.js} +1 -1
- package/dist/{chunk-FGYET26P.js → chunk-KJW2AS57.js} +1 -1
- package/dist/{chunk-QIXMNOBD.js → chunk-KYZMN6I6.js} +2 -2
- package/dist/{chunk-73A7D5CE.js → chunk-L4WZSVMT.js} +3 -1
- package/dist/{chunk-ULPL26BU.js → chunk-N5SKHIAP.js} +1 -1
- package/dist/{chunk-LV4APO72.js → chunk-NQGPD6NX.js} +1 -1
- package/dist/{chunk-7UYONN6K.js → chunk-OHA6WSAG.js} +6 -11
- package/dist/chunk-P5VGSVWG.js +39 -0
- package/dist/chunk-P6WFZDKS.js +111 -0
- package/dist/{chunk-CPEPST4S.js → chunk-PJIPUEJ3.js} +1 -1
- package/dist/{chunk-QS4ZGTEU.js → chunk-PPFX6GRK.js} +1 -1
- package/dist/{chunk-7DZDSSJS.js → chunk-RH2NCQBZ.js} +5 -4
- package/dist/{chunk-3VD3G3IL.js → chunk-T5RQGI6O.js} +1 -1
- package/dist/{chunk-F2KY4RLI.js → chunk-TVRBQMIX.js} +5 -3
- package/dist/{chunk-W7QBBKUE.js → chunk-UBZDYOCA.js} +7 -3
- package/dist/{chunk-QEFHYUCY.js → chunk-UWGUKMBK.js} +1 -1
- package/dist/{chunk-5YLON2PW.js → chunk-UYZZV4DZ.js} +1 -1
- package/dist/{chunk-BQ7AKL2N.js → chunk-VKKUGZ3G.js} +3 -1
- package/dist/{chunk-DEJHAOC5.js → chunk-WMXAX6VA.js} +1 -1
- package/dist/{chunk-VDPJGP4Q.js → chunk-WX2NIG4G.js} +1 -1
- package/dist/chunk-WYKWXRJ4.js +456 -0
- package/dist/{chunk-ZU3DUXD2.js → chunk-WZGYIVYH.js} +1 -1
- package/dist/{chunk-HUVG2FFT.js → chunk-Y5BD4MTE.js} +4 -2
- package/dist/chunk-YSGLEHND.js +56 -0
- package/dist/generated/index.d.ts +4 -0
- package/dist/generated/index.js +105 -100
- package/dist/index.js +105 -100
- package/dist/styles.css +1036 -163
- package/dist/utils/focusModality.d.ts +41 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -1
- package/package.json +3 -3
- package/dist/LivePreview-SRO7KHO4.css +0 -65
- package/dist/chunk-KF6YGL4B.js +0 -160
- package/dist/chunk-TYKQ33CL.js +0 -35
- package/dist/{chunk-3P4Y5RX6.js → chunk-4BYHAOHH.js} +1 -1
- package/dist/{chunk-KD2IRYCT.js → chunk-5WDXPHEW.js} +1 -1
- package/dist/{chunk-OSFA5ROT.js → chunk-FEJANUZK.js} +0 -0
- package/dist/{chunk-FJJHD73S.js → chunk-GYBDPCRC.js} +1 -1
- package/dist/{chunk-VHZ3AXJD.js → chunk-NQCY44B3.js} +1 -1
- package/dist/{chunk-3WCNHYXE.js → chunk-PNNYVN52.js} +0 -0
- package/dist/{chunk-FF5OZV77.js → chunk-W3HYWD63.js} +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type HTMLAttributes, type TextareaHTMLAttributes } from 'react';
|
|
2
2
|
export type DocumentSize =
|
|
3
3
|
/**
|
|
4
4
|
* A page read on its own: the small step at the relaxed leading, sections at
|
|
@@ -61,7 +61,7 @@ export interface DocumentTitleProps extends HTMLAttributes<HTMLHeadingElement> {
|
|
|
61
61
|
* a size of its own beside the body it heads.
|
|
62
62
|
*/
|
|
63
63
|
export declare function DocumentTitle({ as: Tag, className, children, ...rest }: DocumentTitleProps): import("react").JSX.Element;
|
|
64
|
-
export interface DocumentTitleFieldProps extends Omit<
|
|
64
|
+
export interface DocumentTitleFieldProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'rows' | 'cols' | 'wrap'> {
|
|
65
65
|
/** Marks the title as refused. Sets `aria-invalid`, which is what a screen reader reads. */
|
|
66
66
|
error?: boolean | undefined;
|
|
67
67
|
}
|
|
@@ -76,5 +76,17 @@ export interface DocumentTitleFieldProps extends Omit<InputHTMLAttributes<HTMLIn
|
|
|
76
76
|
* danger ink when the title is refused. The name is the caller's
|
|
77
77
|
* (`aria-label`, or a label it points at), because a title field's visible
|
|
78
78
|
* cue is its placeholder, and a placeholder is not a name.
|
|
79
|
+
*
|
|
80
|
+
* IT WRAPS, AND IT IS STILL ONE LINE OF TEXT. A title is set in the page's
|
|
81
|
+
* largest type, and an `<input>` cuts what does not fit: on a phone a long
|
|
82
|
+
* title, or the example in its placeholder, was clipped mid-word ("Weekly
|
|
83
|
+
* planning, Octobe"). So it is a textarea of one row that grows with what it
|
|
84
|
+
* holds, as the title it becomes wraps, and every way it could take a second
|
|
85
|
+
* line is closed: Enter inserts nothing (its `keydown` reaches the caller and
|
|
86
|
+
* the page exactly as an input's does, and in a form with a submit button it
|
|
87
|
+
* submits, as an input's Enter does), and a pasted, dropped or autofilled line
|
|
88
|
+
* break becomes a space before the caller's `onChange` reads the value. It is
|
|
89
|
+
* named to assistive technology as a single-line text field
|
|
90
|
+
* (`aria-multiline="false"`).
|
|
79
91
|
*/
|
|
80
|
-
export declare
|
|
92
|
+
export declare const DocumentTitleField: import("react").ForwardRefExoticComponent<DocumentTitleFieldProps & import("react").RefAttributes<HTMLTextAreaElement>>;
|
package/dist/Document/index.js
CHANGED
|
@@ -327,17 +327,34 @@
|
|
|
327
327
|
* on no surface of its own, with a line along its foot that answers the
|
|
328
328
|
* pointer, the focus and a refusal. The line is a border rather than a
|
|
329
329
|
* shadow, because forced colours keep a border and drop a shadow.
|
|
330
|
+
*
|
|
331
|
+
* ONE PIXEL, AND A TINT, WHERE A POINTER PUT THE CARET. The line is the
|
|
332
|
+
* hairline under the pointer and the selected edge (the accent mixed toward
|
|
333
|
+
* the page) once a click has put the caret in it: the reader is already
|
|
334
|
+
* looking at the title, and a page that focuses its title on load drew a 2px
|
|
335
|
+
* accent bar under it before anybody had touched anything.
|
|
336
|
+
*
|
|
337
|
+
* TWO PIXELS IN THE FOCUS COLOUR FOR THE KEYBOARD, the area WCAG 2.2's focus
|
|
338
|
+
* appearance asks of an indicator: the border takes the focus colour and a
|
|
339
|
+
* shadow lays the second pixel under it, with a transparent outline that
|
|
340
|
+
* forced colours paints in its place. The padding takes the pixel the border
|
|
341
|
+
* no longer reserves, so the title sits where it always did.
|
|
330
342
|
*/
|
|
331
343
|
.crewlet-document-title-field {
|
|
332
344
|
display: block;
|
|
333
345
|
width: 100%;
|
|
334
346
|
min-width: 0;
|
|
335
|
-
padding: 0 0 var(--spacing-1);
|
|
347
|
+
padding: 0 0 calc(var(--spacing-1) + 1px);
|
|
336
348
|
border: 0;
|
|
337
|
-
border-block-end:
|
|
349
|
+
border-block-end: 1px solid transparent;
|
|
338
350
|
border-radius: 0;
|
|
339
351
|
background: none;
|
|
340
352
|
outline: none;
|
|
353
|
+
/* A textarea of one row that grows with the title (DocumentTitleField sets
|
|
354
|
+
its height): no handle, no scrollbar, and the title's own wrapping. */
|
|
355
|
+
resize: none;
|
|
356
|
+
overflow: hidden;
|
|
357
|
+
white-space: pre-wrap;
|
|
341
358
|
transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
342
359
|
}
|
|
343
360
|
|
|
@@ -352,12 +369,27 @@
|
|
|
352
369
|
|
|
353
370
|
.crewlet-document-title-field:focus-visible {
|
|
354
371
|
border-block-end-color: var(--color-focus);
|
|
372
|
+
box-shadow: 0 1px 0 var(--color-focus);
|
|
373
|
+
outline: 2px solid transparent;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
:root[data-crewlet-focus='pointer'] .crewlet-document-title-field:focus-visible {
|
|
377
|
+
border-block-end-color: var(--color-border-selected);
|
|
378
|
+
box-shadow: none;
|
|
355
379
|
}
|
|
356
380
|
|
|
357
381
|
.crewlet-document-title-field[aria-invalid='true'] {
|
|
358
382
|
border-block-end-color: var(--color-feedback-danger);
|
|
359
383
|
}
|
|
360
384
|
|
|
385
|
+
.crewlet-document-title-field[aria-invalid='true']:focus-visible {
|
|
386
|
+
box-shadow: 0 1px 0 var(--color-feedback-danger);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
:root[data-crewlet-focus='pointer'] .crewlet-document-title-field[aria-invalid='true']:focus-visible {
|
|
390
|
+
border-block-end-color: var(--color-feedback-danger);
|
|
391
|
+
}
|
|
392
|
+
|
|
361
393
|
@media (prefers-reduced-motion: reduce) {
|
|
362
394
|
.crewlet-document-title-field {
|
|
363
395
|
transition: none;
|
|
@@ -2,7 +2,8 @@ import { richEditorLabels } from './chunk-CSQTDGTS.js';
|
|
|
2
2
|
import { schema, readMarkdown, writeMarkdown } from './chunk-QH6VYJ3X.js';
|
|
3
3
|
import { safeHref, MARKDOWN_CALLOUT_TONES } from './chunk-BAKPMH3S.js';
|
|
4
4
|
import { Toolbar } from './chunk-PGRPNDWM.js';
|
|
5
|
-
import { FormField, Input } from './chunk-
|
|
5
|
+
import { FormField, Input } from './chunk-IUYUS2SO.js';
|
|
6
|
+
import './chunk-YSGLEHND.js';
|
|
6
7
|
import './chunk-PQADV6P6.js';
|
|
7
8
|
import { Menu } from './chunk-BUVCV3WI.js';
|
|
8
9
|
import { placePopup, viewportBounds } from './chunk-OMV5W53A.js';
|
package/dist/FilterChip/index.js
CHANGED
|
@@ -81,9 +81,13 @@
|
|
|
81
81
|
cursor: not-allowed;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
/* The selected fill, and the accent's lighter line rather than the selected
|
|
85
|
+
edge: on a pill this small the 0.6 edge, the fill and the accent ink were
|
|
86
|
+
three accent marks on one word. The ink is the mark that clears 4.5:1, and
|
|
87
|
+
the keyboard's 2px focus ring stays the only full-weight line. */
|
|
84
88
|
.crewlet-filter-chip[aria-pressed='true'],
|
|
85
89
|
.crewlet-filter-chip[aria-checked='true'] {
|
|
86
|
-
background: var(--color-
|
|
90
|
+
background: var(--color-surface-selected);
|
|
87
91
|
border-color: var(--color-brand-accent-soft-strong);
|
|
88
92
|
color: var(--color-brand-accent-ink);
|
|
89
93
|
}
|
package/dist/Input/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-
|
|
1
|
+
export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-IUYUS2SO.js';
|
|
2
|
+
import '../chunk-YSGLEHND.js';
|
|
2
3
|
import '../chunk-PQADV6P6.js';
|
|
3
4
|
import '../chunk-4FQT6ZAY.js';
|
|
4
5
|
import '../chunk-BZFWDIV6.js';
|
|
@@ -81,14 +81,18 @@
|
|
|
81
81
|
* forced-colors mode drops every box-shadow and keeps outlines: a ring drawn
|
|
82
82
|
* as a shadow disappears for exactly the readers who most need one.
|
|
83
83
|
*
|
|
84
|
-
* It is
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
84
|
+
* It is TWO PIXELS FOR THE KEYBOARD AND ONE FOR A POINTER, laid over the
|
|
85
|
+
* boundary. Two pixels is the area WCAG 2.2's focus appearance asks of an
|
|
86
|
+
* indicator, and one pixel (the field's own hairline in the focus colour) was
|
|
87
|
+
* half of it for every reader tabbing through a form. But at two pixels round
|
|
88
|
+
* every box a caret landed in, a click into a title or a filter box drew a
|
|
89
|
+
* heavy band round the one thing the reader was already looking at, so the
|
|
90
|
+
* rule after this one narrows the ring where the document says the last move
|
|
91
|
+
* was a pointer. Drawn over the boundary rather than outside it, a scroller
|
|
92
|
+
* cannot clip it and the field does not grow a halo the moment a caret lands
|
|
93
|
+
* in it, which is what a filter box in a toolbar of them did to the row it
|
|
94
|
+
* sits in. Every boxed field in the package rings this way (`Input.test.tsx`
|
|
95
|
+
* holds them to it).
|
|
92
96
|
*
|
|
93
97
|
* THE BORDER IS LEFT ALONE. Recolouring it under the ring says nothing the
|
|
94
98
|
* ring has not already said, and it is what cost the error state its own
|
|
@@ -104,10 +108,28 @@
|
|
|
104
108
|
* on a pointer press as well as on a tab.
|
|
105
109
|
*/
|
|
106
110
|
.crewlet-input:has(.crewlet-input__control:focus-visible) {
|
|
107
|
-
outline:
|
|
111
|
+
outline: 2px solid var(--color-focus);
|
|
108
112
|
outline-offset: -1px;
|
|
109
113
|
}
|
|
110
114
|
|
|
115
|
+
/*
|
|
116
|
+
* NARROWED FOR A POINTER. The ring above is the keyboard's: 2px, the area
|
|
117
|
+
* WCAG 2.2's focus appearance asks of an indicator, drawn over the boundary
|
|
118
|
+
* and one pixel into the box. A field matches :focus-visible on a click as
|
|
119
|
+
* well, and a reader who put the caret there with a pointer is already looking
|
|
120
|
+
* at it, so where the document says the last move was a pointer
|
|
121
|
+
* (`data-crewlet-focus`, kept by `trackFocusModality`, which every field
|
|
122
|
+
* starts) the ring is one pixel in the selected edge, the accent mixed toward
|
|
123
|
+
* the page: a page that focuses its first field on load drew the focus colour
|
|
124
|
+
* round it before anybody had touched a key. A refused field keeps its own
|
|
125
|
+
* colour under a pointer too (below). A document that tracks nothing keeps
|
|
126
|
+
* the keyboard's ring.
|
|
127
|
+
*/
|
|
128
|
+
:root[data-crewlet-focus='pointer'] .crewlet-input:has(.crewlet-input__control:focus-visible) {
|
|
129
|
+
outline-width: 1px;
|
|
130
|
+
outline-color: var(--color-border-selected);
|
|
131
|
+
}
|
|
132
|
+
|
|
111
133
|
.crewlet-input.is-error {
|
|
112
134
|
border-color: var(--color-feedback-danger);
|
|
113
135
|
}
|
|
@@ -128,6 +150,10 @@
|
|
|
128
150
|
outline-color: var(--color-feedback-danger);
|
|
129
151
|
}
|
|
130
152
|
|
|
153
|
+
:root[data-crewlet-focus='pointer'] .crewlet-input.is-error:has(.crewlet-input__control:focus-visible) {
|
|
154
|
+
outline-color: var(--color-feedback-danger);
|
|
155
|
+
}
|
|
156
|
+
|
|
131
157
|
.crewlet-input.is-disabled {
|
|
132
158
|
opacity: 0.6;
|
|
133
159
|
cursor: not-allowed;
|
|
@@ -364,10 +390,16 @@
|
|
|
364
390
|
on the control itself: a textarea is the field, with nothing wrapped round
|
|
365
391
|
it and nothing focusable inside it. */
|
|
366
392
|
.crewlet-textarea:focus-visible {
|
|
367
|
-
outline:
|
|
393
|
+
outline: 2px solid var(--color-focus);
|
|
368
394
|
outline-offset: -1px;
|
|
369
395
|
}
|
|
370
396
|
|
|
397
|
+
/* Narrowed and tinted for a pointer, as the text box's ring is. See Input.css. */
|
|
398
|
+
:root[data-crewlet-focus='pointer'] .crewlet-textarea:focus-visible {
|
|
399
|
+
outline-width: 1px;
|
|
400
|
+
outline-color: var(--color-border-selected);
|
|
401
|
+
}
|
|
402
|
+
|
|
371
403
|
.crewlet-textarea.is-error {
|
|
372
404
|
border-color: var(--color-feedback-danger);
|
|
373
405
|
}
|
|
@@ -376,6 +408,10 @@
|
|
|
376
408
|
outline-color: var(--color-feedback-danger);
|
|
377
409
|
}
|
|
378
410
|
|
|
411
|
+
:root[data-crewlet-focus='pointer'] .crewlet-textarea.is-error:focus-visible {
|
|
412
|
+
outline-color: var(--color-feedback-danger);
|
|
413
|
+
}
|
|
414
|
+
|
|
379
415
|
.crewlet-textarea.is-disabled {
|
|
380
416
|
opacity: 0.6;
|
|
381
417
|
cursor: not-allowed;
|
package/dist/LayersList/index.js
CHANGED
|
@@ -68,13 +68,26 @@
|
|
|
68
68
|
color: var(--color-text-primary);
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
/*
|
|
72
|
-
|
|
71
|
+
/*
|
|
72
|
+
* THE PICKED ENTRY IS A SELECTION, drawn as the package draws a chosen
|
|
73
|
+
* option: the selected fill under the primary ink, as a canvas's layers panel
|
|
74
|
+
* marks the board picked on it. It used to take the accent rail a CURRENT row
|
|
75
|
+
* takes (the outline's heading, the page in the rail), which says "you are
|
|
76
|
+
* here" and beside a canvas read as a second selection ring. The rail's room
|
|
77
|
+
* is still held, so nothing moves, and forced colours draw it in the system's
|
|
78
|
+
* own selected colour, since they drop the fill.
|
|
79
|
+
*/
|
|
73
80
|
.crewlet-layers-list__item[aria-current='true'] {
|
|
74
|
-
|
|
81
|
+
background: var(--color-surface-selected);
|
|
75
82
|
color: var(--color-text-primary);
|
|
76
83
|
}
|
|
77
84
|
|
|
85
|
+
@media (forced-colors: active) {
|
|
86
|
+
.crewlet-layers-list__item[aria-current='true'] {
|
|
87
|
+
border-inline-start-color: Highlight;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
78
91
|
/* The ring lies inside the entry, where the scroller beside it cannot cut it. */
|
|
79
92
|
.crewlet-layers-list__item:focus-visible {
|
|
80
93
|
outline: 2px solid var(--color-focus);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { LinkInterstitial, openExternal } from '../chunk-
|
|
2
|
-
import '../chunk-5CLW2CXT.js';
|
|
1
|
+
export { LinkInterstitial, openExternal } from '../chunk-5WDXPHEW.js';
|
|
3
2
|
import '../chunk-XEGZHHRH.js';
|
|
3
|
+
import '../chunk-5CLW2CXT.js';
|
|
4
4
|
import '../chunk-SZZRIHGT.js';
|
|
5
5
|
import '../chunk-PQADV6P6.js';
|
|
6
6
|
import '../chunk-OMV5W53A.js';
|
package/dist/ListInput/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { ListInput } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ListInput } from '../chunk-BIQDJOJZ.js';
|
|
2
|
+
import '../chunk-IUYUS2SO.js';
|
|
3
|
+
import '../chunk-YSGLEHND.js';
|
|
3
4
|
import '../chunk-SMBKXWML.js';
|
|
4
5
|
import '../chunk-PQADV6P6.js';
|
|
5
6
|
import '../chunk-OMV5W53A.js';
|
|
@@ -1,27 +1,54 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
/**
|
|
3
|
-
* Real content drawn small: a
|
|
4
|
-
* a
|
|
3
|
+
* Real content drawn small, once: a scaled-down snapshot of a page, a grid or
|
|
4
|
+
* a slide, rendered by the content's own renderer from its real data and
|
|
5
|
+
* then frozen, the way a gallery card previews what it opens.
|
|
5
6
|
*
|
|
6
7
|
* LAID OUT AT FULL SIZE, THEN SCALED. The content is given `width` CSS pixels
|
|
7
8
|
* to lay itself out in, exactly as it would on its own page, and the whole is
|
|
8
9
|
* scaled down to the box with a CSS transform, so the preview is the page
|
|
9
10
|
* itself at a smaller size and never a second layout of it. Left out, the
|
|
10
|
-
* content fills the box unscaled
|
|
11
|
+
* content fills the box unscaled.
|
|
11
12
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
13
|
+
* RENDERED ONCE, THEN A STILL COPY. The content is mounted once the box has
|
|
14
|
+
* stayed within `rootMargin` (a screen, by default) of what its scroll
|
|
15
|
+
* container shows for `dwellMs` and the shared budget
|
|
16
|
+
* (`LivePreviewBudgetProvider`) grants it one of the renders it allows at
|
|
17
|
+
* once. It reads what it needs and draws, out of sight behind the stand-in.
|
|
18
|
+
* When it says it has drawn (`useLivePreview().ready()`) its render is given
|
|
19
|
+
* to the next box, and once the page's fonts have loaded and the layout has
|
|
20
|
+
* settled, what it drew is copied (its DOM, cloned: `stills.ts`), the copy
|
|
21
|
+
* fades in over the stand-in, and the content is unmounted in the same
|
|
22
|
+
* commit. From then on the preview holds nothing live: no React tree under
|
|
23
|
+
* it, no subscription, no observer of its own and no timer, and it never
|
|
24
|
+
* reads, polls or redraws again. A copy laid out at `width` is scaled to its
|
|
25
|
+
* box by one observer the provider's copies share, so a resized window
|
|
26
|
+
* rescales it rather than drawing it again; one with no `width` is drawn
|
|
27
|
+
* again only if its box changes size.
|
|
19
28
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
29
|
+
* KEPT FOR THE PAGE. With a `snapshot` key, the copy is kept by the provider
|
|
30
|
+
* under that key, and a preview mounted again under it (a card back after a
|
|
31
|
+
* filter, a change of shape or a page of results) shows the same copy at
|
|
32
|
+
* once, with nothing read. A page loaded afresh draws afresh.
|
|
33
|
+
*
|
|
34
|
+
* A FRAME CANNOT BE COPIED. Content that runs a page in a frame (`frame`)
|
|
35
|
+
* lives in another document: there is nothing in this one to clone, and a
|
|
36
|
+
* clone of the frame would load the page again. So a framed preview keeps its
|
|
37
|
+
* frame once drawn, fading it in over the stand-in. Kept frames are capped
|
|
38
|
+
* apart; one the reader has left is taken back only when a frame coming near
|
|
39
|
+
* needs its place, and shows its stand-in until it is drawn again.
|
|
40
|
+
*
|
|
41
|
+
* Until it has drawn, while it waits for a render, when it failed (`fail()`,
|
|
42
|
+
* or no drawing within `LIVE_PREVIEW_RENDER_MS`), and in a browser with no
|
|
43
|
+
* IntersectionObserver, the box shows `fallback`. What has drawn is shown
|
|
44
|
+
* over it, and the stand-in is hidden once the fade is done: fading the
|
|
45
|
+
* stand-in out at the same time showed both at half strength halfway through.
|
|
46
|
+
*
|
|
47
|
+
* NEVER INTERACTIVE, NEVER ANNOUNCED. The live layer and the copy are
|
|
48
|
+
* `inert`, take no pointer and are hidden from assistive technology: nothing
|
|
49
|
+
* in them can be focused or clicked, and whatever surrounds the preview (a
|
|
50
|
+
* card's link) names what it shows. Under `prefers-reduced-motion` nothing
|
|
51
|
+
* fades.
|
|
25
52
|
*/
|
|
26
53
|
/**
|
|
27
54
|
* How long a box stays near the viewport before its content is asked for: a
|
|
@@ -29,39 +56,101 @@ import { type ReactNode } from 'react';
|
|
|
29
56
|
* past does not.
|
|
30
57
|
*/
|
|
31
58
|
export declare const LIVE_PREVIEW_DWELL_MS = 120;
|
|
32
|
-
/**
|
|
33
|
-
|
|
59
|
+
/**
|
|
60
|
+
* How far ahead of what its scroll container shows a box starts rendering: a
|
|
61
|
+
* whole screen in each direction. A snapshot costs nothing once it is taken,
|
|
62
|
+
* so drawing a screen ahead is paid once, and it is what lets a reader
|
|
63
|
+
* scrolling at any pace meet every card already drawn. Measured on a gallery
|
|
64
|
+
* of 44 cards at 1440 by 900 with the CPU slowed fourfold, 200 pixels ahead
|
|
65
|
+
* left cards on screen before their first draw in about sixty samples of a
|
|
66
|
+
* scroll down and back; a screen ahead left none, and the first screen was
|
|
67
|
+
* drawn within a frame or two of the time it took before.
|
|
68
|
+
*/
|
|
69
|
+
export declare const LIVE_PREVIEW_MARGIN = "100% 0px";
|
|
70
|
+
/**
|
|
71
|
+
* The longest a render may take before it gives up and keeps its stand-in.
|
|
72
|
+
* A preview is a glimpse: content that has not drawn in fifteen seconds is
|
|
73
|
+
* waiting on a read that is failing slowly, and holding one of the budget's
|
|
74
|
+
* few renders for it would hold the rest of a gallery up behind it. Fifteen
|
|
75
|
+
* is past the ten seconds a page in a frame is given to answer at all
|
|
76
|
+
* (`FRAME_HELLO_TIMEOUT_MS`) and its grace after, so a frame settles itself
|
|
77
|
+
* first.
|
|
78
|
+
*/
|
|
79
|
+
export declare const LIVE_PREVIEW_RENDER_MS = 15000;
|
|
80
|
+
/**
|
|
81
|
+
* Gives the previews under it a budget and a store of their own: `max`
|
|
82
|
+
* rendering at once, `maxFrames` frames kept, and up to `kept` still copies
|
|
83
|
+
* kept by key for as long as the provider is mounted.
|
|
84
|
+
*/
|
|
85
|
+
export declare function LivePreviewBudgetProvider({ max, maxFrames, kept, children, }: {
|
|
34
86
|
max?: number | undefined;
|
|
87
|
+
maxFrames?: number | undefined;
|
|
88
|
+
kept?: number | undefined;
|
|
35
89
|
children: ReactNode;
|
|
36
90
|
}): import("react").JSX.Element;
|
|
37
91
|
export interface LivePreviewSignals {
|
|
38
|
-
/** The content has drawn: the
|
|
92
|
+
/** The content has drawn: it is copied and the copy shown, or for a frame, the frame is shown. */
|
|
39
93
|
ready: () => void;
|
|
40
|
-
/** The content has nothing to draw or could not draw: the stand-in stays, and the
|
|
94
|
+
/** The content has nothing to draw or could not draw: the stand-in stays, and the render is given back. */
|
|
41
95
|
fail: () => void;
|
|
42
96
|
}
|
|
43
97
|
/** What live content tells the preview around it. Outside one, both do nothing. */
|
|
44
98
|
export declare function useLivePreview(): LivePreviewSignals;
|
|
45
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* Where a preview is in its life: `idle` (not asked for), `waiting` (asked,
|
|
101
|
+
* no render yet), `live` (rendering), `ready` (drawn: a still copy, or a kept
|
|
102
|
+
* frame) and `failed` (the stand-in for good).
|
|
103
|
+
*/
|
|
46
104
|
export type LivePreviewState = 'idle' | 'waiting' | 'live' | 'ready' | 'failed';
|
|
47
105
|
export interface LivePreviewProps {
|
|
48
|
-
/** What is drawn small. Mounted only while
|
|
106
|
+
/** What is drawn small. Mounted only while it renders, or for a frame while it is kept. */
|
|
49
107
|
children: ReactNode;
|
|
50
|
-
/** The stand-in, drawn whenever
|
|
108
|
+
/** The stand-in, drawn whenever nothing else is. */
|
|
51
109
|
fallback: ReactNode;
|
|
52
110
|
/** The width, in CSS pixels, the content lays itself out at before it is scaled to the box. */
|
|
53
111
|
width?: number | undefined;
|
|
54
|
-
/** How near
|
|
112
|
+
/** How near what its scroll container shows the box comes before its content is rendered (`LIVE_PREVIEW_MARGIN`). */
|
|
55
113
|
rootMargin?: string | undefined;
|
|
56
|
-
/** Nothing
|
|
114
|
+
/** Nothing is drawn: the stand-in only (no content to show, or a host that has turned previews off). */
|
|
57
115
|
disabled?: boolean | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* The content runs a page in a frame: it is kept rather than copied, and
|
|
118
|
+
* counts against the budget's frames for as long as it is.
|
|
119
|
+
*/
|
|
120
|
+
frame?: boolean | undefined;
|
|
121
|
+
/**
|
|
122
|
+
* What is drawn, as a key: previews under one provider with the same key
|
|
123
|
+
* share one still copy, so a preview mounted again shows it at once and
|
|
124
|
+
* renders nothing. A key names a version of the content; content that has
|
|
125
|
+
* changed takes a new key and is drawn afresh.
|
|
126
|
+
*/
|
|
127
|
+
snapshot?: string | undefined;
|
|
58
128
|
/** How long the box stays near the viewport before its content is asked for, in ms. */
|
|
59
129
|
dwellMs?: number | undefined;
|
|
60
130
|
/** Told each time the state moves, for a host that measures. */
|
|
61
131
|
onStateChange?: ((state: LivePreviewState) => void) | undefined;
|
|
62
132
|
className?: string | undefined;
|
|
63
133
|
}
|
|
64
|
-
|
|
134
|
+
/**
|
|
135
|
+
* The element a box is scrolled by: the nearest ancestor that scrolls, or
|
|
136
|
+
* null for the window. An observer's margin grows its root and nothing else,
|
|
137
|
+
* and every scroller between the box and the root clips it at its own edge.
|
|
138
|
+
*/
|
|
139
|
+
export declare function scrollRoot(el: Element): Element | null;
|
|
140
|
+
/** How a layer laid out at a size of its own is fitted to its box (`PreviewScaleProps.fit`). */
|
|
141
|
+
export type PreviewFit = 'width' | 'contain' | 'fill';
|
|
142
|
+
/**
|
|
143
|
+
* The most of a filled layer's content that may fall outside its box, on
|
|
144
|
+
* either axis, before `fill` contains it instead: a fifth. A laptop's board
|
|
145
|
+
* (16:10) in a card's 16:9 loses a tenth of its foot; a phone's board would
|
|
146
|
+
* lose four fifths of itself, and is shown whole.
|
|
147
|
+
*/
|
|
148
|
+
export declare const PREVIEW_FILL_MAX_CUT = 0.2;
|
|
149
|
+
/**
|
|
150
|
+
* A preview whose `snapshot` key changes is another preview: what it holds
|
|
151
|
+
* belongs to the content it drew, so it starts again under the new key.
|
|
152
|
+
*/
|
|
153
|
+
export declare function LivePreview(props: LivePreviewProps): import("react").JSX.Element;
|
|
65
154
|
export interface PreviewScaleProps {
|
|
66
155
|
children: ReactNode;
|
|
67
156
|
/** The width, in CSS pixels, the content is laid out at. */
|
|
@@ -70,10 +159,13 @@ export interface PreviewScaleProps {
|
|
|
70
159
|
height?: number | undefined;
|
|
71
160
|
/**
|
|
72
161
|
* `width` scales the content to the box's width from its top (the top of a
|
|
73
|
-
* page); `contain` scales it to fit inside the box whole, centred
|
|
74
|
-
*
|
|
162
|
+
* page); `contain` scales it to fit inside the box whole, centred; `fill`
|
|
163
|
+
* covers the box edge to edge, centred across and held at the top, wherever
|
|
164
|
+
* that leaves at most [PREVIEW_FILL_MAX_CUT] of the content outside it, and
|
|
165
|
+
* contains it otherwise (a design's board, which may be a laptop's screen
|
|
166
|
+
* or a phone's). `contain` and `fill` need a `height`.
|
|
75
167
|
*/
|
|
76
|
-
fit?:
|
|
168
|
+
fit?: PreviewFit | undefined;
|
|
77
169
|
}
|
|
78
170
|
/**
|
|
79
171
|
* Content laid out at a size of its own and scaled to the box it is drawn in,
|
|
@@ -1,34 +1,78 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* How many live previews
|
|
2
|
+
* How many live previews render at once: the budget a gallery's cards share.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
4
|
+
* A PREVIEW RENDERS ONCE. Real content (a page of prose, a grid of cells, a
|
|
5
|
+
* slide, a board of figures) is mounted near the viewport, reads what it
|
|
6
|
+
* needs, draws, and is then kept as a still copy with nothing live behind it.
|
|
7
|
+
* What costs is the RENDER: the reads, the mount and the layout, all at once
|
|
8
|
+
* as a row of cards scrolls near. So the budget bounds how many render at the
|
|
9
|
+
* same moment (`max`), and a slot is given back the moment its content has
|
|
10
|
+
* drawn; past the cap an ask waits, drawing its stand-in, and is granted the
|
|
11
|
+
* moment a render finishes, the oldest ask first.
|
|
12
|
+
*
|
|
13
|
+
* A FRAME IS THE EXCEPTION. A page in a frame lives in another document and
|
|
14
|
+
* cannot be copied, so a framed preview that has drawn keeps its page, and a
|
|
15
|
+
* page running in a frame is by far the dearest thing a preview holds. Frames
|
|
16
|
+
* kept are capped apart (`maxFrames`): a kept frame that leaves the viewport
|
|
17
|
+
* is parked, and taken back (`reclaim`) only when a frame coming near needs
|
|
18
|
+
* its place, the one the reader left longest ago first. One on screen is
|
|
19
|
+
* never taken back for another.
|
|
11
20
|
*
|
|
12
21
|
* Plain bookkeeping with no layout, so it is tested without a browser.
|
|
13
22
|
*/
|
|
14
23
|
/**
|
|
15
|
-
* The most previews
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
24
|
+
* The most previews rendering at once. Six is the number of connections a
|
|
25
|
+
* browser opens to one host over HTTP/1.1, which is how a preview's reads
|
|
26
|
+
* (an outline, a board and its datasets, a frame's ticket) reach their
|
|
27
|
+
* server: a seventh render would only queue its reads behind the first six,
|
|
28
|
+
* while holding its mount and layout open beside them.
|
|
29
|
+
*/
|
|
30
|
+
export declare const LIVE_PREVIEW_MAX = 6;
|
|
31
|
+
/**
|
|
32
|
+
* The most frames kept at once. A frame is a page in another document, often
|
|
33
|
+
* in a process of its own; twelve is the number of pages a design's canvas
|
|
34
|
+
* runs at once (`CANVAS_BOARD_MAX_LIVE`).
|
|
19
35
|
*/
|
|
20
|
-
export declare const
|
|
36
|
+
export declare const LIVE_PREVIEW_MAX_FRAMES = 12;
|
|
37
|
+
/** One preview's hold on the budget, from its ask to its release. */
|
|
38
|
+
export interface LivePreviewSlot {
|
|
39
|
+
/** Gives back everything it holds, or withdraws the ask if it was never granted. Calling it again does nothing. */
|
|
40
|
+
release(): void;
|
|
41
|
+
/**
|
|
42
|
+
* The content has drawn: its render slot is given back. A frame keeps its
|
|
43
|
+
* place among the frames until it is released or reclaimed; anything else
|
|
44
|
+
* holds nothing more, as if released.
|
|
45
|
+
*/
|
|
46
|
+
drawn(): void;
|
|
47
|
+
/**
|
|
48
|
+
* A kept frame left the viewport: it stays, and may be reclaimed when a
|
|
49
|
+
* frame coming near needs its place. Before the grant the ask is
|
|
50
|
+
* withdrawn, since nothing was drawn. A render that is not a frame runs on
|
|
51
|
+
* to its end wherever it is, so for one this does nothing.
|
|
52
|
+
*/
|
|
53
|
+
park(): void;
|
|
54
|
+
/** Back near the viewport: answers whether the slot is still held, and if so it is no longer reclaimable. */
|
|
55
|
+
resume(): boolean;
|
|
56
|
+
}
|
|
21
57
|
export interface LivePreviewBudget {
|
|
22
|
-
/** The most
|
|
58
|
+
/** The most renders at once. */
|
|
23
59
|
readonly max: number;
|
|
60
|
+
/** The most frames kept at once. */
|
|
61
|
+
readonly maxFrames: number;
|
|
24
62
|
/**
|
|
25
|
-
* Asks for a slot. `grant` is called once, now or when a slot frees.
|
|
26
|
-
*
|
|
27
|
-
*
|
|
63
|
+
* Asks for a slot. `grant` is called once, now or when a slot frees.
|
|
64
|
+
* `reclaim` is called if a parked frame is taken back, so the holder tears
|
|
65
|
+
* its page down; nothing else is ever reclaimed. `frame` says the content
|
|
66
|
+
* runs a page in a frame, which counts against `maxFrames` for as long as
|
|
67
|
+
* it is kept.
|
|
28
68
|
*/
|
|
29
|
-
request(grant: () => void
|
|
30
|
-
/**
|
|
69
|
+
request(grant: () => void, reclaim?: () => void, frame?: boolean): LivePreviewSlot;
|
|
70
|
+
/** Renders in progress, for a test or a measurement. */
|
|
31
71
|
live(): number;
|
|
72
|
+
/** Frames kept, rendering or drawn. */
|
|
73
|
+
frames(): number;
|
|
74
|
+
/** Kept frames that left the viewport. */
|
|
75
|
+
parked(): number;
|
|
32
76
|
/** Asks waiting now. */
|
|
33
77
|
waiting(): number;
|
|
34
78
|
}
|
|
@@ -47,4 +91,4 @@ export declare const immediately: LivePreviewSchedule;
|
|
|
47
91
|
* preview does.
|
|
48
92
|
*/
|
|
49
93
|
export declare const perFrame: LivePreviewSchedule;
|
|
50
|
-
export declare function createLivePreviewBudget(max?: number, schedule?: LivePreviewSchedule): LivePreviewBudget;
|
|
94
|
+
export declare function createLivePreviewBudget(max?: number, schedule?: LivePreviewSchedule, maxFrames?: number): LivePreviewBudget;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import './LivePreview.css';
|
|
2
|
-
export { LIVE_PREVIEW_DWELL_MS, LivePreview, LivePreviewBudgetProvider, PreviewScale, useLivePreview } from './LivePreview.js';
|
|
3
|
-
export type { LivePreviewProps, LivePreviewSignals, LivePreviewState, PreviewScaleProps } from './LivePreview.js';
|
|
4
|
-
export { createLivePreviewBudget, immediately, LIVE_PREVIEW_MAX, perFrame } from './budget.js';
|
|
5
|
-
export type { LivePreviewBudget, LivePreviewSchedule } from './budget.js';
|
|
2
|
+
export { LIVE_PREVIEW_DWELL_MS, LIVE_PREVIEW_MARGIN, LIVE_PREVIEW_RENDER_MS, LivePreview, LivePreviewBudgetProvider, PREVIEW_FILL_MAX_CUT, PreviewScale, useLivePreview } from './LivePreview.js';
|
|
3
|
+
export type { LivePreviewProps, LivePreviewSignals, LivePreviewState, PreviewFit, PreviewScaleProps } from './LivePreview.js';
|
|
4
|
+
export { createLivePreviewBudget, immediately, LIVE_PREVIEW_MAX, LIVE_PREVIEW_MAX_FRAMES, perFrame } from './budget.js';
|
|
5
|
+
export type { LivePreviewBudget, LivePreviewSchedule, LivePreviewSlot } from './budget.js';
|
|
6
|
+
export { createLivePreviewStills, LIVE_PREVIEW_STILLS_KEPT } from './stills.js';
|
|
7
|
+
export type { LivePreviewKept, LivePreviewStill, LivePreviewStills } from './stills.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { LIVE_PREVIEW_DWELL_MS, LIVE_PREVIEW_MAX, LivePreview, LivePreviewBudgetProvider, PreviewScale, createLivePreviewBudget, immediately, perFrame, useLivePreview } from '../chunk-
|
|
1
|
+
export { LIVE_PREVIEW_DWELL_MS, LIVE_PREVIEW_MARGIN, LIVE_PREVIEW_MAX, LIVE_PREVIEW_MAX_FRAMES, LIVE_PREVIEW_RENDER_MS, LIVE_PREVIEW_STILLS_KEPT, LivePreview, LivePreviewBudgetProvider, PREVIEW_FILL_MAX_CUT, PreviewScale, createLivePreviewBudget, createLivePreviewStills, immediately, perFrame, useLivePreview } from '../chunk-WYKWXRJ4.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|