@mistriwork/engine 0.0.0-stage → 1.0.0-rc.10

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 (546) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -2
  3. package/dist/adapters/adapter.d.ts +693 -0
  4. package/dist/adapters/adapter.js +444 -0
  5. package/dist/adapters/cache/cacheStore.d.ts +75 -0
  6. package/dist/adapters/cache/cacheStore.js +160 -0
  7. package/dist/adapters/cache/resp.d.ts +52 -0
  8. package/dist/adapters/cache/resp.js +237 -0
  9. package/dist/adapters/commands/canonicalJson.d.ts +19 -0
  10. package/dist/adapters/commands/canonicalJson.js +154 -0
  11. package/dist/adapters/connect.d.ts +29 -0
  12. package/dist/adapters/connect.js +40 -0
  13. package/dist/adapters/connectionBudget.d.ts +101 -0
  14. package/dist/adapters/connectionBudget.js +128 -0
  15. package/dist/adapters/dbLatency.d.ts +35 -0
  16. package/dist/adapters/dbLatency.js +79 -0
  17. package/dist/adapters/epochCache.d.ts +50 -0
  18. package/dist/adapters/epochCache.js +85 -0
  19. package/dist/adapters/http/egress.d.ts +48 -0
  20. package/dist/adapters/http/egress.js +175 -0
  21. package/dist/adapters/http/httpAdapter.d.ts +71 -0
  22. package/dist/adapters/http/httpAdapter.js +512 -0
  23. package/dist/adapters/http/httpDescription.d.ts +32 -0
  24. package/dist/adapters/http/httpDescription.js +246 -0
  25. package/dist/adapters/http/openapi.d.ts +98 -0
  26. package/dist/adapters/http/openapi.js +487 -0
  27. package/dist/adapters/layoutRefusal.d.ts +24 -0
  28. package/dist/adapters/layoutRefusal.js +35 -0
  29. package/dist/adapters/net/networkPolicy.d.ts +44 -0
  30. package/dist/adapters/net/networkPolicy.js +123 -0
  31. package/dist/adapters/net/untrustedDatabase.d.ts +18 -0
  32. package/dist/adapters/net/untrustedDatabase.js +120 -0
  33. package/dist/adapters/poolAdmission.d.ts +43 -0
  34. package/dist/adapters/poolAdmission.js +184 -0
  35. package/dist/adapters/poolMetrics.d.ts +121 -0
  36. package/dist/adapters/poolMetrics.js +185 -0
  37. package/dist/adapters/postgres.d.ts +436 -0
  38. package/dist/adapters/postgres.js +1890 -0
  39. package/dist/adapters/postgresCatalog.d.ts +96 -0
  40. package/dist/adapters/postgresCatalog.js +387 -0
  41. package/dist/adapters/postgresCatalogDigest.d.ts +30 -0
  42. package/dist/adapters/postgresCatalogDigest.js +87 -0
  43. package/dist/adapters/postgresCatalogRows.d.ts +62 -0
  44. package/dist/adapters/postgresCatalogRows.js +37 -0
  45. package/dist/adapters/postgresDates.d.ts +1 -0
  46. package/dist/adapters/postgresDates.js +39 -0
  47. package/dist/adapters/postgresMaintenance.d.ts +33 -0
  48. package/dist/adapters/postgresMaintenance.js +179 -0
  49. package/dist/adapters/postgresPool.d.ts +255 -0
  50. package/dist/adapters/postgresPool.js +838 -0
  51. package/dist/adapters/postgresPooler.d.ts +28 -0
  52. package/dist/adapters/postgresPooler.js +267 -0
  53. package/dist/adapters/postgresReadCatalog.d.ts +31 -0
  54. package/dist/adapters/postgresReadCatalog.js +226 -0
  55. package/dist/adapters/postgresReadSnapshot.d.ts +46 -0
  56. package/dist/adapters/postgresReadSnapshot.js +133 -0
  57. package/dist/adapters/postgresSchemaEpoch.d.ts +24 -0
  58. package/dist/adapters/postgresSchemaEpoch.js +149 -0
  59. package/dist/adapters/postgresTransactionHandle.d.ts +173 -0
  60. package/dist/adapters/postgresTransactionHandle.js +524 -0
  61. package/dist/adapters/postgresValues.d.ts +30 -0
  62. package/dist/adapters/postgresValues.js +75 -0
  63. package/dist/adapters/replicas.d.ts +70 -0
  64. package/dist/adapters/replicas.js +208 -0
  65. package/dist/adapters/reservedSql.d.ts +38 -0
  66. package/dist/adapters/reservedSql.js +264 -0
  67. package/dist/adapters/rolePrivileges.d.ts +17 -0
  68. package/dist/adapters/rolePrivileges.js +22 -0
  69. package/dist/adapters/scoped/keyRows.d.ts +65 -0
  70. package/dist/adapters/scoped/keyRows.js +173 -0
  71. package/dist/adapters/scoped/postgresScopeCatalog.d.ts +16 -0
  72. package/dist/adapters/scoped/postgresScopeCatalog.js +117 -0
  73. package/dist/adapters/scoped/scopedCommandOperations.d.ts +5 -0
  74. package/dist/adapters/scoped/scopedCommandOperations.js +48 -0
  75. package/dist/adapters/scoped/scopedReads.d.ts +20 -0
  76. package/dist/adapters/scoped/scopedReads.js +174 -0
  77. package/dist/adapters/scoped/scopedTransaction.d.ts +89 -0
  78. package/dist/adapters/scoped/scopedTransaction.js +303 -0
  79. package/dist/adapters/scoped/sqliteScopeCatalog.d.ts +16 -0
  80. package/dist/adapters/scoped/sqliteScopeCatalog.js +241 -0
  81. package/dist/adapters/scoped/updateGuard.d.ts +3 -0
  82. package/dist/adapters/scoped/updateGuard.js +40 -0
  83. package/dist/adapters/serverSettings.d.ts +45 -0
  84. package/dist/adapters/serverSettings.js +46 -0
  85. package/dist/adapters/sqlite.d.ts +262 -0
  86. package/dist/adapters/sqlite.js +1434 -0
  87. package/dist/adapters/sqliteCostlyReads.d.ts +33 -0
  88. package/dist/adapters/sqliteCostlyReads.js +49 -0
  89. package/dist/adapters/sqliteDecimals.d.ts +22 -0
  90. package/dist/adapters/sqliteDecimals.js +57 -0
  91. package/dist/adapters/sqliteHandles.d.ts +43 -0
  92. package/dist/adapters/sqliteHandles.js +143 -0
  93. package/dist/adapters/sqliteStatementProcess.d.ts +29 -0
  94. package/dist/adapters/sqliteStatementProcess.js +131 -0
  95. package/dist/adapters/statementControl.d.ts +34 -0
  96. package/dist/adapters/statementControl.js +90 -0
  97. package/dist/adapters/storeHost.d.ts +130 -0
  98. package/dist/adapters/storeHost.js +13 -0
  99. package/dist/adapters/telemetry/drivers.d.ts +21 -0
  100. package/dist/adapters/telemetry/drivers.js +321 -0
  101. package/dist/adapters/telemetry/metrics.d.ts +63 -0
  102. package/dist/adapters/telemetry/metrics.js +122 -0
  103. package/dist/adapters/telemetry/otlp.d.ts +12 -0
  104. package/dist/adapters/telemetry/otlp.js +320 -0
  105. package/dist/adapters/telemetry/otlpEncode.d.ts +48 -0
  106. package/dist/adapters/telemetry/otlpEncode.js +366 -0
  107. package/dist/adapters/telemetry/otlpEnv.d.ts +1 -0
  108. package/dist/adapters/telemetry/otlpEnv.js +12 -0
  109. package/dist/adapters/telemetry/serverTiming.d.ts +83 -0
  110. package/dist/adapters/telemetry/serverTiming.js +503 -0
  111. package/dist/adapters/telemetry/start.d.ts +10 -0
  112. package/dist/adapters/telemetry/start.js +25 -0
  113. package/dist/adapters/telemetry/statement.d.ts +16 -0
  114. package/dist/adapters/telemetry/statement.js +134 -0
  115. package/dist/adapters/telemetry/trace.d.ts +127 -0
  116. package/dist/adapters/telemetry/trace.js +295 -0
  117. package/dist/adapters/writeAhead.d.ts +27 -0
  118. package/dist/adapters/writeAhead.js +46 -0
  119. package/dist/adapters/writeAttribution.d.ts +18 -0
  120. package/dist/adapters/writeAttribution.js +23 -0
  121. package/dist/adapters/writeCapture.d.ts +73 -0
  122. package/dist/adapters/writeCapture.js +20 -0
  123. package/dist/adapters/writeLanes.d.ts +94 -0
  124. package/dist/adapters/writeLanes.js +232 -0
  125. package/dist/engine.d.ts +15 -0
  126. package/dist/engine.js +13 -0
  127. package/dist/server/auth/credentials.d.ts +61 -0
  128. package/dist/server/auth/credentials.js +260 -0
  129. package/dist/server/cacheService.d.ts +50 -0
  130. package/dist/server/cacheService.js +110 -0
  131. package/dist/server/cli/args.d.ts +176 -0
  132. package/dist/server/cli/args.js +342 -0
  133. package/dist/server/cli/bin.d.ts +5 -0
  134. package/dist/server/cli/bin.js +66 -0
  135. package/dist/server/cli/browser.d.ts +15 -0
  136. package/dist/server/cli/browser.js +37 -0
  137. package/dist/server/cli/config.d.ts +50 -0
  138. package/dist/server/cli/config.js +206 -0
  139. package/dist/server/cli/startup.d.ts +36 -0
  140. package/dist/server/cli/startup.js +128 -0
  141. package/dist/server/cli/startupOptions.d.ts +63 -0
  142. package/dist/server/cli/startupOptions.js +143 -0
  143. package/dist/server/cli/subcommand.d.ts +28 -0
  144. package/dist/server/cli/subcommand.js +32 -0
  145. package/dist/server/cli/usage.d.ts +13 -0
  146. package/dist/server/cli/usage.js +31 -0
  147. package/dist/server/clientHttp.d.ts +184 -0
  148. package/dist/server/clientHttp.js +700 -0
  149. package/dist/server/clientSurface.d.ts +128 -0
  150. package/dist/server/clientSurface.js +182 -0
  151. package/dist/server/columnGrants.d.ts +103 -0
  152. package/dist/server/columnGrants.js +730 -0
  153. package/dist/server/compileCache.d.ts +1 -0
  154. package/dist/server/compileCache.js +30 -0
  155. package/dist/server/config/locations.d.ts +1 -0
  156. package/dist/server/config/locations.js +15 -0
  157. package/dist/server/configPaths.d.ts +7 -0
  158. package/dist/server/configPaths.js +34 -0
  159. package/dist/server/configSections.d.ts +64 -0
  160. package/dist/server/configSections.js +72 -0
  161. package/dist/server/connectionRedaction.d.ts +30 -0
  162. package/dist/server/connectionRedaction.js +77 -0
  163. package/dist/server/connections.d.ts +353 -0
  164. package/dist/server/connections.js +978 -0
  165. package/dist/server/constraints.d.ts +82 -0
  166. package/dist/server/constraints.js +169 -0
  167. package/dist/server/demo.d.ts +9 -0
  168. package/dist/server/demo.js +554 -0
  169. package/dist/server/devclient.d.ts +108 -0
  170. package/dist/server/devclient.js +361 -0
  171. package/dist/server/evidence.d.ts +55 -0
  172. package/dist/server/evidence.js +323 -0
  173. package/dist/server/hiddenColumns.d.ts +32 -0
  174. package/dist/server/hiddenColumns.js +238 -0
  175. package/dist/server/http/baselineHeaders.d.ts +24 -0
  176. package/dist/server/http/baselineHeaders.js +12 -0
  177. package/dist/server/http/captured.d.ts +35 -0
  178. package/dist/server/http/captured.js +73 -0
  179. package/dist/server/http/clock.d.ts +1 -0
  180. package/dist/server/http/clock.js +14 -0
  181. package/dist/server/http/connectionSource.d.ts +4 -0
  182. package/dist/server/http/connectionSource.js +48 -0
  183. package/dist/server/http/context.d.ts +189 -0
  184. package/dist/server/http/context.js +11 -0
  185. package/dist/server/http/crawlerText.d.ts +15 -0
  186. package/dist/server/http/crawlerText.js +32 -0
  187. package/dist/server/http/dataRoutes.d.ts +88 -0
  188. package/dist/server/http/dataRoutes.js +137 -0
  189. package/dist/server/http/door.d.ts +57 -0
  190. package/dist/server/http/door.js +39 -0
  191. package/dist/server/http/exportRoute.d.ts +15 -0
  192. package/dist/server/http/exportRoute.js +320 -0
  193. package/dist/server/http/firstPaint.d.ts +108 -0
  194. package/dist/server/http/firstPaint.js +262 -0
  195. package/dist/server/http/httpOperationRoutes.d.ts +11 -0
  196. package/dist/server/http/httpOperationRoutes.js +50 -0
  197. package/dist/server/http/pageReads.d.ts +20 -0
  198. package/dist/server/http/pageReads.js +205 -0
  199. package/dist/server/http/pageRoutes.d.ts +39 -0
  200. package/dist/server/http/pageRoutes.js +291 -0
  201. package/dist/server/http/probes.d.ts +22 -0
  202. package/dist/server/http/probes.js +27 -0
  203. package/dist/server/http/rateLimit.d.ts +131 -0
  204. package/dist/server/http/rateLimit.js +351 -0
  205. package/dist/server/http/readRoutes.d.ts +9 -0
  206. package/dist/server/http/readRoutes.js +131 -0
  207. package/dist/server/http/readRouting.d.ts +20 -0
  208. package/dist/server/http/readRouting.js +80 -0
  209. package/dist/server/http/recordCompose.d.ts +67 -0
  210. package/dist/server/http/recordCompose.js +167 -0
  211. package/dist/server/http/recordWrites.d.ts +89 -0
  212. package/dist/server/http/recordWrites.js +298 -0
  213. package/dist/server/http/refusalReport.d.ts +38 -0
  214. package/dist/server/http/refusalReport.js +63 -0
  215. package/dist/server/http/reply.d.ts +130 -0
  216. package/dist/server/http/reply.js +394 -0
  217. package/dist/server/http/requestOrigin.d.ts +11 -0
  218. package/dist/server/http/requestOrigin.js +8 -0
  219. package/dist/server/http/router.d.ts +45 -0
  220. package/dist/server/http/router.js +22 -0
  221. package/dist/server/http/serverCore.d.ts +68 -0
  222. package/dist/server/http/serverCore.js +177 -0
  223. package/dist/server/http/traceRequest.d.ts +30 -0
  224. package/dist/server/http/traceRequest.js +224 -0
  225. package/dist/server/http/trust.d.ts +261 -0
  226. package/dist/server/http/trust.js +472 -0
  227. package/dist/server/http/writeRefusal.d.ts +33 -0
  228. package/dist/server/http/writeRefusal.js +24 -0
  229. package/dist/server/httpConnection.d.ts +49 -0
  230. package/dist/server/httpConnection.js +170 -0
  231. package/dist/server/impact.d.ts +55 -0
  232. package/dist/server/impact.js +47 -0
  233. package/dist/server/journal.d.ts +134 -0
  234. package/dist/server/journal.js +398 -0
  235. package/dist/server/keysetReadHttp.d.ts +52 -0
  236. package/dist/server/keysetReadHttp.js +85 -0
  237. package/dist/server/layouts.d.ts +49 -0
  238. package/dist/server/layouts.js +192 -0
  239. package/dist/server/migrate/cli.d.ts +55 -0
  240. package/dist/server/migrate/cli.js +517 -0
  241. package/dist/server/migrate/database.d.ts +37 -0
  242. package/dist/server/migrate/database.js +247 -0
  243. package/dist/server/migrate/desired.d.ts +76 -0
  244. package/dist/server/migrate/desired.js +292 -0
  245. package/dist/server/migrate/files.d.ts +34 -0
  246. package/dist/server/migrate/files.js +141 -0
  247. package/dist/server/migrate/flyway.d.ts +7 -0
  248. package/dist/server/migrate/flyway.js +69 -0
  249. package/dist/server/migrate/history.d.ts +70 -0
  250. package/dist/server/migrate/history.js +211 -0
  251. package/dist/server/migrate/runner.d.ts +100 -0
  252. package/dist/server/migrate/runner.js +409 -0
  253. package/dist/server/migrate/snapshot.d.ts +30 -0
  254. package/dist/server/migrate/snapshot.js +239 -0
  255. package/dist/server/migrate/target.d.ts +33 -0
  256. package/dist/server/migrate/target.js +82 -0
  257. package/dist/server/openapiDraft.d.ts +25 -0
  258. package/dist/server/openapiDraft.js +171 -0
  259. package/dist/server/operations/diagnostics.d.ts +101 -0
  260. package/dist/server/operations/diagnostics.js +284 -0
  261. package/dist/server/operations/requestMetrics.d.ts +33 -0
  262. package/dist/server/operations/requestMetrics.js +94 -0
  263. package/dist/server/packageVersion.d.ts +1 -0
  264. package/dist/server/packageVersion.js +11 -0
  265. package/dist/server/poolConfig.d.ts +34 -0
  266. package/dist/server/poolConfig.js +114 -0
  267. package/dist/server/product.d.ts +20 -0
  268. package/dist/server/product.js +12 -0
  269. package/dist/server/recordHistoryOperations.d.ts +39 -0
  270. package/dist/server/recordHistoryOperations.js +43 -0
  271. package/dist/server/recordWriteOperations.d.ts +111 -0
  272. package/dist/server/recordWriteOperations.js +329 -0
  273. package/dist/server/resourceReadHttp.d.ts +81 -0
  274. package/dist/server/resourceReadHttp.js +606 -0
  275. package/dist/server/resourceReadOperations.d.ts +147 -0
  276. package/dist/server/resourceReadOperations.js +452 -0
  277. package/dist/server/scaffoldMachine.d.ts +54 -0
  278. package/dist/server/scaffoldMachine.js +184 -0
  279. package/dist/server/seed/cli.d.ts +20 -0
  280. package/dist/server/seed/cli.js +164 -0
  281. package/dist/server/seed/lexicon.d.ts +26 -0
  282. package/dist/server/seed/lexicon.js +585 -0
  283. package/dist/server/seed/seed.d.ts +70 -0
  284. package/dist/server/seed/seed.js +779 -0
  285. package/dist/server/seed/words.d.ts +21 -0
  286. package/dist/server/seed/words.js +164 -0
  287. package/dist/server/serverRequests.d.ts +6 -0
  288. package/dist/server/serverRequests.js +33 -0
  289. package/dist/server/serverTimeouts.d.ts +33 -0
  290. package/dist/server/serverTimeouts.js +32 -0
  291. package/dist/server/shapeonly.d.ts +32 -0
  292. package/dist/server/shapeonly.js +110 -0
  293. package/dist/server/startupWarnings.d.ts +32 -0
  294. package/dist/server/startupWarnings.js +92 -0
  295. package/dist/shared/addressParams.d.ts +28 -0
  296. package/dist/shared/addressParams.js +47 -0
  297. package/dist/shared/appCards.d.ts +123 -0
  298. package/dist/shared/appCards.js +385 -0
  299. package/dist/shared/appComponents.d.ts +177 -0
  300. package/dist/shared/appComponents.js +422 -0
  301. package/dist/shared/appDocuments.d.ts +43 -0
  302. package/dist/shared/appDocuments.js +131 -0
  303. package/dist/shared/appEmbeds.d.ts +21 -0
  304. package/dist/shared/appEmbeds.js +24 -0
  305. package/dist/shared/appIcons.d.ts +28 -0
  306. package/dist/shared/appIcons.js +223 -0
  307. package/dist/shared/appLinks.d.ts +17 -0
  308. package/dist/shared/appLinks.js +124 -0
  309. package/dist/shared/appListColumns.d.ts +3 -0
  310. package/dist/shared/appListColumns.js +66 -0
  311. package/dist/shared/appLocale.d.ts +36 -0
  312. package/dist/shared/appLocale.js +86 -0
  313. package/dist/shared/appMessages.d.ts +44 -0
  314. package/dist/shared/appMessages.js +78 -0
  315. package/dist/shared/appNoun.d.ts +21 -0
  316. package/dist/shared/appNoun.js +32 -0
  317. package/dist/shared/autoBucket.d.ts +98 -0
  318. package/dist/shared/autoBucket.js +305 -0
  319. package/dist/shared/autoValues.d.ts +25 -0
  320. package/dist/shared/autoValues.js +25 -0
  321. package/dist/shared/breakdown.d.ts +228 -0
  322. package/dist/shared/breakdown.js +557 -0
  323. package/dist/shared/breakdowntext.d.ts +41 -0
  324. package/dist/shared/breakdowntext.js +400 -0
  325. package/dist/shared/builtInThemes.d.ts +2 -0
  326. package/dist/shared/builtInThemes.js +771 -0
  327. package/dist/shared/chartSeparation.d.ts +11 -0
  328. package/dist/shared/chartSeparation.js +58 -0
  329. package/dist/shared/clauses.d.ts +22 -0
  330. package/dist/shared/clauses.js +97 -0
  331. package/dist/shared/columnCaption.d.ts +16 -0
  332. package/dist/shared/columnCaption.js +90 -0
  333. package/dist/shared/commandFieldPath.d.ts +2 -0
  334. package/dist/shared/commandFieldPath.js +7 -0
  335. package/dist/shared/commandWire.d.ts +26 -0
  336. package/dist/shared/commandWire.js +41 -0
  337. package/dist/shared/computed.d.ts +161 -0
  338. package/dist/shared/computed.js +378 -0
  339. package/dist/shared/computedParse.d.ts +13 -0
  340. package/dist/shared/computedParse.js +278 -0
  341. package/dist/shared/computedValue.d.ts +47 -0
  342. package/dist/shared/computedValue.js +191 -0
  343. package/dist/shared/connection.d.ts +30 -0
  344. package/dist/shared/connection.js +1 -0
  345. package/dist/shared/csv.d.ts +20 -0
  346. package/dist/shared/csv.js +63 -0
  347. package/dist/shared/dashLayout.d.ts +30 -0
  348. package/dist/shared/dashLayout.js +132 -0
  349. package/dist/shared/dashboardAsks.d.ts +93 -0
  350. package/dist/shared/dashboardAsks.js +129 -0
  351. package/dist/shared/dashboardTrend.d.ts +20 -0
  352. package/dist/shared/dashboardTrend.js +50 -0
  353. package/dist/shared/declaredReferences.d.ts +50 -0
  354. package/dist/shared/declaredReferences.js +202 -0
  355. package/dist/shared/definedFields.d.ts +63 -0
  356. package/dist/shared/definedFields.js +103 -0
  357. package/dist/shared/definedValues.d.ts +63 -0
  358. package/dist/shared/definedValues.js +184 -0
  359. package/dist/shared/displayDefaults.d.ts +135 -0
  360. package/dist/shared/displayDefaults.js +529 -0
  361. package/dist/shared/dueDate.d.ts +6 -0
  362. package/dist/shared/dueDate.js +6 -0
  363. package/dist/shared/duration.d.ts +4 -0
  364. package/dist/shared/duration.js +23 -0
  365. package/dist/shared/fileBounds.d.ts +9 -0
  366. package/dist/shared/fileBounds.js +9 -0
  367. package/dist/shared/filter.d.ts +217 -0
  368. package/dist/shared/filter.js +305 -0
  369. package/dist/shared/firstPaint.d.ts +24 -0
  370. package/dist/shared/firstPaint.js +33 -0
  371. package/dist/shared/form.d.ts +21 -0
  372. package/dist/shared/form.js +25 -0
  373. package/dist/shared/formValues.d.ts +104 -0
  374. package/dist/shared/formValues.js +352 -0
  375. package/dist/shared/funnel.d.ts +45 -0
  376. package/dist/shared/funnel.js +108 -0
  377. package/dist/shared/httpOperations.d.ts +48 -0
  378. package/dist/shared/httpOperations.js +9 -0
  379. package/dist/shared/iconGlyphs.d.ts +4 -0
  380. package/dist/shared/iconGlyphs.js +151 -0
  381. package/dist/shared/iconWeights.d.ts +3 -0
  382. package/dist/shared/iconWeights.js +162 -0
  383. package/dist/shared/imageWidths.d.ts +32 -0
  384. package/dist/shared/imageWidths.js +38 -0
  385. package/dist/shared/keysetPage.d.ts +64 -0
  386. package/dist/shared/keysetPage.js +161 -0
  387. package/dist/shared/like.d.ts +20 -0
  388. package/dist/shared/like.js +29 -0
  389. package/dist/shared/listEmpty.d.ts +12 -0
  390. package/dist/shared/listEmpty.js +36 -0
  391. package/dist/shared/listFilters.d.ts +28 -0
  392. package/dist/shared/listFilters.js +84 -0
  393. package/dist/shared/listPresentations.d.ts +199 -0
  394. package/dist/shared/listPresentations.js +7 -0
  395. package/dist/shared/listQuestion.d.ts +52 -0
  396. package/dist/shared/listQuestion.js +137 -0
  397. package/dist/shared/lookPalettes.d.ts +62 -0
  398. package/dist/shared/lookPalettes.js +306 -0
  399. package/dist/shared/maskQuoted.d.ts +24 -0
  400. package/dist/shared/maskQuoted.js +48 -0
  401. package/dist/shared/mentionLabel.d.ts +19 -0
  402. package/dist/shared/mentionLabel.js +38 -0
  403. package/dist/shared/mentionLookup.d.ts +17 -0
  404. package/dist/shared/mentionLookup.js +64 -0
  405. package/dist/shared/menuCounts.d.ts +16 -0
  406. package/dist/shared/menuCounts.js +74 -0
  407. package/dist/shared/model.d.ts +79 -0
  408. package/dist/shared/model.js +153 -0
  409. package/dist/shared/money.d.ts +44 -0
  410. package/dist/shared/money.js +81 -0
  411. package/dist/shared/moneyEntry.d.ts +7 -0
  412. package/dist/shared/moneyEntry.js +27 -0
  413. package/dist/shared/mount.d.ts +118 -0
  414. package/dist/shared/mount.js +248 -0
  415. package/dist/shared/niceTicks.d.ts +26 -0
  416. package/dist/shared/niceTicks.js +50 -0
  417. package/dist/shared/order.d.ts +59 -0
  418. package/dist/shared/order.js +133 -0
  419. package/dist/shared/page.d.ts +135 -0
  420. package/dist/shared/page.js +1187 -0
  421. package/dist/shared/pageAnatomy.d.ts +99 -0
  422. package/dist/shared/pageAnatomy.js +370 -0
  423. package/dist/shared/pageConfig.d.ts +25 -0
  424. package/dist/shared/pageConfig.js +1308 -0
  425. package/dist/shared/pageEmptyActions.d.ts +12 -0
  426. package/dist/shared/pageEmptyActions.js +20 -0
  427. package/dist/shared/pageLayouts.d.ts +72 -0
  428. package/dist/shared/pageLayouts.js +205 -0
  429. package/dist/shared/pageModel.d.ts +785 -0
  430. package/dist/shared/pageModel.js +121 -0
  431. package/dist/shared/pagePaths.d.ts +180 -0
  432. package/dist/shared/pagePaths.js +869 -0
  433. package/dist/shared/pagePlans.d.ts +52 -0
  434. package/dist/shared/pagePlans.js +108 -0
  435. package/dist/shared/pageRoutes.d.ts +9 -0
  436. package/dist/shared/pageRoutes.js +9 -0
  437. package/dist/shared/query.d.ts +166 -0
  438. package/dist/shared/query.js +1302 -0
  439. package/dist/shared/queryDates.d.ts +12 -0
  440. package/dist/shared/queryDates.js +101 -0
  441. package/dist/shared/queryOperands.d.ts +99 -0
  442. package/dist/shared/queryOperands.js +131 -0
  443. package/dist/shared/reads.d.ts +103 -0
  444. package/dist/shared/reads.js +154 -0
  445. package/dist/shared/recordLabel.d.ts +51 -0
  446. package/dist/shared/recordLabel.js +123 -0
  447. package/dist/shared/recordReadKeys.d.ts +30 -0
  448. package/dist/shared/recordReadKeys.js +51 -0
  449. package/dist/shared/recordReads.d.ts +268 -0
  450. package/dist/shared/recordReads.js +368 -0
  451. package/dist/shared/recordview.d.ts +198 -0
  452. package/dist/shared/recordview.js +356 -0
  453. package/dist/shared/referenceModel.d.ts +58 -0
  454. package/dist/shared/referenceModel.js +194 -0
  455. package/dist/shared/refusal.d.ts +64 -0
  456. package/dist/shared/refusal.js +144 -0
  457. package/dist/shared/relatedCreate.d.ts +30 -0
  458. package/dist/shared/relatedCreate.js +162 -0
  459. package/dist/shared/resourceHttp.d.ts +464 -0
  460. package/dist/shared/resourceHttp.js +1 -0
  461. package/dist/shared/richText.d.ts +85 -0
  462. package/dist/shared/richText.js +305 -0
  463. package/dist/shared/rollups.d.ts +143 -0
  464. package/dist/shared/rollups.js +64 -0
  465. package/dist/shared/rowScope.d.ts +72 -0
  466. package/dist/shared/rowScope.js +376 -0
  467. package/dist/shared/runtimeTables.d.ts +44 -0
  468. package/dist/shared/runtimeTables.js +79 -0
  469. package/dist/shared/schema.d.ts +523 -0
  470. package/dist/shared/schema.js +627 -0
  471. package/dist/shared/schematext.d.ts +38 -0
  472. package/dist/shared/schematext.js +101 -0
  473. package/dist/shared/scopeCatalog.d.ts +29 -0
  474. package/dist/shared/scopeCatalog.js +468 -0
  475. package/dist/shared/servedApp.d.ts +681 -0
  476. package/dist/shared/servedApp.js +45 -0
  477. package/dist/shared/sessionLease.d.ts +34 -0
  478. package/dist/shared/sessionLease.js +3 -0
  479. package/dist/shared/shape.d.ts +55 -0
  480. package/dist/shared/shape.js +168 -0
  481. package/dist/shared/slug.d.ts +1 -0
  482. package/dist/shared/slug.js +12 -0
  483. package/dist/shared/sortText.d.ts +14 -0
  484. package/dist/shared/sortText.js +26 -0
  485. package/dist/shared/sqlRelation.d.ts +4 -0
  486. package/dist/shared/sqlRelation.js +8 -0
  487. package/dist/shared/sqlsaved.d.ts +44 -0
  488. package/dist/shared/sqlsaved.js +63 -0
  489. package/dist/shared/stitchedPaths.d.ts +27 -0
  490. package/dist/shared/stitchedPaths.js +38 -0
  491. package/dist/shared/structuredFilter.d.ts +22 -0
  492. package/dist/shared/structuredFilter.js +1 -0
  493. package/dist/shared/subtitlePath.d.ts +20 -0
  494. package/dist/shared/subtitlePath.js +24 -0
  495. package/dist/shared/suggest.d.ts +18 -0
  496. package/dist/shared/suggest.js +59 -0
  497. package/dist/shared/tableSizing.d.ts +4 -0
  498. package/dist/shared/tableSizing.js +9 -0
  499. package/dist/shared/tagLists.d.ts +57 -0
  500. package/dist/shared/tagLists.js +34 -0
  501. package/dist/shared/textRules.d.ts +54 -0
  502. package/dist/shared/textRules.js +133 -0
  503. package/dist/shared/theme.d.ts +94 -0
  504. package/dist/shared/theme.js +800 -0
  505. package/dist/shared/themeColor.d.ts +34 -0
  506. package/dist/shared/themeColor.js +109 -0
  507. package/dist/shared/themeFaces.d.ts +30 -0
  508. package/dist/shared/themeFaces.js +42 -0
  509. package/dist/shared/themeInk.d.ts +20 -0
  510. package/dist/shared/themeInk.js +52 -0
  511. package/dist/shared/themeLooks.d.ts +9 -0
  512. package/dist/shared/themeLooks.js +572 -0
  513. package/dist/shared/themeParts.d.ts +26 -0
  514. package/dist/shared/themeParts.js +71 -0
  515. package/dist/shared/themePartsCheck.d.ts +21 -0
  516. package/dist/shared/themePartsCheck.js +91 -0
  517. package/dist/shared/themePresets.d.ts +85 -0
  518. package/dist/shared/themePresets.js +139 -0
  519. package/dist/shared/themeRecipeWords.d.ts +156 -0
  520. package/dist/shared/themeRecipeWords.js +156 -0
  521. package/dist/shared/themeRecipes.d.ts +213 -0
  522. package/dist/shared/themeRecipes.js +234 -0
  523. package/dist/shared/themeResolve.d.ts +55 -0
  524. package/dist/shared/themeResolve.js +52 -0
  525. package/dist/shared/themeTokens.d.ts +107 -0
  526. package/dist/shared/themeTokens.js +116 -0
  527. package/dist/shared/themeType.d.ts +38 -0
  528. package/dist/shared/themeType.js +205 -0
  529. package/dist/shared/unitWord.d.ts +4 -0
  530. package/dist/shared/unitWord.js +37 -0
  531. package/dist/shared/view.d.ts +195 -0
  532. package/dist/shared/view.js +987 -0
  533. package/dist/shared/viewLabels.d.ts +47 -0
  534. package/dist/shared/viewLabels.js +459 -0
  535. package/dist/shared/viewPaths.d.ts +248 -0
  536. package/dist/shared/viewPaths.js +294 -0
  537. package/dist/shared/viewtext.d.ts +57 -0
  538. package/dist/shared/viewtext.js +282 -0
  539. package/dist/shared/vocabulary.d.ts +71 -0
  540. package/dist/shared/vocabulary.js +249 -0
  541. package/dist/shared/weekStart.d.ts +7 -0
  542. package/dist/shared/weekStart.js +36 -0
  543. package/mark.svg +1 -0
  544. package/package.json +261 -4
  545. package/schema/model.d.ts +298 -0
  546. package/schema/theme.d.ts +587 -0
@@ -0,0 +1,156 @@
1
+ export const RECIPE_WORDS = {
2
+ nav: {
3
+ tint: 'The current entry sits on a soft tint of the accent; the other rows stay plain.',
4
+ inverted: 'The current entry is inverted, the menu’s ink as its ground: the boldest mark, square and high-contrast.',
5
+ wash: 'The current entry sits on a wash of the menu’s own accent, stronger than tint, for a menu in a brand color.',
6
+ underline: 'The current entry in the top bar is marked by a 3px rule of the menu’s accent under it, with no fill.',
7
+ pill: 'Every row is a rounded pill with room around it; the current one is filled in the accent’s tint, its word in the accent.',
8
+ quiet: 'The current entry is barely shaded in the menu’s ink, with no accent at all: the calmest mark.',
9
+ slot: 'The current entry is an ink block, as inverted, with a 3px marker of the menu’s accent beside it, like a tool’s slot on a pegboard.',
10
+ },
11
+ bar: {
12
+ plain: 'The top bar is the menu’s ground with a hairline under it.',
13
+ ruled: 'The top bar ends in a 2px rule instead of a hairline, and casts no shadow.',
14
+ dark: 'The top bar takes the menu’s ground and inks, so a dark or brand-colored menu runs across the top too.',
15
+ airy: 'The top bar is taller, with a large bold brand name and a wide, raised search box.',
16
+ soft: 'The top bar is a panel in the surface color with a hairline under it, apart from the menu beside it.',
17
+ },
18
+ tabs: {
19
+ pill: 'The chosen tab is a filled pill; the others are plain words.',
20
+ inverted: 'The chosen tab is inverted, the ink as its ground: square, high-contrast.',
21
+ underline: 'The tabs stand on a hairline, wide apart, the chosen one underlined in the accent with no fill.',
22
+ rule: 'The chosen tab is underlined by a 2px rule in the link color with no fill, the tabs packed as written.',
23
+ chosen: 'The chosen tab sits on a soft tint of the accent in the ink, wider apart, with no underline.',
24
+ },
25
+ windows: {
26
+ segmented: 'The period picker is a segmented control, the chosen period filled.',
27
+ lifted: 'The period picker is a sunken tray, the chosen period a raised white key on it.',
28
+ chosen: 'The period picker has no tray; the chosen period sits on a soft tint of the accent.',
29
+ },
30
+ stat: {
31
+ plain: 'A stat is a figure and its label with no frame.',
32
+ framed: 'Each stat is a card framed by a line in the ink: square and stark.',
33
+ topline: 'Each stat card has a 3px rule in the first chart color along its top.',
34
+ ruled: 'Each stat stands open under a 2px rule in the ink, with no card or shadow, like a printed page.',
35
+ icon: 'Each stat is a card with its icon in a round tint of a chart color above the label, and a large bold figure.',
36
+ panel: 'Each stat is a panel on the surface with a hairline and the look’s card shadow.',
37
+ divided: 'The stats share one strip, parted by hairlines, with no cards: the quietest arrangement.',
38
+ },
39
+ section: {
40
+ open: 'A dashboard section stands open on the page under its rule.',
41
+ card: 'Each dashboard section is a card with a hairline and the card shadow, its table drawn to the card’s edges.',
42
+ panel: 'Each dashboard section is a panel like card, but a section in the side column stays open on the page.',
43
+ },
44
+ fields: {
45
+ open: 'A record’s field groups and forms stand open on the page.',
46
+ panel: 'Each field group and form is a panel on the surface with a hairline; its labels stay as the look draws them.',
47
+ card: 'Each field group and form is a card with a hairline and the card shadow, its labels muted and the values in the interface face.',
48
+ rail: 'Field groups stand open, and the side column’s cards become captioned groups between hairlines.',
49
+ },
50
+ table: {
51
+ open: 'Rows stand on the page under a rule, the head as the look draws it.',
52
+ tinted: 'As open, but a hovered row takes a tint of the accent and its check boxes the accent: the same until a pointer moves.',
53
+ hairline: 'The head sits on a hairline in 12.5px semibold, the rows in 13.5px: open, a little roomier.',
54
+ card: 'The table is a card: muted 12px heads on a hairline, faint row rules and taller rows.',
55
+ quiet: 'The table is a card of quiet rows, a work queue’s open button folded to a chevron at the row’s end.',
56
+ banded: 'As open, but every other row lies on the band color (colors.band, or the raised ground), each ink measured on it.',
57
+ },
58
+ status: {
59
+ dot: 'A status word in its tone with a dot before it.',
60
+ pill: 'A status word on a pill tinted with its tone, without a dot.',
61
+ 'pill-dot': 'A status word on a pill tinted with its tone, with a small dot inside it.',
62
+ quiet: 'A status word in the ink with a dot in its tone: the color is only the dot.',
63
+ },
64
+ board: {
65
+ ruled: 'A board’s lanes are outlined by a hairline; its cards lie flat on them.',
66
+ soft: 'As ruled, but each card casts the look’s card shadow: only the cards lift.',
67
+ strip: 'Each lane is headed by a strip tinted with its tone, its cards white on the lane.',
68
+ },
69
+ chart: {
70
+ plain: 'A chart is its lines or bars on a light grid.',
71
+ wash: 'An area under a line is washed in the first chart color.',
72
+ gradient: 'An area fades from the line down to nothing, the line heavier and the grid dashed.',
73
+ line: 'Only the lines: no areas, a fine solid grid and small ticks.',
74
+ },
75
+ buttons: {
76
+ accent: 'The primary button is filled in the accent; the rest are quiet.',
77
+ raised: 'Secondary buttons are white keys with a hairline and a small shadow, raised off the page.',
78
+ keyed: 'Buttons are hard-edged keys: the primary one filled in the accent with an ink edge, like a hazard tag, the rest edged in the ink.',
79
+ },
80
+ links: {
81
+ plain: 'A link to another record is in the link color without an underline.',
82
+ underline: 'A link to another record is underlined, so it reads as one without color.',
83
+ },
84
+ rules: {
85
+ ink: 'A record’s sections are announced by a 2px rule in the ink.',
86
+ hairline: 'A record’s sections are announced by a 1px hairline instead.',
87
+ double: 'A 1px hairline announces a record’s sections as in hairline, a box is ruled in the strong line, and a table’s heads close with a double rule.',
88
+ },
89
+ avatar: {
90
+ plain: 'A record’s avatar is its initials in a small square.',
91
+ large: 'A record’s avatar is 44px, in the look’s corners.',
92
+ round: 'A record’s avatar is 44px and round, and the menu’s and the account’s marks are round too.',
93
+ },
94
+ workflow: {
95
+ markers: 'A workflow is a track of thin segments, the label under each.',
96
+ pills: 'A workflow is a row of pills with a dot each: a step walked in the good tint, the current one in the accent’s.',
97
+ },
98
+ banner: {
99
+ tint: 'A dashboard’s banner note is a box tinted with the accent.',
100
+ gradient: 'A dashboard’s banner note is a soft gradient from the accent to the second chart color.',
101
+ plain: 'A dashboard’s banner note stands on the page with no box, its eyebrow in the link color.',
102
+ },
103
+ steps: {
104
+ flat: 'A breakdown drawn as steps is a row of cards on the surface with a hairline.',
105
+ tinted: 'Each step’s card is tinted with its tone: good, warning, critical or the accent.',
106
+ strip: 'The steps are one strip of figures parted by hairlines, with no cards or marks.',
107
+ },
108
+ lanes: {
109
+ tint: 'A board lane’s value in its head is on its tone’s tint.',
110
+ tag: 'A board lane’s value is a solid tag in its tone, in white capitals.',
111
+ plain: 'A board lane’s value is its name in plain ink.',
112
+ },
113
+ header: {
114
+ plain: 'A record’s head and a list’s stand on the page’s ground, under the trail’s hairline.',
115
+ band: 'A record’s head and a list’s are one band of the raised ground from edge to edge: the trail, the title, its status, facts and verbs, a list’s tabs and filters; the contents keep their edge.',
116
+ hero: 'A band, with the record’s avatar large beside its title (above it on a phone); a record without one, and a list, draw the band.',
117
+ },
118
+ required: {
119
+ star: 'A required field wears a red star after its label; an optional one wears nothing.',
120
+ 'optional-word': 'A required field wears nothing and an optional one says “(optional)” after its label, quietly; the form’s own words, in the reader’s language.',
121
+ },
122
+ checkbox: {
123
+ native: 'A checkbox is the browser’s own, in the accent.',
124
+ drawn: 'A checkbox is drawn: a square in the field’s fill with the control’s edge and corner, the accent with a check when on.',
125
+ },
126
+ formStep: {
127
+ plain: 'A multi-step form’s step header is its title over its lead, with nothing between it and the fields.',
128
+ ruled: 'A multi-step form’s step header ends in a hairline, which parts it from the fields under it.',
129
+ },
130
+ actionBar: {
131
+ plain: 'A form’s sticky action bar stands on a hairline over the page.',
132
+ raised: 'A form’s sticky action bar is raised on the surface with a soft lift, in place of the hairline.',
133
+ },
134
+ };
135
+ /** One part's values said, in the menu's order: "`tint`: …. `inverted`: …." — the schema's description of the part. */
136
+ export function recipeDescription(part) {
137
+ return Object.entries(RECIPE_WORDS[part])
138
+ .map(([value, words]) => `\`${value}\`: ${words}`)
139
+ .join(' ');
140
+ }
141
+ /**
142
+ * Each type role said in a sentence: what it draws and what it takes. A role is not a menu of values but a few
143
+ * properties (themeType.ts holds their ranges), so this is the schema's description of the role and the gallery's
144
+ * Type section, where the three recipes it replaced (labels, headings, figures) were.
145
+ */
146
+ export const TYPE_WORDS = {
147
+ display: 'A landing’s headline: its face, size (28px to 56px), leading, tracking, weight and features.',
148
+ title: 'A record’s and a dashboard’s name: its face, size (20px to 36px), leading, tracking, weight, case and features; its weight is every heading’s.',
149
+ heading: 'A list naming itself over its rows: its face, size (16px to 28px), leading, tracking, weight (omitted, the title’s), case and features.',
150
+ section: 'A section’s title on a record and a dashboard: its face, case and features; a dashboard’s section title also takes a size (12px to 20px), tracking and weight.',
151
+ body: 'Prose, fields and the interface, at the base size: its leading (1.35 to 1.8) and features.',
152
+ label: 'A column’s head, a stat’s label and a record’s tabs, at the base size: their face, tracking, weight (400 to 700), case and features; upper sets them a step smaller.',
153
+ data: 'A table’s cells and a record’s values, in the data face at the base size: their features, tabular figures kept, and its reach: every value, or figures only (figures, keys and dates, a record header’s facts too).',
154
+ figure: 'A stat’s figure: its face, size (18px to 40px), tracking, weight and features, tabular figures kept.',
155
+ nav: 'The menu’s entries in the bar, at the base size: their face, tracking, weight (400 to 600) and case; upper sets them a step smaller.',
156
+ };
@@ -0,0 +1,213 @@
1
+ /**
2
+ * The recipe menu: every part a theme may dress, the treatments it may pick,
3
+ * and the `data-look-*` attributes a worn theme sets on the root. The browser
4
+ * needs this at first paint and nothing else of the theme machinery, so it is
5
+ * a module of its own: a module a first-paint file imports is in the first
6
+ * paint whole.
7
+ */
8
+ import type { ThemeDefinition, ThemeDensity, ThemePart, ThemePartStyle, ThemeRecipes, ThemeTypeDefinition, ThemeTypeRoleDefinition } from '../../schema/theme.js';
9
+ /**
10
+ * Every part a theme may dress and the treatments it may pick, and the sheet
11
+ * its rules live in: `null` is the first stylesheet (themeFamilies.css,
12
+ * kit.css), a name is a sheet of its own, fetched when a worn theme picks the
13
+ * value (visualTheme.ts): a built-in look's, or `brand`, the few treatments
14
+ * no built-in wears that an App's own theme may (a bar in its colour, a
15
+ * printed page's rules and small capitals; docs/theming.md). The first value
16
+ * is the default and has no rules of its own. test/theme-recipes.test.ts
17
+ * holds the sheets to this: every `data-look-*` value they answer is here, in
18
+ * its sheet.
19
+ */
20
+ export declare const RECIPE_MENU: {
21
+ readonly nav: {
22
+ readonly tint: null;
23
+ readonly inverted: null;
24
+ readonly wash: 'brand';
25
+ readonly underline: 'brand';
26
+ readonly pill: 'lumen';
27
+ readonly quiet: 'sage';
28
+ readonly slot: 'workshop';
29
+ };
30
+ readonly bar: {
31
+ readonly plain: null;
32
+ readonly ruled: null;
33
+ readonly dark: 'brand';
34
+ readonly airy: 'lumen';
35
+ readonly soft: 'sage';
36
+ };
37
+ readonly tabs: {
38
+ readonly pill: null;
39
+ readonly inverted: null;
40
+ readonly underline: 'lumen';
41
+ readonly rule: 'brand';
42
+ readonly chosen: 'sage';
43
+ };
44
+ readonly windows: {
45
+ readonly segmented: null;
46
+ readonly lifted: 'lumen';
47
+ readonly chosen: 'sage';
48
+ };
49
+ readonly stat: {
50
+ readonly plain: null;
51
+ readonly framed: null;
52
+ readonly topline: 'brand';
53
+ readonly ruled: 'brand';
54
+ readonly icon: 'lumen';
55
+ readonly panel: 'sage';
56
+ readonly divided: 'lumen';
57
+ };
58
+ readonly section: {
59
+ readonly open: null;
60
+ readonly card: 'lumen';
61
+ readonly panel: 'sage';
62
+ };
63
+ readonly fields: {
64
+ readonly open: null;
65
+ readonly panel: 'sage';
66
+ readonly card: 'lumen';
67
+ readonly rail: 'lumen';
68
+ };
69
+ readonly table: {
70
+ readonly open: null;
71
+ readonly tinted: 'brand';
72
+ readonly hairline: 'sage';
73
+ readonly card: 'lumen';
74
+ readonly quiet: 'lumen';
75
+ readonly banded: 'brand';
76
+ };
77
+ readonly status: {
78
+ readonly dot: null;
79
+ readonly pill: 'sage';
80
+ readonly 'pill-dot': 'lumen';
81
+ readonly quiet: 'lumen';
82
+ };
83
+ readonly board: {
84
+ readonly ruled: null;
85
+ readonly soft: 'sage';
86
+ readonly strip: 'lumen';
87
+ };
88
+ readonly chart: {
89
+ readonly plain: null;
90
+ readonly wash: 'sage';
91
+ readonly gradient: 'lumen';
92
+ readonly line: 'lumen';
93
+ };
94
+ readonly buttons: {
95
+ readonly accent: null;
96
+ readonly raised: 'lumen';
97
+ readonly keyed: 'workshop';
98
+ };
99
+ readonly links: {
100
+ readonly plain: null;
101
+ readonly underline: null;
102
+ };
103
+ readonly rules: {
104
+ readonly ink: null;
105
+ readonly hairline: null;
106
+ readonly double: 'ledger';
107
+ };
108
+ readonly avatar: {
109
+ readonly plain: null;
110
+ readonly large: 'sage';
111
+ readonly round: 'lumen';
112
+ };
113
+ readonly workflow: {
114
+ readonly markers: null;
115
+ readonly pills: 'lumen';
116
+ };
117
+ readonly banner: {
118
+ readonly tint: null;
119
+ readonly gradient: 'lumen';
120
+ readonly plain: 'lumen';
121
+ };
122
+ readonly steps: {
123
+ readonly flat: null;
124
+ readonly tinted: 'lumen';
125
+ readonly strip: 'lumen';
126
+ };
127
+ readonly lanes: {
128
+ readonly tint: null;
129
+ readonly tag: 'brand';
130
+ readonly plain: 'brand';
131
+ };
132
+ readonly header: {
133
+ readonly plain: null;
134
+ readonly band: null;
135
+ readonly hero: null;
136
+ };
137
+ readonly required: {
138
+ readonly star: null;
139
+ readonly 'optional-word': null;
140
+ };
141
+ readonly checkbox: {
142
+ readonly native: null;
143
+ readonly drawn: null;
144
+ };
145
+ readonly formStep: {
146
+ readonly plain: null;
147
+ readonly ruled: null;
148
+ };
149
+ readonly actionBar: {
150
+ readonly plain: null;
151
+ readonly raised: null;
152
+ };
153
+ };
154
+ /** Recipe parts renamed before 1.0, refused with the new name: "head" is a table's column heads (`rules.head`). */
155
+ export declare const RECIPES_RENAMED: Readonly<Record<string, string>>;
156
+ /** Shape rides the same attributes (`data-look-elevation`); type rides its own (`data-type-<role>`, themeType.ts). */
157
+ export declare const ELEVATIONS: {
158
+ readonly hairline: null;
159
+ readonly flat: null;
160
+ readonly soft: 'sage';
161
+ readonly raised: 'lumen';
162
+ };
163
+ export declare const DENSITIES: readonly ThemeDensity[];
164
+ /** The lifts (`data-look-card`, `data-look-float`): `look` is the elevation's own drawing, then each step, drawn in
165
+ the theme's shadow colour (themeFamilies.css). */
166
+ export declare const LIFTS: {
167
+ readonly look: null;
168
+ readonly none: null;
169
+ readonly hairline: null;
170
+ readonly low: null;
171
+ readonly mid: null;
172
+ readonly high: null;
173
+ };
174
+ /** The paces (`data-look-motion`): each is the house's five durations, quickened or silenced, in themeFamilies.css. */
175
+ export declare const MOTIONS: {
176
+ readonly house: null;
177
+ readonly brisk: null;
178
+ readonly still: null;
179
+ };
180
+ /** The rhythms (`data-look-rhythm`): the space scale's layout steps, closer or wider, in themeFamilies.css. */
181
+ export declare const RHYTHMS: {
182
+ readonly house: null;
183
+ readonly tight: null;
184
+ readonly airy: null;
185
+ };
186
+ /** A part's root attribute: `data-look-nav`, and for a part of two words `data-look-form-step`, since an attribute
187
+ name is read in lower case and `formStep` would not be found by `[data-look-formStep]` in every context. */
188
+ export declare const lookAttribute: (part: string) => string;
189
+ export declare const RECIPE_PARTS: (keyof ThemeRecipes)[];
190
+ export type ResolvedRecipes = {
191
+ [K in keyof ThemeRecipes]-?: NonNullable<ThemeRecipes[K]>;
192
+ };
193
+ /** Every part at its first value: the plain structure a theme that extends nothing starts from. */
194
+ export declare const DEFAULT_RECIPES: ResolvedRecipes;
195
+ /** The attributes a worn theme sets on the root, and the look sheets they need. */
196
+ export declare function recipeAttributes(theme: ThemeDefinition, lookNav?: ThemeTypeRoleDefinition): {
197
+ attributes: Record<string, string>;
198
+ sheets: string[];
199
+ };
200
+ export declare const TYPE_ATTRIBUTES: string[];
201
+ /** Each role's `data-type-<role>` attribute: the properties it says, and its capitals. A role that says nothing has
202
+ none, so no rule of its turns on. A title's weight is `--heading-weight`, which every heading reads, so it is no
203
+ word here. */
204
+ export declare function typeAttributes(type: ThemeTypeDefinition | undefined): Record<string, string>;
205
+ /**
206
+ * The published parts a theme may dress one by one (themeParts.ts says what each may take and how it is worn). Here,
207
+ * with the words the root wears for them, because the first paint sets `data-parts` as it sets the recipes'.
208
+ */
209
+ export declare const THEME_PARTS: readonly ["ground", "bar", "bar.search", "nav", "nav.item", "nav.current", "nav.group", "logo", "page.title", "tabs", "tab.current", "section", "section.title", "stat", "stat.figure", "fields", "field.label", "table", "table.head", "table.row", "status", "tag", "button.primary", "button.secondary", "button.quiet", "link", "board.lane", "board.card", "workflow.step", "banner", "steps.step", "avatar", "menu", "dialog", "chart"];
210
+ /** What a part style may say, in the order its words are written. */
211
+ export declare const PART_PROPERTIES: readonly ['ground', 'ink', 'edge', 'radius', 'lift', 'face', 'weight', 'case'];
212
+ /** The root's `data-parts`: one word per property a part says (`stat:ground button.primary:case`); undefined when none. */
213
+ export declare function partAttribute(parts: Partial<Record<ThemePart, ThemePartStyle>> | undefined): string | undefined;
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Every part a theme may dress and the treatments it may pick, and the sheet
3
+ * its rules live in: `null` is the first stylesheet (themeFamilies.css,
4
+ * kit.css), a name is a sheet of its own, fetched when a worn theme picks the
5
+ * value (visualTheme.ts): a built-in look's, or `brand`, the few treatments
6
+ * no built-in wears that an App's own theme may (a bar in its colour, a
7
+ * printed page's rules and small capitals; docs/theming.md). The first value
8
+ * is the default and has no rules of its own. test/theme-recipes.test.ts
9
+ * holds the sheets to this: every `data-look-*` value they answer is here, in
10
+ * its sheet.
11
+ */
12
+ export const RECIPE_MENU = {
13
+ nav: { tint: null, inverted: null, wash: 'brand', underline: 'brand', pill: 'lumen', quiet: 'sage', slot: 'workshop' },
14
+ bar: { plain: null, ruled: null, dark: 'brand', airy: 'lumen', soft: 'sage' },
15
+ tabs: { pill: null, inverted: null, underline: 'lumen', rule: 'brand', chosen: 'sage' },
16
+ windows: { segmented: null, lifted: 'lumen', chosen: 'sage' },
17
+ stat: { plain: null, framed: null, topline: 'brand', ruled: 'brand', icon: 'lumen', panel: 'sage', divided: 'lumen' },
18
+ section: { open: null, card: 'lumen', panel: 'sage' },
19
+ fields: { open: null, panel: 'sage', card: 'lumen', rail: 'lumen' },
20
+ table: { open: null, tinted: 'brand', hairline: 'sage', card: 'lumen', quiet: 'lumen', banded: 'brand' },
21
+ status: { dot: null, pill: 'sage', 'pill-dot': 'lumen', quiet: 'lumen' },
22
+ board: { ruled: null, soft: 'sage', strip: 'lumen' },
23
+ chart: { plain: null, wash: 'sage', gradient: 'lumen', line: 'lumen' },
24
+ buttons: { accent: null, raised: 'lumen', keyed: 'workshop' },
25
+ links: { plain: null, underline: null },
26
+ rules: { ink: null, hairline: null, double: 'ledger' },
27
+ avatar: { plain: null, large: 'sage', round: 'lumen' },
28
+ workflow: { markers: null, pills: 'lumen' },
29
+ banner: { tint: null, gradient: 'lumen', plain: 'lumen' },
30
+ steps: { flat: null, tinted: 'lumen', strip: 'lumen' },
31
+ lanes: { tint: null, tag: 'brand', plain: 'brand' },
32
+ header: { plain: null, band: null, hero: null },
33
+ /* The four below are a form's: their rules are in @mistriwork/ui's forms.css, which arrives with the first control
34
+ a page draws, so no first stylesheet carries them and the menu names no sheet of a look. */
35
+ required: { star: null, 'optional-word': null },
36
+ checkbox: { native: null, drawn: null },
37
+ formStep: { plain: null, ruled: null },
38
+ actionBar: { plain: null, raised: null },
39
+ };
40
+ /** Recipe parts renamed before 1.0, refused with the new name: "head" is a table's column heads (`rules.head`). */
41
+ export const RECIPES_RENAMED = { head: 'header' };
42
+ /** Shape rides the same attributes (`data-look-elevation`); type rides its own (`data-type-<role>`, themeType.ts). */
43
+ export const ELEVATIONS = { hairline: null, flat: null, soft: 'sage', raised: 'lumen' };
44
+ export const DENSITIES = ['compact', 'comfortable', 'spacious'];
45
+ /** The lifts (`data-look-card`, `data-look-float`): `look` is the elevation's own drawing, then each step, drawn in
46
+ the theme's shadow colour (themeFamilies.css). */
47
+ export const LIFTS = { look: null, none: null, hairline: null, low: null, mid: null, high: null };
48
+ /** The paces (`data-look-motion`): each is the house's five durations, quickened or silenced, in themeFamilies.css. */
49
+ export const MOTIONS = { house: null, brisk: null, still: null };
50
+ /** The rhythms (`data-look-rhythm`): the space scale's layout steps, closer or wider, in themeFamilies.css. */
51
+ export const RHYTHMS = { house: null, tight: null, airy: null };
52
+ /** A part's root attribute: `data-look-nav`, and for a part of two words `data-look-form-step`, since an attribute
53
+ name is read in lower case and `formStep` would not be found by `[data-look-formStep]` in every context. */
54
+ export const lookAttribute = (part) => `data-look-${part.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`;
55
+ export const RECIPE_PARTS = Object.keys(RECIPE_MENU);
56
+ /** Every part at its first value: the plain structure a theme that extends nothing starts from. */
57
+ export const DEFAULT_RECIPES = Object.fromEntries(RECIPE_PARTS.map((part) => [part, Object.keys(RECIPE_MENU[part])[0]]));
58
+ /** The attributes a worn theme sets on the root, and the look sheets they need. */
59
+ export function recipeAttributes(theme, lookNav) {
60
+ const recipes = { ...DEFAULT_RECIPES, ...theme.recipes };
61
+ const attributes = {};
62
+ const sheets = new Set();
63
+ for (const part of RECIPE_PARTS) {
64
+ const value = recipes[part];
65
+ attributes[lookAttribute(part)] = value;
66
+ const sheet = RECIPE_MENU[part][value];
67
+ if (sheet)
68
+ sheets.add(sheet);
69
+ }
70
+ const elevation = theme.elevation ?? 'hairline';
71
+ attributes['data-look-elevation'] = elevation;
72
+ attributes['data-look-motion'] = theme.motion ?? 'house';
73
+ attributes['data-look-rhythm'] = theme.rhythm ?? 'house';
74
+ /* A shadow colour of the theme's own under the platform's hairline draws the platform's popups in it: its low step,
75
+ the house geometry mixed from the theme's shadow rather than the house's black. */
76
+ const ownShadow = Boolean(theme.light.shadow || theme.dark.shadow) && elevation === 'hairline';
77
+ attributes['data-look-card'] = theme.lifts?.card ?? 'look';
78
+ attributes['data-look-float'] = theme.lifts?.float ?? (ownShadow ? 'low' : 'look');
79
+ const lifted = ELEVATIONS[elevation];
80
+ if (lifted)
81
+ sheets.add(lifted);
82
+ Object.assign(attributes, typeAttributes(theme.type));
83
+ const side = sideNavWords(theme.type, lookNav);
84
+ if (side.length)
85
+ attributes['data-type-nav-side'] = side.join(' ');
86
+ const bar = barGround(theme, recipes.bar);
87
+ if (bar)
88
+ attributes['data-bar-ground'] = bar;
89
+ /* What a theme says beyond the menu (themeParts.ts): each an attribute only where it is said, and its sheet. */
90
+ const parts = partAttribute(theme.parts);
91
+ if (parts) {
92
+ attributes['data-parts'] = parts;
93
+ sheets.add('parts');
94
+ }
95
+ for (const place of ['ground', 'nav']) {
96
+ const pattern = theme.surface?.[place];
97
+ if (!pattern)
98
+ continue;
99
+ attributes[`data-surface-${place}`] = `${pattern.kind} ${pattern.strength ?? 1}`;
100
+ sheets.add('surfaces');
101
+ }
102
+ if (theme.icons && theme.icons !== 'regular')
103
+ attributes['data-icons'] = theme.icons;
104
+ return { attributes, sheets: [...sheets] };
105
+ }
106
+ /** Whether a color is dark: nearer black than white for text drawn on it (WCAG's luminance, its even point). */
107
+ function dark(hex) {
108
+ if (!hex || !/^#[0-9a-f]{6}$/i.test(hex))
109
+ return undefined;
110
+ const [r, g, b] = [1, 3, 5].map((start) => {
111
+ const value = parseInt(hex.slice(start, start + 2), 16) / 255;
112
+ return value <= 0.04045 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4;
113
+ });
114
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b < 0.179;
115
+ }
116
+ /**
117
+ * The bar's ground against the reader's mode, where they disagree: `light:dark` a dark bar by day, `dark:light` a
118
+ * light one by night. The logo is drawn on the bar, so its picture is chosen by the bar's ground (appBrand.css): a
119
+ * light-mode App with an inverted bar wears the night picture there. Undefined where each mode's bar is its mode's.
120
+ */
121
+ function barGround(theme, bar) {
122
+ /* A soft bar is drawn on the page's surface (sageLook.css); every other on the navigation's ground. */
123
+ const ground = (mode) => dark(bar === 'soft' ? theme[mode].surface : (theme[mode].navGround ?? theme[mode].surface));
124
+ const words = [...(ground('light') ? ['light:dark'] : []), ...(ground('dark') === false ? ['dark:light'] : [])];
125
+ return words.length ? words.join(' ') : undefined;
126
+ }
127
+ /** The type roles in their attribute order (themeType.ts holds what each takes; test/theme-type.test.ts holds the two
128
+ lists to one). */
129
+ const TYPE_ROLE_ORDER = ['display', 'title', 'heading', 'section', 'body', 'label', 'data', 'figure', 'nav'];
130
+ /** The features `font-variant-numeric` says, worn as a role's `numeric`; the rest are its `features`. */
131
+ const NUMERIC_FEATURES = new Set(['lnum', 'onum', 'tnum', 'zero']);
132
+ export const TYPE_ATTRIBUTES = [...TYPE_ROLE_ORDER.map((name) => `data-type-${name}`), 'data-type-nav-side'];
133
+ /** Each role's `data-type-<role>` attribute: the properties it says, and its capitals. A role that says nothing has
134
+ none, so no rule of its turns on. A title's weight is `--heading-weight`, which every heading reads, so it is no
135
+ word here. */
136
+ export function typeAttributes(type) {
137
+ const out = {};
138
+ for (const name of TYPE_ROLE_ORDER) {
139
+ const words = roleWords(name, type?.roles?.[name]);
140
+ if (words.length)
141
+ out[`data-type-${name}`] = words.join(' ');
142
+ }
143
+ return out;
144
+ }
145
+ function roleWords(name, role) {
146
+ const words = [];
147
+ if (!role)
148
+ return words;
149
+ for (const property of ['face', 'size', 'leading', 'tracking', 'weight'])
150
+ if (role[property] !== undefined && !(property === 'weight' && name === 'title'))
151
+ words.push(property);
152
+ if (role.features?.some((feature) => NUMERIC_FEATURES.has(feature)))
153
+ words.push('numeric');
154
+ if (role.features?.some((feature) => !NUMERIC_FEATURES.has(feature)))
155
+ words.push('features');
156
+ if (role.case && role.case !== 'none')
157
+ words.push(role.case);
158
+ if (role.reach === 'figures')
159
+ words.push('figures');
160
+ return words;
161
+ }
162
+ /**
163
+ * What the theme itself says of the nav role, beyond what its base look already says: `data-type-nav-side`, which
164
+ * dresses the side menu's entries. The compiled theme carries the look's roles merged under its own, and a look that
165
+ * sets nav (Mono's mono capitals) dresses the bar's entries only, as it always did; the side menu keeps the look's
166
+ * face until a theme sets the role itself. Compared per property, so a theme that only changes the weight does not
167
+ * bring the look's capitals down the side.
168
+ */
169
+ function sideNavWords(type, lookNav) {
170
+ const role = type?.roles?.nav;
171
+ if (!role)
172
+ return [];
173
+ const own = {};
174
+ for (const [key, value] of Object.entries(role))
175
+ if (JSON.stringify(value) !== JSON.stringify(lookNav?.[key]))
176
+ own[key] = value;
177
+ return roleWords('nav', own);
178
+ }
179
+ /**
180
+ * The published parts a theme may dress one by one (themeParts.ts says what each may take and how it is worn). Here,
181
+ * with the words the root wears for them, because the first paint sets `data-parts` as it sets the recipes'.
182
+ */
183
+ export const THEME_PARTS = [
184
+ 'ground',
185
+ 'bar',
186
+ 'bar.search',
187
+ 'nav',
188
+ 'nav.item',
189
+ 'nav.current',
190
+ 'nav.group',
191
+ 'logo',
192
+ 'page.title',
193
+ 'tabs',
194
+ 'tab.current',
195
+ 'section',
196
+ 'section.title',
197
+ 'stat',
198
+ 'stat.figure',
199
+ 'fields',
200
+ 'field.label',
201
+ 'table',
202
+ 'table.head',
203
+ 'table.row',
204
+ 'status',
205
+ 'tag',
206
+ 'button.primary',
207
+ 'button.secondary',
208
+ 'button.quiet',
209
+ 'link',
210
+ 'board.lane',
211
+ 'board.card',
212
+ 'workflow.step',
213
+ 'banner',
214
+ 'steps.step',
215
+ 'avatar',
216
+ 'menu',
217
+ 'dialog',
218
+ 'chart',
219
+ ];
220
+ /** What a part style may say, in the order its words are written. */
221
+ export const PART_PROPERTIES = ['ground', 'ink', 'edge', 'radius', 'lift', 'face', 'weight', 'case'];
222
+ /** The root's `data-parts`: one word per property a part says (`stat:ground button.primary:case`); undefined when none. */
223
+ export function partAttribute(parts) {
224
+ const words = [];
225
+ for (const part of THEME_PARTS) {
226
+ const style = parts?.[part];
227
+ if (!style)
228
+ continue;
229
+ for (const property of PART_PROPERTIES)
230
+ if (style[property] !== undefined)
231
+ words.push(`${part}:${property}`);
232
+ }
233
+ return words.length ? words.join(' ') : undefined;
234
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Which theme a page wears: one function, read by the server where it
3
+ * projects an App for a principal (appViewRoles.ts) and guesses a first
4
+ * paint's sheets (clientSurface.ts), and by the browser where it applies the
5
+ * look (client visualTheme.ts), so the two never disagree about a page.
6
+ *
7
+ * The order (docs/theming.md, Precedence):
8
+ *
9
+ * 1. A public surface — a landing, the sign-in screen, a public form, or any
10
+ * page a signed-out visitor sees — wears `ui.theme.for.public` where the
11
+ * App names one, whatever a reader picked once: public pages are a
12
+ * storefront, the same for everyone, and so can be cached.
13
+ * 2. Otherwise the reader's own pick, where the App offers a picker.
14
+ * 3. Otherwise the first `for.roles` entry, in the order it is written, that
15
+ * the account holds: a portal's look is the App's design.
16
+ * 4. Otherwise the tenant's saved theme: its staff's default.
17
+ * 5. Otherwise the App's `ui.theme.preset`, and Workshop where it names none.
18
+ *
19
+ * Each id is taken only where the App offers it (a built-in look or one of
20
+ * its own), so a theme removed since a pick was saved falls through to the
21
+ * next rank instead of to nothing.
22
+ */
23
+ /** `ui.theme.for`: a theme for signed-out visitors, and one per role. */
24
+ export interface ThemeAudiences {
25
+ public?: string;
26
+ roles?: Readonly<Record<string, string>>;
27
+ }
28
+ /** Where a page's theme came from. */
29
+ type ThemeSource = 'public' | 'reader' | 'role' | 'tenant' | 'app' | 'default';
30
+ export interface ThemeAsk {
31
+ /** A public surface, or a visitor who is not signed in. */
32
+ public?: boolean;
33
+ /** The account's roles; none when signed out. */
34
+ roles?: readonly string[];
35
+ /** The reader's own pick. */
36
+ pick?: string;
37
+ for?: ThemeAudiences;
38
+ /** The tenant's saved theme (tenant branding's `theme`). */
39
+ tenant?: string;
40
+ /** `ui.theme.preset`. */
41
+ preset?: string;
42
+ /** Whether the App offers a theme by this id: a built-in look, or one of `ui.customThemes`. */
43
+ offered: (id: string) => boolean;
44
+ }
45
+ /** The theme a page wears, where it came from and, for a role's, which role. */
46
+ export declare function resolveTheme(ask: ThemeAsk): {
47
+ id: string;
48
+ source: ThemeSource;
49
+ role?: string;
50
+ };
51
+ /** The role theme a principal holding `roles` wears, if `for.roles` maps one it holds: the first in written order. */
52
+ export declare function roleTheme(audiences: ThemeAudiences | undefined, roles: readonly string[]): string | undefined;
53
+ /** Every theme a mapping can dress a page in: the public one, then each role's, once each. */
54
+ export declare function audienceThemes(audiences: ThemeAudiences | undefined): string[];
55
+ export {};