@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,137 @@
1
+ /**
2
+ * The question an App's list asks, as its first page sends it: the table,
3
+ * the view's standing condition and a tab's, the order the view keeps, and
4
+ * the plumbing — the show clause that fetches its columns, the names its
5
+ * references are read by, the keys a row needs to open, its page size.
6
+ *
7
+ * The client's list builds its question by these rules
8
+ * (client/components/appListModel.ts), and the server builds a first page's
9
+ * the same way (server/http/firstPaintRooms.ts) so the answer it carries in
10
+ * the page is the answer to the request the list then makes. One rule on
11
+ * both sides: a copy would drift, and a drifted copy is a request the page
12
+ * did not carry.
13
+ */
14
+ import { andQuery } from './query.js';
15
+ import { splitQuery } from './clauses.js';
16
+ import { listPresentationColumns } from './appListColumns.js';
17
+ import { findTable, labelPath, primaryKey } from './schema.js';
18
+ import { referenceProjection } from './referenceModel.js';
19
+ import { tableAtPrefix } from './viewPaths.js';
20
+ import { leadTonePath, subtitlePath } from './subtitlePath.js';
21
+ import { currencyPath } from './money.js';
22
+ const squeeze = (text) => String(text ?? '')
23
+ .replace(/\s+/g, ' ')
24
+ .trim();
25
+ const resource = (rules, tableId) => (Object.hasOwn(rules.resources, tableId) ? rules.resources[tableId] : undefined);
26
+ /** A table's record label, where its resource names one (false: a projection that withholds it). */
27
+ const recordLabelOf = (rules, table) => resource(rules, table.id)?.recordLabel;
28
+ /** Where a row's name lives, as a view path (schema.ts labelPath), by the App's record label. */
29
+ const labelPathOf = (rules, table) => labelPath(rules.schema, table, recordLabelOf(rules, table));
30
+ /**
31
+ * The references among a list's columns, each with the path its record's
32
+ * name is read from: `partner_id` → `partner_id.code` where the partner's
33
+ * resource says `recordLabel: 'code'`, else the name the record page would
34
+ * give it. A target with nothing better than its key keeps the key.
35
+ */
36
+ export function referenceNames(rules, tableId, names) {
37
+ const base = findTable(rules.schema, tableId);
38
+ if (!base)
39
+ return {};
40
+ const naming = (target) => {
41
+ const path = labelPathOf(rules, target);
42
+ return path && !primaryKey(target).includes(path) ? path : undefined;
43
+ };
44
+ return Object.fromEntries(referenceProjection(rules.schema, base, names, true, naming).labels);
45
+ }
46
+ /** The columns a shown column's second line reads: fetched with the row, drawn under it. */
47
+ export function subtitleColumns(rules, tableId, shown) {
48
+ return [
49
+ ...new Set(shown.flatMap((name) => {
50
+ /* A dotted column wears the rule of the table it was read from, and its
51
+ second line is read from that table too. */
52
+ const hop = name.lastIndexOf('.');
53
+ const owner = hop < 0 ? tableId : tableAtPrefix(rules.schema, tableId, name.slice(0, hop))?.id;
54
+ const rule = owner ? resource(rules, owner)?.display?.[name.slice(hop + 1)] : undefined;
55
+ /* A lead icon's tone is read with the row too: a failed run's square says so without a second column. */
56
+ return [
57
+ subtitlePath(rule, name),
58
+ leadTonePath(rule, name),
59
+ /* A money column whose currency is each row's own reads that code with it. */
60
+ currencyPath(rule, name),
61
+ ].filter((path) => path !== undefined);
62
+ })),
63
+ ];
64
+ }
65
+ /** The references an editable list shows by name (`owner_id.name`): their keys ride along
66
+ with the row, so a cell edits the reference and says what it replaces. */
67
+ export function editedReferences(rules, spec) {
68
+ const t = findTable(rules.schema, spec.table);
69
+ if (!t || !spec.editable || spec.presentation)
70
+ return [];
71
+ return [
72
+ ...new Set((spec.show ?? []).flatMap((name) => {
73
+ const hop = name.indexOf('.');
74
+ const head = name.slice(0, hop);
75
+ return hop > 0 &&
76
+ name.indexOf('.', hop + 1) < 0 &&
77
+ (spec.editable === true || spec.editable.includes(head)) &&
78
+ t.columns.some((column) => column.name === head && column.references)
79
+ ? [head]
80
+ : [];
81
+ })),
82
+ ];
83
+ }
84
+ /** The references a list draws — its `show`, its presentation's columns, or every column — by the path each is named from (referenceNames). */
85
+ export function listReferenceNames(rules, spec) {
86
+ const t = findTable(rules.schema, spec.table);
87
+ if (!t)
88
+ return {};
89
+ const drawn = [...(spec.show ?? []), ...(spec.presentation ? listPresentationColumns(spec.presentation) : [])];
90
+ return referenceNames(rules, spec.table, drawn.length ? drawn : t.columns.map((column) => column.name));
91
+ }
92
+ /** The show clause that fetches the app's columns plus the keys a row needs to open.
93
+ A presentation names the columns it draws, so a view of cards needs no `show`. */
94
+ export function showClause(rules, spec) {
95
+ const t = findTable(rules.schema, spec.table);
96
+ const names = spec.show ?? [];
97
+ const listNames = spec.presentation ? listPresentationColumns(spec.presentation) : [];
98
+ if (!t)
99
+ return '';
100
+ const naming = recordLabelOf(rules, t) === undefined ? undefined : labelPathOf(rules, t);
101
+ const named = Object.values(listReferenceNames(rules, spec));
102
+ if (!names.length && !listNames.length && !naming && !named.length)
103
+ return '';
104
+ const shown = names.length || listNames.length ? names : t.columns.map((column) => column.name);
105
+ return `show ${[
106
+ ...new Set([
107
+ ...shown,
108
+ ...listNames,
109
+ ...(naming ? [naming] : []),
110
+ ...named,
111
+ ...(spec.order ? [spec.order] : []),
112
+ ...subtitleColumns(rules, spec.table, names),
113
+ ...editedReferences(rules, spec),
114
+ ...(spec.opens ? [spec.opens] : []),
115
+ ...primaryKey(t),
116
+ ]),
117
+ ].join(', ')}`;
118
+ }
119
+ /* The authored page size, as the question writes it after the show clause. */
120
+ export const limitClause = (spec) => (spec.limit ? `limit ${spec.limit}` : '');
121
+ /* A view's hand order is plumbing too: "sort position" is how the list is
122
+ kept, not a sort anyone chose, so it is asked wherever nothing else sorts
123
+ the question — a tab's own sort, a header's, the reader's own win — and
124
+ folded out of what the bar shows. A view's default `sort` is the same
125
+ reading, said in the query bar's words. */
126
+ export const orderClause = (spec) => spec.order ? `sort ${spec.order}` : spec.sort ? `sort ${spec.sort}` : '';
127
+ export function withOrder(spec, question) {
128
+ const order = orderClause(spec);
129
+ return order && !splitQuery(`${spec.table} ${question}`).sort ? squeeze(`${question} ${order}`) : question;
130
+ }
131
+ /** The full query text one of the app's tabs stands for. A module's
132
+ standing conditions come first; a tab refines on top of them. */
133
+ export function appListQuery(rules, spec, index = 0) {
134
+ const tab = (spec.tabs?.length ? spec.tabs : [{}])[index] ?? {};
135
+ const where = withOrder(spec, andQuery(spec.query, tab.query) ?? '');
136
+ return [spec.table, where, showClause(rules, spec), limitClause(spec)].filter(Boolean).join(' ');
137
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The palettes every built-in look offers: one registry, so Cobalt is the same
3
+ * blue in Workshop, Lumen, Mono, Sage and Ledger, and a reader who picks it keeps it
4
+ * when they pick another look. A palette is a color identity only — its hue at
5
+ * the depths a look draws it, light and dark, and the chart series that starts
6
+ * from it. Everything else stays the look's: its grounds and neutrals
7
+ * (Workshop's paper, Lumen's stone, Mono's grays, Sage's cream, Ledger's green-tinted paper and cover), its type,
8
+ * shape and recipes, and which roles it lets the hue reach (`paletteColors`).
9
+ * Workshop keeps one restrained accent under any palette: the hue reaches the
10
+ * few marks a reader takes for the brand color — the primary verb, links and
11
+ * the current tab, the menu's marker, the ring, a checked box, the first
12
+ * series — and never a tint; its fills and rules stay the ink.
13
+ *
14
+ * test/contrast.test.ts measures every palette in every look, light and dark:
15
+ * the hue as text and as a fill's words at 4.5:1, the ring at 3:1, adjacent
16
+ * chart series apart for color-blind readers.
17
+ */
18
+ import type { ThemeBase, ThemeColorsOver } from '../../schema/theme.js';
19
+ /** One mode of a palette: the hue at each depth a look draws it. */
20
+ interface PaletteMode {
21
+ /** The hue as text and as a fill under the page's words: a link, a current tab's word, a button (Lumen, Mono, Sage). */
22
+ accent: string;
23
+ /** A link a step brighter than the accent, by night; omitted, the accent. */
24
+ link?: string;
25
+ /** The hue's pale (by night, deep) tint under a selected item: Lumen's. */
26
+ soft: string;
27
+ /** The focus ring: a mid-tone of the hue, 3:1 on every look's grounds. */
28
+ focus: string;
29
+ /** The hue as a signal fill — Workshop's primary verb, as a hazard tag prints it — and the words on it. */
30
+ signal: string;
31
+ onSignal: string;
32
+ /** The first chart series. */
33
+ chart: string;
34
+ /** Ledger's rules by night, where the ring's mid-tone is not the rung it draws them at; omitted, the ring. */
35
+ rule?: string;
36
+ }
37
+ interface LookPalette {
38
+ id: string;
39
+ label: string;
40
+ light: PaletteMode;
41
+ dark: PaletteMode;
42
+ /** Where one look draws the hue at another depth: the ink is each look's own ink, Workshop's orange its own, and a
43
+ link a step deeper where Workshop's paper and its menu's hover would otherwise hold it under 4.5:1. */
44
+ looks?: Partial<Record<ThemeBase, {
45
+ light?: Partial<PaletteMode>;
46
+ dark?: Partial<PaletteMode>;
47
+ }>>;
48
+ }
49
+ export declare const LOOK_PALETTES: readonly LookPalette[];
50
+ /**
51
+ * One palette as a look draws it, in one mode: the roles the look lets the hue reach, as spec colors.
52
+ *
53
+ * - Workshop: the hue is the primary verb's fill and its words, links and the current tab's rule, the marker beside
54
+ * the menu's ink block, the ring, a checked box and the first chart series; fills, rules and selection stay the
55
+ * ink, on paper, with no tint.
56
+ * - Lumen: the accent and its pale tint, links, the ring, the menu's mark and the first chart series.
57
+ * - Mono and Sage: the same, on their own neutral tint for what is chosen (Mono's gray, Sage's warm cream).
58
+ * - Ledger: Lumen's reach and the primary verb's fill, and the hue's ink and the rules (a table's double-ruled heads, a box's top rule) in it;
59
+ * the paper and the cover stay the book's own green, with the gilt mark for the current entry.
60
+ */
61
+ export declare function paletteColors(look: ThemeBase, palette: LookPalette, mode: 'light' | 'dark', series: readonly string[]): ThemeColorsOver;
62
+ export {};
@@ -0,0 +1,306 @@
1
+ import { chartPairFailure, linear, oklab } from './chartSeparation.js';
2
+ /* Around the wheel, then the two neutrals, so twelve hues read apart at a glance in the picker. Lumen's five
3
+ (Violet, Teal, Emerald, Rose, Amber) keep their ids and their Lumen colors; Amber moved toward gold so that it and
4
+ Safety orange are two hues, not one. Cobalt is Lumen's own blue. */
5
+ export const LOOK_PALETTES = [
6
+ {
7
+ id: 'crimson',
8
+ label: 'Crimson',
9
+ light: { accent: '#b42318', soft: '#fdecea', focus: '#d9534a', signal: '#cf2a1e', onSignal: '#faf8f3', chart: '#d63a32' },
10
+ dark: {
11
+ accent: '#ff8f85',
12
+ link: '#ffaca5',
13
+ soft: '#3d1715',
14
+ focus: '#e06158',
15
+ signal: '#ff6b5e',
16
+ onSignal: '#15130f',
17
+ chart: '#e5534b',
18
+ },
19
+ },
20
+ {
21
+ id: 'safety',
22
+ label: 'Safety orange',
23
+ light: { accent: '#b33d0b', soft: '#fdeee4', focus: '#d4612a', signal: '#f26a1b', onSignal: '#1b1813', chart: '#e8691f' },
24
+ dark: {
25
+ accent: '#ff9d66',
26
+ link: '#ffb88f',
27
+ soft: '#3b2112',
28
+ focus: '#d8743a',
29
+ signal: '#ff7a2e',
30
+ onSignal: '#15130f',
31
+ chart: '#f07a32',
32
+ },
33
+ /* Workshop's ring is its own deeper orange (a field report's theme, where the look began). */
34
+ looks: { workshop: { light: { accent: '#c9530b', link: '#aa3600' }, dark: { accent: '#e8742c' } } },
35
+ },
36
+ {
37
+ id: 'amber',
38
+ label: 'Amber',
39
+ light: { accent: '#875a00', soft: '#fbf2dc', focus: '#b57a33', signal: '#f2a516', onSignal: '#1b1813', chart: '#d97706' },
40
+ dark: {
41
+ accent: '#f4b24a',
42
+ link: '#fbcf86',
43
+ soft: '#3a2a10',
44
+ focus: '#b07d2d',
45
+ signal: '#ffb52e',
46
+ onSignal: '#15130f',
47
+ chart: '#c88317',
48
+ },
49
+ looks: { workshop: { light: { link: '#825600' } } },
50
+ },
51
+ {
52
+ id: 'moss',
53
+ label: 'Moss',
54
+ light: { accent: '#436e10', soft: '#eef4e2', focus: '#638f2a', signal: '#86b828', onSignal: '#1b1813', chart: '#6b9e1f' },
55
+ dark: {
56
+ accent: '#a6d468',
57
+ link: '#bfe28f',
58
+ soft: '#232f15',
59
+ focus: '#7aa743',
60
+ signal: '#a3d65c',
61
+ onSignal: '#15130f',
62
+ chart: '#8cbf45',
63
+ },
64
+ looks: { workshop: { light: { link: '#3f6a08' } } },
65
+ },
66
+ {
67
+ id: 'emerald',
68
+ label: 'Emerald',
69
+ light: { accent: '#08734f', soft: '#e4f6ed', focus: '#36966f', signal: '#12a26f', onSignal: '#1b1813', chart: '#0e9a6c' },
70
+ dark: {
71
+ accent: '#4ad6a0',
72
+ link: '#7ee6bd',
73
+ soft: '#0f3529',
74
+ focus: '#279771',
75
+ signal: '#34d399',
76
+ onSignal: '#15130f',
77
+ chart: '#12a678',
78
+ },
79
+ /* Ledger's own green is Emerald as the book draws it: a deeper, greyer hue than the shared one, so its marks read
80
+ on its tinted paper and the cover's green sits beside them. */
81
+ looks: {
82
+ workshop: { light: { link: '#006d4a' } },
83
+ ledger: {
84
+ light: { accent: '#0f4d36', link: '#0f5a3f', soft: '#e0ece4', focus: '#3f8a6c', chart: '#0f6b4a' },
85
+ dark: { accent: '#7cc4a0', link: '#8fd1ae', soft: '#183026', focus: '#5fa585', chart: '#5fbf92', rule: '#6fb592' },
86
+ },
87
+ },
88
+ },
89
+ {
90
+ id: 'teal',
91
+ label: 'Teal',
92
+ light: { accent: '#0b6f86', soft: '#e3f5f8', focus: '#3c90a4', signal: '#17a9c4', onSignal: '#1b1813', chart: '#0e8fb0' },
93
+ dark: {
94
+ accent: '#4cc6db',
95
+ link: '#79d6e6',
96
+ soft: '#0f3540',
97
+ focus: '#2a8a9c',
98
+ signal: '#3ccbe0',
99
+ onSignal: '#15130f',
100
+ chart: '#0c8ab0',
101
+ },
102
+ looks: { workshop: { light: { link: '#00687e' } } },
103
+ },
104
+ {
105
+ id: 'cobalt',
106
+ label: 'Cobalt',
107
+ light: { accent: '#2d4fd6', soft: '#eef1fd', focus: '#6880e0', signal: '#2f5ce8', onSignal: '#faf8f3', chart: '#2557e0' },
108
+ dark: {
109
+ accent: '#8aa1ff',
110
+ link: '#91a8ff',
111
+ soft: '#1d2547',
112
+ focus: '#5a73d6',
113
+ signal: '#7f9cff',
114
+ onSignal: '#15130f',
115
+ chart: '#4369f0',
116
+ },
117
+ },
118
+ {
119
+ id: 'violet',
120
+ label: 'Violet',
121
+ light: { accent: '#6534d8', soft: '#f1ecff', focus: '#8a6ee6', signal: '#7445e8', onSignal: '#faf8f3', chart: '#9a6cf7' },
122
+ dark: {
123
+ accent: '#ad91ff',
124
+ link: '#bea8ff',
125
+ soft: '#2a2154',
126
+ focus: '#7c63cf',
127
+ signal: '#a98cff',
128
+ onSignal: '#15130f',
129
+ chart: '#9a78ec',
130
+ },
131
+ },
132
+ {
133
+ id: 'plum',
134
+ label: 'Plum',
135
+ light: { accent: '#8a1f8f', soft: '#f8eaf8', focus: '#b65bbb', signal: '#a3289f', onSignal: '#faf8f3', chart: '#b847c0' },
136
+ dark: {
137
+ accent: '#e28cea',
138
+ link: '#edaef2',
139
+ soft: '#3a1840',
140
+ focus: '#b366bb',
141
+ signal: '#e083ea',
142
+ onSignal: '#15130f',
143
+ chart: '#d062d8',
144
+ },
145
+ },
146
+ {
147
+ id: 'rose',
148
+ label: 'Rose',
149
+ light: { accent: '#b4185a', soft: '#fdebf2', focus: '#d0608f', signal: '#c92265', onSignal: '#faf8f3', chart: '#e0428a' },
150
+ dark: {
151
+ accent: '#f57ab9',
152
+ link: '#f9a6cf',
153
+ soft: '#3e1631',
154
+ focus: '#bd5a8f',
155
+ signal: '#ff70aa',
156
+ onSignal: '#15130f',
157
+ chart: '#e0559b',
158
+ },
159
+ },
160
+ {
161
+ id: 'slate',
162
+ label: 'Slate',
163
+ light: { accent: '#3f5670', soft: '#ebeff4', focus: '#6e8399', signal: '#4c6584', onSignal: '#faf8f3', chart: '#5f7690' },
164
+ dark: {
165
+ accent: '#a8bbd2',
166
+ link: '#c2d0e1',
167
+ soft: '#1f2733',
168
+ focus: '#6f86a3',
169
+ signal: '#9fb4cf',
170
+ onSignal: '#15130f',
171
+ chart: '#8a9fba',
172
+ },
173
+ },
174
+ {
175
+ /* No hue: the look's own ink is the accent. Mono's and Sage's original colors are this palette as they draw it. */
176
+ id: 'ink',
177
+ label: 'Ink',
178
+ light: { accent: '#1c1a17', soft: '#eeedeb', focus: '#726c64', signal: '#1c1a17', onSignal: '#ffffff', chart: '#2b2620' },
179
+ dark: { accent: '#eeece8', soft: '#2a2826', focus: '#9f9a92', signal: '#eeece8', onSignal: '#121110', chart: '#d9d0c0' },
180
+ looks: {
181
+ workshop: {
182
+ light: { accent: '#5f574b', signal: '#1b1813', onSignal: '#faf8f3' },
183
+ dark: { accent: '#a59c8d', signal: '#efe9de', onSignal: '#15130f' },
184
+ },
185
+ mono: {
186
+ light: { accent: '#000000', focus: '#000000', chart: '#000000' },
187
+ dark: { accent: '#ffffff', focus: '#ffffff', chart: '#ffffff' },
188
+ },
189
+ sage: {
190
+ light: { accent: '#1f2320', link: '#256b43', focus: '#256b43', chart: '#3a8560' },
191
+ dark: { accent: '#f1f0ea', link: '#8fd9ad', focus: '#8fd9ad', chart: '#7fd1a0' },
192
+ },
193
+ },
194
+ },
195
+ ];
196
+ /** How far apart two series are to the reader who tells them apart least (OKLab ΔE ×100), and whether every reader
197
+ does (chartSeparation.ts). */
198
+ function apart(a, b) {
199
+ return !chartPairFailure(a, b);
200
+ }
201
+ function nearness(a, b) {
202
+ const x = oklab(linear(a)), y = oklab(linear(b));
203
+ return Math.hypot(x[0] - y[0], x[1] - y[1], x[2] - y[2]);
204
+ }
205
+ /**
206
+ * A look's series led by a palette's hue. The lead takes the first place and the look's series follow in their own
207
+ * order, less the lead where it is one of them, else less the one nearest it, so a chart never shows two of a hue.
208
+ * Where a neighbor would sit too close to the one before it for a color-blind reader, the next that reads apart takes
209
+ * its place: the first order, in the look's own, in which every neighbor does. Where none does without the nearest,
210
+ * the next nearest is left out instead; a look whose series cannot be set apart at all keeps its own order.
211
+ */
212
+ function ledSeries(series, lead) {
213
+ const own = series.findIndex((color) => color.toLowerCase() === lead.toLowerCase());
214
+ const leaving = own >= 0 ? [own] : series.map((_, index) => index).sort((a, b) => nearness(series[a], lead) - nearness(series[b], lead));
215
+ for (const left of leaving) {
216
+ const rest = series.filter((_, index) => index !== left);
217
+ const order = [];
218
+ const used = new Set();
219
+ const place = (before) => {
220
+ if (order.length === rest.length)
221
+ return true;
222
+ for (let index = 0; index < rest.length; index++) {
223
+ if (used.has(index) || !apart(before, rest[index]))
224
+ continue;
225
+ used.add(index);
226
+ order.push(rest[index]);
227
+ if (place(rest[index]))
228
+ return true;
229
+ order.pop();
230
+ used.delete(index);
231
+ }
232
+ return false;
233
+ };
234
+ if (place(lead))
235
+ return [lead, ...order];
236
+ }
237
+ return [lead, ...series.filter((_, index) => index !== leaving[0])];
238
+ }
239
+ /**
240
+ * One palette as a look draws it, in one mode: the roles the look lets the hue reach, as spec colors.
241
+ *
242
+ * - Workshop: the hue is the primary verb's fill and its words, links and the current tab's rule, the marker beside
243
+ * the menu's ink block, the ring, a checked box and the first chart series; fills, rules and selection stay the
244
+ * ink, on paper, with no tint.
245
+ * - Lumen: the accent and its pale tint, links, the ring, the menu's mark and the first chart series.
246
+ * - Mono and Sage: the same, on their own neutral tint for what is chosen (Mono's gray, Sage's warm cream).
247
+ * - Ledger: Lumen's reach and the primary verb's fill, and the hue's ink and the rules (a table's double-ruled heads, a box's top rule) in it;
248
+ * the paper and the cover stay the book's own green, with the gilt mark for the current entry.
249
+ */
250
+ export function paletteColors(look, palette, mode, series) {
251
+ const tone = { ...palette[mode], ...palette.looks?.[look]?.[mode] };
252
+ const link = tone.link ?? tone.accent;
253
+ switch (look) {
254
+ case 'workshop':
255
+ /* The few marks a reader takes for the brand color, and no tint: the primary verb's fill and its words, links
256
+ and the current tab's rule, the menu's marker beside its ink block, the ring, a checked box and the first
257
+ chart series. Fills, rules, selection and the menu's block stay the ink, on paper. */
258
+ return {
259
+ accent: tone.signal,
260
+ onAccent: tone.onSignal,
261
+ primary: tone.signal,
262
+ onPrimary: tone.onSignal,
263
+ link,
264
+ focus: tone.accent,
265
+ nav: { accent: link },
266
+ chart: ledSeries(series, tone.chart),
267
+ };
268
+ case 'lumen':
269
+ return {
270
+ accent: tone.accent,
271
+ accentSoft: tone.soft,
272
+ link,
273
+ focus: tone.focus,
274
+ nav: { accent: link },
275
+ chart: ledSeries(series, tone.chart),
276
+ };
277
+ case 'mono':
278
+ return { accent: tone.accent, link, focus: tone.focus, nav: { accent: link }, chart: ledSeries(series, tone.chart) };
279
+ case 'sage':
280
+ return {
281
+ accent: tone.accent,
282
+ link,
283
+ focus: tone.focus,
284
+ /* Sage's menu marks the current entry in its ink by day, as its buttons are; by night in the brighter link. */
285
+ nav: { accent: mode === 'light' ? tone.accent : link },
286
+ chart: ledSeries(series, tone.chart),
287
+ };
288
+ case 'ledger': {
289
+ /* The rules stand in the hue by day, and by night in its mid-tone, a rung under the link so a 3px double rule
290
+ is a line and not a glare on the dark paper. */
291
+ const rule = mode === 'light' ? tone.accent : (tone.rule ?? tone.focus);
292
+ /* The book has one green for its cover's marks, its primary button and its links: a form's primary verb fills
293
+ in the hue like a record's, never in the ink. */
294
+ return {
295
+ accent: tone.accent,
296
+ primary: tone.accent,
297
+ accentSoft: tone.soft,
298
+ accentInk: mode === 'light' ? tone.accent : link,
299
+ link,
300
+ focus: tone.focus,
301
+ rules: { section: rule, head: rule },
302
+ chart: ledSeries(series, tone.chart),
303
+ };
304
+ }
305
+ }
306
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * A copy of the query with the contents of quoted values replaced by spaces.
3
+ *
4
+ * Same length as the input and the quote characters left in place, so an index
5
+ * into this string is an index into the original. That is the whole trick: the
6
+ * scan happens on a version where a value cannot be mistaken for syntax, and
7
+ * every position it reports still points at the text the person typed.
8
+ * Scanning raw text turns a value into syntax: `name contains "show me"` was
9
+ * cut at the value's own word and the filter came back holding
10
+ * `"sort name show id, name` — a string assembled out of the query's own
11
+ * punctuation.
12
+ *
13
+ * One copy, because every scanner has to agree on where a value ends. There
14
+ * were three — the query compiler's, the clause splitter's and the view's
15
+ * path check — and the view's had fallen behind: it ended a value at an
16
+ * escaped quote, and blanked a character outside the Basic Multilingual Plane
17
+ * to one space where it was two code units, so every offset after it was off
18
+ * by one.
19
+ *
20
+ * An unterminated quote blanks to the end, which is the safe direction — the
21
+ * alternative is reading the tail of a half-typed value as clauses while
22
+ * someone is still typing it.
23
+ */
24
+ export declare function maskQuoted(text: string): string;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * A copy of the query with the contents of quoted values replaced by spaces.
3
+ *
4
+ * Same length as the input and the quote characters left in place, so an index
5
+ * into this string is an index into the original. That is the whole trick: the
6
+ * scan happens on a version where a value cannot be mistaken for syntax, and
7
+ * every position it reports still points at the text the person typed.
8
+ * Scanning raw text turns a value into syntax: `name contains "show me"` was
9
+ * cut at the value's own word and the filter came back holding
10
+ * `"sort name show id, name` — a string assembled out of the query's own
11
+ * punctuation.
12
+ *
13
+ * One copy, because every scanner has to agree on where a value ends. There
14
+ * were three — the query compiler's, the clause splitter's and the view's
15
+ * path check — and the view's had fallen behind: it ended a value at an
16
+ * escaped quote, and blanked a character outside the Basic Multilingual Plane
17
+ * to one space where it was two code units, so every offset after it was off
18
+ * by one.
19
+ *
20
+ * An unterminated quote blanks to the end, which is the safe direction — the
21
+ * alternative is reading the tail of a half-typed value as clauses while
22
+ * someone is still typing it.
23
+ */
24
+ export function maskQuoted(text) {
25
+ let out = '';
26
+ let quote = null;
27
+ for (let i = 0; i < text.length; i += 1) {
28
+ const ch = text[i];
29
+ if (quote) {
30
+ if (ch === '\\' && i + 1 < text.length) {
31
+ // An escaped character cannot end the quote, and both halves of it are
32
+ // inside the value.
33
+ out += ' ';
34
+ i += 1;
35
+ continue;
36
+ }
37
+ out += ch === quote ? ((quote = null), ch) : ' ';
38
+ continue;
39
+ }
40
+ if (ch === '"' || ch === "'") {
41
+ quote = ch;
42
+ out += ch;
43
+ continue;
44
+ }
45
+ out += ch;
46
+ }
47
+ return out;
48
+ }
@@ -0,0 +1,19 @@
1
+ /** A resource of people or teams an @ names: the resource, the column stored, the column or template shown. */
2
+ export interface MentionSource {
3
+ from: string;
4
+ by: string;
5
+ labelColumn?: string;
6
+ }
7
+ /** The columns a mention's label reads, in order — one column, or each `{column}` of a template — or why it is not one. */
8
+ export declare function mentionLabelColumns(label: string): {
9
+ columns: string[];
10
+ } | {
11
+ problem: string;
12
+ };
13
+ /** Why a mention's `by` and `labelColumn` cannot be read from `table`, naming the first column it lacks; undefined when they can. */
14
+ export declare function mentionSourceProblem(source: MentionSource, table: {
15
+ name: string;
16
+ columns: readonly {
17
+ name: string;
18
+ }[];
19
+ }): string | undefined;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * What a mention's declaration says and whether the catalog can serve it —
3
+ * the half the validators read (command.ts, app.ts, appResourceBlocks.ts),
4
+ * apart from mentionLookup.ts, the query an @ sends, so a first page that
5
+ * only validates does not carry the lookup (the built suite's cold-visit
6
+ * ceiling holds it).
7
+ */
8
+ import { isLabelTemplate, parseLabelTemplate, writesMask } from './recordLabel.js';
9
+ /** The columns a mention's label reads, in order — one column, or each `{column}` of a template — or why it is not one. */
10
+ export function mentionLabelColumns(label) {
11
+ if (!isLabelTemplate(label))
12
+ return { columns: [label] };
13
+ if (writesMask(label))
14
+ return { problem: `"${label}" writes a mask or words itself; a column's display rule says them.` };
15
+ const parsed = parseLabelTemplate(label);
16
+ if ('problem' in parsed)
17
+ return parsed;
18
+ /* Read with the person's row, in the one query the @ sends: a path through a reference is not in it. */
19
+ const far = parsed.paths.find((path) => path.includes('.') || path.includes('+'));
20
+ if (far)
21
+ return { problem: `{${far}} in "${label}" is not a column; a mention's label names the people's own columns.` };
22
+ return { columns: [...new Set(parsed.paths)] };
23
+ }
24
+ /** Why a mention's `by` and `labelColumn` cannot be read from `table`, naming the first column it lacks; undefined when they can. */
25
+ export function mentionSourceProblem(source, table) {
26
+ const has = (column) => table.columns.some((c) => c.name === column);
27
+ if (!has(source.by))
28
+ return `"by" names "${source.by}", which is not a column of "${table.name}".`;
29
+ if (source.labelColumn === undefined)
30
+ return undefined;
31
+ const read = mentionLabelColumns(source.labelColumn);
32
+ if ('problem' in read)
33
+ return `"labelColumn": ${read.problem}`;
34
+ const missing = read.columns.find((column) => !has(column));
35
+ return missing === undefined
36
+ ? undefined
37
+ : `"labelColumn" ${isLabelTemplate(source.labelColumn) ? `"${source.labelColumn}" names` : 'names'} "${missing}", which is not a column of "${table.name}".`;
38
+ }
@@ -0,0 +1,17 @@
1
+ import { type MentionSource } from './mentionLabel.js';
2
+ export type { MentionSource };
3
+ /** A person's name as the label says it, from their row: the column, or the template filled and its spaces tidied. */
4
+ export declare function mentionLabelText(source: MentionSource, row: Record<string, unknown>): string;
5
+ /**
6
+ * The query an @ sends for what was typed after it: the people whose label's
7
+ * words — any of them, by its start, in any case — or whose `by` value start
8
+ * with each typed word, shown by the label's columns and sorted by them.
9
+ * `columns` are the resource's, where the catalog has them, so a key or a
10
+ * number is not searched as text.
11
+ */
12
+ export declare function mentionQuery(source: MentionSource, typed: string, columns?: readonly {
13
+ name: string;
14
+ type?: string;
15
+ }[],
16
+ /** Read beside the label, never looked in: a team's key its link rows name. */
17
+ also?: readonly string[]): string;