@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.
- package/LICENSE +21 -0
- package/README.md +17 -2
- package/dist/adapters/adapter.d.ts +693 -0
- package/dist/adapters/adapter.js +444 -0
- package/dist/adapters/cache/cacheStore.d.ts +75 -0
- package/dist/adapters/cache/cacheStore.js +160 -0
- package/dist/adapters/cache/resp.d.ts +52 -0
- package/dist/adapters/cache/resp.js +237 -0
- package/dist/adapters/commands/canonicalJson.d.ts +19 -0
- package/dist/adapters/commands/canonicalJson.js +154 -0
- package/dist/adapters/connect.d.ts +29 -0
- package/dist/adapters/connect.js +40 -0
- package/dist/adapters/connectionBudget.d.ts +101 -0
- package/dist/adapters/connectionBudget.js +128 -0
- package/dist/adapters/dbLatency.d.ts +35 -0
- package/dist/adapters/dbLatency.js +79 -0
- package/dist/adapters/epochCache.d.ts +50 -0
- package/dist/adapters/epochCache.js +85 -0
- package/dist/adapters/http/egress.d.ts +48 -0
- package/dist/adapters/http/egress.js +175 -0
- package/dist/adapters/http/httpAdapter.d.ts +71 -0
- package/dist/adapters/http/httpAdapter.js +512 -0
- package/dist/adapters/http/httpDescription.d.ts +32 -0
- package/dist/adapters/http/httpDescription.js +246 -0
- package/dist/adapters/http/openapi.d.ts +98 -0
- package/dist/adapters/http/openapi.js +487 -0
- package/dist/adapters/layoutRefusal.d.ts +24 -0
- package/dist/adapters/layoutRefusal.js +35 -0
- package/dist/adapters/net/networkPolicy.d.ts +44 -0
- package/dist/adapters/net/networkPolicy.js +123 -0
- package/dist/adapters/net/untrustedDatabase.d.ts +18 -0
- package/dist/adapters/net/untrustedDatabase.js +120 -0
- package/dist/adapters/poolAdmission.d.ts +43 -0
- package/dist/adapters/poolAdmission.js +184 -0
- package/dist/adapters/poolMetrics.d.ts +121 -0
- package/dist/adapters/poolMetrics.js +185 -0
- package/dist/adapters/postgres.d.ts +436 -0
- package/dist/adapters/postgres.js +1890 -0
- package/dist/adapters/postgresCatalog.d.ts +96 -0
- package/dist/adapters/postgresCatalog.js +387 -0
- package/dist/adapters/postgresCatalogDigest.d.ts +30 -0
- package/dist/adapters/postgresCatalogDigest.js +87 -0
- package/dist/adapters/postgresCatalogRows.d.ts +62 -0
- package/dist/adapters/postgresCatalogRows.js +37 -0
- package/dist/adapters/postgresDates.d.ts +1 -0
- package/dist/adapters/postgresDates.js +39 -0
- package/dist/adapters/postgresMaintenance.d.ts +33 -0
- package/dist/adapters/postgresMaintenance.js +179 -0
- package/dist/adapters/postgresPool.d.ts +255 -0
- package/dist/adapters/postgresPool.js +838 -0
- package/dist/adapters/postgresPooler.d.ts +28 -0
- package/dist/adapters/postgresPooler.js +267 -0
- package/dist/adapters/postgresReadCatalog.d.ts +31 -0
- package/dist/adapters/postgresReadCatalog.js +226 -0
- package/dist/adapters/postgresReadSnapshot.d.ts +46 -0
- package/dist/adapters/postgresReadSnapshot.js +133 -0
- package/dist/adapters/postgresSchemaEpoch.d.ts +24 -0
- package/dist/adapters/postgresSchemaEpoch.js +149 -0
- package/dist/adapters/postgresTransactionHandle.d.ts +173 -0
- package/dist/adapters/postgresTransactionHandle.js +524 -0
- package/dist/adapters/postgresValues.d.ts +30 -0
- package/dist/adapters/postgresValues.js +75 -0
- package/dist/adapters/replicas.d.ts +70 -0
- package/dist/adapters/replicas.js +208 -0
- package/dist/adapters/reservedSql.d.ts +38 -0
- package/dist/adapters/reservedSql.js +264 -0
- package/dist/adapters/rolePrivileges.d.ts +17 -0
- package/dist/adapters/rolePrivileges.js +22 -0
- package/dist/adapters/scoped/keyRows.d.ts +65 -0
- package/dist/adapters/scoped/keyRows.js +173 -0
- package/dist/adapters/scoped/postgresScopeCatalog.d.ts +16 -0
- package/dist/adapters/scoped/postgresScopeCatalog.js +117 -0
- package/dist/adapters/scoped/scopedCommandOperations.d.ts +5 -0
- package/dist/adapters/scoped/scopedCommandOperations.js +48 -0
- package/dist/adapters/scoped/scopedReads.d.ts +20 -0
- package/dist/adapters/scoped/scopedReads.js +174 -0
- package/dist/adapters/scoped/scopedTransaction.d.ts +89 -0
- package/dist/adapters/scoped/scopedTransaction.js +303 -0
- package/dist/adapters/scoped/sqliteScopeCatalog.d.ts +16 -0
- package/dist/adapters/scoped/sqliteScopeCatalog.js +241 -0
- package/dist/adapters/scoped/updateGuard.d.ts +3 -0
- package/dist/adapters/scoped/updateGuard.js +40 -0
- package/dist/adapters/serverSettings.d.ts +45 -0
- package/dist/adapters/serverSettings.js +46 -0
- package/dist/adapters/sqlite.d.ts +262 -0
- package/dist/adapters/sqlite.js +1434 -0
- package/dist/adapters/sqliteCostlyReads.d.ts +33 -0
- package/dist/adapters/sqliteCostlyReads.js +49 -0
- package/dist/adapters/sqliteDecimals.d.ts +22 -0
- package/dist/adapters/sqliteDecimals.js +57 -0
- package/dist/adapters/sqliteHandles.d.ts +43 -0
- package/dist/adapters/sqliteHandles.js +143 -0
- package/dist/adapters/sqliteStatementProcess.d.ts +29 -0
- package/dist/adapters/sqliteStatementProcess.js +131 -0
- package/dist/adapters/statementControl.d.ts +34 -0
- package/dist/adapters/statementControl.js +90 -0
- package/dist/adapters/storeHost.d.ts +130 -0
- package/dist/adapters/storeHost.js +13 -0
- package/dist/adapters/telemetry/drivers.d.ts +21 -0
- package/dist/adapters/telemetry/drivers.js +321 -0
- package/dist/adapters/telemetry/metrics.d.ts +63 -0
- package/dist/adapters/telemetry/metrics.js +122 -0
- package/dist/adapters/telemetry/otlp.d.ts +12 -0
- package/dist/adapters/telemetry/otlp.js +320 -0
- package/dist/adapters/telemetry/otlpEncode.d.ts +48 -0
- package/dist/adapters/telemetry/otlpEncode.js +366 -0
- package/dist/adapters/telemetry/otlpEnv.d.ts +1 -0
- package/dist/adapters/telemetry/otlpEnv.js +12 -0
- package/dist/adapters/telemetry/serverTiming.d.ts +83 -0
- package/dist/adapters/telemetry/serverTiming.js +503 -0
- package/dist/adapters/telemetry/start.d.ts +10 -0
- package/dist/adapters/telemetry/start.js +25 -0
- package/dist/adapters/telemetry/statement.d.ts +16 -0
- package/dist/adapters/telemetry/statement.js +134 -0
- package/dist/adapters/telemetry/trace.d.ts +127 -0
- package/dist/adapters/telemetry/trace.js +295 -0
- package/dist/adapters/writeAhead.d.ts +27 -0
- package/dist/adapters/writeAhead.js +46 -0
- package/dist/adapters/writeAttribution.d.ts +18 -0
- package/dist/adapters/writeAttribution.js +23 -0
- package/dist/adapters/writeCapture.d.ts +73 -0
- package/dist/adapters/writeCapture.js +20 -0
- package/dist/adapters/writeLanes.d.ts +94 -0
- package/dist/adapters/writeLanes.js +232 -0
- package/dist/engine.d.ts +15 -0
- package/dist/engine.js +13 -0
- package/dist/server/auth/credentials.d.ts +61 -0
- package/dist/server/auth/credentials.js +260 -0
- package/dist/server/cacheService.d.ts +50 -0
- package/dist/server/cacheService.js +110 -0
- package/dist/server/cli/args.d.ts +176 -0
- package/dist/server/cli/args.js +342 -0
- package/dist/server/cli/bin.d.ts +5 -0
- package/dist/server/cli/bin.js +66 -0
- package/dist/server/cli/browser.d.ts +15 -0
- package/dist/server/cli/browser.js +37 -0
- package/dist/server/cli/config.d.ts +50 -0
- package/dist/server/cli/config.js +206 -0
- package/dist/server/cli/startup.d.ts +36 -0
- package/dist/server/cli/startup.js +128 -0
- package/dist/server/cli/startupOptions.d.ts +63 -0
- package/dist/server/cli/startupOptions.js +143 -0
- package/dist/server/cli/subcommand.d.ts +28 -0
- package/dist/server/cli/subcommand.js +32 -0
- package/dist/server/cli/usage.d.ts +13 -0
- package/dist/server/cli/usage.js +31 -0
- package/dist/server/clientHttp.d.ts +184 -0
- package/dist/server/clientHttp.js +700 -0
- package/dist/server/clientSurface.d.ts +128 -0
- package/dist/server/clientSurface.js +182 -0
- package/dist/server/columnGrants.d.ts +103 -0
- package/dist/server/columnGrants.js +730 -0
- package/dist/server/compileCache.d.ts +1 -0
- package/dist/server/compileCache.js +30 -0
- package/dist/server/config/locations.d.ts +1 -0
- package/dist/server/config/locations.js +15 -0
- package/dist/server/configPaths.d.ts +7 -0
- package/dist/server/configPaths.js +34 -0
- package/dist/server/configSections.d.ts +64 -0
- package/dist/server/configSections.js +72 -0
- package/dist/server/connectionRedaction.d.ts +30 -0
- package/dist/server/connectionRedaction.js +77 -0
- package/dist/server/connections.d.ts +353 -0
- package/dist/server/connections.js +978 -0
- package/dist/server/constraints.d.ts +82 -0
- package/dist/server/constraints.js +169 -0
- package/dist/server/demo.d.ts +9 -0
- package/dist/server/demo.js +554 -0
- package/dist/server/devclient.d.ts +108 -0
- package/dist/server/devclient.js +361 -0
- package/dist/server/evidence.d.ts +55 -0
- package/dist/server/evidence.js +323 -0
- package/dist/server/hiddenColumns.d.ts +32 -0
- package/dist/server/hiddenColumns.js +238 -0
- package/dist/server/http/baselineHeaders.d.ts +24 -0
- package/dist/server/http/baselineHeaders.js +12 -0
- package/dist/server/http/captured.d.ts +35 -0
- package/dist/server/http/captured.js +73 -0
- package/dist/server/http/clock.d.ts +1 -0
- package/dist/server/http/clock.js +14 -0
- package/dist/server/http/connectionSource.d.ts +4 -0
- package/dist/server/http/connectionSource.js +48 -0
- package/dist/server/http/context.d.ts +189 -0
- package/dist/server/http/context.js +11 -0
- package/dist/server/http/crawlerText.d.ts +15 -0
- package/dist/server/http/crawlerText.js +32 -0
- package/dist/server/http/dataRoutes.d.ts +88 -0
- package/dist/server/http/dataRoutes.js +137 -0
- package/dist/server/http/door.d.ts +57 -0
- package/dist/server/http/door.js +39 -0
- package/dist/server/http/exportRoute.d.ts +15 -0
- package/dist/server/http/exportRoute.js +320 -0
- package/dist/server/http/firstPaint.d.ts +108 -0
- package/dist/server/http/firstPaint.js +262 -0
- package/dist/server/http/httpOperationRoutes.d.ts +11 -0
- package/dist/server/http/httpOperationRoutes.js +50 -0
- package/dist/server/http/pageReads.d.ts +20 -0
- package/dist/server/http/pageReads.js +205 -0
- package/dist/server/http/pageRoutes.d.ts +39 -0
- package/dist/server/http/pageRoutes.js +291 -0
- package/dist/server/http/probes.d.ts +22 -0
- package/dist/server/http/probes.js +27 -0
- package/dist/server/http/rateLimit.d.ts +131 -0
- package/dist/server/http/rateLimit.js +351 -0
- package/dist/server/http/readRoutes.d.ts +9 -0
- package/dist/server/http/readRoutes.js +131 -0
- package/dist/server/http/readRouting.d.ts +20 -0
- package/dist/server/http/readRouting.js +80 -0
- package/dist/server/http/recordCompose.d.ts +67 -0
- package/dist/server/http/recordCompose.js +167 -0
- package/dist/server/http/recordWrites.d.ts +89 -0
- package/dist/server/http/recordWrites.js +298 -0
- package/dist/server/http/refusalReport.d.ts +38 -0
- package/dist/server/http/refusalReport.js +63 -0
- package/dist/server/http/reply.d.ts +130 -0
- package/dist/server/http/reply.js +394 -0
- package/dist/server/http/requestOrigin.d.ts +11 -0
- package/dist/server/http/requestOrigin.js +8 -0
- package/dist/server/http/router.d.ts +45 -0
- package/dist/server/http/router.js +22 -0
- package/dist/server/http/serverCore.d.ts +68 -0
- package/dist/server/http/serverCore.js +177 -0
- package/dist/server/http/traceRequest.d.ts +30 -0
- package/dist/server/http/traceRequest.js +224 -0
- package/dist/server/http/trust.d.ts +261 -0
- package/dist/server/http/trust.js +472 -0
- package/dist/server/http/writeRefusal.d.ts +33 -0
- package/dist/server/http/writeRefusal.js +24 -0
- package/dist/server/httpConnection.d.ts +49 -0
- package/dist/server/httpConnection.js +170 -0
- package/dist/server/impact.d.ts +55 -0
- package/dist/server/impact.js +47 -0
- package/dist/server/journal.d.ts +134 -0
- package/dist/server/journal.js +398 -0
- package/dist/server/keysetReadHttp.d.ts +52 -0
- package/dist/server/keysetReadHttp.js +85 -0
- package/dist/server/layouts.d.ts +49 -0
- package/dist/server/layouts.js +192 -0
- package/dist/server/migrate/cli.d.ts +55 -0
- package/dist/server/migrate/cli.js +517 -0
- package/dist/server/migrate/database.d.ts +37 -0
- package/dist/server/migrate/database.js +247 -0
- package/dist/server/migrate/desired.d.ts +76 -0
- package/dist/server/migrate/desired.js +292 -0
- package/dist/server/migrate/files.d.ts +34 -0
- package/dist/server/migrate/files.js +141 -0
- package/dist/server/migrate/flyway.d.ts +7 -0
- package/dist/server/migrate/flyway.js +69 -0
- package/dist/server/migrate/history.d.ts +70 -0
- package/dist/server/migrate/history.js +211 -0
- package/dist/server/migrate/runner.d.ts +100 -0
- package/dist/server/migrate/runner.js +409 -0
- package/dist/server/migrate/snapshot.d.ts +30 -0
- package/dist/server/migrate/snapshot.js +239 -0
- package/dist/server/migrate/target.d.ts +33 -0
- package/dist/server/migrate/target.js +82 -0
- package/dist/server/openapiDraft.d.ts +25 -0
- package/dist/server/openapiDraft.js +171 -0
- package/dist/server/operations/diagnostics.d.ts +101 -0
- package/dist/server/operations/diagnostics.js +284 -0
- package/dist/server/operations/requestMetrics.d.ts +33 -0
- package/dist/server/operations/requestMetrics.js +94 -0
- package/dist/server/packageVersion.d.ts +1 -0
- package/dist/server/packageVersion.js +11 -0
- package/dist/server/poolConfig.d.ts +34 -0
- package/dist/server/poolConfig.js +114 -0
- package/dist/server/product.d.ts +20 -0
- package/dist/server/product.js +12 -0
- package/dist/server/recordHistoryOperations.d.ts +39 -0
- package/dist/server/recordHistoryOperations.js +43 -0
- package/dist/server/recordWriteOperations.d.ts +111 -0
- package/dist/server/recordWriteOperations.js +329 -0
- package/dist/server/resourceReadHttp.d.ts +81 -0
- package/dist/server/resourceReadHttp.js +606 -0
- package/dist/server/resourceReadOperations.d.ts +147 -0
- package/dist/server/resourceReadOperations.js +452 -0
- package/dist/server/scaffoldMachine.d.ts +54 -0
- package/dist/server/scaffoldMachine.js +184 -0
- package/dist/server/seed/cli.d.ts +20 -0
- package/dist/server/seed/cli.js +164 -0
- package/dist/server/seed/lexicon.d.ts +26 -0
- package/dist/server/seed/lexicon.js +585 -0
- package/dist/server/seed/seed.d.ts +70 -0
- package/dist/server/seed/seed.js +779 -0
- package/dist/server/seed/words.d.ts +21 -0
- package/dist/server/seed/words.js +164 -0
- package/dist/server/serverRequests.d.ts +6 -0
- package/dist/server/serverRequests.js +33 -0
- package/dist/server/serverTimeouts.d.ts +33 -0
- package/dist/server/serverTimeouts.js +32 -0
- package/dist/server/shapeonly.d.ts +32 -0
- package/dist/server/shapeonly.js +110 -0
- package/dist/server/startupWarnings.d.ts +32 -0
- package/dist/server/startupWarnings.js +92 -0
- package/dist/shared/addressParams.d.ts +28 -0
- package/dist/shared/addressParams.js +47 -0
- package/dist/shared/appCards.d.ts +123 -0
- package/dist/shared/appCards.js +385 -0
- package/dist/shared/appComponents.d.ts +177 -0
- package/dist/shared/appComponents.js +422 -0
- package/dist/shared/appDocuments.d.ts +43 -0
- package/dist/shared/appDocuments.js +131 -0
- package/dist/shared/appEmbeds.d.ts +21 -0
- package/dist/shared/appEmbeds.js +24 -0
- package/dist/shared/appIcons.d.ts +28 -0
- package/dist/shared/appIcons.js +223 -0
- package/dist/shared/appLinks.d.ts +17 -0
- package/dist/shared/appLinks.js +124 -0
- package/dist/shared/appListColumns.d.ts +3 -0
- package/dist/shared/appListColumns.js +66 -0
- package/dist/shared/appLocale.d.ts +36 -0
- package/dist/shared/appLocale.js +86 -0
- package/dist/shared/appMessages.d.ts +44 -0
- package/dist/shared/appMessages.js +78 -0
- package/dist/shared/appNoun.d.ts +21 -0
- package/dist/shared/appNoun.js +32 -0
- package/dist/shared/autoBucket.d.ts +98 -0
- package/dist/shared/autoBucket.js +305 -0
- package/dist/shared/autoValues.d.ts +25 -0
- package/dist/shared/autoValues.js +25 -0
- package/dist/shared/breakdown.d.ts +228 -0
- package/dist/shared/breakdown.js +557 -0
- package/dist/shared/breakdowntext.d.ts +41 -0
- package/dist/shared/breakdowntext.js +400 -0
- package/dist/shared/builtInThemes.d.ts +2 -0
- package/dist/shared/builtInThemes.js +771 -0
- package/dist/shared/chartSeparation.d.ts +11 -0
- package/dist/shared/chartSeparation.js +58 -0
- package/dist/shared/clauses.d.ts +22 -0
- package/dist/shared/clauses.js +97 -0
- package/dist/shared/columnCaption.d.ts +16 -0
- package/dist/shared/columnCaption.js +90 -0
- package/dist/shared/commandFieldPath.d.ts +2 -0
- package/dist/shared/commandFieldPath.js +7 -0
- package/dist/shared/commandWire.d.ts +26 -0
- package/dist/shared/commandWire.js +41 -0
- package/dist/shared/computed.d.ts +161 -0
- package/dist/shared/computed.js +378 -0
- package/dist/shared/computedParse.d.ts +13 -0
- package/dist/shared/computedParse.js +278 -0
- package/dist/shared/computedValue.d.ts +47 -0
- package/dist/shared/computedValue.js +191 -0
- package/dist/shared/connection.d.ts +30 -0
- package/dist/shared/connection.js +1 -0
- package/dist/shared/csv.d.ts +20 -0
- package/dist/shared/csv.js +63 -0
- package/dist/shared/dashLayout.d.ts +30 -0
- package/dist/shared/dashLayout.js +132 -0
- package/dist/shared/dashboardAsks.d.ts +93 -0
- package/dist/shared/dashboardAsks.js +129 -0
- package/dist/shared/dashboardTrend.d.ts +20 -0
- package/dist/shared/dashboardTrend.js +50 -0
- package/dist/shared/declaredReferences.d.ts +50 -0
- package/dist/shared/declaredReferences.js +202 -0
- package/dist/shared/definedFields.d.ts +63 -0
- package/dist/shared/definedFields.js +103 -0
- package/dist/shared/definedValues.d.ts +63 -0
- package/dist/shared/definedValues.js +184 -0
- package/dist/shared/displayDefaults.d.ts +135 -0
- package/dist/shared/displayDefaults.js +529 -0
- package/dist/shared/dueDate.d.ts +6 -0
- package/dist/shared/dueDate.js +6 -0
- package/dist/shared/duration.d.ts +4 -0
- package/dist/shared/duration.js +23 -0
- package/dist/shared/fileBounds.d.ts +9 -0
- package/dist/shared/fileBounds.js +9 -0
- package/dist/shared/filter.d.ts +217 -0
- package/dist/shared/filter.js +305 -0
- package/dist/shared/firstPaint.d.ts +24 -0
- package/dist/shared/firstPaint.js +33 -0
- package/dist/shared/form.d.ts +21 -0
- package/dist/shared/form.js +25 -0
- package/dist/shared/formValues.d.ts +104 -0
- package/dist/shared/formValues.js +352 -0
- package/dist/shared/funnel.d.ts +45 -0
- package/dist/shared/funnel.js +108 -0
- package/dist/shared/httpOperations.d.ts +48 -0
- package/dist/shared/httpOperations.js +9 -0
- package/dist/shared/iconGlyphs.d.ts +4 -0
- package/dist/shared/iconGlyphs.js +151 -0
- package/dist/shared/iconWeights.d.ts +3 -0
- package/dist/shared/iconWeights.js +162 -0
- package/dist/shared/imageWidths.d.ts +32 -0
- package/dist/shared/imageWidths.js +38 -0
- package/dist/shared/keysetPage.d.ts +64 -0
- package/dist/shared/keysetPage.js +161 -0
- package/dist/shared/like.d.ts +20 -0
- package/dist/shared/like.js +29 -0
- package/dist/shared/listEmpty.d.ts +12 -0
- package/dist/shared/listEmpty.js +36 -0
- package/dist/shared/listFilters.d.ts +28 -0
- package/dist/shared/listFilters.js +84 -0
- package/dist/shared/listPresentations.d.ts +199 -0
- package/dist/shared/listPresentations.js +7 -0
- package/dist/shared/listQuestion.d.ts +52 -0
- package/dist/shared/listQuestion.js +137 -0
- package/dist/shared/lookPalettes.d.ts +62 -0
- package/dist/shared/lookPalettes.js +306 -0
- package/dist/shared/maskQuoted.d.ts +24 -0
- package/dist/shared/maskQuoted.js +48 -0
- package/dist/shared/mentionLabel.d.ts +19 -0
- package/dist/shared/mentionLabel.js +38 -0
- package/dist/shared/mentionLookup.d.ts +17 -0
- package/dist/shared/mentionLookup.js +64 -0
- package/dist/shared/menuCounts.d.ts +16 -0
- package/dist/shared/menuCounts.js +74 -0
- package/dist/shared/model.d.ts +79 -0
- package/dist/shared/model.js +153 -0
- package/dist/shared/money.d.ts +44 -0
- package/dist/shared/money.js +81 -0
- package/dist/shared/moneyEntry.d.ts +7 -0
- package/dist/shared/moneyEntry.js +27 -0
- package/dist/shared/mount.d.ts +118 -0
- package/dist/shared/mount.js +248 -0
- package/dist/shared/niceTicks.d.ts +26 -0
- package/dist/shared/niceTicks.js +50 -0
- package/dist/shared/order.d.ts +59 -0
- package/dist/shared/order.js +133 -0
- package/dist/shared/page.d.ts +135 -0
- package/dist/shared/page.js +1187 -0
- package/dist/shared/pageAnatomy.d.ts +99 -0
- package/dist/shared/pageAnatomy.js +370 -0
- package/dist/shared/pageConfig.d.ts +25 -0
- package/dist/shared/pageConfig.js +1308 -0
- package/dist/shared/pageEmptyActions.d.ts +12 -0
- package/dist/shared/pageEmptyActions.js +20 -0
- package/dist/shared/pageLayouts.d.ts +72 -0
- package/dist/shared/pageLayouts.js +205 -0
- package/dist/shared/pageModel.d.ts +785 -0
- package/dist/shared/pageModel.js +121 -0
- package/dist/shared/pagePaths.d.ts +180 -0
- package/dist/shared/pagePaths.js +869 -0
- package/dist/shared/pagePlans.d.ts +52 -0
- package/dist/shared/pagePlans.js +108 -0
- package/dist/shared/pageRoutes.d.ts +9 -0
- package/dist/shared/pageRoutes.js +9 -0
- package/dist/shared/query.d.ts +166 -0
- package/dist/shared/query.js +1302 -0
- package/dist/shared/queryDates.d.ts +12 -0
- package/dist/shared/queryDates.js +101 -0
- package/dist/shared/queryOperands.d.ts +99 -0
- package/dist/shared/queryOperands.js +131 -0
- package/dist/shared/reads.d.ts +103 -0
- package/dist/shared/reads.js +154 -0
- package/dist/shared/recordLabel.d.ts +51 -0
- package/dist/shared/recordLabel.js +123 -0
- package/dist/shared/recordReadKeys.d.ts +30 -0
- package/dist/shared/recordReadKeys.js +51 -0
- package/dist/shared/recordReads.d.ts +268 -0
- package/dist/shared/recordReads.js +368 -0
- package/dist/shared/recordview.d.ts +198 -0
- package/dist/shared/recordview.js +356 -0
- package/dist/shared/referenceModel.d.ts +58 -0
- package/dist/shared/referenceModel.js +194 -0
- package/dist/shared/refusal.d.ts +64 -0
- package/dist/shared/refusal.js +144 -0
- package/dist/shared/relatedCreate.d.ts +30 -0
- package/dist/shared/relatedCreate.js +162 -0
- package/dist/shared/resourceHttp.d.ts +464 -0
- package/dist/shared/resourceHttp.js +1 -0
- package/dist/shared/richText.d.ts +85 -0
- package/dist/shared/richText.js +305 -0
- package/dist/shared/rollups.d.ts +143 -0
- package/dist/shared/rollups.js +64 -0
- package/dist/shared/rowScope.d.ts +72 -0
- package/dist/shared/rowScope.js +376 -0
- package/dist/shared/runtimeTables.d.ts +44 -0
- package/dist/shared/runtimeTables.js +79 -0
- package/dist/shared/schema.d.ts +523 -0
- package/dist/shared/schema.js +627 -0
- package/dist/shared/schematext.d.ts +38 -0
- package/dist/shared/schematext.js +101 -0
- package/dist/shared/scopeCatalog.d.ts +29 -0
- package/dist/shared/scopeCatalog.js +468 -0
- package/dist/shared/servedApp.d.ts +681 -0
- package/dist/shared/servedApp.js +45 -0
- package/dist/shared/sessionLease.d.ts +34 -0
- package/dist/shared/sessionLease.js +3 -0
- package/dist/shared/shape.d.ts +55 -0
- package/dist/shared/shape.js +168 -0
- package/dist/shared/slug.d.ts +1 -0
- package/dist/shared/slug.js +12 -0
- package/dist/shared/sortText.d.ts +14 -0
- package/dist/shared/sortText.js +26 -0
- package/dist/shared/sqlRelation.d.ts +4 -0
- package/dist/shared/sqlRelation.js +8 -0
- package/dist/shared/sqlsaved.d.ts +44 -0
- package/dist/shared/sqlsaved.js +63 -0
- package/dist/shared/stitchedPaths.d.ts +27 -0
- package/dist/shared/stitchedPaths.js +38 -0
- package/dist/shared/structuredFilter.d.ts +22 -0
- package/dist/shared/structuredFilter.js +1 -0
- package/dist/shared/subtitlePath.d.ts +20 -0
- package/dist/shared/subtitlePath.js +24 -0
- package/dist/shared/suggest.d.ts +18 -0
- package/dist/shared/suggest.js +59 -0
- package/dist/shared/tableSizing.d.ts +4 -0
- package/dist/shared/tableSizing.js +9 -0
- package/dist/shared/tagLists.d.ts +57 -0
- package/dist/shared/tagLists.js +34 -0
- package/dist/shared/textRules.d.ts +54 -0
- package/dist/shared/textRules.js +133 -0
- package/dist/shared/theme.d.ts +94 -0
- package/dist/shared/theme.js +800 -0
- package/dist/shared/themeColor.d.ts +34 -0
- package/dist/shared/themeColor.js +109 -0
- package/dist/shared/themeFaces.d.ts +30 -0
- package/dist/shared/themeFaces.js +42 -0
- package/dist/shared/themeInk.d.ts +20 -0
- package/dist/shared/themeInk.js +52 -0
- package/dist/shared/themeLooks.d.ts +9 -0
- package/dist/shared/themeLooks.js +572 -0
- package/dist/shared/themeParts.d.ts +26 -0
- package/dist/shared/themeParts.js +71 -0
- package/dist/shared/themePartsCheck.d.ts +21 -0
- package/dist/shared/themePartsCheck.js +91 -0
- package/dist/shared/themePresets.d.ts +85 -0
- package/dist/shared/themePresets.js +139 -0
- package/dist/shared/themeRecipeWords.d.ts +156 -0
- package/dist/shared/themeRecipeWords.js +156 -0
- package/dist/shared/themeRecipes.d.ts +213 -0
- package/dist/shared/themeRecipes.js +234 -0
- package/dist/shared/themeResolve.d.ts +55 -0
- package/dist/shared/themeResolve.js +52 -0
- package/dist/shared/themeTokens.d.ts +107 -0
- package/dist/shared/themeTokens.js +116 -0
- package/dist/shared/themeType.d.ts +38 -0
- package/dist/shared/themeType.js +205 -0
- package/dist/shared/unitWord.d.ts +4 -0
- package/dist/shared/unitWord.js +37 -0
- package/dist/shared/view.d.ts +195 -0
- package/dist/shared/view.js +987 -0
- package/dist/shared/viewLabels.d.ts +47 -0
- package/dist/shared/viewLabels.js +459 -0
- package/dist/shared/viewPaths.d.ts +248 -0
- package/dist/shared/viewPaths.js +294 -0
- package/dist/shared/viewtext.d.ts +57 -0
- package/dist/shared/viewtext.js +282 -0
- package/dist/shared/vocabulary.d.ts +71 -0
- package/dist/shared/vocabulary.js +249 -0
- package/dist/shared/weekStart.d.ts +7 -0
- package/dist/shared/weekStart.js +36 -0
- package/mark.svg +1 -0
- package/package.json +261 -4
- package/schema/model.d.ts +298 -0
- package/schema/theme.d.ts +587 -0
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
import { LOOK_PALETTES, paletteColors } from './lookPalettes.js';
|
|
2
|
+
/** The system's own interface face on every machine; nothing is fetched and
|
|
3
|
+
nothing is bundled. A look's identity is its type roles: size, weight and tracking. */
|
|
4
|
+
const SANS = 'ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif';
|
|
5
|
+
const HELVETICA = '"Helvetica Neue", Helvetica, Arial, ui-sans-serif, sans-serif';
|
|
6
|
+
/** Lumen's face: Inter, shipped with Lumen's sheet (lumenLook.css) and so
|
|
7
|
+
fetched only by a page wearing it, never in the first paint; then Arial
|
|
8
|
+
cut to Inter's measure while it arrives (docs/design.md, Faces). */
|
|
9
|
+
const INTER = `Inter, "Inter Fallback", ${SANS}`;
|
|
10
|
+
/** Workshop's faces: Barlow for the interface and data, its semi-condensed bold for titles and labels, shipped with
|
|
11
|
+
Workshop's sheet (workshopLook.css) and fetched only by a page wearing it; each with Arial cut to its measure
|
|
12
|
+
while it arrives. */
|
|
13
|
+
const BARLOW = `Barlow, "Barlow Fallback", "Helvetica Neue", Arial, sans-serif`;
|
|
14
|
+
const BARLOW_CONDENSED = `"Barlow Semi Condensed", "Barlow Semi Condensed Fallback", Barlow, "Arial Narrow", sans-serif`;
|
|
15
|
+
/** Ledger's figures and labels: IBM Plex Mono, shipped with Ledger's sheet (ledgerLook.css) and fetched only by a page
|
|
16
|
+
wearing it; the platform's monospace stands in until it arrives. */
|
|
17
|
+
const PLEX_MONO = `'IBM Plex Mono', ui-monospace, Menlo, monospace`;
|
|
18
|
+
/** Spec colors over spec colors: a group (`nav`, `status`, `rules`) role by role, a series whole. */
|
|
19
|
+
function overColors(base, top) {
|
|
20
|
+
return {
|
|
21
|
+
...base,
|
|
22
|
+
...top,
|
|
23
|
+
...(base.nav || top.nav ? { nav: { ...base.nav, ...top.nav } } : {}),
|
|
24
|
+
...(base.status || top.status ? { status: { ...base.status, ...top.status } } : {}),
|
|
25
|
+
...(base.rules || top.rules ? { rules: { ...base.rules, ...top.rules } } : {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** A look with every palette: its own colors are its default palette's, and each palette is the same hue as it is in
|
|
29
|
+
every other look (scripts/theme-presets.mjs keeps only what a palette changes). */
|
|
30
|
+
function withPalettes(look) {
|
|
31
|
+
const series = (mode) => (look.colors[mode].chart ?? []).filter((color) => typeof color === 'string');
|
|
32
|
+
const worn = (id, mode) => overColors(look.colors[mode], paletteColors(look.id, LOOK_PALETTES.find((palette) => palette.id === id), mode, series(mode)));
|
|
33
|
+
return {
|
|
34
|
+
...look,
|
|
35
|
+
colors: { light: worn(look.defaultPalette, 'light'), dark: worn(look.defaultPalette, 'dark') },
|
|
36
|
+
palettes: LOOK_PALETTES.map((palette) => ({
|
|
37
|
+
id: palette.id,
|
|
38
|
+
label: palette.label,
|
|
39
|
+
light: worn(palette.id, 'light'),
|
|
40
|
+
dark: worn(palette.id, 'dark'),
|
|
41
|
+
})),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** The built-in looks: Workshop, the default an App wears, then Lumen, Mono, Sage and Ledger.
|
|
45
|
+
Each is written as an App would write its own (`defineTheme`,
|
|
46
|
+
packages/engine/schema/theme.d.ts): colours by purpose, a shape, a type and a pick from the
|
|
47
|
+
recipe menu (themeBuild.ts), and built by the same `buildTheme` an App's
|
|
48
|
+
theme goes through once `compileTheme` has checked it. A look the menu
|
|
49
|
+
could not say would extend the menu, never be special-cased. An App's
|
|
50
|
+
theme `extends` one of them, or none (docs/theming.md shows a few that
|
|
51
|
+
extend none). Every look draws its content on a white or near-white
|
|
52
|
+
ground (Sage's white panels on cream are the warm page) and keeps its
|
|
53
|
+
colour for the bar, the accent and the current item; captions take an ink
|
|
54
|
+
darker than the hairlines and still quieter than the text. `lineControl`
|
|
55
|
+
is a form control's edge, at 3:1 on surface, ground and raised (WCAG
|
|
56
|
+
1.4.11): the look's lineStrong where that already clears it, else one step
|
|
57
|
+
toward the ink.
|
|
58
|
+
|
|
59
|
+
The title weight (`type.roles.title.weight`) is never past 700: a heavier
|
|
60
|
+
ask resolved a book face to its Black cut, a masthead where a title was
|
|
61
|
+
meant, and broke the record's head. Mono titles at 700; Lumen's and Sage's
|
|
62
|
+
softer titles at 600; Workshop's condensed capitals at 700.
|
|
63
|
+
|
|
64
|
+
Each wears every palette in lookPalettes.ts; its own colors are its
|
|
65
|
+
default palette's (Workshop's Safety orange, Lumen's Cobalt, Mono's and
|
|
66
|
+
Sage's Ink, which is each one's own ink, Ledger's Emerald, drawn in the
|
|
67
|
+
book's own deep green). */
|
|
68
|
+
const HOUSE = [
|
|
69
|
+
{
|
|
70
|
+
// The desk as a workbench, ported from a field report's theme: warm paper,
|
|
71
|
+
// ink-black type and fills, and one restrained hue — Safety orange unless
|
|
72
|
+
// a palette says another. The hue reaches only the marks a reader takes
|
|
73
|
+
// for the brand color: the primary verb (the ink's words on it, as a
|
|
74
|
+
// hazard tag prints them), links and the current tab's rule, a 3px marker
|
|
75
|
+
// beside the menu's ink block (like a tool's slot on a pegboard), the
|
|
76
|
+
// focus ring, a checked box and the first chart series. Fills, rules and
|
|
77
|
+
// selection stay the ink, and nothing is tinted. Titles, section heads
|
|
78
|
+
// and labels are Barlow's semi-condensed bold in capitals, the rest
|
|
79
|
+
// Barlow; heavy 2px ink rules part the sections and stand under a
|
|
80
|
+
// table's heads, corners are near-square and nothing floats; the menu
|
|
81
|
+
// sits on a faint grain (workshopLook.css; docs/design.md, Workshop).
|
|
82
|
+
id: 'workshop',
|
|
83
|
+
label: 'Workshop',
|
|
84
|
+
defaultPalette: 'safety',
|
|
85
|
+
colors: {
|
|
86
|
+
light: {
|
|
87
|
+
ground: '#f2ede3',
|
|
88
|
+
surface: '#faf8f3',
|
|
89
|
+
raised: '#ece6da',
|
|
90
|
+
ink: '#1b1813',
|
|
91
|
+
inkMuted: '#4f483d',
|
|
92
|
+
inkSubtle: '#5f574b',
|
|
93
|
+
line: '#ddd5c6',
|
|
94
|
+
lineStrong: '#8b8274',
|
|
95
|
+
lineControl: '#7d7466',
|
|
96
|
+
accentInk: '#1b1813',
|
|
97
|
+
accentSoft: '#e7dfd0',
|
|
98
|
+
primary: '#1b1813',
|
|
99
|
+
link: '#1b1813',
|
|
100
|
+
shadow: '#3a3020',
|
|
101
|
+
status: { good: '#106b38', warning: '#934a06', critical: '#c52a2a', info: '#2f5578' },
|
|
102
|
+
nav: {
|
|
103
|
+
ground: '#ebe5d9',
|
|
104
|
+
ink: '#1b1813',
|
|
105
|
+
muted: '#4f483d',
|
|
106
|
+
line: '#d8cfbe',
|
|
107
|
+
accent: '#1b1813',
|
|
108
|
+
},
|
|
109
|
+
rules: { section: '#1b1813', head: '#1b1813' },
|
|
110
|
+
chart: ['#2b2620', '#9a6cf7', '#0e9a6c', '#d97706', '#e0428a', '#0e8fb0', '#a3510b', '#94a3b8'],
|
|
111
|
+
},
|
|
112
|
+
dark: {
|
|
113
|
+
ground: '#15130f',
|
|
114
|
+
surface: '#1d1a15',
|
|
115
|
+
raised: '#26221c',
|
|
116
|
+
ink: '#efe9de',
|
|
117
|
+
inkMuted: '#c2b9aa',
|
|
118
|
+
inkSubtle: '#a59c8d',
|
|
119
|
+
line: '#2f2a22',
|
|
120
|
+
lineStrong: '#6d6555',
|
|
121
|
+
lineControl: '#7a7262',
|
|
122
|
+
accentInk: '#efe9de',
|
|
123
|
+
accentSoft: '#2c261e',
|
|
124
|
+
primary: '#efe9de',
|
|
125
|
+
link: '#efe9de',
|
|
126
|
+
status: { good: '#4ade80', warning: '#fbbf24', critical: '#f87171', info: '#91a8ff' },
|
|
127
|
+
nav: {
|
|
128
|
+
ground: '#110f0c',
|
|
129
|
+
ink: '#efe9de',
|
|
130
|
+
muted: '#b3aa9b',
|
|
131
|
+
line: '#26221c',
|
|
132
|
+
accent: '#efe9de',
|
|
133
|
+
},
|
|
134
|
+
rules: { section: '#8a8170', head: '#8a8170' },
|
|
135
|
+
chart: ['#d9d0c0', '#9a78ec', '#12a678', '#c88317', '#e0559b', '#1597b9', '#d26b3b', '#6b7694'],
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
shape: {
|
|
139
|
+
radius: { control: '2px', field: '2px', pill: '2px', panel: '2px' },
|
|
140
|
+
elevation: 'flat',
|
|
141
|
+
border: { panel: '1px', rule: '2px' },
|
|
142
|
+
},
|
|
143
|
+
type: {
|
|
144
|
+
font: { ui: BARLOW, data: BARLOW, heading: BARLOW_CONDENSED },
|
|
145
|
+
base: '14px',
|
|
146
|
+
roles: {
|
|
147
|
+
title: { face: 'heading', size: '30px', weight: 700, case: 'upper', tracking: '0.01em', leading: 1.1 },
|
|
148
|
+
heading: { face: 'heading', size: '22px', weight: 700, case: 'upper', tracking: '0.01em' },
|
|
149
|
+
section: { face: 'heading', size: '15px', weight: 700, case: 'upper', tracking: '0.04em' },
|
|
150
|
+
label: { face: 'heading', weight: 700, case: 'upper', tracking: '0.06em' },
|
|
151
|
+
data: { features: ['tnum'] },
|
|
152
|
+
figure: { face: 'heading', size: '38px', weight: 700, features: ['tnum'] },
|
|
153
|
+
nav: { weight: 500 },
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
surface: { nav: { kind: 'grain' } },
|
|
157
|
+
// Compact, as the other looks: see Mono's density.
|
|
158
|
+
density: 'compact',
|
|
159
|
+
rhythm: 'house',
|
|
160
|
+
recipes: {
|
|
161
|
+
nav: 'slot',
|
|
162
|
+
bar: 'ruled',
|
|
163
|
+
tabs: 'rule',
|
|
164
|
+
windows: 'segmented',
|
|
165
|
+
stat: 'ruled',
|
|
166
|
+
section: 'open',
|
|
167
|
+
fields: 'open',
|
|
168
|
+
table: 'open',
|
|
169
|
+
status: 'dot',
|
|
170
|
+
board: 'ruled',
|
|
171
|
+
chart: 'plain',
|
|
172
|
+
buttons: 'keyed',
|
|
173
|
+
links: 'plain',
|
|
174
|
+
rules: 'ink',
|
|
175
|
+
avatar: 'plain',
|
|
176
|
+
workflow: 'markers',
|
|
177
|
+
banner: 'plain',
|
|
178
|
+
steps: 'strip',
|
|
179
|
+
lanes: 'tag',
|
|
180
|
+
header: 'plain',
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
// Flat, calm and modern, with character in its details: a warm, faintly
|
|
185
|
+
// tinted shell around white working surfaces, elevation only on what
|
|
186
|
+
// floats, one confident accent for the primary action, the current room,
|
|
187
|
+
// selection, focus, the main chart series and the current step; metrics
|
|
188
|
+
// in a divided strip, fields in a property rail, tables on hairlines
|
|
189
|
+
// anchored on the record's name, statuses as a dot and their word, a
|
|
190
|
+
// workflow as a track of segments, charts as a line in one hue's steps
|
|
191
|
+
// (lumenLook.css; docs/design.md, Lumen, for its exceptions). The chart
|
|
192
|
+
// palette keeps blue, violet, green, amber and pink at steps the dataviz
|
|
193
|
+
// checks pass, light and dark. Inter, shipped with the look. Its own
|
|
194
|
+
// blue is Cobalt; every other palette changes the accent family only —
|
|
195
|
+
// grounds, ink and structure stay Lumen's.
|
|
196
|
+
id: 'lumen',
|
|
197
|
+
label: 'Lumen',
|
|
198
|
+
defaultPalette: 'cobalt',
|
|
199
|
+
colors: {
|
|
200
|
+
light: {
|
|
201
|
+
ground: '#ffffff',
|
|
202
|
+
surface: '#ffffff',
|
|
203
|
+
raised: '#f5f4f2',
|
|
204
|
+
ink: '#1c1a17',
|
|
205
|
+
inkMuted: '#5c5852',
|
|
206
|
+
inkSubtle: '#726c64',
|
|
207
|
+
line: '#ebe8e4',
|
|
208
|
+
lineStrong: '#8f8a83',
|
|
209
|
+
lineControl: '#8f8a83',
|
|
210
|
+
primary: '#1c1a17',
|
|
211
|
+
onPrimary: '#ffffff',
|
|
212
|
+
status: {
|
|
213
|
+
good: '#127a40',
|
|
214
|
+
warning: '#a65308',
|
|
215
|
+
critical: '#c52a2a',
|
|
216
|
+
info: '#2d4fd6',
|
|
217
|
+
},
|
|
218
|
+
nav: {
|
|
219
|
+
ground: '#fbfaf9',
|
|
220
|
+
ink: '#1c1a17',
|
|
221
|
+
muted: '#5c5852',
|
|
222
|
+
line: '#ebe8e4',
|
|
223
|
+
},
|
|
224
|
+
rules: {
|
|
225
|
+
section: '#ebe8e4',
|
|
226
|
+
head: '#ebe8e4',
|
|
227
|
+
},
|
|
228
|
+
chart: ['#2557e0', '#9a6cf7', '#0e9a6c', '#d97706', '#e0428a', '#0e8fb0', '#a3510b', '#94a3b8'],
|
|
229
|
+
},
|
|
230
|
+
dark: {
|
|
231
|
+
ground: '#121110',
|
|
232
|
+
surface: '#161514',
|
|
233
|
+
raised: '#201f1d',
|
|
234
|
+
ink: '#eeece8',
|
|
235
|
+
inkMuted: '#b8b3ab',
|
|
236
|
+
inkSubtle: '#9f9a92',
|
|
237
|
+
line: '#2d2b27',
|
|
238
|
+
lineStrong: '#726d65',
|
|
239
|
+
lineControl: '#726d65',
|
|
240
|
+
primary: '#eeece8',
|
|
241
|
+
onPrimary: '#121110',
|
|
242
|
+
status: {
|
|
243
|
+
good: '#4ade80',
|
|
244
|
+
warning: '#fbbf24',
|
|
245
|
+
critical: '#f87171',
|
|
246
|
+
info: '#91a8ff',
|
|
247
|
+
},
|
|
248
|
+
nav: {
|
|
249
|
+
ground: '#141312',
|
|
250
|
+
ink: '#eeece8',
|
|
251
|
+
muted: '#aaa59d',
|
|
252
|
+
line: '#262422',
|
|
253
|
+
},
|
|
254
|
+
rules: {
|
|
255
|
+
section: '#2d2b27',
|
|
256
|
+
head: '#2d2b27',
|
|
257
|
+
},
|
|
258
|
+
chart: ['#3559e6', '#9a78ec', '#12a678', '#c88317', '#e0559b', '#1597b9', '#d26b3b', '#6b7694'],
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
shape: { radius: { control: '8px', field: '8px' }, elevation: 'raised', border: { rule: '1px' } },
|
|
262
|
+
/* The page's name anchors it: 28px, tight; a list's name a step under, and a section's heading 16px, so the
|
|
263
|
+
page reads title, section, row at a glance. On a flat page the type is the hierarchy the boxes used to be. */
|
|
264
|
+
type: {
|
|
265
|
+
font: { ui: INTER, data: INTER, heading: INTER },
|
|
266
|
+
roles: {
|
|
267
|
+
title: { size: '28px', weight: 600, tracking: '-0.02em' },
|
|
268
|
+
heading: { size: '24px', tracking: '-0.018em' },
|
|
269
|
+
section: { size: '16px', weight: 600, tracking: '-0.01em' },
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
density: 'compact',
|
|
273
|
+
recipes: {
|
|
274
|
+
nav: 'pill',
|
|
275
|
+
bar: 'airy',
|
|
276
|
+
tabs: 'underline',
|
|
277
|
+
windows: 'lifted',
|
|
278
|
+
stat: 'divided',
|
|
279
|
+
section: 'open',
|
|
280
|
+
fields: 'rail',
|
|
281
|
+
table: 'quiet',
|
|
282
|
+
status: 'quiet',
|
|
283
|
+
board: 'strip',
|
|
284
|
+
chart: 'line',
|
|
285
|
+
buttons: 'raised',
|
|
286
|
+
rules: 'hairline',
|
|
287
|
+
avatar: 'round',
|
|
288
|
+
workflow: 'markers',
|
|
289
|
+
banner: 'plain',
|
|
290
|
+
steps: 'strip',
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
// Black and white, and structure: square corners, rules in the ink over
|
|
295
|
+
// grey hairlines, stat figures and labels in a monospace
|
|
296
|
+
// (themeFamilies.css), the current tab inverted, colour left to status.
|
|
297
|
+
// Data stays in the sans, as in every look.
|
|
298
|
+
id: 'mono',
|
|
299
|
+
label: 'Mono',
|
|
300
|
+
defaultPalette: 'ink',
|
|
301
|
+
colors: {
|
|
302
|
+
light: {
|
|
303
|
+
ground: '#ffffff',
|
|
304
|
+
surface: '#ffffff',
|
|
305
|
+
raised: '#f2f2f2',
|
|
306
|
+
ink: '#000000',
|
|
307
|
+
inkMuted: '#333333',
|
|
308
|
+
inkSubtle: '#555555',
|
|
309
|
+
line: '#d4d4d4',
|
|
310
|
+
lineStrong: '#000000',
|
|
311
|
+
lineControl: '#000000',
|
|
312
|
+
accentSoft: '#ebebeb',
|
|
313
|
+
status: {
|
|
314
|
+
good: '#0a6b3a',
|
|
315
|
+
warning: '#7a5200',
|
|
316
|
+
critical: '#b3261e',
|
|
317
|
+
info: '#0a4fc2',
|
|
318
|
+
},
|
|
319
|
+
nav: {
|
|
320
|
+
ground: '#ffffff',
|
|
321
|
+
ink: '#000000',
|
|
322
|
+
muted: '#333333',
|
|
323
|
+
line: '#000000',
|
|
324
|
+
},
|
|
325
|
+
chart: ['#000000', '#6b6b6b', '#333333', '#8e8e8e', '#505050', '#a8a8a8', '#1c1c1c', '#c8c8c8'],
|
|
326
|
+
},
|
|
327
|
+
dark: {
|
|
328
|
+
ground: '#000000',
|
|
329
|
+
surface: '#0a0a0a',
|
|
330
|
+
raised: '#161616',
|
|
331
|
+
ink: '#ffffff',
|
|
332
|
+
inkMuted: '#d0d0d0',
|
|
333
|
+
inkSubtle: '#a8a8a8',
|
|
334
|
+
line: '#3a3a3a',
|
|
335
|
+
lineStrong: '#ffffff',
|
|
336
|
+
lineControl: '#ffffff',
|
|
337
|
+
accentSoft: '#262626',
|
|
338
|
+
status: {
|
|
339
|
+
good: '#6fdc9c',
|
|
340
|
+
warning: '#f2c94c',
|
|
341
|
+
critical: '#ff8a80',
|
|
342
|
+
info: '#8fb8ff',
|
|
343
|
+
},
|
|
344
|
+
nav: {
|
|
345
|
+
ground: '#000000',
|
|
346
|
+
ink: '#ffffff',
|
|
347
|
+
muted: '#bdbdbd',
|
|
348
|
+
line: '#ffffff',
|
|
349
|
+
},
|
|
350
|
+
chart: ['#ffffff', '#8a8a8a', '#cccccc', '#6a6a6a', '#a8a8a8', '#4a4a4a', '#e6e6e6', '#333333'],
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
shape: { radius: { control: '0px', field: '0px' }, elevation: 'flat' },
|
|
354
|
+
/* Figures and the labels that make the look in the platform's monospace, the labels and the bar's entries in
|
|
355
|
+
capitals: not data, which a reader who wants monospace picks in Preferences. */
|
|
356
|
+
type: {
|
|
357
|
+
font: { ui: HELVETICA, data: HELVETICA, heading: HELVETICA },
|
|
358
|
+
roles: {
|
|
359
|
+
title: { size: '30px', weight: 700 },
|
|
360
|
+
label: { face: 'code', case: 'upper' },
|
|
361
|
+
nav: { face: 'code', case: 'upper' },
|
|
362
|
+
figure: { face: 'code', weight: 700 },
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
/* Compact, as Lumen: these looks' comfortable cut zooms by 1.12, and a wide list (Lintel's rent roll at a 1280px
|
|
366
|
+
desk) then overflowed sideways. A reader's own density still wins. */
|
|
367
|
+
density: 'compact',
|
|
368
|
+
recipes: { nav: 'inverted', bar: 'ruled', tabs: 'inverted', stat: 'framed', links: 'underline' },
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
// A soft workspace, recreated as it is from a reference the maintainer
|
|
372
|
+
// chose: warm cream grounds with the content on white panels (a soft
|
|
373
|
+
// shadow, a larger radius), near-black ink for text and calls to action,
|
|
374
|
+
// sage green for the charts and good news, a warm tint for what is chosen
|
|
375
|
+
// and meaning in soft tinted pills (sageLook.css; docs/design.md,
|
|
376
|
+
// Sage, for its exceptions). The one look whose content ground is warm.
|
|
377
|
+
id: 'sage',
|
|
378
|
+
label: 'Sage',
|
|
379
|
+
defaultPalette: 'ink',
|
|
380
|
+
colors: {
|
|
381
|
+
light: {
|
|
382
|
+
ground: '#f4f2ec',
|
|
383
|
+
surface: '#fdfcf9',
|
|
384
|
+
raised: '#efece5',
|
|
385
|
+
ink: '#1f2320',
|
|
386
|
+
inkMuted: '#484d48',
|
|
387
|
+
inkSubtle: '#5d625c',
|
|
388
|
+
line: '#e6e2d8',
|
|
389
|
+
lineStrong: '#837e72',
|
|
390
|
+
lineControl: '#837e72',
|
|
391
|
+
accentSoft: '#ebe8df',
|
|
392
|
+
status: {
|
|
393
|
+
good: '#23784a',
|
|
394
|
+
warning: '#8f5800',
|
|
395
|
+
critical: '#b83a2c',
|
|
396
|
+
info: '#2f5fa3',
|
|
397
|
+
},
|
|
398
|
+
/* The menu is a panel on the cream page, as a section is: white beside the
|
|
399
|
+
page, and a bar that holds the menu (placement top) white above it. */
|
|
400
|
+
nav: {
|
|
401
|
+
ground: '#fdfcf9',
|
|
402
|
+
ink: '#1f2320',
|
|
403
|
+
muted: '#565b55',
|
|
404
|
+
line: '#e6e2d8',
|
|
405
|
+
},
|
|
406
|
+
// Ordered so neighbors differ for a red-green reader too (themeCheck.ts), and with one green among the
|
|
407
|
+
// first four: a second green and a teal there made a five-way breakdown read as three. The dark series
|
|
408
|
+
// are the same hues in the same order, so a series keeps its color across modes.
|
|
409
|
+
chart: ['#3a8560', '#7b61c4', '#c4573f', '#b25c8c', '#a8781f', '#2f8f89', '#3f76c2', '#8a8578'],
|
|
410
|
+
},
|
|
411
|
+
dark: {
|
|
412
|
+
ground: '#141613',
|
|
413
|
+
surface: '#1b1e1a',
|
|
414
|
+
raised: '#242822',
|
|
415
|
+
ink: '#f1f0ea',
|
|
416
|
+
inkMuted: '#cdcbc2',
|
|
417
|
+
inkSubtle: '#aaa89f',
|
|
418
|
+
line: '#323630',
|
|
419
|
+
lineStrong: '#7d8277',
|
|
420
|
+
lineControl: '#7d8277',
|
|
421
|
+
accentSoft: '#2a2d27',
|
|
422
|
+
status: {
|
|
423
|
+
good: '#72d59c',
|
|
424
|
+
warning: '#efc26a',
|
|
425
|
+
critical: '#f28d7f',
|
|
426
|
+
info: '#92b8f2',
|
|
427
|
+
},
|
|
428
|
+
nav: {
|
|
429
|
+
ground: '#1b1e1a',
|
|
430
|
+
ink: '#f1f0ea',
|
|
431
|
+
muted: '#aaa89f',
|
|
432
|
+
line: '#2a2e28',
|
|
433
|
+
},
|
|
434
|
+
chart: ['#7fd1a0', '#c4b1f2', '#f2a08a', '#f08cc4', '#ecc36e', '#6fd1c8', '#92b8f2', '#8c887f'],
|
|
435
|
+
},
|
|
436
|
+
},
|
|
437
|
+
shape: { radius: { control: '8px', field: '8px' }, elevation: 'soft' },
|
|
438
|
+
type: { font: { ui: SANS, data: SANS, heading: SANS }, roles: { title: { weight: 600 } } },
|
|
439
|
+
// Compact, as Mono and Lumen: see Mono's density.
|
|
440
|
+
density: 'compact',
|
|
441
|
+
recipes: {
|
|
442
|
+
nav: 'quiet',
|
|
443
|
+
bar: 'soft',
|
|
444
|
+
tabs: 'chosen',
|
|
445
|
+
windows: 'chosen',
|
|
446
|
+
stat: 'panel',
|
|
447
|
+
section: 'panel',
|
|
448
|
+
fields: 'panel',
|
|
449
|
+
table: 'hairline',
|
|
450
|
+
status: 'pill',
|
|
451
|
+
board: 'soft',
|
|
452
|
+
chart: 'wash',
|
|
453
|
+
rules: 'hairline',
|
|
454
|
+
avatar: 'large',
|
|
455
|
+
// The head stands on one band of the surface, as its cards do on the warm ground.
|
|
456
|
+
header: 'band',
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
// A bookkeeper's desk, ported from a field report's theme (it extended
|
|
461
|
+
// Lumen; here it stands alone): every figure, id, date and label in a
|
|
462
|
+
// monospace (IBM Plex Mono) so numbers line up down a page, with prose and
|
|
463
|
+
// titles left in Inter. Green-tinted paper under a faint graph-paper
|
|
464
|
+
// ground, field groups and dashboard sections as square ruled boxes in the
|
|
465
|
+
// strong line, a table's column heads closed with a double rule as a
|
|
466
|
+
// ledger closes a total (ledgerLook.css), and one deep ledger green for
|
|
467
|
+
// the book's cover (the menu), the primary verb and links, with a gilt
|
|
468
|
+
// mark for the current entry. By night the cover goes near-black green and
|
|
469
|
+
// the same green is lifted to a mint that reads on it. A palette moves the
|
|
470
|
+
// hue the reader's marks are drawn in (accent, links, the ring, the rules,
|
|
471
|
+
// the first series) and leaves the paper and the cover the book's own.
|
|
472
|
+
id: 'ledger',
|
|
473
|
+
label: 'Ledger',
|
|
474
|
+
defaultPalette: 'emerald',
|
|
475
|
+
colors: {
|
|
476
|
+
light: {
|
|
477
|
+
ground: '#eef2ec',
|
|
478
|
+
surface: '#fcfdfb',
|
|
479
|
+
raised: '#eaf0ea',
|
|
480
|
+
ink: '#0f1a14',
|
|
481
|
+
inkMuted: '#44524a',
|
|
482
|
+
inkSubtle: '#52605a',
|
|
483
|
+
line: '#d3ddd5',
|
|
484
|
+
lineStrong: '#7f8f85',
|
|
485
|
+
lineControl: '#748479',
|
|
486
|
+
onAccent: '#ffffff',
|
|
487
|
+
accentInk: '#0f4d36',
|
|
488
|
+
primary: '#0f4d36',
|
|
489
|
+
status: { good: '#127a40', warning: '#a65308', critical: '#c52a2a', info: '#2d4fd6' },
|
|
490
|
+
nav: {
|
|
491
|
+
ground: '#103d2c',
|
|
492
|
+
ink: '#e6efe9',
|
|
493
|
+
muted: '#a9c2b4',
|
|
494
|
+
line: '#1d4d3b',
|
|
495
|
+
accent: '#e4cf8f',
|
|
496
|
+
current: '#1c5640',
|
|
497
|
+
onCurrent: '#ffffff',
|
|
498
|
+
},
|
|
499
|
+
rules: { section: '#0f4d36', head: '#0f4d36' },
|
|
500
|
+
chart: ['#0f6b4a', '#9a6cf7', '#0e9a6c', '#d97706', '#e0428a', '#0e8fb0', '#a3510b', '#94a3b8'],
|
|
501
|
+
},
|
|
502
|
+
dark: {
|
|
503
|
+
ground: '#0b1310',
|
|
504
|
+
surface: '#111c17',
|
|
505
|
+
raised: '#18251f',
|
|
506
|
+
ink: '#e3ece6',
|
|
507
|
+
inkMuted: '#afc0b6',
|
|
508
|
+
inkSubtle: '#93a59a',
|
|
509
|
+
line: '#1c2a23',
|
|
510
|
+
lineStrong: '#587064',
|
|
511
|
+
lineControl: '#66806f',
|
|
512
|
+
onAccent: '#0b1310',
|
|
513
|
+
accentInk: '#8fd1ae',
|
|
514
|
+
primary: '#7cc4a0',
|
|
515
|
+
status: { good: '#4ade80', warning: '#fbbf24', critical: '#f87171', info: '#91a8ff' },
|
|
516
|
+
nav: {
|
|
517
|
+
ground: '#08100c',
|
|
518
|
+
ink: '#dfe9e3',
|
|
519
|
+
muted: '#9fb3a7',
|
|
520
|
+
line: '#18261f',
|
|
521
|
+
accent: '#e0cd94',
|
|
522
|
+
current: '#163a2b',
|
|
523
|
+
onCurrent: '#ffffff',
|
|
524
|
+
},
|
|
525
|
+
rules: { section: '#6fb592', head: '#6fb592' },
|
|
526
|
+
chart: ['#5fbf92', '#9a78ec', '#12a678', '#c88317', '#e0559b', '#1597b9', '#d26b3b', '#6b7694'],
|
|
527
|
+
},
|
|
528
|
+
},
|
|
529
|
+
shape: {
|
|
530
|
+
radius: { control: '2px', field: '0px', pill: '2px', panel: '0px' },
|
|
531
|
+
elevation: 'flat',
|
|
532
|
+
border: { panel: '1px', rule: '1px' },
|
|
533
|
+
},
|
|
534
|
+
type: {
|
|
535
|
+
font: { ui: INTER, data: PLEX_MONO, heading: INTER },
|
|
536
|
+
roles: {
|
|
537
|
+
title: { size: '26px', weight: 600, tracking: '-0.01em' },
|
|
538
|
+
heading: { size: '20px', weight: 600, tracking: '-0.018em' },
|
|
539
|
+
section: { face: 'data', size: '12px', weight: 500, case: 'upper', tracking: '0.08em' },
|
|
540
|
+
label: { face: 'data', weight: 500, case: 'upper', tracking: '0.04em' },
|
|
541
|
+
data: { features: ['tnum', 'zero'] },
|
|
542
|
+
figure: { face: 'data', size: '30px', weight: 500, tracking: '-0.02em', features: ['tnum', 'zero'] },
|
|
543
|
+
nav: { face: 'ui', weight: 400 },
|
|
544
|
+
},
|
|
545
|
+
},
|
|
546
|
+
surface: { ground: { kind: 'grid' } },
|
|
547
|
+
density: 'compact',
|
|
548
|
+
recipes: {
|
|
549
|
+
nav: 'wash',
|
|
550
|
+
bar: 'dark',
|
|
551
|
+
tabs: 'rule',
|
|
552
|
+
windows: 'segmented',
|
|
553
|
+
stat: 'divided',
|
|
554
|
+
section: 'panel',
|
|
555
|
+
fields: 'panel',
|
|
556
|
+
table: 'hairline',
|
|
557
|
+
status: 'quiet',
|
|
558
|
+
board: 'ruled',
|
|
559
|
+
chart: 'plain',
|
|
560
|
+
buttons: 'accent',
|
|
561
|
+
links: 'plain',
|
|
562
|
+
rules: 'double',
|
|
563
|
+
avatar: 'plain',
|
|
564
|
+
workflow: 'markers',
|
|
565
|
+
banner: 'plain',
|
|
566
|
+
steps: 'strip',
|
|
567
|
+
lanes: 'plain',
|
|
568
|
+
header: 'plain',
|
|
569
|
+
},
|
|
570
|
+
},
|
|
571
|
+
];
|
|
572
|
+
export const LOOKS = HOUSE.map(withPalettes);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Part styles (`parts` in a theme, docs/theming.md): the published parts of an App's page a theme may dress one by
|
|
3
|
+
* one, and what it may say of each — its ground, ink and edge as a color role (`nav.ground`, `chart[2]`), never a
|
|
4
|
+
* hex, so `check` measures every pair in every mode and palette; a corner, a lift, a face, a weight and a case from
|
|
5
|
+
* the menus the rest of the theme speaks. Nothing that moves a box: no size, spacing, order or visibility.
|
|
6
|
+
*
|
|
7
|
+
* A part is worn as two things, as a type role is: custom properties, `--part-<part>-<property>`, and one word per
|
|
8
|
+
* property said in the root's `data-parts` (`stat:ground`), which turns on the one rule in partsLook.css that
|
|
9
|
+
* reads it. A part that says nothing turns nothing on, so a theme without parts draws as its look does, and the
|
|
10
|
+
* sheet is fetched only when a worn theme says one (visualTheme.ts). The names are a contract (contract 1): a 1.x
|
|
11
|
+
* release may publish another, none is withdrawn before contract 2. Which elements each one names is the
|
|
12
|
+
* platform's (themePartSelectors.ts), so a part stays where it is drawn when the markup under it changes.
|
|
13
|
+
*/
|
|
14
|
+
import type { ThemeLift, ThemePart, ThemePartStyle } from '../../schema/theme.js';
|
|
15
|
+
export { partAttribute, PART_PROPERTIES, THEME_PARTS } from './themeRecipes.js';
|
|
16
|
+
export declare const PART_RADII: readonly ['control', 'field', 'pill', 'panel', 'square'];
|
|
17
|
+
export declare const PART_FACES: readonly ['ui', 'heading', 'data'];
|
|
18
|
+
export declare const PART_WEIGHTS: readonly [400, 500, 600, 700];
|
|
19
|
+
export declare const PART_CASES: readonly ['none', 'upper', 'small-caps'];
|
|
20
|
+
export declare const PART_LIFTS: readonly ThemeLift[];
|
|
21
|
+
type Parts = Partial<Record<ThemePart, ThemePartStyle>> | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* The custom properties the parts are worn as. Written where the App's accent is (body, appTheme.js), so a part in
|
|
24
|
+
* `accent` is the App's own accent: a color resolves where its property is declared.
|
|
25
|
+
*/
|
|
26
|
+
export declare function partTokens(parts: Parts): Record<string, string>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { THEME_PARTS } from './themeRecipes.js';
|
|
2
|
+
/* The names and the root's words are the first paint's (themeRecipes.ts), as the recipes' are. */
|
|
3
|
+
export { partAttribute, PART_PROPERTIES, THEME_PARTS } from './themeRecipes.js';
|
|
4
|
+
export const PART_RADII = ['control', 'field', 'pill', 'panel', 'square'];
|
|
5
|
+
export const PART_FACES = ['ui', 'heading', 'data'];
|
|
6
|
+
export const PART_WEIGHTS = [400, 500, 600, 700];
|
|
7
|
+
export const PART_CASES = ['none', 'upper', 'small-caps'];
|
|
8
|
+
export const PART_LIFTS = ['none', 'hairline', 'low', 'mid', 'high'];
|
|
9
|
+
/** A part's name as a custom property's piece: `button.secondary` is `button-secondary`. */
|
|
10
|
+
const partSlug = (part) => part.replace(/\./g, '-');
|
|
11
|
+
/** A color role's path (`nav.ground`, `status.good`, `chart[2]`, `inkMuted`) as the custom property it is worn as. */
|
|
12
|
+
function roleToken(path) {
|
|
13
|
+
const series = /^chart\[(\d)\]$/.exec(path);
|
|
14
|
+
if (series)
|
|
15
|
+
return `--chart-${Number(series[1]) + 1}`;
|
|
16
|
+
const flat = path.replace('.', '-').replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
|
|
17
|
+
return path === 'shadow' ? '--shadow-ink' : `--${flat}`;
|
|
18
|
+
}
|
|
19
|
+
/** Each corner as the token the sheets already draw it with: a round control stays a pill only on a control. */
|
|
20
|
+
const RADIUS = {
|
|
21
|
+
control: 'var(--control-radius, var(--radius))',
|
|
22
|
+
field: 'var(--field-radius, var(--radius))',
|
|
23
|
+
pill: 'var(--pill-radius, 999px)',
|
|
24
|
+
panel: 'var(--radius-lg)',
|
|
25
|
+
square: '0',
|
|
26
|
+
};
|
|
27
|
+
const FACE = {
|
|
28
|
+
ui: 'var(--sans)',
|
|
29
|
+
heading: 'var(--heading-font, var(--sans))',
|
|
30
|
+
data: 'var(--mono)',
|
|
31
|
+
};
|
|
32
|
+
/** Each lift as the card steps draw it (themeFamilies.css), mixed from the theme's shadow ink. */
|
|
33
|
+
const LIFT = {
|
|
34
|
+
none: 'none',
|
|
35
|
+
hairline: '0 1px 2px color-mix(in srgb, var(--shadow-ink) 5%, transparent)',
|
|
36
|
+
low: '0 1px 2px color-mix(in srgb, var(--shadow-ink) 4%, transparent), 0 6px 16px -4px color-mix(in srgb, var(--shadow-ink) 7%, transparent)',
|
|
37
|
+
mid: '0 1px 2px color-mix(in srgb, var(--shadow-ink) 5%, transparent), 0 10px 28px -16px color-mix(in srgb, var(--shadow-ink) 20%, transparent)',
|
|
38
|
+
high: '0 1px 3px color-mix(in srgb, var(--shadow-ink) 6%, transparent), 0 16px 36px -14px color-mix(in srgb, var(--shadow-ink) 26%, transparent)',
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* The custom properties the parts are worn as. Written where the App's accent is (body, appTheme.js), so a part in
|
|
42
|
+
* `accent` is the App's own accent: a color resolves where its property is declared.
|
|
43
|
+
*/
|
|
44
|
+
export function partTokens(parts) {
|
|
45
|
+
const out = {};
|
|
46
|
+
for (const part of THEME_PARTS) {
|
|
47
|
+
const style = parts?.[part];
|
|
48
|
+
if (!style)
|
|
49
|
+
continue;
|
|
50
|
+
const token = (property) => `--part-${partSlug(part)}-${property}`;
|
|
51
|
+
for (const property of ['ground', 'ink', 'edge']) {
|
|
52
|
+
const path = style[property];
|
|
53
|
+
if (path !== undefined)
|
|
54
|
+
out[token(property)] = `var(${roleToken(path)})`;
|
|
55
|
+
}
|
|
56
|
+
if (style.radius)
|
|
57
|
+
out[token('radius')] = RADIUS[style.radius];
|
|
58
|
+
if (style.lift)
|
|
59
|
+
out[token('lift')] = LIFT[style.lift];
|
|
60
|
+
if (style.face)
|
|
61
|
+
out[token('face')] = FACE[style.face];
|
|
62
|
+
if (style.weight !== undefined)
|
|
63
|
+
out[token('weight')] = String(style.weight);
|
|
64
|
+
if (style.case) {
|
|
65
|
+
out[token('transform')] = style.case === 'upper' ? 'uppercase' : 'none';
|
|
66
|
+
out[token('caps')] = style.case === 'small-caps' ? 'all-small-caps' : 'normal';
|
|
67
|
+
out[token('tracking')] = style.case === 'none' ? 'normal' : 'var(--track-caps)';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|