@toa.io/extensions.configuration 1.0.0-alpha.274 → 1.0.0-alpha.276

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 (501) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/components/configuration.values/operations/create.d.ts +16 -0
  3. package/components/configuration.values/operations/create.js +58 -0
  4. package/components/configuration.values/operations/create.js.map +1 -0
  5. package/components/configuration.values/operations/fetch.d.ts +11 -0
  6. package/components/configuration.values/operations/fetch.js +17 -0
  7. package/components/configuration.values/operations/fetch.js.map +1 -0
  8. package/components/configuration.values/operations/get.d.ts +17 -0
  9. package/components/configuration.values/operations/get.js +23 -0
  10. package/components/configuration.values/operations/get.js.map +1 -0
  11. package/components/configuration.values/operations/lib/map.d.ts +11 -0
  12. package/components/configuration.values/operations/lib/map.js +26 -0
  13. package/components/configuration.values/operations/lib/map.js.map +1 -0
  14. package/components/configuration.values/operations/lib/map.test.d.ts +1 -0
  15. package/components/configuration.values/operations/lib/map.test.js +26 -0
  16. package/components/configuration.values/operations/lib/map.test.js.map +1 -0
  17. package/components/configuration.values/operations/lib/resolve.d.ts +27 -0
  18. package/components/configuration.values/operations/lib/resolve.js +28 -0
  19. package/components/configuration.values/operations/lib/resolve.js.map +1 -0
  20. package/components/configuration.values/operations/list.d.ts +10 -0
  21. package/components/configuration.values/operations/list.js +15 -0
  22. package/components/configuration.values/operations/list.js.map +1 -0
  23. package/components/configuration.values/operations/tsconfig.tsbuildinfo +1 -0
  24. package/features/site/favicon.ico +0 -0
  25. package/features/ui.feature +8 -0
  26. package/package.json +2 -2
  27. package/source/Aspect.ts +7 -2
  28. package/source/UI.ts +16 -1
  29. package/source/deployment.ts +1 -1
  30. package/transpiled/Aspect.js +3 -2
  31. package/transpiled/Aspect.js.map +1 -1
  32. package/transpiled/UI.js +14 -1
  33. package/transpiled/UI.js.map +1 -1
  34. package/transpiled/deployment.d.ts +1 -1
  35. package/transpiled/tsconfig.tsbuildinfo +1 -1
  36. package/ui/dist/_app/env.js +1 -0
  37. package/ui/dist/_app/immutable/assets/0.CNS8Cqhc.css +2 -0
  38. package/ui/dist/_app/immutable/assets/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2 +0 -0
  39. package/ui/dist/_app/immutable/assets/inter-cyrillic-wght-normal.DqGufNeO.woff2 +0 -0
  40. package/ui/dist/_app/immutable/assets/inter-greek-ext-wght-normal.DlzME5K_.woff2 +0 -0
  41. package/ui/dist/_app/immutable/assets/inter-greek-wght-normal.CkhJZR-_.woff2 +0 -0
  42. package/ui/dist/_app/immutable/assets/inter-latin-ext-wght-normal.DO1Apj_S.woff2 +0 -0
  43. package/ui/dist/_app/immutable/assets/inter-latin-wght-normal.Dx4kXJAl.woff2 +0 -0
  44. package/ui/dist/_app/immutable/assets/inter-vietnamese-wght-normal.CBcvBZtf.woff2 +0 -0
  45. package/ui/dist/_app/immutable/assets/ui.BghF56l_.css +1 -0
  46. package/ui/dist/_app/immutable/chunks/Bjy-W4x2.js +81 -0
  47. package/ui/dist/_app/immutable/chunks/CDKtbN4n.js +6 -0
  48. package/ui/dist/_app/immutable/chunks/CcD_ISxM.js +3 -0
  49. package/ui/dist/_app/immutable/chunks/Chb3af1a.js +1 -0
  50. package/ui/dist/_app/immutable/chunks/Cov6-56A.js +50 -0
  51. package/ui/dist/_app/immutable/chunks/E7oj41Za.js +1 -0
  52. package/ui/dist/_app/immutable/chunks/MOpxGoVO.js +8 -0
  53. package/ui/dist/_app/immutable/chunks/xihTtKlq.js +1 -0
  54. package/ui/dist/_app/immutable/entry/app.B9v2AwU_.js +2 -0
  55. package/ui/dist/_app/immutable/entry/start.B97KALv1.js +1 -0
  56. package/ui/dist/_app/immutable/nodes/0.DKSa6mGa.js +1 -0
  57. package/ui/dist/_app/immutable/nodes/1.Cnu_jAWf.js +1 -0
  58. package/ui/dist/_app/immutable/nodes/2.Dg1zeC2b.js +1 -0
  59. package/ui/dist/_app/immutable/nodes/3.QCbZIibO.js +1 -0
  60. package/ui/dist/_app/immutable/nodes/4.1bG6DC_9.js +1 -0
  61. package/ui/dist/_app/version.json +1 -0
  62. package/ui/dist/apple-touch-icon.png +0 -0
  63. package/ui/dist/favicon-96x96.png +0 -0
  64. package/ui/dist/favicon.ico +0 -0
  65. package/ui/dist/index.html +52 -0
  66. package/ui/.agents/skills/antcn/SKILL.md +0 -91
  67. package/ui/.agents/skills/antcn/references/analytics.md +0 -78
  68. package/ui/.agents/skills/antcn/references/bridge.md +0 -41
  69. package/ui/.agents/skills/antcn/references/clipboard.md +0 -23
  70. package/ui/.agents/skills/antcn/references/dismissable.md +0 -75
  71. package/ui/.agents/skills/antcn/references/dropdown.md +0 -153
  72. package/ui/.agents/skills/antcn/references/fragments.md +0 -29
  73. package/ui/.agents/skills/antcn/references/fullscreen.md +0 -157
  74. package/ui/.agents/skills/antcn/references/geo.md +0 -27
  75. package/ui/.agents/skills/antcn/references/globals.md +0 -31
  76. package/ui/.agents/skills/antcn/references/grammatical-form.md +0 -69
  77. package/ui/.agents/skills/antcn/references/hints.md +0 -44
  78. package/ui/.agents/skills/antcn/references/hold.md +0 -34
  79. package/ui/.agents/skills/antcn/references/iam.md +0 -117
  80. package/ui/.agents/skills/antcn/references/input-form.md +0 -34
  81. package/ui/.agents/skills/antcn/references/locale.md +0 -66
  82. package/ui/.agents/skills/antcn/references/net.md +0 -33
  83. package/ui/.agents/skills/antcn/references/panel.md +0 -44
  84. package/ui/.agents/skills/antcn/references/passkeys.md +0 -27
  85. package/ui/.agents/skills/antcn/references/payments.md +0 -99
  86. package/ui/.agents/skills/antcn/references/realtime.md +0 -69
  87. package/ui/.agents/skills/antcn/references/scrollable.md +0 -39
  88. package/ui/.agents/skills/antcn/references/selector.md +0 -71
  89. package/ui/.agents/skills/antcn/references/shake.md +0 -36
  90. package/ui/.agents/skills/antcn/references/share.md +0 -28
  91. package/ui/.agents/skills/antcn/references/shell.md +0 -139
  92. package/ui/.agents/skills/antcn/references/stack.md +0 -53
  93. package/ui/.agents/skills/antcn/references/system.md +0 -149
  94. package/ui/.agents/skills/antcn/references/taptap.md +0 -28
  95. package/ui/.agents/skills/antcn/references/tools.md +0 -68
  96. package/ui/.agents/skills/antcn/references/transmission.md +0 -96
  97. package/ui/.agents/skills/shadcn-svelte/SKILL.md +0 -227
  98. package/ui/.agents/skills/shadcn-svelte/agents/openai.yml +0 -5
  99. package/ui/.agents/skills/shadcn-svelte/assets/shadcn-svelte-small.png +0 -0
  100. package/ui/.agents/skills/shadcn-svelte/assets/shadcn-svelte.png +0 -0
  101. package/ui/.agents/skills/shadcn-svelte/cli.md +0 -166
  102. package/ui/.agents/skills/shadcn-svelte/customization.md +0 -213
  103. package/ui/.agents/skills/shadcn-svelte/evals/evals.json +0 -47
  104. package/ui/.agents/skills/shadcn-svelte/rules/composition.md +0 -244
  105. package/ui/.agents/skills/shadcn-svelte/rules/forms.md +0 -234
  106. package/ui/.agents/skills/shadcn-svelte/rules/icons.md +0 -107
  107. package/ui/.agents/skills/shadcn-svelte/rules/styling.md +0 -195
  108. package/ui/.agents/skills/svas/SKILL.md +0 -169
  109. package/ui/.agents/skills/svas/references/patterns.md +0 -95
  110. package/ui/.agents/skills/svintl/SKILL.md +0 -176
  111. package/ui/.claude/settings.json +0 -15
  112. package/ui/.codex/hooks.json +0 -15
  113. package/ui/.cursor/hooks.json +0 -11
  114. package/ui/.env.example +0 -1
  115. package/ui/.prettierrc +0 -9
  116. package/ui/.vscode/extensions.json +0 -7
  117. package/ui/.vscode/settings.json +0 -27
  118. package/ui/AGENTS.md +0 -51
  119. package/ui/architecture.md +0 -390
  120. package/ui/components.json +0 -20
  121. package/ui/eslint.config.js +0 -152
  122. package/ui/features/base.ts +0 -2
  123. package/ui/features/boot.feature +0 -5
  124. package/ui/features/steps/authentication.ts +0 -34
  125. package/ui/features/steps/navigaton.ts +0 -37
  126. package/ui/features/steps/typing.ts +0 -24
  127. package/ui/package-lock.json +0 -8173
  128. package/ui/package.json +0 -76
  129. package/ui/playwright.config.ts +0 -13
  130. package/ui/skills-lock.json +0 -30
  131. package/ui/src/@/configuration/index.ts +0 -1
  132. package/ui/src/@/configuration/svc/create.ts +0 -29
  133. package/ui/src/@/configuration/svc/index.ts +0 -3
  134. package/ui/src/@/configuration/svc/net/Configuration.ts +0 -18
  135. package/ui/src/@/configuration/svc/net/index.ts +0 -2
  136. package/ui/src/@/configuration/svc/net/interface.ts +0 -35
  137. package/ui/src/@/configuration/svc/store.ts +0 -14
  138. package/ui/src/@/configuration/ui/Configurations.svelte +0 -85
  139. package/ui/src/@/configuration/ui/Configurations.ts +0 -5
  140. package/ui/src/@/configuration/ui/Create.svelte +0 -64
  141. package/ui/src/@/configuration/ui/Create.ts +0 -7
  142. package/ui/src/@/configuration/ui/Form.svelte +0 -75
  143. package/ui/src/@/configuration/ui/Form.ts +0 -79
  144. package/ui/src/@/configuration/ui/Row.svelte +0 -44
  145. package/ui/src/@/configuration/ui/Row.ts +0 -9
  146. package/ui/src/@/configuration/ui/Value.svelte +0 -33
  147. package/ui/src/@/configuration/ui/Value.ts +0 -6
  148. package/ui/src/@/configuration/ui/index.ts +0 -9
  149. package/ui/src/@/configuration/ui/intl/built.js +0 -38
  150. package/ui/src/@/configuration/ui/intl/context.yaml +0 -51
  151. package/ui/src/@/configuration/ui/intl/en-US.yaml +0 -21
  152. package/ui/src/@/configuration/ui/intl/index.ts +0 -9
  153. package/ui/src/@/configuration/ui/intl/types.ts +0 -31
  154. package/ui/src/@/configuration/ui/read.test.ts +0 -75
  155. package/ui/src/@/configuration/ui/read.ts +0 -102
  156. package/ui/src/@/configuration/ui/ui.test.ts +0 -69
  157. package/ui/src/@/configuration/ui/ui.ts +0 -115
  158. package/ui/src/@/iam/index.ts +0 -1
  159. package/ui/src/@/iam/rc.ts +0 -22
  160. package/ui/src/@/iam/svc/authenticated.ts +0 -17
  161. package/ui/src/@/iam/svc/basic.ts +0 -23
  162. package/ui/src/@/iam/svc/index.ts +0 -10
  163. package/ui/src/@/iam/svc/logout.ts +0 -5
  164. package/ui/src/@/iam/svc/named.ts +0 -16
  165. package/ui/src/@/iam/svc/net/Echo.ts +0 -9
  166. package/ui/src/@/iam/svc/net/basic/index.ts +0 -1
  167. package/ui/src/@/iam/svc/net/basic/interface.ts +0 -15
  168. package/ui/src/@/iam/svc/net/federation/index.ts +0 -1
  169. package/ui/src/@/iam/svc/net/federation/interface.ts +0 -12
  170. package/ui/src/@/iam/svc/net/index.ts +0 -6
  171. package/ui/src/@/iam/svc/net/interface.ts +0 -17
  172. package/ui/src/@/iam/svc/net/otp/index.ts +0 -1
  173. package/ui/src/@/iam/svc/net/otp/interface.ts +0 -14
  174. package/ui/src/@/iam/svc/net/passkeys/index.ts +0 -1
  175. package/ui/src/@/iam/svc/net/passkeys/interface.ts +0 -12
  176. package/ui/src/@/iam/svc/oidc/apple.ts +0 -47
  177. package/ui/src/@/iam/svc/oidc/authenticate.ts +0 -62
  178. package/ui/src/@/iam/svc/oidc/google.ts +0 -45
  179. package/ui/src/@/iam/svc/oidc/hello.ts +0 -82
  180. package/ui/src/@/iam/svc/oidc/index.ts +0 -3
  181. package/ui/src/@/iam/svc/oidc/nonce.ts +0 -5
  182. package/ui/src/@/iam/svc/oidc/providers.ts +0 -28
  183. package/ui/src/@/iam/svc/oidc/standard.ts +0 -28
  184. package/ui/src/@/iam/svc/otp.ts +0 -18
  185. package/ui/src/@/iam/svc/passkeys/create.ts +0 -20
  186. package/ui/src/@/iam/svc/passkeys/index.ts +0 -2
  187. package/ui/src/@/iam/svc/passkeys/login.ts +0 -21
  188. package/ui/src/@/iam/svc/store.ts +0 -36
  189. package/ui/src/@/iam/svc/sync.ts +0 -18
  190. package/ui/src/@/iam/svc/transfer.ts +0 -11
  191. package/ui/src/@/iam/svc/update.ts +0 -8
  192. package/ui/src/@/iam/ui/AccountLike.ts +0 -4
  193. package/ui/src/@/iam/ui/Authenticated.svelte +0 -37
  194. package/ui/src/@/iam/ui/Authenticated.ts +0 -10
  195. package/ui/src/@/iam/ui/Authentication.svelte +0 -50
  196. package/ui/src/@/iam/ui/Authentication.ts +0 -9
  197. package/ui/src/@/iam/ui/Authorized.svelte +0 -32
  198. package/ui/src/@/iam/ui/Authorized.ts +0 -65
  199. package/ui/src/@/iam/ui/Card.svelte +0 -14
  200. package/ui/src/@/iam/ui/Card.ts +0 -7
  201. package/ui/src/@/iam/ui/Refresh.svelte +0 -39
  202. package/ui/src/@/iam/ui/credentials/Credentials.svelte +0 -26
  203. package/ui/src/@/iam/ui/credentials/Credentials.ts +0 -5
  204. package/ui/src/@/iam/ui/credentials/Provider.svelte +0 -24
  205. package/ui/src/@/iam/ui/credentials/Provider.ts +0 -5
  206. package/ui/src/@/iam/ui/credentials/index.ts +0 -1
  207. package/ui/src/@/iam/ui/credentials/passkeys/Key.svelte +0 -42
  208. package/ui/src/@/iam/ui/credentials/passkeys/Key.ts +0 -29
  209. package/ui/src/@/iam/ui/credentials/passkeys/Manager.svelte +0 -83
  210. package/ui/src/@/iam/ui/credentials/passkeys/Manager.ts +0 -5
  211. package/ui/src/@/iam/ui/credentials/passkeys/Passkeys.svelte +0 -39
  212. package/ui/src/@/iam/ui/credentials/passkeys/Summary.svelte +0 -27
  213. package/ui/src/@/iam/ui/credentials/passkeys/Summary.ts +0 -5
  214. package/ui/src/@/iam/ui/credentials/passkeys/index.ts +0 -1
  215. package/ui/src/@/iam/ui/credentials/providers.ts +0 -15
  216. package/ui/src/@/iam/ui/credentials/transfer/Qr.svelte +0 -24
  217. package/ui/src/@/iam/ui/credentials/transfer/Qr.ts +0 -3
  218. package/ui/src/@/iam/ui/credentials/transfer/Transfer.svelte +0 -48
  219. package/ui/src/@/iam/ui/credentials/transfer/Transfer.ts +0 -5
  220. package/ui/src/@/iam/ui/credentials/transfer/index.ts +0 -1
  221. package/ui/src/@/iam/ui/index.ts +0 -3
  222. package/ui/src/@/iam/ui/intl/built.js +0 -79
  223. package/ui/src/@/iam/ui/intl/context.yaml +0 -91
  224. package/ui/src/@/iam/ui/intl/en-US.yaml +0 -64
  225. package/ui/src/@/iam/ui/intl/index.ts +0 -10
  226. package/ui/src/@/iam/ui/intl/types.ts +0 -70
  227. package/ui/src/@/iam/ui/oidc/Authentication.svelte +0 -16
  228. package/ui/src/@/iam/ui/oidc/Authentication.ts +0 -5
  229. package/ui/src/@/iam/ui/oidc/Button.svelte +0 -36
  230. package/ui/src/@/iam/ui/oidc/Button.ts +0 -11
  231. package/ui/src/@/iam/ui/oidc/Refresh.svelte +0 -16
  232. package/ui/src/@/iam/ui/oidc/icons/Apple.svelte +0 -19
  233. package/ui/src/@/iam/ui/oidc/icons/Google.svelte +0 -31
  234. package/ui/src/@/iam/ui/oidc/icons/index.ts +0 -11
  235. package/ui/src/@/iam/ui/oidc/index.ts +0 -2
  236. package/ui/src/@/iam/ui/passkey/Authentication.svelte +0 -64
  237. package/ui/src/@/iam/ui/passkey/Authentication.ts +0 -8
  238. package/ui/src/@/iam/ui/passkey/Create.svelte +0 -53
  239. package/ui/src/@/iam/ui/passkey/Create.ts +0 -7
  240. package/ui/src/@/iam/ui/passkey/Login.svelte +0 -29
  241. package/ui/src/@/iam/ui/passkey/Refresh.svelte +0 -29
  242. package/ui/src/@/iam/ui/passkey/index.ts +0 -2
  243. package/ui/src/@/iam/ui/password/Authentication.svelte +0 -19
  244. package/ui/src/@/iam/ui/password/Authentication.ts +0 -8
  245. package/ui/src/@/iam/ui/password/Form.svelte +0 -151
  246. package/ui/src/@/iam/ui/password/Form.ts +0 -6
  247. package/ui/src/@/iam/ui/password/Password.svelte +0 -39
  248. package/ui/src/@/iam/ui/password/Password.ts +0 -6
  249. package/ui/src/@/iam/ui/password/Refresh.svelte +0 -5
  250. package/ui/src/@/iam/ui/password/index.ts +0 -2
  251. package/ui/src/@/net/index.ts +0 -1
  252. package/ui/src/@/net/svc/index.ts +0 -3
  253. package/ui/src/@/net/svc/origin.ts +0 -8
  254. package/ui/src/@/net/svc/query.test.ts +0 -45
  255. package/ui/src/@/net/svc/query.ts +0 -25
  256. package/ui/src/@/passkeys/index.ts +0 -1
  257. package/ui/src/@/passkeys/svc/add.ts +0 -15
  258. package/ui/src/@/passkeys/svc/create.ts +0 -58
  259. package/ui/src/@/passkeys/svc/credentials/convert.ts +0 -32
  260. package/ui/src/@/passkeys/svc/credentials/create.ts +0 -34
  261. package/ui/src/@/passkeys/svc/credentials/get.ts +0 -14
  262. package/ui/src/@/passkeys/svc/credentials/index.ts +0 -3
  263. package/ui/src/@/passkeys/svc/credentials/key.ts +0 -10
  264. package/ui/src/@/passkeys/svc/get.ts +0 -10
  265. package/ui/src/@/passkeys/svc/index.ts +0 -6
  266. package/ui/src/@/passkeys/svc/net/CreationResponse.ts +0 -15
  267. package/ui/src/@/passkeys/svc/net/Passkey.ts +0 -8
  268. package/ui/src/@/passkeys/svc/net/RequestResponse.ts +0 -12
  269. package/ui/src/@/passkeys/svc/net/challenges/Options.ts +0 -21
  270. package/ui/src/@/passkeys/svc/net/challenges/index.ts +0 -2
  271. package/ui/src/@/passkeys/svc/net/challenges/interface.ts +0 -16
  272. package/ui/src/@/passkeys/svc/net/index.ts +0 -4
  273. package/ui/src/@/passkeys/svc/net/interface.ts +0 -29
  274. package/ui/src/@/passkeys/svc/remove.ts +0 -13
  275. package/ui/src/@/passkeys/svc/request.ts +0 -50
  276. package/ui/src/@/passkeys/svc/store.ts +0 -13
  277. package/ui/src/@/passkeys/svc/supported.ts +0 -1
  278. package/ui/src/@/passkeys/ui/aaguid.json +0 -150
  279. package/ui/src/@/realtime/events.ts +0 -1
  280. package/ui/src/@/realtime/index.ts +0 -1
  281. package/ui/src/@/realtime/rc.ts +0 -13
  282. package/ui/src/@/realtime/svc/connect.ts +0 -67
  283. package/ui/src/@/realtime/svc/events.ts +0 -17
  284. package/ui/src/@/realtime/svc/index.ts +0 -5
  285. package/ui/src/@/realtime/svc/net/Message.ts +0 -6
  286. package/ui/src/@/realtime/svc/net/index.ts +0 -2
  287. package/ui/src/@/realtime/svc/net/interface.ts +0 -13
  288. package/ui/src/@/realtime/svc/reset.ts +0 -5
  289. package/ui/src/@/realtime/svc/status.ts +0 -12
  290. package/ui/src/@/realtime/svc/store.ts +0 -30
  291. package/ui/src/@/realtime/svc/time.ts +0 -15
  292. package/ui/src/app.d.ts +0 -20
  293. package/ui/src/app.html +0 -13
  294. package/ui/src/config/index.ts +0 -70
  295. package/ui/src/lib/assets/favicon.svg +0 -1
  296. package/ui/src/lib/components/clipboard/Clipboard.svelte +0 -63
  297. package/ui/src/lib/components/clipboard/Clipboard.ts +0 -12
  298. package/ui/src/lib/components/clipboard/index.ts +0 -1
  299. package/ui/src/lib/components/dismissable/Dismissable.svelte +0 -81
  300. package/ui/src/lib/components/dismissable/Dismissable.ts +0 -7
  301. package/ui/src/lib/components/dismissable/index.ts +0 -1
  302. package/ui/src/lib/components/dropdown/Back.svelte +0 -14
  303. package/ui/src/lib/components/dropdown/Back.ts +0 -3
  304. package/ui/src/lib/components/dropdown/Content.svelte +0 -76
  305. package/ui/src/lib/components/dropdown/Content.ts +0 -13
  306. package/ui/src/lib/components/dropdown/Context.ts +0 -18
  307. package/ui/src/lib/components/dropdown/Group.svelte +0 -24
  308. package/ui/src/lib/components/dropdown/Group.ts +0 -8
  309. package/ui/src/lib/components/dropdown/GroupContext.ts +0 -15
  310. package/ui/src/lib/components/dropdown/Item.svelte +0 -31
  311. package/ui/src/lib/components/dropdown/Item.ts +0 -5
  312. package/ui/src/lib/components/dropdown/Layer.svelte +0 -11
  313. package/ui/src/lib/components/dropdown/Layer.ts +0 -7
  314. package/ui/src/lib/components/dropdown/Root.svelte +0 -88
  315. package/ui/src/lib/components/dropdown/Root.ts +0 -6
  316. package/ui/src/lib/components/dropdown/Separator.svelte +0 -13
  317. package/ui/src/lib/components/dropdown/Separator.ts +0 -5
  318. package/ui/src/lib/components/dropdown/Trigger.svelte +0 -33
  319. package/ui/src/lib/components/dropdown/Trigger.ts +0 -5
  320. package/ui/src/lib/components/dropdown/index.ts +0 -8
  321. package/ui/src/lib/components/fullscreen/Fullscreen.svelte +0 -97
  322. package/ui/src/lib/components/fullscreen/Fullscreen.ts +0 -18
  323. package/ui/src/lib/components/fullscreen/Overlay.svelte +0 -15
  324. package/ui/src/lib/components/fullscreen/Overlay.ts +0 -7
  325. package/ui/src/lib/components/fullscreen/index.ts +0 -2
  326. package/ui/src/lib/components/hold/Hold.svelte +0 -133
  327. package/ui/src/lib/components/hold/Hold.ts +0 -23
  328. package/ui/src/lib/components/hold/index.ts +0 -1
  329. package/ui/src/lib/components/scrollable/Scrollable.svelte +0 -49
  330. package/ui/src/lib/components/scrollable/Scrollable.ts +0 -117
  331. package/ui/src/lib/components/scrollable/index.ts +0 -2
  332. package/ui/src/lib/components/shake/Shake.svelte +0 -62
  333. package/ui/src/lib/components/shake/Shake.ts +0 -7
  334. package/ui/src/lib/components/shake/index.ts +0 -1
  335. package/ui/src/lib/components/share/Share.svelte +0 -58
  336. package/ui/src/lib/components/share/Share.ts +0 -9
  337. package/ui/src/lib/components/share/index.ts +0 -1
  338. package/ui/src/lib/components/shell/Attention.svelte +0 -11
  339. package/ui/src/lib/components/shell/Attention.ts +0 -6
  340. package/ui/src/lib/components/shell/Header.svelte +0 -18
  341. package/ui/src/lib/components/shell/Header.ts +0 -7
  342. package/ui/src/lib/components/shell/Screen.svelte +0 -28
  343. package/ui/src/lib/components/shell/Screen.ts +0 -11
  344. package/ui/src/lib/components/shell/Sticky.svelte +0 -23
  345. package/ui/src/lib/components/shell/Sticky.ts +0 -8
  346. package/ui/src/lib/components/shell/Underlay.svelte +0 -21
  347. package/ui/src/lib/components/shell/Underlay.ts +0 -6
  348. package/ui/src/lib/components/shell/index.ts +0 -6
  349. package/ui/src/lib/components/shell/nav/Actions.svelte +0 -31
  350. package/ui/src/lib/components/shell/nav/Actions.ts +0 -16
  351. package/ui/src/lib/components/shell/nav/Back.svelte +0 -20
  352. package/ui/src/lib/components/shell/nav/Back.ts +0 -9
  353. package/ui/src/lib/components/shell/nav/Bar.svelte +0 -24
  354. package/ui/src/lib/components/shell/nav/Bar.ts +0 -3
  355. package/ui/src/lib/components/shell/nav/Button.svelte +0 -64
  356. package/ui/src/lib/components/shell/nav/Button.ts +0 -7
  357. package/ui/src/lib/components/shell/nav/Nav.svelte +0 -62
  358. package/ui/src/lib/components/shell/nav/Nav.ts +0 -35
  359. package/ui/src/lib/components/shell/nav/Return.svelte +0 -29
  360. package/ui/src/lib/components/shell/nav/Return.ts +0 -15
  361. package/ui/src/lib/components/shell/nav/Sections.svelte +0 -58
  362. package/ui/src/lib/components/shell/nav/Sections.ts +0 -6
  363. package/ui/src/lib/components/shell/nav/Toolbar.svelte +0 -73
  364. package/ui/src/lib/components/shell/nav/Toolbar.ts +0 -3
  365. package/ui/src/lib/components/shell/nav/history.ts +0 -36
  366. package/ui/src/lib/components/shell/nav/index.ts +0 -5
  367. package/ui/src/lib/components/shell/nav/store.ts +0 -24
  368. package/ui/src/lib/components/ui/alert/alert-action.svelte +0 -20
  369. package/ui/src/lib/components/ui/alert/alert-description.svelte +0 -23
  370. package/ui/src/lib/components/ui/alert/alert-title.svelte +0 -23
  371. package/ui/src/lib/components/ui/alert/alert.svelte +0 -43
  372. package/ui/src/lib/components/ui/alert/index.ts +0 -17
  373. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte +0 -27
  374. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte +0 -27
  375. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte +0 -32
  376. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte +0 -17
  377. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte +0 -23
  378. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte +0 -20
  379. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte +0 -20
  380. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte +0 -17
  381. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte +0 -7
  382. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte +0 -17
  383. package/ui/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte +0 -7
  384. package/ui/src/lib/components/ui/alert-dialog/alert-dialog.svelte +0 -7
  385. package/ui/src/lib/components/ui/alert-dialog/index.ts +0 -40
  386. package/ui/src/lib/components/ui/badge/badge.svelte +0 -49
  387. package/ui/src/lib/components/ui/badge/index.ts +0 -2
  388. package/ui/src/lib/components/ui/button/button.svelte +0 -82
  389. package/ui/src/lib/components/ui/button/index.ts +0 -17
  390. package/ui/src/lib/components/ui/button-group/button-group-separator.svelte +0 -23
  391. package/ui/src/lib/components/ui/button-group/button-group-text.svelte +0 -28
  392. package/ui/src/lib/components/ui/button-group/button-group.svelte +0 -46
  393. package/ui/src/lib/components/ui/button-group/index.ts +0 -15
  394. package/ui/src/lib/components/ui/card/card-action.svelte +0 -23
  395. package/ui/src/lib/components/ui/card/card-content.svelte +0 -20
  396. package/ui/src/lib/components/ui/card/card-description.svelte +0 -20
  397. package/ui/src/lib/components/ui/card/card-footer.svelte +0 -20
  398. package/ui/src/lib/components/ui/card/card-header.svelte +0 -23
  399. package/ui/src/lib/components/ui/card/card-title.svelte +0 -20
  400. package/ui/src/lib/components/ui/card/card.svelte +0 -22
  401. package/ui/src/lib/components/ui/card/index.ts +0 -25
  402. package/ui/src/lib/components/ui/checkbox/checkbox.svelte +0 -39
  403. package/ui/src/lib/components/ui/checkbox/index.ts +0 -6
  404. package/ui/src/lib/components/ui/collapsible/collapsible-content.svelte +0 -7
  405. package/ui/src/lib/components/ui/collapsible/collapsible-trigger.svelte +0 -7
  406. package/ui/src/lib/components/ui/collapsible/collapsible.svelte +0 -20
  407. package/ui/src/lib/components/ui/collapsible/index.ts +0 -13
  408. package/ui/src/lib/components/ui/input/index.ts +0 -7
  409. package/ui/src/lib/components/ui/input/input.svelte +0 -48
  410. package/ui/src/lib/components/ui/input-otp/index.ts +0 -15
  411. package/ui/src/lib/components/ui/input-otp/input-otp-group.svelte +0 -20
  412. package/ui/src/lib/components/ui/input-otp/input-otp-separator.svelte +0 -27
  413. package/ui/src/lib/components/ui/input-otp/input-otp-slot.svelte +0 -31
  414. package/ui/src/lib/components/ui/input-otp/input-otp.svelte +0 -23
  415. package/ui/src/lib/components/ui/item/index.ts +0 -34
  416. package/ui/src/lib/components/ui/item/item-actions.svelte +0 -20
  417. package/ui/src/lib/components/ui/item/item-content.svelte +0 -23
  418. package/ui/src/lib/components/ui/item/item-description.svelte +0 -23
  419. package/ui/src/lib/components/ui/item/item-footer.svelte +0 -20
  420. package/ui/src/lib/components/ui/item/item-group.svelte +0 -21
  421. package/ui/src/lib/components/ui/item/item-header.svelte +0 -20
  422. package/ui/src/lib/components/ui/item/item-media.svelte +0 -42
  423. package/ui/src/lib/components/ui/item/item-separator.svelte +0 -19
  424. package/ui/src/lib/components/ui/item/item-title.svelte +0 -20
  425. package/ui/src/lib/components/ui/item/item.svelte +0 -61
  426. package/ui/src/lib/components/ui/kbd/index.ts +0 -10
  427. package/ui/src/lib/components/ui/kbd/kbd-group.svelte +0 -20
  428. package/ui/src/lib/components/ui/kbd/kbd.svelte +0 -23
  429. package/ui/src/lib/components/ui/label/index.ts +0 -7
  430. package/ui/src/lib/components/ui/label/label.svelte +0 -20
  431. package/ui/src/lib/components/ui/progress/index.ts +0 -7
  432. package/ui/src/lib/components/ui/progress/progress.svelte +0 -27
  433. package/ui/src/lib/components/ui/select/index.ts +0 -37
  434. package/ui/src/lib/components/ui/select/select-content.svelte +0 -45
  435. package/ui/src/lib/components/ui/select/select-group-heading.svelte +0 -21
  436. package/ui/src/lib/components/ui/select/select-group.svelte +0 -17
  437. package/ui/src/lib/components/ui/select/select-item.svelte +0 -40
  438. package/ui/src/lib/components/ui/select/select-label.svelte +0 -20
  439. package/ui/src/lib/components/ui/select/select-portal.svelte +0 -7
  440. package/ui/src/lib/components/ui/select/select-scroll-down-button.svelte +0 -20
  441. package/ui/src/lib/components/ui/select/select-scroll-up-button.svelte +0 -20
  442. package/ui/src/lib/components/ui/select/select-separator.svelte +0 -18
  443. package/ui/src/lib/components/ui/select/select-trigger.svelte +0 -29
  444. package/ui/src/lib/components/ui/select/select.svelte +0 -11
  445. package/ui/src/lib/components/ui/separator/index.ts +0 -7
  446. package/ui/src/lib/components/ui/separator/separator.svelte +0 -23
  447. package/ui/src/lib/components/ui/spinner/index.ts +0 -1
  448. package/ui/src/lib/components/ui/spinner/spinner.svelte +0 -18
  449. package/ui/src/lib/components/ui/tabs/index.ts +0 -18
  450. package/ui/src/lib/components/ui/tabs/tabs-content.svelte +0 -17
  451. package/ui/src/lib/components/ui/tabs/tabs-list.svelte +0 -40
  452. package/ui/src/lib/components/ui/tabs/tabs-trigger.svelte +0 -23
  453. package/ui/src/lib/components/ui/tabs/tabs.svelte +0 -19
  454. package/ui/src/lib/components/ui/textarea/index.ts +0 -7
  455. package/ui/src/lib/components/ui/textarea/textarea.svelte +0 -22
  456. package/ui/src/lib/intl/bcp.ts +0 -25
  457. package/ui/src/lib/intl/built.js +0 -18
  458. package/ui/src/lib/intl/context.yaml +0 -18
  459. package/ui/src/lib/intl/en-US.yaml +0 -6
  460. package/ui/src/lib/intl/index.ts +0 -65
  461. package/ui/src/lib/intl/types.ts +0 -19
  462. package/ui/src/lib/tools/ago.ts +0 -10
  463. package/ui/src/lib/tools/assert.ts +0 -3
  464. package/ui/src/lib/tools/cap.ts +0 -5
  465. package/ui/src/lib/tools/clicks.ts +0 -25
  466. package/ui/src/lib/tools/contextmenu.ts +0 -19
  467. package/ui/src/lib/tools/convert.ts +0 -32
  468. package/ui/src/lib/tools/currency.test.ts +0 -10
  469. package/ui/src/lib/tools/currency.ts +0 -55
  470. package/ui/src/lib/tools/date.test.ts +0 -21
  471. package/ui/src/lib/tools/date.ts +0 -35
  472. package/ui/src/lib/tools/delay.ts +0 -7
  473. package/ui/src/lib/tools/image.ts +0 -39
  474. package/ui/src/lib/tools/index.ts +0 -20
  475. package/ui/src/lib/tools/location.ts +0 -41
  476. package/ui/src/lib/tools/metronome.ts +0 -11
  477. package/ui/src/lib/tools/mq.ts +0 -84
  478. package/ui/src/lib/tools/onsubmit.ts +0 -21
  479. package/ui/src/lib/tools/random.ts +0 -15
  480. package/ui/src/lib/tools/search.ts +0 -25
  481. package/ui/src/lib/tools/timeout.ts +0 -26
  482. package/ui/src/lib/tools/transition.ts +0 -207
  483. package/ui/src/lib/tools/types.ts +0 -3
  484. package/ui/src/lib/tools/uuid.test.ts +0 -28
  485. package/ui/src/lib/tools/uuid.ts +0 -9
  486. package/ui/src/lib/typeset.css +0 -502
  487. package/ui/src/lib/utils.ts +0 -12
  488. package/ui/src/routes/(private)/+layout.svelte +0 -112
  489. package/ui/src/routes/(private)/+page.svelte +0 -7
  490. package/ui/src/routes/(private)/[component]/+page.svelte +0 -77
  491. package/ui/src/routes/+layout.svelte +0 -25
  492. package/ui/src/routes/+layout.ts +0 -14
  493. package/ui/src/routes/layout.css +0 -232
  494. package/ui/svelte.config.js +0 -36
  495. package/ui/tools/feat.js +0 -43
  496. package/ui/tools/hooks/README.md +0 -13
  497. package/ui/tools/hooks/guard-intl.sh +0 -40
  498. package/ui/tools/shad.js +0 -7
  499. package/ui/tsconfig.json +0 -20
  500. package/ui/vite.config.ts +0 -8
  501. /package/ui/{static → dist}/robots.txt +0 -0
@@ -1,34 +0,0 @@
1
- # Hold
2
-
3
- `Alt`+click fires `onclick` immediately (power users / tests). Right-click is swallowed.
4
-
5
- Use a unique `name` per instance when several holds share a page (CSS anchor). Set `portal={false}` inside transformed ancestors — Safari CSS anchor positioning quirk.
6
-
7
- ## Usage
8
-
9
- ```svelte
10
- <script lang="ts">
11
- import { Hold } from '$com/hold'
12
- </script>
13
-
14
- <Hold label="hold to log out" onclick={() => signOut()}>
15
- Log out
16
- </Hold>
17
- ```
18
-
19
- ## Props
20
-
21
- | Prop | Type | Default | Notes |
22
- | ---------- | ------------------------------------------------- | --------- | ---------------------------------------------------------------------------- |
23
- | `name` | `string` | `'hold'` | CSS anchor name. Use a unique value per instance if multiple on one page. |
24
- | `duration` | `number` (ms) | `800` | How long the user must hold before `onclick` fires. |
25
- | `label` | `string` | — | Hint text shown in the tooltip while held. Use `message` snippet for richer markup. |
26
- | `message` | `Snippet` | — | Overrides `label` for non-string content. |
27
- | `position` | `'center' \| 'left' \| 'right' \| 'top' \| 'bottom'` | `'left'` | Tooltip side (CSS anchor `position-area` first axis). |
28
- | `align` | `'center' \| 'left' \| 'right' \| 'top' \| 'bottom'` | `'center'` | Tooltip alignment along the chosen side. |
29
- | `portal` | `boolean` | `true` | Teleport tooltip to `body`. Set `false` inside transformed ancestors (Safari anchor quirk). |
30
- | `onpress` | `() => void` | — | Fires when the hold starts. |
31
- | `onclick` | `() => void` | — | Fires after the full duration is held, or immediately on `Alt`+click. |
32
- | `variant` | `ButtonVariant` | `'ghost'` | Forwarded to shadcn `Button`. |
33
-
34
- All other props pass through to the underlying `Button`.
@@ -1,117 +0,0 @@
1
- # iam
2
-
3
- Identity & access — a complete authentication surface plus the services behind it. UI covers passkey, password, one-time-passcode, and OIDC (Google/Apple) sign-in/sign-up, an `Authenticated` gate, an `Authorized` conditional-render guard, and session refresh on expiry. Services expose the `account` store, `logout`, `update`, `named`, and the `basic` / `otp` / `passkeys` / `oidc` flows.
4
-
5
- ## `$config`
6
-
7
- | Field | Type | Notes |
8
- | ------------------ | ------------------- | ---------------------------------------------------- |
9
- | `navigation.entry` | `{ entry: string }` | Route to land on after a successful OIDC redirect. |
10
-
11
- Network access (`origin`, `sleep`) flows through `@/net`.
12
-
13
- ## Environment
14
-
15
- OIDC client IDs come from `$env/dynamic/public`. Omit or leave empty to hide the provider button:
16
-
17
- | Var | Notes |
18
- | ------------------------- | -------------------------------------------------- |
19
- | `PUBLIC_GOOGLE_CLIENT_ID` | Google OIDC client ID. Empty hides the Google button. |
20
- | `PUBLIC_APPLE_CLIENT_ID` | Apple OIDC client ID. Empty hides the Apple button. |
21
-
22
- ## Notes
23
-
24
- - **OIDC is opt-in.** Missing/empty `PUBLIC_*_CLIENT_ID` disables the provider buttons — no wiring crashes if you only want password/passkey/OTP.
25
- - **Account shape.** Components accept an `AccountLike` (`Pick` of the account fields they render); the `account` store holds the authenticated `Echo`. Extend `Echo` (`svc/net/Echo.ts`) if your API returns extra profile fields.
26
- - **`Credentials` manager.** Renders the signed-in account's security surface: a passkey manager (register / list / hold-to-delete — a thin layer over `@/passkeys`), inert provider rows (email/Google/Apple; the `Connect` CTA carries no behaviour yet), and a "sign in on another device" action whose QR encodes the current session `challenge`. It gates itself on the `account` store, so just mount it anywhere inside your authenticated area.
27
- - **Session transfer is two-sided.** The QR is the *sending* device; the *receiving* device adopts the session by reading the fragment `challenge` on load. `rc()` already does this on init (shared `consume()`), so transfer completes as long as `rc()` runs once at app start.
28
-
29
- ## Usage
30
-
31
- Gate an app behind authentication (`Authenticated` shows the auth surface until signed in, then renders its children):
32
-
33
- ```svelte
34
- <script lang="ts">
35
- import { Authenticated } from '@/iam/ui'
36
- </script>
37
-
38
- <Authenticated>
39
- <Dashboard />
40
- </Authenticated>
41
- ```
42
-
43
- Conditionally render UI with `Authorized`. It renders its children only when **at least one** passed check passes: `dev` (matches `$app/environment` `dev`), `beta` (host starts with `beta.`), `debug` (`dev` or `beta`), or `role` (scoped match against the account's `roles` — `app` matches `app`, `app:codes`, and deeper; `app:codes` matches only `app:codes` and deeper). No matching check → nothing renders.
44
-
45
- ```svelte
46
- <script lang="ts">
47
- import { Authorized } from '@/iam/ui'
48
- </script>
49
-
50
- <Authorized role="admin">
51
- <AdminPanel />
52
- </Authorized>
53
-
54
- <Authorized dev>
55
- <DebugToolbar />
56
- </Authorized>
57
- ```
58
-
59
- Read the session reactively and sign out. `account` is a `svas` store of the authenticated `Echo` (`null` when signed out):
60
-
61
- ```svelte
62
- <script lang="ts">
63
- import { account, logout } from '@/iam'
64
- import { goto } from '$app/navigation'
65
-
66
- async function getout() {
67
- logout()
68
- void goto('/')
69
- }
70
- </script>
71
-
72
- {#if $account}
73
- <p>Signed in as {$account.name}</p>
74
- <button onclick={getout}>Log out</button>
75
- {/if}
76
- ```
77
-
78
- Block an action until the account has a display name — `named()` resolves once `account.name` is set (prompting through the auth surface if missing), so guarded flows can `await` it:
79
-
80
- ```ts
81
- import { having } from 'svas'
82
- import { account, named } from '@/iam'
83
-
84
- async function onaccept() {
85
- await having(account) // wait for a session
86
- await named() // …and a chosen name
87
- await invitations.accept(id)
88
- }
89
- ```
90
-
91
- Patch the local session optimistically (e.g. after a profile edit) — `update` merges a partial into the `account` store without a round-trip:
92
-
93
- ```ts
94
- import { update } from '@/iam'
95
-
96
- update({ name: 'Ada Lovelace' })
97
- ```
98
-
99
- Gate non-UI logic on the `authenticated` derived boolean (true only when a challenge + account exist and nothing is processing):
100
-
101
- ```ts
102
- import { authenticated } from '@/iam'
103
-
104
- authenticated.subscribe((ok) => ok && sync())
105
- ```
106
-
107
- Render the account's credentials manager inside an authenticated area (passkeys, connected providers, device transfer). It only renders once a session exists, so no extra gating is needed:
108
-
109
- ```svelte
110
- <script lang="ts">
111
- import { Credentials } from '@/iam/ui'
112
- </script>
113
-
114
- <Credentials />
115
- ```
116
-
117
- `Credentials` takes a single optional `class` (`ClassValue`) — everything else is driven by the `account` and `@/passkeys` stores.
@@ -1,34 +0,0 @@
1
- # InputForm
2
-
3
- Centered text field in a form that submits on blur when the value changed, or on Enter. Empty blur resets to the initial value. `onsubmit` may return a new string to sync the field after save.
4
-
5
- ## Notes
6
-
7
- Exposes an imperative `focus()` method — bind the instance (`bind:this`) and call it to move focus to the field (e.g. when revealing the form).
8
-
9
- ## Usage
10
-
11
- ```svelte
12
- <script lang="ts">
13
- import { InputForm } from '$com/input-form'
14
-
15
- let name = $state('Alex')
16
- </script>
17
-
18
- <InputForm
19
- value={name}
20
- onsubmit={async (value) => {
21
- name = value
22
- return value
23
- }}
24
- />
25
- ```
26
-
27
- ## Props
28
-
29
- | Prop | Type | Default | Notes |
30
- | ---------- | ----------------------------------------------------------------- | ------- | -------------------------------------------------- |
31
- | `value` | `string` | — | Initial/current value; resets to this when cleared. |
32
- | `class` | `ClassValue` | — | Extra classes on the shadcn `Input`. |
33
- | `placeholder` | `string` | `'Enter name'`| Placeholder text when the field is empty. |
34
- | `onsubmit` | `(value: string) => Promise<string \| undefined> \| string \| undefined` | — | Called on blur (if changed) or form submit. Return a string to update the field. |
@@ -1,66 +0,0 @@
1
- # locale
2
-
3
- Locale switching over the host svintl store. Two interchangeable switchers — `Languages` (snap-scroller) and `Language` (`Select` dropdown) — both set the active locale and fire `onselect` for persistence.
4
-
5
- ## Languages
6
-
7
- Horizontal snap-scroller of native language names.
8
-
9
- ### Usage
10
-
11
- ```svelte
12
- <script lang="ts">
13
- import { Languages } from '@/locale/ui'
14
- </script>
15
-
16
- <Languages />
17
- ```
18
-
19
- `onselect` fires after the store updates — use it for side effects like persistence:
20
-
21
- ```svelte
22
- <script lang="ts">
23
- import { Languages } from '@/locale/ui'
24
- import { me } from '@/accounts'
25
- import type { Locale } from '$lib/intl'
26
-
27
- function persist(locale: Locale) {
28
- void me.update({ locale })
29
- }
30
- </script>
31
-
32
- <Languages onselect={persist} />
33
- ```
34
-
35
- ### Props
36
-
37
- | Prop | Type | Default | Notes |
38
- | ---------- | -------------------------- | ------- | ------------------------------------------------------------------------------------------- |
39
- | `onselect` | `(locale: Locale) => void` | — | Fires after the host store is set. Use it to persist or track the choice. |
40
- | `infinite` | `boolean` | _auto_ | Forces the loop/clone scroller on or off. Defaults to on when `locales.length >= 10`. |
41
-
42
- ### Notes
43
-
44
- The active locale stays centered in the track. A long set (`>= 10`) loops endlessly; a short one renders once and centers via 50% gutters — dead-center whether it underfills or overflows. Centering is relative to the track's own width, so wrap it in a narrower box to constrain the window. `infinite` overrides the auto choice.
45
-
46
- ## Language
47
-
48
- Compact `Select` for a settings row.
49
-
50
- ### Usage
51
-
52
- ```svelte
53
- <script lang="ts">
54
- import { Language } from '@/locale/ui'
55
- import { me } from '@/accounts'
56
- import type { Locale } from '$lib/intl'
57
- </script>
58
-
59
- <Language onselect={(l: Locale) => me.update({ locale: l })} />
60
- ```
61
-
62
- ### Props
63
-
64
- | Prop | Type | Default | Notes |
65
- | ---------- | -------------------------- | ------- | ------------------------------------------------------------------------- |
66
- | `onselect` | `(locale: Locale) => void` | — | Fires after the host store is set. Use it to persist or track the choice. |
@@ -1,33 +0,0 @@
1
- # net
2
-
3
- The networking foundation every other Solution builds on. Connects a single `@toa.io/origin` client to your API and re-exports it as `origin`, plus the `query` helper for building criteria query strings. Sibling Solutions import `origin` from `@/net` to declare their resources.
4
-
5
- ## `$config`
6
-
7
- `net` reads two fields from your `$config` module (`import * as config from '$config'`):
8
-
9
- | Field | Type | Notes |
10
- | -------- | ------------------------------- | --------------------------------------------------------------------------- |
11
- | `origin` | `string` | Absolute API origin; `''` is invalid (resolved via `new URL(path, origin)`). |
12
- | `sleep` | `[number, number] \| undefined` | Dev-only artificial latency range; `undefined` disables it. |
13
-
14
- ## Usage
15
-
16
- Declare a resource against the shared client and call it:
17
-
18
- ```ts
19
- import { origin, query, type RequestOptions } from '@/net'
20
-
21
- const echo = origin.resource<{ message: string }>('/accounts/echo/')
22
-
23
- async function ping(): Promise<{ message: string } | Error> {
24
- return echo.json({ method: 'GET' } satisfies RequestOptions)
25
- }
26
- ```
27
-
28
- `query` turns a `URLSearchParams` into a criteria string; `omit`/`limit`/`search` stay as plain pairs, everything else becomes `criteria=key==value;…`:
29
-
30
- ```ts
31
- const params = new URLSearchParams({ status: 'active', limit: '20' })
32
- query(params) // '?criteria=status==active&limit=20'
33
- ```
@@ -1,44 +0,0 @@
1
- # Panel
2
-
3
- List row built on shadcn `Button`: main content in `left`/`right`/`icon` snippets, optional swipe-reveal `actions` on the trailing edge. Set `h` (e.g. `h-14`) when using `collapsed` — height animates to zero. Pass `selected` for accent ring styling (from `globals`).
4
-
5
- ## Usage
6
-
7
- ```svelte
8
- <script lang="ts">
9
- import { Panel, type Action } from '$com/panel'
10
-
11
- const actions: Action[] = [{ id: 'delete', onclick: () => remove() }]
12
- </script>
13
-
14
- <Panel h="h-14" class="bg-card border border-border" href="/items/1">
15
- {#snippet left()}
16
- <span class="font-medium">Item title</span>
17
- {/snippet}
18
- {#snippet right()}
19
- <span class="text-muted-foreground">$12</span>
20
- {/snippet}
21
- {#snippet action(id)}
22
- {#if id === 'delete'}Delete{/if}
23
- {/snippet}
24
- {actions}
25
- </Panel>
26
- ```
27
-
28
- ## Props
29
-
30
- | Prop | Type | Default | Notes |
31
- | ----------- | ---------------------------- | ----------- | --------------------------------------------------------------------- |
32
- | `left` | `Snippet` | — | Main label/content (required). |
33
- | `right` | `Snippet` | — | Trailing slot (balance, badge, etc.). |
34
- | `icon` | `Snippet` | — | Leading icon/avatar before `left`. |
35
- | `collapsed` | `boolean` | `false` | Animate height to zero. Requires `h`. |
36
- | `selected` | `boolean` | `false` | Applies `.selected` ring styling. |
37
- | `h` | `string` | — | Tailwind height class on the row and collapse wrapper. |
38
- | `actions` | `Action[]` | — | Swipe-reveal toolbar items. Pair with `action` snippet. |
39
- | `action` | `Snippet<[string]>` | — | Renders one action by `id`. Required when `actions` is set. |
40
- | `variant` | `ButtonVariant` | `'outline'` | Forwarded to shadcn `Button`. |
41
-
42
- `Action`: `{ id, class?: ClassValue, href?, onclick? }` — tapping an action scrolls the row back; `href` navigates via SvelteKit `goto`.
43
-
44
- All other props pass through to the underlying `Button` (`href`, `onclick`, `class`, etc.).
@@ -1,27 +0,0 @@
1
- # passkeys
2
-
3
- WebAuthn credential management — registers, lists, and removes passkeys for the signed-in account against your `/identity/passkeys` API. Wraps the browser `navigator.credentials` ceremony (challenge → `create`/`get` → attestation) so callers work with plain async operations that return values or `Error`.
4
-
5
- ## Notes
6
-
7
- - **Requires `@/iam`.** The `passkeys` store keys credentials by the current `@/iam` `account`; `get`/`remove`/`store` all read it. No signed-in account → empty store. `iam` is **not** pulled automatically (that would form an install cycle — `iam` already depends on `passkeys`), so install it yourself: `npx shadcn-svelte add http://cn.ants.dev/r/iam.json`. Installing `iam` brings `passkeys` along, so most consumers never add `passkeys` directly.
8
- - **Feature detection.** `supported` is a boolean (`window.PublicKeyCredential !== undefined`, `true` on the server). Gate registration UI on it — the ceremony rejects on unsupported browsers.
9
- - **`ui/aaguid.json`** ships the FIDO AAGUID → authenticator-metadata map (name + light/dark icon, base64 SVG). Look up `aaguid[credential.aaguid]` to label a passkey by its authenticator (e.g. "Google Password Manager", "iCloud Keychain"). Optional — nothing imports it for you.
10
-
11
- ## Usage
12
-
13
- ```ts
14
- import { supported, add, request, remove, passkeys } from '@/passkeys'
15
-
16
- if (supported) {
17
- const out = await add(identity, name) // full register: ceremony → POST → store
18
- if (out instanceof Error) handle(out)
19
- }
20
-
21
- // reactive list for the current account
22
- passkeys.subscribe((list) => render(list))
23
-
24
- await remove(id) // revoke one
25
- ```
26
-
27
- `request(id?)` runs the authentication (login) ceremony and returns the assertion (`RequestResponse`) for your auth flow to exchange. `create(name, identity?)` is the lower-level ceremony `add` builds on.
@@ -1,99 +0,0 @@
1
- # payments
2
-
3
- Subscription paywall stack: a tier selector, animated benefits table, pay button, platform-mandated legal disclaimers, and a processing overlay, backed by four payment processors (App Store, Google Play, Stripe, a dev mock) behind one `Processor` interface. Ships a neutral SaaS example (Storage / Seats / Priority / API) you adapt to your product.
4
-
5
- ## `$config`
6
-
7
- | Field | Used by |
8
- | -------- | ----------------------------------------------------------------------------------------- |
9
- | `origin` | All three live processors resolve their backend endpoints through `@/net`'s `origin`, which reads `$config.origin`. |
10
-
11
- The App Store / Google Play processors transact through the native shell (`@/bridge`); the dev processor stands in whenever `$app/environment`'s `dev` is true and there is no native host. No other `$config` field is read.
12
-
13
- ## Entitlements
14
-
15
- `tier` is the only entitlement the shipped UI reads. Everything else in `Entitlements` is a neutral example you replace with your product's metered (`number`) and flag (`boolean`) entitlements — edit the interface in `svc/entitlements.ts`:
16
-
17
- ```ts
18
- export interface Entitlements {
19
- tier: Tier
20
- seats: number // metered → gated by usage(account, 'seats') >= seats
21
- storage: number // metered
22
- priority: boolean // flag → gated by the boolean itself
23
- }
24
- ```
25
-
26
- `cant(account, key?)` gates generically off the value type — no per-key `switch`:
27
-
28
- - no `key` → `true` unless the account has unexpired premium.
29
- - `boolean` entitlement → `true` when the flag is off.
30
- - `number` entitlement → `true` when summed usage (`account.usage`) has reached the limit.
31
- - anything else (e.g. the `tier` string) → never gated.
32
-
33
- `usages()` (the `Entitlements` UI) derives one usage bar per **numeric** entitlement automatically, so adding/removing a metered key needs no UI change. When you rename a key, add a matching `used.<key>` and `benefits.<key>` entry to the intl mount.
34
-
35
- The account shape is `AccountLike` (`id`, optional `premium`, `processor`, `interval`, `entitlements`, `usage`) — a structural subset of your identity account; pass your `@/iam` account (or any object satisfying it) to `cant`/`usages`/the UI. `interval` is the account's current billing period as an ISO-8601 duration (`P1M`/`P1Y`); the paywall reads it to preselect the matching interval tab.
36
-
37
- ## Tiers
38
-
39
- The upgrade ladder is `tiers = ['basic', 'premium', 'expert']` in `svc/tier.ts` (`rank()` orders upgrades off it). Override it by editing that array in place — there is no config hook. Keep the `tier` values, the `Entitlements.tier` type, the `groups`/`plans` intl keys, and your store product groups in sync with it.
40
-
41
- ## Notes
42
-
43
- - **Products come from the store, not this Solution.** Each processor fetches its own catalog: App Store / Google Play via the native bridge over a fixed set of product IDs (`<tier>_<month|year>`, edit the `IDS` array per processor), Stripe via `GET /stripe/checkout/products`. The dev processor serves the static `svc/processors/dev/products.ts` list so the paywall renders with no backend. Align your store product IDs / Stripe price `metadata.tier` with your `tiers`.
44
- - **Backend endpoints.** Live processors call, under `$config.origin`: `POST/PATCH /appstore/transactions/{id}`, `POST /googleplay/transactions/{id}`, `GET /stripe/checkout/products`, `POST /stripe/checkout/{id}` (+ `/{id}/portal`), `POST /stripe/transactions/{id}`. You implement these.
45
- - **Stripe return.** Stripe checkout redirects back to `#stripe={CHECKOUT_SESSION_ID}`; `rc()` reads that one-shot hash through `@/fragments` and commits the transaction behind the processing overlay. Call `rc()` once on app start.
46
- - **Google Play package id.** `svc/processors/googleplay/processor.ts` builds the manage-subscription URL from a placeholder `com.example.twa` — replace it with your Trusted Web Activity package id (the same one you set in `@/bridge`).
47
- - **Analytics.** The processors emit `checkout` / `purchase` events through `@/analytics`; `Payguard` emits `paywall`. `analytics.d.ts` augments the analytics `Events` interface with the `paywall` / `checkout` shapes.
48
- - **Legal copy & links.** The disclaimers are neutral, store-compliant defaults; `Legal.svelte` links to `/terms/` and `/privacy/` — point them at your pages. Ships its own svintl mount in the registry's four locales; after install reconcile it: `npx intl import payments src/@/payments/ui/intl`.
49
-
50
- ## Usage
51
-
52
- Commit a pending Stripe return once on app start, then drop the paywall behind anything that needs premium:
53
-
54
- ```svelte
55
- <script lang="ts">
56
- import { onMount } from 'svelte'
57
- import { rc } from '@/payments/rc'
58
- import { Payguard, Entitlements } from '@/payments/ui'
59
- import { Button } from '$ui/button'
60
- import { account } from '@/iam'
61
-
62
- onMount(rc)
63
- </script>
64
-
65
- <!-- gates the action: opens the paywall when the account can't use `seats` -->
66
- <Payguard entitlement="seats">
67
- <Button>Invite a teammate</Button>
68
- </Payguard>
69
-
70
- {#if $account}
71
- <Entitlements account={$account} />
72
- {/if}
73
- ```
74
-
75
- `<Paywall>` is the full-screen plan picker `<Payguard>` opens; mount it directly when you want a standalone pricing page.
76
-
77
- ## Props
78
-
79
- ### `Payguard`
80
-
81
- | Prop | Type | Default | Notes |
82
- | ------------- | ---------------------- | ------- | --------------------------------------------------------------------------- |
83
- | `children` | `Snippet` | — | The gated trigger; rendered as-is when the account already has entitlement. |
84
- | `entitlement` | `keyof Entitlements` | — | When set, gates on that specific entitlement; omit to gate on premium only. |
85
- | `crown` | `boolean` | `true` | Show the crown badge on the gated trigger. |
86
- | `class` | `ClassValue` | — | Forwarded to the trigger button. |
87
-
88
- ### `Paywall`
89
-
90
- | Prop | Type | Default | Notes |
91
- | ------------ | ------------ | ------- | -------------------------------------- |
92
- | `oncomplete` | `() => void` | — | Fired after a successful checkout or dismissal. |
93
-
94
- ### `Entitlements`
95
-
96
- | Prop | Type | Default | Notes |
97
- | --------- | ------------- | ------- | ------------------------------------------------------ |
98
- | `account` | `AccountLike` | — | Renders the current plan, usage bars, and manage/upgrade action. |
99
- | `class` | `ClassValue` | — | Root class. |
@@ -1,69 +0,0 @@
1
- # realtime
2
-
3
- Server-pushed event stream layered on `@toa.io/origin` multipart. `connect(id)` opens a long-running multipart POST to `/presence/{id}/`, parses each chunk into a typed event, and re-emits it on a `mitt` bus. `rc()` ties the connection lifecycle to `@/iam`'s `authenticated` derived: connects with the current account id on sign-in, disconnects on sign-out, reconnects automatically on errors. Exposes a `dashboard` store (`status` + last 128 events), a `time` store (server clock — updated from `origin` response `Date` headers), and the `events` emitter for domain modules to subscribe to.
4
-
5
- ## Wiring
6
-
7
- Both `@/iam` and `@/realtime` install `rc()` bootstraps that must run once in the browser. Call them from the root `+layout.ts`:
8
-
9
- ```ts
10
- import { rc as iam } from '@/iam/rc'
11
- import { rc as realtime } from '@/realtime/rc'
12
- import { browser } from '$app/environment'
13
-
14
- if (browser) {
15
- iam()
16
- realtime()
17
- }
18
- ```
19
-
20
- ## Domain events
21
-
22
- `svc/events.ts` declares `Events = Record<string, unknown> // add domain events here`. Extend it per domain so the emitter is typed end-to-end. Convention: every domain that publishes server events exposes an `Events` type from `@/<domain>/svc/net` and the host intersects them:
23
-
24
- ```ts
25
- // src/@/realtime/svc/events.ts (edit after install)
26
- import type { Events as Contacts } from '@/contacts/svc/net'
27
- import type { Events as Notifications } from '@/notifications/svc/net'
28
-
29
- export type Events = Contacts & Notifications
30
- ```
31
-
32
- Subscribe in any domain's store:
33
-
34
- ```ts
35
- import { events } from '@/realtime'
36
-
37
- events.on('contact.added', (data) => { /* … */ })
38
- ```
39
-
40
- ## Notes
41
-
42
- - **Backend contract.** `/presence/{id}/` must return `multipart/mixed` per `@toa.io/origin` multipart: first part `"ACK"`, then JSON parts of shape `{ event, data }` or the literal string `"heartbeat"`, terminated by `"FIN"`. The Solution forces `credentials: 'include'` and sends `{ timezone }` in the body.
43
- - **Auto-reconnect.** Errors other than `AbortError` retry after 3 s. `disconnect()` (or sign-out via `rc()`) aborts the in-flight request.
44
- - **`time` store.** Seeded with `Date.now()` and updated on every `origin` response — handy for clock skew correction in UI relative timestamps.
45
-
46
- ## Usage
47
-
48
- Read connection status and the last events for a debug panel:
49
-
50
- ```svelte
51
- <script lang="ts">
52
- import { dashboard } from '@/realtime'
53
- </script>
54
-
55
- <p>Status: {$dashboard.status}</p>
56
- <ul>
57
- {#each $dashboard.events as e (e)}
58
- <li>{e.label}: {JSON.stringify(e.payload)}</li>
59
- {/each}
60
- </ul>
61
- ```
62
-
63
- Subscribe to a typed event:
64
-
65
- ```ts
66
- import { events } from '@/realtime'
67
-
68
- events.on('heartbeat', () => console.debug('alive'))
69
- ```
@@ -1,39 +0,0 @@
1
- # Scrollable
2
-
3
- Horizontal snap scroller with optional infinite loop and programmatic scroll-to-index. Give each child `snap-center` or `snap-start` (and fixed width) for predictable snapping.
4
-
5
- ## Usage
6
-
7
- ```svelte
8
- <script lang="ts">
9
- import { Scrollable } from '$com/scrollable'
10
-
11
- let index = $state(0)
12
- const items = ['One', 'Two', 'Three']
13
- </script>
14
-
15
- <Scrollable scroll={index} class="gap-2">
16
- {#each items as item, i (item)}
17
- <button class="snap-center shrink-0 rounded-lg border px-4 py-2" onclick={() => (index = i)}>
18
- {item}
19
- </button>
20
- {/each}
21
- </Scrollable>
22
- ```
23
-
24
- ## Props
25
-
26
- | Prop | Type | Default | Notes |
27
- | ------------ | ------------------------ | --------- | --------------------------------------------------------------------- |
28
- | `children` | `Snippet` | — | Scroll items. Duplicated internally when `infinite` is true. |
29
- | `infinite` | `boolean` | `false` | Loop by cloning children; recenters on `scrollend`. |
30
- | `align` | `'start' \| 'center'` | `'start'` | How `scroll` index is positioned. |
31
- | `scroll` | `number` | `0` | Child index to scroll to. Use `-1` to skip initial scroll. |
32
- | `bleed` | `boolean` | `false` | Break out to full viewport width (edge-to-edge carousel). |
33
- | `gutter` | `boolean` | `false` | Half-track end gutters so the first/last item can sit dead-center. Pairs with `align="center"`; ignored when `infinite`. |
34
- | `controlled` | `boolean` | `false` | Hide native overflow; drive scroll externally. |
35
- | `dir` | `'ltr' \| 'rtl'` | — | Direction on the outer container. |
36
- | `class` | `ClassValue` | — | Classes on the scroll track (gap, padding, etc.). |
37
- | `style` | `string` | — | Inline style on the outer container. |
38
- | `id` | `string` | — | Id on the scroll track. |
39
- | `onscroll` | `(e: Event) => void` | — | Scroll handler on the track. |
@@ -1,71 +0,0 @@
1
- # Selector
2
-
3
- Card-style option list for single- or multi-choice selection. Import as a namespace (`import * as Selector from '$com/selector'`).
4
-
5
- ## Usage
6
-
7
- ```svelte
8
- <script lang="ts">
9
- import * as Selector from '$com/selector'
10
-
11
- let value = $state('')
12
- let values = $state<string[]>([])
13
- </script>
14
-
15
- <Selector.Root bind:value>
16
- <Selector.Option value="yearly">
17
- <Selector.Title>
18
- <strong>Yearly</strong>
19
- 129,99€ per year
20
- </Selector.Title>
21
- <Selector.Description>32€ monthly</Selector.Description>
22
- </Selector.Option>
23
- <Selector.Option value="monthly">
24
- <Selector.Title>
25
- <strong>Monthly</strong>
26
- 29,99€ per month
27
- </Selector.Title>
28
- <Selector.Description>Flexible, slightly pricier</Selector.Description>
29
- </Selector.Option>
30
- </Selector.Root>
31
-
32
- <Selector.Root bind:values type="multi" position="end">
33
- <Selector.Option value="notifications">
34
- <Selector.Title>Notifications</Selector.Title>
35
- <Selector.Description>Email and push alerts</Selector.Description>
36
- </Selector.Option>
37
- </Selector.Root>
38
- ```
39
-
40
- ## Notes
41
-
42
- More than one `Selector.Root` on the same page with overlapping option `value`s needs a unique `id` on each root (e.g. `id="billing"` / `id="addons"`).
43
-
44
- ## Props
45
-
46
- ### Root
47
-
48
- | Prop | Type | Default | Notes |
49
- | ---------- | --------------------- | --------- | -------------------------------------------------- |
50
- | `id` | `string` | `'radio'` | Prefix for each option’s control/label id. |
51
- | `type` | `'single' \| 'multi'` | `'single'`| Single uses radio group; multi uses checkboxes. |
52
- | `value` | `string` | `''` | Bindable selection for `type="single"`. |
53
- | `values` | `string[]` | `[]` | Bindable selection for `type="multi"`. |
54
- | `position` | `'start' \| 'end'` | `'start'` | Indicator column: leading media or trailing actions. |
55
- | `variant` | `ItemVariant` | `'outline'` | Forwarded to each `Option` row. |
56
- | `size` | `ItemSize` | — | Forwarded to each `Option` row. |
57
- | `class` | `ClassValue` | — | Wrapper classes (`single` mode radio group only). |
58
- | `children` | `Snippet` | — | `Option` slots. |
59
-
60
- ### Option
61
-
62
- | Prop | Type | Default | Notes |
63
- | ---------- | --------- | ------- | ------------------------------------------ |
64
- | `value` | `string` | — | Option id stored in `value` / `values`. |
65
- | `id` | `string` | `{rootId}-{value}` | Override control/label id for this row. |
66
- | `class` | `ClassValue` | — | Row classes. |
67
- | `children` | `Snippet` | — | `Title` and `Description` slots. |
68
-
69
- ### Title / Description
70
-
71
- Pass through shadcn `Item` title and description props (`class`, etc.).