@luxfi/core 4.3.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. package/components/access-code-input.tsx +71 -0
  2. package/components/auth/login-panel.tsx +80 -0
  3. package/components/chat-widget.tsx +77 -0
  4. package/components/commerce/bag-button.tsx +67 -0
  5. package/components/commerce/checkout-panel/close-button.tsx +23 -0
  6. package/components/commerce/checkout-panel/dt-bag-carousel.tsx +36 -0
  7. package/components/commerce/checkout-panel/dt-checkout-panel.tsx +68 -0
  8. package/components/commerce/checkout-panel/index.tsx +124 -0
  9. package/components/commerce/checkout-panel/links-row.tsx +21 -0
  10. package/components/commerce/checkout-panel/mb-checkout-panel.tsx +51 -0
  11. package/components/commerce/checkout-panel/steps-indicator.tsx +39 -0
  12. package/components/commerce/checkout-panel/thank-you.tsx +18 -0
  13. package/components/commerce/desktop-bag-popup.tsx +78 -0
  14. package/components/commerce/mobile-bag-drawer.tsx +51 -0
  15. package/components/commerce/mobile-menu-toggle-button.tsx +35 -0
  16. package/components/commerce/mobile-nav-menu.tsx +64 -0
  17. package/components/contact-dialog/contact-form.tsx +112 -0
  18. package/components/contact-dialog/disclaimer.tsx +13 -0
  19. package/components/contact-dialog/index.tsx +64 -0
  20. package/components/copyright.tsx +21 -0
  21. package/components/footer.tsx +78 -0
  22. package/components/header/desktop.tsx +54 -0
  23. package/components/header/index.tsx +26 -0
  24. package/components/header/mobile.tsx +161 -0
  25. package/components/header/theme-toggle.tsx +26 -0
  26. package/components/icons/bag-icon.tsx +10 -0
  27. package/components/icons/github.tsx +14 -0
  28. package/components/icons/index.tsx +35 -0
  29. package/components/icons/lux-logo.tsx +10 -0
  30. package/components/icons/secure-delivery.tsx +13 -0
  31. package/components/icons/social-icon.tsx +35 -0
  32. package/components/icons/social-svg.css +3 -0
  33. package/components/icons/youtube-logo.tsx +59 -0
  34. package/components/index.ts +26 -0
  35. package/components/logo.tsx +81 -0
  36. package/components/mini-chart/index.tsx +8 -0
  37. package/components/mini-chart/mini-chart-props.ts +44 -0
  38. package/components/mini-chart/mini-chart.tsx +85 -0
  39. package/components/mini-chart/wrapper.tsx +23 -0
  40. package/components/not-found/index.tsx +27 -0
  41. package/components/not-found/not-found-content.mdx +5 -0
  42. package/components/root-layout.tsx +71 -0
  43. package/components/scripts.tsx +23 -0
  44. package/conf/index.ts +50 -0
  45. package/environment.d.ts +6 -0
  46. package/next/analytics/fpixel.ts +16 -0
  47. package/next/analytics/google-analytics.ts +14 -0
  48. package/next/analytics/index.ts +3 -0
  49. package/next/analytics/pixel-analytics.tsx +55 -0
  50. package/next/determine-device-mw.ts +16 -0
  51. package/next/font/get-app-router-font-classes.ts +12 -0
  52. package/next/font/load-and-return-lux-next-fonts-on-import.ts +67 -0
  53. package/next/font/local/Druk-Wide-Bold.ttf +0 -0
  54. package/next/font/local/Druk-Wide-Medium.ttf +0 -0
  55. package/next/font/next-font-desc.ts +28 -0
  56. package/next/font/pages-router-font-vars.tsx +18 -0
  57. package/next/head-metadata/from-next/metadata-types.ts +158 -0
  58. package/next/head-metadata/from-next/opengraph-types.ts +267 -0
  59. package/next/head-metadata/from-next/twitter-types.ts +92 -0
  60. package/next/head-metadata/index.tsx +208 -0
  61. package/next/index.ts +1 -0
  62. package/package.json +72 -0
  63. package/server-actions/firebase-app.ts +14 -0
  64. package/server-actions/index.ts +5 -0
  65. package/server-actions/store-contact.ts +51 -0
  66. package/site-def/footer/community.tsx +67 -0
  67. package/site-def/footer/company.ts +37 -0
  68. package/site-def/footer/ecosystem.ts +37 -0
  69. package/site-def/footer/index.tsx +26 -0
  70. package/site-def/footer/legal.ts +28 -0
  71. package/site-def/footer/network.ts +45 -0
  72. package/site-def/footer/svg/warpcast-logo.svg +12 -0
  73. package/site-def/index.ts +3 -0
  74. package/site-def/main-nav.ts +35 -0
  75. package/site-def/site-def.ts +37 -0
  76. package/style/lux-colors.css +85 -0
  77. package/style/lux-global.css +19 -0
  78. package/tailwind/fontFamily.tailwind.lux.ts +18 -0
  79. package/tailwind/index.ts +2 -0
  80. package/tailwind/lux-tw-fonts.ts +40 -0
  81. package/tailwind/tailwind.config.lux-preset.ts +10 -0
  82. package/tsconfig.json +10 -0
  83. package/types/contact-info.ts +11 -0
  84. package/types/index.ts +1 -0
@@ -0,0 +1,51 @@
1
+ 'use server'
2
+
3
+ import {
4
+ getFirestore,
5
+ collection,
6
+ setDoc,
7
+ doc,
8
+ serverTimestamp,
9
+ type Firestore,
10
+ } from 'firebase/firestore'
11
+
12
+ import firebaseApp from './firebase-app'
13
+ import type { ContactInfo } from '../types'
14
+
15
+ let dbInstance: Firestore | undefined = undefined
16
+
17
+ const getDBInstance = (name: string): Firestore => {
18
+ if (!dbInstance) {
19
+ dbInstance = getFirestore(firebaseApp, name)
20
+ }
21
+ return dbInstance
22
+ }
23
+
24
+ const storeContact = async ( formData: ContactInfo, enclosure: any ) => {
25
+ const email = formData.email
26
+ const phone = formData.phone
27
+ const dbName = enclosure?.dbId
28
+ const tableName = enclosure?.listId
29
+
30
+ let error: any | null = null
31
+ const tableRef = collection(getDBInstance(dbName), tableName)
32
+
33
+ try {
34
+ await setDoc(doc(tableRef, email), {
35
+ email,
36
+ phone,
37
+ timestamp: serverTimestamp(),
38
+ })
39
+ return { success: !error, error, id: email }
40
+ }
41
+ catch (e) {
42
+ console.error('Error writing contact info to database: ', e)
43
+ error = e
44
+ }
45
+
46
+ return { success: !error, error }
47
+ }
48
+
49
+ export {
50
+ storeContact as default
51
+ }
@@ -0,0 +1,67 @@
1
+ import type { LinkDef } from '@hanzo/ui/types'
2
+ import { Icons } from '../../components'
3
+
4
+ // @ts-ignore (will build in project that has @svgr support)
5
+ import SVG_warp_logo from './svg/warpcast-logo.svg'
6
+
7
+ const SOC_ICON_SIZE = 18
8
+
9
+ export default [
10
+ {
11
+ title: 'Community',
12
+ href: '',
13
+ variant: 'linkFG',
14
+ },
15
+
16
+ {
17
+ title: 'Lux Channel',
18
+ href: 'https://warpcast.com/~/channel/lux',
19
+ icon: <SVG_warp_logo width={SOC_ICON_SIZE} height={SOC_ICON_SIZE} /> //<Icons.SocialIcon network='warpcast' size={SOC_ICON_SIZE} />
20
+ },
21
+ {
22
+ title: 'Lux Discussions',
23
+ href: 'https://github.com/orgs/luxfi/discussions',
24
+ icon: <Icons.SocialIcon network='github' size={SOC_ICON_SIZE} />
25
+ },
26
+
27
+ /*
28
+ {
29
+ title: 'Discord',
30
+ href: 'https://discord.gg/luxdefi',
31
+ external: true,
32
+ icon: <Icons.SocialIcon network='discord' size={SOC_ICON_SIZE} />
33
+ },
34
+ {
35
+ title: 'Telegram',
36
+ href: 'https://t.me/luxdefi',
37
+ external: true,
38
+ icon: <Icons.SocialIcon network='telegram' size={SOC_ICON_SIZE} />
39
+ },
40
+ */
41
+
42
+ {
43
+ title: '@luxdefi',
44
+ href: 'https://twitter.com/luxdefi',
45
+ icon: <Icons.SocialIcon network='x' size={SOC_ICON_SIZE} />
46
+ },
47
+ {
48
+ title: '@luxdefi',
49
+ href: 'https://facebook.com/luxdefi',
50
+ icon: <Icons.SocialIcon network='facebook' size={SOC_ICON_SIZE + 2} />
51
+ },
52
+ {
53
+ title: '@luxdefi',
54
+ href: 'https://www.instagram.com/luxdefi',
55
+ icon: <Icons.SocialIcon network='instagram' size={SOC_ICON_SIZE + 2} />
56
+ },
57
+ {
58
+ title: '@luxdefi',
59
+ href: 'https://linkedin.com/company/luxdefi',
60
+ icon: <Icons.SocialIcon network='linkedin' size={SOC_ICON_SIZE + 2} />
61
+ },
62
+ {
63
+ title: '@luxdefi',
64
+ href: 'https://www.youtube.com/@luxdefi',
65
+ icon: <Icons.SocialIcon network='youtube' size={SOC_ICON_SIZE + 2} />
66
+ },
67
+ ] satisfies LinkDef[]
@@ -0,0 +1,37 @@
1
+ import type { LinkDef } from '@hanzo/ui/types'
2
+
3
+ export default [
4
+ {
5
+ title: 'Company',
6
+ href: "https://lux.partners/",
7
+ variant: 'linkFG',
8
+ newTab: false,
9
+ },
10
+ {
11
+ title: 'About',
12
+ href: 'https://lux.partners',
13
+ newTab: false,
14
+ },
15
+ {
16
+ title: 'Brand',
17
+ href: 'https://drive.google.com/drive/folders/14OJtKLVakGY6883XO9yGbiHtlFxQUUm5?usp=share_link',
18
+ },
19
+ {
20
+ title: 'Careers',
21
+ href: 'https://docs.google.com/document/d/1SCt0Hg7EIs06TootKCA1am1xo4mcXoKF/edit#heading=h.30j0zll',
22
+ newTab: true,
23
+ },
24
+ {
25
+ title: 'Partnerships',
26
+ href: 'https://apply.lux.partners/',
27
+ newTab: false,
28
+ },
29
+ {
30
+ title: 'Press',
31
+ href: 'mailto:ai@lux.partners?subject=%E2%96%BC%20Press',
32
+ },
33
+ {
34
+ title: 'Help',
35
+ href: 'mailto:ai@lux.partners?subject=%E2%96%BC%20Help',
36
+ },
37
+ ] satisfies LinkDef[]
@@ -0,0 +1,37 @@
1
+ import type { LinkDef } from '@hanzo/ui/types'
2
+
3
+ export default [
4
+ {
5
+ title: 'Ecosystem',
6
+ href: 'https://lux.link',
7
+ variant: 'linkFG'
8
+ },
9
+ {
10
+ title: 'Lux AI',
11
+ href: 'https://lux.chat',
12
+ },
13
+ {
14
+ title: 'Lux Credit',
15
+ href: 'https://lux.credit',
16
+ },
17
+ {
18
+ title: 'Lux Exchange',
19
+ href: 'https://lux.exchange',
20
+ },
21
+ {
22
+ title: 'Lux Finance',
23
+ href: 'https://lux.finance',
24
+ },
25
+ {
26
+ title: 'Lux Market',
27
+ href: 'https://lux.market',
28
+ },
29
+ {
30
+ title: 'Lux Shop',
31
+ href: 'https://lux.shop',
32
+ },
33
+ {
34
+ title: 'Lux Quest',
35
+ href: 'https://lux.quest',
36
+ },
37
+ ] satisfies LinkDef[]
@@ -0,0 +1,26 @@
1
+ import type { LinkDef } from '@hanzo/ui/types'
2
+
3
+ import ecosystem from './ecosystem'
4
+ import network from './network'
5
+ import company from './company'
6
+ import community from './community'
7
+ import { legal, legalColumn } from './legal'
8
+
9
+
10
+ const standard = [
11
+ ecosystem,
12
+ network,
13
+ company,
14
+ community,
15
+ ] satisfies LinkDef[][]
16
+
17
+ export {
18
+ ecosystem,
19
+ network,
20
+ company,
21
+ community,
22
+ legal,
23
+ legalColumn,
24
+ standard
25
+ }
26
+
@@ -0,0 +1,28 @@
1
+ import type { LinkDef } from '@hanzo/ui/types'
2
+
3
+ const legal: LinkDef[] = [
4
+ {
5
+ title: 'Terms and Conditions',
6
+ href: '/terms',
7
+ newTab: true,
8
+ },
9
+ {
10
+ title: 'Privacy Policy',
11
+ href: '/privacy',
12
+ newTab: true,
13
+ },
14
+ ]
15
+
16
+ const title: LinkDef =
17
+ {
18
+ title: 'Legal',
19
+ href: '',
20
+ variant: 'linkFG',
21
+ }
22
+
23
+ const legalColumn: LinkDef[] = [title, ...legal]
24
+
25
+ export {
26
+ legal,
27
+ legalColumn
28
+ }
@@ -0,0 +1,45 @@
1
+ import type { LinkDef } from '@hanzo/ui/types'
2
+
3
+ export default [
4
+ {
5
+ title: 'Network',
6
+ href: "https://lux.network/",
7
+ variant: 'linkFG'
8
+ },
9
+ {
10
+ title: 'Lux Bridge',
11
+ href: "https://bridge.lux.network/",
12
+ },
13
+ {
14
+ title: 'Lux Explorer',
15
+ href: "https://explore.lux.network/",
16
+ },
17
+ {
18
+ title: 'Lux Wallet',
19
+ href: "https://wallet.lux.network/",
20
+ },
21
+ {
22
+ title: 'Lux Safe',
23
+ href: "https://safe.lux.network/",
24
+ },
25
+ {
26
+ title: 'Lux Validator',
27
+ href: "https://lux.network/validator",
28
+ },
29
+ {
30
+ title: 'Lux Coin',
31
+ href: "https://lux.network/coin",
32
+ },
33
+ {
34
+ title: 'Governance',
35
+ href: "https://lux.vote",
36
+ },
37
+ {
38
+ title: 'Open Source',
39
+ href: 'https://github.com/luxfi',
40
+ },
41
+ {
42
+ title: 'Launch Subnet',
43
+ href: 'https://docs.lux.network/build/subnet/hello-subnet',
44
+ },
45
+ ] satisfies LinkDef[]
@@ -0,0 +1,12 @@
1
+ <svg viewBox="0 0 1260 1260" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_1_2)">
3
+ <!-- path d="M947.747 1259.61H311.861C139.901 1259.61 0 1119.72 0 947.752V311.871C0 139.907 139.901 0.00541362 311.861 0.00541362H947.747C1119.71 0.00541362 1259.61 139.907 1259.61 311.871V947.752C1259.61 1119.72 1119.71 1259.61 947.747 1259.61Z" fill="#472A91"></path -->
4
+ <path d="M826.513 398.633L764.404 631.889L702.093 398.633H558.697L495.789 633.607L433.087 398.633H269.764L421.528 914.36H562.431L629.807 674.876L697.181 914.36H838.388L989.819 398.633H826.513Z" fill="currentColor">
5
+ </path>
6
+ </g>
7
+ <defs>
8
+ <clipPath id="clip0_1_2">
9
+ <rect width="1259.61" height="1259.61" fill="white"></rect>
10
+ </clipPath>
11
+ </defs>
12
+ </svg>
@@ -0,0 +1,3 @@
1
+ export * as footer from './footer' // so footer.standard, footer.community, etc
2
+ export { default as mainNav } from './main-nav'
3
+ export type { default as SiteDef } from './site-def'
@@ -0,0 +1,35 @@
1
+ import type { LinkDef } from '@hanzo/ui/types'
2
+
3
+ export default [
4
+ {
5
+ title: "AI",
6
+ href: "https://lux.chat",
7
+ newTab: false,
8
+ },
9
+ {
10
+ title: "Credit",
11
+ href: "https://lux.credit",
12
+ newTab: false,
13
+ },
14
+ {
15
+ title: "Exchange",
16
+ href: "https://lux.exchange",
17
+ newTab: false,
18
+ },
19
+ {
20
+ title: "Finance",
21
+ href: "https://lux.finance",
22
+ newTab: false,
23
+ },
24
+ {
25
+ title: "Market",
26
+ href: "https://lux.market",
27
+ newTab: false,
28
+ },
29
+ {
30
+ title: "Network",
31
+ href: "https://lux.network",
32
+ newTab: false,
33
+ },
34
+ ] satisfies LinkDef[]
35
+
@@ -0,0 +1,37 @@
1
+ import React from 'react'
2
+ import type { LinkDef } from '@hanzo/ui/types'
3
+
4
+ interface SiteDef {
5
+ /** url of this site. All nav links in the system will show it in 'current' state */
6
+ currentAs?: string
7
+ nav: {
8
+ /** common elements (will auto-select currentAs if it's provide) */
9
+ /** optional feature element. right-most after 'elements' (any min-w is ignored) */
10
+ common: LinkDef[]
11
+ featured?: LinkDef[]
12
+ auth?: boolean
13
+ cart?: React.ReactNode
14
+ }
15
+
16
+ /**
17
+ * Array of columns, each of which itself is an array of links
18
+ * (or "title defs" where href='' and variant='linkFG')
19
+ * Common use case: To render a site-specific first column:
20
+ * {
21
+ * footer[myColumn, ...commonColumnsFromUi]
22
+ * }
23
+ * see: @hanzo/ui/siteDef/footer (default export)
24
+ * or @hanzo/ui/siteDef/footer/common
25
+ */
26
+ footer: LinkDef[][]
27
+
28
+ /** optional override of default 'above copyright' horizantal links */
29
+ /** default (undefined or absent): @ui/sideDef/footer/legal are rendered */
30
+ /** [] renders nothing above the copyright */
31
+ aboveCopyright?: LinkDef[]
32
+
33
+ /** any site-specific stuff we'd like access to (link urls, etc) */
34
+ ext?: any
35
+ }
36
+
37
+ export { type SiteDef as default }
@@ -0,0 +1,85 @@
1
+ @tailwind base;
2
+ /* see https://stackoverflow.com/questions/69746121/using-nextjs-how-can-you-import-in-css-using-tailwind-css */
3
+
4
+ @layer base {
5
+
6
+ :root, .hanzo-ui-light-theme {
7
+ --hz-ui-fg-0: hsl(0 0% 0%);
8
+ --hz-ui-fg-body: hsl(0 0% 10%);
9
+ --hz-ui-fg-1: hsl(0 0% 20%);
10
+ --hz-ui-fg-2: hsl(0 0% 35%);
11
+ --hz-ui-fg-3: hsl(0 0% 50%);
12
+ --hz-ui-fg-4: hsl(0 0% 70%);
13
+ --hz-ui-fg-5: hsl(0 0% 90%);
14
+
15
+ --hz-ui-bg-0: hsl(0 0% 100%);
16
+ --hz-ui-bg-1: hsl(0 0% 90%);
17
+ --hz-ui-bg-2: hsl(0 0% 75%);
18
+ --hz-ui-bg-3: hsl(0 0% 55%);
19
+
20
+ --hz-ui-bg-overlay: hsla(0 0% 100% 0.60);
21
+
22
+ --hz-ui-bg-inverted: var(--hz-ui-fg-0);
23
+ --hz-ui-bg-inverted-hover: hsla(0, 0%, 0%, 0.85);
24
+
25
+ --hz-ui-fg-inverted: var(--hz-ui-bg-0);
26
+
27
+ --hz-ui-secondary-0: hsl(262, 7%, 82%);
28
+ --hz-ui-secondary-1: hsl(258, 7%, 72%);
29
+ --hz-ui-secondary-2: hsl(254, 7%, 62%);
30
+ --hz-ui-secondary-3: hsl(250, 5%, 53%);
31
+
32
+ --hz-ui-primary: var(--hz-ui-bg-inverted);
33
+ --hz-ui-primary-hover: var(--hz-ui-bg-inverted-hover);
34
+ --hz-ui-primary-fg: var(--hz-ui-fg-inverted);
35
+
36
+ --hz-ui-secondary: var(--hz-ui-secondary-0);
37
+ --hz-ui-secondary-hover: var(--hz-ui-secondary-2);
38
+ --hz-ui-secondary-fg: var(--hz-ui-bg-0);
39
+
40
+ --hz-ui-nav: var(--hz-ui-fg-4);
41
+ --hz-ui-nav-current: var(--hz-ui-fg-0);
42
+ --hz-ui-nav-hover: var(--hz-ui-fg-0);
43
+
44
+ --hz-ui-destructive: hsl(0 62.8% 45%);
45
+ --hz-ui-destructive-hover: hsl(0 62.8% 25%);
46
+ --hz-ui-destructive-fg: hsl(0 0% 100%);
47
+
48
+ --hz-ui-ring: var(--hz-ui-fg-1);
49
+
50
+ --hz-ui-radius: 0.5rem;
51
+ }
52
+
53
+ .hanzo-ui-dark-theme {
54
+
55
+ --hz-ui-fg-0: hsl(0 0% 100%);
56
+ --hz-ui-fg-body: hsl(0, 0%, 97%);
57
+ --hz-ui-fg-1: hsl(0 0% 85%);
58
+ --hz-ui-fg-2: hsl(0 0% 70%);
59
+ --hz-ui-fg-3: hsl(0 0% 55%);
60
+ --hz-ui-fg-4: hsl(0 0% 40%);
61
+ --hz-ui-fg-5: hsl(0 0% 25%);
62
+
63
+ --hz-ui-bg-inverted: var(--hz-ui-fg-0);
64
+ --hz-ui-bg-inverted-hover: hsla(0, 0%, 100%, 0.85);
65
+
66
+ --hz-ui-bg-3: hsl(0 0% 25%);
67
+ --hz-ui-bg-2: hsl(0 0% 18%);
68
+ --hz-ui-bg-1: hsl(0 0% 12%);
69
+ --hz-ui-bg-0: hsl(0 0% 0%);
70
+
71
+ --hz-ui-bg-overlay: hsla(0 0% 0% 0.60);
72
+
73
+ --hz-ui-fg-inverted: var(--hz-ui-bg-0);
74
+
75
+ --hz-ui-secondary-0: hsl(250, 5%, 53%);
76
+ --hz-ui-secondary-1: hsl(254, 7%, 62%);
77
+ --hz-ui-secondary-2: hsl(258, 7%, 72%);
78
+ --hz-ui-secondary-3: hsl(262, 7%, 82%);
79
+
80
+ --hz-ui-secondary-fg: var(--hz-ui-fg-0);
81
+
82
+ }
83
+
84
+ }
85
+
@@ -0,0 +1,19 @@
1
+ /* Note, preflight is applied first:
2
+ https://unpkg.com/tailwindcss@3.3.5/src/css/preflight.css
3
+ */
4
+ @import "tailwindcss/base";
5
+
6
+ /* see https://stackoverflow.com/questions/69746121/using-nextjs-how-can-you-import-in-css-using-tailwind-css */
7
+ @import "@hanzo/ui/style/hanzo-common";
8
+ @import "lux-colors";
9
+
10
+ @import "tailwindcss/components";
11
+ @import "tailwindcss/utilities";
12
+
13
+ .nextjs-toast-errors-parent {
14
+ display: none;
15
+ }
16
+
17
+ .font-heading, h1, h2, h3 {
18
+ @apply uppercase;
19
+ }
@@ -0,0 +1,18 @@
1
+ import type { TwFontDesc } from '@hanzo/ui/tailwind'
2
+
3
+ import luxTwFonts from './lux-tw-fonts'
4
+
5
+ export const fontFamily = (ignoreTheme: any): {
6
+ [key: string]: string[]
7
+ } => {
8
+
9
+ let result: any = {}
10
+ luxTwFonts.forEach((font: TwFontDesc) => {
11
+ result[font.twName] = font.fontFamily
12
+ // eg: heading: ['var(--font-druk-text-wide)']
13
+ })
14
+
15
+ return result as {
16
+ [key: string]: string[]
17
+ }
18
+ }
@@ -0,0 +1,2 @@
1
+
2
+ export {default as preset} from './tailwind.config.lux-preset'
@@ -0,0 +1,40 @@
1
+ import type { TwFontDesc } from '@hanzo/ui/tailwind'
2
+
3
+
4
+ /* NOTE: /next/load-and-return....ts depends on this file! */
5
+
6
+ export default [
7
+ {
8
+ fontFamily: ['var(--font-inter)'], // do not provide fall-backs due to next bug
9
+ cssVar: '--font-inter',
10
+ twName: 'sans'
11
+ },
12
+ {
13
+ fontFamily: ['var(--font-druk-text-wide)'], // do not provide fall-backs due to next bug
14
+ cssVar: '--font-druk-text-wide',
15
+ twName: 'nav'
16
+ },
17
+ {
18
+ fontFamily: ['var(--font-druk-wide)'], // do not provide fall-backs due to next bug
19
+ cssVar: '--font-druk-wide',
20
+ twName: 'heading'
21
+ },
22
+ {
23
+ twName: 'serif',
24
+ fontFamily: ['ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times']
25
+ },
26
+ {
27
+ twName: 'mono',
28
+ fontFamily: [
29
+ 'ui-monospace',
30
+ 'SFMono-Regular',
31
+ 'Menlo',
32
+ 'Monaco',
33
+ 'Consolas',
34
+ '"Liberation Mono"',
35
+ '"Courier New"',
36
+ 'monospace',
37
+ ]
38
+ }
39
+
40
+ ] as TwFontDesc[]
@@ -0,0 +1,10 @@
1
+ import type { Config } from 'tailwindcss'
2
+ import { preset } from '@hanzo/ui/tailwind'
3
+ import { fontFamily } from './fontFamily.tailwind.lux'
4
+
5
+ export default {
6
+ presets: [preset],
7
+ content: [],
8
+ theme: { fontFamily }
9
+ } satisfies Config
10
+
package/tsconfig.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../tsconfig.hanzo-modules.base.json",
3
+ "include": [
4
+ "**/*.ts",
5
+ "**/*.tsx",
6
+ ],
7
+ "exclude": [
8
+ "node_modules",
9
+ ],
10
+ }
@@ -0,0 +1,11 @@
1
+ interface ContactInfo {
2
+ email: string
3
+ phone?: string
4
+ }
5
+
6
+ type ContactInfoFields = keyof ContactInfo
7
+
8
+ export {
9
+ type ContactInfo,
10
+ type ContactInfoFields
11
+ }
package/types/index.ts ADDED
@@ -0,0 +1 @@
1
+ export type { ContactInfo, ContactInfoFields } from './contact-info'