@activecollab/components 2.0.363 → 2.0.364
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/presentation/stackedCard/content/ImageCard.js +60 -0
- package/dist/cjs/presentation/stackedCard/content/ImageCard.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/content/LinkCard.js +348 -0
- package/dist/cjs/presentation/stackedCard/content/LinkCard.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/content/NoteCard.js +92 -0
- package/dist/cjs/presentation/stackedCard/content/NoteCard.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/content/SwatchCard.js +74 -0
- package/dist/cjs/presentation/stackedCard/content/SwatchCard.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/content/TaskCard.js +231 -0
- package/dist/cjs/presentation/stackedCard/content/TaskCard.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/content/index.js +83 -0
- package/dist/cjs/presentation/stackedCard/content/index.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/content/shared.js +144 -0
- package/dist/cjs/presentation/stackedCard/content/shared.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/content/unfurl.js +172 -0
- package/dist/cjs/presentation/stackedCard/content/unfurl.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/primitives.js +254 -0
- package/dist/cjs/presentation/stackedCard/primitives.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/resizePolicy.js +183 -0
- package/dist/cjs/presentation/stackedCard/resizePolicy.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/shell.js +165 -0
- package/dist/cjs/presentation/stackedCard/shell.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/storyScaffold.js +72 -0
- package/dist/cjs/presentation/stackedCard/storyScaffold.js.map +1 -0
- package/dist/cjs/presentation/stackedCard/useInlineEdit.js +208 -0
- package/dist/cjs/presentation/stackedCard/useInlineEdit.js.map +1 -0
- package/dist/esm/presentation/stackedCard/content/ImageCard.d.ts +15 -0
- package/dist/esm/presentation/stackedCard/content/ImageCard.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/content/ImageCard.js +50 -0
- package/dist/esm/presentation/stackedCard/content/ImageCard.js.map +1 -0
- package/dist/esm/presentation/stackedCard/content/LinkCard.d.ts +28 -0
- package/dist/esm/presentation/stackedCard/content/LinkCard.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/content/LinkCard.js +336 -0
- package/dist/esm/presentation/stackedCard/content/LinkCard.js.map +1 -0
- package/dist/esm/presentation/stackedCard/content/NoteCard.d.ts +10 -0
- package/dist/esm/presentation/stackedCard/content/NoteCard.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/content/NoteCard.js +82 -0
- package/dist/esm/presentation/stackedCard/content/NoteCard.js.map +1 -0
- package/dist/esm/presentation/stackedCard/content/SwatchCard.d.ts +14 -0
- package/dist/esm/presentation/stackedCard/content/SwatchCard.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/content/SwatchCard.js +64 -0
- package/dist/esm/presentation/stackedCard/content/SwatchCard.js.map +1 -0
- package/dist/esm/presentation/stackedCard/content/TaskCard.d.ts +29 -0
- package/dist/esm/presentation/stackedCard/content/TaskCard.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/content/TaskCard.js +218 -0
- package/dist/esm/presentation/stackedCard/content/TaskCard.js.map +1 -0
- package/dist/esm/presentation/stackedCard/content/index.d.ts +8 -0
- package/dist/esm/presentation/stackedCard/content/index.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/content/index.js +8 -0
- package/dist/esm/presentation/stackedCard/content/index.js.map +1 -0
- package/dist/esm/presentation/stackedCard/content/shared.d.ts +46 -0
- package/dist/esm/presentation/stackedCard/content/shared.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/content/shared.js +134 -0
- package/dist/esm/presentation/stackedCard/content/shared.js.map +1 -0
- package/dist/esm/presentation/stackedCard/content/unfurl.d.ts +89 -0
- package/dist/esm/presentation/stackedCard/content/unfurl.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/content/unfurl.js +147 -0
- package/dist/esm/presentation/stackedCard/content/unfurl.js.map +1 -0
- package/dist/esm/presentation/stackedCard/primitives.d.ts +84 -0
- package/dist/esm/presentation/stackedCard/primitives.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/primitives.js +241 -0
- package/dist/esm/presentation/stackedCard/primitives.js.map +1 -0
- package/dist/esm/presentation/stackedCard/resizePolicy.d.ts +97 -0
- package/dist/esm/presentation/stackedCard/resizePolicy.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/resizePolicy.js +173 -0
- package/dist/esm/presentation/stackedCard/resizePolicy.js.map +1 -0
- package/dist/esm/presentation/stackedCard/shell.d.ts +46 -0
- package/dist/esm/presentation/stackedCard/shell.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/shell.js +156 -0
- package/dist/esm/presentation/stackedCard/shell.js.map +1 -0
- package/dist/esm/presentation/stackedCard/storyScaffold.d.ts +28 -0
- package/dist/esm/presentation/stackedCard/storyScaffold.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/storyScaffold.js +66 -0
- package/dist/esm/presentation/stackedCard/storyScaffold.js.map +1 -0
- package/dist/esm/presentation/stackedCard/useInlineEdit.d.ts +68 -0
- package/dist/esm/presentation/stackedCard/useInlineEdit.d.ts.map +1 -0
- package/dist/esm/presentation/stackedCard/useInlineEdit.js +192 -0
- package/dist/esm/presentation/stackedCard/useInlineEdit.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ImageSkeleton = exports.ImagePlaceholder = exports.ImageCard = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _shared = require("./shared");
|
|
9
|
+
var _Icons = require("../../../components/Icons");
|
|
10
|
+
var _Loaders = require("../../../components/Loaders");
|
|
11
|
+
var _primitives = require("../primitives");
|
|
12
|
+
var _shell = require("../shell");
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
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); }
|
|
15
|
+
/**
|
|
16
|
+
* ImageCard — a full-bleed image and little else. Cover-management controls
|
|
17
|
+
* (collapse, remove) appear on hover; there is no other chrome. Fixed-box in
|
|
18
|
+
* production (host sets width AND height, the cover scales aspect-locked); shown
|
|
19
|
+
* here in the auto-height shell with a reserved image aspect ratio.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
var ImageCard = exports.ImageCard = function ImageCard(_ref) {
|
|
23
|
+
var _ref$color = _ref.color,
|
|
24
|
+
color = _ref$color === void 0 ? "#F0997B" : _ref$color,
|
|
25
|
+
src = _ref.src;
|
|
26
|
+
return /*#__PURE__*/_react.default.createElement(_primitives.Cover, {
|
|
27
|
+
aspectRatio: _shell.COVER_RATIO_IMAGE,
|
|
28
|
+
topRightSlot: (0, _shared.coverManagement)({
|
|
29
|
+
removeLabel: "Remove image"
|
|
30
|
+
})
|
|
31
|
+
}, src ? /*#__PURE__*/_react.default.createElement("img", {
|
|
32
|
+
src: src,
|
|
33
|
+
alt: ""
|
|
34
|
+
}) : /*#__PURE__*/_react.default.createElement(_shared.StyledColorCover, {
|
|
35
|
+
$color: color
|
|
36
|
+
}));
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/* ---- placeholder + skeleton ---- */
|
|
40
|
+
|
|
41
|
+
/* The placeholder doubles as the drop target (visual only here). */
|
|
42
|
+
var ImagePlaceholder = exports.ImagePlaceholder = function ImagePlaceholder(props) {
|
|
43
|
+
return /*#__PURE__*/_react.default.createElement(_shared.Placeholder, _extends({
|
|
44
|
+
icon: /*#__PURE__*/_react.default.createElement(_Icons.UploadIcon, null),
|
|
45
|
+
label: "Drop an image or click to upload",
|
|
46
|
+
height: 168,
|
|
47
|
+
dashed: true
|
|
48
|
+
}, props));
|
|
49
|
+
};
|
|
50
|
+
var ImageSkeleton = exports.ImageSkeleton = function ImageSkeleton() {
|
|
51
|
+
return /*#__PURE__*/_react.default.createElement(_primitives.Cover, {
|
|
52
|
+
aspectRatio: _shell.COVER_RATIO_IMAGE
|
|
53
|
+
}, /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
54
|
+
style: {
|
|
55
|
+
width: "100%",
|
|
56
|
+
height: "100%"
|
|
57
|
+
}
|
|
58
|
+
}));
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=ImageCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageCard.js","names":["_react","_interopRequireDefault","require","_shared","_Icons","_Loaders","_primitives","_shell","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","ImageCard","exports","_ref","_ref$color","color","src","createElement","Cover","aspectRatio","COVER_RATIO_IMAGE","topRightSlot","coverManagement","removeLabel","alt","StyledColorCover","$color","ImagePlaceholder","props","Placeholder","icon","UploadIcon","label","height","dashed","ImageSkeleton","SkeletonLoader","style","width"],"sources":["../../../../../src/presentation/stackedCard/content/ImageCard.tsx"],"sourcesContent":["import React, { ReactElement } from \"react\";\n\nimport { StyledColorCover, coverManagement, Placeholder } from \"./shared\";\nimport { UploadIcon } from \"../../../components/Icons\";\nimport { SkeletonLoader } from \"../../../components/Loaders\";\nimport { Cover } from \"../primitives\";\nimport { COVER_RATIO_IMAGE } from \"../shell\";\n\n/**\n * ImageCard — a full-bleed image and little else. Cover-management controls\n * (collapse, remove) appear on hover; there is no other chrome. Fixed-box in\n * production (host sets width AND height, the cover scales aspect-locked); shown\n * here in the auto-height shell with a reserved image aspect ratio.\n */\n\nexport interface ImageCardProps {\n color?: string;\n src?: string;\n}\n\nexport const ImageCard = ({\n color = \"#F0997B\",\n src,\n}: ImageCardProps): ReactElement => (\n <Cover\n aspectRatio={COVER_RATIO_IMAGE}\n topRightSlot={coverManagement({ removeLabel: \"Remove image\" })}\n >\n {src ? <img src={src} alt=\"\" /> : <StyledColorCover $color={color} />}\n </Cover>\n);\n\n/* ---- placeholder + skeleton ---- */\n\n/* The placeholder doubles as the drop target (visual only here). */\nexport const ImagePlaceholder = (\n props: React.ButtonHTMLAttributes<HTMLButtonElement>\n): ReactElement => (\n <Placeholder\n icon={<UploadIcon />}\n label=\"Drop an image or click to upload\"\n height={168}\n dashed\n {...props}\n />\n);\n\nexport const ImageSkeleton = (): ReactElement => (\n <Cover aspectRatio={COVER_RATIO_IMAGE}>\n <SkeletonLoader style={{ width: \"100%\", height: \"100%\" }} />\n </Cover>\n);\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAA6C,SAAAD,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,SAAA,WAAAA,QAAA,GAAAC,MAAA,CAAAC,MAAA,GAAAD,MAAA,CAAAC,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAP,CAAA,MAAAA,CAAA,GAAAQ,SAAA,CAAAC,MAAA,EAAAT,CAAA,UAAAU,CAAA,GAAAF,SAAA,CAAAR,CAAA,YAAAW,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAJ,QAAA,CAAAW,KAAA,OAAAN,SAAA;AAE7C;AACA;AACA;AACA;AACA;AACA;;AAOO,IAAMO,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG,SAAZA,SAASA,CAAAE,IAAA;EAAA,IAAAC,UAAA,GAAAD,IAAA,CACpBE,KAAK;IAALA,KAAK,GAAAD,UAAA,cAAG,SAAS,GAAAA,UAAA;IACjBE,GAAG,GAAAH,IAAA,CAAHG,GAAG;EAAA,oBAEH5B,MAAA,CAAAU,OAAA,CAAAmB,aAAA,CAACvB,WAAA,CAAAwB,KAAK;IACJC,WAAW,EAAEC,wBAAkB;IAC/BC,YAAY,EAAE,IAAAC,uBAAe,EAAC;MAAEC,WAAW,EAAE;IAAe,CAAC;EAAE,GAE9DP,GAAG,gBAAG5B,MAAA,CAAAU,OAAA,CAAAmB,aAAA;IAAKD,GAAG,EAAEA,GAAI;IAACQ,GAAG,EAAC;EAAE,CAAE,CAAC,gBAAGpC,MAAA,CAAAU,OAAA,CAAAmB,aAAA,CAAC1B,OAAA,CAAAkC,gBAAgB;IAACC,MAAM,EAAEX;EAAM,CAAE,CAC/D,CAAC;AAAA,CACT;;AAED;;AAEA;AACO,IAAMY,gBAAgB,GAAAf,OAAA,CAAAe,gBAAA,GAAG,SAAnBA,gBAAgBA,CAC3BC,KAAoD;EAAA,oBAEpDxC,MAAA,CAAAU,OAAA,CAAAmB,aAAA,CAAC1B,OAAA,CAAAsC,WAAW,EAAA9B,QAAA;IACV+B,IAAI,eAAE1C,MAAA,CAAAU,OAAA,CAAAmB,aAAA,CAACzB,MAAA,CAAAuC,UAAU,MAAE,CAAE;IACrBC,KAAK,EAAC,kCAAkC;IACxCC,MAAM,EAAE,GAAI;IACZC,MAAM;EAAA,GACFN,KAAK,CACV,CAAC;AAAA,CACH;AAEM,IAAMO,aAAa,GAAAvB,OAAA,CAAAuB,aAAA,GAAG,SAAhBA,aAAaA,CAAA;EAAA,oBACxB/C,MAAA,CAAAU,OAAA,CAAAmB,aAAA,CAACvB,WAAA,CAAAwB,KAAK;IAACC,WAAW,EAAEC;EAAkB,gBACpChC,MAAA,CAAAU,OAAA,CAAAmB,aAAA,CAACxB,QAAA,CAAA2C,cAAc;IAACC,KAAK,EAAE;MAAEC,KAAK,EAAE,MAAM;MAAEL,MAAM,EAAE;IAAO;EAAE,CAAE,CACtD,CAAC;AAAA,CACT","ignoreList":[]}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.LinkSkeleton = exports.LinkPlaceholder = exports.LinkCard = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
|
+
var _shared = require("./shared");
|
|
10
|
+
var _unfurl = require("./unfurl");
|
|
11
|
+
var _Icons = require("../../../components/Icons");
|
|
12
|
+
var _Loaders = require("../../../components/Loaders");
|
|
13
|
+
var _Typography = require("../../../components/Typography");
|
|
14
|
+
var _Typography2 = require("../../../components/Typography/Typography");
|
|
15
|
+
var _primitives = require("../primitives");
|
|
16
|
+
var _shell = require("../shell");
|
|
17
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
+
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); }
|
|
19
|
+
/**
|
|
20
|
+
* LinkCard — a link preview as a LIFECYCLE, not two static layouts.
|
|
21
|
+
*
|
|
22
|
+
* Data climbs a progressive ladder (url → basic → full); the anatomy is
|
|
23
|
+
* CONSTANT at every tier, so each slot swaps a skeleton for real content in
|
|
24
|
+
* place and the card never reflows on upgrade. Four statuses layer on top:
|
|
25
|
+
* resolving — climbing the ladder, aspect + rows reserved by skeletons
|
|
26
|
+
* resolved — the full card
|
|
27
|
+
* stale — resolved, but past its cache window: shows `fetchedAt` and a
|
|
28
|
+
* re-unfurl affordance
|
|
29
|
+
* error — the unfurl failed: favicon + raw URL + retry, NO media
|
|
30
|
+
*
|
|
31
|
+
* Compact ↔ expanded is a user-switchable DISPLAY LEVEL on the same link
|
|
32
|
+
* entity (the data lives in the controller, so switching never refetches or
|
|
33
|
+
* loses it) — not two separate card types.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/* ------------------------------------------------------------------ */
|
|
37
|
+
/* Small building blocks */
|
|
38
|
+
/* ------------------------------------------------------------------ */
|
|
39
|
+
|
|
40
|
+
var StyledDomainRow = _styledComponents.default.div.withConfig({
|
|
41
|
+
displayName: "LinkCard__StyledDomainRow",
|
|
42
|
+
componentId: "sc-qyea73-0"
|
|
43
|
+
})(["display:flex;align-items:center;gap:8px;min-height:16px;"]);
|
|
44
|
+
var StyledChips = _styledComponents.default.div.withConfig({
|
|
45
|
+
displayName: "LinkCard__StyledChips",
|
|
46
|
+
componentId: "sc-qyea73-1"
|
|
47
|
+
})(["display:flex;align-items:center;gap:6px;min-height:18px;"]);
|
|
48
|
+
|
|
49
|
+
/* The stale strip — a re-unfurl affordance with the fetch time. */
|
|
50
|
+
var StyledStaleStrip = _styledComponents.default.div.withConfig({
|
|
51
|
+
displayName: "LinkCard__StyledStaleStrip",
|
|
52
|
+
componentId: "sc-qyea73-2"
|
|
53
|
+
})(["display:flex;align-items:center;gap:8px;color:var(--color-theme-600);> span{flex:1 1 auto;min-width:0;}"]);
|
|
54
|
+
var StyledReunfurl = _styledComponents.default.button.withConfig({
|
|
55
|
+
displayName: "LinkCard__StyledReunfurl",
|
|
56
|
+
componentId: "sc-qyea73-3"
|
|
57
|
+
})(["display:inline-flex;align-items:center;gap:4px;flex:0 0 auto;padding:3px 8px;border:1px solid var(--border-primary);border-radius:6px;background:var(--page-paper-main);color:var(--color-theme-800);font-size:11px;cursor:pointer;svg{width:12px;height:12px;}&:hover{background:var(--color-theme-200);border-color:var(--sc-selection-ring);}"]);
|
|
58
|
+
|
|
59
|
+
/* The error body — favicon + raw URL + retry, no media (per spec §5). */
|
|
60
|
+
var StyledErrorBody = _styledComponents.default.div.withConfig({
|
|
61
|
+
displayName: "LinkCard__StyledErrorBody",
|
|
62
|
+
componentId: "sc-qyea73-4"
|
|
63
|
+
})(["display:flex;flex-direction:column;gap:10px;padding:12px;.err-head{display:flex;align-items:center;gap:8px;color:var(--red-alert);}.err-head svg{width:16px;height:16px;flex:0 0 auto;}.err-url{display:flex;align-items:center;gap:8px;word-break:break-all;}"]);
|
|
64
|
+
var StyledRetry = _styledComponents.default.button.withConfig({
|
|
65
|
+
displayName: "LinkCard__StyledRetry",
|
|
66
|
+
componentId: "sc-qyea73-5"
|
|
67
|
+
})(["align-self:flex-start;display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--border-primary);border-radius:6px;background:var(--page-paper-main);color:var(--color-theme-800);cursor:pointer;svg{width:14px;height:14px;}&:hover{background:var(--color-theme-200);border-color:var(--sc-selection-ring);}"]);
|
|
68
|
+
|
|
69
|
+
/* The expanded footer band — tinted, holds the title + domain under the hero. */
|
|
70
|
+
var StyledFooterTitle = (0, _styledComponents.default)(_Typography.Body2).withConfig({
|
|
71
|
+
displayName: "LinkCard__StyledFooterTitle",
|
|
72
|
+
componentId: "sc-qyea73-6"
|
|
73
|
+
})(["display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;"]);
|
|
74
|
+
|
|
75
|
+
/* ------------------------------------------------------------------ */
|
|
76
|
+
/* The display-level switch — lives in the entity "…" slot */
|
|
77
|
+
/* ------------------------------------------------------------------ */
|
|
78
|
+
|
|
79
|
+
var StyledDisplayToggle = _styledComponents.default.button.withConfig({
|
|
80
|
+
displayName: "LinkCard__StyledDisplayToggle",
|
|
81
|
+
componentId: "sc-qyea73-7"
|
|
82
|
+
})(["display:inline-flex;align-items:center;padding:2px 8px;border:1px solid var(--border-primary);border-radius:10px;background:var(--color-theme-200);color:var(--color-theme-700);font-size:11px;cursor:pointer;white-space:nowrap;&:hover{background:var(--color-theme-300);}"]);
|
|
83
|
+
var DisplayToggle = function DisplayToggle(_ref) {
|
|
84
|
+
var display = _ref.display,
|
|
85
|
+
onToggle = _ref.onToggle;
|
|
86
|
+
return /*#__PURE__*/_react.default.createElement(StyledDisplayToggle, {
|
|
87
|
+
type: "button",
|
|
88
|
+
"data-fixed": true,
|
|
89
|
+
className: "sc-control",
|
|
90
|
+
"aria-label": "Switch display level",
|
|
91
|
+
onClick: onToggle
|
|
92
|
+
}, display === "compact" ? "Expand ▾" : "Compact ▴");
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/* ------------------------------------------------------------------ */
|
|
96
|
+
/* LinkCard */
|
|
97
|
+
/* ------------------------------------------------------------------ */
|
|
98
|
+
|
|
99
|
+
var LinkCard = exports.LinkCard = function LinkCard(_ref2) {
|
|
100
|
+
var _data$heroColor2, _data$faviconColor2;
|
|
101
|
+
var unfurl = _ref2.unfurl,
|
|
102
|
+
_ref2$display = _ref2.display,
|
|
103
|
+
display = _ref2$display === void 0 ? "compact" : _ref2$display,
|
|
104
|
+
onToggleDisplay = _ref2.onToggleDisplay;
|
|
105
|
+
var status = unfurl.status,
|
|
106
|
+
tier = unfurl.tier,
|
|
107
|
+
data = unfurl.data,
|
|
108
|
+
fetchedAt = unfurl.fetchedAt,
|
|
109
|
+
retry = unfurl.retry,
|
|
110
|
+
reunfurl = unfurl.reunfurl;
|
|
111
|
+
|
|
112
|
+
// ── Error: favicon + raw URL + retry, no media ──────────────────
|
|
113
|
+
if (status === "error") {
|
|
114
|
+
return /*#__PURE__*/_react.default.createElement(StyledErrorBody, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
115
|
+
className: "err-head"
|
|
116
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.WarningTriangleIcon, null), /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
117
|
+
weight: "bold",
|
|
118
|
+
color: "tertiary"
|
|
119
|
+
}, "Couldn\u2019t load a preview")), /*#__PURE__*/_react.default.createElement("div", {
|
|
120
|
+
className: "err-url"
|
|
121
|
+
}, /*#__PURE__*/_react.default.createElement(_shared.StyledFavicon, {
|
|
122
|
+
$bg: "var(--color-theme-400)",
|
|
123
|
+
"data-fixed": true
|
|
124
|
+
}), /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
125
|
+
color: "secondary"
|
|
126
|
+
}, data.url)), /*#__PURE__*/_react.default.createElement(StyledRetry, {
|
|
127
|
+
type: "button",
|
|
128
|
+
onClick: retry
|
|
129
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.ArrowRefreshIcon, null), /*#__PURE__*/_react.default.createElement(_Typography2.Typography, {
|
|
130
|
+
as: "span",
|
|
131
|
+
variant: "Caption 1"
|
|
132
|
+
}, "Retry")));
|
|
133
|
+
}
|
|
134
|
+
var hasBasic = tier === "basic" || tier === "full";
|
|
135
|
+
var hasFull = tier === "full";
|
|
136
|
+
var toggle = onToggleDisplay !== null && onToggleDisplay !== void 0 ? onToggleDisplay : function () {
|
|
137
|
+
return undefined;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// ── Expanded: hero + tinted footer band (title + domain) ────────
|
|
141
|
+
if (display === "expanded") {
|
|
142
|
+
var _data$heroColor, _data$faviconColor;
|
|
143
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_primitives.Cover, {
|
|
144
|
+
aspectRatio: _shell.COVER_RATIO_HERO,
|
|
145
|
+
centerSlot: hasFull && data.playable ? _shared.playControl : undefined,
|
|
146
|
+
topRightSlot: (0, _shared.coverManagement)()
|
|
147
|
+
}, hasFull ? /*#__PURE__*/_react.default.createElement(_shared.StyledColorCover, {
|
|
148
|
+
$color: (_data$heroColor = data.heroColor) !== null && _data$heroColor !== void 0 ? _data$heroColor : "#1D9E75"
|
|
149
|
+
}) : /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
150
|
+
style: {
|
|
151
|
+
width: "100%",
|
|
152
|
+
height: "100%"
|
|
153
|
+
}
|
|
154
|
+
})), /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
155
|
+
role: "footer",
|
|
156
|
+
direction: "column",
|
|
157
|
+
background: "var(--color-theme-200)"
|
|
158
|
+
}, /*#__PURE__*/_react.default.createElement(StyledDomainRow, null, hasBasic ? /*#__PURE__*/_react.default.createElement(_shared.StyledFavicon, {
|
|
159
|
+
$bg: (_data$faviconColor = data.faviconColor) !== null && _data$faviconColor !== void 0 ? _data$faviconColor : "#0F6E56",
|
|
160
|
+
"data-fixed": true
|
|
161
|
+
}) : /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
162
|
+
"data-fixed": true,
|
|
163
|
+
style: {
|
|
164
|
+
width: 16,
|
|
165
|
+
height: 16,
|
|
166
|
+
borderRadius: 4
|
|
167
|
+
}
|
|
168
|
+
}), hasBasic ? /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
169
|
+
color: "tertiary"
|
|
170
|
+
}, data.domain) : /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
171
|
+
color: "tertiary"
|
|
172
|
+
}, data.url), /*#__PURE__*/_react.default.createElement("span", {
|
|
173
|
+
style: {
|
|
174
|
+
flex: "1 1 auto"
|
|
175
|
+
}
|
|
176
|
+
}), /*#__PURE__*/_react.default.createElement(DisplayToggle, {
|
|
177
|
+
display: display,
|
|
178
|
+
onToggle: toggle
|
|
179
|
+
})), hasBasic ? /*#__PURE__*/_react.default.createElement(StyledFooterTitle, {
|
|
180
|
+
weight: "bold"
|
|
181
|
+
}, data.title) : /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
182
|
+
style: {
|
|
183
|
+
height: 14,
|
|
184
|
+
width: "90%"
|
|
185
|
+
}
|
|
186
|
+
}), hasFull ? /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
187
|
+
color: "tertiary"
|
|
188
|
+
}, data.description) : /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
189
|
+
style: {
|
|
190
|
+
height: 10,
|
|
191
|
+
width: "70%"
|
|
192
|
+
}
|
|
193
|
+
})), status === "stale" ? /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
194
|
+
role: "meta"
|
|
195
|
+
}, /*#__PURE__*/_react.default.createElement(StaleStrip, {
|
|
196
|
+
fetchedAt: fetchedAt,
|
|
197
|
+
onReunfurl: reunfurl
|
|
198
|
+
})) : null);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// ── Compact: cover + favicon/domain + title + chips ─────────────
|
|
202
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_primitives.Cover, {
|
|
203
|
+
aspectRatio: _shell.COVER_RATIO,
|
|
204
|
+
centerSlot: hasFull && data.playable ? _shared.playControl : undefined
|
|
205
|
+
}, hasFull ? /*#__PURE__*/_react.default.createElement(_shared.StyledColorCover, {
|
|
206
|
+
$color: (_data$heroColor2 = data.heroColor) !== null && _data$heroColor2 !== void 0 ? _data$heroColor2 : "#1D9E75"
|
|
207
|
+
}) : /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
208
|
+
style: {
|
|
209
|
+
width: "100%",
|
|
210
|
+
height: "100%"
|
|
211
|
+
}
|
|
212
|
+
})), /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
213
|
+
role: "custom"
|
|
214
|
+
}, /*#__PURE__*/_react.default.createElement(StyledDomainRow, null, hasBasic ? /*#__PURE__*/_react.default.createElement(_shared.StyledFavicon, {
|
|
215
|
+
$bg: (_data$faviconColor2 = data.faviconColor) !== null && _data$faviconColor2 !== void 0 ? _data$faviconColor2 : "#0F6E56",
|
|
216
|
+
"data-fixed": true
|
|
217
|
+
}) : /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
218
|
+
"data-fixed": true,
|
|
219
|
+
style: {
|
|
220
|
+
width: 16,
|
|
221
|
+
height: 16,
|
|
222
|
+
borderRadius: 4
|
|
223
|
+
}
|
|
224
|
+
}), hasBasic ? /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
225
|
+
color: "tertiary"
|
|
226
|
+
}, data.domain) : /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
227
|
+
color: "tertiary"
|
|
228
|
+
}, data.url), /*#__PURE__*/_react.default.createElement("span", {
|
|
229
|
+
style: {
|
|
230
|
+
flex: "1 1 auto"
|
|
231
|
+
}
|
|
232
|
+
}), /*#__PURE__*/_react.default.createElement(DisplayToggle, {
|
|
233
|
+
display: display,
|
|
234
|
+
onToggle: toggle
|
|
235
|
+
}))), /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
236
|
+
role: "title"
|
|
237
|
+
}, hasBasic ? /*#__PURE__*/_react.default.createElement(_shared.StyledClamp, null, data.title) : /*#__PURE__*/_react.default.createElement("div", {
|
|
238
|
+
style: {
|
|
239
|
+
width: "100%"
|
|
240
|
+
}
|
|
241
|
+
}, /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
242
|
+
style: {
|
|
243
|
+
height: 14,
|
|
244
|
+
width: "92%"
|
|
245
|
+
}
|
|
246
|
+
}), /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
247
|
+
style: {
|
|
248
|
+
height: 14,
|
|
249
|
+
width: "60%",
|
|
250
|
+
marginTop: 6
|
|
251
|
+
}
|
|
252
|
+
}))), /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
253
|
+
role: "custom"
|
|
254
|
+
}, /*#__PURE__*/_react.default.createElement(StyledChips, null, hasFull ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, data.kind ? /*#__PURE__*/_react.default.createElement(_shared.StyledChip, {
|
|
255
|
+
"data-fixed": true
|
|
256
|
+
}, data.kind) : null, data.duration ? /*#__PURE__*/_react.default.createElement(_shared.StyledChip, {
|
|
257
|
+
"data-fixed": true
|
|
258
|
+
}, data.duration) : null) : /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
259
|
+
style: {
|
|
260
|
+
height: 18,
|
|
261
|
+
width: 96,
|
|
262
|
+
borderRadius: 10
|
|
263
|
+
}
|
|
264
|
+
}))), status === "stale" ? /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
265
|
+
role: "meta"
|
|
266
|
+
}, /*#__PURE__*/_react.default.createElement(StaleStrip, {
|
|
267
|
+
fetchedAt: fetchedAt,
|
|
268
|
+
onReunfurl: reunfurl
|
|
269
|
+
})) : null);
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
/* The stale affordance — fetch time + a manual re-unfurl button. */
|
|
273
|
+
var StaleStrip = function StaleStrip(_ref3) {
|
|
274
|
+
var fetchedAt = _ref3.fetchedAt,
|
|
275
|
+
onReunfurl = _ref3.onReunfurl;
|
|
276
|
+
return /*#__PURE__*/_react.default.createElement(StyledStaleStrip, null, /*#__PURE__*/_react.default.createElement(_Typography2.Typography, {
|
|
277
|
+
as: "span",
|
|
278
|
+
variant: "Caption 1",
|
|
279
|
+
color: "tertiary"
|
|
280
|
+
}, "Preview may be out of date \xB7 fetched ", (0, _unfurl.formatFetchedAt)(fetchedAt)), /*#__PURE__*/_react.default.createElement(StyledReunfurl, {
|
|
281
|
+
type: "button",
|
|
282
|
+
onClick: onReunfurl
|
|
283
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.ArrowRefreshIcon, null), "Re-unfurl"));
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
/* ---- skeleton ---- */
|
|
287
|
+
|
|
288
|
+
/* Mirrors the compact anatomy row for row (this is the `resolving` render at
|
|
289
|
+
tier `url`), so a resolving link never reflows as it climbs the ladder. */
|
|
290
|
+
var LinkSkeleton = exports.LinkSkeleton = function LinkSkeleton() {
|
|
291
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_primitives.Cover, {
|
|
292
|
+
aspectRatio: _shell.COVER_RATIO
|
|
293
|
+
}, /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
294
|
+
style: {
|
|
295
|
+
width: "100%",
|
|
296
|
+
height: "100%"
|
|
297
|
+
}
|
|
298
|
+
})), /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
299
|
+
role: "custom"
|
|
300
|
+
}, /*#__PURE__*/_react.default.createElement(StyledDomainRow, null, /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
301
|
+
"data-fixed": true,
|
|
302
|
+
style: {
|
|
303
|
+
width: 16,
|
|
304
|
+
height: 16,
|
|
305
|
+
borderRadius: 4
|
|
306
|
+
}
|
|
307
|
+
}), /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
308
|
+
style: {
|
|
309
|
+
height: 10,
|
|
310
|
+
width: "40%"
|
|
311
|
+
}
|
|
312
|
+
}))), /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
313
|
+
role: "title"
|
|
314
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
315
|
+
style: {
|
|
316
|
+
width: "100%"
|
|
317
|
+
}
|
|
318
|
+
}, /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
319
|
+
style: {
|
|
320
|
+
height: 14,
|
|
321
|
+
width: "92%"
|
|
322
|
+
}
|
|
323
|
+
}), /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
324
|
+
style: {
|
|
325
|
+
height: 14,
|
|
326
|
+
width: "60%",
|
|
327
|
+
marginTop: 6
|
|
328
|
+
}
|
|
329
|
+
}))), /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
330
|
+
role: "custom"
|
|
331
|
+
}, /*#__PURE__*/_react.default.createElement(StyledChips, null, /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
332
|
+
style: {
|
|
333
|
+
height: 18,
|
|
334
|
+
width: 96,
|
|
335
|
+
borderRadius: 10
|
|
336
|
+
}
|
|
337
|
+
}))));
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
/* ---- placeholder ---- */
|
|
341
|
+
|
|
342
|
+
var LinkPlaceholder = exports.LinkPlaceholder = function LinkPlaceholder(props) {
|
|
343
|
+
return /*#__PURE__*/_react.default.createElement(_shared.Placeholder, _extends({
|
|
344
|
+
icon: /*#__PURE__*/_react.default.createElement(_Icons.InsertLinkIcon, null),
|
|
345
|
+
label: "Add a link"
|
|
346
|
+
}, props));
|
|
347
|
+
};
|
|
348
|
+
//# sourceMappingURL=LinkCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkCard.js","names":["_react","_interopRequireDefault","require","_styledComponents","_shared","_unfurl","_Icons","_Loaders","_Typography","_Typography2","_primitives","_shell","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","StyledDomainRow","styled","div","withConfig","displayName","componentId","StyledChips","StyledStaleStrip","StyledReunfurl","button","StyledErrorBody","StyledRetry","StyledFooterTitle","Body2","StyledDisplayToggle","DisplayToggle","_ref","display","onToggle","createElement","type","className","onClick","LinkCard","exports","_ref2","_data$heroColor2","_data$faviconColor2","unfurl","_ref2$display","onToggleDisplay","status","tier","data","fetchedAt","retry","reunfurl","WarningTriangleIcon","Caption1","weight","color","StyledFavicon","$bg","url","ArrowRefreshIcon","Typography","as","variant","hasBasic","hasFull","toggle","undefined","_data$heroColor","_data$faviconColor","Fragment","Cover","aspectRatio","COVER_RATIO_HERO","centerSlot","playable","playControl","topRightSlot","coverManagement","StyledColorCover","$color","heroColor","SkeletonLoader","style","width","height","StackRow","role","direction","background","faviconColor","borderRadius","domain","flex","title","description","StaleStrip","onReunfurl","COVER_RATIO","StyledClamp","marginTop","kind","StyledChip","duration","_ref3","formatFetchedAt","LinkSkeleton","LinkPlaceholder","props","Placeholder","icon","InsertLinkIcon","label"],"sources":["../../../../../src/presentation/stackedCard/content/LinkCard.tsx"],"sourcesContent":["import React, { ReactElement } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport {\n StyledChip,\n StyledClamp,\n StyledColorCover,\n StyledFavicon,\n coverManagement,\n playControl,\n Placeholder,\n} from \"./shared\";\nimport { UnfurlController, formatFetchedAt } from \"./unfurl\";\nimport {\n ArrowRefreshIcon,\n InsertLinkIcon,\n WarningTriangleIcon,\n} from \"../../../components/Icons\";\nimport { SkeletonLoader } from \"../../../components/Loaders\";\nimport { Body2, Caption1 } from \"../../../components/Typography\";\nimport { Typography } from \"../../../components/Typography/Typography\";\nimport { Cover, StackRow } from \"../primitives\";\nimport { COVER_RATIO, COVER_RATIO_HERO } from \"../shell\";\n\n/**\n * LinkCard — a link preview as a LIFECYCLE, not two static layouts.\n *\n * Data climbs a progressive ladder (url → basic → full); the anatomy is\n * CONSTANT at every tier, so each slot swaps a skeleton for real content in\n * place and the card never reflows on upgrade. Four statuses layer on top:\n * resolving — climbing the ladder, aspect + rows reserved by skeletons\n * resolved — the full card\n * stale — resolved, but past its cache window: shows `fetchedAt` and a\n * re-unfurl affordance\n * error — the unfurl failed: favicon + raw URL + retry, NO media\n *\n * Compact ↔ expanded is a user-switchable DISPLAY LEVEL on the same link\n * entity (the data lives in the controller, so switching never refetches or\n * loses it) — not two separate card types.\n */\n\nexport type LinkDisplay = \"compact\" | \"expanded\";\n\n/* ------------------------------------------------------------------ */\n/* Small building blocks */\n/* ------------------------------------------------------------------ */\n\nconst StyledDomainRow = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 16px;\n`;\n\nconst StyledChips = styled.div`\n display: flex;\n align-items: center;\n gap: 6px;\n min-height: 18px;\n`;\n\n/* The stale strip — a re-unfurl affordance with the fetch time. */\nconst StyledStaleStrip = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--color-theme-600);\n\n > span {\n flex: 1 1 auto;\n min-width: 0;\n }\n`;\n\nconst StyledReunfurl = styled.button`\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex: 0 0 auto;\n padding: 3px 8px;\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n background: var(--page-paper-main);\n color: var(--color-theme-800);\n font-size: 11px;\n cursor: pointer;\n\n svg {\n width: 12px;\n height: 12px;\n }\n\n &:hover {\n background: var(--color-theme-200);\n border-color: var(--sc-selection-ring);\n }\n`;\n\n/* The error body — favicon + raw URL + retry, no media (per spec §5). */\nconst StyledErrorBody = styled.div`\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 12px;\n\n .err-head {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--red-alert);\n }\n\n .err-head svg {\n width: 16px;\n height: 16px;\n flex: 0 0 auto;\n }\n\n .err-url {\n display: flex;\n align-items: center;\n gap: 8px;\n word-break: break-all;\n }\n`;\n\nconst StyledRetry = styled.button`\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 10px;\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n background: var(--page-paper-main);\n color: var(--color-theme-800);\n cursor: pointer;\n\n svg {\n width: 14px;\n height: 14px;\n }\n\n &:hover {\n background: var(--color-theme-200);\n border-color: var(--sc-selection-ring);\n }\n`;\n\n/* The expanded footer band — tinted, holds the title + domain under the hero. */\nconst StyledFooterTitle = styled(Body2)`\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\n\n/* ------------------------------------------------------------------ */\n/* The display-level switch — lives in the entity \"…\" slot */\n/* ------------------------------------------------------------------ */\n\nconst StyledDisplayToggle = styled.button`\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border: 1px solid var(--border-primary);\n border-radius: 10px;\n background: var(--color-theme-200);\n color: var(--color-theme-700);\n font-size: 11px;\n cursor: pointer;\n white-space: nowrap;\n\n &:hover {\n background: var(--color-theme-300);\n }\n`;\n\nconst DisplayToggle = ({\n display,\n onToggle,\n}: {\n display: LinkDisplay;\n onToggle: () => void;\n}): ReactElement => (\n <StyledDisplayToggle\n type=\"button\"\n data-fixed\n className=\"sc-control\"\n aria-label=\"Switch display level\"\n onClick={onToggle}\n >\n {display === \"compact\" ? \"Expand ▾\" : \"Compact ▴\"}\n </StyledDisplayToggle>\n);\n\n/* ------------------------------------------------------------------ */\n/* LinkCard */\n/* ------------------------------------------------------------------ */\n\nexport interface LinkCardProps {\n unfurl: UnfurlController;\n display?: LinkDisplay;\n onToggleDisplay?: () => void;\n}\n\nexport const LinkCard = ({\n unfurl,\n display = \"compact\",\n onToggleDisplay,\n}: LinkCardProps): ReactElement => {\n const { status, tier, data, fetchedAt, retry, reunfurl } = unfurl;\n\n // ── Error: favicon + raw URL + retry, no media ──────────────────\n if (status === \"error\") {\n return (\n <StyledErrorBody>\n <div className=\"err-head\">\n <WarningTriangleIcon />\n <Caption1 weight=\"bold\" color=\"tertiary\">\n Couldn’t load a preview\n </Caption1>\n </div>\n <div className=\"err-url\">\n <StyledFavicon $bg=\"var(--color-theme-400)\" data-fixed />\n <Caption1 color=\"secondary\">{data.url}</Caption1>\n </div>\n <StyledRetry type=\"button\" onClick={retry}>\n <ArrowRefreshIcon />\n <Typography as=\"span\" variant=\"Caption 1\">\n Retry\n </Typography>\n </StyledRetry>\n </StyledErrorBody>\n );\n }\n\n const hasBasic = tier === \"basic\" || tier === \"full\";\n const hasFull = tier === \"full\";\n const toggle = onToggleDisplay ?? (() => undefined);\n\n // ── Expanded: hero + tinted footer band (title + domain) ────────\n if (display === \"expanded\") {\n return (\n <>\n <Cover\n aspectRatio={COVER_RATIO_HERO}\n centerSlot={hasFull && data.playable ? playControl : undefined}\n topRightSlot={coverManagement()}\n >\n {hasFull ? (\n <StyledColorCover $color={data.heroColor ?? \"#1D9E75\"} />\n ) : (\n <SkeletonLoader style={{ width: \"100%\", height: \"100%\" }} />\n )}\n </Cover>\n <StackRow\n role=\"footer\"\n direction=\"column\"\n background=\"var(--color-theme-200)\"\n >\n <StyledDomainRow>\n {hasBasic ? (\n <StyledFavicon $bg={data.faviconColor ?? \"#0F6E56\"} data-fixed />\n ) : (\n <SkeletonLoader\n data-fixed\n style={{ width: 16, height: 16, borderRadius: 4 }}\n />\n )}\n {hasBasic ? (\n <Caption1 color=\"tertiary\">{data.domain}</Caption1>\n ) : (\n <Caption1 color=\"tertiary\">{data.url}</Caption1>\n )}\n <span style={{ flex: \"1 1 auto\" }} />\n <DisplayToggle display={display} onToggle={toggle} />\n </StyledDomainRow>\n {hasBasic ? (\n <StyledFooterTitle weight=\"bold\">{data.title}</StyledFooterTitle>\n ) : (\n <SkeletonLoader style={{ height: 14, width: \"90%\" }} />\n )}\n {hasFull ? (\n <Caption1 color=\"tertiary\">{data.description}</Caption1>\n ) : (\n <SkeletonLoader style={{ height: 10, width: \"70%\" }} />\n )}\n </StackRow>\n {status === \"stale\" ? (\n <StackRow role=\"meta\">\n <StaleStrip fetchedAt={fetchedAt} onReunfurl={reunfurl} />\n </StackRow>\n ) : null}\n </>\n );\n }\n\n // ── Compact: cover + favicon/domain + title + chips ─────────────\n return (\n <>\n <Cover\n aspectRatio={COVER_RATIO}\n centerSlot={hasFull && data.playable ? playControl : undefined}\n >\n {hasFull ? (\n <StyledColorCover $color={data.heroColor ?? \"#1D9E75\"} />\n ) : (\n <SkeletonLoader style={{ width: \"100%\", height: \"100%\" }} />\n )}\n </Cover>\n\n <StackRow role=\"custom\">\n <StyledDomainRow>\n {hasBasic ? (\n <StyledFavicon $bg={data.faviconColor ?? \"#0F6E56\"} data-fixed />\n ) : (\n <SkeletonLoader\n data-fixed\n style={{ width: 16, height: 16, borderRadius: 4 }}\n />\n )}\n {hasBasic ? (\n <Caption1 color=\"tertiary\">{data.domain}</Caption1>\n ) : (\n <Caption1 color=\"tertiary\">{data.url}</Caption1>\n )}\n <span style={{ flex: \"1 1 auto\" }} />\n <DisplayToggle display={display} onToggle={toggle} />\n </StyledDomainRow>\n </StackRow>\n\n <StackRow role=\"title\">\n {hasBasic ? (\n <StyledClamp>{data.title}</StyledClamp>\n ) : (\n <div style={{ width: \"100%\" }}>\n <SkeletonLoader style={{ height: 14, width: \"92%\" }} />\n <SkeletonLoader\n style={{ height: 14, width: \"60%\", marginTop: 6 }}\n />\n </div>\n )}\n </StackRow>\n\n <StackRow role=\"custom\">\n <StyledChips>\n {hasFull ? (\n <>\n {data.kind ? (\n <StyledChip data-fixed>{data.kind}</StyledChip>\n ) : null}\n {data.duration ? (\n <StyledChip data-fixed>{data.duration}</StyledChip>\n ) : null}\n </>\n ) : (\n <SkeletonLoader\n style={{ height: 18, width: 96, borderRadius: 10 }}\n />\n )}\n </StyledChips>\n </StackRow>\n\n {status === \"stale\" ? (\n <StackRow role=\"meta\">\n <StaleStrip fetchedAt={fetchedAt} onReunfurl={reunfurl} />\n </StackRow>\n ) : null}\n </>\n );\n};\n\n/* The stale affordance — fetch time + a manual re-unfurl button. */\nconst StaleStrip = ({\n fetchedAt,\n onReunfurl,\n}: {\n fetchedAt: number | null;\n onReunfurl: () => void;\n}): ReactElement => (\n <StyledStaleStrip>\n <Typography as=\"span\" variant=\"Caption 1\" color=\"tertiary\">\n Preview may be out of date · fetched {formatFetchedAt(fetchedAt)}\n </Typography>\n <StyledReunfurl type=\"button\" onClick={onReunfurl}>\n <ArrowRefreshIcon />\n Re-unfurl\n </StyledReunfurl>\n </StyledStaleStrip>\n);\n\n/* ---- skeleton ---- */\n\n/* Mirrors the compact anatomy row for row (this is the `resolving` render at\n tier `url`), so a resolving link never reflows as it climbs the ladder. */\nexport const LinkSkeleton = (): ReactElement => (\n <>\n <Cover aspectRatio={COVER_RATIO}>\n <SkeletonLoader style={{ width: \"100%\", height: \"100%\" }} />\n </Cover>\n <StackRow role=\"custom\">\n <StyledDomainRow>\n <SkeletonLoader\n data-fixed\n style={{ width: 16, height: 16, borderRadius: 4 }}\n />\n <SkeletonLoader style={{ height: 10, width: \"40%\" }} />\n </StyledDomainRow>\n </StackRow>\n <StackRow role=\"title\">\n <div style={{ width: \"100%\" }}>\n <SkeletonLoader style={{ height: 14, width: \"92%\" }} />\n <SkeletonLoader style={{ height: 14, width: \"60%\", marginTop: 6 }} />\n </div>\n </StackRow>\n <StackRow role=\"custom\">\n <StyledChips>\n <SkeletonLoader style={{ height: 18, width: 96, borderRadius: 10 }} />\n </StyledChips>\n </StackRow>\n </>\n);\n\n/* ---- placeholder ---- */\n\nexport const LinkPlaceholder = (\n props: React.ButtonHTMLAttributes<HTMLButtonElement>\n): ReactElement => (\n <Placeholder icon={<InsertLinkIcon />} label=\"Add a link\" {...props} />\n);\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,iBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AASA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAKA,IAAAK,QAAA,GAAAL,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,YAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AACA,IAAAS,MAAA,GAAAT,OAAA;AAAyD,SAAAD,uBAAAW,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,SAAA,WAAAA,QAAA,GAAAC,MAAA,CAAAC,MAAA,GAAAD,MAAA,CAAAC,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAP,CAAA,MAAAA,CAAA,GAAAQ,SAAA,CAAAC,MAAA,EAAAT,CAAA,UAAAU,CAAA,GAAAF,SAAA,CAAAR,CAAA,YAAAW,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAJ,QAAA,CAAAW,KAAA,OAAAN,SAAA;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;;AAEA,IAAMO,eAAe,GAAGC,yBAAM,CAACC,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,gEAKjC;AAED,IAAMC,WAAW,GAAGL,yBAAM,CAACC,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,gEAK7B;;AAED;AACA,IAAME,gBAAgB,GAAGN,yBAAM,CAACC,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,+GAUlC;AAED,IAAMG,cAAc,GAAGP,yBAAM,CAACQ,MAAM,CAAAN,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,wVAsBnC;;AAED;AACA,IAAMK,eAAe,GAAGT,yBAAM,CAACC,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,sQAyBjC;AAED,IAAMM,WAAW,GAAGV,yBAAM,CAACQ,MAAM,CAAAN,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,kVAqBhC;;AAED;AACA,IAAMO,iBAAiB,GAAG,IAAAX,yBAAM,EAACY,iBAAK,CAAC,CAAAV,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,6FAKtC;;AAED;AACA;AACA;;AAEA,IAAMS,mBAAmB,GAAGb,yBAAM,CAACQ,MAAM,CAAAN,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,oRAexC;AAED,IAAMU,aAAa,GAAG,SAAhBA,aAAaA,CAAAC,IAAA;EAAA,IACjBC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IACPC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;EAAA,oBAKR7C,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACL,mBAAmB;IAClBM,IAAI,EAAC,QAAQ;IACb,kBAAU;IACVC,SAAS,EAAC,YAAY;IACtB,cAAW,sBAAsB;IACjCC,OAAO,EAAEJ;EAAS,GAEjBD,OAAO,KAAK,SAAS,GAAG,UAAU,GAAG,WACnB,CAAC;AAAA,CACvB;;AAED;AACA;AACA;;AAQO,IAAMM,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAG,SAAXA,QAAQA,CAAAE,KAAA,EAIc;EAAA,IAAAC,gBAAA,EAAAC,mBAAA;EAAA,IAHjCC,MAAM,GAAAH,KAAA,CAANG,MAAM;IAAAC,aAAA,GAAAJ,KAAA,CACNR,OAAO;IAAPA,OAAO,GAAAY,aAAA,cAAG,SAAS,GAAAA,aAAA;IACnBC,eAAe,GAAAL,KAAA,CAAfK,eAAe;EAEf,IAAQC,MAAM,GAA6CH,MAAM,CAAzDG,MAAM;IAAEC,IAAI,GAAuCJ,MAAM,CAAjDI,IAAI;IAAEC,IAAI,GAAiCL,MAAM,CAA3CK,IAAI;IAAEC,SAAS,GAAsBN,MAAM,CAArCM,SAAS;IAAEC,KAAK,GAAeP,MAAM,CAA1BO,KAAK;IAAEC,QAAQ,GAAKR,MAAM,CAAnBQ,QAAQ;;EAEtD;EACA,IAAIL,MAAM,KAAK,OAAO,EAAE;IACtB,oBACE1D,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACT,eAAe,qBACdrC,MAAA,CAAAc,OAAA,CAAAgC,aAAA;MAAKE,SAAS,EAAC;IAAU,gBACvBhD,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACxC,MAAA,CAAA0D,mBAAmB,MAAE,CAAC,eACvBhE,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACtC,WAAA,CAAAyD,QAAQ;MAACC,MAAM,EAAC,MAAM;MAACC,KAAK,EAAC;IAAU,GAAC,8BAE/B,CACP,CAAC,eACNnE,MAAA,CAAAc,OAAA,CAAAgC,aAAA;MAAKE,SAAS,EAAC;IAAS,gBACtBhD,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC1C,OAAA,CAAAgE,aAAa;MAACC,GAAG,EAAC,wBAAwB;MAAC;IAAU,CAAE,CAAC,eACzDrE,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACtC,WAAA,CAAAyD,QAAQ;MAACE,KAAK,EAAC;IAAW,GAAEP,IAAI,CAACU,GAAc,CAC7C,CAAC,eACNtE,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACR,WAAW;MAACS,IAAI,EAAC,QAAQ;MAACE,OAAO,EAAEa;IAAM,gBACxC9D,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACxC,MAAA,CAAAiE,gBAAgB,MAAE,CAAC,eACpBvE,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACrC,YAAA,CAAA+D,UAAU;MAACC,EAAE,EAAC,MAAM;MAACC,OAAO,EAAC;IAAW,GAAC,OAE9B,CACD,CACE,CAAC;EAEtB;EAEA,IAAMC,QAAQ,GAAGhB,IAAI,KAAK,OAAO,IAAIA,IAAI,KAAK,MAAM;EACpD,IAAMiB,OAAO,GAAGjB,IAAI,KAAK,MAAM;EAC/B,IAAMkB,MAAM,GAAGpB,eAAe,aAAfA,eAAe,cAAfA,eAAe,GAAK;IAAA,OAAMqB,SAAS;EAAA,CAAC;;EAEnD;EACA,IAAIlC,OAAO,KAAK,UAAU,EAAE;IAAA,IAAAmC,eAAA,EAAAC,kBAAA;IAC1B,oBACEhF,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAA9C,MAAA,CAAAc,OAAA,CAAAmE,QAAA,qBACEjF,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAwE,KAAK;MACJC,WAAW,EAAEC,uBAAiB;MAC9BC,UAAU,EAAET,OAAO,IAAIhB,IAAI,CAAC0B,QAAQ,GAAGC,mBAAW,GAAGT,SAAU;MAC/DU,YAAY,EAAE,IAAAC,uBAAe,EAAC;IAAE,GAE/Bb,OAAO,gBACN5E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC1C,OAAA,CAAAsF,gBAAgB;MAACC,MAAM,GAAAZ,eAAA,GAAEnB,IAAI,CAACgC,SAAS,cAAAb,eAAA,cAAAA,eAAA,GAAI;IAAU,CAAE,CAAC,gBAEzD/E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;MAACC,KAAK,EAAE;QAAEC,KAAK,EAAE,MAAM;QAAEC,MAAM,EAAE;MAAO;IAAE,CAAE,CAExD,CAAC,eACRhG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAuF,QAAQ;MACPC,IAAI,EAAC,QAAQ;MACbC,SAAS,EAAC,QAAQ;MAClBC,UAAU,EAAC;IAAwB,gBAEnCpG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACnB,eAAe,QACbgD,QAAQ,gBACP3E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC1C,OAAA,CAAAgE,aAAa;MAACC,GAAG,GAAAW,kBAAA,GAAEpB,IAAI,CAACyC,YAAY,cAAArB,kBAAA,cAAAA,kBAAA,GAAI,SAAU;MAAC;IAAU,CAAE,CAAC,gBAEjEhF,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;MACb,kBAAU;MACVC,KAAK,EAAE;QAAEC,KAAK,EAAE,EAAE;QAAEC,MAAM,EAAE,EAAE;QAAEM,YAAY,EAAE;MAAE;IAAE,CACnD,CACF,EACA3B,QAAQ,gBACP3E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACtC,WAAA,CAAAyD,QAAQ;MAACE,KAAK,EAAC;IAAU,GAAEP,IAAI,CAAC2C,MAAiB,CAAC,gBAEnDvG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACtC,WAAA,CAAAyD,QAAQ;MAACE,KAAK,EAAC;IAAU,GAAEP,IAAI,CAACU,GAAc,CAChD,eACDtE,MAAA,CAAAc,OAAA,CAAAgC,aAAA;MAAMgD,KAAK,EAAE;QAAEU,IAAI,EAAE;MAAW;IAAE,CAAE,CAAC,eACrCxG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACJ,aAAa;MAACE,OAAO,EAAEA,OAAQ;MAACC,QAAQ,EAAEgC;IAAO,CAAE,CACrC,CAAC,EACjBF,QAAQ,gBACP3E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACP,iBAAiB;MAAC2B,MAAM,EAAC;IAAM,GAAEN,IAAI,CAAC6C,KAAyB,CAAC,gBAEjEzG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;MAACC,KAAK,EAAE;QAAEE,MAAM,EAAE,EAAE;QAAED,KAAK,EAAE;MAAM;IAAE,CAAE,CACvD,EACAnB,OAAO,gBACN5E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACtC,WAAA,CAAAyD,QAAQ;MAACE,KAAK,EAAC;IAAU,GAAEP,IAAI,CAAC8C,WAAsB,CAAC,gBAExD1G,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;MAACC,KAAK,EAAE;QAAEE,MAAM,EAAE,EAAE;QAAED,KAAK,EAAE;MAAM;IAAE,CAAE,CAEhD,CAAC,EACVrC,MAAM,KAAK,OAAO,gBACjB1D,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAuF,QAAQ;MAACC,IAAI,EAAC;IAAM,gBACnBlG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC6D,UAAU;MAAC9C,SAAS,EAAEA,SAAU;MAAC+C,UAAU,EAAE7C;IAAS,CAAE,CACjD,CAAC,GACT,IACJ,CAAC;EAEP;;EAEA;EACA,oBACE/D,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAA9C,MAAA,CAAAc,OAAA,CAAAmE,QAAA,qBACEjF,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAwE,KAAK;IACJC,WAAW,EAAE0B,kBAAY;IACzBxB,UAAU,EAAET,OAAO,IAAIhB,IAAI,CAAC0B,QAAQ,GAAGC,mBAAW,GAAGT;EAAU,GAE9DF,OAAO,gBACN5E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC1C,OAAA,CAAAsF,gBAAgB;IAACC,MAAM,GAAAtC,gBAAA,GAAEO,IAAI,CAACgC,SAAS,cAAAvC,gBAAA,cAAAA,gBAAA,GAAI;EAAU,CAAE,CAAC,gBAEzDrD,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IAACC,KAAK,EAAE;MAAEC,KAAK,EAAE,MAAM;MAAEC,MAAM,EAAE;IAAO;EAAE,CAAE,CAExD,CAAC,eAERhG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAuF,QAAQ;IAACC,IAAI,EAAC;EAAQ,gBACrBlG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACnB,eAAe,QACbgD,QAAQ,gBACP3E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC1C,OAAA,CAAAgE,aAAa;IAACC,GAAG,GAAAf,mBAAA,GAAEM,IAAI,CAACyC,YAAY,cAAA/C,mBAAA,cAAAA,mBAAA,GAAI,SAAU;IAAC;EAAU,CAAE,CAAC,gBAEjEtD,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IACb,kBAAU;IACVC,KAAK,EAAE;MAAEC,KAAK,EAAE,EAAE;MAAEC,MAAM,EAAE,EAAE;MAAEM,YAAY,EAAE;IAAE;EAAE,CACnD,CACF,EACA3B,QAAQ,gBACP3E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACtC,WAAA,CAAAyD,QAAQ;IAACE,KAAK,EAAC;EAAU,GAAEP,IAAI,CAAC2C,MAAiB,CAAC,gBAEnDvG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACtC,WAAA,CAAAyD,QAAQ;IAACE,KAAK,EAAC;EAAU,GAAEP,IAAI,CAACU,GAAc,CAChD,eACDtE,MAAA,CAAAc,OAAA,CAAAgC,aAAA;IAAMgD,KAAK,EAAE;MAAEU,IAAI,EAAE;IAAW;EAAE,CAAE,CAAC,eACrCxG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACJ,aAAa;IAACE,OAAO,EAAEA,OAAQ;IAACC,QAAQ,EAAEgC;EAAO,CAAE,CACrC,CACT,CAAC,eAEX7E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAuF,QAAQ;IAACC,IAAI,EAAC;EAAO,GACnBvB,QAAQ,gBACP3E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC1C,OAAA,CAAA0G,WAAW,QAAElD,IAAI,CAAC6C,KAAmB,CAAC,gBAEvCzG,MAAA,CAAAc,OAAA,CAAAgC,aAAA;IAAKgD,KAAK,EAAE;MAAEC,KAAK,EAAE;IAAO;EAAE,gBAC5B/F,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IAACC,KAAK,EAAE;MAAEE,MAAM,EAAE,EAAE;MAAED,KAAK,EAAE;IAAM;EAAE,CAAE,CAAC,eACvD/F,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IACbC,KAAK,EAAE;MAAEE,MAAM,EAAE,EAAE;MAAED,KAAK,EAAE,KAAK;MAAEgB,SAAS,EAAE;IAAE;EAAE,CACnD,CACE,CAEC,CAAC,eAEX/G,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAuF,QAAQ;IAACC,IAAI,EAAC;EAAQ,gBACrBlG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACb,WAAW,QACT2C,OAAO,gBACN5E,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAA9C,MAAA,CAAAc,OAAA,CAAAmE,QAAA,QACGrB,IAAI,CAACoD,IAAI,gBACRhH,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC1C,OAAA,CAAA6G,UAAU;IAAC;EAAU,GAAErD,IAAI,CAACoD,IAAiB,CAAC,GAC7C,IAAI,EACPpD,IAAI,CAACsD,QAAQ,gBACZlH,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC1C,OAAA,CAAA6G,UAAU;IAAC;EAAU,GAAErD,IAAI,CAACsD,QAAqB,CAAC,GACjD,IACJ,CAAC,gBAEHlH,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IACbC,KAAK,EAAE;MAAEE,MAAM,EAAE,EAAE;MAAED,KAAK,EAAE,EAAE;MAAEO,YAAY,EAAE;IAAG;EAAE,CACpD,CAEQ,CACL,CAAC,EAEV5C,MAAM,KAAK,OAAO,gBACjB1D,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAuF,QAAQ;IAACC,IAAI,EAAC;EAAM,gBACnBlG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC6D,UAAU;IAAC9C,SAAS,EAAEA,SAAU;IAAC+C,UAAU,EAAE7C;EAAS,CAAE,CACjD,CAAC,GACT,IACJ,CAAC;AAEP,CAAC;;AAED;AACA,IAAM4C,UAAU,GAAG,SAAbA,UAAUA,CAAAQ,KAAA;EAAA,IACdtD,SAAS,GAAAsD,KAAA,CAATtD,SAAS;IACT+C,UAAU,GAAAO,KAAA,CAAVP,UAAU;EAAA,oBAKV5G,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACZ,gBAAgB,qBACflC,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACrC,YAAA,CAAA+D,UAAU;IAACC,EAAE,EAAC,MAAM;IAACC,OAAO,EAAC,WAAW;IAACP,KAAK,EAAC;EAAU,GAAC,0CACpB,EAAC,IAAAiD,uBAAe,EAACvD,SAAS,CACrD,CAAC,eACb7D,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACX,cAAc;IAACY,IAAI,EAAC,QAAQ;IAACE,OAAO,EAAE2D;EAAW,gBAChD5G,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACxC,MAAA,CAAAiE,gBAAgB,MAAE,CAAC,aAEN,CACA,CAAC;AAAA,CACpB;;AAED;;AAEA;AACA;AACO,IAAM8C,YAAY,GAAAlE,OAAA,CAAAkE,YAAA,GAAG,SAAfA,YAAYA,CAAA;EAAA,oBACvBrH,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAA9C,MAAA,CAAAc,OAAA,CAAAmE,QAAA,qBACEjF,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAwE,KAAK;IAACC,WAAW,EAAE0B;EAAY,gBAC9B7G,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IAACC,KAAK,EAAE;MAAEC,KAAK,EAAE,MAAM;MAAEC,MAAM,EAAE;IAAO;EAAE,CAAE,CACtD,CAAC,eACRhG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAuF,QAAQ;IAACC,IAAI,EAAC;EAAQ,gBACrBlG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACnB,eAAe,qBACd3B,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IACb,kBAAU;IACVC,KAAK,EAAE;MAAEC,KAAK,EAAE,EAAE;MAAEC,MAAM,EAAE,EAAE;MAAEM,YAAY,EAAE;IAAE;EAAE,CACnD,CAAC,eACFtG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IAACC,KAAK,EAAE;MAAEE,MAAM,EAAE,EAAE;MAAED,KAAK,EAAE;IAAM;EAAE,CAAE,CACvC,CACT,CAAC,eACX/F,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAuF,QAAQ;IAACC,IAAI,EAAC;EAAO,gBACpBlG,MAAA,CAAAc,OAAA,CAAAgC,aAAA;IAAKgD,KAAK,EAAE;MAAEC,KAAK,EAAE;IAAO;EAAE,gBAC5B/F,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IAACC,KAAK,EAAE;MAAEE,MAAM,EAAE,EAAE;MAAED,KAAK,EAAE;IAAM;EAAE,CAAE,CAAC,eACvD/F,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IAACC,KAAK,EAAE;MAAEE,MAAM,EAAE,EAAE;MAAED,KAAK,EAAE,KAAK;MAAEgB,SAAS,EAAE;IAAE;EAAE,CAAE,CACjE,CACG,CAAC,eACX/G,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACpC,WAAA,CAAAuF,QAAQ;IAACC,IAAI,EAAC;EAAQ,gBACrBlG,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACb,WAAW,qBACVjC,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACvC,QAAA,CAAAsF,cAAc;IAACC,KAAK,EAAE;MAAEE,MAAM,EAAE,EAAE;MAAED,KAAK,EAAE,EAAE;MAAEO,YAAY,EAAE;IAAG;EAAE,CAAE,CAC1D,CACL,CACV,CAAC;AAAA,CACJ;;AAED;;AAEO,IAAMgB,eAAe,GAAAnE,OAAA,CAAAmE,eAAA,GAAG,SAAlBA,eAAeA,CAC1BC,KAAoD;EAAA,oBAEpDvH,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAAC1C,OAAA,CAAAoH,WAAW,EAAAzG,QAAA;IAAC0G,IAAI,eAAEzH,MAAA,CAAAc,OAAA,CAAAgC,aAAA,CAACxC,MAAA,CAAAoH,cAAc,MAAE,CAAE;IAACC,KAAK,EAAC;EAAY,GAAKJ,KAAK,CAAG,CAAC;AAAA,CACxE","ignoreList":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SAMPLE_NOTE = exports.NoteSkeleton = exports.NotePlaceholder = exports.NoteCard = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
|
+
var _shared = require("./shared");
|
|
10
|
+
var _Icons = require("../../../components/Icons");
|
|
11
|
+
var _Loaders = require("../../../components/Loaders");
|
|
12
|
+
var _Typography = require("../../../components/Typography");
|
|
13
|
+
var _primitives = require("../primitives");
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
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); }
|
|
16
|
+
/**
|
|
17
|
+
* NoteCard — the new fifth type. A multi-line text card (Milanote-style): a
|
|
18
|
+
* title row that owns the "…" menu, then padded body rows. The body clamps at a
|
|
19
|
+
* line limit and fades out; auto-height, so the card grows with its content.
|
|
20
|
+
* Inline editing lands in task 4/8 — this is the read view + placeholder.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/* The body clamps at a max height and fades out with a mask so long notes end
|
|
24
|
+
softly instead of hard-cropping. white-space: pre-line keeps authored breaks. */
|
|
25
|
+
var StyledNoteBody = (0, _styledComponents.default)(_Typography.Body2).withConfig({
|
|
26
|
+
displayName: "NoteCard__StyledNoteBody",
|
|
27
|
+
componentId: "sc-e2a7no-0"
|
|
28
|
+
})(["display:block;max-height:132px;overflow:hidden;white-space:pre-line;-webkit-mask-image:linear-gradient(180deg,#000 72%,transparent);mask-image:linear-gradient(180deg,#000 72%,transparent);"]);
|
|
29
|
+
var SAMPLE_NOTE = exports.SAMPLE_NOTE = "Kickoff open questions before we lock the columns:\n\n\u2022 Who owns the migration off react-dnd, and does it block the canvas work or run in parallel?\n\u2022 Confirm the outline-placeholder choreography reads the same in a scrolled column.\n\u2022 Do we ship the note type in v1, or defer inline editing?";
|
|
30
|
+
var NoteCard = exports.NoteCard = function NoteCard(_ref) {
|
|
31
|
+
var _ref$title = _ref.title,
|
|
32
|
+
title = _ref$title === void 0 ? "Kickoff notes" : _ref$title,
|
|
33
|
+
_ref$body = _ref.body,
|
|
34
|
+
body = _ref$body === void 0 ? SAMPLE_NOTE : _ref$body;
|
|
35
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
36
|
+
role: "title"
|
|
37
|
+
}, /*#__PURE__*/_react.default.createElement(_Typography.Body2, {
|
|
38
|
+
weight: "bold"
|
|
39
|
+
}, title), /*#__PURE__*/_react.default.createElement(_shared.EntityDots, {
|
|
40
|
+
"aria-label": "Note options"
|
|
41
|
+
})), /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
42
|
+
role: "custom",
|
|
43
|
+
direction: "column"
|
|
44
|
+
}, /*#__PURE__*/_react.default.createElement(StyledNoteBody, {
|
|
45
|
+
color: "secondary"
|
|
46
|
+
}, body)));
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/* ---- placeholder + skeleton ---- */
|
|
50
|
+
|
|
51
|
+
var NotePlaceholder = exports.NotePlaceholder = function NotePlaceholder(props) {
|
|
52
|
+
return /*#__PURE__*/_react.default.createElement(_shared.Placeholder, _extends({
|
|
53
|
+
icon: /*#__PURE__*/_react.default.createElement(_Icons.NoteIcon, null),
|
|
54
|
+
label: "Write a note"
|
|
55
|
+
}, props));
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/* Skeleton mirrors the note anatomy: a title line, then several body lines. */
|
|
59
|
+
var NoteSkeleton = exports.NoteSkeleton = function NoteSkeleton() {
|
|
60
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
61
|
+
role: "title"
|
|
62
|
+
}, /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
63
|
+
style: {
|
|
64
|
+
height: 14,
|
|
65
|
+
width: "50%"
|
|
66
|
+
}
|
|
67
|
+
})), /*#__PURE__*/_react.default.createElement(_primitives.StackRow, {
|
|
68
|
+
role: "custom",
|
|
69
|
+
direction: "column"
|
|
70
|
+
}, /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
71
|
+
style: {
|
|
72
|
+
height: 10,
|
|
73
|
+
width: "100%"
|
|
74
|
+
}
|
|
75
|
+
}), /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
76
|
+
style: {
|
|
77
|
+
height: 10,
|
|
78
|
+
width: "96%"
|
|
79
|
+
}
|
|
80
|
+
}), /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
81
|
+
style: {
|
|
82
|
+
height: 10,
|
|
83
|
+
width: "88%"
|
|
84
|
+
}
|
|
85
|
+
}), /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, {
|
|
86
|
+
style: {
|
|
87
|
+
height: 10,
|
|
88
|
+
width: "70%"
|
|
89
|
+
}
|
|
90
|
+
})));
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=NoteCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoteCard.js","names":["_react","_interopRequireDefault","require","_styledComponents","_shared","_Icons","_Loaders","_Typography","_primitives","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","StyledNoteBody","styled","Body2","withConfig","displayName","componentId","SAMPLE_NOTE","exports","NoteCard","_ref","_ref$title","title","_ref$body","body","createElement","Fragment","StackRow","role","weight","EntityDots","direction","color","NotePlaceholder","props","Placeholder","icon","NoteIcon","label","NoteSkeleton","SkeletonLoader","style","height","width"],"sources":["../../../../../src/presentation/stackedCard/content/NoteCard.tsx"],"sourcesContent":["import React, { ReactElement } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { EntityDots, Placeholder } from \"./shared\";\nimport { NoteIcon } from \"../../../components/Icons\";\nimport { SkeletonLoader } from \"../../../components/Loaders\";\nimport { Body2 } from \"../../../components/Typography\";\nimport { StackRow } from \"../primitives\";\n\n/**\n * NoteCard — the new fifth type. A multi-line text card (Milanote-style): a\n * title row that owns the \"…\" menu, then padded body rows. The body clamps at a\n * line limit and fades out; auto-height, so the card grows with its content.\n * Inline editing lands in task 4/8 — this is the read view + placeholder.\n */\n\n/* The body clamps at a max height and fades out with a mask so long notes end\n softly instead of hard-cropping. white-space: pre-line keeps authored breaks. */\nconst StyledNoteBody = styled(Body2)`\n display: block;\n max-height: 132px;\n overflow: hidden;\n white-space: pre-line;\n -webkit-mask-image: linear-gradient(180deg, #000 72%, transparent);\n mask-image: linear-gradient(180deg, #000 72%, transparent);\n`;\n\nexport const SAMPLE_NOTE = `Kickoff open questions before we lock the columns:\n\n• Who owns the migration off react-dnd, and does it block the canvas work or run in parallel?\n• Confirm the outline-placeholder choreography reads the same in a scrolled column.\n• Do we ship the note type in v1, or defer inline editing?`;\n\nexport interface NoteCardProps {\n title?: string;\n body?: string;\n}\n\nexport const NoteCard = ({\n title = \"Kickoff notes\",\n body = SAMPLE_NOTE,\n}: NoteCardProps): ReactElement => (\n <>\n <StackRow role=\"title\">\n <Body2 weight=\"bold\">{title}</Body2>\n <EntityDots aria-label=\"Note options\" />\n </StackRow>\n <StackRow role=\"custom\" direction=\"column\">\n <StyledNoteBody color=\"secondary\">{body}</StyledNoteBody>\n </StackRow>\n </>\n);\n\n/* ---- placeholder + skeleton ---- */\n\nexport const NotePlaceholder = (\n props: React.ButtonHTMLAttributes<HTMLButtonElement>\n): ReactElement => (\n <Placeholder icon={<NoteIcon />} label=\"Write a note\" {...props} />\n);\n\n/* Skeleton mirrors the note anatomy: a title line, then several body lines. */\nexport const NoteSkeleton = (): ReactElement => (\n <>\n <StackRow role=\"title\">\n <SkeletonLoader style={{ height: 14, width: \"50%\" }} />\n </StackRow>\n <StackRow role=\"custom\" direction=\"column\">\n <SkeletonLoader style={{ height: 10, width: \"100%\" }} />\n <SkeletonLoader style={{ height: 10, width: \"96%\" }} />\n <SkeletonLoader style={{ height: 10, width: \"88%\" }} />\n <SkeletonLoader style={{ height: 10, width: \"70%\" }} />\n </StackRow>\n </>\n);\n"],"mappings":"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","ignoreList":[]}
|