Skip to content

Commit caa864a

Browse files
committed
🏷️ Improve utility types
1 parent 1923fd5 commit caa864a

File tree

2 files changed

+104
-72
lines changed

2 files changed

+104
-72
lines changed

scripts/buildTypes.js

Lines changed: 4 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { utilityTypes } from './utilityTypes.js'
2+
13
import fs from 'fs'
24

35
const format = template => template.trim().replace(new RegExp('^[ \\t]{12}', 'gm'), '')
@@ -10,7 +12,7 @@ const buildTypes = type => {
1012
${components.map(component => {
1113
return `import type { ${component}Props } from './components/${component}/${component.toLowerCase()}'`
1214
}).join('\n')}
13-
15+
1416
declare module 'webcoreui/${type}' {
1517
${components.map(component => {
1618
return `export function ${component}(_props: ${component}Props): any`
@@ -97,77 +99,7 @@ const buildTypes = type => {
9799
}
98100

99101
if (type === 'utils') {
100-
return format(`
101-
type PopoverPosition = 'top'
102-
| 'top-start'
103-
| 'top-end'
104-
| 'left'
105-
| 'left-start'
106-
| 'left-end'
107-
| 'right'
108-
| 'right-start'
109-
| 'right-end'
110-
| 'bottom'
111-
| 'bottom-start'
112-
| 'bottom-end'
113-
114-
type Popover = {
115-
trigger: string
116-
popover: string
117-
position?: PopoverPosition
118-
offset?: number
119-
closeOnBlur?: boolean
120-
}
121-
122-
type Toast = {
123-
element: string
124-
timeout?: number
125-
title?: string
126-
content?: string
127-
theme?: 'info' | 'success' | 'warning' | 'alert' | null
128-
position?: 'bottom-left'
129-
| 'top-left'
130-
| 'top-right'
131-
| 'bottom-full'
132-
| 'top-full'
133-
}
134-
135-
declare module 'webcoreui' {
136-
export const classNames = (classes: any[]) => string
137-
138-
export const setCookie = (name: string, value: string, days: number) => {}
139-
export const getCookie = (name: string) => string | null
140-
export const removeCookie = (name: string) => {}
141-
142-
export const debounce = (fn: any, waitFor: number) => any
143-
144-
export const dispatch = (event: string, detail: any) => {}
145-
export const listen = (event: string, callback: (e: any) => any) => {
146-
remove()
147-
}
148-
149-
export const clamp = (num: number, min: number, max: number) => number
150-
export const lerp = (start: number, end: number, value: number) => number
151-
export const invlerp = (start: number, end: number, value: number) => number
152-
export const interpolate = (
153-
value: number,
154-
input: [start: number, end: number],
155-
output: [start: number, end: number],
156-
) => number
157-
158-
export const modal = (selector: string) => {}
159-
export const closeModal = (selector: string) => {}
160-
161-
export const popover = (config: Popover) => {
162-
remove()
163-
}
164-
export const closePopover = (selector: string) => {}
165-
166-
export const setDefaultTimeout = (time: number) => number
167-
export const toast = (config: Toast | string) => {}
168-
export const hideToast = (element: string) => {}
169-
}
170-
`)
102+
return utilityTypes
171103
}
172104
}
173105

scripts/utilityTypes.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
export const utilityTypes = `
2+
type ModalCallback = {
3+
trigger: Element | null
4+
modal: HTMLElement
5+
}
6+
7+
type Modal = {
8+
trigger: string
9+
modal: string
10+
onOpen?: (args: ModalCallback) => unknown
11+
onClose?: (args: ModalCallback) => unknown
12+
}
13+
14+
type PopoverPosition = 'top'
15+
| 'top-start'
16+
| 'top-end'
17+
| 'left'
18+
| 'left-start'
19+
| 'left-end'
20+
| 'right'
21+
| 'right-start'
22+
| 'right-end'
23+
| 'bottom'
24+
| 'bottom-start'
25+
| 'bottom-end'
26+
27+
type PopoverCallback = {
28+
trigger: HTMLElement
29+
popover: HTMLElement
30+
position: PopoverPosition | undefined
31+
}
32+
33+
type Popover = {
34+
trigger: string
35+
popover: string
36+
position?: PopoverPosition
37+
offset?: number
38+
closeOnBlur?: boolean
39+
onOpen?: (args: PopoverCallback) => unknown
40+
onClose?: (args: PopoverCallback) => unknown
41+
}
42+
43+
type Toast = {
44+
element: string
45+
timeout?: number
46+
title?: string
47+
content?: string
48+
position?: 'bottom-left'
49+
| 'top-left'
50+
| 'top-right'
51+
| 'bottom-full'
52+
| 'top-full'
53+
| null
54+
}
55+
56+
declare module 'webcoreui' {
57+
export const classNames: (classes: any[]) => string
58+
59+
export const setCookie: (name: string, value: string, days: number) => undefined
60+
export const getCookie: (name: string) => string | null
61+
export const removeCookie: (name: string) => void
62+
63+
export const debounce: <T extends (...args: any[]) => any>(
64+
fn: T,
65+
waitFor?: number
66+
) => {
67+
(...args: Parameters<T>): void
68+
cancel: () => void
69+
}
70+
71+
export const dispatch: (event: string, detail: unknown) => void
72+
export const listen: (event: string, callback: (e: any) => unknown) => {
73+
remove: () => void
74+
}
75+
76+
export const clamp: (num: number, min: number, max: number) => number
77+
export const lerp: (start: number, end: number, value: number) => number
78+
export const invlerp: (start: number, end: number, value: number) => number
79+
export const interpolate: (
80+
value: number,
81+
input: [start: number, end: number],
82+
output: [start: number, end: number]
83+
) => number
84+
85+
export const modal: (config: Modal | string) => {
86+
open: () => void
87+
remove: () => void
88+
} | void
89+
export const closeModal: (modal: string) => void
90+
91+
export const popover: (config: Popover) => {
92+
remove: () => void
93+
} | void
94+
export const closePopover: (selector: string) => void
95+
96+
export const setDefaultTimeout: (time: number) => number
97+
export const toast: (config: Toast | string) => void
98+
export const hideToast: (element: string) => void
99+
}
100+
`

0 commit comments

Comments
 (0)