@nimblebrain/synapse 0.10.2 → 0.11.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/README.md CHANGED
@@ -45,6 +45,7 @@ npm install @nimblebrain/synapse
45
45
  | `@nimblebrain/synapse/react` | React hooks and providers (`AppProvider`, `SynapseProvider`) |
46
46
  | `@nimblebrain/synapse/ui` | Component library — tokens, primitives, components, layouts |
47
47
  | `@nimblebrain/synapse/ui/fonts` | Side-effect import that loads the brand fonts into the iframe |
48
+ | `@nimblebrain/synapse/ui/base` | Side-effect import that establishes the root-height chain (`html, body, #root`) the app shell fills. `AppFrame` does this automatically on render; import it in your entry to apply it before first paint |
48
49
  | `@nimblebrain/synapse/vite` | Vite plugin for dev mode |
49
50
  | `@nimblebrain/synapse/codegen` | CLI + programmatic code generation |
50
51
  | `@nimblebrain/synapse/iife` | Pre-built IIFE bundle for `<script>` tags (`window.Synapse`) |
@@ -0,0 +1,20 @@
1
+ // src/ui/internal/inject-style.ts
2
+ function ensureStyle(id, css) {
3
+ if (typeof document === "undefined") return;
4
+ if (document.getElementById(id)) return;
5
+ const style = document.createElement("style");
6
+ style.id = id;
7
+ style.textContent = css;
8
+ document.head.appendChild(style);
9
+ }
10
+
11
+ // src/ui/internal/base-reset.ts
12
+ var STYLE_ID = "nb-synapse-base";
13
+ var RULES = "html, body, #root { height: 100%; } body { margin: 0; }";
14
+ function injectBaseReset() {
15
+ ensureStyle(STYLE_ID, RULES);
16
+ }
17
+
18
+ export { ensureStyle, injectBaseReset };
19
+ //# sourceMappingURL=chunk-3HQGHPNC.js.map
20
+ //# sourceMappingURL=chunk-3HQGHPNC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/internal/inject-style.ts","../src/ui/internal/base-reset.ts"],"names":[],"mappings":";AAKO,SAAS,WAAA,CAAY,IAAY,GAAA,EAAmB;AACzD,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA,EAAG;AACjC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,EAAA,GAAK,EAAA;AACX,EAAA,KAAA,CAAM,WAAA,GAAc,GAAA;AACpB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AACjC;;;ACUA,IAAM,QAAA,GAAW,iBAAA;AACjB,IAAM,KAAA,GAAQ,yDAAA;AAOP,SAAS,eAAA,GAAwB;AACtC,EAAA,WAAA,CAAY,UAAU,KAAK,CAAA;AAC7B","file":"chunk-3HQGHPNC.js","sourcesContent":["/**\n * Inject a stylesheet into the document exactly once, keyed by `id`. Used for\n * the few things inline styles can't express — `@keyframes` and `:hover`/\n * `:focus` pseudo-states. SSR-safe (no-ops without `document`) and idempotent.\n */\nexport function ensureStyle(id: string, css: string): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(id)) return;\n const style = document.createElement(\"style\");\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n","/**\n * The root-height chain every full-pane Synapse app needs, as a plain function\n * (no side effect on import — so a component can call it on render without the\n * mere act of importing injecting anything). The side-effect entry point is\n * `../base.ts` (`@nimblebrain/synapse/ui/base`).\n *\n * `AppFrame` sizes the app shell with `height: 100%`, which only resolves if its\n * ancestor chain (`#root` → `body` → `html`) has a definite height. Each app\n * iframe is its own bare document, so without this chain the shell collapses to\n * content height — full width, short height — inside the host pane.\n *\n * Percentages resolve against the actual pane box, which is correct whether the\n * app is sandboxed in an iframe or mounted into a host panel. A viewport unit\n * (`vh`/`dvh`) would instead assume the pane equals the viewport — wrong on\n * hosts that allocate a pane shorter than the viewport (it overflows with a\n * second scrollbar). The `#root` rule targets the conventional mount id and\n * harmlessly matches nothing if an app mounts elsewhere; `html, body` still\n * apply. `body { margin: 0 }` removes the UA default so the pane has no gap.\n */\n\nimport { ensureStyle } from \"./inject-style.js\";\n\nconst STYLE_ID = \"nb-synapse-base\";\nconst RULES = \"html, body, #root { height: 100%; } body { margin: 0; }\";\n\n/**\n * Inject the root-height + body-margin reset once. Idempotent (keyed by a\n * single style id) and SSR-safe (no-ops when `document` is unavailable, via\n * `ensureStyle`).\n */\nexport function injectBaseReset(): void {\n ensureStyle(STYLE_ID, RULES);\n}\n"]}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ // src/ui/internal/inject-style.ts
4
+ function ensureStyle(id, css) {
5
+ if (typeof document === "undefined") return;
6
+ if (document.getElementById(id)) return;
7
+ const style = document.createElement("style");
8
+ style.id = id;
9
+ style.textContent = css;
10
+ document.head.appendChild(style);
11
+ }
12
+
13
+ // src/ui/internal/base-reset.ts
14
+ var STYLE_ID = "nb-synapse-base";
15
+ var RULES = "html, body, #root { height: 100%; } body { margin: 0; }";
16
+ function injectBaseReset() {
17
+ ensureStyle(STYLE_ID, RULES);
18
+ }
19
+
20
+ exports.ensureStyle = ensureStyle;
21
+ exports.injectBaseReset = injectBaseReset;
22
+ //# sourceMappingURL=chunk-RX6XCLFF.cjs.map
23
+ //# sourceMappingURL=chunk-RX6XCLFF.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/internal/inject-style.ts","../src/ui/internal/base-reset.ts"],"names":[],"mappings":";;;AAKO,SAAS,WAAA,CAAY,IAAY,GAAA,EAAmB;AACzD,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA,EAAG;AACjC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,EAAA,GAAK,EAAA;AACX,EAAA,KAAA,CAAM,WAAA,GAAc,GAAA;AACpB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AACjC;;;ACUA,IAAM,QAAA,GAAW,iBAAA;AACjB,IAAM,KAAA,GAAQ,yDAAA;AAOP,SAAS,eAAA,GAAwB;AACtC,EAAA,WAAA,CAAY,UAAU,KAAK,CAAA;AAC7B","file":"chunk-RX6XCLFF.cjs","sourcesContent":["/**\n * Inject a stylesheet into the document exactly once, keyed by `id`. Used for\n * the few things inline styles can't express — `@keyframes` and `:hover`/\n * `:focus` pseudo-states. SSR-safe (no-ops without `document`) and idempotent.\n */\nexport function ensureStyle(id: string, css: string): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(id)) return;\n const style = document.createElement(\"style\");\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n","/**\n * The root-height chain every full-pane Synapse app needs, as a plain function\n * (no side effect on import — so a component can call it on render without the\n * mere act of importing injecting anything). The side-effect entry point is\n * `../base.ts` (`@nimblebrain/synapse/ui/base`).\n *\n * `AppFrame` sizes the app shell with `height: 100%`, which only resolves if its\n * ancestor chain (`#root` → `body` → `html`) has a definite height. Each app\n * iframe is its own bare document, so without this chain the shell collapses to\n * content height — full width, short height — inside the host pane.\n *\n * Percentages resolve against the actual pane box, which is correct whether the\n * app is sandboxed in an iframe or mounted into a host panel. A viewport unit\n * (`vh`/`dvh`) would instead assume the pane equals the viewport — wrong on\n * hosts that allocate a pane shorter than the viewport (it overflows with a\n * second scrollbar). The `#root` rule targets the conventional mount id and\n * harmlessly matches nothing if an app mounts elsewhere; `html, body` still\n * apply. `body { margin: 0 }` removes the UA default so the pane has no gap.\n */\n\nimport { ensureStyle } from \"./inject-style.js\";\n\nconst STYLE_ID = \"nb-synapse-base\";\nconst RULES = \"html, body, #root { height: 100%; } body { margin: 0; }\";\n\n/**\n * Inject the root-height + body-margin reset once. Idempotent (keyed by a\n * single style id) and SSR-safe (no-ops when `document` is unavailable, via\n * `ensureStyle`).\n */\nexport function injectBaseReset(): void {\n ensureStyle(STYLE_ID, RULES);\n}\n"]}
@@ -1,14 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkHLT5UBJF_cjs = require('../chunk-HLT5UBJF.cjs');
4
3
  var chunk42N5BB5O_cjs = require('../chunk-42N5BB5O.cjs');
4
+ var chunkHLT5UBJF_cjs = require('../chunk-HLT5UBJF.cjs');
5
5
 
6
6
 
7
7
 
8
- Object.defineProperty(exports, "generateTypes", {
9
- enumerable: true,
10
- get: function () { return chunkHLT5UBJF_cjs.generateTypes; }
11
- });
12
8
  Object.defineProperty(exports, "readFromManifest", {
13
9
  enumerable: true,
14
10
  get: function () { return chunk42N5BB5O_cjs.readFromManifest; }
@@ -21,5 +17,9 @@ Object.defineProperty(exports, "readFromServer", {
21
17
  enumerable: true,
22
18
  get: function () { return chunk42N5BB5O_cjs.readFromServer; }
23
19
  });
20
+ Object.defineProperty(exports, "generateTypes", {
21
+ enumerable: true,
22
+ get: function () { return chunkHLT5UBJF_cjs.generateTypes; }
23
+ });
24
24
  //# sourceMappingURL=index.cjs.map
25
25
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,4 @@
1
- export { generateTypes } from '../chunk-JKHGWDZI.js';
2
1
  export { readFromManifest, readFromSchemaDir, readFromServer } from '../chunk-YWX3D24J.js';
2
+ export { generateTypes } from '../chunk-JKHGWDZI.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var chunkRX6XCLFF_cjs = require('../chunk-RX6XCLFF.cjs');
4
+
5
+ // src/ui/base.ts
6
+ chunkRX6XCLFF_cjs.injectBaseReset();
7
+
8
+ Object.defineProperty(exports, "injectBaseReset", {
9
+ enumerable: true,
10
+ get: function () { return chunkRX6XCLFF_cjs.injectBaseReset; }
11
+ });
12
+ //# sourceMappingURL=base.cjs.map
13
+ //# sourceMappingURL=base.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/base.ts"],"names":["injectBaseReset"],"mappings":";;;;;AAqBAA,iCAAA,EAAgB","file":"base.cjs","sourcesContent":["/**\n * Establishes the root-height chain a full-pane Synapse app needs. Import for\n * the side effect:\n *\n * ```ts\n * import \"@nimblebrain/synapse/ui/base\";\n * ```\n *\n * This injects `html, body, #root { height: 100% }` (so a `height: 100%` app\n * shell resolves against the iframe's allocated pane) and `body { margin: 0 }`\n * (so the pane has no UA-margin gap). See `./internal/base-reset.ts` for why a\n * percentage chain — not a viewport unit — is the correct mechanism.\n *\n * `AppFrame` already calls `injectBaseReset()` on render, so apps built on it\n * get the chain automatically. Import this module explicitly to establish the\n * chain *before* React mounts — avoiding a first-paint layout jump — or for an\n * app that renders a full-pane root without `AppFrame`.\n */\n\nimport { injectBaseReset } from \"./internal/base-reset.js\";\n\ninjectBaseReset();\n\nexport { injectBaseReset };\n"]}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The root-height chain every full-pane Synapse app needs, as a plain function
3
+ * (no side effect on import — so a component can call it on render without the
4
+ * mere act of importing injecting anything). The side-effect entry point is
5
+ * `../base.ts` (`@nimblebrain/synapse/ui/base`).
6
+ *
7
+ * `AppFrame` sizes the app shell with `height: 100%`, which only resolves if its
8
+ * ancestor chain (`#root` → `body` → `html`) has a definite height. Each app
9
+ * iframe is its own bare document, so without this chain the shell collapses to
10
+ * content height — full width, short height — inside the host pane.
11
+ *
12
+ * Percentages resolve against the actual pane box, which is correct whether the
13
+ * app is sandboxed in an iframe or mounted into a host panel. A viewport unit
14
+ * (`vh`/`dvh`) would instead assume the pane equals the viewport — wrong on
15
+ * hosts that allocate a pane shorter than the viewport (it overflows with a
16
+ * second scrollbar). The `#root` rule targets the conventional mount id and
17
+ * harmlessly matches nothing if an app mounts elsewhere; `html, body` still
18
+ * apply. `body { margin: 0 }` removes the UA default so the pane has no gap.
19
+ */
20
+ /**
21
+ * Inject the root-height + body-margin reset once. Idempotent (keyed by a
22
+ * single style id) and SSR-safe (no-ops when `document` is unavailable, via
23
+ * `ensureStyle`).
24
+ */
25
+ declare function injectBaseReset(): void;
26
+
27
+ export { injectBaseReset };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The root-height chain every full-pane Synapse app needs, as a plain function
3
+ * (no side effect on import — so a component can call it on render without the
4
+ * mere act of importing injecting anything). The side-effect entry point is
5
+ * `../base.ts` (`@nimblebrain/synapse/ui/base`).
6
+ *
7
+ * `AppFrame` sizes the app shell with `height: 100%`, which only resolves if its
8
+ * ancestor chain (`#root` → `body` → `html`) has a definite height. Each app
9
+ * iframe is its own bare document, so without this chain the shell collapses to
10
+ * content height — full width, short height — inside the host pane.
11
+ *
12
+ * Percentages resolve against the actual pane box, which is correct whether the
13
+ * app is sandboxed in an iframe or mounted into a host panel. A viewport unit
14
+ * (`vh`/`dvh`) would instead assume the pane equals the viewport — wrong on
15
+ * hosts that allocate a pane shorter than the viewport (it overflows with a
16
+ * second scrollbar). The `#root` rule targets the conventional mount id and
17
+ * harmlessly matches nothing if an app mounts elsewhere; `html, body` still
18
+ * apply. `body { margin: 0 }` removes the UA default so the pane has no gap.
19
+ */
20
+ /**
21
+ * Inject the root-height + body-margin reset once. Idempotent (keyed by a
22
+ * single style id) and SSR-safe (no-ops when `document` is unavailable, via
23
+ * `ensureStyle`).
24
+ */
25
+ declare function injectBaseReset(): void;
26
+
27
+ export { injectBaseReset };
@@ -0,0 +1,7 @@
1
+ import { injectBaseReset } from '../chunk-3HQGHPNC.js';
2
+ export { injectBaseReset } from '../chunk-3HQGHPNC.js';
3
+
4
+ // src/ui/base.ts
5
+ injectBaseReset();
6
+ //# sourceMappingURL=base.js.map
7
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/base.ts"],"names":[],"mappings":";;;;AAqBA,eAAA,EAAgB","file":"base.js","sourcesContent":["/**\n * Establishes the root-height chain a full-pane Synapse app needs. Import for\n * the side effect:\n *\n * ```ts\n * import \"@nimblebrain/synapse/ui/base\";\n * ```\n *\n * This injects `html, body, #root { height: 100% }` (so a `height: 100%` app\n * shell resolves against the iframe's allocated pane) and `body { margin: 0 }`\n * (so the pane has no UA-margin gap). See `./internal/base-reset.ts` for why a\n * percentage chain — not a viewport unit — is the correct mechanism.\n *\n * `AppFrame` already calls `injectBaseReset()` on render, so apps built on it\n * get the chain automatically. Import this module explicitly to establish the\n * chain *before* React mounts — avoiding a first-paint layout jump — or for an\n * app that renders a full-pane root without `AppFrame`.\n */\n\nimport { injectBaseReset } from \"./internal/base-reset.js\";\n\ninjectBaseReset();\n\nexport { injectBaseReset };\n"]}
package/dist/ui/index.cjs CHANGED
@@ -1,10 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ var chunkRX6XCLFF_cjs = require('../chunk-RX6XCLFF.cjs');
3
4
  var react = require('react');
4
5
  var jsxRuntime = require('react/jsx-runtime');
5
6
 
6
- // src/ui/components/Avatar.tsx
7
-
8
7
  // src/ui/tokens.ts
9
8
  var tokens = {
10
9
  // ── Surfaces ──
@@ -166,16 +165,6 @@ function Badge({ tone = "neutral", style, children, ...rest }) {
166
165
  }
167
166
  );
168
167
  }
169
-
170
- // src/ui/internal/inject-style.ts
171
- function ensureStyle(id, css) {
172
- if (typeof document === "undefined") return;
173
- if (document.getElementById(id)) return;
174
- const style = document.createElement("style");
175
- style.id = id;
176
- style.textContent = css;
177
- document.head.appendChild(style);
178
- }
179
168
  var STYLE_ID = "nb-synapse-button";
180
169
  var RULES = `
181
170
  .nb-btn {
@@ -223,7 +212,7 @@ function Button({
223
212
  children,
224
213
  ...rest
225
214
  }) {
226
- ensureStyle(STYLE_ID, RULES);
215
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID, RULES);
227
216
  const vars = {
228
217
  "--nb-btn-radius": tokens.radiusSm,
229
218
  "--nb-btn-font": tokens.fontSans,
@@ -253,7 +242,7 @@ function Button({
253
242
  return /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: `nb-btn ${className ?? ""}`.trim(), style: btnStyle, ...rest, children });
254
243
  }
255
244
  function TextLink({ tone = "muted", style, className, children, ...rest }) {
256
- ensureStyle(STYLE_ID, RULES);
245
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID, RULES);
257
246
  const resting = tone === "danger" ? tokens.danger : tone === "default" ? tokens.fg : tokens.fgMuted;
258
247
  const hover = tone === "danger" ? tokens.danger : tokens.accent;
259
248
  const linkStyle = {
@@ -295,7 +284,7 @@ function Card({
295
284
  children,
296
285
  ...rest
297
286
  }) {
298
- if (interactive) ensureStyle(STYLE_ID2, RULES2);
287
+ if (interactive) chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID2, RULES2);
299
288
  const cardStyle = {
300
289
  background: tokens.bgRaised,
301
290
  border: `${tokens.borderWidth} solid ${tokens.border}`,
@@ -353,7 +342,7 @@ function DrawerRoot({
353
342
  children,
354
343
  ...rest
355
344
  }) {
356
- ensureStyle(STYLE_ID3, RULES3);
345
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID3, RULES3);
357
346
  const dialogRef = react.useRef(null);
358
347
  const labelId = react.useId();
359
348
  const [hasTitle, setHasTitle] = react.useState(false);
@@ -672,7 +661,7 @@ function ListRow({
672
661
  className,
673
662
  ...rest
674
663
  }) {
675
- ensureStyle(STYLE_ID4, RULES4);
664
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID4, RULES4);
676
665
  const rowStyle = {
677
666
  "--nb-listrow-hover": tokens.bgSubtle,
678
667
  display: "grid",
@@ -812,7 +801,7 @@ var RULES5 = `
812
801
  .nb-prose strong { font-weight: ${tokens.weightSemibold}; }
813
802
  `;
814
803
  function Prose({ html, children, className, ...rest }) {
815
- ensureStyle(STYLE_ID5, RULES5);
804
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID5, RULES5);
816
805
  const cls = `nb-prose ${className ?? ""}`.trim();
817
806
  if (html !== void 0) {
818
807
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cls, dangerouslySetInnerHTML: { __html: html }, ...rest });
@@ -850,7 +839,7 @@ function SearchField({
850
839
  type = "search",
851
840
  ...rest
852
841
  }) {
853
- ensureStyle(STYLE_ID6, RULES6);
842
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID6, RULES6);
854
843
  const fieldStyle = {
855
844
  "--nb-search-font": tokens.fontSans,
856
845
  "--nb-search-fg": tokens.fg,
@@ -909,7 +898,7 @@ function SegmentedControl({
909
898
  className,
910
899
  ...rest
911
900
  }) {
912
- ensureStyle(STYLE_ID7, RULES7);
901
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID7, RULES7);
913
902
  const trackStyle = {
914
903
  "--nb-seg-radius": tokens.radiusSm,
915
904
  "--nb-seg-track": tokens.bgSubtle,
@@ -945,7 +934,7 @@ var RULES8 = `
945
934
  @media (prefers-reduced-motion: reduce) { .nb-spinner { animation-duration: 1.6s; } }
946
935
  `;
947
936
  function Spinner({ size = 16, color, style, className, ...rest }) {
948
- ensureStyle(STYLE_ID8, RULES8);
937
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID8, RULES8);
949
938
  const spinnerStyle = {
950
939
  display: "inline-block",
951
940
  flexShrink: 0,
@@ -996,7 +985,7 @@ function StatusDot({
996
985
  className,
997
986
  ...rest
998
987
  }) {
999
- ensureStyle(STYLE_ID9, KEYFRAMES);
988
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID9, KEYFRAMES);
1000
989
  const dotColor = color ?? COLOR[status];
1001
990
  const working = status === "working";
1002
991
  const dotStyle = {
@@ -1049,7 +1038,7 @@ function Table({
1049
1038
  className,
1050
1039
  ...rest
1051
1040
  }) {
1052
- ensureStyle(STYLE_ID10, RULES9);
1041
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID10, RULES9);
1053
1042
  const vars = {
1054
1043
  "--nb-table-font": tokens.fontSans,
1055
1044
  "--nb-table-fg": tokens.fg,
@@ -1103,6 +1092,7 @@ function columnStyle(width) {
1103
1092
  return width === "reading" ? { maxWidth: READING_MAX, marginInline: "auto", width: "100%" } : {};
1104
1093
  }
1105
1094
  function AppFrameRoot({ contentWidth = "full", style, children, ...rest }) {
1095
+ chunkRX6XCLFF_cjs.injectBaseReset();
1106
1096
  return /* @__PURE__ */ jsxRuntime.jsx(ContentWidthCtx.Provider, { value: contentWidth, children: /* @__PURE__ */ jsxRuntime.jsx(
1107
1097
  "div",
1108
1098
  {
@@ -1297,7 +1287,7 @@ function SidebarLayoutRoot({
1297
1287
  }
1298
1288
  function Sidebar({ style, children, ...rest }) {
1299
1289
  const { collapsed, mode, side, width, open, setOpen } = useSidebar();
1300
- ensureStyle(STYLE_ID11, RULES10);
1290
+ chunkRX6XCLFF_cjs.ensureStyle(STYLE_ID11, RULES10);
1301
1291
  if (!collapsed) {
1302
1292
  const border = `${tokens.borderWidth} solid ${tokens.border}`;
1303
1293
  return /* @__PURE__ */ jsxRuntime.jsx(