origam 2.18.16 → 2.18.18

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/CHANGELOG.md +839 -0
  2. package/dist/src/assets/css/main.css +1 -1
  3. package/dist/src/assets/css/tokens/dark.css +150 -26
  4. package/dist/src/assets/css/tokens/light.css +75 -13
  5. package/dist/src/assets/scss/tokens/_dark.scss +150 -26
  6. package/dist/src/assets/scss/tokens/_light.scss +75 -13
  7. package/dist/src/components/Btn/OrigamBtn.vue +39 -2
  8. package/dist/src/components/Btn/OrigamBtnGroup.vue +5 -0
  9. package/dist/src/components/DataTable/OrigamDataTable.vue +1 -1
  10. package/dist/src/components/DataTable/OrigamDataTableColumnCell.vue +3 -3
  11. package/dist/src/components/DataTable/OrigamDataTableGroupHeaderRow.vue +11 -4
  12. package/dist/src/components/DataTable/OrigamDataTableHeaderCell.vue +1 -1
  13. package/dist/src/components/DataTable/OrigamDataTableRow.vue +6 -1
  14. package/dist/src/components/DataTable/OrigamDataTableRows.vue +3 -3
  15. package/dist/src/components/Grid/OrigamGrid.vue +19 -0
  16. package/dist/src/components/List/OrigamListItem.vue +7 -0
  17. package/dist/src/components/List/OrigamListSubheader.vue +5 -0
  18. package/dist/src/components/Pagination/OrigamPagination.vue +64 -2
  19. package/dist/src/components/Toolbar/OrigamToolbar.vue +58 -0
  20. package/dist/src/composables/Commons/defaults.composable.d.ts +51 -0
  21. package/dist/src/composables/DataTable/headers.composable.d.ts +4 -4
  22. package/dist/src/consts/EmptyState/empty-state.const.d.ts +2 -16
  23. package/dist/src/interfaces/Commons/installed-theme.interface.cjs +1 -0
  24. package/dist/src/interfaces/Commons/installed-theme.interface.d.ts +26 -0
  25. package/dist/src/interfaces/Commons/installed-theme.interface.js +0 -0
  26. package/dist/src/interfaces/Commons/semantic-tree.interface.cjs +1 -0
  27. package/dist/src/interfaces/Commons/semantic-tree.interface.d.ts +30 -0
  28. package/dist/src/interfaces/Commons/semantic-tree.interface.js +0 -0
  29. package/dist/src/interfaces/Commons/theme.interface.d.ts +1 -1
  30. package/dist/src/interfaces/EmptyState/empty-state.interface.d.ts +13 -0
  31. package/dist/src/interfaces/index.cjs +22 -0
  32. package/dist/src/interfaces/index.d.ts +2 -0
  33. package/dist/src/interfaces/index.js +2 -0
  34. package/dist/src/types/Commons/installed-theme.type.d.ts +2 -27
  35. package/dist/src/types/Commons/semantic-tree.type.d.ts +0 -29
  36. package/dist/src/types/tokens.type.d.ts +1 -1
  37. package/dist/src/utils/Commons/apply-theme.util.d.ts +1 -1
  38. package/package.json +1 -1
@@ -685,6 +685,13 @@ defineExpose({
685
685
  }
686
686
 
687
687
  &__overlay {
688
+ // ⛔ C2 (#597, deja tranche en PR #586) — `--origam-list-item__overlay
689
+ // ---background-color` et `---transition-timing-function` restent NON
690
+ // DECLARES, a dessein : leur second echelon
691
+ // (`--origam-list__item---overlay-*`) est, lui, declare et type
692
+ // (`TTokenName`). Declarer le premier echelon a `:root` le figerait et
693
+ // MASQUERAIT DEFINITIVEMENT ce crochet de theming public. La garde
694
+ // compare des noms, pas des chaines de repli : faux positif, pas dette.
688
695
  background-color: var(--origam-list-item__overlay---background-color, var(--origam-list__item---overlay-background-color, currentColor));
689
696
  border-radius: var(--origam-list-item__overlay---border-radius, inherit);
690
697
  opacity: var(--origam-list-item__overlay---opacity, var(--origam-list__item---overlay-opacity, 0));
@@ -133,6 +133,11 @@ defineExpose({
133
133
  background: inherit;
134
134
  color: var(--origam-list-subheader---color, var(--origam-color__text---secondary));
135
135
  display: flex;
136
+ // ⛔ C2 (#597, deja tranche en PR #586) — `--origam-list-subheader
137
+ // ---font-size` reste NON DECLARE, a dessein : il est ECRIT PAR LE PARENT
138
+ // (`OrigamList.vue`, variante `nav`) et son second echelon
139
+ // `--origam-list__subheader---font-size` est declare et type. Le declarer a
140
+ // `:root` masquerait definitivement ce second crochet.
136
141
  font-size: var(--origam-list-subheader---font-size, var(--origam-list__subheader---font-size, 0.875rem));
137
142
  font-weight: var(--origam-list-subheader---font-weight, 400);
138
143
  line-height: var(--origam-list-subheader---line-height, 1.375rem);
@@ -629,12 +629,25 @@ defineExpose({
629
629
  }
630
630
 
631
631
  &--colored {
632
+ // ⛔ #596 — these two READ the `--primary` state tokens, not a
633
+ // `-colored` suffix. The sheets have always declared
634
+ // `--origam-pagination--primary---{background-color,color}` with
635
+ // exactly the values below as their value, while this block read
636
+ // `--origam-pagination---{background-color,color}-colored` — two
637
+ // grammars whose names never coincide, so the declaration was
638
+ // dormant and the fallback did all the work (the #550 defect
639
+ // shape). Renaming the READ side rather than duplicating the
640
+ // declaration keeps ONE grammar — `--{state}---{property}` — and
641
+ // matches `--origam-pagination--primary---box-shadow` three lines
642
+ // below, which this file already reads correctly. Rendering is
643
+ // unchanged: declared value == the fallback it replaces, in light
644
+ // and in dark.
632
645
  --bg-base: var(
633
- --origam-pagination---background-color-colored,
646
+ --origam-pagination--primary---background-color,
634
647
  var(--origam-color__action--primary---bg)
635
648
  );
636
649
  --fg-base: var(
637
- --origam-pagination---color-colored,
650
+ --origam-pagination--primary---color,
638
651
  var(--origam-color__action--primary---fg)
639
652
  );
640
653
 
@@ -651,6 +664,20 @@ defineExpose({
651
664
 
652
665
  // Hover state — derived: 20 % darker than --bg-base.
653
666
  // Consumer can override via --origam-pagination---background-color-hover.
667
+ //
668
+ // ⛔ #596 — `--origam-pagination---color-hover` STAYS UNDECLARED in the
669
+ // token sheets, deliberately. Its fallback is `var(--fg-base)`, and
670
+ // `--fg-base` is synthesised PER INSTANCE on `.origam-pagination`
671
+ // itself (line ~800, and repointed by `&--colored`). A custom
672
+ // property's computed value is its specified value with `var()`
673
+ // ALREADY substituted ON THE DECLARING ELEMENT — so a `:root`
674
+ // declaration of `var(--fg-base)` would be substituted where
675
+ // `--fg-base` does not exist, become guaranteed-invalid, and every
676
+ // read would fall straight back to the inline fallback again. The
677
+ // rendering would be byte-identical and the guard would go green on a
678
+ // channel that does nothing: a lie, not a fix. It therefore stays in
679
+ // `baseline/token-var-channels.json` as a known false positive — the
680
+ // guard compares NAMES, not fallback chains.
654
681
  :deep(.origam-btn:hover:not(.origam-btn--active)) {
655
682
  --origam-btn---background-color: var(
656
683
  --origam-pagination---background-color-hover,
@@ -683,6 +710,41 @@ defineExpose({
683
710
 
684
711
  // Active state — derived: 30 % darker than --bg-base.
685
712
  // Consumer can override via the matching `is-active` vars.
713
+ //
714
+ // ⛔ #596 — of the four `--item--is-active---*` channels read below,
715
+ // only `---border-color` is declared in the token sheets (its fallback
716
+ // is the plain literal `transparent`). The other three STAY UNDECLARED
717
+ // on purpose, each for a measured reason:
718
+ //
719
+ // • `---color` falls back to `var(--fg-base)` — synthesised per
720
+ // instance, so a `:root` declaration is guaranteed-invalid and
721
+ // inert (same mechanism as the hover block above). Worse, the
722
+ // sheets carry a DORMANT near-twin under the other grammar,
723
+ // `--origam-pagination__item---active-color:
724
+ // var(--origam-color__action--primary---fg)` = WHITE. "Renaming"
725
+ // that declaration onto this read — the #550 reflex — would paint
726
+ // the active page label white on the untinted (transparent /
727
+ // white) surface of uncolored mode: invisible. Exactly the
728
+ // BottomNav trap: a name that reads right and inverts the render.
729
+ //
730
+ // • `---background-color` is read TWICE with two DIFFERENT fallbacks
731
+ // — `color-mix(… var(--bg-base), black 30%)` here, and
732
+ // `var(--origam-color__neutral---200, #e6e6e6)` on the overlay
733
+ // below. No single declaration preserves both, and its dormant
734
+ // twin `--origam-pagination__item---active-background-color` is
735
+ // `action--primary---bg`, which matches neither. The overlay value
736
+ // is the one a user-reported defect was fixed to (652a770e, then
737
+ // cb10d654) — re-pointing it is a design decision, not a wiring
738
+ // one.
739
+ //
740
+ // • `---active-overlay-opacity` is likewise read twice, with `1` on
741
+ // the uncolored branch and `0` on the colored one — opposite
742
+ // defaults by design, so no root value can hold both (its dormant
743
+ // twin says `0.12`, which is neither).
744
+ //
745
+ // All three stay in `baseline/token-var-channels.json`. A theme can
746
+ // still set them: an override lands on an element inside the
747
+ // component, where `--bg-base` / `--fg-base` DO resolve.
686
748
  &__item--is-active :deep(.origam-btn) {
687
749
  --origam-btn---background-color: var(
688
750
  --origam-pagination__item--is-active---background-color,
@@ -229,6 +229,22 @@ defineExpose({
229
229
  // the toolbar's own gutter (16 px) with whatever the layout
230
230
  // reserved on each side (defaults to 0 when no layout item is
231
231
  // present, so the standalone case still gets the 16 px gutter).
232
+ //
233
+ // ⛔ #596 — `--origam-layout---position-{left,right}` STAY UNDECLARED
234
+ // in the token sheets, deliberately. They are not theme tokens: they
235
+ // are runtime MEASUREMENTS, written as INLINE STYLES on the layout
236
+ // root by `useCreateLayout`'s `layoutStyles` (and on main by
237
+ // `mainStyles`) from `mainRect`, via `LAYOUT_POSITION_VARS` — see
238
+ // `composables/Commons/createLayout.composable.ts`. Descendants
239
+ // inherit them from that element, which is how this toolbar receives
240
+ // them. Declaring them at `:root` would publish a themeable channel
241
+ // that the layout's inline style overrides on every real instance —
242
+ // dead by construction — and `LAYOUT_DEFAULT_OFFSET` already is the
243
+ // `0px` written below. The guard flags them only because it compares
244
+ // names against the SHEETS; `OrigamMain` reads the same four vars and
245
+ // is absent from the baseline solely because it declares its own
246
+ // `0px` block locally. They stay in
247
+ // `baseline/token-var-channels.json` as known false positives.
232
248
  padding-inline-start: calc(
233
249
  var(--origam-toolbar---padding-inline, 16px) +
234
250
  var(--origam-layout---position-left, 0px)
@@ -267,6 +283,28 @@ defineExpose({
267
283
  border-end-start-radius: var(--origam-toolbar---border-end-start-radius, 0);
268
284
 
269
285
  background: var(--origam-toolbar---background);
286
+ // ⛔ #596 — `--origam-appbar---backdrop-filter` STAYS UNDECLARED in the
287
+ // token sheets, and that is a NAMING decision left open on purpose,
288
+ // not an oversight. Measured: the DS's canonical AppBar family is
289
+ // spelt with a hyphen — `--origam-app-bar---*`, 11 tokens declared in
290
+ // all four sheets and listed in `TTokenName`, every one of them
291
+ // DORMANT because `OrigamAppBar.vue` contains no `var(--origam-…)` at
292
+ // all and delegates its whole surface to this component. This read
293
+ // uses a THIRD spelling, `--origam-appbar---`, which is also the
294
+ // namespace `packages/marketing` adopted locally (7 themes set
295
+ // `--origam-appbar---bg`, read by `marketing/src/layouts/default.vue`;
296
+ // 5 of them additionally set `--origam-appbar---backdrop-filter`, and
297
+ // it does reach this line today).
298
+ // Declaring `none` here would engrave a SECOND grammar for one
299
+ // component into the public token surface, three lines from the
300
+ // `--origam-app-bar---*` block. The two defensible renames —
301
+ // `--origam-app-bar---backdrop-filter` (matches the authoring intent
302
+ // and marketing's naming) or `--origam-toolbar---backdrop-filter`
303
+ // (matches the component that actually reads it, per the
304
+ // `--origam-{component}---{property}` rule) — both break the 5
305
+ // marketing themes unless they move in the same commit, i.e. a
306
+ // cross-package decision. Left in `baseline/token-var-channels.json`
307
+ // until that call is made.
270
308
  backdrop-filter: var(--origam-appbar---backdrop-filter, none);
271
309
  -webkit-backdrop-filter: var(--origam-appbar---backdrop-filter, none);
272
310
  box-shadow: var(--origam-toolbar---box-shadow);
@@ -471,6 +509,26 @@ defineExpose({
471
509
  //
472
510
  // Shape: rounded SQUARE (8 px), overrides Btn's default
473
511
  // `&--icon { border-radius: 50% }`.
512
+ //
513
+ // ⛔ #596 — the two DERIVED channels,
514
+ // `--origam-toolbar---btn-background-color-{hover,active}`, STAY
515
+ // UNDECLARED in the token sheets. Their fallbacks are
516
+ // `color-mix(in srgb, var(--btn-bg-base), black {20,30}%)`, and
517
+ // `--btn-bg-base` is synthesised PER INSTANCE at the top of this block
518
+ // from `--origam-toolbar---btn-background-color` (which #596 DID
519
+ // declare, its fallback being the plain literal `transparent`). A
520
+ // custom property's computed value is its specified value with `var()`
521
+ // already substituted ON THE DECLARING ELEMENT, so a `:root`
522
+ // declaration of that `color-mix()` would be substituted where
523
+ // `--btn-bg-base` does not exist → guaranteed-invalid → every read
524
+ // falls back to the inline fallback anyway. Identical rendering, green
525
+ // guard, dead channel: a lie, not a fix. Freezing them to a static
526
+ // colour instead would be worse — it would sever the derivation from
527
+ // whatever base colour the consumer sets, which is the whole point of
528
+ // the block above. They stay in `baseline/token-var-channels.json` as
529
+ // known false positives; the guard compares NAMES, not fallback
530
+ // chains. A theme overriding them on the toolbar element itself (or
531
+ // deeper) still works, because `--btn-bg-base` resolves there.
474
532
  :deep(.origam-btn:not(:hover):not(.origam-btn--active)) {
475
533
  --origam-btn---background-color: var(--btn-bg-base);
476
534
  --origam-btn---color: var(--btn-fg-base);
@@ -1,5 +1,56 @@
1
1
  import { type MaybeRefOrGetter, type Ref } from 'vue';
2
2
  import type { IDefault } from '../../interfaces/DefaultsProvider/defaults-provider.interface';
3
+ /*********************************************************
4
+ * POURQUOI `useDefaults` RESTE, sans aucun appelant interne (#544)
5
+ *
6
+ * @description
7
+ * ⛔ TRANCHE PAR LA MESURE, 2026-09-29 — NE PAS ROUVRIR. #544 le classait
8
+ * « doublon du resolveur ADR-005, plus aucun appelant, a retirer ». Zero
9
+ * appelant est exact : les 40 derniers sont partis sous #363, et un grep dans
10
+ * `packages/ds/src` ne remonte que des mentions en commentaire. La conclusion,
11
+ * elle, est FAUSSE — ce n'est pas un doublon.
12
+ *
13
+ * @description
14
+ * `installThemePropsResolver` a une limitation STRUCTURELLE, documentee dans
15
+ * `theme-props-resolver.composable.ts` (section « Known limitation »). Ce n'est
16
+ * pas un oubli mais le sequencement de Vue : le hook ecrit dans `beforeCreate`,
17
+ * qui s'execute APRES le retour de `setup()`. Un prop lu UNE FOIS,
18
+ * SYNCHRONEMENT, au top level de `setup()` — hors `computed()`,
19
+ * `watchEffect()` ou fonction de rendu — capture donc la valeur d'AVANT le
20
+ * patch : le theme ne l'atteint jamais, et rien n'avertit.
21
+ *
22
+ * @description
23
+ * `useDefaults` n'a PAS cette lacune : le getter de son `computed` s'evalue a
24
+ * l'acces `.value`, a n'importe quel instant, la ref de defauts etant deja
25
+ * injectee au moment ou `setup()` tourne. C'est donc le SEUL echappatoire pour
26
+ * un prop qui doit etre lu tot — precisement le piege qui avait casse les props
27
+ * thematises de 16 composants a travers `useLink` et `useVModel`, jusqu'a ce
28
+ * que les deux soient rendus paresseux.
29
+ *
30
+ * @description
31
+ * S'y ajoute une surface publique reelle : `useDefaults` a une page de doc
32
+ * dediee (`packages/docs/composables/useDefaults.md`) et est cite par
33
+ * `docs/guide/composables.md` et `docs/composables/Commons.md`. C'est
34
+ * exactement le controle que #544 reclamait, et qui avait deja evite une
35
+ * suppression fautive sur `useCountdown` et `provideLocale`.
36
+ *
37
+ * @description
38
+ * ⚠️ La lacune est EPINGLEE PAR UNE PAIRE APPARIEE de tests, qui est la preuve
39
+ * executable que ce composable n'est pas redondant —
40
+ * `packages/tests/TU/origam/setup-level-prop-reads.spec.ts` :
41
+ * it('WITHOUT useDefaults, a value read eagerly in setup() misses the theme')
42
+ * it('WITH useDefaults, the same eager read sees the theme')
43
+ * La spec cite meme un cas reel du catalogue :
44
+ * `useClipboard({ feedbackDuration: props.feedbackDuration })` dans
45
+ * `OrigamClipboard`. `probe/preexisting-eager-reads.spec.ts` couvre le meme axe.
46
+ * Retirer `useDefaults` retire le temoin, donc la preuve.
47
+ *
48
+ * @description
49
+ * ⛔ Et le rayon d'action est large : 35 fichiers sous `packages/tests/TU`
50
+ * referencent `useDefaults` (mesure, 2026-09-29). Une note anterieure de session
51
+ * avancait « 3 specs, 23 tests » — chiffre de memoire, FAUX, et c'est exactement
52
+ * le genre d'affirmation non remesuree qui a fait ouvrir #544.
53
+ ********************************************************/
3
54
  /**
4
55
  * Component-side hook: resolve `props` against the closest DefaultsProvider.
5
56
  *
@@ -39,10 +39,10 @@ export declare function createHeaders(props: IDataTableHeaderProps, options?: {
39
39
  sort?: TDataTableCompareFunction | undefined;
40
40
  filter?: import("../../types").TFilterFunction | undefined;
41
41
  align?: (import("../../enums").ALIGN.START | import("../../enums").ALIGN.END | import("../../enums").ALIGN.CENTER) | undefined;
42
- mobile?: boolean | undefined;
43
42
  headerProps?: any;
44
43
  cellProps?: import("../../types").TDataTableHeaderCell | undefined;
45
44
  sortRaw?: TDataTableCompareFunction | undefined;
45
+ mobile?: boolean | undefined;
46
46
  }[][], IInternalDataTableHeader[][] | {
47
47
  key: string | null;
48
48
  value: import("../../types").TSelectItemKey | null;
@@ -62,10 +62,10 @@ export declare function createHeaders(props: IDataTableHeaderProps, options?: {
62
62
  sort?: TDataTableCompareFunction | undefined;
63
63
  filter?: import("../../types").TFilterFunction | undefined;
64
64
  align?: (import("../../enums").ALIGN.START | import("../../enums").ALIGN.END | import("../../enums").ALIGN.CENTER) | undefined;
65
- mobile?: boolean | undefined;
66
65
  headerProps?: any;
67
66
  cellProps?: import("../../types").TDataTableHeaderCell | undefined;
68
67
  sortRaw?: TDataTableCompareFunction | undefined;
68
+ mobile?: boolean | undefined;
69
69
  }[][]>;
70
70
  columns: Ref<{
71
71
  key: string | null;
@@ -86,10 +86,10 @@ export declare function createHeaders(props: IDataTableHeaderProps, options?: {
86
86
  sort?: TDataTableCompareFunction | undefined;
87
87
  filter?: import("../../types").TFilterFunction | undefined;
88
88
  align?: (import("../../enums").ALIGN.START | import("../../enums").ALIGN.END | import("../../enums").ALIGN.CENTER) | undefined;
89
- mobile?: boolean | undefined;
90
89
  headerProps?: any;
91
90
  cellProps?: import("../../types").TDataTableHeaderCell | undefined;
92
91
  sortRaw?: TDataTableCompareFunction | undefined;
92
+ mobile?: boolean | undefined;
93
93
  }[], IInternalDataTableHeader[] | {
94
94
  key: string | null;
95
95
  value: import("../../types").TSelectItemKey | null;
@@ -109,10 +109,10 @@ export declare function createHeaders(props: IDataTableHeaderProps, options?: {
109
109
  sort?: TDataTableCompareFunction | undefined;
110
110
  filter?: import("../../types").TFilterFunction | undefined;
111
111
  align?: (import("../../enums").ALIGN.START | import("../../enums").ALIGN.END | import("../../enums").ALIGN.CENTER) | undefined;
112
- mobile?: boolean | undefined;
113
112
  headerProps?: any;
114
113
  cellProps?: import("../../types").TDataTableHeaderCell | undefined;
115
114
  sortRaw?: TDataTableCompareFunction | undefined;
115
+ mobile?: boolean | undefined;
116
116
  }[]>;
117
117
  sortFunctions: Ref<Record<string, TDataTableCompareFunction>, Record<string, TDataTableCompareFunction>>;
118
118
  sortRawFunctions: Ref<Record<string, TDataTableCompareFunction>, Record<string, TDataTableCompareFunction>>;
@@ -1,6 +1,5 @@
1
- import type { TIntent } from '../../types/Commons/intent.type';
2
- import type { TEmptyStateAlign, TEmptyStatePreset, TEmptyStateSize } from '../../types/EmptyState/empty-state.type';
3
- import type { TIcon } from '../../types/Icon/icon.type';
1
+ import type { IEmptyStatePresetConfig } from "../../interfaces";
2
+ import type { TEmptyStateAlign, TEmptyStatePreset, TEmptyStateSize } from '../../types';
4
3
  /**
5
4
  * Closed list of valid `preset` values for `<OrigamEmptyState>`.
6
5
  * Exposed so stories / consumers can iterate the matrix without
@@ -15,17 +14,4 @@ export declare const EMPTY_STATE_SIZES: ReadonlyArray<TEmptyStateSize>;
15
14
  * Closed list of valid `align` values.
16
15
  */
17
16
  export declare const EMPTY_STATE_ALIGNS: ReadonlyArray<TEmptyStateAlign>;
18
- /**
19
- * Per-preset bundle: default icon + semantic intent.
20
- *
21
- * Consumers can override either side at the prop level (`icon` and
22
- * `iconColor`) without leaving the preset — the preset is the
23
- * "starting point", not a lock. The map is intentionally a plain
24
- * object so brand consumers can extend it through a defaults provider
25
- * in the future without touching the type.
26
- */
27
- export interface IEmptyStatePresetConfig {
28
- icon: TIcon;
29
- intent: TIntent;
30
- }
31
17
  export declare const EMPTY_STATE_PRESET_CONFIG: Record<TEmptyStatePreset, IEmptyStatePresetConfig>;
@@ -0,0 +1,26 @@
1
+ import type { TModeResolved } from "../../types";
2
+ /**
3
+ * Summary of one installed brand theme, derived from the `IOrigamTheme[]`
4
+ * objects passed to `createOrigam({ themes })`. Several `IOrigamTheme` objects
5
+ * may share the same `name` (one per mode); they are collapsed into a single
6
+ * entry whose `modes` lists every concrete mode that brand was installed for.
7
+ *
8
+ * Consumers (e.g. a theme switcher) map over this list instead of hard-coding
9
+ * the available brands — the list is the single source of truth for "what was
10
+ * installed".
11
+ */
12
+ export interface IInstalledTheme {
13
+ /** Brand name, applied as `data-theme="<name>"`. */
14
+ name: string;
15
+ /** Concrete modes this brand ships (`'light'` / `'dark'`). */
16
+ modes: TModeResolved[];
17
+ /**
18
+ * Human-readable label for UI. Defaults to `name` when no installed object
19
+ * for this brand provided a `label`.
20
+ */
21
+ label: string;
22
+ /** Short description for UI, when an installed object provided one. */
23
+ description?: string;
24
+ /** CSS background for a brand swatch preview, when provided. */
25
+ swatch?: string;
26
+ }
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,30 @@
1
+ import type { TSemanticLeaf } from "../../types";
2
+ export interface ISemanticTree {
3
+ [key: string]: TSemanticLeaf | ISemanticTree;
4
+ }
5
+ /**
6
+ * Structured token-configuration bucket — THE way to author a theme's global
7
+ * design tokens (the JSON that generates every global `--origam-*` variable).
8
+ *
9
+ * Each key is a friendly token GROUP whose nested tree resolves to the matching
10
+ * `--origam-*` namespace through the shared naming grammar:
11
+ * - `color` → `--origam-color-*` (`color.surface.default`, `color.text.primary`, `color.action.primary.bg`, …)
12
+ * - `rounded` → `--origam-radius-*` (`rounded.sm`, `rounded.md`, `rounded.lg`, …)
13
+ * - `border` → `--origam-border-*` (`border.width.thin`, …)
14
+ * - `typo` → `--origam-font-*` (`typo.family.sans`, `typo.size.md`, `typo.weight.bold`, …)
15
+ * - `shadow` → `--origam-shadow-*` (`shadow.sm`, `shadow.md`, …)
16
+ * - `spacing` → `--origam-space-*` (`spacing.4`, `spacing.12`, …)
17
+ * - `motion` → `--origam-motion-*` (`motion.duration.fast`, `motion.easing.standard`, …)
18
+ *
19
+ * A leaf value is free-form CSS for its slot (a color slot also accepts a
20
+ * gradient). Plain JSON — fully serialisable for Theme-Builder round-trips.
21
+ */
22
+ export interface IThemeVars {
23
+ color?: ISemanticTree;
24
+ rounded?: ISemanticTree;
25
+ border?: ISemanticTree;
26
+ typo?: ISemanticTree;
27
+ shadow?: ISemanticTree;
28
+ spacing?: ISemanticTree;
29
+ motion?: ISemanticTree;
30
+ }
@@ -1,5 +1,5 @@
1
1
  import type { Ref } from 'vue';
2
- import type { IThemeVars } from '../../types/Commons/semantic-tree.type';
2
+ import type { IThemeVars } from './semantic-tree.interface';
3
3
  import type { TThemeVars } from '../../types/Commons/token-tree.type';
4
4
  import type { TMode, TTheme } from '../../types/Commons/theme.type';
5
5
  import type { IDefault } from '../DefaultsProvider/defaults-provider.interface';
@@ -3,6 +3,19 @@ import type { ITypographyProps } from '../Commons/typography.interface';
3
3
  import type { TEmptyStateAlign, TEmptyStatePreset, TEmptyStateSize } from '../../types/EmptyState/empty-state.type';
4
4
  import type { TIcon } from '../../types/Icon/icon.type';
5
5
  import type { TIntent } from '../../types/Commons/intent.type';
6
+ /**
7
+ * Per-preset bundle: default icon + semantic intent.
8
+ *
9
+ * Consumers can override either side at the prop level (`icon` and
10
+ * `iconColor`) without leaving the preset — the preset is the
11
+ * "starting point", not a lock. The map is intentionally a plain
12
+ * object so brand consumers can extend it through a defaults provider
13
+ * in the future without touching the type.
14
+ */
15
+ export interface IEmptyStatePresetConfig {
16
+ icon: TIcon;
17
+ intent: TIntent;
18
+ }
6
19
  /**
7
20
  * Props for `<OrigamEmptyState>` — placeholder shown when a list, table
8
21
  * or collection has nothing to render.
@@ -784,6 +784,17 @@ Object.keys(_intersect).forEach(function (key) {
784
784
  }
785
785
  });
786
786
  });
787
+ var _installedTheme = require("./Commons/installed-theme.interface.cjs");
788
+ Object.keys(_installedTheme).forEach(function (key) {
789
+ if (key === "default" || key === "__esModule") return;
790
+ if (key in exports && exports[key] === _installedTheme[key]) return;
791
+ Object.defineProperty(exports, key, {
792
+ enumerable: true,
793
+ get: function () {
794
+ return _installedTheme[key];
795
+ }
796
+ });
797
+ });
787
798
  var _item = require("./Commons/item.interface.cjs");
788
799
  Object.keys(_item).forEach(function (key) {
789
800
  if (key === "default" || key === "__esModule") return;
@@ -993,6 +1004,17 @@ Object.keys(_scroll).forEach(function (key) {
993
1004
  }
994
1005
  });
995
1006
  });
1007
+ var _semanticTree = require("./Commons/semantic-tree.interface.cjs");
1008
+ Object.keys(_semanticTree).forEach(function (key) {
1009
+ if (key === "default" || key === "__esModule") return;
1010
+ if (key in exports && exports[key] === _semanticTree[key]) return;
1011
+ Object.defineProperty(exports, key, {
1012
+ enumerable: true,
1013
+ get: function () {
1014
+ return _semanticTree[key];
1015
+ }
1016
+ });
1017
+ });
996
1018
  var _size = require("./Commons/size.interface.cjs");
997
1019
  Object.keys(_size).forEach(function (key) {
998
1020
  if (key === "default" || key === "__esModule") return;
@@ -69,6 +69,7 @@ export * from './Commons/group.interface';
69
69
  export * from './Commons/hotkey.interface';
70
70
  export * from './Commons/hover.interface';
71
71
  export * from './Commons/intersect.interface';
72
+ export * from './Commons/installed-theme.interface';
72
73
  export * from './Commons/item.interface';
73
74
  export * from './Commons/justify.interface';
74
75
  export * from './Commons/layout.interface';
@@ -88,6 +89,7 @@ export * from './Commons/ripple.interface';
88
89
  export * from './Commons/rounded.interface';
89
90
  export * from './Commons/router.interface';
90
91
  export * from './Commons/scroll.interface';
92
+ export * from './Commons/semantic-tree.interface';
91
93
  export * from './Commons/size.interface';
92
94
  export * from './Commons/stack.interface';
93
95
  export * from './Commons/state-effect.interface';
@@ -69,6 +69,7 @@ export * from "./Commons/group.interface.js";
69
69
  export * from "./Commons/hotkey.interface.js";
70
70
  export * from "./Commons/hover.interface.js";
71
71
  export * from "./Commons/intersect.interface.js";
72
+ export * from "./Commons/installed-theme.interface.js";
72
73
  export * from "./Commons/item.interface.js";
73
74
  export * from "./Commons/justify.interface.js";
74
75
  export * from "./Commons/layout.interface.js";
@@ -88,6 +89,7 @@ export * from "./Commons/ripple.interface.js";
88
89
  export * from "./Commons/rounded.interface.js";
89
90
  export * from "./Commons/router.interface.js";
90
91
  export * from "./Commons/scroll.interface.js";
92
+ export * from "./Commons/semantic-tree.interface.js";
91
93
  export * from "./Commons/size.interface.js";
92
94
  export * from "./Commons/stack.interface.js";
93
95
  export * from "./Commons/state-effect.interface.js";
@@ -1,31 +1,6 @@
1
- import type { TModeResolved } from './theme.type';
2
- /**
3
- * Summary of one installed brand theme, derived from the `IOrigamTheme[]`
4
- * objects passed to `createOrigam({ themes })`. Several `IOrigamTheme` objects
5
- * may share the same `name` (one per mode); they are collapsed into a single
6
- * entry whose `modes` lists every concrete mode that brand was installed for.
7
- *
8
- * Consumers (e.g. a theme switcher) map over this list instead of hard-coding
9
- * the available brands — the list is the single source of truth for "what was
10
- * installed".
11
- */
12
- export interface TInstalledTheme {
13
- /** Brand name, applied as `data-theme="<name>"`. */
14
- name: string;
15
- /** Concrete modes this brand ships (`'light'` / `'dark'`). */
16
- modes: TModeResolved[];
17
- /**
18
- * Human-readable label for UI. Defaults to `name` when no installed object
19
- * for this brand provided a `label`.
20
- */
21
- label: string;
22
- /** Short description for UI, when an installed object provided one. */
23
- description?: string;
24
- /** CSS background for a brand swatch preview, when provided. */
25
- swatch?: string;
26
- }
1
+ import type { IInstalledTheme } from "../../interfaces/Commons/installed-theme.interface";
27
2
  /**
28
3
  * The full installed-themes list provided by `createOrigam` and read back via
29
4
  * `useInstalledThemes()`.
30
5
  */
31
- export type TInstalledThemes = TInstalledTheme[];
6
+ export type TInstalledThemes = IInstalledTheme[];
@@ -17,32 +17,3 @@
17
17
  * round-trip it without losing fidelity.
18
18
  */
19
19
  export type TSemanticLeaf = string | number;
20
- export interface ISemanticTree {
21
- [key: string]: TSemanticLeaf | ISemanticTree;
22
- }
23
- /**
24
- * Structured token-configuration bucket — THE way to author a theme's global
25
- * design tokens (the JSON that generates every global `--origam-*` variable).
26
- *
27
- * Each key is a friendly token GROUP whose nested tree resolves to the matching
28
- * `--origam-*` namespace through the shared naming grammar:
29
- * - `color` → `--origam-color-*` (`color.surface.default`, `color.text.primary`, `color.action.primary.bg`, …)
30
- * - `rounded` → `--origam-radius-*` (`rounded.sm`, `rounded.md`, `rounded.lg`, …)
31
- * - `border` → `--origam-border-*` (`border.width.thin`, …)
32
- * - `typo` → `--origam-font-*` (`typo.family.sans`, `typo.size.md`, `typo.weight.bold`, …)
33
- * - `shadow` → `--origam-shadow-*` (`shadow.sm`, `shadow.md`, …)
34
- * - `spacing` → `--origam-space-*` (`spacing.4`, `spacing.12`, …)
35
- * - `motion` → `--origam-motion-*` (`motion.duration.fast`, `motion.easing.standard`, …)
36
- *
37
- * A leaf value is free-form CSS for its slot (a color slot also accepts a
38
- * gradient). Plain JSON — fully serialisable for Theme-Builder round-trips.
39
- */
40
- export interface IThemeVars {
41
- color?: ISemanticTree;
42
- rounded?: ISemanticTree;
43
- border?: ISemanticTree;
44
- typo?: ISemanticTree;
45
- shadow?: ISemanticTree;
46
- spacing?: ISemanticTree;
47
- motion?: ISemanticTree;
48
- }