@storybook/addon-docs 10.4.0-alpha.0 → 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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getControlId
3
- } from "./chunk-CYSK6WYR.js";
3
+ } from "./chunk-S2IHWCOG.js";
4
4
  import {
5
5
  __commonJS,
6
6
  __toESM
@@ -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] || "")
@@ -1014,18 +1020,20 @@ var Wrapper = styled.div({
1014
1020
  return { presets, addPreset };
1015
1021
  }, ColorControl = ({
1016
1022
  name,
1023
+ storyId,
1017
1024
  value: initialValue,
1018
1025
  onChange,
1019
1026
  onFocus,
1020
1027
  onBlur,
1021
1028
  presetColors,
1029
+ maxPresetColors,
1022
1030
  startOpen = !1,
1023
1031
  argType
1024
1032
  }) => {
1025
1033
  let debouncedOnChange = useCallback(debounce(onChange, 200), [onChange]), { value, realValue, updateValue, color, colorSpace, cycleColorSpace } = useColorInput(
1026
1034
  initialValue,
1027
1035
  debouncedOnChange
1028
- ), { presets, addPreset } = usePresets(presetColors ?? [], color, colorSpace), Picker = ColorPicker[colorSpace], readOnly = !!argType?.table?.readonly, controlId = getControlId(name);
1036
+ ), { presets, addPreset } = usePresets(presetColors ?? [], color, colorSpace, maxPresetColors), Picker = ColorPicker[colorSpace], readOnly = !!argType?.table?.readonly, controlId = getControlId(name, storyId);
1029
1037
  return React.createElement(Wrapper, null, React.createElement("label", { htmlFor: controlId, className: "sb-sr-only" }, name), React.createElement(
1030
1038
  Input,
1031
1039
  {
@@ -0,0 +1,13 @@
1
+ // src/blocks/controls/helpers.ts
2
+ var getControlId = (value, storyId) => {
3
+ let base = value.replace(/\s+/g, "-");
4
+ return storyId ? `control-${storyId}-${base}` : `control-${base}`;
5
+ }, getControlSetterButtonId = (value, storyId) => {
6
+ let base = value.replace(/\s+/g, "-");
7
+ return storyId ? `set-${storyId}-${base}` : `set-${base}`;
8
+ };
9
+
10
+ export {
11
+ getControlId,
12
+ getControlSetterButtonId
13
+ };
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_on6o02dgj0e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_on6o02dgj0e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_on6o02dgj0e 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_on6o02dgj0e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_on6o02dgj0e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_on6o02dgj0e.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_on6o02dgj0e.createRequire(import.meta.url);
12
12
  import {
13
13
  esm_default,
14
14
  stringify
15
- } from "./chunk-IZ4IIMQ3.js";
15
+ } from "./chunk-KUAESHGL.js";
16
16
  import {
17
17
  visit
18
- } from "./chunk-6ARKSHGI.js";
18
+ } from "./chunk-RG2UQ7CS.js";
19
19
  import {
20
20
  __commonJS,
21
21
  __export,
22
22
  __toESM
23
- } from "./chunk-NYEJA2CZ.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_on6o02dgj0e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_on6o02dgj0e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_on6o02dgj0e 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_on6o02dgj0e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_on6o02dgj0e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_on6o02dgj0e.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_on6o02dgj0e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_on6o02dgj0e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_on6o02dgj0e 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_on6o02dgj0e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_on6o02dgj0e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_on6o02dgj0e.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_on6o02dgj0e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_on6o02dgj0e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_on6o02dgj0e 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_on6o02dgj0e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_on6o02dgj0e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_on6o02dgj0e.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_on6o02dgj0e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_on6o02dgj0e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_on6o02dgj0e 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_on6o02dgj0e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_on6o02dgj0e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_on6o02dgj0e.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-73YLCN4K.js";
15
- import "./chunk-IZ4IIMQ3.js";
16
- import "./chunk-6ARKSHGI.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-NYEJA2CZ.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-YLZUJAH7.js")).default, rehypeExternalLinks = (await import("./rehype-external-links-WELLNDNO.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_on6o02dgj0e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_on6o02dgj0e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_on6o02dgj0e 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_on6o02dgj0e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_on6o02dgj0e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_on6o02dgj0e.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_on6o02dgj0e.createRequire(import.meta.url);
12
12
  import {
13
13
  esm_default,
14
14
  parse
15
- } from "./chunk-IZ4IIMQ3.js";
15
+ } from "./chunk-KUAESHGL.js";
16
16
  import {
17
17
  visit
18
- } from "./chunk-6ARKSHGI.js";
19
- import "./chunk-NYEJA2CZ.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_on6o02dgj0e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_on6o02dgj0e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_on6o02dgj0e 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_on6o02dgj0e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_on6o02dgj0e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_on6o02dgj0e.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-6ARKSHGI.js";
15
- import "./chunk-NYEJA2CZ.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
@@ -56,6 +56,7 @@ interface ArgsTableOptionProps {
56
56
  initialExpandedArgs?: boolean;
57
57
  isLoading?: boolean;
58
58
  sort?: SortType;
59
+ storyId?: string;
59
60
  }
60
61
  interface ArgsTableDataProps {
61
62
  rows: ArgTypes$1;
@@ -109,6 +110,7 @@ type PreviewProps = PropsWithChildren<{
109
110
  withToolbar?: boolean;
110
111
  className?: string;
111
112
  additionalActions?: ActionItem[];
113
+ onReloadStory?: () => void;
112
114
  }>;
113
115
  type Layout = 'padded' | 'fullscreen' | 'centered';
114
116
 
@@ -275,7 +277,7 @@ type SourceProps = SourceParameters & {
275
277
  __forceInitialArgs?: boolean;
276
278
  };
277
279
  type PureSourceProps = ComponentProps<typeof Source$1>;
278
- declare const useSourceProps: (props: SourceProps, docsContext: DocsContextProps<any>, sourceContext: SourceContextProps) => PureSourceProps;
280
+ declare const useSourceProps: (props: SourceProps, docsContext: DocsContextProps, sourceContext: SourceContextProps) => PureSourceProps;
279
281
  declare const Source: React__default.ComponentType<SourceProps>;
280
282
 
281
283
  type PureStoryProps = ComponentProps<typeof Story$1>;
@@ -951,6 +953,7 @@ declare const HeadersMdx: {};
951
953
 
952
954
  interface ControlProps<T> {
953
955
  name: string;
956
+ storyId?: string;
954
957
  value?: T;
955
958
  defaultValue?: T;
956
959
  argType?: ArgType;
@@ -968,6 +971,14 @@ type PresetColor = ColorValue | {
968
971
  };
969
972
  interface ColorConfig {
970
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;
971
982
  /**
972
983
  * Whether the color picker should be open by default when rendered.
973
984
  *
package/dist/blocks.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getControlId,
3
3
  getControlSetterButtonId
4
- } from "./_browser-chunks/chunk-CYSK6WYR.js";
4
+ } from "./_browser-chunks/chunk-S2IHWCOG.js";
5
5
  import {
6
6
  EmptyBlock,
7
7
  Source,
@@ -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,11 +653,16 @@ 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,
665
+ storyId,
662
666
  value,
663
667
  onChange,
664
668
  onBlur,
@@ -673,13 +677,13 @@ var Label = styled.label(({ theme }) => ({
673
677
  ariaLabel: !1,
674
678
  variant: "outline",
675
679
  size: "medium",
676
- id: getControlSetterButtonId(name),
680
+ id: getControlSetterButtonId(name, storyId),
677
681
  onClick: onSetFalse,
678
682
  disabled: readonly
679
683
  },
680
684
  "Set boolean"
681
685
  );
682
- let controlId = getControlId(name), parsedValue = typeof value == "string" ? parse(value) : value;
686
+ let controlId = getControlId(name, storyId), parsedValue = typeof value == "string" ? parse(value) : value;
683
687
  return React.createElement(Label, { "aria-disabled": readonly, htmlFor: controlId, "aria-label": name }, React.createElement(
684
688
  "input",
685
689
  {
@@ -734,7 +738,15 @@ var parseDate = (value) => {
734
738
  "div:last-of-type": {
735
739
  flex: 3
736
740
  }
737
- }), DateControl = ({ name, value, onChange, onFocus, onBlur, argType }) => {
741
+ }), DateControl = ({
742
+ name,
743
+ storyId,
744
+ value,
745
+ onChange,
746
+ onFocus,
747
+ onBlur,
748
+ argType
749
+ }) => {
738
750
  let [valid, setValid] = useState(!0), dateRef = useRef(), timeRef = useRef(), readonly = !!argType?.table?.readonly;
739
751
  useEffect(() => {
740
752
  valid !== !1 && (dateRef && dateRef.current && (dateRef.current.value = value ? formatDate(value) : ""), timeRef && timeRef.current && (timeRef.current.value = value ? formatTime(value) : ""));
@@ -753,7 +765,7 @@ var parseDate = (value) => {
753
765
  result.setHours(parsed.getHours()), result.setMinutes(parsed.getMinutes());
754
766
  let time = result.getTime();
755
767
  time && onChange(time), setValid(!!time);
756
- }, controlId = getControlId(name);
768
+ }, controlId = getControlId(name, storyId);
757
769
  return React2.createElement(FlexSpaced, null, React2.createElement("legend", { className: "sb-sr-only" }, name), React2.createElement("label", { htmlFor: `${controlId}-date`, className: "sb-sr-only" }, "Date"), React2.createElement(
758
770
  FormInput,
759
771
  {
@@ -795,6 +807,7 @@ var Wrapper = styled3.label({
795
807
  background: theme.base === "light" ? theme.color.lighter : "transparent"
796
808
  })), NumberControl = ({
797
809
  name,
810
+ storyId,
798
811
  value,
799
812
  onChange,
800
813
  min,
@@ -830,7 +843,7 @@ var Wrapper = styled3.label({
830
843
  ariaLabel: !1,
831
844
  variant: "outline",
832
845
  size: "medium",
833
- id: getControlSetterButtonId(name),
846
+ id: getControlSetterButtonId(name, storyId),
834
847
  onClick: onForceVisible,
835
848
  disabled: readonly
836
849
  },
@@ -839,7 +852,7 @@ var Wrapper = styled3.label({
839
852
  FormInput2,
840
853
  {
841
854
  ref: htmlElRef,
842
- id: getControlId(name),
855
+ id: getControlId(name, storyId),
843
856
  type: "number",
844
857
  onChange: handleChange,
845
858
  size: "flex",
@@ -907,6 +920,7 @@ var Wrapper2 = styled4.fieldset(
907
920
  }
908
921
  })), CheckboxControl = ({
909
922
  name,
923
+ storyId,
910
924
  options,
911
925
  value,
912
926
  onChange,
@@ -922,7 +936,7 @@ var Wrapper2 = styled4.fieldset(
922
936
  useEffect3(() => {
923
937
  setSelected(selectedKeys(value || [], options));
924
938
  }, [value]);
925
- let controlId = getControlId(name);
939
+ let controlId = getControlId(name, storyId);
926
940
  return React4.createElement(Wrapper2, { $isInline: isInline }, React4.createElement("legend", { className: "sb-sr-only" }, name), Object.keys(options).map((key, index) => {
927
941
  let id = `${controlId}-${index}`;
928
942
  return React4.createElement(Label2, { key: id, htmlFor: id, $readOnly: readonly }, React4.createElement(
@@ -978,6 +992,7 @@ var Wrapper3 = styled5.fieldset(
978
992
  }
979
993
  })), RadioControl = ({
980
994
  name,
995
+ storyId,
981
996
  options,
982
997
  value,
983
998
  onChange,
@@ -986,7 +1001,7 @@ var Wrapper3 = styled5.fieldset(
986
1001
  }) => {
987
1002
  if (!options)
988
1003
  return logger2.warn(`Radio with no options: ${name}`), React5.createElement(React5.Fragment, null, "-");
989
- let selection = selectedKey(value, options), controlId = getControlId(name), readonly = !!argType?.table?.readonly;
1004
+ let selection = selectedKey(value, options), controlId = getControlId(name, storyId), readonly = !!argType?.table?.readonly;
990
1005
  return React5.createElement(Wrapper3, { isInline }, React5.createElement("legend", { className: "sb-sr-only" }, name), Object.keys(options).map((key, index) => {
991
1006
  let id = `${controlId}-${index}`;
992
1007
  return React5.createElement(Label3, { key: id, htmlFor: id, $readOnly: readonly }, React5.createElement(
@@ -1080,16 +1095,16 @@ var styleResets = {
1080
1095
  fill: theme.textMutedColor
1081
1096
  }
1082
1097
  }
1083
- })), NO_SELECTION = "Choose option...", SingleSelect = ({ name, value, options, onChange, argType }) => {
1098
+ })), NO_SELECTION = "Choose option...", SingleSelect = ({ name, storyId, value, options, onChange, argType }) => {
1084
1099
  let handleChange = (e2) => {
1085
1100
  onChange(options[e2.currentTarget.value]);
1086
- }, selection = selectedKey(value, options) || NO_SELECTION, controlId = getControlId(name), readonly = !!argType?.table?.readonly;
1101
+ }, selection = selectedKey(value, options) || NO_SELECTION, controlId = getControlId(name, storyId), readonly = !!argType?.table?.readonly;
1087
1102
  return React6.createElement(SelectWrapper, null, React6.createElement(ChevronSmallDownIcon, null), React6.createElement("label", { htmlFor: controlId, className: "sb-sr-only" }, name), React6.createElement(OptionsSelect, { disabled: readonly, id: controlId, value: selection, onChange: handleChange }, React6.createElement("option", { disabled: selection === NO_SELECTION, key: "no-selection" }, NO_SELECTION), Object.keys(options).map((key) => React6.createElement("option", { key, value: key }, key))));
1088
- }, MultiSelect = ({ name, value, options, onChange, argType }) => {
1103
+ }, MultiSelect = ({ name, storyId, value, options, onChange, argType }) => {
1089
1104
  let handleChange = (e2) => {
1090
1105
  let selection2 = Array.from(e2.currentTarget.options).filter((option) => option.selected).map((option) => option.value);
1091
1106
  onChange(selectedValues(selection2, options));
1092
- }, selection = selectedKeys(value, options), controlId = getControlId(name), readonly = !!argType?.table?.readonly;
1107
+ }, selection = selectedKeys(value, options), controlId = getControlId(name, storyId), readonly = !!argType?.table?.readonly;
1093
1108
  return React6.createElement(SelectWrapper, null, React6.createElement("label", { htmlFor: controlId, className: "sb-sr-only" }, name), React6.createElement(
1094
1109
  OptionsSelect,
1095
1110
  {
@@ -2386,7 +2401,7 @@ var { window: globalWindow } = globalThis, Wrapper4 = styled8.div(({ theme }) =>
2386
2401
  event.currentTarget.dispatchEvent(new globalWindow.KeyboardEvent("keydown", ENTER_EVENT));
2387
2402
  }, selectValue = (event) => {
2388
2403
  event.currentTarget.select();
2389
- }, ObjectControl = ({ name, value, onChange, argType }) => {
2404
+ }, ObjectControl = ({ name, storyId, value, onChange, argType }) => {
2390
2405
  let theme = useTheme(), data = useMemo(() => value && cloneDeep(value), [value]), hasData = data != null, [showRaw, setShowRaw] = useState4(!hasData), [parseError, setParseError] = useState4(null), readonly = !!argType?.table?.readonly, updateRaw = useCallback3(
2391
2406
  (raw) => {
2392
2407
  try {
@@ -2409,7 +2424,7 @@ var { window: globalWindow } = globalThis, Wrapper4 = styled8.div(({ theme }) =>
2409
2424
  {
2410
2425
  ariaLabel: !1,
2411
2426
  disabled: readonly,
2412
- id: getControlSetterButtonId(name),
2427
+ id: getControlSetterButtonId(name, storyId),
2413
2428
  onClick: onForceVisible
2414
2429
  },
2415
2430
  "Set object"
@@ -2418,7 +2433,7 @@ var { window: globalWindow } = globalThis, Wrapper4 = styled8.div(({ theme }) =>
2418
2433
  RawInput,
2419
2434
  {
2420
2435
  ref: htmlElRef,
2421
- id: getControlId(name),
2436
+ id: getControlId(name, storyId),
2422
2437
  minRows: 3,
2423
2438
  name,
2424
2439
  key: jsonString,
@@ -2584,6 +2599,7 @@ function getNumberOfDecimalPlaces(number) {
2584
2599
  }
2585
2600
  var RangeControl = ({
2586
2601
  name,
2602
+ storyId,
2587
2603
  value,
2588
2604
  onChange,
2589
2605
  min = 0,
@@ -2595,7 +2611,7 @@ var RangeControl = ({
2595
2611
  }) => {
2596
2612
  let handleChange = (event) => {
2597
2613
  onChange(parse2(event.target.value));
2598
- }, hasValue = value !== void 0, numberOFDecimalsPlaces = useMemo2(() => getNumberOfDecimalPlaces(step), [step]), readonly = !!argType?.table?.readonly, controlId = getControlId(name);
2614
+ }, hasValue = value !== void 0, numberOFDecimalsPlaces = useMemo2(() => getNumberOfDecimalPlaces(step), [step]), readonly = !!argType?.table?.readonly, controlId = getControlId(name, storyId);
2599
2615
  return React12.createElement(RangeWrapper, { readOnly: readonly }, React12.createElement("label", { htmlFor: controlId, className: "sb-sr-only" }, name), React12.createElement(RangeLabel, null, min), React12.createElement(
2600
2616
  RangeInput,
2601
2617
  {
@@ -2626,6 +2642,7 @@ var Wrapper5 = styled10.label({
2626
2642
  color: isMaxed ? "red" : void 0
2627
2643
  })), TextControl = ({
2628
2644
  name,
2645
+ storyId,
2629
2646
  value,
2630
2647
  onChange,
2631
2648
  onFocus,
@@ -2646,7 +2663,7 @@ var Wrapper5 = styled10.label({
2646
2663
  variant: "outline",
2647
2664
  size: "medium",
2648
2665
  disabled: readonly,
2649
- id: getControlSetterButtonId(name),
2666
+ id: getControlSetterButtonId(name, storyId),
2650
2667
  onClick: onForceVisible
2651
2668
  },
2652
2669
  "Set string"
@@ -2655,7 +2672,7 @@ var Wrapper5 = styled10.label({
2655
2672
  return React13.createElement(Wrapper5, null, React13.createElement(
2656
2673
  Form4.Textarea,
2657
2674
  {
2658
- id: getControlId(name),
2675
+ id: getControlId(name, storyId),
2659
2676
  maxLength,
2660
2677
  onChange: handleChange,
2661
2678
  disabled: readonly,
@@ -2686,6 +2703,7 @@ function revokeOldUrls(urls) {
2686
2703
  var FilesControl = ({
2687
2704
  onChange,
2688
2705
  name,
2706
+ storyId,
2689
2707
  accept = "image/*",
2690
2708
  value,
2691
2709
  argType
@@ -2700,7 +2718,7 @@ var FilesControl = ({
2700
2718
  useEffect5(() => {
2701
2719
  value == null && inputElement.current && (inputElement.current.value = "");
2702
2720
  }, [value, name]);
2703
- let controlId = getControlId(name);
2721
+ let controlId = getControlId(name, storyId);
2704
2722
  return React14.createElement(React14.Fragment, null, React14.createElement("label", { htmlFor: controlId, className: "sb-sr-only" }, name), React14.createElement(
2705
2723
  FileInput,
2706
2724
  {
@@ -2718,7 +2736,7 @@ var FilesControl = ({
2718
2736
  };
2719
2737
 
2720
2738
  // src/blocks/controls/index.tsx
2721
- var LazyColorControl = lazy(() => import("./_browser-chunks/Color-FRDS63T2.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 }));
2722
2740
 
2723
2741
  // src/blocks/components/ArgsTable/ArgControl.tsx
2724
2742
  var Controls2 = {
@@ -2737,7 +2755,7 @@ var Controls2 = {
2737
2755
  range: RangeControl,
2738
2756
  text: TextControl,
2739
2757
  file: FilesControl
2740
- }, NoControl = () => React16.createElement(React16.Fragment, null, "-"), ArgControl = ({ row, arg, updateArgs, isHovered }) => {
2758
+ }, NoControl = () => React16.createElement(React16.Fragment, null, "-"), ArgControl = ({ row, arg, updateArgs, isHovered, storyId }) => {
2741
2759
  let { key, control } = row, [isFocused, setFocused] = useState6(!1), [boxedValue, setBoxedValue] = useState6({ value: arg });
2742
2760
  useEffect6(() => {
2743
2761
  isFocused || setBoxedValue({ value: arg });
@@ -2758,7 +2776,15 @@ var Controls2 = {
2758
2776
  "Setup controls"
2759
2777
  ) : React16.createElement(NoControl, null);
2760
2778
  }
2761
- let props = { name: key, argType: row, value: boxedValue.value, onChange, onBlur, onFocus }, Control = Controls2[control.type] || NoControl;
2779
+ let props = {
2780
+ name: key,
2781
+ storyId,
2782
+ argType: row,
2783
+ value: boxedValue.value,
2784
+ onChange,
2785
+ onBlur,
2786
+ onFocus
2787
+ }, Control = Controls2[control.type] || NoControl;
2762
2788
  return React16.createElement(Control, { ...props, ...control, controlType: control.type });
2763
2789
  };
2764
2790
 
@@ -3367,7 +3393,8 @@ var sortFns = {
3367
3393
  inTabPanel,
3368
3394
  initialExpandedArgs,
3369
3395
  sort = "none",
3370
- isLoading
3396
+ isLoading,
3397
+ storyId
3371
3398
  } = props;
3372
3399
  if ("error" in props) {
3373
3400
  let { error } = props;
@@ -3386,7 +3413,7 @@ var sortFns = {
3386
3413
  return React23.createElement(Empty, { inAddonPanel });
3387
3414
  let colSpan = 1;
3388
3415
  updateArgs && (colSpan += 1), compact2 || (colSpan += 2);
3389
- let expandable = Object.keys(groups.sections).length > 0, common = { updateArgs, compact: compact2, inAddonPanel, initialExpandedArgs };
3416
+ let expandable = Object.keys(groups.sections).length > 0, common = { updateArgs, compact: compact2, inAddonPanel, initialExpandedArgs, storyId };
3390
3417
  return React23.createElement(ResetWrapper, null, React23.createElement(TablePositionWrapper, null, updateArgs && !isLoading && resetArgs && React23.createElement(ButtonPositionWrapper, null, React23.createElement(
3391
3418
  StyledButton,
3392
3419
  {
@@ -4166,6 +4193,7 @@ var DocsContext = globalThis ? globalThis.__DOCS_CONTEXT__ : createContext(null)
4166
4193
 
4167
4194
  // src/blocks/blocks/Story.tsx
4168
4195
  import React26, { useContext } from "react";
4196
+ import { InvalidBlockOfPropError } from "storybook/internal/preview-errors";
4169
4197
 
4170
4198
  // src/blocks/blocks/useStory.ts
4171
4199
  import { useEffect as useEffect8, useState as useState11 } from "react";
@@ -4216,7 +4244,7 @@ var MDX_WRAPPED_BLOCK = Symbol("mdxWrappedBlock"), MdxWrappedBlockContext = Reac
4216
4244
  var getStoryId = (props, context) => {
4217
4245
  let { of, meta } = props;
4218
4246
  if ("of" in props && of === void 0)
4219
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
4247
+ throw new InvalidBlockOfPropError();
4220
4248
  return meta && context.referenceMeta(meta, !1), context.resolveOf(of || "story", ["story"]).story.id;
4221
4249
  }, getStoryProps = (props, story, context) => {
4222
4250
  let { parameters = {} } = story || {}, { docs = {} } = parameters, storyParameters = docs.story || {};
@@ -4364,7 +4392,7 @@ var storyBlockIdFromId = ({ story, primary }) => `story--${story.id}${primary ?
4364
4392
  // src/blocks/components/Toolbar.tsx
4365
4393
  import React29 from "react";
4366
4394
  import { Button as Button6, Toolbar as SharedToolbar } from "storybook/internal/components";
4367
- import { ShareAltIcon, ZoomIcon, ZoomOutIcon, ZoomResetIcon } from "@storybook/icons";
4395
+ import { ShareAltIcon, SyncIcon, ZoomIcon, ZoomOutIcon, ZoomResetIcon } from "@storybook/icons";
4368
4396
  import { styled as styled21 } from "storybook/theming";
4369
4397
  var AbsoluteBar = styled21(SharedToolbar)({
4370
4398
  position: "absolute",
@@ -4385,7 +4413,24 @@ var AbsoluteBar = styled21(SharedToolbar)({
4385
4413
  margin: "0 7px",
4386
4414
  backgroundColor: theme.appBorderColor,
4387
4415
  animation: `${theme.animation.glow} 1.5s ease-in-out infinite`
4388
- })), 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(
4389
4434
  Button6,
4390
4435
  {
4391
4436
  padding: "small",
@@ -4517,6 +4562,7 @@ var PositionedToolbar = styled22(Toolbar)({
4517
4562
  className,
4518
4563
  layout = "padded",
4519
4564
  inline = !1,
4565
+ onReloadStory,
4520
4566
  ...props
4521
4567
  }) => {
4522
4568
  let [expanded, setExpanded] = useState13(isExpanded), [copied, setCopied] = useState13(null), [scale, setScale] = useState13(1), additionalActionItems = useMemo3(
@@ -4548,7 +4594,8 @@ var PositionedToolbar = styled22(Toolbar)({
4548
4594
  border: !0,
4549
4595
  zoom: (z2) => setScale(scale * z2),
4550
4596
  resetZoom: () => setScale(1),
4551
- storyId: !isLoading && childProps ? getStoryId(childProps, context) : void 0
4597
+ storyId: !isLoading && childProps ? getStoryId(childProps, context) : void 0,
4598
+ onReloadStory
4552
4599
  }
4553
4600
  ),
4554
4601
  React30.createElement(ZoomContext.Provider, { value: { scale } }, React30.createElement(
@@ -5447,6 +5494,7 @@ var anchorBlockIdFromId = (storyId) => `anchor--${storyId}`, Anchor = ({ storyId
5447
5494
 
5448
5495
  // src/blocks/blocks/ArgTypes.tsx
5449
5496
  import React37 from "react";
5497
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError2 } from "storybook/internal/preview-errors";
5450
5498
  import { filterArgTypes } from "storybook/preview-api";
5451
5499
 
5452
5500
  // src/blocks/blocks/useOf.ts
@@ -5499,7 +5547,7 @@ function getArgTypesFromResolved(resolved) {
5499
5547
  var ArgTypesImpl = (props) => {
5500
5548
  let { of } = props;
5501
5549
  if ("of" in props && of === void 0)
5502
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
5550
+ throw new InvalidBlockOfPropError2();
5503
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);
5504
5552
  if (!(!!subcomponents && Object.keys(subcomponents || {}).length > 0))
5505
5553
  return React37.createElement(ArgsTable, { rows: filteredArgTypes, sort });
@@ -5523,11 +5571,14 @@ var ArgTypesImpl = (props) => {
5523
5571
  }, ArgTypes = withMdxComponentOverride("ArgTypes", ArgTypesImpl);
5524
5572
 
5525
5573
  // src/blocks/blocks/Canvas.tsx
5526
- 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";
5527
5577
 
5528
5578
  // src/blocks/blocks/Source.tsx
5529
5579
  import React39, { useContext as useContext4, useMemo as useMemo4 } from "react";
5530
5580
  import { SourceType } from "storybook/internal/docs-tools";
5581
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError3 } from "storybook/internal/preview-errors";
5531
5582
 
5532
5583
  // src/blocks/blocks/SourceContainer.tsx
5533
5584
  import React38, { createContext as createContext3, useEffect as useEffect11, useState as useState14 } from "react";
@@ -6600,7 +6651,7 @@ function useTransformCode(source, transform, storyContext) {
6600
6651
  }
6601
6652
 
6602
6653
  // src/blocks/blocks/Source.tsx
6603
- var getStorySource = (storyId, args, sourceContext) => {
6654
+ var EMPTY_SOURCE_CONTEXT = { sources: {} }, getStorySource = (storyId, args, sourceContext) => {
6604
6655
  let { sources } = sourceContext, sourceMap = sources?.[storyId];
6605
6656
  return sourceMap?.[argsHash(args)] || sourceMap?.[UNKNOWN_ARGS_HASH] || { code: "" };
6606
6657
  }, useCode = ({
@@ -6627,9 +6678,9 @@ var getStorySource = (storyId, args, sourceContext) => {
6627
6678
  transformFromProps: props.transform
6628
6679
  });
6629
6680
  if ("of" in props && of === void 0)
6630
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
6681
+ throw new InvalidBlockOfPropError3();
6631
6682
  let sourceParameters = story?.parameters?.docs?.source || {}, format2 = props.format, language = props.language ?? sourceParameters.language ?? "jsx", dark = props.dark ?? sourceParameters.dark ?? !1;
6632
- 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 ? {
6633
6684
  code: props.code,
6634
6685
  format: format2,
6635
6686
  language,
@@ -6640,17 +6691,22 @@ var getStorySource = (storyId, args, sourceContext) => {
6640
6691
  language,
6641
6692
  dark
6642
6693
  });
6643
- }, SourceImpl = (props) => {
6694
+ }, SourceWithStorySnippet = (props) => {
6644
6695
  let sourceContext = useContext4(SourceContext), docsContext = useContext4(DocsContext), sourceProps = useSourceProps(props, docsContext, sourceContext);
6645
6696
  return React39.createElement(Source, { ...sourceProps });
6646
- }, 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);
6647
6701
 
6648
6702
  // src/blocks/blocks/Canvas.tsx
6649
6703
  var CanvasImpl = (props) => {
6650
6704
  let docsContext = useContext5(DocsContext), sourceContext = useContext5(SourceContext), { of, source } = props;
6651
6705
  if ("of" in props && of === void 0)
6652
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
6653
- 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]);
6654
6710
  return React40.createElement(
6655
6711
  Preview,
6656
6712
  {
@@ -6660,7 +6716,8 @@ var CanvasImpl = (props) => {
6660
6716
  additionalActions,
6661
6717
  className,
6662
6718
  layout,
6663
- inline
6719
+ inline,
6720
+ onReloadStory: inline ? handleReloadStory : void 0
6664
6721
  },
6665
6722
  React40.createElement(Story2, { of: of || story.moduleExport, meta: props.meta, ...props.story })
6666
6723
  );
@@ -6671,7 +6728,7 @@ import React41, { useContext as useContext7 } from "react";
6671
6728
  import { filterArgTypes as filterArgTypes2 } from "storybook/preview-api";
6672
6729
 
6673
6730
  // src/blocks/blocks/useArgs.ts
6674
- 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";
6675
6732
  import {
6676
6733
  RESET_STORY_ARGS,
6677
6734
  STORY_ARGS_UPDATED,
@@ -6690,10 +6747,10 @@ var useArgs = (story, context) => {
6690
6747
  };
6691
6748
  return context.channel.on(STORY_ARGS_UPDATED, onArgsUpdated), () => context.channel.off(STORY_ARGS_UPDATED, onArgsUpdated);
6692
6749
  }, [storyId, context.channel]);
6693
- let updateArgs = useCallback7(
6750
+ let updateArgs = useCallback8(
6694
6751
  (updatedArgs) => context.channel.emit(UPDATE_STORY_ARGS, { storyId, updatedArgs }),
6695
6752
  [storyId, context.channel]
6696
- ), resetArgs = useCallback7(
6753
+ ), resetArgs = useCallback8(
6697
6754
  (argNames) => context.channel.emit(RESET_STORY_ARGS, { storyId, argNames }),
6698
6755
  [storyId, context.channel]
6699
6756
  );
@@ -6734,6 +6791,7 @@ var ControlsImpl = (props) => {
6734
6791
  return Object.keys(filteredArgTypes).length > 0 || Object.keys(args).length > 0 ? React41.createElement(
6735
6792
  ArgsTable,
6736
6793
  {
6794
+ storyId: story.id,
6737
6795
  rows: filteredArgTypes,
6738
6796
  sort,
6739
6797
  args,
@@ -6762,13 +6820,15 @@ var ControlsImpl = (props) => {
6762
6820
  args,
6763
6821
  globals,
6764
6822
  updateArgs,
6765
- resetArgs
6823
+ resetArgs,
6824
+ storyId: story.id
6766
6825
  }
6767
6826
  );
6768
6827
  }, Controls3 = withMdxComponentOverride("Controls", ControlsImpl);
6769
6828
 
6770
6829
  // src/blocks/blocks/Description.tsx
6771
6830
  import React44 from "react";
6831
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError5 } from "storybook/internal/preview-errors";
6772
6832
 
6773
6833
  // src/blocks/blocks/Markdown.tsx
6774
6834
  import React43 from "react";
@@ -6967,7 +7027,7 @@ var DescriptionType = /* @__PURE__ */ ((DescriptionType2) => (DescriptionType2.I
6967
7027
  }, DescriptionImpl = (props) => {
6968
7028
  let { of } = props;
6969
7029
  if ("of" in props && of === void 0)
6970
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
7030
+ throw new InvalidBlockOfPropError5();
6971
7031
  let resolvedOf = useOf(of || "meta"), markdown = getDescriptionFromResolvedOf(resolvedOf);
6972
7032
  return markdown ? React44.createElement(Markdown, null, markdown) : null;
6973
7033
  }, Description2 = withMdxComponentOverride("Description", DescriptionImpl);
@@ -7150,10 +7210,11 @@ var StyledHeading = styled29(Heading2)(({ theme }) => ({
7150
7210
  // src/blocks/blocks/Subtitle.tsx
7151
7211
  import React51 from "react";
7152
7212
  import { deprecate } from "storybook/internal/client-logger";
7213
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError6 } from "storybook/internal/preview-errors";
7153
7214
  var DEPRECATION_MIGRATION_LINK = "https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#subtitle-block-and-parameterscomponentsubtitle", SubtitleImpl = (props) => {
7154
7215
  let { of, children } = props;
7155
7216
  if ("of" in props && of === void 0)
7156
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
7217
+ throw new InvalidBlockOfPropError6();
7157
7218
  let preparedMeta;
7158
7219
  try {
7159
7220
  preparedMeta = useOf(of || "meta", ["meta"]).preparedMeta;
@@ -7171,13 +7232,14 @@ var DEPRECATION_MIGRATION_LINK = "https://github.com/storybookjs/storybook/blob/
7171
7232
 
7172
7233
  // src/blocks/blocks/Title.tsx
7173
7234
  import React52 from "react";
7235
+ import { InvalidBlockOfPropError as InvalidBlockOfPropError7 } from "storybook/internal/preview-errors";
7174
7236
  var STORY_KIND_PATH_SEPARATOR = /\s*\/\s*/, extractTitle = (title) => {
7175
7237
  let groups = title.trim().split(STORY_KIND_PATH_SEPARATOR);
7176
7238
  return groups?.[groups?.length - 1] || title;
7177
7239
  }, TitleImpl = (props) => {
7178
7240
  let { children, of } = props;
7179
7241
  if ("of" in props && of === void 0)
7180
- throw new Error("Unexpected `of={undefined}`, did you mistype a CSF file reference?");
7242
+ throw new InvalidBlockOfPropError7();
7181
7243
  let preparedMeta;
7182
7244
  try {
7183
7245
  preparedMeta = useOf(of || "meta", ["meta"]).preparedMeta;
@@ -1,20 +1,20 @@
1
- import CJS_COMPAT_NODE_URL_on6o02dgj0e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_on6o02dgj0e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_on6o02dgj0e 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_on6o02dgj0e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_on6o02dgj0e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_on6o02dgj0e.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-73YLCN4K.js";
15
- import "./_node-chunks/chunk-IZ4IIMQ3.js";
16
- import "./_node-chunks/chunk-6ARKSHGI.js";
17
- import "./_node-chunks/chunk-NYEJA2CZ.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_on6o02dgj0e from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_on6o02dgj0e from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_on6o02dgj0e 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_on6o02dgj0e.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_on6o02dgj0e.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_on6o02dgj0e.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-NYEJA2CZ.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-YLZUJAH7.js")).default, rehypeExternalLinks = (await import("./_node-chunks/rehype-external-links-WELLNDNO.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-JZ3SHCGE.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.0",
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.0",
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.0",
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.0"
119
+ "storybook": "^10.4.0-alpha.10"
120
120
  },
121
121
  "publishConfig": {
122
122
  "access": "public"
@@ -1,7 +0,0 @@
1
- // src/blocks/controls/helpers.ts
2
- var getControlId = (value) => `control-${value.replace(/\s+/g, "-")}`, getControlSetterButtonId = (value) => `set-${value.replace(/\s+/g, "-")}`;
3
-
4
- export {
5
- getControlId,
6
- getControlSetterButtonId
7
- };