@valbuild/core 0.150.1 → 0.150.3

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 CHANGED
@@ -1,5 +1,27 @@
1
1
  # @valbuild/core
2
2
 
3
+ ## 0.150.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#954](https://github.com/valbuild/val/pull/954) [`bc0cc43`](https://github.com/valbuild/val/commit/bc0cc433e157cca08f9ee384a4fb8be9bd3dad2c) Thanks [@freekh](https://github.com/freekh)! - Proposals in the Studio, reworked:
8
+
9
+ - **Save becomes Publish.** In a proposal, one split button stands where Publish is on the site. Its main half is the next step (Save, then Build, then Publish), and its caret offers every step, so you can publish straight away: Publish saves first. The separate Publish button beside the switcher is gone.
10
+ - **The switcher is where the proposal is managed**, as on a phone: its name and changes, Compare with the site, Rename, Copy link and Close, then where else to go.
11
+ - **Upgrade proposals** have one Publish (the bar's), say what they upgrade in the Publish dialog, cannot be published while Val Build is still working them out, are discarded rather than closed, and have their own icon.
12
+ - **A published proposal** shows a dialog with the ways out (the site, a new proposal, all proposals), since nothing more can be done in it.
13
+ - **Notices about where you are** (an upgrade, an upgrade under way, a restore) pop up from the bottom right and stay until dismissed; a dismissed one folds into the status bar and comes back from there.
14
+ - **No more flash of the site's chrome** at a proposal's address: the bar says "Loading…" until it knows, a return visit starts in the proposal at once, and opening a proposal says "Opening …" while the browser gets there.
15
+ - **After a save**, "Updating the preview…" and a failed render check are shown beside the switcher, and the status bar counts what is not saved to the proposal instead of saying "All changes saved".
16
+ - **Dialogs** dim the Studio instead of hiding it.
17
+ - **`theme.proposal`** in `s.settings()` sets the colour the Studio wears in a proposal (Val's violet when unset), under Settings → Studio. Like the accent, its shades are generated so text on them stays legible.
18
+
19
+ ## 0.150.2
20
+
21
+ ### Patch Changes
22
+
23
+ - [#944](https://github.com/valbuild/val/pull/944) [`155a079`](https://github.com/valbuild/val/commit/155a0792c2a437a1cbcdd6342131999be70e0d70) Thanks [@freekh](https://github.com/freekh)! - A TanStack splat route now has a page of its own. `src/routes/docs.$.tsx` serves `/docs` as well as everything under it, the way TanStack Router matches it, and `/docs` is now a valid key in its Val module. It used to be refused ("does not match `/docs/[..._splat]`"), so the page TanStack served at `/docs` could not be given content. `useValRoute` on that page reads the `/docs` entry.
24
+
3
25
  ## 0.150.1
4
26
 
5
27
  ### Patch Changes
@@ -106,7 +106,7 @@ export declare function parseNextJsRoutePattern(moduleFilePath: string): string[
106
106
  * - /src/routes/posts.$postId.val.ts -> ["posts", "[postId]"]
107
107
  * - /routes/posts/$postId.val.ts -> ["posts", "[postId]"]
108
108
  * - /src/routes/index.val.ts -> []
109
- * - /src/routes/files.$.val.ts -> ["files", "[..._splat]"]
109
+ * - /src/routes/files.$.val.ts -> ["files", "[[..._splat]]"]
110
110
  * - /src/routes/{-$locale}.about.val.ts -> ["[[locale]]", "about"]
111
111
  * - /src/routes/(app)/_layout.about.val.ts -> ["about"]
112
112
  */
@@ -98,6 +98,17 @@ export type ThemeSettingsSource = {
98
98
  * foreground/background pair the chrome renders to AA across the hue circle.
99
99
  */
100
100
  accent?: string | null;
101
+ /**
102
+ * The colour that says "you are in a proposal", as a hex string.
103
+ *
104
+ * Unset means Val's violet. A proposal is a PLACE rather than a brand or a
105
+ * status -- the top bar, the switcher and Save wear it so nobody edits a
106
+ * proposal thinking it is the site -- so it has to stand apart from the
107
+ * accent, and a project whose accent is violet needs a way to move it.
108
+ * Generated the way the accent's ramp is, keeping the lightness of each step,
109
+ * so its text stays legible whatever the hue.
110
+ */
111
+ proposal?: string | null;
101
112
  /**
102
113
  * How round the Studio's corners are.
103
114
  *
@@ -6286,7 +6286,7 @@ function parseNextJsRoutePattern(moduleFilePath) {
6286
6286
  * - /src/routes/posts.$postId.val.ts -> ["posts", "[postId]"]
6287
6287
  * - /routes/posts/$postId.val.ts -> ["posts", "[postId]"]
6288
6288
  * - /src/routes/index.val.ts -> []
6289
- * - /src/routes/files.$.val.ts -> ["files", "[..._splat]"]
6289
+ * - /src/routes/files.$.val.ts -> ["files", "[[..._splat]]"]
6290
6290
  * - /src/routes/{-$locale}.about.val.ts -> ["[[locale]]", "about"]
6291
6291
  * - /src/routes/(app)/_layout.about.val.ts -> ["about"]
6292
6292
  */
@@ -6354,7 +6354,12 @@ function tanStackSegmentsOfRoutePath(routePath) {
6354
6354
  // A splat. Named `_splat` because that is the param name TanStack gives
6355
6355
  // it, so `useValRoute(pageVal, params)` can be handed the route's own
6356
6356
  // params object unchanged.
6357
- segments.push("[..._splat]");
6357
+ //
6358
+ // OPTIONAL, because TanStack's is: `/files/$` serves `/files` too, with
6359
+ // nothing in `_splat` (the matcher descends into the wildcard when the
6360
+ // path has run out). A required catch-all refused the key `/files` for
6361
+ // a page the site serves.
6362
+ segments.push("[[..._splat]]");
6358
6363
  continue;
6359
6364
  }
6360
6365
  if (segment.startsWith("$")) {
@@ -10468,6 +10473,9 @@ function settings() {
10468
10473
  accent: color({
10469
10474
  format: "hex"
10470
10475
  }).nullable().describe("The one colour the Studio's chrome is built from. Unset means Val's green. Any hex: the whole brand ramp is generated from it, keeping the lightness of each step, so contrast holds."),
10476
+ proposal: color({
10477
+ format: "hex"
10478
+ }).nullable().describe("The colour the Studio wears in a proposal, so nobody mistakes one for the site. Unset means Val's violet. Pick one that stands apart from the accent."),
10471
10479
  radius: enumSchema("square", "tight", "default", "soft").nullable().describe("How round the Studio's corners are. Unset is the same as 'default'."),
10472
10480
  mode: enumSchema("dark", "light").nullable().describe("The mode the Studio opens in for an editor who has not chosen one. Never overrides an editor who has."),
10473
10481
  logo: image({
@@ -16971,7 +16979,7 @@ function isInlineRender(container) {
16971
16979
 
16972
16980
  var corePackageJson = {
16973
16981
  name: "@valbuild/core",
16974
- version: "0.150.1",
16982
+ version: "0.150.3",
16975
16983
  "private": false,
16976
16984
  description: "Val - supercharged hard-coded content",
16977
16985
  repository: {
@@ -6284,7 +6284,7 @@ function parseNextJsRoutePattern(moduleFilePath) {
6284
6284
  * - /src/routes/posts.$postId.val.ts -> ["posts", "[postId]"]
6285
6285
  * - /routes/posts/$postId.val.ts -> ["posts", "[postId]"]
6286
6286
  * - /src/routes/index.val.ts -> []
6287
- * - /src/routes/files.$.val.ts -> ["files", "[..._splat]"]
6287
+ * - /src/routes/files.$.val.ts -> ["files", "[[..._splat]]"]
6288
6288
  * - /src/routes/{-$locale}.about.val.ts -> ["[[locale]]", "about"]
6289
6289
  * - /src/routes/(app)/_layout.about.val.ts -> ["about"]
6290
6290
  */
@@ -6352,7 +6352,12 @@ function tanStackSegmentsOfRoutePath(routePath) {
6352
6352
  // A splat. Named `_splat` because that is the param name TanStack gives
6353
6353
  // it, so `useValRoute(pageVal, params)` can be handed the route's own
6354
6354
  // params object unchanged.
6355
- segments.push("[..._splat]");
6355
+ //
6356
+ // OPTIONAL, because TanStack's is: `/files/$` serves `/files` too, with
6357
+ // nothing in `_splat` (the matcher descends into the wildcard when the
6358
+ // path has run out). A required catch-all refused the key `/files` for
6359
+ // a page the site serves.
6360
+ segments.push("[[..._splat]]");
6356
6361
  continue;
6357
6362
  }
6358
6363
  if (segment.startsWith("$")) {
@@ -10466,6 +10471,9 @@ function settings() {
10466
10471
  accent: color({
10467
10472
  format: "hex"
10468
10473
  }).nullable().describe("The one colour the Studio's chrome is built from. Unset means Val's green. Any hex: the whole brand ramp is generated from it, keeping the lightness of each step, so contrast holds."),
10474
+ proposal: color({
10475
+ format: "hex"
10476
+ }).nullable().describe("The colour the Studio wears in a proposal, so nobody mistakes one for the site. Unset means Val's violet. Pick one that stands apart from the accent."),
10469
10477
  radius: enumSchema("square", "tight", "default", "soft").nullable().describe("How round the Studio's corners are. Unset is the same as 'default'."),
10470
10478
  mode: enumSchema("dark", "light").nullable().describe("The mode the Studio opens in for an editor who has not chosen one. Never overrides an editor who has."),
10471
10479
  logo: image({
@@ -16969,7 +16977,7 @@ function isInlineRender(container) {
16969
16977
 
16970
16978
  var corePackageJson = {
16971
16979
  name: "@valbuild/core",
16972
- version: "0.150.1",
16980
+ version: "0.150.3",
16973
16981
  "private": false,
16974
16982
  description: "Val - supercharged hard-coded content",
16975
16983
  repository: {
@@ -6286,7 +6286,7 @@ function parseNextJsRoutePattern(moduleFilePath) {
6286
6286
  * - /src/routes/posts.$postId.val.ts -> ["posts", "[postId]"]
6287
6287
  * - /routes/posts/$postId.val.ts -> ["posts", "[postId]"]
6288
6288
  * - /src/routes/index.val.ts -> []
6289
- * - /src/routes/files.$.val.ts -> ["files", "[..._splat]"]
6289
+ * - /src/routes/files.$.val.ts -> ["files", "[[..._splat]]"]
6290
6290
  * - /src/routes/{-$locale}.about.val.ts -> ["[[locale]]", "about"]
6291
6291
  * - /src/routes/(app)/_layout.about.val.ts -> ["about"]
6292
6292
  */
@@ -6354,7 +6354,12 @@ function tanStackSegmentsOfRoutePath(routePath) {
6354
6354
  // A splat. Named `_splat` because that is the param name TanStack gives
6355
6355
  // it, so `useValRoute(pageVal, params)` can be handed the route's own
6356
6356
  // params object unchanged.
6357
- segments.push("[..._splat]");
6357
+ //
6358
+ // OPTIONAL, because TanStack's is: `/files/$` serves `/files` too, with
6359
+ // nothing in `_splat` (the matcher descends into the wildcard when the
6360
+ // path has run out). A required catch-all refused the key `/files` for
6361
+ // a page the site serves.
6362
+ segments.push("[[..._splat]]");
6358
6363
  continue;
6359
6364
  }
6360
6365
  if (segment.startsWith("$")) {
@@ -10468,6 +10473,9 @@ function settings() {
10468
10473
  accent: color({
10469
10474
  format: "hex"
10470
10475
  }).nullable().describe("The one colour the Studio's chrome is built from. Unset means Val's green. Any hex: the whole brand ramp is generated from it, keeping the lightness of each step, so contrast holds."),
10476
+ proposal: color({
10477
+ format: "hex"
10478
+ }).nullable().describe("The colour the Studio wears in a proposal, so nobody mistakes one for the site. Unset means Val's violet. Pick one that stands apart from the accent."),
10471
10479
  radius: enumSchema("square", "tight", "default", "soft").nullable().describe("How round the Studio's corners are. Unset is the same as 'default'."),
10472
10480
  mode: enumSchema("dark", "light").nullable().describe("The mode the Studio opens in for an editor who has not chosen one. Never overrides an editor who has."),
10473
10481
  logo: image({
@@ -16971,7 +16979,7 @@ function isInlineRender(container) {
16971
16979
 
16972
16980
  var corePackageJson = {
16973
16981
  name: "@valbuild/core",
16974
- version: "0.150.1",
16982
+ version: "0.150.3",
16975
16983
  "private": false,
16976
16984
  description: "Val - supercharged hard-coded content",
16977
16985
  repository: {
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var dist_valbuildCore = require('./index-54542dc6.cjs.dev.js');
5
+ var dist_valbuildCore = require('./index-a031b958.cjs.dev.js');
6
6
  require('./result-bb1f436e.cjs.dev.js');
7
7
 
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var dist_valbuildCore = require('./index-71cf4b78.cjs.prod.js');
5
+ var dist_valbuildCore = require('./index-ec5b1776.cjs.prod.js');
6
6
  require('./result-787e35f6.cjs.prod.js');
7
7
 
8
8
 
@@ -1,2 +1,2 @@
1
- export { H as ASSISTANT_SETTINGS_MAX_LENGTH, A as ArraySchema, B as BooleanSchema, a4 as CODE_LANGUAGES, a5 as COLOR_FORMATS, a3 as CodeSchema, a2 as ColorSchema, e as DEFAULT_APP_HOST, a6 as DEFAULT_COLOR_FORMAT, D as DEFAULT_CONTENT_HOST, u as DEFAULT_FONT_ACCEPT, f as DEFAULT_STATIC_HOST, o as DEFAULT_VAL_REMOTE_HOST, x as DEFAULT_VIDEO_ACCEPT, y as DEFAULT_VIDEO_RENDITIONS, z as DEFAULT_VIDEO_SEGMENT_DURATION, C as DateSchema, a7 as DateTimeSchema, ad as DiscriminatedUnionSchema, ae as EnumSchema, F as FATAL_ERROR_TYPES, v as FONT_MIME_TYPES, t as FileSchema, G as GenericSelector, r as ImageSchema, I as Internal, a8 as KeyOfSchema, af as LiteralSchema, Z as LocaleSchema, M as ModuleFilePathSep, N as NumberSchema, O as ObjectSchema, R as RecordSchema, ac as RichTextSchema, ab as RouteSchema, Q as SETTINGS_MODULE_CONVENTION, S as Schema, E as SettingsSchema, q as StringSchema, T as THEME_LOGO_DIRECTORY, K as THEME_RADIUS_LENGTHS, J as THEME_RADIUS_STEPS, av as UNSAFE_URL_SCHEMES, V as VAL_EXTENSION, a9 as ValViewSchema, w as VideoSchema, L as assistantAvailability, k as computeSchemaSha, j as computeSourcesSha, h as computeValModuleShas, $ as declaredKeySetOf, p as derefPatch, ar as describeSchemeRejection, ag as deserializeSchema, a1 as discriminatedUnionBranchOf, g as extractValModules, ao as getSourcePathFromRoute, n as hasMediaSchema, l as hasRemoteFileSchema, i as initVal, as as isCheckableScheme, ai as isInlineRender, ap as isPageRouter, U as isRootModuleFilePath, aa as isValViewSource, Y as localeOfValue, X as localeTagError, an as matchRoutePattern, a0 as missingDeclaredKeys, m as modules, aj as parseNextJsRoutePattern, ak as parseTanStackRoutePattern, ah as previewScope, at as rejectScheme, W as resolveSettingsModule, aq as routePatternOf, au as schemeOf, al as tanStackSegmentsOfRoutePath, am as validateUrlAgainstPattern } from './index-af6ac63c.esm.js';
1
+ export { H as ASSISTANT_SETTINGS_MAX_LENGTH, A as ArraySchema, B as BooleanSchema, a4 as CODE_LANGUAGES, a5 as COLOR_FORMATS, a3 as CodeSchema, a2 as ColorSchema, e as DEFAULT_APP_HOST, a6 as DEFAULT_COLOR_FORMAT, D as DEFAULT_CONTENT_HOST, u as DEFAULT_FONT_ACCEPT, f as DEFAULT_STATIC_HOST, o as DEFAULT_VAL_REMOTE_HOST, x as DEFAULT_VIDEO_ACCEPT, y as DEFAULT_VIDEO_RENDITIONS, z as DEFAULT_VIDEO_SEGMENT_DURATION, C as DateSchema, a7 as DateTimeSchema, ad as DiscriminatedUnionSchema, ae as EnumSchema, F as FATAL_ERROR_TYPES, v as FONT_MIME_TYPES, t as FileSchema, G as GenericSelector, r as ImageSchema, I as Internal, a8 as KeyOfSchema, af as LiteralSchema, Z as LocaleSchema, M as ModuleFilePathSep, N as NumberSchema, O as ObjectSchema, R as RecordSchema, ac as RichTextSchema, ab as RouteSchema, Q as SETTINGS_MODULE_CONVENTION, S as Schema, E as SettingsSchema, q as StringSchema, T as THEME_LOGO_DIRECTORY, K as THEME_RADIUS_LENGTHS, J as THEME_RADIUS_STEPS, av as UNSAFE_URL_SCHEMES, V as VAL_EXTENSION, a9 as ValViewSchema, w as VideoSchema, L as assistantAvailability, k as computeSchemaSha, j as computeSourcesSha, h as computeValModuleShas, $ as declaredKeySetOf, p as derefPatch, ar as describeSchemeRejection, ag as deserializeSchema, a1 as discriminatedUnionBranchOf, g as extractValModules, ao as getSourcePathFromRoute, n as hasMediaSchema, l as hasRemoteFileSchema, i as initVal, as as isCheckableScheme, ai as isInlineRender, ap as isPageRouter, U as isRootModuleFilePath, aa as isValViewSource, Y as localeOfValue, X as localeTagError, an as matchRoutePattern, a0 as missingDeclaredKeys, m as modules, aj as parseNextJsRoutePattern, ak as parseTanStackRoutePattern, ah as previewScope, at as rejectScheme, W as resolveSettingsModule, aq as routePatternOf, au as schemeOf, al as tanStackSegmentsOfRoutePath, am as validateUrlAgainstPattern } from './index-da7db0cd.esm.js';
2
2
  import './result-daff1cae.esm.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valbuild/core",
3
- "version": "0.150.1",
3
+ "version": "0.150.3",
4
4
  "private": false,
5
5
  "description": "Val - supercharged hard-coded content",
6
6
  "repository": {
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var dist_valbuildCore = require('../../dist/index-54542dc6.cjs.dev.js');
5
+ var dist_valbuildCore = require('../../dist/index-a031b958.cjs.dev.js');
6
6
  var result = require('../../dist/result-bb1f436e.cjs.dev.js');
7
7
  var util = require('../../dist/util-b213092b.cjs.dev.js');
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var dist_valbuildCore = require('../../dist/index-71cf4b78.cjs.prod.js');
5
+ var dist_valbuildCore = require('../../dist/index-ec5b1776.cjs.prod.js');
6
6
  var result = require('../../dist/result-787e35f6.cjs.prod.js');
7
7
  var util = require('../../dist/util-030d8a1f.cjs.prod.js');
8
8
 
@@ -1,5 +1,5 @@
1
- import { _ as _typeof, a as _slicedToArray, P as PatchError, s as splitModuleFilePathAndModulePath, b as _createClass, c as _classCallCheck, d as _toConsumableArray } from '../../dist/index-af6ac63c.esm.js';
2
- export { P as PatchError } from '../../dist/index-af6ac63c.esm.js';
1
+ import { _ as _typeof, a as _slicedToArray, P as PatchError, s as splitModuleFilePathAndModulePath, b as _createClass, c as _classCallCheck, d as _toConsumableArray } from '../../dist/index-da7db0cd.esm.js';
2
+ export { P as PatchError } from '../../dist/index-da7db0cd.esm.js';
3
3
  import { f as isNonEmpty, e as err, o as ok, m as map, g as flatMap, i as isErr, h as flatMapReduce, j as filterOrElse, k as mapErr, l as map$1, n as all, p as flatten, q as allT } from '../../dist/result-daff1cae.esm.js';
4
4
  import { p as pipe } from '../../dist/util-18613e99.esm.js';
5
5