@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,7 +0,0 @@
1
- {
2
- "recommendations": [
3
- "svelte.svelte-vscode",
4
- "bradlc.vscode-tailwindcss",
5
- "dbaeumer.vscode-eslint"
6
- ]
7
- }
@@ -1,27 +0,0 @@
1
- {
2
- "files.associations": {
3
- "*.css": "tailwindcss"
4
- },
5
- "eslint.validate": [
6
- "javascript",
7
- "typescript",
8
- "svelte"
9
- ],
10
- "editor.formatOnSave": true,
11
- "editor.codeActionsOnSave": {
12
- "source.fixAll.eslint": "explicit"
13
- },
14
- "[svelte]": {
15
- "editor.defaultFormatter": "svelte.svelte-vscode"
16
- },
17
- "html.autoClosingTags": false,
18
- "cucumberautocomplete.strictGherkinCompletion": false,
19
- "cucumberautocomplete.strictGherkinValidation": false,
20
- "cucumberautocomplete.smartSnippets": true,
21
- "cucumberautocomplete.onTypeFormat": true,
22
- "editor.quickSuggestions": {
23
- "comments": false,
24
- "strings": true,
25
- "other": true
26
- }
27
- }
package/ui/AGENTS.md DELETED
@@ -1,51 +0,0 @@
1
- ## Project Configuration
2
-
3
- - **Language**: TypeScript
4
- - **Package Manager**: npm
5
- - **Add-ons**: none
6
-
7
- ---
8
-
9
- ## Architecture
10
-
11
- Before making any changes to the codebase, **always refer to `architecture.md`** for:
12
-
13
- - Domain organization, layer responsibilities, and conventions
14
- - Component organization (domain vs shared)
15
- - Forms pattern and service connectors
16
- - Linked entities pattern
17
- - Svelte conventions (reactivity, navigation, persistent state, class merging)
18
- - Internationalization (i18n)
19
- - Testing (Playwright BDD structure, conventions, running tests)
20
-
21
- Understanding the architecture is essential for maintaining code quality and consistency.
22
-
23
- ## Backend API
24
-
25
- This app is the configuration UI of the Toa runtime, and lives inside it: the backend is the
26
- repository around it.
27
-
28
- - The values are one ordinary component, `extensions/configuration/components/configuration.values`;
29
- its `manifest.toa.yaml` declares the entity, the operations and the endpoints they are exposed
30
- at. `GET /configuration/values/` lists every configured component, `GET /configuration/values/:component/`
31
- answers `{ configuration, schema, epoch }`, and `POST` to the same address creates a new one.
32
- - Reading needs the `system:configuration:get` role and creating needs `system:configuration:create`.
33
- - A configuration is immutable: creating one replaces the whole of it. A secret is held as a
34
- `$NAME` reference and is never shown — see `src/@/configuration/ui/read.ts`.
35
- - The HTTP protocol those endpoints speak — queries, errors, caching, authentication — is
36
- documented in `extensions/exposition/documentation`.
37
- - The page is served by `extensions/configuration/source/UI.ts` out of `dist`, under the mount
38
- path `/.configuration` on port `8003`. The API is on the app's own origin, except locally,
39
- where it is `:8000` — see `src/config/index.ts`.
40
-
41
- ## Verification
42
-
43
- Before calling a change done, verify it:
44
-
45
- - **`npm run check`** - Type and Svelte checks pass.
46
- - **`npm run format`** - Lint and format (eslint `--fix`).
47
- - **Check it in a browser** - Load the change in a headless browser and confirm it renders and behaves as intended. Use any available tool: `/agent-browser`, Chrome DevTools MCP, Playwright MCP.
48
-
49
- ### Measure or Eyeball
50
-
51
- A running UI is inspected two ways: **measure** it or **eyeball** it. Measuring reads exact values from the live DOM — `evaluate` JS returning numbers (`getBoundingClientRect`, `getComputedStyle`, `elementFromPoint`) — and is the default for anything with a number: size, position, gap, color, font, real visibility. Eyeball only what the eye alone settles: broken layout at a glance, occlusion, whether the composition reads. A screenshot is a **witness, not a verdict** — it flags a suspicion; the measurement decides. Never read a number off a screenshot.
@@ -1,390 +0,0 @@
1
- # Architecture
2
-
3
- ## Domain Organization
4
-
5
- The codebase follows a domain-driven design pattern with each domain organized under `src/@/`. Each domain contains standardized layers:
6
-
7
- ### Domain Structure Pattern
8
-
9
- ```plaintext
10
- src/@/{domain}/
11
- ├── index.ts # Main domain entry point
12
- ├── svc/ # Services layer (business logic)
13
- │ ├── index.ts # Services entry point
14
- │ ├── store.ts # Data persistence & state management
15
- │ ├── create.ts # Service methods
16
- │ ├── net/ # Network layer
17
- │ │ ├── index.ts # Network exports
18
- │ │ ├── interface.ts # API resource
19
- │ │ ├── Events.ts # Realtime event payload types
20
- │ │ └── {Model}.ts # Network (wire-format) types
21
- │ └── {Model}.ts # Linked entity
22
- └── ui/ # UI layer
23
- ├── index.ts # UI exports
24
- ├── ui.ts # Transient UI state
25
- ├── {Component}.svelte # Svelte component
26
- └── {Component}.ts # Component Props
27
- ```
28
-
29
- ### Layer Responsibilities
30
-
31
- **Service Layer (`svc/`)**:
32
-
33
- - **`store.ts`**: Manages domain state using `svas` collections, handles persistence and data binding
34
- - **`create.ts`**: Service methods
35
- - **`index.ts`**: Exports public service APIs
36
-
37
- Service methods that rely on the current identity must use `await having()` from the `svas` library for safe operations (reads), and `ensure()` for unsafe ones—because reads can happen during app startup, while the current identity is initialized asynchronously, and unsafe operations are a side effect of a user action.
38
-
39
- **Network Layer (`svc/net/`)**:
40
-
41
- - **`net/interface.ts`**: Defines API interfaces using Resource pattern for HTTP communication
42
- - **`net/{Model}.ts`**: Contains TypeScript interfaces, types, and constants for domain models
43
- - **`index.ts`**: Exports public service APIs
44
- - Service layer MUST NOT export network layer
45
- - Entity type must be exported from `store.ts` even if is unchanged compared to the network layer
46
-
47
- **UI Layer (`ui/`)**:
48
-
49
- - Contains Svelte components that consume services
50
- - Components import domain services via `@/{domain}` alias
51
- - **`index.ts`**: Exports reusable UI components
52
- - Transient UI state is managed in `ui.ts` file
53
- - Active elements must have an `id` attribute that follows the pattern `{domain-or-route}-{element}-{kind}` (e.g. `iam-email-tab`, `accounts-name-input`, `me-logout-button`)
54
-
55
- ### App Domain
56
-
57
- Some UI components are intended to be reused across multiple screens within this application, but their implementation is still application-bound (e.g., depends on app routing, app stores, domain models, product rules, or app-specific copy/branding). These components should live in the dedicated `app` domain.
58
-
59
- ### Aggregation Pattern
60
-
61
- When entities require calculated properties that depend on data from multiple domains, use a derived store pattern to connect domains and compute enriched entities:
62
-
63
- 1. **Base Collection Store** (`internal`): Raw domain data persisted via `svas` collection
64
- 2. **Derived Aggregation Store**: Combines multiple stores using Svelte's `derived()` to compute enriched entities
65
- 3. **Pure Computation Functions**: Extract computation logic into pure functions that take all dependencies as parameters
66
-
67
- #### Example Implementation
68
-
69
- ```typescript
70
- // Base collection store
71
- export const internal = collection<Group>({
72
- get,
73
- persist: 'groups',
74
- bind: account,
75
- stale: true,
76
- values: values<Group>(),
77
- })
78
-
79
- // Derived store aggregating multiple domains
80
- const groups = derived([internal, contacts, account], ([$internal, $contacts, $account]) => {
81
- return $internal.map((group) => {
82
- return {
83
- ...group,
84
- balance: balance($group, $contacts, $account),
85
- }
86
- })
87
- })
88
- ```
89
-
90
- ## Shared Components
91
-
92
- Shared components are app-agnostic UI building blocks. Everything in `src/lib/components/` must be reusable across different apps without modification.
93
-
94
- A component belongs here only if its implementation is not bound to the current application, meaning it:
95
- • does not depend on app-specific routes, screens, or domain concepts
96
- • does not import from domains
97
- • does not embed product copy, branding, or business rules
98
- • exposes configuration via props / slots / events, rather than hardcoding behavior
99
-
100
- ```plaintext
101
- src/lib/components/
102
- ├── section/
103
- │ ├── index.ts
104
- │ ├── Section.svelte
105
- │ └── Section.ts
106
- └── shell/
107
- ├── index.ts
108
- ├── Nav.svelte
109
- ├── Nav.ts
110
- ├── Screen.svelte
111
- └── Screen.ts
112
- ```
113
-
114
- ## Components
115
-
116
- ### Component File
117
-
118
- - **`{Component}.ts` is the component's TypeScript sidecar**, next to the `.svelte` file. It holds the component's types, constants, and logic — anything the markup doesn't need to state itself. A component with nothing to put there skips the file.
119
- - **`Props` lives in `{Component}.ts`** — never declared inside `<script>`. A component with no own props still has the file whenever it owns constants or logic worth lifting out of the markup.
120
- - **Props extend the root** — `interface Props extends RootProps`, where root is the HTML element or component rendered at the top level. Forward `class` and `{...props}` onto it. Nested-element props take distinct, non-conflicting names.
121
- - **`class` prop is always `ClassValue`** (from `svelte/elements`), never `string`. Optional props document their default with a JSDoc `@default`.
122
- - **EntityLike props** — components accepting entities declare an `EntityLike` interface (`Pick<Entity, …>`) with only the properties they use, to reduce coupling across domains.
123
-
124
- ```typescript
125
- import type { ClassValue } from 'svelte/elements'
126
-
127
- type AccountLike = Pick<Account, 'name' | 'picture'>
128
-
129
- export interface Props {
130
- account: AccountLike
131
- /** @default 'active' */
132
- variant?: 'active' | 'inactive'
133
- class?: ClassValue
134
- onsubmit?: (value: Value) => Promise<void | Error>
135
- }
136
- ```
137
-
138
- ### Decomposition
139
-
140
- - **Split at >50 lines** (or 2+ snippet props) into smaller components.
141
- - **Composite** (default): one public root exported as default, its parts internal.
142
- - **Compound**: only when the composition itself is public API.
143
- - **Props down, callbacks up** — parent owns business logic, child owns UI. Form components never call services.
144
- - **Reuse before create** — check `src/lib/components` and `src/@/app/ui` index files before adding anything new.
145
-
146
- ### Organization
147
-
148
- - **Order within `<script>`**: imports → state → functions → lifecycle. Define before use; pass functions directly (no arrow wrappers).
149
- - **Naming**: one-word, meaningful. Full words over abbreviations; synonyms and analogies allowed.
150
-
151
- ## Route Areas
152
-
153
- Routes are grouped under `src/routes/` by access:
154
-
155
- - **`(public)`** — Everything publicly accessible, typically long-term cacheable. The group layout sets `Cache-Control` to 1 hour.
156
- - **`(private)`** — Requires authentication.
157
- - **`(local)`** — For local development.
158
-
159
- ## Screens
160
-
161
- Shell `Header` (`$com/shell`) is owned by the **page** (`src/routes/**/+page.svelte`), never by domain or shared UI components. The page owns the title and explorer badges as `Header` children. Header utility buttons register via `<Utilities>` (stack; last wins), the same pattern as `<Actions>` for the bottom nav. Presentational components receive props and render body content only.
162
-
163
- Card / Dialog `*.Header` parts are unrelated — they stay inside those compound components.
164
-
165
- ## Forms Pattern
166
-
167
- Forms should follow a clear separation of concerns between data collection, validation, and business logic execution.
168
-
169
- ### Form Components
170
-
171
- **Form Declaration**:
172
-
173
- - Forms should declare a `Value` interface representing the form data structure
174
- - Forms should accept an `onsubmit` callback prop for handling form submission
175
- - Forms should not directly interact with domain services or perform business operations
176
-
177
- ```typescript
178
- export interface Value {
179
- title: string
180
- }
181
-
182
- export interface Props {
183
- value?: Value
184
- onsubmit?: (value: Value) => Promise<void | Error>
185
- }
186
- ```
187
-
188
- ### Service Connector
189
-
190
- Bridge forms with domain services by implementing specific business operations (Create, Edit, Update, etc.)
191
-
192
- ```typescript
193
- // Create.svelte - connects Form to something.add service
194
- <script lang="ts">
195
- import { add } from '@/something'
196
- import { Form, type Value } from './form'
197
-
198
- let value: Value = $state({ title: '' })
199
-
200
- async function onsubmit(value: Value) {
201
- return await add(value)
202
- }
203
- </script>
204
-
205
- <Form {value} {onsubmit} />
206
- ```
207
-
208
- ## Svelte
209
-
210
- ### Reactivity
211
-
212
- - **`$derived` over `$effect`** - `$effect` is almost always a symptom of bad architecture. Prefer reactive declarations. If you reach for `$effect`, reconsider the design and find a declarative solution.
213
- - **Busy state** - Guard async operations against double-clicks with a `busy` flag; disable controls while it's set.
214
-
215
- ```svelte
216
- <script lang="ts">
217
- let busy = $state(false)
218
-
219
- async function save() {
220
- busy = true
221
- const result = await add(value)
222
- busy = false
223
- if (result instanceof Error) return
224
- goto('/success')
225
- }
226
- </script>
227
- <Button disabled={busy} onclick={save}>Save</Button>
228
- ```
229
-
230
- ### Persistent State
231
-
232
- - **Prefer `svas` for app and component state** - For state that outlives a session, `svas` stores (see `/svas`) are our architectural default: `bind:` and reactivity come out of the box. Raw `localStorage` isn't forbidden, but for application and component state `svas` is preferred.
233
-
234
- ### Navigation
235
-
236
- - **Never** use `resolve` from `$app/navigation`.
237
-
238
- ## Styling
239
-
240
- ### Array Class Syntax
241
-
242
- Use Svelte array syntax for conditional classes (NOT cn utility):
243
-
244
- ```svelte
245
- <!-- ✅ Preferred: Array syntax -->
246
- <Button class={['w-full', isActive && 'bg-primary']}>
247
- Click me
248
- </Button>
249
-
250
- <div class={['flex items-center', expanded && 'bg-muted', className]}>
251
- Content
252
- </div>
253
-
254
- <!-- ❌ Avoid: cn utility (older pattern) -->
255
- <Button class={cn('w-full', isActive && 'bg-primary')}>
256
- ```
257
-
258
- ### Discipline
259
-
260
- - **Component styles live with the component** - put a component's own CSS in its `<style>` block, not in global `layout.css`.
261
- - **Prefer semantic colors** - reach for `bg-card`, `text-muted-foreground`, `border-input` before raw palette values like `bg-gray-100`.
262
- - **RTL-safe spacing** - use `ms-*`/`me-*`/`start-*`/`end-*`, never `ml-*`/`mr-*`/`left-*`/`right-*` for logical spacing.
263
- - **No layout shift** - give elements explicit dimensions or aspect-ratio. Intrinsic image size must never determine geometry.
264
-
265
- ## Internationalization (i18n)
266
-
267
- This project uses `svintl` (`/svintl`, `npx intl`) for all user-facing text.
268
-
269
- **Every string a user reads goes through intl (`$dict`), never hardcoded** — regardless of how many locales exist or how much text there is to route.
270
-
271
- **svintl translates automatically** — author the source text once; every other locale is generated. Never supply per-locale translations or code a default-language fallback.
272
-
273
- Each domain carries its own `ui/intl/` mount whose dictionary derives from the host `$lib/intl` locale and uses **only its own** dictionary.
274
-
275
- ## Linked Entities Pattern
276
-
277
- The Linked Entities Pattern is used to create rich domain models by composing data from multiple domains. This pattern enhances network-defined entities with related domain data, creating a more complete representation for application use.
278
-
279
- ### Pattern Overview
280
-
281
- A linked entity extends a network model (from `net/`) with references to related entities from other domains:
282
-
283
- ```typescript
284
- // Network model (raw API data) - defined in svc/net/Contact.ts
285
- export interface Contact {
286
- id: string
287
- identity: string
288
- }
289
-
290
- // Linked entity (enriched domain model) - defined in svc/Contact.ts
291
- export interface Contact extends net.Contact {
292
- account: Account // Linked entity from @/account domain
293
- }
294
- ```
295
-
296
- ### Implementation Pattern
297
-
298
- **Mapping Function (`map.ts`)**:
299
-
300
- The mapping function transforms network entities into linked entities by:
301
-
302
- 1. Extracting relevant data from the network model
303
- 2. Fetching related entities from other domains
304
- 3. Combining them into a rich domain model
305
-
306
- ```typescript
307
- import { awaited } from 'svas'
308
- import { accounts } from '@/accounts'
309
-
310
- export async function map(entry: net.Contact): Promise<Contact | Error> {
311
- const account = await awaited(accounts.get(entry.identity)) // Fetch linked Account entity
312
-
313
- if (account instanceof Error) return account
314
-
315
- return {
316
- ...entry,
317
- account, // Linked Account entity from @/account domain
318
- }
319
- }
320
- ```
321
-
322
- **Store Integration (`store.ts`)**:
323
-
324
- The domain store uses the mapping function to transform network data into linked entities:
325
-
326
- ```typescript
327
- export const internal = collection<Contact>({ get })
328
-
329
- events.on('default.contacts.sync', async (entry: net.Contact) => {
330
- const contact = await map(entry)
331
-
332
- if (contact instanceof Error) return
333
-
334
- sync(internal, contact)
335
- })
336
- ```
337
-
338
- ### Benefits
339
-
340
- - **Separation of Concerns**: Network models (`net/`) remain clean API representations
341
- - **Rich Domain Models**: Application logic works with complete, meaningful entities
342
- - **Reusability**: Linked entities can reference shared domain models (e.g., `Account`)
343
- - **Maintainability**: Changes to related domains are automatically reflected through references
344
-
345
- ## Static assets
346
-
347
- Static assets must be stored in the `static/` directory or inside the component directory.
348
-
349
- > Assets in the `routes/` directory may create multiple URLs for the same asset, which breaks caching.
350
-
351
- Optimize images using `npx sharp --optimize`.
352
-
353
- ## Testing
354
-
355
- Playwright BDD with Gherkin feature files for end-to-end testing.
356
-
357
- - **Structure** - Feature files (`features/*.feature`), step definitions (`features/steps/*.ts`).
358
- - **Generic vs domain steps** - Generic, domain-agnostic steps live in `navigaton.ts` (navigation, tapping, visibility, filling) and `typing.ts` (keyboard, random data). Domain-specific logic goes in `{domain}.ts` files. Reach for a generic step first; add a domain one only when there is no generic way to say it.
359
- - **ID-based selectors** - Test-id pattern `{domain}-{element}-{kind}`. Add IDs when a test needs them, not preemptively.
360
- - **Comprehensive scenarios** - Prefer fewer, complete scenarios over many small ones. Clean up unused step definitions.
361
- - **Timeouts aren't solutions** - Fix the flow rather than masking a broken one with `{ timeout }`. Assert on URL and content instead.
362
-
363
- ```gherkin
364
- Scenario: Create and favorite contact
365
- Given new account
366
- When I tap 'nav-contacts-button'
367
- And I tap 'contacts-new-button'
368
- And I type random name
369
- And I tap 'contacts-save-button'
370
- Then 'contact-name' contains that name
371
- ```
372
-
373
- ```typescript
374
- When('I tap {string}', async ({ page }, id) => {
375
- await page.locator(`#${id}`).click()
376
- })
377
-
378
- Then('{string} contains that name', async ({ page, ctx }, id) => {
379
- await expect(page.locator(`#${id}`)).toContainText(ctx.name)
380
- })
381
- ```
382
-
383
- ### Running Tests
384
-
385
- ```bash
386
- npx feat # all tests
387
- npx feat features/authentication.feature # specific feature
388
- npx feat features/authentication.feature --name "scenario name"
389
- APP_URL=https://evnapp.com npx feat # against production
390
- ```
@@ -1,20 +0,0 @@
1
- {
2
- "$schema": "https://shadcn-svelte.com/schema.json",
3
- "tailwind": {
4
- "css": "src/routes/layout.css",
5
- "baseColor": "neutral"
6
- },
7
- "aliases": {
8
- "components": "$com",
9
- "utils": "$lib/utils",
10
- "ui": "$ui",
11
- "hooks": "$lib/hooks",
12
- "lib": "$lib"
13
- },
14
- "typescript": true,
15
- "registry": "https://shadcn-svelte.com/registry",
16
- "style": "nova",
17
- "iconLibrary": "lucide",
18
- "menuColor": "default",
19
- "menuAccent": "subtle"
20
- }
@@ -1,152 +0,0 @@
1
- import ts from 'typescript-eslint'
2
- import neostandard from 'neostandard'
3
- import globals from 'globals'
4
- import unusedImports from 'eslint-plugin-unused-imports'
5
- import svelte from 'eslint-plugin-svelte'
6
- import importPlugin from 'eslint-plugin-import'
7
- import tsPlugin from '@typescript-eslint/eslint-plugin'
8
-
9
- export default [
10
- ...neostandard({
11
- ignores: [
12
- '.svelte-kit',
13
- 'dist', // the build; ignored here rather than in .gitignore — see that file
14
- 'src/lib/components/ui',
15
- '**/*.min.js',
16
- 'src/**/intl/**/*',
17
- ...neostandard.resolveIgnoresFromGitignore(),
18
- ],
19
- ts: true,
20
- }),
21
- {
22
- plugins: {
23
- import: importPlugin,
24
- '@typescript-eslint': tsPlugin,
25
- 'unused-imports': unusedImports,
26
- },
27
- },
28
- ...svelte.configs['flat/recommended'],
29
- {
30
- languageOptions: {
31
- globals: {
32
- ...globals.browser,
33
- ...globals.node,
34
- },
35
- },
36
- },
37
- {
38
- files: ['**/*.svelte'],
39
-
40
- languageOptions: {
41
- parserOptions: {
42
- parser: ts.parser,
43
- svelteFeatures: {
44
- experimentalGenerics: true,
45
- },
46
- },
47
- },
48
- },
49
- {
50
- rules: {
51
- 'no-void': 'off',
52
- curly: ['error', 'multi'],
53
- 'no-console': ['error', { allow: ['info', 'debug', 'warn', 'error'] }],
54
- 'no-implicit-coercion': 'error',
55
- '@stylistic/comma-dangle': ['error', 'always-multiline'],
56
- '@stylistic/space-before-function-paren': ['error', {
57
- asyncArrow: 'always',
58
- named: 'never',
59
- anonymous: 'never',
60
- }],
61
- 'arrow-parens': ['error', 'always'],
62
- 'no-unused-vars': 'off',
63
- 'unused-imports/no-unused-imports': 'error',
64
- 'unused-imports/no-unused-vars': [
65
- 'warn',
66
- {
67
- vars: 'all',
68
- varsIgnorePattern: '^_',
69
- args: 'after-used',
70
- argsIgnorePattern: '^_',
71
- }],
72
- '@stylistic/padding-line-between-statements': [
73
- 'error',
74
- {
75
- blankLine: 'always',
76
- prev: ['block-like', 'if', 'multiline-expression'],
77
- next: '*',
78
- },
79
- {
80
- blankLine: 'always',
81
- prev: '*',
82
- next: ['block-like', 'if', 'multiline-expression'],
83
- },
84
- {
85
- blankLine: 'always',
86
- prev: ['const', 'let'],
87
- next: ['expression', 'for'],
88
- },
89
- {
90
- blankLine: 'always',
91
- prev: 'expression',
92
- next: ['const', 'let'],
93
- },
94
- {
95
- blankLine: 'always',
96
- prev: ['multiline-const', 'multiline-let'],
97
- next: '*',
98
- },
99
- {
100
- blankLine: 'always',
101
- prev: '*',
102
- next: ['multiline-const', 'multiline-let'],
103
- },
104
- {
105
- blankLine: 'always',
106
- prev: '*',
107
- next: 'return',
108
- },
109
- {
110
- blankLine: 'always',
111
- prev: '*',
112
- next: 'break',
113
- },
114
- {
115
- blankLine: 'always',
116
- prev: '*',
117
- next: 'continue',
118
- },
119
- ],
120
- 'import/order': ['error', {
121
- groups: ['builtin', 'external', 'internal', 'unknown', 'parent', 'sibling', 'index', 'type'],
122
- alphabetize: {
123
- order: 'desc',
124
- },
125
- }],
126
- 'import-x/no-duplicates': 'off', // stupid shit doesn't work
127
- 'no-warning-comments': ['error', {
128
- terms: ['todo', 'fixme'],
129
- location: 'anywhere',
130
- }],
131
- 'import/newline-after-import': ['error', { count: 1 }],
132
- 'svelte/no-navigation-without-resolve': 'off',
133
- },
134
- },
135
- {
136
- files: ['src/**/*.ts', 'features/**/*.ts'],
137
- ignores: ['src/service-worker.ts'],
138
- languageOptions: {
139
- parserOptions: {
140
- project: './tsconfig.json',
141
- },
142
- },
143
- rules: {
144
- '@typescript-eslint/consistent-type-imports': 'error',
145
- '@typescript-eslint/strict-boolean-expressions': ['error', {
146
- allowNullableObject: false,
147
- allowNumber: false,
148
- allowString: false,
149
- }],
150
- },
151
- },
152
- ]
@@ -1,2 +0,0 @@
1
- /** The app is published under a mount path; feature files speak in application routes. */
2
- export const BASE = '/.configuration'
@@ -1,5 +0,0 @@
1
- Feature: Booting
2
-
3
- Scenario: The application is served under its mount path
4
- Given path '/'
5
- Then the page is loaded