@mieweb/ui 0.10.0-dev.32 → 0.10.0-dev.34
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/{chunk-VPIYTQCV.cjs → chunk-2I4IRQQG.cjs} +12 -5
- package/dist/chunk-2I4IRQQG.cjs.map +1 -0
- package/dist/{chunk-CMF7VCGP.js → chunk-2X54ZLT6.js} +3 -3
- package/dist/{chunk-CMF7VCGP.js.map → chunk-2X54ZLT6.js.map} +1 -1
- package/dist/{chunk-FKGFOBC2.js → chunk-434L5RYF.js} +4 -4
- package/dist/{chunk-FKGFOBC2.js.map → chunk-434L5RYF.js.map} +1 -1
- package/dist/{chunk-TPWKM7JH.js → chunk-43K7OQ3E.js} +3 -3
- package/dist/{chunk-TPWKM7JH.js.map → chunk-43K7OQ3E.js.map} +1 -1
- package/dist/chunk-522WJIVI.js +99 -0
- package/dist/chunk-522WJIVI.js.map +1 -0
- package/dist/{chunk-O4WGSOJI.js → chunk-56VTM4OX.js} +3 -3
- package/dist/{chunk-O4WGSOJI.js.map → chunk-56VTM4OX.js.map} +1 -1
- package/dist/{chunk-LRRSD7LR.js → chunk-5HKZR6UG.js} +3 -3
- package/dist/{chunk-LRRSD7LR.js.map → chunk-5HKZR6UG.js.map} +1 -1
- package/dist/{chunk-EMRWTCCN.cjs → chunk-6WX2OR3U.cjs} +15 -2
- package/dist/chunk-6WX2OR3U.cjs.map +1 -0
- package/dist/chunk-7E46YDOT.cjs +122 -0
- package/dist/chunk-7E46YDOT.cjs.map +1 -0
- package/dist/{chunk-57G3O552.cjs → chunk-AJPFQF3H.cjs} +7 -7
- package/dist/{chunk-57G3O552.cjs.map → chunk-AJPFQF3H.cjs.map} +1 -1
- package/dist/{chunk-I2MMUFCN.cjs → chunk-ARIJ5OHW.cjs} +9 -24
- package/dist/chunk-ARIJ5OHW.cjs.map +1 -0
- package/dist/{chunk-VOYLX32A.cjs → chunk-CLQW724U.cjs} +4 -4
- package/dist/{chunk-VOYLX32A.cjs.map → chunk-CLQW724U.cjs.map} +1 -1
- package/dist/{chunk-VNEAQCY2.js → chunk-DGHS5IVD.js} +19 -22
- package/dist/chunk-DGHS5IVD.js.map +1 -0
- package/dist/{chunk-OZ5CKVQN.js → chunk-FDA3R5E7.js} +15 -2
- package/dist/chunk-FDA3R5E7.js.map +1 -0
- package/dist/{chunk-LSMS6DY7.cjs → chunk-FSWHZY3T.cjs} +18 -21
- package/dist/chunk-FSWHZY3T.cjs.map +1 -0
- package/dist/{chunk-ISUIKUX7.cjs → chunk-H3P7POFC.cjs} +7 -7
- package/dist/{chunk-ISUIKUX7.cjs.map → chunk-H3P7POFC.cjs.map} +1 -1
- package/dist/{chunk-462XSCP3.cjs → chunk-HCIXGFWR.cjs} +4 -4
- package/dist/{chunk-462XSCP3.cjs.map → chunk-HCIXGFWR.cjs.map} +1 -1
- package/dist/{chunk-FCV7GBNQ.cjs → chunk-HNNWWLKY.cjs} +33 -33
- package/dist/{chunk-FCV7GBNQ.cjs.map → chunk-HNNWWLKY.cjs.map} +1 -1
- package/dist/{chunk-BIQ7GSO2.js → chunk-JMAZ2GKT.js} +3 -3
- package/dist/{chunk-BIQ7GSO2.js.map → chunk-JMAZ2GKT.js.map} +1 -1
- package/dist/{chunk-T4L7Q5FA.cjs → chunk-LC3JL2HB.cjs} +6 -2
- package/dist/chunk-LC3JL2HB.cjs.map +1 -0
- package/dist/{chunk-3RXZWHCU.js → chunk-LDBNUJB7.js} +3 -3
- package/dist/{chunk-3RXZWHCU.js.map → chunk-LDBNUJB7.js.map} +1 -1
- package/dist/{chunk-ADW7ZYCY.cjs → chunk-LRAAJRE7.cjs} +4 -4
- package/dist/{chunk-ADW7ZYCY.cjs.map → chunk-LRAAJRE7.cjs.map} +1 -1
- package/dist/{chunk-ILDLYRTP.js → chunk-MHR2OS5I.js} +4 -4
- package/dist/{chunk-ILDLYRTP.js.map → chunk-MHR2OS5I.js.map} +1 -1
- package/dist/{chunk-6M63CM7X.cjs → chunk-O6BJMVGT.cjs} +21 -21
- package/dist/{chunk-6M63CM7X.cjs.map → chunk-O6BJMVGT.cjs.map} +1 -1
- package/dist/{chunk-ORCCJ5VY.cjs → chunk-OIMXMPH2.cjs} +4 -4
- package/dist/{chunk-ORCCJ5VY.cjs.map → chunk-OIMXMPH2.cjs.map} +1 -1
- package/dist/{chunk-CEQJGUAS.js → chunk-P4E3K3ND.js} +12 -5
- package/dist/chunk-P4E3K3ND.js.map +1 -0
- package/dist/{chunk-6JSFT2J5.js → chunk-RLVYWUXG.js} +9 -24
- package/dist/chunk-RLVYWUXG.js.map +1 -0
- package/dist/{chunk-YRHBSSQ3.cjs → chunk-RV45J2ZT.cjs} +4 -4
- package/dist/{chunk-YRHBSSQ3.cjs.map → chunk-RV45J2ZT.cjs.map} +1 -1
- package/dist/{chunk-3DLLTITK.js → chunk-S2JZL4JC.js} +3 -3
- package/dist/{chunk-3DLLTITK.js.map → chunk-S2JZL4JC.js.map} +1 -1
- package/dist/{chunk-ENMXHZNE.js → chunk-TWQSMUE6.js} +6 -2
- package/dist/chunk-TWQSMUE6.js.map +1 -0
- package/dist/{chunk-GNOQFTLL.cjs → chunk-UTIPENPW.cjs} +6 -6
- package/dist/{chunk-GNOQFTLL.cjs.map → chunk-UTIPENPW.cjs.map} +1 -1
- package/dist/{chunk-CPPUT74P.cjs → chunk-VV2U36T6.cjs} +9 -9
- package/dist/{chunk-CPPUT74P.cjs.map → chunk-VV2U36T6.cjs.map} +1 -1
- package/dist/{chunk-EPTP3VKT.js → chunk-WFL4N5PC.js} +3 -3
- package/dist/{chunk-EPTP3VKT.js.map → chunk-WFL4N5PC.js.map} +1 -1
- package/dist/{chunk-H3QPREIJ.js → chunk-X3RSNAMX.js} +3 -3
- package/dist/{chunk-H3QPREIJ.js.map → chunk-X3RSNAMX.js.map} +1 -1
- package/dist/{chunk-T4JYUICS.js → chunk-Y7ZJZLJY.js} +3 -3
- package/dist/{chunk-T4JYUICS.js.map → chunk-Y7ZJZLJY.js.map} +1 -1
- package/dist/{chunk-P55LNEDH.cjs → chunk-ZSNFL736.cjs} +4 -4
- package/dist/{chunk-P55LNEDH.cjs.map → chunk-ZSNFL736.cjs.map} +1 -1
- package/dist/components/ActionPlan/index.cjs +5 -5
- package/dist/components/ActionPlan/index.js +3 -3
- package/dist/components/AlertDialog/index.cjs +6 -6
- package/dist/components/AlertDialog/index.js +2 -2
- package/dist/components/AssociationList/index.cjs +4 -4
- package/dist/components/AssociationList/index.js +2 -2
- package/dist/components/Badge/index.cjs +3 -3
- package/dist/components/Badge/index.d.cts +15 -1
- package/dist/components/Badge/index.d.ts +15 -1
- package/dist/components/Badge/index.js +1 -1
- package/dist/components/CompletenessMeter/index.cjs +5 -4
- package/dist/components/CompletenessMeter/index.js +2 -1
- package/dist/components/KeyboardShortcutsOverlay/index.cjs +4 -4
- package/dist/components/KeyboardShortcutsOverlay/index.js +2 -2
- package/dist/components/MediaEditor/index.cjs +7 -7
- package/dist/components/MediaEditor/index.js +2 -2
- package/dist/components/MediaFeed/index.cjs +3 -3
- package/dist/components/MediaFeed/index.js +2 -2
- package/dist/components/Modal/index.cjs +9 -9
- package/dist/components/Modal/index.js +1 -1
- package/dist/components/Progress/index.cjs +6 -6
- package/dist/components/Progress/index.d.cts +7 -1
- package/dist/components/Progress/index.d.ts +7 -1
- package/dist/components/Progress/index.js +1 -1
- package/dist/components/RadialExplorer/index.cjs +3 -3
- package/dist/components/RadialExplorer/index.js +2 -2
- package/dist/components/RecordHeader/index.cjs +4 -4
- package/dist/components/RecordHeader/index.d.cts +11 -1
- package/dist/components/RecordHeader/index.d.ts +11 -1
- package/dist/components/RecordHeader/index.js +2 -2
- package/dist/components/RecordLayout/index.cjs +4 -4
- package/dist/components/RecordLayout/index.js +2 -2
- package/dist/components/SuperChat/index.cjs +5 -5
- package/dist/components/SuperChat/index.js +3 -3
- package/dist/components/TagEditor/index.cjs +5 -3
- package/dist/components/TagEditor/index.js +3 -1
- package/dist/components/VideoCard/index.cjs +4 -4
- package/dist/components/VideoCard/index.js +2 -2
- package/dist/datavis.cjs +2 -2
- package/dist/datavis.js +1 -1
- package/dist/esheet.cjs +6 -6
- package/dist/esheet.js +3 -3
- package/dist/index.cjs +300 -314
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -2
- package/dist/index.d.ts +22 -2
- package/dist/index.js +29 -43
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/templates.cjs +31 -31
- package/dist/templates.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-6JSFT2J5.js.map +0 -1
- package/dist/chunk-BMSG4NBH.js +0 -56
- package/dist/chunk-BMSG4NBH.js.map +0 -1
- package/dist/chunk-CEQJGUAS.js.map +0 -1
- package/dist/chunk-EMRWTCCN.cjs.map +0 -1
- package/dist/chunk-ENMXHZNE.js.map +0 -1
- package/dist/chunk-I2MMUFCN.cjs.map +0 -1
- package/dist/chunk-LSMS6DY7.cjs.map +0 -1
- package/dist/chunk-OZ5CKVQN.js.map +0 -1
- package/dist/chunk-T4L7Q5FA.cjs.map +0 -1
- package/dist/chunk-VNEAQCY2.js.map +0 -1
- package/dist/chunk-VPIYTQCV.cjs.map +0 -1
- package/dist/chunk-YVL3XATO.cjs +0 -79
- package/dist/chunk-YVL3XATO.cjs.map +0 -1
|
@@ -42,7 +42,9 @@ var progressBarTrackVariants = classVarianceAuthority.cva(
|
|
|
42
42
|
}
|
|
43
43
|
);
|
|
44
44
|
var progressBarFillVariants = classVarianceAuthority.cva(
|
|
45
|
-
[
|
|
45
|
+
[
|
|
46
|
+
"h-full rounded-full motion-safe:transition-all motion-safe:duration-300 motion-safe:ease-out"
|
|
47
|
+
],
|
|
46
48
|
{
|
|
47
49
|
variants: {
|
|
48
50
|
variant: {
|
|
@@ -76,6 +78,8 @@ function Progress({
|
|
|
76
78
|
value,
|
|
77
79
|
max = 100,
|
|
78
80
|
label,
|
|
81
|
+
srLabel,
|
|
82
|
+
valueText,
|
|
79
83
|
showValue = false,
|
|
80
84
|
formatValue,
|
|
81
85
|
size,
|
|
@@ -83,6 +87,7 @@ function Progress({
|
|
|
83
87
|
animated,
|
|
84
88
|
striped,
|
|
85
89
|
className,
|
|
90
|
+
fillClassName,
|
|
86
91
|
indeterminate = false
|
|
87
92
|
}) {
|
|
88
93
|
const percentage = Math.min(Math.max(value / max * 100, 0), 100);
|
|
@@ -123,8 +128,9 @@ function Progress({
|
|
|
123
128
|
"aria-valuenow": indeterminate ? void 0 : value,
|
|
124
129
|
"aria-valuemin": 0,
|
|
125
130
|
"aria-valuemax": max,
|
|
131
|
+
"aria-valuetext": indeterminate ? void 0 : valueText,
|
|
126
132
|
"aria-labelledby": label ? `${progressId}-label` : void 0,
|
|
127
|
-
"aria-label": !label ? "Progress" : void 0,
|
|
133
|
+
"aria-label": !label ? srLabel ?? "Progress" : void 0,
|
|
128
134
|
className: chunkS5RVSXDV_cjs.cn(progressBarTrackVariants({ size })),
|
|
129
135
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
130
136
|
"div",
|
|
@@ -136,7 +142,8 @@ function Progress({
|
|
|
136
142
|
!striped && variant === "default" && "bg-primary-800",
|
|
137
143
|
!striped && variant === "success" && "bg-green-500",
|
|
138
144
|
!striped && variant === "warning" && "bg-yellow-500",
|
|
139
|
-
!striped && variant === "danger" && "bg-red-500"
|
|
145
|
+
!striped && variant === "danger" && "bg-red-500",
|
|
146
|
+
fillClassName
|
|
140
147
|
),
|
|
141
148
|
style: indeterminate ? void 0 : { width: `${percentage}%` }
|
|
142
149
|
}
|
|
@@ -253,5 +260,5 @@ exports.Progress = Progress;
|
|
|
253
260
|
exports.circularProgressVariants = circularProgressVariants;
|
|
254
261
|
exports.progressBarFillVariants = progressBarFillVariants;
|
|
255
262
|
exports.progressBarTrackVariants = progressBarTrackVariants;
|
|
256
|
-
//# sourceMappingURL=chunk-
|
|
257
|
-
//# sourceMappingURL=chunk-
|
|
263
|
+
//# sourceMappingURL=chunk-2I4IRQQG.cjs.map
|
|
264
|
+
//# sourceMappingURL=chunk-2I4IRQQG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Progress/Progress.tsx"],"names":["cva","React","jsxs","cn","jsx"],"mappings":"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","file":"chunk-2I4IRQQG.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Progress Bar Variants\n// ============================================================================\n\nconst progressBarTrackVariants = cva(\n ['w-full overflow-hidden rounded-full bg-neutral-200 dark:bg-neutral-700'],\n {\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n xl: 'h-4',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nconst progressBarFillVariants = cva(\n [\n 'h-full rounded-full motion-safe:transition-all motion-safe:duration-300 motion-safe:ease-out',\n ],\n {\n variants: {\n variant: {\n default: 'bg-primary-800',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n },\n animated: {\n true: 'animate-pulse',\n false: '',\n },\n striped: {\n true: [\n 'bg-gradient-to-r',\n 'from-transparent via-white/20 to-transparent',\n 'bg-[length:1rem_100%]',\n 'animate-[progress-stripes_1s_linear_infinite]',\n ],\n false: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n animated: false,\n striped: false,\n },\n }\n);\n\n// ============================================================================\n// Progress Bar Component\n// ============================================================================\n\nexport interface ProgressProps\n extends\n VariantProps<typeof progressBarTrackVariants>,\n VariantProps<typeof progressBarFillVariants> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Label for the progress bar */\n label?: string;\n /** Accessible name when no visible `label` is rendered. */\n srLabel?: string;\n /** Human-readable `aria-valuetext` announced instead of the raw value. */\n valueText?: string;\n /** Show the percentage value */\n showValue?: boolean;\n /** Format the displayed value */\n formatValue?: (value: number, max: number) => string;\n /** Additional class name */\n className?: string;\n /** Class for the fill, e.g. to tone its colour by value. */\n fillClassName?: string;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n}\n\n/**\n * A progress bar component for showing completion status.\n *\n * @example\n * ```tsx\n * <Progress value={60} />\n * <Progress value={75} showValue label=\"Upload progress\" />\n * <Progress value={30} variant=\"success\" striped />\n * ```\n */\nfunction Progress({\n value,\n max = 100,\n label,\n srLabel,\n valueText,\n showValue = false,\n formatValue,\n size,\n variant,\n animated,\n striped,\n className,\n fillClassName,\n indeterminate = false,\n}: ProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n const progressId = React.useId();\n\n const displayValue = formatValue\n ? formatValue(value, max)\n : `${Math.round(percentage)}%`;\n\n return (\n <div data-slot=\"progress\" className={cn('w-full', className)}>\n {(label || showValue) && (\n <div\n data-slot=\"progress-label-row\"\n className=\"mb-1.5 flex items-center justify-between\"\n >\n {label && (\n <label\n data-slot=\"progress-label\"\n id={`${progressId}-label`}\n className=\"text-foreground text-sm font-medium\"\n >\n {label}\n </label>\n )}\n {showValue && !indeterminate && (\n <span\n data-slot=\"progress-value\"\n className=\"text-sm text-neutral-600 dark:text-neutral-400\"\n >\n {displayValue}\n </span>\n )}\n </div>\n )}\n <div\n data-slot=\"progress-track\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuetext={indeterminate ? undefined : valueText}\n aria-labelledby={label ? `${progressId}-label` : undefined}\n aria-label={!label ? (srLabel ?? 'Progress') : undefined}\n className={cn(progressBarTrackVariants({ size }))}\n >\n <div\n data-slot=\"progress-fill\"\n className={cn(\n progressBarFillVariants({ variant, animated, striped }),\n indeterminate &&\n 'w-1/3 animate-[indeterminate_1.5s_ease-in-out_infinite]',\n !striped && variant === 'default' && 'bg-primary-800',\n !striped && variant === 'success' && 'bg-green-500',\n !striped && variant === 'warning' && 'bg-yellow-500',\n !striped && variant === 'danger' && 'bg-red-500',\n fillClassName\n )}\n style={indeterminate ? undefined : { width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n}\n\nProgress.displayName = 'Progress';\n\n// ============================================================================\n// Circular Progress Variants\n// ============================================================================\n\nconst circularProgressVariants = cva(['relative inline-flex'], {\n variants: {\n size: {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n xl: 'h-24 w-24',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// ============================================================================\n// Circular Progress Component\n// ============================================================================\n\nexport interface CircularProgressProps extends VariantProps<\n typeof circularProgressVariants\n> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Stroke width */\n strokeWidth?: number;\n /** Show the percentage value in the center */\n showValue?: boolean;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A circular progress indicator component.\n *\n * @example\n * ```tsx\n * <CircularProgress value={75} showValue />\n * <CircularProgress value={50} variant=\"success\" size=\"lg\" />\n * ```\n */\nfunction CircularProgress({\n value,\n max = 100,\n variant = 'default',\n size,\n strokeWidth = 4,\n showValue = false,\n indeterminate = false,\n className,\n}: CircularProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n // SVG calculations\n const sizeMap = { sm: 32, md: 48, lg: 64, xl: 96 };\n const svgSize = sizeMap[size || 'md'];\n const radius = (svgSize - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const variantColors = {\n default: 'stroke-primary-500',\n success: 'stroke-green-500',\n warning: 'stroke-yellow-500',\n danger: 'stroke-red-500',\n };\n\n return (\n <div\n data-slot=\"circular-progress\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label=\"Progress\"\n className={cn(circularProgressVariants({ size }), className)}\n >\n <svg\n aria-hidden=\"true\"\n className={cn('-rotate-90 transform', indeterminate && 'animate-spin')}\n width={svgSize}\n height={svgSize}\n >\n {/* Background track */}\n <circle\n className=\"stroke-neutral-200 dark:stroke-neutral-700\"\n fill=\"none\"\n strokeWidth={strokeWidth}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n />\n {/* Progress fill */}\n <circle\n className={cn(\n variantColors[variant],\n 'transition-all duration-300 ease-out'\n )}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeDasharray={circumference}\n strokeDashoffset={indeterminate ? circumference * 0.75 : offset}\n />\n </svg>\n {showValue && !indeterminate && (\n <span\n data-slot=\"circular-progress-value\"\n className=\"text-foreground absolute inset-0 flex items-center justify-center text-xs font-medium\"\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n}\n\nCircularProgress.displayName = 'CircularProgress';\n\nexport {\n Progress,\n CircularProgress,\n progressBarTrackVariants,\n progressBarFillVariants,\n circularProgressVariants,\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MediaPlayer } from './chunk-N54FYWG6.js';
|
|
2
2
|
import { Avatar } from './chunk-TI3TQQ7F.js';
|
|
3
|
-
import { Modal, ModalHeader, ModalTitle, ModalClose } from './chunk-
|
|
3
|
+
import { Modal, ModalHeader, ModalTitle, ModalClose } from './chunk-TWQSMUE6.js';
|
|
4
4
|
import { usePrefersReducedMotion } from './chunk-XDU65GLW.js';
|
|
5
5
|
import { Button } from './chunk-WFBUBT54.js';
|
|
6
6
|
import { cn } from './chunk-TQONQSJO.js';
|
|
@@ -870,5 +870,5 @@ var MediaFeed = React2.forwardRef(MediaFeedInner);
|
|
|
870
870
|
MediaFeed.displayName = "MediaFeed";
|
|
871
871
|
|
|
872
872
|
export { MediaFeed };
|
|
873
|
-
//# sourceMappingURL=chunk-
|
|
874
|
-
//# sourceMappingURL=chunk-
|
|
873
|
+
//# sourceMappingURL=chunk-2X54ZLT6.js.map
|
|
874
|
+
//# sourceMappingURL=chunk-2X54ZLT6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/MediaFeed/FeedMedia.tsx","../src/components/MediaFeed/MediaFeed.tsx"],"names":["React","jsxs","jsx"],"mappings":"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","file":"chunk-CMF7VCGP.js","sourcesContent":["import * as React from 'react';\nimport { Pause, Play } from 'lucide-react';\nimport { Button } from '../Button';\nimport { MediaPlayer, type MediaPlayerState } from '../MediaPlayer';\nimport type { MediaFeedLabels, MediaFeedMedia } from './types';\n\ninterface FeedMediaProps {\n media: MediaFeedMedia;\n title: string;\n active: boolean;\n autoPlay: boolean;\n muted: boolean;\n loop: boolean;\n labels: MediaFeedLabels;\n onActivate: () => void;\n playbackPosition: { timeMs: number; playRequested?: boolean };\n playbackRequestId?: string | number;\n}\n\n/** Only ordinary web URLs become links; media resources may use other schemes. */\nfunction sourceHref(src: string): string | undefined {\n try {\n const url = new URL(src, 'https://localhost/');\n return ['http:', 'https:'].includes(url.protocol) ? src : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction SourceLink({ src, labels }: { src: string; labels: MediaFeedLabels }) {\n const href = sourceHref(src);\n return href ? (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary-700 dark:text-primary-300 focus-visible:ring-ring rounded underline underline-offset-4 focus-visible:ring-2 focus-visible:outline-none\"\n >\n {labels.openSource}\n </a>\n ) : null;\n}\n\nfunction NativeFeedMedia({\n media,\n title,\n active,\n autoPlay,\n muted,\n loop,\n labels,\n onActivate,\n playbackPosition,\n playbackRequestId,\n}: FeedMediaProps) {\n const mediaElementRef = React.useRef<\n HTMLVideoElement | HTMLAudioElement | null\n >(null);\n const [state, setState] = React.useState<MediaPlayerState>('idle');\n const [blocked, setBlocked] = React.useState(false);\n const [retryVersion, setRetryVersion] = React.useState(0);\n const wantsPlayback = React.useRef(playbackPosition.playRequested ?? false);\n const latestPlaybackRequest = React.useRef(playbackRequestId);\n latestPlaybackRequest.current = playbackRequestId;\n const handledPlaybackRequest = React.useRef<string | number | undefined>(\n undefined\n );\n const ownershipPause = React.useRef(false);\n const attemptId = React.useRef(0);\n const activeRef = React.useRef(active);\n const canSavePosition = React.useRef(false);\n activeRef.current = active;\n\n const tryPlay = React.useCallback(async () => {\n const element = mediaElementRef.current;\n if (!element || !activeRef.current) return;\n const attempt = ++attemptId.current;\n setBlocked(false);\n try {\n // The native promise can reject when browser autoplay policy requires a\n // gesture. Playback state still comes from native events, never intent.\n await element.play();\n // A delayed request must not start a card that has since left the active\n // surface. A newer request for the same active element can finish normally.\n if (!activeRef.current || element !== mediaElementRef.current)\n element.pause();\n } catch (error) {\n if (!activeRef.current || attempt !== attemptId.current) return;\n if (error instanceof Error && error.name === 'AbortError') return;\n setBlocked(true);\n }\n }, []);\n\n const pauseForOwnership = React.useCallback(\n (element: HTMLMediaElement | null) => {\n if (element && element === mediaElementRef.current && !element.paused)\n ownershipPause.current = true;\n element?.pause();\n },\n []\n );\n\n React.useEffect(() => {\n const element = mediaElementRef.current;\n const attempts = attemptId;\n const restorePosition = () => {\n if (!element || !activeRef.current) return;\n if (playbackPosition.timeMs > 0) {\n element.currentTime = playbackPosition.timeMs / 1000;\n }\n canSavePosition.current = true;\n };\n if (active && element) {\n // Another surface can clear shared manual intent while this inline copy\n // is paused (for example, the user pauses inside fullscreen).\n wantsPlayback.current = playbackPosition.playRequested ?? false;\n if (element.readyState >= 1) restorePosition();\n else element.addEventListener('loadedmetadata', restorePosition);\n }\n if (\n active &&\n (latestPlaybackRequest.current === undefined ||\n latestPlaybackRequest.current === handledPlaybackRequest.current) &&\n (autoPlay || wantsPlayback.current)\n ) {\n void tryPlay();\n } else if (!active) {\n attemptId.current++;\n pauseForOwnership(element);\n setBlocked(false);\n }\n return () => {\n attempts.current++;\n element?.removeEventListener('loadedmetadata', restorePosition);\n if (element && canSavePosition.current)\n playbackPosition.timeMs = element.currentTime * 1000;\n pauseForOwnership(element);\n };\n }, [\n active,\n autoPlay,\n pauseForOwnership,\n playbackPosition,\n retryVersion,\n tryPlay,\n ]);\n\n React.useEffect(() => {\n if (\n !active ||\n playbackRequestId === undefined ||\n playbackRequestId === handledPlaybackRequest.current\n )\n return;\n handledPlaybackRequest.current = playbackRequestId;\n wantsPlayback.current = true;\n playbackPosition.playRequested = true;\n void tryPlay();\n }, [active, playbackRequestId, playbackPosition, tryPlay]);\n\n const togglePlayback = () => {\n if (state === 'playing') {\n wantsPlayback.current = false;\n playbackPosition.playRequested = false;\n mediaElementRef.current?.pause();\n } else {\n wantsPlayback.current = true;\n playbackPosition.playRequested = true;\n onActivate();\n if (active) void tryPlay();\n }\n };\n\n return (\n <div className=\"flex h-full min-h-0 w-full flex-col items-center justify-center gap-3\">\n <MediaPlayer\n src={media.src}\n kind={media.kind === 'audio' ? 'audio' : 'video'}\n mediaElementRef={mediaElementRef}\n muted={muted}\n loop={loop}\n poster={media.poster}\n preload={active ? 'metadata' : 'none'}\n controls={active}\n aria-label={title}\n onStateChange={(next) => {\n setState(next);\n if (next === 'playing') ownershipPause.current = false;\n if (next === 'paused') {\n if (activeRef.current && !ownershipPause.current) {\n wantsPlayback.current = false;\n playbackPosition.playRequested = false;\n }\n ownershipPause.current = false;\n }\n }}\n onTimeUpdate={(timeMs) => {\n if (canSavePosition.current) playbackPosition.timeMs = timeMs;\n }}\n onRetry={() => {\n ownershipPause.current = false;\n canSavePosition.current = false;\n setState('idle');\n setBlocked(false);\n setRetryVersion((version) => version + 1);\n }}\n labels={{ error: labels.mediaError, retry: labels.retry }}\n className=\"min-h-0 flex-1 [&_video]:h-full [&_video]:w-full\"\n />\n {state !== 'error' && (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n leftIcon={\n state === 'playing' ? (\n <Pause className=\"h-4 w-4\" aria-hidden=\"true\" />\n ) : (\n <Play className=\"h-4 w-4\" aria-hidden=\"true\" />\n )\n }\n onClick={togglePlayback}\n >\n {state === 'playing' ? labels.pause : labels.play}\n </Button>\n )}\n {blocked && (\n <p\n role=\"status\"\n className=\"text-muted-foreground m-0 text-center text-sm\"\n >\n {labels.blockedAutoplay}\n </p>\n )}\n {state === 'error' && <SourceLink src={media.src} labels={labels} />}\n </div>\n );\n}\n\nfunction ImageFeedMedia({ media, title, labels }: FeedMediaProps) {\n const [failed, setFailed] = React.useState(false);\n return failed ? (\n <div role=\"alert\" className=\"flex flex-col gap-3 p-6 text-center\">\n <p className=\"text-muted-foreground m-0\">{labels.mediaError}</p>\n <SourceLink src={media.src} labels={labels} />\n </div>\n ) : (\n <img\n src={media.src}\n alt={media.alt ?? title}\n loading=\"lazy\"\n className=\"h-full max-h-full w-full object-contain\"\n onError={() => setFailed(true)}\n />\n );\n}\n\nfunction youtubeId(src: string): string | null {\n const validId = /^[A-Za-z0-9_-]{11}$/;\n if (validId.test(src)) return src;\n try {\n const url = new URL(src);\n const host = url.hostname.toLowerCase();\n const parts = url.pathname.split('/').filter(Boolean);\n let id: string | null = null;\n if (host === 'youtu.be' || host === 'www.youtu.be') {\n id = parts[0] ?? null;\n } else if (\n [\n 'youtube.com',\n 'www.youtube.com',\n 'm.youtube.com',\n 'youtube-nocookie.com',\n 'www.youtube-nocookie.com',\n ].includes(host)\n ) {\n id =\n url.searchParams.get('v') ??\n (['embed', 'shorts', 'live'].includes(parts[0]) ? parts[1] : null);\n }\n return id && validId.test(id) ? id : null;\n } catch {\n return null;\n }\n}\n\nfunction YouTubeFeedMedia({\n media,\n title,\n active,\n autoPlay,\n muted,\n loop,\n labels,\n onActivate,\n playbackRequestId,\n}: FeedMediaProps) {\n const id = youtubeId(media.src);\n const [requestedPlayback, setRequestedPlayback] = React.useState(false);\n const handledPlaybackRequest = React.useRef<string | number | undefined>(\n undefined\n );\n const pendingPlayback =\n active &&\n playbackRequestId !== undefined &&\n playbackRequestId !== handledPlaybackRequest.current;\n React.useEffect(() => {\n if (!active) setRequestedPlayback(false);\n else if (\n playbackRequestId !== undefined &&\n playbackRequestId !== handledPlaybackRequest.current\n ) {\n handledPlaybackRequest.current = playbackRequestId;\n setRequestedPlayback(true);\n }\n }, [active, playbackRequestId]);\n const embedUrl = new URL(\n `https://www.youtube-nocookie.com/embed/${id ?? ''}`\n );\n for (const [key, value] of Object.entries({\n autoplay: autoPlay || requestedPlayback || pendingPlayback ? '1' : '0',\n mute: muted ? '1' : '0',\n controls: '1',\n playsinline: '1',\n rel: '0',\n loop: loop ? '1' : '0',\n ...(loop && id ? { playlist: id } : {}),\n }))\n embedUrl.searchParams.set(key, value);\n const [failed, setFailed] = React.useState(false);\n return (\n <div className=\"flex h-full min-h-0 w-full flex-col items-center gap-3\">\n {active && id && !failed ? (\n <iframe\n src={embedUrl.href}\n title={title}\n className=\"min-h-0 w-full flex-1 border-0\"\n allow=\"autoplay; encrypted-media; picture-in-picture; fullscreen\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n allowFullScreen\n onError={() => setFailed(true)}\n />\n ) : (\n <div className=\"flex min-h-0 w-full flex-1 flex-col items-center justify-center gap-4\">\n {media.poster && (\n <img\n src={media.poster}\n alt=\"\"\n loading=\"lazy\"\n className=\"min-h-0 max-w-full flex-1 object-contain\"\n />\n )}\n {id && !failed ? (\n <Button\n variant=\"secondary\"\n leftIcon={<Play className=\"h-4 w-4\" aria-hidden=\"true\" />}\n onClick={() => {\n setRequestedPlayback(true);\n onActivate();\n }}\n >\n {labels.play}\n </Button>\n ) : (\n <p role=\"alert\" className=\"text-muted-foreground m-0\">\n {labels.mediaError}\n </p>\n )}\n </div>\n )}\n <p className=\"text-muted-foreground m-0 text-center text-sm\">\n {labels.youtubeNotice}\n </p>\n <SourceLink\n src={id ? `https://www.youtube.com/watch?v=${id}` : media.src}\n labels={labels}\n />\n </div>\n );\n}\n\n/** Native resources share UI transport; external embeds retain their controls. */\nexport function FeedMedia(props: FeedMediaProps) {\n if (props.media.kind === 'image') return <ImageFeedMedia {...props} />;\n if (props.media.kind === 'youtube') return <YouTubeFeedMedia {...props} />;\n return <NativeFeedMedia {...props} />;\n}\n","import * as React from 'react';\nimport { ChevronDown, ChevronUp, Maximize2 } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\nimport { Avatar } from '../Avatar';\nimport { Button } from '../Button';\nimport { Modal, ModalClose, ModalHeader, ModalTitle } from '../Modal';\nimport { FeedMedia } from './FeedMedia';\nimport type { MediaFeedLabels, MediaFeedProps } from './types';\n\nconst defaultLabels: MediaFeedLabels = {\n feed: 'Media feed',\n loading: 'Loading media…',\n empty: 'No media to display.',\n error: 'Unable to load the media feed.',\n retry: 'Retry',\n fullscreen: 'Open fullscreen',\n close: 'Close fullscreen',\n previous: 'Previous item',\n next: 'Next item',\n play: 'Play',\n pause: 'Pause',\n blockedAutoplay: 'Playback did not start. Press Play to try again.',\n mediaError: 'This media is unavailable.',\n openSource: 'Open source',\n youtubeNotice: 'If embedded playback is unavailable, open the source.',\n item: (position, total) => `Media item ${position} of ${total}`,\n position: (position, total) => `${position} / ${total}`,\n};\n\n/**\n * A vertical, caller-owned media collection with one active playback surface.\n * Native players share MediaPlayer; provider-specific players can use the\n * renderMedia slot. Records, engagement actions and navigation belong to the host.\n */\nfunction MediaFeedInner<T>(\n {\n items,\n getId,\n getMedia,\n getTitle,\n getCaption,\n getAuthor,\n renderActions,\n renderMedia,\n activeItemId,\n defaultActiveItemId,\n onActiveItemChange,\n playbackRequest,\n loading = false,\n error,\n onRetry,\n autoPlay = true,\n muted = true,\n loop = true,\n labels: labelOverrides,\n classNames = {},\n className,\n ...rest\n }: MediaFeedProps<T>,\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n) {\n const labels = { ...defaultLabels, ...labelOverrides };\n const prefersReducedMotion = usePrefersReducedMotion();\n const allowAutoPlay = autoPlay && !prefersReducedMotion;\n const ids = items.map(getId);\n const idsKey = JSON.stringify(ids);\n const [internalActiveId, setInternalActiveId] = React.useState(\n () => defaultActiveItemId ?? ids[0]\n );\n const requestedId = activeItemId ?? internalActiveId;\n const activeId =\n requestedId !== undefined && ids.includes(requestedId)\n ? requestedId\n : ids[0];\n const activeIndex = activeId === undefined ? -1 : ids.indexOf(activeId);\n const [fullscreen, setFullscreen] = React.useState(false);\n const [retrying, setRetrying] = React.useState(false);\n const [retryFailed, setRetryFailed] = React.useState(false);\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const viewportRef = React.useRef<HTMLDivElement | null>(null);\n const cardRefs = React.useRef(new Map<string, HTMLElement>());\n const playbackPositions = React.useRef(\n new Map<string, { src: string; timeMs: number; playRequested?: boolean }>()\n );\n const consumedPlaybackRequests = React.useRef(\n new Map<string, string | number>()\n );\n const fullscreenTriggerRef = React.useRef<HTMLButtonElement | null>(null);\n const hasObserver = typeof IntersectionObserver !== 'undefined';\n // Hydration safety: the server cannot know whether the client supports\n // IntersectionObserver, so both environments start \"not visible\" and the\n // mount effects below establish real visibility (observer callbacks, or the\n // no-observer fallback). Offscreen autoplay therefore never starts early.\n const [visibleId, setVisibleId] = React.useState<string | null>(null);\n const visibleIdRef = React.useRef(visibleId);\n const [viewportVisible, setViewportVisible] = React.useState(false);\n const [pageVisible, setPageVisible] = React.useState(\n () =>\n typeof document === 'undefined' || document.visibilityState !== 'hidden'\n );\n const latest = React.useRef({\n items,\n ids,\n activeId,\n activeItemId,\n onActiveItemChange,\n fullscreen,\n });\n latest.current = {\n items,\n ids,\n activeId,\n activeItemId,\n onActiveItemChange,\n fullscreen,\n };\n\n const setRoot = React.useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof forwardedRef === 'function') forwardedRef(node);\n else if (forwardedRef) forwardedRef.current = node;\n },\n [forwardedRef]\n );\n\n const select = React.useCallback((id: string) => {\n const current = latest.current;\n const index = current.ids.indexOf(id);\n if (index < 0 || id === current.activeId) return;\n if (current.activeItemId === undefined) setInternalActiveId(id);\n current.onActiveItemChange?.(current.items[index]);\n }, []);\n\n // Visibility belongs to this feed, never a global keyboard/player singleton.\n // A separate viewport observer also pauses a feed scrolled off the host page.\n React.useEffect(() => {\n const root = rootRef.current;\n if (!root || typeof IntersectionObserver === 'undefined') {\n // No-observer fallback: assume the feed is on screen.\n setViewportVisible(true);\n return;\n }\n const observer = new IntersectionObserver(([entry]) => {\n setViewportVisible(entry.isIntersecting);\n });\n observer.observe(root);\n return () => observer.disconnect();\n }, []);\n\n React.useEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport || typeof IntersectionObserver === 'undefined') return;\n const ratios = new Map<string, number>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const id = (entry.target as HTMLElement).dataset.mediaId;\n if (id !== undefined)\n ratios.set(id, entry.isIntersecting ? entry.intersectionRatio : 0);\n }\n let bestId: string | null = null;\n let bestRatio = 0;\n for (const [id, ratio] of ratios) {\n if (ratio > bestRatio) {\n bestId = id;\n bestRatio = ratio;\n }\n }\n visibleIdRef.current = bestId;\n setVisibleId(bestId);\n if (bestId !== null && !latest.current.fullscreen) select(bestId);\n },\n { root: viewport, threshold: [0, 0.25, 0.5, 0.75, 1] }\n );\n cardRefs.current.forEach((card) => observer.observe(card));\n return () => observer.disconnect();\n }, [idsKey, loading, error, select]);\n\n React.useEffect(() => {\n const update = () => setPageVisible(document.visibilityState !== 'hidden');\n document.addEventListener('visibilitychange', update);\n return () => document.removeEventListener('visibilitychange', update);\n }, []);\n\n // Controlled selection and initial deep links scroll within the feed, without\n // moving the surrounding inbox/page. Observer selections are already visible.\n React.useEffect(() => {\n if (activeId === undefined) return;\n if (!hasObserver) {\n visibleIdRef.current = activeId;\n setVisibleId(activeId);\n }\n if (visibleIdRef.current === activeId && hasObserver) return;\n const card = cardRefs.current.get(activeId);\n if (card && viewportRef.current) {\n viewportRef.current.scrollTo?.({ top: card.offsetTop, behavior: 'auto' });\n }\n }, [activeId, idsKey, hasObserver, loading, error]);\n\n React.useEffect(() => {\n if (!items.length) setFullscreen(false);\n }, [items.length]);\n\n // The gesture targets an already selected, visible surface. Consume it once\n // per feed so a later source/fullscreen remount cannot resurrect a paused clip.\n React.useEffect(() => {\n if (\n loading ||\n error ||\n activeIndex < 0 ||\n !playbackRequest ||\n playbackRequest.itemId !== activeId\n )\n return;\n if (\n !pageVisible ||\n (!fullscreen && (!viewportVisible || visibleId !== activeId))\n )\n return;\n consumedPlaybackRequests.current.set(\n playbackRequest.itemId,\n playbackRequest.requestId\n );\n }, [\n activeId,\n activeIndex,\n fullscreen,\n pageVisible,\n viewportVisible,\n visibleId,\n playbackRequest,\n loading,\n error,\n ]);\n\n React.useEffect(() => {\n const positions = playbackPositions.current;\n for (const id of positions.keys()) {\n if (!latest.current.ids.includes(id)) positions.delete(id);\n }\n }, [idsKey]);\n\n React.useEffect(() => {\n if (fullscreen || !fullscreenTriggerRef.current) return;\n if (fullscreenTriggerRef.current.isConnected)\n fullscreenTriggerRef.current.focus();\n else viewportRef.current?.focus();\n fullscreenTriggerRef.current = null;\n }, [fullscreen]);\n\n const navigate = (index: number, focus = false) => {\n const id = ids[Math.max(0, Math.min(index, ids.length - 1))];\n if (id === undefined) return;\n select(id);\n const card = cardRefs.current.get(id);\n if (card && viewportRef.current) {\n viewportRef.current.scrollTo?.({ top: card.offsetTop, behavior: 'auto' });\n if (focus) card.focus({ preventScroll: true });\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n // Never steal arrows/Space from a player, reaction button or chat composer.\n const target = event.target as HTMLElement;\n if (event.target !== event.currentTarget && target.dataset?.slot !== 'item')\n return;\n let next: number;\n switch (event.key) {\n case 'ArrowDown':\n case 'PageDown':\n next = activeIndex + 1;\n break;\n case 'ArrowUp':\n case 'PageUp':\n next = activeIndex - 1;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = items.length - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n navigate(next, event.target !== event.currentTarget);\n };\n\n const retry = async () => {\n if (!onRetry || retrying) return;\n setRetrying(true);\n setRetryFailed(false);\n try {\n await onRetry();\n } catch {\n setRetryFailed(true);\n } finally {\n setRetrying(false);\n }\n };\n\n const renderCard = (item: T, index: number, immersive: boolean) => {\n const id = getId(item);\n const media = getMedia(item);\n let playbackPosition = playbackPositions.current.get(id);\n if (!playbackPosition || playbackPosition.src !== media.src) {\n playbackPosition = { src: media.src, timeMs: 0 };\n playbackPositions.current.set(id, playbackPosition);\n }\n const title = getTitle?.(item) || labels.item(index + 1, items.length);\n const author = getAuthor?.(item);\n const caption = getCaption?.(item);\n const active =\n !loading &&\n !error &&\n pageVisible &&\n (immersive\n ? fullscreen && id === activeId\n : !fullscreen &&\n viewportVisible &&\n id === activeId &&\n id === visibleId);\n const playbackRequestId =\n active &&\n playbackRequest?.itemId === id &&\n consumedPlaybackRequests.current.get(id) !== playbackRequest.requestId\n ? playbackRequest.requestId\n : undefined;\n return (\n <article\n key={id}\n ref={\n immersive\n ? undefined\n : (node) => {\n if (node) cardRefs.current.set(id, node);\n else cardRefs.current.delete(id);\n }\n }\n data-slot=\"item\"\n data-media-id={id}\n data-active={active}\n aria-label={title}\n aria-posinset={index + 1}\n aria-setsize={items.length}\n tabIndex={id === activeId ? 0 : -1}\n className={cn(\n 'border-border bg-card text-card-foreground focus-visible:ring-ring flex min-h-0 w-full snap-start flex-col overflow-hidden border focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-inset',\n immersive ? 'h-full flex-1 border-0' : 'h-full shrink-0 rounded-xl',\n classNames.item\n )}\n >\n <div\n data-slot=\"media\"\n className={cn(\n 'bg-muted flex min-h-0 flex-1 items-center justify-center p-3',\n classNames.media\n )}\n >\n {renderMedia ? (\n renderMedia(media, {\n item,\n active,\n autoPlay: allowAutoPlay,\n muted,\n loop,\n playbackRequestId,\n })\n ) : (\n <FeedMedia\n key={`${id}:${media.kind}:${media.src}:${immersive}`}\n media={media}\n title={title}\n active={active}\n autoPlay={allowAutoPlay}\n muted={muted}\n loop={loop}\n labels={labels}\n onActivate={() => select(id)}\n playbackPosition={playbackPosition}\n playbackRequestId={playbackRequestId}\n />\n )}\n </div>\n <div\n data-slot=\"details\"\n className={cn(\n 'flex max-h-[40%] shrink-0 flex-col gap-2 overflow-y-auto p-4',\n classNames.details\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n {author && (\n <div\n data-slot=\"author\"\n className={cn(\n 'mb-2 flex items-center gap-2',\n classNames.author\n )}\n >\n <Avatar\n name={author.name}\n src={author.avatar}\n alt=\"\"\n size=\"sm\"\n />\n <span className=\"truncate text-sm font-medium\">\n {author.name}\n </span>\n </div>\n )}\n <h3\n data-slot=\"title\"\n className={cn('m-0 text-base font-semibold', classNames.title)}\n >\n {title}\n </h3>\n </div>\n {!immersive && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={labels.fullscreen}\n title={labels.fullscreen}\n onClick={(event) => {\n fullscreenTriggerRef.current = event.currentTarget;\n select(id);\n setFullscreen(true);\n }}\n >\n <Maximize2 className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n )}\n </div>\n {caption != null && (\n <div\n data-slot=\"caption\"\n className={cn(\n 'text-muted-foreground text-sm',\n classNames.caption\n )}\n >\n {caption}\n </div>\n )}\n {renderActions && (\n <div\n data-slot=\"actions\"\n className={cn(\n 'flex flex-wrap items-center gap-2',\n classNames.actions\n )}\n >\n {renderActions(item)}\n </div>\n )}\n </div>\n </article>\n );\n };\n\n const controls = (\n <div\n data-slot=\"controls\"\n className={cn(\n 'flex shrink-0 items-center justify-between gap-3 py-2',\n classNames.controls\n )}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-auto min-h-8 flex-1 py-2 [&_[data-slot=button-label]]:whitespace-normal\"\n disabled={activeIndex <= 0}\n onClick={() => navigate(activeIndex - 1)}\n leftIcon={<ChevronUp className=\"h-4 w-4\" aria-hidden=\"true\" />}\n >\n {labels.previous}\n </Button>\n <span\n role=\"status\"\n aria-live=\"polite\"\n className=\"text-muted-foreground shrink-0 text-sm whitespace-nowrap\"\n >\n {labels.position(activeIndex + 1, items.length)}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-auto min-h-8 flex-1 py-2 [&_[data-slot=button-label]]:whitespace-normal\"\n disabled={activeIndex >= items.length - 1}\n onClick={() => navigate(activeIndex + 1)}\n rightIcon={<ChevronDown className=\"h-4 w-4\" aria-hidden=\"true\" />}\n >\n {labels.next}\n </Button>\n </div>\n );\n\n return (\n <div\n ref={setRoot}\n data-slot=\"root\"\n data-component=\"media-feed\"\n className={cn(\n 'bg-background text-foreground flex h-[min(48rem,80dvh)] min-h-0 w-full flex-col',\n classNames.root,\n className\n )}\n {...rest}\n >\n {loading || error || !items.length ? (\n <div\n data-slot=\"status\"\n role={error ? 'alert' : 'status'}\n aria-busy={loading || retrying}\n className={cn(\n 'flex min-h-0 flex-1 flex-col items-center justify-center gap-4 p-6 text-center',\n classNames.status\n )}\n >\n <p className=\"m-0\">\n {loading ? labels.loading : error || labels.empty}\n </p>\n {error && onRetry && (\n <Button\n variant=\"outline\"\n isLoading={retrying}\n loadingText={labels.loading}\n onClick={() => {\n void retry();\n }}\n >\n {labels.retry}\n </Button>\n )}\n {retryFailed && (\n <p role=\"alert\" className=\"m-0\">\n {labels.error}\n </p>\n )}\n </div>\n ) : (\n <>\n {/* ARIA feeds are focusable composites with scoped item navigation. */}\n {/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n <div\n ref={viewportRef}\n data-slot=\"viewport\"\n role=\"feed\"\n aria-label={labels.feed}\n aria-busy={false}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\n 'focus-visible:ring-ring relative flex min-h-0 flex-1 snap-y snap-mandatory flex-col gap-4 overflow-y-auto overscroll-contain focus-visible:ring-2 focus-visible:outline-none',\n classNames.viewport\n )}\n >\n {items.map((item, index) => renderCard(item, index, false))}\n </div>\n {/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n {controls}\n </>\n )}\n <Modal\n open={fullscreen && !loading && !error && !!items.length}\n onOpenChange={setFullscreen}\n size=\"full\"\n className=\"h-dvh min-h-0 sm:h-[calc(100dvh-2rem)]\"\n >\n <ModalHeader>\n <ModalTitle>{labels.feed}</ModalTitle>\n <ModalClose aria-label={labels.close} />\n </ModalHeader>\n {/* Fullscreen keeps the same feed navigation; controls retain their keys. */}\n {/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n <div\n data-slot=\"fullscreen\"\n data-component=\"media-feed\"\n role=\"feed\"\n aria-label={labels.feed}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex min-h-0 flex-1 flex-col px-2 pb-2 sm:px-4',\n classNames.fullscreen\n )}\n >\n {activeIndex >= 0 &&\n renderCard(items[activeIndex], activeIndex, true)}\n {controls}\n </div>\n {/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n </Modal>\n </div>\n );\n}\n\nexport const MediaFeed = React.forwardRef(MediaFeedInner) as <T>(\n props: MediaFeedProps<T> & React.RefAttributes<HTMLDivElement>\n) => React.ReactElement;\n\n(MediaFeed as React.NamedExoticComponent).displayName = 'MediaFeed';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/MediaFeed/FeedMedia.tsx","../src/components/MediaFeed/MediaFeed.tsx"],"names":["React","jsxs","jsx"],"mappings":"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","file":"chunk-2X54ZLT6.js","sourcesContent":["import * as React from 'react';\nimport { Pause, Play } from 'lucide-react';\nimport { Button } from '../Button';\nimport { MediaPlayer, type MediaPlayerState } from '../MediaPlayer';\nimport type { MediaFeedLabels, MediaFeedMedia } from './types';\n\ninterface FeedMediaProps {\n media: MediaFeedMedia;\n title: string;\n active: boolean;\n autoPlay: boolean;\n muted: boolean;\n loop: boolean;\n labels: MediaFeedLabels;\n onActivate: () => void;\n playbackPosition: { timeMs: number; playRequested?: boolean };\n playbackRequestId?: string | number;\n}\n\n/** Only ordinary web URLs become links; media resources may use other schemes. */\nfunction sourceHref(src: string): string | undefined {\n try {\n const url = new URL(src, 'https://localhost/');\n return ['http:', 'https:'].includes(url.protocol) ? src : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction SourceLink({ src, labels }: { src: string; labels: MediaFeedLabels }) {\n const href = sourceHref(src);\n return href ? (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary-700 dark:text-primary-300 focus-visible:ring-ring rounded underline underline-offset-4 focus-visible:ring-2 focus-visible:outline-none\"\n >\n {labels.openSource}\n </a>\n ) : null;\n}\n\nfunction NativeFeedMedia({\n media,\n title,\n active,\n autoPlay,\n muted,\n loop,\n labels,\n onActivate,\n playbackPosition,\n playbackRequestId,\n}: FeedMediaProps) {\n const mediaElementRef = React.useRef<\n HTMLVideoElement | HTMLAudioElement | null\n >(null);\n const [state, setState] = React.useState<MediaPlayerState>('idle');\n const [blocked, setBlocked] = React.useState(false);\n const [retryVersion, setRetryVersion] = React.useState(0);\n const wantsPlayback = React.useRef(playbackPosition.playRequested ?? false);\n const latestPlaybackRequest = React.useRef(playbackRequestId);\n latestPlaybackRequest.current = playbackRequestId;\n const handledPlaybackRequest = React.useRef<string | number | undefined>(\n undefined\n );\n const ownershipPause = React.useRef(false);\n const attemptId = React.useRef(0);\n const activeRef = React.useRef(active);\n const canSavePosition = React.useRef(false);\n activeRef.current = active;\n\n const tryPlay = React.useCallback(async () => {\n const element = mediaElementRef.current;\n if (!element || !activeRef.current) return;\n const attempt = ++attemptId.current;\n setBlocked(false);\n try {\n // The native promise can reject when browser autoplay policy requires a\n // gesture. Playback state still comes from native events, never intent.\n await element.play();\n // A delayed request must not start a card that has since left the active\n // surface. A newer request for the same active element can finish normally.\n if (!activeRef.current || element !== mediaElementRef.current)\n element.pause();\n } catch (error) {\n if (!activeRef.current || attempt !== attemptId.current) return;\n if (error instanceof Error && error.name === 'AbortError') return;\n setBlocked(true);\n }\n }, []);\n\n const pauseForOwnership = React.useCallback(\n (element: HTMLMediaElement | null) => {\n if (element && element === mediaElementRef.current && !element.paused)\n ownershipPause.current = true;\n element?.pause();\n },\n []\n );\n\n React.useEffect(() => {\n const element = mediaElementRef.current;\n const attempts = attemptId;\n const restorePosition = () => {\n if (!element || !activeRef.current) return;\n if (playbackPosition.timeMs > 0) {\n element.currentTime = playbackPosition.timeMs / 1000;\n }\n canSavePosition.current = true;\n };\n if (active && element) {\n // Another surface can clear shared manual intent while this inline copy\n // is paused (for example, the user pauses inside fullscreen).\n wantsPlayback.current = playbackPosition.playRequested ?? false;\n if (element.readyState >= 1) restorePosition();\n else element.addEventListener('loadedmetadata', restorePosition);\n }\n if (\n active &&\n (latestPlaybackRequest.current === undefined ||\n latestPlaybackRequest.current === handledPlaybackRequest.current) &&\n (autoPlay || wantsPlayback.current)\n ) {\n void tryPlay();\n } else if (!active) {\n attemptId.current++;\n pauseForOwnership(element);\n setBlocked(false);\n }\n return () => {\n attempts.current++;\n element?.removeEventListener('loadedmetadata', restorePosition);\n if (element && canSavePosition.current)\n playbackPosition.timeMs = element.currentTime * 1000;\n pauseForOwnership(element);\n };\n }, [\n active,\n autoPlay,\n pauseForOwnership,\n playbackPosition,\n retryVersion,\n tryPlay,\n ]);\n\n React.useEffect(() => {\n if (\n !active ||\n playbackRequestId === undefined ||\n playbackRequestId === handledPlaybackRequest.current\n )\n return;\n handledPlaybackRequest.current = playbackRequestId;\n wantsPlayback.current = true;\n playbackPosition.playRequested = true;\n void tryPlay();\n }, [active, playbackRequestId, playbackPosition, tryPlay]);\n\n const togglePlayback = () => {\n if (state === 'playing') {\n wantsPlayback.current = false;\n playbackPosition.playRequested = false;\n mediaElementRef.current?.pause();\n } else {\n wantsPlayback.current = true;\n playbackPosition.playRequested = true;\n onActivate();\n if (active) void tryPlay();\n }\n };\n\n return (\n <div className=\"flex h-full min-h-0 w-full flex-col items-center justify-center gap-3\">\n <MediaPlayer\n src={media.src}\n kind={media.kind === 'audio' ? 'audio' : 'video'}\n mediaElementRef={mediaElementRef}\n muted={muted}\n loop={loop}\n poster={media.poster}\n preload={active ? 'metadata' : 'none'}\n controls={active}\n aria-label={title}\n onStateChange={(next) => {\n setState(next);\n if (next === 'playing') ownershipPause.current = false;\n if (next === 'paused') {\n if (activeRef.current && !ownershipPause.current) {\n wantsPlayback.current = false;\n playbackPosition.playRequested = false;\n }\n ownershipPause.current = false;\n }\n }}\n onTimeUpdate={(timeMs) => {\n if (canSavePosition.current) playbackPosition.timeMs = timeMs;\n }}\n onRetry={() => {\n ownershipPause.current = false;\n canSavePosition.current = false;\n setState('idle');\n setBlocked(false);\n setRetryVersion((version) => version + 1);\n }}\n labels={{ error: labels.mediaError, retry: labels.retry }}\n className=\"min-h-0 flex-1 [&_video]:h-full [&_video]:w-full\"\n />\n {state !== 'error' && (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n leftIcon={\n state === 'playing' ? (\n <Pause className=\"h-4 w-4\" aria-hidden=\"true\" />\n ) : (\n <Play className=\"h-4 w-4\" aria-hidden=\"true\" />\n )\n }\n onClick={togglePlayback}\n >\n {state === 'playing' ? labels.pause : labels.play}\n </Button>\n )}\n {blocked && (\n <p\n role=\"status\"\n className=\"text-muted-foreground m-0 text-center text-sm\"\n >\n {labels.blockedAutoplay}\n </p>\n )}\n {state === 'error' && <SourceLink src={media.src} labels={labels} />}\n </div>\n );\n}\n\nfunction ImageFeedMedia({ media, title, labels }: FeedMediaProps) {\n const [failed, setFailed] = React.useState(false);\n return failed ? (\n <div role=\"alert\" className=\"flex flex-col gap-3 p-6 text-center\">\n <p className=\"text-muted-foreground m-0\">{labels.mediaError}</p>\n <SourceLink src={media.src} labels={labels} />\n </div>\n ) : (\n <img\n src={media.src}\n alt={media.alt ?? title}\n loading=\"lazy\"\n className=\"h-full max-h-full w-full object-contain\"\n onError={() => setFailed(true)}\n />\n );\n}\n\nfunction youtubeId(src: string): string | null {\n const validId = /^[A-Za-z0-9_-]{11}$/;\n if (validId.test(src)) return src;\n try {\n const url = new URL(src);\n const host = url.hostname.toLowerCase();\n const parts = url.pathname.split('/').filter(Boolean);\n let id: string | null = null;\n if (host === 'youtu.be' || host === 'www.youtu.be') {\n id = parts[0] ?? null;\n } else if (\n [\n 'youtube.com',\n 'www.youtube.com',\n 'm.youtube.com',\n 'youtube-nocookie.com',\n 'www.youtube-nocookie.com',\n ].includes(host)\n ) {\n id =\n url.searchParams.get('v') ??\n (['embed', 'shorts', 'live'].includes(parts[0]) ? parts[1] : null);\n }\n return id && validId.test(id) ? id : null;\n } catch {\n return null;\n }\n}\n\nfunction YouTubeFeedMedia({\n media,\n title,\n active,\n autoPlay,\n muted,\n loop,\n labels,\n onActivate,\n playbackRequestId,\n}: FeedMediaProps) {\n const id = youtubeId(media.src);\n const [requestedPlayback, setRequestedPlayback] = React.useState(false);\n const handledPlaybackRequest = React.useRef<string | number | undefined>(\n undefined\n );\n const pendingPlayback =\n active &&\n playbackRequestId !== undefined &&\n playbackRequestId !== handledPlaybackRequest.current;\n React.useEffect(() => {\n if (!active) setRequestedPlayback(false);\n else if (\n playbackRequestId !== undefined &&\n playbackRequestId !== handledPlaybackRequest.current\n ) {\n handledPlaybackRequest.current = playbackRequestId;\n setRequestedPlayback(true);\n }\n }, [active, playbackRequestId]);\n const embedUrl = new URL(\n `https://www.youtube-nocookie.com/embed/${id ?? ''}`\n );\n for (const [key, value] of Object.entries({\n autoplay: autoPlay || requestedPlayback || pendingPlayback ? '1' : '0',\n mute: muted ? '1' : '0',\n controls: '1',\n playsinline: '1',\n rel: '0',\n loop: loop ? '1' : '0',\n ...(loop && id ? { playlist: id } : {}),\n }))\n embedUrl.searchParams.set(key, value);\n const [failed, setFailed] = React.useState(false);\n return (\n <div className=\"flex h-full min-h-0 w-full flex-col items-center gap-3\">\n {active && id && !failed ? (\n <iframe\n src={embedUrl.href}\n title={title}\n className=\"min-h-0 w-full flex-1 border-0\"\n allow=\"autoplay; encrypted-media; picture-in-picture; fullscreen\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n allowFullScreen\n onError={() => setFailed(true)}\n />\n ) : (\n <div className=\"flex min-h-0 w-full flex-1 flex-col items-center justify-center gap-4\">\n {media.poster && (\n <img\n src={media.poster}\n alt=\"\"\n loading=\"lazy\"\n className=\"min-h-0 max-w-full flex-1 object-contain\"\n />\n )}\n {id && !failed ? (\n <Button\n variant=\"secondary\"\n leftIcon={<Play className=\"h-4 w-4\" aria-hidden=\"true\" />}\n onClick={() => {\n setRequestedPlayback(true);\n onActivate();\n }}\n >\n {labels.play}\n </Button>\n ) : (\n <p role=\"alert\" className=\"text-muted-foreground m-0\">\n {labels.mediaError}\n </p>\n )}\n </div>\n )}\n <p className=\"text-muted-foreground m-0 text-center text-sm\">\n {labels.youtubeNotice}\n </p>\n <SourceLink\n src={id ? `https://www.youtube.com/watch?v=${id}` : media.src}\n labels={labels}\n />\n </div>\n );\n}\n\n/** Native resources share UI transport; external embeds retain their controls. */\nexport function FeedMedia(props: FeedMediaProps) {\n if (props.media.kind === 'image') return <ImageFeedMedia {...props} />;\n if (props.media.kind === 'youtube') return <YouTubeFeedMedia {...props} />;\n return <NativeFeedMedia {...props} />;\n}\n","import * as React from 'react';\nimport { ChevronDown, ChevronUp, Maximize2 } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\nimport { Avatar } from '../Avatar';\nimport { Button } from '../Button';\nimport { Modal, ModalClose, ModalHeader, ModalTitle } from '../Modal';\nimport { FeedMedia } from './FeedMedia';\nimport type { MediaFeedLabels, MediaFeedProps } from './types';\n\nconst defaultLabels: MediaFeedLabels = {\n feed: 'Media feed',\n loading: 'Loading media…',\n empty: 'No media to display.',\n error: 'Unable to load the media feed.',\n retry: 'Retry',\n fullscreen: 'Open fullscreen',\n close: 'Close fullscreen',\n previous: 'Previous item',\n next: 'Next item',\n play: 'Play',\n pause: 'Pause',\n blockedAutoplay: 'Playback did not start. Press Play to try again.',\n mediaError: 'This media is unavailable.',\n openSource: 'Open source',\n youtubeNotice: 'If embedded playback is unavailable, open the source.',\n item: (position, total) => `Media item ${position} of ${total}`,\n position: (position, total) => `${position} / ${total}`,\n};\n\n/**\n * A vertical, caller-owned media collection with one active playback surface.\n * Native players share MediaPlayer; provider-specific players can use the\n * renderMedia slot. Records, engagement actions and navigation belong to the host.\n */\nfunction MediaFeedInner<T>(\n {\n items,\n getId,\n getMedia,\n getTitle,\n getCaption,\n getAuthor,\n renderActions,\n renderMedia,\n activeItemId,\n defaultActiveItemId,\n onActiveItemChange,\n playbackRequest,\n loading = false,\n error,\n onRetry,\n autoPlay = true,\n muted = true,\n loop = true,\n labels: labelOverrides,\n classNames = {},\n className,\n ...rest\n }: MediaFeedProps<T>,\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n) {\n const labels = { ...defaultLabels, ...labelOverrides };\n const prefersReducedMotion = usePrefersReducedMotion();\n const allowAutoPlay = autoPlay && !prefersReducedMotion;\n const ids = items.map(getId);\n const idsKey = JSON.stringify(ids);\n const [internalActiveId, setInternalActiveId] = React.useState(\n () => defaultActiveItemId ?? ids[0]\n );\n const requestedId = activeItemId ?? internalActiveId;\n const activeId =\n requestedId !== undefined && ids.includes(requestedId)\n ? requestedId\n : ids[0];\n const activeIndex = activeId === undefined ? -1 : ids.indexOf(activeId);\n const [fullscreen, setFullscreen] = React.useState(false);\n const [retrying, setRetrying] = React.useState(false);\n const [retryFailed, setRetryFailed] = React.useState(false);\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const viewportRef = React.useRef<HTMLDivElement | null>(null);\n const cardRefs = React.useRef(new Map<string, HTMLElement>());\n const playbackPositions = React.useRef(\n new Map<string, { src: string; timeMs: number; playRequested?: boolean }>()\n );\n const consumedPlaybackRequests = React.useRef(\n new Map<string, string | number>()\n );\n const fullscreenTriggerRef = React.useRef<HTMLButtonElement | null>(null);\n const hasObserver = typeof IntersectionObserver !== 'undefined';\n // Hydration safety: the server cannot know whether the client supports\n // IntersectionObserver, so both environments start \"not visible\" and the\n // mount effects below establish real visibility (observer callbacks, or the\n // no-observer fallback). Offscreen autoplay therefore never starts early.\n const [visibleId, setVisibleId] = React.useState<string | null>(null);\n const visibleIdRef = React.useRef(visibleId);\n const [viewportVisible, setViewportVisible] = React.useState(false);\n const [pageVisible, setPageVisible] = React.useState(\n () =>\n typeof document === 'undefined' || document.visibilityState !== 'hidden'\n );\n const latest = React.useRef({\n items,\n ids,\n activeId,\n activeItemId,\n onActiveItemChange,\n fullscreen,\n });\n latest.current = {\n items,\n ids,\n activeId,\n activeItemId,\n onActiveItemChange,\n fullscreen,\n };\n\n const setRoot = React.useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof forwardedRef === 'function') forwardedRef(node);\n else if (forwardedRef) forwardedRef.current = node;\n },\n [forwardedRef]\n );\n\n const select = React.useCallback((id: string) => {\n const current = latest.current;\n const index = current.ids.indexOf(id);\n if (index < 0 || id === current.activeId) return;\n if (current.activeItemId === undefined) setInternalActiveId(id);\n current.onActiveItemChange?.(current.items[index]);\n }, []);\n\n // Visibility belongs to this feed, never a global keyboard/player singleton.\n // A separate viewport observer also pauses a feed scrolled off the host page.\n React.useEffect(() => {\n const root = rootRef.current;\n if (!root || typeof IntersectionObserver === 'undefined') {\n // No-observer fallback: assume the feed is on screen.\n setViewportVisible(true);\n return;\n }\n const observer = new IntersectionObserver(([entry]) => {\n setViewportVisible(entry.isIntersecting);\n });\n observer.observe(root);\n return () => observer.disconnect();\n }, []);\n\n React.useEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport || typeof IntersectionObserver === 'undefined') return;\n const ratios = new Map<string, number>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const id = (entry.target as HTMLElement).dataset.mediaId;\n if (id !== undefined)\n ratios.set(id, entry.isIntersecting ? entry.intersectionRatio : 0);\n }\n let bestId: string | null = null;\n let bestRatio = 0;\n for (const [id, ratio] of ratios) {\n if (ratio > bestRatio) {\n bestId = id;\n bestRatio = ratio;\n }\n }\n visibleIdRef.current = bestId;\n setVisibleId(bestId);\n if (bestId !== null && !latest.current.fullscreen) select(bestId);\n },\n { root: viewport, threshold: [0, 0.25, 0.5, 0.75, 1] }\n );\n cardRefs.current.forEach((card) => observer.observe(card));\n return () => observer.disconnect();\n }, [idsKey, loading, error, select]);\n\n React.useEffect(() => {\n const update = () => setPageVisible(document.visibilityState !== 'hidden');\n document.addEventListener('visibilitychange', update);\n return () => document.removeEventListener('visibilitychange', update);\n }, []);\n\n // Controlled selection and initial deep links scroll within the feed, without\n // moving the surrounding inbox/page. Observer selections are already visible.\n React.useEffect(() => {\n if (activeId === undefined) return;\n if (!hasObserver) {\n visibleIdRef.current = activeId;\n setVisibleId(activeId);\n }\n if (visibleIdRef.current === activeId && hasObserver) return;\n const card = cardRefs.current.get(activeId);\n if (card && viewportRef.current) {\n viewportRef.current.scrollTo?.({ top: card.offsetTop, behavior: 'auto' });\n }\n }, [activeId, idsKey, hasObserver, loading, error]);\n\n React.useEffect(() => {\n if (!items.length) setFullscreen(false);\n }, [items.length]);\n\n // The gesture targets an already selected, visible surface. Consume it once\n // per feed so a later source/fullscreen remount cannot resurrect a paused clip.\n React.useEffect(() => {\n if (\n loading ||\n error ||\n activeIndex < 0 ||\n !playbackRequest ||\n playbackRequest.itemId !== activeId\n )\n return;\n if (\n !pageVisible ||\n (!fullscreen && (!viewportVisible || visibleId !== activeId))\n )\n return;\n consumedPlaybackRequests.current.set(\n playbackRequest.itemId,\n playbackRequest.requestId\n );\n }, [\n activeId,\n activeIndex,\n fullscreen,\n pageVisible,\n viewportVisible,\n visibleId,\n playbackRequest,\n loading,\n error,\n ]);\n\n React.useEffect(() => {\n const positions = playbackPositions.current;\n for (const id of positions.keys()) {\n if (!latest.current.ids.includes(id)) positions.delete(id);\n }\n }, [idsKey]);\n\n React.useEffect(() => {\n if (fullscreen || !fullscreenTriggerRef.current) return;\n if (fullscreenTriggerRef.current.isConnected)\n fullscreenTriggerRef.current.focus();\n else viewportRef.current?.focus();\n fullscreenTriggerRef.current = null;\n }, [fullscreen]);\n\n const navigate = (index: number, focus = false) => {\n const id = ids[Math.max(0, Math.min(index, ids.length - 1))];\n if (id === undefined) return;\n select(id);\n const card = cardRefs.current.get(id);\n if (card && viewportRef.current) {\n viewportRef.current.scrollTo?.({ top: card.offsetTop, behavior: 'auto' });\n if (focus) card.focus({ preventScroll: true });\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n // Never steal arrows/Space from a player, reaction button or chat composer.\n const target = event.target as HTMLElement;\n if (event.target !== event.currentTarget && target.dataset?.slot !== 'item')\n return;\n let next: number;\n switch (event.key) {\n case 'ArrowDown':\n case 'PageDown':\n next = activeIndex + 1;\n break;\n case 'ArrowUp':\n case 'PageUp':\n next = activeIndex - 1;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = items.length - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n navigate(next, event.target !== event.currentTarget);\n };\n\n const retry = async () => {\n if (!onRetry || retrying) return;\n setRetrying(true);\n setRetryFailed(false);\n try {\n await onRetry();\n } catch {\n setRetryFailed(true);\n } finally {\n setRetrying(false);\n }\n };\n\n const renderCard = (item: T, index: number, immersive: boolean) => {\n const id = getId(item);\n const media = getMedia(item);\n let playbackPosition = playbackPositions.current.get(id);\n if (!playbackPosition || playbackPosition.src !== media.src) {\n playbackPosition = { src: media.src, timeMs: 0 };\n playbackPositions.current.set(id, playbackPosition);\n }\n const title = getTitle?.(item) || labels.item(index + 1, items.length);\n const author = getAuthor?.(item);\n const caption = getCaption?.(item);\n const active =\n !loading &&\n !error &&\n pageVisible &&\n (immersive\n ? fullscreen && id === activeId\n : !fullscreen &&\n viewportVisible &&\n id === activeId &&\n id === visibleId);\n const playbackRequestId =\n active &&\n playbackRequest?.itemId === id &&\n consumedPlaybackRequests.current.get(id) !== playbackRequest.requestId\n ? playbackRequest.requestId\n : undefined;\n return (\n <article\n key={id}\n ref={\n immersive\n ? undefined\n : (node) => {\n if (node) cardRefs.current.set(id, node);\n else cardRefs.current.delete(id);\n }\n }\n data-slot=\"item\"\n data-media-id={id}\n data-active={active}\n aria-label={title}\n aria-posinset={index + 1}\n aria-setsize={items.length}\n tabIndex={id === activeId ? 0 : -1}\n className={cn(\n 'border-border bg-card text-card-foreground focus-visible:ring-ring flex min-h-0 w-full snap-start flex-col overflow-hidden border focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-inset',\n immersive ? 'h-full flex-1 border-0' : 'h-full shrink-0 rounded-xl',\n classNames.item\n )}\n >\n <div\n data-slot=\"media\"\n className={cn(\n 'bg-muted flex min-h-0 flex-1 items-center justify-center p-3',\n classNames.media\n )}\n >\n {renderMedia ? (\n renderMedia(media, {\n item,\n active,\n autoPlay: allowAutoPlay,\n muted,\n loop,\n playbackRequestId,\n })\n ) : (\n <FeedMedia\n key={`${id}:${media.kind}:${media.src}:${immersive}`}\n media={media}\n title={title}\n active={active}\n autoPlay={allowAutoPlay}\n muted={muted}\n loop={loop}\n labels={labels}\n onActivate={() => select(id)}\n playbackPosition={playbackPosition}\n playbackRequestId={playbackRequestId}\n />\n )}\n </div>\n <div\n data-slot=\"details\"\n className={cn(\n 'flex max-h-[40%] shrink-0 flex-col gap-2 overflow-y-auto p-4',\n classNames.details\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n {author && (\n <div\n data-slot=\"author\"\n className={cn(\n 'mb-2 flex items-center gap-2',\n classNames.author\n )}\n >\n <Avatar\n name={author.name}\n src={author.avatar}\n alt=\"\"\n size=\"sm\"\n />\n <span className=\"truncate text-sm font-medium\">\n {author.name}\n </span>\n </div>\n )}\n <h3\n data-slot=\"title\"\n className={cn('m-0 text-base font-semibold', classNames.title)}\n >\n {title}\n </h3>\n </div>\n {!immersive && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={labels.fullscreen}\n title={labels.fullscreen}\n onClick={(event) => {\n fullscreenTriggerRef.current = event.currentTarget;\n select(id);\n setFullscreen(true);\n }}\n >\n <Maximize2 className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n )}\n </div>\n {caption != null && (\n <div\n data-slot=\"caption\"\n className={cn(\n 'text-muted-foreground text-sm',\n classNames.caption\n )}\n >\n {caption}\n </div>\n )}\n {renderActions && (\n <div\n data-slot=\"actions\"\n className={cn(\n 'flex flex-wrap items-center gap-2',\n classNames.actions\n )}\n >\n {renderActions(item)}\n </div>\n )}\n </div>\n </article>\n );\n };\n\n const controls = (\n <div\n data-slot=\"controls\"\n className={cn(\n 'flex shrink-0 items-center justify-between gap-3 py-2',\n classNames.controls\n )}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-auto min-h-8 flex-1 py-2 [&_[data-slot=button-label]]:whitespace-normal\"\n disabled={activeIndex <= 0}\n onClick={() => navigate(activeIndex - 1)}\n leftIcon={<ChevronUp className=\"h-4 w-4\" aria-hidden=\"true\" />}\n >\n {labels.previous}\n </Button>\n <span\n role=\"status\"\n aria-live=\"polite\"\n className=\"text-muted-foreground shrink-0 text-sm whitespace-nowrap\"\n >\n {labels.position(activeIndex + 1, items.length)}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-auto min-h-8 flex-1 py-2 [&_[data-slot=button-label]]:whitespace-normal\"\n disabled={activeIndex >= items.length - 1}\n onClick={() => navigate(activeIndex + 1)}\n rightIcon={<ChevronDown className=\"h-4 w-4\" aria-hidden=\"true\" />}\n >\n {labels.next}\n </Button>\n </div>\n );\n\n return (\n <div\n ref={setRoot}\n data-slot=\"root\"\n data-component=\"media-feed\"\n className={cn(\n 'bg-background text-foreground flex h-[min(48rem,80dvh)] min-h-0 w-full flex-col',\n classNames.root,\n className\n )}\n {...rest}\n >\n {loading || error || !items.length ? (\n <div\n data-slot=\"status\"\n role={error ? 'alert' : 'status'}\n aria-busy={loading || retrying}\n className={cn(\n 'flex min-h-0 flex-1 flex-col items-center justify-center gap-4 p-6 text-center',\n classNames.status\n )}\n >\n <p className=\"m-0\">\n {loading ? labels.loading : error || labels.empty}\n </p>\n {error && onRetry && (\n <Button\n variant=\"outline\"\n isLoading={retrying}\n loadingText={labels.loading}\n onClick={() => {\n void retry();\n }}\n >\n {labels.retry}\n </Button>\n )}\n {retryFailed && (\n <p role=\"alert\" className=\"m-0\">\n {labels.error}\n </p>\n )}\n </div>\n ) : (\n <>\n {/* ARIA feeds are focusable composites with scoped item navigation. */}\n {/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n <div\n ref={viewportRef}\n data-slot=\"viewport\"\n role=\"feed\"\n aria-label={labels.feed}\n aria-busy={false}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\n 'focus-visible:ring-ring relative flex min-h-0 flex-1 snap-y snap-mandatory flex-col gap-4 overflow-y-auto overscroll-contain focus-visible:ring-2 focus-visible:outline-none',\n classNames.viewport\n )}\n >\n {items.map((item, index) => renderCard(item, index, false))}\n </div>\n {/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n {controls}\n </>\n )}\n <Modal\n open={fullscreen && !loading && !error && !!items.length}\n onOpenChange={setFullscreen}\n size=\"full\"\n className=\"h-dvh min-h-0 sm:h-[calc(100dvh-2rem)]\"\n >\n <ModalHeader>\n <ModalTitle>{labels.feed}</ModalTitle>\n <ModalClose aria-label={labels.close} />\n </ModalHeader>\n {/* Fullscreen keeps the same feed navigation; controls retain their keys. */}\n {/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n <div\n data-slot=\"fullscreen\"\n data-component=\"media-feed\"\n role=\"feed\"\n aria-label={labels.feed}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex min-h-0 flex-1 flex-col px-2 pb-2 sm:px-4',\n classNames.fullscreen\n )}\n >\n {activeIndex >= 0 &&\n renderCard(items[activeIndex], activeIndex, true)}\n {controls}\n </div>\n {/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n </Modal>\n </div>\n );\n}\n\nexport const MediaFeed = React.forwardRef(MediaFeedInner) as <T>(\n props: MediaFeedProps<T> & React.RefAttributes<HTMLDivElement>\n) => React.ReactElement;\n\n(MediaFeed as React.NamedExoticComponent).displayName = 'MediaFeed';\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { withLocale } from './chunk-YGS2TRMP.js';
|
|
2
2
|
import { usePendingOverrides } from './chunk-FTEZNCRI.js';
|
|
3
3
|
import { RecordState } from './chunk-Y424YL55.js';
|
|
4
|
-
import { Progress } from './chunk-
|
|
4
|
+
import { Progress } from './chunk-P4E3K3ND.js';
|
|
5
5
|
import { Checkbox } from './chunk-753Z3NXL.js';
|
|
6
6
|
import { Avatar } from './chunk-TI3TQQ7F.js';
|
|
7
7
|
import { accentClasses, toDateTime } from './chunk-3YBS4WUQ.js';
|
|
8
|
-
import { Badge } from './chunk-
|
|
8
|
+
import { Badge } from './chunk-522WJIVI.js';
|
|
9
9
|
import { Button } from './chunk-WFBUBT54.js';
|
|
10
10
|
import { cn } from './chunk-TQONQSJO.js';
|
|
11
11
|
import * as React from 'react';
|
|
@@ -310,5 +310,5 @@ var ActionPlan = React.forwardRef(
|
|
|
310
310
|
ActionPlan.displayName = "ActionPlan";
|
|
311
311
|
|
|
312
312
|
export { ActionPlan, defaultActionPlanLabels };
|
|
313
|
-
//# sourceMappingURL=chunk-
|
|
314
|
-
//# sourceMappingURL=chunk-
|
|
313
|
+
//# sourceMappingURL=chunk-434L5RYF.js.map
|
|
314
|
+
//# sourceMappingURL=chunk-434L5RYF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ActionPlan/ActionPlan.tsx"],"names":[],"mappings":"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","file":"chunk-FKGFOBC2.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DateTime } from 'luxon';\nimport { CalendarClock, Plus } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Avatar } from '../Avatar';\nimport { Badge } from '../Badge';\nimport { Button } from '../Button';\nimport { Checkbox } from '../Checkbox';\nimport { Progress } from '../Progress';\nimport { accentClasses, toDateTime } from '../../views/types';\nimport { withLocale } from '../ActivityFeed/dayGroups';\nimport { RecordState } from '../ActivityFeed/RecordState';\nimport { usePendingOverrides } from '../ActivityFeed/usePendingOverrides';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ActionPlanStepStatus = 'todo' | 'in_progress' | 'done';\n\nexport interface ActionPlanOwner {\n name: string;\n avatarUrl?: string;\n}\n\nexport interface ActionPlanStep {\n id: string;\n title: string;\n owner?: ActionPlanOwner;\n /** ISO date or date-time. Date-only values are wall dates in `timeZone`. */\n dueDate?: string;\n status: ActionPlanStepStatus;\n note?: string;\n}\n\nexport interface ActionPlanLabels {\n title: string;\n progress: (done: number, total: number) => string;\n overdue: string;\n todo: string;\n inProgress: string;\n done: string;\n addStep: string;\n loading: string;\n empty: string;\n error: string;\n retry: string;\n}\n\nexport const defaultActionPlanLabels: ActionPlanLabels = {\n title: 'Action plan',\n progress: (done, total) => `${done} of ${total} complete`,\n overdue: 'Overdue',\n todo: 'To do',\n inProgress: 'In progress',\n done: 'Done',\n addStep: 'Add step',\n loading: 'Loading plan',\n empty: 'No steps yet',\n error: 'Could not load this plan',\n retry: 'Try again',\n};\n\nexport type ActionPlanSlot =\n | 'header'\n | 'progress'\n | 'group'\n | 'step'\n | 'overdueStep'\n | 'state';\n\nexport type ActionPlanArrange = 'manual' | 'dueDate' | 'status';\n\nexport interface ActionPlanProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n 'children' | 'title'\n> {\n items: ActionPlanStep[];\n /** Card heading. Defaults to `labels.title`. */\n title?: string;\n loading?: boolean;\n error?: Error | null;\n onRetry?: () => void;\n /** `manual` keeps `items` order; `dueDate` sorts soonest first; `status` groups by status. */\n arrange?: ActionPlanArrange;\n /** Reference for overdue checks. Defaults to the current time. */\n now?: Date;\n locale?: string;\n /** IANA zone for due dates. Defaults to local. */\n timeZone?: string;\n /** The checkbox shows the new status at once and restores it on rejection. */\n onStatusChange?: (\n id: string,\n status: ActionPlanStepStatus\n ) => void | Promise<void>;\n onAdd?: () => void;\n onOpen?: (id: string, step: ActionPlanStep) => void;\n getHref?: (id: string, step: ActionPlanStep) => string;\n /** Extra content on a step's meta line. */\n renderStepMeta?: (step: ActionPlanStep) => React.ReactNode;\n emptyState?: React.ReactNode;\n labels?: Partial<ActionPlanLabels>;\n classNames?: Partial<Record<ActionPlanSlot, string>>;\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\nconst STATUS_ORDER: ActionPlanStepStatus[] = ['in_progress', 'todo', 'done'];\nconst SUB_HEADING = { h2: 'h3', h3: 'h4', h4: 'h5' } as const;\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * A shared checklist with progress and due dates. Declared\n * `parameters.catalog.collection` — its load states are part of the API.\n */\nexport const ActionPlan = React.forwardRef<HTMLElement, ActionPlanProps>(\n (\n {\n items,\n title,\n loading = false,\n error = null,\n onRetry,\n arrange = 'manual',\n now,\n locale,\n timeZone = 'local',\n onStatusChange,\n onAdd,\n onOpen,\n getHref,\n renderStepMeta,\n emptyState,\n labels,\n classNames,\n headingLevel: Heading = 'h3',\n className,\n ...rest\n },\n ref\n ) => {\n const text = { ...defaultActionPlanLabels, ...labels };\n const baseId = React.useId();\n const [overrides, runStatus] = usePendingOverrides<ActionPlanStepStatus>();\n const today = (now ? DateTime.fromJSDate(now) : DateTime.now())\n .setZone(timeZone)\n .startOf('day');\n\n const statusOf = (step: ActionPlanStep) =>\n overrides.get(step.id) ?? step.status;\n const statusLabel: Record<ActionPlanStepStatus, string> = {\n todo: text.todo,\n in_progress: text.inProgress,\n done: text.done,\n };\n const done = items.filter((s) => statusOf(s) === 'done').length;\n\n const dueOf = (step: ActionPlanStep) => toDateTime(step.dueDate, timeZone);\n\n const renderStep = (step: ActionPlanStep) => {\n const status = statusOf(step);\n const pending = overrides.has(step.id);\n const due = dueOf(step);\n const overdue =\n status !== 'done' && due !== null && due.startOf('day') < today;\n // Position, not the caller's id: ids with spaces would break aria-labelledby.\n const titleId = `${baseId}-step-${items.indexOf(step)}`;\n const href = getHref?.(step.id, step);\n const titleClasses = cn(\n 'text-sm font-medium',\n status === 'done'\n ? 'text-muted-foreground line-through'\n : 'text-foreground'\n );\n const focusRing =\n 'rounded-sm hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring';\n\n let titleNode: React.ReactNode = (\n <span id={titleId} className={titleClasses}>\n {step.title}\n </span>\n );\n if (href) {\n titleNode = (\n <a\n id={titleId}\n href={href}\n className={cn(titleClasses, focusRing)}\n onClick={(event) => {\n if (\n !onOpen ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.button !== 0\n )\n return;\n event.preventDefault();\n onOpen(step.id, step);\n }}\n >\n {step.title}\n </a>\n );\n } else if (onOpen) {\n titleNode = (\n <button\n id={titleId}\n type=\"button\"\n className={cn(titleClasses, focusRing, 'text-start')}\n onClick={() => onOpen(step.id, step)}\n >\n {step.title}\n </button>\n );\n }\n\n return (\n <li\n key={step.id}\n data-slot=\"action-plan-step\"\n data-overdue={overdue || undefined}\n aria-busy={pending || undefined}\n className={cn(\n 'flex items-start gap-3 px-4 py-3',\n overdue && accentClasses.destructive.tint,\n classNames?.step,\n overdue && classNames?.overdueStep\n )}\n >\n <Checkbox\n size=\"sm\"\n className=\"mt-0.5\"\n checked={status === 'done'}\n disabled={!onStatusChange || pending}\n aria-labelledby={titleId}\n onChange={(event) => {\n if (!onStatusChange) return;\n const next = event.currentTarget.checked ? 'done' : 'todo';\n void runStatus(step.id, next, () =>\n onStatusChange(step.id, next)\n );\n }}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {titleNode}\n {status === 'in_progress' && (\n <Badge size=\"sm\" variant=\"secondary\">\n {text.inProgress}\n </Badge>\n )}\n {overdue && (\n <Badge size=\"sm\" variant=\"danger\">\n {text.overdue}\n </Badge>\n )}\n </div>\n {(step.owner || due) && (\n <div className=\"text-muted-foreground mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs\">\n {step.owner && (\n <span className=\"inline-flex items-center gap-1.5\">\n <Avatar\n size=\"xs\"\n name={step.owner.name}\n src={step.owner.avatarUrl}\n alt=\"\"\n aria-hidden\n />\n {step.owner.name}\n </span>\n )}\n {due && (\n <span className=\"inline-flex items-center gap-1\">\n <CalendarClock className=\"size-3.5\" aria-hidden />\n <time dateTime={step.dueDate}>\n {withLocale(due, locale).toLocaleString(\n DateTime.DATE_MED\n )}\n </time>\n </span>\n )}\n {renderStepMeta?.(step)}\n </div>\n )}\n {step.note && (\n <p className=\"text-muted-foreground mt-1 text-sm\">{step.note}</p>\n )}\n </div>\n </li>\n );\n };\n\n let body: React.ReactNode;\n if (error) {\n body = (\n <RecordState\n kind=\"error\"\n slot=\"action-plan-state\"\n message={text.error}\n retryLabel={text.retry}\n onRetry={onRetry}\n className={classNames?.state}\n />\n );\n } else if (loading) {\n body = (\n <RecordState\n kind=\"loading\"\n slot=\"action-plan-state\"\n message={text.loading}\n className={classNames?.state}\n />\n );\n } else if (items.length === 0) {\n body = emptyState ?? (\n <RecordState\n kind=\"empty\"\n slot=\"action-plan-state\"\n message={text.empty}\n className={classNames?.state}\n />\n );\n } else if (arrange === 'status') {\n const SubHeading = SUB_HEADING[Heading];\n body = STATUS_ORDER.map((status) => {\n const group = items.filter((s) => statusOf(s) === status);\n if (group.length === 0) return null;\n const groupId = `${baseId}-group-${status}`;\n return (\n <section\n key={status}\n aria-labelledby={groupId}\n data-slot=\"action-plan-group\"\n className={classNames?.group}\n >\n <SubHeading\n id={groupId}\n className=\"border-border bg-muted text-muted-foreground flex items-center justify-between border-y px-4 py-1.5 text-xs font-semibold tracking-wide uppercase\"\n >\n {statusLabel[status]}\n <span className=\"font-normal tabular-nums\">{group.length}</span>\n </SubHeading>\n <ul className=\"divide-border divide-y\">{group.map(renderStep)}</ul>\n </section>\n );\n });\n } else {\n const ordered =\n arrange === 'dueDate'\n ? [...items].sort(\n (a, b) =>\n (dueOf(a)?.toMillis() ?? Infinity) -\n (dueOf(b)?.toMillis() ?? Infinity) || 0\n )\n : items;\n body = (\n <ul className=\"divide-border divide-y\">{ordered.map(renderStep)}</ul>\n );\n }\n\n const headingId = `${baseId}-title`;\n return (\n <section\n ref={ref}\n aria-labelledby={headingId}\n data-slot=\"action-plan\"\n className={cn(\n 'border-border bg-card overflow-hidden rounded-lg border',\n className\n )}\n {...rest}\n >\n <div\n data-slot=\"action-plan-header\"\n className={cn(\n 'border-border space-y-3 border-b px-4 py-3',\n classNames?.header\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Heading\n id={headingId}\n className=\"text-foreground min-w-0 flex-1 truncate text-sm font-semibold\"\n >\n {title ?? text.title}\n </Heading>\n {onAdd && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onAdd}\n leftIcon={<Plus className=\"size-4\" aria-hidden />}\n >\n {text.addStep}\n </Button>\n )}\n </div>\n {!loading && !error && items.length > 0 && (\n <div\n data-slot=\"action-plan-progress\"\n className={classNames?.progress}\n >\n <Progress\n size=\"sm\"\n value={done}\n max={items.length}\n label={text.progress(done, items.length)}\n />\n </div>\n )}\n </div>\n {body}\n </section>\n );\n }\n);\n\nActionPlan.displayName = 'ActionPlan';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/ActionPlan/ActionPlan.tsx"],"names":[],"mappings":"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","file":"chunk-434L5RYF.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DateTime } from 'luxon';\nimport { CalendarClock, Plus } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Avatar } from '../Avatar';\nimport { Badge } from '../Badge';\nimport { Button } from '../Button';\nimport { Checkbox } from '../Checkbox';\nimport { Progress } from '../Progress';\nimport { accentClasses, toDateTime } from '../../views/types';\nimport { withLocale } from '../ActivityFeed/dayGroups';\nimport { RecordState } from '../ActivityFeed/RecordState';\nimport { usePendingOverrides } from '../ActivityFeed/usePendingOverrides';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ActionPlanStepStatus = 'todo' | 'in_progress' | 'done';\n\nexport interface ActionPlanOwner {\n name: string;\n avatarUrl?: string;\n}\n\nexport interface ActionPlanStep {\n id: string;\n title: string;\n owner?: ActionPlanOwner;\n /** ISO date or date-time. Date-only values are wall dates in `timeZone`. */\n dueDate?: string;\n status: ActionPlanStepStatus;\n note?: string;\n}\n\nexport interface ActionPlanLabels {\n title: string;\n progress: (done: number, total: number) => string;\n overdue: string;\n todo: string;\n inProgress: string;\n done: string;\n addStep: string;\n loading: string;\n empty: string;\n error: string;\n retry: string;\n}\n\nexport const defaultActionPlanLabels: ActionPlanLabels = {\n title: 'Action plan',\n progress: (done, total) => `${done} of ${total} complete`,\n overdue: 'Overdue',\n todo: 'To do',\n inProgress: 'In progress',\n done: 'Done',\n addStep: 'Add step',\n loading: 'Loading plan',\n empty: 'No steps yet',\n error: 'Could not load this plan',\n retry: 'Try again',\n};\n\nexport type ActionPlanSlot =\n | 'header'\n | 'progress'\n | 'group'\n | 'step'\n | 'overdueStep'\n | 'state';\n\nexport type ActionPlanArrange = 'manual' | 'dueDate' | 'status';\n\nexport interface ActionPlanProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n 'children' | 'title'\n> {\n items: ActionPlanStep[];\n /** Card heading. Defaults to `labels.title`. */\n title?: string;\n loading?: boolean;\n error?: Error | null;\n onRetry?: () => void;\n /** `manual` keeps `items` order; `dueDate` sorts soonest first; `status` groups by status. */\n arrange?: ActionPlanArrange;\n /** Reference for overdue checks. Defaults to the current time. */\n now?: Date;\n locale?: string;\n /** IANA zone for due dates. Defaults to local. */\n timeZone?: string;\n /** The checkbox shows the new status at once and restores it on rejection. */\n onStatusChange?: (\n id: string,\n status: ActionPlanStepStatus\n ) => void | Promise<void>;\n onAdd?: () => void;\n onOpen?: (id: string, step: ActionPlanStep) => void;\n getHref?: (id: string, step: ActionPlanStep) => string;\n /** Extra content on a step's meta line. */\n renderStepMeta?: (step: ActionPlanStep) => React.ReactNode;\n emptyState?: React.ReactNode;\n labels?: Partial<ActionPlanLabels>;\n classNames?: Partial<Record<ActionPlanSlot, string>>;\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\nconst STATUS_ORDER: ActionPlanStepStatus[] = ['in_progress', 'todo', 'done'];\nconst SUB_HEADING = { h2: 'h3', h3: 'h4', h4: 'h5' } as const;\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * A shared checklist with progress and due dates. Declared\n * `parameters.catalog.collection` — its load states are part of the API.\n */\nexport const ActionPlan = React.forwardRef<HTMLElement, ActionPlanProps>(\n (\n {\n items,\n title,\n loading = false,\n error = null,\n onRetry,\n arrange = 'manual',\n now,\n locale,\n timeZone = 'local',\n onStatusChange,\n onAdd,\n onOpen,\n getHref,\n renderStepMeta,\n emptyState,\n labels,\n classNames,\n headingLevel: Heading = 'h3',\n className,\n ...rest\n },\n ref\n ) => {\n const text = { ...defaultActionPlanLabels, ...labels };\n const baseId = React.useId();\n const [overrides, runStatus] = usePendingOverrides<ActionPlanStepStatus>();\n const today = (now ? DateTime.fromJSDate(now) : DateTime.now())\n .setZone(timeZone)\n .startOf('day');\n\n const statusOf = (step: ActionPlanStep) =>\n overrides.get(step.id) ?? step.status;\n const statusLabel: Record<ActionPlanStepStatus, string> = {\n todo: text.todo,\n in_progress: text.inProgress,\n done: text.done,\n };\n const done = items.filter((s) => statusOf(s) === 'done').length;\n\n const dueOf = (step: ActionPlanStep) => toDateTime(step.dueDate, timeZone);\n\n const renderStep = (step: ActionPlanStep) => {\n const status = statusOf(step);\n const pending = overrides.has(step.id);\n const due = dueOf(step);\n const overdue =\n status !== 'done' && due !== null && due.startOf('day') < today;\n // Position, not the caller's id: ids with spaces would break aria-labelledby.\n const titleId = `${baseId}-step-${items.indexOf(step)}`;\n const href = getHref?.(step.id, step);\n const titleClasses = cn(\n 'text-sm font-medium',\n status === 'done'\n ? 'text-muted-foreground line-through'\n : 'text-foreground'\n );\n const focusRing =\n 'rounded-sm hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring';\n\n let titleNode: React.ReactNode = (\n <span id={titleId} className={titleClasses}>\n {step.title}\n </span>\n );\n if (href) {\n titleNode = (\n <a\n id={titleId}\n href={href}\n className={cn(titleClasses, focusRing)}\n onClick={(event) => {\n if (\n !onOpen ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.button !== 0\n )\n return;\n event.preventDefault();\n onOpen(step.id, step);\n }}\n >\n {step.title}\n </a>\n );\n } else if (onOpen) {\n titleNode = (\n <button\n id={titleId}\n type=\"button\"\n className={cn(titleClasses, focusRing, 'text-start')}\n onClick={() => onOpen(step.id, step)}\n >\n {step.title}\n </button>\n );\n }\n\n return (\n <li\n key={step.id}\n data-slot=\"action-plan-step\"\n data-overdue={overdue || undefined}\n aria-busy={pending || undefined}\n className={cn(\n 'flex items-start gap-3 px-4 py-3',\n overdue && accentClasses.destructive.tint,\n classNames?.step,\n overdue && classNames?.overdueStep\n )}\n >\n <Checkbox\n size=\"sm\"\n className=\"mt-0.5\"\n checked={status === 'done'}\n disabled={!onStatusChange || pending}\n aria-labelledby={titleId}\n onChange={(event) => {\n if (!onStatusChange) return;\n const next = event.currentTarget.checked ? 'done' : 'todo';\n void runStatus(step.id, next, () =>\n onStatusChange(step.id, next)\n );\n }}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {titleNode}\n {status === 'in_progress' && (\n <Badge size=\"sm\" variant=\"secondary\">\n {text.inProgress}\n </Badge>\n )}\n {overdue && (\n <Badge size=\"sm\" variant=\"danger\">\n {text.overdue}\n </Badge>\n )}\n </div>\n {(step.owner || due) && (\n <div className=\"text-muted-foreground mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs\">\n {step.owner && (\n <span className=\"inline-flex items-center gap-1.5\">\n <Avatar\n size=\"xs\"\n name={step.owner.name}\n src={step.owner.avatarUrl}\n alt=\"\"\n aria-hidden\n />\n {step.owner.name}\n </span>\n )}\n {due && (\n <span className=\"inline-flex items-center gap-1\">\n <CalendarClock className=\"size-3.5\" aria-hidden />\n <time dateTime={step.dueDate}>\n {withLocale(due, locale).toLocaleString(\n DateTime.DATE_MED\n )}\n </time>\n </span>\n )}\n {renderStepMeta?.(step)}\n </div>\n )}\n {step.note && (\n <p className=\"text-muted-foreground mt-1 text-sm\">{step.note}</p>\n )}\n </div>\n </li>\n );\n };\n\n let body: React.ReactNode;\n if (error) {\n body = (\n <RecordState\n kind=\"error\"\n slot=\"action-plan-state\"\n message={text.error}\n retryLabel={text.retry}\n onRetry={onRetry}\n className={classNames?.state}\n />\n );\n } else if (loading) {\n body = (\n <RecordState\n kind=\"loading\"\n slot=\"action-plan-state\"\n message={text.loading}\n className={classNames?.state}\n />\n );\n } else if (items.length === 0) {\n body = emptyState ?? (\n <RecordState\n kind=\"empty\"\n slot=\"action-plan-state\"\n message={text.empty}\n className={classNames?.state}\n />\n );\n } else if (arrange === 'status') {\n const SubHeading = SUB_HEADING[Heading];\n body = STATUS_ORDER.map((status) => {\n const group = items.filter((s) => statusOf(s) === status);\n if (group.length === 0) return null;\n const groupId = `${baseId}-group-${status}`;\n return (\n <section\n key={status}\n aria-labelledby={groupId}\n data-slot=\"action-plan-group\"\n className={classNames?.group}\n >\n <SubHeading\n id={groupId}\n className=\"border-border bg-muted text-muted-foreground flex items-center justify-between border-y px-4 py-1.5 text-xs font-semibold tracking-wide uppercase\"\n >\n {statusLabel[status]}\n <span className=\"font-normal tabular-nums\">{group.length}</span>\n </SubHeading>\n <ul className=\"divide-border divide-y\">{group.map(renderStep)}</ul>\n </section>\n );\n });\n } else {\n const ordered =\n arrange === 'dueDate'\n ? [...items].sort(\n (a, b) =>\n (dueOf(a)?.toMillis() ?? Infinity) -\n (dueOf(b)?.toMillis() ?? Infinity) || 0\n )\n : items;\n body = (\n <ul className=\"divide-border divide-y\">{ordered.map(renderStep)}</ul>\n );\n }\n\n const headingId = `${baseId}-title`;\n return (\n <section\n ref={ref}\n aria-labelledby={headingId}\n data-slot=\"action-plan\"\n className={cn(\n 'border-border bg-card overflow-hidden rounded-lg border',\n className\n )}\n {...rest}\n >\n <div\n data-slot=\"action-plan-header\"\n className={cn(\n 'border-border space-y-3 border-b px-4 py-3',\n classNames?.header\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Heading\n id={headingId}\n className=\"text-foreground min-w-0 flex-1 truncate text-sm font-semibold\"\n >\n {title ?? text.title}\n </Heading>\n {onAdd && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onAdd}\n leftIcon={<Plus className=\"size-4\" aria-hidden />}\n >\n {text.addStep}\n </Button>\n )}\n </div>\n {!loading && !error && items.length > 0 && (\n <div\n data-slot=\"action-plan-progress\"\n className={classNames?.progress}\n >\n <Progress\n size=\"sm\"\n value={done}\n max={items.length}\n label={text.progress(done, items.length)}\n />\n </div>\n )}\n </div>\n {body}\n </section>\n );\n }\n);\n\nActionPlan.displayName = 'ActionPlan';\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useYouTubeHoverPreview } from './chunk-POWS35OT.js';
|
|
2
|
-
import { Badge } from './chunk-
|
|
2
|
+
import { Badge } from './chunk-522WJIVI.js';
|
|
3
3
|
import { cn } from './chunk-TQONQSJO.js';
|
|
4
4
|
import { Play, VolumeX } from 'lucide-react';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
@@ -192,5 +192,5 @@ function VideoCard({
|
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
export { PlayButton, VideoCard };
|
|
195
|
-
//# sourceMappingURL=chunk-
|
|
196
|
-
//# sourceMappingURL=chunk-
|
|
195
|
+
//# sourceMappingURL=chunk-43K7OQ3E.js.map
|
|
196
|
+
//# sourceMappingURL=chunk-43K7OQ3E.js.map
|