funuicss 3.7.10 → 3.7.12

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/css/fun.css CHANGED
@@ -821,31 +821,6 @@ h6, .h6 {
821
821
  }
822
822
 
823
823
 
824
- /* For WebKit browsers (Chrome, Edge, Brave, Safari) */
825
- ::-webkit-scrollbar {
826
- width: 10px;
827
- height: 10px;
828
- }
829
-
830
- ::-webkit-scrollbar-track {
831
- border-radius: 10px;
832
- }
833
-
834
- ::-webkit-scrollbar-thumb {
835
- background-color: var(--borderColor, #999); /* Darker thumb */
836
- border-radius: 10px;
837
- border: 2px solid transparent;
838
- background-clip: content-box;
839
- }
840
-
841
- ::-webkit-scrollbar-thumb:hover {
842
- background-color: var(--dark500, #666); /* Hover effect */
843
- }
844
-
845
- /* Optional: Hide scrollbar buttons (arrows) */
846
- ::-webkit-scrollbar-button {
847
- display: none;
848
- }
849
824
 
850
825
 
851
826
 
@@ -986,12 +961,6 @@ link:hover {
986
961
  line-height: 1 !important;
987
962
  height: var(--inputButtonHeight);
988
963
  }
989
- .button.primary{outline:1px solid var(--primary);}
990
- .button.primary:active{outline:1px solid var(--primary300);}
991
- .button.secondary{outline:1px solid var(--secondary);}
992
- .button.secondary:active{outline:1px solid var(--secondary300);}
993
- .button.accent{outline:1px solid var(--accent);}
994
- .button.accent:active{outline:1px solid var(--accent300);}
995
964
 
996
965
 
997
966
  /* Ripple effect */
@@ -1093,6 +1062,8 @@ link:hover {
1093
1062
 
1094
1063
 
1095
1064
 
1065
+
1066
+
1096
1067
  .roundBtn {
1097
1068
  border-radius: 100rem;
1098
1069
  }
@@ -1103,9 +1074,10 @@ link:hover {
1103
1074
  filter: var(--hoverable);
1104
1075
  }
1105
1076
  .button.smallBtn {
1106
- padding: 0.3rem 0.6rem !important;
1077
+ padding: 0.5rem 0.6rem !important;
1107
1078
  font-size: var(--smallerFont) ;
1108
1079
  height: fit-content !important;
1080
+ border-radius: calc(var(--radius) / 1.5);
1109
1081
  }
1110
1082
  .smallBtn.roundBtn{
1111
1083
  padding: 0.3rem 0.8rem !important;
@@ -1473,12 +1445,12 @@ border-radius: var(--borderRadius);
1473
1445
  /* Beautiful Progress Bar */
1474
1446
  .progress-container {
1475
1447
  width: 100%;
1476
- padding: 0 0.5rem;
1477
1448
  }
1478
1449
 
1479
1450
  .progress-wrapper {
1480
1451
  position: relative;
1481
1452
  width: 100%;
1453
+
1482
1454
  }
1483
1455
 
1484
1456
  .video-progress {
@@ -1486,7 +1458,7 @@ border-radius: var(--borderRadius);
1486
1458
  appearance: none;
1487
1459
  width: 100%;
1488
1460
  padding: 0 !important;
1489
- height: 5px !important;
1461
+ height: 8px !important;
1490
1462
  border-radius: 10px;
1491
1463
  background: linear-gradient(
1492
1464
  to right,
@@ -1499,12 +1471,11 @@ border-radius: var(--borderRadius);
1499
1471
  cursor: pointer;
1500
1472
  transition: all 0.3s ease;
1501
1473
  position: relative;
1502
- }
1503
1474
 
1504
- .video-progress:hover {
1505
- height: 8px;
1506
1475
  }
1507
1476
 
1477
+
1478
+
1508
1479
  .video-progress::-webkit-slider-thumb {
1509
1480
  -webkit-appearance: none;
1510
1481
  appearance: none;
@@ -1615,22 +1586,28 @@ border-radius: var(--borderRadius);
1615
1586
  transform: scale(1.1);
1616
1587
  }
1617
1588
 
1618
- /* Time display */
1619
- .video_time {
1620
- background-color: var(--raiseThemes);
1621
- backdrop-filter: var(--raiseBackdrop);
1622
- border-radius: 1rem;
1623
- padding: 0.5rem 1rem;
1624
- line-height: 1;
1625
- font-size: 0.875rem;
1626
- font-weight: 500;
1627
- }
1589
+
1628
1590
 
1629
1591
  /* Control buttons hover effects */
1630
1592
  .video_container .circle {
1631
1593
  transition: all 0.2s ease;
1632
1594
  }
1633
1595
 
1596
+ .videoProgressContainer,
1597
+ .videoRightContainer,
1598
+ .videoLeftContainer{
1599
+ background-color: var(--dark);
1600
+ height: 30px !important;
1601
+ display: flex;
1602
+ align-items: center !important;
1603
+ align-content: center !important;
1604
+ justify-content: center !important;
1605
+ line-height: 0rem;
1606
+ color: var(--white) !important;
1607
+ border-radius: 0.5rem;
1608
+ padding: 0 0.5rem;
1609
+ }
1610
+
1634
1611
  .video_container .circle:hover {
1635
1612
  background-color: var(--primary) !important;
1636
1613
  color: var(--white) !important;
@@ -1657,6 +1634,7 @@ border-radius: var(--borderRadius);
1657
1634
  }
1658
1635
  }
1659
1636
 
1637
+
1660
1638
  /* Fullscreen adjustments */
1661
1639
  .video_container:fullscreen {
1662
1640
  width: 100vw;
@@ -4348,7 +4326,6 @@ opacity: 1;
4348
4326
  color: white;
4349
4327
  }
4350
4328
 
4351
-
4352
4329
  .vista{
4353
4330
  display: flex;
4354
4331
  align-items: center;
@@ -10732,3 +10709,45 @@ z-index: 10;
10732
10709
  @keyframes ping {
10733
10710
  75%, 100% { transform: scale(2); opacity: 0; }
10734
10711
  }
10712
+
10713
+
10714
+
10715
+ /* Make all scrollbars thin */
10716
+ * {
10717
+ scrollbar-width: thin;
10718
+ scrollbar-color: var(--borderColor,#aaa) transparent;
10719
+ }
10720
+
10721
+ /* Chrome / Safari / Edge */
10722
+ ::-webkit-scrollbar {
10723
+ width: 6px !important;
10724
+ }
10725
+
10726
+ ::-webkit-scrollbar-thumb {
10727
+ background-color: var(--borderColor,#aaa) !important;
10728
+ border-radius: 20px !important;
10729
+ border: 2px solid transparent !important;
10730
+ background-clip: content-box !important;
10731
+
10732
+ /* <<— Force thumb to always appear shorter visually */
10733
+ min-height: 40px !important;
10734
+ }
10735
+
10736
+ ::-webkit-scrollbar-thumb:hover {
10737
+ background-color: var(--dark500,#666) !important;
10738
+ }
10739
+
10740
+ ::-webkit-scrollbar-track {
10741
+ background: transparent !important;
10742
+ }
10743
+
10744
+ ::-webkit-scrollbar-button {
10745
+ display: none !important;
10746
+ }
10747
+
10748
+ /* Make content scroll more so thumb shrinks */
10749
+ *::-webkit-scrollbar-thumb {
10750
+ min-height: 40px !important;
10751
+ }
10752
+
10753
+
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.7.10",
2
+ "version": "3.7.12",
3
3
  "name": "funuicss",
4
4
  "description": "React and Next.js component UI Library for creating Easy and good looking websites with fewer lines of code. Elevate your web development experience with our cutting-edge React/Next.js component UI Library. Craft stunning websites effortlessly, boasting both seamless functionality and aesthetic appeal—all achieved with minimal lines of code. Unleash the power of simplicity and style in your projects!",
5
5
  "main": "index.js",
package/ui/card/Card.d.ts CHANGED
@@ -32,7 +32,6 @@ interface CardProps {
32
32
  gradient?: string;
33
33
  opacity?: number;
34
34
  border?: string;
35
- hoverEffect?: 'none' | 'lift' | 'glow';
36
35
  heading?: ReactNode;
37
36
  headingSize?: string;
38
37
  headingWeight?: number;
@@ -67,6 +66,27 @@ interface CardProps {
67
66
  ctaPrimaryText?: string;
68
67
  ctaSecondaryText?: string;
69
68
  ctaAccentText?: string;
69
+ ctaPrimaryRounded?: boolean;
70
+ ctaPrimaryFlat?: boolean;
71
+ ctaPrimaryPrefix?: string;
72
+ ctaPrimarySuffix?: string;
73
+ primaryIconSize?: number;
74
+ primaryButtonFuncss?: string;
75
+ primaryButtonSmall?: boolean;
76
+ ctaSecondaryRounded?: boolean;
77
+ ctaSecondaryFlat?: boolean;
78
+ ctaSecondaryPrefix?: string;
79
+ ctaSecondarySuffix?: string;
80
+ secondaryIconSize?: number;
81
+ secondaryButtonFuncss?: string;
82
+ secondaryButtonSmall?: boolean;
83
+ ctaAccentRounded?: boolean;
84
+ ctaAccentFlat?: boolean;
85
+ ctaAccentPrefix?: string;
86
+ ctaAccentSuffix?: string;
87
+ accentIconSize?: number;
88
+ accentButtonFuncss?: string;
89
+ accentButtonSmall?: boolean;
70
90
  ctaGap?: number;
71
91
  ctaFlexJustify?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around';
72
92
  ctaClass?: string;
@@ -78,5 +98,5 @@ interface CardProps {
78
98
  footerClass?: string;
79
99
  variant?: string;
80
100
  }
81
- export default function Card({ color, bg, width, height, minHeight, minWidth, margin, padding, funcss, children, roundEdge, maxHeight, maxWidth, horizontal, id, header, body, footer, noGap, fab, image, shadowless, flat, responsiveMedium, xl, responsiveSmall, style, pattern, patternOpacity, gradient, opacity, border, hoverEffect, heading, headingSize, headingWeight, headingColor, headingClass, headingLineHeight, subheading, subheadingSize, subheadingWeight, subheadingColor, subheadingClass, subheadingLineHeight, content, contentSize, contentWeight, contentColor, contentClass, contentLineHeight, imageUrl, imageAlt, imageClass, imageSize, showPrimaryCTA, showSecondaryCTA, showAccentCTA, primaryButtonOutlined, secondaryButtonOutlined, accentButtonOutlined, ctaPrimaryUrl, ctaSecondaryUrl, ctaAccentUrl, ctaPrimaryText, ctaSecondaryText, ctaAccentText, ctaGap, ctaFlexJustify, ctaClass, headerStyle, headerClass, bodyStyle, bodyClass, footerStyle, footerClass, variant, ...rest }: CardProps): React.JSX.Element;
101
+ export default function Card(localProps: CardProps): React.JSX.Element;
82
102
  export {};
package/ui/card/Card.js CHANGED
@@ -11,17 +11,6 @@ var __assign = (this && this.__assign) || function () {
11
11
  };
12
12
  return __assign.apply(this, arguments);
13
13
  };
14
- var __rest = (this && this.__rest) || function (s, e) {
15
- var t = {};
16
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
17
- t[p] = s[p];
18
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
19
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
20
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
21
- t[p[i]] = s[p[i]];
22
- }
23
- return t;
24
- };
25
14
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
15
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
16
  };
@@ -37,113 +26,13 @@ var Button_1 = __importDefault(require("../button/Button"));
37
26
  var Flex_1 = __importDefault(require("../flex/Flex"));
38
27
  var Text_1 = __importDefault(require("../text/Text"));
39
28
  var View_1 = __importDefault(require("../view/View"));
40
- function Card(_a) {
41
- var
42
- // Original Props
43
- color = _a.color, bg = _a.bg, width = _a.width, height = _a.height, minHeight = _a.minHeight, minWidth = _a.minWidth, margin = _a.margin, padding = _a.padding, funcss = _a.funcss, children = _a.children, roundEdge = _a.roundEdge, maxHeight = _a.maxHeight, maxWidth = _a.maxWidth, horizontal = _a.horizontal, id = _a.id, header = _a.header, body = _a.body, footer = _a.footer, noGap = _a.noGap, fab = _a.fab, image = _a.image, shadowless = _a.shadowless, flat = _a.flat, responsiveMedium = _a.responsiveMedium, xl = _a.xl, responsiveSmall = _a.responsiveSmall, style = _a.style,
44
- // Pattern Props
45
- _b = _a.pattern,
46
- // Pattern Props
47
- pattern = _b === void 0 ? 'none' : _b, _c = _a.patternOpacity, patternOpacity = _c === void 0 ? 0.1 : _c, gradient = _a.gradient, _d = _a.opacity, opacity = _d === void 0 ? 1 : _d, border = _a.border, _e = _a.hoverEffect, hoverEffect = _e === void 0 ? 'none' : _e,
48
- // Enhanced Content Props
49
- heading = _a.heading, _f = _a.headingSize, headingSize = _f === void 0 ? 'xl' : _f, _g = _a.headingWeight, headingWeight = _g === void 0 ? 700 : _g, headingColor = _a.headingColor, headingClass = _a.headingClass, headingLineHeight = _a.headingLineHeight, subheading = _a.subheading, _h = _a.subheadingSize, subheadingSize = _h === void 0 ? 'base' : _h, _j = _a.subheadingWeight, subheadingWeight = _j === void 0 ? 400 : _j, _k = _a.subheadingColor, subheadingColor = _k === void 0 ? 'light' : _k, subheadingClass = _a.subheadingClass, subheadingLineHeight = _a.subheadingLineHeight, content = _a.content, _l = _a.contentSize, contentSize = _l === void 0 ? 'base' : _l, _m = _a.contentWeight, contentWeight = _m === void 0 ? 400 : _m, contentColor = _a.contentColor, contentClass = _a.contentClass, contentLineHeight = _a.contentLineHeight,
50
- // Image Props
51
- imageUrl = _a.imageUrl, _o = _a.imageAlt, imageAlt = _o === void 0 ? '' : _o, _p = _a.imageClass, imageClass = _p === void 0 ? '' : _p, _q = _a.imageSize, imageSize = _q === void 0 ? '100%' : _q,
52
- // Enhanced Footer/CTA Props
53
- _r = _a.showPrimaryCTA,
54
- // Enhanced Footer/CTA Props
55
- showPrimaryCTA = _r === void 0 ? false : _r, _s = _a.showSecondaryCTA, showSecondaryCTA = _s === void 0 ? false : _s, _t = _a.showAccentCTA, showAccentCTA = _t === void 0 ? false : _t, _u = _a.primaryButtonOutlined, primaryButtonOutlined = _u === void 0 ? false : _u, _v = _a.secondaryButtonOutlined, secondaryButtonOutlined = _v === void 0 ? false : _v, _w = _a.accentButtonOutlined, accentButtonOutlined = _w === void 0 ? false : _w, _x = _a.ctaPrimaryUrl, ctaPrimaryUrl = _x === void 0 ? '' : _x, _y = _a.ctaSecondaryUrl, ctaSecondaryUrl = _y === void 0 ? '' : _y, _z = _a.ctaAccentUrl, ctaAccentUrl = _z === void 0 ? '' : _z, _0 = _a.ctaPrimaryText, ctaPrimaryText = _0 === void 0 ? 'Primary Action' : _0, _1 = _a.ctaSecondaryText, ctaSecondaryText = _1 === void 0 ? 'Secondary Action' : _1, _2 = _a.ctaAccentText, ctaAccentText = _2 === void 0 ? 'Accent Action' : _2, _3 = _a.ctaGap, ctaGap = _3 === void 0 ? 1 : _3, _4 = _a.ctaFlexJustify, ctaFlexJustify = _4 === void 0 ? 'center' : _4, _5 = _a.ctaClass, ctaClass = _5 === void 0 ? '' : _5,
56
- // Section Styling Props
57
- headerStyle = _a.headerStyle, headerClass = _a.headerClass, bodyStyle = _a.bodyStyle, bodyClass = _a.bodyClass, footerStyle = _a.footerStyle, footerClass = _a.footerClass,
58
- // Configuration
59
- variant = _a.variant, rest = __rest(_a, ["color", "bg", "width", "height", "minHeight", "minWidth", "margin", "padding", "funcss", "children", "roundEdge", "maxHeight", "maxWidth", "horizontal", "id", "header", "body", "footer", "noGap", "fab", "image", "shadowless", "flat", "responsiveMedium", "xl", "responsiveSmall", "style", "pattern", "patternOpacity", "gradient", "opacity", "border", "hoverEffect", "heading", "headingSize", "headingWeight", "headingColor", "headingClass", "headingLineHeight", "subheading", "subheadingSize", "subheadingWeight", "subheadingColor", "subheadingClass", "subheadingLineHeight", "content", "contentSize", "contentWeight", "contentColor", "contentClass", "contentLineHeight", "imageUrl", "imageAlt", "imageClass", "imageSize", "showPrimaryCTA", "showSecondaryCTA", "showAccentCTA", "primaryButtonOutlined", "secondaryButtonOutlined", "accentButtonOutlined", "ctaPrimaryUrl", "ctaSecondaryUrl", "ctaAccentUrl", "ctaPrimaryText", "ctaSecondaryText", "ctaAccentText", "ctaGap", "ctaFlexJustify", "ctaClass", "headerStyle", "headerClass", "bodyStyle", "bodyClass", "footerStyle", "footerClass", "variant"]);
60
- // Use the component config hook
61
- var mergeWithLocal = (0, componentUtils_1.useComponentConfiguration)('Card', variant).mergeWithLocal;
62
- // Merge config with local props
63
- var mergedProps = mergeWithLocal({
64
- // Original props
65
- color: color,
66
- bg: bg,
67
- width: width,
68
- height: height,
69
- minHeight: minHeight,
70
- minWidth: minWidth,
71
- margin: margin,
72
- padding: padding,
73
- funcss: funcss,
74
- children: children,
75
- roundEdge: roundEdge,
76
- maxHeight: maxHeight,
77
- maxWidth: maxWidth,
78
- horizontal: horizontal,
79
- id: id,
80
- header: header,
81
- body: body,
82
- footer: footer,
83
- noGap: noGap,
84
- fab: fab,
85
- image: image,
86
- shadowless: shadowless,
87
- flat: flat,
88
- responsiveMedium: responsiveMedium,
89
- xl: xl,
90
- responsiveSmall: responsiveSmall,
91
- style: style,
92
- // Pattern props
93
- pattern: pattern,
94
- patternOpacity: patternOpacity,
95
- gradient: gradient,
96
- opacity: opacity,
97
- border: border,
98
- hoverEffect: hoverEffect,
99
- // Enhanced content props
100
- heading: heading,
101
- headingSize: headingSize,
102
- headingWeight: headingWeight,
103
- headingColor: headingColor,
104
- headingClass: headingClass,
105
- headingLineHeight: headingLineHeight,
106
- subheading: subheading,
107
- subheadingSize: subheadingSize,
108
- subheadingWeight: subheadingWeight,
109
- subheadingColor: subheadingColor,
110
- subheadingClass: subheadingClass,
111
- subheadingLineHeight: subheadingLineHeight,
112
- content: content,
113
- contentSize: contentSize,
114
- contentWeight: contentWeight,
115
- contentColor: contentColor,
116
- contentClass: contentClass,
117
- contentLineHeight: contentLineHeight,
118
- // Image props
119
- imageUrl: imageUrl,
120
- imageAlt: imageAlt,
121
- imageClass: imageClass,
122
- imageSize: imageSize,
123
- // CTA props
124
- showPrimaryCTA: showPrimaryCTA,
125
- showSecondaryCTA: showSecondaryCTA,
126
- showAccentCTA: showAccentCTA,
127
- primaryButtonOutlined: primaryButtonOutlined,
128
- secondaryButtonOutlined: secondaryButtonOutlined,
129
- accentButtonOutlined: accentButtonOutlined,
130
- ctaPrimaryUrl: ctaPrimaryUrl,
131
- ctaSecondaryUrl: ctaSecondaryUrl,
132
- ctaAccentUrl: ctaAccentUrl,
133
- ctaPrimaryText: ctaPrimaryText,
134
- ctaSecondaryText: ctaSecondaryText,
135
- ctaAccentText: ctaAccentText,
136
- ctaGap: ctaGap,
137
- ctaFlexJustify: ctaFlexJustify,
138
- ctaClass: ctaClass,
139
- // Section styling props
140
- headerStyle: headerStyle,
141
- headerClass: headerClass,
142
- bodyStyle: bodyStyle,
143
- bodyClass: bodyClass,
144
- footerStyle: footerStyle,
145
- footerClass: footerClass,
146
- }).props;
29
+ function Card(localProps) {
30
+ // Use the component config hook with the variant from localProps
31
+ var mergeWithLocal = (0, componentUtils_1.useComponentConfiguration)('Card', localProps.variant).mergeWithLocal;
32
+ // Merge config with local props - local props override config
33
+ var mergedProps = mergeWithLocal(localProps).props;
34
+ // Use mergedProps directly - they already have the correct merge logic applied
35
+ var final = mergedProps;
147
36
  var themeVariant = (0, theme_1.useVariant)().variant;
148
37
  // Handle content - if string, use dangerouslySetInnerHTML, otherwise render as is
149
38
  var renderContent = function (content) {
@@ -152,74 +41,74 @@ function Card(_a) {
152
41
  }
153
42
  return content;
154
43
  };
44
+ // CTA Buttons Component
45
+ var CTAButtons = function () {
46
+ var hasCTAs = final.showPrimaryCTA || final.showSecondaryCTA || final.showAccentCTA;
47
+ if (!hasCTAs)
48
+ return null;
49
+ return (react_1.default.createElement(Flex_1.default, { gap: final.ctaGap, justify: final.ctaFlexJustify, className: "mt-4 ".concat(final.ctaClass), wrap: "wrap", width: '100%' },
50
+ final.showPrimaryCTA && (react_1.default.createElement(Button_1.default, { bg: "primary", outlined: final.primaryButtonOutlined, onClick: function () { return final.ctaPrimaryUrl && (window.location.href = final.ctaPrimaryUrl); }, rounded: final.ctaPrimaryRounded, flat: final.ctaPrimaryFlat, stringPrefix: final.ctaPrimaryPrefix, stringSuffix: final.ctaPrimarySuffix, iconSize: final.primaryIconSize, funcss: final.primaryButtonFuncss, small: final.primaryButtonSmall }, final.ctaPrimaryText)),
51
+ final.showSecondaryCTA && (react_1.default.createElement(Button_1.default, { bg: "secondary", outlined: final.secondaryButtonOutlined, onClick: function () { return final.ctaSecondaryUrl && (window.location.href = final.ctaSecondaryUrl); }, rounded: final.ctaSecondaryRounded, flat: final.ctaSecondaryFlat, stringPrefix: final.ctaSecondaryPrefix, stringSuffix: final.ctaSecondarySuffix, iconSize: final.secondaryIconSize, funcss: final.secondaryButtonFuncss, small: final.secondaryButtonSmall }, final.ctaSecondaryText)),
52
+ final.showAccentCTA && (react_1.default.createElement(Button_1.default, { bg: "accent", outlined: final.accentButtonOutlined, onClick: function () { return final.ctaAccentUrl && (window.location.href = final.ctaAccentUrl); }, rounded: final.ctaAccentRounded, flat: final.ctaAccentFlat, stringPrefix: final.ctaAccentPrefix, stringSuffix: final.ctaAccentSuffix, iconSize: final.accentIconSize, funcss: final.accentButtonFuncss, small: final.accentButtonSmall }, final.ctaAccentText))));
53
+ };
155
54
  // Enhanced Text Content with flexible styling
156
55
  var EnhancedTextContent = (react_1.default.createElement("div", { className: "card-enhanced-content" },
157
- mergedProps.heading && (react_1.default.createElement(Text_1.default, { block: true, size: mergedProps.headingSize, weight: mergedProps.headingWeight, color: mergedProps.headingColor, funcss: mergedProps.headingClass, lineHeight: mergedProps.headingLineHeight }, renderContent(mergedProps.heading))),
158
- mergedProps.subheading && (react_1.default.createElement(Text_1.default, { block: true, size: mergedProps.subheadingSize, weight: mergedProps.subheadingWeight, color: mergedProps.subheadingColor, funcss: "mt-1 ".concat(mergedProps.subheadingClass), lineHeight: mergedProps.subheadingLineHeight }, renderContent(mergedProps.subheading))),
159
- mergedProps.content && (react_1.default.createElement(Text_1.default, { block: true, size: mergedProps.contentSize, weight: mergedProps.contentWeight, color: mergedProps.contentColor, funcss: "mt-3 ".concat(mergedProps.contentClass), lineHeight: mergedProps.contentLineHeight, article: true }, renderContent(mergedProps.content)))));
56
+ final.heading && (react_1.default.createElement(Text_1.default, { block: true, size: final.headingSize, weight: final.headingWeight, color: final.headingColor, funcss: final.headingClass, lineHeight: final.headingLineHeight }, renderContent(final.heading))),
57
+ final.subheading && (react_1.default.createElement(Text_1.default, { block: true, size: final.subheadingSize, weight: final.subheadingWeight, color: final.subheadingColor, funcss: "mt-1 ".concat(final.subheadingClass), lineHeight: final.subheadingLineHeight }, renderContent(final.subheading))),
58
+ final.content && (react_1.default.createElement(Text_1.default, { block: true, size: final.contentSize, weight: final.contentWeight, color: final.contentColor, funcss: "mt-3 ".concat(final.contentClass), lineHeight: final.contentLineHeight, article: true }, renderContent(final.content)))));
160
59
  // Image Content - uses imageUrl if no image component provided
161
- var ImageContent = (mergedProps.image || mergedProps.imageUrl) && (react_1.default.createElement("div", { className: "card-image-content" }, mergedProps.image ? (mergedProps.image) : (mergedProps.imageUrl && (react_1.default.createElement("img", { src: mergedProps.imageUrl, alt: mergedProps.imageAlt, className: mergedProps.imageClass, style: {
162
- width: mergedProps.imageSize,
60
+ var ImageContent = (final.image || final.imageUrl) && (react_1.default.createElement("div", { className: "card-image-content" }, final.image ? (final.image) : (final.imageUrl && (react_1.default.createElement("img", { src: final.imageUrl, alt: final.imageAlt, className: final.imageClass, style: {
61
+ width: final.imageSize,
163
62
  height: 'auto',
164
63
  objectFit: 'cover',
165
64
  borderRadius: 'inherit'
166
65
  } })))));
167
- // CTA Buttons Component
168
- var CTAButtons = function () {
169
- var hasCTAs = mergedProps.showPrimaryCTA || mergedProps.showSecondaryCTA || mergedProps.showAccentCTA;
170
- if (!hasCTAs)
171
- return null;
172
- return (react_1.default.createElement(Flex_1.default, { gap: mergedProps.ctaGap, justify: mergedProps.ctaFlexJustify, className: "mt-4 ".concat(mergedProps.ctaClass), wrap: "wrap", width: '100%' },
173
- mergedProps.showPrimaryCTA && (react_1.default.createElement(Button_1.default, { bg: "primary", outlined: mergedProps.primaryButtonOutlined, onClick: function () { return mergedProps.ctaPrimaryUrl && (window.location.href = mergedProps.ctaPrimaryUrl); } }, mergedProps.ctaPrimaryText)),
174
- mergedProps.showSecondaryCTA && (react_1.default.createElement(Button_1.default, { bg: "secondary", outlined: mergedProps.secondaryButtonOutlined, onClick: function () { return mergedProps.ctaSecondaryUrl && (window.location.href = mergedProps.ctaSecondaryUrl); } }, mergedProps.ctaSecondaryText)),
175
- mergedProps.showAccentCTA && (react_1.default.createElement(Button_1.default, { bg: "accent", outlined: mergedProps.accentButtonOutlined, onClick: function () { return mergedProps.ctaAccentUrl && (window.location.href = mergedProps.ctaAccentUrl); } }, mergedProps.ctaAccentText))));
176
- };
177
66
  // Determine if we should use enhanced content
178
- var hasEnhancedContent = mergedProps.heading || mergedProps.subheading || mergedProps.content;
179
- var hasEnhancedFooter = mergedProps.showPrimaryCTA || mergedProps.showSecondaryCTA || mergedProps.showAccentCTA;
180
- var hasImageContent = mergedProps.image || mergedProps.imageUrl;
181
- return (react_1.default.createElement("div", __assign({ id: mergedProps.id || '', className: "\n card \n card_flex\n ".concat(!image && !imageUrl ? "p" : "", "\n ").concat(mergedProps.noGap ? 'no-gap' : '', " \n ").concat(mergedProps.xl ? 'xl' : '', " \n text-").concat(mergedProps.color || '', " \n ").concat(mergedProps.bg || '', " \n ").concat(mergedProps.funcss || '', " \n ").concat(mergedProps.roundEdge ? 'round-edge' : '', " \n ").concat(mergedProps.shadowless ? 'shadowless' : '', " \n ").concat(mergedProps.flat ? 'flat' : '', " \n ").concat(mergedProps.horizontal ? 'horizontalCard' : '', "\n ").concat(mergedProps.responsiveMedium ? 'responsiveMedium' : '', "\n ").concat(mergedProps.responsiveSmall ? 'responsiveSmall' : '', "\n ").concat(mergedProps.pattern !== 'none' ? "pattern-".concat(mergedProps.pattern) : '', "\n ").concat(mergedProps.hoverEffect !== 'none' ? "hover-".concat(mergedProps.hoverEffect) : '', "\n ").concat(themeVariant === "standard" ? "border" : "", "\n "), style: __assign({ width: "".concat(mergedProps.width || ''), height: "".concat(mergedProps.height || ''), minHeight: "".concat(mergedProps.minHeight || ''), minWidth: "".concat(mergedProps.minWidth || ''), maxHeight: mergedProps.maxHeight || '', maxWidth: mergedProps.maxWidth || '', margin: "".concat(mergedProps.margin || ''), padding: "".concat(mergedProps.padding || ''), background: mergedProps.gradient, opacity: mergedProps.opacity, border: mergedProps.border, position: 'relative', overflow: 'hidden' }, mergedProps.style) }, rest),
182
- mergedProps.pattern !== 'none' && (react_1.default.createElement("div", { className: "card-pattern-overlay", style: {
67
+ var hasEnhancedContent = final.heading || final.subheading || final.content;
68
+ var hasEnhancedFooter = final.showPrimaryCTA || final.showSecondaryCTA || final.showAccentCTA;
69
+ var hasImageContent = final.image || final.imageUrl;
70
+ return (react_1.default.createElement("div", { id: final.id || '', className: "\n card \n card_flex\n ".concat(!final.image && !final.imageUrl ? "p" : "", "\n ").concat(final.noGap ? 'no-gap' : '', " \n ").concat(final.xl ? 'xl' : '', " \n text-").concat(final.color || '', " \n ").concat(final.bg || '', " \n ").concat(final.funcss || '', " \n ").concat(final.roundEdge ? 'round-edge' : '', " \n ").concat(final.shadowless ? 'shadowless' : '', " \n ").concat(final.flat ? 'flat' : '', " \n ").concat(final.horizontal ? 'horizontalCard' : '', "\n ").concat(final.responsiveMedium ? 'responsiveMedium' : '', "\n ").concat(final.responsiveSmall ? 'responsiveSmall' : '', "\n ").concat(final.pattern !== 'none' ? "pattern-".concat(final.pattern) : '', "\n "), style: __assign({ width: "".concat(final.width || ''), height: "".concat(final.height || ''), minHeight: "".concat(final.minHeight || ''), minWidth: "".concat(final.minWidth || ''), maxHeight: final.maxHeight || '', maxWidth: final.maxWidth || '', margin: "".concat(final.margin || ''), padding: "".concat(final.padding || ''), background: final.gradient, opacity: final.opacity, position: 'relative', overflow: 'hidden' }, final.style) },
71
+ final.pattern !== 'none' && (react_1.default.createElement("div", { className: "card-pattern-overlay", style: {
183
72
  position: 'absolute',
184
73
  top: 0,
185
74
  left: 0,
186
75
  right: 0,
187
76
  bottom: 0,
188
77
  pointerEvents: 'none',
189
- opacity: mergedProps.patternOpacity,
78
+ opacity: final.patternOpacity,
190
79
  mixBlendMode: 'multiply',
191
- backgroundImage: mergedProps.pattern === 'grid' ?
80
+ backgroundImage: final.pattern === 'grid' ?
192
81
  "linear-gradient(to right, rgba(var(--borderRgb), 1) 1px, transparent 1px),\n linear-gradient(to bottom, rgba(var(--borderRgb), 1) 1px, transparent 1px)" :
193
- mergedProps.pattern === 'dots' ?
82
+ final.pattern === 'dots' ?
194
83
  "radial-gradient(rgba(var(--borderRgb), 1) 1px, transparent 1px)" :
195
- mergedProps.pattern === 'diagonal' ?
84
+ final.pattern === 'diagonal' ?
196
85
  "repeating-linear-gradient(45deg, rgba(var(--borderRgb), 1), rgba(var(--borderRgb), 1) 1px, transparent 1px, transparent 10px)" :
197
- mergedProps.pattern === 'checkerboard' ?
86
+ final.pattern === 'checkerboard' ?
198
87
  "linear-gradient(45deg, rgba(var(--borderRgb), 1) 25%, transparent 25%), \n linear-gradient(-45deg, rgba(var(--borderRgb), 1) 25%, transparent 25%), \n linear-gradient(45deg, transparent 75%, rgba(var(--borderRgb), 1) 75%), \n linear-gradient(-45deg, transparent 75%, rgba(var(--borderRgb), 1) 75%)" :
199
- mergedProps.pattern === 'horizontal' ?
88
+ final.pattern === 'horizontal' ?
200
89
  "linear-gradient(to bottom, rgba(var(--borderRgb), 1) 1px, transparent 1px)" :
201
- mergedProps.pattern === 'vertical' ?
90
+ final.pattern === 'vertical' ?
202
91
  "linear-gradient(to right, rgba(var(--borderRgb), 1) 1px, transparent 1px)" : 'none',
203
- backgroundSize: mergedProps.pattern === 'grid' ? '20px 20px' :
204
- mergedProps.pattern === 'dots' ? '10px 10px' :
205
- mergedProps.pattern === 'diagonal' ? '20px 20px' :
206
- mergedProps.pattern === 'checkerboard' ? '20px 20px' :
207
- mergedProps.pattern === 'horizontal' ? '100% 10px' :
208
- mergedProps.pattern === 'vertical' ? '10px 100%' : 'auto'
92
+ backgroundSize: final.pattern === 'grid' ? '20px 20px' :
93
+ final.pattern === 'dots' ? '10px 10px' :
94
+ final.pattern === 'diagonal' ? '20px 20px' :
95
+ final.pattern === 'checkerboard' ? '20px 20px' :
96
+ final.pattern === 'horizontal' ? '100% 10px' :
97
+ final.pattern === 'vertical' ? '10px 100%' : 'auto'
209
98
  } })),
210
- hasImageContent ? (ImageContent) : (mergedProps.image ? react_1.default.createElement("div", { className: "".concat(mergedProps.fab ? 'relative' : '') },
211
- mergedProps.image,
99
+ hasImageContent ? (ImageContent) : (final.image ? react_1.default.createElement("div", { className: "".concat(final.fab ? 'relative' : '') },
100
+ final.image,
212
101
  " ",
213
- mergedProps.fab ? mergedProps.fab : '') : ''),
102
+ final.fab ? final.fab : '') : ''),
214
103
  react_1.default.createElement(View_1.default, { funcss: hasImageContent ? 'p' : '' },
215
- hasEnhancedContent ? (react_1.default.createElement(CardHeader_1.default, { style: mergedProps.headerStyle, className: mergedProps.headerClass }, EnhancedTextContent)) : (mergedProps.header && !mergedProps.horizontal ? (react_1.default.createElement(CardHeader_1.default, { style: mergedProps.headerStyle, className: mergedProps.headerClass }, renderContent(mergedProps.header))) : ''),
216
- mergedProps.body ?
104
+ hasEnhancedContent ? (react_1.default.createElement(CardHeader_1.default, { style: final.headerStyle, className: final.headerClass }, EnhancedTextContent)) : (final.header && !final.horizontal ? (react_1.default.createElement(CardHeader_1.default, { style: final.headerStyle, className: final.headerClass }, renderContent(final.header))) : ''),
105
+ final.body ?
217
106
  react_1.default.createElement("div", null,
218
- mergedProps.horizontal && !hasEnhancedContent ? (react_1.default.createElement(CardHeader_1.default, { style: mergedProps.headerStyle, className: mergedProps.headerClass }, renderContent(mergedProps.header))) : '',
219
- react_1.default.createElement(CardBody_1.default, { style: mergedProps.bodyStyle, className: mergedProps.bodyClass }, hasEnhancedContent ? EnhancedTextContent : renderContent(mergedProps.body)),
220
- mergedProps.horizontal && !hasEnhancedFooter ? (react_1.default.createElement(CardFooter_1.default, { style: mergedProps.footerStyle, className: mergedProps.footerClass }, renderContent(mergedProps.footer))) : '')
107
+ final.horizontal && !hasEnhancedContent ? (react_1.default.createElement(CardHeader_1.default, { style: final.headerStyle, className: final.headerClass }, renderContent(final.header))) : '',
108
+ react_1.default.createElement(CardBody_1.default, { style: final.bodyStyle, className: final.bodyClass }, hasEnhancedContent ? EnhancedTextContent : renderContent(final.body)),
109
+ final.horizontal && !hasEnhancedFooter ? (react_1.default.createElement(CardFooter_1.default, { style: final.footerStyle, className: final.footerClass }, renderContent(final.footer))) : '')
221
110
  : '',
222
- mergedProps.children && (react_1.default.createElement(CardBody_1.default, { style: mergedProps.bodyStyle, className: mergedProps.bodyClass }, renderContent(mergedProps.children))),
223
- hasEnhancedFooter ? (react_1.default.createElement(CardFooter_1.default, { style: mergedProps.footerStyle, className: mergedProps.footerClass },
224
- react_1.default.createElement(CTAButtons, null))) : (mergedProps.footer && !mergedProps.horizontal ? (react_1.default.createElement(CardFooter_1.default, { style: mergedProps.footerStyle, className: mergedProps.footerClass }, renderContent(mergedProps.footer))) : ''))));
111
+ final.children && (react_1.default.createElement(CardBody_1.default, { style: final.bodyStyle, className: final.bodyClass }, renderContent(final.children))),
112
+ hasEnhancedFooter ? (react_1.default.createElement(CardFooter_1.default, { style: final.footerStyle, className: final.footerClass },
113
+ react_1.default.createElement(CTAButtons, null))) : (final.footer && !final.horizontal ? (react_1.default.createElement(CardFooter_1.default, { style: final.footerStyle, className: final.footerClass }, renderContent(final.footer))) : ''))));
225
114
  }
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  interface SelectOption {
3
3
  value: string;
4
- text: string;
4
+ text?: string;
5
+ label?: string;
5
6
  prefix?: React.ReactNode;
6
7
  suffix?: React.ReactNode;
7
8
  }
@@ -57,7 +57,7 @@ var Select = function (_a) {
57
57
  (0, react_1.useEffect)(function () {
58
58
  if (searchQuery) {
59
59
  var filtered = options.filter(function (option) {
60
- return option.text.toLowerCase().includes(searchQuery.toLowerCase());
60
+ return (option.text || option.label || "").toLowerCase().includes(searchQuery.toLowerCase());
61
61
  });
62
62
  setFilteredOptions(filtered);
63
63
  setFocusedIndex(filtered.length > 0 ? 0 : -1);
@@ -208,7 +208,7 @@ var Select = function (_a) {
208
208
  pointerEvents: 'none'
209
209
  }, tabIndex: -1 },
210
210
  !label && react_1.default.createElement("option", { value: "" }, "Select an option"),
211
- options.map(function (option) { return (react_1.default.createElement("option", { key: option.value, value: option.value }, option.text)); })),
211
+ options.map(function (option) { return (react_1.default.createElement("option", { key: option.value, value: option.value }, option.text || option.label || option.value)); })),
212
212
  react_1.default.createElement("div", { ref: triggerRef, className: "".concat(funcss, " ").concat(rounded && 'round-edge', " ").concat(getTriggerClasses()), onClick: openDropdown, onKeyDown: handleKeyDown, tabIndex: disabled ? -1 : 0, role: "button", "aria-expanded": isOpen, "aria-haspopup": "listbox" },
213
213
  react_1.default.createElement("span", { className: "select-value ".concat(!selectedOption ? 'select-placeholder' : '') }, selectedOption ? selectedOption.text : label),
214
214
  react_1.default.createElement("div", { className: "select-arrow ".concat(isOpen ? 'open' : '') },
package/ui/theme/theme.js CHANGED
@@ -146,7 +146,6 @@ var validateOriginAccess = function (projectId) { return __awaiter(void 0, void
146
146
  console.log('📋 Trusted domains:', trustedDomains.map(function (d) { return d.domain; }));
147
147
  return [2 /*return*/, false];
148
148
  }
149
- console.log('✅ Origin validation passed');
150
149
  return [2 /*return*/, true];
151
150
  case 3:
152
151
  error_1 = _a.sent();
@@ -174,7 +173,6 @@ var loadLocalTheme = function () { return __awaiter(void 0, void 0, void 0, func
174
173
  return [4 /*yield*/, response.json()];
175
174
  case 2:
176
175
  data = _a.sent();
177
- console.log('✅ Loaded theme from local file');
178
176
  return [2 /*return*/, data];
179
177
  case 3: return [3 /*break*/, 5];
180
178
  case 4:
@@ -210,7 +208,6 @@ var loadThemeFromCDN = function (projectId) { return __awaiter(void 0, void 0, v
210
208
  return [4 /*yield*/, response.json()];
211
209
  case 3:
212
210
  data = _a.sent();
213
- console.log('✅ Loaded theme from Firebase Storage CDN');
214
211
  return [2 /*return*/, data];
215
212
  case 4:
216
213
  console.error('❌ Firebase Storage fetch failed:', response.status, response.statusText);
@@ -327,7 +324,6 @@ var ThemeProvider = function (_a) {
327
324
  switch (_a.label) {
328
325
  case 0:
329
326
  _a.trys.push([0, 8, 9, 10]);
330
- console.log('🔄 Starting theme loading process...');
331
327
  finalTheme = null;
332
328
  finalVersion = null;
333
329
  return [4 /*yield*/, loadLocalTheme()];
@@ -335,7 +331,6 @@ var ThemeProvider = function (_a) {
335
331
  localTheme = _a.sent();
336
332
  localVersion = (localTheme === null || localTheme === void 0 ? void 0 : localTheme.version) || 0;
337
333
  if (!projectId) return [3 /*break*/, 6];
338
- console.log('🔑 Project ID provided, attempting CDN load with origin validation...');
339
334
  return [4 /*yield*/, validateOriginAccess(projectId)];
340
335
  case 2:
341
336
  hasAccess = _a.sent();
@@ -352,7 +347,6 @@ var ThemeProvider = function (_a) {
352
347
  console.log("\uD83D\uDD04 Version mismatch: Local(".concat(localVersion, ") vs CDN(").concat(cdnVersion, ")"));
353
348
  console.log('â„šī¸ Using CDN version. Please update your local funui.json file manually.');
354
349
  }
355
- console.log('✅ Theme loaded from CDN');
356
350
  }
357
351
  else if (localTheme) {
358
352
  // CDN not available but we have local theme
@@ -43,7 +43,9 @@ interface VideoProps {
43
43
  rewindCss?: string;
44
44
  forwardCss?: string;
45
45
  buttonCss?: string;
46
+ style?: React.CSSProperties;
47
+ volumeStyle?: 'slider' | 'compact' | 'hover';
46
48
  variant?: string;
47
49
  }
48
- export default function Video({ src, poster, onDuration, onEnded, isPause, spacebarPlay, className, autoPlay, showControls, showPlayPause, showProgress, showVolume, showTime, showFullscreen, showDownload, showSeekButtons, playIcon, pauseIcon, fullscreenIcon, downloadIcon, volumeIcon, muteIcon, rewindIcon, forwardIcon, hideControlsDelay, loop, muted, seekAmount, funcss, containerCss, videoCss, controlsCss, progressCss, progressBarCss, timeCss, playCss, pauseCss, volumeCss, fullscreenCss, downloadCss, rewindCss, forwardCss, buttonCss, variant, ...rest }: VideoProps): React.JSX.Element;
50
+ export default function Video({ src, poster, onDuration, onEnded, isPause, spacebarPlay, className, autoPlay, showControls, showPlayPause, showProgress, showVolume, showTime, showFullscreen, showDownload, showSeekButtons, playIcon, pauseIcon, fullscreenIcon, downloadIcon, volumeIcon, muteIcon, rewindIcon, forwardIcon, hideControlsDelay, loop, muted, seekAmount, funcss, containerCss, videoCss, controlsCss, progressCss, progressBarCss, timeCss, playCss, pauseCss, volumeCss, fullscreenCss, downloadCss, rewindCss, forwardCss, buttonCss, volumeStyle, style, variant, ...rest }: VideoProps): React.JSX.Element;
49
51
  export {};