├── .gitignore
├── next-env.d.ts
├── next.config.js
├── package.json
├── pages
├── _document.tsx
└── index.tsx
├── pnpm-lock.yaml
├── public
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon.png
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
└── site.webmanifest
├── readme.md
├── screenshot.gif
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | .env*
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | async rewrites() {
3 | return [
4 | {
5 | source: '/goat',
6 | destination: 'https://time.goatcounter.com/count',
7 | locale: false,
8 | },
9 | {
10 | source: '/count.js',
11 | destination: 'https://gc.zgo.at/count.js',
12 | locale: false,
13 | },
14 | ]
15 | },
16 | eslint: {
17 | ignoreDuringBuilds: true,
18 | },
19 | }
20 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "time",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev -p 1234",
7 | "build": "next build",
8 | "start": "next start"
9 | },
10 | "dependencies": {
11 | "is-hexcolor": "^1.0.0",
12 | "next": "^14.1.1",
13 | "nice-color-palettes": "^3.0.0",
14 | "react": "^18.2.0",
15 | "react-dom": "^18.2.0"
16 | },
17 | "devDependencies": {
18 | "@types/node": "^13.1.6",
19 | "@types/react": "^16.9.17",
20 | "husky": "*",
21 | "prettier": "*",
22 | "pretty-quick": "*",
23 | "typescript": "^4.3.5"
24 | },
25 | "husky": {
26 | "hooks": {
27 | "pre-commit": "pretty-quick --staged"
28 | }
29 | },
30 | "prettier": {
31 | "semi": false,
32 | "singleQuote": true,
33 | "tabWidth": 2
34 | },
35 | "engines": {
36 | "node": "18"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/pages/_document.tsx:
--------------------------------------------------------------------------------
1 | import Document, { Main, NextScript, Html, Head } from 'next/document'
2 |
3 | export default class MyDocument extends Document {
4 | render() {
5 | return (
6 |
7 |
8 |
9 |
14 |
20 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | )
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import isHexColor from 'is-hexcolor'
3 | import palettes from 'nice-color-palettes'
4 |
5 | function whatTimeIsIt(props: IProps) {
6 | const now = new Date()
7 |
8 | let hours = now.getHours()
9 | let minutes = now.getMinutes()
10 | let seconds = now.getSeconds()
11 |
12 | if (props.format === 12) {
13 | hours = hours % 12 || 12
14 | }
15 |
16 | let time: any = {
17 | hours: hours.toString().padStart(props.pad ? 2 : 1, '0'),
18 | minutes: minutes.toString().padStart(2, '0'),
19 | seconds: seconds.toString().padStart(2, '0'),
20 | }
21 |
22 | return time
23 | }
24 |
25 | type Position =
26 | | 'top-left'
27 | | 'top'
28 | | 'top-right'
29 | | 'left'
30 | | 'center'
31 | | 'right'
32 | | 'bottom-left'
33 | | 'bottom'
34 | | 'bottom-right'
35 |
36 | interface IProps {
37 | seconds: boolean
38 | randomColors: boolean
39 | fg: string
40 | bg: string
41 | font: string
42 | fontSize: string
43 | showLink: boolean
44 | blink: boolean
45 | position: Position
46 | format: 12 | 24
47 | pad: boolean
48 | }
49 |
50 | interface IState {
51 | hours: string
52 | minutes: string
53 | seconds: string
54 | mouseInteraction: boolean
55 | lastTickHadColon: boolean
56 | clearMouseTimeout?: ReturnType
57 | }
58 |
59 | function normalizeColors(colors) {
60 | const normalized = {}
61 | ;['fg', 'bg'].map((key) => {
62 | if (colors[key] != null) {
63 | if (isHexColor(`#${colors[key]}`)) {
64 | normalized[key] = `#${colors[key]}`
65 | } else {
66 | normalized[key] = colors[key]
67 | }
68 | }
69 | })
70 |
71 | return {
72 | ...colors,
73 | ...normalized,
74 | }
75 | }
76 |
77 | function randomizeColors(colors) {
78 | const palette = palettes[Math.ceil(Math.random() * palettes.length)]
79 |
80 | return {
81 | ...colors,
82 | fg: palette[0],
83 | bg: palette[palette.length - 1],
84 | }
85 | }
86 |
87 | export default class extends React.Component {
88 | static async getInitialProps({ query }) {
89 | query = normalizeColors(query)
90 |
91 | if (query.randomColors != null) {
92 | query = randomizeColors(query)
93 | }
94 |
95 | return {
96 | font: `system-ui,
97 | -apple-system,
98 | 'Segoe UI',
99 | Roboto,
100 | Helvetica,
101 | Arial,
102 | sans-serif,
103 | 'Apple Color Emoji',
104 | 'Segoe UI Emoji'`,
105 | bg: 'black',
106 | fg: 'royalblue',
107 | fontSize: '10em',
108 | position: 'center',
109 | ...query,
110 | seconds: query.seconds != null,
111 | randomColors: query.randomColors != null,
112 | showLink: query.showLink != null,
113 | blink: query.blink != null,
114 | format: parseInt(query.format || '24'),
115 | pad: query.pad != null,
116 | }
117 | }
118 |
119 | constructor(props) {
120 | super(props)
121 |
122 | this.state = {
123 | hours: '',
124 | minutes: '',
125 | seconds: '',
126 | mouseInteraction:
127 | this.props.showLink == null ? false : this.props.showLink,
128 | lastTickHadColon: false,
129 | }
130 | }
131 |
132 | tick() {
133 | let time = whatTimeIsIt(this.props)
134 | this.setState({ ...time })
135 | }
136 |
137 | componentDidMount() {
138 | this.tick()
139 | setInterval(() => {
140 | this.tick()
141 | }, 1000)
142 |
143 | // Let colons blink twice a second
144 | setInterval(() => {
145 | const { lastTickHadColon } = this.state
146 |
147 | this.setState({
148 | lastTickHadColon: !lastTickHadColon,
149 | })
150 | }, 500)
151 | }
152 |
153 | getFlexPositions() {
154 | const { position } = this.props
155 | let flexPosition = {
156 | alignItems: 'center',
157 | justifyContent: 'center',
158 | }
159 |
160 | if (position.includes('top')) {
161 | flexPosition.alignItems = 'flex-start'
162 | } else if (position.includes('bottom')) {
163 | flexPosition.alignItems = 'flex-end'
164 | }
165 |
166 | if (position.includes('left')) {
167 | flexPosition.justifyContent = 'flex-start'
168 | } else if (position.includes('right')) {
169 | flexPosition.justifyContent = 'flex-end'
170 | }
171 |
172 | return flexPosition
173 | }
174 |
175 | mouseInteracting() {
176 | const { clearMouseTimeout } = this.state
177 |
178 | if (clearMouseTimeout) {
179 | clearTimeout(clearMouseTimeout)
180 | }
181 |
182 | const newClearMouseTimeout = setTimeout(
183 | () => this.setState({ mouseInteraction: false }),
184 | 2000
185 | )
186 |
187 | this.setState({
188 | mouseInteraction: true,
189 | clearMouseTimeout: newClearMouseTimeout,
190 | })
191 | }
192 |
193 | render() {
194 | const { blink, showLink } = this.props
195 | const { lastTickHadColon, mouseInteraction } = this.state
196 | let colonOpacity = 1
197 |
198 | if (blink && lastTickHadColon) {
199 | colonOpacity = 0
200 | }
201 |
202 | const flexPositions = this.getFlexPositions()
203 |
204 | return (
205 | <>
206 | {(mouseInteraction || showLink) && (
207 | Code available here
208 | )}
209 | this.mouseInteracting()}>
210 |
211 | {this.state.hours}
212 |
213 | :
214 |
215 | {this.state.minutes}
216 | {this.props.seconds && (
217 | <>
218 |
219 | :
220 |
221 | {this.state.seconds}
222 | >
223 | )}
224 |
225 |
262 |
263 | >
264 | )
265 | }
266 | }
267 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | is-hexcolor:
9 | specifier: ^1.0.0
10 | version: 1.0.0
11 | next:
12 | specifier: ^14.1.1
13 | version: 14.1.1(react-dom@18.2.0)(react@18.2.0)
14 | nice-color-palettes:
15 | specifier: ^3.0.0
16 | version: 3.0.0
17 | react:
18 | specifier: ^18.2.0
19 | version: 18.2.0
20 | react-dom:
21 | specifier: ^18.2.0
22 | version: 18.2.0(react@18.2.0)
23 |
24 | devDependencies:
25 | '@types/node':
26 | specifier: ^13.1.6
27 | version: 13.13.52
28 | '@types/react':
29 | specifier: ^16.9.17
30 | version: 16.14.50
31 | husky:
32 | specifier: '*'
33 | version: 8.0.3
34 | prettier:
35 | specifier: '*'
36 | version: 3.0.3
37 | pretty-quick:
38 | specifier: '*'
39 | version: 3.1.3(prettier@3.0.3)
40 | typescript:
41 | specifier: ^4.3.5
42 | version: 4.9.5
43 |
44 | packages:
45 |
46 | /@next/env@14.1.1:
47 | resolution: {integrity: sha512-7CnQyD5G8shHxQIIg3c7/pSeYFeMhsNbpU/bmvH7ZnDql7mNRgg8O2JZrhrc/soFnfBnKP4/xXNiiSIPn2w8gA==}
48 | dev: false
49 |
50 | /@next/swc-darwin-arm64@14.1.1:
51 | resolution: {integrity: sha512-yDjSFKQKTIjyT7cFv+DqQfW5jsD+tVxXTckSe1KIouKk75t1qZmj/mV3wzdmFb0XHVGtyRjDMulfVG8uCKemOQ==}
52 | engines: {node: '>= 10'}
53 | cpu: [arm64]
54 | os: [darwin]
55 | requiresBuild: true
56 | dev: false
57 | optional: true
58 |
59 | /@next/swc-darwin-x64@14.1.1:
60 | resolution: {integrity: sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==}
61 | engines: {node: '>= 10'}
62 | cpu: [x64]
63 | os: [darwin]
64 | requiresBuild: true
65 | dev: false
66 | optional: true
67 |
68 | /@next/swc-linux-arm64-gnu@14.1.1:
69 | resolution: {integrity: sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==}
70 | engines: {node: '>= 10'}
71 | cpu: [arm64]
72 | os: [linux]
73 | requiresBuild: true
74 | dev: false
75 | optional: true
76 |
77 | /@next/swc-linux-arm64-musl@14.1.1:
78 | resolution: {integrity: sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==}
79 | engines: {node: '>= 10'}
80 | cpu: [arm64]
81 | os: [linux]
82 | requiresBuild: true
83 | dev: false
84 | optional: true
85 |
86 | /@next/swc-linux-x64-gnu@14.1.1:
87 | resolution: {integrity: sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==}
88 | engines: {node: '>= 10'}
89 | cpu: [x64]
90 | os: [linux]
91 | requiresBuild: true
92 | dev: false
93 | optional: true
94 |
95 | /@next/swc-linux-x64-musl@14.1.1:
96 | resolution: {integrity: sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==}
97 | engines: {node: '>= 10'}
98 | cpu: [x64]
99 | os: [linux]
100 | requiresBuild: true
101 | dev: false
102 | optional: true
103 |
104 | /@next/swc-win32-arm64-msvc@14.1.1:
105 | resolution: {integrity: sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==}
106 | engines: {node: '>= 10'}
107 | cpu: [arm64]
108 | os: [win32]
109 | requiresBuild: true
110 | dev: false
111 | optional: true
112 |
113 | /@next/swc-win32-ia32-msvc@14.1.1:
114 | resolution: {integrity: sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==}
115 | engines: {node: '>= 10'}
116 | cpu: [ia32]
117 | os: [win32]
118 | requiresBuild: true
119 | dev: false
120 | optional: true
121 |
122 | /@next/swc-win32-x64-msvc@14.1.1:
123 | resolution: {integrity: sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==}
124 | engines: {node: '>= 10'}
125 | cpu: [x64]
126 | os: [win32]
127 | requiresBuild: true
128 | dev: false
129 | optional: true
130 |
131 | /@sindresorhus/is@0.14.0:
132 | resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==}
133 | engines: {node: '>=6'}
134 | dev: false
135 |
136 | /@swc/helpers@0.5.2:
137 | resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==}
138 | dependencies:
139 | tslib: 2.6.2
140 | dev: false
141 |
142 | /@szmarczak/http-timer@1.1.2:
143 | resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==}
144 | engines: {node: '>=6'}
145 | dependencies:
146 | defer-to-connect: 1.1.3
147 | dev: false
148 |
149 | /@types/keyv@3.1.4:
150 | resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
151 | dependencies:
152 | '@types/node': 13.13.52
153 | dev: false
154 |
155 | /@types/minimatch@3.0.5:
156 | resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
157 | dev: true
158 |
159 | /@types/node@13.13.52:
160 | resolution: {integrity: sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==}
161 |
162 | /@types/prop-types@15.7.9:
163 | resolution: {integrity: sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==}
164 | dev: true
165 |
166 | /@types/react@16.14.50:
167 | resolution: {integrity: sha512-7TWZ/HjhXsRK3BbhSFxTinbSft3sUXJAU3ONngT0rpcKJaIOlxkRke4bidqQTopUbEv1ApC5nlSEkIpX43MkTg==}
168 | dependencies:
169 | '@types/prop-types': 15.7.9
170 | '@types/scheduler': 0.16.5
171 | csstype: 3.1.2
172 | dev: true
173 |
174 | /@types/responselike@1.0.2:
175 | resolution: {integrity: sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA==}
176 | dependencies:
177 | '@types/node': 13.13.52
178 | dev: false
179 |
180 | /@types/scheduler@0.16.5:
181 | resolution: {integrity: sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==}
182 | dev: true
183 |
184 | /ansi-styles@4.3.0:
185 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
186 | engines: {node: '>=8'}
187 | dependencies:
188 | color-convert: 2.0.1
189 | dev: true
190 |
191 | /array-differ@3.0.0:
192 | resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==}
193 | engines: {node: '>=8'}
194 | dev: true
195 |
196 | /array-union@2.1.0:
197 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
198 | engines: {node: '>=8'}
199 | dev: true
200 |
201 | /arrify@2.0.1:
202 | resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==}
203 | engines: {node: '>=8'}
204 | dev: true
205 |
206 | /balanced-match@1.0.2:
207 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
208 | dev: true
209 |
210 | /brace-expansion@1.1.11:
211 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
212 | dependencies:
213 | balanced-match: 1.0.2
214 | concat-map: 0.0.1
215 | dev: true
216 |
217 | /busboy@1.6.0:
218 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
219 | engines: {node: '>=10.16.0'}
220 | dependencies:
221 | streamsearch: 1.1.0
222 | dev: false
223 |
224 | /cacheable-request@6.1.0:
225 | resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==}
226 | engines: {node: '>=8'}
227 | dependencies:
228 | clone-response: 1.0.3
229 | get-stream: 5.2.0
230 | http-cache-semantics: 4.1.1
231 | keyv: 3.1.0
232 | lowercase-keys: 2.0.0
233 | normalize-url: 4.5.1
234 | responselike: 1.0.2
235 | dev: false
236 |
237 | /caniuse-lite@1.0.30001617:
238 | resolution: {integrity: sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==}
239 | dev: false
240 |
241 | /chalk@3.0.0:
242 | resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
243 | engines: {node: '>=8'}
244 | dependencies:
245 | ansi-styles: 4.3.0
246 | supports-color: 7.2.0
247 | dev: true
248 |
249 | /client-only@0.0.1:
250 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
251 | dev: false
252 |
253 | /clone-response@1.0.3:
254 | resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
255 | dependencies:
256 | mimic-response: 1.0.1
257 | dev: false
258 |
259 | /color-convert@2.0.1:
260 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
261 | engines: {node: '>=7.0.0'}
262 | dependencies:
263 | color-name: 1.1.4
264 | dev: true
265 |
266 | /color-name@1.1.4:
267 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
268 | dev: true
269 |
270 | /concat-map@0.0.1:
271 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
272 | dev: true
273 |
274 | /cross-spawn@7.0.3:
275 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
276 | engines: {node: '>= 8'}
277 | dependencies:
278 | path-key: 3.1.1
279 | shebang-command: 2.0.0
280 | which: 2.0.2
281 | dev: true
282 |
283 | /csstype@3.1.2:
284 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
285 | dev: true
286 |
287 | /decompress-response@3.3.0:
288 | resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==}
289 | engines: {node: '>=4'}
290 | dependencies:
291 | mimic-response: 1.0.1
292 | dev: false
293 |
294 | /defer-to-connect@1.1.3:
295 | resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==}
296 | dev: false
297 |
298 | /duplexer3@0.1.5:
299 | resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
300 | dev: false
301 |
302 | /end-of-stream@1.4.4:
303 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
304 | dependencies:
305 | once: 1.4.0
306 |
307 | /execa@4.1.0:
308 | resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==}
309 | engines: {node: '>=10'}
310 | dependencies:
311 | cross-spawn: 7.0.3
312 | get-stream: 5.2.0
313 | human-signals: 1.1.1
314 | is-stream: 2.0.1
315 | merge-stream: 2.0.0
316 | npm-run-path: 4.0.1
317 | onetime: 5.1.2
318 | signal-exit: 3.0.7
319 | strip-final-newline: 2.0.0
320 | dev: true
321 |
322 | /find-up@4.1.0:
323 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
324 | engines: {node: '>=8'}
325 | dependencies:
326 | locate-path: 5.0.0
327 | path-exists: 4.0.0
328 | dev: true
329 |
330 | /get-stream@4.1.0:
331 | resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
332 | engines: {node: '>=6'}
333 | dependencies:
334 | pump: 3.0.0
335 | dev: false
336 |
337 | /get-stream@5.2.0:
338 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
339 | engines: {node: '>=8'}
340 | dependencies:
341 | pump: 3.0.0
342 |
343 | /got@9.6.0:
344 | resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==}
345 | engines: {node: '>=8.6'}
346 | dependencies:
347 | '@sindresorhus/is': 0.14.0
348 | '@szmarczak/http-timer': 1.1.2
349 | '@types/keyv': 3.1.4
350 | '@types/responselike': 1.0.2
351 | cacheable-request: 6.1.0
352 | decompress-response: 3.3.0
353 | duplexer3: 0.1.5
354 | get-stream: 4.1.0
355 | lowercase-keys: 1.0.1
356 | mimic-response: 1.0.1
357 | p-cancelable: 1.1.0
358 | to-readable-stream: 1.0.0
359 | url-parse-lax: 3.0.0
360 | dev: false
361 |
362 | /graceful-fs@4.2.11:
363 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
364 | dev: false
365 |
366 | /has-flag@4.0.0:
367 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
368 | engines: {node: '>=8'}
369 | dev: true
370 |
371 | /hex-color-regex@1.0.3:
372 | resolution: {integrity: sha512-YJCMR6n7Gqrxp7HVggtxJF5XatzSrT3jX39hpLtEFQNf6x+xhlC07vI6omqDkjBtJrw8uCsCHYhppCsU+Y2m/w==}
373 | dev: false
374 |
375 | /http-cache-semantics@4.1.1:
376 | resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
377 | dev: false
378 |
379 | /human-signals@1.1.1:
380 | resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
381 | engines: {node: '>=8.12.0'}
382 | dev: true
383 |
384 | /husky@8.0.3:
385 | resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==}
386 | engines: {node: '>=14'}
387 | hasBin: true
388 | dev: true
389 |
390 | /ignore@5.2.4:
391 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
392 | engines: {node: '>= 4'}
393 | dev: true
394 |
395 | /is-hexcolor@1.0.0:
396 | resolution: {integrity: sha512-exeAJKlQsEjg3Sc5604FLXt59MQXkUIVKdJTRLAdLwJM42zCngVyLbEt2gQtb9TSRVzCIbaWbzgDKjbJIBzBFQ==}
397 | dependencies:
398 | hex-color-regex: 1.0.3
399 | dev: false
400 |
401 | /is-stream@2.0.1:
402 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
403 | engines: {node: '>=8'}
404 | dev: true
405 |
406 | /isexe@2.0.0:
407 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
408 | dev: true
409 |
410 | /js-tokens@4.0.0:
411 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
412 | dev: false
413 |
414 | /json-buffer@3.0.0:
415 | resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==}
416 | dev: false
417 |
418 | /keyv@3.1.0:
419 | resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==}
420 | dependencies:
421 | json-buffer: 3.0.0
422 | dev: false
423 |
424 | /locate-path@5.0.0:
425 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
426 | engines: {node: '>=8'}
427 | dependencies:
428 | p-locate: 4.1.0
429 | dev: true
430 |
431 | /loose-envify@1.4.0:
432 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
433 | hasBin: true
434 | dependencies:
435 | js-tokens: 4.0.0
436 | dev: false
437 |
438 | /lowercase-keys@1.0.1:
439 | resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==}
440 | engines: {node: '>=0.10.0'}
441 | dev: false
442 |
443 | /lowercase-keys@2.0.0:
444 | resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
445 | engines: {node: '>=8'}
446 | dev: false
447 |
448 | /map-limit@0.0.1:
449 | resolution: {integrity: sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==}
450 | dependencies:
451 | once: 1.3.3
452 | dev: false
453 |
454 | /merge-stream@2.0.0:
455 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
456 | dev: true
457 |
458 | /mimic-fn@2.1.0:
459 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
460 | engines: {node: '>=6'}
461 | dev: true
462 |
463 | /mimic-response@1.0.1:
464 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
465 | engines: {node: '>=4'}
466 | dev: false
467 |
468 | /minimatch@3.1.2:
469 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
470 | dependencies:
471 | brace-expansion: 1.1.11
472 | dev: true
473 |
474 | /minimist@1.2.8:
475 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
476 | dev: false
477 |
478 | /mri@1.2.0:
479 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
480 | engines: {node: '>=4'}
481 | dev: true
482 |
483 | /multimatch@4.0.0:
484 | resolution: {integrity: sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==}
485 | engines: {node: '>=8'}
486 | dependencies:
487 | '@types/minimatch': 3.0.5
488 | array-differ: 3.0.0
489 | array-union: 2.1.0
490 | arrify: 2.0.1
491 | minimatch: 3.1.2
492 | dev: true
493 |
494 | /nanoid@3.3.6:
495 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
496 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
497 | hasBin: true
498 | dev: false
499 |
500 | /new-array@1.0.0:
501 | resolution: {integrity: sha512-K5AyFYbuHZ4e/ti52y7k18q8UHsS78FlRd85w2Fmsd6AkuLipDihPflKC0p3PN5i8II7+uHxo+CtkLiJDfmS5A==}
502 | dev: false
503 |
504 | /next@14.1.1(react-dom@18.2.0)(react@18.2.0):
505 | resolution: {integrity: sha512-McrGJqlGSHeaz2yTRPkEucxQKe5Zq7uPwyeHNmJaZNY4wx9E9QdxmTp310agFRoMuIYgQrCrT3petg13fSVOww==}
506 | engines: {node: '>=18.17.0'}
507 | hasBin: true
508 | peerDependencies:
509 | '@opentelemetry/api': ^1.1.0
510 | react: ^18.2.0
511 | react-dom: ^18.2.0
512 | sass: ^1.3.0
513 | peerDependenciesMeta:
514 | '@opentelemetry/api':
515 | optional: true
516 | sass:
517 | optional: true
518 | dependencies:
519 | '@next/env': 14.1.1
520 | '@swc/helpers': 0.5.2
521 | busboy: 1.6.0
522 | caniuse-lite: 1.0.30001617
523 | graceful-fs: 4.2.11
524 | postcss: 8.4.31
525 | react: 18.2.0
526 | react-dom: 18.2.0(react@18.2.0)
527 | styled-jsx: 5.1.1(react@18.2.0)
528 | optionalDependencies:
529 | '@next/swc-darwin-arm64': 14.1.1
530 | '@next/swc-darwin-x64': 14.1.1
531 | '@next/swc-linux-arm64-gnu': 14.1.1
532 | '@next/swc-linux-arm64-musl': 14.1.1
533 | '@next/swc-linux-x64-gnu': 14.1.1
534 | '@next/swc-linux-x64-musl': 14.1.1
535 | '@next/swc-win32-arm64-msvc': 14.1.1
536 | '@next/swc-win32-ia32-msvc': 14.1.1
537 | '@next/swc-win32-x64-msvc': 14.1.1
538 | transitivePeerDependencies:
539 | - '@babel/core'
540 | - babel-plugin-macros
541 | dev: false
542 |
543 | /nice-color-palettes@3.0.0:
544 | resolution: {integrity: sha512-lL4AjabAAFi313tjrtmgm/bxCRzp4l3vCshojfV/ij3IPdtnRqv6Chcw+SqJUhbe7g3o3BecaqCJYUNLswGBhQ==}
545 | hasBin: true
546 | dependencies:
547 | got: 9.6.0
548 | map-limit: 0.0.1
549 | minimist: 1.2.8
550 | new-array: 1.0.0
551 | dev: false
552 |
553 | /normalize-url@4.5.1:
554 | resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==}
555 | engines: {node: '>=8'}
556 | dev: false
557 |
558 | /npm-run-path@4.0.1:
559 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
560 | engines: {node: '>=8'}
561 | dependencies:
562 | path-key: 3.1.1
563 | dev: true
564 |
565 | /once@1.3.3:
566 | resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==}
567 | dependencies:
568 | wrappy: 1.0.2
569 | dev: false
570 |
571 | /once@1.4.0:
572 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
573 | dependencies:
574 | wrappy: 1.0.2
575 |
576 | /onetime@5.1.2:
577 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
578 | engines: {node: '>=6'}
579 | dependencies:
580 | mimic-fn: 2.1.0
581 | dev: true
582 |
583 | /p-cancelable@1.1.0:
584 | resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==}
585 | engines: {node: '>=6'}
586 | dev: false
587 |
588 | /p-limit@2.3.0:
589 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
590 | engines: {node: '>=6'}
591 | dependencies:
592 | p-try: 2.2.0
593 | dev: true
594 |
595 | /p-locate@4.1.0:
596 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
597 | engines: {node: '>=8'}
598 | dependencies:
599 | p-limit: 2.3.0
600 | dev: true
601 |
602 | /p-try@2.2.0:
603 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
604 | engines: {node: '>=6'}
605 | dev: true
606 |
607 | /path-exists@4.0.0:
608 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
609 | engines: {node: '>=8'}
610 | dev: true
611 |
612 | /path-key@3.1.1:
613 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
614 | engines: {node: '>=8'}
615 | dev: true
616 |
617 | /picocolors@1.0.0:
618 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
619 | dev: false
620 |
621 | /postcss@8.4.31:
622 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
623 | engines: {node: ^10 || ^12 || >=14}
624 | dependencies:
625 | nanoid: 3.3.6
626 | picocolors: 1.0.0
627 | source-map-js: 1.0.2
628 | dev: false
629 |
630 | /prepend-http@2.0.0:
631 | resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==}
632 | engines: {node: '>=4'}
633 | dev: false
634 |
635 | /prettier@3.0.3:
636 | resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==}
637 | engines: {node: '>=14'}
638 | hasBin: true
639 | dev: true
640 |
641 | /pretty-quick@3.1.3(prettier@3.0.3):
642 | resolution: {integrity: sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==}
643 | engines: {node: '>=10.13'}
644 | hasBin: true
645 | peerDependencies:
646 | prettier: '>=2.0.0'
647 | dependencies:
648 | chalk: 3.0.0
649 | execa: 4.1.0
650 | find-up: 4.1.0
651 | ignore: 5.2.4
652 | mri: 1.2.0
653 | multimatch: 4.0.0
654 | prettier: 3.0.3
655 | dev: true
656 |
657 | /pump@3.0.0:
658 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
659 | dependencies:
660 | end-of-stream: 1.4.4
661 | once: 1.4.0
662 |
663 | /react-dom@18.2.0(react@18.2.0):
664 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
665 | peerDependencies:
666 | react: ^18.2.0
667 | dependencies:
668 | loose-envify: 1.4.0
669 | react: 18.2.0
670 | scheduler: 0.23.0
671 | dev: false
672 |
673 | /react@18.2.0:
674 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
675 | engines: {node: '>=0.10.0'}
676 | dependencies:
677 | loose-envify: 1.4.0
678 | dev: false
679 |
680 | /responselike@1.0.2:
681 | resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==}
682 | dependencies:
683 | lowercase-keys: 1.0.1
684 | dev: false
685 |
686 | /scheduler@0.23.0:
687 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
688 | dependencies:
689 | loose-envify: 1.4.0
690 | dev: false
691 |
692 | /shebang-command@2.0.0:
693 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
694 | engines: {node: '>=8'}
695 | dependencies:
696 | shebang-regex: 3.0.0
697 | dev: true
698 |
699 | /shebang-regex@3.0.0:
700 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
701 | engines: {node: '>=8'}
702 | dev: true
703 |
704 | /signal-exit@3.0.7:
705 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
706 | dev: true
707 |
708 | /source-map-js@1.0.2:
709 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
710 | engines: {node: '>=0.10.0'}
711 | dev: false
712 |
713 | /streamsearch@1.1.0:
714 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
715 | engines: {node: '>=10.0.0'}
716 | dev: false
717 |
718 | /strip-final-newline@2.0.0:
719 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
720 | engines: {node: '>=6'}
721 | dev: true
722 |
723 | /styled-jsx@5.1.1(react@18.2.0):
724 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
725 | engines: {node: '>= 12.0.0'}
726 | peerDependencies:
727 | '@babel/core': '*'
728 | babel-plugin-macros: '*'
729 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
730 | peerDependenciesMeta:
731 | '@babel/core':
732 | optional: true
733 | babel-plugin-macros:
734 | optional: true
735 | dependencies:
736 | client-only: 0.0.1
737 | react: 18.2.0
738 | dev: false
739 |
740 | /supports-color@7.2.0:
741 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
742 | engines: {node: '>=8'}
743 | dependencies:
744 | has-flag: 4.0.0
745 | dev: true
746 |
747 | /to-readable-stream@1.0.0:
748 | resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==}
749 | engines: {node: '>=6'}
750 | dev: false
751 |
752 | /tslib@2.6.2:
753 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
754 | dev: false
755 |
756 | /typescript@4.9.5:
757 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
758 | engines: {node: '>=4.2.0'}
759 | hasBin: true
760 | dev: true
761 |
762 | /url-parse-lax@3.0.0:
763 | resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==}
764 | engines: {node: '>=4'}
765 | dependencies:
766 | prepend-http: 2.0.0
767 | dev: false
768 |
769 | /which@2.0.2:
770 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
771 | engines: {node: '>= 8'}
772 | hasBin: true
773 | dependencies:
774 | isexe: 2.0.0
775 | dev: true
776 |
777 | /wrappy@1.0.2:
778 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
779 |
--------------------------------------------------------------------------------
/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pablopunk/time/6d2910ac6ffe87c98ad1b0fcc87fd4f4ee274776/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pablopunk/time/6d2910ac6ffe87c98ad1b0fcc87fd4f4ee274776/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pablopunk/time/6d2910ac6ffe87c98ad1b0fcc87fd4f4ee274776/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pablopunk/time/6d2910ac6ffe87c98ad1b0fcc87fd4f4ee274776/public/favicon-16x16.png
--------------------------------------------------------------------------------
/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pablopunk/time/6d2910ac6ffe87c98ad1b0fcc87fd4f4ee274776/public/favicon-32x32.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pablopunk/time/6d2910ac6ffe87c98ad1b0fcc87fd4f4ee274776/public/favicon.ico
--------------------------------------------------------------------------------
/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # Time by [pablopunk](https://pablopunk.com)
2 |
3 | > https://time.pablopunk.com
4 |
5 | Perfect if you use tools like [Plash](https://sindresorhus.com/plash).
6 |
7 | 
8 |
9 | ## Customize options
10 |
11 | - `fg`: Font color. Examples:
12 | - [`?fg=red`](https://time.pablopunk.com/?fg=red)
13 | - [`?fg=ff00ff`](https://time.pablopunk.com/?fg=ff00ff)
14 | - `bg`: Background color.
15 | - [`?bg=lightpink`](https://time.pablopunk.com/?bg=lightpink)
16 | - `font`: Font family. Examples:
17 | - [`?font=SFMono-Regular,Consolas,'Liberation Mono',Menlo,monospace`](https://time.pablopunk.com/?font=SFMono-Regular,Consolas,%27Liberation%20Mono%27,Menlo,monospace)
18 | - `fontSize`: The size of the font in the clock. Examples:
19 | - [`?fontSize=5rem`](https://time.pablopunk.com/?fontSize=5rem)
20 | - [`?fontSize=200px`](https://time.pablopunk.com/?fontSize=200px)
21 | - `position`: Position on the screen. Defaults to center:
22 |
23 | ```
24 | top-left top top-right
25 | left right
26 | bottom-left bottom bottom-right
27 | ```
28 |
29 | Examples:
30 |
31 | - [`?position=top-left`](https://time.pablopunk.com/?position=top-left)
32 | - [`?position=bottom`](https://time.pablopunk.com/?position=bottom)
33 |
34 | - `seconds`: Show seconds if this argument present.
35 | - [`?seconds`](https://time.pablopunk.com/?seconds)
36 | - `randomColors`: Sets a random color both for background and foreground.
37 | - [`?randomColors`](https://time.pablopunk.com/?randomColors)
38 | - `blink`: The colon between the hours and the minutes will blink each second.
39 | - [`?blink`](https://time.pablopunk.com/?blink)
40 | - `showLink`: A link to this repo is shown automatically when mouse input is detected, but it can be forced using this option.
41 | - [`?showLink`](https://time.pablopunk.com/?showLink)
42 | - `format=12`: Don't like military time? Shame on you. But you can use 12h format instead.
43 | - [`?format=12`](https://time.pablopunk.com/?format=12)
44 | - `pad`: Single digit hours will be padded with a 0: 9:41 will be shown as 09:41.
45 | - [`?pad`](https://time.pablopunk.com/?pad)
46 |
47 | ## More Examples
48 |
49 | - https://time.pablopunk.com/?seconds&fg=F1396D&bg=382F32&font=monospace
50 | - https://time.pablopunk.com/?fg=11cc88&bg=454545&font=monospace&fontSize=200px&position=bottom-right
51 | - https://time.pablopunk.com/?seconds&randomColors&blink
52 | - https://time.pablopunk.com/?fg=white&bg=transparent (this one is nice for Plash)
53 |
54 | ## Author
55 |
56 | |  |
57 | | ---------------------------------------------------------------------------- |
58 | | [Pablo Varela](https://pablopunk.com) |
59 |
--------------------------------------------------------------------------------
/screenshot.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pablopunk/time/6d2910ac6ffe87c98ad1b0fcc87fd4f4ee274776/screenshot.gif
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "strict": false,
12 | "forceConsistentCasingInFileNames": true,
13 | "noEmit": true,
14 | "esModuleInterop": true,
15 | "module": "esnext",
16 | "moduleResolution": "node",
17 | "resolveJsonModule": true,
18 | "isolatedModules": true,
19 | "jsx": "preserve",
20 | "incremental": true
21 | },
22 | "exclude": [
23 | "node_modules"
24 | ],
25 | "include": [
26 | "next-env.d.ts",
27 | "**/*.ts",
28 | "**/*.tsx"
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------