@sentropic/design-system-vue 0.36.44 → 0.36.46

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 (53) hide show
  1. package/dist/AppShell.d.ts +93 -0
  2. package/dist/AppShell.d.ts.map +1 -0
  3. package/dist/AppShell.js +34 -0
  4. package/dist/AppShell.js.map +1 -0
  5. package/dist/Badge.d.ts +34 -0
  6. package/dist/Badge.d.ts.map +1 -1
  7. package/dist/Badge.js +3 -1
  8. package/dist/Badge.js.map +1 -1
  9. package/dist/Collapsible.d.ts.map +1 -1
  10. package/dist/Collapsible.js +6 -0
  11. package/dist/Collapsible.js.map +1 -1
  12. package/dist/ContextPanel.d.ts +49 -0
  13. package/dist/ContextPanel.d.ts.map +1 -0
  14. package/dist/ContextPanel.js +19 -0
  15. package/dist/ContextPanel.js.map +1 -0
  16. package/dist/Drawer.d.ts +1 -1
  17. package/dist/Drawer.d.ts.map +1 -1
  18. package/dist/MenuTriggerButton.d.ts +1 -1
  19. package/dist/NavDrawer.d.ts +6 -0
  20. package/dist/NavDrawer.d.ts.map +1 -0
  21. package/dist/NavDrawer.js +10 -0
  22. package/dist/NavDrawer.js.map +1 -0
  23. package/dist/NavItem.d.ts +189 -0
  24. package/dist/NavItem.d.ts.map +1 -0
  25. package/dist/NavItem.js +121 -0
  26. package/dist/NavItem.js.map +1 -0
  27. package/dist/NavRail.d.ts +61 -0
  28. package/dist/NavRail.d.ts.map +1 -0
  29. package/dist/NavRail.js +27 -0
  30. package/dist/NavRail.js.map +1 -0
  31. package/dist/NavSection.d.ts +109 -0
  32. package/dist/NavSection.d.ts.map +1 -0
  33. package/dist/NavSection.js +104 -0
  34. package/dist/NavSection.js.map +1 -0
  35. package/dist/NavShell.d.ts +105 -0
  36. package/dist/NavShell.d.ts.map +1 -0
  37. package/dist/NavShell.js +34 -0
  38. package/dist/NavShell.js.map +1 -0
  39. package/dist/SelectableRow.d.ts +11 -0
  40. package/dist/SelectableRow.d.ts.map +1 -1
  41. package/dist/SelectableRow.js +25 -6
  42. package/dist/SelectableRow.js.map +1 -1
  43. package/dist/Typography.d.ts +1 -1
  44. package/dist/UtilityPanel.d.ts +72 -0
  45. package/dist/UtilityPanel.d.ts.map +1 -0
  46. package/dist/UtilityPanel.js +21 -0
  47. package/dist/UtilityPanel.js.map +1 -0
  48. package/dist/index.d.ts +17 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +8 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/styles.css +1079 -508
  53. package/package.json +1 -1
@@ -0,0 +1,121 @@
1
+ import { defineComponent, h, ref, watch } from "vue";
2
+ import { classNames } from "./classNames.js";
3
+ import { SelectableRow } from "./SelectableRow.js";
4
+ import { ColorSwatch } from "./ColorSwatch.js";
5
+ import { StatusDot } from "./StatusDot.js";
6
+ import { Badge } from "./Badge.js";
7
+ const DEPTH_INDENT = ["0rem", "0.75rem", "1.5rem", "2.25rem"];
8
+ /**
9
+ * NavItem — l'ANATOMIE DE RANGÉE CANONIQUE du système de navigation (vague 2).
10
+ * La brique que tout rail/drawer instancie : tête (pastille/icône) + titre +
11
+ * caption muette + queue (bulle de compte) + sélection + profondeur
12
+ * typographique + séparateur optionnel.
13
+ *
14
+ * Zéro-entropie : NavItem NE RÉIMPLÉMENTE RIEN. Il COMPOSE SelectableRow (qui
15
+ * possède déjà leading/trailing/caption, la sélection, le rôle ARIA dérivé du
16
+ * conteneur et la propagation du roving-tabindex) et réutilise les primitives
17
+ * vague 1 :
18
+ * • ColorSwatch → tête quand `swatch.color` (couleur arbitraire inline)
19
+ * • StatusDot → tête quand `swatch.tone` (point sémantique)
20
+ * • Badge → queue (shape="circle" size="sm", tabular-nums) pour `count`
21
+ * Style PROPRE token-only scopé ; AUCUN hex en dur.
22
+ *
23
+ * Slots : `leading` (prime sur `swatch`), `trailing` (prime sur `count`).
24
+ */
25
+ export const NavItem = defineComponent({
26
+ name: "NavItem",
27
+ props: {
28
+ value: { type: String, default: undefined },
29
+ title: { type: String, required: true },
30
+ caption: { type: String, default: undefined },
31
+ depth: { type: Number, default: 0 },
32
+ swatch: { type: Object, default: undefined },
33
+ count: { type: Number, default: undefined },
34
+ status: { type: String, default: "neutral" },
35
+ selected: { type: Boolean, default: false },
36
+ disabled: { type: Boolean, default: false },
37
+ href: { type: String, default: undefined },
38
+ divider: { type: Boolean, default: false },
39
+ onSelect: {
40
+ type: Function,
41
+ default: undefined,
42
+ },
43
+ class: { type: String, default: undefined },
44
+ },
45
+ emits: {
46
+ select: (_selected) => true,
47
+ },
48
+ setup(props, { slots, attrs, emit }) {
49
+ // Sélection standalone : SelectableRow vue est CONTRÔLÉ (il n'auto-toggle
50
+ // pas), donc NavItem détient l'état interne et le rebascule à la rangée.
51
+ const internalSelected = ref(props.selected);
52
+ watch(() => props.selected, (next) => {
53
+ internalSelected.value = next;
54
+ });
55
+ function handleSelect(next) {
56
+ internalSelected.value = next;
57
+ props.onSelect?.(next);
58
+ emit("select", next);
59
+ }
60
+ return () => {
61
+ // Profondeur bornée [0..3] : une valeur hors-borne ne casse pas la classe.
62
+ const safeDepth = Math.min(Math.max(Math.trunc(Number(props.depth) || 0), 0), 3);
63
+ // Le count alimente un aria-label explicite « N title » (un compte nu est
64
+ // ambigu pour un lecteur d'écran — cf. la doc de Badge).
65
+ const countLabel = props.count != null ? `${props.count} ${props.title}` : undefined;
66
+ const wrapperClasses = classNames("st-navItem", `st-navItem--depth${safeDepth}`, props.status !== "neutral" ? `st-navItem--status-${props.status}` : undefined, props.class);
67
+ // Indentation de profondeur : une var additive sur le wrapper, à fallback
68
+ // littéral par palier (aucun hex). La rangée hérite via la cascade.
69
+ const depthStyle = `--st-navItem-indent: var(--st-component-navItem-depth${safeDepth}-indent, ${DEPTH_INDENT[safeDepth]});`;
70
+ // Tête : leading (slot) prime sur swatch ; ColorSwatch pour une couleur
71
+ // arbitraire, sinon StatusDot pour un ton sémantique.
72
+ const leadingSlot = slots.leading
73
+ ? slots.leading
74
+ : props.swatch
75
+ ? () => props.swatch.color
76
+ ? h(ColorSwatch, {
77
+ color: props.swatch.color,
78
+ shape: props.swatch.shape ?? "square",
79
+ size: 14,
80
+ })
81
+ : h(StatusDot, { tone: props.swatch.tone ?? "neutral", size: 8 })
82
+ : undefined;
83
+ // Queue : trailing (slot) prime sur count. Badge circle/sm aligné sur le
84
+ // status de la rangée, aria-label explicite.
85
+ const trailingSlot = slots.trailing
86
+ ? slots.trailing
87
+ : props.count != null
88
+ ? () => h(Badge, {
89
+ shape: "circle",
90
+ size: "sm",
91
+ tone: props.status,
92
+ "aria-label": countLabel,
93
+ }, { default: () => props.count })
94
+ : undefined;
95
+ const rowSlots = {
96
+ default: () => h("span", { class: "st-navItem__title" }, props.title),
97
+ };
98
+ if (leadingSlot)
99
+ rowSlots.leading = leadingSlot;
100
+ if (trailingSlot)
101
+ rowSlots.trailing = trailingSlot;
102
+ if (props.caption) {
103
+ rowSlots.caption = () => h("span", { class: "st-navItem__caption" }, props.caption);
104
+ }
105
+ const children = [
106
+ h(SelectableRow, {
107
+ selected: internalSelected.value,
108
+ value: props.value,
109
+ href: props.href,
110
+ disabled: props.disabled,
111
+ onSelect: handleSelect,
112
+ }, rowSlots),
113
+ ];
114
+ if (props.divider) {
115
+ children.push(h("hr", { class: "st-navItem__divider", "aria-hidden": "true" }));
116
+ }
117
+ return h("div", { ...attrs, class: wrapperClasses, style: depthStyle }, children);
118
+ };
119
+ },
120
+ });
121
+ //# sourceMappingURL=NavItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavItem.js","sourceRoot":"","sources":["../src/NavItem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { type PropType } from "vue";
2
+ export interface NavRailItem {
3
+ id: string;
4
+ label: unknown;
5
+ href?: string;
6
+ active?: boolean;
7
+ disabled?: boolean;
8
+ badge?: unknown;
9
+ icon?: unknown;
10
+ }
11
+ export type NavRailProps = {
12
+ items?: NavRailItem[];
13
+ label?: string;
14
+ activeItemId?: string;
15
+ class?: string;
16
+ };
17
+ export declare const NavRail: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
18
+ items: {
19
+ type: PropType<NavRailItem[]>;
20
+ default: () => never[];
21
+ };
22
+ label: {
23
+ type: StringConstructor;
24
+ default: string;
25
+ };
26
+ activeItemId: {
27
+ type: StringConstructor;
28
+ default: undefined;
29
+ };
30
+ class: {
31
+ type: StringConstructor;
32
+ default: undefined;
33
+ };
34
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
35
+ [key: string]: any;
36
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "itemSelect"[], "itemSelect", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
37
+ items: {
38
+ type: PropType<NavRailItem[]>;
39
+ default: () => never[];
40
+ };
41
+ label: {
42
+ type: StringConstructor;
43
+ default: string;
44
+ };
45
+ activeItemId: {
46
+ type: StringConstructor;
47
+ default: undefined;
48
+ };
49
+ class: {
50
+ type: StringConstructor;
51
+ default: undefined;
52
+ };
53
+ }>> & Readonly<{
54
+ onItemSelect?: ((...args: any[]) => any) | undefined;
55
+ }>, {
56
+ items: NavRailItem[];
57
+ class: string;
58
+ label: string;
59
+ activeItemId: string;
60
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
61
+ //# sourceMappingURL=NavRail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavRail.d.ts","sourceRoot":"","sources":["../src/NavRail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGxD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,OAAO;;cAGQ,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;cAAvB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;4EAoBjD,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { defineComponent, h } from "vue";
2
+ import { classNames } from "./classNames.js";
3
+ export const NavRail = defineComponent({
4
+ name: "NavRail",
5
+ props: {
6
+ items: { type: Array, default: () => [] },
7
+ label: { type: String, default: "Primary navigation" },
8
+ activeItemId: { type: String, default: undefined },
9
+ class: { type: String, default: undefined },
10
+ },
11
+ emits: ["itemSelect"],
12
+ setup(props, { slots, emit, attrs }) {
13
+ return () => h("nav", { ...attrs, class: classNames("st-navRail", props.class), "aria-label": props.label }, [
14
+ h("div", { class: "st-navRail__items" }, [
15
+ ...props.items.map((item) => {
16
+ const active = item.active === true || item.id === props.activeItemId;
17
+ const content = [item.icon ? h("span", { class: "st-navRail__icon" }, String(item.icon)) : null, h("span", { class: "st-navRail__label" }, item.label), item.badge != null ? h("span", { class: "st-navRail__badge" }, String(item.badge)) : null];
18
+ const common = { key: item.id, class: classNames("st-navRail__item", active && "st-navRail__item--active"), "aria-current": active ? "page" : undefined, onClick: () => !item.disabled && emit("itemSelect", item.id) };
19
+ return item.href && !item.disabled ? h("a", { ...common, href: item.href }, content) : h("button", { ...common, type: "button", disabled: item.disabled }, content);
20
+ }),
21
+ slots.default?.(),
22
+ ]),
23
+ slots.footer ? h("footer", { class: "st-navRail__footer" }, slots.footer()) : null,
24
+ ]);
25
+ },
26
+ });
27
+ //# sourceMappingURL=NavRail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavRail.js","sourceRoot":"","sources":["../src/NavRail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { type VNode } from "vue";
2
+ /** Niveau de titre porté par l'Overline d'en-tête de section. `h2`/`h3` quand la
3
+ * section est une vraie région titrée d'un rail/drawer ; choisis selon la
4
+ * profondeur du sommaire. */
5
+ export type NavSectionHeadingLevel = "h2" | "h3";
6
+ export type NavSectionProps = {
7
+ /** Libellé de la section, rendu via Overline (small-caps muet). */
8
+ label: string;
9
+ /** Compteur optionnel → Badge circle en queue de l'en-tête. */
10
+ count?: number;
11
+ /** Si true, l'en-tête devient le trigger d'un Collapsible (aria-expanded)
12
+ * qui montre/cache le contenu. Sinon : groupe titré statique. */
13
+ collapsible?: boolean;
14
+ /** État d'ouverture quand `collapsible`. */
15
+ open?: boolean;
16
+ /** Niveau de titre de l'Overline quand la section n'est pas repliable. */
17
+ as?: NavSectionHeadingLevel;
18
+ /** Notifié à chaque bascule d'ouverture (section repliable). */
19
+ onToggle?: (open: boolean) => void;
20
+ class?: string;
21
+ };
22
+ /**
23
+ * NavSection — EN-TÊTE DE GROUPE d'un rail / drawer (« COMMUNITIES »,
24
+ * « SIGNAUX », « Pastilles », « Zonage / Potentiel », « DOCUMENTATION »).
25
+ * Donne la hiérarchie typographique qui manque à une liste plate + un foyer
26
+ * normé pour l'action locale. ZÉRO-ENTROPIE : on RÉUTILISE les primitives déjà
27
+ * livrées —
28
+ * • Overline → le libellé small-caps muet (rendu en h2/h3 pour la sémantique
29
+ * de titre quand la section n'est PAS repliable) ;
30
+ * • Badge shape="circle" → le compteur de section en queue d'en-tête ;
31
+ * • Collapsible → le disclosure (trigger aria-expanded + région
32
+ * aria-labelledby) quand `collapsible`.
33
+ * On ne réimplémente NI disclosure NI libellé. Style token-only scopé, aucun hex.
34
+ *
35
+ * Slots : `default` (contenu de la section, rendu dans la région) ; `action`
36
+ * (emplacement normé d'une action de section, aligné à droite de l'en-tête,
37
+ * NON rendu quand `collapsible`).
38
+ */
39
+ export declare const NavSection: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
40
+ label: {
41
+ type: StringConstructor;
42
+ required: true;
43
+ };
44
+ count: {
45
+ type: NumberConstructor;
46
+ default: undefined;
47
+ };
48
+ collapsible: {
49
+ type: BooleanConstructor;
50
+ default: boolean;
51
+ };
52
+ open: {
53
+ type: BooleanConstructor;
54
+ default: boolean;
55
+ };
56
+ as: {
57
+ type: () => NavSectionHeadingLevel;
58
+ default: string;
59
+ };
60
+ onToggle: {
61
+ type: () => (open: boolean) => void;
62
+ default: undefined;
63
+ };
64
+ class: {
65
+ type: StringConstructor;
66
+ default: undefined;
67
+ };
68
+ }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
69
+ [key: string]: any;
70
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "toggle"[], "toggle", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
71
+ label: {
72
+ type: StringConstructor;
73
+ required: true;
74
+ };
75
+ count: {
76
+ type: NumberConstructor;
77
+ default: undefined;
78
+ };
79
+ collapsible: {
80
+ type: BooleanConstructor;
81
+ default: boolean;
82
+ };
83
+ open: {
84
+ type: BooleanConstructor;
85
+ default: boolean;
86
+ };
87
+ as: {
88
+ type: () => NavSectionHeadingLevel;
89
+ default: string;
90
+ };
91
+ onToggle: {
92
+ type: () => (open: boolean) => void;
93
+ default: undefined;
94
+ };
95
+ class: {
96
+ type: StringConstructor;
97
+ default: undefined;
98
+ };
99
+ }>> & Readonly<{
100
+ onToggle?: ((...args: any[]) => any) | undefined;
101
+ }>, {
102
+ open: boolean;
103
+ class: string;
104
+ onToggle: (open: boolean) => void;
105
+ as: NavSectionHeadingLevel;
106
+ count: number;
107
+ collapsible: boolean;
108
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
109
+ //# sourceMappingURL=NavSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavSection.d.ts","sourceRoot":"","sources":["../src/NavSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,KAAK,EAAE,MAAM,KAAK,CAAC;AAMjE;;6BAE6B;AAC7B,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,MAAM,eAAe,GAAG;IAC5B,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;qEACiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,EAAE,CAAC,EAAE,sBAAsB,CAAC;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;cAOG,MAAM,sBAAsB;;;;cAEnB,MAAM,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;cAFtC,MAAM,sBAAsB;;;;cAEnB,MAAM,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;;;;;;;;;;;;qBAAhB,OAAO,KAAK,IAAI;;;;4EAyG9D,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { defineComponent, h, ref, watch } from "vue";
2
+ import { classNames } from "./classNames.js";
3
+ import { Badge } from "./Badge.js";
4
+ import { Collapsible } from "./Collapsible.js";
5
+ import { Overline } from "./Overline.js";
6
+ let navSectionCounter = 0;
7
+ /**
8
+ * NavSection — EN-TÊTE DE GROUPE d'un rail / drawer (« COMMUNITIES »,
9
+ * « SIGNAUX », « Pastilles », « Zonage / Potentiel », « DOCUMENTATION »).
10
+ * Donne la hiérarchie typographique qui manque à une liste plate + un foyer
11
+ * normé pour l'action locale. ZÉRO-ENTROPIE : on RÉUTILISE les primitives déjà
12
+ * livrées —
13
+ * • Overline → le libellé small-caps muet (rendu en h2/h3 pour la sémantique
14
+ * de titre quand la section n'est PAS repliable) ;
15
+ * • Badge shape="circle" → le compteur de section en queue d'en-tête ;
16
+ * • Collapsible → le disclosure (trigger aria-expanded + région
17
+ * aria-labelledby) quand `collapsible`.
18
+ * On ne réimplémente NI disclosure NI libellé. Style token-only scopé, aucun hex.
19
+ *
20
+ * Slots : `default` (contenu de la section, rendu dans la région) ; `action`
21
+ * (emplacement normé d'une action de section, aligné à droite de l'en-tête,
22
+ * NON rendu quand `collapsible`).
23
+ */
24
+ export const NavSection = defineComponent({
25
+ name: "NavSection",
26
+ props: {
27
+ label: { type: String, required: true },
28
+ count: { type: Number, default: undefined },
29
+ collapsible: { type: Boolean, default: false },
30
+ open: { type: Boolean, default: true },
31
+ as: { type: String, default: "h3" },
32
+ onToggle: {
33
+ type: Function,
34
+ default: undefined,
35
+ },
36
+ class: { type: String, default: undefined },
37
+ },
38
+ emits: ["toggle"],
39
+ setup(props, { slots, attrs, emit }) {
40
+ const uid = `st-navSection-${(navSectionCounter += 1)}`;
41
+ // `open` est une valeur INITIALE (mirroir de `bind:open` svelte) : la section
42
+ // gère son propre état d'ouverture et le re-synchronise si le prop change.
43
+ const internalOpen = ref(props.open);
44
+ watch(() => props.open, (next) => {
45
+ internalOpen.value = next;
46
+ });
47
+ return () => {
48
+ const hasCount = typeof props.count === "number";
49
+ const rootClasses = classNames("st-navSection", props.collapsible ? "st-navSection--collapsible" : "st-navSection--static", props.class);
50
+ const countBadge = (className) => h(Badge, {
51
+ shape: "circle",
52
+ size: "sm",
53
+ class: className,
54
+ "aria-label": `${props.count} éléments`,
55
+ }, { default: () => props.count });
56
+ if (props.collapsible) {
57
+ // Repliable : l'en-tête EST le trigger du Collapsible. Le compteur passe
58
+ // par son slot `trailing` (entre le titre et le chevron) ; on annonce le
59
+ // tout aux lecteurs d'écran via aria-label. L'action de section n'a pas
60
+ // sa place dans un trigger (un bouton dans un bouton).
61
+ const collapsibleSlots = {
62
+ default: () => slots.default?.(),
63
+ };
64
+ if (hasCount) {
65
+ collapsibleSlots.trailing = () => countBadge();
66
+ }
67
+ return h(Collapsible, {
68
+ ...attrs,
69
+ open: internalOpen.value,
70
+ title: props.label,
71
+ "aria-label": hasCount ? `${props.label}, ${props.count}` : props.label,
72
+ class: rootClasses,
73
+ onToggle: (open) => {
74
+ internalOpen.value = open;
75
+ props.onToggle?.(open);
76
+ emit("toggle", open);
77
+ },
78
+ }, collapsibleSlots);
79
+ }
80
+ // Statique : groupe titré par l'Overline (h2/h3). Le contenu est relié au
81
+ // titre via aria-labelledby — la liste devient une vraie région titrée.
82
+ const overlineChildren = [props.label];
83
+ if (hasCount) {
84
+ overlineChildren.push(countBadge("st-navSection__count"));
85
+ }
86
+ const headerChildren = [
87
+ h(Overline, { as: props.as, id: `${uid}-label`, class: "st-navSection__label" }, { default: () => overlineChildren }),
88
+ ];
89
+ if (slots.action) {
90
+ headerChildren.push(h("span", { class: "st-navSection__action" }, slots.action()));
91
+ }
92
+ return h("section", {
93
+ ...attrs,
94
+ class: rootClasses,
95
+ role: "group",
96
+ "aria-labelledby": `${uid}-label`,
97
+ }, [
98
+ h("div", { class: "st-navSection__header" }, headerChildren),
99
+ h("div", { class: "st-navSection__body" }, slots.default?.()),
100
+ ]);
101
+ };
102
+ },
103
+ });
104
+ //# sourceMappingURL=NavSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavSection.js","sourceRoot":"","sources":["../src/NavSection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import { type PropType } from "vue";
2
+ export type NavShellVariant = "rail" | "drawer";
3
+ export type NavShellSide = "left" | "right" | "bottom";
4
+ export type NavShellProps = {
5
+ variant?: NavShellVariant;
6
+ title?: string;
7
+ subtitle?: string;
8
+ back?: boolean;
9
+ backLabel?: string;
10
+ label?: string;
11
+ open?: boolean;
12
+ side?: NavShellSide;
13
+ class?: string;
14
+ };
15
+ export declare const NavShell: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
16
+ variant: {
17
+ type: PropType<NavShellVariant>;
18
+ default: string;
19
+ };
20
+ title: {
21
+ type: StringConstructor;
22
+ default: undefined;
23
+ };
24
+ subtitle: {
25
+ type: StringConstructor;
26
+ default: undefined;
27
+ };
28
+ back: {
29
+ type: BooleanConstructor;
30
+ default: boolean;
31
+ };
32
+ backLabel: {
33
+ type: StringConstructor;
34
+ default: string;
35
+ };
36
+ label: {
37
+ type: StringConstructor;
38
+ default: undefined;
39
+ };
40
+ open: {
41
+ type: BooleanConstructor;
42
+ default: boolean;
43
+ };
44
+ side: {
45
+ type: PropType<NavShellSide>;
46
+ default: string;
47
+ };
48
+ class: {
49
+ type: StringConstructor;
50
+ default: undefined;
51
+ };
52
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
53
+ [key: string]: any;
54
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("close" | "back")[], "close" | "back", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
55
+ variant: {
56
+ type: PropType<NavShellVariant>;
57
+ default: string;
58
+ };
59
+ title: {
60
+ type: StringConstructor;
61
+ default: undefined;
62
+ };
63
+ subtitle: {
64
+ type: StringConstructor;
65
+ default: undefined;
66
+ };
67
+ back: {
68
+ type: BooleanConstructor;
69
+ default: boolean;
70
+ };
71
+ backLabel: {
72
+ type: StringConstructor;
73
+ default: string;
74
+ };
75
+ label: {
76
+ type: StringConstructor;
77
+ default: undefined;
78
+ };
79
+ open: {
80
+ type: BooleanConstructor;
81
+ default: boolean;
82
+ };
83
+ side: {
84
+ type: PropType<NavShellSide>;
85
+ default: string;
86
+ };
87
+ class: {
88
+ type: StringConstructor;
89
+ default: undefined;
90
+ };
91
+ }>> & Readonly<{
92
+ onClose?: ((...args: any[]) => any) | undefined;
93
+ onBack?: ((...args: any[]) => any) | undefined;
94
+ }>, {
95
+ open: boolean;
96
+ class: string;
97
+ label: string;
98
+ title: string;
99
+ variant: NavShellVariant;
100
+ subtitle: string;
101
+ back: boolean;
102
+ backLabel: string;
103
+ side: NavShellSide;
104
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
105
+ //# sourceMappingURL=NavShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavShell.d.ts","sourceRoot":"","sources":["../src/NavShell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAC;AAIxD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,CAAC;AAChD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,QAAQ;;cAGU,QAAQ,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAO5B,QAAQ,CAAC,YAAY,CAAC;;;;;;;;;;;cAPnB,QAAQ,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAO5B,QAAQ,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;4EAmBhD,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { defineComponent, h } from "vue";
2
+ import { Drawer } from "./Drawer.js";
3
+ import { classNames } from "./classNames.js";
4
+ export const NavShell = defineComponent({
5
+ name: "NavShell",
6
+ props: {
7
+ variant: { type: String, default: "rail" },
8
+ title: { type: String, default: undefined },
9
+ subtitle: { type: String, default: undefined },
10
+ back: { type: Boolean, default: false },
11
+ backLabel: { type: String, default: "Back" },
12
+ label: { type: String, default: undefined },
13
+ open: { type: Boolean, default: false },
14
+ side: { type: String, default: "left" },
15
+ class: { type: String, default: undefined },
16
+ },
17
+ emits: ["back", "close"],
18
+ setup(props, { slots, emit, attrs }) {
19
+ const content = () => [
20
+ props.back || props.title || props.subtitle
21
+ ? h("header", { class: "st-navShell__header" }, [
22
+ props.back ? h("button", { type: "button", class: "st-navShell__back", "aria-label": props.backLabel, onClick: () => emit("back") }, "←") : null,
23
+ props.title || props.subtitle ? h("div", { class: "st-navShell__heading" }, [props.title ? h("p", { class: "st-navShell__title" }, props.title) : null, props.subtitle ? h("p", { class: "st-navShell__subtitle" }, props.subtitle) : null]) : null,
24
+ ])
25
+ : null,
26
+ slots.search ? h("div", { class: "st-navShell__search" }, slots.search()) : null,
27
+ h("div", { class: "st-navShell__body" }, slots.default?.()),
28
+ ];
29
+ return () => props.variant === "drawer"
30
+ ? h(Drawer, { open: props.open, title: props.title ?? props.label ?? "Navigation", placement: props.side, class: classNames("st-navShell st-navShell--drawer", props.class), onClose: () => emit("close") }, { default: content, footer: slots.footer })
31
+ : h("aside", { ...attrs, class: classNames("st-navShell st-navShell--rail", props.class), "aria-label": props.label ?? props.title }, [...content(), slots.footer ? h("footer", { class: "st-navShell__footer" }, slots.footer()) : null]);
32
+ },
33
+ });
34
+ //# sourceMappingURL=NavShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavShell.js","sourceRoot":"","sources":["../src/NavShell.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,8 @@ export type SelectableRowProps = {
42
42
  disabled?: boolean;
43
43
  /** Stable value, surfaced as `data-value` and used by the list for `value`. */
44
44
  value?: string;
45
+ /** Native link target. When set on a standalone row, the row renders as an anchor. */
46
+ href?: string;
45
47
  /**
46
48
  * ARIA role for the standalone row. Defaults to "option" so a lone row still
47
49
  * reads as a selectable item. Inside a list the role is forced to "option".
@@ -81,6 +83,10 @@ export declare const SelectableRow: import("vue").DefineComponent<import("vue").
81
83
  type: StringConstructor;
82
84
  default: undefined;
83
85
  };
86
+ href: {
87
+ type: StringConstructor;
88
+ default: undefined;
89
+ };
84
90
  role: {
85
91
  type: StringConstructor;
86
92
  default: string;
@@ -114,6 +120,10 @@ export declare const SelectableRow: import("vue").DefineComponent<import("vue").
114
120
  type: StringConstructor;
115
121
  default: undefined;
116
122
  };
123
+ href: {
124
+ type: StringConstructor;
125
+ default: undefined;
126
+ };
117
127
  role: {
118
128
  type: StringConstructor;
119
129
  default: string;
@@ -133,6 +143,7 @@ export declare const SelectableRow: import("vue").DefineComponent<import("vue").
133
143
  onSelect: (selected: boolean) => void;
134
144
  disabled: boolean;
135
145
  role: string;
146
+ href: string;
136
147
  value: string;
137
148
  selected: boolean;
138
149
  accentBar: boolean;