@swiftbrowser/react 0.5.1 → 0.5.3

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
@@ -103,6 +103,14 @@ a React root of its own: the page's React state reaches it through props as
103
103
  usual, and its contexts through `contexts={[…]}` (see
104
104
  [Contexts across roots](#contexts-across-roots)).
105
105
 
106
+ There is no status bar in a page, so `safeArea` stands in for one. A
107
+ `fill` island keeps 10 points at the top, the way SwiftUI keeps a window's
108
+ bars off its edge. Navigation bars sit below that inset and their
109
+ background reaches up into it, and lists start below it. A `content`
110
+ island has no insets. Pass a number for the top inset (`safeArea={0}` puts
111
+ the bars flush with the edge) or an object such as
112
+ `safeArea={{ top: 24, bottom: 34 }}`.
113
+
106
114
  ### Try the demos
107
115
 
108
116
  ```sh
@@ -208,7 +216,15 @@ collapse into the bar's More menu (an ellipsis at the trailing end), as on
208
216
  an iPhone; with `toolbarRole="editor"` on the screen, a regular width shows
209
217
  them in the bar before the trailing items, and only those that do not fit
210
218
  go into More. `bottomBar` items float in glass capsules at the foot of the
211
- screen, split by `ToolbarSpacer`.
219
+ screen: consecutive items share one, and a `ToolbarSpacer` ends it, as iOS
220
+ 26's does. A `flexible` spacer (the default) pushes the groups apart; a
221
+ `fixed` one keeps them centered, 8 apart.
222
+
223
+ ```tsx
224
+ <ToolbarItem placement="bottomBar">{undoButton}{redoButton}</ToolbarItem>
225
+ <ToolbarSpacer sizing="fixed" placement="bottomBar" />
226
+ <ToolbarItem placement="bottomBar">{toolButtons}</ToolbarItem>
227
+ ```
212
228
 
213
229
  ```tsx
214
230
  <List
@@ -84,6 +84,20 @@ export interface ToolbarItemProps {
84
84
  /** `ToolbarItem(placement:) { }`, inside a `toolbar` modifier. */
85
85
  export declare function ToolbarItem(props: ToolbarItemProps): ReactNode;
86
86
  export declare const ToolbarItemGroup: typeof ToolbarItem;
87
+ export interface ToolbarSpacerProps {
88
+ /**
89
+ * `flexible` (the default) shares the room the groups leave, pushing them
90
+ * apart; `fixed` is a standard 8 gap and keeps the row centered.
91
+ */
92
+ sizing?: 'flexible' | 'fixed';
93
+ placement?: ToolbarItemPlacementName;
94
+ }
95
+ /**
96
+ * `ToolbarSpacer(_:placement:)` (iOS 26), inside a `toolbar` modifier: ends
97
+ * the glass group of the items before it, so a bottom bar's items float in
98
+ * separate capsules. Between navigation bar groups it only separates them.
99
+ */
100
+ export declare function ToolbarSpacer(props: ToolbarSpacerProps): ReactNode;
87
101
  export type DatePickerComponents = 'date' | 'hourAndMinute' | 'dateAndTime';
88
102
  export interface DatePickerProps extends ViewModifiers {
89
103
  label?: string;
@@ -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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"}
package/dist/index.js CHANGED
@@ -483,7 +483,11 @@ function useContextBridge(contexts = [], options = {}) {
483
483
  const values = all.map((context) => useContext(context));
484
484
  return (children) => all.reduceRight((inner, context, index) => createElement(context.Provider, { value: values[index] }, inner), children);
485
485
  }
486
- const NO_SAFE_AREA = { top: 0, leading: 0, bottom: 0, trailing: 0 };
486
+ const WINDOW_TOP_INSET = 10;
487
+ function insetsOf(safeArea, fit) {
488
+ const given = typeof safeArea === "number" ? { top: safeArea } : safeArea ?? { top: fit === "fill" ? WINDOW_TOP_INSET : 0 };
489
+ return { top: given.top ?? 0, leading: given.leading ?? 0, bottom: given.bottom ?? 0, trailing: given.trailing ?? 0 };
490
+ }
487
491
  function SwiftUIView({
488
492
  children,
489
493
  fit = "fill",
@@ -491,6 +495,7 @@ function SwiftUIView({
491
495
  dynamicTypeSize = "large",
492
496
  contexts,
493
497
  assets,
498
+ safeArea,
494
499
  className,
495
500
  style
496
501
  }) {
@@ -506,7 +511,7 @@ function SwiftUIView({
506
511
  const instance = mount(screen.current, latest.current, {
507
512
  colorScheme,
508
513
  dynamicTypeSize,
509
- safeArea: NO_SAFE_AREA,
514
+ safeArea: insetsOf(safeArea, fit),
510
515
  contentHeight: fit === "content",
511
516
  ...assets ? { assets } : {}
512
517
  });
@@ -519,6 +524,11 @@ function SwiftUIView({
519
524
  useLayoutEffect(() => {
520
525
  mounted.current?.root.render(tree);
521
526
  });
527
+ const insets2 = insetsOf(safeArea, fit);
528
+ const insetsKey = `${insets2.top},${insets2.leading},${insets2.bottom},${insets2.trailing}`;
529
+ useLayoutEffect(() => {
530
+ mounted.current?.renderer.setSafeArea(insets2);
531
+ }, [insetsKey]);
522
532
  useLayoutEffect(() => {
523
533
  if (device.current) applyTypeSizeVariables(device.current, dynamicTypeSize);
524
534
  mounted.current?.setEnvironment({ colorScheme, dynamicTypeSize });
@@ -1759,18 +1769,91 @@ function Searchable({ text, onChange, prompt }) {
1759
1769
  function applyModifiers(element, modifiers) {
1760
1770
  const sides = [];
1761
1771
  const node = wrap(element, modifiers, sides);
1762
- if (sides.length === 0) return node;
1763
1772
  return createElement(Fragment, null, node, ...sides);
1764
1773
  }
1765
1774
  function wrap(element, modifiers, sides) {
1766
1775
  let node = element;
1767
1776
  for (const [key, value] of modifiers) {
1768
- if (value === void 0) continue;
1769
- if (value === null && key !== "lineLimit" && key !== "badge") continue;
1770
- node = apply(key, value, node, sides);
1777
+ const inactive = value === void 0 || value === null && key !== "lineLimit" && key !== "badge";
1778
+ const next = inactive ? node : apply(key, value, node, sides);
1779
+ node = next === node ? neutral(key, node) : next;
1771
1780
  }
1772
1781
  return node;
1773
1782
  }
1783
+ const STYLED_KEYS = /* @__PURE__ */ new Set([
1784
+ "padding",
1785
+ "font",
1786
+ "fontWeight",
1787
+ "bold",
1788
+ "foregroundStyle",
1789
+ "background",
1790
+ "frame",
1791
+ "cornerRadius",
1792
+ "clipShape",
1793
+ "clipped",
1794
+ "opacity",
1795
+ "disabled",
1796
+ "hidden",
1797
+ "layoutPriority",
1798
+ "lineLimit",
1799
+ "multilineTextAlignment",
1800
+ "fixedSize",
1801
+ "offset",
1802
+ "rotationEffect",
1803
+ "scaleEffect",
1804
+ "shadow",
1805
+ "tint",
1806
+ "badge",
1807
+ "listRowInsets",
1808
+ "imageScale",
1809
+ "transition",
1810
+ "gridColumnAlignment",
1811
+ "gridCellColumns",
1812
+ "aspectRatio",
1813
+ "scaledToFit",
1814
+ "scaledToFill",
1815
+ "blur",
1816
+ "brightness",
1817
+ "contrast",
1818
+ "saturation",
1819
+ "grayscale",
1820
+ "hueRotation",
1821
+ "colorInvert",
1822
+ "colorMultiply",
1823
+ "blendMode",
1824
+ "mask",
1825
+ "position",
1826
+ "zIndex",
1827
+ "allowsHitTesting",
1828
+ "ignoresSafeArea",
1829
+ "rotation3DEffect",
1830
+ "gridCellAnchor",
1831
+ "alignmentGuide",
1832
+ "help",
1833
+ "pointerStyle",
1834
+ "matchedGeometryEffect",
1835
+ "containerRelativeFrame",
1836
+ "contentTransition"
1837
+ ]);
1838
+ const ENVIRONMENT_KEYS = /* @__PURE__ */ new Set([
1839
+ "buttonStyle",
1840
+ "controlSize",
1841
+ "pickerStyle",
1842
+ "labelsHidden",
1843
+ "refreshable",
1844
+ "submitLabel",
1845
+ "labelStyle",
1846
+ "redacted",
1847
+ "textCase"
1848
+ ]);
1849
+ const SCROLL_KEYS = /* @__PURE__ */ new Set(["scrollEdgeEffectStyle", "scrollEdgeEffectHidden", "contentMargins"]);
1850
+ function neutral(key, node) {
1851
+ if (key === "overlay") return decorated("overlay", "center", node, null);
1852
+ if (STYLED_KEYS.has(key)) return styled({}, node);
1853
+ if (ENVIRONMENT_KEYS.has(key)) return withEnvironment({}, node);
1854
+ if (SCROLL_KEYS.has(key)) return withScrollSettings({}, node);
1855
+ return node;
1856
+ }
1774
1857
  function apply(key, value, node, sides) {
1775
1858
  switch (key) {
1776
1859
  case "padding":
@@ -2792,6 +2875,9 @@ function ToolbarItem(props) {
2792
2875
  return sb("toolbar", { placement: toolbarPlacement(props.placement) }, void 0, props.children);
2793
2876
  }
2794
2877
  const ToolbarItemGroup = ToolbarItem;
2878
+ function ToolbarSpacer(props) {
2879
+ return sb("toolbar", { placement: toolbarPlacement(props.placement), spacer: props.sizing ?? "flexible" });
2880
+ }
2795
2881
  function DatePicker(props) {
2796
2882
  const { own, modifiers } = splitProps(props);
2797
2883
  const environment = useViewEnvironment();
@@ -4347,6 +4433,7 @@ export {
4347
4433
  Toggle,
4348
4434
  ToolbarItem,
4349
4435
  ToolbarItemGroup,
4436
+ ToolbarSpacer,
4350
4437
  UnevenRoundedRectangle,
4351
4438
  VStack,
4352
4439
  VideoPlayer,