ember-storybook 0.1.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../src/client/docs/blocks/blocks.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAA8B,MAAM,cAAc,CAAC;AAE1E,eAAO,MAAM,SAAS;;;mGAInB,CAAC;AAOJ,eAAO,MAAM,QAAQ;;;yGAIlB,CAAC;AAsKJ,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,iBAAiB,EACjB,IAAI,EACL,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;;;2HAiCA;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,iBAAiB,EACjB,IAAI,EACL,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;;;sGAOA"}
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../src/client/docs/blocks/blocks.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAA8B,MAAM,cAAc,CAAC;AAE1E,eAAO,MAAM,SAAS;;;mGAInB,CAAC;AAOJ,eAAO,MAAM,QAAQ;;;yGAIlB,CAAC;AAyKJ,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,iBAAiB,EACjB,IAAI,EACL,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;;;2HAiCA;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,iBAAiB,EACjB,IAAI,EACL,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;;;sGAOA"}
@@ -1 +1 @@
1
- {"version":3,"file":"subcomponents.d.ts","sourceRoot":"","sources":["../../../../src/client/docs/blocks/subcomponents.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAgDpD,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,IAAI,EACL,EAAE;IACD,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;;;kHAmCA"}
1
+ {"version":3,"file":"subcomponents.d.ts","sourceRoot":"","sources":["../../../../src/client/docs/blocks/subcomponents.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAmDpD,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,IAAI,EACL,EAAE;IACD,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;;;kHAmCA"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/client/docs/config.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,wBAAwB,EACxB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAuBlC,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAC/B,OAAO,EAAE,wBAAwB,CAAC,aAAa,CAAC,KAC7C,cAAc,CAAC,EAkCnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAQxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,EAAsB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/client/docs/config.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,wBAAwB,EACxB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAuBlC,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAC/B,OAAO,EAAE,wBAAwB,CAAC,aAAa,CAAC,KAC7C,cAAc,CAAC,EAoCnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAQxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC,EAAsB,CAAC"}
@@ -1,3 +1,29 @@
1
1
  import type { ComponentSignature } from 'ember-docgen';
2
+ /**
3
+ * Returns a new argTypes object with entries sorted alphabetically by name,
4
+ * matching Storybook's `alpha` sort order. The input object is not mutated.
5
+ */
6
+ export declare function sortArgTypes(argTypes: Record<string, unknown>): Record<string, unknown>;
2
7
  export declare function buildArgTypes(sig: ComponentSignature): Record<string, unknown>;
8
+ /**
9
+ * Merges signature-derived argTypes with the story-provided argTypes.
10
+ *
11
+ * Signature argTypes are the base; story argTypes enhance them for better
12
+ * rendering (custom `name`, `control`, `options`, ...). For args present in
13
+ * both, story fields win — but only when they carry an actual value, so an
14
+ * explicit `undefined` never masks a signature field. The signature keeps the
15
+ * `table` and `description` the story does not override.
16
+ *
17
+ * The `type` object is deep-merged: a story-provided partial `type` (e.g.
18
+ * `type: 'string'`) keeps the signature's `required` flag unless the story
19
+ * explicitly sets it, while the story's `type.name` still wins.
20
+ */
21
+ export declare function mergeArgTypes(signatureArgTypes: Record<string, unknown>, storyArgTypes: Record<string, unknown>): Record<string, unknown>;
22
+ /**
23
+ * Whether the docs page should render the Args/controls table: either the
24
+ * component signature exposes args, or the meta carries story-provided
25
+ * argTypes (e.g. for a template-only component with story argTypes but no
26
+ * signature args).
27
+ */
28
+ export declare function shouldShowArgsSection(sig: ComponentSignature, metaArgTypes?: Record<string, unknown>): boolean;
3
29
  //# sourceMappingURL=extractArgTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extractArgTypes.d.ts","sourceRoot":"","sources":["../../../src/client/docs/extractArgTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAoCpE,wBAAgB,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoB9E"}
1
+ {"version":3,"file":"extractArgTypes.d.ts","sourceRoot":"","sources":["../../../src/client/docs/extractArgTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAoCpE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEvF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoB9E;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,EACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,OAAO,CAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/client/docs/page.ts"],"names":[],"mappings":"AAiFA,MAAM,CAAC,OAAO,UAAU,IAAI,4EAiC3B"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/client/docs/page.ts"],"names":[],"mappings":"AAuFA,MAAM,CAAC,OAAO,UAAU,IAAI,4EAiC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../src/client/docs/signature.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,SAAS,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3D,IAAI,EAAE,SAAS,GACd,MAAM,GAAG,SAAS,CAgBpB;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,kBAAkB,EAC7B,SAAS,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,GACjD,kBAAkB,CAsBpB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EACjC,IAAI,EAAE,SAAS,GACd,eAAe,EAAE,CA8CnB"}
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../src/client/docs/signature.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,SAAS,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3D,IAAI,EAAE,SAAS,GACd,MAAM,GAAG,SAAS,CAoBpB;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,kBAAkB,EAC7B,SAAS,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,GACjD,kBAAkB,CAsBpB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EACjC,IAAI,EAAE,SAAS,GACd,eAAe,EAAE,CAiDnB"}
@@ -3,7 +3,7 @@ import { t as unwrapBlockParams } from "../../block-params-C68OkWMC.mjs";
3
3
  import { emitTransformCode, useEffect, useRef } from "storybook/preview-api";
4
4
  import { SourceType } from "storybook/internal/docs-tools";
5
5
  import emberData from "virtual:ember-storybook";
6
- import { ArgTypes, Controls, Description, DocsContext, Heading, Primary, Stories, Subheading, Subtitle, Title, useOf } from "@storybook/addon-docs/blocks";
6
+ import { Controls, Description, DocsContext, Heading, Primary, PureArgsTable, Stories, Subheading, Subtitle, Title, useOf } from "@storybook/addon-docs/blocks";
7
7
  import { Fragment, createElement, useContext } from "react";
8
8
  import { NAVIGATE_URL } from "storybook/internal/core-events";
9
9
  import { styled } from "storybook/theming";
@@ -21,6 +21,13 @@ function mapTypeToControl(type) {
21
21
  default: return { type: "object" };
22
22
  }
23
23
  }
24
+ /**
25
+ * Returns a new argTypes object with entries sorted alphabetically by name,
26
+ * matching Storybook's `alpha` sort order. The input object is not mutated.
27
+ */
28
+ function sortArgTypes(argTypes) {
29
+ return Object.fromEntries(Object.entries(argTypes).toSorted(([a], [b]) => a.localeCompare(b)));
30
+ }
24
31
  function buildArgTypes(sig) {
25
32
  const argTypes = {};
26
33
  for (const [name, arg] of Object.entries(sig.args)) argTypes[name] = {
@@ -36,9 +43,64 @@ function buildArgTypes(sig) {
36
43
  defaultValue: arg.defaultValue ? { summary: arg.defaultValue } : void 0
37
44
  }
38
45
  };
39
- return argTypes;
46
+ return sortArgTypes(argTypes);
47
+ }
48
+ function isObject(value) {
49
+ return typeof value === "object" && value !== null;
40
50
  }
41
51
  /**
52
+ * Merges signature-derived argTypes with the story-provided argTypes.
53
+ *
54
+ * Signature argTypes are the base; story argTypes enhance them for better
55
+ * rendering (custom `name`, `control`, `options`, ...). For args present in
56
+ * both, story fields win — but only when they carry an actual value, so an
57
+ * explicit `undefined` never masks a signature field. The signature keeps the
58
+ * `table` and `description` the story does not override.
59
+ *
60
+ * The `type` object is deep-merged: a story-provided partial `type` (e.g.
61
+ * `type: 'string'`) keeps the signature's `required` flag unless the story
62
+ * explicitly sets it, while the story's `type.name` still wins.
63
+ */
64
+ function mergeArgTypes(signatureArgTypes, storyArgTypes) {
65
+ const merged = { ...signatureArgTypes };
66
+ for (const [name, storyArg] of Object.entries(storyArgTypes)) {
67
+ if (storyArg === void 0) continue;
68
+ const sigArg = merged[name];
69
+ if (!isObject(sigArg) || !isObject(storyArg)) {
70
+ merged[name] = storyArg;
71
+ continue;
72
+ }
73
+ const storyFields = Object.fromEntries(Object.entries(storyArg).filter(([, value]) => value !== void 0));
74
+ const mergedArg = {
75
+ ...sigArg,
76
+ ...storyFields
77
+ };
78
+ if (isObject(sigArg.type) && isObject(storyFields.type)) mergedArg.type = {
79
+ ...sigArg.type,
80
+ ...storyFields.type
81
+ };
82
+ merged[name] = mergedArg;
83
+ }
84
+ return merged;
85
+ }
86
+ /**
87
+ * Whether the docs page should render the Args/controls table: either the
88
+ * component signature exposes args, or the meta carries story-provided
89
+ * argTypes (e.g. for a template-only component with story argTypes but no
90
+ * signature args).
91
+ */
92
+ function shouldShowArgsSection(sig, metaArgTypes) {
93
+ return Object.keys(sig.args).length > 0 || Object.keys(metaArgTypes ?? {}).length > 0;
94
+ }
95
+ //#endregion
96
+ //#region src/client/docs/signature.ts
97
+ /**
98
+ * Key used for default exports in signature/component maps. Mirrors
99
+ * ember-docgen's `Default` sentinel — duplicated as a literal so client
100
+ * code does not pull ember-docgen's node-only dependencies into the bundle.
101
+ */
102
+ const DEFAULT_EXPORT = "__DEFAULT__";
103
+ /**
42
104
  * Resolve the human-facing name of a referenced component export.
43
105
  *
44
106
  * Prefers the component's own declaration name over its export alias and
@@ -54,8 +116,9 @@ function componentDisplayName(ref, data) {
54
116
  const rawEntry = data[ref.filePath];
55
117
  const componentEntry = hasSignatureMap(rawEntry) ? rawEntry : void 0;
56
118
  if (!componentEntry) return ref.exportName === "__DEFAULT__" ? void 0 : ref.exportName;
57
- if (ref.exportName === "__DEFAULT__") return componentEntry.meta["__DEFAULT__"] ?? void 0;
58
- return componentEntry.meta[ref.exportName] ?? ref.exportName;
119
+ const meta = componentEntry.meta;
120
+ if (ref.exportName === "__DEFAULT__") return meta?.[DEFAULT_EXPORT];
121
+ return meta?.[ref.exportName] ?? ref.exportName;
59
122
  }
60
123
  function applyModifiers(signature, modifiers) {
61
124
  if (!modifiers || modifiers.length === 0) return signature;
@@ -77,7 +140,7 @@ function collectSubcomponents(blocks, data) {
77
140
  for (const block of Object.values(blocks)) for (const param of unwrapBlockParams(block.params)) {
78
141
  if (!param.componentRef) continue;
79
142
  const { filePath, exportName, importPath, modifiers } = param.componentRef;
80
- const name = componentDisplayName(param.componentRef, data) ?? param.name;
143
+ const name = param.componentRef.local ? param.name : componentDisplayName(param.componentRef, data) ?? param.name;
81
144
  if (seen.has(name)) continue;
82
145
  seen.add(name);
83
146
  if (importPath) result.push({
@@ -244,8 +307,10 @@ function SubcomponentAnchor({ name, children }) {
244
307
  }, children);
245
308
  }
246
309
  /** Display name for a block param's type: the referenced component's own
247
- * name when available, otherwise the raw type string. */
310
+ * name when available, the yield key for local components, otherwise the
311
+ * raw type string. */
248
312
  function displayTypeName(param, data) {
313
+ if (param.componentRef?.local) return param.name;
249
314
  return (data ? componentDisplayName(param.componentRef, data) : void 0) ?? param.type;
250
315
  }
251
316
  function renderType(param, subcomponentNames, data) {
@@ -397,7 +462,7 @@ const SectionLabel = styled.div(({ theme }) => ({
397
462
  function renderSubcomponentSignature(sig, subcomponentNames, data) {
398
463
  const children = [];
399
464
  if (sig.element) children.push(createElement(ElementBlock, { element: sig.element }));
400
- if (Object.keys(sig.args).length > 0) children.push(createElement(SectionLabel, void 0, "Args"), createElement(ArgTypes, { include: Object.keys(sig.args) }));
465
+ if (Object.keys(sig.args).length > 0) children.push(createElement(SectionLabel, void 0, "Args"), createElement(PureArgsTable, { rows: buildArgTypes(sig) }));
401
466
  if (Object.keys(sig.blocks).length > 0) children.push(createElement(SectionLabel, {
402
467
  key: "blocks-label",
403
468
  style: { marginTop: 12 }
@@ -427,10 +492,10 @@ function SubcomponentsArea({ components, data }) {
427
492
  }
428
493
  //#endregion
429
494
  //#region src/client/docs/page.ts
430
- function addSignature(signature, data) {
495
+ function addSignature(signature, data, metaArgTypes) {
431
496
  const children = [];
432
497
  if (signature.element) children.push(createElement(ElementBlock, { element: signature.element }));
433
- if (Object.keys(signature.args).length > 0) children.push(createElement(Subheading, void 0, "Args"), createElement(Controls));
498
+ if (shouldShowArgsSection(signature, metaArgTypes)) children.push(createElement(Subheading, void 0, "Args"), createElement(Controls));
434
499
  if (Object.keys(signature.blocks).length > 0) {
435
500
  const subcomponents = collectSubcomponents(signature.blocks, data);
436
501
  const subcomponentNames = new Set(subcomponents.map((s) => s.name));
@@ -477,7 +542,7 @@ function Page() {
477
542
  createElement(Description),
478
543
  createElement(Primary)
479
544
  ];
480
- if (signature) children.push(...addSignature(signature, data));
545
+ if (signature) children.push(...addSignature(signature, data, resolved.preparedMeta?.argTypes));
481
546
  children.push(createElement(Stories));
482
547
  return createElement(Fragment, void 0, ...children);
483
548
  }
@@ -593,23 +658,17 @@ const argTypesEnhancers = [(context) => {
593
658
  const filePath = context.parameters.fileName;
594
659
  if (filePath && Object.hasOwn(data, filePath)) {
595
660
  const sig = resolveSig(data[filePath]);
596
- if (sig) return {
597
- ...buildArgTypes(sig),
598
- ...context.argTypes
599
- };
600
- return context.argTypes;
661
+ if (sig) return sortArgTypes(mergeArgTypes(buildArgTypes(sig), context.argTypes));
662
+ return sortArgTypes(context.argTypes);
601
663
  }
602
664
  const leaf = titleLeaf(context.title);
603
665
  if (leaf) for (const entry of Object.values(data)) {
604
666
  if (!("meta" in entry)) continue;
605
667
  if (titleLeaf(entry.meta.title) !== leaf) continue;
606
668
  const sig = resolveSig(entry);
607
- if (sig) return {
608
- ...buildArgTypes(sig),
609
- ...context.argTypes
610
- };
669
+ if (sig) return sortArgTypes(mergeArgTypes(buildArgTypes(sig), context.argTypes));
611
670
  }
612
- return context.argTypes;
671
+ return sortArgTypes(context.argTypes);
613
672
  }];
614
673
  const parameters = { docs: {
615
674
  source: {
@@ -1 +1 @@
1
- {"version":3,"file":"config.mjs","names":["mapTypeToControl","type","category","options","buildArgTypes","sig","argTypes","name","arg","Object","entries","args","description","undefined","raw","required","control","table","summary","defaultValue","unwrapBlockParams","DEFAULT_EXPORT","hasSignatureMap","entry","Object","hasOwn","componentDisplayName","ref","data","filePath","exportName","undefined","rawEntry","componentEntry","meta","applyModifiers","signature","modifiers","length","blockedKeys","Set","pickedKeys","mod","name","key","typeArgs","add","filtered","size","fromEntries","entries","args","filter","k","has","collectSubcomponents","blocks","seen","result","block","values","param","params","componentRef","importPath","push","signatures","sig","Heading","createElement","styled","isHtmlElement","name","test","TableWrapper","table","theme","fontFamily","typography","fonts","base","borderSpacing","color","defaultText","fontSize","size","s2","lineHeight","textAlign","width","marginTop","marginBottom","marginInline","padding","border","verticalAlign","textOverflow","paddingLeft","paddingRight","th","textMutedColor","paddingTop","paddingBottom","td","tbody","filter","background","content","borderTop","appBorderColor","borderBlockStart","borderBlockEnd","borderInlineStart","borderInlineEnd","borderTopLeftRadius","appBorderRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","borderColor","renderHead","columns","className","map","col","renderBody","entries","entry","key","style","fontWeight","description","H2","weight","bold","letterSpacing","textTransform","DocsContext","Subheading","createElement","Fragment","useContext","NAVIGATE_URL","styled","componentDisplayName","TableWrapper","ParamType","code","theme","color","secondary","fontSize","fontWeight","ParamName","span","defaultText","ParamRow","div","typography","size","s2","lineHeight","marginBottom","ParamDesc","textMutedColor","s1","marginLeft","BlocksDiv","marginTop","BlocksNameCell","td","position","weight","bold","background","app","SubcomponentLink","a","primary","cursor","textDecoration","Indent","marginInlineStart","SubcomponentAnchor","name","children","context","hash","href","target","onClick","event","preventDefault","document","querySelector","CSS","escape","slice","scrollIntoView","behavior","block","channel","emit","displayTypeName","param","data","componentRef","undefined","type","renderType","subcomponentNames","displayType","typeIsSubcomponent","has","key","renderParam","isBlockParam","Object","hasOwn","renderParams","params","map","i","entries","flatMap","p","isNamed","startsWith","isSubcomponent","typeChildren","push","rows","description","BlocksTable","blocks","toSorted","nameA","_a","nameB","_b","length","displayName","className","BlocksSection","createElement","styled","isHtmlElement","ElementWrapper","div","theme","fontFamily","typography","fonts","base","color","defaultText","fontSize","size","s2","lineHeight","marginTop","marginBottom","span","fontWeight","marginRight","code","secondary","textDecoration","a","ElementBlock","element","elements","split","map","s","trim","filter","Boolean","length","children","key","i","name","entries","push","inner","href","target","rel","undefined","createElement","renderBody","renderHead","TableWrapper","renderPartsBody","entries","className","map","entry","key","name","style","fontSize","fontWeight","description","PartsTable","CssPropertiesTable","ArgTypes","Subheading","createElement","styled","BlocksTable","ParamRow","ParamType","ElementBlock","H2","SubcomponentsSection","div","marginTop","marginBottom","SubEntry","SectionLabel","theme","fontWeight","color","defaultText","fontSize","typography","size","m1","renderSubcomponentSignature","sig","subcomponentNames","data","children","element","push","Object","keys","args","length","undefined","include","blocks","key","style","SubcomponentsArea","components","Set","map","c","name","entries","comp","importPath","signature","id","Controls","Description","Primary","Stories","Subheading","Subtitle","Title","useOf","createElement","Fragment","emberData","BlocksSection","ElementBlock","CssPropertiesTable","PartsTable","SubcomponentsArea","H2","collectSubcomponents","addSignature","signature","data","children","element","push","Object","keys","args","length","undefined","blocks","subcomponents","subcomponentNames","Set","map","s","name","components","style","customProperties","entries","description","parts","unshift","Page","resolved","storyFile","preparedMeta","parameters","fileName","storyEntry","storyComponent","component","compFile","file","compEntry","signatureName","signatures","SourceType","emitTransformCode","useEffect","useRef","emberData","isEmberStoryResult","unwrapBlockParams","data","skipSourceRender","context","sourceParams","parameters","docs","source","type","DYNAMIC","isArgsStory","__isArgsStory","code","CODE","toArgument","key","value","argTypes","undefined","JSON","stringify","String","Object","hasOwn","generateBlockContent","blockInfo","params","length","paramNames","map","p","name","join","generateBlockSourceCode","sig","args","indent","blockNames","keys","blocks","blockName","arg","slotBindings","content","push","byStoryId","getByStoryId","entry","values","storyId","entries","componentName","signatureName","inlineTemplate","signatureForComponent","comp","component","compEntry","file","signatures","resolveTemplateArgs","template","replaceAll","_match","generateSource","meta","propsArray","filter","k","v","Boolean","blockCode","propsStr","sourceDecorator","storyFn","story","rendered","originalStoryFn","renderedForSource","id","current","SourceType","emberData","buildArgTypes","Page","sourceDecorator","data","resolveSig","entry","undefined","comp","component","signatureName","compEntry","file","signatures","titleLeaf","title","split","pop","argTypesEnhancers","context","filePath","parameters","fileName","Object","hasOwn","sig","argTypes","leaf","values","meta","docs","source","type","DYNAMIC","language","page","decorators"],"sources":["../../../src/client/docs/extractArgTypes.ts","../../../src/client/docs/signature.ts","../../../src/client/docs/blocks/ui.ts","../../../src/client/docs/blocks/blocks.ts","../../../src/client/docs/blocks/element.ts","../../../src/client/docs/blocks/style.ts","../../../src/client/docs/blocks/subcomponents.ts","../../../src/client/docs/page.ts","../../../src/client/docs/source-decorator.ts","../../../src/client/docs/config.ts"],"sourcesContent":["import type { ArgTypeInfo, ComponentSignature } from 'ember-docgen';\n\nfunction mapTypeToControl(\n type: ArgTypeInfo\n):\n | false\n | { type: 'text' }\n | { type: 'number' }\n | { type: 'boolean' }\n | { type: 'select'; options: string[] }\n | { type: 'object' }\n | { type: 'function' }\n | { type: 'date' } {\n switch (type.category) {\n case 'string': {\n return { type: 'text' };\n }\n case 'number': {\n return { type: 'number' };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'function': {\n return { type: 'function' };\n }\n case 'enum': {\n return { type: 'select', options: type.options ?? [] };\n }\n\n default: {\n return { type: 'object' };\n }\n }\n}\n\nexport function buildArgTypes(sig: ComponentSignature): Record<string, unknown> {\n const argTypes: Record<string, unknown> = {};\n\n for (const [name, arg] of Object.entries(sig.args)) {\n argTypes[name] = {\n name,\n description: arg.description || undefined,\n type: {\n name: arg.type.raw,\n required: arg.required\n },\n control: mapTypeToControl(arg.type),\n table: {\n type: { summary: arg.type.raw },\n defaultValue: arg.defaultValue ? { summary: arg.defaultValue } : undefined\n }\n };\n }\n\n return argTypes;\n}\n","import { unwrapBlockParams } from './block-params';\n\nimport type { ComponentFile, EmberMeta } from '../../node/types';\nimport type { BlockInfo, ComponentSignature } from 'ember-docgen';\n\n/**\n * Key used for default exports in signature/component maps. Mirrors\n * ember-docgen's `Default` sentinel — duplicated as a literal so client\n * code does not pull ember-docgen's node-only dependencies into the bundle.\n */\nexport const DEFAULT_EXPORT = '__DEFAULT__';\n\nexport interface SubcomponentRef {\n name: string;\n signature?: ComponentSignature;\n importPath?: string;\n}\n\n/**\n * Resolve the human-facing name of a referenced component export.\n *\n * Prefers the component's own declaration name over its export alias and\n * resolves the default-export sentinel to the real class name via the\n * component file's declaration map. Returns `undefined` when no better\n * name is known.\n */\nfunction hasSignatureMap(entry: unknown): entry is ComponentFile {\n return typeof entry === 'object' && entry !== null && Object.hasOwn(entry, 'signatures');\n}\n\nexport function componentDisplayName(\n ref: undefined | { filePath?: string; exportName?: string },\n data: EmberMeta\n): string | undefined {\n if (!ref?.filePath || !ref.exportName) return undefined;\n\n const rawEntry: unknown = data[ref.filePath];\n\n const componentEntry = hasSignatureMap(rawEntry) ? rawEntry : undefined;\n\n if (!componentEntry) {\n return ref.exportName === DEFAULT_EXPORT ? undefined : ref.exportName;\n }\n\n if (ref.exportName === DEFAULT_EXPORT) {\n return componentEntry.meta[DEFAULT_EXPORT] ?? undefined;\n }\n\n return componentEntry.meta[ref.exportName] ?? ref.exportName;\n}\n\nexport function applyModifiers(\n signature: ComponentSignature,\n modifiers?: { name: string; typeArgs: string[] }[]\n): ComponentSignature {\n if (!modifiers || modifiers.length === 0) return signature;\n\n const blockedKeys = new Set<string>();\n const pickedKeys = new Set<string>();\n\n for (const mod of modifiers) {\n if (mod.name === 'WithBoundArgs' || mod.name === 'Omit') {\n for (const key of mod.typeArgs) blockedKeys.add(key);\n }\n\n if (mod.name === 'Pick') {\n for (const key of mod.typeArgs) pickedKeys.add(key);\n }\n }\n\n const filtered =\n pickedKeys.size > 0\n ? Object.fromEntries(Object.entries(signature.args).filter(([k]) => pickedKeys.has(k)))\n : Object.fromEntries(Object.entries(signature.args).filter(([k]) => !blockedKeys.has(k)));\n\n return { ...signature, args: filtered };\n}\n\nexport function collectSubcomponents(\n blocks: Record<string, BlockInfo>,\n data: EmberMeta\n): SubcomponentRef[] {\n const seen = new Set<string>();\n\n const result: SubcomponentRef[] = [];\n\n for (const block of Object.values(blocks)) {\n for (const param of unwrapBlockParams(block.params)) {\n if (!param.componentRef) {\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n continue;\n }\n\n const { filePath, exportName, importPath, modifiers } = param.componentRef;\n\n // Prefer the referenced component's own name over the yield-hash key\n const name = componentDisplayName(param.componentRef, data) ?? param.name;\n\n if (seen.has(name)) {\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n continue;\n }\n\n seen.add(name);\n\n if (importPath) {\n result.push({ name, importPath });\n } else if (filePath && Object.hasOwn(data, filePath)) {\n const entry = data[filePath] as ComponentFile;\n\n if (Object.hasOwn(entry.signatures, exportName)) {\n const sig = entry.signatures[exportName];\n\n result.push({\n name,\n signature: applyModifiers(sig, modifiers)\n });\n }\n } else if (filePath) {\n // Project-local file without an extractable signature\n // (e.g. a bare template-only component) — still list it by name.\n result.push({ name });\n }\n }\n }\n\n return result;\n}\n","/* eslint-disable unicorn/no-null */\nimport { Heading } from '@storybook/addon-docs/blocks';\nimport { createElement } from 'react';\nimport { styled, type Theme } from 'storybook/theming';\n\nexport interface Entry {\n name: string;\n description?: string;\n}\n\ntype StyleProps = { theme: Theme };\n\nexport function isHtmlElement(name: string): boolean {\n return /^HTML[A-Z]\\w*Element$/.test(name);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nexport const TableWrapper = styled.table(({ theme }: StyleProps) => ({\n fontFamily: theme.typography.fonts.base,\n borderSpacing: 0,\n color: theme.color.defaultText,\n fontSize: theme.typography.size.s2 - 1,\n lineHeight: '19px',\n textAlign: 'left',\n width: '100%',\n marginTop: 25,\n marginBottom: 40,\n marginInline: 1,\n 'td, th': {\n padding: 0,\n border: 'none',\n verticalAlign: 'top',\n textOverflow: 'ellipsis'\n },\n 'th:first-of-type, td:first-of-type': {\n paddingLeft: 20\n },\n 'th:last-of-type, td:last-of-type': {\n paddingRight: 20\n },\n th: {\n color: theme.textMutedColor as string,\n paddingTop: 10,\n paddingBottom: 10,\n paddingLeft: 15,\n paddingRight: 15\n },\n td: {\n paddingTop: '10px',\n paddingBottom: '10px',\n '&:not(:first-of-type)': {\n paddingLeft: 15,\n paddingRight: 15\n },\n '&:last-of-type': {\n paddingRight: 20\n }\n },\n tbody: {\n filter:\n theme.base === 'light'\n ? 'drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.10))'\n : 'drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.20))',\n '> tr > *': {\n background: theme.background.content,\n borderTop: `1px solid ${theme.appBorderColor}`\n },\n '> tr:first-of-type > *': {\n borderBlockStart: `1px solid ${theme.appBorderColor}`\n },\n '> tr:last-of-type > *': {\n borderBlockEnd: `1px solid ${theme.appBorderColor}`\n },\n '> tr > *:first-of-type': {\n borderInlineStart: `1px solid ${theme.appBorderColor}`\n },\n '> tr > *:last-of-type': {\n borderInlineEnd: `1px solid ${theme.appBorderColor}`\n },\n '> tr:first-of-type > td:first-of-type': {\n borderTopLeftRadius: theme.appBorderRadius\n },\n '> tr:first-of-type > td:last-of-type': {\n borderTopRightRadius: theme.appBorderRadius\n },\n '> tr:last-of-type > td:first-of-type': {\n borderBottomLeftRadius: theme.appBorderRadius\n },\n '> tr:last-of-type > td:last-of-type': {\n borderBottomRightRadius: theme.appBorderRadius\n }\n },\n '@media (forced-colors: active)': {\n tbody: {\n filter: 'none',\n '> tr > *': {\n borderColor: 'CanvasText'\n }\n }\n }\n}));\n\nexport function renderHead(columns: string[]) {\n return createElement(\n 'thead',\n { className: 'docblock-argstable-head' },\n createElement(\n 'tr',\n null,\n ...columns.map((col) => createElement('th', null, createElement('span', null, col)))\n )\n );\n}\n\nexport function renderBody(entries: Entry[]) {\n return createElement(\n 'tbody',\n { className: 'docblock-argstable-body' },\n ...entries.map((entry) =>\n createElement(\n 'tr',\n { key: entry.name },\n createElement(\n 'td',\n null,\n createElement('span', { style: { fontWeight: 'bold' } }, entry.name)\n ),\n createElement('td', null, entry.description ?? '')\n )\n )\n );\n}\n\nexport const H2 = styled(Heading)(({ theme }) => ({\n fontSize: `${theme.typography.size.s2 - 1}px`,\n fontWeight: theme.typography.weight.bold,\n lineHeight: '16px',\n letterSpacing: '0.35em',\n textTransform: 'uppercase',\n color: theme.textMutedColor as string,\n border: 0,\n marginBottom: '12px',\n '&:first-of-type': { marginTop: '56px' }\n}));\n","import { DocsContext, Subheading } from '@storybook/addon-docs/blocks';\nimport { createElement, Fragment, type MouseEvent, type ReactNode, useContext } from 'react';\nimport { NAVIGATE_URL } from 'storybook/internal/core-events';\nimport { styled } from 'storybook/theming';\n\nimport { componentDisplayName } from '../signature';\nimport { TableWrapper } from './ui';\n\nimport type { EmberMeta } from '../../../node/types';\nimport type { BlockInfo, BlockParam, HashBlockParam } from 'ember-docgen';\n\nexport const ParamType = styled.code(({ theme }) => ({\n color: theme.color.secondary,\n fontSize: 12,\n fontWeight: 'bold'\n}));\n\nconst ParamName = styled.span(({ theme }) => ({\n fontWeight: 'bold',\n color: theme.color.defaultText\n}));\n\nexport const ParamRow = styled.div(({ theme }) => ({\n fontSize: theme.typography.size.s2 - 1,\n lineHeight: '19px',\n marginBottom: 2\n}));\n\nconst ParamDesc = styled.div(({ theme }) => ({\n color: theme.textMutedColor as string,\n fontSize: theme.typography.size.s1,\n lineHeight: '17px',\n marginBottom: 8,\n marginLeft: 20\n}));\n\nconst BlocksDiv = styled.div(() => ({\n marginTop: 25,\n marginBottom: 40\n}));\n\nconst BlocksNameCell = styled.td(({ theme }) => ({\n position: 'relative',\n fontWeight: theme.typography.weight.bold,\n fontSize: theme.typography.size.s1,\n background: `${theme.background.app} !important`,\n '& ~ td': {\n background: `${theme.background.app} !important`\n }\n}));\n\nconst SubcomponentLink = styled.a(({ theme }) => ({\n color: theme.color.primary,\n fontWeight: 'bold',\n cursor: 'pointer',\n textDecoration: 'none',\n '&:hover': { textDecoration: 'underline' }\n}));\n\nconst Indent = styled.span(() => ({\n marginInlineStart: '20px'\n}));\n\n/**\n * In-page anchor to a subcomponent section. Mirrors Storybook's own\n * in-docs navigation (TableOfContents / AnchorInPage): the default anchor\n * behavior is prevented — it would resolve against the preview iframe's\n * `<base>` and navigate away from Storybook — and instead the docs page\n * scrolls to the target while `NAVIGATE_URL` keeps the address-bar hash\n * (deep-linkable) in sync via the manager.\n */\nfunction SubcomponentAnchor({ name, children }: { name: string; children?: ReactNode }) {\n const context = useContext(DocsContext);\n const hash = `#subcomponent-${name}`;\n\n return createElement(\n SubcomponentLink,\n {\n href: hash,\n target: '_self',\n onClick: (event: MouseEvent) => {\n event.preventDefault();\n\n const target = document.querySelector(`#${CSS.escape(hash.slice(1))}`);\n\n if (target) {\n target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n context.channel.emit(NAVIGATE_URL, hash);\n }\n }\n },\n children\n );\n}\n\n/** Display name for a block param's type: the referenced component's own\n * name when available, otherwise the raw type string. */\nfunction displayTypeName(param: BlockParam, data?: EmberMeta): string {\n return (data ? componentDisplayName(param.componentRef, data) : undefined) ?? param.type;\n}\n\nfunction renderType(\n param: BlockParam,\n subcomponentNames: Set<string>,\n data?: EmberMeta\n): ReactNode {\n const displayType = displayTypeName(param, data);\n\n if (param.componentRef) {\n const typeIsSubcomponent = subcomponentNames.has(displayType);\n\n return typeIsSubcomponent\n ? createElement(SubcomponentAnchor, { key: 'type', name: displayType }, displayType)\n : createElement(ParamType, { key: 'type' }, displayType);\n }\n\n return createElement(ParamType, { key: 'type' }, param.type);\n}\n\nfunction renderParam(\n param: BlockParam,\n subcomponentNames: Set<string>,\n data?: EmberMeta\n): ReactNode[] {\n const type = renderType(param, subcomponentNames, data);\n const name = createElement(ParamName, { key: 'name' }, param.name);\n\n return [name, createElement('span', { key: 'colon' }, ': '), type];\n}\n\nfunction isBlockParam(param: BlockParam | HashBlockParam): param is BlockParam {\n return Object.hasOwn(param, 'name') && Object.hasOwn(param, 'type');\n}\n\nfunction renderParams(\n params: BlockInfo['params'],\n subcomponentNames: Set<string>,\n data?: EmberMeta\n): ReactNode[] {\n return params.map((param, i) => {\n if (!isBlockParam(param)) {\n const children: ReactNode[] = [\n createElement('span', { key: 'open' }, '- {'),\n createElement('br', { key: 'br-open' }),\n ...Object.entries(param).flatMap(([key, p]) => [\n createElement(Indent, { key: `indent-${key}` }),\n renderParam(p, subcomponentNames, data)\n ]),\n createElement('br', { key: 'br-close' }),\n createElement('span', { key: 'close' }, '}')\n ];\n\n return createElement(Fragment, { key: i }, ...children);\n }\n\n const isNamed = param.name && !param.name.startsWith('param');\n const displayType = displayTypeName(param, data);\n\n const isSubcomponent = subcomponentNames.has(displayType);\n\n const children: ReactNode[] = [];\n const typeChildren: ReactNode[] = [];\n\n if (isSubcomponent) {\n typeChildren.push(\n createElement(SubcomponentAnchor, { key: 'type', name: displayType }, displayType)\n );\n } else {\n typeChildren.push(createElement(ParamType, { key: 'type' }, displayType));\n }\n\n if (isNamed) {\n children.push(\n createElement('span', { key: 'sep' }, '- '),\n createElement(ParamName, { key: 'name' }, param.name),\n createElement('span', { key: 'colon' }, ': '),\n ...typeChildren\n );\n } else {\n children.push(createElement('span', { key: 'sep' }, '- '), ...typeChildren);\n }\n\n const rows: ReactNode[] = [createElement(ParamRow, { key: 'row' }, ...children)];\n\n if (param.description) {\n rows.push(createElement(ParamDesc, { key: 'desc' }, param.description));\n }\n\n return createElement(Fragment, { key: i }, ...rows);\n });\n}\n\nexport function BlocksTable({\n blocks,\n subcomponentNames,\n data\n}: {\n blocks: Record<string, BlockInfo>;\n subcomponentNames: Set<string>;\n data?: EmberMeta;\n}) {\n const entries = Object.entries(blocks).toSorted(([nameA, _a], [nameB, _b]) => {\n if (nameA === 'default') return -1;\n if (nameB === 'default') return -1;\n\n return 0;\n });\n\n if (entries.length === 0) return;\n\n const rows = [];\n\n for (const [name, block] of entries) {\n const displayName = `<:${name}>`;\n\n rows.push(\n createElement('tr', { key: name }, createElement(BlocksNameCell, undefined, displayName))\n );\n\n if (block.params.length > 0) {\n const params = renderParams(block.params, subcomponentNames, data);\n\n rows.push(\n createElement('tr', { key: `${name}-params` }, createElement('td', undefined, ...params))\n );\n }\n }\n\n return createElement(\n TableWrapper,\n { className: 'docblock-argstable sb-unstyled' },\n createElement('tbody', { className: 'docblock-argstable-body' }, rows)\n );\n}\n\nexport function BlocksSection({\n blocks,\n subcomponentNames,\n data\n}: {\n blocks: Record<string, BlockInfo>;\n subcomponentNames: Set<string>;\n data?: EmberMeta;\n}) {\n return createElement(\n BlocksDiv,\n undefined,\n createElement(Subheading, undefined, 'Blocks'),\n BlocksTable({ blocks, subcomponentNames, data })\n );\n}\n","import { createElement, type ReactNode } from 'react';\nimport { styled } from 'storybook/theming';\n\nimport { isHtmlElement } from './ui';\n\nconst ElementWrapper = styled.div(({ theme }) => ({\n fontFamily: theme.typography.fonts.base,\n color: theme.color.defaultText,\n fontSize: theme.typography.size.s2 - 1,\n lineHeight: '19px',\n marginTop: 25,\n marginBottom: 40,\n span: {\n '&:first-of-type': {\n fontWeight: 'bold',\n marginRight: 8\n }\n },\n code: {\n fontSize: 12,\n fontWeight: 'bold'\n },\n 'a code': {\n color: theme.color.secondary,\n textDecoration: 'none'\n },\n a: {\n color: theme.color.secondary,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline'\n }\n }\n}));\n\nexport function ElementBlock({ element }: { element: string }) {\n const elements = element\n .split(' | ')\n .map((s) => s.trim())\n .filter(Boolean);\n\n if (elements.length === 0) return;\n\n const children: ReactNode[] = [createElement('span', { key: 'label' }, 'Element:')];\n\n for (const [i, name] of elements.entries()) {\n if (i > 0) {\n children.push(createElement('span', { key: `sep-${i}` }, ' | '));\n }\n\n const inner = isHtmlElement(name)\n ? createElement(\n 'a',\n {\n key: `link-${name}`,\n href: `https://developer.mozilla.org/en-US/docs/Web/API/${name}`,\n target: '_blank',\n rel: 'noopener noreferrer'\n },\n name\n )\n : name;\n\n children.push(createElement('code', { key: name }, inner));\n }\n\n return createElement(ElementWrapper, undefined, ...children);\n}\n","/* eslint-disable unicorn/no-null */\nimport { createElement } from 'react';\n\nimport { type Entry, renderBody, renderHead, TableWrapper } from './ui';\n\nfunction renderPartsBody(entries: Entry[]) {\n return createElement(\n 'tbody',\n { className: 'docblock-argstable-body' },\n ...entries.map((entry) =>\n createElement(\n 'tr',\n { key: entry.name },\n createElement(\n 'td',\n null,\n createElement(\n 'code',\n { style: { fontSize: 12, fontWeight: 'bold' } },\n `[part=\"${entry.name}\"]`\n )\n ),\n createElement('td', null, entry.description ?? '')\n )\n )\n );\n}\n\nexport function PartsTable({ entries }: { entries: Entry[] }) {\n return createElement(\n TableWrapper,\n { className: 'docblock-argstable sb-unstyled' },\n renderHead(['Part', 'Description']),\n renderPartsBody(entries)\n );\n}\n\nexport function CssPropertiesTable({ entries }: { entries: Entry[] }) {\n return createElement(\n TableWrapper,\n { className: 'docblock-argstable sb-unstyled' },\n renderHead(['Property', 'Value']),\n renderBody(entries)\n );\n}\n","import { ArgTypes, Subheading } from '@storybook/addon-docs/blocks';\nimport { createElement, type ReactNode } from 'react';\nimport { styled } from 'storybook/theming';\n\nimport { BlocksTable, ParamRow, ParamType } from './blocks';\nimport { ElementBlock } from './element';\nimport { H2 } from './ui';\n\nimport type { EmberMeta } from '../../../node/types';\nimport type { SubcomponentRef } from '../signature';\nimport type { ComponentSignature } from 'ember-docgen';\n\nconst SubcomponentsSection = styled.div(() => ({\n marginTop: 25,\n marginBottom: 40\n}));\n\nconst SubEntry = styled.div(() => ({\n marginBottom: 24,\n '&:last-child': { marginBottom: 0 }\n}));\n\nconst SectionLabel = styled.div(({ theme }) => ({\n fontWeight: 'bold',\n color: theme.color.defaultText,\n fontSize: theme.typography.size.m1 - 2,\n marginBottom: 8\n}));\n\nfunction renderSubcomponentSignature(\n sig: ComponentSignature,\n subcomponentNames: Set<string>,\n data?: EmberMeta\n): ReactNode[] {\n const children: ReactNode[] = [];\n\n if (sig.element) {\n children.push(createElement(ElementBlock, { element: sig.element }));\n }\n\n if (Object.keys(sig.args).length > 0) {\n children.push(\n createElement(SectionLabel, undefined, 'Args'),\n createElement(ArgTypes, { include: Object.keys(sig.args) })\n );\n }\n\n if (Object.keys(sig.blocks).length > 0) {\n children.push(\n createElement(SectionLabel, { key: 'blocks-label', style: { marginTop: 12 } }, 'Blocks'),\n createElement(BlocksTable, { blocks: sig.blocks, subcomponentNames, data })\n );\n }\n\n return children;\n}\n\nexport function SubcomponentsArea({\n components,\n data\n}: {\n components: SubcomponentRef[];\n data?: EmberMeta;\n}) {\n if (components.length === 0) return;\n\n const subcomponentNames = new Set(components.map((c) => c.name));\n\n const entries = components.map((comp) => {\n const children: ReactNode[] = [createElement(Subheading, undefined, comp.name)];\n\n if (comp.importPath) {\n children.push(\n createElement(\n ParamRow,\n { key: 'import', style: { marginBottom: 12 } },\n createElement('span', undefined, \"from '\"),\n createElement(ParamType, undefined, comp.importPath),\n createElement('span', undefined, \"'\")\n )\n );\n } else if (comp.signature) {\n children.push(...renderSubcomponentSignature(comp.signature, subcomponentNames, data));\n }\n\n return createElement(\n SubEntry,\n { id: `subcomponent-${comp.name}`, key: comp.name },\n ...children\n );\n });\n\n return createElement(\n SubcomponentsSection,\n undefined,\n createElement(H2, undefined, 'Subcomponents'),\n ...entries\n );\n}\n","import {\n Controls,\n Description,\n Primary,\n Stories,\n Subheading,\n Subtitle,\n Title,\n useOf\n} from '@storybook/addon-docs/blocks';\nimport { createElement, Fragment, type ReactNode } from 'react';\nimport emberData from 'virtual:ember-storybook';\n\nimport { BlocksSection } from './blocks/blocks';\nimport { ElementBlock } from './blocks/element';\nimport { CssPropertiesTable, PartsTable } from './blocks/style';\nimport { SubcomponentsArea } from './blocks/subcomponents';\nimport { H2 } from './blocks/ui';\nimport { collectSubcomponents } from './signature';\n\nimport type { EmberMeta } from '../../node/types';\nimport type { ComponentSignature } from 'ember-docgen';\n\nfunction addSignature(signature: ComponentSignature, data: EmberMeta) {\n const children: ReactNode[] = [];\n\n if (signature.element) {\n children.push(createElement(ElementBlock, { element: signature.element }));\n }\n\n // Render unfiltered — the argTypes enhancer already merges\n // buildArgTypes(signature) into the store, so this mirrors\n // the Controls panel exactly.\n if (Object.keys(signature.args).length > 0) {\n children.push(createElement(Subheading, undefined, 'Args'), createElement(Controls));\n }\n\n if (Object.keys(signature.blocks).length > 0) {\n const subcomponents = collectSubcomponents(signature.blocks, data);\n const subcomponentNames = new Set(subcomponents.map((s) => s.name));\n\n children.push(\n createElement(BlocksSection, { blocks: signature.blocks, subcomponentNames, data })\n );\n\n if (subcomponents.length > 0) {\n children.push(createElement(SubcomponentsArea, { components: subcomponents, data }));\n }\n }\n\n if (Object.keys(signature.style.customProperties).length > 0) {\n const entries = Object.entries(signature.style.customProperties).map(([name, description]) => ({\n name,\n description\n }));\n\n children.push(\n createElement(Subheading, undefined, 'CSS Custom Properties'),\n createElement(CssPropertiesTable, { entries })\n );\n }\n\n if (Object.keys(signature.style.parts).length > 0) {\n const entries = Object.entries(signature.style.parts).map(([name, description]) => ({\n name,\n description\n }));\n\n children.push(\n createElement(Subheading, undefined, 'Parts'),\n createElement(PartsTable, { entries })\n );\n }\n\n if (children.length > 0) {\n children.unshift(createElement(H2, undefined, 'Signature'));\n }\n\n return children;\n}\n\nexport default function Page() {\n const resolved: {\n preparedMeta?: {\n argTypes?: Record<string, unknown>;\n title?: string;\n parameters?: Record<string, unknown>;\n };\n } = useOf('meta', ['meta']);\n\n const data = emberData as EmberMeta;\n const storyFile = resolved.preparedMeta?.parameters?.fileName as string | undefined;\n const storyEntry = storyFile ? data[storyFile] : undefined;\n const storyComponent = storyEntry && 'component' in storyEntry ? storyEntry.component : undefined;\n const compFile = storyComponent?.file;\n const compEntry = compFile ? data[compFile] : undefined;\n const signatureName = storyComponent?.signatureName ?? '';\n const signature =\n compEntry && 'signatures' in compEntry ? compEntry.signatures[signatureName] : undefined;\n\n const children: ReactNode[] = [\n createElement(Title),\n createElement(Subtitle),\n createElement(Description),\n createElement(Primary)\n ];\n\n if (signature) {\n children.push(...addSignature(signature, data));\n }\n\n children.push(createElement(Stories));\n\n return createElement(Fragment, undefined, ...children);\n}\n","import { SourceType } from 'storybook/internal/docs-tools';\nimport { emitTransformCode, useEffect, useRef } from 'storybook/preview-api';\nimport emberData from 'virtual:ember-storybook';\n\nimport { isEmberStoryResult } from '../story-result';\nimport { unwrapBlockParams } from './block-params';\n\nimport type { StorySource } from '../../node/types';\nimport type { StoryFn } from '../public-types';\nimport type { EmberRenderer } from '../types';\nimport type { BlockInfo, ComponentSignature } from 'ember-docgen';\nimport type { Args, ArgTypes, DecoratorFunction } from 'storybook/internal/types';\n\nconst data = emberData as Record<\n string,\n {\n component?: { file?: string; signatureName?: string };\n source?: Record<string, StorySource>;\n signatures?: Record<string, ComponentSignature>;\n }\n>;\n\nfunction skipSourceRender(context: Parameters<DecoratorFunction<EmberRenderer>>[1]) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const sourceParams = context.parameters.docs?.source;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (sourceParams?.type === SourceType.DYNAMIC) {\n return false;\n }\n\n const isArgsStory = context.parameters.__isArgsStory as boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return (!isArgsStory || sourceParams?.code) ?? sourceParams?.type === SourceType.CODE;\n}\n\nexport function toArgument(key: string, value: unknown, argTypes: ArgTypes): string | undefined {\n if (value !== undefined && value !== null) {\n if (typeof value === 'string') {\n return `@${key}=${JSON.stringify(value)}`;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return `@${key}={{${String(value)}}}`;\n }\n\n if (Object.hasOwn(argTypes, key)) {\n return `@${key}={{@${key}}}`;\n }\n\n return undefined;\n }\n\n if (value === undefined && Object.hasOwn(argTypes, key)) {\n return `@${key}={{@${key}}}`;\n }\n\n return undefined;\n}\n\nfunction generateBlockContent(blockInfo: BlockInfo): string {\n if (blockInfo.params.length === 0) {\n return '...';\n }\n\n const paramNames = unwrapBlockParams(blockInfo.params)\n .map((p) => p.name)\n .join(', ');\n\n return `{{yield ${paramNames}}}`;\n}\n\nexport function generateBlockSourceCode(\n sig: ComponentSignature,\n args: Args,\n indent: string\n): string {\n const blockNames = Object.keys(sig.blocks);\n\n if (blockNames.length === 0) return '';\n\n const blocks: string[] = [];\n\n for (const blockName of blockNames) {\n const blockInfo = sig.blocks[blockName];\n const arg = (args as Record<string, unknown>)[blockName];\n\n if (arg === undefined && blockInfo.params.length === 0) {\n continue;\n }\n\n const params = unwrapBlockParams(blockInfo.params)\n .map((p) => p.name)\n .join(' ');\n const slotBindings = params ? ` as |${params}|` : '';\n\n const content = generateBlockContent(blockInfo);\n\n if (blockName === 'default' && !slotBindings) {\n blocks.push(content);\n } else {\n blocks.push(`${indent} <:${blockName}${slotBindings}>${content}</:${blockName}>`);\n }\n }\n\n return blocks.join('\\n');\n}\n\nlet byStoryId: Record<string, StorySource> | undefined;\n\nfunction getByStoryId(): Record<string, StorySource> {\n if (byStoryId) return byStoryId;\n\n byStoryId = {};\n\n for (const entry of Object.values(data)) {\n for (const [storyId, source] of Object.entries(entry.source ?? {})) {\n byStoryId[storyId] = {\n componentName: source.componentName,\n signatureName: source.signatureName,\n inlineTemplate: source.inlineTemplate\n };\n }\n }\n\n return byStoryId;\n}\n\nfunction signatureForComponent(name: string): ComponentSignature | undefined {\n for (const entry of Object.values(data)) {\n const comp = entry.component;\n\n if (comp?.signatureName !== name) continue;\n\n const compEntry = comp.file ? data[comp.file] : undefined;\n\n return compEntry?.signatures?.[comp.signatureName];\n }\n\n return undefined;\n}\n\nexport function resolveTemplateArgs(template: string, args: Args): string {\n return template.replaceAll(/\\{\\{args\\.(\\w+)\\}\\}/g, (_match, key) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const value = (args as Record<string, unknown>)[key];\n\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return `{{${String(value)}}}`;\n }\n\n return `{{@${key}}}`;\n });\n}\n\nexport function generateSource(\n component: { name?: string },\n args: Args,\n argTypes: ArgTypes,\n storyId?: string\n): string | undefined {\n const meta = storyId ? getByStoryId()[storyId] : undefined;\n\n if (meta?.inlineTemplate) {\n return resolveTemplateArgs(meta.inlineTemplate, args);\n }\n\n const name = meta?.componentName ?? component.name;\n\n if (!name || name === '(unknown template-only component)') {\n return undefined;\n }\n\n // Default-exported components are keyed by the `__DEFAULT__` sentinel in the\n // signatures map, while `name` is the real component name. Look the signature\n // up by the sentinel so blocks/args still resolve.\n const sig = signatureForComponent(meta?.signatureName ?? name);\n\n const propsArray = Object.entries(args)\n .filter(([k]) => !sig || !Object.hasOwn(sig.blocks, k))\n .map(([k, v]) => toArgument(k, v, argTypes))\n .filter(Boolean);\n\n const blockCode = sig ? generateBlockSourceCode(sig, args, '') : '';\n\n const propsStr = propsArray.join(' ');\n\n if (!blockCode) {\n if (propsArray.length === 0) {\n return `<${name} />`;\n }\n\n if (propsArray.length > 3) {\n return `<${name}\\n ${propsArray.join('\\n ')}\\n/>`;\n }\n\n return `<${name} ${propsStr} />`;\n }\n\n if (propsArray.length === 0) {\n return `<${name}>\\n${blockCode}\\n</${name}>`;\n }\n\n return `<${name} ${propsStr}>\\n${blockCode}\\n</${name}>`;\n}\n\nexport const sourceDecorator: DecoratorFunction<EmberRenderer> = (storyFn, context) => {\n const source = useRef<string | undefined>(undefined);\n const story = storyFn();\n\n useEffect(() => {\n // Always generate the source from the ORIGINAL story, not the decorator-wrapped\n // `storyFn()` result. A decorator wraps the story in another component, so its\n // `.name` (e.g. `IntlDecorator`) would leak into the generated source block.\n const rendered = (context.originalStoryFn as StoryFn)(context.args, context);\n const renderedForSource = isEmberStoryResult(rendered) ? rendered.component : rendered;\n\n if (!skipSourceRender(context)) {\n const code =\n generateSource(renderedForSource, context.args, context.argTypes, context.id) ?? undefined;\n\n void emitTransformCode(code, context);\n source.current = code;\n }\n });\n\n return story;\n};\n","import { SourceType } from 'storybook/internal/docs-tools';\nimport emberData from 'virtual:ember-storybook';\n\nimport { buildArgTypes } from './extractArgTypes';\nimport Page from './page';\nimport { sourceDecorator } from './source-decorator';\n\nimport type { ComponentFile, EmberMeta, StoryFile } from '../../node/types';\nimport type { EmberRenderer } from '../types';\nimport type { ComponentSignature } from 'ember-docgen';\nimport type {\n DecoratorFunction,\n Parameters,\n StoryContextForEnhancers,\n StrictArgTypes\n} from 'storybook/internal/types';\n\nconst data = emberData as EmberMeta;\n\nfunction resolveSig(entry: StoryFile | ComponentFile): ComponentSignature | undefined {\n if (!('component' in entry)) return undefined;\n\n const comp = entry.component;\n\n if (!comp.signatureName) return undefined;\n\n const compEntry = comp.file ? data[comp.file] : undefined;\n\n if (!compEntry || !('signatures' in compEntry)) return undefined;\n\n return compEntry.signatures[comp.signatureName];\n}\n\n/** Last path segment of a CSF title — used to match stories without `fileName`. */\nfunction titleLeaf(title: string | undefined): string | undefined {\n return title?.split('/').pop();\n}\n\nexport const argTypesEnhancers: ((\n context: StoryContextForEnhancers<EmberRenderer>\n) => StrictArgTypes)[] = [\n (context) => {\n const filePath = (context.parameters as Record<string, unknown>).fileName as string | undefined;\n\n if (filePath && Object.hasOwn(data, filePath)) {\n const sig = resolveSig(data[filePath]);\n\n if (sig) {\n return { ...buildArgTypes(sig), ...context.argTypes } as StrictArgTypes;\n }\n\n return context.argTypes;\n }\n\n // No `parameters.fileName` — fall back to matching the CSF title leaf\n // against indexed story files instead of picking an arbitrary signature.\n const leaf = titleLeaf(context.title);\n\n if (leaf) {\n for (const entry of Object.values(data)) {\n if (!('meta' in entry)) continue;\n\n if (titleLeaf(entry.meta.title) !== leaf) continue;\n\n const sig = resolveSig(entry);\n\n if (sig) {\n return { ...buildArgTypes(sig), ...context.argTypes } as StrictArgTypes;\n }\n }\n }\n\n return context.argTypes;\n }\n];\n\nexport const parameters: Parameters = {\n docs: {\n source: {\n type: SourceType.DYNAMIC,\n language: 'html'\n },\n page: Page\n }\n};\n\nexport const decorators: DecoratorFunction<EmberRenderer>[] = [sourceDecorator];\n"],"mappings":"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"}
1
+ {"version":3,"file":"config.mjs","names":["mapTypeToControl","type","category","options","sortArgTypes","argTypes","Object","fromEntries","entries","toSorted","a","b","localeCompare","buildArgTypes","sig","name","arg","args","description","undefined","raw","required","control","table","summary","defaultValue","isObject","value","mergeArgTypes","signatureArgTypes","storyArgTypes","merged","storyArg","sigArg","storyFields","filter","mergedArg","shouldShowArgsSection","metaArgTypes","keys","length","unwrapBlockParams","DEFAULT_EXPORT","hasSignatureMap","entry","Object","hasOwn","componentDisplayName","ref","data","filePath","exportName","undefined","rawEntry","componentEntry","meta","applyModifiers","signature","modifiers","length","blockedKeys","Set","pickedKeys","mod","name","key","typeArgs","add","filtered","size","fromEntries","entries","args","filter","k","has","collectSubcomponents","blocks","seen","result","block","values","param","params","componentRef","importPath","local","push","signatures","sig","Heading","createElement","styled","isHtmlElement","name","test","TableWrapper","table","theme","fontFamily","typography","fonts","base","borderSpacing","color","defaultText","fontSize","size","s2","lineHeight","textAlign","width","marginTop","marginBottom","marginInline","padding","border","verticalAlign","textOverflow","paddingLeft","paddingRight","th","textMutedColor","paddingTop","paddingBottom","td","tbody","filter","background","content","borderTop","appBorderColor","borderBlockStart","borderBlockEnd","borderInlineStart","borderInlineEnd","borderTopLeftRadius","appBorderRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","borderColor","renderHead","columns","className","map","col","renderBody","entries","entry","key","style","fontWeight","description","H2","weight","bold","letterSpacing","textTransform","DocsContext","Subheading","createElement","Fragment","useContext","NAVIGATE_URL","styled","componentDisplayName","TableWrapper","ParamType","code","theme","color","secondary","fontSize","fontWeight","ParamName","span","defaultText","ParamRow","div","typography","size","s2","lineHeight","marginBottom","ParamDesc","textMutedColor","s1","marginLeft","BlocksDiv","marginTop","BlocksNameCell","td","position","weight","bold","background","app","SubcomponentLink","a","primary","cursor","textDecoration","Indent","marginInlineStart","SubcomponentAnchor","name","children","context","hash","href","target","onClick","event","preventDefault","document","querySelector","CSS","escape","slice","scrollIntoView","behavior","block","channel","emit","displayTypeName","param","data","componentRef","local","undefined","type","renderType","subcomponentNames","displayType","typeIsSubcomponent","has","key","renderParam","isBlockParam","Object","hasOwn","renderParams","params","map","i","entries","flatMap","p","isNamed","startsWith","isSubcomponent","typeChildren","push","rows","description","BlocksTable","blocks","toSorted","nameA","_a","nameB","_b","length","displayName","className","BlocksSection","createElement","styled","isHtmlElement","ElementWrapper","div","theme","fontFamily","typography","fonts","base","color","defaultText","fontSize","size","s2","lineHeight","marginTop","marginBottom","span","fontWeight","marginRight","code","secondary","textDecoration","a","ElementBlock","element","elements","split","map","s","trim","filter","Boolean","length","children","key","i","name","entries","push","inner","href","target","rel","undefined","createElement","renderBody","renderHead","TableWrapper","renderPartsBody","entries","className","map","entry","key","name","style","fontSize","fontWeight","description","PartsTable","CssPropertiesTable","PureArgsTable","Subheading","createElement","styled","buildArgTypes","BlocksTable","ParamRow","ParamType","ElementBlock","H2","SubcomponentsSection","div","marginTop","marginBottom","SubEntry","SectionLabel","theme","fontWeight","color","defaultText","fontSize","typography","size","m1","renderSubcomponentSignature","sig","subcomponentNames","data","children","element","push","Object","keys","args","length","undefined","rows","blocks","key","style","SubcomponentsArea","components","Set","map","c","name","entries","comp","importPath","signature","id","Controls","Description","Primary","Stories","Subheading","Subtitle","Title","useOf","createElement","Fragment","emberData","BlocksSection","ElementBlock","CssPropertiesTable","PartsTable","SubcomponentsArea","H2","shouldShowArgsSection","collectSubcomponents","addSignature","signature","data","metaArgTypes","children","element","push","undefined","Object","keys","blocks","length","subcomponents","subcomponentNames","Set","map","s","name","components","style","customProperties","entries","description","parts","unshift","Page","resolved","storyFile","preparedMeta","parameters","fileName","storyEntry","storyComponent","component","compFile","file","compEntry","signatureName","signatures","argTypes","SourceType","emitTransformCode","useEffect","useRef","emberData","isEmberStoryResult","unwrapBlockParams","data","skipSourceRender","context","sourceParams","parameters","docs","source","type","DYNAMIC","isArgsStory","__isArgsStory","code","CODE","toArgument","key","value","argTypes","undefined","JSON","stringify","String","Object","hasOwn","generateBlockContent","blockInfo","params","length","paramNames","map","p","name","join","generateBlockSourceCode","sig","args","indent","blockNames","keys","blocks","blockName","arg","slotBindings","content","push","byStoryId","getByStoryId","entry","values","storyId","entries","componentName","signatureName","inlineTemplate","signatureForComponent","comp","component","compEntry","file","signatures","resolveTemplateArgs","template","replaceAll","_match","generateSource","meta","propsArray","filter","k","v","Boolean","blockCode","propsStr","sourceDecorator","storyFn","story","rendered","originalStoryFn","renderedForSource","id","current","SourceType","emberData","buildArgTypes","mergeArgTypes","sortArgTypes","Page","sourceDecorator","data","resolveSig","entry","undefined","comp","component","signatureName","compEntry","file","signatures","titleLeaf","title","split","pop","argTypesEnhancers","context","filePath","parameters","fileName","Object","hasOwn","sig","argTypes","leaf","values","meta","docs","source","type","DYNAMIC","language","page","decorators"],"sources":["../../../src/client/docs/extractArgTypes.ts","../../../src/client/docs/signature.ts","../../../src/client/docs/blocks/ui.ts","../../../src/client/docs/blocks/blocks.ts","../../../src/client/docs/blocks/element.ts","../../../src/client/docs/blocks/style.ts","../../../src/client/docs/blocks/subcomponents.ts","../../../src/client/docs/page.ts","../../../src/client/docs/source-decorator.ts","../../../src/client/docs/config.ts"],"sourcesContent":["import type { ArgTypeInfo, ComponentSignature } from 'ember-docgen';\n\nfunction mapTypeToControl(\n type: ArgTypeInfo\n):\n | false\n | { type: 'text' }\n | { type: 'number' }\n | { type: 'boolean' }\n | { type: 'select'; options: string[] }\n | { type: 'object' }\n | { type: 'function' }\n | { type: 'date' } {\n switch (type.category) {\n case 'string': {\n return { type: 'text' };\n }\n case 'number': {\n return { type: 'number' };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'function': {\n return { type: 'function' };\n }\n case 'enum': {\n return { type: 'select', options: type.options ?? [] };\n }\n\n default: {\n return { type: 'object' };\n }\n }\n}\n\n/**\n * Returns a new argTypes object with entries sorted alphabetically by name,\n * matching Storybook's `alpha` sort order. The input object is not mutated.\n */\nexport function sortArgTypes(argTypes: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(argTypes).toSorted(([a], [b]) => a.localeCompare(b)));\n}\n\nexport function buildArgTypes(sig: ComponentSignature): Record<string, unknown> {\n const argTypes: Record<string, unknown> = {};\n\n for (const [name, arg] of Object.entries(sig.args)) {\n argTypes[name] = {\n name,\n description: arg.description || undefined,\n type: {\n name: arg.type.raw,\n required: arg.required\n },\n control: mapTypeToControl(arg.type),\n table: {\n type: { summary: arg.type.raw },\n defaultValue: arg.defaultValue ? { summary: arg.defaultValue } : undefined\n }\n };\n }\n\n return sortArgTypes(argTypes);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * Merges signature-derived argTypes with the story-provided argTypes.\n *\n * Signature argTypes are the base; story argTypes enhance them for better\n * rendering (custom `name`, `control`, `options`, ...). For args present in\n * both, story fields win — but only when they carry an actual value, so an\n * explicit `undefined` never masks a signature field. The signature keeps the\n * `table` and `description` the story does not override.\n *\n * The `type` object is deep-merged: a story-provided partial `type` (e.g.\n * `type: 'string'`) keeps the signature's `required` flag unless the story\n * explicitly sets it, while the story's `type.name` still wins.\n */\nexport function mergeArgTypes(\n signatureArgTypes: Record<string, unknown>,\n storyArgTypes: Record<string, unknown>\n): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...signatureArgTypes };\n\n for (const [name, storyArg] of Object.entries(storyArgTypes)) {\n if (storyArg === undefined) continue;\n\n const sigArg = merged[name];\n\n if (!isObject(sigArg) || !isObject(storyArg)) {\n merged[name] = storyArg;\n continue;\n }\n\n const storyFields = Object.fromEntries(\n Object.entries(storyArg).filter(([, value]) => value !== undefined)\n );\n\n const mergedArg = { ...sigArg, ...storyFields };\n\n // Deep-merge `type` so a story-provided partial `type` does not drop the\n // signature's `required` flag (issue #48). The story's `type.name` still\n // wins; `required` survives unless the story explicitly sets it.\n if (isObject(sigArg.type) && isObject(storyFields.type)) {\n mergedArg.type = { ...sigArg.type, ...storyFields.type };\n }\n\n merged[name] = mergedArg;\n }\n\n return merged;\n}\n\n/**\n * Whether the docs page should render the Args/controls table: either the\n * component signature exposes args, or the meta carries story-provided\n * argTypes (e.g. for a template-only component with story argTypes but no\n * signature args).\n */\nexport function shouldShowArgsSection(\n sig: ComponentSignature,\n metaArgTypes?: Record<string, unknown>\n): boolean {\n return Object.keys(sig.args).length > 0 || Object.keys(metaArgTypes ?? {}).length > 0;\n}\n","import { unwrapBlockParams } from './block-params';\n\nimport type { ComponentMap } from '../../node/parser';\nimport type { ComponentFile, EmberMeta } from '../../node/types';\nimport type { BlockInfo, ComponentSignature } from 'ember-docgen';\n\n/**\n * Key used for default exports in signature/component maps. Mirrors\n * ember-docgen's `Default` sentinel — duplicated as a literal so client\n * code does not pull ember-docgen's node-only dependencies into the bundle.\n */\nexport const DEFAULT_EXPORT = '__DEFAULT__';\n\nexport interface SubcomponentRef {\n name: string;\n signature?: ComponentSignature;\n importPath?: string;\n}\n\n/**\n * Resolve the human-facing name of a referenced component export.\n *\n * Prefers the component's own declaration name over its export alias and\n * resolves the default-export sentinel to the real class name via the\n * component file's declaration map. Returns `undefined` when no better\n * name is known.\n */\nfunction hasSignatureMap(entry: unknown): entry is ComponentFile {\n return typeof entry === 'object' && entry !== null && Object.hasOwn(entry, 'signatures');\n}\n\nexport function componentDisplayName(\n ref: undefined | { filePath?: string; exportName?: string },\n data: EmberMeta\n): string | undefined {\n if (!ref?.filePath || !ref.exportName) return undefined;\n\n const rawEntry: unknown = data[ref.filePath];\n\n const componentEntry = hasSignatureMap(rawEntry) ? rawEntry : undefined;\n\n if (!componentEntry) {\n return ref.exportName === DEFAULT_EXPORT ? undefined : ref.exportName;\n }\n\n // Transitive component files contribute only `signatures` (no declaration\n // map) — fall back to the export name instead of the unresolved meta.\n const meta = (componentEntry as { meta?: ComponentMap }).meta;\n\n if (ref.exportName === DEFAULT_EXPORT) {\n return meta?.[DEFAULT_EXPORT];\n }\n\n return meta?.[ref.exportName] ?? ref.exportName;\n}\n\nexport function applyModifiers(\n signature: ComponentSignature,\n modifiers?: { name: string; typeArgs: string[] }[]\n): ComponentSignature {\n if (!modifiers || modifiers.length === 0) return signature;\n\n const blockedKeys = new Set<string>();\n const pickedKeys = new Set<string>();\n\n for (const mod of modifiers) {\n if (mod.name === 'WithBoundArgs' || mod.name === 'Omit') {\n for (const key of mod.typeArgs) blockedKeys.add(key);\n }\n\n if (mod.name === 'Pick') {\n for (const key of mod.typeArgs) pickedKeys.add(key);\n }\n }\n\n const filtered =\n pickedKeys.size > 0\n ? Object.fromEntries(Object.entries(signature.args).filter(([k]) => pickedKeys.has(k)))\n : Object.fromEntries(Object.entries(signature.args).filter(([k]) => !blockedKeys.has(k)));\n\n return { ...signature, args: filtered };\n}\n\nexport function collectSubcomponents(\n blocks: Record<string, BlockInfo>,\n data: EmberMeta\n): SubcomponentRef[] {\n const seen = new Set<string>();\n\n const result: SubcomponentRef[] = [];\n\n for (const block of Object.values(blocks)) {\n for (const param of unwrapBlockParams(block.params)) {\n if (!param.componentRef) {\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n continue;\n }\n\n const { filePath, exportName, importPath, modifiers } = param.componentRef;\n\n // Local components (non-exported) are named by the yield key — the\n // declaration name is an implementation detail.\n const name = param.componentRef.local\n ? param.name\n : (componentDisplayName(param.componentRef, data) ?? param.name);\n\n if (seen.has(name)) {\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n continue;\n }\n\n seen.add(name);\n\n if (importPath) {\n result.push({ name, importPath });\n } else if (filePath && Object.hasOwn(data, filePath)) {\n const entry = data[filePath] as ComponentFile;\n\n if (Object.hasOwn(entry.signatures, exportName)) {\n const sig = entry.signatures[exportName];\n\n result.push({\n name,\n signature: applyModifiers(sig, modifiers)\n });\n }\n } else if (filePath) {\n // Project-local file without an extractable signature\n // (e.g. a bare template-only component) — still list it by name.\n result.push({ name });\n }\n }\n }\n\n return result;\n}\n","/* eslint-disable unicorn/no-null */\nimport { Heading } from '@storybook/addon-docs/blocks';\nimport { createElement } from 'react';\nimport { styled, type Theme } from 'storybook/theming';\n\nexport interface Entry {\n name: string;\n description?: string;\n}\n\ntype StyleProps = { theme: Theme };\n\nexport function isHtmlElement(name: string): boolean {\n return /^HTML[A-Z]\\w*Element$/.test(name);\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nexport const TableWrapper = styled.table(({ theme }: StyleProps) => ({\n fontFamily: theme.typography.fonts.base,\n borderSpacing: 0,\n color: theme.color.defaultText,\n fontSize: theme.typography.size.s2 - 1,\n lineHeight: '19px',\n textAlign: 'left',\n width: '100%',\n marginTop: 25,\n marginBottom: 40,\n marginInline: 1,\n 'td, th': {\n padding: 0,\n border: 'none',\n verticalAlign: 'top',\n textOverflow: 'ellipsis'\n },\n 'th:first-of-type, td:first-of-type': {\n paddingLeft: 20\n },\n 'th:last-of-type, td:last-of-type': {\n paddingRight: 20\n },\n th: {\n color: theme.textMutedColor as string,\n paddingTop: 10,\n paddingBottom: 10,\n paddingLeft: 15,\n paddingRight: 15\n },\n td: {\n paddingTop: '10px',\n paddingBottom: '10px',\n '&:not(:first-of-type)': {\n paddingLeft: 15,\n paddingRight: 15\n },\n '&:last-of-type': {\n paddingRight: 20\n }\n },\n tbody: {\n filter:\n theme.base === 'light'\n ? 'drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.10))'\n : 'drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.20))',\n '> tr > *': {\n background: theme.background.content,\n borderTop: `1px solid ${theme.appBorderColor}`\n },\n '> tr:first-of-type > *': {\n borderBlockStart: `1px solid ${theme.appBorderColor}`\n },\n '> tr:last-of-type > *': {\n borderBlockEnd: `1px solid ${theme.appBorderColor}`\n },\n '> tr > *:first-of-type': {\n borderInlineStart: `1px solid ${theme.appBorderColor}`\n },\n '> tr > *:last-of-type': {\n borderInlineEnd: `1px solid ${theme.appBorderColor}`\n },\n '> tr:first-of-type > td:first-of-type': {\n borderTopLeftRadius: theme.appBorderRadius\n },\n '> tr:first-of-type > td:last-of-type': {\n borderTopRightRadius: theme.appBorderRadius\n },\n '> tr:last-of-type > td:first-of-type': {\n borderBottomLeftRadius: theme.appBorderRadius\n },\n '> tr:last-of-type > td:last-of-type': {\n borderBottomRightRadius: theme.appBorderRadius\n }\n },\n '@media (forced-colors: active)': {\n tbody: {\n filter: 'none',\n '> tr > *': {\n borderColor: 'CanvasText'\n }\n }\n }\n}));\n\nexport function renderHead(columns: string[]) {\n return createElement(\n 'thead',\n { className: 'docblock-argstable-head' },\n createElement(\n 'tr',\n null,\n ...columns.map((col) => createElement('th', null, createElement('span', null, col)))\n )\n );\n}\n\nexport function renderBody(entries: Entry[]) {\n return createElement(\n 'tbody',\n { className: 'docblock-argstable-body' },\n ...entries.map((entry) =>\n createElement(\n 'tr',\n { key: entry.name },\n createElement(\n 'td',\n null,\n createElement('span', { style: { fontWeight: 'bold' } }, entry.name)\n ),\n createElement('td', null, entry.description ?? '')\n )\n )\n );\n}\n\nexport const H2 = styled(Heading)(({ theme }) => ({\n fontSize: `${theme.typography.size.s2 - 1}px`,\n fontWeight: theme.typography.weight.bold,\n lineHeight: '16px',\n letterSpacing: '0.35em',\n textTransform: 'uppercase',\n color: theme.textMutedColor as string,\n border: 0,\n marginBottom: '12px',\n '&:first-of-type': { marginTop: '56px' }\n}));\n","import { DocsContext, Subheading } from '@storybook/addon-docs/blocks';\nimport { createElement, Fragment, type MouseEvent, type ReactNode, useContext } from 'react';\nimport { NAVIGATE_URL } from 'storybook/internal/core-events';\nimport { styled } from 'storybook/theming';\n\nimport { componentDisplayName } from '../signature';\nimport { TableWrapper } from './ui';\n\nimport type { EmberMeta } from '../../../node/types';\nimport type { BlockInfo, BlockParam, HashBlockParam } from 'ember-docgen';\n\nexport const ParamType = styled.code(({ theme }) => ({\n color: theme.color.secondary,\n fontSize: 12,\n fontWeight: 'bold'\n}));\n\nconst ParamName = styled.span(({ theme }) => ({\n fontWeight: 'bold',\n color: theme.color.defaultText\n}));\n\nexport const ParamRow = styled.div(({ theme }) => ({\n fontSize: theme.typography.size.s2 - 1,\n lineHeight: '19px',\n marginBottom: 2\n}));\n\nconst ParamDesc = styled.div(({ theme }) => ({\n color: theme.textMutedColor as string,\n fontSize: theme.typography.size.s1,\n lineHeight: '17px',\n marginBottom: 8,\n marginLeft: 20\n}));\n\nconst BlocksDiv = styled.div(() => ({\n marginTop: 25,\n marginBottom: 40\n}));\n\nconst BlocksNameCell = styled.td(({ theme }) => ({\n position: 'relative',\n fontWeight: theme.typography.weight.bold,\n fontSize: theme.typography.size.s1,\n background: `${theme.background.app} !important`,\n '& ~ td': {\n background: `${theme.background.app} !important`\n }\n}));\n\nconst SubcomponentLink = styled.a(({ theme }) => ({\n color: theme.color.primary,\n fontWeight: 'bold',\n cursor: 'pointer',\n textDecoration: 'none',\n '&:hover': { textDecoration: 'underline' }\n}));\n\nconst Indent = styled.span(() => ({\n marginInlineStart: '20px'\n}));\n\n/**\n * In-page anchor to a subcomponent section. Mirrors Storybook's own\n * in-docs navigation (TableOfContents / AnchorInPage): the default anchor\n * behavior is prevented — it would resolve against the preview iframe's\n * `<base>` and navigate away from Storybook — and instead the docs page\n * scrolls to the target while `NAVIGATE_URL` keeps the address-bar hash\n * (deep-linkable) in sync via the manager.\n */\nfunction SubcomponentAnchor({ name, children }: { name: string; children?: ReactNode }) {\n const context = useContext(DocsContext);\n const hash = `#subcomponent-${name}`;\n\n return createElement(\n SubcomponentLink,\n {\n href: hash,\n target: '_self',\n onClick: (event: MouseEvent) => {\n event.preventDefault();\n\n const target = document.querySelector(`#${CSS.escape(hash.slice(1))}`);\n\n if (target) {\n target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n context.channel.emit(NAVIGATE_URL, hash);\n }\n }\n },\n children\n );\n}\n\n/** Display name for a block param's type: the referenced component's own\n * name when available, the yield key for local components, otherwise the\n * raw type string. */\nfunction displayTypeName(param: BlockParam, data?: EmberMeta): string {\n if (param.componentRef?.local) return param.name;\n\n return (data ? componentDisplayName(param.componentRef, data) : undefined) ?? param.type;\n}\n\nfunction renderType(\n param: BlockParam,\n subcomponentNames: Set<string>,\n data?: EmberMeta\n): ReactNode {\n const displayType = displayTypeName(param, data);\n\n if (param.componentRef) {\n const typeIsSubcomponent = subcomponentNames.has(displayType);\n\n return typeIsSubcomponent\n ? createElement(SubcomponentAnchor, { key: 'type', name: displayType }, displayType)\n : createElement(ParamType, { key: 'type' }, displayType);\n }\n\n return createElement(ParamType, { key: 'type' }, param.type);\n}\n\nfunction renderParam(\n param: BlockParam,\n subcomponentNames: Set<string>,\n data?: EmberMeta\n): ReactNode[] {\n const type = renderType(param, subcomponentNames, data);\n const name = createElement(ParamName, { key: 'name' }, param.name);\n\n return [name, createElement('span', { key: 'colon' }, ': '), type];\n}\n\nfunction isBlockParam(param: BlockParam | HashBlockParam): param is BlockParam {\n return Object.hasOwn(param, 'name') && Object.hasOwn(param, 'type');\n}\n\nfunction renderParams(\n params: BlockInfo['params'],\n subcomponentNames: Set<string>,\n data?: EmberMeta\n): ReactNode[] {\n return params.map((param, i) => {\n if (!isBlockParam(param)) {\n const children: ReactNode[] = [\n createElement('span', { key: 'open' }, '- {'),\n createElement('br', { key: 'br-open' }),\n ...Object.entries(param).flatMap(([key, p]) => [\n createElement(Indent, { key: `indent-${key}` }),\n renderParam(p, subcomponentNames, data)\n ]),\n createElement('br', { key: 'br-close' }),\n createElement('span', { key: 'close' }, '}')\n ];\n\n return createElement(Fragment, { key: i }, ...children);\n }\n\n const isNamed = param.name && !param.name.startsWith('param');\n const displayType = displayTypeName(param, data);\n\n const isSubcomponent = subcomponentNames.has(displayType);\n\n const children: ReactNode[] = [];\n const typeChildren: ReactNode[] = [];\n\n if (isSubcomponent) {\n typeChildren.push(\n createElement(SubcomponentAnchor, { key: 'type', name: displayType }, displayType)\n );\n } else {\n typeChildren.push(createElement(ParamType, { key: 'type' }, displayType));\n }\n\n if (isNamed) {\n children.push(\n createElement('span', { key: 'sep' }, '- '),\n createElement(ParamName, { key: 'name' }, param.name),\n createElement('span', { key: 'colon' }, ': '),\n ...typeChildren\n );\n } else {\n children.push(createElement('span', { key: 'sep' }, '- '), ...typeChildren);\n }\n\n const rows: ReactNode[] = [createElement(ParamRow, { key: 'row' }, ...children)];\n\n if (param.description) {\n rows.push(createElement(ParamDesc, { key: 'desc' }, param.description));\n }\n\n return createElement(Fragment, { key: i }, ...rows);\n });\n}\n\nexport function BlocksTable({\n blocks,\n subcomponentNames,\n data\n}: {\n blocks: Record<string, BlockInfo>;\n subcomponentNames: Set<string>;\n data?: EmberMeta;\n}) {\n const entries = Object.entries(blocks).toSorted(([nameA, _a], [nameB, _b]) => {\n if (nameA === 'default') return -1;\n if (nameB === 'default') return -1;\n\n return 0;\n });\n\n if (entries.length === 0) return;\n\n const rows = [];\n\n for (const [name, block] of entries) {\n const displayName = `<:${name}>`;\n\n rows.push(\n createElement('tr', { key: name }, createElement(BlocksNameCell, undefined, displayName))\n );\n\n if (block.params.length > 0) {\n const params = renderParams(block.params, subcomponentNames, data);\n\n rows.push(\n createElement('tr', { key: `${name}-params` }, createElement('td', undefined, ...params))\n );\n }\n }\n\n return createElement(\n TableWrapper,\n { className: 'docblock-argstable sb-unstyled' },\n createElement('tbody', { className: 'docblock-argstable-body' }, rows)\n );\n}\n\nexport function BlocksSection({\n blocks,\n subcomponentNames,\n data\n}: {\n blocks: Record<string, BlockInfo>;\n subcomponentNames: Set<string>;\n data?: EmberMeta;\n}) {\n return createElement(\n BlocksDiv,\n undefined,\n createElement(Subheading, undefined, 'Blocks'),\n BlocksTable({ blocks, subcomponentNames, data })\n );\n}\n","import { createElement, type ReactNode } from 'react';\nimport { styled } from 'storybook/theming';\n\nimport { isHtmlElement } from './ui';\n\nconst ElementWrapper = styled.div(({ theme }) => ({\n fontFamily: theme.typography.fonts.base,\n color: theme.color.defaultText,\n fontSize: theme.typography.size.s2 - 1,\n lineHeight: '19px',\n marginTop: 25,\n marginBottom: 40,\n span: {\n '&:first-of-type': {\n fontWeight: 'bold',\n marginRight: 8\n }\n },\n code: {\n fontSize: 12,\n fontWeight: 'bold'\n },\n 'a code': {\n color: theme.color.secondary,\n textDecoration: 'none'\n },\n a: {\n color: theme.color.secondary,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline'\n }\n }\n}));\n\nexport function ElementBlock({ element }: { element: string }) {\n const elements = element\n .split(' | ')\n .map((s) => s.trim())\n .filter(Boolean);\n\n if (elements.length === 0) return;\n\n const children: ReactNode[] = [createElement('span', { key: 'label' }, 'Element:')];\n\n for (const [i, name] of elements.entries()) {\n if (i > 0) {\n children.push(createElement('span', { key: `sep-${i}` }, ' | '));\n }\n\n const inner = isHtmlElement(name)\n ? createElement(\n 'a',\n {\n key: `link-${name}`,\n href: `https://developer.mozilla.org/en-US/docs/Web/API/${name}`,\n target: '_blank',\n rel: 'noopener noreferrer'\n },\n name\n )\n : name;\n\n children.push(createElement('code', { key: name }, inner));\n }\n\n return createElement(ElementWrapper, undefined, ...children);\n}\n","/* eslint-disable unicorn/no-null */\nimport { createElement } from 'react';\n\nimport { type Entry, renderBody, renderHead, TableWrapper } from './ui';\n\nfunction renderPartsBody(entries: Entry[]) {\n return createElement(\n 'tbody',\n { className: 'docblock-argstable-body' },\n ...entries.map((entry) =>\n createElement(\n 'tr',\n { key: entry.name },\n createElement(\n 'td',\n null,\n createElement(\n 'code',\n { style: { fontSize: 12, fontWeight: 'bold' } },\n `[part=\"${entry.name}\"]`\n )\n ),\n createElement('td', null, entry.description ?? '')\n )\n )\n );\n}\n\nexport function PartsTable({ entries }: { entries: Entry[] }) {\n return createElement(\n TableWrapper,\n { className: 'docblock-argstable sb-unstyled' },\n renderHead(['Part', 'Description']),\n renderPartsBody(entries)\n );\n}\n\nexport function CssPropertiesTable({ entries }: { entries: Entry[] }) {\n return createElement(\n TableWrapper,\n { className: 'docblock-argstable sb-unstyled' },\n renderHead(['Property', 'Value']),\n renderBody(entries)\n );\n}\n","import { PureArgsTable, Subheading } from '@storybook/addon-docs/blocks';\nimport { createElement, type ReactNode } from 'react';\nimport { styled } from 'storybook/theming';\n\nimport { buildArgTypes } from '../extractArgTypes';\nimport { BlocksTable, ParamRow, ParamType } from './blocks';\nimport { ElementBlock } from './element';\nimport { H2 } from './ui';\n\nimport type { EmberMeta } from '../../../node/types';\nimport type { SubcomponentRef } from '../signature';\nimport type { ComponentSignature } from 'ember-docgen';\nimport type { ArgTypes } from 'storybook/internal/types';\n\nconst SubcomponentsSection = styled.div(() => ({\n marginTop: 25,\n marginBottom: 40\n}));\n\nconst SubEntry = styled.div(() => ({\n marginBottom: 24,\n '&:last-child': { marginBottom: 0 }\n}));\n\nconst SectionLabel = styled.div(({ theme }) => ({\n fontWeight: 'bold',\n color: theme.color.defaultText,\n fontSize: theme.typography.size.m1 - 2,\n marginBottom: 8\n}));\n\nfunction renderSubcomponentSignature(\n sig: ComponentSignature,\n subcomponentNames: Set<string>,\n data?: EmberMeta\n): ReactNode[] {\n const children: ReactNode[] = [];\n\n if (sig.element) {\n children.push(createElement(ElementBlock, { element: sig.element }));\n }\n\n if (Object.keys(sig.args).length > 0) {\n // Render from the subcomponent's own signature — the global argTypes\n // store only carries the main component's args.\n children.push(\n createElement(SectionLabel, undefined, 'Args'),\n createElement(PureArgsTable, { rows: buildArgTypes(sig) as ArgTypes })\n );\n }\n\n if (Object.keys(sig.blocks).length > 0) {\n children.push(\n createElement(SectionLabel, { key: 'blocks-label', style: { marginTop: 12 } }, 'Blocks'),\n createElement(BlocksTable, { blocks: sig.blocks, subcomponentNames, data })\n );\n }\n\n return children;\n}\n\nexport function SubcomponentsArea({\n components,\n data\n}: {\n components: SubcomponentRef[];\n data?: EmberMeta;\n}) {\n if (components.length === 0) return;\n\n const subcomponentNames = new Set(components.map((c) => c.name));\n\n const entries = components.map((comp) => {\n const children: ReactNode[] = [createElement(Subheading, undefined, comp.name)];\n\n if (comp.importPath) {\n children.push(\n createElement(\n ParamRow,\n { key: 'import', style: { marginBottom: 12 } },\n createElement('span', undefined, \"from '\"),\n createElement(ParamType, undefined, comp.importPath),\n createElement('span', undefined, \"'\")\n )\n );\n } else if (comp.signature) {\n children.push(...renderSubcomponentSignature(comp.signature, subcomponentNames, data));\n }\n\n return createElement(\n SubEntry,\n { id: `subcomponent-${comp.name}`, key: comp.name },\n ...children\n );\n });\n\n return createElement(\n SubcomponentsSection,\n undefined,\n createElement(H2, undefined, 'Subcomponents'),\n ...entries\n );\n}\n","import {\n Controls,\n Description,\n Primary,\n Stories,\n Subheading,\n Subtitle,\n Title,\n useOf\n} from '@storybook/addon-docs/blocks';\nimport { createElement, Fragment, type ReactNode } from 'react';\nimport emberData from 'virtual:ember-storybook';\n\nimport { BlocksSection } from './blocks/blocks';\nimport { ElementBlock } from './blocks/element';\nimport { CssPropertiesTable, PartsTable } from './blocks/style';\nimport { SubcomponentsArea } from './blocks/subcomponents';\nimport { H2 } from './blocks/ui';\nimport { shouldShowArgsSection } from './extractArgTypes';\nimport { collectSubcomponents } from './signature';\n\nimport type { EmberMeta } from '../../node/types';\nimport type { ComponentSignature } from 'ember-docgen';\n\nfunction addSignature(\n signature: ComponentSignature,\n data: EmberMeta,\n metaArgTypes?: Record<string, unknown>\n) {\n const children: ReactNode[] = [];\n\n if (signature.element) {\n children.push(createElement(ElementBlock, { element: signature.element }));\n }\n\n // Render unfiltered — the argTypes enhancer already merges\n // buildArgTypes(signature) into the store, so this mirrors\n // the Controls panel exactly. Also render story-provided argTypes\n // when the signature has no args (e.g. template-only components).\n if (shouldShowArgsSection(signature, metaArgTypes)) {\n children.push(createElement(Subheading, undefined, 'Args'), createElement(Controls));\n }\n\n if (Object.keys(signature.blocks).length > 0) {\n const subcomponents = collectSubcomponents(signature.blocks, data);\n const subcomponentNames = new Set(subcomponents.map((s) => s.name));\n\n children.push(\n createElement(BlocksSection, { blocks: signature.blocks, subcomponentNames, data })\n );\n\n if (subcomponents.length > 0) {\n children.push(createElement(SubcomponentsArea, { components: subcomponents, data }));\n }\n }\n\n if (Object.keys(signature.style.customProperties).length > 0) {\n const entries = Object.entries(signature.style.customProperties).map(([name, description]) => ({\n name,\n description\n }));\n\n children.push(\n createElement(Subheading, undefined, 'CSS Custom Properties'),\n createElement(CssPropertiesTable, { entries })\n );\n }\n\n if (Object.keys(signature.style.parts).length > 0) {\n const entries = Object.entries(signature.style.parts).map(([name, description]) => ({\n name,\n description\n }));\n\n children.push(\n createElement(Subheading, undefined, 'Parts'),\n createElement(PartsTable, { entries })\n );\n }\n\n if (children.length > 0) {\n children.unshift(createElement(H2, undefined, 'Signature'));\n }\n\n return children;\n}\n\nexport default function Page() {\n const resolved: {\n preparedMeta?: {\n argTypes?: Record<string, unknown>;\n title?: string;\n parameters?: Record<string, unknown>;\n };\n } = useOf('meta', ['meta']);\n\n const data = emberData as EmberMeta;\n const storyFile = resolved.preparedMeta?.parameters?.fileName as string | undefined;\n const storyEntry = storyFile ? data[storyFile] : undefined;\n const storyComponent = storyEntry && 'component' in storyEntry ? storyEntry.component : undefined;\n const compFile = storyComponent?.file;\n const compEntry = compFile ? data[compFile] : undefined;\n const signatureName = storyComponent?.signatureName ?? '';\n const signature =\n compEntry && 'signatures' in compEntry ? compEntry.signatures[signatureName] : undefined;\n\n const children: ReactNode[] = [\n createElement(Title),\n createElement(Subtitle),\n createElement(Description),\n createElement(Primary)\n ];\n\n if (signature) {\n children.push(...addSignature(signature, data, resolved.preparedMeta?.argTypes));\n }\n\n children.push(createElement(Stories));\n\n return createElement(Fragment, undefined, ...children);\n}\n","import { SourceType } from 'storybook/internal/docs-tools';\nimport { emitTransformCode, useEffect, useRef } from 'storybook/preview-api';\nimport emberData from 'virtual:ember-storybook';\n\nimport { isEmberStoryResult } from '../story-result';\nimport { unwrapBlockParams } from './block-params';\n\nimport type { StorySource } from '../../node/types';\nimport type { StoryFn } from '../public-types';\nimport type { EmberRenderer } from '../types';\nimport type { BlockInfo, ComponentSignature } from 'ember-docgen';\nimport type { Args, ArgTypes, DecoratorFunction } from 'storybook/internal/types';\n\nconst data = emberData as Record<\n string,\n {\n component?: { file?: string; signatureName?: string };\n source?: Record<string, StorySource>;\n signatures?: Record<string, ComponentSignature>;\n }\n>;\n\nfunction skipSourceRender(context: Parameters<DecoratorFunction<EmberRenderer>>[1]) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const sourceParams = context.parameters.docs?.source;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (sourceParams?.type === SourceType.DYNAMIC) {\n return false;\n }\n\n const isArgsStory = context.parameters.__isArgsStory as boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return (!isArgsStory || sourceParams?.code) ?? sourceParams?.type === SourceType.CODE;\n}\n\nexport function toArgument(key: string, value: unknown, argTypes: ArgTypes): string | undefined {\n if (value !== undefined && value !== null) {\n if (typeof value === 'string') {\n return `@${key}=${JSON.stringify(value)}`;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return `@${key}={{${String(value)}}}`;\n }\n\n if (Object.hasOwn(argTypes, key)) {\n return `@${key}={{@${key}}}`;\n }\n\n return undefined;\n }\n\n if (value === undefined && Object.hasOwn(argTypes, key)) {\n return `@${key}={{@${key}}}`;\n }\n\n return undefined;\n}\n\nfunction generateBlockContent(blockInfo: BlockInfo): string {\n if (blockInfo.params.length === 0) {\n return '...';\n }\n\n const paramNames = unwrapBlockParams(blockInfo.params)\n .map((p) => p.name)\n .join(', ');\n\n return `{{yield ${paramNames}}}`;\n}\n\nexport function generateBlockSourceCode(\n sig: ComponentSignature,\n args: Args,\n indent: string\n): string {\n const blockNames = Object.keys(sig.blocks);\n\n if (blockNames.length === 0) return '';\n\n const blocks: string[] = [];\n\n for (const blockName of blockNames) {\n const blockInfo = sig.blocks[blockName];\n const arg = (args as Record<string, unknown>)[blockName];\n\n if (arg === undefined && blockInfo.params.length === 0) {\n continue;\n }\n\n const params = unwrapBlockParams(blockInfo.params)\n .map((p) => p.name)\n .join(' ');\n const slotBindings = params ? ` as |${params}|` : '';\n\n const content = generateBlockContent(blockInfo);\n\n if (blockName === 'default' && !slotBindings) {\n blocks.push(content);\n } else {\n blocks.push(`${indent} <:${blockName}${slotBindings}>${content}</:${blockName}>`);\n }\n }\n\n return blocks.join('\\n');\n}\n\nlet byStoryId: Record<string, StorySource> | undefined;\n\nfunction getByStoryId(): Record<string, StorySource> {\n if (byStoryId) return byStoryId;\n\n byStoryId = {};\n\n for (const entry of Object.values(data)) {\n for (const [storyId, source] of Object.entries(entry.source ?? {})) {\n byStoryId[storyId] = {\n componentName: source.componentName,\n signatureName: source.signatureName,\n inlineTemplate: source.inlineTemplate\n };\n }\n }\n\n return byStoryId;\n}\n\nfunction signatureForComponent(name: string): ComponentSignature | undefined {\n for (const entry of Object.values(data)) {\n const comp = entry.component;\n\n if (comp?.signatureName !== name) continue;\n\n const compEntry = comp.file ? data[comp.file] : undefined;\n\n return compEntry?.signatures?.[comp.signatureName];\n }\n\n return undefined;\n}\n\nexport function resolveTemplateArgs(template: string, args: Args): string {\n return template.replaceAll(/\\{\\{args\\.(\\w+)\\}\\}/g, (_match, key) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const value = (args as Record<string, unknown>)[key];\n\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return `{{${String(value)}}}`;\n }\n\n return `{{@${key}}}`;\n });\n}\n\nexport function generateSource(\n component: { name?: string },\n args: Args,\n argTypes: ArgTypes,\n storyId?: string\n): string | undefined {\n const meta = storyId ? getByStoryId()[storyId] : undefined;\n\n if (meta?.inlineTemplate) {\n return resolveTemplateArgs(meta.inlineTemplate, args);\n }\n\n const name = meta?.componentName ?? component.name;\n\n if (!name || name === '(unknown template-only component)') {\n return undefined;\n }\n\n // Default-exported components are keyed by the `__DEFAULT__` sentinel in the\n // signatures map, while `name` is the real component name. Look the signature\n // up by the sentinel so blocks/args still resolve.\n const sig = signatureForComponent(meta?.signatureName ?? name);\n\n const propsArray = Object.entries(args)\n .filter(([k]) => !sig || !Object.hasOwn(sig.blocks, k))\n .map(([k, v]) => toArgument(k, v, argTypes))\n .filter(Boolean);\n\n const blockCode = sig ? generateBlockSourceCode(sig, args, '') : '';\n\n const propsStr = propsArray.join(' ');\n\n if (!blockCode) {\n if (propsArray.length === 0) {\n return `<${name} />`;\n }\n\n if (propsArray.length > 3) {\n return `<${name}\\n ${propsArray.join('\\n ')}\\n/>`;\n }\n\n return `<${name} ${propsStr} />`;\n }\n\n if (propsArray.length === 0) {\n return `<${name}>\\n${blockCode}\\n</${name}>`;\n }\n\n return `<${name} ${propsStr}>\\n${blockCode}\\n</${name}>`;\n}\n\nexport const sourceDecorator: DecoratorFunction<EmberRenderer> = (storyFn, context) => {\n const source = useRef<string | undefined>(undefined);\n const story = storyFn();\n\n useEffect(() => {\n // Always generate the source from the ORIGINAL story, not the decorator-wrapped\n // `storyFn()` result. A decorator wraps the story in another component, so its\n // `.name` (e.g. `IntlDecorator`) would leak into the generated source block.\n const rendered = (context.originalStoryFn as StoryFn)(context.args, context);\n const renderedForSource = isEmberStoryResult(rendered) ? rendered.component : rendered;\n\n if (!skipSourceRender(context)) {\n const code =\n generateSource(renderedForSource, context.args, context.argTypes, context.id) ?? undefined;\n\n void emitTransformCode(code, context);\n source.current = code;\n }\n });\n\n return story;\n};\n","import { SourceType } from 'storybook/internal/docs-tools';\nimport emberData from 'virtual:ember-storybook';\n\nimport { buildArgTypes, mergeArgTypes, sortArgTypes } from './extractArgTypes';\nimport Page from './page';\nimport { sourceDecorator } from './source-decorator';\n\nimport type { ComponentFile, EmberMeta, StoryFile } from '../../node/types';\nimport type { EmberRenderer } from '../types';\nimport type { ComponentSignature } from 'ember-docgen';\nimport type {\n DecoratorFunction,\n Parameters,\n StoryContextForEnhancers,\n StrictArgTypes\n} from 'storybook/internal/types';\n\nconst data = emberData as EmberMeta;\n\nfunction resolveSig(entry: StoryFile | ComponentFile): ComponentSignature | undefined {\n if (!('component' in entry)) return undefined;\n\n const comp = entry.component;\n\n if (!comp.signatureName) return undefined;\n\n const compEntry = comp.file ? data[comp.file] : undefined;\n\n if (!compEntry || !('signatures' in compEntry)) return undefined;\n\n return compEntry.signatures[comp.signatureName];\n}\n\n/** Last path segment of a CSF title — used to match stories without `fileName`. */\nfunction titleLeaf(title: string | undefined): string | undefined {\n return title?.split('/').pop();\n}\n\nexport const argTypesEnhancers: ((\n context: StoryContextForEnhancers<EmberRenderer>\n) => StrictArgTypes)[] = [\n (context) => {\n const filePath = (context.parameters as Record<string, unknown>).fileName as string | undefined;\n\n if (filePath && Object.hasOwn(data, filePath)) {\n const sig = resolveSig(data[filePath]);\n\n if (sig) {\n return sortArgTypes(mergeArgTypes(buildArgTypes(sig), context.argTypes)) as StrictArgTypes;\n }\n\n return sortArgTypes(context.argTypes) as StrictArgTypes;\n }\n\n // No `parameters.fileName` — fall back to matching the CSF title leaf\n // against indexed story files instead of picking an arbitrary signature.\n const leaf = titleLeaf(context.title);\n\n if (leaf) {\n for (const entry of Object.values(data)) {\n if (!('meta' in entry)) continue;\n\n if (titleLeaf(entry.meta.title) !== leaf) continue;\n\n const sig = resolveSig(entry);\n\n if (sig) {\n return sortArgTypes(\n mergeArgTypes(buildArgTypes(sig), context.argTypes)\n ) as StrictArgTypes;\n }\n }\n }\n\n return sortArgTypes(context.argTypes) as StrictArgTypes;\n }\n];\n\nexport const parameters: Parameters = {\n docs: {\n source: {\n type: SourceType.DYNAMIC,\n language: 'html'\n },\n page: Page\n }\n};\n\nexport const decorators: DecoratorFunction<EmberRenderer>[] = [sourceDecorator];\n"],"mappings":"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"}