@hanzo/ui 1.0.15 → 2.0.0

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 (78) hide show
  1. package/blocks/components/card-block.tsx +1 -1
  2. package/package.json +1 -1
  3. package/primitives/icons/index.ts +18 -0
  4. package/primitives/index.ts +1 -0
  5. package/primitives/toggle-group.tsx +1 -1
  6. package/primitives/youtube-embed.tsx +1 -1
  7. package/style/hanzo-default-colors.css +2 -2
  8. package/{context-providers → style}/theme-provider.tsx +2 -2
  9. package/tailwind/fontFamily.tailwind.ts +7 -0
  10. package/tailwind/{fonts.tailwind.ts → fontSize.tailwind.ts} +1 -19
  11. package/tailwind/index.ts +8 -5
  12. package/tailwind/{tailwind.config.base.js → tailwind.config.hanzo-preset.js} +3 -2
  13. package/tailwind/typo-plugin/get-plugin-styles.js +42 -42
  14. package/tailwind/typography-test.mdx +1 -1
  15. package/types/index.ts +5 -15
  16. package/assets/lux-site-icons/android-chrome-192x192.png +0 -0
  17. package/assets/lux-site-icons/android-chrome-512x512.png +0 -0
  18. package/assets/lux-site-icons/apple-touch-icon.png +0 -0
  19. package/assets/lux-site-icons/favicon-16x16.png +0 -0
  20. package/assets/lux-site-icons/favicon-32x32.png +0 -0
  21. package/assets/lux-site-icons/favicon.ico +0 -0
  22. package/assets/standard-docs/LUX-NFT-Terms-and-Conditions.pdf +0 -0
  23. package/assets/standard-docs/LUX-Privacy-Policy.pdf +0 -0
  24. package/common/chat-widget.tsx +0 -75
  25. package/common/contact-dialog/contact-form.tsx +0 -111
  26. package/common/contact-dialog/disclaimer.tsx +0 -13
  27. package/common/contact-dialog/index.tsx +0 -48
  28. package/common/copyright.tsx +0 -21
  29. package/common/drawer-menu.tsx +0 -54
  30. package/common/footer.tsx +0 -77
  31. package/common/head-metadata/from-next/metadata-types.ts +0 -158
  32. package/common/head-metadata/from-next/opengraph-types.ts +0 -267
  33. package/common/head-metadata/from-next/twitter-types.ts +0 -92
  34. package/common/head-metadata/index.tsx +0 -208
  35. package/common/header/index.tsx +0 -66
  36. package/common/header/mobile-nav.tsx +0 -72
  37. package/common/header/theme-toggle.tsx +0 -26
  38. package/common/icons/index.tsx +0 -34
  39. package/common/icons/lux-logo.tsx +0 -10
  40. package/common/icons/secure-delivery.tsx +0 -13
  41. package/common/icons/social-icon.tsx +0 -35
  42. package/common/index.ts +0 -14
  43. package/common/logo.tsx +0 -71
  44. package/common/mini-chart/index.tsx +0 -8
  45. package/common/mini-chart/mini-chart-props.ts +0 -44
  46. package/common/mini-chart/mini-chart.tsx +0 -76
  47. package/common/mini-chart/wrapper.tsx +0 -23
  48. package/context-providers/index.ts +0 -1
  49. package/next/README.md +0 -11
  50. package/next/analytics/fpixel.ts +0 -18
  51. package/next/analytics/pixel-analytics.tsx +0 -55
  52. package/next/determine-device-middleware.ts +0 -16
  53. package/next/fonts/DrukTextWide-Bold-Trial.otf +0 -0
  54. package/next/fonts/DrukTextWide-Heavy-Trial.otf +0 -0
  55. package/next/fonts/DrukTextWide-Medium-Trial.otf +0 -0
  56. package/next/fonts/DrukWide-Bold-Trial.otf +0 -0
  57. package/next/fonts/DrukWide-Heavy-Trial.otf +0 -0
  58. package/next/fonts/DrukWide-Medium-Trial.otf +0 -0
  59. package/next/get-app-router-font-classes.ts +0 -12
  60. package/next/load-and-return-lux-next-fonts-on-import.ts +0 -94
  61. package/next/next-font-desc.ts +0 -28
  62. package/next/not-found-content.mdx +0 -5
  63. package/next/not-found.tsx +0 -23
  64. package/next/pages-router-font-vars.tsx +0 -18
  65. package/next/root-layout.tsx +0 -62
  66. package/siteDef/footer/community.tsx +0 -67
  67. package/siteDef/footer/company.ts +0 -37
  68. package/siteDef/footer/ecosystem.ts +0 -37
  69. package/siteDef/footer/index.tsx +0 -26
  70. package/siteDef/footer/legal.ts +0 -28
  71. package/siteDef/footer/network.ts +0 -37
  72. package/siteDef/footer/svg/warpcast-logo.svg +0 -12
  73. package/siteDef/main-nav.ts +0 -35
  74. package/style/social-svg.css +0 -3
  75. package/tailwind/lux-tw-fonts.ts +0 -37
  76. package/types/site-def.ts +0 -36
  77. /package/{common → primitives}/icons/github.tsx +0 -0
  78. /package/{common → primitives}/icons/youtube-logo.tsx +0 -0
@@ -1,48 +0,0 @@
1
- 'use client'
2
- import React from 'react'
3
-
4
- import type { ButtonModalProps} from '../../types'
5
-
6
- import {
7
- Button,
8
- Dialog,
9
- DialogContent,
10
- DialogDescription,
11
- DialogHeader,
12
- DialogTitle,
13
- DialogTrigger,
14
- } from '../../primitives'
15
-
16
- import ContactForm from './contact-form'
17
- import Disclaimer from './disclaimer'
18
-
19
- const ContactDialog: React.FC<ButtonModalProps> = ({
20
- open,
21
- onOpenChange,
22
- buttonText,
23
- buttonProps,
24
- title,
25
- byline,
26
- action,
27
- actionEnclosure
28
- }) => (
29
- <Dialog open={open} onOpenChange={onOpenChange} >
30
- <DialogTrigger asChild>
31
- <Button {...buttonProps} >{buttonText}</Button>
32
- </DialogTrigger>
33
- <DialogContent className="sm:max-w-[500px] p-0 gap-0 bg-background border">
34
- <DialogHeader className='py-6 text-foreground'>
35
- <DialogTitle className='text-4xl font-heading text-center text-inherit'>{title}</DialogTitle>
36
- {byline && (<DialogDescription className='text-inherit text-xl text-center'>{byline} </DialogDescription>)}
37
- </DialogHeader>
38
- <div className='p-8 rounded-e-lg flex flex-col justify-start items-center'>
39
- <ContactForm onSubmit={action} enclosure={actionEnclosure}/>
40
- <div className='text-muted-1 text-xs mt-4' >
41
- <Disclaimer />
42
- </div>
43
- </div>
44
- </DialogContent>
45
- </Dialog>
46
- )
47
-
48
- export default ContactDialog
@@ -1,21 +0,0 @@
1
- import React from 'react'
2
-
3
- const FIRST = 2020
4
-
5
- const Copyright: React.FC<{
6
- className?: string
7
- }> = ({
8
- className=''
9
- }) => {
10
-
11
- const year = new Date().getFullYear()
12
- const yearString = (year > FIRST) ? `${FIRST} - ${year}` : FIRST.toString()
13
-
14
- return (
15
- <div className={className}>
16
- {`Copyright © ${yearString}`}&nbsp;<br className='sm:hidden'/>Lux Partners Ltd.&nbsp;<br className='md:hidden'/>&nbsp;All rights reserved.
17
- </div>
18
- )
19
- }
20
-
21
- export default Copyright
@@ -1,54 +0,0 @@
1
- 'use client'
2
- import React, { type PropsWithChildren, type ReactNode } from 'react'
3
-
4
- import { X as LucideX} from 'lucide-react'
5
-
6
- import Logo from './logo'
7
- import { Sheet, SheetContent, SheetTrigger } from '../primitives/sheet'
8
-
9
- const DrawerMenu: React.FC<PropsWithChildren & {
10
- trigger: ReactNode
11
- className?: string
12
- showLogo?: boolean,
13
- propogate?: boolean
14
- asChild?: boolean
15
- }> = ({
16
- trigger,
17
- children,
18
- className='',
19
- showLogo=true,
20
- propogate=true,
21
- asChild=false
22
- }) => {
23
-
24
- const [open, setOpen] = React.useState(false)
25
-
26
- const onAction = () => { setOpen(false) }
27
-
28
- // https://stackoverflow.com/a/49052730/11645689
29
- const updatedChildren = React.Children.map(
30
- children,
31
- (child) => (React.cloneElement(
32
- child as any, { onAction }
33
- ))
34
- )
35
-
36
- return (
37
- <Sheet open={open} onOpenChange={setOpen} >
38
- <SheetTrigger className={className} asChild={asChild}>
39
- {trigger}
40
- </SheetTrigger>
41
- <SheetContent
42
- side="right"
43
- closeButtonClass='text-inherit opacity-90'
44
- onClick={propogate ? onAction : () => {}}
45
- closeElement={<LucideX className='h-6 w-6 text-inherit'/>}
46
- centerElement={showLogo ? <Logo size='xs' className='' /> : null}
47
- >
48
- {updatedChildren}
49
- </SheetContent>
50
- </Sheet>
51
- )
52
- }
53
-
54
- export default DrawerMenu
package/common/footer.tsx DELETED
@@ -1,77 +0,0 @@
1
- import React from 'react'
2
-
3
- import type { LinkDef, SiteDef } from '../types'
4
- import { Copyright } from '.'
5
- import { NavItems } from '../primitives'
6
- import { legal } from '../siteDef/footer/legal'
7
-
8
- import Logo from './logo'
9
- import { cn } from '../util'
10
-
11
- const Footer: React.FC<{
12
- siteDef: SiteDef,
13
- className?: string,
14
- noHorizPadding?: boolean
15
- }> = ({
16
- siteDef,
17
- className='',
18
- noHorizPadding=false
19
- }) => {
20
-
21
- const { footer, aboveCopyright } = siteDef
22
- const smGridCols = Math.floor(footer.length/2)
23
- const smGridColsClx = `sm:grid-cols-${smGridCols} `
24
- const _aboveCopyright = (typeof aboveCopyright === 'undefined') ? legal : aboveCopyright
25
-
26
- return (
27
- <footer className={cn('grow flex flex-col justify-end gap-6 pb-[2vh]', className)}>
28
- <div className={
29
- (noHorizPadding ? '' : 'px-5 md:px-8 ') +
30
- 'grid grid-cols-2 gap-4 gap-y-6 md:gap-x-6 lg:gap-8 ' + smGridColsClx +
31
- 'md:w-full sm:justify-items-center md:mx-0 lg:w-full max-w-screen-2xl ' +
32
- 'md:flex md:flex-row md:justify-between '
33
- }>
34
- <div className='hidden lg:flex flex-col' key={0}>
35
- <Logo size='md' />
36
- </div>
37
- {footer.map((defs: LinkDef[], index) => {
38
-
39
- const xsColSpanClx = ((index === footer.length - 1) && (footer.length % 2 === 1)) ?
40
- 'xs:col-span-2 xs:mx-auto md:col-span-1 md:mx-0 ' : ''
41
-
42
- return (
43
- <NavItems
44
- items={defs}
45
- currentAs={siteDef.currentAs}
46
- as='nav'
47
- className={cn('sm:min-w-[150px] md:min-w-0 flex flex-col justify-start items-start ' +
48
- 'gap-[11px] sm:gap-[12px] md:gap-[15px] ',
49
- xsColSpanClx
50
- )}
51
- key={index + 1}
52
- itemClx={(def: LinkDef) => ((def.variant === 'linkFG') ?
53
- 'font-nav text-[15px]/[1.3] font-medium text-foreground tracking-normal'
54
- :
55
- 'text-[15px]/[1.1] font-normal tracking-[0.2px] text-muted-1'
56
- )}
57
- />
58
- )
59
- })}
60
- </div>
61
- <div className='md:mt-[2vh]'>
62
- {_aboveCopyright.length > 0 && (
63
- <NavItems
64
- items={_aboveCopyright}
65
- as='div'
66
- className={'flex flex-row justify-center gap-4 mb-2'}
67
- itemClx={'text-sm text-center text-muted-2 underline hover:text-foreground'}
68
- />
69
- )}
70
- <Copyright className='text-sm text-center text-muted-3'/>
71
- </div>
72
- </footer>
73
- )
74
- }
75
-
76
- export default Footer
77
- // flex flex-col justify-between gap-6
@@ -1,158 +0,0 @@
1
- /**
2
- *
3
- * Metadata types
4
- *
5
- */
6
-
7
- export interface DeprecatedMetadataFields {
8
- /**
9
- * Deprecated options that have a preferred method
10
- * @deprecated Use appWebApp to configure apple-mobile-web-app-capable which provides
11
- * @see https://www.appsloveworld.com/coding/iphone/11/difference-between-apple-mobile-web-app-capable-and-apple-touch-fullscreen-ipho
12
- */
13
- 'apple-touch-fullscreen'?: never
14
-
15
- /**
16
- * Obsolete since iOS 7.
17
- * @see https://web.dev/apple-touch-icon/
18
- * @deprecated use icons.apple or instead
19
- */
20
- 'apple-touch-icon-precomposed'?: never
21
- }
22
-
23
- export type TemplateString =
24
- | DefaultTemplateString
25
- | AbsoluteTemplateString
26
- | AbsoluteString
27
- export type DefaultTemplateString = {
28
- default: string
29
- template: string
30
- }
31
- export type AbsoluteTemplateString = {
32
- absolute: string
33
- template: string | null
34
- }
35
- export type AbsoluteString = {
36
- absolute: string
37
- }
38
-
39
- export type Author = {
40
- // renders as <link rel="author"...
41
- url?: string | URL
42
- // renders as <meta name="author"...
43
- name?: string
44
- }
45
-
46
- // does not include "unsafe-URL". to use this users should
47
- // use '"unsafe-URL" as ReferrerEnum'
48
- export type ReferrerEnum =
49
- | 'no-referrer'
50
- | 'origin'
51
- | 'no-referrer-when-downgrade'
52
- | 'origin-when-cross-origin'
53
- | 'same-origin'
54
- | 'strict-origin'
55
- | 'strict-origin-when-cross-origin'
56
-
57
- export type ColorSchemeEnum =
58
- | 'normal'
59
- | 'light'
60
- | 'dark'
61
- | 'light dark'
62
- | 'dark light'
63
- | 'only light'
64
-
65
- type RobotsInfo = {
66
- // all and none will be inferred from index/follow boolean options
67
- index?: boolean
68
- follow?: boolean
69
-
70
- /** @deprecated set index to false instead */
71
- noindex?: never
72
- /** @deprecated set follow to false instead */
73
- nofollow?: never
74
-
75
- noarchive?: boolean
76
- nosnippet?: boolean
77
- noimageindex?: boolean
78
- nocache?: boolean
79
- notranslate?: boolean
80
- indexifembedded?: boolean
81
- nositelinkssearchbox?: boolean
82
- unavailable_after?: string
83
- 'max-video-preview'?: number | string
84
- 'max-image-preview'?: 'none' | 'standard' | 'large'
85
- 'max-snippet'?: number
86
- }
87
- export type Robots = RobotsInfo & {
88
- // if you want to specify an alternate robots just for google
89
- googleBot?: string | RobotsInfo
90
- }
91
-
92
- export type ResolvedRobots = {
93
- basic: string | null
94
- googleBot: string | null
95
- }
96
-
97
- export type IconURL = string | URL
98
- export type Icon = IconURL | IconDescriptor
99
- export type IconDescriptor = {
100
- url: string | URL
101
- type?: string
102
- sizes?: string
103
- color?: string
104
- /** defaults to rel="icon" unless superseded by Icons map */
105
- rel?: string
106
- media?: string
107
- /**
108
- * @see https://developer.mozilla.org/docs/Web/API/HTMLImageElement/fetchPriority
109
- */
110
- fetchPriority?: 'high' | 'low' | 'auto'
111
- }
112
-
113
- export type Icons = {
114
- /** rel="icon" */
115
- icon?: Icon | Icon[]
116
- /** rel="shortcut icon" */
117
- shortcut?: Icon | Icon[]
118
- /**
119
- * @see https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html
120
- * rel="apple-touch-icon"
121
- */
122
- apple?: Icon | Icon[]
123
- /** rel inferred from descriptor, defaults to "icon" */
124
- other?: IconDescriptor | IconDescriptor[]
125
- }
126
-
127
- export type Verification = {
128
- google?: null | string | number | (string | number)[]
129
- yahoo?: null | string | number | (string | number)[]
130
- yandex?: null | string | number | (string | number)[]
131
- me?: null | string | number | (string | number)[]
132
- // if you ad-hoc additional verification
133
- other?: {
134
- [name: string]: string | number | (string | number)[]
135
- }
136
- }
137
-
138
- export type ResolvedVerification = {
139
- google?: null | (string | number)[]
140
- yahoo?: null | (string | number)[]
141
- yandex?: null | (string | number)[]
142
- me?: null | (string | number)[]
143
- other?: {
144
- [name: string]: (string | number)[]
145
- }
146
- }
147
-
148
- export type ResolvedIcons = {
149
- icon: IconDescriptor[]
150
- apple: IconDescriptor[]
151
- shortcut?: IconDescriptor[]
152
- other?: IconDescriptor[]
153
- }
154
-
155
- export type ThemeColorDescriptor = {
156
- color: string
157
- media?: string
158
- }
@@ -1,267 +0,0 @@
1
- import type { AbsoluteTemplateString, TemplateString } from './metadata-types'
2
-
3
- export type OpenGraphType =
4
- | 'article'
5
- | 'book'
6
- | 'music.song'
7
- | 'music.album'
8
- | 'music.playlist'
9
- | 'music.radio_station'
10
- | 'profile'
11
- | 'website'
12
- | 'video.tv_show'
13
- | 'video.other'
14
- | 'video.movie'
15
- | 'video.episode'
16
-
17
- export type OpenGraph =
18
- | OpenGraphWebsite
19
- | OpenGraphArticle
20
- | OpenGraphBook
21
- | OpenGraphProfile
22
- | OpenGraphMusicSong
23
- | OpenGraphMusicAlbum
24
- | OpenGraphMusicPlaylist
25
- | OpenGraphRadioStation
26
- | OpenGraphVideoMovie
27
- | OpenGraphVideoEpisode
28
- | OpenGraphVideoTVShow
29
- | OpenGraphVideoOther
30
- | OpenGraphMetadata
31
-
32
- // update this type to reflect actual locales
33
- type Locale = string
34
-
35
- type OpenGraphMetadata = {
36
- determiner?: 'a' | 'an' | 'the' | 'auto' | ''
37
- title?: string | TemplateString
38
- description?: string
39
- emails?: string | Array<string>
40
- phoneNumbers?: string | Array<string>
41
- faxNumbers?: string | Array<string>
42
- siteName?: string
43
- locale?: Locale
44
- alternateLocale?: Locale | Array<Locale>
45
- images?: OGImage | Array<OGImage>
46
- audio?: OGAudio | Array<OGAudio>
47
- videos?: OGVideo | Array<OGVideo>
48
- url?: string | URL
49
- countryName?: string
50
- ttl?: number
51
- }
52
- export type OpenGraphWebsite = OpenGraphMetadata & {
53
- type: 'website'
54
- }
55
- type OpenGraphArticle = OpenGraphMetadata & {
56
- type: 'article'
57
- publishedTime?: string // datetime
58
- modifiedTime?: string // datetime
59
- expirationTime?: string // datetime
60
- authors?: null | string | URL | Array<string | URL>
61
- section?: null | string
62
- tags?: null | string | Array<string>
63
- }
64
- type OpenGraphBook = OpenGraphMetadata & {
65
- type: 'book'
66
- isbn?: null | string
67
- releaseDate?: null | string // datetime
68
- authors?: null | string | URL | Array<string | URL>
69
- tags?: null | string | Array<string>
70
- }
71
- type OpenGraphProfile = OpenGraphMetadata & {
72
- type: 'profile'
73
- firstName?: null | string
74
- lastName?: null | string
75
- username?: null | string
76
- gender?: null | string
77
- }
78
- type OpenGraphMusicSong = OpenGraphMetadata & {
79
- type: 'music.song'
80
- duration?: null | number
81
- albums?: null | string | URL | OGAlbum | Array<string | URL | OGAlbum>
82
- musicians?: null | string | URL | Array<string | URL>
83
- }
84
- type OpenGraphMusicAlbum = OpenGraphMetadata & {
85
- type: 'music.album'
86
- songs?: null | string | URL | OGSong | Array<string | URL | OGSong>
87
- musicians?: null | string | URL | Array<string | URL>
88
- releaseDate?: null | string // datetime
89
- }
90
- type OpenGraphMusicPlaylist = OpenGraphMetadata & {
91
- type: 'music.playlist'
92
- songs?: null | string | URL | OGSong | Array<string | URL | OGSong>
93
- creators?: null | string | URL | Array<string | URL>
94
- }
95
- type OpenGraphRadioStation = OpenGraphMetadata & {
96
- type: 'music.radio_station'
97
- creators?: null | string | URL | Array<string | URL>
98
- }
99
- type OpenGraphVideoMovie = OpenGraphMetadata & {
100
- type: 'video.movie'
101
- actors?: null | string | URL | OGActor | Array<string | URL | OGActor>
102
- directors?: null | string | URL | Array<string | URL>
103
- writers?: null | string | URL | Array<string | URL>
104
- duration?: null | number
105
- releaseDate?: null | string // datetime
106
- tags?: null | string | Array<string>
107
- }
108
- type OpenGraphVideoEpisode = OpenGraphMetadata & {
109
- type: 'video.episode'
110
- actors?: null | string | URL | OGActor | Array<string | URL | OGActor>
111
- directors?: null | string | URL | Array<string | URL>
112
- writers?: null | string | URL | Array<string | URL>
113
- duration?: null | number
114
- releaseDate?: null | string // datetime
115
- tags?: null | string | Array<string>
116
- series?: null | string | URL
117
- }
118
- type OpenGraphVideoTVShow = OpenGraphMetadata & {
119
- type: 'video.tv_show'
120
- }
121
- type OpenGraphVideoOther = OpenGraphMetadata & {
122
- type: 'video.other'
123
- }
124
-
125
- export type OGImage = string | OGImageDescriptor | URL
126
- type OGImageDescriptor = {
127
- url: string | URL
128
- secureUrl?: string | URL
129
- alt?: string
130
- type?: string
131
- width?: string | number
132
- height?: string | number
133
- }
134
- type OGAudio = string | OGAudioDescriptor | URL
135
- type OGAudioDescriptor = {
136
- url: string | URL
137
- secureUrl?: string | URL
138
- type?: string
139
- }
140
- type OGVideo = string | OGVideoDescriptor | URL
141
- type OGVideoDescriptor = {
142
- url: string | URL
143
- secureUrl?: string | URL
144
- type?: string
145
- width?: string | number
146
- height?: string | number
147
- }
148
-
149
- export type ResolvedOpenGraph =
150
- | ResolvedOpenGraphWebsite
151
- | ResolvedOpenGraphArticle
152
- | ResolvedOpenGraphBook
153
- | ResolvedOpenGraphProfile
154
- | ResolvedOpenGraphMusicSong
155
- | ResolvedOpenGraphMusicAlbum
156
- | ResolvedOpenGraphMusicPlaylist
157
- | ResolvedOpenGraphRadioStation
158
- | ResolvedOpenGraphVideoMovie
159
- | ResolvedOpenGraphVideoEpisode
160
- | ResolvedOpenGraphVideoTVShow
161
- | ResolvedOpenGraphVideoOther
162
- | ResolvedOpenGraphMetadata
163
-
164
- type ResolvedOpenGraphMetadata = {
165
- determiner?: 'a' | 'an' | 'the' | 'auto' | ''
166
- title: AbsoluteTemplateString
167
- description?: string
168
- emails?: Array<string>
169
- phoneNumbers?: Array<string>
170
- faxNumbers?: Array<string>
171
- siteName?: string
172
- locale?: Locale
173
- alternateLocale?: Array<Locale>
174
- images?: Array<OGImage>
175
- audio?: Array<OGAudio>
176
- videos?: Array<OGVideo>
177
- url: null | URL | string
178
- countryName?: string
179
- ttl?: number
180
- }
181
- type ResolvedOpenGraphWebsite = ResolvedOpenGraphMetadata & {
182
- type: 'website'
183
- }
184
- type ResolvedOpenGraphArticle = ResolvedOpenGraphMetadata & {
185
- type: 'article'
186
- publishedTime?: string // datetime
187
- modifiedTime?: string // datetime
188
- expirationTime?: string // datetime
189
- authors?: Array<string>
190
- section?: string
191
- tags?: Array<string>
192
- }
193
- type ResolvedOpenGraphBook = ResolvedOpenGraphMetadata & {
194
- type: 'book'
195
- isbn?: string
196
- releaseDate?: string // datetime
197
- authors?: Array<string>
198
- tags?: Array<string>
199
- }
200
- type ResolvedOpenGraphProfile = ResolvedOpenGraphMetadata & {
201
- type: 'profile'
202
- firstName?: string
203
- lastName?: string
204
- username?: string
205
- gender?: string
206
- }
207
- type ResolvedOpenGraphMusicSong = ResolvedOpenGraphMetadata & {
208
- type: 'music.song'
209
- duration?: number
210
- albums?: Array<OGAlbum>
211
- musicians?: Array<string | URL>
212
- }
213
- type ResolvedOpenGraphMusicAlbum = ResolvedOpenGraphMetadata & {
214
- type: 'music.album'
215
- songs?: Array<string | URL | OGSong>
216
- musicians?: Array<string | URL>
217
- releaseDate?: string // datetime
218
- }
219
- type ResolvedOpenGraphMusicPlaylist = ResolvedOpenGraphMetadata & {
220
- type: 'music.playlist'
221
- songs?: Array<string | URL | OGSong>
222
- creators?: Array<string | URL>
223
- }
224
- type ResolvedOpenGraphRadioStation = ResolvedOpenGraphMetadata & {
225
- type: 'music.radio_station'
226
- creators?: Array<string | URL>
227
- }
228
- type ResolvedOpenGraphVideoMovie = ResolvedOpenGraphMetadata & {
229
- type: 'video.movie'
230
- actors?: Array<string | URL | OGActor>
231
- directors?: Array<string | URL>
232
- writers?: Array<string | URL>
233
- duration?: number
234
- releaseDate?: string // datetime
235
- tags?: Array<string>
236
- }
237
- type ResolvedOpenGraphVideoEpisode = ResolvedOpenGraphMetadata & {
238
- type: 'video.episode'
239
- actors?: Array<string | URL | OGActor>
240
- directors?: Array<string | URL>
241
- writers?: Array<string | URL>
242
- duration?: number
243
- releaseDate?: string // datetime
244
- tags?: Array<string>
245
- series?: string | URL
246
- }
247
- type ResolvedOpenGraphVideoTVShow = ResolvedOpenGraphMetadata & {
248
- type: 'video.tv_show'
249
- }
250
- type ResolvedOpenGraphVideoOther = ResolvedOpenGraphMetadata & {
251
- type: 'video.other'
252
- }
253
-
254
- type OGSong = {
255
- url: string | URL
256
- disc?: number
257
- track?: number
258
- }
259
- type OGAlbum = {
260
- url: string | URL
261
- disc?: number
262
- track?: number
263
- }
264
- type OGActor = {
265
- url: string | URL
266
- role?: string
267
- }