themed-markdown 0.1.21 → 0.1.23

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/index.mjs CHANGED
@@ -1385,7 +1385,21 @@ var IndustryBashCommandDropdown = ({
1385
1385
 
1386
1386
  // industryMarkdown/components/IndustryMarkdownComponents.tsx
1387
1387
  var failedImageCache = new Set;
1388
- var OptimizedMarkdownImage = React7.memo(({
1388
+ var isVideoUrl = (url, alt) => {
1389
+ const videoExtensions = [".mp4", ".webm", ".ogg", ".mov", ".avi", ".mkv", ".m4v"];
1390
+ const lowercaseUrl = url.toLowerCase();
1391
+ if (videoExtensions.some((ext) => lowercaseUrl.includes(ext))) {
1392
+ return true;
1393
+ }
1394
+ if (alt) {
1395
+ const altLower = alt.toLowerCase();
1396
+ if (altLower.includes("video") || altLower.includes("demo") || altLower.includes("recording")) {
1397
+ return true;
1398
+ }
1399
+ }
1400
+ return false;
1401
+ };
1402
+ var OptimizedMarkdownMedia = React7.memo(({
1389
1403
  src,
1390
1404
  alt,
1391
1405
  repositoryInfo,
@@ -1397,7 +1411,7 @@ var OptimizedMarkdownImage = React7.memo(({
1397
1411
  }, [src, repositoryInfo]);
1398
1412
  const [hasErrored, setHasErrored] = useState6(() => failedImageCache.has(transformedSrc));
1399
1413
  const retryCount = useRef4(0);
1400
- const imageStyle = useMemo(() => ({
1414
+ const mediaStyle = useMemo(() => ({
1401
1415
  maxWidth: "100%",
1402
1416
  height: "auto",
1403
1417
  display: "block",
@@ -1416,10 +1430,49 @@ var OptimizedMarkdownImage = React7.memo(({
1416
1430
  setHasErrored(true);
1417
1431
  e.stopPropagation();
1418
1432
  };
1433
+ if (isVideoUrl(transformedSrc, alt)) {
1434
+ if (hasErrored) {
1435
+ return /* @__PURE__ */ React7.createElement("span", {
1436
+ style: {
1437
+ ...mediaStyle,
1438
+ display: "inline-flex",
1439
+ alignItems: "center",
1440
+ justifyContent: "center",
1441
+ backgroundColor: theme2.colors.backgroundSecondary,
1442
+ color: theme2.colors.textSecondary,
1443
+ border: `1px solid ${theme2.colors.border}`,
1444
+ padding: theme2.space[4],
1445
+ minHeight: "200px"
1446
+ }
1447
+ }, "⚠️ Video failed to load: ", alt || transformedSrc);
1448
+ }
1449
+ return /* @__PURE__ */ React7.createElement("video", {
1450
+ controls: true,
1451
+ style: mediaStyle,
1452
+ onLoadedData: handleLoad,
1453
+ onError: handleError,
1454
+ title: alt,
1455
+ ...props
1456
+ }, /* @__PURE__ */ React7.createElement("source", {
1457
+ src: transformedSrc
1458
+ }), /* @__PURE__ */ React7.createElement("source", {
1459
+ src: transformedSrc,
1460
+ type: "video/mp4"
1461
+ }), /* @__PURE__ */ React7.createElement("source", {
1462
+ src: transformedSrc,
1463
+ type: "video/webm"
1464
+ }), "Your browser does not support the video tag.");
1465
+ }
1466
+ const handleImageError = (e) => {
1467
+ retryCount.current += 1;
1468
+ failedImageCache.add(transformedSrc);
1469
+ setHasErrored(true);
1470
+ e.stopPropagation();
1471
+ };
1419
1472
  if (hasErrored) {
1420
1473
  return /* @__PURE__ */ React7.createElement("span", {
1421
1474
  style: {
1422
- ...imageStyle,
1475
+ ...mediaStyle,
1423
1476
  display: "inline-flex",
1424
1477
  alignItems: "center",
1425
1478
  justifyContent: "center",
@@ -1440,9 +1493,9 @@ var OptimizedMarkdownImage = React7.memo(({
1440
1493
  return /* @__PURE__ */ React7.createElement("img", {
1441
1494
  src: transformedSrc,
1442
1495
  alt,
1443
- style: imageStyle,
1496
+ style: mediaStyle,
1444
1497
  onLoad: handleLoad,
1445
- onError: handleError,
1498
+ onError: handleImageError,
1446
1499
  ...props
1447
1500
  });
1448
1501
  });
@@ -1481,6 +1534,7 @@ var createIndustryMarkdownComponents = ({
1481
1534
  fontSize: theme2.fontSizes[5],
1482
1535
  lineHeight: theme2.lineHeights.heading,
1483
1536
  fontWeight: theme2.fontWeights.bold,
1537
+ marginTop: index === 0 ? 0 : theme2.space[4],
1484
1538
  marginBottom: theme2.space[4],
1485
1539
  fontFamily: theme2.fonts.heading,
1486
1540
  ...headerStyles
@@ -1493,7 +1547,7 @@ var createIndustryMarkdownComponents = ({
1493
1547
  fontSize: theme2.fontSizes[4],
1494
1548
  lineHeight: theme2.lineHeights.heading,
1495
1549
  fontWeight: theme2.fontWeights.bold,
1496
- marginTop: theme2.space[4],
1550
+ marginTop: index === 0 ? 0 : theme2.space[4],
1497
1551
  marginBottom: theme2.space[3],
1498
1552
  fontFamily: theme2.fonts.heading,
1499
1553
  ...headerStyles
@@ -1506,7 +1560,7 @@ var createIndustryMarkdownComponents = ({
1506
1560
  fontSize: theme2.fontSizes[3],
1507
1561
  lineHeight: theme2.lineHeights.heading,
1508
1562
  fontWeight: theme2.fontWeights.semibold,
1509
- marginTop: theme2.space[4],
1563
+ marginTop: index === 0 ? 0 : theme2.space[4],
1510
1564
  marginBottom: theme2.space[3],
1511
1565
  fontFamily: theme2.fonts.heading
1512
1566
  },
@@ -1664,7 +1718,7 @@ var createIndustryMarkdownComponents = ({
1664
1718
  onClick: onLinkClick ? (h, e) => onLinkClick(h, e) : undefined,
1665
1719
  className: props.className
1666
1720
  }, children),
1667
- img: ({ src, alt, ...props }) => /* @__PURE__ */ React7.createElement(OptimizedMarkdownImage, {
1721
+ img: ({ src, alt, ...props }) => /* @__PURE__ */ React7.createElement(OptimizedMarkdownMedia, {
1668
1722
  src: src || "",
1669
1723
  alt: alt || "",
1670
1724
  repositoryInfo,
@@ -1674,6 +1728,18 @@ var createIndustryMarkdownComponents = ({
1674
1728
  picture: ({ children, ...props }) => /* @__PURE__ */ React7.createElement("picture", {
1675
1729
  ...props
1676
1730
  }, children),
1731
+ video: ({ children, ...props }) => /* @__PURE__ */ React7.createElement("video", {
1732
+ controls: true,
1733
+ style: {
1734
+ maxWidth: "100%",
1735
+ height: "auto",
1736
+ display: "block",
1737
+ margin: `${theme2.space[3]}px auto`,
1738
+ borderRadius: theme2.radii[1],
1739
+ boxShadow: theme2.shadows[2]
1740
+ },
1741
+ ...props
1742
+ }, children),
1677
1743
  source: ({ srcset, srcSet, ...props }) => {
1678
1744
  const srcsetValue = srcset || srcSet;
1679
1745
  const transformedSrcset = useMemo(() => {
@@ -37,6 +37,7 @@ export declare const createIndustryMarkdownComponents: ({ theme, slideIdPrefix,
37
37
  a: ({ children, href, ...props }: LinkProps) => React.JSX.Element;
38
38
  img: ({ src, alt, ...props }: ImageProps) => React.JSX.Element;
39
39
  picture: ({ children, ...props }: MarkdownComponentProps) => React.JSX.Element;
40
+ video: ({ children, ...props }: MarkdownComponentProps) => React.JSX.Element;
40
41
  source: ({ srcset, srcSet, ...props }: SourceProps) => React.JSX.Element;
41
42
  code: ({ node, className, children, ...props }: CodeProps) => React.JSX.Element;
42
43
  };
@@ -1 +1 @@
1
- {"version":3,"file":"IndustryMarkdownComponents.d.ts","sourceRoot":"","sources":["../../../industryMarkdown/components/IndustryMarkdownComponents.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EAEZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AAMhH,UAAU,+BAA+B;IACvC,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACzD,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/E,oBAAoB,CAAC,EAAE,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAyFD;;;GAGG;AACH,eAAO,MAAM,gCAAgC,GAAI,uOAe9C,+BAA+B;iCAqBD,YAAY;iCAgBZ,YAAY;iCAiBZ,YAAY;gCAkBb,sBAAsB;iCAgBrB,sBAAsB;iCAgBtB,sBAAsB;iCAgBtB,aAAa;oCAuGV,sBAAsB;oCAsBtB,sBAAsB;iCAUzB,sBAAsB;iCActB,sBAAsB;sCAcjB,SAAS;kCAWb,UAAU;sCAWN,sBAAsB;2CAGjB,WAAW;oDAyBF,SAAS;CAwS5D,CAAC"}
1
+ {"version":3,"file":"IndustryMarkdownComponents.d.ts","sourceRoot":"","sources":["../../../industryMarkdown/components/IndustryMarkdownComponents.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EAEZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AAMhH,UAAU,+BAA+B;IACvC,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACzD,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/E,oBAAoB,CAAC,EAAE,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAgKD;;;GAGG;AACH,eAAO,MAAM,gCAAgC,GAAI,uOAe9C,+BAA+B;iCAqBD,YAAY;iCAiBZ,YAAY;iCAiBZ,YAAY;gCAkBb,sBAAsB;iCAgBrB,sBAAsB;iCAgBtB,sBAAsB;iCAgBtB,aAAa;oCAuGV,sBAAsB;oCAsBtB,sBAAsB;iCAUzB,sBAAsB;iCActB,sBAAsB;sCAcjB,SAAS;kCAWb,UAAU;sCAWN,sBAAsB;oCAGxB,sBAAsB;2CAkBf,WAAW;oDAyBF,SAAS;CAwS5D,CAAC"}
@@ -5,6 +5,7 @@ export default meta;
5
5
  type Story = StoryObj<typeof meta>;
6
6
  export declare const Default: Story;
7
7
  export declare const WithCode: Story;
8
+ export declare const WithVideo: Story;
8
9
  export declare const WithMermaid: Story;
9
10
  export declare const WithMermaidWidthFit: Story;
10
11
  export declare const WithMermaidTallDiagram: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"IndustryMarkdownSlide.stories.d.ts","sourceRoot":"","sources":["../../../industryMarkdown/components/IndustryMarkdownSlide.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,qBAAqB,CAe5C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAmBtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAkEzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KA2BjC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KA+BpC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAgB1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAavB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAyBzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KA4E5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KA8BhC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAwFhC,CAAC"}
1
+ {"version":3,"file":"IndustryMarkdownSlide.stories.d.ts","sourceRoot":"","sources":["../../../industryMarkdown/components/IndustryMarkdownSlide.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,qBAAqB,CAe5C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAmBtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAyCvB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAkEzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KA2BjC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KA+BpC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAgB1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAavB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAyBzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KA4E5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KA8BhC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAwFhC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "themed-markdown",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "description": "Industry-themed markdown renderer with presentation capabilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -31,7 +31,8 @@
31
31
  "format:check": "prettier --check .",
32
32
  "clean": "rm -rf dist coverage",
33
33
  "storybook": "storybook dev -p 6006",
34
- "build-storybook": "storybook build"
34
+ "build-storybook": "storybook build",
35
+ "prepare": "husky"
35
36
  },
36
37
  "keywords": [
37
38
  "markdown",