@opensite/ui 0.2.7 → 0.2.9

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.
@@ -1073,7 +1073,11 @@ var defaultProps = {
1073
1073
  carouselImages: defaultCarouselImages,
1074
1074
  sections: defaultSections,
1075
1075
  gridImages: defaultGridImages,
1076
- backAction: { label: "Back to Projects", href: "/projects", icon: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-left", size: 16 }) },
1076
+ backAction: {
1077
+ label: "Back to Projects",
1078
+ href: "/projects",
1079
+ icon: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-left", size: 16 })
1080
+ },
1077
1081
  videoUrl: "https://cdn.ing/assets/files/record/286359/architecture-presentation.mp4",
1078
1082
  videoPoster: imagePlaceholders[49],
1079
1083
  pdfUrl: "https://cdn.ing/assets/files/record/286359/5fv7u23rr648t363fy2ibs61sflg",
@@ -1122,7 +1126,9 @@ function ProjectDetailArchitectureCarousel(props) {
1122
1126
  enableLightbox = defaultProps.enableLightbox
1123
1127
  } = props;
1124
1128
  const [currentSlide, setCurrentSlide] = React3.useState(0);
1125
- const [selectedTab, setSelectedTab] = React3.useState("slides");
1129
+ const [selectedTab, setSelectedTab] = React3.useState(
1130
+ "slides"
1131
+ );
1126
1132
  const [lightboxOpen, setLightboxOpen] = React3.useState(false);
1127
1133
  const [lightboxIndex, setLightboxIndex] = React3.useState(0);
1128
1134
  const lightboxItems = React3.useMemo(() => {
@@ -1136,12 +1142,15 @@ function ProjectDetailArchitectureCarousel(props) {
1136
1142
  share: true
1137
1143
  }));
1138
1144
  }, [carouselImages]);
1139
- const handleImageClick = React3.useCallback((index) => {
1140
- if (enableLightbox) {
1141
- setLightboxIndex(index);
1142
- setLightboxOpen(true);
1143
- }
1144
- }, [enableLightbox]);
1145
+ const handleImageClick = React3.useCallback(
1146
+ (index) => {
1147
+ if (enableLightbox) {
1148
+ setLightboxIndex(index);
1149
+ setLightboxOpen(true);
1150
+ }
1151
+ },
1152
+ [enableLightbox]
1153
+ );
1145
1154
  const handleLightboxClose = React3.useCallback(() => {
1146
1155
  setLightboxOpen(false);
1147
1156
  }, []);
@@ -1160,11 +1169,21 @@ function ProjectDetailArchitectureCarousel(props) {
1160
1169
  const renderBackAction = () => {
1161
1170
  if (backActionSlot) return backActionSlot;
1162
1171
  if (!backAction) return null;
1163
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = backAction;
1172
+ const {
1173
+ label,
1174
+ icon,
1175
+ iconAfter,
1176
+ children,
1177
+ className: actionClassName,
1178
+ ...pressableProps
1179
+ } = backAction;
1164
1180
  return /* @__PURE__ */ jsxRuntime.jsx(
1165
1181
  Pressable,
1166
1182
  {
1167
- className: cn("inline-flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground", actionClassName),
1183
+ className: cn(
1184
+ "inline-flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground",
1185
+ actionClassName
1186
+ ),
1168
1187
  ...pressableProps,
1169
1188
  children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1170
1189
  icon,
@@ -1192,18 +1211,36 @@ function ProjectDetailArchitectureCarousel(props) {
1192
1211
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "|" }),
1193
1212
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: location })
1194
1213
  ] }),
1195
- typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight text-foreground md:text-5xl lg:text-6xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title }),
1214
+ typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1215
+ "h1",
1216
+ {
1217
+ className: cn(
1218
+ "text-4xl font-bold tracking-tight text-foreground md:text-5xl lg:text-6xl",
1219
+ titleClassName
1220
+ ),
1221
+ children: title
1222
+ }
1223
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title }),
1196
1224
  subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-xl text-muted-foreground", children: subtitle }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: subtitle }))
1197
1225
  ] }),
1198
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { ...fadeInUp, className: "mb-16", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative aspect-video overflow-hidden rounded-2xl bg-muted", heroImageClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
1199
- img.Img,
1226
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { ...fadeInUp, className: "mb-16", children: /* @__PURE__ */ jsxRuntime.jsx(
1227
+ "div",
1200
1228
  {
1201
- src: heroImage?.src || imagePlaceholders[56],
1202
- alt: heroImage?.alt || "Project hero image",
1203
- className: "h-full w-full object-cover",
1204
- optixFlowConfig
1229
+ className: cn(
1230
+ "relative aspect-video overflow-hidden rounded-2xl bg-muted",
1231
+ heroImageClassName
1232
+ ),
1233
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1234
+ img.Img,
1235
+ {
1236
+ src: heroImage?.src || imagePlaceholders[56],
1237
+ alt: heroImage?.alt || "Project hero image",
1238
+ className: "h-full w-full object-cover",
1239
+ optixFlowConfig
1240
+ }
1241
+ )
1205
1242
  }
1206
- ) }) }),
1243
+ ) }),
1207
1244
  description && /* @__PURE__ */ jsxRuntime.jsx(
1208
1245
  framerMotion.motion.div,
1209
1246
  {
@@ -1230,7 +1267,14 @@ function ProjectDetailArchitectureCarousel(props) {
1230
1267
  selectedTab === "slides" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
1231
1268
  ),
1232
1269
  children: [
1233
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/images", size: 16, className: "mr-2 inline-block" }),
1270
+ /* @__PURE__ */ jsxRuntime.jsx(
1271
+ DynamicIcon,
1272
+ {
1273
+ name: "lucide/images",
1274
+ size: 16,
1275
+ className: "mr-2 inline-block"
1276
+ }
1277
+ ),
1234
1278
  "Slides (",
1235
1279
  carouselImages?.length || 0,
1236
1280
  ")"
@@ -1247,7 +1291,14 @@ function ProjectDetailArchitectureCarousel(props) {
1247
1291
  selectedTab === "video" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
1248
1292
  ),
1249
1293
  children: [
1250
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/play-circle", size: 16, className: "mr-2 inline-block" }),
1294
+ /* @__PURE__ */ jsxRuntime.jsx(
1295
+ DynamicIcon,
1296
+ {
1297
+ name: "lucide/play-circle",
1298
+ size: 16,
1299
+ className: "mr-2 inline-block"
1300
+ }
1301
+ ),
1251
1302
  "Video"
1252
1303
  ]
1253
1304
  }
@@ -1262,7 +1313,14 @@ function ProjectDetailArchitectureCarousel(props) {
1262
1313
  selectedTab === "pdf" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
1263
1314
  ),
1264
1315
  children: [
1265
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/file-text", size: 16, className: "mr-2 inline-block" }),
1316
+ /* @__PURE__ */ jsxRuntime.jsx(
1317
+ DynamicIcon,
1318
+ {
1319
+ name: "lucide/file-text",
1320
+ size: 16,
1321
+ className: "mr-2 inline-block"
1322
+ }
1323
+ ),
1266
1324
  "PDF Document"
1267
1325
  ]
1268
1326
  }
@@ -1414,7 +1472,10 @@ function ProjectDetailArchitectureCarousel(props) {
1414
1472
  {
1415
1473
  ...fadeInUp,
1416
1474
  transition: { duration: 0.6, delay: 0.3 },
1417
- className: cn("mb-16 grid gap-12 md:grid-cols-2", sectionsClassName),
1475
+ className: cn(
1476
+ "mb-16 grid gap-12 md:grid-cols-2",
1477
+ sectionsClassName
1478
+ ),
1418
1479
  children: sections.map((section, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1419
1480
  typeof section.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "mb-4 text-2xl font-semibold text-foreground", children: section.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4", children: section.title }),
1420
1481
  typeof section.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg leading-relaxed text-muted-foreground", children: section.content }) : section.content
@@ -1052,7 +1052,11 @@ var defaultProps = {
1052
1052
  carouselImages: defaultCarouselImages,
1053
1053
  sections: defaultSections,
1054
1054
  gridImages: defaultGridImages,
1055
- backAction: { label: "Back to Projects", href: "/projects", icon: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-left", size: 16 }) },
1055
+ backAction: {
1056
+ label: "Back to Projects",
1057
+ href: "/projects",
1058
+ icon: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-left", size: 16 })
1059
+ },
1056
1060
  videoUrl: "https://cdn.ing/assets/files/record/286359/architecture-presentation.mp4",
1057
1061
  videoPoster: imagePlaceholders[49],
1058
1062
  pdfUrl: "https://cdn.ing/assets/files/record/286359/5fv7u23rr648t363fy2ibs61sflg",
@@ -1101,7 +1105,9 @@ function ProjectDetailArchitectureCarousel(props) {
1101
1105
  enableLightbox = defaultProps.enableLightbox
1102
1106
  } = props;
1103
1107
  const [currentSlide, setCurrentSlide] = useState(0);
1104
- const [selectedTab, setSelectedTab] = useState("slides");
1108
+ const [selectedTab, setSelectedTab] = useState(
1109
+ "slides"
1110
+ );
1105
1111
  const [lightboxOpen, setLightboxOpen] = useState(false);
1106
1112
  const [lightboxIndex, setLightboxIndex] = useState(0);
1107
1113
  const lightboxItems = useMemo(() => {
@@ -1115,12 +1121,15 @@ function ProjectDetailArchitectureCarousel(props) {
1115
1121
  share: true
1116
1122
  }));
1117
1123
  }, [carouselImages]);
1118
- const handleImageClick = useCallback((index) => {
1119
- if (enableLightbox) {
1120
- setLightboxIndex(index);
1121
- setLightboxOpen(true);
1122
- }
1123
- }, [enableLightbox]);
1124
+ const handleImageClick = useCallback(
1125
+ (index) => {
1126
+ if (enableLightbox) {
1127
+ setLightboxIndex(index);
1128
+ setLightboxOpen(true);
1129
+ }
1130
+ },
1131
+ [enableLightbox]
1132
+ );
1124
1133
  const handleLightboxClose = useCallback(() => {
1125
1134
  setLightboxOpen(false);
1126
1135
  }, []);
@@ -1139,11 +1148,21 @@ function ProjectDetailArchitectureCarousel(props) {
1139
1148
  const renderBackAction = () => {
1140
1149
  if (backActionSlot) return backActionSlot;
1141
1150
  if (!backAction) return null;
1142
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = backAction;
1151
+ const {
1152
+ label,
1153
+ icon,
1154
+ iconAfter,
1155
+ children,
1156
+ className: actionClassName,
1157
+ ...pressableProps
1158
+ } = backAction;
1143
1159
  return /* @__PURE__ */ jsx(
1144
1160
  Pressable,
1145
1161
  {
1146
- className: cn("inline-flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground", actionClassName),
1162
+ className: cn(
1163
+ "inline-flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground",
1164
+ actionClassName
1165
+ ),
1147
1166
  ...pressableProps,
1148
1167
  children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
1149
1168
  icon,
@@ -1171,18 +1190,36 @@ function ProjectDetailArchitectureCarousel(props) {
1171
1190
  /* @__PURE__ */ jsx("span", { children: "|" }),
1172
1191
  /* @__PURE__ */ jsx("span", { children: location })
1173
1192
  ] }),
1174
- typeof title === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight text-foreground md:text-5xl lg:text-6xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: titleClassName, children: title }),
1193
+ typeof title === "string" ? /* @__PURE__ */ jsx(
1194
+ "h1",
1195
+ {
1196
+ className: cn(
1197
+ "text-4xl font-bold tracking-tight text-foreground md:text-5xl lg:text-6xl",
1198
+ titleClassName
1199
+ ),
1200
+ children: title
1201
+ }
1202
+ ) : /* @__PURE__ */ jsx("div", { className: titleClassName, children: title }),
1175
1203
  subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx("p", { className: "mt-4 text-xl text-muted-foreground", children: subtitle }) : /* @__PURE__ */ jsx("div", { className: "mt-4", children: subtitle }))
1176
1204
  ] }),
1177
- /* @__PURE__ */ jsx(motion.div, { ...fadeInUp, className: "mb-16", children: /* @__PURE__ */ jsx("div", { className: cn("relative aspect-video overflow-hidden rounded-2xl bg-muted", heroImageClassName), children: /* @__PURE__ */ jsx(
1178
- Img,
1205
+ /* @__PURE__ */ jsx(motion.div, { ...fadeInUp, className: "mb-16", children: /* @__PURE__ */ jsx(
1206
+ "div",
1179
1207
  {
1180
- src: heroImage?.src || imagePlaceholders[56],
1181
- alt: heroImage?.alt || "Project hero image",
1182
- className: "h-full w-full object-cover",
1183
- optixFlowConfig
1208
+ className: cn(
1209
+ "relative aspect-video overflow-hidden rounded-2xl bg-muted",
1210
+ heroImageClassName
1211
+ ),
1212
+ children: /* @__PURE__ */ jsx(
1213
+ Img,
1214
+ {
1215
+ src: heroImage?.src || imagePlaceholders[56],
1216
+ alt: heroImage?.alt || "Project hero image",
1217
+ className: "h-full w-full object-cover",
1218
+ optixFlowConfig
1219
+ }
1220
+ )
1184
1221
  }
1185
- ) }) }),
1222
+ ) }),
1186
1223
  description && /* @__PURE__ */ jsx(
1187
1224
  motion.div,
1188
1225
  {
@@ -1209,7 +1246,14 @@ function ProjectDetailArchitectureCarousel(props) {
1209
1246
  selectedTab === "slides" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
1210
1247
  ),
1211
1248
  children: [
1212
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/images", size: 16, className: "mr-2 inline-block" }),
1249
+ /* @__PURE__ */ jsx(
1250
+ DynamicIcon,
1251
+ {
1252
+ name: "lucide/images",
1253
+ size: 16,
1254
+ className: "mr-2 inline-block"
1255
+ }
1256
+ ),
1213
1257
  "Slides (",
1214
1258
  carouselImages?.length || 0,
1215
1259
  ")"
@@ -1226,7 +1270,14 @@ function ProjectDetailArchitectureCarousel(props) {
1226
1270
  selectedTab === "video" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
1227
1271
  ),
1228
1272
  children: [
1229
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/play-circle", size: 16, className: "mr-2 inline-block" }),
1273
+ /* @__PURE__ */ jsx(
1274
+ DynamicIcon,
1275
+ {
1276
+ name: "lucide/play-circle",
1277
+ size: 16,
1278
+ className: "mr-2 inline-block"
1279
+ }
1280
+ ),
1230
1281
  "Video"
1231
1282
  ]
1232
1283
  }
@@ -1241,7 +1292,14 @@ function ProjectDetailArchitectureCarousel(props) {
1241
1292
  selectedTab === "pdf" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
1242
1293
  ),
1243
1294
  children: [
1244
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/file-text", size: 16, className: "mr-2 inline-block" }),
1295
+ /* @__PURE__ */ jsx(
1296
+ DynamicIcon,
1297
+ {
1298
+ name: "lucide/file-text",
1299
+ size: 16,
1300
+ className: "mr-2 inline-block"
1301
+ }
1302
+ ),
1245
1303
  "PDF Document"
1246
1304
  ]
1247
1305
  }
@@ -1393,7 +1451,10 @@ function ProjectDetailArchitectureCarousel(props) {
1393
1451
  {
1394
1452
  ...fadeInUp,
1395
1453
  transition: { duration: 0.6, delay: 0.3 },
1396
- className: cn("mb-16 grid gap-12 md:grid-cols-2", sectionsClassName),
1454
+ className: cn(
1455
+ "mb-16 grid gap-12 md:grid-cols-2",
1456
+ sectionsClassName
1457
+ ),
1397
1458
  children: sections.map((section, index) => /* @__PURE__ */ jsxs("div", { children: [
1398
1459
  typeof section.title === "string" ? /* @__PURE__ */ jsx("h2", { className: "mb-4 text-2xl font-semibold text-foreground", children: section.title }) : /* @__PURE__ */ jsx("div", { className: "mb-4", children: section.title }),
1399
1460
  typeof section.content === "string" ? /* @__PURE__ */ jsx("p", { className: "text-lg leading-relaxed text-muted-foreground", children: section.content }) : section.content
package/dist/registry.cjs CHANGED
@@ -77786,7 +77786,11 @@ var defaultProps15 = {
77786
77786
  carouselImages: defaultCarouselImages3,
77787
77787
  sections: defaultSections17,
77788
77788
  gridImages: defaultGridImages3,
77789
- backAction: { label: "Back to Projects", href: "/projects", icon: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-left", size: 16 }) },
77789
+ backAction: {
77790
+ label: "Back to Projects",
77791
+ href: "/projects",
77792
+ icon: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-left", size: 16 })
77793
+ },
77790
77794
  videoUrl: "https://cdn.ing/assets/files/record/286359/architecture-presentation.mp4",
77791
77795
  videoPoster: imagePlaceholders[49],
77792
77796
  pdfUrl: "https://cdn.ing/assets/files/record/286359/5fv7u23rr648t363fy2ibs61sflg",
@@ -77835,7 +77839,9 @@ function ProjectDetailArchitectureCarousel(props) {
77835
77839
  enableLightbox = defaultProps15.enableLightbox
77836
77840
  } = props;
77837
77841
  const [currentSlide, setCurrentSlide] = React11.useState(0);
77838
- const [selectedTab, setSelectedTab] = React11.useState("slides");
77842
+ const [selectedTab, setSelectedTab] = React11.useState(
77843
+ "slides"
77844
+ );
77839
77845
  const [lightboxOpen, setLightboxOpen] = React11.useState(false);
77840
77846
  const [lightboxIndex, setLightboxIndex] = React11.useState(0);
77841
77847
  const lightboxItems = React11.useMemo(() => {
@@ -77849,12 +77855,15 @@ function ProjectDetailArchitectureCarousel(props) {
77849
77855
  share: true
77850
77856
  }));
77851
77857
  }, [carouselImages]);
77852
- const handleImageClick = React11.useCallback((index) => {
77853
- if (enableLightbox) {
77854
- setLightboxIndex(index);
77855
- setLightboxOpen(true);
77856
- }
77857
- }, [enableLightbox]);
77858
+ const handleImageClick = React11.useCallback(
77859
+ (index) => {
77860
+ if (enableLightbox) {
77861
+ setLightboxIndex(index);
77862
+ setLightboxOpen(true);
77863
+ }
77864
+ },
77865
+ [enableLightbox]
77866
+ );
77858
77867
  const handleLightboxClose = React11.useCallback(() => {
77859
77868
  setLightboxOpen(false);
77860
77869
  }, []);
@@ -77873,11 +77882,21 @@ function ProjectDetailArchitectureCarousel(props) {
77873
77882
  const renderBackAction = () => {
77874
77883
  if (backActionSlot) return backActionSlot;
77875
77884
  if (!backAction) return null;
77876
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = backAction;
77885
+ const {
77886
+ label,
77887
+ icon,
77888
+ iconAfter,
77889
+ children,
77890
+ className: actionClassName,
77891
+ ...pressableProps
77892
+ } = backAction;
77877
77893
  return /* @__PURE__ */ jsxRuntime.jsx(
77878
77894
  Pressable,
77879
77895
  {
77880
- className: cn("inline-flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground", actionClassName),
77896
+ className: cn(
77897
+ "inline-flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground",
77898
+ actionClassName
77899
+ ),
77881
77900
  ...pressableProps,
77882
77901
  children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
77883
77902
  icon,
@@ -77905,18 +77924,36 @@ function ProjectDetailArchitectureCarousel(props) {
77905
77924
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "|" }),
77906
77925
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: location })
77907
77926
  ] }),
77908
- typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl font-bold tracking-tight text-foreground md:text-5xl lg:text-6xl", titleClassName), children: title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title }),
77927
+ typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
77928
+ "h1",
77929
+ {
77930
+ className: cn(
77931
+ "text-4xl font-bold tracking-tight text-foreground md:text-5xl lg:text-6xl",
77932
+ titleClassName
77933
+ ),
77934
+ children: title
77935
+ }
77936
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title }),
77909
77937
  subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-xl text-muted-foreground", children: subtitle }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: subtitle }))
77910
77938
  ] }),
77911
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { ...fadeInUp12, className: "mb-16", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative aspect-video overflow-hidden rounded-2xl bg-muted", heroImageClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
77912
- img.Img,
77939
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { ...fadeInUp12, className: "mb-16", children: /* @__PURE__ */ jsxRuntime.jsx(
77940
+ "div",
77913
77941
  {
77914
- src: heroImage?.src || imagePlaceholders[56],
77915
- alt: heroImage?.alt || "Project hero image",
77916
- className: "h-full w-full object-cover",
77917
- optixFlowConfig
77942
+ className: cn(
77943
+ "relative aspect-video overflow-hidden rounded-2xl bg-muted",
77944
+ heroImageClassName
77945
+ ),
77946
+ children: /* @__PURE__ */ jsxRuntime.jsx(
77947
+ img.Img,
77948
+ {
77949
+ src: heroImage?.src || imagePlaceholders[56],
77950
+ alt: heroImage?.alt || "Project hero image",
77951
+ className: "h-full w-full object-cover",
77952
+ optixFlowConfig
77953
+ }
77954
+ )
77918
77955
  }
77919
- ) }) }),
77956
+ ) }),
77920
77957
  description && /* @__PURE__ */ jsxRuntime.jsx(
77921
77958
  framerMotion.motion.div,
77922
77959
  {
@@ -77943,7 +77980,14 @@ function ProjectDetailArchitectureCarousel(props) {
77943
77980
  selectedTab === "slides" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
77944
77981
  ),
77945
77982
  children: [
77946
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/images", size: 16, className: "mr-2 inline-block" }),
77983
+ /* @__PURE__ */ jsxRuntime.jsx(
77984
+ DynamicIcon,
77985
+ {
77986
+ name: "lucide/images",
77987
+ size: 16,
77988
+ className: "mr-2 inline-block"
77989
+ }
77990
+ ),
77947
77991
  "Slides (",
77948
77992
  carouselImages?.length || 0,
77949
77993
  ")"
@@ -77960,7 +78004,14 @@ function ProjectDetailArchitectureCarousel(props) {
77960
78004
  selectedTab === "video" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
77961
78005
  ),
77962
78006
  children: [
77963
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/play-circle", size: 16, className: "mr-2 inline-block" }),
78007
+ /* @__PURE__ */ jsxRuntime.jsx(
78008
+ DynamicIcon,
78009
+ {
78010
+ name: "lucide/play-circle",
78011
+ size: 16,
78012
+ className: "mr-2 inline-block"
78013
+ }
78014
+ ),
77964
78015
  "Video"
77965
78016
  ]
77966
78017
  }
@@ -77975,7 +78026,14 @@ function ProjectDetailArchitectureCarousel(props) {
77975
78026
  selectedTab === "pdf" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
77976
78027
  ),
77977
78028
  children: [
77978
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/file-text", size: 16, className: "mr-2 inline-block" }),
78029
+ /* @__PURE__ */ jsxRuntime.jsx(
78030
+ DynamicIcon,
78031
+ {
78032
+ name: "lucide/file-text",
78033
+ size: 16,
78034
+ className: "mr-2 inline-block"
78035
+ }
78036
+ ),
77979
78037
  "PDF Document"
77980
78038
  ]
77981
78039
  }
@@ -78127,7 +78185,10 @@ function ProjectDetailArchitectureCarousel(props) {
78127
78185
  {
78128
78186
  ...fadeInUp12,
78129
78187
  transition: { duration: 0.6, delay: 0.3 },
78130
- className: cn("mb-16 grid gap-12 md:grid-cols-2", sectionsClassName),
78188
+ className: cn(
78189
+ "mb-16 grid gap-12 md:grid-cols-2",
78190
+ sectionsClassName
78191
+ ),
78131
78192
  children: sections.map((section, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
78132
78193
  typeof section.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "mb-4 text-2xl font-semibold text-foreground", children: section.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4", children: section.title }),
78133
78194
  typeof section.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg leading-relaxed text-muted-foreground", children: section.content }) : section.content
package/dist/registry.js CHANGED
@@ -77746,7 +77746,11 @@ var defaultProps15 = {
77746
77746
  carouselImages: defaultCarouselImages3,
77747
77747
  sections: defaultSections17,
77748
77748
  gridImages: defaultGridImages3,
77749
- backAction: { label: "Back to Projects", href: "/projects", icon: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-left", size: 16 }) },
77749
+ backAction: {
77750
+ label: "Back to Projects",
77751
+ href: "/projects",
77752
+ icon: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-left", size: 16 })
77753
+ },
77750
77754
  videoUrl: "https://cdn.ing/assets/files/record/286359/architecture-presentation.mp4",
77751
77755
  videoPoster: imagePlaceholders[49],
77752
77756
  pdfUrl: "https://cdn.ing/assets/files/record/286359/5fv7u23rr648t363fy2ibs61sflg",
@@ -77795,7 +77799,9 @@ function ProjectDetailArchitectureCarousel(props) {
77795
77799
  enableLightbox = defaultProps15.enableLightbox
77796
77800
  } = props;
77797
77801
  const [currentSlide, setCurrentSlide] = useState(0);
77798
- const [selectedTab, setSelectedTab] = useState("slides");
77802
+ const [selectedTab, setSelectedTab] = useState(
77803
+ "slides"
77804
+ );
77799
77805
  const [lightboxOpen, setLightboxOpen] = useState(false);
77800
77806
  const [lightboxIndex, setLightboxIndex] = useState(0);
77801
77807
  const lightboxItems = useMemo(() => {
@@ -77809,12 +77815,15 @@ function ProjectDetailArchitectureCarousel(props) {
77809
77815
  share: true
77810
77816
  }));
77811
77817
  }, [carouselImages]);
77812
- const handleImageClick = useCallback((index) => {
77813
- if (enableLightbox) {
77814
- setLightboxIndex(index);
77815
- setLightboxOpen(true);
77816
- }
77817
- }, [enableLightbox]);
77818
+ const handleImageClick = useCallback(
77819
+ (index) => {
77820
+ if (enableLightbox) {
77821
+ setLightboxIndex(index);
77822
+ setLightboxOpen(true);
77823
+ }
77824
+ },
77825
+ [enableLightbox]
77826
+ );
77818
77827
  const handleLightboxClose = useCallback(() => {
77819
77828
  setLightboxOpen(false);
77820
77829
  }, []);
@@ -77833,11 +77842,21 @@ function ProjectDetailArchitectureCarousel(props) {
77833
77842
  const renderBackAction = () => {
77834
77843
  if (backActionSlot) return backActionSlot;
77835
77844
  if (!backAction) return null;
77836
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = backAction;
77845
+ const {
77846
+ label,
77847
+ icon,
77848
+ iconAfter,
77849
+ children,
77850
+ className: actionClassName,
77851
+ ...pressableProps
77852
+ } = backAction;
77837
77853
  return /* @__PURE__ */ jsx(
77838
77854
  Pressable,
77839
77855
  {
77840
- className: cn("inline-flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground", actionClassName),
77856
+ className: cn(
77857
+ "inline-flex items-center gap-2 text-sm font-medium text-muted-foreground transition-colors hover:text-foreground",
77858
+ actionClassName
77859
+ ),
77841
77860
  ...pressableProps,
77842
77861
  children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
77843
77862
  icon,
@@ -77865,18 +77884,36 @@ function ProjectDetailArchitectureCarousel(props) {
77865
77884
  /* @__PURE__ */ jsx("span", { children: "|" }),
77866
77885
  /* @__PURE__ */ jsx("span", { children: location })
77867
77886
  ] }),
77868
- typeof title === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl font-bold tracking-tight text-foreground md:text-5xl lg:text-6xl", titleClassName), children: title }) : /* @__PURE__ */ jsx("div", { className: titleClassName, children: title }),
77887
+ typeof title === "string" ? /* @__PURE__ */ jsx(
77888
+ "h1",
77889
+ {
77890
+ className: cn(
77891
+ "text-4xl font-bold tracking-tight text-foreground md:text-5xl lg:text-6xl",
77892
+ titleClassName
77893
+ ),
77894
+ children: title
77895
+ }
77896
+ ) : /* @__PURE__ */ jsx("div", { className: titleClassName, children: title }),
77869
77897
  subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx("p", { className: "mt-4 text-xl text-muted-foreground", children: subtitle }) : /* @__PURE__ */ jsx("div", { className: "mt-4", children: subtitle }))
77870
77898
  ] }),
77871
- /* @__PURE__ */ jsx(motion.div, { ...fadeInUp12, className: "mb-16", children: /* @__PURE__ */ jsx("div", { className: cn("relative aspect-video overflow-hidden rounded-2xl bg-muted", heroImageClassName), children: /* @__PURE__ */ jsx(
77872
- Img,
77899
+ /* @__PURE__ */ jsx(motion.div, { ...fadeInUp12, className: "mb-16", children: /* @__PURE__ */ jsx(
77900
+ "div",
77873
77901
  {
77874
- src: heroImage?.src || imagePlaceholders[56],
77875
- alt: heroImage?.alt || "Project hero image",
77876
- className: "h-full w-full object-cover",
77877
- optixFlowConfig
77902
+ className: cn(
77903
+ "relative aspect-video overflow-hidden rounded-2xl bg-muted",
77904
+ heroImageClassName
77905
+ ),
77906
+ children: /* @__PURE__ */ jsx(
77907
+ Img,
77908
+ {
77909
+ src: heroImage?.src || imagePlaceholders[56],
77910
+ alt: heroImage?.alt || "Project hero image",
77911
+ className: "h-full w-full object-cover",
77912
+ optixFlowConfig
77913
+ }
77914
+ )
77878
77915
  }
77879
- ) }) }),
77916
+ ) }),
77880
77917
  description && /* @__PURE__ */ jsx(
77881
77918
  motion.div,
77882
77919
  {
@@ -77903,7 +77940,14 @@ function ProjectDetailArchitectureCarousel(props) {
77903
77940
  selectedTab === "slides" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
77904
77941
  ),
77905
77942
  children: [
77906
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/images", size: 16, className: "mr-2 inline-block" }),
77943
+ /* @__PURE__ */ jsx(
77944
+ DynamicIcon,
77945
+ {
77946
+ name: "lucide/images",
77947
+ size: 16,
77948
+ className: "mr-2 inline-block"
77949
+ }
77950
+ ),
77907
77951
  "Slides (",
77908
77952
  carouselImages?.length || 0,
77909
77953
  ")"
@@ -77920,7 +77964,14 @@ function ProjectDetailArchitectureCarousel(props) {
77920
77964
  selectedTab === "video" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
77921
77965
  ),
77922
77966
  children: [
77923
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/play-circle", size: 16, className: "mr-2 inline-block" }),
77967
+ /* @__PURE__ */ jsx(
77968
+ DynamicIcon,
77969
+ {
77970
+ name: "lucide/play-circle",
77971
+ size: 16,
77972
+ className: "mr-2 inline-block"
77973
+ }
77974
+ ),
77924
77975
  "Video"
77925
77976
  ]
77926
77977
  }
@@ -77935,7 +77986,14 @@ function ProjectDetailArchitectureCarousel(props) {
77935
77986
  selectedTab === "pdf" ? "border-b-2 border-primary text-foreground" : "text-muted-foreground hover:text-foreground"
77936
77987
  ),
77937
77988
  children: [
77938
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/file-text", size: 16, className: "mr-2 inline-block" }),
77989
+ /* @__PURE__ */ jsx(
77990
+ DynamicIcon,
77991
+ {
77992
+ name: "lucide/file-text",
77993
+ size: 16,
77994
+ className: "mr-2 inline-block"
77995
+ }
77996
+ ),
77939
77997
  "PDF Document"
77940
77998
  ]
77941
77999
  }
@@ -78087,7 +78145,10 @@ function ProjectDetailArchitectureCarousel(props) {
78087
78145
  {
78088
78146
  ...fadeInUp12,
78089
78147
  transition: { duration: 0.6, delay: 0.3 },
78090
- className: cn("mb-16 grid gap-12 md:grid-cols-2", sectionsClassName),
78148
+ className: cn(
78149
+ "mb-16 grid gap-12 md:grid-cols-2",
78150
+ sectionsClassName
78151
+ ),
78091
78152
  children: sections.map((section, index) => /* @__PURE__ */ jsxs("div", { children: [
78092
78153
  typeof section.title === "string" ? /* @__PURE__ */ jsx("h2", { className: "mb-4 text-2xl font-semibold text-foreground", children: section.title }) : /* @__PURE__ */ jsx("div", { className: "mb-4", children: section.title }),
78093
78154
  typeof section.content === "string" ? /* @__PURE__ */ jsx("p", { className: "text-lg leading-relaxed text-muted-foreground", children: section.content }) : section.content
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensite/ui",
3
- "version": "0.2.7",
3
+ "version": "0.2.9",
4
4
  "description": "Foundational UI component library for OpenSite Semantic Site Builder with tree-shakable exports and abstract styling",
5
5
  "keywords": [
6
6
  "react",
@@ -3304,8 +3304,8 @@
3304
3304
  "@opensite/hooks": "^0.1.1",
3305
3305
  "@page-speed/forms": "0.3.4",
3306
3306
  "@page-speed/img": "0.4.3",
3307
- "@page-speed/lightbox": "0.1.6",
3308
- "@page-speed/pdf-viewer": "0.1.4",
3307
+ "@page-speed/lightbox": "0.1.8",
3308
+ "@page-speed/pdf-viewer": "0.1.6",
3309
3309
  "@radix-ui/react-accordion": "^1.2.12",
3310
3310
  "@radix-ui/react-aspect-ratio": "^1.1.8",
3311
3311
  "@radix-ui/react-avatar": "^1.1.11",