@activecollab/components 2.0.415 → 2.0.416

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.
Files changed (38) hide show
  1. package/dist/cjs/components/PortableText/Styles.js +20 -2
  2. package/dist/cjs/components/PortableText/Styles.js.map +1 -1
  3. package/dist/cjs/components/PortableText/renderers.js +10 -4
  4. package/dist/cjs/components/PortableText/renderers.js.map +1 -1
  5. package/dist/cjs/components/PortableText/types.js +21 -2
  6. package/dist/cjs/components/PortableText/types.js.map +1 -1
  7. package/dist/cjs/components/PortableText/types.test.js +120 -0
  8. package/dist/cjs/components/PortableText/types.test.js.map +1 -1
  9. package/dist/cjs/presentation/shared/FeatureAvailability.js +217 -0
  10. package/dist/cjs/presentation/shared/FeatureAvailability.js.map +1 -0
  11. package/dist/cjs/presentation/shared/index.js +16 -1
  12. package/dist/cjs/presentation/shared/index.js.map +1 -1
  13. package/dist/esm/components/PortableText/Styles.d.ts +19 -1
  14. package/dist/esm/components/PortableText/Styles.d.ts.map +1 -1
  15. package/dist/esm/components/PortableText/Styles.js +20 -2
  16. package/dist/esm/components/PortableText/Styles.js.map +1 -1
  17. package/dist/esm/components/PortableText/renderers.d.ts.map +1 -1
  18. package/dist/esm/components/PortableText/renderers.js +10 -4
  19. package/dist/esm/components/PortableText/renderers.js.map +1 -1
  20. package/dist/esm/components/PortableText/types.d.ts +6 -1
  21. package/dist/esm/components/PortableText/types.d.ts.map +1 -1
  22. package/dist/esm/components/PortableText/types.js +17 -2
  23. package/dist/esm/components/PortableText/types.js.map +1 -1
  24. package/dist/esm/components/PortableText/types.test.js +120 -0
  25. package/dist/esm/components/PortableText/types.test.js.map +1 -1
  26. package/dist/esm/presentation/shared/FeatureAvailability.d.ts +52 -0
  27. package/dist/esm/presentation/shared/FeatureAvailability.d.ts.map +1 -0
  28. package/dist/esm/presentation/shared/FeatureAvailability.js +203 -0
  29. package/dist/esm/presentation/shared/FeatureAvailability.js.map +1 -0
  30. package/dist/esm/presentation/shared/index.d.ts +2 -0
  31. package/dist/esm/presentation/shared/index.d.ts.map +1 -1
  32. package/dist/esm/presentation/shared/index.js +1 -0
  33. package/dist/esm/presentation/shared/index.js.map +1 -1
  34. package/dist/index.js +51 -8
  35. package/dist/index.js.map +1 -1
  36. package/dist/index.min.js +1 -1
  37. package/dist/index.min.js.map +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FeatureAvailability = exports.DEFAULT_FEATURE_AVAILABILITY = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * FeatureAvailability — a compact, data-driven block that states where a
12
+ * feature is available: on which hosting, on which plans and to which roles.
13
+ *
14
+ * It is the reusable version of the availability panel used in the Help Docs
15
+ * example articles, extracted so several stories (and, later, the real
16
+ * PortableText renderer) can share one implementation and one visual language:
17
+ *
18
+ * • green check → available
19
+ * • analog clock → decided but not shipped yet ("to be determined")
20
+ * • strikethrough → not included
21
+ *
22
+ * The component is theme-agnostic (all colors come from `--color-*` tokens) and
23
+ * self-contained (it carries its own typography, so it renders correctly
24
+ * outside the article body as well).
25
+ */
26
+
27
+ /* ------------------------------------------------------------------ */
28
+ /* Marks */
29
+ /* ------------------------------------------------------------------ */
30
+
31
+ var CheckMark = function CheckMark() {
32
+ return /*#__PURE__*/_react.default.createElement("svg", {
33
+ className: "ap-ic ap-yes",
34
+ viewBox: "0 0 16 16",
35
+ width: "15",
36
+ height: "15",
37
+ "aria-hidden": true
38
+ }, /*#__PURE__*/_react.default.createElement("path", {
39
+ d: "M13 4.6 L6.5 11.4 L3 8",
40
+ fill: "none",
41
+ stroke: "currentColor",
42
+ strokeWidth: "2",
43
+ strokeLinecap: "round",
44
+ strokeLinejoin: "round"
45
+ }));
46
+ };
47
+ var ClockMark = function ClockMark() {
48
+ return /*#__PURE__*/_react.default.createElement("svg", {
49
+ className: "ap-ic ap-clock",
50
+ viewBox: "0 0 16 16",
51
+ width: "14",
52
+ height: "14",
53
+ "aria-hidden": true
54
+ }, /*#__PURE__*/_react.default.createElement("circle", {
55
+ cx: "8",
56
+ cy: "8",
57
+ r: "6.2",
58
+ fill: "none",
59
+ stroke: "currentColor",
60
+ strokeWidth: "1.4"
61
+ }), /*#__PURE__*/_react.default.createElement("path", {
62
+ d: "M8 8 L8 4.4 M8 8 L10.5 9.3",
63
+ fill: "none",
64
+ stroke: "currentColor",
65
+ strokeWidth: "1.4",
66
+ strokeLinecap: "round"
67
+ }));
68
+ };
69
+ var StatusIcon = function StatusIcon(_ref) {
70
+ var status = _ref.status;
71
+ if (status === "available") {
72
+ return /*#__PURE__*/_react.default.createElement(CheckMark, null);
73
+ }
74
+ if (status === "pending") {
75
+ return /*#__PURE__*/_react.default.createElement(ClockMark, null);
76
+ }
77
+ return null;
78
+ };
79
+
80
+ /** A nested mark inside parentheses, e.g. "PM ✓". */
81
+ var ChildMark = function ChildMark(_ref2) {
82
+ var mark = _ref2.mark;
83
+ return mark.status === "excluded" ? /*#__PURE__*/_react.default.createElement("span", {
84
+ className: "ap-excluded"
85
+ }, mark.label) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, mark.label, " ", /*#__PURE__*/_react.default.createElement(StatusIcon, {
86
+ status: mark.status
87
+ }));
88
+ };
89
+ var Mark = function Mark(_ref3) {
90
+ var _mark$children;
91
+ var mark = _ref3.mark,
92
+ iconPosition = _ref3.iconPosition;
93
+ var hasChildren = Boolean(mark.children && mark.children.length > 0);
94
+ var excluded = mark.status === "excluded";
95
+ var icon = hasChildren ? null : /*#__PURE__*/_react.default.createElement(StatusIcon, {
96
+ status: mark.status
97
+ });
98
+ return /*#__PURE__*/_react.default.createElement("span", {
99
+ className: excluded ? "ap-item ap-excluded" : "ap-item"
100
+ }, iconPosition === "before" && icon, mark.label, mark.note && /*#__PURE__*/_react.default.createElement("span", {
101
+ className: "ap-sub"
102
+ }, mark.note), mark.pending && /*#__PURE__*/_react.default.createElement("span", {
103
+ className: "ap-tbd"
104
+ }, mark.pending), hasChildren && /*#__PURE__*/_react.default.createElement("span", {
105
+ className: "ap-sub"
106
+ }, "(", (_mark$children = mark.children) === null || _mark$children === void 0 ? void 0 : _mark$children.map(function (child, index) {
107
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
108
+ key: child.label
109
+ }, index > 0 && " / ", /*#__PURE__*/_react.default.createElement(ChildMark, {
110
+ mark: child
111
+ }));
112
+ }), ")"), iconPosition === "after" && icon);
113
+ };
114
+
115
+ /* ------------------------------------------------------------------ */
116
+ /* Panel */
117
+ /* ------------------------------------------------------------------ */
118
+
119
+ var StyledPanel = _styledComponents.default.div.withConfig({
120
+ displayName: "FeatureAvailability__StyledPanel",
121
+ componentId: "sc-42kyhy-0"
122
+ })(["font-family:-apple-system,BlinkMacSystemFont,\"Roboto\",\"Helvetica Neue\",Arial,sans-serif;font-size:13px;line-height:20px;color:var(--color-theme-900);padding:12px 16px;border:1px solid var(--color-theme-300);border-radius:10px;background:var(--color-theme-100);.ap-row{display:flex;gap:10px;padding:6px 0;align-items:baseline;flex-wrap:wrap;}.ap-row:first-of-type{padding-top:0;}.ap-row:last-of-type{padding-bottom:0;}.ap-row + .ap-row{border-top:1px dashed var(--color-theme-300);}.ap-label{flex:0 0 84px;color:var(--color-theme-700);font-weight:600;font-size:13px;}.ap-vals{flex:1 1 240px;display:flex;flex-wrap:wrap;gap:4px 14px;align-items:center;}.ap-item{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;}.ap-sub{color:var(--color-theme-600);}.ap-tbd{color:var(--color-theme-600);font-style:italic;}.ap-sep{color:var(--color-theme-400);}.ap-excluded{text-decoration:line-through;color:var(--color-theme-500);}.ap-ic{flex:none;vertical-align:-2px;}.ap-yes{color:var(--color-green-olive-drab);}.ap-clock{color:var(--color-theme-600);}"]);
123
+ var FeatureAvailability = exports.FeatureAvailability = function FeatureAvailability(_ref4) {
124
+ var rows = _ref4.rows,
125
+ className = _ref4.className;
126
+ return /*#__PURE__*/_react.default.createElement(StyledPanel, {
127
+ className: className,
128
+ "aria-label": "Feature availability"
129
+ }, rows.map(function (row) {
130
+ var _row$iconPosition;
131
+ var iconPosition = (_row$iconPosition = row.iconPosition) !== null && _row$iconPosition !== void 0 ? _row$iconPosition : "after";
132
+ return /*#__PURE__*/_react.default.createElement("div", {
133
+ className: "ap-row",
134
+ key: row.label
135
+ }, /*#__PURE__*/_react.default.createElement("span", {
136
+ className: "ap-label"
137
+ }, row.label), /*#__PURE__*/_react.default.createElement("span", {
138
+ className: "ap-vals"
139
+ }, row.items.map(function (item, index) {
140
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
141
+ key: item.label
142
+ }, index > 0 && row.separated && /*#__PURE__*/_react.default.createElement("span", {
143
+ className: "ap-sep"
144
+ }, "\xB7"), /*#__PURE__*/_react.default.createElement(Mark, {
145
+ mark: item,
146
+ iconPosition: iconPosition
147
+ }));
148
+ })));
149
+ }));
150
+ };
151
+
152
+ /* ------------------------------------------------------------------ */
153
+ /* Illustrative defaults */
154
+ /* ------------------------------------------------------------------ */
155
+
156
+ /**
157
+ * A realistic GA feature: shipped on Cloud, self-hosted still to be scheduled,
158
+ * on every plan, for internal roles but not for clients. Exercises all three
159
+ * marks (check / clock / strikethrough) out of the box.
160
+ */
161
+ var DEFAULT_FEATURE_AVAILABILITY = exports.DEFAULT_FEATURE_AVAILABILITY = {
162
+ rows: [{
163
+ label: "Availability",
164
+ iconPosition: "before",
165
+ separated: true,
166
+ items: [{
167
+ label: "Cloud",
168
+ status: "available",
169
+ note: "(stable, since Jun 17 2026)"
170
+ }, {
171
+ label: "Self-Hosted",
172
+ status: "pending",
173
+ pending: "to be determined"
174
+ }]
175
+ }, {
176
+ label: "Plans",
177
+ items: [{
178
+ label: "S–Mega",
179
+ status: "available"
180
+ }, {
181
+ label: "Plus",
182
+ status: "available"
183
+ }, {
184
+ label: "Pro",
185
+ status: "available"
186
+ }, {
187
+ label: "Pro+Get-Paid",
188
+ status: "available"
189
+ }]
190
+ }, {
191
+ label: "Roles",
192
+ items: [{
193
+ label: "Owner",
194
+ status: "available"
195
+ }, {
196
+ label: "Member",
197
+ status: "available"
198
+ }, {
199
+ label: "Member+",
200
+ status: "available",
201
+ children: [{
202
+ label: "PM",
203
+ status: "available"
204
+ }, {
205
+ label: "FM",
206
+ status: "available"
207
+ }]
208
+ }, {
209
+ label: "Client",
210
+ status: "excluded"
211
+ }, {
212
+ label: "Client+",
213
+ status: "excluded"
214
+ }]
215
+ }]
216
+ };
217
+ //# sourceMappingURL=FeatureAvailability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureAvailability.js","names":["_react","_interopRequireDefault","require","_styledComponents","e","__esModule","default","CheckMark","createElement","className","viewBox","width","height","d","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","ClockMark","cx","cy","r","StatusIcon","_ref","status","ChildMark","_ref2","mark","label","Fragment","Mark","_ref3","_mark$children","iconPosition","hasChildren","Boolean","children","length","excluded","icon","note","pending","map","child","index","key","StyledPanel","styled","div","withConfig","displayName","componentId","FeatureAvailability","exports","_ref4","rows","row","_row$iconPosition","items","item","separated","DEFAULT_FEATURE_AVAILABILITY"],"sources":["../../../../src/presentation/shared/FeatureAvailability.tsx"],"sourcesContent":["import React, { ReactElement } from \"react\";\n\nimport styled from \"styled-components\";\n\n/**\n * FeatureAvailability — a compact, data-driven block that states where a\n * feature is available: on which hosting, on which plans and to which roles.\n *\n * It is the reusable version of the availability panel used in the Help Docs\n * example articles, extracted so several stories (and, later, the real\n * PortableText renderer) can share one implementation and one visual language:\n *\n * • green check → available\n * • analog clock → decided but not shipped yet (\"to be determined\")\n * • strikethrough → not included\n *\n * The component is theme-agnostic (all colors come from `--color-*` tokens) and\n * self-contained (it carries its own typography, so it renders correctly\n * outside the article body as well).\n */\n\nexport type AvailabilityStatus = \"available\" | \"pending\" | \"excluded\";\n\nexport interface AvailabilityMark {\n label: string;\n status: AvailabilityStatus;\n /** Muted parenthetical, e.g. \"(stable, since Jun 17 2026)\". Include the parens. */\n note?: string;\n /** Italic muted trailing text for the pending state, e.g. \"to be determined\". */\n pending?: string;\n /**\n * Nested marks rendered in parentheses, e.g. Member+ (PM ✓ / FM ✓). When a\n * mark has children it does not render its own status icon — the children\n * carry the marks.\n */\n children?: AvailabilityMark[];\n}\n\nexport interface AvailabilityRow {\n label: string;\n items: AvailabilityMark[];\n /** Icon before the label (Availability row) or after it (Plans / Roles). Default \"after\". */\n iconPosition?: \"before\" | \"after\";\n /** Separate items with a middot (used on the Availability row). Default false. */\n separated?: boolean;\n}\n\nexport interface FeatureAvailabilityProps {\n rows: AvailabilityRow[];\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Marks */\n/* ------------------------------------------------------------------ */\n\nconst CheckMark = (): ReactElement => (\n <svg\n className=\"ap-ic ap-yes\"\n viewBox=\"0 0 16 16\"\n width=\"15\"\n height=\"15\"\n aria-hidden\n >\n <path\n d=\"M13 4.6 L6.5 11.4 L3 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst ClockMark = (): ReactElement => (\n <svg\n className=\"ap-ic ap-clock\"\n viewBox=\"0 0 16 16\"\n width=\"14\"\n height=\"14\"\n aria-hidden\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6.2\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M8 8 L8 4.4 M8 8 L10.5 9.3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nconst StatusIcon = ({\n status,\n}: {\n status: AvailabilityStatus;\n}): ReactElement | null => {\n if (status === \"available\") {\n return <CheckMark />;\n }\n if (status === \"pending\") {\n return <ClockMark />;\n }\n return null;\n};\n\n/** A nested mark inside parentheses, e.g. \"PM ✓\". */\nconst ChildMark = ({ mark }: { mark: AvailabilityMark }): ReactElement =>\n mark.status === \"excluded\" ? (\n <span className=\"ap-excluded\">{mark.label}</span>\n ) : (\n <>\n {mark.label} <StatusIcon status={mark.status} />\n </>\n );\n\nconst Mark = ({\n mark,\n iconPosition,\n}: {\n mark: AvailabilityMark;\n iconPosition: \"before\" | \"after\";\n}): ReactElement => {\n const hasChildren = Boolean(mark.children && mark.children.length > 0);\n const excluded = mark.status === \"excluded\";\n const icon = hasChildren ? null : <StatusIcon status={mark.status} />;\n\n return (\n <span className={excluded ? \"ap-item ap-excluded\" : \"ap-item\"}>\n {iconPosition === \"before\" && icon}\n {mark.label}\n {mark.note && <span className=\"ap-sub\">{mark.note}</span>}\n {mark.pending && <span className=\"ap-tbd\">{mark.pending}</span>}\n {hasChildren && (\n <span className=\"ap-sub\">\n (\n {mark.children?.map((child, index) => (\n <React.Fragment key={child.label}>\n {index > 0 && \" / \"}\n <ChildMark mark={child} />\n </React.Fragment>\n ))}\n )\n </span>\n )}\n {iconPosition === \"after\" && icon}\n </span>\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* Panel */\n/* ------------------------------------------------------------------ */\n\nconst StyledPanel = styled.div`\n font-family: -apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\",\n Arial, sans-serif;\n font-size: 13px;\n line-height: 20px;\n color: var(--color-theme-900);\n padding: 12px 16px;\n border: 1px solid var(--color-theme-300);\n border-radius: 10px;\n background: var(--color-theme-100);\n\n .ap-row {\n display: flex;\n gap: 10px;\n padding: 6px 0;\n align-items: baseline;\n flex-wrap: wrap;\n }\n\n .ap-row:first-of-type {\n padding-top: 0;\n }\n\n .ap-row:last-of-type {\n padding-bottom: 0;\n }\n\n .ap-row + .ap-row {\n border-top: 1px dashed var(--color-theme-300);\n }\n\n .ap-label {\n flex: 0 0 84px;\n color: var(--color-theme-700);\n font-weight: 600;\n font-size: 13px;\n }\n\n .ap-vals {\n flex: 1 1 240px;\n display: flex;\n flex-wrap: wrap;\n gap: 4px 14px;\n align-items: center;\n }\n\n .ap-item {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n white-space: nowrap;\n }\n\n .ap-sub {\n color: var(--color-theme-600);\n }\n\n .ap-tbd {\n color: var(--color-theme-600);\n font-style: italic;\n }\n\n .ap-sep {\n color: var(--color-theme-400);\n }\n\n .ap-excluded {\n text-decoration: line-through;\n color: var(--color-theme-500);\n }\n\n .ap-ic {\n flex: none;\n vertical-align: -2px;\n }\n\n .ap-yes {\n color: var(--color-green-olive-drab);\n }\n\n .ap-clock {\n color: var(--color-theme-600);\n }\n`;\n\nexport const FeatureAvailability = ({\n rows,\n className,\n}: FeatureAvailabilityProps): ReactElement => (\n <StyledPanel className={className} aria-label=\"Feature availability\">\n {rows.map((row) => {\n const iconPosition = row.iconPosition ?? \"after\";\n\n return (\n <div className=\"ap-row\" key={row.label}>\n <span className=\"ap-label\">{row.label}</span>\n <span className=\"ap-vals\">\n {row.items.map((item, index) => (\n <React.Fragment key={item.label}>\n {index > 0 && row.separated && (\n <span className=\"ap-sep\">·</span>\n )}\n <Mark mark={item} iconPosition={iconPosition} />\n </React.Fragment>\n ))}\n </span>\n </div>\n );\n })}\n </StyledPanel>\n);\n\n/* ------------------------------------------------------------------ */\n/* Illustrative defaults */\n/* ------------------------------------------------------------------ */\n\n/**\n * A realistic GA feature: shipped on Cloud, self-hosted still to be scheduled,\n * on every plan, for internal roles but not for clients. Exercises all three\n * marks (check / clock / strikethrough) out of the box.\n */\nexport const DEFAULT_FEATURE_AVAILABILITY: FeatureAvailabilityProps = {\n rows: [\n {\n label: \"Availability\",\n iconPosition: \"before\",\n separated: true,\n items: [\n {\n label: \"Cloud\",\n status: \"available\",\n note: \"(stable, since Jun 17 2026)\",\n },\n {\n label: \"Self-Hosted\",\n status: \"pending\",\n pending: \"to be determined\",\n },\n ],\n },\n {\n label: \"Plans\",\n items: [\n { label: \"S–Mega\", status: \"available\" },\n { label: \"Plus\", status: \"available\" },\n { label: \"Pro\", status: \"available\" },\n { label: \"Pro+Get-Paid\", status: \"available\" },\n ],\n },\n {\n label: \"Roles\",\n items: [\n { label: \"Owner\", status: \"available\" },\n { label: \"Member\", status: \"available\" },\n {\n label: \"Member+\",\n status: \"available\",\n children: [\n { label: \"PM\", status: \"available\" },\n { label: \"FM\", status: \"available\" },\n ],\n },\n { label: \"Client\", status: \"excluded\" },\n { label: \"Client+\", status: \"excluded\" },\n ],\n },\n ],\n};\n"],"mappings":"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","ignoreList":[]}
@@ -44,7 +44,9 @@ var _exportNames = {
44
44
  SettingsContent: true,
45
45
  StyledSettingRow: true,
46
46
  RowText: true,
47
- SettingRow: true
47
+ SettingRow: true,
48
+ FeatureAvailability: true,
49
+ DEFAULT_FEATURE_AVAILABILITY: true
48
50
  };
49
51
  Object.defineProperty(exports, "BackupCodesDialogs", {
50
52
  enumerable: true,
@@ -88,12 +90,24 @@ Object.defineProperty(exports, "CreateLoginCodeDialogs", {
88
90
  return _TwoFactorDialogs.CreateLoginCodeDialogs;
89
91
  }
90
92
  });
93
+ Object.defineProperty(exports, "DEFAULT_FEATURE_AVAILABILITY", {
94
+ enumerable: true,
95
+ get: function get() {
96
+ return _FeatureAvailability.DEFAULT_FEATURE_AVAILABILITY;
97
+ }
98
+ });
91
99
  Object.defineProperty(exports, "DocLinkContext", {
92
100
  enumerable: true,
93
101
  get: function get() {
94
102
  return _MessageDialog.DocLinkContext;
95
103
  }
96
104
  });
105
+ Object.defineProperty(exports, "FeatureAvailability", {
106
+ enumerable: true,
107
+ get: function get() {
108
+ return _FeatureAvailability.FeatureAvailability;
109
+ }
110
+ });
97
111
  Object.defineProperty(exports, "FloatingControls", {
98
112
  enumerable: true,
99
113
  get: function get() {
@@ -322,4 +336,5 @@ var _UserMenu = require("./UserMenu");
322
336
  var _TwoFactorShield = require("./TwoFactorShield");
323
337
  var _TwoFactorDialogs = require("./TwoFactorDialogs");
324
338
  var _settings = require("./settings");
339
+ var _FeatureAvailability = require("./FeatureAvailability");
325
340
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_tokens","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_MainLogo","_RoundAvatar","_PresentationShell","_headers","_FloatingControls","_MessageDialog","_HelpAndSupportMenu","_LinkingCommandsButton","_LinkBranchOrPullRequestDialog","_ConnectRepositoryDialog","_WebhookLogsDialog","_SourceCodeSection","_SuggestSubtasksButton","_TaskOptionsMenu","_UserMenu","_TwoFactorShield","_TwoFactorDialogs","_settings"],"sources":["../../../../src/presentation/shared/index.ts"],"sourcesContent":["/**\n * Shared building blocks for the Presentation mock-ups (`Presentation/*`\n * stories). The application shell, page headers, tab bar and small widgets are\n * defined once here and reused by the List view, Column view, Task sheet and\n * empty-page stories so the chrome stays identical and in one place.\n */\nexport * from \"./tokens\";\nexport { MainLogo } from \"./MainLogo\";\nexport { RoundAvatar } from \"./RoundAvatar\";\nexport { PresentationShell, StyledPagePaper } from \"./PresentationShell\";\nexport type { PresentationShellProps } from \"./PresentationShell\";\nexport { PageHeader, ProjectPageHeader, TabHeader } from \"./headers\";\nexport type {\n PageHeaderProps,\n ProjectPageHeaderProps,\n TabHeaderProps,\n} from \"./headers\";\nexport { FloatingControls } from \"./FloatingControls\";\nexport {\n MessageDialog,\n DocLinkContext,\n messageComponents,\n} from \"./MessageDialog\";\nexport type {\n MessageDialogProps,\n MessageDialogSize,\n OpenArticleHandler,\n} from \"./MessageDialog\";\nexport { HelpAndSupportMenu } from \"./HelpAndSupportMenu\";\nexport type { HelpAndSupportMenuProps } from \"./HelpAndSupportMenu\";\nexport { LinkingCommandsButton } from \"./LinkingCommandsButton\";\nexport { LinkBranchOrPullRequestDialog } from \"./LinkBranchOrPullRequestDialog\";\nexport type { LinkBranchOrPullRequestDialogProps } from \"./LinkBranchOrPullRequestDialog\";\nexport {\n ConnectRepositoryDialog,\n RepositorySelect,\n buildRepoOptions,\n CONNECTIONS,\n PROJECT_REPOSITORIES,\n CONNECTABLE_REPOSITORIES,\n} from \"./ConnectRepositoryDialog\";\nexport type {\n ConnectRepositoryDialogProps,\n RepositorySelectProps,\n Connection,\n ConnectionService,\n Repository,\n} from \"./ConnectRepositoryDialog\";\nexport {\n WebhookLogsDialog,\n WEBHOOK_CONNECTIONS,\n WEBHOOK_REPOSITORIES,\n} from \"./WebhookLogsDialog\";\nexport type {\n WebhookLogsDialogProps,\n WebhookConnection,\n WebhookRepository,\n WebhookLog,\n} from \"./WebhookLogsDialog\";\nexport {\n SourceCodeSection,\n IssueRow,\n CodeRow,\n Spine,\n HistoryDialog,\n CompletedHeader,\n} from \"./SourceCodeSection\";\nexport type {\n IssueEntry,\n CodeEntry,\n Stage,\n HistoryEvent,\n StageState,\n CodeStatus,\n SectionVariant,\n} from \"./SourceCodeSection\";\nexport { SuggestSubtasksButton } from \"./SuggestSubtasksButton\";\nexport { TaskOptionsMenu, TaskListOptionsMenu } from \"./TaskOptionsMenu\";\nexport type {\n TaskOptionsMenuProps,\n TaskListOptionsMenuProps,\n} from \"./TaskOptionsMenu\";\nexport { UserMenu } from \"./UserMenu\";\nexport type { UserMenuProps, UserMenuVariant } from \"./UserMenu\";\nexport { TwoFactorShield } from \"./TwoFactorShield\";\nexport type { TwoFactorShieldProps } from \"./TwoFactorShield\";\nexport { BackupCodesDialogs, CreateLoginCodeDialogs } from \"./TwoFactorDialogs\";\nexport type {\n BackupCodesDialogsProps,\n CreateLoginCodeDialogsProps,\n} from \"./TwoFactorDialogs\";\nexport {\n SettingsHeader,\n SettingsContent,\n StyledSettingRow,\n RowText,\n SettingRow,\n} from \"./settings\";\nexport type { SettingsHeaderProps, SettingRowProps } from \"./settings\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAb,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,SAAA,GAAAb,OAAA;AACA,IAAAc,YAAA,GAAAd,OAAA;AACA,IAAAe,kBAAA,GAAAf,OAAA;AAEA,IAAAgB,QAAA,GAAAhB,OAAA;AAMA,IAAAiB,iBAAA,GAAAjB,OAAA;AACA,IAAAkB,cAAA,GAAAlB,OAAA;AAUA,IAAAmB,mBAAA,GAAAnB,OAAA;AAEA,IAAAoB,sBAAA,GAAApB,OAAA;AACA,IAAAqB,8BAAA,GAAArB,OAAA;AAEA,IAAAsB,wBAAA,GAAAtB,OAAA;AAeA,IAAAuB,kBAAA,GAAAvB,OAAA;AAWA,IAAAwB,kBAAA,GAAAxB,OAAA;AAiBA,IAAAyB,sBAAA,GAAAzB,OAAA;AACA,IAAA0B,gBAAA,GAAA1B,OAAA;AAKA,IAAA2B,SAAA,GAAA3B,OAAA;AAEA,IAAA4B,gBAAA,GAAA5B,OAAA;AAEA,IAAA6B,iBAAA,GAAA7B,OAAA;AAKA,IAAA8B,SAAA,GAAA9B,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_tokens","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_MainLogo","_RoundAvatar","_PresentationShell","_headers","_FloatingControls","_MessageDialog","_HelpAndSupportMenu","_LinkingCommandsButton","_LinkBranchOrPullRequestDialog","_ConnectRepositoryDialog","_WebhookLogsDialog","_SourceCodeSection","_SuggestSubtasksButton","_TaskOptionsMenu","_UserMenu","_TwoFactorShield","_TwoFactorDialogs","_settings","_FeatureAvailability"],"sources":["../../../../src/presentation/shared/index.ts"],"sourcesContent":["/**\n * Shared building blocks for the Presentation mock-ups (`Presentation/*`\n * stories). The application shell, page headers, tab bar and small widgets are\n * defined once here and reused by the List view, Column view, Task sheet and\n * empty-page stories so the chrome stays identical and in one place.\n */\nexport * from \"./tokens\";\nexport { MainLogo } from \"./MainLogo\";\nexport { RoundAvatar } from \"./RoundAvatar\";\nexport { PresentationShell, StyledPagePaper } from \"./PresentationShell\";\nexport type { PresentationShellProps } from \"./PresentationShell\";\nexport { PageHeader, ProjectPageHeader, TabHeader } from \"./headers\";\nexport type {\n PageHeaderProps,\n ProjectPageHeaderProps,\n TabHeaderProps,\n} from \"./headers\";\nexport { FloatingControls } from \"./FloatingControls\";\nexport {\n MessageDialog,\n DocLinkContext,\n messageComponents,\n} from \"./MessageDialog\";\nexport type {\n MessageDialogProps,\n MessageDialogSize,\n OpenArticleHandler,\n} from \"./MessageDialog\";\nexport { HelpAndSupportMenu } from \"./HelpAndSupportMenu\";\nexport type { HelpAndSupportMenuProps } from \"./HelpAndSupportMenu\";\nexport { LinkingCommandsButton } from \"./LinkingCommandsButton\";\nexport { LinkBranchOrPullRequestDialog } from \"./LinkBranchOrPullRequestDialog\";\nexport type { LinkBranchOrPullRequestDialogProps } from \"./LinkBranchOrPullRequestDialog\";\nexport {\n ConnectRepositoryDialog,\n RepositorySelect,\n buildRepoOptions,\n CONNECTIONS,\n PROJECT_REPOSITORIES,\n CONNECTABLE_REPOSITORIES,\n} from \"./ConnectRepositoryDialog\";\nexport type {\n ConnectRepositoryDialogProps,\n RepositorySelectProps,\n Connection,\n ConnectionService,\n Repository,\n} from \"./ConnectRepositoryDialog\";\nexport {\n WebhookLogsDialog,\n WEBHOOK_CONNECTIONS,\n WEBHOOK_REPOSITORIES,\n} from \"./WebhookLogsDialog\";\nexport type {\n WebhookLogsDialogProps,\n WebhookConnection,\n WebhookRepository,\n WebhookLog,\n} from \"./WebhookLogsDialog\";\nexport {\n SourceCodeSection,\n IssueRow,\n CodeRow,\n Spine,\n HistoryDialog,\n CompletedHeader,\n} from \"./SourceCodeSection\";\nexport type {\n IssueEntry,\n CodeEntry,\n Stage,\n HistoryEvent,\n StageState,\n CodeStatus,\n SectionVariant,\n} from \"./SourceCodeSection\";\nexport { SuggestSubtasksButton } from \"./SuggestSubtasksButton\";\nexport { TaskOptionsMenu, TaskListOptionsMenu } from \"./TaskOptionsMenu\";\nexport type {\n TaskOptionsMenuProps,\n TaskListOptionsMenuProps,\n} from \"./TaskOptionsMenu\";\nexport { UserMenu } from \"./UserMenu\";\nexport type { UserMenuProps, UserMenuVariant } from \"./UserMenu\";\nexport { TwoFactorShield } from \"./TwoFactorShield\";\nexport type { TwoFactorShieldProps } from \"./TwoFactorShield\";\nexport { BackupCodesDialogs, CreateLoginCodeDialogs } from \"./TwoFactorDialogs\";\nexport type {\n BackupCodesDialogsProps,\n CreateLoginCodeDialogsProps,\n} from \"./TwoFactorDialogs\";\nexport {\n SettingsHeader,\n SettingsContent,\n StyledSettingRow,\n RowText,\n SettingRow,\n} from \"./settings\";\nexport type { SettingsHeaderProps, SettingRowProps } from \"./settings\";\nexport {\n FeatureAvailability,\n DEFAULT_FEATURE_AVAILABILITY,\n} from \"./FeatureAvailability\";\nexport type {\n FeatureAvailabilityProps,\n AvailabilityRow,\n AvailabilityMark,\n AvailabilityStatus,\n} from \"./FeatureAvailability\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAb,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,SAAA,GAAAb,OAAA;AACA,IAAAc,YAAA,GAAAd,OAAA;AACA,IAAAe,kBAAA,GAAAf,OAAA;AAEA,IAAAgB,QAAA,GAAAhB,OAAA;AAMA,IAAAiB,iBAAA,GAAAjB,OAAA;AACA,IAAAkB,cAAA,GAAAlB,OAAA;AAUA,IAAAmB,mBAAA,GAAAnB,OAAA;AAEA,IAAAoB,sBAAA,GAAApB,OAAA;AACA,IAAAqB,8BAAA,GAAArB,OAAA;AAEA,IAAAsB,wBAAA,GAAAtB,OAAA;AAeA,IAAAuB,kBAAA,GAAAvB,OAAA;AAWA,IAAAwB,kBAAA,GAAAxB,OAAA;AAiBA,IAAAyB,sBAAA,GAAAzB,OAAA;AACA,IAAA0B,gBAAA,GAAA1B,OAAA;AAKA,IAAA2B,SAAA,GAAA3B,OAAA;AAEA,IAAA4B,gBAAA,GAAA5B,OAAA;AAEA,IAAA6B,iBAAA,GAAA7B,OAAA;AAKA,IAAA8B,SAAA,GAAA9B,OAAA;AAQA,IAAA+B,oBAAA,GAAA/B,OAAA","ignoreList":[]}
@@ -16,7 +16,25 @@ export declare const StyledCodeBlock: import("styled-components").StyledComponen
16
16
  export declare const StyledTableBlock: import("styled-components").StyledComponent<"div", any, {}, never>;
17
17
  /** The default `divider` block: a themed horizontal rule. */
18
18
  export declare const StyledDivider: import("styled-components").StyledComponent<"hr", any, {}, never>;
19
- /** The default `list` block; rendered as ul or ol through the `as` prop. */
19
+ /**
20
+ * The default `list` block; rendered as ul or ol through the `as` prop, and
21
+ * tagged `data-portable-list` so the depth rules below scope to design-system
22
+ * lists — a stray `<ul>`/`<ol>` from an injected renderer is left untouched.
23
+ *
24
+ * Nesting works structurally: each level is its own StyledList inside a parent
25
+ * `<li>`, so it re-applies its own `padding-left` (indentation compounds) and,
26
+ * for ordered levels, restarts numbering. A nested list carries no vertical
27
+ * margin, so it hugs the item it belongs to.
28
+ *
29
+ * Both bullet and numbered levels change their marker by nesting depth, so
30
+ * levels stay distinct even where the two interleave:
31
+ * bullets disc → circle → square → (disc)
32
+ * numbers decimal → lower-alpha → lower-roman → (upper-alpha)
33
+ * Depth is counted from the list ancestors themselves (not per-tag), so an
34
+ * intervening `<ol>` never throws off a `<ul>`'s depth and vice-versa. The
35
+ * rules are ordered shallow-to-deep; a deeper rule is more specific, so it
36
+ * wins the cascade for the levels it applies to.
37
+ */
20
38
  export declare const StyledList: import("styled-components").StyledComponent<"ul", any, {
21
39
  $ordered: boolean;
22
40
  }, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"Styles.d.ts","sourceRoot":"","sources":["../../../../src/components/PortableText/Styles.ts"],"names":[],"mappings":"AAKA,+EAA+E;AAC/E,eAAO,MAAM,UAAU,qEAMtB,CAAC;AAIF,2EAA2E;AAC3E,eAAO,MAAM,UAAU,kEAQtB,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,eAAe,oEAY3B,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,oEAI5B,CAAC;AAIF,6DAA6D;AAC7D,eAAO,MAAM,aAAa,mEAIzB,CAAC;AAIF,4EAA4E;AAC5E,eAAO,MAAM,UAAU;cAAyB,OAAO;SAQtD,CAAC"}
1
+ {"version":3,"file":"Styles.d.ts","sourceRoot":"","sources":["../../../../src/components/PortableText/Styles.ts"],"names":[],"mappings":"AAKA,+EAA+E;AAC/E,eAAO,MAAM,UAAU,qEAMtB,CAAC;AAIF,2EAA2E;AAC3E,eAAO,MAAM,UAAU,kEAQtB,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,eAAe,oEAY3B,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,oEAI5B,CAAC;AAIF,6DAA6D;AAC7D,eAAO,MAAM,aAAa,mEAIzB,CAAC;AAIF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,UAAU;cAAyB,OAAO;SAgCtD,CAAC"}
@@ -44,11 +44,29 @@ export const StyledDivider = styled.hr.withConfig({
44
44
  })(["margin:0;border:none;border-top:1px solid var(--border-primary);"]);
45
45
  StyledDivider.displayName = "StyledDivider";
46
46
 
47
- /** The default `list` block; rendered as ul or ol through the `as` prop. */
47
+ /**
48
+ * The default `list` block; rendered as ul or ol through the `as` prop, and
49
+ * tagged `data-portable-list` so the depth rules below scope to design-system
50
+ * lists — a stray `<ul>`/`<ol>` from an injected renderer is left untouched.
51
+ *
52
+ * Nesting works structurally: each level is its own StyledList inside a parent
53
+ * `<li>`, so it re-applies its own `padding-left` (indentation compounds) and,
54
+ * for ordered levels, restarts numbering. A nested list carries no vertical
55
+ * margin, so it hugs the item it belongs to.
56
+ *
57
+ * Both bullet and numbered levels change their marker by nesting depth, so
58
+ * levels stay distinct even where the two interleave:
59
+ * bullets disc → circle → square → (disc)
60
+ * numbers decimal → lower-alpha → lower-roman → (upper-alpha)
61
+ * Depth is counted from the list ancestors themselves (not per-tag), so an
62
+ * intervening `<ol>` never throws off a `<ul>`'s depth and vice-versa. The
63
+ * rules are ordered shallow-to-deep; a deeper rule is more specific, so it
64
+ * wins the cascade for the levels it applies to.
65
+ */
48
66
  export const StyledList = styled.ul.withConfig({
49
67
  displayName: "Styles__StyledList",
50
68
  componentId: "sc-1fss4z4-5"
51
- })(["margin:0;padding-left:", ";list-style:", " outside;li + li{margin-top:", ";}"], "1.25rem", _ref => {
69
+ })(["margin:0;padding-left:", ";list-style:", " outside;li + li{margin-top:", ";}& ul[data-portable-list]{list-style-type:circle;}& ol[data-portable-list]{list-style-type:lower-alpha;}& [data-portable-list] ul[data-portable-list]{list-style-type:square;}& [data-portable-list] ol[data-portable-list]{list-style-type:lower-roman;}& [data-portable-list] [data-portable-list] ul[data-portable-list]{list-style-type:disc;}& [data-portable-list] [data-portable-list] ol[data-portable-list]{list-style-type:upper-alpha;}"], "1.25rem", _ref => {
52
70
  let $ordered = _ref.$ordered;
53
71
  return $ordered ? "decimal" : "disc";
54
72
  }, SPACE.xs);
@@ -1 +1 @@
1
- {"version":3,"file":"Styles.js","names":["styled","SPACE","StyledCode","code","withConfig","displayName","componentId","StyledLink","a","StyledCodeBlock","pre","md","StyledTableBlock","div","StyledDivider","hr","StyledList","ul","_ref","$ordered","xs"],"sources":["../../../../src/components/PortableText/Styles.ts"],"sourcesContent":["import styled from \"styled-components\";\nimport { theme } from \"twin.macro\";\n\nimport { SPACE } from \"../LayoutTokens\";\n\n/** The default `code` mark: a quiet inline chip that keeps the line intact. */\nexport const StyledCode = styled.code`\n padding: 0 ${theme(\"spacing.1\")};\n border-radius: ${theme(\"borderRadius.DEFAULT\")};\n background-color: var(--color-theme-300);\n font-family: \"SFMono-Regular\", Menlo, Consolas, \"Liberation Mono\", monospace;\n font-size: 0.85em;\n`;\n\nStyledCode.displayName = \"StyledCode\";\n\n/** The default `link` mark: an inline text link inside flowing content. */\nexport const StyledLink = styled.a`\n color: var(--color-primary);\n text-decoration: underline var(--color-primary);\n text-underline-offset: 3px;\n\n &:hover {\n text-decoration: none;\n }\n`;\n\nStyledLink.displayName = \"StyledLink\";\n\n/**\n * The default `code-block`: quiet preformatted content. It stays a bare\n * `<pre><code>` on purpose — article surfaces inject a Copy button onto\n * every `<pre>` they render.\n */\nexport const StyledCodeBlock = styled.pre`\n margin: 0;\n padding: ${SPACE.md};\n border-radius: ${theme(\"borderRadius.lg\")};\n background-color: var(--color-theme-200);\n overflow-x: auto;\n\n code {\n font-family: \"SFMono-Regular\", Menlo, Consolas, \"Liberation Mono\", monospace;\n font-size: ${theme(\"fontSize.body-2\")};\n color: var(--color-theme-900);\n }\n`;\n\nStyledCodeBlock.displayName = \"StyledCodeBlock\";\n\n/**\n * The default `table` block wrapper: Table ships page-level chrome (outer\n * margins) that flowing content does not want — the PortableText Stack owns\n * the vertical rhythm here.\n */\nexport const StyledTableBlock = styled.div`\n .c-table__wrap {\n margin: 0;\n }\n`;\n\nStyledTableBlock.displayName = \"StyledTableBlock\";\n\n/** The default `divider` block: a themed horizontal rule. */\nexport const StyledDivider = styled.hr`\n margin: 0;\n border: none;\n border-top: 1px solid var(--border-primary);\n`;\n\nStyledDivider.displayName = \"StyledDivider\";\n\n/** The default `list` block; rendered as ul or ol through the `as` prop. */\nexport const StyledList = styled.ul<{ $ordered: boolean }>`\n margin: 0;\n padding-left: ${theme(\"spacing.5\")};\n list-style: ${({ $ordered }) => ($ordered ? \"decimal\" : \"disc\")} outside;\n\n li + li {\n margin-top: ${SPACE.xs};\n }\n`;\n\nStyledList.displayName = \"StyledList\";\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AAGtC,SAASC,KAAK,QAAQ,iBAAiB;;AAEvC;AACA,OAAO,MAAMC,UAAU,GAAGF,MAAM,CAACG,IAAI,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,gLACtB,SAAkB,EACd,SAA6B,CAI/C;AAEDJ,UAAU,CAACG,WAAW,GAAG,YAAY;;AAErC;AACA,OAAO,MAAME,UAAU,GAAGP,MAAM,CAACQ,CAAC,CAAAJ,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,0IAQjC;AAEDC,UAAU,CAACF,WAAW,GAAG,YAAY;;AAErC;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMI,eAAe,GAAGT,MAAM,CAACU,GAAG,CAAAN,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,wOAE5BL,KAAK,CAACU,EAAE,EACF,QAAwB,EAM1B,UAAwB,CAGxC;AAEDF,eAAe,CAACJ,WAAW,GAAG,iBAAiB;;AAE/C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,gBAAgB,GAAGZ,MAAM,CAACa,GAAG,CAAAT,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,iCAIzC;AAEDM,gBAAgB,CAACP,WAAW,GAAG,kBAAkB;;AAEjD;AACA,OAAO,MAAMS,aAAa,GAAGd,MAAM,CAACe,EAAE,CAAAX,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,wEAIrC;AAEDQ,aAAa,CAACT,WAAW,GAAG,eAAe;;AAE3C;AACA,OAAO,MAAMW,UAAU,GAAGhB,MAAM,CAACiB,EAAE,CAAAb,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,qFAEjB,SAAkB,EACpBY,IAAA;EAAA,IAAGC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAAA,OAAQA,QAAQ,GAAG,SAAS,GAAG,MAAM;AAAA,CAAC,EAG/ClB,KAAK,CAACmB,EAAE,CAEzB;AAEDJ,UAAU,CAACX,WAAW,GAAG,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"Styles.js","names":["styled","SPACE","StyledCode","code","withConfig","displayName","componentId","StyledLink","a","StyledCodeBlock","pre","md","StyledTableBlock","div","StyledDivider","hr","StyledList","ul","_ref","$ordered","xs"],"sources":["../../../../src/components/PortableText/Styles.ts"],"sourcesContent":["import styled from \"styled-components\";\nimport { theme } from \"twin.macro\";\n\nimport { SPACE } from \"../LayoutTokens\";\n\n/** The default `code` mark: a quiet inline chip that keeps the line intact. */\nexport const StyledCode = styled.code`\n padding: 0 ${theme(\"spacing.1\")};\n border-radius: ${theme(\"borderRadius.DEFAULT\")};\n background-color: var(--color-theme-300);\n font-family: \"SFMono-Regular\", Menlo, Consolas, \"Liberation Mono\", monospace;\n font-size: 0.85em;\n`;\n\nStyledCode.displayName = \"StyledCode\";\n\n/** The default `link` mark: an inline text link inside flowing content. */\nexport const StyledLink = styled.a`\n color: var(--color-primary);\n text-decoration: underline var(--color-primary);\n text-underline-offset: 3px;\n\n &:hover {\n text-decoration: none;\n }\n`;\n\nStyledLink.displayName = \"StyledLink\";\n\n/**\n * The default `code-block`: quiet preformatted content. It stays a bare\n * `<pre><code>` on purpose — article surfaces inject a Copy button onto\n * every `<pre>` they render.\n */\nexport const StyledCodeBlock = styled.pre`\n margin: 0;\n padding: ${SPACE.md};\n border-radius: ${theme(\"borderRadius.lg\")};\n background-color: var(--color-theme-200);\n overflow-x: auto;\n\n code {\n font-family: \"SFMono-Regular\", Menlo, Consolas, \"Liberation Mono\", monospace;\n font-size: ${theme(\"fontSize.body-2\")};\n color: var(--color-theme-900);\n }\n`;\n\nStyledCodeBlock.displayName = \"StyledCodeBlock\";\n\n/**\n * The default `table` block wrapper: Table ships page-level chrome (outer\n * margins) that flowing content does not want — the PortableText Stack owns\n * the vertical rhythm here.\n */\nexport const StyledTableBlock = styled.div`\n .c-table__wrap {\n margin: 0;\n }\n`;\n\nStyledTableBlock.displayName = \"StyledTableBlock\";\n\n/** The default `divider` block: a themed horizontal rule. */\nexport const StyledDivider = styled.hr`\n margin: 0;\n border: none;\n border-top: 1px solid var(--border-primary);\n`;\n\nStyledDivider.displayName = \"StyledDivider\";\n\n/**\n * The default `list` block; rendered as ul or ol through the `as` prop, and\n * tagged `data-portable-list` so the depth rules below scope to design-system\n * lists — a stray `<ul>`/`<ol>` from an injected renderer is left untouched.\n *\n * Nesting works structurally: each level is its own StyledList inside a parent\n * `<li>`, so it re-applies its own `padding-left` (indentation compounds) and,\n * for ordered levels, restarts numbering. A nested list carries no vertical\n * margin, so it hugs the item it belongs to.\n *\n * Both bullet and numbered levels change their marker by nesting depth, so\n * levels stay distinct even where the two interleave:\n * bullets disc → circle → square → (disc)\n * numbers decimal → lower-alpha → lower-roman → (upper-alpha)\n * Depth is counted from the list ancestors themselves (not per-tag), so an\n * intervening `<ol>` never throws off a `<ul>`'s depth and vice-versa. The\n * rules are ordered shallow-to-deep; a deeper rule is more specific, so it\n * wins the cascade for the levels it applies to.\n */\nexport const StyledList = styled.ul<{ $ordered: boolean }>`\n margin: 0;\n padding-left: ${theme(\"spacing.5\")};\n list-style: ${({ $ordered }) => ($ordered ? \"decimal\" : \"disc\")} outside;\n\n li + li {\n margin-top: ${SPACE.xs};\n }\n\n /* Depth 2 */\n & ul[data-portable-list] {\n list-style-type: circle;\n }\n & ol[data-portable-list] {\n list-style-type: lower-alpha;\n }\n\n /* Depth 3 */\n & [data-portable-list] ul[data-portable-list] {\n list-style-type: square;\n }\n & [data-portable-list] ol[data-portable-list] {\n list-style-type: lower-roman;\n }\n\n /* Depth 4 (the producer's cap; deeper content clamps into it) */\n & [data-portable-list] [data-portable-list] ul[data-portable-list] {\n list-style-type: disc;\n }\n & [data-portable-list] [data-portable-list] ol[data-portable-list] {\n list-style-type: upper-alpha;\n }\n`;\n\nStyledList.displayName = \"StyledList\";\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AAGtC,SAASC,KAAK,QAAQ,iBAAiB;;AAEvC;AACA,OAAO,MAAMC,UAAU,GAAGF,MAAM,CAACG,IAAI,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,gLACtB,SAAkB,EACd,SAA6B,CAI/C;AAEDJ,UAAU,CAACG,WAAW,GAAG,YAAY;;AAErC;AACA,OAAO,MAAME,UAAU,GAAGP,MAAM,CAACQ,CAAC,CAAAJ,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,0IAQjC;AAEDC,UAAU,CAACF,WAAW,GAAG,YAAY;;AAErC;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMI,eAAe,GAAGT,MAAM,CAACU,GAAG,CAAAN,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,wOAE5BL,KAAK,CAACU,EAAE,EACF,QAAwB,EAM1B,UAAwB,CAGxC;AAEDF,eAAe,CAACJ,WAAW,GAAG,iBAAiB;;AAE/C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,gBAAgB,GAAGZ,MAAM,CAACa,GAAG,CAAAT,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,iCAIzC;AAEDM,gBAAgB,CAACP,WAAW,GAAG,kBAAkB;;AAEjD;AACA,OAAO,MAAMS,aAAa,GAAGd,MAAM,CAACe,EAAE,CAAAX,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,wEAIrC;AAEDQ,aAAa,CAACT,WAAW,GAAG,eAAe;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMW,UAAU,GAAGhB,MAAM,CAACiB,EAAE,CAAAb,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,sgBAEjB,SAAkB,EACpBY,IAAA;EAAA,IAAGC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAAA,OAAQA,QAAQ,GAAG,SAAS,GAAG,MAAM;AAAA,CAAC,EAG/ClB,KAAK,CAACmB,EAAE,CA0BzB;AAEDJ,UAAU,CAACX,WAAW,GAAG,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../../src/components/PortableText/renderers.tsx"],"names":[],"mappings":"AAUA,OAAO,EAEL,yBAAyB,EAEzB,4BAA4B,EAC5B,uBAAuB,EAKvB,wBAAwB,EAKzB,MAAM,SAAS,CAAC;AAWjB;;;;GAIG;AAEH,eAAO,MAAM,gCAAgC,EAAE,MAAM,CACnD,uBAAuB,EACvB,wBAAwB,CAoBzB,CAAC;AA8CF,eAAO,MAAM,iCAAiC,EAAE,MAAM,CACpD,4BAA4B,EAC5B,yBAAyB,CAsF1B,CAAC"}
1
+ {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../../src/components/PortableText/renderers.tsx"],"names":[],"mappings":"AAUA,OAAO,EAEL,yBAAyB,EAEzB,4BAA4B,EAC5B,uBAAuB,EAKvB,wBAAwB,EAKzB,MAAM,SAAS,CAAC;AAWjB;;;;GAIG;AAEH,eAAO,MAAM,gCAAgC,EAAE,MAAM,CACnD,uBAAuB,EACvB,wBAAwB,CAoBzB,CAAC;AA8CF,eAAO,MAAM,iCAAiC,EAAE,MAAM,CACpD,4BAA4B,EAC5B,yBAAyB,CA4F1B,CAAC"}
@@ -91,10 +91,16 @@ export const portableTextDefaultBlockRenderers = {
91
91
  let block = _ref8.block,
92
92
  children = _ref8.children;
93
93
  const ordered = block.style === "number";
94
- return /*#__PURE__*/React.createElement(StyledList, {
95
- as: ordered ? "ol" : "ul",
96
- $ordered: ordered
97
- }, children);
94
+ return (
95
+ /*#__PURE__*/
96
+ // `data-portable-list` scopes the depth-marker rules in Styles.ts to
97
+ // design-system lists, and marks the ancestors those rules count.
98
+ React.createElement(StyledList, {
99
+ as: ordered ? "ol" : "ul",
100
+ $ordered: ordered,
101
+ "data-portable-list": ""
102
+ }, children)
103
+ );
98
104
  },
99
105
  "list-item": _ref9 => {
100
106
  let children = _ref9.children;
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.js","names":["React","Fragment","StyledCode","StyledCodeBlock","StyledDivider","StyledLink","StyledList","StyledTableBlock","isPortableTextMediaImageVariant","Media","Table","Tbody","Thead","TitledText","titledTextHeadings","Body1","Typography","portableTextDefaultMarkRenderers","strong","_ref","children","createElement","em","_ref2","code","_ref3","link","_ref4","mark","href","target","rel","HEADING_LEVEL_VARIANTS","DEFAULT_HEADING_LEVEL","headingVariantForLevel","level","undefined","variant","console","warn","HeadingBlock","_ref5","block","_ref6","Heading","portableTextDefaultBlockRenderers","paragraph","_ref7","heading","list","_ref8","ordered","style","as","$ordered","_ref9","media","_ref0","_ref1","src","alt","caption","_ref10","_ref11","title","_ref12","_ref13","language","table","_ref14","renderSpans","_ref15","header","rows","cell","spans","map","span","index","key","text","row","rowIndex","cellIndex","divider"],"sources":["../../../../src/components/PortableText/renderers.tsx"],"sourcesContent":["import React, { Fragment, ReactNode } from \"react\";\n\nimport {\n StyledCode,\n StyledCodeBlock,\n StyledDivider,\n StyledLink,\n StyledList,\n StyledTableBlock,\n} from \"./Styles\";\nimport {\n isPortableTextMediaImageVariant,\n PortableTextBlockRenderer,\n PortableTextCodeBlock,\n PortableTextDefaultBlockType,\n PortableTextDefaultMark,\n PortableTextHeadingBlock,\n PortableTextHeadingLevel,\n PortableTextLinkMark,\n PortableTextListBlock,\n PortableTextMarkRenderer,\n PortableTextMediaBlock,\n PortableTextSpan,\n PortableTextTableBlock,\n PortableTextTitledTextBlock,\n} from \"./types\";\nimport { Media } from \"../Media\";\nimport { Table, Tbody, Thead } from \"../Tables\";\nimport {\n TitledText,\n TitledTextVariant,\n titledTextHeadings,\n} from \"../TitledText\";\nimport { Body1 } from \"../Typography\";\nimport { Typography } from \"../Typography/Typography\";\n\n/**\n * The default renderers for the universal set — everything a client renders\n * without injection, and nothing more: no product element ever lands here.\n * Injected {@link PortableTextComponents} maps take precedence entry by entry.\n */\n\nexport const portableTextDefaultMarkRenderers: Record<\n PortableTextDefaultMark,\n PortableTextMarkRenderer\n> = {\n strong: ({ children }) => <strong>{children}</strong>,\n em: ({ children }) => <em>{children}</em>,\n code: ({ children }) => <StyledCode>{children}</StyledCode>,\n link: ({ mark, children }) => {\n const href = (mark as PortableTextLinkMark | undefined)?.href;\n\n // A link mark without an href (authored as a plain string) has nowhere\n // to go — keep the text, skip the anchor.\n if (!href) {\n return <>{children}</>;\n }\n\n return (\n <StyledLink href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </StyledLink>\n );\n },\n};\n\n/** The semantic wire levels resolve to typography only here, in the renderer. */\nconst HEADING_LEVEL_VARIANTS: Record<\n PortableTextHeadingLevel,\n TitledTextVariant\n> = {\n 1: \"title1\",\n 2: \"title2\",\n 3: \"header2\",\n};\n\n/** The level `heading` and `titled-text` fall back to. */\nconst DEFAULT_HEADING_LEVEL: PortableTextHeadingLevel = 3;\n\n/**\n * Resolve a semantic wire level to its typography variant. An absent level is\n * the documented default; any other unrecognised level is a serializer bug on\n * a fixed 1–3 scale, so it falls back to the default and is logged, per the\n * contract's degradation rule.\n */\nconst headingVariantForLevel = (\n level: PortableTextHeadingLevel | undefined\n): TitledTextVariant => {\n if (level === undefined) {\n return HEADING_LEVEL_VARIANTS[DEFAULT_HEADING_LEVEL];\n }\n\n const variant = HEADING_LEVEL_VARIANTS[level];\n if (!variant) {\n console.warn(\n `PortableText: unknown heading level ${level}, falling back to ${DEFAULT_HEADING_LEVEL}.`\n );\n return HEADING_LEVEL_VARIANTS[DEFAULT_HEADING_LEVEL];\n }\n\n return variant;\n};\n\n/** Heading levels map to the same typography TitledText uses. */\nconst HeadingBlock: PortableTextBlockRenderer = ({ block, children }) => {\n const { level } = block as PortableTextHeadingBlock;\n const Heading = titledTextHeadings[headingVariantForLevel(level)];\n return <Heading>{children}</Heading>;\n};\n\nexport const portableTextDefaultBlockRenderers: Record<\n PortableTextDefaultBlockType,\n PortableTextBlockRenderer\n> = {\n paragraph: ({ children }) => <Body1>{children}</Body1>,\n heading: HeadingBlock,\n list: ({ block, children }) => {\n const ordered = (block as PortableTextListBlock).style === \"number\";\n return (\n <StyledList as={ordered ? \"ol\" : \"ul\"} $ordered={ordered}>\n {children}\n </StyledList>\n );\n },\n \"list-item\": ({ children }) => (\n <Typography variant=\"Body 1\" as=\"li\">\n {children}\n </Typography>\n ),\n media: ({ block }) => {\n const { src, alt, variant, caption } = block as PortableTextMediaBlock;\n\n // Video (and future) variants carry service semantics, so their renderer\n // is application-catalog territory — an injected `media` override. The\n // universal set covers images only; anything else degrades and warns, per\n // the contract's degradation rule.\n if (variant !== undefined && !isPortableTextMediaImageVariant(variant)) {\n console.warn(\n `PortableText: no default renderer for media variant \"${variant}\".`\n );\n return null;\n }\n\n return <Media src={src} alt={alt} variant={variant} caption={caption} />;\n },\n \"titled-text\": ({ block, children }) => {\n const { title, level } = block as PortableTextTitledTextBlock;\n return (\n <TitledText title={title} variant={headingVariantForLevel(level)}>\n {children}\n </TitledText>\n );\n },\n // No highlighter ships with the default set, so every language — known,\n // unknown or absent — is plain preformatted text; the hint travels on\n // data-language for surfaces that highlight.\n \"code-block\": ({ block }) => {\n const { code, language } = block as PortableTextCodeBlock;\n return (\n <StyledCodeBlock data-language={language || undefined}>\n <code>{code}</code>\n </StyledCodeBlock>\n );\n },\n table: ({ block, renderSpans }) => {\n const { header, rows } = block as PortableTextTableBlock;\n // Standalone (engine-less) use has no span renderer — keep the raw text.\n const cell = (spans: PortableTextSpan[]): ReactNode =>\n renderSpans\n ? renderSpans(spans)\n : spans.map((span, index) => (\n <Fragment key={index}>{span.text}</Fragment>\n ));\n\n return (\n <StyledTableBlock>\n <Table>\n <Thead>\n <tr>\n {header.map((spans, index) => (\n <th key={index}>{cell(spans)}</th>\n ))}\n </tr>\n </Thead>\n <Tbody>\n {rows.map((row, rowIndex) => (\n <tr key={rowIndex}>\n {row.map((spans, cellIndex) => (\n <td key={cellIndex}>{cell(spans)}</td>\n ))}\n </tr>\n ))}\n </Tbody>\n </Table>\n </StyledTableBlock>\n );\n },\n divider: () => <StyledDivider />,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"renderers.js","names":["React","Fragment","StyledCode","StyledCodeBlock","StyledDivider","StyledLink","StyledList","StyledTableBlock","isPortableTextMediaImageVariant","Media","Table","Tbody","Thead","TitledText","titledTextHeadings","Body1","Typography","portableTextDefaultMarkRenderers","strong","_ref","children","createElement","em","_ref2","code","_ref3","link","_ref4","mark","href","target","rel","HEADING_LEVEL_VARIANTS","DEFAULT_HEADING_LEVEL","headingVariantForLevel","level","undefined","variant","console","warn","HeadingBlock","_ref5","block","_ref6","Heading","portableTextDefaultBlockRenderers","paragraph","_ref7","heading","list","_ref8","ordered","style","as","$ordered","_ref9","media","_ref0","_ref1","src","alt","caption","_ref10","_ref11","title","_ref12","_ref13","language","table","_ref14","renderSpans","_ref15","header","rows","cell","spans","map","span","index","key","text","row","rowIndex","cellIndex","divider"],"sources":["../../../../src/components/PortableText/renderers.tsx"],"sourcesContent":["import React, { Fragment, ReactNode } from \"react\";\n\nimport {\n StyledCode,\n StyledCodeBlock,\n StyledDivider,\n StyledLink,\n StyledList,\n StyledTableBlock,\n} from \"./Styles\";\nimport {\n isPortableTextMediaImageVariant,\n PortableTextBlockRenderer,\n PortableTextCodeBlock,\n PortableTextDefaultBlockType,\n PortableTextDefaultMark,\n PortableTextHeadingBlock,\n PortableTextHeadingLevel,\n PortableTextLinkMark,\n PortableTextListBlock,\n PortableTextMarkRenderer,\n PortableTextMediaBlock,\n PortableTextSpan,\n PortableTextTableBlock,\n PortableTextTitledTextBlock,\n} from \"./types\";\nimport { Media } from \"../Media\";\nimport { Table, Tbody, Thead } from \"../Tables\";\nimport {\n TitledText,\n TitledTextVariant,\n titledTextHeadings,\n} from \"../TitledText\";\nimport { Body1 } from \"../Typography\";\nimport { Typography } from \"../Typography/Typography\";\n\n/**\n * The default renderers for the universal set — everything a client renders\n * without injection, and nothing more: no product element ever lands here.\n * Injected {@link PortableTextComponents} maps take precedence entry by entry.\n */\n\nexport const portableTextDefaultMarkRenderers: Record<\n PortableTextDefaultMark,\n PortableTextMarkRenderer\n> = {\n strong: ({ children }) => <strong>{children}</strong>,\n em: ({ children }) => <em>{children}</em>,\n code: ({ children }) => <StyledCode>{children}</StyledCode>,\n link: ({ mark, children }) => {\n const href = (mark as PortableTextLinkMark | undefined)?.href;\n\n // A link mark without an href (authored as a plain string) has nowhere\n // to go — keep the text, skip the anchor.\n if (!href) {\n return <>{children}</>;\n }\n\n return (\n <StyledLink href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </StyledLink>\n );\n },\n};\n\n/** The semantic wire levels resolve to typography only here, in the renderer. */\nconst HEADING_LEVEL_VARIANTS: Record<\n PortableTextHeadingLevel,\n TitledTextVariant\n> = {\n 1: \"title1\",\n 2: \"title2\",\n 3: \"header2\",\n};\n\n/** The level `heading` and `titled-text` fall back to. */\nconst DEFAULT_HEADING_LEVEL: PortableTextHeadingLevel = 3;\n\n/**\n * Resolve a semantic wire level to its typography variant. An absent level is\n * the documented default; any other unrecognised level is a serializer bug on\n * a fixed 1–3 scale, so it falls back to the default and is logged, per the\n * contract's degradation rule.\n */\nconst headingVariantForLevel = (\n level: PortableTextHeadingLevel | undefined\n): TitledTextVariant => {\n if (level === undefined) {\n return HEADING_LEVEL_VARIANTS[DEFAULT_HEADING_LEVEL];\n }\n\n const variant = HEADING_LEVEL_VARIANTS[level];\n if (!variant) {\n console.warn(\n `PortableText: unknown heading level ${level}, falling back to ${DEFAULT_HEADING_LEVEL}.`\n );\n return HEADING_LEVEL_VARIANTS[DEFAULT_HEADING_LEVEL];\n }\n\n return variant;\n};\n\n/** Heading levels map to the same typography TitledText uses. */\nconst HeadingBlock: PortableTextBlockRenderer = ({ block, children }) => {\n const { level } = block as PortableTextHeadingBlock;\n const Heading = titledTextHeadings[headingVariantForLevel(level)];\n return <Heading>{children}</Heading>;\n};\n\nexport const portableTextDefaultBlockRenderers: Record<\n PortableTextDefaultBlockType,\n PortableTextBlockRenderer\n> = {\n paragraph: ({ children }) => <Body1>{children}</Body1>,\n heading: HeadingBlock,\n list: ({ block, children }) => {\n const ordered = (block as PortableTextListBlock).style === \"number\";\n return (\n // `data-portable-list` scopes the depth-marker rules in Styles.ts to\n // design-system lists, and marks the ancestors those rules count.\n <StyledList\n as={ordered ? \"ol\" : \"ul\"}\n $ordered={ordered}\n data-portable-list=\"\"\n >\n {children}\n </StyledList>\n );\n },\n \"list-item\": ({ children }) => (\n <Typography variant=\"Body 1\" as=\"li\">\n {children}\n </Typography>\n ),\n media: ({ block }) => {\n const { src, alt, variant, caption } = block as PortableTextMediaBlock;\n\n // Video (and future) variants carry service semantics, so their renderer\n // is application-catalog territory — an injected `media` override. The\n // universal set covers images only; anything else degrades and warns, per\n // the contract's degradation rule.\n if (variant !== undefined && !isPortableTextMediaImageVariant(variant)) {\n console.warn(\n `PortableText: no default renderer for media variant \"${variant}\".`\n );\n return null;\n }\n\n return <Media src={src} alt={alt} variant={variant} caption={caption} />;\n },\n \"titled-text\": ({ block, children }) => {\n const { title, level } = block as PortableTextTitledTextBlock;\n return (\n <TitledText title={title} variant={headingVariantForLevel(level)}>\n {children}\n </TitledText>\n );\n },\n // No highlighter ships with the default set, so every language — known,\n // unknown or absent — is plain preformatted text; the hint travels on\n // data-language for surfaces that highlight.\n \"code-block\": ({ block }) => {\n const { code, language } = block as PortableTextCodeBlock;\n return (\n <StyledCodeBlock data-language={language || undefined}>\n <code>{code}</code>\n </StyledCodeBlock>\n );\n },\n table: ({ block, renderSpans }) => {\n const { header, rows } = block as PortableTextTableBlock;\n // Standalone (engine-less) use has no span renderer — keep the raw text.\n const cell = (spans: PortableTextSpan[]): ReactNode =>\n renderSpans\n ? renderSpans(spans)\n : spans.map((span, index) => (\n <Fragment key={index}>{span.text}</Fragment>\n ));\n\n return (\n <StyledTableBlock>\n <Table>\n <Thead>\n <tr>\n {header.map((spans, index) => (\n <th key={index}>{cell(spans)}</th>\n ))}\n </tr>\n </Thead>\n <Tbody>\n {rows.map((row, rowIndex) => (\n <tr key={rowIndex}>\n {row.map((spans, cellIndex) => (\n <td key={cellIndex}>{cell(spans)}</td>\n ))}\n </tr>\n ))}\n </Tbody>\n </Table>\n </StyledTableBlock>\n );\n },\n divider: () => <StyledDivider />,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -43,9 +43,14 @@ export interface PortableTextHeadingBlock {
43
43
  children: PortableTextSpan[];
44
44
  }
45
45
  export type PortableTextListStyle = "bullet" | "number";
46
+ /**
47
+ * A list item's children are its own spans first, then any nested `list`
48
+ * block(s) — the shape that carries multi-level lists. A spans-only item (no
49
+ * nested list) is the common, flat case and stays valid unchanged.
50
+ */
46
51
  export interface PortableTextListItemBlock {
47
52
  type: "list-item";
48
- children: PortableTextSpan[];
53
+ children: (PortableTextSpan | PortableTextListBlock)[];
49
54
  }
50
55
  export interface PortableTextListBlock {
51
56
  type: "list";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/PortableText/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD;;;;;;;;;GASG;AAIH;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAqB,SAAQ,sBAAsB;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,sBAAsB,CAAC;AAE/D,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,wDAAwD;AACxD,eAAO,MAAM,2BAA2B,2CAK9B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAI/C,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,8DAA8D;AAC9D,MAAM,MAAM,wBAAwB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,wBAAwB,CAAC;IAChC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,EAAE,yBAAyB,EAAE,CAAC;CACvC;AAED,gFAAgF;AAChF,MAAM,MAAM,6BAA6B,GAAG,YAAY,GAAG,cAAc,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,MAAM,6BAA6B,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhE,MAAM,MAAM,wBAAwB,GAChC,6BAA6B,GAC7B,6BAA6B,CAAC;AASlC,eAAO,MAAM,+BAA+B,GAC1C,OAAO,OAAO,KACb,KAAK,IAAI,6BACgD,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,aAAa,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uEAAuE;AACvE,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,EAAE,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,EAAE,CAAC;AAE3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,oBAAoB,CAAC;IAC7B,IAAI,EAAE,oBAAoB,EAAE,CAAC;CAC9B;AAED,kEAAkE;AAClE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,MAAM,iBAAiB,GACzB,0BAA0B,GAC1B,wBAAwB,GACxB,qBAAqB,GACrB,sBAAsB,GACtB,2BAA2B,GAC3B,qBAAqB,GACrB,sBAAsB,GACtB,wBAAwB,CAAC;AAE7B;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG,CACvC,iBAAiB,GACjB,yBAAyB,CAC5B,CAAC,MAAM,CAAC,CAAC;AAgBV,yDAAyD;AACzD,eAAO,MAAM,4BAA4B,EAEpC,SAAS,4BAA4B,EAAE,CAAC;AAI7C;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,sBAAsB,CAAC;AAE1E,uEAAuE;AACvE,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,EAAE,CAAC;AAIrD,MAAM,WAAW,6BAA6B,CAC5C,KAAK,SAAS,sBAAsB,GAAG,sBAAsB;IAE7D,wEAAwE;IACxE,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,MAAM,wBAAwB,CAClC,KAAK,SAAS,sBAAsB,GAAG,sBAAsB,IAC3D,aAAa,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC;AAExD,MAAM,WAAW,+BAA+B,CAC9C,KAAK,SAAS,sBAAsB,GAAG,sBAAsB;IAE7D,IAAI,EAAE,KAAK,CAAC;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,MAAM,0BAA0B,CACpC,KAAK,SAAS,sBAAsB,GAAG,sBAAsB,IAC3D,aAAa,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC,CAAC;AAE1D,MAAM,WAAW,8BAA8B,CAC7C,MAAM,SAAS,iBAAiB,GAAG,iBAAiB;IAEpD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,SAAS,CAAC;CACxD;AAED,MAAM,MAAM,yBAAyB,CACnC,MAAM,SAAS,iBAAiB,GAAG,iBAAiB,IAClD,aAAa,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,8BAA8B,GAAG,CAC3C,IAAI,EAAE,uBAAuB,EAC7B,IAAI,EAAE,MAAM,KACT,IAAI,CAAC;AAEV;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,OAAO,CACd,MAAM,CAAC,4BAA4B,EAAE,yBAAyB,CAAC,CAChE,CAAC;IACF,aAAa,CAAC,EAAE,8BAA8B,CAAC;CAChD;AAOD,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,gBACV,CAAC;AAEpD,eAAO,MAAM,sBAAsB,GACjC,OAAO,OAAO,KACb,KAAK,IAAI,oBAEkE,CAAC;AAE/E,eAAO,MAAM,wBAAwB,GACnC,OAAO,OAAO,KACb,KAAK,IAAI,sBACmE,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,OAAO,KACb,KAAK,IAAI,iBA6CX,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,OAAO,OAAO,KACb,KAAK,IAAI,mBAIT,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/PortableText/types.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,12 @@ export const PORTABLE_TEXT_DEFAULT_MARKS = ["strong", "em", "code", "link"];
27
27
 
28
28
  /** 1 maps to Title1, 2 to Title2, 3 to Header2 typography. */
29
29
 
30
+ /**
31
+ * A list item's children are its own spans first, then any nested `list`
32
+ * block(s) — the shape that carries multi-level lists. A spans-only item (no
33
+ * nested list) is the common, flat case and stays valid unchanged.
34
+ */
35
+
30
36
  /** Screenshots render framed (border, no shadow); illustrations render flat. */
31
37
 
32
38
  /**
@@ -113,10 +119,19 @@ export const isPortableTextBlock = value => {
113
119
  switch (value.type) {
114
120
  case "paragraph":
115
121
  case "heading":
116
- case "list-item":
117
122
  return Array.isArray(value.children) && value.children.every(isPortableTextSpan);
123
+ case "list-item":
124
+ // The item's spans, plus optional nested `list` block(s). Widened only
125
+ // for nested lists: any other block child (a stray paragraph, an object)
126
+ // still fails, so a serializer bug is caught here, not at render.
127
+ return Array.isArray(value.children) && value.children.every(child => isPortableTextSpan(child) || isPortableTextBlock(child) && child.type === "list");
118
128
  case "list":
119
- return Array.isArray(value.children) && value.children.every(isPortableTextBlock);
129
+ // A list holds `list-item`s only. A sublist emitted as a sibling of the
130
+ // items (the classic half-implemented-nesting bug) renders invalid HTML
131
+ // — <ul> with a direct <ul> child — so it fails here, not at render.
132
+ // `list-item` is validated but sits outside the PortableTextBlock union,
133
+ // so the discriminator is checked before isPortableTextBlock narrows it.
134
+ return Array.isArray(value.children) && value.children.every(child => isRecord(child) && child.type === "list-item" && isPortableTextBlock(child));
120
135
  case "media":
121
136
  return typeof value.src === "string";
122
137
  case "titled-text":