@activecollab/components 2.0.423 → 2.0.425
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 +45 -4
- package/dist/cjs/components/Media/Media.js.map +1 -1
- package/dist/cjs/components/Media/Styles.js +4 -1
- package/dist/cjs/components/Media/Styles.js.map +1 -1
- package/dist/cjs/components/PortableText/renderers.js +8 -2
- package/dist/cjs/components/PortableText/renderers.js.map +1 -1
- package/dist/cjs/components/PortableText/types.js.map +1 -1
- package/dist/cjs/presentation/shared/portfolioDetails.js +1 -1
- package/dist/cjs/presentation/shared/portfolioDetails.js.map +1 -1
- package/dist/esm/components/Media/Media.d.ts +9 -0
- package/dist/esm/components/Media/Media.d.ts.map +1 -1
- package/dist/esm/components/Media/Media.js +44 -3
- package/dist/esm/components/Media/Media.js.map +1 -1
- package/dist/esm/components/Media/Styles.d.ts +1 -0
- package/dist/esm/components/Media/Styles.d.ts.map +1 -1
- package/dist/esm/components/Media/Styles.js +4 -1
- package/dist/esm/components/Media/Styles.js.map +1 -1
- package/dist/esm/components/PortableText/renderers.d.ts.map +1 -1
- package/dist/esm/components/PortableText/renderers.js +8 -2
- package/dist/esm/components/PortableText/renderers.js.map +1 -1
- package/dist/esm/components/PortableText/types.d.ts +16 -0
- package/dist/esm/components/PortableText/types.d.ts.map +1 -1
- package/dist/esm/components/PortableText/types.js.map +1 -1
- package/dist/esm/presentation/shared/portfolioDetails.js +1 -1
- package/dist/esm/presentation/shared/portfolioDetails.js.map +1 -1
- package/dist/index.js +57 -6
- 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
|
@@ -3,18 +3,51 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.Media = void 0;
|
|
6
|
+
exports.Media = exports.MEDIA_PORTRAIT_MAX_HEIGHT = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _Styles = require("./Styles");
|
|
9
9
|
var _Typography = require("../Typography");
|
|
10
|
-
var _excluded = ["src", "alt", "variant", "caption"];
|
|
10
|
+
var _excluded = ["src", "alt", "variant", "caption", "width", "height", "density"];
|
|
11
11
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
12
12
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
13
13
|
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
14
14
|
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
15
|
+
/** A tall image (height greater than width) is capped at this display height. */
|
|
16
|
+
var MEDIA_PORTRAIT_MAX_HEIGHT = exports.MEDIA_PORTRAIT_MAX_HEIGHT = 680;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The box the `<img>` is laid out in, in CSS pixels. A portrait image taller
|
|
20
|
+
* than the cap is scaled down to the cap, keeping its aspect ratio. Resolving
|
|
21
|
+
* the cap here — rather than with `width: auto; max-height` in CSS — keeps the
|
|
22
|
+
* size independent of the file's natural pixel size, so a 2x capture without a
|
|
23
|
+
* `density` (and therefore no `srcset` descriptor) never renders upscaled.
|
|
24
|
+
*/
|
|
25
|
+
var displaySize = function displaySize(width, height) {
|
|
26
|
+
if (width == null || height == null) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (height > width && height > MEDIA_PORTRAIT_MAX_HEIGHT) {
|
|
30
|
+
return {
|
|
31
|
+
width: Math.round(width * MEDIA_PORTRAIT_MAX_HEIGHT / height),
|
|
32
|
+
height: MEDIA_PORTRAIT_MAX_HEIGHT
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
width,
|
|
37
|
+
height
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
|
|
15
41
|
/**
|
|
16
42
|
* An image block: a screenshot renders framed (border, no shadow), a flat
|
|
17
43
|
* illustration renders without a frame. The caption sits below the frame.
|
|
44
|
+
*
|
|
45
|
+
* `width`/`height` are the image's real display size in CSS pixels, measured
|
|
46
|
+
* at compile time. When present, the image renders at that size — centered,
|
|
47
|
+
* capped at the column width, never upscaled — and the `<img>` reserves the
|
|
48
|
+
* space so the layout does not jump as it loads. A tall image (height greater
|
|
49
|
+
* than width) is capped by height instead. When absent (e.g. a remote source
|
|
50
|
+
* the build could not measure), the image falls back to the column-width cap.
|
|
18
51
|
*/
|
|
19
52
|
var Media = exports.Media = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
20
53
|
var src = _ref.src,
|
|
@@ -22,15 +55,23 @@ var Media = exports.Media = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
|
|
|
22
55
|
_ref$variant = _ref.variant,
|
|
23
56
|
variant = _ref$variant === void 0 ? "illustration" : _ref$variant,
|
|
24
57
|
caption = _ref.caption,
|
|
58
|
+
width = _ref.width,
|
|
59
|
+
height = _ref.height,
|
|
60
|
+
density = _ref.density,
|
|
25
61
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
62
|
+
var size = displaySize(width, height);
|
|
26
63
|
return /*#__PURE__*/_react.default.createElement(_Styles.StyledMedia, _extends({
|
|
27
64
|
ref: ref,
|
|
28
|
-
$bordered: variant === "screenshot"
|
|
65
|
+
$bordered: variant === "screenshot",
|
|
66
|
+
$sized: size !== undefined
|
|
29
67
|
}, rest), /*#__PURE__*/_react.default.createElement("div", {
|
|
30
68
|
className: "c-media-frame"
|
|
31
69
|
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
32
70
|
src: src,
|
|
33
|
-
alt: alt !== null && alt !== void 0 ? alt : ""
|
|
71
|
+
alt: alt !== null && alt !== void 0 ? alt : "",
|
|
72
|
+
width: size === null || size === void 0 ? void 0 : size.width,
|
|
73
|
+
height: size === null || size === void 0 ? void 0 : size.height,
|
|
74
|
+
srcSet: density ? "".concat(src, " ").concat(density, "x") : undefined
|
|
34
75
|
})), caption ? /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
35
76
|
color: "secondary"
|
|
36
77
|
}, caption) : null);
|
|
@@ -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","
|
|
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_PORTRAIT_MAX_HEIGHT","exports","displaySize","width","height","undefined","Math","round","Media","forwardRef","_ref","ref","src","alt","_ref$variant","variant","caption","density","rest","size","createElement","StyledMedia","$bordered","$sized","className","srcSet","concat","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/** A tall image (height greater than width) is capped at this display height. */\nexport const MEDIA_PORTRAIT_MAX_HEIGHT = 680;\n\n/**\n * The box the `<img>` is laid out in, in CSS pixels. A portrait image taller\n * than the cap is scaled down to the cap, keeping its aspect ratio. Resolving\n * the cap here — rather than with `width: auto; max-height` in CSS — keeps the\n * size independent of the file's natural pixel size, so a 2x capture without a\n * `density` (and therefore no `srcset` descriptor) never renders upscaled.\n */\nconst displaySize = (width?: number, height?: number) => {\n if (width == null || height == null) {\n return undefined;\n }\n\n if (height > width && height > MEDIA_PORTRAIT_MAX_HEIGHT) {\n return {\n width: Math.round((width * MEDIA_PORTRAIT_MAX_HEIGHT) / height),\n height: MEDIA_PORTRAIT_MAX_HEIGHT,\n };\n }\n\n return { width, height };\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 *\n * `width`/`height` are the image's real display size in CSS pixels, measured\n * at compile time. When present, the image renders at that size — centered,\n * capped at the column width, never upscaled — and the `<img>` reserves the\n * space so the layout does not jump as it loads. A tall image (height greater\n * than width) is capped by height instead. When absent (e.g. a remote source\n * the build could not measure), the image falls back to the column-width cap.\n */\nexport const Media = forwardRef<HTMLDivElement, IMediaProps>(\n (\n {\n src,\n alt,\n variant = \"illustration\",\n caption,\n width,\n height,\n density,\n ...rest\n },\n ref\n ) => {\n const size = displaySize(width, height);\n\n return (\n <StyledMedia\n ref={ref}\n $bordered={variant === \"screenshot\"}\n $sized={size !== undefined}\n {...rest}\n >\n <div className=\"c-media-frame\">\n <img\n src={src}\n alt={alt ?? \"\"}\n width={size?.width}\n height={size?.height}\n srcSet={density ? `${src} ${density}x` : undefined}\n />\n </div>\n {caption ? <Caption1 color=\"secondary\">{caption}</Caption1> : null}\n </StyledMedia>\n );\n }\n);\n\nMedia.displayName = \"Media\";\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAKA,IAAAE,WAAA,GAAAF,OAAA;AAAyC,IAAAG,SAAA;AAAA,SAAAJ,wBAAAK,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAP,uBAAA,YAAAA,wBAAAK,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,cAAAM,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAP,CAAA,IAAAD,CAAA,GAAAW,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAP,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAM,EAAA,EAAAP,CAAA,IAAAC,CAAA,CAAAM,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAN,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAmB,SAAA,WAAAA,QAAA,GAAAH,MAAA,CAAAI,MAAA,GAAAJ,MAAA,CAAAI,MAAA,CAAAC,IAAA,eAAAlB,CAAA,aAAAJ,CAAA,MAAAA,CAAA,GAAAuB,SAAA,CAAAC,MAAA,EAAAxB,CAAA,UAAAC,CAAA,GAAAsB,SAAA,CAAAvB,CAAA,YAAAG,CAAA,IAAAF,CAAA,OAAAc,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAE,CAAA,MAAAC,CAAA,CAAAD,CAAA,IAAAF,CAAA,CAAAE,CAAA,aAAAC,CAAA,KAAAgB,QAAA,CAAAK,KAAA,OAAAF,SAAA;AAAA,SAAAG,yBAAA1B,CAAA,EAAAC,CAAA,gBAAAD,CAAA,iBAAAM,CAAA,EAAAH,CAAA,EAAAI,CAAA,GAAAoB,6BAAA,CAAA3B,CAAA,EAAAC,CAAA,OAAAgB,MAAA,CAAAW,qBAAA,QAAAxB,CAAA,GAAAa,MAAA,CAAAW,qBAAA,CAAA5B,CAAA,QAAAG,CAAA,MAAAA,CAAA,GAAAC,CAAA,CAAAoB,MAAA,EAAArB,CAAA,IAAAG,CAAA,GAAAF,CAAA,CAAAD,CAAA,UAAAF,CAAA,CAAA4B,OAAA,CAAAvB,CAAA,QAAAwB,oBAAA,CAAAd,IAAA,CAAAhB,CAAA,EAAAM,CAAA,MAAAC,CAAA,CAAAD,CAAA,IAAAN,CAAA,CAAAM,CAAA,aAAAC,CAAA;AAAA,SAAAoB,8BAAAxB,CAAA,EAAAH,CAAA,gBAAAG,CAAA,iBAAAF,CAAA,gBAAAG,CAAA,IAAAD,CAAA,SAAAY,cAAA,CAAAC,IAAA,CAAAb,CAAA,EAAAC,CAAA,gBAAAJ,CAAA,CAAA6B,OAAA,CAAAzB,CAAA,aAAAH,CAAA,CAAAG,CAAA,IAAAD,CAAA,CAAAC,CAAA,YAAAH,CAAA;AAQzC;AACO,IAAM8B,yBAAyB,GAAAC,OAAA,CAAAD,yBAAA,GAAG,GAAG;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAME,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAAc,EAAEC,MAAe,EAAK;EACvD,IAAID,KAAK,IAAI,IAAI,IAAIC,MAAM,IAAI,IAAI,EAAE;IACnC,OAAOC,SAAS;EAClB;EAEA,IAAID,MAAM,GAAGD,KAAK,IAAIC,MAAM,GAAGJ,yBAAyB,EAAE;IACxD,OAAO;MACLG,KAAK,EAAEG,IAAI,CAACC,KAAK,CAAEJ,KAAK,GAAGH,yBAAyB,GAAII,MAAM,CAAC;MAC/DA,MAAM,EAAEJ;IACV,CAAC;EACH;EAEA,OAAO;IAAEG,KAAK;IAAEC;EAAO,CAAC;AAC1B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMI,KAAK,GAAAP,OAAA,CAAAO,KAAA,gBAAG,IAAAC,iBAAU,EAC7B,UAAAC,IAAA,EAWEC,GAAG,EACA;EAAA,IAVDC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IACHC,GAAG,GAAAH,IAAA,CAAHG,GAAG;IAAAC,YAAA,GAAAJ,IAAA,CACHK,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,cAAc,GAAAA,YAAA;IACxBE,OAAO,GAAAN,IAAA,CAAPM,OAAO;IACPb,KAAK,GAAAO,IAAA,CAALP,KAAK;IACLC,MAAM,GAAAM,IAAA,CAANN,MAAM;IACNa,OAAO,GAAAP,IAAA,CAAPO,OAAO;IACJC,IAAI,GAAAvB,wBAAA,CAAAe,IAAA,EAAA1C,SAAA;EAIT,IAAMmD,IAAI,GAAGjB,WAAW,CAACC,KAAK,EAAEC,MAAM,CAAC;EAEvC,oBACEzC,MAAA,CAAAgB,OAAA,CAAAyC,aAAA,CAACtD,OAAA,CAAAuD,WAAW,EAAAhC,QAAA;IACVsB,GAAG,EAAEA,GAAI;IACTW,SAAS,EAAEP,OAAO,KAAK,YAAa;IACpCQ,MAAM,EAAEJ,IAAI,KAAKd;EAAU,GACvBa,IAAI,gBAERvD,MAAA,CAAAgB,OAAA,CAAAyC,aAAA;IAAKI,SAAS,EAAC;EAAe,gBAC5B7D,MAAA,CAAAgB,OAAA,CAAAyC,aAAA;IACER,GAAG,EAAEA,GAAI;IACTC,GAAG,EAAEA,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAI,EAAG;IACfV,KAAK,EAAEgB,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEhB,KAAM;IACnBC,MAAM,EAAEe,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEf,MAAO;IACrBqB,MAAM,EAAER,OAAO,MAAAS,MAAA,CAAMd,GAAG,OAAAc,MAAA,CAAIT,OAAO,SAAMZ;EAAU,CACpD,CACE,CAAC,EACLW,OAAO,gBAAGrD,MAAA,CAAAgB,OAAA,CAAAyC,aAAA,CAACrD,WAAA,CAAA4D,QAAQ;IAACC,KAAK,EAAC;EAAW,GAAEZ,OAAkB,CAAC,GAAG,IACnD,CAAC;AAElB,CACF,CAAC;AAEDR,KAAK,CAACqB,WAAW,GAAG,OAAO","ignoreList":[]}
|
|
@@ -10,9 +10,12 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
10
10
|
var StyledMedia = exports.StyledMedia = _styledComponents.default.div.withConfig({
|
|
11
11
|
displayName: "Styles__StyledMedia",
|
|
12
12
|
componentId: "sc-zjz7mh-0"
|
|
13
|
-
})(["display:flex;flex-direction:column;gap:", ";width:100%;.c-media-frame{", "}.c-media-frame img{display:block;
|
|
13
|
+
})(["display:flex;flex-direction:column;gap:", ";width:100%;.c-media-frame{width:fit-content;max-width:100%;margin-inline:auto;", "}.c-media-frame img{display:block;height:auto;", "}"], _LayoutTokens.SPACE.sm, function (_ref) {
|
|
14
14
|
var $bordered = _ref.$bordered;
|
|
15
15
|
return $bordered && (0, _styledComponents.css)(["overflow:hidden;border:1px solid var(--border-primary);border-radius:", ";"], "0.5rem");
|
|
16
|
+
}, function (_ref2) {
|
|
17
|
+
var $sized = _ref2.$sized;
|
|
18
|
+
return $sized ? (0, _styledComponents.css)(["max-width:100%;"]) : (0, _styledComponents.css)(["width:100%;"]);
|
|
16
19
|
});
|
|
17
20
|
StyledMedia.displayName = "StyledMedia";
|
|
18
21
|
//# sourceMappingURL=Styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Styles.js","names":["_styledComponents","_interopRequireWildcard","require","_LayoutTokens","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","StyledMedia","exports","styled","div","withConfig","displayName","componentId","SPACE","sm","_ref","$bordered","css"],"sources":["../../../../src/components/Media/Styles.ts"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport { theme } from \"twin.macro\";\n\nimport { SPACE } from \"../LayoutTokens\";\n\nexport const StyledMedia = styled.div<{ $bordered: boolean }>`\n display: flex;\n flex-direction: column;\n gap: ${SPACE.sm};\n width: 100%;\n\n .c-media-frame {\n ${({ $bordered }) =>\n $bordered &&\n css`\n overflow: hidden;\n border: 1px solid var(--border-primary);\n border-radius: ${theme(\"borderRadius.lg\")};\n `}\n }\n\n .c-media-frame img {\n display: block;\n
|
|
1
|
+
{"version":3,"file":"Styles.js","names":["_styledComponents","_interopRequireWildcard","require","_LayoutTokens","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","StyledMedia","exports","styled","div","withConfig","displayName","componentId","SPACE","sm","_ref","$bordered","css","_ref2","$sized"],"sources":["../../../../src/components/Media/Styles.ts"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport { theme } from \"twin.macro\";\n\nimport { SPACE } from \"../LayoutTokens\";\n\nexport const StyledMedia = styled.div<{ $bordered: boolean; $sized: boolean }>`\n display: flex;\n flex-direction: column;\n gap: ${SPACE.sm};\n width: 100%;\n\n .c-media-frame {\n /* Hug the image and center it, so a small screenshot stays small instead\n of stretching to the column. Never wider than the column. */\n width: fit-content;\n max-width: 100%;\n margin-inline: auto;\n\n ${({ $bordered }) =>\n $bordered &&\n css`\n overflow: hidden;\n border: 1px solid var(--border-primary);\n border-radius: ${theme(\"borderRadius.lg\")};\n `}\n }\n\n .c-media-frame img {\n display: block;\n height: auto;\n\n ${({ $sized }) =>\n $sized\n ? css`\n /* The img's width/height attributes hold the display size (the\n portrait height cap already applied), so the image renders at\n its real on-screen size and never upscales. max-width keeps it\n inside the column; height: auto above preserves the aspect\n ratio when it shrinks. */\n max-width: 100%;\n `\n : css`\n /* No measured size (e.g. a remote source): fall back to the\n column-width cap. */\n width: 100%;\n `}\n }\n`;\n\nStyledMedia.displayName = \"StyledMedia\";\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,uBAAA,CAAAC,OAAA;AAGA,IAAAC,aAAA,GAAAD,OAAA;AAAwC,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,wBAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,cAAAM,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAP,CAAA,IAAAD,CAAA,GAAAW,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAP,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAM,EAAA,EAAAP,CAAA,IAAAC,CAAA,CAAAM,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAN,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAEjC,IAAMmB,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAGE,yBAAM,CAACC,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,0LAG5BC,mBAAK,CAACC,EAAE,EAUX,UAAAC,IAAA;EAAA,IAAGC,SAAS,GAAAD,IAAA,CAATC,SAAS;EAAA,OACZA,SAAS,QACTC,qBAAG,kFAGgB,QAAwB,CAC1C;AAAA,GAOD,UAAAC,KAAA;EAAA,IAAGC,MAAM,GAAAD,KAAA,CAANC,MAAM;EAAA,OACTA,MAAM,OACFF,qBAAG,6BAQHA,qBAAG,kBAIF;AAAA,EAEV;AAEDX,WAAW,CAACK,WAAW,GAAG,aAAa","ignoreList":[]}
|
|
@@ -124,7 +124,10 @@ var portableTextDefaultBlockRenderers = exports.portableTextDefaultBlockRenderer
|
|
|
124
124
|
src = _ref1.src,
|
|
125
125
|
alt = _ref1.alt,
|
|
126
126
|
variant = _ref1.variant,
|
|
127
|
-
caption = _ref1.caption
|
|
127
|
+
caption = _ref1.caption,
|
|
128
|
+
width = _ref1.width,
|
|
129
|
+
height = _ref1.height,
|
|
130
|
+
density = _ref1.density;
|
|
128
131
|
|
|
129
132
|
// Video (and future) variants carry service semantics, so their renderer
|
|
130
133
|
// is application-catalog territory — an injected `media` override. The
|
|
@@ -138,7 +141,10 @@ var portableTextDefaultBlockRenderers = exports.portableTextDefaultBlockRenderer
|
|
|
138
141
|
src: src,
|
|
139
142
|
alt: alt,
|
|
140
143
|
variant: variant,
|
|
141
|
-
caption: caption
|
|
144
|
+
caption: caption,
|
|
145
|
+
width: width,
|
|
146
|
+
height: height,
|
|
147
|
+
density: density
|
|
142
148
|
});
|
|
143
149
|
},
|
|
144
150
|
"titled-text": function titledText(_ref10) {
|
|
@@ -1 +1 @@
|
|
|
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","id","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, id } = block as PortableTextHeadingBlock;\n const Heading = titledTextHeadings[headingVariantForLevel(level)];\n return <Heading id={id}>{children}</Heading>;\n};\n\nexport const portableTextDefaultBlockRenderers: Record<\n PortableTextDefaultBlockType,\n PortableTextBlockRenderer\n> = {\n paragraph: ({ children }) => <Body1>{children}</Body1>,\n heading: HeadingBlock,\n list: ({ block, children }) => {\n const ordered = (block as PortableTextListBlock).style === \"number\";\n return (\n // `data-portable-list` scopes the depth-marker rules in Styles.ts to\n // design-system lists, and marks the ancestors those rules count.\n <StyledList\n as={ordered ? \"ol\" : \"ul\"}\n $ordered={ordered}\n data-portable-list=\"\"\n >\n {children}\n </StyledList>\n );\n },\n \"list-item\": ({ children }) => (\n <Typography variant=\"Body 1\" as=\"li\">\n {children}\n </Typography>\n ),\n media: ({ block }) => {\n const { src, alt, variant, caption } = block as PortableTextMediaBlock;\n\n // Video (and future) variants carry service semantics, so their renderer\n // is application-catalog territory — an injected `media` override. The\n // universal set covers images only; anything else degrades and warns, per\n // the contract's degradation rule.\n if (variant !== undefined && !isPortableTextMediaImageVariant(variant)) {\n console.warn(\n `PortableText: no default renderer for media variant \"${variant}\".`\n );\n return null;\n }\n\n return <Media src={src} alt={alt} variant={variant} caption={caption} />;\n },\n \"titled-text\": ({ block, children }) => {\n const { title, level } = block as PortableTextTitledTextBlock;\n return (\n <TitledText title={title} variant={headingVariantForLevel(level)}>\n {children}\n </TitledText>\n );\n },\n // No highlighter ships with the default set, so every language — known,\n // unknown or absent — is plain preformatted text; the hint travels on\n // data-language for surfaces that highlight.\n \"code-block\": ({ block }) => {\n const { code, language } = block as PortableTextCodeBlock;\n return (\n <StyledCodeBlock data-language={language || undefined}>\n <code>{code}</code>\n </StyledCodeBlock>\n );\n },\n table: ({ block, renderSpans }) => {\n const { header, rows } = block as PortableTextTableBlock;\n // Standalone (engine-less) use has no span renderer — keep the raw text.\n const cell = (spans: PortableTextSpan[]): ReactNode =>\n renderSpans\n ? renderSpans(spans)\n : spans.map((span, index) => (\n <Fragment key={index}>{span.text}</Fragment>\n ));\n\n return (\n <StyledTableBlock>\n <Table>\n <Thead>\n <tr>\n {header.map((spans, index) => (\n <th key={index}>{cell(spans)}</th>\n ))}\n </tr>\n </Thead>\n <Tbody>\n {rows.map((row, rowIndex) => (\n <tr key={rowIndex}>\n {row.map((spans, cellIndex) => (\n <td key={cellIndex}>{cell(spans)}</td>\n ))}\n </tr>\n ))}\n </Tbody>\n </Table>\n </StyledTableBlock>\n );\n },\n divider: () => <StyledDivider />,\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAQA,IAAAE,MAAA,GAAAF,OAAA;AAgBA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAKA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,YAAA,GAAAP,OAAA;AAAsD,SAAAD,wBAAAS,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAX,uBAAA,YAAAA,wBAAAS,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,cAAAM,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAP,CAAA,IAAAD,CAAA,GAAAW,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAP,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAM,EAAA,EAAAP,CAAA,IAAAC,CAAA,CAAAM,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAN,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAEtD;AACA;AACA;AACA;AACA;;AAEO,IAAMmB,gCAGZ,GAAAC,OAAA,CAAAD,gCAAA,GAAG;EACFE,MAAM,EAAE,SAARA,MAAMA,CAAAC,IAAA;IAAA,IAAKC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAA,oBAAOlC,MAAA,CAAAoB,OAAA,CAAAe,aAAA,iBAASD,QAAiB,CAAC;EAAA;EACrDE,EAAE,EAAE,SAAJA,EAAEA,CAAAC,KAAA;IAAA,IAAKH,QAAQ,GAAAG,KAAA,CAARH,QAAQ;IAAA,oBAAOlC,MAAA,CAAAoB,OAAA,CAAAe,aAAA,aAAKD,QAAa,CAAC;EAAA;EACzCI,IAAI,EAAE,SAANA,IAAIA,CAAAC,KAAA;IAAA,IAAKL,QAAQ,GAAAK,KAAA,CAARL,QAAQ;IAAA,oBAAOlC,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAChC,OAAA,CAAAqC,UAAU,QAAEN,QAAqB,CAAC;EAAA;EAC3DO,IAAI,EAAE,SAANA,IAAIA,CAAAC,KAAA,EAA0B;IAAA,IAArBC,IAAI,GAAAD,KAAA,CAAJC,IAAI;MAAET,QAAQ,GAAAQ,KAAA,CAARR,QAAQ;IACrB,IAAMU,IAAI,GAAID,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAuCC,IAAI;;IAE7D;IACA;IACA,IAAI,CAACA,IAAI,EAAE;MACT,oBAAO5C,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAAnC,MAAA,CAAAoB,OAAA,CAAAyB,QAAA,QAAGX,QAAW,CAAC;IACxB;IAEA,oBACElC,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAChC,OAAA,CAAA2C,UAAU;MAACF,IAAI,EAAEA,IAAK;MAACG,MAAM,EAAC,QAAQ;MAACC,GAAG,EAAC;IAAqB,GAC9Dd,QACS,CAAC;EAEjB;AACF,CAAC;;AAED;AACA,IAAMe,sBAGL,GAAG;EACF,CAAC,EAAE,QAAQ;EACX,CAAC,EAAE,QAAQ;EACX,CAAC,EAAE;AACL,CAAC;;AAED;AACA,IAAMC,qBAA+C,GAAG,CAAC;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAC1BC,KAA2C,EACrB;EACtB,IAAIA,KAAK,KAAKC,SAAS,EAAE;IACvB,OAAOJ,sBAAsB,CAACC,qBAAqB,CAAC;EACtD;EAEA,IAAMI,OAAO,GAAGL,sBAAsB,CAACG,KAAK,CAAC;EAC7C,IAAI,CAACE,OAAO,EAAE;IACZC,OAAO,CAACC,IAAI,wCAAAC,MAAA,CAC6BL,KAAK,wBAAAK,MAAA,CAAqBP,qBAAqB,MACxF,CAAC;IACD,OAAOD,sBAAsB,CAACC,qBAAqB,CAAC;EACtD;EAEA,OAAOI,OAAO;AAChB,CAAC;;AAED;AACA,IAAMI,YAAuC,GAAG,SAA1CA,YAAuCA,CAAAC,KAAA,EAA4B;EAAA,IAAtBC,KAAK,GAAAD,KAAA,CAALC,KAAK;IAAE1B,QAAQ,GAAAyB,KAAA,CAARzB,QAAQ;EAChE,IAAA2B,KAAA,GAAsBD,KAAK;IAAnBR,KAAK,GAAAS,KAAA,CAALT,KAAK;IAAEU,EAAE,GAAAD,KAAA,CAAFC,EAAE;EACjB,IAAMC,OAAO,GAAGC,8BAAkB,CAACb,sBAAsB,CAACC,KAAK,CAAC,CAAC;EACjE,oBAAOpD,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAC4B,OAAO;IAACD,EAAE,EAAEA;EAAG,GAAE5B,QAAkB,CAAC;AAC9C,CAAC;AAEM,IAAM+B,iCAGZ,GAAAlC,OAAA,CAAAkC,iCAAA,GAAG;EACFC,SAAS,EAAE,SAAXA,SAASA,CAAAC,KAAA;IAAA,IAAKjC,QAAQ,GAAAiC,KAAA,CAARjC,QAAQ;IAAA,oBAAOlC,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAC3B,WAAA,CAAA4D,KAAK,QAAElC,QAAgB,CAAC;EAAA;EACtDmC,OAAO,EAAEX,YAAY;EACrBY,IAAI,EAAE,SAANA,IAAIA,CAAAC,KAAA,EAA2B;IAAA,IAAtBX,KAAK,GAAAW,KAAA,CAALX,KAAK;MAAE1B,QAAQ,GAAAqC,KAAA,CAARrC,QAAQ;IACtB,IAAMsC,OAAO,GAAIZ,KAAK,CAA2Ba,KAAK,KAAK,QAAQ;IACnE;MAAA;MACE;MACA;MACAzE,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAChC,OAAA,CAAAuE,UAAU;QACTC,EAAE,EAAEH,OAAO,GAAG,IAAI,GAAG,IAAK;QAC1BI,QAAQ,EAAEJ,OAAQ;QAClB,sBAAmB;MAAE,GAEpBtC,QACS;IAAC;EAEjB,CAAC;EACD,WAAW,EAAE,SAAb2C,QAAWA,CAAAC,KAAA;IAAA,IAAK5C,QAAQ,GAAA4C,KAAA,CAAR5C,QAAQ;IAAA,oBACtBlC,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAC1B,YAAA,CAAAsE,UAAU;MAACzB,OAAO,EAAC,QAAQ;MAACqB,EAAE,EAAC;IAAI,GACjCzC,QACS,CAAC;EAAA,CACd;EACD8C,KAAK,EAAE,SAAPA,KAAKA,CAAAC,KAAA,EAAiB;IAAA,IAAZrB,KAAK,GAAAqB,KAAA,CAALrB,KAAK;IACb,IAAAsB,KAAA,GAAuCtB,KAAK;MAApCuB,GAAG,GAAAD,KAAA,CAAHC,GAAG;MAAEC,GAAG,GAAAF,KAAA,CAAHE,GAAG;MAAE9B,OAAO,GAAA4B,KAAA,CAAP5B,OAAO;MAAE+B,OAAO,GAAAH,KAAA,CAAPG,OAAO;;IAElC;IACA;IACA;IACA;IACA,IAAI/B,OAAO,KAAKD,SAAS,IAAI,CAAC,IAAAiC,sCAA+B,EAAChC,OAAO,CAAC,EAAE;MACtEC,OAAO,CAACC,IAAI,0DAAAC,MAAA,CAC8CH,OAAO,QACjE,CAAC;MACD,OAAO,IAAI;IACb;IAEA,oBAAOtD,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAC9B,MAAA,CAAAkF,KAAK;MAACJ,GAAG,EAAEA,GAAI;MAACC,GAAG,EAAEA,GAAI;MAAC9B,OAAO,EAAEA,OAAQ;MAAC+B,OAAO,EAAEA;IAAQ,CAAE,CAAC;EAC1E,CAAC;EACD,aAAa,EAAE,SAAfG,UAAaA,CAAAC,MAAA,EAA2B;IAAA,IAAtB7B,KAAK,GAAA6B,MAAA,CAAL7B,KAAK;MAAE1B,QAAQ,GAAAuD,MAAA,CAARvD,QAAQ;IAC/B,IAAAwD,MAAA,GAAyB9B,KAAK;MAAtB+B,KAAK,GAAAD,MAAA,CAALC,KAAK;MAAEvC,KAAK,GAAAsC,MAAA,CAALtC,KAAK;IACpB,oBACEpD,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAC5B,WAAA,CAAAqF,UAAU;MAACD,KAAK,EAAEA,KAAM;MAACrC,OAAO,EAAEH,sBAAsB,CAACC,KAAK;IAAE,GAC9DlB,QACS,CAAC;EAEjB,CAAC;EACD;EACA;EACA;EACA,YAAY,EAAE,SAAd2D,SAAYA,CAAAC,MAAA,EAAiB;IAAA,IAAZlC,KAAK,GAAAkC,MAAA,CAALlC,KAAK;IACpB,IAAAmC,MAAA,GAA2BnC,KAAK;MAAxBtB,IAAI,GAAAyD,MAAA,CAAJzD,IAAI;MAAE0D,QAAQ,GAAAD,MAAA,CAARC,QAAQ;IACtB,oBACEhG,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAChC,OAAA,CAAA8F,eAAe;MAAC,iBAAeD,QAAQ,IAAI3C;IAAU,gBACpDrD,MAAA,CAAAoB,OAAA,CAAAe,aAAA,eAAOG,IAAW,CACH,CAAC;EAEtB,CAAC;EACD4D,KAAK,EAAE,SAAPA,KAAKA,CAAAC,MAAA,EAA8B;IAAA,IAAzBvC,KAAK,GAAAuC,MAAA,CAALvC,KAAK;MAAEwC,WAAW,GAAAD,MAAA,CAAXC,WAAW;IAC1B,IAAAC,MAAA,GAAyBzC,KAAK;MAAtB0C,MAAM,GAAAD,MAAA,CAANC,MAAM;MAAEC,IAAI,GAAAF,MAAA,CAAJE,IAAI;IACpB;IACA,IAAMC,IAAI,GAAG,SAAPA,IAAIA,CAAIC,KAAyB;MAAA,OACrCL,WAAW,GACPA,WAAW,CAACK,KAAK,CAAC,GAClBA,KAAK,CAACC,GAAG,CAAC,UAACC,IAAI,EAAEC,KAAK;QAAA,oBACpB5G,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAACnC,MAAA,CAAA6C,QAAQ;UAACgE,GAAG,EAAED;QAAM,GAAED,IAAI,CAACG,IAAe,CAAC;MAAA,CAC7C,CAAC;IAAA;IAER,oBACE9G,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAChC,OAAA,CAAA4G,gBAAgB,qBACf/G,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAC7B,OAAA,CAAA0G,KAAK,qBACJhH,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAC7B,OAAA,CAAA2G,KAAK,qBACJjH,MAAA,CAAAoB,OAAA,CAAAe,aAAA,aACGmE,MAAM,CAACI,GAAG,CAAC,UAACD,KAAK,EAAEG,KAAK;MAAA,oBACvB5G,MAAA,CAAAoB,OAAA,CAAAe,aAAA;QAAI0E,GAAG,EAAED;MAAM,GAAEJ,IAAI,CAACC,KAAK,CAAM,CAAC;IAAA,CACnC,CACC,CACC,CAAC,eACRzG,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAC7B,OAAA,CAAA4G,KAAK,QACHX,IAAI,CAACG,GAAG,CAAC,UAACS,GAAG,EAAEC,QAAQ;MAAA,oBACtBpH,MAAA,CAAAoB,OAAA,CAAAe,aAAA;QAAI0E,GAAG,EAAEO;MAAS,GACfD,GAAG,CAACT,GAAG,CAAC,UAACD,KAAK,EAAEY,SAAS;QAAA,oBACxBrH,MAAA,CAAAoB,OAAA,CAAAe,aAAA;UAAI0E,GAAG,EAAEQ;QAAU,GAAEb,IAAI,CAACC,KAAK,CAAM,CAAC;MAAA,CACvC,CACC,CAAC;IAAA,CACN,CACI,CACF,CACS,CAAC;EAEvB,CAAC;EACDa,OAAO,EAAE,SAATA,OAAOA,CAAA;IAAA,oBAAQtH,MAAA,CAAAoB,OAAA,CAAAe,aAAA,CAAChC,OAAA,CAAAoH,aAAa,MAAE,CAAC;EAAA;AAClC,CAAC","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","id","Heading","titledTextHeadings","portableTextDefaultBlockRenderers","paragraph","_ref7","Body1","heading","list","_ref8","ordered","style","StyledList","as","$ordered","listItem","_ref9","Typography","media","_ref0","_ref1","src","alt","caption","width","height","density","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, id } = block as PortableTextHeadingBlock;\n const Heading = titledTextHeadings[headingVariantForLevel(level)];\n return <Heading id={id}>{children}</Heading>;\n};\n\nexport const portableTextDefaultBlockRenderers: Record<\n PortableTextDefaultBlockType,\n PortableTextBlockRenderer\n> = {\n paragraph: ({ children }) => <Body1>{children}</Body1>,\n heading: HeadingBlock,\n list: ({ block, children }) => {\n const ordered = (block as PortableTextListBlock).style === \"number\";\n return (\n // `data-portable-list` scopes the depth-marker rules in Styles.ts to\n // design-system lists, and marks the ancestors those rules count.\n <StyledList\n as={ordered ? \"ol\" : \"ul\"}\n $ordered={ordered}\n data-portable-list=\"\"\n >\n {children}\n </StyledList>\n );\n },\n \"list-item\": ({ children }) => (\n <Typography variant=\"Body 1\" as=\"li\">\n {children}\n </Typography>\n ),\n media: ({ block }) => {\n const { src, alt, variant, caption, width, height, density } =\n 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 (\n <Media\n src={src}\n alt={alt}\n variant={variant}\n caption={caption}\n width={width}\n height={height}\n density={density}\n />\n );\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 +1 @@
|
|
|
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","id","undefined","child","src","title","content","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 /**\n * Optional anchor id, rendered verbatim as the heading element's `id` so the\n * heading is a scroll target (e.g. subarticle deep-links). Opaque to the\n * renderer — any slug convention lives with whoever produced the block.\n */\n id?: string;\n children: PortableTextSpan[];\n}\n\nexport type PortableTextListStyle = \"bullet\" | \"number\";\n\n/**\n * A list item's children are its own spans first, then any nested `list`\n * block(s) — the shape that carries multi-level lists. A spans-only item (no\n * nested list) is the common, flat case and stays valid unchanged.\n */\nexport interface PortableTextListItemBlock {\n type: \"list-item\";\n children: (PortableTextSpan | PortableTextListBlock)[];\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 return (\n Array.isArray(value.children) &&\n value.children.every(isPortableTextSpan)\n );\n case \"heading\":\n return (\n (value.id === undefined || typeof value.id === \"string\") &&\n Array.isArray(value.children) &&\n value.children.every(isPortableTextSpan)\n );\n case \"list-item\":\n // The item's spans, plus optional nested `list` block(s). Widened only\n // for nested lists: any other block child (a stray paragraph, an object)\n // still fails, so a serializer bug is caught here, not at render.\n return (\n Array.isArray(value.children) &&\n value.children.every(\n (child) =>\n isPortableTextSpan(child) ||\n (isPortableTextBlock(child) && child.type === \"list\")\n )\n );\n case \"list\":\n // A list holds `list-item`s only. A sublist emitted as a sibling of the\n // items (the classic half-implemented-nesting bug) renders invalid HTML\n // — <ul> with a direct <ul> child — so it fails here, not at render.\n // `list-item` is validated but sits outside the PortableTextBlock union,\n // so the discriminator is checked before isPortableTextBlock narrows it.\n return (\n Array.isArray(value.children) &&\n value.children.every(\n (child) =>\n isRecord(child) &&\n child.type === \"list-item\" &&\n isPortableTextBlock(child)\n )\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","id","undefined","child","src","title","content","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 /**\n * Optional anchor id, rendered verbatim as the heading element's `id` so the\n * heading is a scroll target (e.g. subarticle deep-links). Opaque to the\n * renderer — any slug convention lives with whoever produced the block.\n */\n id?: string;\n children: PortableTextSpan[];\n}\n\nexport type PortableTextListStyle = \"bullet\" | \"number\";\n\n/**\n * A list item's children are its own spans first, then any nested `list`\n * block(s) — the shape that carries multi-level lists. A spans-only item (no\n * nested list) is the common, flat case and stays valid unchanged.\n */\nexport interface PortableTextListItemBlock {\n type: \"list-item\";\n children: (PortableTextSpan | PortableTextListBlock)[];\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 * Display size in CSS pixels — the image's real on-screen size after the\n * compile-time density divide (a 2x screenshot is measured, then halved).\n * The renderer draws the image at this size, capping the width at the\n * column and never upscaling past it. Absent when the build could not\n * measure the source (e.g. a remote `http(s)` src); the renderer then falls\n * back to the column-width cap.\n */\n width?: number;\n height?: number;\n /**\n * The density factor the width and height were derived from (2 for a Retina\n * capture). Drives the `srcset` so Retina viewers get full sharpness at the\n * same display size. Opaque to layout.\n */\n density?: number;\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 return (\n Array.isArray(value.children) &&\n value.children.every(isPortableTextSpan)\n );\n case \"heading\":\n return (\n (value.id === undefined || typeof value.id === \"string\") &&\n Array.isArray(value.children) &&\n value.children.every(isPortableTextSpan)\n );\n case \"list-item\":\n // The item's spans, plus optional nested `list` block(s). Widened only\n // for nested lists: any other block child (a stray paragraph, an object)\n // still fails, so a serializer bug is caught here, not at render.\n return (\n Array.isArray(value.children) &&\n value.children.every(\n (child) =>\n isPortableTextSpan(child) ||\n (isPortableTextBlock(child) && child.type === \"list\")\n )\n );\n case \"list\":\n // A list holds `list-item`s only. A sublist emitted as a sibling of the\n // items (the classic half-implemented-nesting bug) renders invalid HTML\n // — <ul> with a direct <ul> child — so it fails here, not at render.\n // `list-item` is validated but sits outside the PortableTextBlock union,\n // so the discriminator is checked before isPortableTextBlock narrows it.\n return (\n Array.isArray(value.children) &&\n value.children.every(\n (child) =>\n isRecord(child) &&\n child.type === \"list-item\" &&\n isPortableTextBlock(child)\n )\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":[]}
|
|
@@ -274,7 +274,7 @@ var VISIBILITY_OPTIONS = exports.VISIBILITY_OPTIONS = [{
|
|
|
274
274
|
description: "Nobody else sees this portfolio."
|
|
275
275
|
}];
|
|
276
276
|
var contextFieldLabel = exports.contextFieldLabel = function contextFieldLabel(type) {
|
|
277
|
-
return type === "custom" ? "Projects" : type === "category" ? "Category" : type === "client" ? "Client" : "Project
|
|
277
|
+
return type === "custom" ? "Projects" : type === "category" ? "Category" : type === "client" ? "Client" : "Project Leader";
|
|
278
278
|
};
|
|
279
279
|
var leaderShortName = exports.leaderShortName = function leaderShortName(name) {
|
|
280
280
|
var _LEADERS_LIST$find$sh, _LEADERS_LIST$find;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portfolioDetails.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_Button","_Dialog","_IconButton","_Icons","_Input","_Label","_RadioGroup","_Select","_SelectTrigger","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","l","iterator","u","next","done","return","isArray","DEFAULT_PORTFOLIO_FORM_VALUES","exports","type","context","undefined","projectIds","groupBy","visibility","LEADERS_LIST","short","CATEGORIES","CLIENTS","PICKER_PROJECTS","id","client","category","label","leader","favorite","GROUP_BY_OPTIONS","projectOptionId","project","concat","sampleProjectOptionIds","count","Math","max","map","toProjectOptions","projects","sort","b","localeCompare","groupPickerProjects","other","groups","options","field","without","buckets","Map","_buckets$get","key","entries","_ref","_ref2","PORTFOLIO_TYPES","title","description","VISIBILITY_OPTIONS","contextFieldLabel","leaderShortName","_LEADERS_LIST$find$sh","_LEADERS_LIST$find","find","defaultPortfolioName","isPortfolioDetailsValid","values","trim","Boolean","ProjectsGroupBy","_ref3","selected","onChange","createElement","Select","keepSameOptionsOrder","disableSearch","disabledInternalSort","forceCloseMenu","position","target","IconButton","variant","SortGeneralIcon","ProjectsPicker","_ref4","onGroupBy","invalid","useMemo","triggerText","noResultText","endAdornment","SelectTrigger","className","typographyProps","color","ContextPicker","_ref5","placeholder","StyledDetailsForm","styled","div","withConfig","displayName","componentId","PortfolioDetailsFields","_ref6","onName","onContext","onProjects","onVisibility","showErrors","nameInvalid","pickerInvalid","Label","htmlFor","Input","event","RadioGroup","option","EditPortfolioDialog","_ref7","open","initialValues","onClose","onSave","_useState","useState","_useState2","setValues","_useState3","_useState4","setShowErrors","useEffect","patch","current","handleSave","Dialog","disableCloseOnEsc","Title","ContentDivider","Content","Actions","Button","style","marginRight","onClick"],"sources":["../../../../src/presentation/shared/portfolioDetails.tsx"],"sourcesContent":["import React, { ReactElement, useEffect, useMemo, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { SortGeneralIcon } from \"../../components/Icons\";\nimport { Input } from \"../../components/Input\";\nimport { Label } from \"../../components/Label\";\nimport { RadioGroup } from \"../../components/RadioGroup\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\n\n/*\n Portfolio details form — the shared \"step 2\" of the Create Portfolio wizard,\n reused verbatim as the Edit Portfolio dialog.\n\n This mirrors a pattern used across the app: the fields that make up the final\n step of a creation wizard are the same fields shown, later, when the object is\n edited. So the form body (name, the type's picker, visibility) and its\n validation live here once, and two consumers render it:\n\n - The Create Portfolio wizard (PortfoliosList.stories.tsx) renders\n <PortfolioDetailsFields> inside its step-2 <Dialog.Content>, with a\n \"Create Portfolio\" action.\n - <EditPortfolioDialog> (opened from PortfolioOptionsMenu's Edit item)\n renders the SAME <PortfolioDetailsFields> inside a standalone <Dialog>,\n with a \"Save Changes\" action.\n\n Both use isPortfolioDetailsValid() and the same always-enabled-submit,\n outline-on-submit validation rule.\n*/\n\n/* ------------------------------------------------------------------ */\n/* Domain types */\n/* ------------------------------------------------------------------ */\n\n/** How a portfolio decides its members (two kinds, three context types). */\nexport type PortfolioKind = \"custom\" | \"category\" | \"client\" | \"leader\";\n\nexport type PortfolioVisibility = \"everyone\" | \"me\";\n\n/** Grouping of the projects multi-select — matches Invite-to-Projects. */\nexport type GroupBy =\n | \"favorites\"\n | \"labels\"\n | \"companies\"\n | \"categories\"\n | \"leaders\";\n\n/** The editable shape shared by create step 2 and the edit dialog. */\nexport interface PortfolioFormValues {\n type: PortfolioKind;\n name: string;\n /** For context portfolios: the chosen category / client / leader. */\n context?: string;\n /** For custom portfolios: the hand-picked project option ids. */\n projectIds: string[];\n groupBy: GroupBy;\n visibility: PortfolioVisibility;\n}\n\n/** A blank custom portfolio — the fallback seed for the edit dialog. */\nexport const DEFAULT_PORTFOLIO_FORM_VALUES: PortfolioFormValues = {\n type: \"custom\",\n name: \"\",\n context: undefined,\n projectIds: [],\n groupBy: \"favorites\",\n visibility: \"everyone\",\n};\n\n/* ------------------------------------------------------------------ */\n/* Pickers' mock data */\n/* ------------------------------------------------------------------ */\n\nexport interface PickerLeader {\n name: string;\n /** Short \"Firstname L.\" form used in the default portfolio name. */\n short: string;\n}\n\nexport const LEADERS_LIST: PickerLeader[] = [\n { name: \"Theo Brandt\", short: \"Theo B.\" },\n { name: \"Isabel Cortez\", short: \"Isabel C.\" },\n { name: \"Grace Bauer\", short: \"Grace B.\" },\n { name: \"Noah Mercer\", short: \"Noah M.\" },\n];\n\nexport const CATEGORIES = [\n \"Brand & Identity\",\n \"Web & Product\",\n \"Marketing\",\n \"Internal Ops\",\n];\n\nexport const CLIENTS = [\n \"Aperture Studio\",\n \"Orbit Telecom\",\n \"Northwind Traders\",\n \"Meridian Health\",\n];\n\ninterface PickerProject {\n id: number;\n name: string;\n client: string;\n category: string;\n label: string;\n leader: string;\n favorite: boolean;\n}\n\nconst PICKER_PROJECTS: PickerProject[] = [\n {\n id: 1,\n name: \"Website Redesign\",\n client: \"Aperture Studio\",\n category: \"Web & Product\",\n label: \"Design\",\n leader: \"Theo Brandt\",\n favorite: true,\n },\n {\n id: 2,\n name: \"Brand Refresh\",\n client: \"Aperture Studio\",\n category: \"Brand & Identity\",\n label: \"Design\",\n leader: \"Isabel Cortez\",\n favorite: true,\n },\n {\n id: 3,\n name: \"Mobile App\",\n client: \"Orbit Telecom\",\n category: \"Web & Product\",\n label: \"Build\",\n leader: \"Grace Bauer\",\n favorite: false,\n },\n {\n id: 4,\n name: \"Q3 Campaign\",\n client: \"Orbit Telecom\",\n category: \"Marketing\",\n label: \"Campaign\",\n leader: \"Noah Mercer\",\n favorite: true,\n },\n {\n id: 5,\n name: \"Internal Wiki\",\n client: \"\",\n category: \"Internal Ops\",\n label: \"\",\n leader: \"Theo Brandt\",\n favorite: false,\n },\n {\n id: 6,\n name: \"Packaging System\",\n client: \"Northwind Traders\",\n category: \"Brand & Identity\",\n label: \"Design\",\n leader: \"Isabel Cortez\",\n favorite: false,\n },\n {\n id: 7,\n name: \"Support Portal\",\n client: \"Meridian Health\",\n category: \"Web & Product\",\n label: \"Build\",\n leader: \"Grace Bauer\",\n favorite: false,\n },\n {\n id: 8,\n name: \"Annual Report\",\n client: \"Northwind Traders\",\n category: \"Marketing\",\n label: \"Campaign\",\n leader: \"Noah Mercer\",\n favorite: true,\n },\n];\n\n/* Group-by options and default match the Invite-to-Projects picker exactly. */\nconst GROUP_BY_OPTIONS: { id: GroupBy; name: string }[] = [\n { id: \"favorites\", name: \"Favorites\" },\n { id: \"labels\", name: \"Label\" },\n { id: \"companies\", name: \"Client\" },\n { id: \"categories\", name: \"Category\" },\n { id: \"leaders\", name: \"Project Leader\" },\n];\n\ninterface ProjectOption {\n id: string;\n name: string;\n}\ninterface ProjectOptionGroup {\n id: string;\n name: string;\n options: ProjectOption[];\n}\n\nconst projectOptionId = (project: PickerProject): string => `p${project.id}`;\n\n/** A small deterministic set of project option ids — seeds a custom\n portfolio's edit dialog so the picker reads as an existing selection. */\nexport const sampleProjectOptionIds = (count: number): string[] =>\n PICKER_PROJECTS.slice(0, Math.max(0, count)).map(projectOptionId);\n\nconst toProjectOptions = (projects: PickerProject[]): ProjectOption[] =>\n projects\n .map((project) => ({ id: projectOptionId(project), name: project.name }))\n .sort((a, b) => a.name.localeCompare(b.name));\n\n/* Build the grouped option tree the Select expects. Alphabetical rows and\n groups; the \"Without ...\" / \"Other\" bucket sits last; the Favorites grouping\n collapses to a flat list when it is the only group (as the app's does). */\nconst groupPickerProjects = (\n groupBy: GroupBy\n): ProjectOption[] | ProjectOptionGroup[] => {\n if (groupBy === \"favorites\") {\n const favorite = PICKER_PROJECTS.filter((project) => project.favorite);\n const other = PICKER_PROJECTS.filter((project) => !project.favorite);\n const groups: ProjectOptionGroup[] = [];\n if (favorite.length) {\n groups.push({\n id: \"g-fav\",\n name: \"Favorite\",\n options: toProjectOptions(favorite),\n });\n }\n if (other.length) {\n groups.push({\n id: \"g-other\",\n name: \"Other\",\n options: toProjectOptions(other),\n });\n }\n return groups.length === 1 ? groups[0].options : groups;\n }\n\n const field: keyof PickerProject =\n groupBy === \"labels\"\n ? \"label\"\n : groupBy === \"companies\"\n ? \"client\"\n : groupBy === \"categories\"\n ? \"category\"\n : \"leader\";\n const without =\n groupBy === \"labels\"\n ? \"Without Label\"\n : groupBy === \"companies\"\n ? \"Without Client\"\n : groupBy === \"categories\"\n ? \"Without Category\"\n : \"Without Leader\";\n\n const buckets = new Map<string, PickerProject[]>();\n PICKER_PROJECTS.forEach((project) => {\n const key = (project[field] as string) || without;\n if (!buckets.has(key)) {\n buckets.set(key, []);\n }\n buckets.get(key)?.push(project);\n });\n\n return Array.from(buckets.entries())\n .map(([name, projects]) => ({\n id: `g-${name}`,\n name,\n options: toProjectOptions(projects),\n }))\n .sort((a, b) =>\n a.name === without\n ? 1\n : b.name === without\n ? -1\n : a.name.localeCompare(b.name)\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* Type + visibility option copy */\n/* ------------------------------------------------------------------ */\n\nexport const PORTFOLIO_TYPES: {\n id: PortfolioKind;\n title: string;\n description: string;\n}[] = [\n {\n id: \"custom\",\n title: \"Custom Portfolio\",\n description: \"The projects you pick by hand. Nothing joins automatically.\",\n },\n {\n id: \"client\",\n title: \"Client Portfolio\",\n description:\n \"All projects for a client company. New ones join automatically.\",\n },\n {\n id: \"leader\",\n title: \"Project Leader Portfolio\",\n description: \"All projects led by a person. New ones join automatically.\",\n },\n {\n id: \"category\",\n title: \"Category Portfolio\",\n description:\n \"All projects in a project category. New ones join automatically.\",\n },\n];\n\nexport const VISIBILITY_OPTIONS: {\n id: PortfolioVisibility;\n title: string;\n description: string;\n}[] = [\n {\n id: \"everyone\",\n title: \"Visible to Everyone\",\n description:\n \"Anyone who can use portfolios sees this one. They still only see the projects they already have access to.\",\n },\n {\n id: \"me\",\n title: \"Visible Only to Me\",\n description: \"Nobody else sees this portfolio.\",\n },\n];\n\nexport const contextFieldLabel = (type: PortfolioKind): string =>\n type === \"custom\"\n ? \"Projects\"\n : type === \"category\"\n ? \"Category\"\n : type === \"client\"\n ? \"Client\"\n : \"Project leader\";\n\nexport const leaderShortName = (name: string): string =>\n LEADERS_LIST.find((leader) => leader.name === name)?.short ?? name;\n\n/* Default names: \"{Category} Projects\", \"{Client} Projects\", \"Lead by {N.}\". */\nexport const defaultPortfolioName = (\n type: PortfolioKind,\n context: string\n): string => {\n if (!context) return \"\";\n if (type === \"category\" || type === \"client\") return `${context} Projects`;\n if (type === \"leader\") return `Lead by ${leaderShortName(context)}`;\n return \"\";\n};\n\n/* ------------------------------------------------------------------ */\n/* Validation (shared by create step 2 and the edit dialog) */\n/* ------------------------------------------------------------------ */\n\n/** Name is required; a custom portfolio needs at least one project, a context\n portfolio needs its context chosen. Same rule for create and edit. */\nexport const isPortfolioDetailsValid = (values: PortfolioFormValues): boolean =>\n values.name.trim().length > 0 &&\n (values.type === \"custom\"\n ? values.projectIds.length > 0\n : Boolean(values.context));\n\n/* ------------------------------------------------------------------ */\n/* Pickers */\n/* ------------------------------------------------------------------ */\n\n/* Group-by control: the SortGeneralIcon button the Invite-to-Projects picker\n shows as the search bar's right-side adornment. Controls grouping, not sort. */\nconst ProjectsGroupBy = ({\n selected,\n onChange,\n}: {\n selected: GroupBy;\n onChange: (groupBy: GroupBy) => void;\n}): ReactElement => (\n <Select\n keepSameOptionsOrder\n disableSearch\n disabledInternalSort\n forceCloseMenu\n position=\"bottom-end\"\n selected={selected}\n onChange={(value) => onChange(value as GroupBy)}\n options={GROUP_BY_OPTIONS}\n target={\n <IconButton type=\"button\" variant=\"text gray\">\n <SortGeneralIcon />\n </IconButton>\n }\n />\n);\n\nconst ProjectsPicker = ({\n selected,\n onChange,\n groupBy,\n onGroupBy,\n invalid,\n}: {\n selected: string[];\n onChange: (ids: string[]) => void;\n groupBy: GroupBy;\n onGroupBy: (groupBy: GroupBy) => void;\n invalid?: boolean;\n}): ReactElement => {\n const options = useMemo(() => groupPickerProjects(groupBy), [groupBy]);\n const count = selected.length;\n const triggerText =\n count === 0\n ? \"Choose projects\"\n : count === 1\n ? \"1 project selected\"\n : `${count} projects selected`;\n return (\n <Select\n type=\"multiple\"\n options={options}\n selected={selected}\n onChange={(value) => onChange(value as string[])}\n noResultText=\"No results\"\n endAdornment={<ProjectsGroupBy selected={groupBy} onChange={onGroupBy} />}\n target={\n <SelectTrigger\n id=\"pf-projects\"\n className=\"pf-trigger\"\n invalid={invalid}\n typographyProps={{ color: count > 0 ? \"primary\" : \"quaternary\" }}\n >\n {triggerText}\n </SelectTrigger>\n }\n />\n );\n};\n\nconst ContextPicker = ({\n type,\n value,\n onChange,\n invalid,\n}: {\n type: PortfolioKind;\n value?: string;\n onChange: (value: string) => void;\n invalid?: boolean;\n}): ReactElement => {\n const options =\n type === \"category\"\n ? CATEGORIES.map((name) => ({ id: name, name }))\n : type === \"client\"\n ? CLIENTS.map((name) => ({ id: name, name }))\n : LEADERS_LIST.map((leader) => ({ id: leader.name, name: leader.name }));\n const placeholder =\n type === \"category\"\n ? \"Choose a category\"\n : type === \"client\"\n ? \"Choose a client\"\n : \"Choose a project leader\";\n return (\n <Select\n forceCloseMenu\n options={options}\n selected={value ?? \"\"}\n onChange={(next) => onChange(String(next))}\n target={\n <SelectTrigger\n id=\"pf-context\"\n className=\"pf-trigger\"\n invalid={invalid}\n typographyProps={{ color: value ? \"primary\" : \"quaternary\" }}\n >\n {value ?? placeholder}\n </SelectTrigger>\n }\n />\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* The reusable form body */\n/* ------------------------------------------------------------------ */\n\nconst StyledDetailsForm = styled.div`\n display: flex;\n flex-direction: column;\n gap: 24px;\n\n .field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n /* DS form controls are fixed-width (Input 360px, SelectTrigger 300px); let\n them fill the dialog column instead. */\n .field .c-input-wrapper {\n width: 100%;\n }\n\n .field .pf-trigger {\n width: 100%;\n }\n`;\n\nexport interface PortfolioDetailsFieldsProps {\n values: PortfolioFormValues;\n onName: (value: string) => void;\n onContext: (value: string) => void;\n onProjects: (ids: string[]) => void;\n onGroupBy: (groupBy: GroupBy) => void;\n onVisibility: (value: PortfolioVisibility) => void;\n /* Form pattern (propagating through the app): the submit button is ALWAYS\n enabled. On submit the consumer flips showErrors; each field then outlines\n itself (aria-invalid) while it is invalid, and clears once it becomes\n valid. No field disables submit. */\n showErrors: boolean;\n}\n\n/** Name + the type's picker + visibility. No Dialog wrappers and no action\n button — the consumer (create step or edit dialog) supplies those. */\nexport const PortfolioDetailsFields = ({\n values,\n onName,\n onContext,\n onProjects,\n onGroupBy,\n onVisibility,\n showErrors,\n}: PortfolioDetailsFieldsProps): ReactElement => {\n const { type, name, context, projectIds, groupBy, visibility } = values;\n const nameInvalid = showErrors && name.trim().length === 0;\n const pickerInvalid =\n showErrors && (type === \"custom\" ? projectIds.length === 0 : !context);\n\n return (\n <StyledDetailsForm>\n <div className=\"field\">\n <Label htmlFor=\"pf-name\">Name</Label>\n <Input\n id=\"pf-name\"\n value={name}\n placeholder=\"Portfolio name\"\n invalid={nameInvalid}\n onChange={(event) => onName(event.target.value)}\n />\n </div>\n <div className=\"field\">\n <Label htmlFor={type === \"custom\" ? \"pf-projects\" : \"pf-context\"}>\n {contextFieldLabel(type)}\n </Label>\n {type === \"custom\" ? (\n <ProjectsPicker\n selected={projectIds}\n onChange={onProjects}\n groupBy={groupBy}\n onGroupBy={onGroupBy}\n invalid={pickerInvalid}\n />\n ) : (\n <ContextPicker\n type={type}\n value={context}\n onChange={onContext}\n invalid={pickerInvalid}\n />\n )}\n </div>\n <div className=\"field\">\n <RadioGroup\n label=\"Visibility\"\n variant=\"plain\"\n value={visibility}\n onChange={(value) => onVisibility(value as PortfolioVisibility)}\n options={VISIBILITY_OPTIONS.map((option) => ({\n id: option.id,\n name: option.title,\n description: option.description,\n }))}\n />\n </div>\n </StyledDetailsForm>\n );\n};\n\nPortfolioDetailsFields.displayName = \"PortfolioDetailsFields\";\n\n/* ------------------------------------------------------------------ */\n/* Edit Portfolio dialog — the create wizard's step 2, on its own */\n/* ------------------------------------------------------------------ */\n\nexport interface EditPortfolioDialogProps {\n open: boolean;\n /** The portfolio's current values; the dialog seeds itself from these on\n open, so Cancel discards edits and Save commits them. */\n initialValues: PortfolioFormValues;\n onClose: () => void;\n onSave?: (values: PortfolioFormValues) => void;\n}\n\n/*\n Same fields, same validation as create step 2. The type is fixed to the\n portfolio's kind (edit changes the details, not the kind), so there is no\n type radio here — only the name, the type's picker, and visibility.\n*/\nexport const EditPortfolioDialog = ({\n open,\n initialValues,\n onClose,\n onSave,\n}: EditPortfolioDialogProps): ReactElement => {\n const [values, setValues] = useState<PortfolioFormValues>(initialValues);\n const [showErrors, setShowErrors] = useState(false);\n\n /* Re-seed from the portfolio each time the dialog opens. */\n useEffect(() => {\n if (open) {\n setValues(initialValues);\n setShowErrors(false);\n }\n // Seed on open only — initialValues is read at that moment by design.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const patch = (next: Partial<PortfolioFormValues>): void =>\n setValues((current) => ({ ...current, ...next }));\n\n const handleSave = (): void => {\n if (!isPortfolioDetailsValid(values)) {\n setShowErrors(true);\n return;\n }\n onSave?.(values);\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Edit Portfolio</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <PortfolioDetailsFields\n values={values}\n onName={(name) => patch({ name })}\n onContext={(context) => patch({ context })}\n onProjects={(projectIds) => patch({ projectIds })}\n onGroupBy={(groupBy) => patch({ groupBy })}\n onVisibility={(visibility) => patch({ visibility })}\n showErrors={showErrors}\n />\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button\n variant=\"primary\"\n style={{ marginRight: \"12px\" }}\n onClick={handleSave}\n >\n Save Changes\n </Button>\n <Button variant=\"secondary\" data-action=\"cancel\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n );\n};\n\nEditPortfolioDialog.displayName = \"EditPortfolioDialog\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"portfolioDetails.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_Button","_Dialog","_IconButton","_Icons","_Input","_Label","_RadioGroup","_Select","_SelectTrigger","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","l","iterator","u","next","done","return","isArray","DEFAULT_PORTFOLIO_FORM_VALUES","exports","type","context","undefined","projectIds","groupBy","visibility","LEADERS_LIST","short","CATEGORIES","CLIENTS","PICKER_PROJECTS","id","client","category","label","leader","favorite","GROUP_BY_OPTIONS","projectOptionId","project","concat","sampleProjectOptionIds","count","Math","max","map","toProjectOptions","projects","sort","b","localeCompare","groupPickerProjects","other","groups","options","field","without","buckets","Map","_buckets$get","key","entries","_ref","_ref2","PORTFOLIO_TYPES","title","description","VISIBILITY_OPTIONS","contextFieldLabel","leaderShortName","_LEADERS_LIST$find$sh","_LEADERS_LIST$find","find","defaultPortfolioName","isPortfolioDetailsValid","values","trim","Boolean","ProjectsGroupBy","_ref3","selected","onChange","createElement","Select","keepSameOptionsOrder","disableSearch","disabledInternalSort","forceCloseMenu","position","target","IconButton","variant","SortGeneralIcon","ProjectsPicker","_ref4","onGroupBy","invalid","useMemo","triggerText","noResultText","endAdornment","SelectTrigger","className","typographyProps","color","ContextPicker","_ref5","placeholder","StyledDetailsForm","styled","div","withConfig","displayName","componentId","PortfolioDetailsFields","_ref6","onName","onContext","onProjects","onVisibility","showErrors","nameInvalid","pickerInvalid","Label","htmlFor","Input","event","RadioGroup","option","EditPortfolioDialog","_ref7","open","initialValues","onClose","onSave","_useState","useState","_useState2","setValues","_useState3","_useState4","setShowErrors","useEffect","patch","current","handleSave","Dialog","disableCloseOnEsc","Title","ContentDivider","Content","Actions","Button","style","marginRight","onClick"],"sources":["../../../../src/presentation/shared/portfolioDetails.tsx"],"sourcesContent":["import React, { ReactElement, useEffect, useMemo, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { SortGeneralIcon } from \"../../components/Icons\";\nimport { Input } from \"../../components/Input\";\nimport { Label } from \"../../components/Label\";\nimport { RadioGroup } from \"../../components/RadioGroup\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\n\n/*\n Portfolio details form — the shared \"step 2\" of the Create Portfolio wizard,\n reused verbatim as the Edit Portfolio dialog.\n\n This mirrors a pattern used across the app: the fields that make up the final\n step of a creation wizard are the same fields shown, later, when the object is\n edited. So the form body (name, the type's picker, visibility) and its\n validation live here once, and two consumers render it:\n\n - The Create Portfolio wizard (PortfoliosList.stories.tsx) renders\n <PortfolioDetailsFields> inside its step-2 <Dialog.Content>, with a\n \"Create Portfolio\" action.\n - <EditPortfolioDialog> (opened from PortfolioOptionsMenu's Edit item)\n renders the SAME <PortfolioDetailsFields> inside a standalone <Dialog>,\n with a \"Save Changes\" action.\n\n Both use isPortfolioDetailsValid() and the same always-enabled-submit,\n outline-on-submit validation rule.\n*/\n\n/* ------------------------------------------------------------------ */\n/* Domain types */\n/* ------------------------------------------------------------------ */\n\n/** How a portfolio decides its members (two kinds, three context types). */\nexport type PortfolioKind = \"custom\" | \"category\" | \"client\" | \"leader\";\n\nexport type PortfolioVisibility = \"everyone\" | \"me\";\n\n/** Grouping of the projects multi-select — matches Invite-to-Projects. */\nexport type GroupBy =\n | \"favorites\"\n | \"labels\"\n | \"companies\"\n | \"categories\"\n | \"leaders\";\n\n/** The editable shape shared by create step 2 and the edit dialog. */\nexport interface PortfolioFormValues {\n type: PortfolioKind;\n name: string;\n /** For context portfolios: the chosen category / client / leader. */\n context?: string;\n /** For custom portfolios: the hand-picked project option ids. */\n projectIds: string[];\n groupBy: GroupBy;\n visibility: PortfolioVisibility;\n}\n\n/** A blank custom portfolio — the fallback seed for the edit dialog. */\nexport const DEFAULT_PORTFOLIO_FORM_VALUES: PortfolioFormValues = {\n type: \"custom\",\n name: \"\",\n context: undefined,\n projectIds: [],\n groupBy: \"favorites\",\n visibility: \"everyone\",\n};\n\n/* ------------------------------------------------------------------ */\n/* Pickers' mock data */\n/* ------------------------------------------------------------------ */\n\nexport interface PickerLeader {\n name: string;\n /** Short \"Firstname L.\" form used in the default portfolio name. */\n short: string;\n}\n\nexport const LEADERS_LIST: PickerLeader[] = [\n { name: \"Theo Brandt\", short: \"Theo B.\" },\n { name: \"Isabel Cortez\", short: \"Isabel C.\" },\n { name: \"Grace Bauer\", short: \"Grace B.\" },\n { name: \"Noah Mercer\", short: \"Noah M.\" },\n];\n\nexport const CATEGORIES = [\n \"Brand & Identity\",\n \"Web & Product\",\n \"Marketing\",\n \"Internal Ops\",\n];\n\nexport const CLIENTS = [\n \"Aperture Studio\",\n \"Orbit Telecom\",\n \"Northwind Traders\",\n \"Meridian Health\",\n];\n\ninterface PickerProject {\n id: number;\n name: string;\n client: string;\n category: string;\n label: string;\n leader: string;\n favorite: boolean;\n}\n\nconst PICKER_PROJECTS: PickerProject[] = [\n {\n id: 1,\n name: \"Website Redesign\",\n client: \"Aperture Studio\",\n category: \"Web & Product\",\n label: \"Design\",\n leader: \"Theo Brandt\",\n favorite: true,\n },\n {\n id: 2,\n name: \"Brand Refresh\",\n client: \"Aperture Studio\",\n category: \"Brand & Identity\",\n label: \"Design\",\n leader: \"Isabel Cortez\",\n favorite: true,\n },\n {\n id: 3,\n name: \"Mobile App\",\n client: \"Orbit Telecom\",\n category: \"Web & Product\",\n label: \"Build\",\n leader: \"Grace Bauer\",\n favorite: false,\n },\n {\n id: 4,\n name: \"Q3 Campaign\",\n client: \"Orbit Telecom\",\n category: \"Marketing\",\n label: \"Campaign\",\n leader: \"Noah Mercer\",\n favorite: true,\n },\n {\n id: 5,\n name: \"Internal Wiki\",\n client: \"\",\n category: \"Internal Ops\",\n label: \"\",\n leader: \"Theo Brandt\",\n favorite: false,\n },\n {\n id: 6,\n name: \"Packaging System\",\n client: \"Northwind Traders\",\n category: \"Brand & Identity\",\n label: \"Design\",\n leader: \"Isabel Cortez\",\n favorite: false,\n },\n {\n id: 7,\n name: \"Support Portal\",\n client: \"Meridian Health\",\n category: \"Web & Product\",\n label: \"Build\",\n leader: \"Grace Bauer\",\n favorite: false,\n },\n {\n id: 8,\n name: \"Annual Report\",\n client: \"Northwind Traders\",\n category: \"Marketing\",\n label: \"Campaign\",\n leader: \"Noah Mercer\",\n favorite: true,\n },\n];\n\n/* Group-by options and default match the Invite-to-Projects picker exactly. */\nconst GROUP_BY_OPTIONS: { id: GroupBy; name: string }[] = [\n { id: \"favorites\", name: \"Favorites\" },\n { id: \"labels\", name: \"Label\" },\n { id: \"companies\", name: \"Client\" },\n { id: \"categories\", name: \"Category\" },\n { id: \"leaders\", name: \"Project Leader\" },\n];\n\ninterface ProjectOption {\n id: string;\n name: string;\n}\ninterface ProjectOptionGroup {\n id: string;\n name: string;\n options: ProjectOption[];\n}\n\nconst projectOptionId = (project: PickerProject): string => `p${project.id}`;\n\n/** A small deterministic set of project option ids — seeds a custom\n portfolio's edit dialog so the picker reads as an existing selection. */\nexport const sampleProjectOptionIds = (count: number): string[] =>\n PICKER_PROJECTS.slice(0, Math.max(0, count)).map(projectOptionId);\n\nconst toProjectOptions = (projects: PickerProject[]): ProjectOption[] =>\n projects\n .map((project) => ({ id: projectOptionId(project), name: project.name }))\n .sort((a, b) => a.name.localeCompare(b.name));\n\n/* Build the grouped option tree the Select expects. Alphabetical rows and\n groups; the \"Without ...\" / \"Other\" bucket sits last; the Favorites grouping\n collapses to a flat list when it is the only group (as the app's does). */\nconst groupPickerProjects = (\n groupBy: GroupBy\n): ProjectOption[] | ProjectOptionGroup[] => {\n if (groupBy === \"favorites\") {\n const favorite = PICKER_PROJECTS.filter((project) => project.favorite);\n const other = PICKER_PROJECTS.filter((project) => !project.favorite);\n const groups: ProjectOptionGroup[] = [];\n if (favorite.length) {\n groups.push({\n id: \"g-fav\",\n name: \"Favorite\",\n options: toProjectOptions(favorite),\n });\n }\n if (other.length) {\n groups.push({\n id: \"g-other\",\n name: \"Other\",\n options: toProjectOptions(other),\n });\n }\n return groups.length === 1 ? groups[0].options : groups;\n }\n\n const field: keyof PickerProject =\n groupBy === \"labels\"\n ? \"label\"\n : groupBy === \"companies\"\n ? \"client\"\n : groupBy === \"categories\"\n ? \"category\"\n : \"leader\";\n const without =\n groupBy === \"labels\"\n ? \"Without Label\"\n : groupBy === \"companies\"\n ? \"Without Client\"\n : groupBy === \"categories\"\n ? \"Without Category\"\n : \"Without Leader\";\n\n const buckets = new Map<string, PickerProject[]>();\n PICKER_PROJECTS.forEach((project) => {\n const key = (project[field] as string) || without;\n if (!buckets.has(key)) {\n buckets.set(key, []);\n }\n buckets.get(key)?.push(project);\n });\n\n return Array.from(buckets.entries())\n .map(([name, projects]) => ({\n id: `g-${name}`,\n name,\n options: toProjectOptions(projects),\n }))\n .sort((a, b) =>\n a.name === without\n ? 1\n : b.name === without\n ? -1\n : a.name.localeCompare(b.name)\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* Type + visibility option copy */\n/* ------------------------------------------------------------------ */\n\nexport const PORTFOLIO_TYPES: {\n id: PortfolioKind;\n title: string;\n description: string;\n}[] = [\n {\n id: \"custom\",\n title: \"Custom Portfolio\",\n description: \"The projects you pick by hand. Nothing joins automatically.\",\n },\n {\n id: \"client\",\n title: \"Client Portfolio\",\n description:\n \"All projects for a client company. New ones join automatically.\",\n },\n {\n id: \"leader\",\n title: \"Project Leader Portfolio\",\n description: \"All projects led by a person. New ones join automatically.\",\n },\n {\n id: \"category\",\n title: \"Category Portfolio\",\n description:\n \"All projects in a project category. New ones join automatically.\",\n },\n];\n\nexport const VISIBILITY_OPTIONS: {\n id: PortfolioVisibility;\n title: string;\n description: string;\n}[] = [\n {\n id: \"everyone\",\n title: \"Visible to Everyone\",\n description:\n \"Anyone who can use portfolios sees this one. They still only see the projects they already have access to.\",\n },\n {\n id: \"me\",\n title: \"Visible Only to Me\",\n description: \"Nobody else sees this portfolio.\",\n },\n];\n\nexport const contextFieldLabel = (type: PortfolioKind): string =>\n type === \"custom\"\n ? \"Projects\"\n : type === \"category\"\n ? \"Category\"\n : type === \"client\"\n ? \"Client\"\n : \"Project Leader\";\n\nexport const leaderShortName = (name: string): string =>\n LEADERS_LIST.find((leader) => leader.name === name)?.short ?? name;\n\n/* Default names: \"{Category} Projects\", \"{Client} Projects\", \"Lead by {N.}\". */\nexport const defaultPortfolioName = (\n type: PortfolioKind,\n context: string\n): string => {\n if (!context) return \"\";\n if (type === \"category\" || type === \"client\") return `${context} Projects`;\n if (type === \"leader\") return `Lead by ${leaderShortName(context)}`;\n return \"\";\n};\n\n/* ------------------------------------------------------------------ */\n/* Validation (shared by create step 2 and the edit dialog) */\n/* ------------------------------------------------------------------ */\n\n/** Name is required; a custom portfolio needs at least one project, a context\n portfolio needs its context chosen. Same rule for create and edit. */\nexport const isPortfolioDetailsValid = (values: PortfolioFormValues): boolean =>\n values.name.trim().length > 0 &&\n (values.type === \"custom\"\n ? values.projectIds.length > 0\n : Boolean(values.context));\n\n/* ------------------------------------------------------------------ */\n/* Pickers */\n/* ------------------------------------------------------------------ */\n\n/* Group-by control: the SortGeneralIcon button the Invite-to-Projects picker\n shows as the search bar's right-side adornment. Controls grouping, not sort. */\nconst ProjectsGroupBy = ({\n selected,\n onChange,\n}: {\n selected: GroupBy;\n onChange: (groupBy: GroupBy) => void;\n}): ReactElement => (\n <Select\n keepSameOptionsOrder\n disableSearch\n disabledInternalSort\n forceCloseMenu\n position=\"bottom-end\"\n selected={selected}\n onChange={(value) => onChange(value as GroupBy)}\n options={GROUP_BY_OPTIONS}\n target={\n <IconButton type=\"button\" variant=\"text gray\">\n <SortGeneralIcon />\n </IconButton>\n }\n />\n);\n\nconst ProjectsPicker = ({\n selected,\n onChange,\n groupBy,\n onGroupBy,\n invalid,\n}: {\n selected: string[];\n onChange: (ids: string[]) => void;\n groupBy: GroupBy;\n onGroupBy: (groupBy: GroupBy) => void;\n invalid?: boolean;\n}): ReactElement => {\n const options = useMemo(() => groupPickerProjects(groupBy), [groupBy]);\n const count = selected.length;\n const triggerText =\n count === 0\n ? \"Choose projects\"\n : count === 1\n ? \"1 project selected\"\n : `${count} projects selected`;\n return (\n <Select\n type=\"multiple\"\n options={options}\n selected={selected}\n onChange={(value) => onChange(value as string[])}\n noResultText=\"No results\"\n endAdornment={<ProjectsGroupBy selected={groupBy} onChange={onGroupBy} />}\n target={\n <SelectTrigger\n id=\"pf-projects\"\n className=\"pf-trigger\"\n invalid={invalid}\n typographyProps={{ color: count > 0 ? \"primary\" : \"quaternary\" }}\n >\n {triggerText}\n </SelectTrigger>\n }\n />\n );\n};\n\nconst ContextPicker = ({\n type,\n value,\n onChange,\n invalid,\n}: {\n type: PortfolioKind;\n value?: string;\n onChange: (value: string) => void;\n invalid?: boolean;\n}): ReactElement => {\n const options =\n type === \"category\"\n ? CATEGORIES.map((name) => ({ id: name, name }))\n : type === \"client\"\n ? CLIENTS.map((name) => ({ id: name, name }))\n : LEADERS_LIST.map((leader) => ({ id: leader.name, name: leader.name }));\n const placeholder =\n type === \"category\"\n ? \"Choose a category\"\n : type === \"client\"\n ? \"Choose a client\"\n : \"Choose a project leader\";\n return (\n <Select\n forceCloseMenu\n options={options}\n selected={value ?? \"\"}\n onChange={(next) => onChange(String(next))}\n target={\n <SelectTrigger\n id=\"pf-context\"\n className=\"pf-trigger\"\n invalid={invalid}\n typographyProps={{ color: value ? \"primary\" : \"quaternary\" }}\n >\n {value ?? placeholder}\n </SelectTrigger>\n }\n />\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* The reusable form body */\n/* ------------------------------------------------------------------ */\n\nconst StyledDetailsForm = styled.div`\n display: flex;\n flex-direction: column;\n gap: 24px;\n\n .field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n /* DS form controls are fixed-width (Input 360px, SelectTrigger 300px); let\n them fill the dialog column instead. */\n .field .c-input-wrapper {\n width: 100%;\n }\n\n .field .pf-trigger {\n width: 100%;\n }\n`;\n\nexport interface PortfolioDetailsFieldsProps {\n values: PortfolioFormValues;\n onName: (value: string) => void;\n onContext: (value: string) => void;\n onProjects: (ids: string[]) => void;\n onGroupBy: (groupBy: GroupBy) => void;\n onVisibility: (value: PortfolioVisibility) => void;\n /* Form pattern (propagating through the app): the submit button is ALWAYS\n enabled. On submit the consumer flips showErrors; each field then outlines\n itself (aria-invalid) while it is invalid, and clears once it becomes\n valid. No field disables submit. */\n showErrors: boolean;\n}\n\n/** Name + the type's picker + visibility. No Dialog wrappers and no action\n button — the consumer (create step or edit dialog) supplies those. */\nexport const PortfolioDetailsFields = ({\n values,\n onName,\n onContext,\n onProjects,\n onGroupBy,\n onVisibility,\n showErrors,\n}: PortfolioDetailsFieldsProps): ReactElement => {\n const { type, name, context, projectIds, groupBy, visibility } = values;\n const nameInvalid = showErrors && name.trim().length === 0;\n const pickerInvalid =\n showErrors && (type === \"custom\" ? projectIds.length === 0 : !context);\n\n return (\n <StyledDetailsForm>\n <div className=\"field\">\n <Label htmlFor=\"pf-name\">Name</Label>\n <Input\n id=\"pf-name\"\n value={name}\n placeholder=\"Portfolio name\"\n invalid={nameInvalid}\n onChange={(event) => onName(event.target.value)}\n />\n </div>\n <div className=\"field\">\n <Label htmlFor={type === \"custom\" ? \"pf-projects\" : \"pf-context\"}>\n {contextFieldLabel(type)}\n </Label>\n {type === \"custom\" ? (\n <ProjectsPicker\n selected={projectIds}\n onChange={onProjects}\n groupBy={groupBy}\n onGroupBy={onGroupBy}\n invalid={pickerInvalid}\n />\n ) : (\n <ContextPicker\n type={type}\n value={context}\n onChange={onContext}\n invalid={pickerInvalid}\n />\n )}\n </div>\n <div className=\"field\">\n <RadioGroup\n label=\"Visibility\"\n variant=\"plain\"\n value={visibility}\n onChange={(value) => onVisibility(value as PortfolioVisibility)}\n options={VISIBILITY_OPTIONS.map((option) => ({\n id: option.id,\n name: option.title,\n description: option.description,\n }))}\n />\n </div>\n </StyledDetailsForm>\n );\n};\n\nPortfolioDetailsFields.displayName = \"PortfolioDetailsFields\";\n\n/* ------------------------------------------------------------------ */\n/* Edit Portfolio dialog — the create wizard's step 2, on its own */\n/* ------------------------------------------------------------------ */\n\nexport interface EditPortfolioDialogProps {\n open: boolean;\n /** The portfolio's current values; the dialog seeds itself from these on\n open, so Cancel discards edits and Save commits them. */\n initialValues: PortfolioFormValues;\n onClose: () => void;\n onSave?: (values: PortfolioFormValues) => void;\n}\n\n/*\n Same fields, same validation as create step 2. The type is fixed to the\n portfolio's kind (edit changes the details, not the kind), so there is no\n type radio here — only the name, the type's picker, and visibility.\n*/\nexport const EditPortfolioDialog = ({\n open,\n initialValues,\n onClose,\n onSave,\n}: EditPortfolioDialogProps): ReactElement => {\n const [values, setValues] = useState<PortfolioFormValues>(initialValues);\n const [showErrors, setShowErrors] = useState(false);\n\n /* Re-seed from the portfolio each time the dialog opens. */\n useEffect(() => {\n if (open) {\n setValues(initialValues);\n setShowErrors(false);\n }\n // Seed on open only — initialValues is read at that moment by design.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const patch = (next: Partial<PortfolioFormValues>): void =>\n setValues((current) => ({ ...current, ...next }));\n\n const handleSave = (): void => {\n if (!isPortfolioDetailsValid(values)) {\n setShowErrors(true);\n return;\n }\n onSave?.(values);\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={onClose} disableCloseOnEsc>\n <Dialog.Title>Edit Portfolio</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <PortfolioDetailsFields\n values={values}\n onName={(name) => patch({ name })}\n onContext={(context) => patch({ context })}\n onProjects={(projectIds) => patch({ projectIds })}\n onGroupBy={(groupBy) => patch({ groupBy })}\n onVisibility={(visibility) => patch({ visibility })}\n showErrors={showErrors}\n />\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button\n variant=\"primary\"\n style={{ marginRight: \"12px\" }}\n onClick={handleSave}\n >\n Save Changes\n </Button>\n <Button variant=\"secondary\" data-action=\"cancel\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n );\n};\n\nEditPortfolioDialog.displayName = \"EditPortfolioDialog\";\n"],"mappings":"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","ignoreList":[]}
|