@ng-native/expo 0.1.3 → 0.3.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.
Files changed (62) hide show
  1. package/README.md +32 -382
  2. package/dist/async-storage.d.ts +15 -0
  3. package/dist/async-storage.js +29 -0
  4. package/dist/async-storage.js.map +1 -0
  5. package/dist/audio.d.ts +10 -0
  6. package/dist/audio.js +26 -0
  7. package/dist/audio.js.map +1 -0
  8. package/dist/expo-ui-components.d.ts +142 -10
  9. package/dist/expo-ui-components.js +362 -39
  10. package/dist/expo-ui-components.js.map +1 -1
  11. package/dist/expo-ui.js +9 -6
  12. package/dist/expo-ui.js.map +1 -1
  13. package/dist/foldable.d.ts +78 -0
  14. package/dist/foldable.js +87 -0
  15. package/dist/foldable.js.map +1 -0
  16. package/dist/fonts.d.ts +3 -0
  17. package/dist/fonts.js +7 -2
  18. package/dist/fonts.js.map +1 -1
  19. package/dist/image-picker.js +3 -9
  20. package/dist/image-picker.js.map +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/live-activity.d.ts +88 -0
  25. package/dist/live-activity.js +150 -0
  26. package/dist/live-activity.js.map +1 -0
  27. package/dist/location.js +2 -7
  28. package/dist/location.js.map +1 -1
  29. package/dist/media-library.js +1 -3
  30. package/dist/media-library.js.map +1 -1
  31. package/dist/native.d.ts +4 -1
  32. package/dist/native.js +60 -4
  33. package/dist/native.js.map +1 -1
  34. package/dist/notifications.js +2 -4
  35. package/dist/notifications.js.map +1 -1
  36. package/dist/permissions.d.ts +2 -0
  37. package/dist/permissions.js +6 -0
  38. package/dist/permissions.js.map +1 -1
  39. package/dist/player.d.ts +24 -11
  40. package/dist/player.js +7 -26
  41. package/dist/player.js.map +1 -1
  42. package/dist/register-expo-view.d.ts +5 -0
  43. package/dist/register-expo-view.js +5 -1
  44. package/dist/register-expo-view.js.map +1 -1
  45. package/dist/screen-capture.js +2 -4
  46. package/dist/screen-capture.js.map +1 -1
  47. package/dist/secure-store.d.ts +15 -0
  48. package/dist/secure-store.js +30 -0
  49. package/dist/secure-store.js.map +1 -0
  50. package/dist/store.d.ts +5 -10
  51. package/dist/store.js +5 -36
  52. package/dist/store.js.map +1 -1
  53. package/dist/tracking.d.ts +1 -1
  54. package/dist/tracking.js +3 -5
  55. package/dist/tracking.js.map +1 -1
  56. package/dist/video.d.ts +5 -0
  57. package/dist/video.js +21 -0
  58. package/dist/video.js.map +1 -0
  59. package/dist/watch.d.ts +103 -0
  60. package/dist/watch.js +228 -0
  61. package/dist/watch.js.map +1 -0
  62. package/package.json +49 -4
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Typed components for the `@expo/ui` SwiftUI views an app reaches for most.
2
+ * Typed components for the `@expo/ui` views an app reaches for most, named and shaped as SwiftUI's.
3
3
  *
4
4
  * `EXPO_UI_VIEWS` makes every view reachable by name, and a name is all the renderer needs. What a
5
5
  * name cannot give is a type: under strict templates an unknown element is an error, and so is
@@ -7,19 +7,23 @@
7
7
  * props' types and whose host bindings pass each one straight to the node, so nothing changes at
8
8
  * runtime. An unset input stays `undefined` and never reaches native.
9
9
  *
10
- * Events are declared as outputs so that `$event` is typed, and are never emitted. Angular binds a
11
- * template's `(dateChange)` to the output *and* to the element, and it is the element's own event
12
- * that arrives, once. Emitting from a host listener as well would deliver it twice; a host listener
13
- * of the same name as the output listens to the output itself and recurses. So subscribe in a
14
- * template, not to the output in code.
10
+ * Events are declared as outputs so that `$event` is typed. SwiftUI's events are never emitted:
11
+ * Angular binds a template's `(dateChange)` to the output *and* to the element, and it is the
12
+ * element's own event that arrives, once. Emitting from a host listener as well would deliver it
13
+ * twice; a host listener of the same name as the output listens to the output itself and recurses.
14
+ * So subscribe in a template, not to the output in code.
15
+ *
16
+ * Where Compose names a prop or an event differently, a component sends Android its own names and
17
+ * emits the output from a host listener for Compose's event, which SwiftUI never sends. Only a few
18
+ * do: the toggle, slider, button, progress, stacks and slot, and the date picker.
15
19
  *
16
20
  * Only the views and props an app has needed are here; the rest stay names, as before. Add a view
17
21
  * when a template wants it typed, from `@expo/ui`'s own props for it.
18
22
  *
19
23
  * Still register the names with `registerExpoUiViews`: the component types the element, the
20
- * registration is what makes it commit as the SwiftUI view.
24
+ * registration is what makes it commit as the SwiftUI or Compose view.
21
25
  */
22
- import { Component, DestroyRef, ElementRef, booleanAttribute, computed, inject, input, model, output, } from '@angular/core';
26
+ import { Component, DestroyRef, forwardRef, ElementRef, booleanAttribute, computed, inject, input, model, output, signal, } from '@angular/core';
23
27
  import { HostEngine, nativePlatform, } from '@ng-native/fabric';
24
28
  import { optionalBoolean, optionalNumber } from "./transforms.js";
25
29
  import * as i0 from "@angular/core";
@@ -89,8 +93,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
89
93
  },
90
94
  }]
91
95
  }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], systemImage: [{ type: i0.Input, args: [{ isSignal: true, alias: "systemImage", required: false }] }], accessibilityLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "accessibilityLabel", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
92
- /** A SwiftUI `Button`, as a menu item or on its own. */
96
+ /**
97
+ * A SwiftUI `Button`, as a menu item or on its own, or Compose's on Android, which draws `label` as
98
+ * text inside it. `systemImage` and `role` are SwiftUI's alone.
99
+ */
93
100
  export class UiButton {
101
+ android = nativePlatform() === 'android';
94
102
  label = input(/* @ts-ignore */
95
103
  ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
96
104
  /** An SF Symbol name. */
@@ -102,14 +110,22 @@ export class UiButton {
102
110
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
103
111
  buttonPress = output();
104
112
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
105
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiButton, isStandalone: true, selector: "ui-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, systemImage: { classPropertyName: "systemImage", publicName: "systemImage", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { buttonPress: "buttonPress" }, host: { properties: { "label": "label()", "systemImage": "systemImage()", "role": "role()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
113
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.0", type: UiButton, isStandalone: true, selector: "ui-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, systemImage: { classPropertyName: "systemImage", publicName: "systemImage", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { buttonPress: "buttonPress" }, host: { listeners: { "buttonPressed": "android && buttonPress.emit($event)" }, properties: { "label": "label()", "systemImage": "systemImage()", "role": "role()", "modifiers": "modifiers()" } }, ngImport: i0, template: `@if (android && label()) {
114
+ <ui-text [text]="label()" />
115
+ }
116
+ <ng-content />`, isInline: true, dependencies: [{ kind: "component", type: i0.forwardRef(() => UiText), selector: "ui-text", inputs: ["text", "modifiers"] }] });
106
117
  }
107
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiButton, decorators: [{
108
119
  type: Component,
109
120
  args: [{
110
121
  selector: 'ui-button',
111
- template: '<ng-content />',
122
+ imports: [forwardRef(() => UiText)],
123
+ template: `@if (android && label()) {
124
+ <ui-text [text]="label()" />
125
+ }
126
+ <ng-content />`,
112
127
  host: {
128
+ '(buttonPressed)': 'android && buttonPress.emit($event)',
113
129
  '[label]': 'label()',
114
130
  '[systemImage]': 'systemImage()',
115
131
  '[role]': 'role()',
@@ -117,7 +133,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
117
133
  },
118
134
  }]
119
135
  }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], systemImage: [{ type: i0.Input, args: [{ isSignal: true, alias: "systemImage", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }], buttonPress: [{ type: i0.Output, args: ["buttonPress"] }] } });
120
- /** A SwiftUI `Divider`: a separator between groups of menu items. */
136
+ /** A SwiftUI `Divider`, or Compose's `HorizontalDivider`: a separator between groups of items. */
121
137
  export class UiDivider {
122
138
  modifiers = input(/* @ts-ignore */
123
139
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
@@ -138,19 +154,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
138
154
  * `allowsFullSwipe`.
139
155
  */
140
156
  export class UiSlot {
157
+ android = nativePlatform() === 'android';
141
158
  name = input.required(/* @ts-ignore */
142
159
  ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
143
160
  extraProps = input(/* @ts-ignore */
144
161
  ...(ngDevMode ? [undefined, { debugName: "extraProps" }] : /* istanbul ignore next */ []));
145
162
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiSlot, deps: [], target: i0.ɵɵFactoryTarget.Component });
146
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiSlot, isStandalone: true, selector: "ui-slot", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, extraProps: { classPropertyName: "extraProps", publicName: "extraProps", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "name": "name()", "extraProps": "extraProps()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
163
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiSlot, isStandalone: true, selector: "ui-slot", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, extraProps: { classPropertyName: "extraProps", publicName: "extraProps", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "name": "android ? undefined : name()", "slotName": "android ? name() : undefined", "extraProps": "extraProps()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
147
164
  }
148
165
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiSlot, decorators: [{
149
166
  type: Component,
150
167
  args: [{
151
168
  selector: 'ui-slot',
152
169
  template: '<ng-content />',
153
- host: { '[name]': 'name()', '[extraProps]': 'extraProps()' },
170
+ host: {
171
+ '[name]': 'android ? undefined : name()',
172
+ '[slotName]': 'android ? name() : undefined',
173
+ '[extraProps]': 'extraProps()',
174
+ },
154
175
  }]
155
176
  }], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], extraProps: [{ type: i0.Input, args: [{ isSignal: true, alias: "extraProps", required: false }] }] } });
156
177
  /**
@@ -191,8 +212,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
191
212
  }]
192
213
  }], propDecorators: { modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
193
214
  /**
194
- * A SwiftUI `Slider`, iOS only. `valueChanged` reports each new value as the thumb moves; note the
195
- * d, which the native event has and `@expo/ui`'s React prop does not.
215
+ * A SwiftUI `Slider`, or Compose's on Android. `valueChanged` reports each new value as the thumb
216
+ * moves; note the d, which SwiftUI's event has and `@expo/ui`'s React prop does not.
196
217
  */
197
218
  export class UiSlider {
198
219
  value = input(undefined, { ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), transform: optionalNumber });
@@ -203,8 +224,29 @@ export class UiSlider {
203
224
  modifiers = input(/* @ts-ignore */
204
225
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
205
226
  valueChanged = output();
227
+ android = nativePlatform() === 'android';
228
+ /** A whole number of steps, which is all Compose can draw. */
229
+ wholeSteps = computed(() => {
230
+ const steps = Math.round(this.steps() ?? 0);
231
+ return steps > 0 ? steps : undefined;
232
+ }, /* @ts-ignore */
233
+ ...(ngDevMode ? [{ debugName: "wholeSteps" }] : /* istanbul ignore next */ []));
234
+ /** SwiftUI takes a step size, and draws 0 to 1 unless it has both ends. */
235
+ stepSize = computed(() => {
236
+ const steps = this.wholeSteps();
237
+ const min = this.min();
238
+ const max = this.max();
239
+ return steps && (min !== undefined && max !== undefined ? max - min : 1) / steps;
240
+ }, /* @ts-ignore */
241
+ ...(ngDevMode ? [{ debugName: "stepSize" }] : /* istanbul ignore next */ []));
242
+ /** Compose takes the number of points between the ends. */
243
+ stepsBetween = computed(() => {
244
+ const steps = this.wholeSteps();
245
+ return steps && steps - 1;
246
+ }, /* @ts-ignore */
247
+ ...(ngDevMode ? [{ debugName: "stepsBetween" }] : /* istanbul ignore next */ []));
206
248
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiSlider, deps: [], target: i0.ɵɵFactoryTarget.Component });
207
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiSlider, isStandalone: true, selector: "ui-slider", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, host: { properties: { "value": "value()", "min": "min()", "max": "max()", "steps": "steps()", "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
249
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiSlider, isStandalone: true, selector: "ui-slider", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, host: { listeners: { "valueChange": "android && valueChanged.emit($event)" }, properties: { "value": "value()", "min": "min()", "max": "max()", "step": "android ? undefined : stepSize()", "steps": "android ? stepsBetween() : undefined", "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
208
250
  }
209
251
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiSlider, decorators: [{
210
252
  type: Component,
@@ -215,20 +257,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
215
257
  '[value]': 'value()',
216
258
  '[min]': 'min()',
217
259
  '[max]': 'max()',
218
- '[steps]': 'steps()',
260
+ '[step]': 'android ? undefined : stepSize()',
261
+ '[steps]': 'android ? stepsBetween() : undefined',
219
262
  '[modifiers]': 'modifiers()',
263
+ '(valueChange)': 'android && valueChanged.emit($event)',
220
264
  },
221
265
  }]
222
266
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], steps: [{ type: i0.Input, args: [{ isSignal: true, alias: "steps", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }], valueChanged: [{ type: i0.Output, args: ["valueChanged"] }] } });
223
- /** A SwiftUI `VStack`. */
267
+ /**
268
+ * A SwiftUI `VStack`, or Compose's `Column` on Android, centred, as SwiftUI's is, unless `alignment`
269
+ * says otherwise. Without `spacing`, SwiftUI puts its own default spacing between children and Compose
270
+ * puts none.
271
+ */
224
272
  export class UiVStack {
225
273
  alignment = input(/* @ts-ignore */
226
274
  ...(ngDevMode ? [undefined, { debugName: "alignment" }] : /* istanbul ignore next */ []));
227
275
  spacing = input(undefined, { ...(ngDevMode ? { debugName: "spacing" } : /* istanbul ignore next */ {}), transform: optionalNumber });
228
276
  modifiers = input(/* @ts-ignore */
229
277
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
278
+ android = nativePlatform() === 'android';
279
+ spacedBy = spacedBy;
280
+ composeAlignment(alignment) {
281
+ return alignment === 'leading' ? 'start' : alignment === 'trailing' ? 'end' : 'center';
282
+ }
230
283
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiVStack, deps: [], target: i0.ɵɵFactoryTarget.Component });
231
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiVStack, isStandalone: true, selector: "ui-vstack", inputs: { alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "alignment": "alignment()", "spacing": "spacing()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
284
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiVStack, isStandalone: true, selector: "ui-vstack", inputs: { alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "alignment": "android ? undefined : alignment()", "spacing": "android ? undefined : spacing()", "verticalArrangement": "android ? spacedBy(spacing()) : undefined", "horizontalAlignment": "android ? composeAlignment(alignment()) : undefined", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
232
285
  }
233
286
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiVStack, decorators: [{
234
287
  type: Component,
@@ -236,8 +289,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
236
289
  selector: 'ui-vstack',
237
290
  template: '<ng-content />',
238
291
  host: {
239
- '[alignment]': 'alignment()',
240
- '[spacing]': 'spacing()',
292
+ '[alignment]': 'android ? undefined : alignment()',
293
+ '[spacing]': 'android ? undefined : spacing()',
294
+ '[verticalArrangement]': 'android ? spacedBy(spacing()) : undefined',
295
+ '[horizontalAlignment]': 'android ? composeAlignment(alignment()) : undefined',
241
296
  '[modifiers]': 'modifiers()',
242
297
  },
243
298
  }]
@@ -270,20 +325,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
270
325
  },
271
326
  }]
272
327
  }], propDecorators: { systemName: [{ type: i0.Input, args: [{ isSignal: true, alias: "systemName", required: false }] }], uiImage: [{ type: i0.Input, args: [{ isSignal: true, alias: "uiImage", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
273
- /** A SwiftUI `Text`. */
328
+ /**
329
+ * A SwiftUI `Text`, or Compose's on Android. Its text is what is written inside it,
330
+ * `<ui-text>Us {{ score }}</ui-text>`, as `<text>` takes its own, or `text`, which wins over it.
331
+ */
274
332
  export class UiText {
275
333
  text = input(/* @ts-ignore */
276
334
  ...(ngDevMode ? [undefined, { debugName: "text" }] : /* istanbul ignore next */ []));
277
335
  modifiers = input(/* @ts-ignore */
278
336
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
279
337
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiText, deps: [], target: i0.ɵɵFactoryTarget.Component });
280
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiText, isStandalone: true, selector: "ui-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "text": "text()", "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
338
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiText, isStandalone: true, selector: "ui-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "text": "text()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
281
339
  }
282
340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiText, decorators: [{
283
341
  type: Component,
284
342
  args: [{
285
343
  selector: 'ui-text',
286
- template: '',
344
+ template: '<ng-content />',
287
345
  host: { '[text]': 'text()', '[modifiers]': 'modifiers()' },
288
346
  }]
289
347
  }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
@@ -298,6 +356,18 @@ function listen(event, handle) {
298
356
  const stop = engine.setEventListener(node, event, (raw) => handle(raw?.nativeEvent ?? {}));
299
357
  inject(DestroyRef).onDestroy(stop);
300
358
  }
359
+ /**
360
+ * A Compose event as the SwiftUI one it stands in for: its payload renamed, and stopping it stops the
361
+ * event it came from.
362
+ */
363
+ function withNativeEvent(event, nativeEvent) {
364
+ return {
365
+ nativeEvent,
366
+ target: event.target,
367
+ stopPropagation: () => event.stopPropagation(),
368
+ isPropagationStopped: () => event.isPropagationStopped(),
369
+ };
370
+ }
301
371
  /** The caller's modifiers, with SwiftUI's `disabled` added while the field is. */
302
372
  function withDisabled(modifiers, disabled) {
303
373
  return disabled ? [...(modifiers ?? []), { $type: 'disabled', disabled: true }] : modifiers;
@@ -466,7 +536,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
466
536
  },
467
537
  }]
468
538
  }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], systemImage: [{ type: i0.Input, args: [{ isSignal: true, alias: "systemImage", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], pickerStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "pickerStyle", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], touch: [{ type: i0.Output, args: ["touch"] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }] } });
469
- /** A SwiftUI `Toggle`. `isOnChange` reports each flip. */
539
+ /**
540
+ * A SwiftUI `Toggle`, or Compose's `Switch` on Android. `isOnChange` reports each flip. Bound to
541
+ * `isOn`, it shows what `isOn` says; without it, it switches itself. `label` is SwiftUI's alone.
542
+ */
470
543
  export class UiToggle {
471
544
  isOn = input(undefined, { ...(ngDevMode ? { debugName: "isOn" } : /* istanbul ignore next */ {}), transform: optionalBoolean });
472
545
  label = input(/* @ts-ignore */
@@ -474,15 +547,29 @@ export class UiToggle {
474
547
  modifiers = input(/* @ts-ignore */
475
548
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
476
549
  isOnChange = output();
550
+ android = nativePlatform() === 'android';
551
+ /** What Compose's switch shows without `isOn`: SwiftUI's keeps this itself, Compose's does not. */
552
+ switchedOn = signal(false, /* @ts-ignore */
553
+ ...(ngDevMode ? [{ debugName: "switchedOn" }] : /* istanbul ignore next */ []));
554
+ checked(event) {
555
+ this.switchedOn.set(event.nativeEvent.value);
556
+ this.isOnChange.emit(withNativeEvent(event, { isOn: event.nativeEvent.value }));
557
+ }
477
558
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiToggle, deps: [], target: i0.ɵɵFactoryTarget.Component });
478
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiToggle, isStandalone: true, selector: "ui-toggle", inputs: { isOn: { classPropertyName: "isOn", publicName: "isOn", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOnChange: "isOnChange" }, host: { properties: { "isOn": "isOn()", "label": "label()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
559
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiToggle, isStandalone: true, selector: "ui-toggle", inputs: { isOn: { classPropertyName: "isOn", publicName: "isOn", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOnChange: "isOnChange" }, host: { listeners: { "checkedChange": "android && checked($event)" }, properties: { "isOn": "android ? undefined : isOn()", "value": "android ? (isOn() ?? switchedOn()) : undefined", "label": "label()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
479
560
  }
480
561
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiToggle, decorators: [{
481
562
  type: Component,
482
563
  args: [{
483
564
  selector: 'ui-toggle',
484
565
  template: '<ng-content />',
485
- host: { '[isOn]': 'isOn()', '[label]': 'label()', '[modifiers]': 'modifiers()' },
566
+ host: {
567
+ '[isOn]': 'android ? undefined : isOn()',
568
+ '[value]': 'android ? (isOn() ?? switchedOn()) : undefined',
569
+ '[label]': 'label()',
570
+ '[modifiers]': 'modifiers()',
571
+ '(checkedChange)': 'android && checked($event)',
572
+ },
486
573
  }]
487
574
  }], propDecorators: { isOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOn", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }], isOnChange: [{ type: i0.Output, args: ["isOnChange"] }] } });
488
575
  /** A SwiftUI `Stepper`, between `min` and `max` by `step`. */
@@ -602,31 +689,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
602
689
  },
603
690
  }]
604
691
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], currentValueLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentValueLabel", required: false }] }], minimumValueLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "minimumValueLabel", required: false }] }], maximumValueLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "maximumValueLabel", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
605
- /** A SwiftUI `ProgressView`: a bar filled to `value`, from 0 to 1, or a spinner without one. */
692
+ /**
693
+ * A SwiftUI `ProgressView`: a bar filled to `value`, from 0 to 1, or a spinner without one. On
694
+ * Android, Compose's `LinearProgressIndicator`, a moving bar rather than a spinner without a value.
695
+ */
606
696
  export class UiProgress {
697
+ android = nativePlatform() === 'android';
607
698
  value = input(undefined, { ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), transform: optionalNumber });
608
699
  modifiers = input(/* @ts-ignore */
609
700
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
610
701
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiProgress, deps: [], target: i0.ɵɵFactoryTarget.Component });
611
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiProgress, isStandalone: true, selector: "ui-progress", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "value": "value()", "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
702
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiProgress, isStandalone: true, selector: "ui-progress", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "value": "android ? undefined : value()", "progress": "android ? value() : undefined", "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
612
703
  }
613
704
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiProgress, decorators: [{
614
705
  type: Component,
615
706
  args: [{
616
707
  selector: 'ui-progress',
617
708
  template: '',
618
- host: { '[value]': 'value()', '[modifiers]': 'modifiers()' },
709
+ host: {
710
+ '[value]': 'android ? undefined : value()',
711
+ '[progress]': 'android ? value() : undefined',
712
+ '[modifiers]': 'modifiers()',
713
+ },
619
714
  }]
620
715
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
621
- /** A SwiftUI `HStack`. */
716
+ /**
717
+ * A SwiftUI `HStack`, or Compose's `Row` on Android, centred, as SwiftUI's is, unless `alignment`
718
+ * says otherwise. Compose has no `firstTextBaseline`, and centres instead. Without `spacing`, SwiftUI
719
+ * puts its own default spacing between children and Compose puts none.
720
+ */
622
721
  export class UiHStack {
623
722
  alignment = input(/* @ts-ignore */
624
723
  ...(ngDevMode ? [undefined, { debugName: "alignment" }] : /* istanbul ignore next */ []));
625
724
  spacing = input(undefined, { ...(ngDevMode ? { debugName: "spacing" } : /* istanbul ignore next */ {}), transform: optionalNumber });
626
725
  modifiers = input(/* @ts-ignore */
627
726
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
727
+ android = nativePlatform() === 'android';
728
+ spacedBy = spacedBy;
729
+ composeAlignment(alignment) {
730
+ return alignment === 'top' || alignment === 'bottom' ? alignment : 'center';
731
+ }
628
732
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiHStack, deps: [], target: i0.ɵɵFactoryTarget.Component });
629
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiHStack, isStandalone: true, selector: "ui-hstack", inputs: { alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "alignment": "alignment()", "spacing": "spacing()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
733
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiHStack, isStandalone: true, selector: "ui-hstack", inputs: { alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "alignment": "android ? undefined : alignment()", "spacing": "android ? undefined : spacing()", "horizontalArrangement": "android ? spacedBy(spacing()) : undefined", "verticalAlignment": "android ? composeAlignment(alignment()) : undefined", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
630
734
  }
631
735
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiHStack, decorators: [{
632
736
  type: Component,
@@ -634,12 +738,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
634
738
  selector: 'ui-hstack',
635
739
  template: '<ng-content />',
636
740
  host: {
637
- '[alignment]': 'alignment()',
638
- '[spacing]': 'spacing()',
741
+ '[alignment]': 'android ? undefined : alignment()',
742
+ '[spacing]': 'android ? undefined : spacing()',
743
+ '[horizontalArrangement]': 'android ? spacedBy(spacing()) : undefined',
744
+ '[verticalAlignment]': 'android ? composeAlignment(alignment()) : undefined',
639
745
  '[modifiers]': 'modifiers()',
640
746
  },
641
747
  }]
642
748
  }], propDecorators: { alignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignment", required: false }] }], spacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacing", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
749
+ function spacedBy(spacing) {
750
+ return spacing === undefined ? undefined : { spacedBy: Math.round(spacing) };
751
+ }
643
752
  /** A SwiftUI `Spacer`: the room left over in its stack. */
644
753
  export class UiSpacer {
645
754
  modifiers = input(/* @ts-ignore */
@@ -655,6 +764,218 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImpor
655
764
  host: { '[modifiers]': 'modifiers()' },
656
765
  }]
657
766
  }], propDecorators: { modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
767
+ /** The same place, as Compose's `Box` names it. */
768
+ const CONTENT_ALIGNMENT = {
769
+ center: 'center',
770
+ leading: 'centerStart',
771
+ trailing: 'centerEnd',
772
+ top: 'topCenter',
773
+ bottom: 'bottomCenter',
774
+ topLeading: 'topStart',
775
+ topTrailing: 'topEnd',
776
+ bottomLeading: 'bottomStart',
777
+ bottomTrailing: 'bottomEnd',
778
+ };
779
+ /**
780
+ * A SwiftUI `ZStack`: its children drawn over one another, the first at the back. On Android,
781
+ * Compose's `Box`, centred, as SwiftUI's is, unless `alignment` says otherwise.
782
+ */
783
+ export class UiZStack {
784
+ alignment = input(/* @ts-ignore */
785
+ ...(ngDevMode ? [undefined, { debugName: "alignment" }] : /* istanbul ignore next */ []));
786
+ modifiers = input(/* @ts-ignore */
787
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
788
+ android = nativePlatform() === 'android';
789
+ contentAlignment = CONTENT_ALIGNMENT;
790
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiZStack, deps: [], target: i0.ɵɵFactoryTarget.Component });
791
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiZStack, isStandalone: true, selector: "ui-zstack", inputs: { alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "alignment": "android ? undefined : alignment()", "contentAlignment": "android ? contentAlignment[alignment() ?? \"center\"] : undefined", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
792
+ }
793
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiZStack, decorators: [{
794
+ type: Component,
795
+ args: [{
796
+ selector: 'ui-zstack',
797
+ template: '<ng-content />',
798
+ host: {
799
+ '[alignment]': 'android ? undefined : alignment()',
800
+ '[contentAlignment]': 'android ? contentAlignment[alignment() ?? "center"] : undefined',
801
+ '[modifiers]': 'modifiers()',
802
+ },
803
+ }]
804
+ }], propDecorators: { alignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignment", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
805
+ /** A SwiftUI `Rectangle`, filling the space it is given. Colour it with `foregroundStyle`. */
806
+ export class UiRectangle {
807
+ modifiers = input(/* @ts-ignore */
808
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
809
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiRectangle, deps: [], target: i0.ɵɵFactoryTarget.Component });
810
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiRectangle, isStandalone: true, selector: "ui-rectangle", inputs: { modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
811
+ }
812
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiRectangle, decorators: [{
813
+ type: Component,
814
+ args: [{
815
+ selector: 'ui-rectangle',
816
+ template: '',
817
+ host: { '[modifiers]': 'modifiers()' },
818
+ }]
819
+ }], propDecorators: { modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
820
+ /** A SwiftUI `RoundedRectangle`, its corners rounded by `cornerRadius`. */
821
+ export class UiRoundedRectangle {
822
+ cornerRadius = input(undefined, { ...(ngDevMode ? { debugName: "cornerRadius" } : /* istanbul ignore next */ {}), transform: optionalNumber });
823
+ modifiers = input(/* @ts-ignore */
824
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
825
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiRoundedRectangle, deps: [], target: i0.ɵɵFactoryTarget.Component });
826
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiRoundedRectangle, isStandalone: true, selector: "ui-rounded-rectangle", inputs: { cornerRadius: { classPropertyName: "cornerRadius", publicName: "cornerRadius", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "cornerRadius": "cornerRadius()", "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
827
+ }
828
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiRoundedRectangle, decorators: [{
829
+ type: Component,
830
+ args: [{
831
+ selector: 'ui-rounded-rectangle',
832
+ template: '',
833
+ host: { '[cornerRadius]': 'cornerRadius()', '[modifiers]': 'modifiers()' },
834
+ }]
835
+ }], propDecorators: { cornerRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "cornerRadius", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
836
+ /** A SwiftUI `UnevenRoundedRectangle`: a rectangle with a radius of its own for each corner. */
837
+ export class UiUnevenRoundedRectangle {
838
+ topLeadingRadius = input(undefined, { ...(ngDevMode ? { debugName: "topLeadingRadius" } : /* istanbul ignore next */ {}), transform: optionalNumber });
839
+ topTrailingRadius = input(undefined, { ...(ngDevMode ? { debugName: "topTrailingRadius" } : /* istanbul ignore next */ {}), transform: optionalNumber });
840
+ bottomLeadingRadius = input(undefined, { ...(ngDevMode ? { debugName: "bottomLeadingRadius" } : /* istanbul ignore next */ {}), transform: optionalNumber });
841
+ bottomTrailingRadius = input(undefined, { ...(ngDevMode ? { debugName: "bottomTrailingRadius" } : /* istanbul ignore next */ {}), transform: optionalNumber });
842
+ modifiers = input(/* @ts-ignore */
843
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
844
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiUnevenRoundedRectangle, deps: [], target: i0.ɵɵFactoryTarget.Component });
845
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiUnevenRoundedRectangle, isStandalone: true, selector: "ui-uneven-rounded-rectangle", inputs: { topLeadingRadius: { classPropertyName: "topLeadingRadius", publicName: "topLeadingRadius", isSignal: true, isRequired: false, transformFunction: null }, topTrailingRadius: { classPropertyName: "topTrailingRadius", publicName: "topTrailingRadius", isSignal: true, isRequired: false, transformFunction: null }, bottomLeadingRadius: { classPropertyName: "bottomLeadingRadius", publicName: "bottomLeadingRadius", isSignal: true, isRequired: false, transformFunction: null }, bottomTrailingRadius: { classPropertyName: "bottomTrailingRadius", publicName: "bottomTrailingRadius", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "topLeadingRadius": "topLeadingRadius()", "topTrailingRadius": "topTrailingRadius()", "bottomLeadingRadius": "bottomLeadingRadius()", "bottomTrailingRadius": "bottomTrailingRadius()", "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
846
+ }
847
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiUnevenRoundedRectangle, decorators: [{
848
+ type: Component,
849
+ args: [{
850
+ selector: 'ui-uneven-rounded-rectangle',
851
+ template: '',
852
+ host: {
853
+ '[topLeadingRadius]': 'topLeadingRadius()',
854
+ '[topTrailingRadius]': 'topTrailingRadius()',
855
+ '[bottomLeadingRadius]': 'bottomLeadingRadius()',
856
+ '[bottomTrailingRadius]': 'bottomTrailingRadius()',
857
+ '[modifiers]': 'modifiers()',
858
+ },
859
+ }]
860
+ }], propDecorators: { topLeadingRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "topLeadingRadius", required: false }] }], topTrailingRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "topTrailingRadius", required: false }] }], bottomLeadingRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "bottomLeadingRadius", required: false }] }], bottomTrailingRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "bottomTrailingRadius", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
861
+ /** A SwiftUI `Capsule`: a rectangle with fully rounded ends. */
862
+ export class UiCapsule {
863
+ cornerStyle = input(/* @ts-ignore */
864
+ ...(ngDevMode ? [undefined, { debugName: "cornerStyle" }] : /* istanbul ignore next */ []));
865
+ modifiers = input(/* @ts-ignore */
866
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
867
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiCapsule, deps: [], target: i0.ɵɵFactoryTarget.Component });
868
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiCapsule, isStandalone: true, selector: "ui-capsule", inputs: { cornerStyle: { classPropertyName: "cornerStyle", publicName: "cornerStyle", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "cornerStyle": "cornerStyle()", "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
869
+ }
870
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiCapsule, decorators: [{
871
+ type: Component,
872
+ args: [{
873
+ selector: 'ui-capsule',
874
+ template: '',
875
+ host: { '[cornerStyle]': 'cornerStyle()', '[modifiers]': 'modifiers()' },
876
+ }]
877
+ }], propDecorators: { cornerStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "cornerStyle", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
878
+ /** A SwiftUI `Circle`, as large as fits the space it is given. */
879
+ export class UiCircle {
880
+ modifiers = input(/* @ts-ignore */
881
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
882
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiCircle, deps: [], target: i0.ɵɵFactoryTarget.Component });
883
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiCircle, isStandalone: true, selector: "ui-circle", inputs: { modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
884
+ }
885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiCircle, decorators: [{
886
+ type: Component,
887
+ args: [{
888
+ selector: 'ui-circle',
889
+ template: '',
890
+ host: { '[modifiers]': 'modifiers()' },
891
+ }]
892
+ }], propDecorators: { modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
893
+ /** A SwiftUI `Ellipse`, filling the space it is given. */
894
+ export class UiEllipse {
895
+ modifiers = input(/* @ts-ignore */
896
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
897
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiEllipse, deps: [], target: i0.ɵɵFactoryTarget.Component });
898
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiEllipse, isStandalone: true, selector: "ui-ellipse", inputs: { modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
899
+ }
900
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiEllipse, decorators: [{
901
+ type: Component,
902
+ args: [{
903
+ selector: 'ui-ellipse',
904
+ template: '',
905
+ host: { '[modifiers]': 'modifiers()' },
906
+ }]
907
+ }], propDecorators: { modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
908
+ /**
909
+ * WidgetKit's `AccessoryWidgetBackground`: the system's backdrop for a lock screen widget, the
910
+ * translucent disc or panel behind its content.
911
+ */
912
+ export class UiAccessoryWidgetBackground {
913
+ modifiers = input(/* @ts-ignore */
914
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
915
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiAccessoryWidgetBackground, deps: [], target: i0.ɵɵFactoryTarget.Component });
916
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiAccessoryWidgetBackground, isStandalone: true, selector: "ui-accessory-widget-background", inputs: { modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
917
+ }
918
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiAccessoryWidgetBackground, decorators: [{
919
+ type: Component,
920
+ args: [{
921
+ selector: 'ui-accessory-widget-background',
922
+ template: '',
923
+ host: { '[modifiers]': 'modifiers()' },
924
+ }]
925
+ }], propDecorators: { modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
926
+ /** A SwiftUI `Label`: a title beside an SF Symbol. */
927
+ export class UiLabel {
928
+ title = input(/* @ts-ignore */
929
+ ...(ngDevMode ? [undefined, { debugName: "title" }] : /* istanbul ignore next */ []));
930
+ /** An SF Symbol name. */
931
+ systemImage = input(/* @ts-ignore */
932
+ ...(ngDevMode ? [undefined, { debugName: "systemImage" }] : /* istanbul ignore next */ []));
933
+ color = input(/* @ts-ignore */
934
+ ...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
935
+ modifiers = input(/* @ts-ignore */
936
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
937
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiLabel, deps: [], target: i0.ɵɵFactoryTarget.Component });
938
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiLabel, isStandalone: true, selector: "ui-label", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, systemImage: { classPropertyName: "systemImage", publicName: "systemImage", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "title": "title()", "systemImage": "systemImage()", "color": "color()", "modifiers": "modifiers()" } }, ngImport: i0, template: '', isInline: true });
939
+ }
940
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiLabel, decorators: [{
941
+ type: Component,
942
+ args: [{
943
+ selector: 'ui-label',
944
+ template: '',
945
+ host: {
946
+ '[title]': 'title()',
947
+ '[systemImage]': 'systemImage()',
948
+ '[color]': 'color()',
949
+ '[modifiers]': 'modifiers()',
950
+ },
951
+ }]
952
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], systemImage: [{ type: i0.Input, args: [{ isSignal: true, alias: "systemImage", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
953
+ /**
954
+ * A SwiftUI `Link`: opens `destination`, a URL, when tapped. It shows `label`, or the views
955
+ * written inside it. In a widget, a link is how a tap opens the app at a deep link.
956
+ */
957
+ export class UiLink {
958
+ destination = input.required(/* @ts-ignore */
959
+ ...(ngDevMode ? [{ debugName: "destination" }] : /* istanbul ignore next */ []));
960
+ label = input(/* @ts-ignore */
961
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
962
+ modifiers = input(/* @ts-ignore */
963
+ ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
964
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiLink, deps: [], target: i0.ɵɵFactoryTarget.Component });
965
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiLink, isStandalone: true, selector: "ui-link", inputs: { destination: { classPropertyName: "destination", publicName: "destination", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "destination": "destination()", "label": "label()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
966
+ }
967
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiLink, decorators: [{
968
+ type: Component,
969
+ args: [{
970
+ selector: 'ui-link',
971
+ template: '<ng-content />',
972
+ host: {
973
+ '[destination]': 'destination()',
974
+ '[label]': 'label()',
975
+ '[modifiers]': 'modifiers()',
976
+ },
977
+ }]
978
+ }], propDecorators: { destination: [{ type: i0.Input, args: [{ isSignal: true, alias: "destination", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
658
979
  /** A SwiftUI `LabeledContent`: a label, and its content beside it. */
659
980
  export class UiLabeledContent {
660
981
  label = input(/* @ts-ignore */
@@ -662,13 +983,14 @@ export class UiLabeledContent {
662
983
  modifiers = input(/* @ts-ignore */
663
984
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
664
985
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiLabeledContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
665
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiLabeledContent, isStandalone: true, selector: "ui-labeled-content", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "label": "label()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
986
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiLabeledContent, isStandalone: true, selector: "ui-labeled-content", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "label": "label()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ui-slot name="content"><ng-content /></ui-slot>', isInline: true, dependencies: [{ kind: "component", type: UiSlot, selector: "ui-slot", inputs: ["name", "extraProps"] }] });
666
987
  }
667
988
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiLabeledContent, decorators: [{
668
989
  type: Component,
669
990
  args: [{
670
991
  selector: 'ui-labeled-content',
671
- template: '<ng-content />',
992
+ imports: [UiSlot],
993
+ template: '<ui-slot name="content"><ng-content /></ui-slot>',
672
994
  host: { '[label]': 'label()', '[modifiers]': 'modifiers()' },
673
995
  }]
674
996
  }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });
@@ -694,13 +1016,14 @@ export class UiSection {
694
1016
  modifiers = input(/* @ts-ignore */
695
1017
  ...(ngDevMode ? [undefined, { debugName: "modifiers" }] : /* istanbul ignore next */ []));
696
1018
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiSection, deps: [], target: i0.ɵɵFactoryTarget.Component });
697
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiSection, isStandalone: true, selector: "ui-section", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "title": "title()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ng-content />', isInline: true });
1019
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.2.0", type: UiSection, isStandalone: true, selector: "ui-section", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, modifiers: { classPropertyName: "modifiers", publicName: "modifiers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "title": "title()", "modifiers": "modifiers()" } }, ngImport: i0, template: '<ui-slot name="content"><ng-content /></ui-slot>', isInline: true, dependencies: [{ kind: "component", type: UiSlot, selector: "ui-slot", inputs: ["name", "extraProps"] }] });
698
1020
  }
699
1021
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiSection, decorators: [{
700
1022
  type: Component,
701
1023
  args: [{
702
1024
  selector: 'ui-section',
703
- template: '<ng-content />',
1025
+ imports: [UiSlot],
1026
+ template: '<ui-slot name="content"><ng-content /></ui-slot>',
704
1027
  host: { '[title]': 'title()', '[modifiers]': 'modifiers()' },
705
1028
  }]
706
1029
  }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], modifiers: [{ type: i0.Input, args: [{ isSignal: true, alias: "modifiers", required: false }] }] } });