@storybook/addon-docs 10.6.0-alpha.6 → 10.6.0-alpha.8

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,17 +1,41 @@
1
+ // src/blocks/components/SnippetWarning.tsx
2
+ import React from "react";
3
+ import { Button } from "storybook/internal/components";
4
+ import { AlertIcon } from "@storybook/icons";
5
+ import { styled } from "storybook/theming";
6
+ var SNIPPET_WARNING_LABEL = "Incomplete code snippet", WarningButton = styled(Button)(({ theme }) => ({
7
+ color: theme.fgColor.warning,
8
+ "&:hover, &:focus-visible": {
9
+ color: theme.fgColor.warning,
10
+ background: theme.bgColor.warning
11
+ }
12
+ })), SnippetWarning = ({ warning, className }) => warning?.trim() ? React.createElement(
13
+ WarningButton,
14
+ {
15
+ className,
16
+ ariaLabel: SNIPPET_WARNING_LABEL,
17
+ tooltip: warning,
18
+ variant: "ghost",
19
+ size: "small",
20
+ padding: "small"
21
+ },
22
+ React.createElement(AlertIcon, null)
23
+ ) : null;
24
+
1
25
  // src/blocks/components/Source.tsx
2
- import React2 from "react";
26
+ import React3 from "react";
3
27
  import { SyntaxHighlighter } from "storybook/internal/components";
4
28
  import {
5
29
  ThemeProvider,
6
30
  convert,
7
31
  ignoreSsrWarning,
8
- styled as styled2,
32
+ styled as styled3,
9
33
  themes,
10
34
  useTheme
11
35
  } from "storybook/theming";
12
36
 
13
37
  // src/blocks/components/EmptyBlock.tsx
14
- import React from "react";
38
+ import React2 from "react";
15
39
  import { withReset } from "storybook/internal/components";
16
40
 
17
41
  // ../../../node_modules/@babel/runtime/helpers/esm/extends.js
@@ -851,8 +875,8 @@ function transparentize(amount, color) {
851
875
  var curriedTransparentize = curry(transparentize), curriedTransparentize$1 = curriedTransparentize;
852
876
 
853
877
  // src/blocks/components/EmptyBlock.tsx
854
- import { styled } from "storybook/theming";
855
- var Wrapper = styled.div(withReset, ({ theme }) => ({
878
+ import { styled as styled2 } from "storybook/theming";
879
+ var Wrapper = styled2.div(withReset, ({ theme }) => ({
856
880
  backgroundColor: theme.base === "light" ? "rgba(0,0,0,.01)" : "rgba(255,255,255,.01)",
857
881
  borderRadius: theme.appBorderRadius,
858
882
  border: `1px dashed ${theme.appBorderColor}`,
@@ -863,10 +887,10 @@ var Wrapper = styled.div(withReset, ({ theme }) => ({
863
887
  margin: "25px 0 40px",
864
888
  color: curriedTransparentize$1(0.3, theme.color.defaultText),
865
889
  fontSize: theme.typography.size.s2
866
- })), EmptyBlock = (props) => React.createElement(Wrapper, { ...props, className: "docblock-emptyblock sb-unstyled" });
890
+ })), EmptyBlock = (props) => React2.createElement(Wrapper, { ...props, className: "docblock-emptyblock sb-unstyled" });
867
891
 
868
892
  // src/blocks/components/Source.tsx
869
- var StyledSyntaxHighlighter = styled2(
893
+ var StyledSyntaxHighlighter = styled3(
870
894
  SyntaxHighlighter
871
895
  )(({ theme }) => ({
872
896
  // DocBlocks-specific styling and overrides
@@ -880,14 +904,21 @@ var StyledSyntaxHighlighter = styled2(
880
904
  background: "inherit"
881
905
  }
882
906
  }));
883
- var SourceSkeletonWrapper = styled2.div(({ theme }) => ({
907
+ var PositionedSnippetWarning = styled3(SnippetWarning)({
908
+ position: "absolute",
909
+ top: 4,
910
+ right: 4,
911
+ zIndex: 1
912
+ }), SourceWrapper = styled3.div({
913
+ position: "relative"
914
+ }), SourceSkeletonWrapper = styled3.div(({ theme }) => ({
884
915
  background: theme.background.content,
885
916
  borderRadius: theme.appBorderRadius,
886
917
  border: `1px solid ${theme.appBorderColor}`,
887
918
  boxShadow: theme.base === "light" ? "rgba(0, 0, 0, 0.10) 0 1px 3px 0" : "rgba(0, 0, 0, 0.20) 0 2px 5px 0",
888
919
  margin: "25px 0 40px",
889
920
  padding: "20px 20px 20px 22px"
890
- })), SourceSkeletonPlaceholder = styled2.div(({ theme }) => ({
921
+ })), SourceSkeletonPlaceholder = styled3.div(({ theme }) => ({
891
922
  animation: `${theme.animation.glow} 1.5s ease-in-out infinite`,
892
923
  background: theme.appBorderColor,
893
924
  height: 17,
@@ -896,7 +927,7 @@ var SourceSkeletonWrapper = styled2.div(({ theme }) => ({
896
927
  [`&:first-child${ignoreSsrWarning}`]: {
897
928
  margin: 0
898
929
  }
899
- })), SourceSkeleton = () => React2.createElement(SourceSkeletonWrapper, null, React2.createElement(SourceSkeletonPlaceholder, null), React2.createElement(SourceSkeletonPlaceholder, { style: { width: "80%" } }), React2.createElement(SourceSkeletonPlaceholder, { style: { width: "30%" } }), React2.createElement(SourceSkeletonPlaceholder, { style: { width: "80%" } })), Source = ({
930
+ })), SourceSkeleton = () => React3.createElement(SourceSkeletonWrapper, null, React3.createElement(SourceSkeletonPlaceholder, null), React3.createElement(SourceSkeletonPlaceholder, { style: { width: "80%" } }), React3.createElement(SourceSkeletonPlaceholder, { style: { width: "30%" } }), React3.createElement(SourceSkeletonPlaceholder, { style: { width: "80%" } })), Source = ({
900
931
  isLoading,
901
932
  error,
902
933
  language,
@@ -904,14 +935,15 @@ var SourceSkeletonWrapper = styled2.div(({ theme }) => ({
904
935
  dark,
905
936
  format: format2 = !0,
906
937
  copyable = !0,
938
+ warning,
907
939
  ...rest
908
940
  }) => {
909
941
  let { typography } = useTheme();
910
942
  if (isLoading)
911
- return React2.createElement(SourceSkeleton, null);
943
+ return React3.createElement(SourceSkeleton, null);
912
944
  if (error)
913
- return React2.createElement(EmptyBlock, null, error);
914
- let syntaxHighlighter = React2.createElement(
945
+ return React3.createElement(EmptyBlock, null, error);
946
+ let highlighter = React3.createElement(
915
947
  StyledSyntaxHighlighter,
916
948
  {
917
949
  bordered: !0,
@@ -922,11 +954,11 @@ var SourceSkeletonWrapper = styled2.div(({ theme }) => ({
922
954
  ...rest
923
955
  },
924
956
  code
925
- );
957
+ ), syntaxHighlighter = warning ? React3.createElement(SourceWrapper, null, highlighter, React3.createElement(PositionedSnippetWarning, { warning })) : highlighter;
926
958
  if (typeof dark > "u")
927
959
  return syntaxHighlighter;
928
960
  let overrideTheme = dark ? themes.dark : themes.light;
929
- return React2.createElement(
961
+ return React3.createElement(
930
962
  ThemeProvider,
931
963
  {
932
964
  theme: convert({
@@ -940,6 +972,7 @@ var SourceSkeletonWrapper = styled2.div(({ theme }) => ({
940
972
  };
941
973
 
942
974
  export {
975
+ SnippetWarning,
943
976
  rgba,
944
977
  curriedDarken$1,
945
978
  curriedLighten$1,
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.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_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.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_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
@@ -12,17 +12,17 @@ var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url)
12
12
  import {
13
13
  esm_default,
14
14
  stringify
15
- } from "./chunk-5C7V4PBI.js";
15
+ } from "./chunk-REBXNTVL.js";
16
16
  import {
17
17
  visit
18
- } from "./chunk-NVMIFCHL.js";
18
+ } from "./chunk-6WL4S62N.js";
19
19
  import {
20
20
  __commonJS,
21
21
  __esm,
22
22
  __export,
23
23
  __toCommonJS,
24
24
  __toESM
25
- } from "./chunk-U2YGHAXE.js";
25
+ } from "./chunk-BNKEYVDY.js";
26
26
 
27
27
  // ../../../node_modules/acorn-jsx/xhtml.js
28
28
  var require_xhtml = __commonJS({
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.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_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.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-S7QDD6WA.js";
15
- import "./chunk-5C7V4PBI.js";
16
- import "./chunk-NVMIFCHL.js";
14
+ } from "./chunk-PAAB5ORS.js";
15
+ import "./chunk-REBXNTVL.js";
16
+ import "./chunk-6WL4S62N.js";
17
17
  import {
18
18
  __commonJS,
19
19
  __toESM
20
- } from "./chunk-U2YGHAXE.js";
20
+ } from "./chunk-BNKEYVDY.js";
21
21
 
22
22
  // ../../../node_modules/@rollup/pluginutils/node_modules/picomatch/lib/constants.js
23
23
  var require_constants = __commonJS({
@@ -1153,7 +1153,7 @@ var hasStringIsWellFormed = "isWellFormed" in String.prototype;
1153
1153
 
1154
1154
  // src/mdx-plugin.ts
1155
1155
  async function mdxPlugin(options) {
1156
- let include = /\.mdx$/, filter = createFilter(include), { presets } = options, mdxPluginOptions = (await presets.apply("options", {}))?.mdxPluginOptions, rehypeSlug = (await import("./rehype-slug-IRO4RPTE.js")).default, rehypeExternalLinks = (await import("./rehype-external-links-TBQC6AKY.js")).default;
1156
+ let include = /\.mdx$/, filter = createFilter(include), { presets } = options, mdxPluginOptions = (await presets.apply("options", {}))?.mdxPluginOptions, rehypeSlug = (await import("./rehype-slug-UL2737TS.js")).default, rehypeExternalLinks = (await import("./rehype-external-links-KAD54GUY.js")).default;
1157
1157
  return {
1158
1158
  name: "storybook:mdx-plugin",
1159
1159
  enforce: "pre",
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.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_0xz6foulbll8.createRequire(import.meta.url)
12
12
  import {
13
13
  esm_default,
14
14
  parse
15
- } from "./chunk-5C7V4PBI.js";
15
+ } from "./chunk-REBXNTVL.js";
16
16
  import {
17
17
  visit
18
- } from "./chunk-NVMIFCHL.js";
19
- import "./chunk-U2YGHAXE.js";
18
+ } from "./chunk-6WL4S62N.js";
19
+ import "./chunk-BNKEYVDY.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_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.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-NVMIFCHL.js";
15
- import "./chunk-U2YGHAXE.js";
14
+ } from "./chunk-6WL4S62N.js";
15
+ import "./chunk-BNKEYVDY.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;
@@ -1,4 +1,5 @@
1
1
  //#region code/addons/docs/.dts-emit/code/addons/docs/src/angular/index.d.ts
2
+ /** Hand Compodoc's `documentation.json` to the Angular preview so Controls and Docs can read it. */
2
3
  declare const setCompodocJson: (compodocJson: any) => void;
3
4
  //#endregion
4
5
  export { setCompodocJson };
@@ -1,7 +1,14 @@
1
1
  import "../_browser-chunks/chunk-UAWMPV5J.js";
2
2
 
3
3
  // src/angular/index.ts
4
- var setCompodocJson = (compodocJson) => {
4
+ import { logger } from "storybook/internal/client-logger";
5
+ var warnedRedundant = !1, setCompodocJson = (compodocJson) => {
6
+ if (globalThis.FEATURES?.experimentalDocgenServer) {
7
+ warnedRedundant || (warnedRedundant = !0, logger.warn(
8
+ "setCompodocJson() had no effect: with the experimentalDocgenServer feature enabled, Storybook extracts Angular metadata on the server and never reads Compodoc output. You can delete the setCompodocJson call and the documentation.json import from your preview config."
9
+ ));
10
+ return;
11
+ }
5
12
  globalThis.__STORYBOOK_COMPODOC_JSON__ = compodocJson;
6
13
  };
7
14
  export {
package/dist/blocks.d.ts CHANGED
@@ -3,9 +3,9 @@ import * as React$1 from "react";
3
3
  import React, { ComponentProps, Context, FC, FunctionComponent, PropsWithChildren, ReactElement, ReactNode } from "react";
4
4
  import { Args, BaseAnnotations, ComponentTitle, Conditional, DocsContextProps as DocsContextProps$1, ModuleExport, ModuleExports, Parameters as Parameters$1, PreparedStory, ProjectAnnotations, Renderer, ResolvedModuleExportFromType, ResolvedModuleExportType, StoryId } from "storybook/internal/types";
5
5
  import { ActionItem, SupportedLanguage, SyntaxHighlighter, SyntaxHighlighterFormatTypes } from "storybook/internal/components";
6
+ import { SourceType, anchorBlockIdFromId } from "storybook/internal/docs-tools";
6
7
  import { Renderer as Renderer$1 } from "storybook/internal/csf";
7
8
  import { PropDescriptor } from "storybook/preview-api";
8
- import { SourceType } from "storybook/internal/docs-tools";
9
9
 
10
10
  //#region code/addons/docs/.dts-emit/code/addons/docs/src/blocks/components/Source.d.ts
11
11
  declare enum SourceError {
@@ -27,6 +27,8 @@ interface SourceCodeProps {
27
27
  interface SourceProps$1 extends SourceCodeProps {
28
28
  isLoading?: boolean;
29
29
  error?: SourceError;
30
+ /** Why the snippet is an incomplete example, when it is one; see `StoryDoc.warning`. */
31
+ warning?: string;
30
32
  }
31
33
  /** Syntax-highlighted source code for a component (or anything!) */
32
34
  declare const Source$1: FunctionComponent<SourceProps$1>;
@@ -83,7 +85,8 @@ type Globals = {
83
85
  //#region code/addons/docs/.dts-emit/code/addons/docs/src/blocks/components/ArgsTable/ArgsTable.d.ts
84
86
  declare enum ArgsTableError {
85
87
  NO_COMPONENT = "No component found.",
86
- ARGS_UNSUPPORTED = "Args unsupported. See Args documentation for your framework."
88
+ ARGS_UNSUPPORTED = "Args unsupported. See Args documentation for your framework.",
89
+ NOT_A_STORY_COMPONENT = "No docs found for this component on this page. Import the story file whose meta.component is this component, or pass `of={ComponentStories}`."
87
90
  }
88
91
  type SortType = 'alpha' | 'requiredFirst' | 'none';
89
92
  interface ArgsTableOptionProps {
@@ -188,7 +191,6 @@ interface IconGalleryProps {
188
191
  declare const IconGallery: FunctionComponent<IconGalleryProps>;
189
192
  //#endregion
190
193
  //#region code/addons/docs/.dts-emit/code/addons/docs/src/blocks/blocks/Anchor.d.ts
191
- declare const anchorBlockIdFromId: (storyId: string) => string;
192
194
  interface AnchorProps {
193
195
  storyId: string;
194
196
  }
@@ -211,6 +213,8 @@ declare function argsHash(args: Args): ArgsHash;
211
213
  interface SourceItem {
212
214
  code: string;
213
215
  format?: SyntaxHighlighterFormatTypes;
216
+ /** Why `code` is an incomplete example, when it is one; see `StoryDoc.warning`. */
217
+ warning?: string;
214
218
  }
215
219
  type StorySources = Record<StoryId, Record<ArgsHash, SourceItem>>;
216
220
  interface SourceContextProps {
@@ -244,7 +248,7 @@ type SourceProps = SourceParameters & {
244
248
  __forceInitialArgs?: boolean;
245
249
  };
246
250
  type PureSourceProps = ComponentProps<typeof Source$1>;
247
- declare const useSourceProps: (props: SourceProps, docsContext: DocsContextProps, sourceContext: SourceContextProps, serviceSnippet?: string) => PureSourceProps;
251
+ declare const useSourceProps: (props: SourceProps, docsContext: DocsContextProps, sourceContext: SourceContextProps, serviceSnippet?: string, serviceWarning?: string) => PureSourceProps;
248
252
  declare const Source: React.ComponentType<SourceProps>;
249
253
  //#endregion
250
254
  //#region code/addons/docs/.dts-emit/code/addons/docs/src/blocks/blocks/Story.d.ts
package/dist/blocks.js CHANGED
@@ -4,13 +4,14 @@ import {
4
4
  } from "./_browser-chunks/chunk-QQBDHPVZ.js";
5
5
  import {
6
6
  EmptyBlock,
7
+ SnippetWarning,
7
8
  Source,
8
9
  curriedDarken$1,
9
10
  curriedLighten$1,
10
11
  curriedOpacify$1,
11
12
  curriedTransparentize$1,
12
13
  rgba
13
- } from "./_browser-chunks/chunk-SPXYZZB5.js";
14
+ } from "./_browser-chunks/chunk-Q6BGOKFZ.js";
14
15
  import "./_browser-chunks/chunk-UAWMPV5J.js";
15
16
 
16
17
  // src/blocks/components/ArgsTable/ArgsTable.tsx
@@ -4518,7 +4519,7 @@ import React29 from "react";
4518
4519
  import { Button as Button6, Toolbar as SharedToolbar } from "storybook/internal/components";
4519
4520
  import { ShareAltIcon, SyncIcon, ZoomIcon, ZoomOutIcon, ZoomResetIcon } from "@storybook/icons";
4520
4521
  import { styled as styled21 } from "storybook/theming";
4521
- var AbsoluteBar = styled21(SharedToolbar)({
4522
+ var TRAILING_INSET = 10, AbsoluteBar = styled21(SharedToolbar)({
4522
4523
  position: "absolute",
4523
4524
  left: 0,
4524
4525
  right: 0,
@@ -4547,7 +4548,12 @@ var AbsoluteBar = styled21(SharedToolbar)({
4547
4548
  }) => React29.createElement(
4548
4549
  AbsoluteBar,
4549
4550
  {
4550
- innerStyle: { gap: 4, paddingInline: 7, justifyContent: "space-between" },
4551
+ innerStyle: {
4552
+ gap: 4,
4553
+ paddingInline: 7,
4554
+ paddingInlineEnd: TRAILING_INSET - 1,
4555
+ justifyContent: "space-between"
4556
+ },
4551
4557
  lang: "en",
4552
4558
  ...rest
4553
4559
  },
@@ -4645,6 +4651,9 @@ var ChildrenContainer = styled22.div(
4645
4651
  ), ActionBar = styled22(Bar)({
4646
4652
  marginTop: -40,
4647
4653
  marginBottom: 40
4654
+ }), TrailingSnippetWarning = styled22(SnippetWarning)({
4655
+ marginInlineStart: "auto",
4656
+ marginInlineEnd: TRAILING_INSET
4648
4657
  }), StyledSource = styled22(Source)(({ theme }) => ({
4649
4658
  margin: 0,
4650
4659
  borderTopLeftRadius: 0,
@@ -4711,7 +4720,7 @@ var PositionedToolbar = styled22(Toolbar)({
4711
4720
  logger4.error(err), setCopied("Copy error!");
4712
4721
  }
4713
4722
  globalThis.window.setTimeout(() => setCopied(null), COPIED_LABEL_ANIMATION_DURATION);
4714
- }, [copyToClipboard, withSource?.code]), childProps = getChildProps(children), hasSourceError = !!(withSource && withSource.error), hasValidSource = !!(withSource && !withSource.error);
4723
+ }, [copyToClipboard, withSource?.code]), childProps = getChildProps(children), { warning: sourceWarning, ...sourceProps } = withSource ?? {}, hasSourceError = !!(withSource && withSource.error), hasValidSource = !!(withSource && !withSource.error);
4715
4724
  return React30.createElement(React30.Fragment, null, React30.createElement(
4716
4725
  PreviewContainer,
4717
4726
  {
@@ -4742,7 +4751,7 @@ var PositionedToolbar = styled22(Toolbar)({
4742
4751
  },
4743
4752
  React30.createElement(Zoom.Element, { centered: layout === "centered", scale: inline ? scale : 1 }, Array.isArray(children) ? children.map((child, i2) => React30.createElement("div", { key: i2 }, child)) : React30.createElement("div", null, children))
4744
4753
  )),
4745
- hasValidSource && expanded && React30.createElement("div", { id: sourceId }, React30.createElement(StyledSource, { ...withSource, dark: !0, copyable: !1 }))
4754
+ hasValidSource && expanded && React30.createElement("div", { id: sourceId }, React30.createElement(StyledSource, { ...sourceProps, dark: !0, copyable: !1 }))
4746
4755
  ), (withSource || additionalActionItems.length > 0) && React30.createElement(ActionBar, { className: "sbdocs sbdocs-preview-actions", innerStyle: { paddingInline: 0 } }, hasSourceError && React30.createElement(
4747
4756
  Button7,
4748
4757
  {
@@ -4782,7 +4791,7 @@ var PositionedToolbar = styled22(Toolbar)({
4782
4791
  },
4783
4792
  title
4784
4793
  )
4785
- )));
4794
+ ), hasValidSource && React30.createElement(TrailingSnippetWarning, { warning: sourceWarning })));
4786
4795
  }, StyledPreview = styled22(Preview)(() => ({
4787
4796
  ".docs-story": {
4788
4797
  paddingTop: 32,
@@ -5637,7 +5646,8 @@ var Aside = styled27.aside(() => ({
5637
5646
 
5638
5647
  // src/blocks/blocks/Anchor.tsx
5639
5648
  import React36 from "react";
5640
- var anchorBlockIdFromId = (storyId) => `anchor--${storyId}`, Anchor = ({ storyId, children }) => React36.createElement("div", { id: anchorBlockIdFromId(storyId), className: "sb-anchor" }, children);
5649
+ import { anchorBlockIdFromId } from "storybook/internal/docs-tools";
5650
+ var Anchor = ({ storyId, children }) => React36.createElement("div", { id: anchorBlockIdFromId(storyId), className: "sb-anchor" }, children);
5641
5651
 
5642
5652
  // src/blocks/blocks/ArgTypes.tsx
5643
5653
  import React37, { useContext as useContext4 } from "react";
@@ -5775,7 +5785,7 @@ function useResolveArgTypes(props) {
5775
5785
  resolvedArgTypes = {
5776
5786
  parameters,
5777
5787
  // Bare `of={Component}` has no story/meta annotations; the docgen service is addressed by
5778
- // component id, recovered from the CSF file that declares this component.
5788
+ // component id, recovered by searching only the CSF files this docs page imports.
5779
5789
  componentId: context.getComponentId(component),
5780
5790
  argTypes: extractComponentArgTypes(component, parameters),
5781
5791
  component
@@ -5848,7 +5858,18 @@ var LegacyArgTypes = (props) => {
5848
5858
  ...filterProps
5849
5859
  }) : null;
5850
5860
  }, DocgenServiceArgTypes = (props) => {
5851
- let { argTypes, parameters, componentId, storyId, initialArgs, filterProps, component } = useResolveArgTypes(props), { rows: serviceRows, isInitialLoading } = useDocgenServiceRows({
5861
+ let resolved = useResolveArgTypes(props);
5862
+ return resolved.componentId === void 0 ? React37.createElement(ArgsTable, { error: "No docs found for this component on this page. Import the story file whose meta.component is this component, or pass `of={ComponentStories}`." /* NOT_A_STORY_COMPONENT */ }) : React37.createElement(DocgenServiceArgTypesRows, { ...resolved, componentId: resolved.componentId });
5863
+ }, DocgenServiceArgTypesRows = ({
5864
+ argTypes,
5865
+ parameters,
5866
+ componentId,
5867
+ storyId,
5868
+ initialArgs,
5869
+ filterProps,
5870
+ component
5871
+ }) => {
5872
+ let { rows: serviceRows, isInitialLoading } = useDocgenServiceRows({
5852
5873
  componentId,
5853
5874
  storyId,
5854
5875
  parameters,
@@ -6913,7 +6934,8 @@ var SourceContext = createContext3({ sources: {} }), UNKNOWN_ARGS_HASH = "--unkn
6913
6934
  id,
6914
6935
  args = void 0,
6915
6936
  source,
6916
- format: format2
6937
+ format: format2,
6938
+ warning = void 0
6917
6939
  } = typeof idOrEvent == "string" ? {
6918
6940
  id: idOrEvent,
6919
6941
  source: inputSource,
@@ -6923,7 +6945,7 @@ var SourceContext = createContext3({ sources: {} }), UNKNOWN_ARGS_HASH = "--unkn
6923
6945
  ...current,
6924
6946
  [id]: {
6925
6947
  ...current[id],
6926
- [hash]: { code: source || "", format: format2 }
6948
+ [hash]: { code: source || "", format: format2, warning }
6927
6949
  }
6928
6950
  }));
6929
6951
  };
@@ -6933,7 +6955,11 @@ var SourceContext = createContext3({ sources: {} }), UNKNOWN_ARGS_HASH = "--unkn
6933
6955
 
6934
6956
  // src/blocks/blocks/use-service-story-docs.ts
6935
6957
  import { useCallback as useCallback9 } from "react";
6936
- import { selectSnippetForStory, selectStoryDoc } from "storybook/open-service";
6958
+ import {
6959
+ selectSnippetForStory,
6960
+ selectStoryDoc,
6961
+ selectWarningForStory
6962
+ } from "storybook/open-service";
6937
6963
  import { getService as getService2 } from "storybook/preview-api";
6938
6964
  function useServiceStory(storyId, selector) {
6939
6965
  let componentId = storyId.split("--")[0], service = getService2("core/story-docs", { internal: !0 }), boundSelector = useCallback9(
@@ -6953,6 +6979,9 @@ function useServiceStoryDoc(storyId) {
6953
6979
  function useServiceStorySnippet(storyId) {
6954
6980
  return useServiceStory(storyId, selectSnippetForStory);
6955
6981
  }
6982
+ function useServiceStoryWarning(storyId) {
6983
+ return useServiceStory(storyId, selectWarningForStory);
6984
+ }
6956
6985
 
6957
6986
  // src/blocks/blocks/useTransformCode.tsx
6958
6987
  import { useEffect as useEffect14, useState as useState16 } from "react";
@@ -6981,7 +7010,7 @@ var EMPTY_SOURCE_CONTEXT = { sources: {} }, getStorySource = (storyId, args, sou
6981
7010
  let parameters = storyContext.parameters ?? {}, { __isArgsStory: isArgsStory } = parameters, sourceParameters = parameters.docs?.source || {}, type = typeFromProps || sourceParameters.type || SourceType.AUTO, staticSnippet = serviceSnippet || snippet, code = /* if user has explicitly set this as dynamic, use snippet */ type === SourceType.DYNAMIC || // if this is an args story and there's a snippet
6982
7011
  type === SourceType.AUTO && staticSnippet && isArgsStory ? staticSnippet : sourceParameters.originalSource || "", transformer = transformFromProps ?? sourceParameters.transform, transformedCode = transformer ? useTransformCode(code, transformer, storyContext) : code;
6983
7012
  return sourceParameters.code !== void 0 ? sourceParameters.code : transformedCode;
6984
- }, useSourceProps = (props, docsContext, sourceContext, serviceSnippet = "") => {
7013
+ }, useSourceProps = (props, docsContext, sourceContext, serviceSnippet = "", serviceWarning) => {
6985
7014
  let { of } = props, story = useMemo4(() => {
6986
7015
  if (of)
6987
7016
  return docsContext.resolveOf(of, ["story"]).story;
@@ -6999,19 +7028,32 @@ var EMPTY_SOURCE_CONTEXT = { sources: {} }, getStorySource = (storyId, args, sou
6999
7028
  if ("of" in props && of === void 0)
7000
7029
  throw new InvalidBlockOfPropError3();
7001
7030
  let sourceParameters = story?.parameters?.docs?.source || {}, format2 = props.format, language = props.language ?? sourceParameters.language ?? "jsx", dark = props.dark ?? sourceParameters.dark ?? !1;
7002
- return props.code === void 0 && !story ? { error: "Oh no! The source is not available." /* SOURCE_UNAVAILABLE */ } : props.code !== void 0 ? {
7003
- code: props.code,
7004
- format: format2,
7005
- language,
7006
- dark
7007
- } : (format2 = source?.format ?? !0, {
7031
+ if (props.code === void 0 && !story)
7032
+ return { error: "Oh no! The source is not available." /* SOURCE_UNAVAILABLE */ };
7033
+ if (props.code !== void 0)
7034
+ return {
7035
+ code: props.code,
7036
+ format: format2,
7037
+ language,
7038
+ dark
7039
+ };
7040
+ format2 = source?.format ?? !0;
7041
+ let warning;
7042
+ return transformedCode === serviceSnippet ? warning = serviceWarning : transformedCode === source?.code && (warning = source.warning), {
7008
7043
  code: transformedCode,
7009
7044
  format: format2,
7010
7045
  language,
7011
- dark
7012
- });
7046
+ dark,
7047
+ warning
7048
+ };
7013
7049
  }, SourceWithStoryDocsSnippet = ({ storyId, docsContext, sourceContext, ...props }) => {
7014
- let serviceSnippet = useServiceStorySnippet(storyId).data ?? "", sourceProps = useSourceProps(props, docsContext, sourceContext, serviceSnippet);
7050
+ let serviceSnippet = useServiceStorySnippet(storyId).data ?? "", serviceWarning = useServiceStoryWarning(storyId).data, sourceProps = useSourceProps(
7051
+ props,
7052
+ docsContext,
7053
+ sourceContext,
7054
+ serviceSnippet,
7055
+ serviceWarning
7056
+ );
7015
7057
  return React39.createElement(Source, { ...sourceProps });
7016
7058
  }, SourceWithStorySnippet = (props) => {
7017
7059
  let { of } = props, sourceContext = useContext5(SourceContext), docsContext = useContext5(DocsContext), story = useMemo4(() => {
@@ -1,15 +1,15 @@
1
- import CJS_COMPAT_NODE_URL_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.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-U2YGHAXE.js";
12
+ import "../_node-chunks/chunk-BNKEYVDY.js";
13
13
 
14
14
  // src/csf-plugin/webpack-loader.ts
15
15
  import { readFile } from "node:fs/promises";
package/dist/manager.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import {
2
+ SnippetWarning,
2
3
  Source
3
- } from "./_browser-chunks/chunk-SPXYZZB5.js";
4
+ } from "./_browser-chunks/chunk-Q6BGOKFZ.js";
4
5
  import "./_browser-chunks/chunk-UAWMPV5J.js";
5
6
 
6
7
  // src/manager.tsx
@@ -24,7 +25,8 @@ var CodePanel = ({
24
25
  }) => {
25
26
  let lastEventMatchesCurrentStory = lastEvent?.id === currentStoryId, [codeSnippet, setSourceCode] = useState({
26
27
  source: lastEventMatchesCurrentStory ? lastEvent?.source : void 0,
27
- format: lastEventMatchesCurrentStory ? lastEvent?.format ?? void 0 : void 0
28
+ format: lastEventMatchesCurrentStory ? lastEvent?.format ?? void 0 : void 0,
29
+ warning: lastEventMatchesCurrentStory ? lastEvent?.warning : void 0
28
30
  }), parameter = useParameter(PARAM_KEY, {
29
31
  source: { code: "" },
30
32
  theme: "dark"
@@ -32,18 +34,19 @@ var CodePanel = ({
32
34
  useEffect(() => {
33
35
  setSourceCode({
34
36
  source: void 0,
35
- format: void 0
37
+ format: void 0,
38
+ warning: void 0
36
39
  });
37
40
  }, [currentStoryId]), useChannel(
38
41
  {
39
- [SNIPPET_RENDERED]: ({ id, source, format }) => {
40
- id !== void 0 && id !== currentStoryId || setSourceCode({ source, format });
42
+ [SNIPPET_RENDERED]: ({ id, source, format, warning: warning2 }) => {
43
+ id !== void 0 && id !== currentStoryId || setSourceCode({ source, format, warning: warning2 });
41
44
  }
42
45
  },
43
46
  [currentStoryId]
44
47
  );
45
- let isDark = useTheme().base !== "light", awaitingServiceSnippet = shouldWaitForServiceSnippet(storyParameters, storyPrepared), code = parameter.source?.code || codeSnippet.source || (awaitingServiceSnippet ? "" : parameter.source?.originalSource);
46
- return React.createElement(AddonPanel, { active: !!active }, React.createElement(SourceStyles, null, React.createElement(Source, { ...parameter.source, code, format: codeSnippet.format, dark: isDark })));
48
+ let isDark = useTheme().base !== "light", awaitingServiceSnippet = shouldWaitForServiceSnippet(storyParameters, storyPrepared), code = parameter.source?.code || codeSnippet.source || (awaitingServiceSnippet ? "" : parameter.source?.originalSource), warning = parameter.source?.code ? void 0 : codeSnippet.warning;
49
+ return React.createElement(AddonPanel, { active: !!active }, React.createElement(SourceStyles, null, React.createElement(Source, { ...parameter.source, code, format: codeSnippet.format, dark: isDark }), React.createElement(PositionedSnippetWarning, { warning })));
47
50
  };
48
51
  addons.register(ADDON_ID, (api) => {
49
52
  addons.add(PANEL_ID, {
@@ -80,11 +83,16 @@ addons.register(ADDON_ID, (api) => {
80
83
  }
81
84
  });
82
85
  });
83
- var SourceStyles = styled.div(() => ({
86
+ var SourceStyles = styled.div({
84
87
  height: "100%",
88
+ position: "relative",
85
89
  [`> :first-child${ignoreSsrWarning}`]: {
86
90
  margin: 0,
87
91
  height: "100%",
88
92
  boxShadow: "none"
89
93
  }
90
- }));
94
+ }), PositionedSnippetWarning = styled(SnippetWarning)({
95
+ position: "absolute",
96
+ top: 8,
97
+ right: 10
98
+ });
@@ -1,20 +1,20 @@
1
- import CJS_COMPAT_NODE_URL_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.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-S7QDD6WA.js";
15
- import "./_node-chunks/chunk-5C7V4PBI.js";
16
- import "./_node-chunks/chunk-NVMIFCHL.js";
17
- import "./_node-chunks/chunk-U2YGHAXE.js";
14
+ } from "./_node-chunks/chunk-PAAB5ORS.js";
15
+ import "./_node-chunks/chunk-REBXNTVL.js";
16
+ import "./_node-chunks/chunk-6WL4S62N.js";
17
+ import "./_node-chunks/chunk-BNKEYVDY.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_0xz6foulbll8 from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_0xz6foulbll8 from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_0xz6foulbll8 from "node:module";
1
+ import CJS_COMPAT_NODE_URL_dgqus2stgw from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_dgqus2stgw from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_dgqus2stgw from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_0xz6foulbll8.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_0xz6foulbll8.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_0xz6foulbll8.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_dgqus2stgw.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_dgqus2stgw.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_dgqus2stgw.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-U2YGHAXE.js";
12
+ import "./_node-chunks/chunk-BNKEYVDY.js";
13
13
 
14
14
  // src/preset.ts
15
15
  import { isAbsolute as isAbsolute2 } from "node:path";
@@ -807,7 +807,7 @@ var getResolvedReact = async (options) => {
807
807
  };
808
808
  };
809
809
  async function webpack2(webpackConfig = {}, options) {
810
- let { module = {} } = webpackConfig, { csfPluginOptions = {}, mdxPluginOptions = {} } = options, enrichCsf2 = await options.presets.apply("experimental_enrichCsf"), rehypeSlug = (await import("./_node-chunks/rehype-slug-IRO4RPTE.js")).default, rehypeExternalLinks = (await import("./_node-chunks/rehype-external-links-TBQC6AKY.js")).default, mdxLoaderOptions = await options.presets.apply("mdxLoaderOptions", {
810
+ let { module = {} } = webpackConfig, { csfPluginOptions = {}, mdxPluginOptions = {} } = options, enrichCsf2 = await options.presets.apply("experimental_enrichCsf"), rehypeSlug = (await import("./_node-chunks/rehype-slug-UL2737TS.js")).default, rehypeExternalLinks = (await import("./_node-chunks/rehype-external-links-KAD54GUY.js")).default, mdxLoaderOptions = await options.presets.apply("mdxLoaderOptions", {
811
811
  ...mdxPluginOptions,
812
812
  mdxCompileOptions: {
813
813
  providerImportSource: fileURLToPath3(
@@ -885,7 +885,7 @@ var docs = (input = {}, options) => {
885
885
  }, addons = [
886
886
  import.meta.resolve("@storybook/react-dom-shim/preset")
887
887
  ], viteFinal = async (config, options) => {
888
- let { plugins = [] } = config, { csfPluginOptions = {} } = options, { mdxPlugin } = await import("./_node-chunks/mdx-plugin-3DFPEYTF.js"), enrichCsf2 = await options.presets.apply("experimental_enrichCsf"), { react, reactDom, mdx } = await getResolvedReact(options), packageDeduplicationPlugin = {
888
+ let { plugins = [] } = config, { csfPluginOptions = {} } = options, { mdxPlugin } = await import("./_node-chunks/mdx-plugin-KTB3ISIL.js"), enrichCsf2 = await options.presets.apply("experimental_enrichCsf"), { react, reactDom, mdx } = await getResolvedReact(options), packageDeduplicationPlugin = {
889
889
  name: "storybook:package-deduplication",
890
890
  enforce: "pre",
891
891
  config: () => ({
@@ -915,12 +915,9 @@ var docs = (input = {}, options) => {
915
915
  mdx: existing?.mdx ?? fileURLToPath3(import.meta.resolve("@mdx-js/react"))
916
916
  }), services = async (_value, options) => {
917
917
  let features = await options.presets.apply("features");
918
- if (features?.experimentalDocgenServer && features?.componentsManifest && !options.ignorePreview) {
919
- let generator = await options.presets.apply("storyIndexGenerator");
920
- registerMdxService({
921
- getIndex: () => generator.getIndex()
922
- });
923
- }
918
+ features?.experimentalDocgenServer && features?.componentsManifest && !options.ignorePreview && registerMdxService({
919
+ getIndex: () => options.presets.apply("storyIndexGenerator").then((generator) => generator.getIndex())
920
+ });
924
921
  }, optimizeViteDeps = [
925
922
  "@storybook/addon-docs",
926
923
  "@storybook/addon-docs/blocks",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/addon-docs",
3
- "version": "10.6.0-alpha.6",
3
+ "version": "10.6.0-alpha.8",
4
4
  "description": "Storybook Docs: Document UI components automatically with stories and MDX",
5
5
  "keywords": [
6
6
  "docs",
@@ -88,7 +88,7 @@
88
88
  "dependencies": {
89
89
  "@mdx-js/react": "^3.0.0",
90
90
  "@storybook/icons": "^2.0.2",
91
- "@storybook/react-dom-shim": "10.6.0-alpha.6",
91
+ "@storybook/react-dom-shim": "10.6.0-alpha.8",
92
92
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
93
93
  "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
94
94
  "ts-dedent": "^2.0.0",
@@ -117,7 +117,7 @@
117
117
  },
118
118
  "peerDependencies": {
119
119
  "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
120
- "storybook": "^10.6.0-alpha.6"
120
+ "storybook": "^10.6.0-alpha.8"
121
121
  },
122
122
  "peerDependenciesMeta": {
123
123
  "@types/react": {