@swiftbrowser/react 0.0.0-stage → 0.5.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 +490 -2
- package/dist/binding.d.ts +9 -0
- package/dist/binding.d.ts.map +1 -0
- package/dist/bridge.d.ts +17 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/components/animators.d.ts +40 -0
- package/dist/components/animators.d.ts.map +1 -0
- package/dist/components/canvas.d.ts +138 -0
- package/dist/components/canvas.d.ts.map +1 -0
- package/dist/components/charts.d.ts +100 -0
- package/dist/components/charts.d.ts.map +1 -0
- package/dist/components/containers.d.ts +78 -0
- package/dist/components/containers.d.ts.map +1 -0
- package/dist/components/controls.d.ts +106 -0
- package/dist/components/controls.d.ts.map +1 -0
- package/dist/components/geometry.d.ts +161 -0
- package/dist/components/geometry.d.ts.map +1 -0
- package/dist/components/host.d.ts +24 -0
- package/dist/components/host.d.ts.map +1 -0
- package/dist/components/images.d.ts +18 -0
- package/dist/components/images.d.ts.map +1 -0
- package/dist/components/lists.d.ts +26 -0
- package/dist/components/lists.d.ts.map +1 -0
- package/dist/components/media.d.ts +105 -0
- package/dist/components/media.d.ts.map +1 -0
- package/dist/components/menus.d.ts +20 -0
- package/dist/components/menus.d.ts.map +1 -0
- package/dist/components/navigation.d.ts +22 -0
- package/dist/components/navigation.d.ts.map +1 -0
- package/dist/components/row.d.ts +34 -0
- package/dist/components/row.d.ts.map +1 -0
- package/dist/components/shapes.d.ts +107 -0
- package/dist/components/shapes.d.ts.map +1 -0
- package/dist/components/split.d.ts +25 -0
- package/dist/components/split.d.ts.map +1 -0
- package/dist/components/stacks.d.ts +159 -0
- package/dist/components/stacks.d.ts.map +1 -0
- package/dist/components/system.d.ts +25 -0
- package/dist/components/system.d.ts.map +1 -0
- package/dist/components/table.d.ts +36 -0
- package/dist/components/table.d.ts.map +1 -0
- package/dist/components/tabs.d.ts +20 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/text.d.ts +63 -0
- package/dist/components/text.d.ts.map +1 -0
- package/dist/coordinateSpace.d.ts +20 -0
- package/dist/coordinateSpace.d.ts.map +1 -0
- package/dist/dragDrop.d.ts +16 -0
- package/dist/dragDrop.d.ts.map +1 -0
- package/dist/environment.d.ts +54 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/host/instance.d.ts +67 -0
- package/dist/host/instance.d.ts.map +1 -0
- package/dist/host/reconciler.d.ts +9 -0
- package/dist/host/reconciler.d.ts.map +1 -0
- package/dist/host/root.d.ts +29 -0
- package/dist/host/root.d.ts.map +1 -0
- package/dist/host/sb.d.ts +5 -0
- package/dist/host/sb.d.ts.map +1 -0
- package/dist/host/tree.d.ts +35 -0
- package/dist/host/tree.d.ts.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4379 -0
- package/dist/index.js.map +1 -0
- package/dist/inspector.d.ts +11 -0
- package/dist/inspector.d.ts.map +1 -0
- package/dist/island.d.ts +25 -0
- package/dist/island.d.ts.map +1 -0
- package/dist/lazy.d.ts +19 -0
- package/dist/lazy.d.ts.map +1 -0
- package/dist/lifecycle.d.ts +11 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/modifiers.d.ts +379 -0
- package/dist/modifiers.d.ts.map +1 -0
- package/dist/mount.d.ts +41 -0
- package/dist/mount.d.ts.map +1 -0
- package/dist/navigation-context.d.ts +15 -0
- package/dist/navigation-context.d.ts.map +1 -0
- package/dist/path.d.ts +48 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/pointer.d.ts +65 -0
- package/dist/pointer.d.ts.map +1 -0
- package/dist/presentation.d.ts +38 -0
- package/dist/presentation.d.ts.map +1 -0
- package/dist/scrollEnvironment.d.ts +50 -0
- package/dist/scrollEnvironment.d.ts.map +1 -0
- package/dist/scrollReader.d.ts +27 -0
- package/dist/scrollReader.d.ts.map +1 -0
- package/dist/values.d.ts +118 -0
- package/dist/values.d.ts.map +1 -0
- package/dist/visualEffect.d.ts +120 -0
- package/dist/visualEffect.d.ts.map +1 -0
- package/package.json +48 -4
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `.inspector(isPresented:)`: in a regular width an `inspector` element, the
|
|
3
|
+
* view and a trailing `inspectorpanel` the renderer slides in and out; in a
|
|
4
|
+
* compact width a sheet with the inspector's content.
|
|
5
|
+
*/
|
|
6
|
+
import type { ReactNode } from 'react';
|
|
7
|
+
import type { InspectorModifier } from './modifiers';
|
|
8
|
+
export declare function Inspector({ isPresented, content, columnWidth, children }: InspectorModifier & {
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
}): ReactNode;
|
|
11
|
+
//# sourceMappingURL=inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../src/inspector.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,wBAAgB,SAAS,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,iBAAiB,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAgBlI"}
|
package/dist/island.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `SwiftUIView`: a SwiftUI tree inside a react-dom app. The element carries
|
|
3
|
+
* the device's design tokens (the `device` class, without its frame) and the
|
|
4
|
+
* renderer draws the tree in it. `fit="fill"` draws in the box the page
|
|
5
|
+
* gives it (give it a height); `fit="content"` makes the island as tall as
|
|
6
|
+
* its content. Navigation stacks and tab views fill the box, so they want
|
|
7
|
+
* `fill`.
|
|
8
|
+
*/
|
|
9
|
+
import type { AssetCatalog } from '@swiftbrowser/web/src/assets';
|
|
10
|
+
import type { ColorScheme, DynamicTypeSize } from '@swiftbrowser/web/src/protocol';
|
|
11
|
+
import { type CSSProperties, type Context, type ReactNode } from 'react';
|
|
12
|
+
export interface SwiftUIViewProps {
|
|
13
|
+
children?: ReactNode;
|
|
14
|
+
fit?: 'fill' | 'content';
|
|
15
|
+
colorScheme?: ColorScheme;
|
|
16
|
+
dynamicTypeSize?: DynamicTypeSize;
|
|
17
|
+
/** Contexts of the page the SwiftUI tree reads (this package's own are not needed). */
|
|
18
|
+
contexts?: readonly Context<unknown>[];
|
|
19
|
+
/** The asset catalog manifest for `Image(name:)` and catalog colors (see `mount`). */
|
|
20
|
+
assets?: AssetCatalog;
|
|
21
|
+
className?: string;
|
|
22
|
+
style?: CSSProperties;
|
|
23
|
+
}
|
|
24
|
+
export declare function SwiftUIView({ children, fit, colorScheme, dynamicTypeSize, contexts, assets, className, style, }: SwiftUIViewProps): ReactNode;
|
|
25
|
+
//# sourceMappingURL=island.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"island.d.ts","sourceRoot":"","sources":["../src/island.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEnF,OAAO,EAA2B,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,uFAAuF;IACvF,QAAQ,CAAC,EAAE,SAAS,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,sFAAsF;IACtF,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAID,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,GAAY,EACZ,WAAqB,EACrB,eAAyB,EACzB,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,GACN,EAAE,gBAAgB,GAAG,SAAS,CA2C9B"}
|
package/dist/lazy.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy rows (docs/ops-protocol.md, "Lazy rows"): inside a `List`,
|
|
3
|
+
* `LazyVStack` or `LazyHStack`, a `ForEach` of more rows than a batch mounts
|
|
4
|
+
* the first batch and a `lazyspacer`; the page reports the spacer when it
|
|
5
|
+
* nears the visible area (`lazy`), and the next batch mounts, with a new
|
|
6
|
+
* spacer after it.
|
|
7
|
+
*/
|
|
8
|
+
import { type ReactElement, type ReactNode } from 'react';
|
|
9
|
+
export declare const LAZY_BATCH = 12;
|
|
10
|
+
export declare const LazyContext: import("react").Context<"vertical" | "horizontal" | null>;
|
|
11
|
+
export interface LazyGroupProps {
|
|
12
|
+
rows: ReactElement[];
|
|
13
|
+
/** Set by a list: the group's first row's index among the container's children. */
|
|
14
|
+
start?: number;
|
|
15
|
+
/** Set by a list: wraps each row (selection tags) given its index among the container's children. */
|
|
16
|
+
wrap?: (row: ReactElement, containerIndex: number) => ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export declare function LazyGroup({ rows, start, wrap }: LazyGroupProps): ReactNode;
|
|
19
|
+
//# sourceMappingURL=lazy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../src/lazy.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAiF,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzI,eAAO,MAAM,UAAU,KAAK,CAAC;AAE7B,eAAO,MAAM,WAAW,2DAAwD,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qGAAqG;IACrG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,KAAK,SAAS,CAAC;CACjE;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,KAAS,EAAE,IAAI,EAAE,EAAE,cAAc,GAAG,SAAS,CAsB9E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** `.task` and `.onChange(of:)`, as components the modifiers place beside the view. */
|
|
2
|
+
export declare function Task({ id, action }: {
|
|
3
|
+
id: unknown;
|
|
4
|
+
action: (signal: AbortSignal) => unknown;
|
|
5
|
+
}): null;
|
|
6
|
+
export declare function OnChange({ value, action, initial, }: {
|
|
7
|
+
value: unknown;
|
|
8
|
+
action: (oldValue: unknown, newValue: unknown) => void;
|
|
9
|
+
initial?: boolean;
|
|
10
|
+
}): null;
|
|
11
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.tsx"],"names":[],"mappings":"AAAA,uFAAuF;AAIvF,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAA;CAAE,GAAG,IAAI,CAcpG;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAE;IACD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,IAAI,CAcP"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View modifiers as props. Every component accepts them, and applies them in
|
|
3
|
+
* the order they are written, innermost first, exactly like a SwiftUI
|
|
4
|
+
* modifier chain reads: `<Text padding background="red" />` is
|
|
5
|
+
* `Text().padding().background(.red)`. Each modifier that changes layout or
|
|
6
|
+
* style wraps the view in a `styled` element, as the Swift shim does; the
|
|
7
|
+
* environment ones wrap it in a context; the navigation and presentation ones
|
|
8
|
+
* attach preferences and hoisted elements beside it.
|
|
9
|
+
*/
|
|
10
|
+
import type { Animation, ButtonStyle, EdgeInsets, FixedSize, FontWeight, FrameAlignment, ImageScale, PickerStyle, Style, TextAlignment, ToolbarPlacement, Transition } from '@swiftbrowser/web/src/protocol';
|
|
11
|
+
import { type ReactElement, type ReactNode } from 'react';
|
|
12
|
+
import type { BindingValue } from './binding';
|
|
13
|
+
import { type ControlSize } from './environment';
|
|
14
|
+
import { type ContentMarginsValue, type ScrollEdgeEffectHiddenValue, type ScrollEdgeEffectStyleValue } from './scrollEnvironment';
|
|
15
|
+
import { type ScrollTransitionClosure, type ScrollTransitionSpec, type VisualEffectClosure } from './visualEffect';
|
|
16
|
+
import { type KeyEquivalent, type KeyboardShortcut, type OnKeyPressModifier, type SensoryFeedback, type SymbolEffectModifier } from './pointer';
|
|
17
|
+
import { type AlertModifier, type DetentValue, type SheetModifier } from './presentation';
|
|
18
|
+
import { type ColorValue, type UnitPointValue, type FontValue, type FrameValue, type PaddingValue, type StyleValue } from './values';
|
|
19
|
+
/** A shape component carries its protocol kind; `RoundedRectangle` reads the radius from its props. */
|
|
20
|
+
export interface ShapeSpec {
|
|
21
|
+
kind: string;
|
|
22
|
+
cornerRadius: number | null;
|
|
23
|
+
}
|
|
24
|
+
/** `.background(style, in: shape)` */
|
|
25
|
+
export interface BackgroundInShape {
|
|
26
|
+
fill: StyleValue;
|
|
27
|
+
in: ReactElement;
|
|
28
|
+
}
|
|
29
|
+
export type BackgroundValue = StyleValue | BackgroundInShape | ReactElement;
|
|
30
|
+
export interface SearchableModifier {
|
|
31
|
+
text: BindingValue<string>;
|
|
32
|
+
onChange?: (text: string) => void;
|
|
33
|
+
prompt?: string;
|
|
34
|
+
}
|
|
35
|
+
/** `DragGesture.Value`: the renderer's drag event, in the element's own coordinates. */
|
|
36
|
+
export interface DragValue {
|
|
37
|
+
translation: {
|
|
38
|
+
width: number;
|
|
39
|
+
height: number;
|
|
40
|
+
};
|
|
41
|
+
location: {
|
|
42
|
+
x: number;
|
|
43
|
+
y: number;
|
|
44
|
+
};
|
|
45
|
+
startLocation: {
|
|
46
|
+
x: number;
|
|
47
|
+
y: number;
|
|
48
|
+
};
|
|
49
|
+
velocity: {
|
|
50
|
+
width: number;
|
|
51
|
+
height: number;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export interface DragGestureModifier {
|
|
55
|
+
minimumDistance?: number;
|
|
56
|
+
onChanged?: (value: DragValue) => void;
|
|
57
|
+
onEnded?: (value: DragValue) => void;
|
|
58
|
+
}
|
|
59
|
+
export interface SwipeActionsModifier {
|
|
60
|
+
edge?: 'leading' | 'trailing';
|
|
61
|
+
allowsFullSwipe?: boolean;
|
|
62
|
+
/** The actions: `Button`s (a `tint` colors one, a `destructive` role makes it red). */
|
|
63
|
+
children: ReactNode;
|
|
64
|
+
}
|
|
65
|
+
export type ToolbarItemPlacementName = 'automatic' | 'topBarLeading' | 'topBarTrailing' | 'navigationBarLeading' | 'navigationBarTrailing' | 'cancellationAction' | 'confirmationAction' | 'destructiveAction' | 'primaryAction' | 'navigation' | 'principal' | 'bottomBar';
|
|
66
|
+
export declare function toolbarPlacement(name: ToolbarItemPlacementName | undefined): ToolbarPlacement;
|
|
67
|
+
export interface ViewModifiers {
|
|
68
|
+
padding?: PaddingValue;
|
|
69
|
+
font?: FontValue;
|
|
70
|
+
fontWeight?: FontWeight;
|
|
71
|
+
bold?: boolean;
|
|
72
|
+
foregroundStyle?: StyleValue;
|
|
73
|
+
background?: BackgroundValue;
|
|
74
|
+
overlay?: ReactElement | {
|
|
75
|
+
content: ReactElement;
|
|
76
|
+
alignment?: FrameAlignment;
|
|
77
|
+
};
|
|
78
|
+
frame?: FrameValue;
|
|
79
|
+
cornerRadius?: number;
|
|
80
|
+
clipShape?: ReactElement;
|
|
81
|
+
clipped?: boolean;
|
|
82
|
+
opacity?: number;
|
|
83
|
+
disabled?: boolean;
|
|
84
|
+
hidden?: boolean;
|
|
85
|
+
layoutPriority?: number;
|
|
86
|
+
/** A count, `null` to lift a limit, or a range `[min, max]` (`.lineLimit(2...4)`; `max` null for `2...`). */
|
|
87
|
+
lineLimit?: number | null | readonly [number, number | null];
|
|
88
|
+
multilineTextAlignment?: TextAlignment;
|
|
89
|
+
fixedSize?: boolean | FixedSize;
|
|
90
|
+
offset?: {
|
|
91
|
+
x?: number;
|
|
92
|
+
y?: number;
|
|
93
|
+
};
|
|
94
|
+
/** Degrees, clockwise; `{ degrees, anchor }` turns around another point. */
|
|
95
|
+
rotationEffect?: number | {
|
|
96
|
+
degrees: number;
|
|
97
|
+
anchor?: UnitPointValue;
|
|
98
|
+
};
|
|
99
|
+
scaleEffect?: number | {
|
|
100
|
+
x: number;
|
|
101
|
+
y: number;
|
|
102
|
+
anchor?: UnitPointValue;
|
|
103
|
+
};
|
|
104
|
+
shadow?: {
|
|
105
|
+
color?: ColorValue;
|
|
106
|
+
radius: number;
|
|
107
|
+
x?: number;
|
|
108
|
+
y?: number;
|
|
109
|
+
};
|
|
110
|
+
tint?: ColorValue;
|
|
111
|
+
badge?: string | number | null;
|
|
112
|
+
listRowInsets?: EdgeInsets;
|
|
113
|
+
imageScale?: ImageScale;
|
|
114
|
+
transition?: Transition;
|
|
115
|
+
/** `.animation(_:value:)`: animate this subtree's changes whenever `value` changes. */
|
|
116
|
+
animation?: {
|
|
117
|
+
animation?: Animation;
|
|
118
|
+
value: unknown;
|
|
119
|
+
};
|
|
120
|
+
gridColumnAlignment?: 'leading' | 'center' | 'trailing';
|
|
121
|
+
gridCellColumns?: number;
|
|
122
|
+
buttonStyle?: ButtonStyle | 'borderless';
|
|
123
|
+
controlSize?: ControlSize;
|
|
124
|
+
pickerStyle?: PickerStyle;
|
|
125
|
+
labelsHidden?: boolean;
|
|
126
|
+
navigationTitle?: string;
|
|
127
|
+
navigationBarTitleDisplayMode?: 'automatic' | 'inline' | 'large';
|
|
128
|
+
/** `ToolbarItem` elements. */
|
|
129
|
+
toolbar?: ReactNode;
|
|
130
|
+
searchable?: SearchableModifier;
|
|
131
|
+
navigationDestination?: (value: never) => ReactNode;
|
|
132
|
+
sheet?: SheetModifier;
|
|
133
|
+
fullScreenCover?: SheetModifier;
|
|
134
|
+
alert?: AlertModifier;
|
|
135
|
+
confirmationDialog?: AlertModifier;
|
|
136
|
+
presentationDetents?: DetentValue[];
|
|
137
|
+
onTapGesture?: () => void;
|
|
138
|
+
/** `.gesture(DragGesture().onChanged { }.onEnded { })` */
|
|
139
|
+
dragGesture?: DragGestureModifier;
|
|
140
|
+
/** `.onLongPressGesture { }` */
|
|
141
|
+
onLongPressGesture?: (() => void) | {
|
|
142
|
+
minimumDuration?: number;
|
|
143
|
+
action: () => void;
|
|
144
|
+
};
|
|
145
|
+
/** `.contextMenu { items }`: a long press or right click opens the items. */
|
|
146
|
+
contextMenu?: ReactNode;
|
|
147
|
+
/** `.swipeActions(edge:allowsFullSwipe:) { buttons }`, on a list row. */
|
|
148
|
+
swipeActions?: SwipeActionsModifier | SwipeActionsModifier[];
|
|
149
|
+
onAppear?: () => void;
|
|
150
|
+
onDisappear?: () => void;
|
|
151
|
+
/** `.tag(_:)`: read by `Picker` options and `TabView` tabs. */
|
|
152
|
+
tag?: unknown;
|
|
153
|
+
/** Extra modifiers in order, for one that must apply twice (`.padding().background().padding()`). */
|
|
154
|
+
modifiers?: ViewModifiers[];
|
|
155
|
+
/** `.aspectRatio(_:contentMode:)`: a ratio (width / height), or `{ ratio, contentMode }`; `ratio: null` keeps the view's own. */
|
|
156
|
+
aspectRatio?: number | {
|
|
157
|
+
ratio?: number | null;
|
|
158
|
+
contentMode?: 'fit' | 'fill';
|
|
159
|
+
};
|
|
160
|
+
scaledToFit?: boolean;
|
|
161
|
+
scaledToFill?: boolean;
|
|
162
|
+
blur?: number;
|
|
163
|
+
brightness?: number;
|
|
164
|
+
contrast?: number;
|
|
165
|
+
saturation?: number;
|
|
166
|
+
grayscale?: number;
|
|
167
|
+
/** Degrees. */
|
|
168
|
+
hueRotation?: number;
|
|
169
|
+
colorInvert?: boolean;
|
|
170
|
+
colorMultiply?: ColorValue;
|
|
171
|
+
/** A CSS `mix-blend-mode` name (`multiply`, `screen`, `overlay`…), as `.blendMode` maps them. */
|
|
172
|
+
blendMode?: string;
|
|
173
|
+
/** `.mask(_:)` with a style: the view shows through its alpha (a gradient fades it). */
|
|
174
|
+
mask?: StyleValue;
|
|
175
|
+
/** `.position(x:y:)` */
|
|
176
|
+
position?: {
|
|
177
|
+
x: number;
|
|
178
|
+
y: number;
|
|
179
|
+
};
|
|
180
|
+
zIndex?: number;
|
|
181
|
+
/** `.allowsHitTesting(false)` lets taps through to what is under the view. */
|
|
182
|
+
allowsHitTesting?: boolean;
|
|
183
|
+
/** `.ignoresSafeArea()` (`true`), or the edges. */
|
|
184
|
+
ignoresSafeArea?: true | ('top' | 'bottom' | 'leading' | 'trailing')[];
|
|
185
|
+
/** `.rotation3DEffect(_:axis:anchor:perspective:)`, the angle in degrees. */
|
|
186
|
+
rotation3DEffect?: {
|
|
187
|
+
angle: number;
|
|
188
|
+
axis: {
|
|
189
|
+
x: number;
|
|
190
|
+
y: number;
|
|
191
|
+
z: number;
|
|
192
|
+
};
|
|
193
|
+
anchor?: UnitPointValue;
|
|
194
|
+
perspective?: number;
|
|
195
|
+
};
|
|
196
|
+
/** `.gridCellAnchor(_:)` */
|
|
197
|
+
gridCellAnchor?: UnitPointValue;
|
|
198
|
+
/**
|
|
199
|
+
* `.alignmentGuide(_:computeValue:)`: moves the view's guide. `value` gets
|
|
200
|
+
* the view's dimensions; it is sampled at three sizes, so it must be linear
|
|
201
|
+
* in them (`d.width + 4`, `d.height / 2`, a constant), as the shim requires.
|
|
202
|
+
*/
|
|
203
|
+
alignmentGuide?: {
|
|
204
|
+
guide: AlignmentGuideName;
|
|
205
|
+
value: (d: {
|
|
206
|
+
width: number;
|
|
207
|
+
height: number;
|
|
208
|
+
}) => number;
|
|
209
|
+
};
|
|
210
|
+
/** `.preferredColorScheme(_:)`: asks the page for that appearance (`null`: the viewer's). */
|
|
211
|
+
preferredColorScheme?: 'light' | 'dark' | null;
|
|
212
|
+
/** `.refreshable { }`: the nearest `List` or `ScrollView` below shows pull to refresh. */
|
|
213
|
+
refreshable?: () => unknown;
|
|
214
|
+
/** `.submitLabel(_:)` for the text fields below: `done`, `go`, `send`, `search`, `next`… */
|
|
215
|
+
submitLabel?: string;
|
|
216
|
+
/** `.labelStyle(_:)` for the `Label`s below. */
|
|
217
|
+
labelStyle?: 'automatic' | 'titleAndIcon' | 'titleOnly' | 'iconOnly';
|
|
218
|
+
/**
|
|
219
|
+
* `.task { }`: runs when the view appears, cancelled (the signal aborts)
|
|
220
|
+
* when it disappears. `{ id, action }` restarts it when `id` changes.
|
|
221
|
+
*/
|
|
222
|
+
task?: ((signal: AbortSignal) => unknown) | {
|
|
223
|
+
id: unknown;
|
|
224
|
+
action: (signal: AbortSignal) => unknown;
|
|
225
|
+
};
|
|
226
|
+
/** `.onChange(of:initial:) { old, new in }` */
|
|
227
|
+
onChangeOf?: {
|
|
228
|
+
value: unknown;
|
|
229
|
+
action: (oldValue: unknown, newValue: unknown) => void;
|
|
230
|
+
initial?: boolean;
|
|
231
|
+
};
|
|
232
|
+
/** `.id(_:)` inside a `ScrollViewReader`: the target `proxy.scrollTo` scrolls to. */
|
|
233
|
+
scrollID?: string | number;
|
|
234
|
+
/** `.draggable(_:)`: a long press or a 10 pt drag lifts the view, carrying `payload`. */
|
|
235
|
+
draggable?: unknown;
|
|
236
|
+
/** `.dropDestination(for:)`: takes what is dropped on the view. */
|
|
237
|
+
dropDestination?: DropDestinationModifier;
|
|
238
|
+
/** `.inspector(isPresented:)`: a trailing panel in a regular width, a sheet in a compact one. */
|
|
239
|
+
inspector?: InspectorModifier;
|
|
240
|
+
/** `.onHover { hovering in }`: a mouse entering and leaving the view. */
|
|
241
|
+
onHover?: (hovering: boolean) => void;
|
|
242
|
+
/** `.help(_:)`: a tooltip. */
|
|
243
|
+
help?: string;
|
|
244
|
+
/** `.pointerStyle(_:)`: `link`, `text`, `grabIdle`, `grabActive`… or any CSS cursor. */
|
|
245
|
+
pointerStyle?: string;
|
|
246
|
+
/** `.symbolEffect(_:options:isActive:)` / `.symbolEffect(_:options:value:)` */
|
|
247
|
+
symbolEffect?: SymbolEffectModifier;
|
|
248
|
+
/** `.matchedGeometryEffect(id:in:)`: `namespace` from `useNamespace()`. */
|
|
249
|
+
matchedGeometryEffect?: {
|
|
250
|
+
id: string | number;
|
|
251
|
+
namespace?: string;
|
|
252
|
+
};
|
|
253
|
+
/** `.layoutValue(key:value:)`: values a custom `Layout` reads from this subview. */
|
|
254
|
+
layoutValue?: Record<string, unknown>;
|
|
255
|
+
/** `.safeAreaInset(edge:spacing:) { content }`: content beside the view, which the view makes room for. */
|
|
256
|
+
safeAreaInset?: {
|
|
257
|
+
edge: 'top' | 'bottom' | 'leading' | 'trailing';
|
|
258
|
+
spacing?: number;
|
|
259
|
+
alignment?: 'leading' | 'center' | 'trailing' | 'top' | 'bottom';
|
|
260
|
+
content: ReactNode;
|
|
261
|
+
};
|
|
262
|
+
/** `.popover(isPresented:)`: presented as a sheet, as on an iPhone. */
|
|
263
|
+
popover?: SheetModifier;
|
|
264
|
+
/** `.redacted(reason: .placeholder)` (`true`) and `.unredacted()` (`false`). */
|
|
265
|
+
redacted?: boolean;
|
|
266
|
+
/** `.keyboardShortcut(_:modifiers:)` on a `Button`: the shortcut runs its action. */
|
|
267
|
+
keyboardShortcut?: KeyboardShortcut | KeyEquivalent;
|
|
268
|
+
/** `.onKeyPress(keys:action:)` */
|
|
269
|
+
onKeyPress?: OnKeyPressModifier;
|
|
270
|
+
/** `.sensoryFeedback(_:trigger:)` */
|
|
271
|
+
sensoryFeedback?: {
|
|
272
|
+
feedback: SensoryFeedback;
|
|
273
|
+
trigger: unknown;
|
|
274
|
+
};
|
|
275
|
+
/** `.textCase(_:)` */
|
|
276
|
+
textCase?: 'uppercase' | 'lowercase' | null;
|
|
277
|
+
/** `.coordinateSpace(name:)`: readers inside answer `frame({ named })` relative to this view. */
|
|
278
|
+
coordinateSpace?: string;
|
|
279
|
+
/**
|
|
280
|
+
* `.contentTransition(_:)`: how the texts below change in an animated pass
|
|
281
|
+
* (`numericText` rolls them up, or down when the new number is smaller;
|
|
282
|
+
* `{ numericText: { countsDown } }` fixes the direction; `opacity` and
|
|
283
|
+
* `interpolate` crossfade; `identity` swaps).
|
|
284
|
+
*/
|
|
285
|
+
contentTransition?: 'numericText' | 'opacity' | 'interpolate' | 'identity' | {
|
|
286
|
+
numericText: {
|
|
287
|
+
countsDown?: boolean;
|
|
288
|
+
};
|
|
289
|
+
};
|
|
290
|
+
/**
|
|
291
|
+
* `.scrollEdgeEffectStyle(_:for:)` for the scroll views and lists below
|
|
292
|
+
* (and this one): `hard`, `soft` or `automatic` on both edges, or
|
|
293
|
+
* `["hard", "top"]` for some.
|
|
294
|
+
*/
|
|
295
|
+
scrollEdgeEffectStyle?: ScrollEdgeEffectStyleValue;
|
|
296
|
+
/** `.scrollEdgeEffectHidden(_:for:)`: `true` for both edges, or `[true, "bottom"]`. */
|
|
297
|
+
scrollEdgeEffectHidden?: ScrollEdgeEffectHiddenValue;
|
|
298
|
+
/**
|
|
299
|
+
* `.contentMargins(_:_:)`: padding inside the scroll views below (and this
|
|
300
|
+
* one), which their content scrolls under. Takes what `padding` takes.
|
|
301
|
+
*/
|
|
302
|
+
contentMargins?: ContentMarginsValue;
|
|
303
|
+
/**
|
|
304
|
+
* `.containerRelativeFrame(_:)`: the view's size along `axes` follows the
|
|
305
|
+
* nearest container (the scroll view's visible area, else the screen):
|
|
306
|
+
* the whole of it, `span` of `count` columns `spacing` apart, or what
|
|
307
|
+
* `length(containerLength, axis)` answers (a linear function of it).
|
|
308
|
+
*/
|
|
309
|
+
containerRelativeFrame?: ContainerRelativeFrameValue;
|
|
310
|
+
/**
|
|
311
|
+
* `.visualEffect { content, proxy in … }`: effects (offset, scale,
|
|
312
|
+
* rotation, opacity, blur, color adjustments) computed from the view's
|
|
313
|
+
* geometry, without changing its layout. `proxy.frame('global')` and
|
|
314
|
+
* `proxy.bounds('scrollView')` stay current as the page scrolls.
|
|
315
|
+
*/
|
|
316
|
+
visualEffect?: VisualEffectClosure;
|
|
317
|
+
/**
|
|
318
|
+
* `.scrollTransition { content, phase in … }`: effects as the view goes out
|
|
319
|
+
* of its scroll view's visible area and comes back. A closure, or
|
|
320
|
+
* `{ transition, configuration, axis }`.
|
|
321
|
+
*/
|
|
322
|
+
scrollTransition?: ScrollTransitionClosure | ScrollTransitionSpec;
|
|
323
|
+
}
|
|
324
|
+
/** The axes `containerRelativeFrame` sizes. */
|
|
325
|
+
export type ContainerAxes = 'horizontal' | 'vertical' | 'both';
|
|
326
|
+
export type ContainerRelativeFrameValue = ContainerAxes | {
|
|
327
|
+
axes: ContainerAxes;
|
|
328
|
+
/** `count:span:spacing:`: `span` of `count` equal columns separated by `spacing`. */
|
|
329
|
+
count?: number;
|
|
330
|
+
span?: number;
|
|
331
|
+
spacing?: number;
|
|
332
|
+
/** The closure form: the length for a container length (sampled as a linear function). */
|
|
333
|
+
length?: (containerLength: number, axis: 'horizontal' | 'vertical') => number;
|
|
334
|
+
alignment?: FrameAlignment;
|
|
335
|
+
};
|
|
336
|
+
/** The `containerRelativeFrame` style hint for a modifier value. */
|
|
337
|
+
export declare function containerRelativeFrame(value: ContainerRelativeFrameValue): NonNullable<Style['containerRelativeFrame']>;
|
|
338
|
+
export type AlignmentGuideName = 'leading' | 'trailing' | 'horizontalCenter' | 'top' | 'bottom' | 'verticalCenter' | 'firstTextBaseline' | 'lastTextBaseline' | 'listRowSeparatorLeading' | 'listRowSeparatorTrailing';
|
|
339
|
+
export interface DropDestinationModifier {
|
|
340
|
+
/**
|
|
341
|
+
* Called on a drop: the payloads of an in-app drag (what `draggable` carried),
|
|
342
|
+
* or the items dragged in from outside the page. Return false to refuse.
|
|
343
|
+
*/
|
|
344
|
+
action: (items: unknown[], location: {
|
|
345
|
+
x: number;
|
|
346
|
+
y: number;
|
|
347
|
+
}) => boolean | void;
|
|
348
|
+
/** While a drag is over the view. */
|
|
349
|
+
isTargeted?: (targeted: boolean) => void;
|
|
350
|
+
/** The MIME patterns taken from outside the page (`text/plain`, `image/*`…); none by default. */
|
|
351
|
+
accepts?: string[];
|
|
352
|
+
}
|
|
353
|
+
export interface InspectorModifier {
|
|
354
|
+
isPresented: BindingValue<boolean>;
|
|
355
|
+
content: ReactNode;
|
|
356
|
+
/** `.inspectorColumnWidth(_:)` */
|
|
357
|
+
columnWidth?: number;
|
|
358
|
+
}
|
|
359
|
+
export type ModifierKey = keyof ViewModifiers;
|
|
360
|
+
export type ModifierEntry = [ModifierKey, unknown];
|
|
361
|
+
/**
|
|
362
|
+
* Separate a component's own props from the modifiers, keeping the modifiers
|
|
363
|
+
* in the order they were written (object keys keep insertion order).
|
|
364
|
+
*/
|
|
365
|
+
export declare function splitProps<P extends object>(props: P): {
|
|
366
|
+
own: Omit<P, ModifierKey>;
|
|
367
|
+
modifiers: ModifierEntry[];
|
|
368
|
+
};
|
|
369
|
+
/** Remove and return one modifier a component handles itself. */
|
|
370
|
+
export declare function takeModifier<K extends ModifierKey>(modifiers: ModifierEntry[], key: K): ViewModifiers[K] | undefined;
|
|
371
|
+
export declare function styled(style: Style, child: ReactNode): ReactElement;
|
|
372
|
+
export declare function shapeSpecOf(element: ReactElement): ShapeSpec | null;
|
|
373
|
+
/**
|
|
374
|
+
* Apply `modifiers` to `element`, in order. Styled wrappers nest around the
|
|
375
|
+
* element; preferences, hoisted elements and lifecycle components come after
|
|
376
|
+
* it, in a fragment.
|
|
377
|
+
*/
|
|
378
|
+
export declare function applyModifiers(element: ReactNode, modifiers: readonly ModifierEntry[]): ReactNode;
|
|
379
|
+
//# sourceMappingURL=modifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modifiers.d.ts","sourceRoot":"","sources":["../src/modifiers.tsx"],"names":[],"mappings":"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"}
|
package/dist/mount.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mount(screen, element)`: the renderer of @swiftbrowser/web in `screen`
|
|
3
|
+
* (the root container, element id 0, inside the device frame or full screen)
|
|
4
|
+
* drawing a SwiftUI root. The page keeps the device chrome (theme, text size)
|
|
5
|
+
* and tells both sides through `setEnvironment`.
|
|
6
|
+
*/
|
|
7
|
+
import { type ColorScheme, type DynamicTypeSize } from '@swiftbrowser/web/src/protocol';
|
|
8
|
+
import type { AssetCatalog } from '@swiftbrowser/web/src/assets';
|
|
9
|
+
import { Renderer } from '@swiftbrowser/web/src/renderer';
|
|
10
|
+
import type { ReactNode } from 'react';
|
|
11
|
+
import { type SwiftUIRoot } from './host/root';
|
|
12
|
+
export interface MountOptions {
|
|
13
|
+
colorScheme?: ColorScheme;
|
|
14
|
+
dynamicTypeSize?: DynamicTypeSize;
|
|
15
|
+
/** Device mode: the real safe-area insets (frame mode has the iPhone's). */
|
|
16
|
+
safeArea?: {
|
|
17
|
+
top: number;
|
|
18
|
+
leading: number;
|
|
19
|
+
bottom: number;
|
|
20
|
+
trailing: number;
|
|
21
|
+
} | null;
|
|
22
|
+
/** The root is as tall as its content (an island in a page), not as the screen. */
|
|
23
|
+
contentHeight?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* The asset catalog manifest `Image(name:)` and catalog colors resolve
|
|
26
|
+
* against (the `/catalog/<App>.json` the SwiftBrowser build writes, or one
|
|
27
|
+
* of your own: `{ images: { name: { src, width, height, scale, kind } }, colors: {} }`).
|
|
28
|
+
*/
|
|
29
|
+
assets?: AssetCatalog;
|
|
30
|
+
}
|
|
31
|
+
export interface Mounted {
|
|
32
|
+
root: SwiftUIRoot;
|
|
33
|
+
renderer: Renderer;
|
|
34
|
+
setEnvironment(environment: {
|
|
35
|
+
colorScheme?: ColorScheme;
|
|
36
|
+
dynamicTypeSize?: DynamicTypeSize;
|
|
37
|
+
}): void;
|
|
38
|
+
unmount(): void;
|
|
39
|
+
}
|
|
40
|
+
export declare function mount(screen: HTMLElement, element: ReactNode, options?: MountOptions): Mounted;
|
|
41
|
+
//# sourceMappingURL=mount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA0B,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAChH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACrF,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,CAAC,WAAW,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAC;QAAC,eAAe,CAAC,EAAE,eAAe,CAAA;KAAE,GAAG,IAAI,CAAC;IACpG,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAgElG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/** What a `NavigationStack` offers the views inside it. */
|
|
3
|
+
export interface NavigationContextValue {
|
|
4
|
+
push(value: unknown): void;
|
|
5
|
+
pop(): void;
|
|
6
|
+
/** `.navigationDestination(for:)`: how a pushed value becomes a screen. */
|
|
7
|
+
registerDestination(destination: (value: unknown) => ReactNode): void;
|
|
8
|
+
}
|
|
9
|
+
export declare const NavigationContext: import("react").Context<NavigationContextValue | null>;
|
|
10
|
+
export declare function useNavigation(): NavigationContextValue | null;
|
|
11
|
+
/** Rendered by the `navigationDestination` modifier: registers the builder with the enclosing stack. */
|
|
12
|
+
export declare function RegisterDestination({ destination }: {
|
|
13
|
+
destination: (value: never) => ReactNode;
|
|
14
|
+
}): null;
|
|
15
|
+
//# sourceMappingURL=navigation-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-context.d.ts","sourceRoot":"","sources":["../src/navigation-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElE,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,GAAG,IAAI,IAAI,CAAC;IACZ,2EAA2E;IAC3E,mBAAmB,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC;CACvE;AAED,eAAO,MAAM,iBAAiB,wDAAqD,CAAC;AAEpF,wBAAgB,aAAa,IAAI,sBAAsB,GAAG,IAAI,CAE7D;AAED,wGAAwG;AACxG,wBAAgB,mBAAmB,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAA;CAAE,GAAG,IAAI,CAIvG"}
|
package/dist/path.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Path`: a builder for SVG path data, in SwiftUI's vocabulary. Custom
|
|
3
|
+
* shapes (`Shape` with a `path` function) and `Canvas` drawing take one.
|
|
4
|
+
* Points are rounded to hundredths, as the Swift shim rounds them.
|
|
5
|
+
*/
|
|
6
|
+
export interface Point {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
}
|
|
10
|
+
export interface CGRect {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class Path {
|
|
17
|
+
private readonly parts;
|
|
18
|
+
private current;
|
|
19
|
+
private start;
|
|
20
|
+
constructor(build?: (path: Path) => void);
|
|
21
|
+
/** `Path(rect)` */
|
|
22
|
+
static rect(rect: CGRect): Path;
|
|
23
|
+
/** `Path(roundedRect:cornerRadius:)` */
|
|
24
|
+
static roundedRect(rect: CGRect, cornerRadius: number): Path;
|
|
25
|
+
/** `Path(ellipseIn:)` */
|
|
26
|
+
static ellipse(rect: CGRect): Path;
|
|
27
|
+
move(to: Point): this;
|
|
28
|
+
addLine(to: Point): this;
|
|
29
|
+
addLines(points: readonly Point[]): this;
|
|
30
|
+
addQuadCurve(to: Point, control: Point): this;
|
|
31
|
+
addCurve(to: Point, control1: Point, control2: Point): this;
|
|
32
|
+
/**
|
|
33
|
+
* `addArc(center:radius:startAngle:endAngle:clockwise:)`, angles in
|
|
34
|
+
* degrees. As in SwiftUI's flipped coordinates, `clockwise: false` draws
|
|
35
|
+
* clockwise on screen.
|
|
36
|
+
*/
|
|
37
|
+
addArc(center: Point, radius: number, startAngle: number, endAngle: number, clockwise: boolean): this;
|
|
38
|
+
addRect(rect: CGRect): this;
|
|
39
|
+
addRoundedRect(rect: CGRect, cornerRadius: number): this;
|
|
40
|
+
addEllipse(rect: CGRect): this;
|
|
41
|
+
addPath(path: Path): this;
|
|
42
|
+
closeSubpath(): this;
|
|
43
|
+
get isEmpty(): boolean;
|
|
44
|
+
/** The SVG path data. */
|
|
45
|
+
svg(): string;
|
|
46
|
+
toString(): string;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAOD,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,KAAK,CAAsB;gBAEvB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI;IAIxC,mBAAmB;IACnB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAG/B,wCAAwC;IACxC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAG5D,yBAAyB;IACzB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI;IAOrB,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI;IAOxB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,IAAI;IAKxC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,IAAI;IAO7C,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI;IAO3D;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IA2BrG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAoBxD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY9B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAKzB,YAAY,IAAI,IAAI;IAMpB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,yBAAyB;IACzB,GAAG,IAAI,MAAM;IAIb,QAAQ,IAAI,MAAM;CAGnB"}
|