@swiftbrowser/react 0.9.12 → 0.10.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 +41 -3
- package/dist/components/charts.d.ts +2 -0
- package/dist/components/charts.d.ts.map +1 -1
- package/dist/components/controls.d.ts +8 -0
- package/dist/components/controls.d.ts.map +1 -1
- package/dist/components/images.d.ts +9 -0
- package/dist/components/images.d.ts.map +1 -1
- package/dist/environment.d.ts +13 -0
- package/dist/environment.d.ts.map +1 -1
- package/dist/fileImporter.d.ts +20 -0
- package/dist/fileImporter.d.ts.map +1 -0
- package/dist/host/root.d.ts +7 -0
- package/dist/host/root.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +96 -5
- package/dist/index.js.map +1 -1
- package/dist/modifiers.d.ts +23 -2
- package/dist/modifiers.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -230,7 +230,11 @@ another sidebar row adds one (the first choice does not), and back or
|
|
|
230
230
|
forward selects the row the entry recorded, through the row's own tap. The
|
|
231
231
|
URL is left alone: an app that maps screens to paths sets them with
|
|
232
232
|
`history.replaceState` on the entry the renderer made (a `pushState` of its
|
|
233
|
-
own would add a second entry for the same screen).
|
|
233
|
+
own would add a second entry for the same screen). When the app pops on its
|
|
234
|
+
own (the bar's back button), the renderer's step back is asynchronous and
|
|
235
|
+
the app's `replaceState` for what it shows now runs before it lands; the
|
|
236
|
+
renderer sets that URL again on the entry it arrives at, so the address bar
|
|
237
|
+
follows either back button.
|
|
234
238
|
On a phone, a `fill` island follows the on-screen keyboard (`keyboard`,
|
|
235
239
|
on by default for `fill`, or `mount(..., { keyboard: true })`): its height
|
|
236
240
|
becomes a bottom inset, so a field, a bottom search field or a chat's
|
|
@@ -262,6 +266,10 @@ swapped item (`{playing ? <ToolbarItem>…stop…</ToolbarItem> :
|
|
|
262
266
|
<ToolbarItem placement="bottomBar">{toolButtons}</ToolbarItem>
|
|
263
267
|
```
|
|
264
268
|
|
|
269
|
+
`placement="largeTitle"` (iOS 26) puts a view in the large title row in
|
|
270
|
+
place of the title's text, a logo beside the screen's name say; it scrolls
|
|
271
|
+
away with the content and the bar shows `navigationTitle` once it has.
|
|
272
|
+
|
|
265
273
|
```tsx
|
|
266
274
|
<List
|
|
267
275
|
navigationTitle="Notes"
|
|
@@ -337,6 +345,10 @@ scroll view's leading edge (or `scrollPositionAnchor`), and setting it
|
|
|
337
345
|
scrolls there, on that scroll view's axes only. `proxy.scrollTo(id, anchor,
|
|
338
346
|
{ axes: 'horizontal' })` limits a reader's scroll the same way, so a pager
|
|
339
347
|
inside a list leaves the list where it is.
|
|
348
|
+
`onScrollVisibilityChange={(visible) => …}` (or `{ threshold, action }`,
|
|
349
|
+
0.5 by default) is `.onScrollVisibilityChange`: it hears when that share
|
|
350
|
+
of the view comes into its scroll view's visible area, below a bar the
|
|
351
|
+
view scrolls under, or leaves it.
|
|
340
352
|
Name a coordinate space with `coordinateSpace="page"` on the `ScrollView`
|
|
341
353
|
(or any view), and a `GeometryReader` inside reads its frame there with
|
|
342
354
|
`proxy.frame({ named: 'page' })`, updated as the page scrolls.
|
|
@@ -387,6 +399,30 @@ real views laid over the canvas, so they draw above its other commands. `useAVPl
|
|
|
387
399
|
mute, volume, rate) that `VideoPlayer` shows in the page's `<video>`; the
|
|
388
400
|
position is read or observed without re-rendering.
|
|
389
401
|
|
|
402
|
+
An image is inert, as a SwiftUI image is. `<AsyncImage url={…}
|
|
403
|
+
webInteractions />` gives a remote picture the browser's own image
|
|
404
|
+
interactions back: a long press's Save / Share / Copy on iOS, dragging it
|
|
405
|
+
out of the page, the right-click menu. Use it on an image with no tap,
|
|
406
|
+
gesture or context menu of its own.
|
|
407
|
+
|
|
408
|
+
`keyboardType`, `textContentType`, `textInputAutocapitalization` and
|
|
409
|
+
`autocorrectionDisabled` are SwiftUI's text input hints, for the field they
|
|
410
|
+
are written on or the fields below: `<TextField text={[email, setEmail]}
|
|
411
|
+
keyboardType="emailAddress" textContentType="emailAddress"
|
|
412
|
+
textInputAutocapitalization="never" />` asks for the email keyboard and
|
|
413
|
+
autofill, without capitals.
|
|
414
|
+
|
|
415
|
+
`fileImporter` is the browser's file chooser, opened when `isPresented`
|
|
416
|
+
turns true; set it from a button's action, since a browser opens a chooser
|
|
417
|
+
only within a tap. `onCompletion` gets the chosen `File`s, and a dismissed
|
|
418
|
+
chooser calls `onCancellation`:
|
|
419
|
+
|
|
420
|
+
```tsx
|
|
421
|
+
<Button title="Upload Logo" action={() => setImporting(true)}
|
|
422
|
+
fileImporter={{ isPresented: [importing, setImporting], allowedContentTypes: ['image/png', 'image/jpeg', '.svg'],
|
|
423
|
+
onCompletion: ([file]) => upload(file) }} />
|
|
424
|
+
```
|
|
425
|
+
|
|
390
426
|
### Mouse, keyboard and effects
|
|
391
427
|
|
|
392
428
|
A web app may have a mouse and a keyboard, so the modifiers SwiftUI keeps
|
|
@@ -424,7 +460,9 @@ with their values in `x` and `y`: categories, numbers or dates. The
|
|
|
424
460
|
component builds the scales and ticks the Swift Charts module builds
|
|
425
461
|
(bands, nice numeric domains that include zero, calendar strides), groups
|
|
426
462
|
lines and areas by series, colors `foregroundStyleBy` series from the chart
|
|
427
|
-
palette with a legend, and places `annotation`s.
|
|
463
|
+
palette with a legend, and places `annotation`s. `yAxisFormat` writes
|
|
464
|
+
the numeric axis's labels (`.chartYAxis { AxisMarks(format:) }`), as in
|
|
465
|
+
`yAxisFormat={(v) => `$${v}`}`.
|
|
428
466
|
|
|
429
467
|
## Mixing with ordinary React
|
|
430
468
|
|
|
@@ -555,7 +593,7 @@ read with a hook). Props, callbacks and external stores need no bridging.
|
|
|
555
593
|
- **Controls**: `Button` (styles, roles, sizes), `Toggle`, `Picker`,
|
|
556
594
|
`Slider`, `Stepper`, `TextField` and `SecureField` (focus bindings, submit
|
|
557
595
|
labels), `TextEditor`, `DatePicker`, `ColorPicker`, `ShareLink`, `Menu`,
|
|
558
|
-
`EditButton`.
|
|
596
|
+
`EditButton`, `fileImporter`.
|
|
559
597
|
- **Containers**: `List` (selection, edit mode, swipe actions, deletion,
|
|
560
598
|
reordering, pull to refresh), `Form`, `Section`, `Table`, `GroupBox`,
|
|
561
599
|
`DisclosureGroup`, `ControlGroup`, `ContentUnavailableView`.
|
|
@@ -86,6 +86,8 @@ export interface ChartProps extends ViewModifiers {
|
|
|
86
86
|
domain?: readonly [number, number];
|
|
87
87
|
includesZero?: boolean;
|
|
88
88
|
};
|
|
89
|
+
/** `.chartYAxis { AxisMarks(format:) }`: the text of a numeric axis's labels (`(v) => `$${v}``). */
|
|
90
|
+
yAxisFormat?: (value: number) => string;
|
|
89
91
|
children?: ReactNode;
|
|
90
92
|
}
|
|
91
93
|
/** Steps of 1, 2, 2.5, 5 × 10ᵏ, the one nearest `span / (desired − 1)`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../src/components/charts.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../src/components/charts.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,kBAAkB,EAGlB,WAAW,EACX,cAAc,EAEf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAGxD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACjE,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,UAAU,UAAU;IAClB,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,6FAA6F;IAC7F,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,CAAC,EAAE,UAAU,CAAC;IACd,CAAC,EAAE,UAAU,CAAC;IACd,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,CAAC,EAAE,UAAU,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,CAAC,EAAE,UAAU,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC;AACD,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,CAAC,EAAE,UAAU,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,0DAA0D;IAC1D,CAAC,CAAC,EAAE,UAAU,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,+DAA+D;AAC/D,wBAAgB,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAElD;AACD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAEpD;AACD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAEpD;AACD,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAEtD;AACD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAEpD;AAED,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,gEAAgE;IAChE,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IACtC,iGAAiG;IACjG,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC;IAC1D,0EAA0E;IAC1E,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5E,sFAAsF;IACtF,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACxE,oGAAoG;IACpG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA+DD,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,MAAM,CAU1D;AAwDD,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,CA0DpH;AAwCD,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAsMlD"}
|
|
@@ -8,6 +8,12 @@ export interface ButtonProps extends ViewModifiers {
|
|
|
8
8
|
action?: () => void;
|
|
9
9
|
/** The label, when there is no `title`. */
|
|
10
10
|
children?: ReactNode;
|
|
11
|
+
/**
|
|
12
|
+
* What `EditButton` sets: the edit mode the button shows and flips. The
|
|
13
|
+
* `button` op carries it so a native renderer can draw the platform's edit
|
|
14
|
+
* button (iOS's checkmark while editing); the web renderer draws the title.
|
|
15
|
+
*/
|
|
16
|
+
editMode?: 'active' | 'inactive';
|
|
11
17
|
}
|
|
12
18
|
export declare function Button(props: ButtonProps): ReactNode;
|
|
13
19
|
export interface ToggleProps extends ViewModifiers {
|
|
@@ -79,6 +85,8 @@ export interface ProgressViewProps extends ViewModifiers {
|
|
|
79
85
|
export declare function ProgressView(props: ProgressViewProps): ReactNode;
|
|
80
86
|
export interface ToolbarItemProps {
|
|
81
87
|
placement?: ToolbarItemPlacementName;
|
|
88
|
+
/** `.sharedBackgroundVisibility(_:)`: `hidden` draws the item without the bar's shared glass. */
|
|
89
|
+
sharedBackgroundVisibility?: 'automatic' | 'visible' | 'hidden';
|
|
82
90
|
children?: ReactNode;
|
|
83
91
|
}
|
|
84
92
|
/** `ToolbarItem(placement:) { }`, inside a `toolbar` modifier. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/components/controls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqD,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACxH,OAAO,EAAY,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG5D,OAAO,EAAsE,KAAK,wBAAwB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AASrJ,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/components/controls.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,15 @@ export interface AsyncImageProps extends ViewModifiers {
|
|
|
8
8
|
placeholder?: ReactNode;
|
|
9
9
|
/** Shown when the image failed to load (the placeholder by default). */
|
|
10
10
|
failure?: ReactNode;
|
|
11
|
+
/**
|
|
12
|
+
* Keep the browser's own image interactions: a long press's Save / Share /
|
|
13
|
+
* Copy on iOS, dragging the image out, the right-click menu. Off by
|
|
14
|
+
* default, as a SwiftUI image is inert; for an image with no tap, gesture
|
|
15
|
+
* or context menu of its own.
|
|
16
|
+
*/
|
|
17
|
+
webInteractions?: boolean;
|
|
18
|
+
/** `.accessibilityLabel(_:)`: what the picture shows (alt text). */
|
|
19
|
+
accessibilityLabel?: string | undefined;
|
|
11
20
|
}
|
|
12
21
|
/**
|
|
13
22
|
* `AsyncImage(url:)`: the page loads the image to learn its size (the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/components/images.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE9E,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yDAAyD;IACzD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/components/images.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE9E,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yDAAyD;IACzD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAUD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,CAuC5D"}
|
package/dist/environment.d.ts
CHANGED
|
@@ -8,6 +8,17 @@ import { type ReactNode } from 'react';
|
|
|
8
8
|
export type ControlSize = 'mini' | 'small' | 'regular' | 'large' | 'extraLarge';
|
|
9
9
|
/** `.symbolRenderingMode(_:)`: `palette` draws a symbol's layers in the foreground styles' levels. */
|
|
10
10
|
export type SymbolRenderingMode = 'monochrome' | 'multicolor' | 'hierarchical' | 'palette';
|
|
11
|
+
/** The text input hints a text field carries (the `textfield` element's props of the same names). */
|
|
12
|
+
export interface TextInputHints {
|
|
13
|
+
keyboard?: KeyboardType | undefined;
|
|
14
|
+
contentType?: TextContentType | undefined;
|
|
15
|
+
autocapitalization?: 'never' | 'words' | 'sentences' | 'characters' | undefined;
|
|
16
|
+
autocorrectionDisabled?: boolean | undefined;
|
|
17
|
+
}
|
|
18
|
+
/** `UIKeyboardType`'s cases. */
|
|
19
|
+
export type KeyboardType = 'default' | 'asciiCapable' | 'numbersAndPunctuation' | 'URL' | 'numberPad' | 'phonePad' | 'namePhonePad' | 'emailAddress' | 'decimalPad' | 'twitter' | 'webSearch' | 'asciiCapableNumberPad';
|
|
20
|
+
/** `UITextContentType`'s names. */
|
|
21
|
+
export type TextContentType = 'name' | 'givenName' | 'familyName' | 'emailAddress' | 'telephoneNumber' | 'username' | 'password' | 'newPassword' | 'oneTimeCode' | 'URL' | 'fullStreetAddress' | 'postalCode' | 'creditCardNumber';
|
|
11
22
|
export interface ViewEnvironment {
|
|
12
23
|
buttonStyle?: ButtonStyle;
|
|
13
24
|
controlSize?: ControlSize;
|
|
@@ -17,6 +28,8 @@ export interface ViewEnvironment {
|
|
|
17
28
|
refresh?: () => unknown;
|
|
18
29
|
/** `.submitLabel`: the return key's label of the text fields below. */
|
|
19
30
|
submitLabel?: string;
|
|
31
|
+
/** `.keyboardType`, `.textContentType`, `.textInputAutocapitalization`, `.autocorrectionDisabled` for the text fields below. */
|
|
32
|
+
textInputHints?: TextInputHints;
|
|
20
33
|
/** `.labelStyle`: how the `Label`s below draw. */
|
|
21
34
|
labelStyle?: 'automatic' | 'titleAndIcon' | 'titleOnly' | 'iconOnly' | undefined;
|
|
22
35
|
/** `.redacted(reason: .placeholder)`: text and images below draw as placeholder shapes. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7G,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;AAEhF,sGAAsG;AACtG,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;IACxB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,UAAU,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IACjF,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;IAC5C,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,sBAAsB,0CAAqC,CAAC;AAEzE,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,CAEvF;AAOD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,sGAAsG;IACtG,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED,eAAO,MAAM,kBAAkB,sCAI7B,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAEhH;AAED,oCAAoC;AACpC,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AAED,mEAAmE;AACnE,eAAO,MAAM,cAAc,iCAAwB,IAAI,SAAe,CAAC;AAEvE,wBAAgB,UAAU,IAAI,MAAM,IAAI,CAGvC;AAED,4CAA4C;AAC5C,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D;AAED,oFAAoF;AACpF,wBAAgB,WAAW,IAAI,OAAO,CAErC"}
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7G,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;AAEhF,sGAAsG;AACtG,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;AAE3F,qGAAqG;AACrG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC1C,kBAAkB,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;IAChF,sBAAsB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9C;AAED,gCAAgC;AAChC,MAAM,MAAM,YAAY,GACpB,SAAS,GAAG,cAAc,GAAG,uBAAuB,GAAG,KAAK,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,GACxG,cAAc,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,uBAAuB,CAAC;AAEtF,mCAAmC;AACnC,MAAM,MAAM,eAAe,GACvB,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,cAAc,GAAG,iBAAiB,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,GAClH,aAAa,GAAG,KAAK,GAAG,mBAAmB,GAAG,YAAY,GAAG,kBAAkB,CAAC;AAEpF,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;IACxB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gIAAgI;IAChI,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kDAAkD;IAClD,UAAU,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IACjF,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;IAC5C,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,sBAAsB,0CAAqC,CAAC;AAEzE,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,CAEvF;AAOD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,sGAAsG;IACtG,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED,eAAO,MAAM,kBAAkB,sCAI7B,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAEhH;AAED,oCAAoC;AACpC,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AAED,mEAAmE;AACnE,eAAO,MAAM,cAAc,iCAAwB,IAAI,SAAe,CAAC;AAEvE,wBAAgB,UAAU,IAAI,MAAM,IAAI,CAGvC;AAED,4CAA4C;AAC5C,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D;AAED,oFAAoF;AACpF,wBAAgB,WAAW,IAAI,OAAO,CAErC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `.fileImporter(isPresented:allowedContentTypes:…)`: the browser's file
|
|
3
|
+
* chooser in place of the Files app. A browser opens a chooser only within a
|
|
4
|
+
* tap; a tap's state changes render before its event returns (host/root.ts),
|
|
5
|
+
* so the layout effect that sees `isPresented` turn true opens it in time.
|
|
6
|
+
* Set `isPresented` from a button's action. `onCompletion` gets the chosen
|
|
7
|
+
* `File`s; a dismissed chooser calls `onCancellation` instead, as on iOS.
|
|
8
|
+
*/
|
|
9
|
+
import { type ReactNode } from 'react';
|
|
10
|
+
import { type BindingValue } from './binding';
|
|
11
|
+
export interface FileImporterModifier {
|
|
12
|
+
isPresented: BindingValue<boolean>;
|
|
13
|
+
/** What the chooser offers (its `accept`): MIME types, patterns (`image/*`) or extensions (`.svg`); any file when empty. */
|
|
14
|
+
allowedContentTypes: string[];
|
|
15
|
+
allowsMultipleSelection?: boolean;
|
|
16
|
+
onCompletion: (files: File[]) => void;
|
|
17
|
+
onCancellation?: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare function FileImporterPresenter(spec: FileImporterModifier): ReactNode;
|
|
20
|
+
//# sourceMappingURL=fileImporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileImporter.d.ts","sourceRoot":"","sources":["../src/fileImporter.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACnC,4HAA4H;IAC5H,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,YAAY,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,CAuB3E"}
|
package/dist/host/root.d.ts
CHANGED
|
@@ -19,6 +19,13 @@ export interface SwiftUIRoot {
|
|
|
19
19
|
}
|
|
20
20
|
export declare function createSwiftUIRoot(sink: OpsSink): SwiftUIRoot;
|
|
21
21
|
export type { ColorScheme, DynamicTypeSize, Op };
|
|
22
|
+
/**
|
|
23
|
+
* Registers the reconciler with the React DevTools hook (`__REACT_DEVTOOLS_GLOBAL_HOOK__`)
|
|
24
|
+
* when the page has one: DevTools then sees the SwiftUI tree, and React Fast
|
|
25
|
+
* Refresh (whose runtime installs that hook) can refresh its components in
|
|
26
|
+
* place. Call it before the first root; `react-dom` does the same for itself.
|
|
27
|
+
*/
|
|
28
|
+
export declare function injectIntoDevTools(): boolean;
|
|
22
29
|
/**
|
|
23
30
|
* `withAnimation { }`: the state changes `body` makes render in one pass whose
|
|
24
31
|
* `commit` carries the animation, so the renderer animates every frame and
|
package/dist/host/root.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/host/root.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACjH,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,8FAA8F;IAC9F,MAAM,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC;IAChB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,kFAAkF;IAClF,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACzD;AAMD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAgD5D;AAED,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACrF,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/host/root.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACjH,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,8FAA8F;IAC9F,MAAM,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC;IAChB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,kFAAkF;IAClF,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACzD;AAMD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAgD5D;AAED,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACrF,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,18 +3,19 @@
|
|
|
3
3
|
* SwiftBrowser's render ops; `createSwiftUIRoot` hands them to the renderer
|
|
4
4
|
* of @swiftbrowser/web, which draws them with its iOS layout engine.
|
|
5
5
|
*/
|
|
6
|
-
export { createSwiftUIRoot, withAnimation, type SwiftUIRoot } from './host/root';
|
|
6
|
+
export { createSwiftUIRoot, injectIntoDevTools, withAnimation, type SwiftUIRoot } from './host/root';
|
|
7
7
|
export { mount, type MountOptions, type Mounted } from './mount';
|
|
8
8
|
export { SwiftUIView, type SwiftUIViewProps } from './island';
|
|
9
9
|
export { useContextBridge } from './bridge';
|
|
10
10
|
export type { Binding, BindingValue } from './binding';
|
|
11
11
|
export { readBinding } from './binding';
|
|
12
|
-
export { useColorScheme, useDynamicTypeSize, useHorizontalSizeClass, useRedacted, type HorizontalSizeClass, useDismiss, useViewEnvironment, type ControlSize, type SymbolRenderingMode, type Environment, type ViewEnvironment, } from './environment';
|
|
12
|
+
export { useColorScheme, useDynamicTypeSize, useHorizontalSizeClass, useRedacted, type HorizontalSizeClass, useDismiss, useViewEnvironment, type ControlSize, type SymbolRenderingMode, type KeyboardType, type TextContentType, type TextInputHints, type Environment, type ViewEnvironment, } from './environment';
|
|
13
13
|
export { useNavigation } from './navigation-context';
|
|
14
14
|
export type { ViewModifiers, ForegroundLayers, BackgroundValue, SearchableModifier, ToolbarItemPlacementName, ToolbarRole, DragGestureModifier, DragValue, MagnifyGestureModifier, RotateGestureModifier, PinchValue, SwipeActionsModifier, AlignmentGuideName, DropDestinationModifier, InspectorModifier, ContainerAxes, ContainerRelativeFrameValue, } from './modifiers';
|
|
15
15
|
export { VisualEffect, type ScrollTransitionClosure, type ScrollTransitionPhase, type ScrollTransitionSpec, type VisualEffectClosure, } from './visualEffect';
|
|
16
16
|
export type { ContentMarginsValue, ScrollEdgeEffectHiddenValue, ScrollEdgeEffectStyle, ScrollEdgeEffectStyleValue, ScrollEdges } from './scrollEnvironment';
|
|
17
17
|
export type { SheetModifier, AlertModifier, DetentValue } from './presentation';
|
|
18
|
+
export type { FileImporterModifier } from './fileImporter';
|
|
18
19
|
export * from './values';
|
|
19
20
|
export { Path, type CGRect, type Point } from './path';
|
|
20
21
|
export { ScrollViewReader, type ScrollViewProxy, type ScrollPositionValue } from './scrollReader';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,KAAK,mBAAmB,EACxB,UAAU,EACV,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC5J,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChF,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,11 +7,11 @@ import { watchKeyboard } from "@swiftbrowser/web/src/deviceMode";
|
|
|
7
7
|
import { Renderer } from "@swiftbrowser/web/src/renderer";
|
|
8
8
|
import { jsx, jsxs, Fragment as Fragment$1 } from "react/jsx-runtime";
|
|
9
9
|
import { applyTypeSizeVariables } from "@swiftbrowser/web/src/typography";
|
|
10
|
+
import { browserEnvironment, performHostRequest } from "@swiftbrowser/web/src/hostRequests";
|
|
10
11
|
import { registerHostContent, notifyHostContentChange, unregisterHostContent } from "@swiftbrowser/web/src/hostContent";
|
|
11
12
|
import { createRoot } from "react-dom/client";
|
|
12
13
|
import { flushSync } from "react-dom";
|
|
13
14
|
import { chooseColor } from "@swiftbrowser/web/src/colorPicker";
|
|
14
|
-
import { performHostRequest, browserEnvironment } from "@swiftbrowser/web/src/hostRequests";
|
|
15
15
|
import { timingFor } from "@swiftbrowser/web/src/animation";
|
|
16
16
|
const ViewEnvironmentContext = createContext({});
|
|
17
17
|
function useViewEnvironment() {
|
|
@@ -415,6 +415,9 @@ function createSwiftUIRoot(sink) {
|
|
|
415
415
|
}
|
|
416
416
|
};
|
|
417
417
|
}
|
|
418
|
+
function injectIntoDevTools() {
|
|
419
|
+
return reconciler.injectIntoDevTools() === true;
|
|
420
|
+
}
|
|
418
421
|
function withAnimation(first, second) {
|
|
419
422
|
const animation = typeof first === "function" ? { type: "default" } : first ?? { type: "default" };
|
|
420
423
|
const body = typeof first === "function" ? first : second;
|
|
@@ -651,6 +654,30 @@ function DropDestination({ action, isTargeted, accepts, children }) {
|
|
|
651
654
|
children
|
|
652
655
|
);
|
|
653
656
|
}
|
|
657
|
+
function FileImporterPresenter(spec) {
|
|
658
|
+
const [presented, setPresented] = readBinding(spec.isPresented);
|
|
659
|
+
const latest = useRef(spec);
|
|
660
|
+
latest.current = spec;
|
|
661
|
+
const choosing = useRef(false);
|
|
662
|
+
useLayoutEffect(() => {
|
|
663
|
+
if (!presented || choosing.current) return;
|
|
664
|
+
const { allowedContentTypes, allowsMultipleSelection } = latest.current;
|
|
665
|
+
const pick = browserEnvironment.pickFiles;
|
|
666
|
+
if (!pick) {
|
|
667
|
+
setPresented(false);
|
|
668
|
+
latest.current.onCancellation?.();
|
|
669
|
+
return;
|
|
670
|
+
}
|
|
671
|
+
choosing.current = true;
|
|
672
|
+
void pick({ accept: allowedContentTypes.join(","), multiple: allowsMultipleSelection === true }).then((files) => {
|
|
673
|
+
choosing.current = false;
|
|
674
|
+
setPresented(false);
|
|
675
|
+
if (files.length > 0) latest.current.onCompletion(files);
|
|
676
|
+
else latest.current.onCancellation?.();
|
|
677
|
+
});
|
|
678
|
+
}, [presented, setPresented]);
|
|
679
|
+
return null;
|
|
680
|
+
}
|
|
654
681
|
const HIERARCHY = { primary: 1, secondary: 2, tertiary: 3, quaternary: 4 };
|
|
655
682
|
function rgb(r2, g, b, a = 1) {
|
|
656
683
|
return { r: r2, g, b, a };
|
|
@@ -1676,6 +1703,8 @@ function toolbarPlacement(name) {
|
|
|
1676
1703
|
return "leading";
|
|
1677
1704
|
case "principal":
|
|
1678
1705
|
return "principal";
|
|
1706
|
+
case "largeTitle":
|
|
1707
|
+
return "largeTitle";
|
|
1679
1708
|
case "bottomBar":
|
|
1680
1709
|
return "bottom";
|
|
1681
1710
|
case "secondaryAction":
|
|
@@ -1752,6 +1781,7 @@ const MODIFIER_KEYS = /* @__PURE__ */ new Set([
|
|
|
1752
1781
|
"alert",
|
|
1753
1782
|
"confirmationDialog",
|
|
1754
1783
|
"presentationDetents",
|
|
1784
|
+
"onScrollVisibilityChange",
|
|
1755
1785
|
"onTapGesture",
|
|
1756
1786
|
"dragGesture",
|
|
1757
1787
|
"magnifyGesture",
|
|
@@ -1786,6 +1816,10 @@ const MODIFIER_KEYS = /* @__PURE__ */ new Set([
|
|
|
1786
1816
|
"preferredColorScheme",
|
|
1787
1817
|
"refreshable",
|
|
1788
1818
|
"submitLabel",
|
|
1819
|
+
"keyboardType",
|
|
1820
|
+
"textContentType",
|
|
1821
|
+
"textInputAutocapitalization",
|
|
1822
|
+
"autocorrectionDisabled",
|
|
1789
1823
|
"labelStyle",
|
|
1790
1824
|
"task",
|
|
1791
1825
|
"onChangeOf",
|
|
@@ -1801,6 +1835,7 @@ const MODIFIER_KEYS = /* @__PURE__ */ new Set([
|
|
|
1801
1835
|
"layoutValue",
|
|
1802
1836
|
"safeAreaInset",
|
|
1803
1837
|
"popover",
|
|
1838
|
+
"fileImporter",
|
|
1804
1839
|
"redacted",
|
|
1805
1840
|
"keyboardShortcut",
|
|
1806
1841
|
"onKeyPress",
|
|
@@ -1936,7 +1971,11 @@ const ENVIRONMENT_KEYS = /* @__PURE__ */ new Set([
|
|
|
1936
1971
|
"labelStyle",
|
|
1937
1972
|
"redacted",
|
|
1938
1973
|
"textCase",
|
|
1939
|
-
"symbolRenderingMode"
|
|
1974
|
+
"symbolRenderingMode",
|
|
1975
|
+
"keyboardType",
|
|
1976
|
+
"textContentType",
|
|
1977
|
+
"textInputAutocapitalization",
|
|
1978
|
+
"autocorrectionDisabled"
|
|
1940
1979
|
]);
|
|
1941
1980
|
const SCROLL_KEYS = /* @__PURE__ */ new Set(["scrollEdgeEffectStyle", "scrollEdgeEffectHidden", "contentMargins"]);
|
|
1942
1981
|
function neutral(key, node) {
|
|
@@ -2093,6 +2132,10 @@ function apply(key, value, node, sides) {
|
|
|
2093
2132
|
case "presentationDetents":
|
|
2094
2133
|
sides.push(presentationDetents(value));
|
|
2095
2134
|
return node;
|
|
2135
|
+
case "onScrollVisibilityChange": {
|
|
2136
|
+
const spec = typeof value === "function" ? { action: value } : value;
|
|
2137
|
+
return sb("styled", { style: { scrollVisibility: { threshold: spec.threshold ?? 0.5 } } }, { scrollvisibility: (event) => spec.action(event.visible) }, node);
|
|
2138
|
+
}
|
|
2096
2139
|
case "onTapGesture":
|
|
2097
2140
|
return sb("tapgesture", {}, { tap: value }, node);
|
|
2098
2141
|
case "dragGesture": {
|
|
@@ -2256,6 +2299,14 @@ function apply(key, value, node, sides) {
|
|
|
2256
2299
|
return withEnvironment({ refresh: value }, node);
|
|
2257
2300
|
case "submitLabel":
|
|
2258
2301
|
return withEnvironment({ submitLabel: value }, node);
|
|
2302
|
+
case "keyboardType":
|
|
2303
|
+
return withTextInputHint({ keyboard: value }, node);
|
|
2304
|
+
case "textContentType":
|
|
2305
|
+
return withTextInputHint({ contentType: value ?? void 0 }, node);
|
|
2306
|
+
case "textInputAutocapitalization":
|
|
2307
|
+
return withTextInputHint({ autocapitalization: value ?? void 0 }, node);
|
|
2308
|
+
case "autocorrectionDisabled":
|
|
2309
|
+
return withTextInputHint({ autocorrectionDisabled: value === true }, node);
|
|
2259
2310
|
case "labelStyle":
|
|
2260
2311
|
return withEnvironment({ labelStyle: value }, node);
|
|
2261
2312
|
case "task": {
|
|
@@ -2298,6 +2349,9 @@ function apply(key, value, node, sides) {
|
|
|
2298
2349
|
case "popover":
|
|
2299
2350
|
sides.push(createElement(SheetPresenter, value));
|
|
2300
2351
|
return node;
|
|
2352
|
+
case "fileImporter":
|
|
2353
|
+
sides.push(createElement(FileImporterPresenter, value));
|
|
2354
|
+
return node;
|
|
2301
2355
|
case "redacted":
|
|
2302
2356
|
return withEnvironment({ redacted: Boolean(value) }, node);
|
|
2303
2357
|
case "keyboardShortcut":
|
|
@@ -2349,6 +2403,13 @@ function apply(key, value, node, sides) {
|
|
|
2349
2403
|
}
|
|
2350
2404
|
}
|
|
2351
2405
|
}
|
|
2406
|
+
function withTextInputHint(hint, node) {
|
|
2407
|
+
return createElement(TextInputHint, { hint }, node);
|
|
2408
|
+
}
|
|
2409
|
+
function TextInputHint({ hint, children }) {
|
|
2410
|
+
const outer = useViewEnvironment().textInputHints;
|
|
2411
|
+
return withEnvironment({ textInputHints: { ...outer, ...hint } }, children);
|
|
2412
|
+
}
|
|
2352
2413
|
const NO_INSETS = { top: 0, leading: 0, bottom: 0, trailing: 0 };
|
|
2353
2414
|
const NO_GEOMETRY = { size: { width: 0, height: 0 }, origin: null, safeArea: NO_INSETS, scrollView: null };
|
|
2354
2415
|
function nextGeometry(event, reported) {
|
|
@@ -2850,6 +2911,7 @@ function Button(props) {
|
|
|
2850
2911
|
const controlSize = ownSize ?? environment.controlSize;
|
|
2851
2912
|
const buttonProps = { role: own.role ?? null, style };
|
|
2852
2913
|
if (controlSize !== void 0 && controlSize !== "regular") buttonProps["controlSize"] = controlSize;
|
|
2914
|
+
if (own.editMode !== void 0) buttonProps["editMode"] = own.editMode;
|
|
2853
2915
|
const label = own.title !== void 0 ? /* @__PURE__ */ jsx(Text, { children: own.title }) : own.children;
|
|
2854
2916
|
const tap = () => {
|
|
2855
2917
|
own.action?.();
|
|
@@ -2955,6 +3017,17 @@ function TextField(props) {
|
|
|
2955
3017
|
const { own, modifiers } = splitProps(props);
|
|
2956
3018
|
const environment = useViewEnvironment();
|
|
2957
3019
|
const ownSubmitLabel = takeModifier(modifiers, "submitLabel");
|
|
3020
|
+
const keyboardType = takeModifier(modifiers, "keyboardType");
|
|
3021
|
+
const textContentType = takeModifier(modifiers, "textContentType");
|
|
3022
|
+
const autocapitalization = takeModifier(modifiers, "textInputAutocapitalization");
|
|
3023
|
+
const autocorrectionDisabled = takeModifier(modifiers, "autocorrectionDisabled");
|
|
3024
|
+
const hints = {
|
|
3025
|
+
...environment.textInputHints,
|
|
3026
|
+
...keyboardType !== void 0 ? { keyboard: keyboardType } : {},
|
|
3027
|
+
...textContentType !== void 0 ? { contentType: textContentType ?? void 0 } : {},
|
|
3028
|
+
...autocapitalization !== void 0 ? { autocapitalization: autocapitalization ?? void 0 } : {},
|
|
3029
|
+
...autocorrectionDisabled !== void 0 ? { autocorrectionDisabled } : {}
|
|
3030
|
+
};
|
|
2958
3031
|
const [text, setText] = readBinding(own.text, own.onChange);
|
|
2959
3032
|
const fieldProps = {
|
|
2960
3033
|
text,
|
|
@@ -2966,6 +3039,10 @@ function TextField(props) {
|
|
|
2966
3039
|
if (own.axis) fieldProps["axis"] = own.axis;
|
|
2967
3040
|
const submitLabel = ownSubmitLabel ?? environment.submitLabel;
|
|
2968
3041
|
if (submitLabel) fieldProps["submitLabel"] = submitLabel;
|
|
3042
|
+
if (hints.keyboard && hints.keyboard !== "default") fieldProps["keyboard"] = hints.keyboard;
|
|
3043
|
+
if (hints.contentType) fieldProps["contentType"] = hints.contentType;
|
|
3044
|
+
if (hints.autocapitalization) fieldProps["autocapitalization"] = hints.autocapitalization;
|
|
3045
|
+
if (hints.autocorrectionDisabled) fieldProps["autocorrectionDisabled"] = true;
|
|
2969
3046
|
const focus = own.focused !== void 0 ? readBinding(own.focused) : null;
|
|
2970
3047
|
if (focus) fieldProps["focused"] = focus[0];
|
|
2971
3048
|
return applyModifiers(
|
|
@@ -3005,7 +3082,8 @@ function ProgressView(props) {
|
|
|
3005
3082
|
);
|
|
3006
3083
|
}
|
|
3007
3084
|
function ToolbarItem(props) {
|
|
3008
|
-
|
|
3085
|
+
const hidden = props.sharedBackgroundVisibility === "hidden";
|
|
3086
|
+
return sb("toolbar", hidden ? { placement: toolbarPlacement(props.placement), sharedBackground: "hidden" } : { placement: toolbarPlacement(props.placement) }, void 0, props.children);
|
|
3009
3087
|
}
|
|
3010
3088
|
const ToolbarItemGroup = ToolbarItem;
|
|
3011
3089
|
function ToolbarSpacer(props) {
|
|
@@ -3316,7 +3394,7 @@ function Menu(props) {
|
|
|
3316
3394
|
function EditButton(props) {
|
|
3317
3395
|
const { own, modifiers } = splitProps(props);
|
|
3318
3396
|
const [editing, setEditing] = readBinding(own.editMode, own.onChange);
|
|
3319
|
-
return applyModifiers(/* @__PURE__ */ jsx(Button, { title: editing ? "Done" : "Edit", action: () => setEditing(!editing) }), modifiers);
|
|
3397
|
+
return applyModifiers(/* @__PURE__ */ jsx(Button, { title: editing ? "Done" : "Edit", editMode: editing ? "active" : "inactive", action: () => setEditing(!editing) }), modifiers);
|
|
3320
3398
|
}
|
|
3321
3399
|
const loaded = /* @__PURE__ */ new Map();
|
|
3322
3400
|
function AsyncImage(props) {
|
|
@@ -3348,7 +3426,14 @@ function AsyncImage(props) {
|
|
|
3348
3426
|
if (state === null) return own.placeholder ?? null;
|
|
3349
3427
|
if (state === "failed") return own.failure ?? own.placeholder ?? null;
|
|
3350
3428
|
return applyModifiers(
|
|
3351
|
-
sb("image", {
|
|
3429
|
+
sb("image", {
|
|
3430
|
+
url: state.url,
|
|
3431
|
+
resizable: own.resizable ?? false,
|
|
3432
|
+
width: state.width,
|
|
3433
|
+
height: state.height,
|
|
3434
|
+
...own.webInteractions ? { webInteractions: true } : {},
|
|
3435
|
+
...own.accessibilityLabel ? { accessibilityLabel: own.accessibilityLabel } : {}
|
|
3436
|
+
}),
|
|
3352
3437
|
modifiers
|
|
3353
3438
|
);
|
|
3354
3439
|
}
|
|
@@ -3581,6 +3666,11 @@ function Chart(props) {
|
|
|
3581
3666
|
}
|
|
3582
3667
|
const xScale = scaleFor(xValues, { domain: own.xScale?.domain });
|
|
3583
3668
|
const yScale = scaleFor(yValues, { includesZero: own.yScale?.includesZero ?? true, domain: own.yScale?.domain });
|
|
3669
|
+
if (own.yAxisFormat && yScale.kind === "number") {
|
|
3670
|
+
const [lo, hi] = yScale.domain;
|
|
3671
|
+
const format = own.yAxisFormat;
|
|
3672
|
+
yScale.labels = yScale.labels.map((label) => ({ ...label, text: format(Number((lo + label.at * (hi - lo)).toFixed(10))) }));
|
|
3673
|
+
}
|
|
3584
3674
|
const round2 = (n) => Math.round(n * 1e6) / 1e6;
|
|
3585
3675
|
const ux = (v) => round2(xScale.unit(v));
|
|
3586
3676
|
const uy = (v) => round2(1 - yScale.unit(v));
|
|
@@ -4586,6 +4676,7 @@ export {
|
|
|
4586
4676
|
geometryProxy,
|
|
4587
4677
|
gradient,
|
|
4588
4678
|
hex,
|
|
4679
|
+
injectIntoDevTools,
|
|
4589
4680
|
insets,
|
|
4590
4681
|
keyframeValues,
|
|
4591
4682
|
mount,
|