@sudobility/building_blocks 0.0.202 → 0.0.204

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/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { b, a, S, u } from "./SafeSubscriptionContext-CNuEKeqJ.js";
1
+ import { b, a, S, u } from "./SafeSubscriptionContext-D4q_l1Kw.js";
2
2
  import { clsx } from "clsx";
3
3
  import { twMerge } from "tailwind-merge";
4
4
  import i18n from "i18next";
@@ -10,7 +10,7 @@ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
10
10
  import React, { useState, useRef, useMemo, useCallback, useEffect } from "react";
11
11
  import { TopbarProvider, Topbar, TopbarLeft, TopbarNavigation, TopbarLogo, Logo, TopbarCenter, TopbarRight, TopbarActions, TopbarMobileContent, Footer, FooterCompact, FooterCompactLeft, FooterVersion, FooterCopyright, FooterCompactRight, FooterGrid, FooterLinkSection, FooterLink, FooterBottom, FooterBrand, FooterSocialLinks, LayoutProvider, AspectFitView, Label, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, MasterListItem, MasterDetailLayout, Section } from "@sudobility/components";
12
12
  import { ChevronDownIcon, CalendarDaysIcon, PaintBrushIcon, LanguageIcon, ChevronRightIcon, EnvelopeIcon, DocumentTextIcon, CogIcon, HomeIcon } from "@heroicons/react/24/outline";
13
- import { GRADIENT_CLASSES, textVariants } from "@sudobility/design";
13
+ import { ui, GRADIENT_CLASSES, buttonVariant, textVariants, colors, focusRing } from "@sudobility/design";
14
14
  import { cva } from "class-variance-authority";
15
15
  function cn(...inputs) {
16
16
  return twMerge(clsx(inputs));
@@ -103,12 +103,18 @@ const LanguageSelector = ({
103
103
  "aria-haspopup": "listbox",
104
104
  children: [
105
105
  /* @__PURE__ */ jsx("span", { className: "text-lg leading-none", children: currentLang == null ? void 0 : currentLang.flag }),
106
- /* @__PURE__ */ jsx("span", { className: "hidden sm:block text-sm font-medium text-gray-700 dark:text-gray-300", children: currentLang == null ? void 0 : currentLang.name }),
106
+ /* @__PURE__ */ jsx(
107
+ "span",
108
+ {
109
+ className: `hidden sm:block text-sm font-medium ${ui.text.label}`,
110
+ children: currentLang == null ? void 0 : currentLang.name
111
+ }
112
+ ),
107
113
  /* @__PURE__ */ jsx(
108
114
  ChevronDownIcon,
109
115
  {
110
116
  className: cn(
111
- "h-4 w-4 text-gray-500 dark:text-gray-400 transition-transform",
117
+ `h-4 w-4 ${ui.text.muted} transition-transform`,
112
118
  isOpen && "rotate-180"
113
119
  )
114
120
  }
@@ -121,8 +127,8 @@ const LanguageSelector = ({
121
127
  {
122
128
  className: cn(
123
129
  "absolute right-0 mt-2 w-48 py-1 z-50",
124
- "bg-white dark:bg-gray-800",
125
- "border border-gray-200 dark:border-gray-700",
130
+ ui.background.surface,
131
+ `border ${ui.border.default}`,
126
132
  "rounded-lg shadow-lg"
127
133
  ),
128
134
  role: "listbox",
@@ -141,7 +147,7 @@ const LanguageSelector = ({
141
147
  "aria-selected": lang.code === currentLanguage,
142
148
  children: [
143
149
  /* @__PURE__ */ jsx("span", { className: "text-lg leading-none", children: lang.flag }),
144
- /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-700 dark:text-gray-300", children: lang.name })
150
+ /* @__PURE__ */ jsx("span", { className: `text-sm ${ui.text.label}`, children: lang.name })
145
151
  ]
146
152
  },
147
153
  lang.code
@@ -151,7 +157,7 @@ const LanguageSelector = ({
151
157
  ] });
152
158
  }
153
159
  return /* @__PURE__ */ jsxs("div", { ref: dropdownRef, className: cn("space-y-2", className), children: [
154
- /* @__PURE__ */ jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300 flex items-center gap-2", children: /* @__PURE__ */ jsx("span", { children: label }) }),
160
+ /* @__PURE__ */ jsx("label", { className: `${ui.text.label} flex items-center gap-2`, children: /* @__PURE__ */ jsx("span", { children: label }) }),
155
161
  /* @__PURE__ */ jsxs("div", { className: "relative", children: [
156
162
  /* @__PURE__ */ jsxs(
157
163
  "button",
@@ -159,8 +165,8 @@ const LanguageSelector = ({
159
165
  onClick: () => setIsOpen(!isOpen),
160
166
  className: cn(
161
167
  "flex items-center justify-between w-full px-3 py-2 text-left",
162
- "bg-white dark:bg-gray-800",
163
- "border border-gray-300 dark:border-gray-600",
168
+ ui.background.surface,
169
+ `border ${ui.border.default}`,
164
170
  "rounded-md",
165
171
  "hover:bg-gray-50 dark:hover:bg-gray-700",
166
172
  "transition-colors"
@@ -170,13 +176,13 @@ const LanguageSelector = ({
170
176
  children: [
171
177
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
172
178
  /* @__PURE__ */ jsx("span", { className: "text-lg leading-none", children: currentLang == null ? void 0 : currentLang.flag }),
173
- /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-700 dark:text-gray-300", children: currentLang == null ? void 0 : currentLang.name })
179
+ /* @__PURE__ */ jsx("span", { className: `text-sm ${ui.text.label}`, children: currentLang == null ? void 0 : currentLang.name })
174
180
  ] }),
175
181
  /* @__PURE__ */ jsx(
176
182
  ChevronDownIcon,
177
183
  {
178
184
  className: cn(
179
- "h-4 w-4 text-gray-500 dark:text-gray-400 transition-transform",
185
+ `h-4 w-4 ${ui.text.muted} transition-transform`,
180
186
  isOpen && "rotate-180"
181
187
  )
182
188
  }
@@ -189,8 +195,8 @@ const LanguageSelector = ({
189
195
  {
190
196
  className: cn(
191
197
  "absolute left-0 right-0 mt-1 py-1 z-50",
192
- "bg-white dark:bg-gray-800",
193
- "border border-gray-200 dark:border-gray-700",
198
+ ui.background.surface,
199
+ `border ${ui.border.default}`,
194
200
  "rounded-md shadow-lg"
195
201
  ),
196
202
  role: "listbox",
@@ -209,7 +215,7 @@ const LanguageSelector = ({
209
215
  "aria-selected": lang.code === currentLanguage,
210
216
  children: [
211
217
  /* @__PURE__ */ jsx("span", { className: "text-lg leading-none", children: lang.flag }),
212
- /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-700 dark:text-gray-300", children: lang.name })
218
+ /* @__PURE__ */ jsx("span", { className: `text-sm ${ui.text.label}`, children: lang.name })
213
219
  ]
214
220
  },
215
221
  lang.code
@@ -217,7 +223,7 @@ const LanguageSelector = ({
217
223
  }
218
224
  )
219
225
  ] }),
220
- helperText && /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: helperText })
226
+ helperText && /* @__PURE__ */ jsx("p", { className: `text-xs ${ui.text.muted}`, children: helperText })
221
227
  ] });
222
228
  };
223
229
  const DefaultLinkComponent$1 = ({
@@ -371,7 +377,10 @@ const DefaultConnectButton = ({ onClick, content = "Connect Wallet", className,
371
377
  {
372
378
  onClick,
373
379
  className: cn(
374
- useGradient ? GRADIENT_CLASSES.headerButton : "px-4 py-2 text-sm font-medium rounded-lg bg-blue-600 text-white hover:bg-blue-700 transition-colors",
380
+ useGradient ? GRADIENT_CLASSES.headerButton : cn(
381
+ "px-4 py-2 text-sm font-medium rounded-lg transition-colors",
382
+ buttonVariant("primary")
383
+ ),
375
384
  className
376
385
  ),
377
386
  children: content
@@ -380,12 +389,12 @@ const DefaultConnectButton = ({ onClick, content = "Connect Wallet", className,
380
389
  const FallbackWalletDisplay = ({ walletAddress, onDisconnect }) => {
381
390
  const truncatedAddress = `${walletAddress.slice(0, 6)}...${walletAddress.slice(-4)}`;
382
391
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
383
- /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: truncatedAddress }),
392
+ /* @__PURE__ */ jsx("span", { className: `text-sm font-medium ${ui.text.label}`, children: truncatedAddress }),
384
393
  /* @__PURE__ */ jsx(
385
394
  "button",
386
395
  {
387
396
  onClick: () => onDisconnect(),
388
- className: "text-xs text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",
397
+ className: `text-xs ${ui.text.muted} hover:text-gray-700 dark:hover:text-gray-200`,
389
398
  children: "Disconnect"
390
399
  }
391
400
  )
@@ -447,9 +456,9 @@ const AppTopBarWithWallet = ({
447
456
  const breadcrumbContainerVariants = cva("border-b", {
448
457
  variants: {
449
458
  variant: {
450
- default: "bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700",
459
+ default: `${ui.background.surface} ${ui.border.default}`,
451
460
  transparent: "bg-transparent border-transparent",
452
- subtle: "bg-gray-50 dark:bg-gray-900/50 border-gray-200 dark:border-gray-700"
461
+ subtle: `${ui.background.subtle} ${ui.border.default}`
453
462
  }
454
463
  },
455
464
  defaultVariants: {
@@ -729,7 +738,7 @@ const ShareDropdown = ({
729
738
  isOpen && /* @__PURE__ */ jsxs(
730
739
  "div",
731
740
  {
732
- className: "absolute right-0 top-10 z-[999999] w-40 bg-white dark:bg-gray-800 rounded-lg shadow-xl border border-gray-200 dark:border-gray-700 py-1",
741
+ className: `absolute right-0 top-10 z-[999999] w-40 ${ui.background.surface} rounded-lg shadow-xl border ${ui.border.default} py-1`,
733
742
  role: "menu",
734
743
  "aria-label": "Share options",
735
744
  onKeyDown: handleMenuKeyDown,
@@ -751,7 +760,7 @@ const ShareDropdown = ({
751
760
  /* @__PURE__ */ jsx(
752
761
  "div",
753
762
  {
754
- className: "border-t border-gray-200 dark:border-gray-700 my-1",
763
+ className: `border-t ${ui.border.default} my-1`,
755
764
  role: "separator"
756
765
  }
757
766
  ),
@@ -785,7 +794,7 @@ const ShareDropdown = ({
785
794
  hasImageShare && /* @__PURE__ */ jsx(
786
795
  "div",
787
796
  {
788
- className: "border-t border-gray-200 dark:border-gray-700 my-1",
797
+ className: `border-t ${ui.border.default} my-1`,
789
798
  role: "separator"
790
799
  }
791
800
  ),
@@ -799,7 +808,7 @@ const ShareDropdown = ({
799
808
  className: "w-full flex items-center px-3 py-1.5 hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer transition-colors focus:bg-gray-50 dark:focus:bg-gray-700 focus:outline-none",
800
809
  role: "menuitem",
801
810
  tabIndex: focusedIndex === sharePlatforms.length + extraItemCount ? 0 : -1,
802
- children: /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-700 dark:text-gray-300", children: showCopiedFeedback ? "Copied!" : "Copy Link" })
811
+ children: /* @__PURE__ */ jsx("span", { className: `text-sm ${ui.text.label}`, children: showCopiedFeedback ? "Copied!" : "Copy Link" })
803
812
  }
804
813
  )
805
814
  ]
@@ -848,15 +857,15 @@ const AppBreadcrumbs = ({
848
857
  }
849
858
  return /* @__PURE__ */ jsx("div", { className: cn(breadcrumbContainerVariants({ variant }), className), children: /* @__PURE__ */ jsx("div", { className: cn("max-w-7xl mx-auto px-4 py-2", contentClassName), children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
850
859
  /* @__PURE__ */ jsx("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsx("ol", { className: "flex items-center text-sm space-x-2", children: items.map((item, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
851
- /* @__PURE__ */ jsx("li", { children: item.current || !item.href ? /* @__PURE__ */ jsx("span", { className: "text-gray-700 dark:text-gray-300", children: item.label }) : /* @__PURE__ */ jsx(
860
+ /* @__PURE__ */ jsx("li", { children: item.current || !item.href ? /* @__PURE__ */ jsx("span", { className: ui.text.body, children: item.label }) : /* @__PURE__ */ jsx(
852
861
  "a",
853
862
  {
854
863
  href: item.href,
855
- className: "text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 transition-colors",
864
+ className: `${ui.text.linkSubtle} transition-colors`,
856
865
  children: item.label
857
866
  }
858
867
  ) }),
859
- index < items.length - 1 && /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("span", { className: "text-gray-400 dark:text-gray-500", children: "/" }) })
868
+ index < items.length - 1 && /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("span", { className: ui.text.muted, children: "/" }) })
860
869
  ] }, index)) }) }),
861
870
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
862
871
  talkToFounder && /* @__PURE__ */ jsx(TalkToFounderButton, { config: talkToFounder }),
@@ -920,7 +929,7 @@ const AppFooter = ({
920
929
  LinkComponent,
921
930
  {
922
931
  href: companyUrl,
923
- className: "text-blue-400 hover:text-blue-300 transition-colors",
932
+ className: cn(ui.text.linkSubtle, ui.transition.default),
924
933
  children: companyName
925
934
  }
926
935
  ) : void 0;
@@ -962,7 +971,7 @@ const AppFooter = ({
962
971
  link.href,
963
972
  link.onClick
964
973
  ),
965
- className: "text-gray-400 hover:text-white transition-colors",
974
+ className: cn(ui.text.linkMuted, ui.transition.default),
966
975
  children: link.label
967
976
  }
968
977
  ) : /* @__PURE__ */ jsx(
@@ -970,7 +979,7 @@ const AppFooter = ({
970
979
  {
971
980
  href: link.href,
972
981
  onClick: createTrackedLinkHandler(link.label, link.href),
973
- className: "text-gray-400 hover:text-white transition-colors",
982
+ className: cn(ui.text.linkMuted, ui.transition.default),
974
983
  children: link.label
975
984
  }
976
985
  ) }, link.href || index)) })
@@ -1039,7 +1048,7 @@ const AppFooterForHomePage = ({
1039
1048
  LinkComponent,
1040
1049
  {
1041
1050
  href: companyUrl,
1042
- className: "text-blue-400 hover:text-blue-300 transition-colors",
1051
+ className: cn(ui.text.linkSubtle, ui.transition.default),
1043
1052
  children: companyName
1044
1053
  }
1045
1054
  ) : void 0;
@@ -1140,7 +1149,7 @@ const AppFooterForHomePage = ({
1140
1149
  const layoutVariants = cva("flex flex-col", {
1141
1150
  variants: {
1142
1151
  background: {
1143
- default: "bg-gray-50 dark:bg-gray-900",
1152
+ default: ui.background.subtle,
1144
1153
  white: "bg-white dark:bg-gray-900",
1145
1154
  gradient: "bg-gradient-to-br from-gray-50 to-blue-50 dark:from-gray-900 dark:to-gray-800"
1146
1155
  }
@@ -1315,13 +1324,7 @@ const AppearanceSettings = ({
1315
1324
  return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
1316
1325
  /* @__PURE__ */ jsxs("div", { children: [
1317
1326
  /* @__PURE__ */ jsx("h2", { className: `${textVariants.heading.h4()} mb-2`, children: getText("heading") }),
1318
- /* @__PURE__ */ jsx(
1319
- "p",
1320
- {
1321
- className: `${textVariants.body.sm()} text-gray-600 dark:text-gray-400`,
1322
- children: getText("description")
1323
- }
1324
- )
1327
+ /* @__PURE__ */ jsx("p", { className: textVariants.body.sm(), children: getText("description") })
1325
1328
  ] }),
1326
1329
  /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
1327
1330
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
@@ -1348,13 +1351,7 @@ const AppearanceSettings = ({
1348
1351
  ]
1349
1352
  }
1350
1353
  ),
1351
- /* @__PURE__ */ jsx(
1352
- "p",
1353
- {
1354
- className: `${textVariants.body.xs()} text-gray-500 dark:text-gray-400`,
1355
- children: getText("themeDescription")
1356
- }
1357
- )
1354
+ /* @__PURE__ */ jsx("p", { className: textVariants.body.xs(), children: getText("themeDescription") })
1358
1355
  ] }),
1359
1356
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
1360
1357
  /* @__PURE__ */ jsx(
@@ -1385,19 +1382,19 @@ const AppearanceSettings = ({
1385
1382
  ]
1386
1383
  }
1387
1384
  ),
1388
- /* @__PURE__ */ jsx(
1389
- "p",
1390
- {
1391
- className: `${textVariants.body.xs()} text-gray-500 dark:text-gray-400`,
1392
- children: getText("fontSizeDescription")
1393
- }
1394
- )
1385
+ /* @__PURE__ */ jsx("p", { className: textVariants.body.xs(), children: getText("fontSizeDescription") })
1395
1386
  ] })
1396
1387
  ] }),
1397
- showInfoBox && /* @__PURE__ */ jsxs("div", { className: "bg-blue-50 dark:bg-blue-900/20 rounded-lg p-4 border border-blue-200 dark:border-blue-800", children: [
1398
- /* @__PURE__ */ jsx("h4", { className: "text-sm font-medium text-blue-900 dark:text-blue-100 mb-2", children: getText("infoHeading") }),
1399
- /* @__PURE__ */ jsx("p", { className: "text-sm text-blue-700 dark:text-blue-300", children: getText("infoDescription") })
1400
- ] })
1388
+ showInfoBox && /* @__PURE__ */ jsxs(
1389
+ "div",
1390
+ {
1391
+ className: `${colors.component.alert.info.base} ${colors.component.alert.info.dark} rounded-lg p-4 border`,
1392
+ children: [
1393
+ /* @__PURE__ */ jsx("h4", { className: `${ui.text.info} text-sm mb-2`, children: getText("infoHeading") }),
1394
+ /* @__PURE__ */ jsx("p", { className: `${ui.text.info} text-sm font-normal`, children: getText("infoDescription") })
1395
+ ]
1396
+ }
1397
+ )
1401
1398
  ] }) });
1402
1399
  };
1403
1400
  const defaultTranslations = {
@@ -1564,48 +1561,83 @@ const AppSitemapPage = ({
1564
1561
  }) => {
1565
1562
  const content = /* @__PURE__ */ jsxs(Section, { spacing: "3xl", maxWidth: "6xl", className: cn(className), children: [
1566
1563
  /* @__PURE__ */ jsxs("div", { className: "text-center mb-12", children: [
1567
- /* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold text-gray-900 dark:text-white mb-4", children: text.title }),
1568
- /* @__PURE__ */ jsx("p", { className: "text-xl text-gray-600 dark:text-gray-300", children: text.subtitle })
1569
- ] }),
1570
- languages.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mb-12 p-6 bg-blue-50 dark:bg-blue-900/20 rounded-lg", children: [
1571
- /* @__PURE__ */ jsxs("h2", { className: "text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center", children: [
1572
- /* @__PURE__ */ jsx(LanguageIcon, { className: "w-6 h-6 mr-2" }),
1573
- text.languagesSectionTitle
1574
- ] }),
1575
- /* @__PURE__ */ jsx("p", { className: "text-gray-600 dark:text-gray-300 mb-6", children: text.languagesDescription }),
1576
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4", children: languages.map((lang) => /* @__PURE__ */ jsxs(
1577
- LinkComponent,
1578
- {
1579
- href: languageLinkPath ?? "/",
1580
- language: lang.code,
1581
- className: "flex items-center space-x-2 p-3 bg-white dark:bg-gray-800 rounded-lg hover:shadow-md transition-shadow",
1582
- children: [
1583
- /* @__PURE__ */ jsx("span", { className: "text-2xl", children: lang.flag }),
1584
- /* @__PURE__ */ jsx("div", { className: "font-medium text-gray-900 dark:text-white", children: lang.name })
1585
- ]
1586
- },
1587
- lang.code
1588
- )) })
1564
+ /* @__PURE__ */ jsx("h1", { className: `text-4xl font-bold ${ui.text.strong} mb-4`, children: text.title }),
1565
+ /* @__PURE__ */ jsx("p", { className: `text-xl ${ui.text.muted}`, children: text.subtitle })
1589
1566
  ] }),
1567
+ languages.length > 0 && /* @__PURE__ */ jsxs(
1568
+ "div",
1569
+ {
1570
+ className: `mb-12 p-6 ${colors.component.alert.info.base} ${colors.component.alert.info.dark} rounded-lg`,
1571
+ children: [
1572
+ /* @__PURE__ */ jsxs(
1573
+ "h2",
1574
+ {
1575
+ className: `text-xl font-semibold ${ui.text.strong} mb-4 flex items-center`,
1576
+ children: [
1577
+ /* @__PURE__ */ jsx(LanguageIcon, { className: "w-6 h-6 mr-2" }),
1578
+ text.languagesSectionTitle
1579
+ ]
1580
+ }
1581
+ ),
1582
+ /* @__PURE__ */ jsx("p", { className: `${ui.text.body} mb-6`, children: text.languagesDescription }),
1583
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4", children: languages.map((lang) => /* @__PURE__ */ jsxs(
1584
+ LinkComponent,
1585
+ {
1586
+ href: languageLinkPath ?? "/",
1587
+ language: lang.code,
1588
+ className: `flex items-center space-x-2 p-3 ${ui.background.surface} rounded-lg hover:shadow-md transition-shadow`,
1589
+ children: [
1590
+ /* @__PURE__ */ jsx("span", { className: "text-2xl", children: lang.flag }),
1591
+ /* @__PURE__ */ jsx("div", { className: `font-medium ${ui.text.strong}`, children: lang.name })
1592
+ ]
1593
+ },
1594
+ lang.code
1595
+ )) })
1596
+ ]
1597
+ }
1598
+ ),
1590
1599
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", children: sections.map((section, index) => /* @__PURE__ */ jsxs(
1591
1600
  "div",
1592
1601
  {
1593
- className: "bg-white dark:bg-gray-800 rounded-lg shadow-sm p-6",
1602
+ className: `${ui.background.surface} rounded-lg shadow-sm p-6`,
1594
1603
  children: [
1595
- /* @__PURE__ */ jsxs("h2", { className: "text-lg font-semibold text-gray-900 dark:text-white mb-4 flex items-center", children: [
1596
- getIcon(section.icon),
1597
- section.title
1598
- ] }),
1604
+ /* @__PURE__ */ jsxs(
1605
+ "h2",
1606
+ {
1607
+ className: `text-lg font-semibold ${ui.text.strong} mb-4 flex items-center`,
1608
+ children: [
1609
+ getIcon(section.icon),
1610
+ section.title
1611
+ ]
1612
+ }
1613
+ ),
1599
1614
  /* @__PURE__ */ jsx("ul", { className: "space-y-2", children: section.links.map((link, linkIndex) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
1600
1615
  LinkComponent,
1601
1616
  {
1602
1617
  href: link.path,
1603
- className: "group flex items-start text-sm hover:text-blue-600 dark:hover:text-blue-400 transition-colors",
1618
+ className: `group flex items-start text-sm ${ui.text.linkSubtle} transition-colors`,
1604
1619
  children: [
1605
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "w-4 h-4 mt-0.5 mr-2 flex-shrink-0 text-gray-400 group-hover:text-blue-600 dark:group-hover:text-blue-400" }),
1620
+ /* @__PURE__ */ jsx(
1621
+ ChevronRightIcon,
1622
+ {
1623
+ className: `w-4 h-4 mt-0.5 mr-2 flex-shrink-0 ${ui.text.muted} group-hover:text-blue-600 dark:group-hover:text-blue-400`
1624
+ }
1625
+ ),
1606
1626
  /* @__PURE__ */ jsxs("div", { children: [
1607
- /* @__PURE__ */ jsx("span", { className: "font-medium text-gray-700 dark:text-gray-300 group-hover:text-blue-600 dark:group-hover:text-blue-400", children: link.label }),
1608
- link.description && /* @__PURE__ */ jsx("span", { className: "block text-xs text-gray-500 dark:text-gray-400 mt-0.5", children: link.description })
1627
+ /* @__PURE__ */ jsx(
1628
+ "span",
1629
+ {
1630
+ className: `font-medium ${ui.text.label} group-hover:text-blue-600 dark:group-hover:text-blue-400`,
1631
+ children: link.label
1632
+ }
1633
+ ),
1634
+ link.description && /* @__PURE__ */ jsx(
1635
+ "span",
1636
+ {
1637
+ className: `block text-xs ${ui.text.muted} mt-0.5`,
1638
+ children: link.description
1639
+ }
1640
+ )
1609
1641
  ] })
1610
1642
  ]
1611
1643
  }
@@ -1614,16 +1646,18 @@ const AppSitemapPage = ({
1614
1646
  },
1615
1647
  index
1616
1648
  )) }),
1617
- quickLinks.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-12 p-6 bg-gray-50 dark:bg-gray-900 rounded-lg", children: [
1618
- /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white mb-4", children: text.quickLinksTitle }),
1649
+ quickLinks.length > 0 && /* @__PURE__ */ jsxs("div", { className: `mt-12 p-6 ${ui.background.subtle} rounded-lg`, children: [
1650
+ /* @__PURE__ */ jsx("h3", { className: `text-lg font-semibold ${ui.text.strong} mb-4`, children: text.quickLinksTitle }),
1619
1651
  /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-3", children: quickLinks.map((link, index) => {
1620
- const baseClasses = "inline-flex items-center px-4 py-2 rounded-lg transition-colors";
1621
- const variantClasses = link.variant === "primary" ? "bg-blue-600 text-white hover:bg-blue-700" : link.variant === "secondary" ? "bg-gray-600 text-white hover:bg-gray-700" : "border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800";
1652
+ const baseClasses = "inline-flex items-center px-4 py-2 rounded-lg";
1653
+ const variantClasses = buttonVariant(
1654
+ link.variant === "primary" ? "primary" : link.variant === "secondary" ? "secondary" : "outline"
1655
+ );
1622
1656
  return /* @__PURE__ */ jsxs(
1623
1657
  LinkComponent,
1624
1658
  {
1625
1659
  href: link.path,
1626
- className: `${baseClasses} ${variantClasses}`,
1660
+ className: cn(baseClasses, variantClasses),
1627
1661
  children: [
1628
1662
  link.icon === "envelope" && /* @__PURE__ */ jsx(EnvelopeIcon, { className: "w-5 h-5 mr-2" }),
1629
1663
  link.icon === "document" && /* @__PURE__ */ jsx(DocumentTextIcon, { className: "w-5 h-5 mr-2" }),
@@ -1646,13 +1680,13 @@ function isSectionWithList(section) {
1646
1680
  function isSectionWithSubsections(section) {
1647
1681
  return "subsections" in section && Array.isArray(section.subsections);
1648
1682
  }
1649
- const SectionHeading = ({ children }) => /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-gray-900 dark:text-gray-100 mt-8 mb-4", children });
1650
- const SubsectionHeading = ({ children }) => /* @__PURE__ */ jsx("h3", { className: "text-xl font-semibold text-gray-900 dark:text-gray-100 mt-6 mb-3", children });
1683
+ const SectionHeading = ({ children }) => /* @__PURE__ */ jsx("h2", { className: `text-2xl font-bold ${ui.text.strong} mt-8 mb-4`, children });
1684
+ const SubsectionHeading = ({ children }) => /* @__PURE__ */ jsx("h3", { className: `text-xl font-semibold ${ui.text.strong} mt-6 mb-3`, children });
1651
1685
  const Paragraph = ({
1652
1686
  children,
1653
1687
  className = ""
1654
- }) => /* @__PURE__ */ jsx("p", { className: `text-gray-600 dark:text-gray-300 mb-6 ${className}`, children });
1655
- const List = ({ items }) => /* @__PURE__ */ jsx("ul", { className: "list-disc list-inside text-gray-600 dark:text-gray-300 mb-6 space-y-1", children: items.map((item, index) => /* @__PURE__ */ jsx("li", { dangerouslySetInnerHTML: { __html: item } }, index)) });
1688
+ }) => /* @__PURE__ */ jsx("p", { className: cn(ui.text.body, "mb-6", className), children });
1689
+ const List = ({ items }) => /* @__PURE__ */ jsx("ul", { className: `list-disc list-inside ${ui.text.body} mb-6 space-y-1`, children: items.map((item, index) => /* @__PURE__ */ jsx("li", { dangerouslySetInnerHTML: { __html: item } }, index)) });
1656
1690
  const AppTextPage = ({
1657
1691
  text,
1658
1692
  lastUpdatedDate = (/* @__PURE__ */ new Date()).toLocaleDateString(),
@@ -1660,7 +1694,7 @@ const AppTextPage = ({
1660
1694
  className
1661
1695
  }) => {
1662
1696
  const content = /* @__PURE__ */ jsxs(Section, { spacing: "3xl", maxWidth: "4xl", className: cn(className), children: [
1663
- /* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold text-gray-900 dark:text-gray-100 mb-8", children: text.title }),
1697
+ /* @__PURE__ */ jsx("h1", { className: `text-4xl font-bold ${ui.text.strong} mb-8`, children: text.title }),
1664
1698
  /* @__PURE__ */ jsxs("div", { className: "prose prose-lg dark:prose-invert max-w-none", children: [
1665
1699
  text.lastUpdated && /* @__PURE__ */ jsx(Paragraph, { className: "mb-6", children: text.lastUpdated.replace("{{date}}", lastUpdatedDate) }),
1666
1700
  text.sections.map((section, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
@@ -1694,28 +1728,21 @@ const AppTextPage = ({
1694
1728
  dangerouslySetInnerHTML: { __html: text.contact.description }
1695
1729
  }
1696
1730
  ) }) : /* @__PURE__ */ jsx(Paragraph, { children: text.contact.description }),
1697
- /* @__PURE__ */ jsx("div", { className: "bg-gray-50 dark:bg-gray-800 p-4 rounded-lg", children: /* @__PURE__ */ jsxs("p", { className: "text-gray-700 dark:text-gray-300", children: [
1731
+ /* @__PURE__ */ jsx("div", { className: `${ui.background.subtle} p-4 rounded-lg`, children: /* @__PURE__ */ jsxs("p", { className: ui.text.body, children: [
1698
1732
  text.contact.info.emailLabel,
1699
1733
  " ",
1700
1734
  /* @__PURE__ */ jsx(
1701
1735
  "a",
1702
1736
  {
1703
1737
  href: `mailto:${text.contact.info.email}`,
1704
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
1738
+ className: ui.text.link,
1705
1739
  children: text.contact.info.email
1706
1740
  }
1707
1741
  ),
1708
1742
  /* @__PURE__ */ jsx("br", {}),
1709
1743
  text.contact.info.websiteLabel,
1710
1744
  " ",
1711
- /* @__PURE__ */ jsx(
1712
- "a",
1713
- {
1714
- href: text.contact.info.websiteUrl,
1715
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
1716
- children: text.contact.info.websiteUrl
1717
- }
1718
- ),
1745
+ /* @__PURE__ */ jsx("a", { href: text.contact.info.websiteUrl, className: ui.text.link, children: text.contact.info.websiteUrl }),
1719
1746
  text.contact.info.dpoLabel && text.contact.info.dpoEmail && /* @__PURE__ */ jsxs(Fragment, { children: [
1720
1747
  /* @__PURE__ */ jsx("br", {}),
1721
1748
  text.contact.info.dpoLabel,
@@ -1724,27 +1751,33 @@ const AppTextPage = ({
1724
1751
  "a",
1725
1752
  {
1726
1753
  href: `mailto:${text.contact.info.dpoEmail}`,
1727
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
1754
+ className: ui.text.link,
1728
1755
  children: text.contact.info.dpoEmail
1729
1756
  }
1730
1757
  )
1731
1758
  ] })
1732
1759
  ] }) }),
1733
- text.contact.gdprNotice && /* @__PURE__ */ jsxs("div", { className: "mt-8 p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg", children: [
1734
- /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-blue-900 dark:text-blue-200 mb-2", children: text.contact.gdprNotice.title }),
1735
- /* @__PURE__ */ jsxs("p", { className: "text-blue-800 dark:text-blue-300", children: [
1736
- text.contact.gdprNotice.content,
1737
- " ",
1738
- text.contact.info.dpoEmail && /* @__PURE__ */ jsx(
1739
- "a",
1740
- {
1741
- href: `mailto:${text.contact.info.dpoEmail}`,
1742
- className: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",
1743
- children: text.contact.info.dpoEmail
1744
- }
1745
- )
1746
- ] })
1747
- ] })
1760
+ text.contact.gdprNotice && /* @__PURE__ */ jsxs(
1761
+ "div",
1762
+ {
1763
+ className: `mt-8 p-4 ${colors.component.alert.info.base} ${colors.component.alert.info.dark} rounded-lg`,
1764
+ children: [
1765
+ /* @__PURE__ */ jsx("h3", { className: `text-lg font-semibold ${ui.text.info} mb-2`, children: text.contact.gdprNotice.title }),
1766
+ /* @__PURE__ */ jsxs("p", { className: ui.text.info, children: [
1767
+ text.contact.gdprNotice.content,
1768
+ " ",
1769
+ text.contact.info.dpoEmail && /* @__PURE__ */ jsx(
1770
+ "a",
1771
+ {
1772
+ href: `mailto:${text.contact.info.dpoEmail}`,
1773
+ className: ui.text.link,
1774
+ children: text.contact.info.dpoEmail
1775
+ }
1776
+ )
1777
+ ] })
1778
+ ]
1779
+ }
1780
+ )
1748
1781
  ] })
1749
1782
  ] })
1750
1783
  ] });
@@ -1806,52 +1839,31 @@ const USER_ACTION_ERROR_CODES = [
1806
1839
  ];
1807
1840
  const colorVariantClasses = {
1808
1841
  primary: {
1809
- title: "text-primary-600",
1810
- inputFocus: "focus:ring-primary-500 focus:border-primary-500",
1811
- submitButton: "bg-primary-600 hover:bg-primary-700 focus:ring-primary-500 disabled:bg-primary-300",
1812
- googleButtonFocusRing: "focus:ring-primary-500",
1813
- toggleLink: "text-primary-600 hover:text-primary-500"
1842
+ title: "text-blue-600",
1843
+ toggleLink: "text-blue-600 hover:text-blue-500"
1814
1844
  },
1815
1845
  blue: {
1816
1846
  title: "text-blue-600",
1817
- inputFocus: "focus:ring-blue-500 focus:border-blue-500",
1818
- submitButton: "bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 disabled:bg-blue-300",
1819
- googleButtonFocusRing: "focus:ring-blue-500",
1820
1847
  toggleLink: "text-blue-600 hover:text-blue-500"
1821
1848
  },
1822
1849
  indigo: {
1823
1850
  title: "text-indigo-600",
1824
- inputFocus: "focus:ring-indigo-500 focus:border-indigo-500",
1825
- submitButton: "bg-indigo-600 hover:bg-indigo-700 focus:ring-indigo-500 disabled:bg-indigo-300",
1826
- googleButtonFocusRing: "focus:ring-indigo-500",
1827
1851
  toggleLink: "text-indigo-600 hover:text-indigo-500"
1828
1852
  },
1829
1853
  violet: {
1830
1854
  title: "text-violet-600",
1831
- inputFocus: "focus:ring-violet-500 focus:border-violet-500",
1832
- submitButton: "bg-violet-600 hover:bg-violet-700 focus:ring-violet-500 disabled:bg-violet-300",
1833
- googleButtonFocusRing: "focus:ring-violet-500",
1834
1855
  toggleLink: "text-violet-600 hover:text-violet-500"
1835
1856
  },
1836
1857
  orange: {
1837
1858
  title: "text-orange-600",
1838
- inputFocus: "focus:ring-orange-500 focus:border-orange-500",
1839
- submitButton: "bg-orange-600 hover:bg-orange-700 focus:ring-orange-500 disabled:bg-orange-300",
1840
- googleButtonFocusRing: "focus:ring-orange-500",
1841
1859
  toggleLink: "text-orange-600 hover:text-orange-500"
1842
1860
  },
1843
1861
  emerald: {
1844
1862
  title: "text-emerald-600",
1845
- inputFocus: "focus:ring-emerald-500 focus:border-emerald-500",
1846
- submitButton: "bg-emerald-600 hover:bg-emerald-700 focus:ring-emerald-500 disabled:bg-emerald-300",
1847
- googleButtonFocusRing: "focus:ring-emerald-500",
1848
1863
  toggleLink: "text-emerald-600 hover:text-emerald-500"
1849
1864
  },
1850
1865
  rose: {
1851
1866
  title: "text-rose-600",
1852
- inputFocus: "focus:ring-rose-500 focus:border-rose-500",
1853
- submitButton: "bg-rose-600 hover:bg-rose-700 focus:ring-rose-500 disabled:bg-rose-300",
1854
- googleButtonFocusRing: "focus:ring-rose-500",
1855
1867
  toggleLink: "text-rose-600 hover:text-rose-500"
1856
1868
  }
1857
1869
  };
@@ -1863,6 +1875,7 @@ function LoginPage({
1863
1875
  onGoogleSignIn,
1864
1876
  onSuccess,
1865
1877
  onAuthError,
1878
+ text: textOverrides,
1866
1879
  showGoogleSignIn = true,
1867
1880
  showSignUp = true,
1868
1881
  className = "",
@@ -1887,7 +1900,7 @@ function LoginPage({
1887
1900
  const [isLoading, setIsLoading] = useState(false);
1888
1901
  const [isGoogleSignInPending, setIsGoogleSignInPending] = useState(false);
1889
1902
  const googleSignInStartTime = useRef(null);
1890
- const colors = colorVariantClasses[colorVariant];
1903
+ const colors$1 = colorVariantClasses[colorVariant];
1891
1904
  useEffect(() => {
1892
1905
  const handleFocus = () => {
1893
1906
  if (isGoogleSignInPending && googleSignInStartTime.current) {
@@ -1947,39 +1960,38 @@ function LoginPage({
1947
1960
  googleSignInStartTime.current = null;
1948
1961
  }
1949
1962
  };
1950
- const text = defaultText;
1963
+ const text = { ...defaultText, ...textOverrides };
1951
1964
  return /* @__PURE__ */ jsx(
1952
1965
  "div",
1953
1966
  {
1954
1967
  className: cn(
1955
- "min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8",
1968
+ `min-h-screen flex items-center justify-center ${ui.background.subtle} py-12 px-4 sm:px-6 lg:px-8`,
1956
1969
  className
1957
1970
  ),
1958
1971
  children: /* @__PURE__ */ jsxs("div", { className: "max-w-md w-full space-y-8", children: [
1959
1972
  /* @__PURE__ */ jsxs("div", { children: [
1960
1973
  logo && /* @__PURE__ */ jsx("div", { className: "flex justify-center mb-4", children: logo }),
1961
- /* @__PURE__ */ jsx("h1", { className: cn("text-center text-3xl font-bold", colors.title), children: appName }),
1962
- /* @__PURE__ */ jsx("h2", { className: "mt-6 text-center text-2xl font-semibold text-gray-900", children: isSignUp && showSignUp ? text.createAccount : text.signInToAccount })
1974
+ /* @__PURE__ */ jsx("h1", { className: cn("text-center text-3xl font-bold", colors$1.title), children: appName }),
1975
+ /* @__PURE__ */ jsx(
1976
+ "h2",
1977
+ {
1978
+ className: `mt-6 text-center text-2xl font-semibold ${ui.text.strong}`,
1979
+ children: isSignUp && showSignUp ? text.createAccount : text.signInToAccount
1980
+ }
1981
+ )
1963
1982
  ] }),
1964
1983
  /* @__PURE__ */ jsxs("form", { className: "mt-8 space-y-6", onSubmit: handleSubmit, children: [
1965
1984
  error && /* @__PURE__ */ jsx(
1966
1985
  "div",
1967
1986
  {
1968
- className: "bg-red-50 border border-red-200 text-red-600 px-4 py-3 rounded-md text-sm",
1987
+ className: `${colors.component.alert.error.base} ${colors.component.alert.error.dark} border px-4 py-3 rounded-md text-sm`,
1969
1988
  role: "alert",
1970
1989
  children: error
1971
1990
  }
1972
1991
  ),
1973
1992
  /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
1974
1993
  /* @__PURE__ */ jsxs("div", { children: [
1975
- /* @__PURE__ */ jsx(
1976
- "label",
1977
- {
1978
- htmlFor: "login-email",
1979
- className: "block text-sm font-medium text-gray-700",
1980
- children: text.emailLabel
1981
- }
1982
- ),
1994
+ /* @__PURE__ */ jsx("label", { htmlFor: "login-email", className: `block ${ui.text.label}`, children: text.emailLabel }),
1983
1995
  /* @__PURE__ */ jsx(
1984
1996
  "input",
1985
1997
  {
@@ -1992,8 +2004,8 @@ function LoginPage({
1992
2004
  onChange: (e) => setEmail(e.target.value),
1993
2005
  placeholder: text.emailPlaceholder,
1994
2006
  className: cn(
1995
- "mt-1 appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none sm:text-sm",
1996
- colors.inputFocus
2007
+ `mt-1 appearance-none block w-full px-3 py-2 border rounded-md shadow-sm sm:text-sm ${colors.component.input.default.base} ${colors.component.input.default.dark}`,
2008
+ focusRing
1997
2009
  )
1998
2010
  }
1999
2011
  )
@@ -2003,7 +2015,7 @@ function LoginPage({
2003
2015
  "label",
2004
2016
  {
2005
2017
  htmlFor: "login-password",
2006
- className: "block text-sm font-medium text-gray-700",
2018
+ className: `block ${ui.text.label}`,
2007
2019
  children: text.passwordLabel
2008
2020
  }
2009
2021
  ),
@@ -2019,8 +2031,8 @@ function LoginPage({
2019
2031
  onChange: (e) => setPassword(e.target.value),
2020
2032
  placeholder: text.passwordPlaceholder,
2021
2033
  className: cn(
2022
- "mt-1 appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none sm:text-sm",
2023
- colors.inputFocus
2034
+ `mt-1 appearance-none block w-full px-3 py-2 border rounded-md shadow-sm sm:text-sm ${colors.component.input.default.base} ${colors.component.input.default.dark}`,
2035
+ focusRing
2024
2036
  )
2025
2037
  }
2026
2038
  )
@@ -2032,8 +2044,9 @@ function LoginPage({
2032
2044
  type: "submit",
2033
2045
  disabled: isLoading,
2034
2046
  className: cn(
2035
- "w-full inline-flex items-center justify-center font-medium rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 text-white px-4 py-2 text-sm",
2036
- colors.submitButton
2047
+ "w-full inline-flex items-center justify-center font-medium rounded-md px-4 py-2 text-sm",
2048
+ buttonVariant("primary"),
2049
+ "disabled:opacity-50 disabled:cursor-not-allowed"
2037
2050
  ),
2038
2051
  children: [
2039
2052
  isLoading && /* @__PURE__ */ jsxs(
@@ -2073,8 +2086,14 @@ function LoginPage({
2073
2086
  ) }),
2074
2087
  showGoogleSignIn && onGoogleSignIn && /* @__PURE__ */ jsxs(Fragment, { children: [
2075
2088
  /* @__PURE__ */ jsxs("div", { className: "relative", children: [
2076
- /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx("div", { className: "w-full border-t border-gray-300" }) }),
2077
- /* @__PURE__ */ jsx("div", { className: "relative flex justify-center text-sm", children: /* @__PURE__ */ jsx("span", { className: "px-2 bg-gray-50 text-gray-500", children: text.orContinueWith }) })
2089
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx("div", { className: `w-full border-t ${ui.border.default}` }) }),
2090
+ /* @__PURE__ */ jsx("div", { className: "relative flex justify-center text-sm", children: /* @__PURE__ */ jsx(
2091
+ "span",
2092
+ {
2093
+ className: `px-2 ${ui.background.subtle} ${ui.text.muted}`,
2094
+ children: text.orContinueWith
2095
+ }
2096
+ ) })
2078
2097
  ] }),
2079
2098
  /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(
2080
2099
  "button",
@@ -2083,8 +2102,9 @@ function LoginPage({
2083
2102
  onClick: handleGoogleSignIn,
2084
2103
  disabled: isLoading,
2085
2104
  className: cn(
2086
- "w-full inline-flex items-center justify-center font-medium rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 bg-white text-gray-700 border border-gray-300 hover:bg-gray-50 disabled:bg-gray-100 px-4 py-2 text-sm",
2087
- colors.googleButtonFocusRing
2105
+ "w-full inline-flex items-center justify-center font-medium rounded-md px-4 py-2 text-sm",
2106
+ buttonVariant("outline"),
2107
+ `${ui.background.surface} ${ui.text.label} disabled:opacity-50 disabled:cursor-not-allowed`
2088
2108
  ),
2089
2109
  children: [
2090
2110
  isLoading ? /* @__PURE__ */ jsxs(
@@ -2124,7 +2144,7 @@ function LoginPage({
2124
2144
  ) })
2125
2145
  ] })
2126
2146
  ] }),
2127
- showSignUp && /* @__PURE__ */ jsxs("p", { className: "text-center text-sm text-gray-600", children: [
2147
+ showSignUp && /* @__PURE__ */ jsxs("p", { className: `text-center text-sm ${ui.text.muted}`, children: [
2128
2148
  isSignUp ? text.alreadyHaveAccount : text.dontHaveAccount,
2129
2149
  " ",
2130
2150
  /* @__PURE__ */ jsx(
@@ -2132,7 +2152,7 @@ function LoginPage({
2132
2152
  {
2133
2153
  type: "button",
2134
2154
  onClick: () => setIsSignUp(!isSignUp),
2135
- className: cn("font-medium", colors.toggleLink),
2155
+ className: cn("font-medium", colors$1.toggleLink),
2136
2156
  children: isSignUp ? text.signIn : text.signUp
2137
2157
  }
2138
2158
  )
@@ -2147,13 +2167,25 @@ const EmptyState = ({
2147
2167
  onPress
2148
2168
  }) => {
2149
2169
  return /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col items-center justify-center px-8", children: [
2150
- /* @__PURE__ */ jsx("p", { className: "text-gray-500 dark:text-gray-400 text-center text-[15px] leading-relaxed mb-5", children: message }),
2170
+ /* @__PURE__ */ jsx(
2171
+ "p",
2172
+ {
2173
+ className: cn(
2174
+ ui.text.muted,
2175
+ "text-center text-[15px] leading-relaxed mb-5"
2176
+ ),
2177
+ children: message
2178
+ }
2179
+ ),
2151
2180
  /* @__PURE__ */ jsx(
2152
2181
  "button",
2153
2182
  {
2154
2183
  type: "button",
2155
2184
  onClick: onPress,
2156
- className: "bg-blue-600 hover:bg-blue-700 text-white rounded-md px-6 py-2 text-sm font-medium min-h-[44px]",
2185
+ className: cn(
2186
+ buttonVariant("primary"),
2187
+ "rounded-md px-6 py-2 text-sm font-medium min-h-[44px]"
2188
+ ),
2157
2189
  children: buttonLabel
2158
2190
  }
2159
2191
  )