@storybook/addon-docs 10.4.0-alpha.1 → 10.4.0-alpha.10

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.
@@ -998,12 +998,18 @@ var Wrapper = styled.div({
998
998
  setValue(updatedValue), onChange(updatedValue);
999
999
  }, [color, colorSpace, onChange]);
1000
1000
  return { value, realValue, updateValue, color, colorSpace, cycleColorSpace };
1001
- }, id = (value) => value.replace(/\s*/, "").toLowerCase(), usePresets = (presetColors, currentColor, colorSpace) => {
1001
+ }, id = (value) => value.replace(/\s*/, "").toLowerCase(), usePresets = (presetColors, currentColor, colorSpace, maxPresetColors = 27) => {
1002
1002
  let [selectedColors, setSelectedColors] = useState(currentColor?.valid ? [currentColor] : []);
1003
1003
  useEffect(() => {
1004
1004
  currentColor === void 0 && setSelectedColors([]);
1005
1005
  }, [currentColor]);
1006
- let presets = useMemo(() => (presetColors || []).map((preset) => typeof preset == "string" ? parseValue(preset) : preset.title ? { ...parseValue(preset.color), keyword: preset.title } : parseValue(preset.color)).concat(selectedColors).filter(Boolean).slice(-27), [presetColors, selectedColors]), addPreset = useCallback(
1006
+ let presets = useMemo(() => {
1007
+ let combined = (presetColors || []).map((preset) => typeof preset == "string" ? parseValue(preset) : preset.title ? { ...parseValue(preset.color), keyword: preset.title } : parseValue(preset.color)).concat(selectedColors).filter(Boolean);
1008
+ if (maxPresetColors === 0 || maxPresetColors === 1 / 0)
1009
+ return combined;
1010
+ let limit = Number.isInteger(maxPresetColors) && maxPresetColors > 0 ? maxPresetColors : 27;
1011
+ return combined.slice(-limit);
1012
+ }, [presetColors, selectedColors, maxPresetColors]), addPreset = useCallback(
1007
1013
  (color) => {
1008
1014
  color?.valid && (presets.some(
1009
1015
  (preset) => preset && preset[colorSpace] && id(preset[colorSpace] || "") === id(color[colorSpace] || "")
@@ -1020,13 +1026,14 @@ var Wrapper = styled.div({
1020
1026
  onFocus,
1021
1027
  onBlur,
1022
1028
  presetColors,
1029
+ maxPresetColors,
1023
1030
  startOpen = !1,
1024
1031
  argType
1025
1032
  }) => {
1026
1033
  let debouncedOnChange = useCallback(debounce(onChange, 200), [onChange]), { value, realValue, updateValue, color, colorSpace, cycleColorSpace } = useColorInput(
1027
1034
  initialValue,
1028
1035
  debouncedOnChange
1029
- ), { presets, addPreset } = usePresets(presetColors ?? [], color, colorSpace), Picker = ColorPicker[colorSpace], readOnly = !!argType?.table?.readonly, controlId = getControlId(name, storyId);
1036
+ ), { presets, addPreset } = usePresets(presetColors ?? [], color, colorSpace, maxPresetColors), Picker = ColorPicker[colorSpace], readOnly = !!argType?.table?.readonly, controlId = getControlId(name, storyId);
1030
1037
  return React.createElement(Wrapper, null, React.createElement("label", { htmlFor: controlId, className: "sb-sr-only" }, name), React.createElement(
1031
1038
  Input,
1032
1039
  {
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_mbyf8gwq1e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mbyf8gwq1e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mbyf8gwq1e from "node:module";
1
+ import CJS_COMPAT_NODE_URL_bem9xq5gsqn from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_bem9xq5gsqn from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_bem9xq5gsqn from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mbyf8gwq1e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mbyf8gwq1e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_bem9xq5gsqn.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_bem9xq5gsqn.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_bem9xq5gsqn.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
@@ -12,15 +12,15 @@ var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
12
12
  import {
13
13
  esm_default,
14
14
  stringify
15
- } from "./chunk-O3IP3EYZ.js";
15
+ } from "./chunk-KUAESHGL.js";
16
16
  import {
17
17
  visit
18
- } from "./chunk-3CQLJTS4.js";
18
+ } from "./chunk-RG2UQ7CS.js";
19
19
  import {
20
20
  __commonJS,
21
21
  __export,
22
22
  __toESM
23
- } from "./chunk-UBUIPEWJ.js";
23
+ } from "./chunk-XOX2N3QE.js";
24
24
 
25
25
  // ../../../node_modules/@mdx-js/mdx/node_modules/acorn-jsx/xhtml.js
26
26
  var require_xhtml = __commonJS({
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_mbyf8gwq1e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mbyf8gwq1e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mbyf8gwq1e from "node:module";
1
+ import CJS_COMPAT_NODE_URL_bem9xq5gsqn from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_bem9xq5gsqn from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_bem9xq5gsqn from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mbyf8gwq1e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mbyf8gwq1e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_bem9xq5gsqn.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_bem9xq5gsqn.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_bem9xq5gsqn.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_mbyf8gwq1e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mbyf8gwq1e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mbyf8gwq1e from "node:module";
1
+ import CJS_COMPAT_NODE_URL_bem9xq5gsqn from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_bem9xq5gsqn from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_bem9xq5gsqn from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mbyf8gwq1e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mbyf8gwq1e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_bem9xq5gsqn.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_bem9xq5gsqn.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_bem9xq5gsqn.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_mbyf8gwq1e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mbyf8gwq1e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mbyf8gwq1e from "node:module";
1
+ import CJS_COMPAT_NODE_URL_bem9xq5gsqn from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_bem9xq5gsqn from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_bem9xq5gsqn from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mbyf8gwq1e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mbyf8gwq1e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_bem9xq5gsqn.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_bem9xq5gsqn.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_bem9xq5gsqn.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
@@ -1,23 +1,23 @@
1
- import CJS_COMPAT_NODE_URL_mbyf8gwq1e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mbyf8gwq1e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mbyf8gwq1e from "node:module";
1
+ import CJS_COMPAT_NODE_URL_bem9xq5gsqn from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_bem9xq5gsqn from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_bem9xq5gsqn from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mbyf8gwq1e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mbyf8gwq1e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_bem9xq5gsqn.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_bem9xq5gsqn.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_bem9xq5gsqn.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
11
11
  // ------------------------------------------------------------
12
12
  import {
13
13
  compile
14
- } from "./chunk-FOXFKJUT.js";
15
- import "./chunk-O3IP3EYZ.js";
16
- import "./chunk-3CQLJTS4.js";
14
+ } from "./chunk-EEG4RDZ5.js";
15
+ import "./chunk-KUAESHGL.js";
16
+ import "./chunk-RG2UQ7CS.js";
17
17
  import {
18
18
  __commonJS,
19
19
  __toESM
20
- } from "./chunk-UBUIPEWJ.js";
20
+ } from "./chunk-XOX2N3QE.js";
21
21
 
22
22
  // ../../../node_modules/@rollup/pluginutils/node_modules/picomatch/lib/constants.js
23
23
  var require_constants = __commonJS({
@@ -1000,30 +1000,33 @@ var hasStringIsWellFormed = "isWellFormed" in String.prototype;
1000
1000
 
1001
1001
  // src/mdx-plugin.ts
1002
1002
  async function mdxPlugin(options) {
1003
- let filter = createFilter(/\.mdx$/), { presets } = options, mdxPluginOptions = (await presets.apply("options", {}))?.mdxPluginOptions, rehypeSlug = (await import("./rehype-slug-WTB7POBJ.js")).default, rehypeExternalLinks = (await import("./rehype-external-links-PGJMHXWX.js")).default;
1003
+ let include = /\.mdx$/, filter = createFilter(include), { presets } = options, mdxPluginOptions = (await presets.apply("options", {}))?.mdxPluginOptions, rehypeSlug = (await import("./rehype-slug-CPBEERZT.js")).default, rehypeExternalLinks = (await import("./rehype-external-links-P7YOBLT5.js")).default;
1004
1004
  return {
1005
1005
  name: "storybook:mdx-plugin",
1006
1006
  enforce: "pre",
1007
- async transform(src, id) {
1008
- if (!filter(id))
1009
- return;
1010
- let mdxLoaderOptions = await presets.apply("mdxLoaderOptions", {
1011
- ...mdxPluginOptions,
1012
- mdxCompileOptions: {
1013
- providerImportSource: import.meta.resolve("@storybook/addon-docs/mdx-react-shim"),
1014
- ...mdxPluginOptions?.mdxCompileOptions,
1015
- rehypePlugins: [
1016
- ...mdxPluginOptions?.mdxCompileOptions?.rehypePlugins ?? [],
1017
- rehypeSlug,
1018
- rehypeExternalLinks
1019
- ]
1020
- }
1021
- });
1022
- return {
1023
- code: String(await compile(src, mdxLoaderOptions)),
1024
- // TODO: support source maps
1025
- map: null
1026
- };
1007
+ transform: {
1008
+ filter: { id: include },
1009
+ async handler(src, id) {
1010
+ if (!filter(id))
1011
+ return;
1012
+ let mdxLoaderOptions = await presets.apply("mdxLoaderOptions", {
1013
+ ...mdxPluginOptions,
1014
+ mdxCompileOptions: {
1015
+ providerImportSource: import.meta.resolve("@storybook/addon-docs/mdx-react-shim"),
1016
+ ...mdxPluginOptions?.mdxCompileOptions,
1017
+ rehypePlugins: [
1018
+ ...mdxPluginOptions?.mdxCompileOptions?.rehypePlugins ?? [],
1019
+ rehypeSlug,
1020
+ rehypeExternalLinks
1021
+ ]
1022
+ }
1023
+ });
1024
+ return {
1025
+ code: String(await compile(src, mdxLoaderOptions)),
1026
+ // TODO: support source maps
1027
+ map: null
1028
+ };
1029
+ }
1027
1030
  }
1028
1031
  };
1029
1032
  }
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_mbyf8gwq1e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mbyf8gwq1e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mbyf8gwq1e from "node:module";
1
+ import CJS_COMPAT_NODE_URL_bem9xq5gsqn from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_bem9xq5gsqn from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_bem9xq5gsqn from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mbyf8gwq1e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mbyf8gwq1e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_bem9xq5gsqn.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_bem9xq5gsqn.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_bem9xq5gsqn.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
@@ -12,11 +12,11 @@ var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
12
12
  import {
13
13
  esm_default,
14
14
  parse
15
- } from "./chunk-O3IP3EYZ.js";
15
+ } from "./chunk-KUAESHGL.js";
16
16
  import {
17
17
  visit
18
- } from "./chunk-3CQLJTS4.js";
19
- import "./chunk-UBUIPEWJ.js";
18
+ } from "./chunk-RG2UQ7CS.js";
19
+ import "./chunk-XOX2N3QE.js";
20
20
 
21
21
  // ../../../node_modules/hast-util-is-element/lib/index.js
22
22
  var convertElement = (
@@ -1,18 +1,18 @@
1
- import CJS_COMPAT_NODE_URL_mbyf8gwq1e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mbyf8gwq1e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mbyf8gwq1e from "node:module";
1
+ import CJS_COMPAT_NODE_URL_bem9xq5gsqn from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_bem9xq5gsqn from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_bem9xq5gsqn from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mbyf8gwq1e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mbyf8gwq1e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_bem9xq5gsqn.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_bem9xq5gsqn.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_bem9xq5gsqn.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
11
11
  // ------------------------------------------------------------
12
12
  import {
13
13
  visit
14
- } from "./chunk-3CQLJTS4.js";
15
- import "./chunk-UBUIPEWJ.js";
14
+ } from "./chunk-RG2UQ7CS.js";
15
+ import "./chunk-XOX2N3QE.js";
16
16
 
17
17
  // ../../../node_modules/github-slugger/regex.js
18
18
  var regex = /[\0-\x1F!-,\.\/:-@\[-\^`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16ED\u16F9-\u16FF\u170D\u1715-\u171F\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u203E\u2041-\u2053\u2055-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u215F\u2189-\u24B5\u24EA-\u2BFF\u2C2F\u2C5F\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3008-\u3020\u3030\u3036\u3037\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\u9FFD-\u9FFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7C0\uA7C1\uA7CB-\uA7F4\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE32\uFE35-\uFE4C\uFE50-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF3E\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDD3F\uDD75-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC70-\uDC7E\uDCBB-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83D\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDEBF\uDEFA-\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83C[\uDC00-\uDD2F\uDD4A-\uDD4F\uDD6A-\uDD6F\uDD8A-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]/g;
package/dist/blocks.d.ts CHANGED
@@ -110,6 +110,7 @@ type PreviewProps = PropsWithChildren<{
110
110
  withToolbar?: boolean;
111
111
  className?: string;
112
112
  additionalActions?: ActionItem[];
113
+ onReloadStory?: () => void;
113
114
  }>;
114
115
  type Layout = 'padded' | 'fullscreen' | 'centered';
115
116
 
@@ -276,7 +277,7 @@ type SourceProps = SourceParameters & {
276
277
  __forceInitialArgs?: boolean;
277
278
  };
278
279
  type PureSourceProps = ComponentProps<typeof Source$1>;
279
- declare const useSourceProps: (props: SourceProps, docsContext: DocsContextProps<any>, sourceContext: SourceContextProps) => PureSourceProps;
280
+ declare const useSourceProps: (props: SourceProps, docsContext: DocsContextProps, sourceContext: SourceContextProps) => PureSourceProps;
280
281
  declare const Source: React__default.ComponentType<SourceProps>;
281
282
 
282
283
  type PureStoryProps = ComponentProps<typeof Story$1>;
@@ -970,6 +971,14 @@ type PresetColor = ColorValue | {
970
971
  };
971
972
  interface ColorConfig {
972
973
  presetColors?: PresetColor[];
974
+ /**
975
+ * Maximum number of preset colors shown in the color picker. When the number of presets exceeds
976
+ * this value, the oldest presets are removed first (most-recently-used order). Set to `Infinity`
977
+ * or `0` to disable the limit and show all presets.
978
+ *
979
+ * @default 27
980
+ */
981
+ maxPresetColors?: number;
973
982
  /**
974
983
  * Whether the color picker should be open by default when rendered.
975
984
  *
package/dist/blocks.js CHANGED
@@ -581,8 +581,8 @@ import React15, { Suspense, lazy } from "react";
581
581
  // src/blocks/controls/Boolean.tsx
582
582
  import React, { useCallback } from "react";
583
583
  import { Button } from "storybook/internal/components";
584
- import { styled } from "storybook/theming";
585
- var Label = styled.label(({ theme }) => ({
584
+ import { srOnlyStyles, styled } from "storybook/theming";
585
+ var getBooleanControlStyles = (theme) => ({
586
586
  lineHeight: "18px",
587
587
  alignItems: "center",
588
588
  marginBottom: 8,
@@ -598,28 +598,26 @@ var Label = styled.label(({ theme }) => ({
598
598
  cursor: "not-allowed"
599
599
  }
600
600
  },
601
+ "@media (forced-colors: active)": {
602
+ background: "ButtonFace",
603
+ outline: "1px solid ButtonText"
604
+ },
605
+ "&:focus-within": {
606
+ outline: `1px solid ${theme.color.secondary}`,
607
+ outlineOffset: 1,
608
+ "@media (forced-colors: active)": {
609
+ outline: "1px solid Highlight",
610
+ outlineOffset: 1
611
+ }
612
+ },
601
613
  input: {
614
+ ...srOnlyStyles,
602
615
  appearance: "none",
603
- width: "100%",
604
- height: "100%",
605
- position: "absolute",
606
616
  left: 0,
607
617
  top: 0,
608
- margin: 0,
609
- padding: 0,
610
- border: "none",
611
618
  background: "transparent",
612
619
  cursor: "pointer",
613
- borderRadius: "3em",
614
- "&:focus": {
615
- outline: "none",
616
- boxShadow: `${theme.color.secondary} 0 0 0 1px inset !important`
617
- },
618
- "@media (forced-colors: active)": {
619
- "&:focus": {
620
- outline: "1px solid highlight"
621
- }
622
- }
620
+ borderRadius: "3em"
623
621
  },
624
622
  span: {
625
623
  textAlign: "center",
@@ -634,9 +632,6 @@ var Label = styled.label(({ theme }) => ({
634
632
  borderRadius: "3em",
635
633
  color: curriedTransparentize$1(0.5, theme.color.defaultText),
636
634
  background: "transparent",
637
- "&:hover": {
638
- boxShadow: `${curriedOpacify$1(0.3, theme.appBorderColor)} 0 0 0 1px inset`
639
- },
640
635
  "&:active": {
641
636
  boxShadow: `${curriedOpacify$1(0.05, theme.appBorderColor)} 0 0 0 2px inset`,
642
637
  color: curriedOpacify$1(1, theme.appBorderColor)
@@ -646,6 +641,10 @@ var Label = styled.label(({ theme }) => ({
646
641
  },
647
642
  "&:last-of-type": {
648
643
  paddingLeft: 8
644
+ },
645
+ "@media (forced-colors: active)": {
646
+ color: "ButtonText",
647
+ boxShadow: "none"
649
648
  }
650
649
  },
651
650
  "input:checked ~ span:last-of-type, input:not(:checked) ~ span:first-of-type": {
@@ -654,10 +653,14 @@ var Label = styled.label(({ theme }) => ({
654
653
  color: theme.color.defaultText,
655
654
  padding: "7px 15px",
656
655
  "@media (forced-colors: active)": {
657
- textDecoration: "underline"
656
+ forcedColorAdjust: "none",
657
+ background: "Highlight",
658
+ color: "HighlightText",
659
+ boxShadow: "none",
660
+ outline: "1px solid ButtonText"
658
661
  }
659
662
  }
660
- })), parse = (value) => value === "true", BooleanControl = ({
663
+ }), Label = styled.label(({ theme }) => getBooleanControlStyles(theme)), parse = (value) => value === "true", BooleanControl = ({
661
664
  name,
662
665
  storyId,
663
666
  value,
@@ -2733,7 +2736,7 @@ var FilesControl = ({
2733
2736
  };
2734
2737
 
2735
2738
  // src/blocks/controls/index.tsx
2736
- var LazyColorControl = lazy(() => import("./_browser-chunks/Color-Q5GAO7KP.js")), ColorControl = (props) => React15.createElement(Suspense, { fallback: React15.createElement("div", null) }, React15.createElement(LazyColorControl, { ...props }));
2739
+ var LazyColorControl = lazy(() => import("./_browser-chunks/Color-23OOGO2C.js")), ColorControl = (props) => React15.createElement(Suspense, { fallback: React15.createElement("div", null) }, React15.createElement(LazyColorControl, { ...props }));
2737
2740
 
2738
2741
  // src/blocks/components/ArgsTable/ArgControl.tsx
2739
2742
  var Controls2 = {
@@ -4190,6 +4193,7 @@ var DocsContext = globalThis ? globalThis.__DOCS_CONTEXT__ : createContext(null)
4190
4193
 
4191
4194
  // src/blocks/blocks/Story.tsx
4192
4195
  import React26, { useContext } from "react";
4196
+ import { InvalidBlockOfPropError } from "storybook/internal/preview-errors";
4193
4197
 
4194
4198
  // src/blocks/blocks/useStory.ts
4195
4199
  import { useEffect as useEffect8, useState as useState11 } from "react";
@@ -4240,7 +4244,7 @@ var MDX_WRAPPED_BLOCK = Symbol("mdxWrappedBlock"), MdxWrappedBlockContext = Reac
4240
4244
  var getStoryId = (props, context) => {
4241
4245
  let { of, meta } = props;
4242
4246
  if ("of" in props && of === void 0)
4243
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
4247
+ throw new InvalidBlockOfPropError();
4244
4248
  return meta && context.referenceMeta(meta, !1), context.resolveOf(of || "story", ["story"]).story.id;
4245
4249
  }, getStoryProps = (props, story, context) => {
4246
4250
  let { parameters = {} } = story || {}, { docs = {} } = parameters, storyParameters = docs.story || {};
@@ -4388,7 +4392,7 @@ var storyBlockIdFromId = ({ story, primary }) => `story--${story.id}${primary ?
4388
4392
  // src/blocks/components/Toolbar.tsx
4389
4393
  import React29 from "react";
4390
4394
  import { Button as Button6, Toolbar as SharedToolbar } from "storybook/internal/components";
4391
- import { ShareAltIcon, ZoomIcon, ZoomOutIcon, ZoomResetIcon } from "@storybook/icons";
4395
+ import { ShareAltIcon, SyncIcon, ZoomIcon, ZoomOutIcon, ZoomResetIcon } from "@storybook/icons";
4392
4396
  import { styled as styled21 } from "storybook/theming";
4393
4397
  var AbsoluteBar = styled21(SharedToolbar)({
4394
4398
  position: "absolute",
@@ -4409,7 +4413,24 @@ var AbsoluteBar = styled21(SharedToolbar)({
4409
4413
  margin: "0 7px",
4410
4414
  backgroundColor: theme.appBorderColor,
4411
4415
  animation: `${theme.animation.glow} 1.5s ease-in-out infinite`
4412
- })), Toolbar = ({ isLoading, storyId, zoom, resetZoom, ...rest }) => React29.createElement(AbsoluteBar, { innerStyle: { gap: 4, paddingInline: 7, justifyContent: "space-between" }, ...rest }, React29.createElement(Wrapper7, { key: "left" }, isLoading ? [1, 2, 3].map((key) => React29.createElement(IconPlaceholder, { key })) : React29.createElement(React29.Fragment, null, React29.createElement(
4416
+ })), Toolbar = ({
4417
+ isLoading,
4418
+ storyId,
4419
+ zoom,
4420
+ resetZoom,
4421
+ onReloadStory,
4422
+ ...rest
4423
+ }) => React29.createElement(AbsoluteBar, { innerStyle: { gap: 4, paddingInline: 7, justifyContent: "space-between" }, ...rest }, React29.createElement(Wrapper7, { key: "left" }, isLoading ? [1, 2, 3].map((key) => React29.createElement(IconPlaceholder, { key })) : React29.createElement(React29.Fragment, null, onReloadStory && React29.createElement(
4424
+ Button6,
4425
+ {
4426
+ padding: "small",
4427
+ variant: "ghost",
4428
+ key: "reload",
4429
+ onClick: onReloadStory,
4430
+ ariaLabel: "Reload story"
4431
+ },
4432
+ React29.createElement(SyncIcon, null)
4433
+ ), React29.createElement(
4413
4434
  Button6,
4414
4435
  {
4415
4436
  padding: "small",
@@ -4541,6 +4562,7 @@ var PositionedToolbar = styled22(Toolbar)({
4541
4562
  className,
4542
4563
  layout = "padded",
4543
4564
  inline = !1,
4565
+ onReloadStory,
4544
4566
  ...props
4545
4567
  }) => {
4546
4568
  let [expanded, setExpanded] = useState13(isExpanded), [copied, setCopied] = useState13(null), [scale, setScale] = useState13(1), additionalActionItems = useMemo3(
@@ -4572,7 +4594,8 @@ var PositionedToolbar = styled22(Toolbar)({
4572
4594
  border: !0,
4573
4595
  zoom: (z2) => setScale(scale * z2),
4574
4596
  resetZoom: () => setScale(1),
4575
- storyId: !isLoading && childProps ? getStoryId(childProps, context) : void 0
4597
+ storyId: !isLoading && childProps ? getStoryId(childProps, context) : void 0,
4598
+ onReloadStory
4576
4599
  }
4577
4600
  ),
4578
4601
  React30.createElement(ZoomContext.Provider, { value: { scale } }, React30.createElement(
@@ -5471,6 +5494,7 @@ var anchorBlockIdFromId = (storyId) => `anchor--${storyId}`, Anchor = ({ storyId
5471
5494
 
5472
5495
  // src/blocks/blocks/ArgTypes.tsx
5473
5496
  import React37 from "react";
5497
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError2 } from "storybook/internal/preview-errors";
5474
5498
  import { filterArgTypes } from "storybook/preview-api";
5475
5499
 
5476
5500
  // src/blocks/blocks/useOf.ts
@@ -5523,7 +5547,7 @@ function getArgTypesFromResolved(resolved) {
5523
5547
  var ArgTypesImpl = (props) => {
5524
5548
  let { of } = props;
5525
5549
  if ("of" in props && of === void 0)
5526
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
5550
+ throw new InvalidBlockOfPropError2();
5527
5551
  let resolved = useOf(of || "meta"), { argTypes, parameters, component, subcomponents } = getArgTypesFromResolved(resolved), argTypesParameters = parameters?.docs?.argTypes || {}, include = props.include ?? argTypesParameters.include, exclude = props.exclude ?? argTypesParameters.exclude, sort = props.sort ?? argTypesParameters.sort, filteredArgTypes = filterArgTypes(argTypes, include, exclude);
5528
5552
  if (!(!!subcomponents && Object.keys(subcomponents || {}).length > 0))
5529
5553
  return React37.createElement(ArgsTable, { rows: filteredArgTypes, sort });
@@ -5547,11 +5571,14 @@ var ArgTypesImpl = (props) => {
5547
5571
  }, ArgTypes = withMdxComponentOverride("ArgTypes", ArgTypesImpl);
5548
5572
 
5549
5573
  // src/blocks/blocks/Canvas.tsx
5550
- import React40, { useContext as useContext5 } from "react";
5574
+ import React40, { useCallback as useCallback7, useContext as useContext5 } from "react";
5575
+ import { FORCE_REMOUNT } from "storybook/internal/core-events";
5576
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError4 } from "storybook/internal/preview-errors";
5551
5577
 
5552
5578
  // src/blocks/blocks/Source.tsx
5553
5579
  import React39, { useContext as useContext4, useMemo as useMemo4 } from "react";
5554
5580
  import { SourceType } from "storybook/internal/docs-tools";
5581
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError3 } from "storybook/internal/preview-errors";
5555
5582
 
5556
5583
  // src/blocks/blocks/SourceContainer.tsx
5557
5584
  import React38, { createContext as createContext3, useEffect as useEffect11, useState as useState14 } from "react";
@@ -6624,7 +6651,7 @@ function useTransformCode(source, transform, storyContext) {
6624
6651
  }
6625
6652
 
6626
6653
  // src/blocks/blocks/Source.tsx
6627
- var getStorySource = (storyId, args, sourceContext) => {
6654
+ var EMPTY_SOURCE_CONTEXT = { sources: {} }, getStorySource = (storyId, args, sourceContext) => {
6628
6655
  let { sources } = sourceContext, sourceMap = sources?.[storyId];
6629
6656
  return sourceMap?.[argsHash(args)] || sourceMap?.[UNKNOWN_ARGS_HASH] || { code: "" };
6630
6657
  }, useCode = ({
@@ -6651,9 +6678,9 @@ var getStorySource = (storyId, args, sourceContext) => {
6651
6678
  transformFromProps: props.transform
6652
6679
  });
6653
6680
  if ("of" in props && of === void 0)
6654
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
6681
+ throw new InvalidBlockOfPropError3();
6655
6682
  let sourceParameters = story?.parameters?.docs?.source || {}, format2 = props.format, language = props.language ?? sourceParameters.language ?? "jsx", dark = props.dark ?? sourceParameters.dark ?? !1;
6656
- return !props.code && !story ? { error: "Oh no! The source is not available." /* SOURCE_UNAVAILABLE */ } : props.code ? {
6683
+ return props.code === void 0 && !story ? { error: "Oh no! The source is not available." /* SOURCE_UNAVAILABLE */ } : props.code !== void 0 ? {
6657
6684
  code: props.code,
6658
6685
  format: format2,
6659
6686
  language,
@@ -6664,17 +6691,22 @@ var getStorySource = (storyId, args, sourceContext) => {
6664
6691
  language,
6665
6692
  dark
6666
6693
  });
6667
- }, SourceImpl = (props) => {
6694
+ }, SourceWithStorySnippet = (props) => {
6668
6695
  let sourceContext = useContext4(SourceContext), docsContext = useContext4(DocsContext), sourceProps = useSourceProps(props, docsContext, sourceContext);
6669
6696
  return React39.createElement(Source, { ...sourceProps });
6670
- }, Source2 = withMdxComponentOverride("Source", SourceImpl);
6697
+ }, SourceWithCode = (props) => {
6698
+ let docsContext = useContext4(DocsContext), sourceProps = useSourceProps(props, docsContext, EMPTY_SOURCE_CONTEXT);
6699
+ return React39.createElement(Source, { ...sourceProps });
6700
+ }, SourceImpl = (props) => props.code !== void 0 ? React39.createElement(SourceWithCode, { ...props }) : React39.createElement(SourceWithStorySnippet, { ...props }), Source2 = withMdxComponentOverride("Source", SourceImpl);
6671
6701
 
6672
6702
  // src/blocks/blocks/Canvas.tsx
6673
6703
  var CanvasImpl = (props) => {
6674
6704
  let docsContext = useContext5(DocsContext), sourceContext = useContext5(SourceContext), { of, source } = props;
6675
6705
  if ("of" in props && of === void 0)
6676
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
6677
- let { story } = useOf(of || "story", ["story"]), sourceProps = useSourceProps({ ...source, ...of && { of } }, docsContext, sourceContext), layout = props.layout ?? story.parameters.layout ?? story.parameters.docs?.canvas?.layout ?? "padded", withToolbar = props.withToolbar ?? story.parameters.docs?.canvas?.withToolbar ?? !1, additionalActions = props.additionalActions ?? story.parameters.docs?.canvas?.additionalActions, sourceState = props.sourceState ?? story.parameters.docs?.canvas?.sourceState ?? "hidden", className = props.className ?? story.parameters.docs?.canvas?.className, inline = props.story?.inline ?? story.parameters?.docs?.story?.inline ?? !1;
6706
+ throw new InvalidBlockOfPropError4();
6707
+ let { story } = useOf(of || "story", ["story"]), sourceProps = useSourceProps({ ...source, ...of && { of } }, docsContext, sourceContext), layout = props.layout ?? story.parameters.layout ?? story.parameters.docs?.canvas?.layout ?? "padded", withToolbar = props.withToolbar ?? story.parameters.docs?.canvas?.withToolbar ?? !1, additionalActions = props.additionalActions ?? story.parameters.docs?.canvas?.additionalActions, sourceState = props.sourceState ?? story.parameters.docs?.canvas?.sourceState ?? "hidden", className = props.className ?? story.parameters.docs?.canvas?.className, inline = props.story?.inline ?? story.parameters?.docs?.story?.inline ?? !1, handleReloadStory = useCallback7(() => {
6708
+ docsContext.channel.emit(FORCE_REMOUNT, { storyId: story.id });
6709
+ }, [docsContext.channel, story.id]);
6678
6710
  return React40.createElement(
6679
6711
  Preview,
6680
6712
  {
@@ -6684,7 +6716,8 @@ var CanvasImpl = (props) => {
6684
6716
  additionalActions,
6685
6717
  className,
6686
6718
  layout,
6687
- inline
6719
+ inline,
6720
+ onReloadStory: inline ? handleReloadStory : void 0
6688
6721
  },
6689
6722
  React40.createElement(Story2, { of: of || story.moduleExport, meta: props.meta, ...props.story })
6690
6723
  );
@@ -6695,7 +6728,7 @@ import React41, { useContext as useContext7 } from "react";
6695
6728
  import { filterArgTypes as filterArgTypes2 } from "storybook/preview-api";
6696
6729
 
6697
6730
  // src/blocks/blocks/useArgs.ts
6698
- import { useCallback as useCallback7, useEffect as useEffect13, useState as useState16 } from "react";
6731
+ import { useCallback as useCallback8, useEffect as useEffect13, useState as useState16 } from "react";
6699
6732
  import {
6700
6733
  RESET_STORY_ARGS,
6701
6734
  STORY_ARGS_UPDATED,
@@ -6714,10 +6747,10 @@ var useArgs = (story, context) => {
6714
6747
  };
6715
6748
  return context.channel.on(STORY_ARGS_UPDATED, onArgsUpdated), () => context.channel.off(STORY_ARGS_UPDATED, onArgsUpdated);
6716
6749
  }, [storyId, context.channel]);
6717
- let updateArgs = useCallback7(
6750
+ let updateArgs = useCallback8(
6718
6751
  (updatedArgs) => context.channel.emit(UPDATE_STORY_ARGS, { storyId, updatedArgs }),
6719
6752
  [storyId, context.channel]
6720
- ), resetArgs = useCallback7(
6753
+ ), resetArgs = useCallback8(
6721
6754
  (argNames) => context.channel.emit(RESET_STORY_ARGS, { storyId, argNames }),
6722
6755
  [storyId, context.channel]
6723
6756
  );
@@ -6795,6 +6828,7 @@ var ControlsImpl = (props) => {
6795
6828
 
6796
6829
  // src/blocks/blocks/Description.tsx
6797
6830
  import React44 from "react";
6831
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError5 } from "storybook/internal/preview-errors";
6798
6832
 
6799
6833
  // src/blocks/blocks/Markdown.tsx
6800
6834
  import React43 from "react";
@@ -6993,7 +7027,7 @@ var DescriptionType = /* @__PURE__ */ ((DescriptionType2) => (DescriptionType2.I
6993
7027
  }, DescriptionImpl = (props) => {
6994
7028
  let { of } = props;
6995
7029
  if ("of" in props && of === void 0)
6996
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
7030
+ throw new InvalidBlockOfPropError5();
6997
7031
  let resolvedOf = useOf(of || "meta"), markdown = getDescriptionFromResolvedOf(resolvedOf);
6998
7032
  return markdown ? React44.createElement(Markdown, null, markdown) : null;
6999
7033
  }, Description2 = withMdxComponentOverride("Description", DescriptionImpl);
@@ -7176,10 +7210,11 @@ var StyledHeading = styled29(Heading2)(({ theme }) => ({
7176
7210
  // src/blocks/blocks/Subtitle.tsx
7177
7211
  import React51 from "react";
7178
7212
  import { deprecate } from "storybook/internal/client-logger";
7213
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError6 } from "storybook/internal/preview-errors";
7179
7214
  var DEPRECATION_MIGRATION_LINK = "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#subtitle-block-and-parameterscomponentsubtitle", SubtitleImpl = (props) => {
7180
7215
  let { of, children } = props;
7181
7216
  if ("of" in props && of === void 0)
7182
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
7217
+ throw new InvalidBlockOfPropError6();
7183
7218
  let preparedMeta;
7184
7219
  try {
7185
7220
  preparedMeta = useOf(of || "meta", ["meta"]).preparedMeta;
@@ -7197,13 +7232,14 @@ var DEPRECATION_MIGRATION_LINK = "https://github.com/storybookjs/storybook/blob/
7197
7232
 
7198
7233
  // src/blocks/blocks/Title.tsx
7199
7234
  import React52 from "react";
7235
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError7 } from "storybook/internal/preview-errors";
7200
7236
  var STORY_KIND_PATH_SEPARATOR = /\s*\/\s*/, extractTitle = (title) => {
7201
7237
  let groups = title.trim().split(STORY_KIND_PATH_SEPARATOR);
7202
7238
  return groups?.[groups?.length - 1] || title;
7203
7239
  }, TitleImpl = (props) => {
7204
7240
  let { children, of } = props;
7205
7241
  if ("of" in props && of === void 0)
7206
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
7242
+ throw new InvalidBlockOfPropError7();
7207
7243
  let preparedMeta;
7208
7244
  try {
7209
7245
  preparedMeta = useOf(of || "meta", ["meta"]).preparedMeta;
@@ -1,20 +1,20 @@
1
- import CJS_COMPAT_NODE_URL_mbyf8gwq1e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mbyf8gwq1e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mbyf8gwq1e from "node:module";
1
+ import CJS_COMPAT_NODE_URL_bem9xq5gsqn from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_bem9xq5gsqn from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_bem9xq5gsqn from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mbyf8gwq1e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mbyf8gwq1e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_bem9xq5gsqn.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_bem9xq5gsqn.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_bem9xq5gsqn.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
11
11
  // ------------------------------------------------------------
12
12
  import {
13
13
  compile
14
- } from "./_node-chunks/chunk-FOXFKJUT.js";
15
- import "./_node-chunks/chunk-O3IP3EYZ.js";
16
- import "./_node-chunks/chunk-3CQLJTS4.js";
17
- import "./_node-chunks/chunk-UBUIPEWJ.js";
14
+ } from "./_node-chunks/chunk-EEG4RDZ5.js";
15
+ import "./_node-chunks/chunk-KUAESHGL.js";
16
+ import "./_node-chunks/chunk-RG2UQ7CS.js";
17
+ import "./_node-chunks/chunk-XOX2N3QE.js";
18
18
 
19
19
  // src/mdx-loader.ts
20
20
  var DEFAULT_RENDERER = `
package/dist/preset.js CHANGED
@@ -1,15 +1,15 @@
1
- import CJS_COMPAT_NODE_URL_mbyf8gwq1e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_mbyf8gwq1e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_mbyf8gwq1e from "node:module";
1
+ import CJS_COMPAT_NODE_URL_bem9xq5gsqn from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_bem9xq5gsqn from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_bem9xq5gsqn from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_mbyf8gwq1e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_mbyf8gwq1e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_mbyf8gwq1e.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_bem9xq5gsqn.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_bem9xq5gsqn.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_bem9xq5gsqn.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
11
11
  // ------------------------------------------------------------
12
- import "./_node-chunks/chunk-UBUIPEWJ.js";
12
+ import "./_node-chunks/chunk-XOX2N3QE.js";
13
13
 
14
14
  // src/preset.ts
15
15
  import { isAbsolute as isAbsolute2 } from "node:path";
@@ -312,7 +312,7 @@ var getResolvedReact = async (options) => {
312
312
  };
313
313
  };
314
314
  async function webpack(webpackConfig = {}, options) {
315
- let { module = {} } = webpackConfig, { csfPluginOptions = {}, mdxPluginOptions = {} } = options, enrichCsf = await options.presets.apply("experimental_enrichCsf"), rehypeSlug = (await import("./_node-chunks/rehype-slug-WTB7POBJ.js")).default, rehypeExternalLinks = (await import("./_node-chunks/rehype-external-links-PGJMHXWX.js")).default, mdxLoaderOptions = await options.presets.apply("mdxLoaderOptions", {
315
+ let { module = {} } = webpackConfig, { csfPluginOptions = {}, mdxPluginOptions = {} } = options, enrichCsf = await options.presets.apply("experimental_enrichCsf"), rehypeSlug = (await import("./_node-chunks/rehype-slug-CPBEERZT.js")).default, rehypeExternalLinks = (await import("./_node-chunks/rehype-external-links-P7YOBLT5.js")).default, mdxLoaderOptions = await options.presets.apply("mdxLoaderOptions", {
316
316
  ...mdxPluginOptions,
317
317
  mdxCompileOptions: {
318
318
  providerImportSource: import.meta.resolve("@storybook/addon-docs/mdx-react-shim"),
@@ -388,7 +388,7 @@ var docs = (input = {}, options) => {
388
388
  }, addons = [
389
389
  import.meta.resolve("@storybook/react-dom-shim/preset")
390
390
  ], viteFinal = async (config, options) => {
391
- let { plugins = [] } = config, { mdxPlugin } = await import("./_node-chunks/mdx-plugin-YVVOIQAZ.js"), { react, reactDom, mdx } = await getResolvedReact(options), packageDeduplicationPlugin = {
391
+ let { plugins = [] } = config, { mdxPlugin } = await import("./_node-chunks/mdx-plugin-XGLK6OPD.js"), { react, reactDom, mdx } = await getResolvedReact(options), packageDeduplicationPlugin = {
392
392
  name: "storybook:package-deduplication",
393
393
  enforce: "pre",
394
394
  config: () => ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/addon-docs",
3
- "version": "10.4.0-alpha.1",
3
+ "version": "10.4.0-alpha.10",
4
4
  "description": "Storybook Docs: Document UI components automatically with stories and MDX",
5
5
  "keywords": [
6
6
  "docs",
@@ -87,9 +87,9 @@
87
87
  ],
88
88
  "dependencies": {
89
89
  "@mdx-js/react": "^3.0.0",
90
- "@storybook/csf-plugin": "10.4.0-alpha.1",
90
+ "@storybook/csf-plugin": "10.4.0-alpha.10",
91
91
  "@storybook/icons": "^2.0.1",
92
- "@storybook/react-dom-shim": "10.4.0-alpha.1",
92
+ "@storybook/react-dom-shim": "10.4.0-alpha.10",
93
93
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
94
94
  "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
95
95
  "ts-dedent": "^2.0.0"
@@ -116,7 +116,7 @@
116
116
  "vite": "^7.0.4"
117
117
  },
118
118
  "peerDependencies": {
119
- "storybook": "^10.4.0-alpha.1"
119
+ "storybook": "^10.4.0-alpha.10"
120
120
  },
121
121
  "publishConfig": {
122
122
  "access": "public"