@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 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":"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"}
@@ -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":"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"}
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;CACrB;AAUD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,CAgC5D"}
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"}
@@ -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":"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"}
@@ -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"}
@@ -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
@@ -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';
@@ -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;AACjF,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,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,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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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
- return sb("toolbar", { placement: toolbarPlacement(props.placement) }, void 0, props.children);
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", { url: state.url, resizable: own.resizable ?? false, width: state.width, height: state.height }),
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,