smbls 3.14.859 → 3.14.861
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/CHANGELOG.md +35 -0
- package/dist/smbls.cjs +46 -46
- package/dist/smbls.cjs.map +3 -3
- package/dist/smbls.core.chunk-EYPFXZ4X.esm.js +7 -0
- package/dist/{smbls.core.chunk-42M5X5D2.esm.js.map → smbls.core.chunk-EYPFXZ4X.esm.js.map} +2 -2
- package/dist/smbls.core.chunk-JCEI7VBV.esm.js +11 -0
- package/dist/smbls.core.chunk-JCEI7VBV.esm.js.map +1 -0
- package/dist/smbls.core.chunk-NKYGHX2D.esm.js +2 -0
- package/dist/smbls.core.chunk-NKYGHX2D.esm.js.map +6 -0
- package/dist/smbls.core.chunk-RYOPPMCY.esm.js +27 -0
- package/dist/{smbls.core.chunk-NY3AS6M5.esm.js.map → smbls.core.chunk-RYOPPMCY.esm.js.map} +1 -1
- package/dist/smbls.core.chunk-SZ456M5Z.esm.js +36 -0
- package/dist/smbls.core.chunk-SZ456M5Z.esm.js.map +1 -0
- package/dist/{smbls.core.dropdown-BLPDXVXL.esm.js → smbls.core.dropdown-UVO6TG2P.esm.js} +2 -2
- package/dist/smbls.core.esm.js +1 -1
- package/dist/smbls.core.fetch-B6OIXR7B.esm.js +2 -0
- package/dist/smbls.core.fetch-B6OIXR7B.esm.js.map +1 -0
- package/dist/{smbls.core.inspect-G6OWAZKH.esm.js → smbls.core.inspect-WIXUJM56.esm.js} +2 -2
- package/dist/{smbls.core.lazyParts-JFHW4EW6.esm.js → smbls.core.lazyParts-ZRE6CGZV.esm.js} +2 -2
- package/dist/{smbls.core.lazyParts-JFHW4EW6.esm.js.map → smbls.core.lazyParts-ZRE6CGZV.esm.js.map} +1 -1
- package/dist/{smbls.core.sync-5FCWPNZT.esm.js → smbls.core.sync-ET3QQ6Z5.esm.js} +2 -2
- package/dist/{smbls.core.windows-KJFEF2HI.esm.js → smbls.core.windows-DQV63PCA.esm.js} +2 -2
- package/dist/smbls.embed.iife.js +1 -1
- package/dist/smbls.embed.iife.js.map +1 -1
- package/dist/smbls.esm.js +46 -46
- package/dist/smbls.esm.js.map +1 -1
- package/dist/smbls.iife-string.js +2 -2
- package/dist/smbls.iife.js +1 -1
- package/dist/smbls.iife.js.map +1 -1
- package/dist/smbls.server-utils.esm.js +11 -11
- package/dist/smbls.server-utils.esm.js.map +3 -3
- package/dist/smbls.socket-io-client.esm.js.map +1 -1
- package/package.json +6 -6
- package/dist/smbls.core.chunk-42M5X5D2.esm.js +0 -7
- package/dist/smbls.core.chunk-DEXTYS42.esm.js +0 -11
- package/dist/smbls.core.chunk-DEXTYS42.esm.js.map +0 -1
- package/dist/smbls.core.chunk-KEKRID6S.esm.js +0 -2
- package/dist/smbls.core.chunk-KEKRID6S.esm.js.map +0 -6
- package/dist/smbls.core.chunk-NY3AS6M5.esm.js +0 -27
- package/dist/smbls.core.chunk-OVVEF7PJ.esm.js +0 -36
- package/dist/smbls.core.chunk-OVVEF7PJ.esm.js.map +0 -1
- package/dist/smbls.core.fetch-IJAKF526.esm.js +0 -2
- package/dist/smbls.core.fetch-IJAKF526.esm.js.map +0 -1
- /package/dist/{smbls.core.dropdown-BLPDXVXL.esm.js.map → smbls.core.dropdown-UVO6TG2P.esm.js.map} +0 -0
- /package/dist/{smbls.core.inspect-G6OWAZKH.esm.js.map → smbls.core.inspect-WIXUJM56.esm.js.map} +0 -0
- /package/dist/{smbls.core.sync-5FCWPNZT.esm.js.map → smbls.core.sync-ET3QQ6Z5.esm.js.map} +0 -0
- /package/dist/{smbls.core.windows-KJFEF2HI.esm.js.map → smbls.core.windows-DQV63PCA.esm.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# smbls
|
|
2
2
|
|
|
3
|
+
## 3.14.861
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9d85f67: A boot that REPLACES a pre-rendered page keeps what the visitor did on the server's page while the app was being built. Just before the server's nodes go, it reads every field the visitor changed (a value typed, an option picked, a box ticked, a radio picked), the focused field with its selection, and the scroll position of every scroller they moved and of the viewport (`document.scrollingElement`). In the task that inserts the app it puts them on the app's matching nodes — matched by the `data-key` chain, the tag and the rank among equal chains; the app's own root key may differ from the server's — and focuses with `preventScroll`. Once the first view is in, each restored field fires `input`, and `change` where the visitor had committed it (a pick, a tick, a text field they had left; the field they are still typing in gets `input` only), so the app's own handlers write its state. Whatever those handlers move in reply (a focus, a scroll to a section, smooth or not) goes back to where the visitor is before a frame shows it. A field at its server default, an element at scroll 0 and a page with nothing focused cost nothing and fire nothing; an untouched field keeps the app's own default. The one-task replace (`firstRender: false`) does the same.
|
|
8
|
+
|
|
9
|
+
Before, the swap threw all of it away: text typed at 1.9 s was gone at a 7.7 s swap, a pick went back to the first option with the app's state on its default, focus fell to `<body>` (the next Space scrolled the page a screen), and the page's scroller went back to 0.
|
|
10
|
+
|
|
11
|
+
## 3.14.860
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 2522f1c: `fetch.early`: the early script carries only the parts its declaration uses (routes, rpc, slice, after, wait, …), with the address, language and argument rules compiled at build time; its tag loads with `fetchpriority="high"`; the CLI renames the file's locals with terser (5.31.6, exact; names only, the esbuild output stays when terser is missing). XMA's early file: 4,627 B → 3,114 B Brotli.
|
|
16
|
+
|
|
17
|
+
Behaviour: `firstView` requests go after the first view and load at idle; `wait: 'head'` waits through a MutationObserver only; a select with a key that its config text never names is not sent early (the app sends it as usual).
|
|
18
|
+
|
|
19
|
+
`partialAs` marks the first part of a list that the early script fetched, so the list knows it holds a part.
|
|
20
|
+
|
|
21
|
+
- 2522f1c: A window focus (or the tab turning visible) that finds a query's entry missing or stale refetches it as a refresh: the cache is skipped, but a request already in flight on the key is joined. It ran as a forced run, which skips that join, so a focus during a cold load sent the same request again once per mounted declaration on the key (the symbols.app home sent GET /core/presets three times). A request that started before the key's last invalidation is never joined. Reconnect, `refetchInterval`, `el.__ref.refetch()` and `fetchNextPage` stay forced.
|
|
22
|
+
- f718247: `el.call('prefetchQuery', config)` asks for a query ahead of its mount from project code (XMA #378). The entry is keyed by the calling element — params resolved with it, its language and tenant scope — so the page's query reads it. A prefetch registers its request in flight and joins one already out, so a query that starts meanwhile sends no second request; a fresh entry answers with no request. `queryClient.prefetchQuery(config, context)` shares requests the same way.
|
|
23
|
+
|
|
24
|
+
`infinite: { rows, merge, param }` pages answers that are objects (an rpc's `{ items, total, has_more }`): `rows` names where an answer keeps its rows, `merge(pages, el, state)` builds the value the state takes, `param` names the params key (or a function) that carries the next step; the first page is the caller's params. An infinite rpc used to drop its step and ask for page 1 again. `fetchNextPage` / `fetchPreviousPage` page the element's infinite config wherever it sits in its `fetch` list, so an `on: 'stateChange'` config can come first.
|
|
25
|
+
|
|
26
|
+
- c21bff7: A route entry can carry a head of its own: `'/blueprint': { extends: 'SiteAiPage', metadata: { title: '…', robots: 'noindex' } }`. The entry's keys win over the static `metadata` of the component it extends (found in the project's components, then the linked libraries); a string entry gets the component's. The served head (`getPageMetadata`), the SSR head (`extractMetadata`) and the browser read it the same way (`routeEntryMetadata`, `@symbo.ls/utils`). Two entries that name one component and carry only a head are the same page for the router: the page element stays mounted and helmet shows the new entry's head (the `routeHead` plugin hook).
|
|
27
|
+
|
|
28
|
+
An app that routes writes its head once, when its first page is in: the app's metadata and the first page's metadata merged in one pass, so the served title changes at most once at boot. A host that wrote each page's own head into the page it serves can keep it with `<meta name="smbls-head" content="served">` (opt-in): a value equal to the served one writes nothing.
|
|
29
|
+
|
|
30
|
+
A non-production channel serves `<meta name="robots" content="noindex" data-smbls-host="forced">`. Into a marked tag helmet writes only a value that keeps the page out of the index; it never writes `index, follow` over it and never removes it. A production head carries no mark, so the project's `robots` applies there.
|
|
31
|
+
|
|
32
|
+
The served page's `<html lang>` is the address's language (`/ka/…` → `lang="ka"`).
|
|
33
|
+
|
|
34
|
+
- c62254b: `set()` runs a design-system family after the families its values name, whatever the key order of the config. `color` runs before `gradient`, `theme` and `shadow`, and `gradient` runs before `theme`. Every other family keeps its authored position. Before, `set()` ran the families in key order: a config with `theme` before `color` resolved every theme param against an empty palette, so `--theme-*` held raw words (`gray12`, `gray1+6`) and a scheme that named a colour pair emitted no variable. A `gradient` after `theme` left `--theme-secondary-background: gradient-dark`, a `gradient` before `color` left raw colour stops (an invalid gradient), and a `shadow` before `color` wrote `var(--spacing-GRAY1.2)`.
|
|
35
|
+
- 77a4634: A typography or spacing override for a media name that the design-system media table lacks is skipped, with one dev-only warning per family and name. Before, the media pass wrote it anyway: `@media undefined` in the variables of both families and `@media screen and undefined` in the typography templates and the reset. No browser matches those at-rules. system/default's typography and spacing carry `'@default': {...}` and no media `default` exists, so every render that used system/default shipped this dead CSS. `@default` is not taken as the base sequence: no browser ever applied it, and as the base it would change what every consumer renders (system/default's spacing ratio would go from 1.618 to 1.25).
|
|
36
|
+
- 0d684b1: The classic-script and node builds (`smbls.iife.js`, `smbls.iife-string.js`, `smbls.embed.iife.js`, `smbls.cjs`) no longer read the `globalThis.__SMBLS_BUILD_<NAME>__` build flags at run time. Only an app's `smbls build` sets these flags, and it bundles the esm / esm-core dist. Nothing bundles the classic builds again, and nothing sets the flags at run time, so every read there was `undefined` (the side that keeps everything). `build.mjs` now folds them to `false` with esbuild `define`, and the minifier drops the dead side. The names come from the sources, so a new flag folds with no list to keep in step. Measured on 3.14.859: 73 reads in the iife and the cjs, 8 in the embed. Gzip goes from 274,102 to 271,474 B (iife), from 76,045 to 75,690 B (embed, cap 77,824 B) and from 281,989 to 279,437 B (cjs). The iife no longer carries the dead loader for the lazy server-utils file. The esm and esm-core builds keep every flag for the app build.
|
|
37
|
+
|
|
3
38
|
## 3.14.859
|
|
4
39
|
|
|
5
40
|
### Patch Changes
|