@giddaa-housing/ui 3.0.1 → 3.2.0

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.
Files changed (100) hide show
  1. package/css/generated/shared.css +1 -1
  2. package/css/giddaa.css +173 -2
  3. package/css/preset.css +8 -1
  4. package/css/theme.css +4 -1
  5. package/dist/accordion.js +2 -2
  6. package/dist/activity-timeline.js +5 -5
  7. package/dist/alert.js +1 -1
  8. package/dist/auth-layout.js +18 -18
  9. package/dist/bar-chart.d.ts +1 -1
  10. package/dist/breadcrumb.js +3 -3
  11. package/dist/bullet-chart.d.ts +1 -1
  12. package/dist/button-group.d.ts +1 -1
  13. package/dist/button.js +2 -2
  14. package/dist/calendar.js +3 -3
  15. package/dist/call-card.js +1 -1
  16. package/dist/carousel.d.ts +1 -1
  17. package/dist/carousel.js +3 -3
  18. package/dist/chart.d.ts +1 -1
  19. package/dist/chart.js +1 -1
  20. package/dist/chat.js +1 -1
  21. package/dist/checkbox.js +2 -2
  22. package/dist/combobox.d.ts +1 -1
  23. package/dist/combobox.js +6 -6
  24. package/dist/cta.js +3 -3
  25. package/dist/currency-selector.d.ts +10 -8
  26. package/dist/currency-selector.js +247 -28
  27. package/dist/data-table.js +2 -2
  28. package/dist/date-picker.js +6 -6
  29. package/dist/dialog.js +2 -2
  30. package/dist/dropdown-menu.d.ts +1 -1
  31. package/dist/dropdown-menu.js +20 -20
  32. package/dist/dropzone.js +1 -1
  33. package/dist/editorial-card.d.ts +20 -11
  34. package/dist/editorial-card.js +67 -2
  35. package/dist/file-upload.js +1 -1
  36. package/dist/filter.js +1 -1
  37. package/dist/footer.d.ts +4 -2
  38. package/dist/footer.js +38 -34
  39. package/dist/funnel-chart.d.ts +1 -1
  40. package/dist/heatmap-chart.d.ts +1 -1
  41. package/dist/icons.d.ts +93 -0
  42. package/dist/icons.js +905 -0
  43. package/dist/infinite-scroll.js +1 -1
  44. package/dist/input-group.js +4 -5
  45. package/dist/input-otp.js +2 -2
  46. package/dist/input-size-context.js +4 -2
  47. package/dist/input.js +1 -1
  48. package/dist/kpi-card.js +1 -1
  49. package/dist/line-chart.d.ts +1 -1
  50. package/dist/mask-input.d.ts +61 -0
  51. package/dist/mask-input.js +0 -0
  52. package/dist/match.js +1 -1
  53. package/dist/media-gallery-hero.js +1 -1
  54. package/dist/media-player.js +59 -48
  55. package/dist/message.js +1 -1
  56. package/dist/mobile-sidebar.d.ts +57 -0
  57. package/dist/mobile-sidebar.js +196 -0
  58. package/dist/multi-step-form.js +2 -2
  59. package/dist/number-input.d.ts +1 -1
  60. package/dist/number-input.js +3 -3
  61. package/dist/pagination.js +4 -4
  62. package/dist/password-input.js +1 -1
  63. package/dist/phone-input.d.ts +1 -1
  64. package/dist/phone-input.js +4 -4
  65. package/dist/photo-gallery.js +3 -3
  66. package/dist/pie-chart.d.ts +1 -1
  67. package/dist/popover.d.ts +1 -1
  68. package/dist/price-tag.js +1 -1
  69. package/dist/radar-chart.d.ts +1 -1
  70. package/dist/rich-text-editor.d.ts +1 -1
  71. package/dist/rich-text-editor.js +4 -4
  72. package/dist/scatter-chart.d.ts +1 -1
  73. package/dist/search-input.js +1 -1
  74. package/dist/select.d.ts +1 -1
  75. package/dist/select.js +6 -6
  76. package/dist/sheet.js +2 -2
  77. package/dist/sidebar.js +1 -1
  78. package/dist/{size-context-D4mYvcg8.d.ts → size-context-BX6kAdVj.d.ts} +2 -1
  79. package/dist/size-context.d.ts +2 -2
  80. package/dist/size-context.js +5 -2
  81. package/dist/sparkline.d.ts +1 -1
  82. package/dist/stepper.js +2 -2
  83. package/dist/styles.css +681 -128
  84. package/dist/table.js +2 -2
  85. package/dist/tabs.d.ts +1 -1
  86. package/dist/tag.d.ts +1 -1
  87. package/dist/tag.js +1 -1
  88. package/dist/testimonial-block.js +1 -1
  89. package/dist/theme-switcher.d.ts +31 -0
  90. package/dist/theme-switcher.js +78 -0
  91. package/dist/time-picker.js +2 -2
  92. package/dist/toast.d.ts +38 -10
  93. package/dist/toast.js +55 -52
  94. package/dist/top-navbar.d.ts +100 -0
  95. package/dist/top-navbar.js +295 -0
  96. package/dist/tree-map.d.ts +1 -1
  97. package/dist/video-player-dialog.d.ts +57 -0
  98. package/dist/video-player-dialog.js +188 -0
  99. package/dist/waterfall-chart.d.ts +1 -1
  100. package/package.json +25 -2
@@ -0,0 +1,295 @@
1
+ "use client";
2
+ import { ArrowUpRight, ChevronDown } from "./icons.js";
3
+ import { t as cn } from "./cn-BI_4DMBf.js";
4
+ import { MobileSidebar } from "./mobile-sidebar.js";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { mergeProps } from "@base-ui/react/merge-props";
7
+ import { useRender } from "@base-ui/react/use-render";
8
+ import { NavigationMenu } from "@base-ui/react/navigation-menu";
9
+ //#region src/top-navbar.tsx
10
+ function TopNavbarRoot({ className, children, ...props }) {
11
+ return /* @__PURE__ */ jsx("header", {
12
+ "data-slot": "top-navbar",
13
+ className: cn("relative z-40 w-full border-b border-line-subtle bg-canvas text-fg-primary @container/top-navbar", className),
14
+ ...props,
15
+ children
16
+ });
17
+ }
18
+ function TopNavbarContainer({ className, ...props }) {
19
+ return /* @__PURE__ */ jsx("div", {
20
+ "data-slot": "top-navbar-container",
21
+ className: cn("flex h-16 w-full items-center justify-between px-5 @5xl/top-navbar:h-[81px] @5xl/top-navbar:px-10 @7xl/top-navbar:px-20", className),
22
+ ...props
23
+ });
24
+ }
25
+ function TopNavbarLeading({ className, ...props }) {
26
+ return /* @__PURE__ */ jsx("div", {
27
+ "data-slot": "top-navbar-leading",
28
+ className: cn("flex min-w-0 items-center gap-6 @7xl/top-navbar:gap-10", className),
29
+ ...props
30
+ });
31
+ }
32
+ function TopNavbarBrand({ className, render, ...props }) {
33
+ return useRender({
34
+ defaultTagName: "a",
35
+ props: mergeProps({ className: cn("shrink-0 text-fg-brand outline-none focus-visible:rounded-md focus-visible:shadow-[0_0_0_2px_var(--color-line-focus)] [&>svg]:h-[38px] [&>svg]:w-[90px]", className) }, props),
36
+ render,
37
+ state: { slot: "top-navbar-brand" }
38
+ });
39
+ }
40
+ function TopNavbarNavigation({ className, ...props }) {
41
+ return /* @__PURE__ */ jsx(NavigationMenu.Root, {
42
+ "data-slot": "top-navbar-navigation",
43
+ className: cn("hidden min-w-0 @5xl/top-navbar:block", className),
44
+ ...props
45
+ });
46
+ }
47
+ function TopNavbarList({ className, ...props }) {
48
+ return /* @__PURE__ */ jsx(NavigationMenu.List, {
49
+ "data-slot": "top-navbar-list",
50
+ className: cn("flex min-w-0 items-center gap-2 @7xl/top-navbar:gap-4", className),
51
+ ...props
52
+ });
53
+ }
54
+ function TopNavbarItem(props) {
55
+ return /* @__PURE__ */ jsx(NavigationMenu.Item, {
56
+ "data-slot": "top-navbar-item",
57
+ ...props
58
+ });
59
+ }
60
+ function navigationItemClass(active) {
61
+ return cn("inline-flex h-8 items-center justify-center gap-1.5 rounded-full px-2.5 text-gdt-sm text-fg-secondary transition-[background-color,color,border-color,box-shadow] duration-(--duration-motion-press) ease-gdt-out outline-none hover:text-fg-primary focus-visible:shadow-[0_0_0_2px_var(--color-line-focus)]", active && "border border-line bg-surface-raised px-4 font-bold text-fg-brand hover:text-fg-brand");
62
+ }
63
+ function TopNavbarTrigger({ active = false, className, children, ...props }) {
64
+ return /* @__PURE__ */ jsxs(NavigationMenu.Trigger, {
65
+ "data-slot": "top-navbar-trigger",
66
+ "data-active": active || void 0,
67
+ className: cn(navigationItemClass(active), className),
68
+ ...props,
69
+ children: [children, /* @__PURE__ */ jsx(NavigationMenu.Icon, {
70
+ className: "transition-transform duration-(--duration-motion-press) ease-gdt-out data-popup-open:rotate-180 motion-reduce:transition-none",
71
+ children: /* @__PURE__ */ jsx(ChevronDown, {
72
+ "aria-hidden": "true",
73
+ className: "size-3.5"
74
+ })
75
+ })]
76
+ });
77
+ }
78
+ function TopNavbarLink({ active = false, className, ...props }) {
79
+ return /* @__PURE__ */ jsx(NavigationMenu.Link, {
80
+ "data-slot": "top-navbar-link",
81
+ active,
82
+ className: cn(navigationItemClass(active), className),
83
+ ...props
84
+ });
85
+ }
86
+ function TopNavbarContent({ className, ...props }) {
87
+ return /* @__PURE__ */ jsx(NavigationMenu.Content, {
88
+ "data-slot": "top-navbar-content",
89
+ className: cn("w-[min(42rem,calc(100vw-2.5rem))] p-2", className),
90
+ ...props
91
+ });
92
+ }
93
+ function TopNavbarMenuGrid({ className, ...props }) {
94
+ return /* @__PURE__ */ jsx("ul", {
95
+ "data-slot": "top-navbar-menu-grid",
96
+ className: cn("grid grid-cols-2 gap-1.5", className),
97
+ ...props
98
+ });
99
+ }
100
+ function TopNavbarMenuLink({ featured = false, showArrow = true, className, children, ...props }) {
101
+ return /* @__PURE__ */ jsxs(NavigationMenu.Link, {
102
+ "data-slot": "top-navbar-menu-link",
103
+ "data-featured": featured || void 0,
104
+ className: cn("group/top-navbar-card grid min-h-22 grid-cols-[auto_1fr_auto] items-start gap-3 rounded-xl p-3 text-left outline-none transition-[background-color,color,box-shadow,translate] duration-(--duration-motion-press) ease-gdt-out hover:bg-surface focus-visible:bg-surface focus-visible:shadow-[0_0_0_2px_var(--color-line-focus)] active:translate-y-px motion-reduce:active:translate-y-0", featured && "bg-surface-brand-subtle", className),
105
+ ...props,
106
+ children: [children, showArrow ? /* @__PURE__ */ jsx(ArrowUpRight, {
107
+ "aria-hidden": "true",
108
+ className: "mt-1 size-4 text-fg-caption-placeholder transition-[color,translate] duration-(--duration-motion-press) ease-gdt-out group-hover/top-navbar-card:translate-x-0.5 group-hover/top-navbar-card:-translate-y-0.5 group-hover/top-navbar-card:text-fg-brand motion-reduce:transition-colors"
109
+ }) : null]
110
+ });
111
+ }
112
+ function TopNavbarMenuIcon({ featured = false, className, ...props }) {
113
+ return /* @__PURE__ */ jsx("span", {
114
+ "data-slot": "top-navbar-menu-icon",
115
+ className: cn("flex size-10 items-center justify-center rounded-xl bg-surface-brand-subtle text-fg-brand [&>svg]:size-4.5", featured && "bg-surface-brand text-fg-on-brand", className),
116
+ ...props
117
+ });
118
+ }
119
+ function TopNavbarMenuText({ className, ...props }) {
120
+ return /* @__PURE__ */ jsx("span", {
121
+ "data-slot": "top-navbar-menu-text",
122
+ className: cn("min-w-0", className),
123
+ ...props
124
+ });
125
+ }
126
+ function TopNavbarMenuTitle({ className, ...props }) {
127
+ return /* @__PURE__ */ jsx("span", {
128
+ "data-slot": "top-navbar-menu-title",
129
+ className: cn("block text-gdt-sm font-bold text-fg-primary", className),
130
+ ...props
131
+ });
132
+ }
133
+ function TopNavbarMenuDescription({ className, ...props }) {
134
+ return /* @__PURE__ */ jsx("span", {
135
+ "data-slot": "top-navbar-menu-description",
136
+ className: cn("mt-0.5 block text-gdt-xs text-fg-secondary", className),
137
+ ...props
138
+ });
139
+ }
140
+ function TopNavbarViewport({ className, children, portalProps, positionerProps, viewportProps, ...props }) {
141
+ const { className: positionerClassName, sideOffset = 10, collisionPadding = {
142
+ top: 8,
143
+ right: 20,
144
+ bottom: 8,
145
+ left: 20
146
+ }, collisionAvoidance = { side: "none" }, ...resolvedPositionerProps } = positionerProps ?? {};
147
+ const { className: viewportClassName, ...resolvedViewportProps } = viewportProps ?? {};
148
+ return /* @__PURE__ */ jsx(NavigationMenu.Portal, {
149
+ ...portalProps,
150
+ children: /* @__PURE__ */ jsx(NavigationMenu.Positioner, {
151
+ sideOffset,
152
+ collisionPadding,
153
+ collisionAvoidance,
154
+ className: cn("isolate z-50 outline-none", positionerClassName),
155
+ ...resolvedPositionerProps,
156
+ children: /* @__PURE__ */ jsxs(NavigationMenu.Popup, {
157
+ "data-slot": "top-navbar-popup",
158
+ className: cn("w-[min(42rem,calc(100vw-2.5rem))] origin-(--transform-origin) overflow-hidden rounded-2xl border border-line-subtle bg-surface-overlay text-fg-primary shadow-(--elevation-e3-shadow) transition-[opacity,scale,translate] duration-[var(--duration-motion-popup)] ease-gdt-out data-instant:transition-none data-starting-style:translate-y-1.5 data-starting-style:scale-[0.98] data-starting-style:opacity-0 data-ending-style:translate-y-1.5 data-ending-style:scale-[0.98] data-ending-style:opacity-0 motion-reduce:data-starting-style:translate-y-0 motion-reduce:data-starting-style:scale-100 motion-reduce:data-ending-style:translate-y-0 motion-reduce:data-ending-style:scale-100", className),
159
+ ...props,
160
+ children: [children, /* @__PURE__ */ jsx(NavigationMenu.Viewport, {
161
+ "data-slot": "top-navbar-viewport",
162
+ className: cn("relative overflow-hidden", viewportClassName),
163
+ ...resolvedViewportProps
164
+ })]
165
+ })
166
+ })
167
+ });
168
+ }
169
+ function TopNavbarActions({ className, ...props }) {
170
+ return /* @__PURE__ */ jsx("div", {
171
+ "data-slot": "top-navbar-actions",
172
+ className: cn("hidden shrink-0 items-center gap-3 @5xl/top-navbar:flex", className),
173
+ ...props
174
+ });
175
+ }
176
+ function TopNavbarActionGroup({ className, surface = false, ...props }) {
177
+ return /* @__PURE__ */ jsx("div", {
178
+ "data-slot": "top-navbar-action-group",
179
+ "data-surface": surface || void 0,
180
+ className: cn("flex items-center gap-3", surface && "rounded-2xl bg-surface-raised px-4 py-1.5", className),
181
+ ...props
182
+ });
183
+ }
184
+ function TopNavbarActionLink({ className, render, ...props }) {
185
+ return useRender({
186
+ defaultTagName: "a",
187
+ props: mergeProps({ className: cn("inline-flex min-h-8 items-center rounded-full px-2 text-gdt-xs font-bold text-fg-brand outline-none transition-[color,background-color,translate] duration-(--duration-motion-press) ease-gdt-out hover:bg-surface-brand-subtle focus-visible:shadow-[0_0_0_2px_var(--color-line-focus)] active:translate-y-px motion-reduce:active:translate-y-0", className) }, props),
188
+ render,
189
+ state: { slot: "top-navbar-action-link" }
190
+ });
191
+ }
192
+ function TopNavbarComponent({ brand, brandHref = "/", brandLabel = "Home", brandRender, items, actions, mobileActions, mobileMenuLabel = "Main navigation", ...props }) {
193
+ const hasMenu = items.some((item) => item.menu?.length);
194
+ return /* @__PURE__ */ jsx(TopNavbarRoot, {
195
+ ...props,
196
+ children: /* @__PURE__ */ jsxs(TopNavbarContainer, { children: [
197
+ /* @__PURE__ */ jsxs(TopNavbarLeading, { children: [/* @__PURE__ */ jsx(TopNavbarBrand, {
198
+ render: brandRender,
199
+ href: brandHref,
200
+ "aria-label": brandLabel,
201
+ children: brand
202
+ }), /* @__PURE__ */ jsxs(TopNavbarNavigation, {
203
+ "aria-label": mobileMenuLabel,
204
+ children: [/* @__PURE__ */ jsx(TopNavbarList, { children: items.map((item) => /* @__PURE__ */ jsx(TopNavbarItem, {
205
+ value: item.label,
206
+ children: item.menu?.length ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(TopNavbarTrigger, {
207
+ active: item.active,
208
+ children: item.label
209
+ }), /* @__PURE__ */ jsx(TopNavbarContent, { children: /* @__PURE__ */ jsx(TopNavbarMenuGrid, { children: item.menu.map((link) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(TopNavbarMenuLink, {
210
+ render: link.render,
211
+ href: link.href,
212
+ featured: link.featured,
213
+ children: [link.icon ? /* @__PURE__ */ jsx(TopNavbarMenuIcon, {
214
+ featured: link.featured,
215
+ children: link.icon
216
+ }) : null, /* @__PURE__ */ jsxs(TopNavbarMenuText, { children: [/* @__PURE__ */ jsx(TopNavbarMenuTitle, { children: link.title }), link.description ? /* @__PURE__ */ jsx(TopNavbarMenuDescription, { children: link.description }) : null] })]
217
+ }) }, `${link.title}-${link.href}`)) }) })] }) : /* @__PURE__ */ jsx(TopNavbarLink, {
218
+ render: item.render,
219
+ href: item.href,
220
+ active: item.active,
221
+ children: item.label
222
+ })
223
+ }, `${item.label}-${item.href}`)) }), hasMenu ? /* @__PURE__ */ jsx(TopNavbarViewport, {}) : null]
224
+ })] }),
225
+ actions ? /* @__PURE__ */ jsx(TopNavbarActions, { children: actions }) : null,
226
+ /* @__PURE__ */ jsxs(MobileSidebar.Root, { children: [/* @__PURE__ */ jsx(MobileSidebar.Trigger, {
227
+ "aria-label": mobileMenuLabel,
228
+ className: "size-8 @5xl/top-navbar:hidden"
229
+ }), /* @__PURE__ */ jsxs(MobileSidebar.Content, { children: [
230
+ /* @__PURE__ */ jsxs(MobileSidebar.Header, { children: [
231
+ /* @__PURE__ */ jsx(TopNavbarBrand, {
232
+ render: brandRender,
233
+ href: brandHref,
234
+ "aria-label": brandLabel,
235
+ children: brand
236
+ }),
237
+ /* @__PURE__ */ jsx(MobileSidebar.Title, { children: mobileMenuLabel }),
238
+ /* @__PURE__ */ jsx(MobileSidebar.Close, { "aria-label": "Close navigation" })
239
+ ] }),
240
+ /* @__PURE__ */ jsx(MobileSidebar.Body, { children: /* @__PURE__ */ jsx(MobileSidebar.Nav, {
241
+ "aria-label": mobileMenuLabel,
242
+ children: /* @__PURE__ */ jsx(MobileSidebar.List, { children: items.map((item) => /* @__PURE__ */ jsx(MobileSidebar.Item, { children: item.menu?.length ? /* @__PURE__ */ jsxs(MobileSidebar.Group, {
243
+ defaultOpen: item.active,
244
+ children: [/* @__PURE__ */ jsx(MobileSidebar.GroupTrigger, {
245
+ active: item.active,
246
+ icon: item.icon,
247
+ children: item.label
248
+ }), /* @__PURE__ */ jsx(MobileSidebar.GroupPanel, { children: /* @__PURE__ */ jsx(MobileSidebar.SubList, { children: item.menu.map((link) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(MobileSidebar.SubLink, {
249
+ render: link.render,
250
+ href: link.href,
251
+ children: [/* @__PURE__ */ jsx("span", {
252
+ className: "block",
253
+ children: link.title
254
+ }), link.description ? /* @__PURE__ */ jsx("span", {
255
+ className: "mt-0.5 block text-gdt-xs text-fg-caption-placeholder",
256
+ children: link.description
257
+ }) : null]
258
+ }) }, `${link.title}-${link.href}`)) }) })]
259
+ }) : /* @__PURE__ */ jsx(MobileSidebar.Link, {
260
+ render: item.render,
261
+ href: item.href,
262
+ active: item.active,
263
+ icon: item.icon,
264
+ children: item.label
265
+ }) }, `${item.label}-${item.href}`)) })
266
+ }) }),
267
+ mobileActions ? /* @__PURE__ */ jsx(MobileSidebar.Footer, { children: mobileActions }) : null
268
+ ] })] })
269
+ ] })
270
+ });
271
+ }
272
+ const TopNavbar = Object.assign(TopNavbarComponent, {
273
+ Root: TopNavbarRoot,
274
+ Container: TopNavbarContainer,
275
+ Leading: TopNavbarLeading,
276
+ Brand: TopNavbarBrand,
277
+ Navigation: TopNavbarNavigation,
278
+ List: TopNavbarList,
279
+ Item: TopNavbarItem,
280
+ Trigger: TopNavbarTrigger,
281
+ Link: TopNavbarLink,
282
+ Content: TopNavbarContent,
283
+ MenuGrid: TopNavbarMenuGrid,
284
+ MenuLink: TopNavbarMenuLink,
285
+ MenuIcon: TopNavbarMenuIcon,
286
+ MenuText: TopNavbarMenuText,
287
+ MenuTitle: TopNavbarMenuTitle,
288
+ MenuDescription: TopNavbarMenuDescription,
289
+ Viewport: TopNavbarViewport,
290
+ Actions: TopNavbarActions,
291
+ ActionGroup: TopNavbarActionGroup,
292
+ ActionLink: TopNavbarActionLink
293
+ });
294
+ //#endregion
295
+ export { TopNavbar, TopNavbarActionGroup, TopNavbarActionLink, TopNavbarActions, TopNavbarBrand, TopNavbarContainer, TopNavbarContent, TopNavbarItem, TopNavbarLeading, TopNavbarLink, TopNavbarList, TopNavbarMenuDescription, TopNavbarMenuGrid, TopNavbarMenuIcon, TopNavbarMenuLink, TopNavbarMenuText, TopNavbarMenuTitle, TopNavbarNavigation, TopNavbarRoot, TopNavbarTrigger, TopNavbarViewport };
@@ -1,4 +1,4 @@
1
- import { t as ComponentSize } from "./size-context-D4mYvcg8.js";
1
+ import { t as ComponentSize } from "./size-context-BX6kAdVj.js";
2
2
  import { ChartCard, ChartValueType } from "./chart.js";
3
3
  import * as React from "react";
4
4
  //#region src/tree-map.d.ts
@@ -0,0 +1,57 @@
1
+ import { Dialog, DialogContent, DialogDescription, DialogTitle, DialogTrigger } from "./dialog.js";
2
+ import * as React from "react";
3
+ //#region src/video-player-dialog.d.ts
4
+ type VideoPlayerDialogTheme = "light" | "dark";
5
+ type VideoPlayerDialogSize = "sm" | "md" | "lg";
6
+ declare const videoPlayerDialogSurfaceVariants: (props?: ({
7
+ size?: "lg" | "md" | "sm" | null | undefined;
8
+ theme?: "dark" | "light" | null | undefined;
9
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
+ type VideoPlayerDialogProps = React.ComponentProps<typeof Dialog>;
11
+ /** Accessible modal root. Product state and media behavior remain consumer-owned. */
12
+ declare function VideoPlayerDialog(props: VideoPlayerDialogProps): React.JSX.Element;
13
+ type VideoPlayerDialogTriggerProps = React.ComponentProps<typeof DialogTrigger>;
14
+ declare function VideoPlayerDialogTrigger(props: VideoPlayerDialogTriggerProps): React.JSX.Element;
15
+ interface VideoPlayerDialogContentProps extends Omit<React.ComponentProps<typeof DialogContent>, "size"> {
16
+ size?: VideoPlayerDialogSize;
17
+ theme?: VideoPlayerDialogTheme;
18
+ surfaceClassName?: string;
19
+ }
20
+ /**
21
+ * Translation-free centered popup with one large, viewport-bounded scroll
22
+ * surface. The close button remains outside the scrolling surface.
23
+ */
24
+ declare function VideoPlayerDialogContent({ size, theme, showCloseButton, className, surfaceClassName, children, ...props }: VideoPlayerDialogContentProps): React.JSX.Element;
25
+ type VideoPlayerDialogMediaProps = React.ComponentProps<"div">;
26
+ /**
27
+ * Aspect-ratio media slot. Compose any `MediaPlayer*` primitives inside; this
28
+ * part only owns placement and clipping, never playback behavior or controls.
29
+ */
30
+ declare function VideoPlayerDialogMedia({ className, ...props }: VideoPlayerDialogMediaProps): React.JSX.Element;
31
+ type VideoPlayerDialogDetailsProps = React.ComponentProps<"div">;
32
+ declare function VideoPlayerDialogDetails({ className, ...props }: VideoPlayerDialogDetailsProps): React.JSX.Element;
33
+ type VideoPlayerDialogTitleProps = React.ComponentProps<typeof DialogTitle>;
34
+ declare function VideoPlayerDialogTitle({ className, ...props }: VideoPlayerDialogTitleProps): React.JSX.Element;
35
+ type VideoPlayerDialogDescriptionProps = React.ComponentProps<typeof DialogDescription>;
36
+ declare function VideoPlayerDialogDescription({ className, ...props }: VideoPlayerDialogDescriptionProps): React.JSX.Element;
37
+ interface VideoPlayerDialogPlaylistIndicatorProps extends React.ComponentProps<"span"> {
38
+ current: number;
39
+ total: number;
40
+ }
41
+ declare function VideoPlayerDialogPlaylistIndicator({ current, total, className, ...props }: VideoPlayerDialogPlaylistIndicatorProps): React.JSX.Element;
42
+ type VideoPlayerDialogPlaylistProps = React.ComponentProps<"section">;
43
+ declare function VideoPlayerDialogPlaylist({ className, ...props }: VideoPlayerDialogPlaylistProps): React.JSX.Element;
44
+ type VideoPlayerDialogPlaylistHeaderProps = React.ComponentProps<"h3">;
45
+ declare function VideoPlayerDialogPlaylistHeader({ className, ...props }: VideoPlayerDialogPlaylistHeaderProps): React.JSX.Element;
46
+ type VideoPlayerDialogPlaylistListProps = React.ComponentProps<"ul">;
47
+ declare function VideoPlayerDialogPlaylistList({ className, ...props }: VideoPlayerDialogPlaylistListProps): React.JSX.Element;
48
+ interface VideoPlayerDialogPlaylistItemProps extends Omit<React.ComponentProps<"button">, "title"> {
49
+ active?: boolean;
50
+ index?: number;
51
+ poster?: string;
52
+ title: React.ReactNode;
53
+ duration?: React.ReactNode;
54
+ }
55
+ declare function VideoPlayerDialogPlaylistItem({ active, index, poster, title, duration, className, ...props }: VideoPlayerDialogPlaylistItemProps): React.JSX.Element;
56
+ //#endregion
57
+ export { VideoPlayerDialog, VideoPlayerDialogContent, type VideoPlayerDialogContentProps, VideoPlayerDialogDescription, type VideoPlayerDialogDescriptionProps, VideoPlayerDialogDetails, type VideoPlayerDialogDetailsProps, VideoPlayerDialogMedia, type VideoPlayerDialogMediaProps, VideoPlayerDialogPlaylist, VideoPlayerDialogPlaylistHeader, type VideoPlayerDialogPlaylistHeaderProps, VideoPlayerDialogPlaylistIndicator, type VideoPlayerDialogPlaylistIndicatorProps, VideoPlayerDialogPlaylistItem, type VideoPlayerDialogPlaylistItemProps, VideoPlayerDialogPlaylistList, type VideoPlayerDialogPlaylistListProps, type VideoPlayerDialogPlaylistProps, type VideoPlayerDialogProps, type VideoPlayerDialogSize, type VideoPlayerDialogTheme, VideoPlayerDialogTitle, type VideoPlayerDialogTitleProps, VideoPlayerDialogTrigger, type VideoPlayerDialogTriggerProps, videoPlayerDialogSurfaceVariants };
@@ -0,0 +1,188 @@
1
+ "use client";
2
+ import { ListVideo } from "./icons.js";
3
+ import { t as cn } from "./cn-BI_4DMBf.js";
4
+ import { Dialog, DialogContent, DialogDescription, DialogTitle, DialogTrigger } from "./dialog.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { cva } from "class-variance-authority";
7
+ import * as React from "react";
8
+ //#region src/video-player-dialog.tsx
9
+ const WIDTHS = {
10
+ sm: "max-w-[584px]",
11
+ md: "max-w-[752px]",
12
+ lg: "max-w-[920px]"
13
+ };
14
+ const videoPlayerDialogSurfaceVariants = cva("group/video-dialog w-full border bg-surface-overlay shadow-[0_0_8px_2px_rgb(23_48_22/0.06)]", {
15
+ variants: {
16
+ size: {
17
+ sm: "rounded-[14px]",
18
+ md: "rounded-2xl",
19
+ lg: "rounded-[20px]"
20
+ },
21
+ theme: {
22
+ light: "border-line-subtle",
23
+ dark: "dark border-transparent bg-[#2c3329] text-[#ecf2ea]"
24
+ }
25
+ },
26
+ defaultVariants: {
27
+ size: "md",
28
+ theme: "light"
29
+ }
30
+ });
31
+ const VideoPlayerDialogContext = React.createContext(null);
32
+ function useVideoPlayerDialogContext() {
33
+ const context = React.useContext(VideoPlayerDialogContext);
34
+ if (!context) throw new Error("VideoPlayerDialog parts must be rendered inside <VideoPlayerDialogContent>.");
35
+ return context;
36
+ }
37
+ /** Accessible modal root. Product state and media behavior remain consumer-owned. */
38
+ function VideoPlayerDialog(props) {
39
+ return /* @__PURE__ */ jsx(Dialog, { ...props });
40
+ }
41
+ function VideoPlayerDialogTrigger(props) {
42
+ return /* @__PURE__ */ jsx(DialogTrigger, { ...props });
43
+ }
44
+ /**
45
+ * Translation-free centered popup with one large, viewport-bounded scroll
46
+ * surface. The close button remains outside the scrolling surface.
47
+ */
48
+ function VideoPlayerDialogContent({ size = "md", theme = "light", showCloseButton = true, className, surfaceClassName, children, ...props }) {
49
+ const context = React.useMemo(() => ({
50
+ size,
51
+ theme
52
+ }), [size, theme]);
53
+ return /* @__PURE__ */ jsx(DialogContent, {
54
+ showCloseButton,
55
+ "data-size": size,
56
+ "data-slot": "video-player-dialog-content",
57
+ "data-theme": theme,
58
+ className: cn("inset-0 m-auto h-fit max-h-none translate-x-0 translate-y-0 gap-0 overflow-visible border-0 bg-transparent p-0 shadow-none sm:w-full [--dialog-padding:0px]", WIDTHS[size], className),
59
+ ...props,
60
+ children: /* @__PURE__ */ jsx(VideoPlayerDialogContext.Provider, {
61
+ value: context,
62
+ children: /* @__PURE__ */ jsx("div", {
63
+ "data-slot": "video-player-dialog-surface",
64
+ className: cn("max-h-[calc(100dvh-4rem)] overflow-y-auto overscroll-contain", videoPlayerDialogSurfaceVariants({
65
+ size,
66
+ theme
67
+ }), surfaceClassName),
68
+ children
69
+ })
70
+ })
71
+ });
72
+ }
73
+ /**
74
+ * Aspect-ratio media slot. Compose any `MediaPlayer*` primitives inside; this
75
+ * part only owns placement and clipping, never playback behavior or controls.
76
+ */
77
+ function VideoPlayerDialogMedia({ className, ...props }) {
78
+ return /* @__PURE__ */ jsx("div", {
79
+ "data-slot": "video-player-dialog-media",
80
+ className: cn("relative isolate aspect-video w-full overflow-hidden rounded-t-[inherit] bg-[#11160f]", "[&>[data-slot=media-player]]:size-full [&>[data-slot=media-player]]:rounded-none [&>[data-slot=media-player]]:shadow-none", className),
81
+ ...props
82
+ });
83
+ }
84
+ function VideoPlayerDialogDetails({ className, ...props }) {
85
+ const { size } = useVideoPlayerDialogContext();
86
+ return /* @__PURE__ */ jsx("div", {
87
+ "data-slot": "video-player-dialog-details",
88
+ className: cn("flex flex-col", size === "sm" ? "gap-1 p-3" : size === "lg" ? "gap-1.5 px-5 pt-[18px] pb-5" : "gap-1 px-4 pt-3.5 pb-4", className),
89
+ ...props
90
+ });
91
+ }
92
+ function VideoPlayerDialogTitle({ className, ...props }) {
93
+ const { size } = useVideoPlayerDialogContext();
94
+ return /* @__PURE__ */ jsx(DialogTitle, {
95
+ "data-slot": "video-player-dialog-title",
96
+ className: cn("text-fg-primary", size === "sm" ? "text-gdt-lg font-bold" : size === "lg" ? "text-gdt-h4 font-extrabold" : "text-gdt-h5 font-extrabold", className),
97
+ ...props
98
+ });
99
+ }
100
+ function VideoPlayerDialogDescription({ className, ...props }) {
101
+ const { size } = useVideoPlayerDialogContext();
102
+ return /* @__PURE__ */ jsx(DialogDescription, {
103
+ "data-slot": "video-player-dialog-description",
104
+ className: cn("text-fg-secondary", size === "sm" ? "text-gdt-xs" : size === "lg" ? "text-gdt-md" : "text-gdt-sm", className),
105
+ ...props
106
+ });
107
+ }
108
+ function VideoPlayerDialogPlaylistIndicator({ current, total, className, ...props }) {
109
+ return /* @__PURE__ */ jsxs("span", {
110
+ "data-slot": "video-player-dialog-playlist-indicator",
111
+ className: cn("pointer-events-none absolute top-3 right-3 z-20 inline-flex h-9 items-center gap-2 rounded-full bg-black/40 px-3 text-gdt-xs font-bold whitespace-nowrap text-white shadow-[0_0_4px_rgb(0_0_0/0.1)] backdrop-blur-[15px]", className),
112
+ ...props,
113
+ children: [
114
+ /* @__PURE__ */ jsx(ListVideo, {
115
+ "aria-hidden": "true",
116
+ className: "size-4"
117
+ }),
118
+ /* @__PURE__ */ jsxs("span", {
119
+ "aria-hidden": "true",
120
+ children: [
121
+ current,
122
+ " / ",
123
+ total
124
+ ]
125
+ }),
126
+ /* @__PURE__ */ jsxs("span", {
127
+ className: "sr-only",
128
+ children: [
129
+ "Video ",
130
+ current,
131
+ " of ",
132
+ total
133
+ ]
134
+ })
135
+ ]
136
+ });
137
+ }
138
+ function VideoPlayerDialogPlaylist({ className, ...props }) {
139
+ return /* @__PURE__ */ jsx("section", {
140
+ "data-slot": "video-player-dialog-playlist",
141
+ className: cn("border-t border-line-subtle px-3 py-3 sm:px-4", className),
142
+ ...props
143
+ });
144
+ }
145
+ function VideoPlayerDialogPlaylistHeader({ className, ...props }) {
146
+ return /* @__PURE__ */ jsx("h3", {
147
+ "data-slot": "video-player-dialog-playlist-header",
148
+ className: cn("mb-2 px-2 text-gdt-xs font-semibold text-fg-secondary", className),
149
+ ...props
150
+ });
151
+ }
152
+ function VideoPlayerDialogPlaylistList({ className, ...props }) {
153
+ return /* @__PURE__ */ jsx("ul", {
154
+ "data-slot": "video-player-dialog-playlist-list",
155
+ className: cn("space-y-1", className),
156
+ ...props
157
+ });
158
+ }
159
+ function VideoPlayerDialogPlaylistItem({ active = false, index, poster, title, duration, className, ...props }) {
160
+ return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("button", {
161
+ type: "button",
162
+ "aria-current": active ? "true" : void 0,
163
+ "data-slot": "video-player-dialog-playlist-item",
164
+ className: cn("flex w-full items-center gap-3 rounded-lg p-2 text-left outline-none transition-[background-color,transform] hover:bg-surface-raised focus-visible:ring-2 focus-visible:ring-line-focus active:scale-[0.99] aria-current:bg-surface-brand-subtle", className),
165
+ ...props,
166
+ children: [
167
+ index !== void 0 ? /* @__PURE__ */ jsx("span", {
168
+ className: "w-5 shrink-0 text-center text-gdt-xs font-semibold text-fg-caption-placeholder",
169
+ children: index
170
+ }) : null,
171
+ poster ? /* @__PURE__ */ jsx("img", {
172
+ src: poster,
173
+ alt: "",
174
+ className: "aspect-video w-20 shrink-0 rounded-md object-cover"
175
+ }) : null,
176
+ /* @__PURE__ */ jsx("span", {
177
+ className: "min-w-0 flex-1 truncate text-gdt-sm font-bold text-fg-primary",
178
+ children: title
179
+ }),
180
+ duration ? /* @__PURE__ */ jsx("span", {
181
+ className: "shrink-0 text-gdt-xs tabular-nums text-fg-secondary",
182
+ children: duration
183
+ }) : null
184
+ ]
185
+ }) });
186
+ }
187
+ //#endregion
188
+ export { VideoPlayerDialog, VideoPlayerDialogContent, VideoPlayerDialogDescription, VideoPlayerDialogDetails, VideoPlayerDialogMedia, VideoPlayerDialogPlaylist, VideoPlayerDialogPlaylistHeader, VideoPlayerDialogPlaylistIndicator, VideoPlayerDialogPlaylistItem, VideoPlayerDialogPlaylistList, VideoPlayerDialogTitle, VideoPlayerDialogTrigger, videoPlayerDialogSurfaceVariants };
@@ -1,4 +1,4 @@
1
- import { t as ComponentSize } from "./size-context-D4mYvcg8.js";
1
+ import { t as ComponentSize } from "./size-context-BX6kAdVj.js";
2
2
  import { ChartCard, ChartValueType } from "./chart.js";
3
3
  import * as React from "react";
4
4
  //#region src/waterfall-chart.d.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@giddaa-housing/ui",
3
- "version": "3.0.1",
3
+ "version": "3.2.0",
4
4
  "description": "Giddaa reusable UI component library.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -165,6 +165,10 @@
165
165
  "types": "./dist/heatmap-chart.d.ts",
166
166
  "import": "./dist/heatmap-chart.js"
167
167
  },
168
+ "./icons": {
169
+ "types": "./dist/icons.d.ts",
170
+ "import": "./dist/icons.js"
171
+ },
168
172
  "./infotip": {
169
173
  "types": "./dist/infotip.d.ts",
170
174
  "import": "./dist/infotip.js"
@@ -217,6 +221,10 @@
217
221
  "types": "./dist/map-indicator.d.ts",
218
222
  "import": "./dist/map-indicator.js"
219
223
  },
224
+ "./mask-input": {
225
+ "types": "./dist/mask-input.d.ts",
226
+ "import": "./dist/mask-input.js"
227
+ },
220
228
  "./media-gallery-hero": {
221
229
  "types": "./dist/media-gallery-hero.d.ts",
222
230
  "import": "./dist/media-gallery-hero.js"
@@ -225,10 +233,18 @@
225
233
  "types": "./dist/media-player.d.ts",
226
234
  "import": "./dist/media-player.js"
227
235
  },
236
+ "./video-player-dialog": {
237
+ "types": "./dist/video-player-dialog.d.ts",
238
+ "import": "./dist/video-player-dialog.js"
239
+ },
228
240
  "./message": {
229
241
  "types": "./dist/message.d.ts",
230
242
  "import": "./dist/message.js"
231
243
  },
244
+ "./mobile-sidebar": {
245
+ "types": "./dist/mobile-sidebar.d.ts",
246
+ "import": "./dist/mobile-sidebar.js"
247
+ },
232
248
  "./multi-step-form": {
233
249
  "types": "./dist/multi-step-form.d.ts",
234
250
  "import": "./dist/multi-step-form.js"
@@ -369,6 +385,10 @@
369
385
  "types": "./dist/testimonial-block.d.ts",
370
386
  "import": "./dist/testimonial-block.js"
371
387
  },
388
+ "./theme-switcher": {
389
+ "types": "./dist/theme-switcher.d.ts",
390
+ "import": "./dist/theme-switcher.js"
391
+ },
372
392
  "./time-picker": {
373
393
  "types": "./dist/time-picker.d.ts",
374
394
  "import": "./dist/time-picker.js"
@@ -377,6 +397,10 @@
377
397
  "types": "./dist/toast.d.ts",
378
398
  "import": "./dist/toast.js"
379
399
  },
400
+ "./top-navbar": {
401
+ "types": "./dist/top-navbar.d.ts",
402
+ "import": "./dist/top-navbar.js"
403
+ },
380
404
  "./tooltip": {
381
405
  "types": "./dist/tooltip.d.ts",
382
406
  "import": "./dist/tooltip.js"
@@ -411,7 +435,6 @@
411
435
  "clsx": "^2.1.1",
412
436
  "embla-carousel-react": "^8.6.0",
413
437
  "libphonenumber-js": "^1.12.43",
414
- "lucide-react": "^0.545.0",
415
438
  "media-chrome": "^4.19.2",
416
439
  "react-day-picker": "^9.14.0",
417
440
  "react-phone-number-input": "^3.4.16",