@sia-ui/react-web 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @sia-ui/react-web
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Améliore la navigation et les réglages responsives : le `Drawer` conserve ses
8
+ classes internes avec une `className` personnalisée, anime correctement ses
9
+ quatre positions et expose une fermeture explicite dans `AppShell`. Uniformise
10
+ les scrollbars globales, allège les sous-menus du `Sidebar`, renforce le
11
+ contraste du `ToggleGroup`, ajoute `SettingsIcon` et fournit `AppShellBrand`
12
+ ainsi qu'`AppShellRailItem` pour adapter automatiquement icônes et libellés au
13
+ rail réduit.
14
+
15
+ ## 0.3.2
16
+
17
+ ### Patch Changes
18
+
19
+ - Ajoute l’identité visuelle officielle de SIA UI et améliore la documentation publique, les changelogs et les ressources de contribution.
20
+ - Updated dependencies
21
+ - @sia-ui/headless@0.3.2
22
+ - @sia-ui/react@0.3.2
23
+ - @sia-ui/tokens@0.3.2
24
+ - @sia-ui/utils@0.3.2
25
+
3
26
  ## 0.3.1
4
27
 
5
28
  ### Patch Changes
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ <p align="center"><img src="https://beatjo.github.io/sia-ui-site/brand/sia-ui-logo.png" alt="SIA UI" width="320"></p>
2
+
1
3
  # @sia-ui/react-web
2
4
 
3
5
  Les composants SIA UI pour le DOM.
@@ -67,6 +69,40 @@ Le contenu ci-dessous reprend intégralement `CHANGELOG.md` pour rester visible
67
69
 
68
70
  # @sia-ui/react-web
69
71
 
72
+ ## 0.4.0
73
+
74
+ ### Minor Changes
75
+
76
+ - Améliore la navigation et les réglages responsives : le `Drawer` conserve ses
77
+ classes internes avec une `className` personnalisée, anime correctement ses
78
+ quatre positions et expose une fermeture explicite dans `AppShell`. Uniformise
79
+ les scrollbars globales, allège les sous-menus du `Sidebar`, renforce le
80
+ contraste du `ToggleGroup`, ajoute `SettingsIcon` et fournit `AppShellBrand`
81
+ ainsi qu'`AppShellRailItem` pour adapter automatiquement icônes et libellés au
82
+ rail réduit.
83
+
84
+ ## 0.3.2
85
+
86
+ ### Patch Changes
87
+
88
+ - Ajoute l’identité visuelle officielle de SIA UI et améliore la documentation publique, les changelogs et les ressources de contribution.
89
+ - Updated dependencies
90
+ - @sia-ui/headless@0.3.2
91
+ - @sia-ui/react@0.3.2
92
+ - @sia-ui/tokens@0.3.2
93
+ - @sia-ui/utils@0.3.2
94
+
95
+ ## 0.3.1
96
+
97
+ ### Patch Changes
98
+
99
+ - Expose public contribution flow on npm
100
+ - Updated dependencies
101
+ - @sia-ui/headless@0.3.1
102
+ - @sia-ui/react@0.3.1
103
+ - @sia-ui/tokens@0.3.1
104
+ - @sia-ui/utils@0.3.1
105
+
70
106
  ## 0.3.0
71
107
 
72
108
  ### Minor Changes
package/dist/index.cjs CHANGED
@@ -135,6 +135,12 @@ function InfoIcon(props) {
135
135
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 11v5M12 7.5h.01" })
136
136
  ] });
137
137
  }
138
+ function SettingsIcon(props) {
139
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
140
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3" }),
141
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19.4 15a1.7 1.7 0 0 0 .3 1.9l.1.1-2.8 2.8-.1-.1a1.7 1.7 0 0 0-1.9-.3 1.7 1.7 0 0 0-1 1.6v.2h-4V21a1.7 1.7 0 0 0-1-1.6 1.7 1.7 0 0 0-1.9.3l-.1.1L4.2 17l.1-.1a1.7 1.7 0 0 0 .3-1.9A1.7 1.7 0 0 0 3 14H2.8v-4H3a1.7 1.7 0 0 0 1.6-1 1.7 1.7 0 0 0-.3-1.9L4.2 7 7 4.2l.1.1A1.7 1.7 0 0 0 9 4.6 1.7 1.7 0 0 0 10 3v-.2h4V3a1.7 1.7 0 0 0 1 1.6 1.7 1.7 0 0 0 1.9-.3l.1-.1L19.8 7l-.1.1a1.7 1.7 0 0 0-.3 1.9 1.7 1.7 0 0 0 1.6 1h.2v4H21a1.7 1.7 0 0 0-1.6 1Z" })
142
+ ] });
143
+ }
138
144
  function EyeIcon(props) {
139
145
  return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
140
146
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12s3.5-6.5 10-6.5S22 12 22 12s-3.5 6.5-10 6.5S2 12 2 12Z" }),
@@ -283,6 +289,7 @@ var Drawer = React.forwardRef(
283
289
  closeOnOutsideClick = true,
284
290
  closeOnEsc = true,
285
291
  children,
292
+ className,
286
293
  ...rest
287
294
  }, ref) => {
288
295
  const {
@@ -342,6 +349,7 @@ var Drawer = React.forwardRef(
342
349
  "div",
343
350
  {
344
351
  className: "sia-drawer-root",
352
+ "data-state": state,
345
353
  style: { zIndex: zIndexRef.current ?? void 0 },
346
354
  children: [
347
355
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sia-drawer-overlay" }),
@@ -356,7 +364,8 @@ var Drawer = React.forwardRef(
356
364
  "sia-drawer",
357
365
  `sia-drawer-${position}`,
358
366
  `sia-drawer-${size}`,
359
- state === "closing" && "is-closing"
367
+ state === "closing" && "is-closing",
368
+ className
360
369
  ),
361
370
  ...rest,
362
371
  children
@@ -390,7 +399,7 @@ function DrawerClose() {
390
399
  className: "sia-drawer-close",
391
400
  onClick: ctx.close,
392
401
  "aria-label": "Fermer",
393
- children: "\u2715"
402
+ children: /* @__PURE__ */ jsxRuntime.jsx(XIcon, { "aria-hidden": "true" })
394
403
  }
395
404
  );
396
405
  }
@@ -623,7 +632,14 @@ function Ligne({
623
632
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
624
633
  item.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-sidebar__icon", "aria-hidden": "true", children: item.icon }),
625
634
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-sidebar__label", children: item.label }),
626
- item.badge !== void 0 && !collapsed && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-sidebar__badge", children: item.badge }),
635
+ item.badge !== void 0 && !collapsed && /* @__PURE__ */ jsxRuntime.jsx(
636
+ "span",
637
+ {
638
+ className: "sia-sidebar__badge",
639
+ "data-sia-badge": typeof item.badge === "string" || typeof item.badge === "number" ? String(item.badge) : void 0,
640
+ children: item.badge
641
+ }
642
+ ),
627
643
  porteUnePastille && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-sidebar__dot", "aria-hidden": "true" }),
628
644
  aDesEnfants && !collapsed && /* @__PURE__ */ jsxRuntime.jsx(
629
645
  "span",
@@ -785,7 +801,14 @@ function NoeudRail(props) {
785
801
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { ...panelProps, children: [
786
802
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sia-sidebar-flyout__title", children: [
787
803
  item.label,
788
- item.badge !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-sidebar__badge", children: item.badge })
804
+ item.badge !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
805
+ "span",
806
+ {
807
+ className: "sia-sidebar__badge",
808
+ "data-sia-badge": typeof item.badge === "string" || typeof item.badge === "number" ? String(item.badge) : void 0,
809
+ children: item.badge
810
+ }
811
+ )
789
812
  ] }),
790
813
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sia-sidebar-flyout__body", children: enfants.map((enfant) => /* @__PURE__ */ jsxRuntime.jsx(
791
814
  Noeud,
@@ -891,6 +914,50 @@ var BottomTabs = React.memo(function BottomTabs2({
891
914
  )
892
915
  ] });
893
916
  });
917
+ function AppShellBrand({
918
+ icon,
919
+ name,
920
+ description,
921
+ className,
922
+ ...props
923
+ }) {
924
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("sia-shell-brand", className), ...props, children: [
925
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-shell-brand__icon", "aria-hidden": "true", children: icon }),
926
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sia-shell-brand__copy", children: [
927
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-shell-brand__name", children: name }),
928
+ description !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-shell-brand__description", children: description })
929
+ ] })
930
+ ] });
931
+ }
932
+ function AppShellRailItem({
933
+ as = "div",
934
+ icon,
935
+ label,
936
+ className,
937
+ href,
938
+ type = "button",
939
+ disabled,
940
+ ...props
941
+ }) {
942
+ const Component = as;
943
+ const elementProps = {
944
+ ...props,
945
+ ...as === "a" && href ? { href } : {},
946
+ ...as === "button" ? { type, disabled } : {}
947
+ };
948
+ return /* @__PURE__ */ jsxRuntime.jsxs(
949
+ Component,
950
+ {
951
+ className: utils.cn("sia-shell-rail-item", className),
952
+ "aria-label": props["aria-label"] ?? (as !== "div" ? label : void 0),
953
+ ...elementProps,
954
+ children: [
955
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-shell-rail-item__icon", "aria-hidden": "true", children: icon }),
956
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sia-shell-rail-item__label", children: label })
957
+ ]
958
+ }
959
+ );
960
+ }
894
961
  function AppShell({
895
962
  nav,
896
963
  children,
@@ -1033,10 +1100,19 @@ function AppShell({
1033
1100
  ]
1034
1101
  }
1035
1102
  ),
1036
- /* @__PURE__ */ jsxRuntime.jsxs("main", { className: utils.cn("sia-shell__content", `sia-shell__content--${contentWidth}`), children: [
1037
- page && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sia-shell__page", children: page }),
1038
- children
1039
- ] }),
1103
+ /* @__PURE__ */ jsxRuntime.jsxs(
1104
+ "main",
1105
+ {
1106
+ className: utils.cn(
1107
+ "sia-shell__content",
1108
+ `sia-shell__content--${contentWidth}`
1109
+ ),
1110
+ children: [
1111
+ page && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sia-shell__page", children: page }),
1112
+ children
1113
+ ]
1114
+ }
1115
+ ),
1040
1116
  footer && /* @__PURE__ */ jsxRuntime.jsx("footer", { className: "sia-shell__footer", children: footer })
1041
1117
  ] }),
1042
1118
  compact && montrerOnglets && /* @__PURE__ */ jsxRuntime.jsx(
@@ -1049,7 +1125,7 @@ function AppShell({
1049
1125
  ...montrerTiroir ? { onMore: () => setTiroirOuvert(true) } : {}
1050
1126
  }
1051
1127
  ),
1052
- compact && montrerTiroir && /* @__PURE__ */ jsxRuntime.jsx(
1128
+ compact && montrerTiroir && /* @__PURE__ */ jsxRuntime.jsxs(
1053
1129
  Drawer,
1054
1130
  {
1055
1131
  open: tiroirOuvert,
@@ -1057,7 +1133,13 @@ function AppShell({
1057
1133
  position: side,
1058
1134
  size: "sm",
1059
1135
  className: "sia-shell__drawer",
1060
- children: barre
1136
+ children: [
1137
+ /* @__PURE__ */ jsxRuntime.jsxs(Drawer.Header, { children: [
1138
+ /* @__PURE__ */ jsxRuntime.jsx(Drawer.Title, { children: "Navigation" }),
1139
+ /* @__PURE__ */ jsxRuntime.jsx(Drawer.Close, {})
1140
+ ] }),
1141
+ /* @__PURE__ */ jsxRuntime.jsx(Drawer.Body, { children: barre })
1142
+ ]
1061
1143
  }
1062
1144
  )
1063
1145
  ]
@@ -7140,6 +7222,8 @@ exports.Alert = Alert;
7140
7222
  exports.AlertCircleIcon = AlertCircleIcon;
7141
7223
  exports.AmountDisplay = AmountDisplay;
7142
7224
  exports.AppShell = AppShell;
7225
+ exports.AppShellBrand = AppShellBrand;
7226
+ exports.AppShellRailItem = AppShellRailItem;
7143
7227
  exports.ArrowRightIcon = ArrowRightIcon;
7144
7228
  exports.AspectRatio = AspectRatio;
7145
7229
  exports.AsyncState = AsyncState;
@@ -7248,6 +7332,7 @@ exports.ScrollArea = ScrollArea;
7248
7332
  exports.SearchIcon = SearchIcon;
7249
7333
  exports.SearchInput = SearchInput;
7250
7334
  exports.Select = Select;
7335
+ exports.SettingsIcon = SettingsIcon;
7251
7336
  exports.Sidebar = Sidebar;
7252
7337
  exports.Skeleton = Skeleton;
7253
7338
  exports.Slider = Slider;
package/dist/index.css CHANGED
@@ -136,6 +136,36 @@
136
136
  --sia-elevation-overlay: 0 10px 30px rgb(15 23 42 / 0.12), 0 2px 8px rgb(15 23 42 / 0.06);
137
137
  --sia-elevation-modal: 0 24px 60px rgb(15 23 42 / 0.22);
138
138
  }
139
+ :root {
140
+ --sia-scrollbar-size:.625rem;
141
+ --sia-scrollbar-thumb:color-mix(in srgb,var(--sia-muted) 52%,transparent);
142
+ --sia-scrollbar-thumb-hover:color-mix(in srgb,var(--sia-muted) 76%,transparent);
143
+ }
144
+ :where(*) {
145
+ scrollbar-width: thin;
146
+ scrollbar-color: var(--sia-scrollbar-thumb) transparent;
147
+ }
148
+ :where(*)::-webkit-scrollbar {
149
+ width: var(--sia-scrollbar-size);
150
+ height: var(--sia-scrollbar-size);
151
+ }
152
+ :where(*)::-webkit-scrollbar-track,
153
+ :where(*)::-webkit-scrollbar-corner {
154
+ background: transparent;
155
+ }
156
+ :where(*)::-webkit-scrollbar-thumb {
157
+ min-width: 2.5rem;
158
+ min-height: 2.5rem;
159
+ border: 2px solid transparent;
160
+ border-radius: var(--sia-radius-full,9999px);
161
+ background: var(--sia-scrollbar-thumb);
162
+ background-clip: content-box;
163
+ }
164
+ :where(*)::-webkit-scrollbar-thumb:hover {
165
+ border: 2px solid transparent;
166
+ background: var(--sia-scrollbar-thumb-hover);
167
+ background-clip: content-box;
168
+ }
139
169
  .sia-radius--default {
140
170
  border-radius: var(--sia-radius);
141
171
  }
@@ -1226,45 +1256,58 @@
1226
1256
  .sia-drawer-overlay {
1227
1257
  position: absolute;
1228
1258
  inset: 0;
1229
- background: rgba(0, 0, 0, 0.4);
1230
- animation: fadeIn var(--sia-duration-base) var(--sia-easing-entrance);
1259
+ z-index: 0;
1260
+ background: rgb(2 6 23 / .52);
1261
+ animation: sia-drawer-fade-in var(--sia-duration-base) var(--sia-easing-entrance) both;
1262
+ }
1263
+ .sia-drawer-root[data-state=closing] .sia-drawer-overlay {
1264
+ animation: sia-drawer-fade-out var(--sia-duration-base) var(--sia-easing-exit) both;
1231
1265
  }
1232
1266
  .sia-drawer {
1233
1267
  position: absolute;
1234
- background: var(--sia-color-white);
1268
+ z-index: 1;
1269
+ color: var(--sia-foreground, #0f172a);
1270
+ background: var(--sia-background, #fff);
1271
+ border: 1px solid var(--sia-border, #e2e8f0);
1235
1272
  display: flex;
1236
1273
  flex-direction: column;
1237
- width: var(--sia-drawer-width);
1238
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
1274
+ width: min(var(--sia-drawer-width), calc(100vw - 2rem));
1275
+ overflow: hidden;
1276
+ isolation: isolate;
1277
+ box-shadow: 0 20px 50px rgb(2 6 23 / .24);
1239
1278
  will-change: transform;
1240
1279
  }
1241
1280
  .sia-drawer-right {
1242
1281
  right: 0;
1243
1282
  top: 0;
1244
1283
  height: 100%;
1245
- animation: slideInRight var(--sia-duration-slow) var(--sia-easing-entrance);
1284
+ animation: sia-drawer-in-right var(--sia-duration-slow) var(--sia-easing-entrance) both;
1246
1285
  }
1247
1286
  .sia-drawer-left {
1248
1287
  left: 0;
1249
1288
  top: 0;
1250
1289
  height: 100%;
1251
- animation: slideInLeft var(--sia-duration-slow) var(--sia-easing-entrance);
1290
+ animation: sia-drawer-in-left var(--sia-duration-slow) var(--sia-easing-entrance) both;
1252
1291
  }
1253
1292
  .sia-drawer-top {
1254
1293
  top: 0;
1255
1294
  left: 0;
1256
1295
  right: 0;
1257
- height: auto;
1296
+ width: 100%;
1297
+ max-width: 100%;
1298
+ max-height: min(80vh, 48rem);
1258
1299
  --sia-drawer-width: 100% !important;
1259
- animation: slideInTop var(--sia-duration-slow) var(--sia-easing-entrance);
1300
+ animation: sia-drawer-in-top var(--sia-duration-slow) var(--sia-easing-entrance) both;
1260
1301
  }
1261
1302
  .sia-drawer-bottom {
1262
1303
  bottom: 0;
1263
1304
  left: 0;
1264
1305
  right: 0;
1265
- height: auto;
1306
+ width: 100%;
1307
+ max-width: 100%;
1308
+ max-height: min(80vh, 48rem);
1266
1309
  --sia-drawer-width: 100% !important;
1267
- animation: slideInBottom var(--sia-duration-slow) var(--sia-easing-entrance);
1310
+ animation: sia-drawer-in-bottom var(--sia-duration-slow) var(--sia-easing-entrance) both;
1268
1311
  }
1269
1312
  .sia-drawer-sm {
1270
1313
  --sia-drawer-width: 320px;
@@ -1281,13 +1324,14 @@
1281
1324
  .sia-drawer-header,
1282
1325
  .sia-drawer-footer {
1283
1326
  padding: 16px;
1284
- border-bottom: 1px solid var(--sia-color-border);
1327
+ border-bottom: 1px solid var(--sia-border, #e2e8f0);
1285
1328
  display: flex;
1286
1329
  align-items: center;
1287
1330
  justify-content: space-between;
1288
1331
  }
1289
1332
  .sia-drawer-footer {
1290
- border-top: 1px solid var(--sia-color-border);
1333
+ border-top: 1px solid var(--sia-border, #e2e8f0);
1334
+ border-bottom: 0;
1291
1335
  margin-top: auto;
1292
1336
  }
1293
1337
  .sia-drawer-body {
@@ -1295,29 +1339,62 @@
1295
1339
  overflow-y: auto;
1296
1340
  }
1297
1341
  .sia-drawer-title {
1342
+ margin: 0;
1298
1343
  font-size: 1.1rem;
1299
1344
  font-weight: 600;
1300
1345
  }
1301
1346
  .sia-drawer-close {
1347
+ display: grid;
1348
+ place-items: center;
1349
+ flex: none;
1350
+ width: 2.25rem;
1351
+ height: 2.25rem;
1302
1352
  margin-left: auto;
1303
- background: none;
1304
- border: none;
1353
+ padding: 0;
1354
+ color: var(--sia-muted, #64748b);
1355
+ background: transparent;
1356
+ border: 0;
1357
+ border-radius: var(--sia-radius, .375rem);
1305
1358
  cursor: pointer;
1306
- font-size: 1.2rem;
1359
+ }
1360
+ .sia-drawer-close:hover {
1361
+ color: var(--sia-foreground,#0f172a);
1362
+ background: var(--sia-surface,#f8fafc);
1363
+ }
1364
+ .sia-drawer-close:focus-visible {
1365
+ outline: 2px solid var(--sia-primary,#2563eb);
1366
+ outline-offset: 2px;
1367
+ }
1368
+ .sia-drawer-close svg {
1369
+ width: 1.125rem;
1370
+ height: 1.125rem;
1307
1371
  }
1308
1372
  .sia-drawer-right.is-closing {
1309
- animation: slideOutRight var(--sia-duration-base) var(--sia-easing-exit) forwards;
1373
+ animation: sia-drawer-out-right var(--sia-duration-base) var(--sia-easing-exit) both;
1310
1374
  }
1311
1375
  .sia-drawer-left.is-closing {
1312
- animation: slideOutLeft var(--sia-duration-base) var(--sia-easing-exit) forwards;
1376
+ animation: sia-drawer-out-left var(--sia-duration-base) var(--sia-easing-exit) both;
1313
1377
  }
1314
1378
  .sia-drawer-top.is-closing {
1315
- animation: slideOutTop var(--sia-duration-base) var(--sia-easing-exit) forwards;
1379
+ animation: sia-drawer-out-top var(--sia-duration-base) var(--sia-easing-exit) both;
1316
1380
  }
1317
1381
  .sia-drawer-bottom.is-closing {
1318
- animation: slideOutBottom var(--sia-duration-base) var(--sia-easing-exit) forwards;
1382
+ animation: sia-drawer-out-bottom var(--sia-duration-base) var(--sia-easing-exit) both;
1383
+ }
1384
+ @keyframes sia-drawer-fade-in {
1385
+ from {
1386
+ opacity: 0;
1387
+ }
1388
+ to {
1389
+ opacity: 1;
1390
+ }
1391
+ }
1392
+ @keyframes sia-drawer-fade-out {
1393
+ to {
1394
+ opacity: 0;
1395
+ }
1319
1396
  }
1320
- @keyframes slideInRight {
1397
+ @keyframes sia-drawer-in-right {
1321
1398
  from {
1322
1399
  transform: translateX(100%);
1323
1400
  }
@@ -1325,7 +1402,7 @@
1325
1402
  transform: translateX(0);
1326
1403
  }
1327
1404
  }
1328
- @keyframes slideInLeft {
1405
+ @keyframes sia-drawer-in-left {
1329
1406
  from {
1330
1407
  transform: translateX(-100%);
1331
1408
  }
@@ -1333,7 +1410,7 @@
1333
1410
  transform: translateX(0);
1334
1411
  }
1335
1412
  }
1336
- @keyframes slideInTop {
1413
+ @keyframes sia-drawer-in-top {
1337
1414
  from {
1338
1415
  transform: translateY(-100%);
1339
1416
  }
@@ -1341,7 +1418,7 @@
1341
1418
  transform: translateY(0);
1342
1419
  }
1343
1420
  }
1344
- @keyframes slideInBottom {
1421
+ @keyframes sia-drawer-in-bottom {
1345
1422
  from {
1346
1423
  transform: translateY(100%);
1347
1424
  }
@@ -1349,22 +1426,22 @@
1349
1426
  transform: translateY(0);
1350
1427
  }
1351
1428
  }
1352
- @keyframes slideOutRight {
1429
+ @keyframes sia-drawer-out-right {
1353
1430
  to {
1354
1431
  transform: translateX(100%);
1355
1432
  }
1356
1433
  }
1357
- @keyframes slideOutLeft {
1434
+ @keyframes sia-drawer-out-left {
1358
1435
  to {
1359
1436
  transform: translateX(-100%);
1360
1437
  }
1361
1438
  }
1362
- @keyframes slideOutTop {
1439
+ @keyframes sia-drawer-out-top {
1363
1440
  to {
1364
1441
  transform: translateY(-100%);
1365
1442
  }
1366
1443
  }
1367
- @keyframes slideOutBottom {
1444
+ @keyframes sia-drawer-out-bottom {
1368
1445
  to {
1369
1446
  transform: translateY(100%);
1370
1447
  }
@@ -1388,10 +1465,12 @@
1388
1465
  .sia-sidebar__body {
1389
1466
  flex: 1;
1390
1467
  min-height: 0;
1468
+ padding-inline-end: .375rem;
1391
1469
  overflow-y: auto;
1392
1470
  display: grid;
1393
1471
  gap: .125rem;
1394
1472
  align-content: start;
1473
+ scrollbar-gutter: stable;
1395
1474
  }
1396
1475
  .sia-sidebar__header,
1397
1476
  .sia-sidebar__footer {
@@ -1524,15 +1603,6 @@
1524
1603
  .sia-sidebar__sub {
1525
1604
  position: relative;
1526
1605
  }
1527
- .sia-sidebar__sub::before {
1528
- content: "";
1529
- position: absolute;
1530
- top: .375rem;
1531
- bottom: .375rem;
1532
- left: 1.25rem;
1533
- width: 1px;
1534
- background: var(--sia-border);
1535
- }
1536
1606
  .sia-sidebar--collapsed .sia-sidebar__item {
1537
1607
  justify-content: center;
1538
1608
  padding-inline: .5rem;
@@ -1599,9 +1669,6 @@
1599
1669
  display: grid;
1600
1670
  gap: .125rem;
1601
1671
  }
1602
- .sia-sidebar-flyout .sia-sidebar__sub::before {
1603
- display: none;
1604
- }
1605
1672
  .sia-sidebar-flyout .sia-sidebar__item--child {
1606
1673
  padding-left: calc(.625rem + var(--sia-sidebar-depth, 1) * .6rem);
1607
1674
  }
@@ -1698,6 +1765,95 @@
1698
1765
  background: transparent;
1699
1766
  padding: .5rem;
1700
1767
  }
1768
+ .sia-shell-brand,
1769
+ .sia-shell-rail-item {
1770
+ display: flex;
1771
+ align-items: center;
1772
+ gap: .625rem;
1773
+ min-width: 0;
1774
+ }
1775
+ .sia-shell-brand {
1776
+ padding: .25rem;
1777
+ }
1778
+ .sia-shell-brand__icon {
1779
+ display: grid;
1780
+ place-items: center;
1781
+ flex: none;
1782
+ width: 2.75rem;
1783
+ height: 2.75rem;
1784
+ }
1785
+ .sia-shell-brand__icon > img,
1786
+ .sia-shell-brand__icon > svg {
1787
+ max-width: 100%;
1788
+ max-height: 100%;
1789
+ object-fit: contain;
1790
+ }
1791
+ .sia-shell-brand__copy {
1792
+ min-width: 0;
1793
+ }
1794
+ .sia-shell-brand__name,
1795
+ .sia-shell-brand__description {
1796
+ display: block;
1797
+ overflow: hidden;
1798
+ text-overflow: ellipsis;
1799
+ white-space: nowrap;
1800
+ }
1801
+ .sia-shell-brand__name {
1802
+ font-weight: 700;
1803
+ }
1804
+ .sia-shell-brand__description {
1805
+ margin-top: .1rem;
1806
+ color: var(--sia-muted);
1807
+ font-size: .72rem;
1808
+ }
1809
+ .sia-shell-rail-item {
1810
+ width: 100%;
1811
+ padding: .375rem;
1812
+ border: 0;
1813
+ border-radius: var(--sia-radius);
1814
+ background: transparent;
1815
+ color: var(--sia-muted);
1816
+ font: inherit;
1817
+ font-size: .75rem;
1818
+ text-decoration: none;
1819
+ }
1820
+ .sia-shell-rail-item:is(button, a) {
1821
+ cursor: pointer;
1822
+ }
1823
+ .sia-shell-rail-item:is(button, a):hover {
1824
+ background: var(--sia-surface-raised, var(--sia-surface));
1825
+ color: var(--sia-foreground);
1826
+ }
1827
+ .sia-shell-rail-item:disabled {
1828
+ opacity: .55;
1829
+ cursor: not-allowed;
1830
+ }
1831
+ .sia-shell-rail-item:is(button, a):focus-visible {
1832
+ outline: 2px solid var(--sia-primary);
1833
+ outline-offset: 2px;
1834
+ }
1835
+ .sia-shell-rail-item__icon {
1836
+ display: grid;
1837
+ place-items: center;
1838
+ flex: none;
1839
+ width: 1.5rem;
1840
+ height: 1.5rem;
1841
+ }
1842
+ .sia-shell-rail-item__label {
1843
+ min-width: 0;
1844
+ overflow: hidden;
1845
+ text-overflow: ellipsis;
1846
+ white-space: nowrap;
1847
+ }
1848
+ [data-collapsed] .sia-shell-brand,
1849
+ [data-collapsed] .sia-shell-rail-item {
1850
+ justify-content: center;
1851
+ gap: 0;
1852
+ }
1853
+ [data-collapsed] .sia-shell-brand__copy,
1854
+ [data-collapsed] .sia-shell-rail-item__label {
1855
+ display: none;
1856
+ }
1701
1857
  .sia-shell__main {
1702
1858
  display: flex;
1703
1859
  flex-direction: column;
@@ -1780,6 +1936,12 @@
1780
1936
  .sia-shell--with-tabs .sia-shell__main {
1781
1937
  padding-bottom: calc(var(--sia-shell-tabs) + env(safe-area-inset-bottom, 0px));
1782
1938
  }
1939
+ .sia-shell__drawer .sia-drawer-body {
1940
+ flex: 1;
1941
+ min-height: 0;
1942
+ padding: .5rem;
1943
+ overflow: hidden;
1944
+ }
1783
1945
  .sia-shell__drawer .sia-sidebar {
1784
1946
  height: 100%;
1785
1947
  }
@@ -6312,9 +6474,10 @@
6312
6474
  --sia-toggle-color: var(--sia-primary);
6313
6475
  display: inline-flex;
6314
6476
  padding: .2rem;
6315
- border: 1px solid var(--sia-border);
6477
+ border: 1px solid color-mix(in srgb, var(--sia-muted) 28%, var(--sia-border));
6316
6478
  border-radius: calc(var(--sia-radius) + 2px);
6317
- background: var(--sia-surface);
6479
+ background: color-mix(in srgb, var(--sia-muted) 12%, var(--sia-background));
6480
+ box-shadow: inset 0 1px 2px rgb(15 23 42 / .05);
6318
6481
  }
6319
6482
  .sia-toggle-group__item {
6320
6483
  position: relative;
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
- import { ReactNode, ReactElement, RefObject, ImgHTMLAttributes, HTMLAttributes, ButtonHTMLAttributes, InputHTMLAttributes, Key, TextareaHTMLAttributes, ForwardRefExoticComponent, RefAttributes, SVGProps, CSSProperties, PropsWithChildren } from 'react';
3
+ import { ReactNode, ReactElement, HTMLAttributes, RefObject, ImgHTMLAttributes, ButtonHTMLAttributes, InputHTMLAttributes, Key, TextareaHTMLAttributes, ForwardRefExoticComponent, RefAttributes, SVGProps, CSSProperties, PropsWithChildren } from 'react';
4
4
  import { ComponentTone, ComponentSize } from '@sia-ui/tokens';
5
5
  import * as _sia_ui_headless from '@sia-ui/headless';
6
6
  import { PermissionRule, Placement, SliderValue, FormAdapter, FormValidator, TableQueryStorage, TableQueryState, TableQuery, SessionStore, SessionState, ToastPlacement, ToastId, ToastOptions } from '@sia-ui/headless';
@@ -256,6 +256,34 @@ type AppShellCollapsible = "icon" | "offcanvas" | false;
256
256
  */
257
257
  type AppShellMobileNav = "drawer" | "tabs" | "both";
258
258
  type AppShellContentWidth = "wide" | "narrow" | "full";
259
+ interface AppShellBrandProps extends HTMLAttributes<HTMLDivElement> {
260
+ /** Symbole conservé lorsque la navigation devient un rail. */
261
+ icon: ReactNode;
262
+ /** Nom du produit, masqué automatiquement dans le rail. */
263
+ name: ReactNode;
264
+ /** Ligne secondaire facultative, masquée avec le nom. */
265
+ description?: ReactNode;
266
+ }
267
+ /**
268
+ * Identité de produit adaptée au rail de l'`AppShell`.
269
+ *
270
+ * L'application fournit le symbole et le texte une seule fois. Le composant
271
+ * masque sa copie dès que son parent reçoit `data-collapsed`.
272
+ */
273
+ declare function AppShellBrand({ icon, name, description, className, ...props }: AppShellBrandProps): react_jsx_runtime.JSX.Element;
274
+ interface AppShellRailItemProps extends HTMLAttributes<HTMLElement> {
275
+ /** Élément rendu : contenu simple, action ou lien. */
276
+ as?: "div" | "button" | "a";
277
+ /** Symbole toujours visible dans le rail. */
278
+ icon: ReactNode;
279
+ /** Libellé masqué visuellement dans le rail et conservé comme nom accessible. */
280
+ label: string;
281
+ href?: string;
282
+ type?: "button" | "submit" | "reset";
283
+ disabled?: boolean;
284
+ }
285
+ /** Contenu icône + libellé qui s'adapte automatiquement au rail. */
286
+ declare function AppShellRailItem({ as, icon, label, className, href, type, disabled, ...props }: AppShellRailItemProps): react_jsx_runtime.JSX.Element;
259
287
  interface AppShellProps {
260
288
  nav: SidebarEntry[];
261
289
  children: ReactNode;
@@ -295,8 +323,8 @@ interface AppShellProps {
295
323
  /**
296
324
  * En tête de barre latérale : logo, nom du produit, sélecteur d'entité.
297
325
  *
298
- * Reçoit `data-collapsed` en mode rail, comme `sidebarFooter` : sans quoi
299
- * un nom de produit écrit en toutes lettres déborde des quatre rem du rail.
326
+ * `AppShellBrand` masque son texte automatiquement dans le rail. Un contenu
327
+ * entièrement personnalisé reçoit toujours `data-collapsed` sur son parent.
300
328
  */
301
329
  brand?: ReactNode;
302
330
  /**
@@ -304,8 +332,8 @@ interface AppShellProps {
304
332
  *
305
333
  * C'est la place de la déconnexion et des réglages du compte — ce qui sort
306
334
  * de l'application, par opposition à l'en-tête, réservé à ce qui agit sur
307
- * l'écran courant. Reçoit `data-collapsed` en mode rail, de quoi masquer un
308
- * libellé sans changer de composant.
335
+ * l'écran courant. `AppShellRailItem` masque son libellé automatiquement ;
336
+ * un contenu personnalisé peut encore lire `data-collapsed` sur son parent.
309
337
  */
310
338
  sidebarFooter?: ReactNode;
311
339
  /** La barre du haut : recherche, notifications, avatar de compte. */
@@ -2550,6 +2578,7 @@ declare function TrashIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2550
2578
  declare function UploadIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2551
2579
  declare function AlertCircleIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2552
2580
  declare function InfoIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2581
+ declare function SettingsIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2553
2582
  declare function EyeIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2554
2583
  declare function EyeOffIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2555
2584
 
@@ -3397,4 +3426,4 @@ interface YearPickerProps {
3397
3426
  */
3398
3427
  declare function YearPicker({ value, defaultValue, min, max, onValueChange, className }: YearPickerProps): react_jsx_runtime.JSX.Element;
3399
3428
 
3400
- export { Accordion, type AccordionItem, type AccordionProps, Alert, AlertCircleIcon, type AlertProps, AmountDisplay, type AmountDisplayProps, AppShell, type AppShellCollapsible, type AppShellContentWidth, type AppShellMobileNav, type AppShellProps, ArrowRightIcon, AspectRatio, type AspectRatioProps, AsyncState, type AsyncStateProps, type AuditEvent, AuditMeta, type AuditMetaProps, AuthLayout, type AuthLayoutProps, Autocomplete, type AutocompleteProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarShape, type AvatarSize, type AvatarStatus, type AvatarTint, type AvatarVariant, Badge, type BadgeProps, BottomTabs, type BottomTabsProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, Calendar, type CalendarDay, type CalendarEvent, CalendarIcon, type CalendarMode, type CalendarProps, type CalendarRangeValue, Can, type CanProps, Card, CardBody, CardFooter, CardHeader, Chart, type ChartProps, type ChartSeries, CheckIcon, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClockIcon, Collapse, type CollapseProps, ColorPicker, type ColorPickerProps, type ColumnCardRole, type CommandItem, CommandPalette, type CommandPaletteProps, ConfirmDialog, type ConfirmDialogProps, Container, ContextMenu, type ContextMenuProps, Countdown, type CountdownProps, type CrudActionOptions, type CrudCreateOptions, type CrudDialogOptions, type CrudDialogState, CrudDialogs, CrudPage, type CrudPageProps, CurrencyInput, type CurrencyInputProps, DEFAULT_COUNTRIES, DataTable, type DataTableColumn, type DataTableProps, type DataTableView, DatePicker, type DatePickerProps, DateRangeFilter, type DateRangeFilterProps, DateRangePicker, type DateRangePickerProps, type DateRangePreset, type DateRangeValue, DateTimePicker, type DateTimePickerProps, type DateTimeValue, type DescriptionItem, Descriptions, type DescriptionsProps, Divider, type DividerProps, Drawer, DrawerBody, DrawerClose, type DrawerComponent, DrawerFooter, DrawerHeader, type DrawerPosition, type DrawerProps, type DrawerRef, type DrawerSize, DrawerTitle, DropdownMenu, type DropdownMenuProps, DurationDisplay, type DurationDisplayProps, EmptyState, type EmptyStateProps, EntityMeta, type EntityMetaProps, ErrorState, type ErrorStateProps, EventCalendar, type EventCalendarProps, EyeIcon, EyeOffIcon, Field, type FieldBindingLike, type FieldProps, type FieldStatus, type FieldType, type FieldValue, FileUpload, type FileUploadProps, FiltersBar, type FiltersBarProps, Form, type FormEntry, Field as FormField, type FormFieldConfig, type FormFieldGroup, type FieldProps as FormFieldProps, type FormProps, type FormShape, Heading, type HeadingProps, HoverCard, type HoverCardProps, type IDrawerProps, type ILabelProps, type ITooltipProps, type ITooltipVariant, IconButton, type IconButtonProps, ImageUpload, type ImageUploadProps, InfoIcon, InlineCode, Input, InputNumber, type InputNumberProps, type InputProps, JsonEditor, type JsonEditorProps, KpiGrid, type KpiGridProps, Label, type LabelProps, MarkdownEditor, type MarkdownEditorProps, type MenuEntry, type MenuItem, type MenuLabel, MenuList, type MenuListProps, type MenuSeparator, MiniCalendar, MinusIcon, Modal, type ModalProps, MonthPicker, type MonthPickerProps, MoreHorizontalIcon, MultiSelect, type MultiSelectProps, OtpInput, type OtpInputProps, Overlay, type OverlayPlacement, type OverlayProps, PageHeader, type PageHeaderProps, Pagination, type PaginationProps, PasswordInput, type PasswordInputProps, type PasswordStrength, PermissionGate, type PermissionGateProps, type PhoneCountry, PhoneInput, type PhoneInputProps, PlusIcon, Popover, type PopoverProps, Progress, type ProgressProps, QRCode, type QRCodeProps, Radio, RadioButton, type RadioButtonProps, RadioGroup, type RadioGroupProps, type RadioProps, Rating, type RatingProps, type ReferenceOption, ReferenceSelect, type ReferenceSelectProps, RelativeTime, type RelativeTimeProps, RequireSession, type RequireSessionProps, ResizablePanel, type ResizablePanelProps, type ResourceDefinition, type ResourceField, RichTextEditor, type RichTextEditorProps, type RowAction, ScrollArea, type ScrollAreaProps, SearchIcon, SearchInput, type SearchInputProps, Select, type SelectOption, type SelectProps, Sidebar, type SidebarEntry, type SidebarItem, type SidebarProps, type SidebarRenderLink, type SidebarSection, type SidebarState, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderRangeValue, Sparkline, type SparklineProps, Spinner, type SpinnerProps, Stack, StarIcon, StatCard, type StatCardProps, Statistic, type StatisticProps, type StepItem, type StepStatus, Steps, type StepsProps, Switch, type SwitchProps, Tabs, TabsContent, TabsList, type TabsProps, TabsTrigger, TagsInput, type TagsInputProps, Text, type TextProps, Textarea, type TextareaProps, type TimeParts, TimePicker, type TimePickerProps, TimeRangePicker, type TimeRangePickerProps, type TimeRangeValue, Timeline, type TimelineItem, type TimelineProps, Timer, type TimerProps, ToastProvider, type ToastProviderProps, Toaster, type ToasterProps, Toggle, ToggleGroup, type ToggleGroupOption, type ToggleGroupProps, type ToggleProps, Tooltip, type TooltipProps, type TooltipVariant, Tour, type TourProps, type TourStep, Transfer, type TransferItem, type TransferProps, TrashIcon, Tree, type TreeNode, type TreeProps, TreeSelect, type TreeSelectProps, UnsavedChangesGuard, type UnsavedChangesGuardProps, UploadIcon, type UseDataTableQueryOptions, WeekPicker, type WeekPickerProps, XIcon, YearPicker, type YearPickerProps, confirmUnsavedNavigation, createUrlTableStorage, defineResource, formatDuration, formatTimeValue, initialsOf, parseTimeValue, resourceColumns, resourceDefaults, resourceDetailColumns, resourceFormFields, resourcePermissions, resourceRowKey, resourceSearchKeys, resourceValidator, tintForName, useDataTableQuery, useToast };
3429
+ export { Accordion, type AccordionItem, type AccordionProps, Alert, AlertCircleIcon, type AlertProps, AmountDisplay, type AmountDisplayProps, AppShell, AppShellBrand, type AppShellBrandProps, type AppShellCollapsible, type AppShellContentWidth, type AppShellMobileNav, type AppShellProps, AppShellRailItem, type AppShellRailItemProps, ArrowRightIcon, AspectRatio, type AspectRatioProps, AsyncState, type AsyncStateProps, type AuditEvent, AuditMeta, type AuditMetaProps, AuthLayout, type AuthLayoutProps, Autocomplete, type AutocompleteProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarShape, type AvatarSize, type AvatarStatus, type AvatarTint, type AvatarVariant, Badge, type BadgeProps, BottomTabs, type BottomTabsProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, Calendar, type CalendarDay, type CalendarEvent, CalendarIcon, type CalendarMode, type CalendarProps, type CalendarRangeValue, Can, type CanProps, Card, CardBody, CardFooter, CardHeader, Chart, type ChartProps, type ChartSeries, CheckIcon, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClockIcon, Collapse, type CollapseProps, ColorPicker, type ColorPickerProps, type ColumnCardRole, type CommandItem, CommandPalette, type CommandPaletteProps, ConfirmDialog, type ConfirmDialogProps, Container, ContextMenu, type ContextMenuProps, Countdown, type CountdownProps, type CrudActionOptions, type CrudCreateOptions, type CrudDialogOptions, type CrudDialogState, CrudDialogs, CrudPage, type CrudPageProps, CurrencyInput, type CurrencyInputProps, DEFAULT_COUNTRIES, DataTable, type DataTableColumn, type DataTableProps, type DataTableView, DatePicker, type DatePickerProps, DateRangeFilter, type DateRangeFilterProps, DateRangePicker, type DateRangePickerProps, type DateRangePreset, type DateRangeValue, DateTimePicker, type DateTimePickerProps, type DateTimeValue, type DescriptionItem, Descriptions, type DescriptionsProps, Divider, type DividerProps, Drawer, DrawerBody, DrawerClose, type DrawerComponent, DrawerFooter, DrawerHeader, type DrawerPosition, type DrawerProps, type DrawerRef, type DrawerSize, DrawerTitle, DropdownMenu, type DropdownMenuProps, DurationDisplay, type DurationDisplayProps, EmptyState, type EmptyStateProps, EntityMeta, type EntityMetaProps, ErrorState, type ErrorStateProps, EventCalendar, type EventCalendarProps, EyeIcon, EyeOffIcon, Field, type FieldBindingLike, type FieldProps, type FieldStatus, type FieldType, type FieldValue, FileUpload, type FileUploadProps, FiltersBar, type FiltersBarProps, Form, type FormEntry, Field as FormField, type FormFieldConfig, type FormFieldGroup, type FieldProps as FormFieldProps, type FormProps, type FormShape, Heading, type HeadingProps, HoverCard, type HoverCardProps, type IDrawerProps, type ILabelProps, type ITooltipProps, type ITooltipVariant, IconButton, type IconButtonProps, ImageUpload, type ImageUploadProps, InfoIcon, InlineCode, Input, InputNumber, type InputNumberProps, type InputProps, JsonEditor, type JsonEditorProps, KpiGrid, type KpiGridProps, Label, type LabelProps, MarkdownEditor, type MarkdownEditorProps, type MenuEntry, type MenuItem, type MenuLabel, MenuList, type MenuListProps, type MenuSeparator, MiniCalendar, MinusIcon, Modal, type ModalProps, MonthPicker, type MonthPickerProps, MoreHorizontalIcon, MultiSelect, type MultiSelectProps, OtpInput, type OtpInputProps, Overlay, type OverlayPlacement, type OverlayProps, PageHeader, type PageHeaderProps, Pagination, type PaginationProps, PasswordInput, type PasswordInputProps, type PasswordStrength, PermissionGate, type PermissionGateProps, type PhoneCountry, PhoneInput, type PhoneInputProps, PlusIcon, Popover, type PopoverProps, Progress, type ProgressProps, QRCode, type QRCodeProps, Radio, RadioButton, type RadioButtonProps, RadioGroup, type RadioGroupProps, type RadioProps, Rating, type RatingProps, type ReferenceOption, ReferenceSelect, type ReferenceSelectProps, RelativeTime, type RelativeTimeProps, RequireSession, type RequireSessionProps, ResizablePanel, type ResizablePanelProps, type ResourceDefinition, type ResourceField, RichTextEditor, type RichTextEditorProps, type RowAction, ScrollArea, type ScrollAreaProps, SearchIcon, SearchInput, type SearchInputProps, Select, type SelectOption, type SelectProps, SettingsIcon, Sidebar, type SidebarEntry, type SidebarItem, type SidebarProps, type SidebarRenderLink, type SidebarSection, type SidebarState, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderRangeValue, Sparkline, type SparklineProps, Spinner, type SpinnerProps, Stack, StarIcon, StatCard, type StatCardProps, Statistic, type StatisticProps, type StepItem, type StepStatus, Steps, type StepsProps, Switch, type SwitchProps, Tabs, TabsContent, TabsList, type TabsProps, TabsTrigger, TagsInput, type TagsInputProps, Text, type TextProps, Textarea, type TextareaProps, type TimeParts, TimePicker, type TimePickerProps, TimeRangePicker, type TimeRangePickerProps, type TimeRangeValue, Timeline, type TimelineItem, type TimelineProps, Timer, type TimerProps, ToastProvider, type ToastProviderProps, Toaster, type ToasterProps, Toggle, ToggleGroup, type ToggleGroupOption, type ToggleGroupProps, type ToggleProps, Tooltip, type TooltipProps, type TooltipVariant, Tour, type TourProps, type TourStep, Transfer, type TransferItem, type TransferProps, TrashIcon, Tree, type TreeNode, type TreeProps, TreeSelect, type TreeSelectProps, UnsavedChangesGuard, type UnsavedChangesGuardProps, UploadIcon, type UseDataTableQueryOptions, WeekPicker, type WeekPickerProps, XIcon, YearPicker, type YearPickerProps, confirmUnsavedNavigation, createUrlTableStorage, defineResource, formatDuration, formatTimeValue, initialsOf, parseTimeValue, resourceColumns, resourceDefaults, resourceDetailColumns, resourceFormFields, resourcePermissions, resourceRowKey, resourceSearchKeys, resourceValidator, tintForName, useDataTableQuery, useToast };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
- import { ReactNode, ReactElement, RefObject, ImgHTMLAttributes, HTMLAttributes, ButtonHTMLAttributes, InputHTMLAttributes, Key, TextareaHTMLAttributes, ForwardRefExoticComponent, RefAttributes, SVGProps, CSSProperties, PropsWithChildren } from 'react';
3
+ import { ReactNode, ReactElement, HTMLAttributes, RefObject, ImgHTMLAttributes, ButtonHTMLAttributes, InputHTMLAttributes, Key, TextareaHTMLAttributes, ForwardRefExoticComponent, RefAttributes, SVGProps, CSSProperties, PropsWithChildren } from 'react';
4
4
  import { ComponentTone, ComponentSize } from '@sia-ui/tokens';
5
5
  import * as _sia_ui_headless from '@sia-ui/headless';
6
6
  import { PermissionRule, Placement, SliderValue, FormAdapter, FormValidator, TableQueryStorage, TableQueryState, TableQuery, SessionStore, SessionState, ToastPlacement, ToastId, ToastOptions } from '@sia-ui/headless';
@@ -256,6 +256,34 @@ type AppShellCollapsible = "icon" | "offcanvas" | false;
256
256
  */
257
257
  type AppShellMobileNav = "drawer" | "tabs" | "both";
258
258
  type AppShellContentWidth = "wide" | "narrow" | "full";
259
+ interface AppShellBrandProps extends HTMLAttributes<HTMLDivElement> {
260
+ /** Symbole conservé lorsque la navigation devient un rail. */
261
+ icon: ReactNode;
262
+ /** Nom du produit, masqué automatiquement dans le rail. */
263
+ name: ReactNode;
264
+ /** Ligne secondaire facultative, masquée avec le nom. */
265
+ description?: ReactNode;
266
+ }
267
+ /**
268
+ * Identité de produit adaptée au rail de l'`AppShell`.
269
+ *
270
+ * L'application fournit le symbole et le texte une seule fois. Le composant
271
+ * masque sa copie dès que son parent reçoit `data-collapsed`.
272
+ */
273
+ declare function AppShellBrand({ icon, name, description, className, ...props }: AppShellBrandProps): react_jsx_runtime.JSX.Element;
274
+ interface AppShellRailItemProps extends HTMLAttributes<HTMLElement> {
275
+ /** Élément rendu : contenu simple, action ou lien. */
276
+ as?: "div" | "button" | "a";
277
+ /** Symbole toujours visible dans le rail. */
278
+ icon: ReactNode;
279
+ /** Libellé masqué visuellement dans le rail et conservé comme nom accessible. */
280
+ label: string;
281
+ href?: string;
282
+ type?: "button" | "submit" | "reset";
283
+ disabled?: boolean;
284
+ }
285
+ /** Contenu icône + libellé qui s'adapte automatiquement au rail. */
286
+ declare function AppShellRailItem({ as, icon, label, className, href, type, disabled, ...props }: AppShellRailItemProps): react_jsx_runtime.JSX.Element;
259
287
  interface AppShellProps {
260
288
  nav: SidebarEntry[];
261
289
  children: ReactNode;
@@ -295,8 +323,8 @@ interface AppShellProps {
295
323
  /**
296
324
  * En tête de barre latérale : logo, nom du produit, sélecteur d'entité.
297
325
  *
298
- * Reçoit `data-collapsed` en mode rail, comme `sidebarFooter` : sans quoi
299
- * un nom de produit écrit en toutes lettres déborde des quatre rem du rail.
326
+ * `AppShellBrand` masque son texte automatiquement dans le rail. Un contenu
327
+ * entièrement personnalisé reçoit toujours `data-collapsed` sur son parent.
300
328
  */
301
329
  brand?: ReactNode;
302
330
  /**
@@ -304,8 +332,8 @@ interface AppShellProps {
304
332
  *
305
333
  * C'est la place de la déconnexion et des réglages du compte — ce qui sort
306
334
  * de l'application, par opposition à l'en-tête, réservé à ce qui agit sur
307
- * l'écran courant. Reçoit `data-collapsed` en mode rail, de quoi masquer un
308
- * libellé sans changer de composant.
335
+ * l'écran courant. `AppShellRailItem` masque son libellé automatiquement ;
336
+ * un contenu personnalisé peut encore lire `data-collapsed` sur son parent.
309
337
  */
310
338
  sidebarFooter?: ReactNode;
311
339
  /** La barre du haut : recherche, notifications, avatar de compte. */
@@ -2550,6 +2578,7 @@ declare function TrashIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2550
2578
  declare function UploadIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2551
2579
  declare function AlertCircleIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2552
2580
  declare function InfoIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2581
+ declare function SettingsIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2553
2582
  declare function EyeIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2554
2583
  declare function EyeOffIcon(props: IconProps): react_jsx_runtime.JSX.Element;
2555
2584
 
@@ -3397,4 +3426,4 @@ interface YearPickerProps {
3397
3426
  */
3398
3427
  declare function YearPicker({ value, defaultValue, min, max, onValueChange, className }: YearPickerProps): react_jsx_runtime.JSX.Element;
3399
3428
 
3400
- export { Accordion, type AccordionItem, type AccordionProps, Alert, AlertCircleIcon, type AlertProps, AmountDisplay, type AmountDisplayProps, AppShell, type AppShellCollapsible, type AppShellContentWidth, type AppShellMobileNav, type AppShellProps, ArrowRightIcon, AspectRatio, type AspectRatioProps, AsyncState, type AsyncStateProps, type AuditEvent, AuditMeta, type AuditMetaProps, AuthLayout, type AuthLayoutProps, Autocomplete, type AutocompleteProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarShape, type AvatarSize, type AvatarStatus, type AvatarTint, type AvatarVariant, Badge, type BadgeProps, BottomTabs, type BottomTabsProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, Calendar, type CalendarDay, type CalendarEvent, CalendarIcon, type CalendarMode, type CalendarProps, type CalendarRangeValue, Can, type CanProps, Card, CardBody, CardFooter, CardHeader, Chart, type ChartProps, type ChartSeries, CheckIcon, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClockIcon, Collapse, type CollapseProps, ColorPicker, type ColorPickerProps, type ColumnCardRole, type CommandItem, CommandPalette, type CommandPaletteProps, ConfirmDialog, type ConfirmDialogProps, Container, ContextMenu, type ContextMenuProps, Countdown, type CountdownProps, type CrudActionOptions, type CrudCreateOptions, type CrudDialogOptions, type CrudDialogState, CrudDialogs, CrudPage, type CrudPageProps, CurrencyInput, type CurrencyInputProps, DEFAULT_COUNTRIES, DataTable, type DataTableColumn, type DataTableProps, type DataTableView, DatePicker, type DatePickerProps, DateRangeFilter, type DateRangeFilterProps, DateRangePicker, type DateRangePickerProps, type DateRangePreset, type DateRangeValue, DateTimePicker, type DateTimePickerProps, type DateTimeValue, type DescriptionItem, Descriptions, type DescriptionsProps, Divider, type DividerProps, Drawer, DrawerBody, DrawerClose, type DrawerComponent, DrawerFooter, DrawerHeader, type DrawerPosition, type DrawerProps, type DrawerRef, type DrawerSize, DrawerTitle, DropdownMenu, type DropdownMenuProps, DurationDisplay, type DurationDisplayProps, EmptyState, type EmptyStateProps, EntityMeta, type EntityMetaProps, ErrorState, type ErrorStateProps, EventCalendar, type EventCalendarProps, EyeIcon, EyeOffIcon, Field, type FieldBindingLike, type FieldProps, type FieldStatus, type FieldType, type FieldValue, FileUpload, type FileUploadProps, FiltersBar, type FiltersBarProps, Form, type FormEntry, Field as FormField, type FormFieldConfig, type FormFieldGroup, type FieldProps as FormFieldProps, type FormProps, type FormShape, Heading, type HeadingProps, HoverCard, type HoverCardProps, type IDrawerProps, type ILabelProps, type ITooltipProps, type ITooltipVariant, IconButton, type IconButtonProps, ImageUpload, type ImageUploadProps, InfoIcon, InlineCode, Input, InputNumber, type InputNumberProps, type InputProps, JsonEditor, type JsonEditorProps, KpiGrid, type KpiGridProps, Label, type LabelProps, MarkdownEditor, type MarkdownEditorProps, type MenuEntry, type MenuItem, type MenuLabel, MenuList, type MenuListProps, type MenuSeparator, MiniCalendar, MinusIcon, Modal, type ModalProps, MonthPicker, type MonthPickerProps, MoreHorizontalIcon, MultiSelect, type MultiSelectProps, OtpInput, type OtpInputProps, Overlay, type OverlayPlacement, type OverlayProps, PageHeader, type PageHeaderProps, Pagination, type PaginationProps, PasswordInput, type PasswordInputProps, type PasswordStrength, PermissionGate, type PermissionGateProps, type PhoneCountry, PhoneInput, type PhoneInputProps, PlusIcon, Popover, type PopoverProps, Progress, type ProgressProps, QRCode, type QRCodeProps, Radio, RadioButton, type RadioButtonProps, RadioGroup, type RadioGroupProps, type RadioProps, Rating, type RatingProps, type ReferenceOption, ReferenceSelect, type ReferenceSelectProps, RelativeTime, type RelativeTimeProps, RequireSession, type RequireSessionProps, ResizablePanel, type ResizablePanelProps, type ResourceDefinition, type ResourceField, RichTextEditor, type RichTextEditorProps, type RowAction, ScrollArea, type ScrollAreaProps, SearchIcon, SearchInput, type SearchInputProps, Select, type SelectOption, type SelectProps, Sidebar, type SidebarEntry, type SidebarItem, type SidebarProps, type SidebarRenderLink, type SidebarSection, type SidebarState, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderRangeValue, Sparkline, type SparklineProps, Spinner, type SpinnerProps, Stack, StarIcon, StatCard, type StatCardProps, Statistic, type StatisticProps, type StepItem, type StepStatus, Steps, type StepsProps, Switch, type SwitchProps, Tabs, TabsContent, TabsList, type TabsProps, TabsTrigger, TagsInput, type TagsInputProps, Text, type TextProps, Textarea, type TextareaProps, type TimeParts, TimePicker, type TimePickerProps, TimeRangePicker, type TimeRangePickerProps, type TimeRangeValue, Timeline, type TimelineItem, type TimelineProps, Timer, type TimerProps, ToastProvider, type ToastProviderProps, Toaster, type ToasterProps, Toggle, ToggleGroup, type ToggleGroupOption, type ToggleGroupProps, type ToggleProps, Tooltip, type TooltipProps, type TooltipVariant, Tour, type TourProps, type TourStep, Transfer, type TransferItem, type TransferProps, TrashIcon, Tree, type TreeNode, type TreeProps, TreeSelect, type TreeSelectProps, UnsavedChangesGuard, type UnsavedChangesGuardProps, UploadIcon, type UseDataTableQueryOptions, WeekPicker, type WeekPickerProps, XIcon, YearPicker, type YearPickerProps, confirmUnsavedNavigation, createUrlTableStorage, defineResource, formatDuration, formatTimeValue, initialsOf, parseTimeValue, resourceColumns, resourceDefaults, resourceDetailColumns, resourceFormFields, resourcePermissions, resourceRowKey, resourceSearchKeys, resourceValidator, tintForName, useDataTableQuery, useToast };
3429
+ export { Accordion, type AccordionItem, type AccordionProps, Alert, AlertCircleIcon, type AlertProps, AmountDisplay, type AmountDisplayProps, AppShell, AppShellBrand, type AppShellBrandProps, type AppShellCollapsible, type AppShellContentWidth, type AppShellMobileNav, type AppShellProps, AppShellRailItem, type AppShellRailItemProps, ArrowRightIcon, AspectRatio, type AspectRatioProps, AsyncState, type AsyncStateProps, type AuditEvent, AuditMeta, type AuditMetaProps, AuthLayout, type AuthLayoutProps, Autocomplete, type AutocompleteProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarShape, type AvatarSize, type AvatarStatus, type AvatarTint, type AvatarVariant, Badge, type BadgeProps, BottomTabs, type BottomTabsProps, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, Calendar, type CalendarDay, type CalendarEvent, CalendarIcon, type CalendarMode, type CalendarProps, type CalendarRangeValue, Can, type CanProps, Card, CardBody, CardFooter, CardHeader, Chart, type ChartProps, type ChartSeries, CheckIcon, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClockIcon, Collapse, type CollapseProps, ColorPicker, type ColorPickerProps, type ColumnCardRole, type CommandItem, CommandPalette, type CommandPaletteProps, ConfirmDialog, type ConfirmDialogProps, Container, ContextMenu, type ContextMenuProps, Countdown, type CountdownProps, type CrudActionOptions, type CrudCreateOptions, type CrudDialogOptions, type CrudDialogState, CrudDialogs, CrudPage, type CrudPageProps, CurrencyInput, type CurrencyInputProps, DEFAULT_COUNTRIES, DataTable, type DataTableColumn, type DataTableProps, type DataTableView, DatePicker, type DatePickerProps, DateRangeFilter, type DateRangeFilterProps, DateRangePicker, type DateRangePickerProps, type DateRangePreset, type DateRangeValue, DateTimePicker, type DateTimePickerProps, type DateTimeValue, type DescriptionItem, Descriptions, type DescriptionsProps, Divider, type DividerProps, Drawer, DrawerBody, DrawerClose, type DrawerComponent, DrawerFooter, DrawerHeader, type DrawerPosition, type DrawerProps, type DrawerRef, type DrawerSize, DrawerTitle, DropdownMenu, type DropdownMenuProps, DurationDisplay, type DurationDisplayProps, EmptyState, type EmptyStateProps, EntityMeta, type EntityMetaProps, ErrorState, type ErrorStateProps, EventCalendar, type EventCalendarProps, EyeIcon, EyeOffIcon, Field, type FieldBindingLike, type FieldProps, type FieldStatus, type FieldType, type FieldValue, FileUpload, type FileUploadProps, FiltersBar, type FiltersBarProps, Form, type FormEntry, Field as FormField, type FormFieldConfig, type FormFieldGroup, type FieldProps as FormFieldProps, type FormProps, type FormShape, Heading, type HeadingProps, HoverCard, type HoverCardProps, type IDrawerProps, type ILabelProps, type ITooltipProps, type ITooltipVariant, IconButton, type IconButtonProps, ImageUpload, type ImageUploadProps, InfoIcon, InlineCode, Input, InputNumber, type InputNumberProps, type InputProps, JsonEditor, type JsonEditorProps, KpiGrid, type KpiGridProps, Label, type LabelProps, MarkdownEditor, type MarkdownEditorProps, type MenuEntry, type MenuItem, type MenuLabel, MenuList, type MenuListProps, type MenuSeparator, MiniCalendar, MinusIcon, Modal, type ModalProps, MonthPicker, type MonthPickerProps, MoreHorizontalIcon, MultiSelect, type MultiSelectProps, OtpInput, type OtpInputProps, Overlay, type OverlayPlacement, type OverlayProps, PageHeader, type PageHeaderProps, Pagination, type PaginationProps, PasswordInput, type PasswordInputProps, type PasswordStrength, PermissionGate, type PermissionGateProps, type PhoneCountry, PhoneInput, type PhoneInputProps, PlusIcon, Popover, type PopoverProps, Progress, type ProgressProps, QRCode, type QRCodeProps, Radio, RadioButton, type RadioButtonProps, RadioGroup, type RadioGroupProps, type RadioProps, Rating, type RatingProps, type ReferenceOption, ReferenceSelect, type ReferenceSelectProps, RelativeTime, type RelativeTimeProps, RequireSession, type RequireSessionProps, ResizablePanel, type ResizablePanelProps, type ResourceDefinition, type ResourceField, RichTextEditor, type RichTextEditorProps, type RowAction, ScrollArea, type ScrollAreaProps, SearchIcon, SearchInput, type SearchInputProps, Select, type SelectOption, type SelectProps, SettingsIcon, Sidebar, type SidebarEntry, type SidebarItem, type SidebarProps, type SidebarRenderLink, type SidebarSection, type SidebarState, Skeleton, type SkeletonProps, Slider, type SliderProps, type SliderRangeValue, Sparkline, type SparklineProps, Spinner, type SpinnerProps, Stack, StarIcon, StatCard, type StatCardProps, Statistic, type StatisticProps, type StepItem, type StepStatus, Steps, type StepsProps, Switch, type SwitchProps, Tabs, TabsContent, TabsList, type TabsProps, TabsTrigger, TagsInput, type TagsInputProps, Text, type TextProps, Textarea, type TextareaProps, type TimeParts, TimePicker, type TimePickerProps, TimeRangePicker, type TimeRangePickerProps, type TimeRangeValue, Timeline, type TimelineItem, type TimelineProps, Timer, type TimerProps, ToastProvider, type ToastProviderProps, Toaster, type ToasterProps, Toggle, ToggleGroup, type ToggleGroupOption, type ToggleGroupProps, type ToggleProps, Tooltip, type TooltipProps, type TooltipVariant, Tour, type TourProps, type TourStep, Transfer, type TransferItem, type TransferProps, TrashIcon, Tree, type TreeNode, type TreeProps, TreeSelect, type TreeSelectProps, UnsavedChangesGuard, type UnsavedChangesGuardProps, UploadIcon, type UseDataTableQueryOptions, WeekPicker, type WeekPickerProps, XIcon, YearPicker, type YearPickerProps, confirmUnsavedNavigation, createUrlTableStorage, defineResource, formatDuration, formatTimeValue, initialsOf, parseTimeValue, resourceColumns, resourceDefaults, resourceDetailColumns, resourceFormFields, resourcePermissions, resourceRowKey, resourceSearchKeys, resourceValidator, tintForName, useDataTableQuery, useToast };
package/dist/index.js CHANGED
@@ -115,6 +115,12 @@ function InfoIcon(props) {
115
115
  /* @__PURE__ */ jsx("path", { d: "M12 11v5M12 7.5h.01" })
116
116
  ] });
117
117
  }
118
+ function SettingsIcon(props) {
119
+ return /* @__PURE__ */ jsxs(IconBase, { ...props, children: [
120
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3" }),
121
+ /* @__PURE__ */ jsx("path", { d: "M19.4 15a1.7 1.7 0 0 0 .3 1.9l.1.1-2.8 2.8-.1-.1a1.7 1.7 0 0 0-1.9-.3 1.7 1.7 0 0 0-1 1.6v.2h-4V21a1.7 1.7 0 0 0-1-1.6 1.7 1.7 0 0 0-1.9.3l-.1.1L4.2 17l.1-.1a1.7 1.7 0 0 0 .3-1.9A1.7 1.7 0 0 0 3 14H2.8v-4H3a1.7 1.7 0 0 0 1.6-1 1.7 1.7 0 0 0-.3-1.9L4.2 7 7 4.2l.1.1A1.7 1.7 0 0 0 9 4.6 1.7 1.7 0 0 0 10 3v-.2h4V3a1.7 1.7 0 0 0 1 1.6 1.7 1.7 0 0 0 1.9-.3l.1-.1L19.8 7l-.1.1a1.7 1.7 0 0 0-.3 1.9 1.7 1.7 0 0 0 1.6 1h.2v4H21a1.7 1.7 0 0 0-1.6 1Z" })
122
+ ] });
123
+ }
118
124
  function EyeIcon(props) {
119
125
  return /* @__PURE__ */ jsxs(IconBase, { ...props, children: [
120
126
  /* @__PURE__ */ jsx("path", { d: "M2 12s3.5-6.5 10-6.5S22 12 22 12s-3.5 6.5-10 6.5S2 12 2 12Z" }),
@@ -263,6 +269,7 @@ var Drawer = forwardRef(
263
269
  closeOnOutsideClick = true,
264
270
  closeOnEsc = true,
265
271
  children,
272
+ className,
266
273
  ...rest
267
274
  }, ref) => {
268
275
  const {
@@ -322,6 +329,7 @@ var Drawer = forwardRef(
322
329
  "div",
323
330
  {
324
331
  className: "sia-drawer-root",
332
+ "data-state": state,
325
333
  style: { zIndex: zIndexRef.current ?? void 0 },
326
334
  children: [
327
335
  /* @__PURE__ */ jsx("div", { className: "sia-drawer-overlay" }),
@@ -336,7 +344,8 @@ var Drawer = forwardRef(
336
344
  "sia-drawer",
337
345
  `sia-drawer-${position}`,
338
346
  `sia-drawer-${size}`,
339
- state === "closing" && "is-closing"
347
+ state === "closing" && "is-closing",
348
+ className
340
349
  ),
341
350
  ...rest,
342
351
  children
@@ -370,7 +379,7 @@ function DrawerClose() {
370
379
  className: "sia-drawer-close",
371
380
  onClick: ctx.close,
372
381
  "aria-label": "Fermer",
373
- children: "\u2715"
382
+ children: /* @__PURE__ */ jsx(XIcon, { "aria-hidden": "true" })
374
383
  }
375
384
  );
376
385
  }
@@ -603,7 +612,14 @@ function Ligne({
603
612
  return /* @__PURE__ */ jsxs(Fragment, { children: [
604
613
  item.icon && /* @__PURE__ */ jsx("span", { className: "sia-sidebar__icon", "aria-hidden": "true", children: item.icon }),
605
614
  /* @__PURE__ */ jsx("span", { className: "sia-sidebar__label", children: item.label }),
606
- item.badge !== void 0 && !collapsed && /* @__PURE__ */ jsx("span", { className: "sia-sidebar__badge", children: item.badge }),
615
+ item.badge !== void 0 && !collapsed && /* @__PURE__ */ jsx(
616
+ "span",
617
+ {
618
+ className: "sia-sidebar__badge",
619
+ "data-sia-badge": typeof item.badge === "string" || typeof item.badge === "number" ? String(item.badge) : void 0,
620
+ children: item.badge
621
+ }
622
+ ),
607
623
  porteUnePastille && /* @__PURE__ */ jsx("span", { className: "sia-sidebar__dot", "aria-hidden": "true" }),
608
624
  aDesEnfants && !collapsed && /* @__PURE__ */ jsx(
609
625
  "span",
@@ -765,7 +781,14 @@ function NoeudRail(props) {
765
781
  children: /* @__PURE__ */ jsxs("div", { ...panelProps, children: [
766
782
  /* @__PURE__ */ jsxs("div", { className: "sia-sidebar-flyout__title", children: [
767
783
  item.label,
768
- item.badge !== void 0 && /* @__PURE__ */ jsx("span", { className: "sia-sidebar__badge", children: item.badge })
784
+ item.badge !== void 0 && /* @__PURE__ */ jsx(
785
+ "span",
786
+ {
787
+ className: "sia-sidebar__badge",
788
+ "data-sia-badge": typeof item.badge === "string" || typeof item.badge === "number" ? String(item.badge) : void 0,
789
+ children: item.badge
790
+ }
791
+ )
769
792
  ] }),
770
793
  /* @__PURE__ */ jsx("div", { className: "sia-sidebar-flyout__body", children: enfants.map((enfant) => /* @__PURE__ */ jsx(
771
794
  Noeud,
@@ -871,6 +894,50 @@ var BottomTabs = memo(function BottomTabs2({
871
894
  )
872
895
  ] });
873
896
  });
897
+ function AppShellBrand({
898
+ icon,
899
+ name,
900
+ description,
901
+ className,
902
+ ...props
903
+ }) {
904
+ return /* @__PURE__ */ jsxs("div", { className: cn("sia-shell-brand", className), ...props, children: [
905
+ /* @__PURE__ */ jsx("span", { className: "sia-shell-brand__icon", "aria-hidden": "true", children: icon }),
906
+ /* @__PURE__ */ jsxs("span", { className: "sia-shell-brand__copy", children: [
907
+ /* @__PURE__ */ jsx("span", { className: "sia-shell-brand__name", children: name }),
908
+ description !== void 0 && /* @__PURE__ */ jsx("span", { className: "sia-shell-brand__description", children: description })
909
+ ] })
910
+ ] });
911
+ }
912
+ function AppShellRailItem({
913
+ as = "div",
914
+ icon,
915
+ label,
916
+ className,
917
+ href,
918
+ type = "button",
919
+ disabled,
920
+ ...props
921
+ }) {
922
+ const Component = as;
923
+ const elementProps = {
924
+ ...props,
925
+ ...as === "a" && href ? { href } : {},
926
+ ...as === "button" ? { type, disabled } : {}
927
+ };
928
+ return /* @__PURE__ */ jsxs(
929
+ Component,
930
+ {
931
+ className: cn("sia-shell-rail-item", className),
932
+ "aria-label": props["aria-label"] ?? (as !== "div" ? label : void 0),
933
+ ...elementProps,
934
+ children: [
935
+ /* @__PURE__ */ jsx("span", { className: "sia-shell-rail-item__icon", "aria-hidden": "true", children: icon }),
936
+ /* @__PURE__ */ jsx("span", { className: "sia-shell-rail-item__label", children: label })
937
+ ]
938
+ }
939
+ );
940
+ }
874
941
  function AppShell({
875
942
  nav,
876
943
  children,
@@ -1013,10 +1080,19 @@ function AppShell({
1013
1080
  ]
1014
1081
  }
1015
1082
  ),
1016
- /* @__PURE__ */ jsxs("main", { className: cn("sia-shell__content", `sia-shell__content--${contentWidth}`), children: [
1017
- page && /* @__PURE__ */ jsx("div", { className: "sia-shell__page", children: page }),
1018
- children
1019
- ] }),
1083
+ /* @__PURE__ */ jsxs(
1084
+ "main",
1085
+ {
1086
+ className: cn(
1087
+ "sia-shell__content",
1088
+ `sia-shell__content--${contentWidth}`
1089
+ ),
1090
+ children: [
1091
+ page && /* @__PURE__ */ jsx("div", { className: "sia-shell__page", children: page }),
1092
+ children
1093
+ ]
1094
+ }
1095
+ ),
1020
1096
  footer && /* @__PURE__ */ jsx("footer", { className: "sia-shell__footer", children: footer })
1021
1097
  ] }),
1022
1098
  compact && montrerOnglets && /* @__PURE__ */ jsx(
@@ -1029,7 +1105,7 @@ function AppShell({
1029
1105
  ...montrerTiroir ? { onMore: () => setTiroirOuvert(true) } : {}
1030
1106
  }
1031
1107
  ),
1032
- compact && montrerTiroir && /* @__PURE__ */ jsx(
1108
+ compact && montrerTiroir && /* @__PURE__ */ jsxs(
1033
1109
  Drawer,
1034
1110
  {
1035
1111
  open: tiroirOuvert,
@@ -1037,7 +1113,13 @@ function AppShell({
1037
1113
  position: side,
1038
1114
  size: "sm",
1039
1115
  className: "sia-shell__drawer",
1040
- children: barre
1116
+ children: [
1117
+ /* @__PURE__ */ jsxs(Drawer.Header, { children: [
1118
+ /* @__PURE__ */ jsx(Drawer.Title, { children: "Navigation" }),
1119
+ /* @__PURE__ */ jsx(Drawer.Close, {})
1120
+ ] }),
1121
+ /* @__PURE__ */ jsx(Drawer.Body, { children: barre })
1122
+ ]
1041
1123
  }
1042
1124
  )
1043
1125
  ]
@@ -7107,4 +7189,4 @@ function YearPicker({ value, defaultValue = (/* @__PURE__ */ new Date()).getFull
7107
7189
  return /* @__PURE__ */ jsx("select", { className: cn("sia-year-picker", className), value, defaultValue: value === void 0 ? defaultValue : void 0, onChange: (event) => onValueChange?.(Number(event.target.value)), children: years.map((year) => /* @__PURE__ */ jsx("option", { value: year, children: year }, year)) });
7108
7190
  }
7109
7191
 
7110
- export { Accordion, Alert, AlertCircleIcon, AmountDisplay, AppShell, ArrowRightIcon, AspectRatio, AsyncState, AuditMeta, AuthLayout, Autocomplete, Avatar, AvatarGroup, Badge, BottomTabs, Breadcrumb, Button, Calendar, CalendarIcon, Can, Card, CardBody, CardFooter, CardHeader, Chart, CheckIcon, Checkbox, CheckboxGroup, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClockIcon, Collapse, ColorPicker, CommandPalette, ConfirmDialog, Container, ContextMenu, Countdown, CrudDialogs, CrudPage, CurrencyInput, DEFAULT_COUNTRIES, DataTable, DatePicker, DateRangeFilter, DateRangePicker, DateTimePicker, Descriptions, Divider, Drawer, DrawerBody, DrawerClose, DrawerFooter, DrawerHeader, DrawerTitle, DropdownMenu, DurationDisplay, EmptyState, EntityMeta, ErrorState, EventCalendar, EyeIcon, EyeOffIcon, Field, FileUpload, FiltersBar, Form, Field as FormField, Heading, HoverCard, IconButton, ImageUpload, InfoIcon, InlineCode, Input, InputNumber, JsonEditor, KpiGrid, Label, MarkdownEditor, MenuList, MiniCalendar, MinusIcon, Modal, MonthPicker, MoreHorizontalIcon, MultiSelect, OtpInput, Overlay, PageHeader, Pagination, PasswordInput, PermissionGate, PhoneInput, PlusIcon, Popover, Progress, QRCode, Radio, RadioButton, RadioGroup, Rating, ReferenceSelect, RelativeTime, RequireSession, ResizablePanel, RichTextEditor, ScrollArea, SearchIcon, SearchInput, Select, Sidebar, Skeleton, Slider, Sparkline, Spinner, Stack, StarIcon, StatCard, Statistic, Steps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, TagsInput, Text, Textarea, TimePicker, TimeRangePicker, Timeline, Timer, ToastProvider, Toaster, Toggle, ToggleGroup, Tooltip, Tour, Transfer, TrashIcon, Tree, TreeSelect, UnsavedChangesGuard, UploadIcon, WeekPicker, XIcon, YearPicker, confirmUnsavedNavigation, createUrlTableStorage, defineResource, formatDuration, formatTimeValue, initialsOf, parseTimeValue, resourceColumns, resourceDefaults, resourceDetailColumns, resourceFormFields, resourcePermissions, resourceRowKey, resourceSearchKeys, resourceValidator, tintForName, useDataTableQuery, useToast };
7192
+ export { Accordion, Alert, AlertCircleIcon, AmountDisplay, AppShell, AppShellBrand, AppShellRailItem, ArrowRightIcon, AspectRatio, AsyncState, AuditMeta, AuthLayout, Autocomplete, Avatar, AvatarGroup, Badge, BottomTabs, Breadcrumb, Button, Calendar, CalendarIcon, Can, Card, CardBody, CardFooter, CardHeader, Chart, CheckIcon, Checkbox, CheckboxGroup, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClockIcon, Collapse, ColorPicker, CommandPalette, ConfirmDialog, Container, ContextMenu, Countdown, CrudDialogs, CrudPage, CurrencyInput, DEFAULT_COUNTRIES, DataTable, DatePicker, DateRangeFilter, DateRangePicker, DateTimePicker, Descriptions, Divider, Drawer, DrawerBody, DrawerClose, DrawerFooter, DrawerHeader, DrawerTitle, DropdownMenu, DurationDisplay, EmptyState, EntityMeta, ErrorState, EventCalendar, EyeIcon, EyeOffIcon, Field, FileUpload, FiltersBar, Form, Field as FormField, Heading, HoverCard, IconButton, ImageUpload, InfoIcon, InlineCode, Input, InputNumber, JsonEditor, KpiGrid, Label, MarkdownEditor, MenuList, MiniCalendar, MinusIcon, Modal, MonthPicker, MoreHorizontalIcon, MultiSelect, OtpInput, Overlay, PageHeader, Pagination, PasswordInput, PermissionGate, PhoneInput, PlusIcon, Popover, Progress, QRCode, Radio, RadioButton, RadioGroup, Rating, ReferenceSelect, RelativeTime, RequireSession, ResizablePanel, RichTextEditor, ScrollArea, SearchIcon, SearchInput, Select, SettingsIcon, Sidebar, Skeleton, Slider, Sparkline, Spinner, Stack, StarIcon, StatCard, Statistic, Steps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, TagsInput, Text, Textarea, TimePicker, TimeRangePicker, Timeline, Timer, ToastProvider, Toaster, Toggle, ToggleGroup, Tooltip, Tour, Transfer, TrashIcon, Tree, TreeSelect, UnsavedChangesGuard, UploadIcon, WeekPicker, XIcon, YearPicker, confirmUnsavedNavigation, createUrlTableStorage, defineResource, formatDuration, formatTimeValue, initialsOf, parseTimeValue, resourceColumns, resourceDefaults, resourceDetailColumns, resourceFormFields, resourcePermissions, resourceRowKey, resourceSearchKeys, resourceValidator, tintForName, useDataTableQuery, useToast };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sia-ui/react-web",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "DOM implementation of the SIA UI component contracts.",
5
5
  "keywords": [
6
6
  "sia-ui",
@@ -45,10 +45,10 @@
45
45
  "access": "public"
46
46
  },
47
47
  "dependencies": {
48
- "@sia-ui/headless": "0.3.1",
49
- "@sia-ui/react": "0.3.1",
50
- "@sia-ui/tokens": "0.3.1",
51
- "@sia-ui/utils": "0.3.1"
48
+ "@sia-ui/headless": "0.3.2",
49
+ "@sia-ui/tokens": "0.3.2",
50
+ "@sia-ui/utils": "0.3.2",
51
+ "@sia-ui/react": "0.3.2"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "react": ">=18.2.0",
@@ -67,7 +67,7 @@
67
67
  "tsup": "^8.5.1",
68
68
  "typescript": "^5.9.3",
69
69
  "vitest": "^4.0.16",
70
- "@sia-ui/api": "0.3.1"
70
+ "@sia-ui/api": "0.3.2"
71
71
  },
72
72
  "scripts": {
73
73
  "build": "node scripts/build-theme.mjs --check && tsup",