@fuzdev/fuz_ui 0.209.0 โ†’ 0.210.1

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 (38) hide show
  1. package/dist/ApiDeclarationList.svelte +3 -3
  2. package/dist/ApiModulesList.svelte +1 -1
  3. package/dist/Card.svelte +2 -2
  4. package/dist/ColorSchemeInput.svelte +11 -49
  5. package/dist/ColorSchemeInput.svelte.d.ts +2 -1
  6. package/dist/ColorSchemeInput.svelte.d.ts.map +1 -1
  7. package/dist/CopyToClipboard.svelte +1 -1
  8. package/dist/Dialog.svelte +7 -3
  9. package/dist/DialogContent.svelte +3 -3
  10. package/dist/DialogContent.svelte.d.ts +2 -2
  11. package/dist/DocsFooter.svelte +1 -1
  12. package/dist/DocsPrimaryNav.svelte +1 -1
  13. package/dist/HueInput.svelte +8 -16
  14. package/dist/LibraryDetail.svelte +4 -4
  15. package/dist/ModuleLink.svelte +1 -1
  16. package/dist/ProjectLinks.svelte +3 -3
  17. package/dist/RadioMenu.svelte +97 -0
  18. package/dist/RadioMenu.svelte.d.ts +41 -0
  19. package/dist/RadioMenu.svelte.d.ts.map +1 -0
  20. package/dist/Sparkline.svelte +1 -1
  21. package/dist/Spiders.svelte +10 -10
  22. package/dist/ThemeInput.svelte +2 -2
  23. package/dist/ThemeInput.svelte.d.ts +1 -1
  24. package/dist/ThemeInput.svelte.d.ts.map +1 -1
  25. package/dist/ThemeRoot.svelte +2 -1
  26. package/dist/ThemeRoot.svelte.d.ts +1 -1
  27. package/dist/ThemeRoot.svelte.d.ts.map +1 -1
  28. package/dist/alert.js +2 -2
  29. package/dist/logos.d.ts.map +1 -1
  30. package/dist/logos.js +13 -11
  31. package/dist/projects.js +1 -1
  32. package/dist/theme_state.svelte.d.ts +2 -1
  33. package/dist/theme_state.svelte.d.ts.map +1 -1
  34. package/package.json +5 -5
  35. package/src/lib/alert.ts +2 -2
  36. package/src/lib/logos.ts +13 -11
  37. package/src/lib/projects.ts +1 -1
  38. package/src/lib/theme_state.svelte.ts +2 -1
@@ -15,10 +15,10 @@
15
15
 
16
16
  {#if declarations.length === 0}
17
17
  <section>
18
- {#if search_query}
19
- <p>No declarations found matching "{search_query}"</p>
18
+ {#if search_query.trim()}
19
+ <p class="text_70">No declarations match your search.</p>
20
20
  {:else}
21
- <p>No declarations</p>
21
+ <p class="text_70">No declarations.</p>
22
22
  {/if}
23
23
  </section>
24
24
  {:else}
@@ -25,7 +25,7 @@
25
25
  <TomeSection>
26
26
  <TomeSectionHeader text="Modules" />
27
27
  {#if modules.length === 0}
28
- <p class="color_c">No modules match your search.</p>
28
+ <p class="text_70">No modules match your search.</p>
29
29
  {:else}
30
30
  <ul class="modules-list">
31
31
  {#each modules as module (module.path)}
package/dist/Card.svelte CHANGED
@@ -105,7 +105,7 @@
105
105
  --shadow,
106
106
  var(--shadow_inset_bottom_sm)
107
107
  color-mix(
108
- in hsl,
108
+ in oklab,
109
109
  var(--shadow_color, var(--shadow_color_umbra)) var(--shadow_alpha_40),
110
110
  transparent
111
111
  )
@@ -116,7 +116,7 @@
116
116
  --shadow,
117
117
  var(--shadow_inset_top_sm)
118
118
  color-mix(
119
- in hsl,
119
+ in oklab,
120
120
  var(--shadow_color, var(--shadow_color_umbra)) var(--shadow_alpha_40),
121
121
  transparent
122
122
  )
@@ -1,64 +1,26 @@
1
1
  <script lang="ts">
2
- import { swallow } from '@fuzdev/fuz_util/dom.ts';
3
2
  import { color_schemes, type ColorScheme } from '@fuzdev/fuz_css/theme.ts';
3
+ import type { OmitStrict } from '@fuzdev/fuz_util/types.ts';
4
4
  import type { SvelteHTMLElements } from 'svelte/elements';
5
5
 
6
6
  import { theme_state_context } from './theme_state.svelte.js';
7
+ import RadioMenu from './RadioMenu.svelte';
7
8
 
8
9
  const get_theme_state = theme_state_context.get();
9
10
 
10
11
  const {
11
12
  value = get_theme_state(),
12
13
  ...rest
13
- }: SvelteHTMLElements['menu'] & {
14
+ }: OmitStrict<SvelteHTMLElements['menu'], 'title' | 'children' | 'onselect'> & {
14
15
  value?: { color_scheme: ColorScheme };
15
16
  } = $props();
16
17
  </script>
17
18
 
18
- <!-- TODO maybe support menubar aria
19
- https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/menubar_role -->
20
- <menu {...rest} class="color-scheme-control unstyled {rest.class}">
21
- {#each color_schemes as color_scheme (color_scheme)}
22
- {@const selected = color_scheme === value.color_scheme}
23
- <button
24
- type="button"
25
- class={['color-scheme color_a', { selected }]}
26
- role="menuitemradio"
27
- title={selected
28
- ? `${color_scheme} color scheme is selected`
29
- : `select ${color_scheme} color scheme`}
30
- aria-checked={selected}
31
- onclick={(e) => {
32
- swallow(e);
33
- value.color_scheme = color_scheme;
34
- }}
35
- >
36
- <div class="content">{color_scheme}</div>
37
- </button>
38
- {/each}
39
- </menu>
40
-
41
- <style>
42
- .color-scheme-control {
43
- display: flex;
44
- flex-direction: row;
45
- justify-content: center;
46
- }
47
- .content {
48
- display: flex;
49
- align-items: center;
50
- justify-content: center;
51
- padding: 0 var(--space_lg);
52
- }
53
- .color-scheme {
54
- border-radius: 0;
55
- }
56
- .color-scheme:first-child {
57
- border-top-left-radius: var(--border_radius, var(--border_radius_md));
58
- border-bottom-left-radius: var(--border_radius, var(--border_radius_md));
59
- }
60
- .color-scheme:last-child {
61
- border-top-right-radius: var(--border_radius, var(--border_radius_md));
62
- border-bottom-right-radius: var(--border_radius, var(--border_radius_md));
63
- }
64
- </style>
19
+ <RadioMenu
20
+ {...rest}
21
+ options={color_schemes}
22
+ bind:value={value.color_scheme}
23
+ label={(color_scheme) => color_scheme}
24
+ title={(color_scheme, selected) =>
25
+ selected ? `${color_scheme} color scheme is selected` : `select ${color_scheme} color scheme`}
26
+ />
@@ -1,6 +1,7 @@
1
1
  import { type ColorScheme } from '@fuzdev/fuz_css/theme.ts';
2
+ import type { OmitStrict } from '@fuzdev/fuz_util/types.ts';
2
3
  import type { SvelteHTMLElements } from 'svelte/elements';
3
- type $$ComponentProps = SvelteHTMLElements['menu'] & {
4
+ type $$ComponentProps = OmitStrict<SvelteHTMLElements['menu'], 'title' | 'children' | 'onselect'> & {
4
5
  value?: {
5
6
  color_scheme: ColorScheme;
6
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ColorSchemeInput.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ColorSchemeInput.svelte"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,MAAM,CAAC,GAAG;IACrD,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,WAAW,CAAA;KAAE,CAAC;CACtC,CAAC;AAmCH,QAAA,MAAM,gBAAgB,sDAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"ColorSchemeInput.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ColorSchemeInput.svelte"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKzD,KAAK,gBAAgB,GAAI,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC,GAAG;IACpG,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,WAAW,CAAA;KAAE,CAAC;CACtC,CAAC;AAsBH,QAAA,MAAM,gBAAgB,sDAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
@@ -69,7 +69,7 @@
69
69
  class={[
70
70
  'copy-to-clipboard',
71
71
  rest.class,
72
- { icon_button: children ? false : icon_button, copied, failed, color_c: failed }
72
+ { icon_button: children ? false : icon_button, copied, failed, palette_c: failed }
73
73
  ]}
74
74
  onclick={(e) => {
75
75
  onclick?.(e); // before the internal handler, which is async
@@ -176,7 +176,7 @@
176
176
  .dialog {
177
177
  --pane_shadow: var(--shadow_bottom_xl)
178
178
  color-mix(
179
- in hsl,
179
+ in oklab,
180
180
  var(--shadow_color, var(--shadow_color_umbra)) var(--shadow_alpha_70),
181
181
  transparent
182
182
  );
@@ -196,9 +196,13 @@
196
196
  overflow: auto;
197
197
  overscroll-behavior: contain;
198
198
  }
199
- /* the native backdrop is the dim background; fade it in on open */
199
+ /* the native backdrop is the dim background; fade it in on open. It reads
200
+ fuz_css's `--backdrop_color` like a plain dialog's does, then its default
201
+ `--darken_60` for a variable set without it. Older browsers don't let
202
+ ::backdrop inherit custom properties from the page, so the last fallback
203
+ is that value as a literal */
200
204
  .dialog::backdrop {
201
- background-color: var(--dialog_bg, var(--darken_60));
205
+ background-color: var(--backdrop_color, var(--darken_60, #000000a6));
202
206
  transition: background-color var(--duration_2) ease;
203
207
  }
204
208
  @starting-style {
@@ -68,8 +68,8 @@
68
68
  max_width?: string;
69
69
  /**
70
70
  * The close button floating just outside the content surface's top-right
71
- * corner. `true` (the default) renders an absolutely-positioned `.sm.plain.icon_button`
72
- * that closes the dialog; `false` removes it. It renders after
71
+ * corner. `true` (the default) renders an absolutely-positioned
72
+ * `.sized_sm.plain.icon_button` that closes the dialog; `false` removes it. It renders after
73
73
  * `children`, so a content control (or an `autofocus` element) takes initial
74
74
  * focus on open rather than the close button.
75
75
  *
@@ -107,7 +107,7 @@
107
107
  // into the consumer's snippet, which carries its own style scope
108
108
  const close_button_attrs: DialogCloseButtonAttrs = {
109
109
  type: 'button',
110
- class: 'sm plain icon_button',
110
+ class: 'sized_sm plain icon_button',
111
111
  style: 'position: absolute; top: 0; right: 0;',
112
112
  onclick: dialog.close,
113
113
  title: 'close',
@@ -33,8 +33,8 @@ type $$ComponentProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
33
33
  max_width?: string;
34
34
  /**
35
35
  * The close button floating just outside the content surface's top-right
36
- * corner. `true` (the default) renders an absolutely-positioned `.sm.plain.icon_button`
37
- * that closes the dialog; `false` removes it. It renders after
36
+ * corner. `true` (the default) renders an absolutely-positioned
37
+ * `.sized_sm.plain.icon_button` that closes the dialog; `false` removes it. It renders after
38
38
  * `children`, so a content control (or an `autofocus` element) takes initial
39
39
  * focus on open rather than the close button.
40
40
  *
@@ -64,7 +64,7 @@
64
64
  border: var(--border_width) double var(--border_color);
65
65
  }
66
66
  .logo a:hover {
67
- --border_color: var(--color_a_50);
67
+ --border_color: var(--palette_a_50);
68
68
  }
69
69
  .root-url {
70
70
  /* TODO messy */
@@ -45,7 +45,7 @@
45
45
  .scrolled {
46
46
  box-shadow: var(--shadow_bottom_xs)
47
47
  color-mix(
48
- in hsl,
48
+ in oklab,
49
49
  var(--shadow_color, var(--shadow_color_umbra)) var(--shadow_alpha_30),
50
50
  transparent
51
51
  );
@@ -67,12 +67,12 @@
67
67
 
68
68
  <style>
69
69
  .hue-input {
70
- --outline_color: hsl(var(--hue) 50% 60%);
70
+ --outline_color: oklch(0.65 0.13 var(--hue));
71
71
  /* TODO @many figure these variables out so they're easily customized (similar pattern in a lot of places) */
72
- /* --thumb_background_color: hsl(var(--hue) 50% 50%); */
72
+ /* --thumb_background_color: oklch(0.6 0.13 var(--hue)); */
73
73
  }
74
74
  .preview {
75
- background-color: hsl(var(--hue) 50% 50%);
75
+ background-color: oklch(0.6 0.13 var(--hue));
76
76
  /* mirror the `min-height: var(--input_height)` that fuz_css gives the sibling inputs,
77
77
  so the preview tracks their height even when `--input_height` is customized */
78
78
  min-height: var(--input_height);
@@ -88,22 +88,14 @@
88
88
  }
89
89
  .minimap-wrapper {
90
90
  padding: 0 var(--input_padding_x);
91
- background: hsl(0 50% 50%) 0%;
92
91
  }
93
92
  .minimap {
93
+ /* sweep the OKLCH hue circle at constant lightness/chroma so the strip
94
+ matches what the hue knobs actually produce */
94
95
  background: linear-gradient(
95
- 90deg,
96
- hsl(0 50% 50%) 0%,
97
- hsl(36 50% 50%) 10%,
98
- hsl(72 50% 50%) 20%,
99
- hsl(108 50% 50%) 30%,
100
- hsl(144 50% 50%) 40%,
101
- hsl(180 50% 50%) 50%,
102
- hsl(216 50% 50%) 60%,
103
- hsl(252 50% 50%) 70%,
104
- hsl(288 50% 50%) 80%,
105
- hsl(324 50% 50%) 90%,
106
- hsl(360 50% 50%) 100%
96
+ 90deg in oklch longer hue,
97
+ oklch(0.6 0.13 0) 0%,
98
+ oklch(0.6 0.13 360) 100%
107
99
  );
108
100
  height: var(--space_lg);
109
101
  }
@@ -282,16 +282,16 @@ with file-type coloring. Uses svelte-docinfo's file type predicates for module c
282
282
  }
283
283
  /* TODO probably add variables/classes for these */
284
284
  .ts {
285
- --link_color: var(--color_a_50);
285
+ --link_color: var(--palette_a_50);
286
286
  }
287
287
  .svelte {
288
- --link_color: var(--color_h_50);
288
+ --link_color: var(--palette_h_50);
289
289
  }
290
290
  .css {
291
- --link_color: var(--color_b_50);
291
+ --link_color: var(--palette_b_50);
292
292
  }
293
293
  .json {
294
- --link_color: var(--color_f_50);
294
+ --link_color: var(--palette_f_50);
295
295
  }
296
296
  /* TODO extract */
297
297
  .declarations {
@@ -34,7 +34,7 @@
34
34
  // the site-local path if `homepage_url` is unavailable.
35
35
  const url_api = $derived((full && module?.url_api_full) || module?.url_api);
36
36
 
37
- const color_class = $derived(module_path.endsWith('.svelte') ? 'color_h' : '');
37
+ const color_class = $derived(module_path.endsWith('.svelte') ? 'palette_h' : '');
38
38
 
39
39
  const contextmenu_entries = $derived(module ? create_module_contextmenu(module) : undefined);
40
40
  </script>
@@ -28,7 +28,7 @@
28
28
  .thumbnail {
29
29
  box-shadow: var(--shadow_bottom_xs)
30
30
  color-mix(
31
- in hsl,
31
+ in oklab,
32
32
  var(--shadow_color, var(--shadow_color_umbra)) var(--shadow_alpha_30),
33
33
  transparent
34
34
  );
@@ -36,7 +36,7 @@
36
36
  .thumbnail:hover {
37
37
  box-shadow: var(--shadow_bottom_sm)
38
38
  color-mix(
39
- in hsl,
39
+ in oklab,
40
40
  var(--shadow_color, var(--shadow_color_umbra)) var(--shadow_alpha_30),
41
41
  transparent
42
42
  );
@@ -53,7 +53,7 @@
53
53
  .thumbnail:active {
54
54
  box-shadow: var(--shadow_top_xs)
55
55
  color-mix(
56
- in hsl,
56
+ in oklab,
57
57
  var(--shadow_color, var(--shadow_color_umbra)) var(--shadow_alpha_30),
58
58
  transparent
59
59
  );
@@ -0,0 +1,97 @@
1
+ <script lang="ts" generics="T">
2
+ import { swallow } from '@fuzdev/fuz_util/dom.ts';
3
+ import type { OmitStrict } from '@fuzdev/fuz_util/types.ts';
4
+ import type { Snippet } from 'svelte';
5
+ import type { SvelteHTMLElements } from 'svelte/elements';
6
+
7
+ /**
8
+ * A horizontal menu of joined `menuitemradio` buttons with one selected -
9
+ * the shape `ColorSchemeInput` takes, and any other few-way pick where the
10
+ * options should sit one glance apart rather than behind a `select`.
11
+ *
12
+ * @module
13
+ */
14
+
15
+ let {
16
+ options,
17
+ value = $bindable(),
18
+ onselect,
19
+ label,
20
+ title,
21
+ key = (option: T): unknown => label(option),
22
+ children,
23
+ ...rest
24
+ }: OmitStrict<SvelteHTMLElements['menu'], 'title' | 'children' | 'onselect'> & {
25
+ options: Array<T>;
26
+ /** The selected option, compared by identity; bindable. */
27
+ value: T;
28
+ /** Called after a click selects an option. */
29
+ onselect?: (option: T) => void;
30
+ /** The display text of an option - also the default `title` and `key` source. */
31
+ label: (option: T) => string;
32
+ /** The button title, defaulting to "select X" / "X is selected" from `label`. */
33
+ title?: (option: T, selected: boolean) => string;
34
+ /** Keys the options list; defaults to the label. */
35
+ key?: (option: T) => unknown;
36
+ /** Custom button content in place of the label text. */
37
+ children?: Snippet<[option: T, selected: boolean]>;
38
+ } = $props();
39
+
40
+ const title_of = (option: T, selected: boolean): string =>
41
+ title
42
+ ? title(option, selected)
43
+ : selected
44
+ ? `${label(option)} is selected`
45
+ : `select ${label(option)}`;
46
+ </script>
47
+
48
+ <menu {...rest} class={['radio-menu unstyled', rest.class]}>
49
+ {#each options as option (key(option))}
50
+ {@const selected = option === value}
51
+ <button
52
+ type="button"
53
+ class={['radio-menu-item palette_a', { selected }]}
54
+ role="menuitemradio"
55
+ title={title_of(option, selected)}
56
+ aria-checked={selected}
57
+ onclick={(e) => {
58
+ swallow(e);
59
+ value = option;
60
+ onselect?.(option);
61
+ }}
62
+ >
63
+ <div class="content">
64
+ {#if children}
65
+ {@render children(option, selected)}
66
+ {:else}
67
+ {label(option)}
68
+ {/if}
69
+ </div>
70
+ </button>
71
+ {/each}
72
+ </menu>
73
+
74
+ <style>
75
+ .radio-menu {
76
+ display: flex;
77
+ flex-direction: row;
78
+ justify-content: center;
79
+ }
80
+ .content {
81
+ display: flex;
82
+ align-items: center;
83
+ justify-content: center;
84
+ padding: 0 var(--space_lg);
85
+ }
86
+ .radio-menu-item {
87
+ border-radius: 0;
88
+ }
89
+ .radio-menu-item:first-child {
90
+ border-top-left-radius: var(--border_radius, var(--border_radius_md));
91
+ border-bottom-left-radius: var(--border_radius, var(--border_radius_md));
92
+ }
93
+ .radio-menu-item:last-child {
94
+ border-top-right-radius: var(--border_radius, var(--border_radius_md));
95
+ border-bottom-right-radius: var(--border_radius, var(--border_radius_md));
96
+ }
97
+ </style>
@@ -0,0 +1,41 @@
1
+ import type { OmitStrict } from '@fuzdev/fuz_util/types.ts';
2
+ import type { Snippet } from 'svelte';
3
+ declare function $$render<T>(): {
4
+ props: OmitStrict<import("svelte/elements").HTMLMenuAttributes, "children" | "title" | "onselect"> & {
5
+ options: Array<T>;
6
+ /** The selected option, compared by identity; bindable. */
7
+ value: T;
8
+ /** Called after a click selects an option. */
9
+ onselect?: (option: T) => void;
10
+ /** The display text of an option - also the default `title` and `key` source. */
11
+ label: (option: T) => string;
12
+ /** The button title, defaulting to "select X" / "X is selected" from `label`. */
13
+ title?: (option: T, selected: boolean) => string;
14
+ /** Keys the options list; defaults to the label. */
15
+ key?: (option: T) => unknown;
16
+ /** Custom button content in place of the label text. */
17
+ children?: Snippet<[option: T, selected: boolean]>;
18
+ };
19
+ exports: {};
20
+ bindings: "value";
21
+ slots: {};
22
+ events: {};
23
+ };
24
+ declare class __sveltets_Render<T> {
25
+ props(): ReturnType<typeof $$render<T>>['props'];
26
+ events(): ReturnType<typeof $$render<T>>['events'];
27
+ slots(): ReturnType<typeof $$render<T>>['slots'];
28
+ bindings(): "value";
29
+ exports(): {};
30
+ }
31
+ interface $$IsomorphicComponent {
32
+ new <T>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
33
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
34
+ } & ReturnType<__sveltets_Render<T>['exports']>;
35
+ <T>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
36
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
37
+ }
38
+ declare const RadioMenu: $$IsomorphicComponent;
39
+ type RadioMenu<T> = InstanceType<typeof RadioMenu<T>>;
40
+ export default RadioMenu;
41
+ //# sourceMappingURL=RadioMenu.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioMenu.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/RadioMenu.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,iBAAS,QAAQ,CAAC,CAAC;;iBAMR,KAAK,CAAC,CAAC,CAAC;QACjB,2DAA2D;eACpD,CAAC;QACR,8CAA8C;mBACnC,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI;QAC9B,iFAAiF;eAC1E,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM;QAC5B,iFAAiF;gBACzE,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM;QAChD,oDAAoD;cAC9C,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO;QAC5B,wDAAwD;mBAC7C,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;;;;;;EAoD0E;AAC9H,cAAM,iBAAiB,CAAC,CAAC;IACrB,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClD,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,QAAQ;IACR,OAAO;CACV;AAED,UAAU,qBAAqB;IAC3B,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5X,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3H,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACjE;AACD,QAAA,MAAM,SAAS,EAAE,qBAAmC,CAAC;AACnC,KAAK,SAAS,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,eAAe,SAAS,CAAC"}
@@ -125,7 +125,7 @@
125
125
 
126
126
  <style>
127
127
  svg {
128
- background: var(--sparkline_bg, color-mix(in hsl, currentColor 8%, transparent));
128
+ background: var(--sparkline_bg, color-mix(in oklab, currentColor 8%, transparent));
129
129
  border-radius: var(--border_radius_xs);
130
130
  }
131
131
  </style>
@@ -15,16 +15,16 @@
15
15
 
16
16
  const {
17
17
  spiders = [
18
- 'var(--color_a_50)',
19
- 'var(--color_b_50)',
20
- 'var(--color_c_50)',
21
- 'var(--color_d_50)',
22
- 'var(--color_e_50)',
23
- 'var(--color_f_50)',
24
- 'var(--color_g_50)',
25
- 'var(--color_h_50)',
26
- 'var(--color_i_50)',
27
- 'var(--color_j_50)'
18
+ 'var(--palette_a_50)',
19
+ 'var(--palette_b_50)',
20
+ 'var(--palette_c_50)',
21
+ 'var(--palette_d_50)',
22
+ 'var(--palette_e_50)',
23
+ 'var(--palette_f_50)',
24
+ 'var(--palette_g_50)',
25
+ 'var(--palette_h_50)',
26
+ 'var(--palette_i_50)',
27
+ 'var(--palette_j_50)'
28
28
  ],
29
29
  seed = minute_of_day(),
30
30
  random = create_random_alea(seed),
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { swallow } from '@fuzdev/fuz_util/dom.ts';
3
- import type { Theme } from '@fuzdev/fuz_css/theme.ts';
3
+ import type { Theme } from '@fuzdev/fuz_css/variable.ts';
4
4
  import { default_themes } from '@fuzdev/fuz_css/themes.ts';
5
5
  import type { SvelteHTMLElements } from 'svelte/elements';
6
6
 
@@ -35,7 +35,7 @@
35
35
  <li class="row" role="none">
36
36
  <button
37
37
  type="button"
38
- class={['theme-button color_a', { selected }]}
38
+ class={['theme-button palette_a', { selected }]}
39
39
  role="menuitemradio"
40
40
  aria-label="{theme.name} theme"
41
41
  aria-checked={selected}
@@ -1,4 +1,4 @@
1
- import type { Theme } from '@fuzdev/fuz_css/theme.ts';
1
+ import type { Theme } from '@fuzdev/fuz_css/variable.ts';
2
2
  import type { SvelteHTMLElements } from 'svelte/elements';
3
3
  type $$ComponentProps = SvelteHTMLElements['menu'] & {
4
4
  selected_theme?: {
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeInput.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ThemeInput.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,MAAM,CAAC,GAAG;IACrD,cAAc,CAAC,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC,CAAC;AAqDH,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ThemeInput.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ThemeInput.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,MAAM,CAAC,GAAG;IACrD,cAAc,CAAC,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC,CAAC;AAqDH,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -4,7 +4,8 @@
4
4
 
5
5
  <script lang="ts">
6
6
  import { onMount, type Snippet } from 'svelte';
7
- import { render_theme_style, type Theme } from '@fuzdev/fuz_css/theme.ts';
7
+ import { render_theme_style } from '@fuzdev/fuz_css/theme.ts';
8
+ import type { Theme } from '@fuzdev/fuz_css/variable.ts';
8
9
  import { DEFAULT_THEME } from '@fuzdev/fuz_css/themes.ts';
9
10
  import { DEV } from 'esm-env';
10
11
 
@@ -1,5 +1,5 @@
1
1
  import { type Snippet } from 'svelte';
2
- import { type Theme } from '@fuzdev/fuz_css/theme.ts';
2
+ import type { Theme } from '@fuzdev/fuz_css/variable.ts';
3
3
  import { load_color_scheme as default_load_color_scheme, save_color_scheme as default_save_color_scheme, sync_color_scheme as default_sync_color_scheme, save_theme as default_save_theme, load_theme as default_load_theme, ThemeState } from './theme_state.svelte.js';
4
4
  type $$ComponentProps = {
5
5
  sync_color_scheme?: typeof default_sync_color_scheme;
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeRoot.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ThemeRoot.svelte"],"names":[],"mappings":"AAMA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAsB,KAAK,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAI1E,OAAO,EACL,iBAAiB,IAAI,yBAAyB,EAC9C,iBAAiB,IAAI,yBAAyB,EAC9C,iBAAiB,IAAI,yBAAyB,EAC9C,UAAU,IAAI,kBAAkB,EAChC,UAAU,IAAI,kBAAkB,EAEhC,UAAU,EACV,MAAM,yBAAyB,CAAC;AAGjC,KAAK,gBAAgB,GAAI;IACxB,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,UAAU,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACvC,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC;;;OAGG;IACH,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,QAAQ,EAAE,OAAO,CAChB;QAAC,WAAW,EAAE,UAAU;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI;QAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;KAAC,CAChF,CAAC;CACF,CAAC;AAoFH,QAAA,MAAM,SAAS,sDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"ThemeRoot.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ThemeRoot.svelte"],"names":[],"mappings":"AAMA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAIzD,OAAO,EACL,iBAAiB,IAAI,yBAAyB,EAC9C,iBAAiB,IAAI,yBAAyB,EAC9C,iBAAiB,IAAI,yBAAyB,EAC9C,UAAU,IAAI,kBAAkB,EAChC,UAAU,IAAI,kBAAkB,EAEhC,UAAU,EACV,MAAM,yBAAyB,CAAC;AAGjC,KAAK,gBAAgB,GAAI;IACxB,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,UAAU,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACvC,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC;;;OAGG;IACH,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,QAAQ,EAAE,OAAO,CAChB;QAAC,WAAW,EAAE,UAAU;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI;QAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;KAAC,CAChF,CAAC;CACF,CAAC;AAqFH,QAAA,MAAM,SAAS,sDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
package/dist/alert.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // TODO move to module context?
2
2
  export const alert_status_options = {
3
3
  inform: { color: 'var(--text_70)', icon: 'โœป' },
4
- help: { color: 'var(--color_b_50)', icon: 'โžบ' },
5
- error: { color: 'var(--color_c_50)', icon: '!?' }
4
+ help: { color: 'var(--palette_b_50)', icon: 'โžบ' },
5
+ error: { color: 'var(--negative_50)', icon: '!?' }
6
6
  };
@@ -1 +1 @@
1
- {"version":3,"file":"logos.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/logos.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,QAAQ;;;;;;CAgCF,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC;AAEpB,eAAO,MAAM,YAAY;;;;;;CAIN,CAAC;AAEpB,eAAO,MAAM,YAAY;;;;;;;CAKN,CAAC;AAEpB,eAAO,MAAM,WAAW;;;;;;CAIL,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,iBAAiB;;;;;;CAIX,CAAC;AAEpB,eAAO,MAAM,cAAc;;;;;;CAIR,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,mBAAmB;;;;;;CAQb,CAAC;AAEpB,eAAO,MAAM,iBAAiB;;;;;;CAQX,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAwBP,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC;AAEpB,eAAO,MAAM,WAAW;;;;;;;;;CAWL,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC"}
1
+ {"version":3,"file":"logos.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/logos.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,QAAQ;;;;;;CAgCF,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC;AAEpB,eAAO,MAAM,YAAY;;;;;;CAIN,CAAC;AAEpB,eAAO,MAAM,YAAY;;;;;;;CAKN,CAAC;AAEpB,eAAO,MAAM,WAAW;;;;;;CAIL,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,iBAAiB;;;;;;CAIX,CAAC;AAEpB,eAAO,MAAM,cAAc;;;;;;CAIR,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAIP,CAAC;AAEpB,eAAO,MAAM,mBAAmB;;;;;;CAQb,CAAC;AAEpB,eAAO,MAAM,iBAAiB;;;;;;CAQX,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;CAwBP,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC;AAEpB,eAAO,MAAM,WAAW;;;;;;;;;CAWL,CAAC;AAEpB,eAAO,MAAM,QAAQ;;;;;;CAQF,CAAC"}
package/dist/logos.js CHANGED
@@ -1,18 +1,20 @@
1
1
  // TODO these can be optimized during builds, helpers and gen files?
2
2
  /*
3
3
 
4
- Logo colors are the midpoint between the light and dark versions of color variant 5:
4
+ Logo colors are frozen brand values, originally derived as the midpoint
5
+ between the light and dark mid-stops of fuz_css's pre-OKLCH palette
6
+ (today's `--palette_X_50`), and deliberately not re-derived since:
5
7
 
6
8
  ```css
7
- --color_a: #6199d1;
8
- --color_b: #3db33d;
9
- --color_c: #d93636;
10
- --color_d: #8866cc;
11
- --color_e: #d8bc31;
12
- --color_f: #84522a; // TODO this one isn't the midpoint bc fuz_css's color needs tweaking, too light in dark mode
13
- --color_g: #e55d95;
14
- --color_h: #f4672f;
15
- --color_i: #36e2e2;
9
+ #6199d1 (blue, a)
10
+ #3db33d (green, b)
11
+ #d93636 (red, c)
12
+ #8866cc (purple, d)
13
+ #d8bc31 (yellow, e)
14
+ #84522a (brown, f)
15
+ #e55d95 (pink, g)
16
+ #f4672f (orange, h)
17
+ #36e2e2 (cyan, i)
16
18
  ```
17
19
  */
18
20
  export const logo_gro = {
@@ -142,7 +144,7 @@ export const logo_fuz_util = {
142
144
  ]
143
145
  };
144
146
  export const logo_tsv = {
145
- label: 'a pixelated orange quill drawing a straight line',
147
+ label: 'a pixelated orange quill drawing a precise line',
146
148
  fill: '#f4672f',
147
149
  paths: [
148
150
  {
package/dist/projects.js CHANGED
@@ -8,7 +8,7 @@ export const project_items = [
8
8
  { name: 'fuz_app', url: 'https://app.fuz.dev/', logo: logo_fuz_app, description: '[pre-alpha] fullstack app library', glyph: '๐Ÿ—', color_class: 'color_j_50' },
9
9
  { name: 'fuz_css', url: 'https://css.fuz.dev/', logo: logo_fuz_css, description: 'semantic-first CSS framework and design system', glyph: '๐ŸŒฟ', color_class: 'color_b_50' },
10
10
  { name: 'fuz_ui', url: 'https://ui.fuz.dev/', logo: logo_fuz_ui, description: 'Svelte UI library', glyph: '๐Ÿงถ', color_class: 'color_c_50' },
11
- { name: 'fuz_template', url: 'https://template.fuz.dev/', logo: logo_fuz_template, description: 'a static web app and Node library template with TypeScript, Svelte, SvelteKit, Vite, esbuild, Gro, and Fuz', glyph: 'โ„', color_class: 'color_h_50' },
11
+ { name: 'fuz_template', url: 'https://template.fuz.dev/', logo: logo_fuz_template, description: 'a web app template with TypeScript + SvelteKit + optional Rust for the fuz-stack', glyph: 'โ„', color_class: 'color_h_50' },
12
12
  { name: 'fuz_blog', url: 'https://blog.fuz.dev/', logo: logo_fuz_blog, description: 'blog software from scratch with SvelteKit', glyph: '๐Ÿ–Š๏ธ', color_class: 'color_e_50' },
13
13
  { name: 'fuz_code', url: 'https://code.fuz.dev/', logo: logo_fuz_code, description: 'syntax styling utilities and components for TypeScript, Svelte, Markdown, and more', glyph: '๐ŸŽจ', color_class: 'color_g_50' },
14
14
  { name: 'fuz_mastodon', url: 'https://mastodon.fuz.dev/', logo: logo_fuz_mastodon, description: 'Mastodon components and helpers for Svelte, SvelteKit, and Fuz', glyph: '๐Ÿฆฃ', color_class: 'color_d_50' },
@@ -1,4 +1,5 @@
1
- import { type ColorScheme, type Theme } from '@fuzdev/fuz_css/theme.ts';
1
+ import { type ColorScheme } from '@fuzdev/fuz_css/theme.ts';
2
+ import type { Theme } from '@fuzdev/fuz_css/variable.ts';
2
3
  export interface ThemeStateJson {
3
4
  theme: Theme;
4
5
  color_scheme: ColorScheme;
@@ -1 +1 @@
1
- {"version":3,"file":"theme_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/theme_state.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAOvF,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAExD,qBAAa,UAAU;IACtB,KAAK,EAAE,KAAK,CAAiB;IAC7B,YAAY,EAAE,WAAW,CAAiB;gBAE9B,OAAO,CAAC,EAAE,iBAAiB;IAUvC,MAAM,IAAI,cAAc;CAMxB;AACD,eAAO,MAAM,mBAAmB;2CAAwB,UAAU;4BAAV,UAAU;uBAAV,UAAU,WAAV,UAAU;CAAG,CAAC;AAEtE,eAAO,MAAM,iBAAiB,GAAI,cAAc,WAAW,GAAG,IAAI,KAAG,IAOpE,CAAC;AAEF,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAE7C,eAAO,MAAM,iBAAiB,GAC7B,cAAc,WAAW,GAAG,IAAI,EAChC,YAA8B,KAC5B,IAEF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC7B,WAAU,WAAoB,EAC9B,YAA8B,KAC5B,WAA4E,CAAC;AAEhF,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,GAAG,IAAI,EAAE,YAAuB,KAAG,IAEzE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,WAAU,KAA0B,EAAE,YAAuB,KAAG,KAC3C,CAAC"}
1
+ {"version":3,"file":"theme_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/theme_state.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAOzD,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAExD,qBAAa,UAAU;IACtB,KAAK,EAAE,KAAK,CAAiB;IAC7B,YAAY,EAAE,WAAW,CAAiB;gBAE9B,OAAO,CAAC,EAAE,iBAAiB;IAUvC,MAAM,IAAI,cAAc;CAMxB;AACD,eAAO,MAAM,mBAAmB;2CAAwB,UAAU;4BAAV,UAAU;uBAAV,UAAU,WAAV,UAAU;CAAG,CAAC;AAEtE,eAAO,MAAM,iBAAiB,GAAI,cAAc,WAAW,GAAG,IAAI,KAAG,IAOpE,CAAC;AAEF,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAE7C,eAAO,MAAM,iBAAiB,GAC7B,cAAc,WAAW,GAAG,IAAI,EAChC,YAA8B,KAC5B,IAEF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC7B,WAAU,WAAoB,EAC9B,YAA8B,KAC5B,WAA4E,CAAC;AAEhF,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,GAAG,IAAI,EAAE,YAAuB,KAAG,IAEzE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,WAAU,KAA0B,EAAE,YAAuB,KAAG,KAC3C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fuzdev/fuz_ui",
3
- "version": "0.209.0",
3
+ "version": "0.210.1",
4
4
  "description": "Svelte UI library",
5
5
  "tagline": "friendly user zystem",
6
6
  "glyph": "๐Ÿงถ",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "peerDependencies": {
36
36
  "@fuzdev/fuz_code": ">=0.46.0",
37
- "@fuzdev/fuz_css": ">=0.62.0",
37
+ "@fuzdev/fuz_css": ">=0.65.0",
38
38
  "@fuzdev/fuz_util": ">=0.65.1",
39
39
  "@fuzdev/gro": ">=0.204.0",
40
40
  "@fuzdev/mdz": ">=0.2.0",
@@ -63,10 +63,10 @@
63
63
  "devDependencies": {
64
64
  "@changesets/changelog-git": "^0.2.1",
65
65
  "@fuzdev/blake3-wasm": "^0.2.0",
66
- "@fuzdev/fuz_code": "^0.48.0",
67
- "@fuzdev/fuz_css": "^0.64.0",
66
+ "@fuzdev/fuz_code": "^0.50.0",
67
+ "@fuzdev/fuz_css": "^0.65.0",
68
68
  "@fuzdev/fuz_util": "^0.69.0",
69
- "@fuzdev/gro": "^0.212.0",
69
+ "@fuzdev/gro": "^0.213.0",
70
70
  "@fuzdev/mdz": "^0.3.0",
71
71
  "@ryanatkn/eslint-config": "^0.12.2",
72
72
  "@sveltejs/adapter-static": "^3.0.10",
package/src/lib/alert.ts CHANGED
@@ -9,6 +9,6 @@ export interface AlertStatusOptions {
9
9
 
10
10
  export const alert_status_options: Record<AlertStatus, AlertStatusOptions> = {
11
11
  inform: { color: 'var(--text_70)', icon: 'โœป' },
12
- help: { color: 'var(--color_b_50)', icon: 'โžบ' },
13
- error: { color: 'var(--color_c_50)', icon: '!?' }
12
+ help: { color: 'var(--palette_b_50)', icon: 'โžบ' },
13
+ error: { color: 'var(--negative_50)', icon: '!?' }
14
14
  };
package/src/lib/logos.ts CHANGED
@@ -4,18 +4,20 @@ import type { SvgData } from './svg.ts';
4
4
 
5
5
  /*
6
6
 
7
- Logo colors are the midpoint between the light and dark versions of color variant 5:
7
+ Logo colors are frozen brand values, originally derived as the midpoint
8
+ between the light and dark mid-stops of fuz_css's pre-OKLCH palette
9
+ (today's `--palette_X_50`), and deliberately not re-derived since:
8
10
 
9
11
  ```css
10
- --color_a: #6199d1;
11
- --color_b: #3db33d;
12
- --color_c: #d93636;
13
- --color_d: #8866cc;
14
- --color_e: #d8bc31;
15
- --color_f: #84522a; // TODO this one isn't the midpoint bc fuz_css's color needs tweaking, too light in dark mode
16
- --color_g: #e55d95;
17
- --color_h: #f4672f;
18
- --color_i: #36e2e2;
12
+ #6199d1 (blue, a)
13
+ #3db33d (green, b)
14
+ #d93636 (red, c)
15
+ #8866cc (purple, d)
16
+ #d8bc31 (yellow, e)
17
+ #84522a (brown, f)
18
+ #e55d95 (pink, g)
19
+ #f4672f (orange, h)
20
+ #36e2e2 (cyan, i)
19
21
  ```
20
22
  */
21
23
 
@@ -159,7 +161,7 @@ export const logo_fuz_util = {
159
161
  } satisfies SvgData;
160
162
 
161
163
  export const logo_tsv = {
162
- label: 'a pixelated orange quill drawing a straight line',
164
+ label: 'a pixelated orange quill drawing a precise line',
163
165
  fill: '#f4672f',
164
166
  paths: [
165
167
  {
@@ -34,7 +34,7 @@ export const project_items: Array<ProjectItem> = [
34
34
  {name: 'fuz_app', url: 'https://app.fuz.dev/', logo: logo_fuz_app, description: '[pre-alpha] fullstack app library', glyph: '๐Ÿ—', color_class: 'color_j_50'},
35
35
  {name: 'fuz_css', url: 'https://css.fuz.dev/', logo: logo_fuz_css, description: 'semantic-first CSS framework and design system', glyph: '๐ŸŒฟ', color_class: 'color_b_50'},
36
36
  {name: 'fuz_ui', url: 'https://ui.fuz.dev/', logo: logo_fuz_ui, description: 'Svelte UI library', glyph: '๐Ÿงถ', color_class: 'color_c_50'},
37
- {name: 'fuz_template', url: 'https://template.fuz.dev/', logo: logo_fuz_template, description: 'a static web app and Node library template with TypeScript, Svelte, SvelteKit, Vite, esbuild, Gro, and Fuz', glyph: 'โ„', color_class: 'color_h_50'},
37
+ {name: 'fuz_template', url: 'https://template.fuz.dev/', logo: logo_fuz_template, description: 'a web app template with TypeScript + SvelteKit + optional Rust for the fuz-stack', glyph: 'โ„', color_class: 'color_h_50'},
38
38
  {name: 'fuz_blog', url: 'https://blog.fuz.dev/', logo: logo_fuz_blog, description: 'blog software from scratch with SvelteKit', glyph: '๐Ÿ–Š๏ธ', color_class: 'color_e_50'},
39
39
  {name: 'fuz_code', url: 'https://code.fuz.dev/', logo: logo_fuz_code, description: 'syntax styling utilities and components for TypeScript, Svelte, Markdown, and more', glyph: '๐ŸŽจ', color_class: 'color_g_50'},
40
40
  {name: 'fuz_mastodon', url: 'https://mastodon.fuz.dev/', logo: logo_fuz_mastodon, description: 'Mastodon components and helpers for Svelte, SvelteKit, and Fuz', glyph: '๐Ÿฆฃ', color_class: 'color_d_50'},
@@ -1,4 +1,5 @@
1
- import { color_schemes, type ColorScheme, type Theme } from '@fuzdev/fuz_css/theme.ts';
1
+ import { color_schemes, type ColorScheme } from '@fuzdev/fuz_css/theme.ts';
2
+ import type { Theme } from '@fuzdev/fuz_css/variable.ts';
2
3
  import { default_themes } from '@fuzdev/fuz_css/themes.ts';
3
4
  import { BROWSER } from 'esm-env';
4
5