@luxfi/core 4.3.11

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 (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'