@symbiote-native/tracking-transparency 0.3.0 → 1.0.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 (2) hide show
  1. package/README.md +36 -4
  2. package/package.json +26 -15
package/README.md CHANGED
@@ -151,6 +151,29 @@ export class TrackingScreen {
151
151
  }
152
152
  ```
153
153
 
154
+ ```svelte
155
+ <!-- Svelte — the rune hands back a boxed object whose `status` is a getter; destructuring it
156
+ would freeze the value at its initial null, since Svelte 5 reactivity is lexically scoped. -->
157
+ <script lang="ts">
158
+ import {
159
+ getAdvertisingId,
160
+ usePermissions,
161
+ } from '@symbiote-native/tracking-transparency/svelte';
162
+
163
+ const permissions = usePermissions();
164
+ </script>
165
+
166
+ <View>
167
+ <Text>{permissions.status?.status ?? 'checking…'}</Text>
168
+ <Pressable onPress={() => permissions.request()}>
169
+ <Text>Request tracking permission</Text>
170
+ </Pressable>
171
+ <Pressable onPress={() => console.log(getAdvertisingId())}>
172
+ <Text>Log advertising ID</Text>
173
+ </Pressable>
174
+ </View>
175
+ ```
176
+
154
177
  ```tsx
155
178
  // Solid — the accessors are CALLED; a Solid component body runs once, so a snapshot would freeze.
156
179
  import { createPermissions } from '@symbiote-native/tracking-transparency/solid';
@@ -178,6 +201,8 @@ The examples above mirror the real canary demo screens —
178
201
  `examples/expo-react/screens/TrackingTransparencyScreen.tsx`,
179
202
  `examples/expo-vue-sfc/screens/TrackingTransparencyScreen.vue`,
180
203
  `examples/expo-vue-tsx/screens/TrackingTransparencyScreen.tsx`,
204
+ `examples/expo-svelte/screens/TrackingTransparencyScreen.svelte`,
205
+ `examples/expo-solid/screens/TrackingTransparencyScreen.tsx`,
181
206
  `examples/expo-angular/src/screens/TrackingTransparencyScreen.ts`.
182
207
 
183
208
  ## API
@@ -215,17 +240,24 @@ import { PermissionsService } from '@symbiote-native/tracking-transparency/angul
215
240
  ```
216
241
 
217
242
  `usePermissions` auto-fetches the current permission status on mount and returns a
218
- `[status, request, get, error]` tuple (React) / `{ status, error, request, get }` object
219
- (Vue/Svelte); Solid's `createPermissions` returns the same object with `Accessor`s instead of
220
- `Ref`s, and Angular's `PermissionsService.connect()` returns a readonly `Signal`:
243
+ `[status, request, get, error]` tuple (React) / `{ status, error, request, get }` object (Vue,
244
+ destructurable — `status` is a `Ref`). Solid's `createPermissions` returns the same shape with
245
+ `Accessor`s instead of `Ref`s, and Angular's `PermissionsService.connect()` returns a readonly
246
+ `Signal`. **Svelte's rune returns a boxed object whose `status` is a getter — do not destructure
247
+ it**, or the value freezes at its initial `null` (Svelte 5 reactivity is lexically scoped to the
248
+ property access):
221
249
 
222
250
  ```ts
223
251
  // React
224
252
  const [status, request] = usePermissions();
225
253
 
226
- // Vue / Svelte
254
+ // Vue
227
255
  const { status, request } = usePermissions();
228
256
 
257
+ // Svelte — read permissions.status, never destructure it
258
+ const permissions = usePermissions();
259
+ permissions.status;
260
+
229
261
  // Solid — status is an accessor, called at the read site
230
262
  const { status, request } = createPermissions();
231
263
 
package/package.json CHANGED
@@ -1,7 +1,18 @@
1
1
  {
2
2
  "name": "@symbiote-native/tracking-transparency",
3
- "version": "0.3.0",
3
+ "version": "1.0.0",
4
4
  "description": "expo-tracking-transparency wrapped for SymbioteNative — one framework-agnostic core, built once and reachable from the React, Vue, Svelte, Solid, and Angular adapters. iOS App Tracking Transparency prompt (permission get/request, always-granted on Android/web) plus the advertising-ID getter.",
5
+ "keywords": [
6
+ "react-native",
7
+ "symbiote-native",
8
+ "react",
9
+ "vue",
10
+ "svelte",
11
+ "solid",
12
+ "angular",
13
+ "app-tracking-transparency",
14
+ "idfa"
15
+ ],
5
16
  "license": "MIT",
6
17
  "repository": {
7
18
  "type": "git",
@@ -61,19 +72,19 @@
61
72
  "expo-modules-core": "57.0.5"
62
73
  },
63
74
  "peerDependencies": {
64
- "@symbiote-native/angular": ">=0.6.2",
65
- "@symbiote-native/engine": ">=0.1.7",
66
- "@symbiote-native/react": ">=0.2.8",
67
- "@symbiote-native/solid": ">=0.0.1",
68
- "@symbiote-native/svelte": ">=0.1.0",
69
- "@symbiote-native/vue": ">=0.3.8",
70
75
  "@angular/core": ">=20",
71
76
  "@vue/runtime-core": "^3.5.13",
72
77
  "react": ">=19.0.0",
73
78
  "react-native": ">=0.86",
74
79
  "solid-js": ">=1.9.0",
75
80
  "svelte": ">=5.56.0",
76
- "vue": ">=3.5.0"
81
+ "vue": ">=3.5.0",
82
+ "@symbiote-native/angular": "^1.0.0",
83
+ "@symbiote-native/engine": "^0.4.0",
84
+ "@symbiote-native/react": "^1.0.0",
85
+ "@symbiote-native/solid": "^1.0.0",
86
+ "@symbiote-native/vue": "^1.0.0",
87
+ "@symbiote-native/svelte": "^1.0.0"
77
88
  },
78
89
  "peerDependenciesMeta": {
79
90
  "@symbiote-native/angular": {
@@ -121,13 +132,13 @@
121
132
  "solid-js": "^1.9.14",
122
133
  "svelte": "^5.56.0",
123
134
  "typescript": "~6.0.0",
124
- "@symbiote-native/engine": "0.3.0",
125
- "@symbiote-native/react": "0.4.0",
126
- "@symbiote-native/angular": "0.8.0",
127
- "@symbiote-native/solid": "0.1.0",
128
- "@symbiote-native/svelte": "0.3.0",
129
- "@symbiote-native/test-utils": "0.2.0",
130
- "@symbiote-native/vue": "0.5.0"
135
+ "@symbiote-native/angular": "1.0.0",
136
+ "@symbiote-native/engine": "0.4.0",
137
+ "@symbiote-native/react": "1.0.0",
138
+ "@symbiote-native/solid": "1.0.0",
139
+ "@symbiote-native/svelte": "1.0.0",
140
+ "@symbiote-native/test-utils": "0.3.0",
141
+ "@symbiote-native/vue": "1.0.0"
131
142
  },
132
143
  "scripts": {
133
144
  "typecheck": "tsc --build",