@activecollab/components 2.0.413 → 2.0.415
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.
- package/dist/cjs/components/Media/Media.js.map +1 -1
- package/dist/cjs/components/PortableText/renderers.js +10 -0
- package/dist/cjs/components/PortableText/renderers.js.map +1 -1
- package/dist/cjs/components/PortableText/types.js +18 -1
- package/dist/cjs/components/PortableText/types.js.map +1 -1
- package/dist/cjs/components/PortableText/types.test.js +17 -0
- package/dist/cjs/components/PortableText/types.test.js.map +1 -1
- package/dist/cjs/presentation/shared/MessageDialog.js +10 -6
- package/dist/cjs/presentation/shared/MessageDialog.js.map +1 -1
- package/dist/esm/components/Media/Media.d.ts +3 -2
- package/dist/esm/components/Media/Media.d.ts.map +1 -1
- package/dist/esm/components/Media/Media.js.map +1 -1
- package/dist/esm/components/PortableText/renderers.d.ts.map +1 -1
- package/dist/esm/components/PortableText/renderers.js +10 -0
- package/dist/esm/components/PortableText/renderers.js.map +1 -1
- package/dist/esm/components/PortableText/types.d.ts +10 -1
- package/dist/esm/components/PortableText/types.d.ts.map +1 -1
- package/dist/esm/components/PortableText/types.js +15 -0
- package/dist/esm/components/PortableText/types.js.map +1 -1
- package/dist/esm/components/PortableText/types.test.js +18 -1
- package/dist/esm/components/PortableText/types.test.js.map +1 -1
- package/dist/esm/presentation/shared/MessageDialog.d.ts.map +1 -1
- package/dist/esm/presentation/shared/MessageDialog.js +10 -6
- package/dist/esm/presentation/shared/MessageDialog.js.map +1 -1
- package/dist/index.js +161 -134
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Media.js","names":["_react","_interopRequireWildcard","require","_Styles","_Typography","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","Media","exports","forwardRef","_ref","ref","src","alt","_ref$variant","variant","caption","rest","createElement","StyledMedia","$bordered","className","Caption1","color","displayName"],"sources":["../../../../src/components/Media/Media.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { StyledMedia } from \"./Styles\";\nimport {
|
|
1
|
+
{"version":3,"file":"Media.js","names":["_react","_interopRequireWildcard","require","_Styles","_Typography","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","Media","exports","forwardRef","_ref","ref","src","alt","_ref$variant","variant","caption","rest","createElement","StyledMedia","$bordered","className","Caption1","color","displayName"],"sources":["../../../../src/components/Media/Media.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { StyledMedia } from \"./Styles\";\nimport {\n PortableTextMediaBlock,\n PortableTextMediaImageVariant,\n} from \"../PortableText/types\";\nimport { Caption1 } from \"../Typography\";\n\nexport interface IMediaProps\n extends Omit<PortableTextMediaBlock, \"type\" | \"variant\">,\n React.ComponentPropsWithoutRef<\"div\"> {\n variant?: PortableTextMediaImageVariant;\n}\n\n/**\n * An image block: a screenshot renders framed (border, no shadow), a flat\n * illustration renders without a frame. The caption sits below the frame.\n */\nexport const Media = forwardRef<HTMLDivElement, IMediaProps>(\n ({ src, alt, variant = \"illustration\", caption, ...rest }, ref) => (\n <StyledMedia ref={ref} $bordered={variant === \"screenshot\"} {...rest}>\n <div className=\"c-media-frame\">\n <img src={src} alt={alt ?? \"\"} />\n </div>\n {caption ? <Caption1 color=\"secondary\">{caption}</Caption1> : null}\n </StyledMedia>\n )\n);\n\nMedia.displayName = \"Media\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.portableTextDefaultMarkRenderers = exports.portableTextDefaultBlockRenderers = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _Styles = require("./Styles");
|
|
9
|
+
var _types = require("./types");
|
|
9
10
|
var _Media = require("../Media");
|
|
10
11
|
var _Tables = require("../Tables");
|
|
11
12
|
var _TitledText = require("../TitledText");
|
|
@@ -115,6 +116,15 @@ var portableTextDefaultBlockRenderers = exports.portableTextDefaultBlockRenderer
|
|
|
115
116
|
alt = _ref1.alt,
|
|
116
117
|
variant = _ref1.variant,
|
|
117
118
|
caption = _ref1.caption;
|
|
119
|
+
|
|
120
|
+
// Video (and future) variants carry service semantics, so their renderer
|
|
121
|
+
// is application-catalog territory — an injected `media` override. The
|
|
122
|
+
// universal set covers images only; anything else degrades and warns, per
|
|
123
|
+
// the contract's degradation rule.
|
|
124
|
+
if (variant !== undefined && !(0, _types.isPortableTextMediaImageVariant)(variant)) {
|
|
125
|
+
console.warn("PortableText: no default renderer for media variant \"".concat(variant, "\"."));
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
118
128
|
return /*#__PURE__*/_react.default.createElement(_Media.Media, {
|
|
119
129
|
src: src,
|
|
120
130
|
alt: alt,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers.js","names":["_react","_interopRequireWildcard","require","_Styles","_Media","_Tables","_TitledText","_Typography","_Typography2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","portableTextDefaultMarkRenderers","exports","strong","_ref","children","createElement","em","_ref2","code","_ref3","StyledCode","link","_ref4","mark","href","Fragment","StyledLink","target","rel","HEADING_LEVEL_VARIANTS","DEFAULT_HEADING_LEVEL","headingVariantForLevel","level","undefined","variant","console","warn","concat","HeadingBlock","_ref5","block","_ref6","Heading","titledTextHeadings","portableTextDefaultBlockRenderers","paragraph","_ref7","Body1","heading","list","_ref8","ordered","style","StyledList","as","$ordered","listItem","_ref9","Typography","media","_ref0","_ref1","src","alt","caption","Media","titledText","_ref10","_ref11","title","TitledText","codeBlock","_ref12","_ref13","language","StyledCodeBlock","table","_ref14","renderSpans","_ref15","header","rows","cell","spans","map","span","index","key","text","StyledTableBlock","Table","Thead","Tbody","row","rowIndex","cellIndex","divider","StyledDivider"],"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 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 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","_interopRequireWildcard","require","_Styles","_types","_Media","_Tables","_TitledText","_Typography","_Typography2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","portableTextDefaultMarkRenderers","exports","strong","_ref","children","createElement","em","_ref2","code","_ref3","StyledCode","link","_ref4","mark","href","Fragment","StyledLink","target","rel","HEADING_LEVEL_VARIANTS","DEFAULT_HEADING_LEVEL","headingVariantForLevel","level","undefined","variant","console","warn","concat","HeadingBlock","_ref5","block","_ref6","Heading","titledTextHeadings","portableTextDefaultBlockRenderers","paragraph","_ref7","Body1","heading","list","_ref8","ordered","style","StyledList","as","$ordered","listItem","_ref9","Typography","media","_ref0","_ref1","src","alt","caption","isPortableTextMediaImageVariant","Media","titledText","_ref10","_ref11","title","TitledText","codeBlock","_ref12","_ref13","language","StyledCodeBlock","table","_ref14","renderSpans","_ref15","header","rows","cell","spans","map","span","index","key","text","StyledTableBlock","Table","Thead","Tbody","row","rowIndex","cellIndex","divider","StyledDivider"],"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":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.isPortableTextTableRow = exports.isPortableTextSpan = exports.isPortableTextObjectNode = exports.isPortableTextContent = exports.isPortableTextBlock = exports.PORTABLE_TEXT_DEFAULT_MARKS = exports.PORTABLE_TEXT_DEFAULT_BLOCKS = void 0;
|
|
6
|
+
exports.isPortableTextTableRow = exports.isPortableTextSpan = exports.isPortableTextObjectNode = exports.isPortableTextMediaImageVariant = exports.isPortableTextContent = exports.isPortableTextBlock = exports.PORTABLE_TEXT_DEFAULT_MARKS = exports.PORTABLE_TEXT_DEFAULT_BLOCKS = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* Portable Text envelope — the general content contract for structured,
|
|
9
9
|
* renderer-independent content (in-app messages, help, changelogs).
|
|
@@ -35,6 +35,23 @@ var PORTABLE_TEXT_DEFAULT_MARKS = exports.PORTABLE_TEXT_DEFAULT_MARKS = ["strong
|
|
|
35
35
|
|
|
36
36
|
/** Screenshots render framed (border, no shadow); illustrations render flat. */
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Video variants name the hosting service; `src` is the canonical video URL.
|
|
40
|
+
* Their rendering carries service semantics (URL parsing, embed derivation),
|
|
41
|
+
* so it belongs to the application catalog — injected as a `media` block
|
|
42
|
+
* override — never to the default set. The default renderer degrades them.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
// A Record so the compiler checks the list against the union in both
|
|
46
|
+
// directions: a missing and a stray key each fail to build.
|
|
47
|
+
var MEDIA_IMAGE_VARIANTS = {
|
|
48
|
+
screenshot: true,
|
|
49
|
+
illustration: true
|
|
50
|
+
};
|
|
51
|
+
var isPortableTextMediaImageVariant = exports.isPortableTextMediaImageVariant = function isPortableTextMediaImageVariant(value) {
|
|
52
|
+
return typeof value === "string" && value in MEDIA_IMAGE_VARIANTS;
|
|
53
|
+
};
|
|
54
|
+
|
|
38
55
|
/** A table cell is a span array, so inline marks work inside cells. */
|
|
39
56
|
|
|
40
57
|
/** A themed horizontal rule between sections. Carries no data. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["PORTABLE_TEXT_DEFAULT_MARKS","exports","DEFAULT_BLOCK_TYPES","paragraph","heading","list","media","table","divider","PORTABLE_TEXT_DEFAULT_BLOCKS","Object","keys","isRecord","value","isPortableTextSpan","text","isPortableTextTableRow","Array","isArray","every","cell","isPortableTextObjectNode","type","_type","isPortableTextBlock","children","src","title","content","undefined","isPortableTextContent","code","language","header","rows","node"],"sources":["../../../../src/components/PortableText/types.ts"],"sourcesContent":["import { ComponentType, ReactNode } from \"react\";\n\n/**\n * Portable Text envelope — the general content contract for structured,\n * renderer-independent content (in-app messages, help, changelogs).\n *\n * The design system owns this envelope and the universal default set below.\n * It never hardcodes a product element: concrete elements (callout,\n * button-reference, doc-link, …) are defined in the application catalog and\n * injected into the Portable Text engine through {@link PortableTextComponents}.\n * See README.md next to this file for the full contract.\n */\n\n/* ---- Spans and marks ------------------------------------------------- */\n\n/**\n * A mark with data. Parameterless marks travel as plain strings (\"strong\");\n * marks that need data travel as objects discriminated by `type`.\n */\nexport interface PortableTextMarkObject {\n type: string;\n [data: string]: unknown;\n}\n\n/** The one default mark that carries data. */\nexport interface PortableTextLinkMark extends PortableTextMarkObject {\n type: \"link\";\n href: string;\n}\n\nexport type PortableTextMark = string | PortableTextMarkObject;\n\n/** The leaf of every text run: a piece of text plus the marks wrapping it. */\nexport interface PortableTextSpan {\n text: string;\n marks?: PortableTextMark[];\n}\n\n/** Marks every client understands without injection. */\nexport const PORTABLE_TEXT_DEFAULT_MARKS = [\n \"strong\",\n \"em\",\n \"code\",\n \"link\",\n] as const;\n\nexport type PortableTextDefaultMark =\n (typeof PORTABLE_TEXT_DEFAULT_MARKS)[number];\n\n/* ---- Blocks ----------------------------------------------------------- */\n\nexport interface PortableTextParagraphBlock {\n type: \"paragraph\";\n children: PortableTextSpan[];\n}\n\n/** 1 maps to Title1, 2 to Title2, 3 to Header2 typography. */\nexport type PortableTextHeadingLevel = 1 | 2 | 3;\n\nexport interface PortableTextHeadingBlock {\n type: \"heading\";\n level: PortableTextHeadingLevel;\n children: PortableTextSpan[];\n}\n\nexport type PortableTextListStyle = \"bullet\" | \"number\";\n\nexport interface PortableTextListItemBlock {\n type: \"list-item\";\n children: PortableTextSpan[];\n}\n\nexport interface PortableTextListBlock {\n type: \"list\";\n style?: PortableTextListStyle;\n children: PortableTextListItemBlock[];\n}\n\n/** Screenshots render framed (border, no shadow); illustrations render flat. */\nexport type PortableTextMediaVariant = \"screenshot\" | \"illustration\";\n\nexport interface PortableTextMediaBlock {\n type: \"media\";\n src: string;\n alt?: string;\n variant?: PortableTextMediaVariant;\n caption?: string;\n}\n\nexport interface PortableTextTitledTextBlock {\n type: \"titled-text\";\n /**\n * Same semantic scale as `heading` — 1, 2 or 3 (the default) — so the wire\n * format never encodes a typography name. How a level looks is the\n * renderer's business.\n */\n level?: PortableTextHeadingLevel;\n title: string;\n content?: PortableTextNode[];\n}\n\nexport interface PortableTextCodeBlock {\n type: \"code-block\";\n /**\n * A language hint (e.g. \"php\", \"json\"). The default renderer does no\n * highlighting, so any value — known, unknown or absent — renders as plain\n * preformatted text; it travels as data for surfaces that highlight.\n */\n language?: string;\n code: string;\n}\n\n/** A table cell is a span array, so inline marks work inside cells. */\nexport type PortableTextTableCell = PortableTextSpan[];\nexport type PortableTextTableRow = PortableTextTableCell[];\n\nexport interface PortableTextTableBlock {\n type: \"table\";\n header: PortableTextTableRow;\n rows: PortableTextTableRow[];\n}\n\n/** A themed horizontal rule between sections. Carries no data. */\nexport interface PortableTextDividerBlock {\n type: \"divider\";\n}\n\nexport type PortableTextBlock =\n | PortableTextParagraphBlock\n | PortableTextHeadingBlock\n | PortableTextListBlock\n | PortableTextMediaBlock\n | PortableTextTitledTextBlock\n | PortableTextCodeBlock\n | PortableTextTableBlock\n | PortableTextDividerBlock;\n\n/**\n * Derived from the union's discriminators, so adding a block to the union\n * without a renderer entry is a compile error, never silent drift.\n */\nexport type PortableTextDefaultBlockType = (\n | PortableTextBlock\n | PortableTextListItemBlock\n)[\"type\"];\n\n// A Record so the compiler checks the list against the union in both\n// directions: a missing and a stray key each fail to build.\nconst DEFAULT_BLOCK_TYPES: Record<PortableTextDefaultBlockType, true> = {\n paragraph: true,\n heading: true,\n list: true,\n \"list-item\": true,\n media: true,\n \"titled-text\": true,\n \"code-block\": true,\n table: true,\n divider: true,\n};\n\n/** Blocks every client understands without injection. */\nexport const PORTABLE_TEXT_DEFAULT_BLOCKS = Object.keys(\n DEFAULT_BLOCK_TYPES\n) as readonly PortableTextDefaultBlockType[];\n\n/* ---- Objects ----------------------------------------------------------- */\n\n/**\n * An embedded component the envelope does not interpret: `_type` names an\n * application-catalog element, everything else is that element's data. An\n * object whose `_type` has no injected renderer renders nothing and is logged.\n */\nexport interface PortableTextObjectNode {\n type: \"object\";\n _type: string;\n [data: string]: unknown;\n}\n\nexport type PortableTextNode = PortableTextBlock | PortableTextObjectNode;\n\n/** The root of a message body: what an API returns under `content`. */\nexport type PortableTextContent = PortableTextNode[];\n\n/* ---- Injection contract ------------------------------------------------ */\n\nexport interface PortableTextMarkRendererProps<\n TMark extends PortableTextMarkObject = PortableTextMarkObject\n> {\n /** Present for object marks; absent when the mark is a plain string. */\n mark?: TMark;\n children: ReactNode;\n}\n\nexport type PortableTextMarkRenderer<\n TMark extends PortableTextMarkObject = PortableTextMarkObject\n> = ComponentType<PortableTextMarkRendererProps<TMark>>;\n\nexport interface PortableTextObjectRendererProps<\n TNode extends PortableTextObjectNode = PortableTextObjectNode\n> {\n node: TNode;\n /** The object's nested `content`, already rendered by the engine. */\n children?: ReactNode;\n}\n\nexport type PortableTextObjectRenderer<\n TNode extends PortableTextObjectNode = PortableTextObjectNode\n> = ComponentType<PortableTextObjectRendererProps<TNode>>;\n\nexport interface PortableTextBlockRendererProps<\n TBlock extends PortableTextBlock = PortableTextBlock\n> {\n block: TBlock;\n /** The block's rendered children/content, when it has any. */\n children?: ReactNode;\n /**\n * Engine-bound span renderer for blocks that carry spans outside `children`\n * (table cells). Resolves marks with the same precedence — injected first,\n * then defaults — as flowing text. Absent when a renderer is used without\n * the engine.\n */\n renderSpans?: (spans: PortableTextSpan[]) => ReactNode;\n}\n\nexport type PortableTextBlockRenderer<\n TBlock extends PortableTextBlock = PortableTextBlock\n> = ComponentType<PortableTextBlockRendererProps<TBlock>>;\n\nexport type PortableTextUnknownKind = \"block\" | \"mark\" | \"object\";\n\n/**\n * Called once per unknown type instead of rendering it, so content written\n * for newer clients degrades silently on older ones.\n */\nexport type PortableTextUnknownTypeHandler = (\n kind: PortableTextUnknownKind,\n type: string\n) => void;\n\n/**\n * What an application injects into the Portable Text engine: renderers for\n * its catalog marks and objects, optional overrides for the default blocks,\n * and the unknown-type hook.\n */\nexport interface PortableTextComponents {\n marks?: Record<string, PortableTextMarkRenderer>;\n objects?: Record<string, PortableTextObjectRenderer>;\n blocks?: Partial<\n Record<PortableTextDefaultBlockType, PortableTextBlockRenderer>\n >;\n onUnknownType?: PortableTextUnknownTypeHandler;\n}\n\n/* ---- Runtime guards ----------------------------------------------------- */\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nexport const isPortableTextSpan = (value: unknown): value is PortableTextSpan =>\n isRecord(value) && typeof value.text === \"string\";\n\nexport const isPortableTextTableRow = (\n value: unknown\n): value is PortableTextTableRow =>\n Array.isArray(value) &&\n value.every((cell) => Array.isArray(cell) && cell.every(isPortableTextSpan));\n\nexport const isPortableTextObjectNode = (\n value: unknown\n): value is PortableTextObjectNode =>\n isRecord(value) && value.type === \"object\" && typeof value._type === \"string\";\n\n/**\n * A block is any non-object node with a string `type`. Unknown block types\n * stay valid on purpose — they render nothing on clients that predate them.\n * Known types are held to their shape, so a serializer bug (a paragraph\n * without `children`, a list of non-nodes) fails here instead of at render.\n */\nexport const isPortableTextBlock = (\n value: unknown\n): value is PortableTextBlock => {\n if (\n !isRecord(value) ||\n typeof value.type !== \"string\" ||\n value.type === \"object\"\n ) {\n return false;\n }\n\n switch (value.type) {\n case \"paragraph\":\n case \"heading\":\n case \"list-item\":\n return (\n Array.isArray(value.children) &&\n value.children.every(isPortableTextSpan)\n );\n case \"list\":\n return (\n Array.isArray(value.children) &&\n value.children.every(isPortableTextBlock)\n );\n case \"media\":\n return typeof value.src === \"string\";\n case \"titled-text\":\n return (\n typeof value.title === \"string\" &&\n (value.content === undefined || isPortableTextContent(value.content))\n );\n case \"code-block\":\n return (\n typeof value.code === \"string\" &&\n (value.language === undefined || typeof value.language === \"string\")\n );\n case \"table\":\n return (\n isPortableTextTableRow(value.header) &&\n Array.isArray(value.rows) &&\n value.rows.every(isPortableTextTableRow)\n );\n case \"divider\":\n return true;\n default:\n return true;\n }\n};\n\nexport const isPortableTextContent = (\n value: unknown\n): value is PortableTextContent =>\n Array.isArray(value) &&\n value.every(\n (node) => isPortableTextBlock(node) || isPortableTextObjectNode(node)\n );\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":["PORTABLE_TEXT_DEFAULT_MARKS","exports","MEDIA_IMAGE_VARIANTS","screenshot","illustration","isPortableTextMediaImageVariant","value","DEFAULT_BLOCK_TYPES","paragraph","heading","list","media","table","divider","PORTABLE_TEXT_DEFAULT_BLOCKS","Object","keys","isRecord","isPortableTextSpan","text","isPortableTextTableRow","Array","isArray","every","cell","isPortableTextObjectNode","type","_type","isPortableTextBlock","children","src","title","content","undefined","isPortableTextContent","code","language","header","rows","node"],"sources":["../../../../src/components/PortableText/types.ts"],"sourcesContent":["import { ComponentType, ReactNode } from \"react\";\n\n/**\n * Portable Text envelope — the general content contract for structured,\n * renderer-independent content (in-app messages, help, changelogs).\n *\n * The design system owns this envelope and the universal default set below.\n * It never hardcodes a product element: concrete elements (callout,\n * button-reference, doc-link, …) are defined in the application catalog and\n * injected into the Portable Text engine through {@link PortableTextComponents}.\n * See README.md next to this file for the full contract.\n */\n\n/* ---- Spans and marks ------------------------------------------------- */\n\n/**\n * A mark with data. Parameterless marks travel as plain strings (\"strong\");\n * marks that need data travel as objects discriminated by `type`.\n */\nexport interface PortableTextMarkObject {\n type: string;\n [data: string]: unknown;\n}\n\n/** The one default mark that carries data. */\nexport interface PortableTextLinkMark extends PortableTextMarkObject {\n type: \"link\";\n href: string;\n}\n\nexport type PortableTextMark = string | PortableTextMarkObject;\n\n/** The leaf of every text run: a piece of text plus the marks wrapping it. */\nexport interface PortableTextSpan {\n text: string;\n marks?: PortableTextMark[];\n}\n\n/** Marks every client understands without injection. */\nexport const PORTABLE_TEXT_DEFAULT_MARKS = [\n \"strong\",\n \"em\",\n \"code\",\n \"link\",\n] as const;\n\nexport type PortableTextDefaultMark =\n (typeof PORTABLE_TEXT_DEFAULT_MARKS)[number];\n\n/* ---- Blocks ----------------------------------------------------------- */\n\nexport interface PortableTextParagraphBlock {\n type: \"paragraph\";\n children: PortableTextSpan[];\n}\n\n/** 1 maps to Title1, 2 to Title2, 3 to Header2 typography. */\nexport type PortableTextHeadingLevel = 1 | 2 | 3;\n\nexport interface PortableTextHeadingBlock {\n type: \"heading\";\n level: PortableTextHeadingLevel;\n children: PortableTextSpan[];\n}\n\nexport type PortableTextListStyle = \"bullet\" | \"number\";\n\nexport interface PortableTextListItemBlock {\n type: \"list-item\";\n children: PortableTextSpan[];\n}\n\nexport interface PortableTextListBlock {\n type: \"list\";\n style?: PortableTextListStyle;\n children: PortableTextListItemBlock[];\n}\n\n/** Screenshots render framed (border, no shadow); illustrations render flat. */\nexport type PortableTextMediaImageVariant = \"screenshot\" | \"illustration\";\n\n/**\n * Video variants name the hosting service; `src` is the canonical video URL.\n * Their rendering carries service semantics (URL parsing, embed derivation),\n * so it belongs to the application catalog — injected as a `media` block\n * override — never to the default set. The default renderer degrades them.\n */\nexport type PortableTextMediaVideoVariant = \"vimeo\" | \"youtube\";\n\nexport type PortableTextMediaVariant =\n | PortableTextMediaImageVariant\n | PortableTextMediaVideoVariant;\n\n// A Record so the compiler checks the list against the union in both\n// directions: a missing and a stray key each fail to build.\nconst MEDIA_IMAGE_VARIANTS: Record<PortableTextMediaImageVariant, true> = {\n screenshot: true,\n illustration: true,\n};\n\nexport const isPortableTextMediaImageVariant = (\n value: unknown\n): value is PortableTextMediaImageVariant =>\n typeof value === \"string\" && value in MEDIA_IMAGE_VARIANTS;\n\nexport interface PortableTextMediaBlock {\n type: \"media\";\n src: string;\n alt?: string;\n variant?: PortableTextMediaVariant;\n caption?: string;\n}\n\nexport interface PortableTextTitledTextBlock {\n type: \"titled-text\";\n /**\n * Same semantic scale as `heading` — 1, 2 or 3 (the default) — so the wire\n * format never encodes a typography name. How a level looks is the\n * renderer's business.\n */\n level?: PortableTextHeadingLevel;\n title: string;\n content?: PortableTextNode[];\n}\n\nexport interface PortableTextCodeBlock {\n type: \"code-block\";\n /**\n * A language hint (e.g. \"php\", \"json\"). The default renderer does no\n * highlighting, so any value — known, unknown or absent — renders as plain\n * preformatted text; it travels as data for surfaces that highlight.\n */\n language?: string;\n code: string;\n}\n\n/** A table cell is a span array, so inline marks work inside cells. */\nexport type PortableTextTableCell = PortableTextSpan[];\nexport type PortableTextTableRow = PortableTextTableCell[];\n\nexport interface PortableTextTableBlock {\n type: \"table\";\n header: PortableTextTableRow;\n rows: PortableTextTableRow[];\n}\n\n/** A themed horizontal rule between sections. Carries no data. */\nexport interface PortableTextDividerBlock {\n type: \"divider\";\n}\n\nexport type PortableTextBlock =\n | PortableTextParagraphBlock\n | PortableTextHeadingBlock\n | PortableTextListBlock\n | PortableTextMediaBlock\n | PortableTextTitledTextBlock\n | PortableTextCodeBlock\n | PortableTextTableBlock\n | PortableTextDividerBlock;\n\n/**\n * Derived from the union's discriminators, so adding a block to the union\n * without a renderer entry is a compile error, never silent drift.\n */\nexport type PortableTextDefaultBlockType = (\n | PortableTextBlock\n | PortableTextListItemBlock\n)[\"type\"];\n\n// A Record so the compiler checks the list against the union in both\n// directions: a missing and a stray key each fail to build.\nconst DEFAULT_BLOCK_TYPES: Record<PortableTextDefaultBlockType, true> = {\n paragraph: true,\n heading: true,\n list: true,\n \"list-item\": true,\n media: true,\n \"titled-text\": true,\n \"code-block\": true,\n table: true,\n divider: true,\n};\n\n/** Blocks every client understands without injection. */\nexport const PORTABLE_TEXT_DEFAULT_BLOCKS = Object.keys(\n DEFAULT_BLOCK_TYPES\n) as readonly PortableTextDefaultBlockType[];\n\n/* ---- Objects ----------------------------------------------------------- */\n\n/**\n * An embedded component the envelope does not interpret: `_type` names an\n * application-catalog element, everything else is that element's data. An\n * object whose `_type` has no injected renderer renders nothing and is logged.\n */\nexport interface PortableTextObjectNode {\n type: \"object\";\n _type: string;\n [data: string]: unknown;\n}\n\nexport type PortableTextNode = PortableTextBlock | PortableTextObjectNode;\n\n/** The root of a message body: what an API returns under `content`. */\nexport type PortableTextContent = PortableTextNode[];\n\n/* ---- Injection contract ------------------------------------------------ */\n\nexport interface PortableTextMarkRendererProps<\n TMark extends PortableTextMarkObject = PortableTextMarkObject\n> {\n /** Present for object marks; absent when the mark is a plain string. */\n mark?: TMark;\n children: ReactNode;\n}\n\nexport type PortableTextMarkRenderer<\n TMark extends PortableTextMarkObject = PortableTextMarkObject\n> = ComponentType<PortableTextMarkRendererProps<TMark>>;\n\nexport interface PortableTextObjectRendererProps<\n TNode extends PortableTextObjectNode = PortableTextObjectNode\n> {\n node: TNode;\n /** The object's nested `content`, already rendered by the engine. */\n children?: ReactNode;\n}\n\nexport type PortableTextObjectRenderer<\n TNode extends PortableTextObjectNode = PortableTextObjectNode\n> = ComponentType<PortableTextObjectRendererProps<TNode>>;\n\nexport interface PortableTextBlockRendererProps<\n TBlock extends PortableTextBlock = PortableTextBlock\n> {\n block: TBlock;\n /** The block's rendered children/content, when it has any. */\n children?: ReactNode;\n /**\n * Engine-bound span renderer for blocks that carry spans outside `children`\n * (table cells). Resolves marks with the same precedence — injected first,\n * then defaults — as flowing text. Absent when a renderer is used without\n * the engine.\n */\n renderSpans?: (spans: PortableTextSpan[]) => ReactNode;\n}\n\nexport type PortableTextBlockRenderer<\n TBlock extends PortableTextBlock = PortableTextBlock\n> = ComponentType<PortableTextBlockRendererProps<TBlock>>;\n\nexport type PortableTextUnknownKind = \"block\" | \"mark\" | \"object\";\n\n/**\n * Called once per unknown type instead of rendering it, so content written\n * for newer clients degrades silently on older ones.\n */\nexport type PortableTextUnknownTypeHandler = (\n kind: PortableTextUnknownKind,\n type: string\n) => void;\n\n/**\n * What an application injects into the Portable Text engine: renderers for\n * its catalog marks and objects, optional overrides for the default blocks,\n * and the unknown-type hook.\n */\nexport interface PortableTextComponents {\n marks?: Record<string, PortableTextMarkRenderer>;\n objects?: Record<string, PortableTextObjectRenderer>;\n blocks?: Partial<\n Record<PortableTextDefaultBlockType, PortableTextBlockRenderer>\n >;\n onUnknownType?: PortableTextUnknownTypeHandler;\n}\n\n/* ---- Runtime guards ----------------------------------------------------- */\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nexport const isPortableTextSpan = (value: unknown): value is PortableTextSpan =>\n isRecord(value) && typeof value.text === \"string\";\n\nexport const isPortableTextTableRow = (\n value: unknown\n): value is PortableTextTableRow =>\n Array.isArray(value) &&\n value.every((cell) => Array.isArray(cell) && cell.every(isPortableTextSpan));\n\nexport const isPortableTextObjectNode = (\n value: unknown\n): value is PortableTextObjectNode =>\n isRecord(value) && value.type === \"object\" && typeof value._type === \"string\";\n\n/**\n * A block is any non-object node with a string `type`. Unknown block types\n * stay valid on purpose — they render nothing on clients that predate them.\n * Known types are held to their shape, so a serializer bug (a paragraph\n * without `children`, a list of non-nodes) fails here instead of at render.\n */\nexport const isPortableTextBlock = (\n value: unknown\n): value is PortableTextBlock => {\n if (\n !isRecord(value) ||\n typeof value.type !== \"string\" ||\n value.type === \"object\"\n ) {\n return false;\n }\n\n switch (value.type) {\n case \"paragraph\":\n case \"heading\":\n case \"list-item\":\n return (\n Array.isArray(value.children) &&\n value.children.every(isPortableTextSpan)\n );\n case \"list\":\n return (\n Array.isArray(value.children) &&\n value.children.every(isPortableTextBlock)\n );\n case \"media\":\n return typeof value.src === \"string\";\n case \"titled-text\":\n return (\n typeof value.title === \"string\" &&\n (value.content === undefined || isPortableTextContent(value.content))\n );\n case \"code-block\":\n return (\n typeof value.code === \"string\" &&\n (value.language === undefined || typeof value.language === \"string\")\n );\n case \"table\":\n return (\n isPortableTextTableRow(value.header) &&\n Array.isArray(value.rows) &&\n value.rows.every(isPortableTextTableRow)\n );\n case \"divider\":\n return true;\n default:\n return true;\n }\n};\n\nexport const isPortableTextContent = (\n value: unknown\n): value is PortableTextContent =>\n Array.isArray(value) &&\n value.every(\n (node) => isPortableTextBlock(node) || isPortableTextObjectNode(node)\n );\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -243,6 +243,23 @@ describe("PortableText envelope", function () {
|
|
|
243
243
|
expect(_types.PORTABLE_TEXT_DEFAULT_BLOCKS).toEqual(["paragraph", "heading", "list", "list-item", "media", "titled-text", "code-block", "table", "divider"]);
|
|
244
244
|
expect(_types.PORTABLE_TEXT_DEFAULT_MARKS).toEqual(["strong", "em", "code", "link"]);
|
|
245
245
|
});
|
|
246
|
+
it("keeps video media variants in the envelope but out of the image variant set", function () {
|
|
247
|
+
expect((0, _types.isPortableTextContent)([{
|
|
248
|
+
type: "media",
|
|
249
|
+
variant: "vimeo",
|
|
250
|
+
src: "https://vimeo.com/1131696931",
|
|
251
|
+
caption: "Duplicating a project"
|
|
252
|
+
}, {
|
|
253
|
+
type: "media",
|
|
254
|
+
variant: "youtube",
|
|
255
|
+
src: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
|
|
256
|
+
}])).toBe(true);
|
|
257
|
+
expect((0, _types.isPortableTextMediaImageVariant)("screenshot")).toBe(true);
|
|
258
|
+
expect((0, _types.isPortableTextMediaImageVariant)("illustration")).toBe(true);
|
|
259
|
+
expect((0, _types.isPortableTextMediaImageVariant)("vimeo")).toBe(false);
|
|
260
|
+
expect((0, _types.isPortableTextMediaImageVariant)("youtube")).toBe(false);
|
|
261
|
+
expect((0, _types.isPortableTextMediaImageVariant)(undefined)).toBe(false);
|
|
262
|
+
});
|
|
246
263
|
it("accepts an application components map through the injection contract", function () {
|
|
247
264
|
var _components$onUnknown, _components$marks;
|
|
248
265
|
var seen = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.test.js","names":["_react","require","_types","describe","sampleMessageContent","type","level","children","text","marks","article","style","src","variant","caption","title","content","_type","tone","label","language","code","header","rows","it","expect","isPortableTextContent","toBe","payload","data","heading","paragraph","callout","isPortableTextBlock","isPortableTextObjectNode","isPortableTextSpan","PORTABLE_TEXT_DEFAULT_BLOCKS","toEqual","PORTABLE_TEXT_DEFAULT_MARKS","_components$onUnknown","_components$marks","seen","components","interfaceName","_ref","createElement","Fragment","objects","_ref2","onUnknownType","kind","push","concat","call","Object","keys"],"sources":["../../../../src/components/PortableText/types.test.ts"],"sourcesContent":["import { createElement, Fragment } from \"react\";\n\nimport {\n isPortableTextBlock,\n isPortableTextContent,\n isPortableTextObjectNode,\n isPortableTextSpan,\n PORTABLE_TEXT_DEFAULT_BLOCKS,\n PORTABLE_TEXT_DEFAULT_MARKS,\n PortableTextComponents,\n PortableTextContent,\n} from \"./types\";\n\ndescribe(\"PortableText envelope\", () => {\n const sampleMessageContent: PortableTextContent = [\n { type: \"heading\", level: 2, children: [{ text: \"IP Firewall\" }] },\n {\n type: \"paragraph\",\n children: [\n { text: \"Open the \" },\n { text: \"Security page\", marks: [\"interface-name\"] },\n { text: \" and press \" },\n { text: \"Enter\", marks: [\"keyboard-key\"] },\n { text: \". Read more in \" },\n {\n text: \"the help article\",\n marks: [{ type: \"doc-link\", article: \"ip-firewall\" }],\n },\n { text: \".\" },\n ],\n },\n {\n type: \"list\",\n style: \"bullet\",\n children: [\n {\n type: \"list-item\",\n children: [{ text: \"Allowlist the IPs you trust\" }],\n },\n {\n type: \"list-item\",\n children: [{ text: \"immediately\", marks: [\"strong\"] }],\n },\n ],\n },\n {\n type: \"media\",\n src: \"/screenshots/firewall.png\",\n variant: \"screenshot\",\n caption: \"The firewall settings\",\n },\n {\n type: \"titled-text\",\n title: \"Allowlist the IPs you trust\",\n level: 3,\n content: [\n { type: \"paragraph\", children: [{ text: \"Add one range per line.\" }] },\n ],\n },\n {\n type: \"object\",\n _type: \"callout\",\n tone: \"note\",\n content: [\n {\n type: \"paragraph\",\n children: [{ text: \"Takes effect immediately.\" }],\n },\n ],\n },\n {\n type: \"object\",\n _type: \"button-reference\",\n label: \"Save Changes\",\n variant: \"primary\",\n },\n { type: \"divider\" },\n {\n type: \"code-block\",\n language: \"json\",\n code: '{ \"allowlist\": [\"203.0.113.0/24\"] }',\n },\n {\n type: \"table\",\n header: [[{ text: \"Range\" }], [{ text: \"Purpose\" }]],\n rows: [\n [\n [{ text: \"203.0.113.0/24\", marks: [\"code\"] }],\n [{ text: \"Office\", marks: [\"strong\"] }],\n ],\n [[{ text: \"198.51.100.0/24\", marks: [\"code\"] }], [{ text: \"VPN\" }]],\n ],\n },\n ];\n\n it(\"validates a sample message that mixes default blocks and catalog objects\", () => {\n expect(isPortableTextContent(sampleMessageContent)).toBe(true);\n });\n\n it(\"keeps unknown block and object types valid so older clients degrade instead of break\", () => {\n expect(\n isPortableTextContent([\n { type: \"some-future-block\", payload: 1 },\n { type: \"object\", _type: \"some-future-element\", data: true },\n ])\n ).toBe(true);\n });\n\n it(\"rejects nodes without a type discriminator and objects without _type\", () => {\n expect(isPortableTextContent([{ children: [] }])).toBe(false);\n expect(isPortableTextContent([{ type: \"object\" }])).toBe(false);\n expect(isPortableTextContent([\"paragraph\"])).toBe(false);\n expect(isPortableTextContent({ content: [] })).toBe(false);\n });\n\n it(\"rejects known blocks whose shape a serializer bug has broken\", () => {\n expect(isPortableTextContent([{ type: \"paragraph\" }])).toBe(false);\n expect(\n isPortableTextContent([{ type: \"heading\", level: 2, children: \"oops\" }])\n ).toBe(false);\n expect(\n isPortableTextContent([\n { type: \"paragraph\", children: [{ marks: [\"strong\"] }] },\n ])\n ).toBe(false);\n expect(isPortableTextContent([{ type: \"list\" }])).toBe(false);\n expect(\n isPortableTextContent([{ type: \"list\", children: [\"not a node\"] }])\n ).toBe(false);\n expect(isPortableTextContent([{ type: \"media\" }])).toBe(false);\n expect(isPortableTextContent([{ type: \"titled-text\", content: [] }])).toBe(\n false\n );\n expect(\n isPortableTextContent([\n { type: \"titled-text\", title: \"Ranges\", content: \"oops\" },\n ])\n ).toBe(false);\n });\n\n it(\"rejects malformed code-block, table and divider-adjacent shapes\", () => {\n expect(isPortableTextContent([{ type: \"code-block\" }])).toBe(false);\n expect(isPortableTextContent([{ type: \"code-block\", code: 42 }])).toBe(\n false\n );\n expect(\n isPortableTextContent([{ type: \"code-block\", code: \"x\", language: 1 }])\n ).toBe(false);\n expect(isPortableTextContent([{ type: \"table\" }])).toBe(false);\n expect(\n isPortableTextContent([{ type: \"table\", header: [], rows: \"oops\" }])\n ).toBe(false);\n expect(\n isPortableTextContent([\n { type: \"table\", header: [[{ text: \"A\" }]], rows: [[\"not a cell\"]] },\n ])\n ).toBe(false);\n expect(\n isPortableTextContent([\n { type: \"table\", header: [{ text: \"not a cell\" }], rows: [] },\n ])\n ).toBe(false);\n });\n\n it(\"accepts a code-block without a language and a table without rows\", () => {\n expect(\n isPortableTextContent([{ type: \"code-block\", code: \"npm install\" }])\n ).toBe(true);\n expect(\n isPortableTextContent([\n { type: \"table\", header: [[{ text: \"A\" }]], rows: [] },\n ])\n ).toBe(true);\n expect(isPortableTextContent([{ type: \"divider\" }])).toBe(true);\n });\n\n it(\"accepts a titled-text with only a title, with or without content\", () => {\n expect(\n isPortableTextContent([{ type: \"titled-text\", title: \"Ranges\" }])\n ).toBe(true);\n expect(\n isPortableTextContent([\n { type: \"titled-text\", title: \"Ranges\", content: [] },\n ])\n ).toBe(true);\n });\n\n it(\"tells blocks, objects and spans apart\", () => {\n const [heading, paragraph] = sampleMessageContent;\n const callout = sampleMessageContent[5];\n\n expect(isPortableTextBlock(heading)).toBe(true);\n expect(isPortableTextBlock(callout)).toBe(false);\n expect(isPortableTextObjectNode(callout)).toBe(true);\n expect(isPortableTextObjectNode(heading)).toBe(false);\n expect(isPortableTextSpan({ text: \"plain\" })).toBe(true);\n expect(isPortableTextSpan(paragraph)).toBe(false);\n });\n\n it(\"ships a universal default set free of product elements\", () => {\n expect(PORTABLE_TEXT_DEFAULT_BLOCKS).toEqual([\n \"paragraph\",\n \"heading\",\n \"list\",\n \"list-item\",\n \"media\",\n \"titled-text\",\n \"code-block\",\n \"table\",\n \"divider\",\n ]);\n expect(PORTABLE_TEXT_DEFAULT_MARKS).toEqual([\n \"strong\",\n \"em\",\n \"code\",\n \"link\",\n ]);\n });\n\n it(\"accepts an application components map through the injection contract\", () => {\n const seen: string[] = [];\n const components: PortableTextComponents = {\n marks: {\n \"interface-name\": ({ children }) =>\n createElement(Fragment, null, children),\n },\n objects: {\n callout: ({ children }) => createElement(Fragment, null, children),\n },\n onUnknownType: (kind, type) => {\n seen.push(`${kind}:${type}`);\n },\n };\n\n components.onUnknownType?.(\"object\", \"some-future-element\");\n\n expect(Object.keys(components.marks ?? {})).toEqual([\"interface-name\"]);\n expect(seen).toEqual([\"object:some-future-element\"]);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.test.js","names":["_react","require","_types","describe","sampleMessageContent","type","level","children","text","marks","article","style","src","variant","caption","title","content","_type","tone","label","language","code","header","rows","it","expect","isPortableTextContent","toBe","payload","data","heading","paragraph","callout","isPortableTextBlock","isPortableTextObjectNode","isPortableTextSpan","PORTABLE_TEXT_DEFAULT_BLOCKS","toEqual","PORTABLE_TEXT_DEFAULT_MARKS","isPortableTextMediaImageVariant","undefined","_components$onUnknown","_components$marks","seen","components","interfaceName","_ref","createElement","Fragment","objects","_ref2","onUnknownType","kind","push","concat","call","Object","keys"],"sources":["../../../../src/components/PortableText/types.test.ts"],"sourcesContent":["import { createElement, Fragment } from \"react\";\n\nimport {\n isPortableTextBlock,\n isPortableTextContent,\n isPortableTextMediaImageVariant,\n isPortableTextObjectNode,\n isPortableTextSpan,\n PORTABLE_TEXT_DEFAULT_BLOCKS,\n PORTABLE_TEXT_DEFAULT_MARKS,\n PortableTextComponents,\n PortableTextContent,\n} from \"./types\";\n\ndescribe(\"PortableText envelope\", () => {\n const sampleMessageContent: PortableTextContent = [\n { type: \"heading\", level: 2, children: [{ text: \"IP Firewall\" }] },\n {\n type: \"paragraph\",\n children: [\n { text: \"Open the \" },\n { text: \"Security page\", marks: [\"interface-name\"] },\n { text: \" and press \" },\n { text: \"Enter\", marks: [\"keyboard-key\"] },\n { text: \". Read more in \" },\n {\n text: \"the help article\",\n marks: [{ type: \"doc-link\", article: \"ip-firewall\" }],\n },\n { text: \".\" },\n ],\n },\n {\n type: \"list\",\n style: \"bullet\",\n children: [\n {\n type: \"list-item\",\n children: [{ text: \"Allowlist the IPs you trust\" }],\n },\n {\n type: \"list-item\",\n children: [{ text: \"immediately\", marks: [\"strong\"] }],\n },\n ],\n },\n {\n type: \"media\",\n src: \"/screenshots/firewall.png\",\n variant: \"screenshot\",\n caption: \"The firewall settings\",\n },\n {\n type: \"titled-text\",\n title: \"Allowlist the IPs you trust\",\n level: 3,\n content: [\n { type: \"paragraph\", children: [{ text: \"Add one range per line.\" }] },\n ],\n },\n {\n type: \"object\",\n _type: \"callout\",\n tone: \"note\",\n content: [\n {\n type: \"paragraph\",\n children: [{ text: \"Takes effect immediately.\" }],\n },\n ],\n },\n {\n type: \"object\",\n _type: \"button-reference\",\n label: \"Save Changes\",\n variant: \"primary\",\n },\n { type: \"divider\" },\n {\n type: \"code-block\",\n language: \"json\",\n code: '{ \"allowlist\": [\"203.0.113.0/24\"] }',\n },\n {\n type: \"table\",\n header: [[{ text: \"Range\" }], [{ text: \"Purpose\" }]],\n rows: [\n [\n [{ text: \"203.0.113.0/24\", marks: [\"code\"] }],\n [{ text: \"Office\", marks: [\"strong\"] }],\n ],\n [[{ text: \"198.51.100.0/24\", marks: [\"code\"] }], [{ text: \"VPN\" }]],\n ],\n },\n ];\n\n it(\"validates a sample message that mixes default blocks and catalog objects\", () => {\n expect(isPortableTextContent(sampleMessageContent)).toBe(true);\n });\n\n it(\"keeps unknown block and object types valid so older clients degrade instead of break\", () => {\n expect(\n isPortableTextContent([\n { type: \"some-future-block\", payload: 1 },\n { type: \"object\", _type: \"some-future-element\", data: true },\n ])\n ).toBe(true);\n });\n\n it(\"rejects nodes without a type discriminator and objects without _type\", () => {\n expect(isPortableTextContent([{ children: [] }])).toBe(false);\n expect(isPortableTextContent([{ type: \"object\" }])).toBe(false);\n expect(isPortableTextContent([\"paragraph\"])).toBe(false);\n expect(isPortableTextContent({ content: [] })).toBe(false);\n });\n\n it(\"rejects known blocks whose shape a serializer bug has broken\", () => {\n expect(isPortableTextContent([{ type: \"paragraph\" }])).toBe(false);\n expect(\n isPortableTextContent([{ type: \"heading\", level: 2, children: \"oops\" }])\n ).toBe(false);\n expect(\n isPortableTextContent([\n { type: \"paragraph\", children: [{ marks: [\"strong\"] }] },\n ])\n ).toBe(false);\n expect(isPortableTextContent([{ type: \"list\" }])).toBe(false);\n expect(\n isPortableTextContent([{ type: \"list\", children: [\"not a node\"] }])\n ).toBe(false);\n expect(isPortableTextContent([{ type: \"media\" }])).toBe(false);\n expect(isPortableTextContent([{ type: \"titled-text\", content: [] }])).toBe(\n false\n );\n expect(\n isPortableTextContent([\n { type: \"titled-text\", title: \"Ranges\", content: \"oops\" },\n ])\n ).toBe(false);\n });\n\n it(\"rejects malformed code-block, table and divider-adjacent shapes\", () => {\n expect(isPortableTextContent([{ type: \"code-block\" }])).toBe(false);\n expect(isPortableTextContent([{ type: \"code-block\", code: 42 }])).toBe(\n false\n );\n expect(\n isPortableTextContent([{ type: \"code-block\", code: \"x\", language: 1 }])\n ).toBe(false);\n expect(isPortableTextContent([{ type: \"table\" }])).toBe(false);\n expect(\n isPortableTextContent([{ type: \"table\", header: [], rows: \"oops\" }])\n ).toBe(false);\n expect(\n isPortableTextContent([\n { type: \"table\", header: [[{ text: \"A\" }]], rows: [[\"not a cell\"]] },\n ])\n ).toBe(false);\n expect(\n isPortableTextContent([\n { type: \"table\", header: [{ text: \"not a cell\" }], rows: [] },\n ])\n ).toBe(false);\n });\n\n it(\"accepts a code-block without a language and a table without rows\", () => {\n expect(\n isPortableTextContent([{ type: \"code-block\", code: \"npm install\" }])\n ).toBe(true);\n expect(\n isPortableTextContent([\n { type: \"table\", header: [[{ text: \"A\" }]], rows: [] },\n ])\n ).toBe(true);\n expect(isPortableTextContent([{ type: \"divider\" }])).toBe(true);\n });\n\n it(\"accepts a titled-text with only a title, with or without content\", () => {\n expect(\n isPortableTextContent([{ type: \"titled-text\", title: \"Ranges\" }])\n ).toBe(true);\n expect(\n isPortableTextContent([\n { type: \"titled-text\", title: \"Ranges\", content: [] },\n ])\n ).toBe(true);\n });\n\n it(\"tells blocks, objects and spans apart\", () => {\n const [heading, paragraph] = sampleMessageContent;\n const callout = sampleMessageContent[5];\n\n expect(isPortableTextBlock(heading)).toBe(true);\n expect(isPortableTextBlock(callout)).toBe(false);\n expect(isPortableTextObjectNode(callout)).toBe(true);\n expect(isPortableTextObjectNode(heading)).toBe(false);\n expect(isPortableTextSpan({ text: \"plain\" })).toBe(true);\n expect(isPortableTextSpan(paragraph)).toBe(false);\n });\n\n it(\"ships a universal default set free of product elements\", () => {\n expect(PORTABLE_TEXT_DEFAULT_BLOCKS).toEqual([\n \"paragraph\",\n \"heading\",\n \"list\",\n \"list-item\",\n \"media\",\n \"titled-text\",\n \"code-block\",\n \"table\",\n \"divider\",\n ]);\n expect(PORTABLE_TEXT_DEFAULT_MARKS).toEqual([\n \"strong\",\n \"em\",\n \"code\",\n \"link\",\n ]);\n });\n\n it(\"keeps video media variants in the envelope but out of the image variant set\", () => {\n expect(\n isPortableTextContent([\n {\n type: \"media\",\n variant: \"vimeo\",\n src: \"https://vimeo.com/1131696931\",\n caption: \"Duplicating a project\",\n },\n {\n type: \"media\",\n variant: \"youtube\",\n src: \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\n },\n ])\n ).toBe(true);\n\n expect(isPortableTextMediaImageVariant(\"screenshot\")).toBe(true);\n expect(isPortableTextMediaImageVariant(\"illustration\")).toBe(true);\n expect(isPortableTextMediaImageVariant(\"vimeo\")).toBe(false);\n expect(isPortableTextMediaImageVariant(\"youtube\")).toBe(false);\n expect(isPortableTextMediaImageVariant(undefined)).toBe(false);\n });\n\n it(\"accepts an application components map through the injection contract\", () => {\n const seen: string[] = [];\n const components: PortableTextComponents = {\n marks: {\n \"interface-name\": ({ children }) =>\n createElement(Fragment, null, children),\n },\n objects: {\n callout: ({ children }) => createElement(Fragment, null, children),\n },\n onUnknownType: (kind, type) => {\n seen.push(`${kind}:${type}`);\n },\n };\n\n components.onUnknownType?.(\"object\", \"some-future-element\");\n\n expect(Object.keys(components.marks ?? {})).toEqual([\"interface-name\"]);\n expect(seen).toEqual([\"object:some-future-element\"]);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,11 +14,11 @@ var _Icons = require("../../components/Icons");
|
|
|
14
14
|
var _InfoBox = require("../../components/InfoBox");
|
|
15
15
|
var _Media = require("../../components/Media");
|
|
16
16
|
var _Modal = require("../../components/Modal");
|
|
17
|
-
var _PortableText = require("../../components/PortableText");
|
|
18
17
|
var _Styles = require("../../components/PortableText/Styles");
|
|
19
18
|
var _Row = require("../../components/Row");
|
|
20
19
|
var _Stack = require("../../components/Stack");
|
|
21
20
|
var _Tiles = require("../../components/Tiles");
|
|
21
|
+
var _TitledText = require("../../components/TitledText");
|
|
22
22
|
var _Tooltip = require("../../components/Tooltip");
|
|
23
23
|
var _Typography = require("../../components/Typography");
|
|
24
24
|
var _Typography2 = require("../../components/Typography/Typography");
|
|
@@ -314,14 +314,18 @@ var ListItemBlock = function ListItemBlock(_ref16) {
|
|
|
314
314
|
}, children);
|
|
315
315
|
};
|
|
316
316
|
|
|
317
|
-
/*
|
|
318
|
-
|
|
319
|
-
|
|
317
|
+
/* Titled sections speak in the quiet Header2 subhead voice rather than the
|
|
318
|
+
engine's default Title2 for level 2, and keep a roomier rhythm between a
|
|
319
|
+
titled section's content nodes. */
|
|
320
320
|
var TitledTextBlock = function TitledTextBlock(_ref17) {
|
|
321
321
|
var block = _ref17.block,
|
|
322
322
|
children = _ref17.children;
|
|
323
|
-
|
|
324
|
-
|
|
323
|
+
var _ref18 = block,
|
|
324
|
+
title = _ref18.title,
|
|
325
|
+
level = _ref18.level;
|
|
326
|
+
return /*#__PURE__*/_react.default.createElement(_TitledText.TitledText, {
|
|
327
|
+
title: title,
|
|
328
|
+
variant: level === 1 ? "title1" : "header2"
|
|
325
329
|
}, children ? /*#__PURE__*/_react.default.createElement(_Stack.Stack, {
|
|
326
330
|
space: "sm"
|
|
327
331
|
}, children) : undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageDialog.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_BreakPoints","_Button","_Columns","_IconButton","_Icons","_InfoBox","_Media","_Modal","_PortableText","_Styles","_Row","_Stack","_Tiles","_Tooltip","_Typography","_Typography2","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","DIALOG_WIDTH","sm","md","lg","StyledFeedback","styled","div","withConfig","displayName","componentId","screenBelow","DialogFeedback","_ref","onVote","_useState","useState","_useState2","voted","setVoted","vote","useCallback","createElement","Body2","color","Fragment","className","Tooltip","title","IconButton","type","variant","onClick","ThumbUpOutlineIcon","StyledDialog","_ref2","$size","MessageDialog","exports","_ref3","open","onClose","_ref3$size","size","children","Modal","CancelCrossIcon","DocLinkContext","React","createContext","undefined","StyledInterfaceName","span","InterfaceNameMark","_ref4","StyledKeyboardKey","kbd","KeyboardKeyMark","_ref5","StyledDocLink","InlineLink","DocLinkMark","_ref6","mark","openArticle","useContext","href","event","preventDefault","article","CALLOUT_TYPE","info","note","success","CalloutObject","_ref7","_ref8","node","InfoBox","tone","showIcon","StyledButtonReference","ButtonReferenceObject","_ref9","_ref0","label","Button","tabIndex","RowObject","_ref1","_ref10","Row","space","TilesObject","_ref11","_ref12","Tiles","columns","collapseBelow","SplitObject","_ref13","_ref14","media","widths","textColumn","Stack","src","screenshot","mediaColumn","Media","alt","caption","Columns","reverse","alignY","ParagraphBlock","_ref15","lineHeight","ListItemBlock","_ref16","Typography","as","DefaultTitledText","portableTextDefaultBlockRenderers","TitledTextBlock","_ref17","block","messageComponents","marks","objects","callout","row","tiles","split","blocks","paragraph"],"sources":["../../../../src/presentation/shared/MessageDialog.tsx"],"sourcesContent":["import React, {\n ReactElement,\n ReactNode,\n useCallback,\n useContext,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { screenBelow } from \"../../components/BreakPoints\";\nimport { Button } from \"../../components/Button\";\nimport { Columns } from \"../../components/Columns\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { CancelCrossIcon, ThumbUpOutlineIcon } from \"../../components/Icons\";\nimport { InfoBox, InfoBoxType } from \"../../components/InfoBox\";\nimport { Space } from \"../../components/LayoutTokens\";\nimport { Media } from \"../../components/Media\";\nimport { Modal } from \"../../components/Modal\";\nimport {\n portableTextDefaultBlockRenderers,\n PortableTextBlockRenderer,\n PortableTextComponents,\n PortableTextMarkRenderer,\n PortableTextMediaVariant,\n PortableTextObjectRenderer,\n} from \"../../components/PortableText\";\nimport { StyledLink as InlineLink } from \"../../components/PortableText/Styles\";\nimport { Row } from \"../../components/Row\";\nimport { Stack } from \"../../components/Stack\";\nimport { Tiles } from \"../../components/Tiles\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2 } from \"../../components/Typography\";\nimport { Typography } from \"../../components/Typography/Typography\";\n\n/**\n * The in-app message dialog, as a Presentation mock.\n *\n * Two pieces, mirroring how the product is split:\n *\n * - {@link MessageDialog} — the hollow dialog shell (width, closing,\n * feedback), built only from design-system parts. In the product this shell\n * lives in the application as `InAppMessageDialog`.\n * - {@link messageComponents} — a demo message element catalog injected into\n * the design-system Portable Text engine, exactly like the typed cards\n * injected into the hollow StackedCard shell. In the product the catalog is\n * application code; the presentation ships this demo copy so the stories\n * need no app imports.\n */\n\n/* ---- the dialog shell ---------------------------------------------- */\n\nexport type MessageDialogSize = \"sm\" | \"md\" | \"lg\";\n\nconst DIALOG_WIDTH: Record<MessageDialogSize, string> = {\n sm: \"520px\",\n md: \"720px\",\n lg: \"880px\",\n};\n\n/* Feedback — the thumbs up / down slot. Down-vote reuses the up icon,\n rotated (the DS set only ships ThumbUpOutlineIcon). */\nconst StyledFeedback = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 24px 28px;\n\n ${screenBelow.sm} {\n padding: 4px 24px 24px;\n }\n\n .fb-question {\n margin-right: 4px;\n }\n\n .fb-btn svg {\n width: 18px;\n height: 18px;\n }\n\n .fb-down svg {\n transform: rotate(180deg);\n }\n`;\n\nconst DialogFeedback = ({\n onVote,\n}: {\n onVote?: (vote: \"up\" | \"down\") => void;\n}): ReactElement => {\n const [voted, setVoted] = useState<\"up\" | \"down\" | null>(null);\n const vote = useCallback(\n (value: \"up\" | \"down\") => {\n setVoted(value);\n onVote?.(value);\n },\n [onVote]\n );\n\n return (\n <StyledFeedback>\n {voted ? (\n <Body2 color=\"secondary\">Thanks for your feedback!</Body2>\n ) : (\n <>\n <Body2 color=\"secondary\" className=\"fb-question\">\n Was this helpful?\n </Body2>\n <Tooltip title=\"Yes, helpful\">\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n className=\"fb-btn\"\n aria-label=\"Yes, helpful\"\n onClick={() => vote(\"up\")}\n >\n <ThumbUpOutlineIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"No, not helpful\">\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n className=\"fb-btn fb-down\"\n aria-label=\"No, not helpful\"\n onClick={() => vote(\"down\")}\n >\n <ThumbUpOutlineIcon />\n </IconButton>\n </Tooltip>\n </>\n )}\n </StyledFeedback>\n );\n};\n\n/* The shell is behaviour only: it sizes itself, closes on click-outside /\n Esc (DS Modal) / the X, and shows the feedback slot when an onVote handler\n is supplied. Content is whatever the caller renders as children — usually\n the Portable Text engine with the demo catalog injected. */\nconst StyledDialog = styled.div<{ $size: MessageDialogSize }>`\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n width: calc(100% - 32px);\n max-width: ${({ $size }) => DIALOG_WIDTH[$size]};\n max-height: calc(100vh - 96px);\n margin: 56px auto 40px;\n overflow-y: auto;\n background-color: var(--page-paper-main);\n color: var(--color-theme-900);\n border-radius: 12px;\n box-shadow: var(--shadow-primary);\n\n ${screenBelow.sm} {\n margin: 16px auto;\n }\n\n /* X floats in the corner and overlaps the content padding — it does not\n reserve a row of its own. */\n .dlg-close {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 2;\n }\n\n .dlg-content {\n padding: 40px;\n }\n\n ${screenBelow.sm} {\n .dlg-content {\n padding: 32px 20px 24px;\n }\n }\n`;\n\nexport interface MessageDialogProps {\n open: boolean;\n onClose: () => void;\n size?: MessageDialogSize;\n /** Supplying a handler shows the centred helpful / not-helpful vote. */\n onVote?: (vote: \"up\" | \"down\") => void;\n children: ReactNode;\n}\n\nexport const MessageDialog = ({\n open,\n onClose,\n size = \"md\",\n onVote,\n children,\n}: MessageDialogProps): ReactElement => (\n <Modal open={open} onClose={onClose}>\n <StyledDialog $size={size}>\n <div className=\"dlg-close\">\n <Tooltip title=\"Close\">\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n aria-label=\"Close\"\n onClick={onClose}\n >\n <CancelCrossIcon />\n </IconButton>\n </Tooltip>\n </div>\n <div className=\"dlg-content\">{children}</div>\n {onVote ? <DialogFeedback onVote={onVote} /> : null}\n </StyledDialog>\n </Modal>\n);\n\n/* ---- doc-link wiring ------------------------------------------------ */\n\n/** How a doc-link mark opens its article (by a slug-like reference). The\n surface that renders the message supplies the handler — in the product it\n closes the dialog and opens the article Sheet. */\nexport type OpenArticleHandler = (article?: string) => void;\n\nexport const DocLinkContext = React.createContext<OpenArticleHandler>(\n () => undefined\n);\n\n/* ---- the demo message element catalog ------------------------------- */\n\n/* Inline marks ------------------------------------------------------- */\n\n/* interface-name — the name of an interface element, e.g. the Security page. */\nconst StyledInterfaceName = styled.span`\n padding: 0 4px;\n border-radius: 4px;\n background-color: var(--color-theme-300);\n color: var(--color-theme-900);\n font-weight: 600;\n white-space: nowrap;\n`;\nconst InterfaceNameMark: PortableTextMarkRenderer = ({ children }) => (\n <StyledInterfaceName>{children}</StyledInterfaceName>\n);\n\n/* keyboard-key — a keyboard key cap. */\nconst StyledKeyboardKey = styled.kbd`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border: 1px solid var(--border-primary);\n border-bottom-width: 2px;\n border-radius: 5px;\n background-color: var(--color-theme-200);\n color: var(--color-theme-900);\n font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace;\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n vertical-align: baseline;\n`;\nconst KeyboardKeyMark: PortableTextMarkRenderer = ({ children }) => (\n <StyledKeyboardKey>{children}</StyledKeyboardKey>\n);\n\n/* doc-link — an inline link that opens a full help article. The mark carries\n an article reference; the open behaviour comes from DocLinkContext, so the\n authored content stays declarative. */\n/* Built on the engine's inline anchor so a doc-link sits in the sentence\n exactly like a default link mark — same size, weight and line box as the\n surrounding copy — just recoloured. */\nconst StyledDocLink = styled(InlineLink)`\n color: var(--color-secondary);\n text-decoration-color: var(--color-secondary);\n`;\nconst DocLinkMark: PortableTextMarkRenderer = ({ mark, children }) => {\n const openArticle = useContext(DocLinkContext);\n return (\n <StyledDocLink\n href=\"#\"\n onClick={(event: React.MouseEvent) => {\n event.preventDefault();\n openArticle(mark?.article as string | undefined);\n }}\n >\n {children}\n </StyledDocLink>\n );\n};\n\n/* Component objects --------------------------------------------------- */\n\n/* callout — rendered with the DS InfoBox; the catalog keeps its own tone\n vocabulary and maps it to InfoBox types. */\ntype CalloutTone = \"info\" | \"note\" | \"success\";\nconst CALLOUT_TYPE: Record<CalloutTone, InfoBoxType> = {\n info: \"default\",\n note: \"note\",\n success: \"success\",\n};\nconst CalloutObject: PortableTextObjectRenderer = ({ node, children }) => (\n <InfoBox\n type={CALLOUT_TYPE[(node.tone as CalloutTone | undefined) ?? \"info\"]}\n title={node.title as string | undefined}\n showIcon\n >\n {children}\n </InfoBox>\n);\n\n/* button-reference — a real DS Button shown for reference as its own block,\n so a message can point at a button instead of screenshotting it. It is\n intentionally non-interactive. */\nconst StyledButtonReference = styled.div`\n display: flex;\n\n .c-button {\n pointer-events: none;\n }\n`;\ntype ButtonReferenceVariant =\n | \"primary\"\n | \"secondary\"\n | \"text colored\"\n | \"text gray\";\nconst ButtonReferenceObject: PortableTextObjectRenderer = ({ node }) => {\n if (typeof node.label !== \"string\") {\n return null;\n }\n\n return (\n <StyledButtonReference aria-hidden=\"true\">\n <Button\n variant={\n (node.variant as ButtonReferenceVariant | undefined) ?? \"primary\"\n }\n size=\"small\"\n type=\"button\"\n tabIndex={-1}\n >\n {node.label}\n </Button>\n </StyledButtonReference>\n );\n};\n\n/* row — a horizontal run of blocks (e.g. two button references). */\nconst RowObject: PortableTextObjectRenderer = ({ node, children }) => (\n <Row space={(node.space as Space | undefined) ?? \"sm\"}>{children}</Row>\n);\n\n/* tiles — an equal-size mosaic of blocks. */\nconst TilesObject: PortableTextObjectRenderer = ({ node, children }) => (\n <Tiles\n columns={(node.columns as number | undefined) ?? 3}\n space=\"md\"\n collapseBelow=\"sm\"\n >\n {children}\n </Tiles>\n);\n\n/* split — text beside media, with the one layout rule the messages follow:\n screenshots sit on the right, flat illustrations on the left. `widths` is\n authored as [text, media] and reordered with the columns. */\ninterface SplitMedia {\n src: string;\n alt?: string;\n variant?: PortableTextMediaVariant;\n caption?: string;\n}\nconst SplitObject: PortableTextObjectRenderer = ({ node, children }) => {\n const media = node.media as SplitMedia | undefined;\n const widths = (node.widths as number[] | undefined) ?? [1, 1];\n const textColumn = <Stack space=\"lg\">{children}</Stack>;\n\n // A split without media degrades to its text column instead of crashing.\n if (!media?.src) {\n return textColumn;\n }\n\n const screenshot = media.variant === \"screenshot\";\n\n const mediaColumn = (\n <Media\n src={media.src}\n alt={media.alt}\n variant={media.variant}\n caption={media.caption}\n />\n );\n\n return (\n <Columns\n widths={screenshot ? widths : [...widths].reverse()}\n space=\"xl\"\n alignY=\"center\"\n collapseBelow=\"md\"\n >\n {screenshot ? textColumn : mediaColumn}\n {screenshot ? mediaColumn : textColumn}\n </Columns>\n );\n};\n\n/* Default-block overrides --------------------------------------------- */\n\n/* The engine's defaults use Body 1 primary; the messages are designed on the\n quieter Body 2 secondary voice, so the catalog overrides the text blocks —\n demonstrating the `blocks` half of the injection contract. */\nconst ParagraphBlock: PortableTextBlockRenderer = ({ children }) => (\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n {children}\n </Body2>\n);\n\nconst ListItemBlock: PortableTextBlockRenderer = ({ children }) => (\n <Typography variant=\"Body 2\" as=\"li\" color=\"secondary\" lineHeight=\"loose\">\n {children}\n </Typography>\n);\n\n/* Only the delta from the default renderer: the messages want a roomier\n rhythm between a titled section's content nodes. */\nconst DefaultTitledText = portableTextDefaultBlockRenderers[\"titled-text\"];\nconst TitledTextBlock: PortableTextBlockRenderer = ({ block, children }) => (\n <DefaultTitledText block={block}>\n {children ? <Stack space=\"sm\">{children}</Stack> : undefined}\n </DefaultTitledText>\n);\n\n/** The demo catalog the presentations inject into the Portable Text engine —\n the stand-in for the application's `messageComponents` map. */\nexport const messageComponents: PortableTextComponents = {\n marks: {\n \"interface-name\": InterfaceNameMark,\n \"keyboard-key\": KeyboardKeyMark,\n \"doc-link\": DocLinkMark,\n },\n objects: {\n callout: CalloutObject,\n \"button-reference\": ButtonReferenceObject,\n row: RowObject,\n tiles: TilesObject,\n split: SplitObject,\n },\n blocks: {\n paragraph: ParagraphBlock,\n \"list-item\": ListItemBlock,\n \"titled-text\": TitledTextBlock,\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MessageDialog.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_BreakPoints","_Button","_Columns","_IconButton","_Icons","_InfoBox","_Media","_Modal","_Styles","_Row","_Stack","_Tiles","_TitledText","_Tooltip","_Typography","_Typography2","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","DIALOG_WIDTH","sm","md","lg","StyledFeedback","styled","div","withConfig","displayName","componentId","screenBelow","DialogFeedback","_ref","onVote","_useState","useState","_useState2","voted","setVoted","vote","useCallback","createElement","Body2","color","Fragment","className","Tooltip","title","IconButton","type","variant","onClick","ThumbUpOutlineIcon","StyledDialog","_ref2","$size","MessageDialog","exports","_ref3","open","onClose","_ref3$size","size","children","Modal","CancelCrossIcon","DocLinkContext","React","createContext","undefined","StyledInterfaceName","span","InterfaceNameMark","_ref4","StyledKeyboardKey","kbd","KeyboardKeyMark","_ref5","StyledDocLink","InlineLink","DocLinkMark","_ref6","mark","openArticle","useContext","href","event","preventDefault","article","CALLOUT_TYPE","info","note","success","CalloutObject","_ref7","_ref8","node","InfoBox","tone","showIcon","StyledButtonReference","ButtonReferenceObject","_ref9","_ref0","label","Button","tabIndex","RowObject","_ref1","_ref10","Row","space","TilesObject","_ref11","_ref12","Tiles","columns","collapseBelow","SplitObject","_ref13","_ref14","media","widths","textColumn","Stack","src","screenshot","mediaColumn","Media","alt","caption","Columns","reverse","alignY","ParagraphBlock","_ref15","lineHeight","ListItemBlock","_ref16","Typography","as","TitledTextBlock","_ref17","block","_ref18","level","TitledText","messageComponents","marks","objects","callout","row","tiles","split","blocks","paragraph"],"sources":["../../../../src/presentation/shared/MessageDialog.tsx"],"sourcesContent":["import React, {\n ReactElement,\n ReactNode,\n useCallback,\n useContext,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { screenBelow } from \"../../components/BreakPoints\";\nimport { Button } from \"../../components/Button\";\nimport { Columns } from \"../../components/Columns\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { CancelCrossIcon, ThumbUpOutlineIcon } from \"../../components/Icons\";\nimport { InfoBox, InfoBoxType } from \"../../components/InfoBox\";\nimport { Space } from \"../../components/LayoutTokens\";\nimport { Media } from \"../../components/Media\";\nimport { Modal } from \"../../components/Modal\";\nimport {\n PortableTextBlockRenderer,\n PortableTextComponents,\n PortableTextMarkRenderer,\n PortableTextMediaImageVariant,\n PortableTextObjectRenderer,\n PortableTextTitledTextBlock,\n} from \"../../components/PortableText\";\nimport { StyledLink as InlineLink } from \"../../components/PortableText/Styles\";\nimport { Row } from \"../../components/Row\";\nimport { Stack } from \"../../components/Stack\";\nimport { Tiles } from \"../../components/Tiles\";\nimport { TitledText } from \"../../components/TitledText\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2 } from \"../../components/Typography\";\nimport { Typography } from \"../../components/Typography/Typography\";\n\n/**\n * The in-app message dialog, as a Presentation mock.\n *\n * Two pieces, mirroring how the product is split:\n *\n * - {@link MessageDialog} — the hollow dialog shell (width, closing,\n * feedback), built only from design-system parts. In the product this shell\n * lives in the application as `InAppMessageDialog`.\n * - {@link messageComponents} — a demo message element catalog injected into\n * the design-system Portable Text engine, exactly like the typed cards\n * injected into the hollow StackedCard shell. In the product the catalog is\n * application code; the presentation ships this demo copy so the stories\n * need no app imports.\n */\n\n/* ---- the dialog shell ---------------------------------------------- */\n\nexport type MessageDialogSize = \"sm\" | \"md\" | \"lg\";\n\nconst DIALOG_WIDTH: Record<MessageDialogSize, string> = {\n sm: \"520px\",\n md: \"720px\",\n lg: \"880px\",\n};\n\n/* Feedback — the thumbs up / down slot. Down-vote reuses the up icon,\n rotated (the DS set only ships ThumbUpOutlineIcon). */\nconst StyledFeedback = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 24px 28px;\n\n ${screenBelow.sm} {\n padding: 4px 24px 24px;\n }\n\n .fb-question {\n margin-right: 4px;\n }\n\n .fb-btn svg {\n width: 18px;\n height: 18px;\n }\n\n .fb-down svg {\n transform: rotate(180deg);\n }\n`;\n\nconst DialogFeedback = ({\n onVote,\n}: {\n onVote?: (vote: \"up\" | \"down\") => void;\n}): ReactElement => {\n const [voted, setVoted] = useState<\"up\" | \"down\" | null>(null);\n const vote = useCallback(\n (value: \"up\" | \"down\") => {\n setVoted(value);\n onVote?.(value);\n },\n [onVote]\n );\n\n return (\n <StyledFeedback>\n {voted ? (\n <Body2 color=\"secondary\">Thanks for your feedback!</Body2>\n ) : (\n <>\n <Body2 color=\"secondary\" className=\"fb-question\">\n Was this helpful?\n </Body2>\n <Tooltip title=\"Yes, helpful\">\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n className=\"fb-btn\"\n aria-label=\"Yes, helpful\"\n onClick={() => vote(\"up\")}\n >\n <ThumbUpOutlineIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"No, not helpful\">\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n className=\"fb-btn fb-down\"\n aria-label=\"No, not helpful\"\n onClick={() => vote(\"down\")}\n >\n <ThumbUpOutlineIcon />\n </IconButton>\n </Tooltip>\n </>\n )}\n </StyledFeedback>\n );\n};\n\n/* The shell is behaviour only: it sizes itself, closes on click-outside /\n Esc (DS Modal) / the X, and shows the feedback slot when an onVote handler\n is supplied. Content is whatever the caller renders as children — usually\n the Portable Text engine with the demo catalog injected. */\nconst StyledDialog = styled.div<{ $size: MessageDialogSize }>`\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n width: calc(100% - 32px);\n max-width: ${({ $size }) => DIALOG_WIDTH[$size]};\n max-height: calc(100vh - 96px);\n margin: 56px auto 40px;\n overflow-y: auto;\n background-color: var(--page-paper-main);\n color: var(--color-theme-900);\n border-radius: 12px;\n box-shadow: var(--shadow-primary);\n\n ${screenBelow.sm} {\n margin: 16px auto;\n }\n\n /* X floats in the corner and overlaps the content padding — it does not\n reserve a row of its own. */\n .dlg-close {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 2;\n }\n\n .dlg-content {\n padding: 40px;\n }\n\n ${screenBelow.sm} {\n .dlg-content {\n padding: 32px 20px 24px;\n }\n }\n`;\n\nexport interface MessageDialogProps {\n open: boolean;\n onClose: () => void;\n size?: MessageDialogSize;\n /** Supplying a handler shows the centred helpful / not-helpful vote. */\n onVote?: (vote: \"up\" | \"down\") => void;\n children: ReactNode;\n}\n\nexport const MessageDialog = ({\n open,\n onClose,\n size = \"md\",\n onVote,\n children,\n}: MessageDialogProps): ReactElement => (\n <Modal open={open} onClose={onClose}>\n <StyledDialog $size={size}>\n <div className=\"dlg-close\">\n <Tooltip title=\"Close\">\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n aria-label=\"Close\"\n onClick={onClose}\n >\n <CancelCrossIcon />\n </IconButton>\n </Tooltip>\n </div>\n <div className=\"dlg-content\">{children}</div>\n {onVote ? <DialogFeedback onVote={onVote} /> : null}\n </StyledDialog>\n </Modal>\n);\n\n/* ---- doc-link wiring ------------------------------------------------ */\n\n/** How a doc-link mark opens its article (by a slug-like reference). The\n surface that renders the message supplies the handler — in the product it\n closes the dialog and opens the article Sheet. */\nexport type OpenArticleHandler = (article?: string) => void;\n\nexport const DocLinkContext = React.createContext<OpenArticleHandler>(\n () => undefined\n);\n\n/* ---- the demo message element catalog ------------------------------- */\n\n/* Inline marks ------------------------------------------------------- */\n\n/* interface-name — the name of an interface element, e.g. the Security page. */\nconst StyledInterfaceName = styled.span`\n padding: 0 4px;\n border-radius: 4px;\n background-color: var(--color-theme-300);\n color: var(--color-theme-900);\n font-weight: 600;\n white-space: nowrap;\n`;\nconst InterfaceNameMark: PortableTextMarkRenderer = ({ children }) => (\n <StyledInterfaceName>{children}</StyledInterfaceName>\n);\n\n/* keyboard-key — a keyboard key cap. */\nconst StyledKeyboardKey = styled.kbd`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border: 1px solid var(--border-primary);\n border-bottom-width: 2px;\n border-radius: 5px;\n background-color: var(--color-theme-200);\n color: var(--color-theme-900);\n font-family: ui-monospace, \"SFMono-Regular\", Menlo, Consolas, monospace;\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n vertical-align: baseline;\n`;\nconst KeyboardKeyMark: PortableTextMarkRenderer = ({ children }) => (\n <StyledKeyboardKey>{children}</StyledKeyboardKey>\n);\n\n/* doc-link — an inline link that opens a full help article. The mark carries\n an article reference; the open behaviour comes from DocLinkContext, so the\n authored content stays declarative. */\n/* Built on the engine's inline anchor so a doc-link sits in the sentence\n exactly like a default link mark — same size, weight and line box as the\n surrounding copy — just recoloured. */\nconst StyledDocLink = styled(InlineLink)`\n color: var(--color-secondary);\n text-decoration-color: var(--color-secondary);\n`;\nconst DocLinkMark: PortableTextMarkRenderer = ({ mark, children }) => {\n const openArticle = useContext(DocLinkContext);\n return (\n <StyledDocLink\n href=\"#\"\n onClick={(event: React.MouseEvent) => {\n event.preventDefault();\n openArticle(mark?.article as string | undefined);\n }}\n >\n {children}\n </StyledDocLink>\n );\n};\n\n/* Component objects --------------------------------------------------- */\n\n/* callout — rendered with the DS InfoBox; the catalog keeps its own tone\n vocabulary and maps it to InfoBox types. */\ntype CalloutTone = \"info\" | \"note\" | \"success\";\nconst CALLOUT_TYPE: Record<CalloutTone, InfoBoxType> = {\n info: \"default\",\n note: \"note\",\n success: \"success\",\n};\nconst CalloutObject: PortableTextObjectRenderer = ({ node, children }) => (\n <InfoBox\n type={CALLOUT_TYPE[(node.tone as CalloutTone | undefined) ?? \"info\"]}\n title={node.title as string | undefined}\n showIcon\n >\n {children}\n </InfoBox>\n);\n\n/* button-reference — a real DS Button shown for reference as its own block,\n so a message can point at a button instead of screenshotting it. It is\n intentionally non-interactive. */\nconst StyledButtonReference = styled.div`\n display: flex;\n\n .c-button {\n pointer-events: none;\n }\n`;\ntype ButtonReferenceVariant =\n | \"primary\"\n | \"secondary\"\n | \"text colored\"\n | \"text gray\";\nconst ButtonReferenceObject: PortableTextObjectRenderer = ({ node }) => {\n if (typeof node.label !== \"string\") {\n return null;\n }\n\n return (\n <StyledButtonReference aria-hidden=\"true\">\n <Button\n variant={\n (node.variant as ButtonReferenceVariant | undefined) ?? \"primary\"\n }\n size=\"small\"\n type=\"button\"\n tabIndex={-1}\n >\n {node.label}\n </Button>\n </StyledButtonReference>\n );\n};\n\n/* row — a horizontal run of blocks (e.g. two button references). */\nconst RowObject: PortableTextObjectRenderer = ({ node, children }) => (\n <Row space={(node.space as Space | undefined) ?? \"sm\"}>{children}</Row>\n);\n\n/* tiles — an equal-size mosaic of blocks. */\nconst TilesObject: PortableTextObjectRenderer = ({ node, children }) => (\n <Tiles\n columns={(node.columns as number | undefined) ?? 3}\n space=\"md\"\n collapseBelow=\"sm\"\n >\n {children}\n </Tiles>\n);\n\n/* split — text beside media, with the one layout rule the messages follow:\n screenshots sit on the right, flat illustrations on the left. `widths` is\n authored as [text, media] and reordered with the columns. */\ninterface SplitMedia {\n src: string;\n alt?: string;\n // Split never carries a video: video media always stays in the vertical flow.\n variant?: PortableTextMediaImageVariant;\n caption?: string;\n}\nconst SplitObject: PortableTextObjectRenderer = ({ node, children }) => {\n const media = node.media as SplitMedia | undefined;\n const widths = (node.widths as number[] | undefined) ?? [1, 1];\n const textColumn = <Stack space=\"lg\">{children}</Stack>;\n\n // A split without media degrades to its text column instead of crashing.\n if (!media?.src) {\n return textColumn;\n }\n\n const screenshot = media.variant === \"screenshot\";\n\n const mediaColumn = (\n <Media\n src={media.src}\n alt={media.alt}\n variant={media.variant}\n caption={media.caption}\n />\n );\n\n return (\n <Columns\n widths={screenshot ? widths : [...widths].reverse()}\n space=\"xl\"\n alignY=\"center\"\n collapseBelow=\"md\"\n >\n {screenshot ? textColumn : mediaColumn}\n {screenshot ? mediaColumn : textColumn}\n </Columns>\n );\n};\n\n/* Default-block overrides --------------------------------------------- */\n\n/* The engine's defaults use Body 1 primary; the messages are designed on the\n quieter Body 2 secondary voice, so the catalog overrides the text blocks —\n demonstrating the `blocks` half of the injection contract. */\nconst ParagraphBlock: PortableTextBlockRenderer = ({ children }) => (\n <Body2 color=\"secondary\" lineHeight=\"loose\">\n {children}\n </Body2>\n);\n\nconst ListItemBlock: PortableTextBlockRenderer = ({ children }) => (\n <Typography variant=\"Body 2\" as=\"li\" color=\"secondary\" lineHeight=\"loose\">\n {children}\n </Typography>\n);\n\n/* Titled sections speak in the quiet Header2 subhead voice rather than the\n engine's default Title2 for level 2, and keep a roomier rhythm between a\n titled section's content nodes. */\nconst TitledTextBlock: PortableTextBlockRenderer = ({ block, children }) => {\n const { title, level } = block as PortableTextTitledTextBlock;\n\n return (\n <TitledText title={title} variant={level === 1 ? \"title1\" : \"header2\"}>\n {children ? <Stack space=\"sm\">{children}</Stack> : undefined}\n </TitledText>\n );\n};\n\n/** The demo catalog the presentations inject into the Portable Text engine —\n the stand-in for the application's `messageComponents` map. */\nexport const messageComponents: PortableTextComponents = {\n marks: {\n \"interface-name\": InterfaceNameMark,\n \"keyboard-key\": KeyboardKeyMark,\n \"doc-link\": DocLinkMark,\n },\n objects: {\n callout: CalloutObject,\n \"button-reference\": ButtonReferenceObject,\n row: RowObject,\n tiles: TilesObject,\n split: SplitObject,\n },\n blocks: {\n paragraph: ParagraphBlock,\n \"list-item\": ListItemBlock,\n \"titled-text\": TitledTextBlock,\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { PortableTextMediaBlock } from "../PortableText/types";
|
|
3
|
-
export interface IMediaProps extends Omit<PortableTextMediaBlock, "type">, React.ComponentPropsWithoutRef<"div"> {
|
|
2
|
+
import { PortableTextMediaBlock, PortableTextMediaImageVariant } from "../PortableText/types";
|
|
3
|
+
export interface IMediaProps extends Omit<PortableTextMediaBlock, "type" | "variant">, React.ComponentPropsWithoutRef<"div"> {
|
|
4
|
+
variant?: PortableTextMediaImageVariant;
|
|
4
5
|
}
|
|
5
6
|
/**
|
|
6
7
|
* An image block: a screenshot renders framed (border, no shadow), a flat
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Media.d.ts","sourceRoot":"","sources":["../../../../src/components/Media/Media.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,OAAO,
|
|
1
|
+
{"version":3,"file":"Media.d.ts","sourceRoot":"","sources":["../../../../src/components/Media/Media.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC9B,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,EACtD,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IACvC,OAAO,CAAC,EAAE,6BAA6B,CAAC;CACzC;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,oFASjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Media.js","names":["React","forwardRef","StyledMedia","Caption1","Media","_ref","ref","src","alt","_ref$variant","variant","caption","rest","_objectWithoutPropertiesLoose","_excluded","createElement","_extends","$bordered","className","color","displayName"],"sources":["../../../../src/components/Media/Media.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { StyledMedia } from \"./Styles\";\nimport {
|
|
1
|
+
{"version":3,"file":"Media.js","names":["React","forwardRef","StyledMedia","Caption1","Media","_ref","ref","src","alt","_ref$variant","variant","caption","rest","_objectWithoutPropertiesLoose","_excluded","createElement","_extends","$bordered","className","color","displayName"],"sources":["../../../../src/components/Media/Media.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { StyledMedia } from \"./Styles\";\nimport {\n PortableTextMediaBlock,\n PortableTextMediaImageVariant,\n} from \"../PortableText/types\";\nimport { Caption1 } from \"../Typography\";\n\nexport interface IMediaProps\n extends Omit<PortableTextMediaBlock, \"type\" | \"variant\">,\n React.ComponentPropsWithoutRef<\"div\"> {\n variant?: PortableTextMediaImageVariant;\n}\n\n/**\n * An image block: a screenshot renders framed (border, no shadow), a flat\n * illustration renders without a frame. The caption sits below the frame.\n */\nexport const Media = forwardRef<HTMLDivElement, IMediaProps>(\n ({ src, alt, variant = \"illustration\", caption, ...rest }, ref) => (\n <StyledMedia ref={ref} $bordered={variant === \"screenshot\"} {...rest}>\n <div className=\"c-media-frame\">\n <img src={src} alt={alt ?? \"\"} />\n </div>\n {caption ? <Caption1 color=\"secondary\">{caption}</Caption1> : null}\n </StyledMedia>\n )\n);\n\nMedia.displayName = \"Media\";\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AAEzC,SAASC,WAAW,QAAQ,UAAU;AAKtC,SAASC,QAAQ,QAAQ,eAAe;AAQxC;AACA;AACA;AACA;AACA,OAAO,MAAMC,KAAK,gBAAGH,UAAU,CAC7B,CAAAI,IAAA,EAA2DC,GAAG;EAAA,IAA3DC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IAAEC,GAAG,GAAAH,IAAA,CAAHG,GAAG;IAAAC,YAAA,GAAAJ,IAAA,CAAEK,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,cAAc,GAAAA,YAAA;IAAEE,OAAO,GAAAN,IAAA,CAAPM,OAAO;IAAKC,IAAI,GAAAC,6BAAA,CAAAR,IAAA,EAAAS,SAAA;EAAA,oBACrDd,KAAA,CAAAe,aAAA,CAACb,WAAW,EAAAc,QAAA;IAACV,GAAG,EAAEA,GAAI;IAACW,SAAS,EAAEP,OAAO,KAAK;EAAa,GAAKE,IAAI,gBAClEZ,KAAA,CAAAe,aAAA;IAAKG,SAAS,EAAC;EAAe,gBAC5BlB,KAAA,CAAAe,aAAA;IAAKR,GAAG,EAAEA,GAAI;IAACC,GAAG,EAAEA,GAAG,WAAHA,GAAG,GAAI;EAAG,CAAE,CAC7B,CAAC,EACLG,OAAO,gBAAGX,KAAA,CAAAe,aAAA,CAACZ,QAAQ;IAACgB,KAAK,EAAC;EAAW,GAAER,OAAkB,CAAC,GAAG,IACnD,CAAC;AAAA,CAElB,CAAC;AAEDP,KAAK,CAACgB,WAAW,GAAG,OAAO","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../../src/components/PortableText/renderers.tsx"],"names":[],"mappings":"AAUA,OAAO,
|
|
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"}
|