@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
package/ui/package.json DELETED
@@ -1,76 +0,0 @@
1
- {
2
- "name": "configuration-ui",
3
- "private": true,
4
- "version": "0.0.1",
5
- "type": "module",
6
- "scripts": {
7
- "dev": "vite dev --open --host",
8
- "build": "vite build",
9
- "preview": "vite preview",
10
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
11
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
12
- "lint": "eslint .",
13
- "test:e2e": "playwright install && playwright test",
14
- "test": "npm run test:e2e",
15
- "format": "eslint . --fix",
16
- "bump": "npx -y npm-check-updates --target minor -u",
17
- "features": "npx bddgen && npx playwright test"
18
- },
19
- "devDependencies": {
20
- "@eslint/js": "^9.39.5",
21
- "@faker-js/faker": "^10.6.0",
22
- "@fontsource-variable/inter": "^5.3.0",
23
- "@internationalized/date": "^3.12.3",
24
- "@lucide/svelte": "^1.34.0",
25
- "@playwright/test": "^1.62.1",
26
- "@sveltejs/adapter-static": "^3.0.10",
27
- "@sveltejs/kit": "^2.70.3",
28
- "@sveltejs/vite-plugin-svelte": "^7.3.0",
29
- "@tailwindcss/vite": "^4.3.3",
30
- "@toa.io/origin": "^1.18.2",
31
- "@types/d3-selection": "^3.0.11",
32
- "@types/d3-zoom": "^3.0.8",
33
- "@types/dom-navigation": "^1.0.7",
34
- "@types/negotiator": "^0.6.5",
35
- "@types/node": "^24",
36
- "@types/qrcode": "^1.5.6",
37
- "ajv": "8.20.0",
38
- "bits-ui": "^2.19.0",
39
- "clsx": "^2.1.1",
40
- "d3-selection": "^3.0.0",
41
- "d3-zoom": "^3.0.0",
42
- "eslint": "^9.39.5",
43
- "eslint-plugin-import": "^2.32.0",
44
- "eslint-plugin-svelte": "^3.23.0",
45
- "eslint-plugin-unused-imports": "^4.4.1",
46
- "globals": "^17.11.0",
47
- "js-yaml": "5.4.1",
48
- "meros": "^1.3.2",
49
- "mitt": "^3.0.1",
50
- "neostandard": "^0.13.0",
51
- "playwright-bdd": "^9.2.0",
52
- "shadcn-svelte": "^1.5.1",
53
- "svas": "^1.7.1",
54
- "svelte": "^5.56.10",
55
- "svelte-check": "^4.7.6",
56
- "svintl": "^1.17.0",
57
- "tailwind-merge": "^3.6.0",
58
- "tailwind-variants": "^3.3.1",
59
- "tailwindcss": "^4.3.3",
60
- "tw-animate-css": "^1.4.0",
61
- "typescript": "^5.9.3",
62
- "typescript-eslint": "^8.68.0",
63
- "vite": "^8.2.2",
64
- "vite-plugin-transform-lucide-imports": "^0.3.1",
65
- "vitest": "^4.1.11"
66
- },
67
- "bin": {
68
- "shad": "tools/shad.js",
69
- "feat": "tools/feat.js"
70
- },
71
- "dependencies": {
72
- "negotiator": "^1.1.0",
73
- "qrcode": "^1.5.4"
74
- },
75
- "description": "Toa Configuration UI"
76
- }
@@ -1,13 +0,0 @@
1
- import { defineBddConfig } from 'playwright-bdd'
2
- import { defineConfig } from '@playwright/test'
3
-
4
- const testDir = defineBddConfig({
5
- features: './features/**/*.feature',
6
- steps: './features/steps/**/*.ts',
7
- })
8
-
9
- export default defineConfig({
10
- testDir,
11
- use: { baseURL: process.env.APP_URL || 'http://localhost:5173' },
12
- expect: { timeout: 3_000 },
13
- })
@@ -1,30 +0,0 @@
1
- {
2
- "version": 1,
3
- "skills": {
4
- "antcn": {
5
- "source": "cn.ants.dev",
6
- "sourceUrl": "https://cn.ants.dev",
7
- "sourceType": "well-known",
8
- "computedHash": "9dc789fa80bcdffb1347075dd3be6fb10fa13d5ac6f5b4831cb3ef8eb2d94e16",
9
- "wellKnownDigest": "sha256:d4ca7d272fcbb9fb577db347542947414a40d530b0ae260b9c83bb827e675714"
10
- },
11
- "shadcn-svelte": {
12
- "source": "huntabyte/shadcn-svelte",
13
- "sourceType": "github",
14
- "skillPath": "skills/shadcn-svelte/SKILL.md",
15
- "computedHash": "d4f3f983a71466a86649985a8a7fbce47da29f44de3a9d02540bbcf3167134e0"
16
- },
17
- "svas": {
18
- "source": "temich/svas",
19
- "sourceType": "github",
20
- "skillPath": "skills/svas/SKILL.md",
21
- "computedHash": "4c40a657053dd5a475b72bdc4163047cee30bba901c98be246303a95d9fe9d2c"
22
- },
23
- "svintl": {
24
- "source": "temich/svintl",
25
- "sourceType": "github",
26
- "skillPath": "skills/svintl/SKILL.md",
27
- "computedHash": "e243a29a69fd45b98e05c683c116e3bdce2a2d8c7e2858b89e81ae7b52e86008"
28
- }
29
- }
30
- }
@@ -1 +0,0 @@
1
- export * from './svc'
@@ -1,29 +0,0 @@
1
- import { ensure } from 'svas'
2
- import { account } from '@/iam/svc/store'
3
- import { configurations } from './store'
4
- import * as origin from './net'
5
- import type { Node } from './net'
6
-
7
- /**
8
- * Creates a configuration for the component. A configuration is immutable, so this is a
9
- * new object rather than a change to the one there — and what it answers with is the
10
- * epoch it was filed under.
11
- *
12
- * The created value is written into the store, so every screen showing it follows
13
- * without asking the service again.
14
- */
15
- export async function create(component: string, configuration: Node): Promise<void | Error> {
16
- // the identity is what the service records as the originator, and creating is a side
17
- // effect of a user action — so it must be there by now
18
- ensure(account)
19
-
20
- const created = await origin.create(component, configuration)
21
-
22
- if (created instanceof Error) return created
23
-
24
- configurations.update(component, (current) => ({
25
- ...current,
26
- configuration,
27
- epoch: created.epoch,
28
- }))
29
- }
@@ -1,3 +0,0 @@
1
- export { configurations } from './store'
2
- export { create } from './create'
3
- export type { Configuration, Node } from './store'
@@ -1,18 +0,0 @@
1
- /** A component's configuration for its deployed epoch, with the schema it satisfies. */
2
- export interface Configuration {
3
- /** The component's name, which is what identifies its configuration. */
4
- id: string
5
- component: string
6
- epoch: string
7
- configuration: Node
8
- /** What the value is checked against. An epoch the deployment forgot has none. */
9
- schema?: object
10
- }
11
-
12
- /** What was created, as the service answers a `POST`. */
13
- export interface Created {
14
- id: string
15
- epoch: string
16
- }
17
-
18
- export type Node = Record<string, unknown>
@@ -1,2 +0,0 @@
1
- export { list, get, create } from './interface'
2
- export type { Configuration, Created, Node } from './Configuration'
@@ -1,35 +0,0 @@
1
- import { origin } from '@/net'
2
- import type { Configuration, Created, Node } from './Configuration'
3
-
4
- const values = origin.resource('/configuration/values/', { credentials: 'include' })
5
-
6
- /** What the resources answer with: the component names the item, the store keys by `id`. */
7
- type Item = Omit<Configuration, 'id'>
8
-
9
- export async function list(): Promise<Configuration[] | Error> {
10
- const items = await values.json<Item[]>()
11
-
12
- if (items instanceof Error) return items
13
-
14
- return items.map(identify)
15
- }
16
-
17
- export async function get(component: string): Promise<Configuration | Error> {
18
- const item = await values.json<Omit<Item, 'component'>>(component + '/')
19
-
20
- if (item instanceof Error) return item
21
-
22
- return identify({ ...item, component })
23
- }
24
-
25
- export async function create(component: string, configuration: Node): Promise<Created | Error> {
26
- return await values.json<Created>(component + '/', {
27
- method: 'POST',
28
- body: { configuration },
29
- })
30
- }
31
-
32
- /** A configuration is its component's, so the component is what identifies it. */
33
- function identify(item: Item): Configuration {
34
- return { ...item, id: item.component }
35
- }
@@ -1,14 +0,0 @@
1
- import { collection, values } from 'svas'
2
- import { account } from '@/iam/svc/store'
3
- import * as origin from './net'
4
-
5
- export const configurations = collection<Configuration>({
6
- get: origin.list,
7
- values: values<Configuration>({ get: origin.get }),
8
- persist: 'configuration:values',
9
- bind: account,
10
- stale: true,
11
- })
12
-
13
- export type Configuration = origin.Configuration
14
- export type Node = origin.Node
@@ -1,85 +0,0 @@
1
- <script lang="ts">
2
- import { Async, ok } from 'svas'
3
- import { configurations, type Configuration } from '@/configuration'
4
- import { Separator } from '$ui/separator'
5
- import { base } from '$app/paths'
6
- import { goto } from '$app/navigation'
7
- import { only, query, rank, system } from './ui'
8
- import { dict } from './intl'
9
- import Row from './Row.svelte'
10
- import type { Props } from './Configurations'
11
-
12
- const { class: className, ...props }: Props = $props()
13
-
14
- const list = $derived(ok($configurations) ? $configurations : [])
15
-
16
- const shown = $derived(
17
- list
18
- .map((item) => ({ item, rank: rank(item, $query) }))
19
- .filter((ranked) => ranked.rank > 0)
20
- .sort(order)
21
- .map((ranked) => ranked.item),
22
- )
23
-
24
- /** Best answers first, then by name; the service returns them in its own order. */
25
- function order(a: Ranked, b: Ranked) {
26
- return b.rank - a.rank || a.item.component.localeCompare(b.item.component)
27
- }
28
-
29
- /**
30
- * What the application declared, then what it was given. A band the filter has emptied
31
- * is not a band: its heading would say there is something there and there is not.
32
- */
33
- function group(items: Configuration[]) {
34
- return [
35
- { id: 'user', label: $dict.space.user, of: items.filter((it) => !system(it.component)) },
36
- { id: 'system', label: $dict.space.system, of: items.filter((it) => system(it.component)) },
37
- ].filter((band) => band.of.length > 0)
38
- }
39
-
40
- interface Ranked {
41
- item: Configuration
42
- rank: number
43
- }
44
-
45
- // with one row left there is nothing to choose, so the key does what pressing it does
46
- $effect(() => {
47
- const single = shown.length === 1 ? shown[0].id : null
48
-
49
- only.set(single === null ? null : () => void goto(`${base}/${single}/`))
50
-
51
- return () => only.set(null)
52
- })
53
- </script>
54
-
55
- <Async store={configurations}>
56
- {#snippet awaited()}
57
- {#if list.length === 0}
58
- <p class="text-muted-foreground py-20 text-center">{$dict.values.empty}</p>
59
- {:else if shown.length === 0}
60
- <p class="text-muted-foreground py-20 text-center">{$dict.values.nomatch}</p>
61
- {:else}
62
- <div class={['flex flex-col gap-6', className]} {...props}>
63
- {#each group(shown) as band (band.id)}
64
- <section class="flex flex-col gap-2">
65
- <div class="text-muted-foreground flex items-center gap-3">
66
- <span class="text-xs font-medium tracking-wide uppercase">{band.label}</span>
67
- <Separator class="flex-1" />
68
- </div>
69
-
70
- <!-- a row says a name and nothing else, so it takes a column rather than a
71
- line: as many columns as the screen has room for -->
72
- <div
73
- role="list"
74
- class="grid grid-cols-1 gap-2 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"
75
- >
76
- {#each band.of as item (item.id)}
77
- <Row configuration={item} />
78
- {/each}
79
- </div>
80
- </section>
81
- {/each}
82
- </div>
83
- {/if}
84
- {/snippet}
85
- </Async>
@@ -1,5 +0,0 @@
1
- import type { ClassValue } from 'svelte/elements'
2
-
3
- export interface Props {
4
- class?: ClassValue
5
- }
@@ -1,64 +0,0 @@
1
- <script lang="ts">
2
- import { dump } from 'js-yaml'
3
- import { Pencil } from '@lucide/svelte'
4
- import { create } from '@/configuration'
5
- import { buttonVariants } from '$ui/button'
6
- import * as Dialog from '$ui/alert-dialog'
7
- import { dict } from './intl'
8
- import Form from './Form.svelte'
9
- import type { Node } from '@/configuration'
10
- import type { Props } from './Create'
11
-
12
- const { configuration }: Props = $props()
13
-
14
- let open = $state(false)
15
-
16
- /**
17
- * The dialog opens on what the component has now, so a change is an edit. A created
18
- * configuration replaces the whole of the one before it — what is not here is gone.
19
- */
20
- const text = $derived(dump(configuration.configuration))
21
-
22
- async function submit(value: Node): Promise<void | Error> {
23
- const result = await create(configuration.component, value)
24
-
25
- if (result instanceof Error) return result
26
-
27
- open = false
28
- }
29
- </script>
30
-
31
- <Dialog.Root bind:open>
32
- <Dialog.Trigger
33
- id="configuration-edit-button"
34
- class={buttonVariants({ variant: 'outline', size: 'sm' })}
35
- >
36
- <Pencil />
37
- {$dict.create.action}
38
- </Dialog.Trigger>
39
-
40
- <!-- the width goes through the same `data-size` variant the component styles itself with:
41
- a plain `sm:max-w-*` loses to it on specificity, and tailwind-merge, seeing a different
42
- variant, keeps both. An editor takes the room the screen has rather than a fixed step. -->
43
- <Dialog.Content
44
- class="data-[size=default]:max-w-[calc(100vw-2rem)]
45
- data-[size=default]:sm:max-w-[min(90vw,72rem)]"
46
- >
47
- <Dialog.Header>
48
- <Dialog.Title>{$dict.create.title}</Dialog.Title>
49
- </Dialog.Header>
50
-
51
- <!-- keyed on the text the dialog opened with, so a reopened dialog is not the one
52
- that was cancelled -->
53
- {#if open}
54
- {#key text}
55
- <Form
56
- value={{ text }}
57
- schema={configuration.schema}
58
- onsubmit={submit}
59
- oncancel={() => (open = false)}
60
- />
61
- {/key}
62
- {/if}
63
- </Dialog.Content>
64
- </Dialog.Root>
@@ -1,7 +0,0 @@
1
- import type { Configuration } from '@/configuration'
2
-
3
- export type ConfigurationLike = Pick<Configuration, 'component' | 'configuration' | 'schema'>
4
-
5
- export interface Props {
6
- configuration: ConfigurationLike
7
- }
@@ -1,75 +0,0 @@
1
- <script lang="ts">
2
- import { untrack } from 'svelte'
3
- import { Textarea } from '$ui/textarea'
4
- import { Button } from '$ui/button'
5
- import { onsubmit as handler } from '$lib/tools'
6
- import { dict } from './intl'
7
- import { read, type Props } from './Form'
8
-
9
- const { value, schema, onsubmit, oncancel, class: className }: Props = $props()
10
-
11
- // captured once on purpose: the dialog keys the form on what it opened with, so a
12
- // form that is still mounted is still the one the reader is editing
13
- let text = $state(untrack(() => value.text))
14
- let busy = $state(false)
15
- let failed = $state(false)
16
-
17
- const reading = $derived(read(text, schema, $dict.create.malformed))
18
- const errors = $derived('errors' in reading ? reading.errors : [])
19
-
20
- async function submit(): Promise<void> {
21
- if ('errors' in reading) return
22
-
23
- busy = true
24
- failed = false
25
-
26
- const result = await onsubmit?.(reading.value)
27
-
28
- busy = false
29
- failed = result instanceof Error
30
- }
31
- </script>
32
-
33
- <form onsubmit={handler(submit)} class={['flex flex-col gap-3', className]}>
34
- <!-- the dialog's title says what this is; the field carries the name for a reader
35
- that cannot see the title -->
36
- <Textarea
37
- id="configuration-value-input"
38
- aria-label={$dict.create.editor}
39
- bind:value={text}
40
- spellcheck={false}
41
- autocapitalize="off"
42
- aria-invalid={errors.length > 0}
43
- aria-describedby={errors.length > 0 ? 'configuration-errors' : undefined}
44
- class="field-sizing-fixed h-[min(55vh,32rem)] min-h-48 font-mono text-xs"
45
- />
46
-
47
- <!-- no room is held for it: an empty band under the editor reads as a gap, and the
48
- dialog is centred, so what it costs when something is wrong is half a line -->
49
- <div id="configuration-errors" class="text-destructive empty:hidden font-mono text-xs">
50
- {#each errors as error, at (at)}
51
- <div>{error}</div>
52
- {/each}
53
-
54
- {#if failed && errors.length === 0}
55
- <div>{$dict.create.failed}</div>
56
- {/if}
57
- </div>
58
-
59
- <div class="flex justify-end gap-2">
60
- <Button
61
- id="configuration-cancel-button"
62
- type="button"
63
- variant="ghost"
64
- disabled={busy}
65
- onclick={oncancel}
66
- >
67
- {$dict.create.cancel}
68
- </Button>
69
-
70
- <!-- what does not satisfy the schema never reaches the service -->
71
- <Button id="configuration-submit-button" type="submit" disabled={busy || errors.length > 0}>
72
- {$dict.create.submit}
73
- </Button>
74
- </div>
75
- </form>
@@ -1,79 +0,0 @@
1
- import { load } from 'js-yaml'
2
- import Ajv, { type ErrorObject, type ValidateFunction } from 'ajv'
3
- import type { ClassValue } from 'svelte/elements'
4
- import type { Node } from '@/configuration'
5
-
6
- export interface Value {
7
- /** The configuration as the reader wrote it. */
8
- text: string
9
- }
10
-
11
- export interface Props {
12
- value: Value
13
- /** What the value is checked against. Without one nothing here can be checked. */
14
- schema?: object
15
- onsubmit?: (value: Node) => Promise<void | Error>
16
- oncancel?: () => void
17
- class?: ClassValue
18
- }
19
-
20
- /** What the text says, or what is wrong with it. */
21
- export type Reading = { value: Node } | { errors: string[] }
22
-
23
- /**
24
- * `useDefaults` is off: the service fills the schema's defaults when it stores the
25
- * value, and filling them here would put words in the reader's mouth.
26
- *
27
- * `$data` is off — it is ajv's default, said out loud because the option carries a
28
- * ReDoS of its own (GHSA-2g4f-4pwh-qvx6) and nothing here needs it.
29
- */
30
- const ajv = new Ajv({ allErrors: true, strict: false, $data: false })
31
-
32
- const validators = new WeakMap<object, ValidateFunction>()
33
-
34
- /**
35
- * The configuration the text holds, or every reason it is not one. Nothing is sent that
36
- * has not passed this, so the service never refuses what the page could have caught.
37
- */
38
- export function read(text: string, schema: object | undefined, malformed: string): Reading {
39
- let parsed: unknown
40
-
41
- try {
42
- parsed = load(text)
43
- } catch {
44
- return { errors: [malformed] }
45
- }
46
-
47
- // an empty document is an empty configuration, which is a thing a schema may allow
48
- const value = parsed ?? {}
49
-
50
- if (typeof value !== 'object' || value === null || Array.isArray(value))
51
- return { errors: [malformed] }
52
-
53
- if (schema === undefined) return { value: value as Node }
54
-
55
- const validate = compile(schema)
56
-
57
- if (validate(value)) return { value: value as Node }
58
-
59
- return { errors: (validate.errors ?? []).map(describe) }
60
- }
61
-
62
- function compile(schema: object): ValidateFunction {
63
- let validate = validators.get(schema)
64
-
65
- if (validate === undefined) {
66
- validate = ajv.compile(schema)
67
- validators.set(schema, validate)
68
- }
69
-
70
- return validate
71
- }
72
-
73
- /** Where the fault is and what it is, as one line: `foo/0: must be integer`. */
74
- function describe(error: ErrorObject): string {
75
- const at = error.instancePath.replace(/^\//, '')
76
- const said = error.message ?? 'is invalid'
77
-
78
- return at === '' ? said : `${at}: ${said}`
79
- }
@@ -1,44 +0,0 @@
1
- <script lang="ts">
2
- import { ChevronRight, KeyRound } from '@lucide/svelte'
3
- import * as Item from '$ui/item'
4
- import { base } from '$app/paths'
5
- import { DEFAULT, split } from './ui'
6
- import { holds } from './read'
7
- import { dict } from './intl'
8
- import type { Props } from './Row'
9
-
10
- const { configuration, class: className }: Props = $props()
11
-
12
- const name = $derived(split(configuration.component))
13
- const secret = $derived(holds(configuration.configuration))
14
- </script>
15
-
16
- <!-- the row is the link, which is what the item's own `[a]:hover` styling expects -->
17
- <Item.Root variant="outline" size="sm" class={className}>
18
- {#snippet child({ props })}
19
- <a {...props} id="configurations-{configuration.id}-link" href="{base}/{configuration.id}/">
20
- <Item.Content class="min-w-0">
21
- <!-- the name is one string; the component spaces its children by default, and a
22
- name too long for its column ends in an ellipsis rather than wrapping -->
23
- <Item.Title class="w-full min-w-0 gap-0" title={configuration.component}>
24
- <span class="truncate">
25
- {#if name.namespace !== DEFAULT}<span class="text-muted-foreground"
26
- >{name.namespace}.</span
27
- >{/if}{name.component}
28
- </span>
29
-
30
- <!-- that the component keeps a secret is worth saying on the row; which one it
31
- is, and what it stands for, is the screen's business -->
32
- {#if secret}
33
- <KeyRound
34
- class="text-muted-foreground ms-1.5 size-3.5 shrink-0"
35
- aria-label={$dict.value.secret}
36
- />
37
- {/if}
38
- </Item.Title>
39
- </Item.Content>
40
-
41
- <ChevronRight class="size-4 shrink-0 opacity-60" />
42
- </a>
43
- {/snippet}
44
- </Item.Root>
@@ -1,9 +0,0 @@
1
- import type { ClassValue } from 'svelte/elements'
2
- import type { Configuration } from '@/configuration'
3
-
4
- export type ConfigurationLike = Pick<Configuration, 'id' | 'component' | 'configuration'>
5
-
6
- export interface Props {
7
- configuration: ConfigurationLike
8
- class?: ClassValue
9
- }
@@ -1,33 +0,0 @@
1
- <script lang="ts">
2
- import { KeyRound } from '@lucide/svelte'
3
- import { read, ITEM } from './read'
4
- import { dict } from './intl'
5
- import type { Props } from './Value'
6
-
7
- const { value, class: className }: Props = $props()
8
-
9
- const lines = $derived(read(value))
10
- </script>
11
-
12
- <!-- the value as it is held, not as a form would take it: a secret is a reference, and a
13
- reference is all there is to show -->
14
- <div
15
- data-scrollable
16
- class={[
17
- 'bg-muted/50 overflow-auto rounded-md p-3 font-mono text-xs whitespace-nowrap',
18
- className,
19
- ]}
20
- >
21
- {#each lines as line, at (at)}
22
- <div style:padding-inline-start="{line.depth}rem">
23
- {#if line.key === ITEM}<span class="text-muted-foreground">-</span>{:else}{line.key}<span
24
- class="text-muted-foreground">:</span
25
- >{/if}{#if line.secret}
26
- <span class="text-muted-foreground inline-flex items-center gap-1 align-middle">
27
- <KeyRound class="size-3" aria-hidden="true" />
28
- {$dict.value.secret}
29
- </span>
30
- {:else if line.value !== null}&nbsp;{line.value}{/if}
31
- </div>
32
- {/each}
33
- </div>
@@ -1,6 +0,0 @@
1
- import type { ClassValue } from 'svelte/elements'
2
-
3
- export interface Props {
4
- value: object
5
- class?: ClassValue
6
- }
@@ -1,9 +0,0 @@
1
- export { default as Configurations } from './Configurations.svelte'
2
- export { default as Row } from './Row.svelte'
3
- export { default as Value } from './Value.svelte'
4
- export { default as Create } from './Create.svelte'
5
- export type { Props as ConfigurationsProps } from './Configurations'
6
- export type { Props as RowProps, ConfigurationLike } from './Row'
7
- export { query, only, matches, split, DEFAULT } from './ui'
8
- export { read, secret, holds, ITEM } from './read'
9
- export type { Line } from './read'