negodesign 0.0.75 → 0.0.77

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 (44) hide show
  1. package/dist/components/pages/security/auth/PageAuth01.svelte +65 -0
  2. package/dist/components/pages/security/auth/PageAuth01.svelte.d.ts +17 -0
  3. package/dist/components/pages/security/auth/PageAuth02.svelte +45 -0
  4. package/dist/components/pages/security/auth/PageAuth02.svelte.d.ts +17 -0
  5. package/dist/components/pages/security/auth/PageAuth03.svelte +45 -0
  6. package/dist/components/pages/security/auth/PageAuth03.svelte.d.ts +17 -0
  7. package/dist/components/pages/security/login/01/ui/PageLogin01.svelte +15 -40
  8. package/dist/components/pages/security/login/02/ui/PageLogin02.svelte +15 -20
  9. package/dist/components/pages/security/login/03/ui/PageLogin03.svelte +15 -20
  10. package/dist/components/pages/security/register/01/ui/PageRegister01.svelte +64 -0
  11. package/dist/components/pages/security/register/01/ui/PageRegister01.svelte.d.ts +3 -0
  12. package/dist/components/pages/security/register/01/ui/RegisterCard.svelte +100 -0
  13. package/dist/components/pages/security/register/01/ui/RegisterCard.svelte.d.ts +12 -0
  14. package/dist/components/pages/security/register/02/ui/PageRegister02.svelte +76 -0
  15. package/dist/components/pages/security/register/02/ui/PageRegister02.svelte.d.ts +4 -0
  16. package/dist/components/pages/security/register/02/ui/RegisterCard02.svelte +98 -0
  17. package/dist/components/pages/security/register/02/ui/RegisterCard02.svelte.d.ts +12 -0
  18. package/dist/components/pages/security/register/03/ui/PageRegister03.svelte +76 -0
  19. package/dist/components/pages/security/register/03/ui/PageRegister03.svelte.d.ts +4 -0
  20. package/dist/components/pages/security/register/03/ui/RegisterCard03.svelte +103 -0
  21. package/dist/components/pages/security/register/03/ui/RegisterCard03.svelte.d.ts +12 -0
  22. package/dist/components/pages/security/register/FormRegister.svelte +120 -0
  23. package/dist/components/pages/security/register/FormRegister.svelte.d.ts +8 -0
  24. package/dist/components/pages/security/register/PageRegister.svelte +30 -0
  25. package/dist/components/pages/security/register/PageRegister.svelte.d.ts +8 -0
  26. package/dist/components/pages/security/register/types.d.ts +51 -0
  27. package/dist/components/pages/security/register/types.js +1 -0
  28. package/dist/components/ui/modal/core/types.d.ts +3 -1
  29. package/dist/components/ui/modal/core/ui/ModalCore.svelte +132 -129
  30. package/dist/components/ui/modal/grid/ui/02/ModalGridSelection02.svelte +146 -142
  31. package/dist/components/ui/modal/share/types.d.ts +16 -1
  32. package/dist/components/ui/modal/share/ui/ModalShareSelection.svelte +156 -103
  33. package/dist/docs/DocsSidebar.svelte +58 -1
  34. package/dist/docs/components.js +94 -8
  35. package/dist/globals.css +18 -101
  36. package/dist/i18n/langs/en.d.ts +17 -0
  37. package/dist/i18n/langs/en.js +17 -0
  38. package/dist/i18n/langs/pt.d.ts +17 -0
  39. package/dist/i18n/langs/pt.js +17 -0
  40. package/dist/i18n/translations.d.ts +34 -0
  41. package/dist/index.d.ts +17 -1
  42. package/dist/index.js +17 -1
  43. package/dist/types/index.d.ts +7 -0
  44. package/package.json +1 -1
@@ -1,103 +1,156 @@
1
- <script lang="ts">
2
- import { cn } from "../../../../../utils";
3
- import { HugeiconsIcon } from "@hugeicons/svelte";
4
- import ModalCore from "../../core/ui/ModalCore.svelte";
5
- import type { ModalShareSelectionProps, ModelSocialShare } from "../types";
6
-
7
- let {
8
- title,
9
- subtitle,
10
- networks = [],
11
- linkLabel = "Or copy link",
12
- linkValue = "",
13
- copyText = "Copy",
14
- copiedText = "Copied!",
15
- isOpen = $bindable(false),
16
- onShare,
17
- onCopy,
18
- onClose,
19
- class: className,
20
- }: ModalShareSelectionProps = $props();
21
-
22
- let copied = $state(false);
23
-
24
- function handleCopy() {
25
- navigator.clipboard.writeText(linkValue).then(() => {
26
- copied = true;
27
- onCopy?.(linkValue);
28
- setTimeout(() => (copied = false), 2000);
29
- });
30
- }
31
- </script>
32
-
33
- <ModalCore
34
- bind:isOpen
35
- {title}
36
- {subtitle}
37
- showProgress={false}
38
- showBack={false}
39
- {onClose}
40
- class={cn("max-w-lg", className)}
41
- >
42
- {#snippet content()}
43
- <!-- Social Networks -->
44
- <div class="flex flex-wrap items-center justify-center gap-4">
45
- {#each networks as network (network.name)}
46
- <button
47
- type="button"
48
- class="group flex flex-col items-center gap-2"
49
- onclick={() => onShare?.(network)}
50
- >
51
- <div
52
- class={cn(
53
- "flex size-14 items-center justify-center rounded-full border-2 border-border transition-all duration-200",
54
- "hover:scale-110 hover:shadow-md"
55
- )}
56
- style={network.color ? `border-color: ${network.color}30` : ""}
57
- >
58
- {#if typeof network.icon === "string"}
59
- <i
60
- class="{network.icon} text-2xl transition-colors"
61
- style={network.color ? `color: ${network.color}` : ""}
62
- ></i>
63
- {:else}
64
- <HugeiconsIcon
65
- icon={network.icon}
66
- class="size-6 transition-colors"
67
- style={network.color ? `color: ${network.color}` : ""}
68
- />
69
- {/if}
70
- </div>
71
- <span class="text-xs text-muted-foreground">{network.name}</span>
72
- </button>
73
- {/each}
74
- </div>
75
- {/snippet}
76
-
77
- {#snippet footer()}
78
- <!-- Copy Link -->
79
- <div>
80
- <p class="mb-3 text-sm font-medium text-muted-foreground">{linkLabel}</p>
81
- <div class="flex items-center gap-2">
82
- <input
83
- type="text"
84
- readonly
85
- value={linkValue}
86
- class="flex-1 rounded-lg border border-border bg-muted px-4 py-2.5 text-sm text-foreground outline-none"
87
- />
88
- <button
89
- type="button"
90
- class={cn(
91
- "shrink-0 rounded-lg px-5 py-2.5 text-sm font-semibold transition-colors",
92
- copied
93
- ? "bg-green-500 text-white"
94
- : "bg-primary text-primary-foreground hover:bg-primary/90"
95
- )}
96
- onclick={handleCopy}
97
- >
98
- {copied ? copiedText : copyText}
99
- </button>
100
- </div>
101
- </div>
102
- {/snippet}
103
- </ModalCore>
1
+ <script lang="ts">
2
+ import { cn } from "../../../../../utils";
3
+ import { HugeiconsIcon } from "@hugeicons/svelte";
4
+ import ModalCore from "../../core/ui/ModalCore.svelte";
5
+ import type { ModalShareSelectionProps, ModelSocialShare } from "../types";
6
+
7
+ const defaultNetworks: ModelSocialShare[] = [
8
+ { name: "WhatsApp", img: "/img/icons8-whatsapp-48.png", color: "#25D366" },
9
+ {
10
+ name: "Instagram",
11
+ img: "/img/icons8-instagram-48.png",
12
+ color: "#E4405F",
13
+ },
14
+ { name: "Facebook", img: "/img/icons8-facebook-48.png", color: "#1877F2" },
15
+ { name: "Twitter", img: "/img/icons8-twitterx-50.png", color: "#000000" },
16
+ { name: "LinkedIn", img: "/img/icons8-linkedin-48.png", color: "#0A66C2" },
17
+ {
18
+ name: "Pinterest",
19
+ img: "/img/icons8-pinterest-48.png",
20
+ color: "#E60023",
21
+ },
22
+ { name: "Tumblr", img: "/img/icons8-tumblr-48.png", color: "#36465D" },
23
+ ];
24
+
25
+ let {
26
+ title,
27
+ subtitle,
28
+ networks,
29
+ isWhatsapp = true,
30
+ isInstagram = true,
31
+ isFacebook = true,
32
+ isTwitter = true,
33
+ isLinkedin = true,
34
+ isPinterest = false,
35
+ isTumblr = false,
36
+ linkLabel = "Or copy link",
37
+ linkValue = "",
38
+ copyText = "Copy",
39
+ copiedText = "Copied!",
40
+ isOpen = $bindable(false),
41
+ onShare,
42
+ onCopy,
43
+ onClose,
44
+ class: className,
45
+ }: ModalShareSelectionProps = $props();
46
+
47
+ let copied = $state(false);
48
+
49
+ const networkFlags: Record<string, boolean> = $derived({
50
+ whatsapp: isWhatsapp,
51
+ instagram: isInstagram,
52
+ facebook: isFacebook,
53
+ twitter: isTwitter,
54
+ linkedin: isLinkedin,
55
+ pinterest: isPinterest,
56
+ tumblr: isTumblr,
57
+ });
58
+
59
+ const visibleNetworks = $derived(
60
+ (networks?.length ? networks : defaultNetworks).filter(
61
+ (network) => networkFlags[network.name.toLowerCase()] ?? true,
62
+ ),
63
+ );
64
+
65
+ function handleCopy() {
66
+ navigator.clipboard.writeText(linkValue).then(() => {
67
+ copied = true;
68
+ onCopy?.(linkValue);
69
+ setTimeout(() => (copied = false), 2000);
70
+ });
71
+ }
72
+ </script>
73
+
74
+ <ModalCore
75
+ bind:isOpen
76
+ {title}
77
+ {subtitle}
78
+ showProgress={false}
79
+ showBack={false}
80
+ {onClose}
81
+ class={cn("max-w-lg", className)}
82
+ >
83
+ {#snippet content()}
84
+ <!-- Social Networks -->
85
+ {#if visibleNetworks.length > 0}
86
+ <div class="flex flex-wrap items-center justify-center gap-4">
87
+ {#each visibleNetworks as network (network.name)}
88
+ <button
89
+ type="button"
90
+ class="group flex flex-col items-center gap-2"
91
+ onclick={() => onShare?.(network)}
92
+ >
93
+ <div
94
+ class={cn(
95
+ "flex size-14 items-center justify-center rounded-full border-2 border-border bg-white transition-all duration-200",
96
+ "hover:scale-110 hover:shadow-md",
97
+ )}
98
+ style={network.color ? `border-color: ${network.color}30` : ""}
99
+ >
100
+ {#snippet icon()}
101
+ {#if network.img}
102
+ <img
103
+ src={network.img}
104
+ alt={network.name}
105
+ class="size-7 object-contain transition-transform duration-200 group-hover:scale-110"
106
+ loading="lazy"
107
+ />
108
+ {:else if typeof network.icon === "string"}
109
+ <i
110
+ class="{network.icon} text-2xl transition-colors"
111
+ style={network.color ? `color: ${network.color}` : ""}
112
+ ></i>
113
+ {:else if network.icon}
114
+ <HugeiconsIcon
115
+ icon={network.icon}
116
+ class="size-6 transition-colors"
117
+ style={network.color ? `color: ${network.color}` : ""}
118
+ />
119
+ {/if}
120
+ {/snippet}
121
+ {@render icon()}
122
+ </div>
123
+ <span class="text-xs text-muted-foreground">{network.name}</span>
124
+ </button>
125
+ {/each}
126
+ </div>
127
+ {/if}
128
+ {/snippet}
129
+
130
+ {#snippet footer()}
131
+ <!-- Copy Link -->
132
+ <div>
133
+ <p class="mb-3 text-sm font-medium text-muted-foreground">{linkLabel}</p>
134
+ <div class="flex items-center gap-2">
135
+ <input
136
+ type="text"
137
+ readonly
138
+ value={linkValue}
139
+ class="flex-1 rounded-lg border border-border bg-muted px-4 py-2.5 text-sm text-foreground outline-none"
140
+ />
141
+ <button
142
+ type="button"
143
+ class={cn(
144
+ "shrink-0 rounded-lg px-5 py-2.5 text-sm font-semibold transition-colors",
145
+ copied
146
+ ? "bg-green-500 text-white"
147
+ : "bg-primary text-primary-foreground hover:bg-primary/90",
148
+ )}
149
+ onclick={handleCopy}
150
+ >
151
+ {copied ? copiedText : copyText}
152
+ </button>
153
+ </div>
154
+ </div>
155
+ {/snippet}
156
+ </ModalCore>
@@ -11,7 +11,13 @@
11
11
  SidebarMenuButton,
12
12
  SidebarMenuItem,
13
13
  } from "../components/ui/sidebar";
14
- import { DocumentCodeIcon } from "@hugeicons/core-free-icons";
14
+ import {
15
+ AppWindowIcon,
16
+ DocumentCodeIcon,
17
+ FormIcon,
18
+ Login01Icon,
19
+ UserAdd01Icon,
20
+ } from "@hugeicons/core-free-icons";
15
21
  import { HugeiconsIcon } from "@hugeicons/svelte";
16
22
  import { page } from "$app/state";
17
23
  import { categories, components } from "./components";
@@ -21,6 +27,15 @@
21
27
  }
22
28
 
23
29
  const path = $derived(page.url.pathname);
30
+
31
+ const authDemos = [
32
+ { href: "/login/admin/01", label: "Login — Variant 01", icon: Login01Icon },
33
+ { href: "/login/admin/01", label: "Login — Variant 02", icon: Login01Icon },
34
+ { href: "/login/admin/01", label: "Login — Variant 03", icon: Login01Icon },
35
+ { href: "/register/admin/01", label: "Register — Variant 01", icon: UserAdd01Icon },
36
+ { href: "/register/admin/01", label: "Register — Variant 02", icon: UserAdd01Icon },
37
+ { href: "/register/admin/01", label: "Register — Variant 03", icon: UserAdd01Icon },
38
+ ];
24
39
  </script>
25
40
 
26
41
  <Sidebar collapsible="icon">
@@ -66,6 +81,48 @@
66
81
  </SidebarGroupContent>
67
82
  </SidebarGroup>
68
83
 
84
+ <SidebarGroup>
85
+ <SidebarGroupLabel class="uppercase tracking-wider text-muted-foreground/70">
86
+ Live Demos
87
+ </SidebarGroupLabel>
88
+ <SidebarGroupContent>
89
+ <SidebarMenu>
90
+ <SidebarMenuItem>
91
+ <SidebarMenuButton isActive={path === "/modal"}>
92
+ {#snippet child({ props })}
93
+ <a href="/modal" {...props} class="flex items-center gap-2">
94
+ <HugeiconsIcon icon={AppWindowIcon} class="size-4" />
95
+ <span>Modals</span>
96
+ </a>
97
+ {/snippet}
98
+ </SidebarMenuButton>
99
+ </SidebarMenuItem>
100
+ <SidebarMenuItem>
101
+ <SidebarMenuButton isActive={path === "/form"}>
102
+ {#snippet child({ props })}
103
+ <a href="/form" {...props} class="flex items-center gap-2">
104
+ <HugeiconsIcon icon={FormIcon} class="size-4" />
105
+ <span>Form</span>
106
+ </a>
107
+ {/snippet}
108
+ </SidebarMenuButton>
109
+ </SidebarMenuItem>
110
+ {#each authDemos as demo}
111
+ <SidebarMenuItem>
112
+ <SidebarMenuButton isActive={path === demo.href}>
113
+ {#snippet child({ props })}
114
+ <a href={demo.href} {...props} class="flex items-center gap-2">
115
+ <HugeiconsIcon icon={demo.icon} class="size-4" />
116
+ <span>{demo.label}</span>
117
+ </a>
118
+ {/snippet}
119
+ </SidebarMenuButton>
120
+ </SidebarMenuItem>
121
+ {/each}
122
+ </SidebarMenu>
123
+ </SidebarGroupContent>
124
+ </SidebarGroup>
125
+
69
126
  {#each categories as category (category)}
70
127
  {@const list = componentList(category)}
71
128
  {#if list.length > 0}
@@ -743,7 +743,7 @@ let selected = $state(null);
743
743
  slug: "modal-share-selection",
744
744
  name: "ModalShareSelection",
745
745
  category: "Modals",
746
- description: "Social share modal with network icons, copy-to-clipboard link input, and close button. Third variation of the modal system.",
746
+ description: "Social share modal with branded network images, copy-to-clipboard link input, and close button. Third variation of the modal system.",
747
747
  path: "src/lib/components/ui/modal/share/ui/ModalShareSelection.svelte",
748
748
  importPath: "ModalShareSelection",
749
749
  examples: [
@@ -758,12 +758,34 @@ let isOpen = $state(false);
758
758
  bind:isOpen
759
759
  title="Share this design"
760
760
  linkValue="https://example.com/design/123"
761
- networks={[
762
- { name: "Pinterest", icon: "nd-pinterest-icon", color: "#E60023" },
763
- { name: "Twitter", icon: "nd-twitter-icon", color: "#1DA1F2" },
764
- { name: "Instagram", icon: "nd-instagram-icon", color: "#E4405F" },
765
- { name: "Facebook", icon: "nd-facebook-icon", color: "#1877F2" },
766
- ]}
761
+ isWhatsapp
762
+ isInstagram
763
+ isFacebook
764
+ isTwitter
765
+ isLinkedin
766
+ isPinterest
767
+ isTumblr
768
+ onShare={(network) => console.log(network)}
769
+ onCopy={(link) => console.log(link)}
770
+ />`,
771
+ },
772
+ {
773
+ title: "Modal Share Selection — custom networks",
774
+ code: `import { ModalShareSelection } from "negodesign"
775
+ import type { ModelSocialShare } from "negodesign"
776
+
777
+ let isOpen = $state(false);
778
+
779
+ const networks: ModelSocialShare[] = [
780
+ { name: "WhatsApp", img: "/img/icons8-whatsapp-48.png", color: "#25D366" },
781
+ { name: "Facebook", img: "/img/icons8-facebook-48.png", color: "#1877F2" },
782
+ ];
783
+
784
+ <ModalShareSelection
785
+ bind:isOpen
786
+ title="Share this design"
787
+ linkValue="https://example.com/design/123"
788
+ {networks}
767
789
  onShare={(network) => console.log(network)}
768
790
  onCopy={(link) => console.log(link)}
769
791
  />`,
@@ -772,7 +794,14 @@ let isOpen = $state(false);
772
794
  props: [
773
795
  { name: "title", type: "string", description: "Required. Modal title", required: true },
774
796
  { name: "subtitle", type: "string", description: "Subtitle below the title" },
775
- { name: "networks", type: "ModelSocialShare[]", description: "Required. Social networks: { name, icon, color?, url? }", required: true },
797
+ { name: "networks", type: "ModelSocialShare[]", description: "Custom networks: { name, icon?, img?, color?, url? }. When omitted, the built-in networks are used." },
798
+ { name: "isWhatsapp", type: "boolean", description: "Shows the WhatsApp network (built-in, uses /img/icons8-whatsapp-48.png)", default: "true" },
799
+ { name: "isInstagram", type: "boolean", description: "Shows the Instagram network", default: "true" },
800
+ { name: "isFacebook", type: "boolean", description: "Shows the Facebook network", default: "true" },
801
+ { name: "isTwitter", type: "boolean", description: "Shows the Twitter/X network", default: "true" },
802
+ { name: "isLinkedin", type: "boolean", description: "Shows the LinkedIn network", default: "true" },
803
+ { name: "isPinterest", type: "boolean", description: "Shows the Pinterest network", default: "true" },
804
+ { name: "isTumblr", type: "boolean", description: "Shows the Tumblr network", default: "true" },
776
805
  { name: "linkLabel", type: "string", description: "Text above the link input", default: "Or copy link" },
777
806
  { name: "linkValue", type: "string", description: "URL to share/copy" },
778
807
  { name: "copyText", type: "string", description: "Copy button text", default: "Copy" },
@@ -1258,6 +1287,63 @@ let isOpen = $state(false);
1258
1287
  { name: "termsOfService", type: "LinkProps", description: "Terms of service link" },
1259
1288
  ],
1260
1289
  },
1290
+ {
1291
+ slug: "page-register",
1292
+ name: "PageRegister",
1293
+ category: "Login / Security",
1294
+ description: "Register page in a split layout: hero carousel and authentication card with configurable fields (name, email, password, phone, birthday, gender).",
1295
+ path: "src/lib/components/pages/security/register/PageRegister.svelte",
1296
+ importPath: "PageRegister",
1297
+ examples: [
1298
+ {
1299
+ title: "Register Page — All Fields",
1300
+ code: `import { PageRegister } from "negodesign"
1301
+
1302
+ <PageRegister
1303
+ title="Negodesign"
1304
+ fields={{
1305
+ isName: true,
1306
+ isEmail: true,
1307
+ isPassword: true,
1308
+ isConfirmPassword: true,
1309
+ isBirthday: true,
1310
+ isGender: true,
1311
+ isPhone: true,
1312
+ }}
1313
+ onSubmit={(data) => console.log(data)}
1314
+ />`,
1315
+ href: "/register/admin/01",
1316
+ },
1317
+ {
1318
+ title: "Register Page — Minimal (email + password)",
1319
+ code: `import { PageRegister } from "negodesign"
1320
+
1321
+ <PageRegister
1322
+ variant={2}
1323
+ title="Negodesign"
1324
+ fields={{
1325
+ isEmail: true,
1326
+ isPassword: true,
1327
+ isConfirmPassword: true,
1328
+ }}
1329
+ onSubmit={(data) => console.log(data)}
1330
+ />`,
1331
+ },
1332
+ ],
1333
+ props: [
1334
+ { name: "variant", type: "1 | 2 | 3", description: "Layout variant (1: grid pattern, 2: hero image, 3: glass morphism)", default: "1" },
1335
+ { name: "title", type: "string", description: "Title shown in the hero/header" },
1336
+ { name: "fields", type: "RegisterFormFields", description: "Fields to show: { isName?, isEmail?, isPassword?, isConfirmPassword?, isBirthday?, isGender?, isPhone? }" },
1337
+ { name: "carousel", type: "RegisterCarouselItem[]", description: "Hero slides: { title, description, buttonText, buttonUrl? }" },
1338
+ { name: "type", type: "'NUMBER' | 'DOT' | 'POINTER'", description: "Carousel indicator style" },
1339
+ { name: "children", type: "Snippet", description: "Custom content replacing the register card" },
1340
+ { name: "onSubmit", type: "(RegisterRequestDto) => void", description: "Called on submit: { name?, email, password?, confirmPassword?, birthday?, gender?, phone? }" },
1341
+ { name: "login", type: "LinkProps", description: "Link to login page" },
1342
+ { name: "privacyPolicy", type: "LinkProps", description: "Privacy policy link" },
1343
+ { name: "termsOfService", type: "LinkProps", description: "Terms of service link" },
1344
+ { name: "socialLogins", type: "SocialLoginItem[]", description: "Social login providers: { provider, icon?, label?, onclick? }" },
1345
+ ],
1346
+ },
1261
1347
  {
1262
1348
  slug: "company-profile",
1263
1349
  name: "CompanyProfile",
package/dist/globals.css CHANGED
@@ -1784,12 +1784,6 @@
1784
1784
  border-color: color-mix(in oklab, var(--primary) 30%, transparent);
1785
1785
  }
1786
1786
  }
1787
- .border-primary\/50 {
1788
- border-color: var(--primary);
1789
- @supports (color: color-mix(in lab, red, red)) {
1790
- border-color: color-mix(in oklab, var(--primary) 50%, transparent);
1791
- }
1792
- }
1793
1787
  .border-sidebar-border {
1794
1788
  border-color: var(--sidebar-border);
1795
1789
  }
@@ -1799,18 +1793,6 @@
1799
1793
  .border-white {
1800
1794
  border-color: var(--color-white);
1801
1795
  }
1802
- .border-white\/10 {
1803
- border-color: color-mix(in srgb, #fff 10%, transparent);
1804
- @supports (color: color-mix(in lab, red, red)) {
1805
- border-color: color-mix(in oklab, var(--color-white) 10%, transparent);
1806
- }
1807
- }
1808
- .border-white\/20 {
1809
- border-color: color-mix(in srgb, #fff 20%, transparent);
1810
- @supports (color: color-mix(in lab, red, red)) {
1811
- border-color: color-mix(in oklab, var(--color-white) 20%, transparent);
1812
- }
1813
- }
1814
1796
  .border-white\/30 {
1815
1797
  border-color: color-mix(in srgb, #fff 30%, transparent);
1816
1798
  @supports (color: color-mix(in lab, red, red)) {
@@ -2072,6 +2054,12 @@
2072
2054
  background-color: color-mix(in oklab, var(--primary) 20%, transparent);
2073
2055
  }
2074
2056
  }
2057
+ .bg-primary\/40 {
2058
+ background-color: var(--primary);
2059
+ @supports (color: color-mix(in lab, red, red)) {
2060
+ background-color: color-mix(in oklab, var(--primary) 40%, transparent);
2061
+ }
2062
+ }
2075
2063
  .bg-red-500 {
2076
2064
  background-color: var(--color-red-500);
2077
2065
  }
@@ -2144,6 +2132,12 @@
2144
2132
  background-color: color-mix(in oklab, var(--color-white) 50%, transparent);
2145
2133
  }
2146
2134
  }
2135
+ .bg-white\/80 {
2136
+ background-color: color-mix(in srgb, #fff 80%, transparent);
2137
+ @supports (color: color-mix(in lab, red, red)) {
2138
+ background-color: color-mix(in oklab, var(--color-white) 80%, transparent);
2139
+ }
2140
+ }
2147
2141
  .bg-yellow-500 {
2148
2142
  background-color: var(--color-yellow-500);
2149
2143
  }
@@ -2190,10 +2184,6 @@
2190
2184
  }
2191
2185
  --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
2192
2186
  }
2193
- .from-primary {
2194
- --tw-gradient-from: var(--primary);
2195
- --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
2196
- }
2197
2187
  .from-primary\/10 {
2198
2188
  --tw-gradient-from: var(--primary);
2199
2189
  @supports (color: color-mix(in lab, red, red)) {
@@ -2234,13 +2224,6 @@
2234
2224
  --tw-gradient-to: var(--muted);
2235
2225
  --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
2236
2226
  }
2237
- .to-primary\/70 {
2238
- --tw-gradient-to: var(--primary);
2239
- @supports (color: color-mix(in lab, red, red)) {
2240
- --tw-gradient-to: color-mix(in oklab, var(--primary) 70%, transparent);
2241
- }
2242
- --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
2243
- }
2244
2227
  .to-purple-600 {
2245
2228
  --tw-gradient-to: var(--color-purple-600);
2246
2229
  --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
@@ -2786,24 +2769,6 @@
2786
2769
  .text-white\! {
2787
2770
  color: var(--color-white) !important;
2788
2771
  }
2789
- .text-white\/50 {
2790
- color: color-mix(in srgb, #fff 50%, transparent);
2791
- @supports (color: color-mix(in lab, red, red)) {
2792
- color: color-mix(in oklab, var(--color-white) 50%, transparent);
2793
- }
2794
- }
2795
- .text-white\/60 {
2796
- color: color-mix(in srgb, #fff 60%, transparent);
2797
- @supports (color: color-mix(in lab, red, red)) {
2798
- color: color-mix(in oklab, var(--color-white) 60%, transparent);
2799
- }
2800
- }
2801
- .text-white\/70 {
2802
- color: color-mix(in srgb, #fff 70%, transparent);
2803
- @supports (color: color-mix(in lab, red, red)) {
2804
- color: color-mix(in oklab, var(--color-white) 70%, transparent);
2805
- }
2806
- }
2807
2772
  .text-white\/80 {
2808
2773
  color: color-mix(in srgb, #fff 80%, transparent);
2809
2774
  @supports (color: color-mix(in lab, red, red)) {
@@ -3141,6 +3106,12 @@
3141
3106
  --tw-scale-z: 105%;
3142
3107
  scale: var(--tw-scale-x) var(--tw-scale-y);
3143
3108
  }
3109
+ .group-hover\:scale-110:is(:where(.group):hover *) {
3110
+ --tw-scale-x: 110%;
3111
+ --tw-scale-y: 110%;
3112
+ --tw-scale-z: 110%;
3113
+ scale: var(--tw-scale-x) var(--tw-scale-y);
3114
+ }
3144
3115
  .group-hover\:bg-black\/30:is(:where(.group):hover *) {
3145
3116
  background-color: color-mix(in srgb, #000 30%, transparent);
3146
3117
  }
@@ -3359,36 +3330,6 @@
3359
3330
  content: var(--tw-content);
3360
3331
  border-radius: calc(var(--radius) * 2.2);
3361
3332
  }
3362
- .before\:bg-linear-to-br::before {
3363
- content: var(--tw-content);
3364
- --tw-gradient-position: to bottom right;
3365
- @supports (background-image: linear-gradient(in lab, red, red)) {
3366
- --tw-gradient-position: to bottom right in oklab;
3367
- }
3368
- background-image: linear-gradient(var(--tw-gradient-stops));
3369
- }
3370
- .before\:from-primary\/40::before {
3371
- content: var(--tw-content);
3372
- --tw-gradient-from: var(--primary);
3373
- @supports (color: color-mix(in lab, red, red)) {
3374
- --tw-gradient-from: color-mix(in oklab, var(--primary) 40%, transparent);
3375
- }
3376
- --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
3377
- }
3378
- .before\:via-primary\/10::before {
3379
- content: var(--tw-content);
3380
- --tw-gradient-via: var(--primary);
3381
- @supports (color: color-mix(in lab, red, red)) {
3382
- --tw-gradient-via: color-mix(in oklab, var(--primary) 10%, transparent);
3383
- }
3384
- --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);
3385
- --tw-gradient-stops: var(--tw-gradient-via-stops);
3386
- }
3387
- .before\:to-transparent::before {
3388
- content: var(--tw-content);
3389
- --tw-gradient-to: transparent;
3390
- --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
3391
- }
3392
3333
  .after\:pointer-events-none::after {
3393
3334
  content: var(--tw-content);
3394
3335
  pointer-events: none;
@@ -3491,14 +3432,6 @@
3491
3432
  border-color: color-mix(in oklab, var(--primary) 50%, transparent);
3492
3433
  }
3493
3434
  }
3494
- .hover\:border-white\/20:hover {
3495
- border-color: color-mix(in srgb, #fff 20%, transparent);
3496
- }
3497
- @supports (color: color-mix(in lab, red, red)) {
3498
- .hover\:border-white\/20:hover {
3499
- border-color: color-mix(in oklab, var(--color-white) 20%, transparent);
3500
- }
3501
- }
3502
3435
  .hover\:bg-accent:hover {
3503
3436
  background-color: var(--accent);
3504
3437
  }
@@ -3631,14 +3564,6 @@
3631
3564
  .hover\:bg-sidebar-accent:hover {
3632
3565
  background-color: var(--sidebar-accent);
3633
3566
  }
3634
- .hover\:bg-white\/8:hover {
3635
- background-color: color-mix(in srgb, #fff 8%, transparent);
3636
- }
3637
- @supports (color: color-mix(in lab, red, red)) {
3638
- .hover\:bg-white\/8:hover {
3639
- background-color: color-mix(in oklab, var(--color-white) 8%, transparent);
3640
- }
3641
- }
3642
3567
  .hover\:bg-white\/15:hover {
3643
3568
  background-color: color-mix(in srgb, #fff 15%, transparent);
3644
3569
  }
@@ -3720,14 +3645,6 @@
3720
3645
  .hover\:text-white:hover {
3721
3646
  color: var(--color-white);
3722
3647
  }
3723
- .hover\:text-white\/80:hover {
3724
- color: color-mix(in srgb, #fff 80%, transparent);
3725
- }
3726
- @supports (color: color-mix(in lab, red, red)) {
3727
- .hover\:text-white\/80:hover {
3728
- color: color-mix(in oklab, var(--color-white) 80%, transparent);
3729
- }
3730
- }
3731
3648
  .hover\:underline:hover {
3732
3649
  text-decoration-line: underline;
3733
3650
  }