@vadimcomanescu/nadicode-design-system 4.0.3 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/catalog/catalog.d.ts +18 -0
- package/dist/catalog/catalog.js +22 -0
- package/dist/catalog/components.d.ts +2 -0
- package/dist/catalog/components.js +11 -6
- package/dist/chunk-PTJPPKDR.js +115 -0
- package/dist/chunk-ZXVDDZZL.js +96 -0
- package/dist/components/blocks/IntegrationsBlock.js +2 -2
- package/dist/components/blocks/TimezonePickerBlock.d.ts +11 -0
- package/dist/components/blocks/TimezonePickerBlock.js +126 -0
- package/dist/components/logos/index.js +1 -1
- package/dist/lib/timezones.d.ts +14 -0
- package/dist/lib/timezones.js +1 -0
- package/package.json +6 -2
- package/dist/{chunk-6HGSU24S.js → chunk-BSCC7OQK.js} +1 -1
|
@@ -821,6 +821,24 @@ export declare const seedComponentDefinitions: {
|
|
|
821
821
|
events: string[];
|
|
822
822
|
description: string;
|
|
823
823
|
};
|
|
824
|
+
TimezonePickerBlock: {
|
|
825
|
+
props: z.ZodObject<{
|
|
826
|
+
value: z.ZodNullable<z.ZodString>;
|
|
827
|
+
groups: z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
828
|
+
region: z.ZodString;
|
|
829
|
+
timezones: z.ZodArray<z.ZodObject<{
|
|
830
|
+
value: z.ZodString;
|
|
831
|
+
label: z.ZodString;
|
|
832
|
+
region: z.ZodString;
|
|
833
|
+
offset: z.ZodString;
|
|
834
|
+
offsetMinutes: z.ZodNumber;
|
|
835
|
+
}, z.core.$strip>>;
|
|
836
|
+
}, z.core.$strip>>>;
|
|
837
|
+
name: z.ZodNullable<z.ZodString>;
|
|
838
|
+
}, z.core.$strip>;
|
|
839
|
+
events: string[];
|
|
840
|
+
description: string;
|
|
841
|
+
};
|
|
824
842
|
UsageDonutBlock: {
|
|
825
843
|
props: z.ZodObject<{
|
|
826
844
|
data: z.ZodNullable<z.ZodArray<z.ZodObject<{
|
package/dist/catalog/catalog.js
CHANGED
|
@@ -761,6 +761,28 @@ var seedComponentDefinitions = {
|
|
|
761
761
|
events: ["verify", "complete"],
|
|
762
762
|
description: "Two-factor setup wizard with QR code, secret key display, backup codes, and verification."
|
|
763
763
|
},
|
|
764
|
+
TimezonePickerBlock: {
|
|
765
|
+
props: z.object({
|
|
766
|
+
value: z.string().nullable(),
|
|
767
|
+
groups: z.array(
|
|
768
|
+
z.object({
|
|
769
|
+
region: z.string(),
|
|
770
|
+
timezones: z.array(
|
|
771
|
+
z.object({
|
|
772
|
+
value: z.string(),
|
|
773
|
+
label: z.string(),
|
|
774
|
+
region: z.string(),
|
|
775
|
+
offset: z.string(),
|
|
776
|
+
offsetMinutes: z.number()
|
|
777
|
+
})
|
|
778
|
+
)
|
|
779
|
+
})
|
|
780
|
+
).nullable(),
|
|
781
|
+
name: z.string().nullable()
|
|
782
|
+
}),
|
|
783
|
+
events: ["change"],
|
|
784
|
+
description: "Searchable timezone picker with grouped IANA timezones, offset display, and form integration."
|
|
785
|
+
},
|
|
764
786
|
UsageDonutBlock: {
|
|
765
787
|
props: z.object({
|
|
766
788
|
data: z.array(
|
|
@@ -51,6 +51,7 @@ import { TeamBlock } from '../components/blocks/TeamBlock';
|
|
|
51
51
|
import { TestimonialsBlock } from '../components/blocks/TestimonialsBlock';
|
|
52
52
|
import { TwoFactorChallengeBlock } from '../components/blocks/TwoFactorChallengeBlock';
|
|
53
53
|
import { TwoFactorSetupBlock } from '../components/blocks/TwoFactorSetupBlock';
|
|
54
|
+
import { TimezonePickerBlock } from '../components/blocks/TimezonePickerBlock';
|
|
54
55
|
import { UsageDonutBlock } from '../components/blocks/UsageDonutBlock';
|
|
55
56
|
import { AudioVisualizerBlock } from '../components/blocks/AudioVisualizerBlock';
|
|
56
57
|
import { AuthLayout } from '../components/blocks/AuthLayout';
|
|
@@ -141,6 +142,7 @@ export declare const seedComponents: {
|
|
|
141
142
|
readonly TestimonialsBlock: typeof TestimonialsBlock;
|
|
142
143
|
readonly TwoFactorChallengeBlock: typeof TwoFactorChallengeBlock;
|
|
143
144
|
readonly TwoFactorSetupBlock: typeof TwoFactorSetupBlock;
|
|
145
|
+
readonly TimezonePickerBlock: typeof TimezonePickerBlock;
|
|
144
146
|
readonly UsageDonutBlock: typeof UsageDonutBlock;
|
|
145
147
|
readonly AudioVisualizerBlock: typeof AudioVisualizerBlock;
|
|
146
148
|
readonly AuthLayout: typeof AuthLayout;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
+
import { SuccessPageKit } from '../chunk-3U56FXYC.js';
|
|
2
3
|
import { TeamSettingsPageKit } from '../chunk-DEZXWNYF.js';
|
|
3
4
|
import { TwoFactorPageKit } from '../chunk-S5OY2B63.js';
|
|
4
5
|
import { VerifyEmailPageKit } from '../chunk-SWRJWMGG.js';
|
|
5
6
|
import { VoiceAgentsPageKit } from '../chunk-32OLQ7FC.js';
|
|
7
|
+
import { OnboardingPageKit } from '../chunk-BYEHHZZN.js';
|
|
6
8
|
import { PricingPageKit } from '../chunk-RMGDDOCD.js';
|
|
7
9
|
import { ProfileSettingsPageKit } from '../chunk-MGSGCARB.js';
|
|
8
10
|
import { RecoveryPageKit } from '../chunk-BRCBJ3S4.js';
|
|
@@ -10,13 +12,13 @@ import { ResetPageKit } from '../chunk-LP6ZZYOQ.js';
|
|
|
10
12
|
import { ServiceSuitePageKit } from '../chunk-K4U67BVG.js';
|
|
11
13
|
import { SettingsPageKit } from '../chunk-RKQPU75I.js';
|
|
12
14
|
import { SignupPageKit } from '../chunk-BRICSLHJ.js';
|
|
13
|
-
import { SuccessPageKit } from '../chunk-3U56FXYC.js';
|
|
14
15
|
import { DashboardPageKit } from '../chunk-C33GUEDY.js';
|
|
15
16
|
import { ErrorPageKit } from '../chunk-HPTHS7SX.js';
|
|
16
17
|
import { KanbanBoardPageKit } from '../chunk-25BOZMXA.js';
|
|
18
|
+
import { CrudListDetailPageKit } from '../chunk-OJ7OO3QB.js';
|
|
17
19
|
import { LandingPageKit } from '../chunk-LK2L3C7D.js';
|
|
18
20
|
import { LoginPageKit } from '../chunk-Z2WION42.js';
|
|
19
|
-
import {
|
|
21
|
+
import { InviteUserModal } from '../chunk-YDYDGG5K.js';
|
|
20
22
|
import { AccountLockedPageKit } from '../chunk-DNJEVMDY.js';
|
|
21
23
|
import { AgentsChatPageKit } from '../chunk-UR43ANYS.js';
|
|
22
24
|
import { AnalyticsPageKit } from '../chunk-CUDMDYKE.js';
|
|
@@ -25,16 +27,16 @@ import { CheckoutPageKit } from '../chunk-LGW7FVG5.js';
|
|
|
25
27
|
import { CompanySuitePageKit } from '../chunk-QW5II6YK.js';
|
|
26
28
|
import { MarketingShellPageKit } from '../chunk-Z233ZQZE.js';
|
|
27
29
|
import { CrudFormPageKit } from '../chunk-KWILREVQ.js';
|
|
28
|
-
import { CrudListDetailPageKit } from '../chunk-OJ7OO3QB.js';
|
|
29
30
|
import { NavigationShellPageKit } from '../chunk-ZKLB5N3Q.js';
|
|
30
31
|
import { TeamBlock } from '../chunk-VBZQ4DBE.js';
|
|
31
32
|
import { TestimonialsBlock } from '../chunk-FV2G6SAF.js';
|
|
33
|
+
import { TimezonePickerBlock } from '../chunk-ZXVDDZZL.js';
|
|
34
|
+
import '../chunk-PTJPPKDR.js';
|
|
32
35
|
import { TwoFactorChallengeBlock } from '../chunk-W7FXDRQJ.js';
|
|
33
36
|
import { TwoFactorSetupBlock } from '../chunk-IXQGKJU4.js';
|
|
34
37
|
import { UsageDonutBlock } from '../chunk-VRGPG2YN.js';
|
|
35
38
|
import { VoiceAgentCard } from '../chunk-HWHJ6IRQ.js';
|
|
36
39
|
import { WizardBlock } from '../chunk-XKKFSFYO.js';
|
|
37
|
-
import { InviteUserModal } from '../chunk-YDYDGG5K.js';
|
|
38
40
|
import { ProcessFlowBlock } from '../chunk-HZERHGBT.js';
|
|
39
41
|
import { ResetPasswordBlock } from '../chunk-X6VXWEDO.js';
|
|
40
42
|
import { SettingsLayout } from '../chunk-4MWKE6F5.js';
|
|
@@ -56,14 +58,14 @@ import { HeroBlock } from '../chunk-GJ557DGH.js';
|
|
|
56
58
|
import { HeroSectionBlock } from '../chunk-ALA6OM7K.js';
|
|
57
59
|
import '../chunk-QQOWC53X.js';
|
|
58
60
|
import { HeaderBlock } from '../chunk-WOYBVPXK.js';
|
|
59
|
-
import { IntegrationsBlock } from '../chunk-
|
|
61
|
+
import { IntegrationsBlock } from '../chunk-BSCC7OQK.js';
|
|
60
62
|
import '../chunk-3ZDYYZDD.js';
|
|
63
|
+
import '../chunk-BZYMCJHW.js';
|
|
61
64
|
import '../chunk-H466RJCI.js';
|
|
62
65
|
import '../chunk-DT6DGTVW.js';
|
|
63
66
|
import '../chunk-J5DRK4RF.js';
|
|
64
67
|
import '../chunk-TSVN5A2F.js';
|
|
65
68
|
import '../chunk-PX2WVDDB.js';
|
|
66
|
-
import '../chunk-BZYMCJHW.js';
|
|
67
69
|
import { InteractiveAreaChartBlock } from '../chunk-TPJ6JJ2F.js';
|
|
68
70
|
import { KanbanDemoBlock } from '../chunk-CVTMWSNS.js';
|
|
69
71
|
import { ContactBlock } from '../chunk-U4GYSYGN.js';
|
|
@@ -159,6 +161,8 @@ import '../chunk-PDSQC6VE.js';
|
|
|
159
161
|
import '../chunk-PXDHNGTG.js';
|
|
160
162
|
import '../chunk-CQEUNASC.js';
|
|
161
163
|
import '../chunk-DFPXK2JO.js';
|
|
164
|
+
import '../chunk-UYT33NG6.js';
|
|
165
|
+
import '../chunk-2HDB6MDK.js';
|
|
162
166
|
import '../chunk-W73JAOHW.js';
|
|
163
167
|
import '../chunk-S2WSXZ7Y.js';
|
|
164
168
|
import '../chunk-756Q7AC5.js';
|
|
@@ -357,6 +361,7 @@ var seedComponents = {
|
|
|
357
361
|
TestimonialsBlock,
|
|
358
362
|
TwoFactorChallengeBlock,
|
|
359
363
|
TwoFactorSetupBlock,
|
|
364
|
+
TimezonePickerBlock,
|
|
360
365
|
UsageDonutBlock,
|
|
361
366
|
AudioVisualizerBlock,
|
|
362
367
|
AuthLayout,
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// src/lib/timezones.ts
|
|
2
|
+
var FALLBACK_TIMEZONES = [
|
|
3
|
+
"Etc/UTC",
|
|
4
|
+
"America/New_York",
|
|
5
|
+
"America/Chicago",
|
|
6
|
+
"America/Denver",
|
|
7
|
+
"America/Los_Angeles",
|
|
8
|
+
"Europe/London",
|
|
9
|
+
"Europe/Rome",
|
|
10
|
+
"Europe/Bucharest",
|
|
11
|
+
"Asia/Tokyo",
|
|
12
|
+
"Australia/Sydney"
|
|
13
|
+
];
|
|
14
|
+
function getTimezoneGroups(referenceDate = /* @__PURE__ */ new Date()) {
|
|
15
|
+
const allTimezones = getAllTimezones();
|
|
16
|
+
const entries = allTimezones.filter((timezone) => timezone.includes("/") || timezone === "UTC").map((timezone) => {
|
|
17
|
+
const normalizedTimezone = timezone === "UTC" ? "Etc/UTC" : timezone;
|
|
18
|
+
const [region, ...rest] = normalizedTimezone.split("/");
|
|
19
|
+
const labelSource = rest.length > 0 ? rest[rest.length - 1] : normalizedTimezone;
|
|
20
|
+
const offsetMinutes = getOffsetMinutes(normalizedTimezone, referenceDate);
|
|
21
|
+
return {
|
|
22
|
+
value: normalizedTimezone,
|
|
23
|
+
label: labelSource.replaceAll("_", " "),
|
|
24
|
+
region,
|
|
25
|
+
offset: formatOffset(offsetMinutes),
|
|
26
|
+
offsetMinutes
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
const groupedByRegion = /* @__PURE__ */ new Map();
|
|
30
|
+
for (const entry of entries) {
|
|
31
|
+
const regionEntries = groupedByRegion.get(entry.region) ?? [];
|
|
32
|
+
regionEntries.push(entry);
|
|
33
|
+
groupedByRegion.set(entry.region, regionEntries);
|
|
34
|
+
}
|
|
35
|
+
const groups = Array.from(groupedByRegion.entries()).map(([region, timezones]) => ({
|
|
36
|
+
region,
|
|
37
|
+
timezones: timezones.slice().sort(
|
|
38
|
+
(left, right) => left.offsetMinutes - right.offsetMinutes || left.label.localeCompare(right.label)
|
|
39
|
+
)
|
|
40
|
+
}));
|
|
41
|
+
return groups.sort((left, right) => left.region.localeCompare(right.region));
|
|
42
|
+
}
|
|
43
|
+
function searchTimezones(query, groups) {
|
|
44
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
45
|
+
if (!normalizedQuery) {
|
|
46
|
+
return groups.flatMap((group) => group.timezones);
|
|
47
|
+
}
|
|
48
|
+
const matches = [];
|
|
49
|
+
for (const group of groups) {
|
|
50
|
+
for (const timezone of group.timezones) {
|
|
51
|
+
const candidate = `${timezone.value} ${timezone.label} ${timezone.region} ${timezone.offset}`;
|
|
52
|
+
if (candidate.toLowerCase().includes(normalizedQuery)) {
|
|
53
|
+
matches.push(timezone);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return matches;
|
|
58
|
+
}
|
|
59
|
+
function detectBrowserTimezone() {
|
|
60
|
+
try {
|
|
61
|
+
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
62
|
+
if (!timezone) {
|
|
63
|
+
return "Etc/UTC";
|
|
64
|
+
}
|
|
65
|
+
return timezone === "UTC" ? "Etc/UTC" : timezone;
|
|
66
|
+
} catch {
|
|
67
|
+
return "Etc/UTC";
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function getAllTimezones() {
|
|
71
|
+
const supportedValuesOf = Intl.supportedValuesOf;
|
|
72
|
+
if (typeof supportedValuesOf !== "function") {
|
|
73
|
+
return FALLBACK_TIMEZONES;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const supported = supportedValuesOf("timeZone");
|
|
77
|
+
if (supported.length === 0) {
|
|
78
|
+
return FALLBACK_TIMEZONES;
|
|
79
|
+
}
|
|
80
|
+
return supported;
|
|
81
|
+
} catch {
|
|
82
|
+
return FALLBACK_TIMEZONES;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function getOffsetMinutes(timezone, referenceDate) {
|
|
86
|
+
try {
|
|
87
|
+
const formatter = new Intl.DateTimeFormat("en-US", {
|
|
88
|
+
timeZone: timezone,
|
|
89
|
+
timeZoneName: "shortOffset"
|
|
90
|
+
});
|
|
91
|
+
const timezoneName = formatter.formatToParts(referenceDate).find((part) => part.type === "timeZoneName")?.value ?? "GMT";
|
|
92
|
+
const match = timezoneName.match(/^GMT(?:(\+|-)(\d{1,2})(?::(\d{2}))?)?$/);
|
|
93
|
+
if (!match) {
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
if (!match[1] || !match[2]) {
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
const sign = match[1] === "-" ? -1 : 1;
|
|
100
|
+
const hours = Number.parseInt(match[2], 10);
|
|
101
|
+
const minutes = Number.parseInt(match[3] ?? "0", 10);
|
|
102
|
+
return sign * (hours * 60 + minutes);
|
|
103
|
+
} catch {
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function formatOffset(offsetMinutes) {
|
|
108
|
+
const sign = offsetMinutes >= 0 ? "+" : "-";
|
|
109
|
+
const absoluteMinutes = Math.abs(offsetMinutes);
|
|
110
|
+
const hours = String(Math.floor(absoluteMinutes / 60)).padStart(2, "0");
|
|
111
|
+
const minutes = String(absoluteMinutes % 60).padStart(2, "0");
|
|
112
|
+
return `UTC${sign}${hours}:${minutes}`;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export { detectBrowserTimezone, getTimezoneGroups, searchTimezones };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { getTimezoneGroups } from './chunk-PTJPPKDR.js';
|
|
2
|
+
import { Popover, PopoverTrigger, PopoverContent } from './chunk-UYT33NG6.js';
|
|
3
|
+
import { Command } from './chunk-2HDB6MDK.js';
|
|
4
|
+
import { Button } from './chunk-7KIDDF3I.js';
|
|
5
|
+
import { Badge } from './chunk-S4JAHKOP.js';
|
|
6
|
+
import { cn } from './chunk-QYZT24TS.js';
|
|
7
|
+
import { useState, useMemo } from 'react';
|
|
8
|
+
import { Command as Command$1 } from 'cmdk';
|
|
9
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
10
|
+
|
|
11
|
+
var DEFAULT_GROUPS = getTimezoneGroups();
|
|
12
|
+
function TimezonePickerBlock({
|
|
13
|
+
id,
|
|
14
|
+
value,
|
|
15
|
+
onChange,
|
|
16
|
+
name,
|
|
17
|
+
className,
|
|
18
|
+
groups = DEFAULT_GROUPS
|
|
19
|
+
}) {
|
|
20
|
+
const [open, setOpen] = useState(false);
|
|
21
|
+
const entries = useMemo(() => groups.flatMap((group) => group.timezones), [groups]);
|
|
22
|
+
const selectedTimezone = useMemo(
|
|
23
|
+
() => entries.find((timezone) => timezone.value === value) ?? null,
|
|
24
|
+
[entries, value]
|
|
25
|
+
);
|
|
26
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
27
|
+
name ? /* @__PURE__ */ jsx("input", { type: "hidden", name, value: value ?? "" }) : null,
|
|
28
|
+
/* @__PURE__ */ jsxs(Popover, { modal: false, open, onOpenChange: setOpen, children: [
|
|
29
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
30
|
+
Button,
|
|
31
|
+
{
|
|
32
|
+
id,
|
|
33
|
+
type: "button",
|
|
34
|
+
variant: "outline",
|
|
35
|
+
role: "combobox",
|
|
36
|
+
"aria-expanded": open,
|
|
37
|
+
"aria-label": "Select timezone",
|
|
38
|
+
className: cn("w-full justify-between text-left", className),
|
|
39
|
+
children: [
|
|
40
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: selectedTimezone ? `${selectedTimezone.value} (${selectedTimezone.offset})` : "Select timezone" }),
|
|
41
|
+
/* @__PURE__ */ jsx("span", { className: "ml-2 shrink-0 opacity-50", "aria-hidden": "true", children: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 20 20", width: "14", height: "14", fill: "none", stroke: "currentColor", children: [
|
|
42
|
+
/* @__PURE__ */ jsx("path", { d: "M6 8l4-4 4 4", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }),
|
|
43
|
+
/* @__PURE__ */ jsx("path", { d: "M6 12l4 4 4-4", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
44
|
+
] }) })
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
) }),
|
|
48
|
+
/* @__PURE__ */ jsx(PopoverContent, { align: "start", className: "w-[min(90vw,32rem)] p-0", children: /* @__PURE__ */ jsxs(Command, { children: [
|
|
49
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center border-b px-4", children: /* @__PURE__ */ jsx(
|
|
50
|
+
Command$1.Input,
|
|
51
|
+
{
|
|
52
|
+
className: "h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-text-tertiary focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
53
|
+
placeholder: "Search timezone by city, region, or offset..."
|
|
54
|
+
}
|
|
55
|
+
) }),
|
|
56
|
+
/* @__PURE__ */ jsxs(Command$1.List, { className: "max-h-80 overflow-y-auto overflow-x-hidden", children: [
|
|
57
|
+
/* @__PURE__ */ jsx(Command$1.Empty, { className: "py-6 text-center text-sm", children: "No timezone found." }),
|
|
58
|
+
groups.map((group) => /* @__PURE__ */ jsx(
|
|
59
|
+
Command$1.Group,
|
|
60
|
+
{
|
|
61
|
+
heading: /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: group.region }),
|
|
62
|
+
className: "overflow-hidden p-1.5 text-text-primary [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5",
|
|
63
|
+
children: group.timezones.map((timezone) => /* @__PURE__ */ jsxs(
|
|
64
|
+
Command$1.Item,
|
|
65
|
+
{
|
|
66
|
+
value: `${timezone.value} ${timezone.label} ${timezone.region} ${timezone.offset}`,
|
|
67
|
+
onSelect: () => {
|
|
68
|
+
onChange?.(timezone.value);
|
|
69
|
+
setOpen(false);
|
|
70
|
+
},
|
|
71
|
+
className: "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-background data-[disabled=true]:pointer-events-none data-[selected='true']:bg-surface-active data-[selected=true]:text-text-primary data-[disabled=true]:opacity-50",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ jsx(
|
|
74
|
+
"span",
|
|
75
|
+
{
|
|
76
|
+
className: cn("mr-2 shrink-0 text-xs", value === timezone.value ? "opacity-100" : "opacity-0"),
|
|
77
|
+
"aria-hidden": "true",
|
|
78
|
+
children: "\u2713"
|
|
79
|
+
}
|
|
80
|
+
),
|
|
81
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: timezone.value }),
|
|
82
|
+
/* @__PURE__ */ jsx("span", { className: "ml-auto pl-2 text-xs text-text-tertiary", children: timezone.offset })
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
timezone.value
|
|
86
|
+
))
|
|
87
|
+
},
|
|
88
|
+
group.region
|
|
89
|
+
))
|
|
90
|
+
] })
|
|
91
|
+
] }) })
|
|
92
|
+
] })
|
|
93
|
+
] });
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export { TimezonePickerBlock };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { IntegrationsBlock } from '../../chunk-
|
|
2
|
+
export { IntegrationsBlock } from '../../chunk-BSCC7OQK.js';
|
|
3
3
|
import '../../chunk-3ZDYYZDD.js';
|
|
4
|
+
import '../../chunk-BZYMCJHW.js';
|
|
4
5
|
import '../../chunk-H466RJCI.js';
|
|
5
6
|
import '../../chunk-DT6DGTVW.js';
|
|
6
7
|
import '../../chunk-J5DRK4RF.js';
|
|
7
8
|
import '../../chunk-TSVN5A2F.js';
|
|
8
9
|
import '../../chunk-PX2WVDDB.js';
|
|
9
|
-
import '../../chunk-BZYMCJHW.js';
|
|
10
10
|
import '../../chunk-DQPK2XRL.js';
|
|
11
11
|
import '../../chunk-WI547C47.js';
|
|
12
12
|
import '../../chunk-I23DDSU7.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TimezoneGroup } from '../../lib/timezones';
|
|
2
|
+
interface TimezonePickerBlockProps {
|
|
3
|
+
id?: string;
|
|
4
|
+
value?: string;
|
|
5
|
+
onChange?: (value: string) => void;
|
|
6
|
+
name?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
groups?: TimezoneGroup[];
|
|
9
|
+
}
|
|
10
|
+
export declare function TimezonePickerBlock({ id, value, onChange, name, className, groups, }: TimezonePickerBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
export { TimezonePickerBlock } from '../../chunk-ZXVDDZZL.js';
|
|
3
|
+
import '../../chunk-PTJPPKDR.js';
|
|
4
|
+
import '../../chunk-UYT33NG6.js';
|
|
5
|
+
import '../../chunk-2HDB6MDK.js';
|
|
6
|
+
import '../../chunk-W73JAOHW.js';
|
|
7
|
+
import '../../chunk-KRBLVZII.js';
|
|
8
|
+
import '../../chunk-7KIDDF3I.js';
|
|
9
|
+
import '../../chunk-6FOHUNXR.js';
|
|
10
|
+
import '../../chunk-PD2YEH3H.js';
|
|
11
|
+
import '../../chunk-CRY67BIF.js';
|
|
12
|
+
import '../../chunk-HJC6U46F.js';
|
|
13
|
+
import '../../chunk-GO35FTNJ.js';
|
|
14
|
+
import '../../chunk-WUO7OONN.js';
|
|
15
|
+
import '../../chunk-FLF5AMNO.js';
|
|
16
|
+
import '../../chunk-3CLXYQKB.js';
|
|
17
|
+
import '../../chunk-S4GKGKON.js';
|
|
18
|
+
import '../../chunk-LCDDAE7J.js';
|
|
19
|
+
import '../../chunk-R674XI7C.js';
|
|
20
|
+
import '../../chunk-HNY45VUQ.js';
|
|
21
|
+
import '../../chunk-BPCCTJSK.js';
|
|
22
|
+
import '../../chunk-CGUCH322.js';
|
|
23
|
+
import '../../chunk-ELKIUARM.js';
|
|
24
|
+
import '../../chunk-KSHJQ2VT.js';
|
|
25
|
+
import '../../chunk-GAKU7DFY.js';
|
|
26
|
+
import '../../chunk-T6BRD7TS.js';
|
|
27
|
+
import '../../chunk-TXGANOAX.js';
|
|
28
|
+
import '../../chunk-OITJWGFV.js';
|
|
29
|
+
import '../../chunk-Z74D6D2W.js';
|
|
30
|
+
import '../../chunk-7WDT2PRI.js';
|
|
31
|
+
import '../../chunk-IJJI4RQU.js';
|
|
32
|
+
import '../../chunk-E7RBK6ML.js';
|
|
33
|
+
import '../../chunk-UBIGDGOP.js';
|
|
34
|
+
import '../../chunk-ALMGJVMT.js';
|
|
35
|
+
import '../../chunk-QPXTBZWN.js';
|
|
36
|
+
import '../../chunk-4NXZIMYZ.js';
|
|
37
|
+
import '../../chunk-R5XP45PD.js';
|
|
38
|
+
import '../../chunk-G5EO5FWC.js';
|
|
39
|
+
import '../../chunk-NCULQXJE.js';
|
|
40
|
+
import '../../chunk-VDYPDMYR.js';
|
|
41
|
+
import '../../chunk-WDGIQDQG.js';
|
|
42
|
+
import '../../chunk-RYOTIXZO.js';
|
|
43
|
+
import '../../chunk-JZ4G2SJH.js';
|
|
44
|
+
import '../../chunk-KYGKJ553.js';
|
|
45
|
+
import '../../chunk-M7YSMMAC.js';
|
|
46
|
+
import '../../chunk-XQ2UDMPO.js';
|
|
47
|
+
import '../../chunk-JMCSAGZ3.js';
|
|
48
|
+
import '../../chunk-QUKDUSHD.js';
|
|
49
|
+
import '../../chunk-O74AEVHW.js';
|
|
50
|
+
import '../../chunk-ZUHIWALK.js';
|
|
51
|
+
import '../../chunk-2IZC7HSV.js';
|
|
52
|
+
import '../../chunk-2SDZMTB2.js';
|
|
53
|
+
import '../../chunk-IQEBXXB5.js';
|
|
54
|
+
import '../../chunk-AZUJNRQU.js';
|
|
55
|
+
import '../../chunk-W3B3UOEG.js';
|
|
56
|
+
import '../../chunk-ACRVOD7W.js';
|
|
57
|
+
import '../../chunk-QSU23VYZ.js';
|
|
58
|
+
import '../../chunk-BJYCQ2NV.js';
|
|
59
|
+
import '../../chunk-VM462WZC.js';
|
|
60
|
+
import '../../chunk-5UZDOF6V.js';
|
|
61
|
+
import '../../chunk-PKVTEDKO.js';
|
|
62
|
+
import '../../chunk-I3TH7PIB.js';
|
|
63
|
+
import '../../chunk-WGPK3FQ7.js';
|
|
64
|
+
import '../../chunk-JL4MVVFH.js';
|
|
65
|
+
import '../../chunk-4FEAWXJD.js';
|
|
66
|
+
import '../../chunk-JHQTKMKG.js';
|
|
67
|
+
import '../../chunk-WA45EC4Y.js';
|
|
68
|
+
import '../../chunk-2MOEOEOI.js';
|
|
69
|
+
import '../../chunk-5LCXASRW.js';
|
|
70
|
+
import '../../chunk-2ZJVU7NV.js';
|
|
71
|
+
import '../../chunk-5ESF6N36.js';
|
|
72
|
+
import '../../chunk-RBPLOM3A.js';
|
|
73
|
+
import '../../chunk-6BAV4TZ5.js';
|
|
74
|
+
import '../../chunk-SW6QPJM4.js';
|
|
75
|
+
import '../../chunk-2NT57K4U.js';
|
|
76
|
+
import '../../chunk-JRJGSNI4.js';
|
|
77
|
+
import '../../chunk-RF6ECFS5.js';
|
|
78
|
+
import '../../chunk-KYZT3RNW.js';
|
|
79
|
+
import '../../chunk-UEG2LI7Z.js';
|
|
80
|
+
import '../../chunk-CI7GPGCJ.js';
|
|
81
|
+
import '../../chunk-226EBOTK.js';
|
|
82
|
+
import '../../chunk-74RKVIBV.js';
|
|
83
|
+
import '../../chunk-V6WNRZT3.js';
|
|
84
|
+
import '../../chunk-JBK2LA6U.js';
|
|
85
|
+
import '../../chunk-55U27XY4.js';
|
|
86
|
+
import '../../chunk-LSPO6OBI.js';
|
|
87
|
+
import '../../chunk-Y56WBNCY.js';
|
|
88
|
+
import '../../chunk-JJTQOH7J.js';
|
|
89
|
+
import '../../chunk-72X6SXOX.js';
|
|
90
|
+
import '../../chunk-SR5U52V3.js';
|
|
91
|
+
import '../../chunk-AWIJHDNK.js';
|
|
92
|
+
import '../../chunk-MAUTIHQG.js';
|
|
93
|
+
import '../../chunk-S733NAYS.js';
|
|
94
|
+
import '../../chunk-666N6OTL.js';
|
|
95
|
+
import '../../chunk-FMH55OKV.js';
|
|
96
|
+
import '../../chunk-WXVNTJIB.js';
|
|
97
|
+
import '../../chunk-T7H53CK2.js';
|
|
98
|
+
import '../../chunk-TBKJ34BB.js';
|
|
99
|
+
import '../../chunk-BRP6D56U.js';
|
|
100
|
+
import '../../chunk-6G3RRWJT.js';
|
|
101
|
+
import '../../chunk-ZU2GYVAP.js';
|
|
102
|
+
import '../../chunk-CRZ2JE24.js';
|
|
103
|
+
import '../../chunk-PSVQ7ZNX.js';
|
|
104
|
+
import '../../chunk-WKRIKCJC.js';
|
|
105
|
+
import '../../chunk-JHQ5NMLZ.js';
|
|
106
|
+
import '../../chunk-WFJQ43SM.js';
|
|
107
|
+
import '../../chunk-AP5Y5M3R.js';
|
|
108
|
+
import '../../chunk-Q7LVUGFL.js';
|
|
109
|
+
import '../../chunk-G5YLGJXR.js';
|
|
110
|
+
import '../../chunk-G24VV5NO.js';
|
|
111
|
+
import '../../chunk-R3AO6AZM.js';
|
|
112
|
+
import '../../chunk-GCUTJI7M.js';
|
|
113
|
+
import '../../chunk-CXACRCZ4.js';
|
|
114
|
+
import '../../chunk-P6IRHPFM.js';
|
|
115
|
+
import '../../chunk-SXHYB7JB.js';
|
|
116
|
+
import '../../chunk-BFLN54VR.js';
|
|
117
|
+
import '../../chunk-ONGJ7AC2.js';
|
|
118
|
+
import '../../chunk-UHXGBV5N.js';
|
|
119
|
+
import '../../chunk-UIUMTURU.js';
|
|
120
|
+
import '../../chunk-PRUXIDBD.js';
|
|
121
|
+
import '../../chunk-NURPUVUV.js';
|
|
122
|
+
import '../../chunk-S4JAHKOP.js';
|
|
123
|
+
import '../../chunk-TV4RSQH4.js';
|
|
124
|
+
import '../../chunk-HJBXUXTD.js';
|
|
125
|
+
import '../../chunk-ASKFAYYR.js';
|
|
126
|
+
import '../../chunk-QYZT24TS.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '../../chunk-3ZDYYZDD.js';
|
|
2
|
+
export { MagicUI } from '../../chunk-BZYMCJHW.js';
|
|
2
3
|
export { MediaWiki } from '../../chunk-H466RJCI.js';
|
|
3
4
|
export { Replit } from '../../chunk-DT6DGTVW.js';
|
|
4
5
|
export { VSCodium } from '../../chunk-J5DRK4RF.js';
|
|
5
6
|
export { Gemini } from '../../chunk-TSVN5A2F.js';
|
|
6
7
|
export { GooglePaLM } from '../../chunk-PX2WVDDB.js';
|
|
7
|
-
export { MagicUI } from '../../chunk-BZYMCJHW.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface TimezoneEntry {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
region: string;
|
|
5
|
+
offset: string;
|
|
6
|
+
offsetMinutes: number;
|
|
7
|
+
}
|
|
8
|
+
export interface TimezoneGroup {
|
|
9
|
+
region: string;
|
|
10
|
+
timezones: TimezoneEntry[];
|
|
11
|
+
}
|
|
12
|
+
export declare function getTimezoneGroups(referenceDate?: Date): TimezoneGroup[];
|
|
13
|
+
export declare function searchTimezones(query: string, groups: TimezoneGroup[]): TimezoneEntry[];
|
|
14
|
+
export declare function detectBrowserTimezone(): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { detectBrowserTimezone, getTimezoneGroups, searchTimezones } from '../chunk-PTJPPKDR.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vadimcomanescu/nadicode-design-system",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.4",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"release:patch": "npm version patch --no-git-tag-version && npm run publish:package",
|
|
58
58
|
"release:minor": "npm version minor --no-git-tag-version && npm run publish:package",
|
|
59
59
|
"release:major": "npm version major --no-git-tag-version && npm run publish:package",
|
|
60
|
-
"precommit": "npx lint-staged --config package.json
|
|
60
|
+
"precommit": "npx lint-staged --config package.json",
|
|
61
61
|
"gate:prepush": "npm run typecheck && npm run lint && npm run ds:check && npm run build:lib && npm run docs:check && npx vitest run --coverage && npm run build && npm run lighthouse",
|
|
62
62
|
"test:visual": "npx playwright test --config=playwright.visual.config.ts",
|
|
63
63
|
"test:visual:update": "npx playwright test --config=playwright.visual.config.ts --update-snapshots",
|
|
@@ -1525,6 +1525,10 @@
|
|
|
1525
1525
|
"import": "./dist/components/ui/Typography.js",
|
|
1526
1526
|
"types": "./dist/components/ui/Typography.d.ts"
|
|
1527
1527
|
},
|
|
1528
|
+
"./lib/timezones": {
|
|
1529
|
+
"import": "./dist/lib/timezones.js",
|
|
1530
|
+
"types": "./dist/lib/timezones.d.ts"
|
|
1531
|
+
},
|
|
1528
1532
|
"./utils": {
|
|
1529
1533
|
"import": "./dist/lib/utils.js",
|
|
1530
1534
|
"types": "./dist/lib/utils.d.ts"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { MagicUI } from './chunk-BZYMCJHW.js';
|
|
1
2
|
import { MediaWiki } from './chunk-H466RJCI.js';
|
|
2
3
|
import { Replit } from './chunk-DT6DGTVW.js';
|
|
3
4
|
import { VSCodium } from './chunk-J5DRK4RF.js';
|
|
4
5
|
import { Gemini } from './chunk-TSVN5A2F.js';
|
|
5
6
|
import { GooglePaLM } from './chunk-PX2WVDDB.js';
|
|
6
|
-
import { MagicUI } from './chunk-BZYMCJHW.js';
|
|
7
7
|
import { StaggerChildren } from './chunk-DQPK2XRL.js';
|
|
8
8
|
import { Heading } from './chunk-WI547C47.js';
|
|
9
9
|
import { ScrollFadeIn } from './chunk-I23DDSU7.js';
|