easycolors
Version:
Package that stores colors of the web and many popular css frameworks
551 lines (535 loc) • 6.04 kB
JavaScript
/* eslint-disable @typescript-eslint/no-var-requires */
//@ts-check
// eslint-disable-next-line no-undef
const { writeFile } = require('node:fs/promises')
// eslint-disable-next-line no-undef
const { capitalizeOne, fileHeader } = require('./utils')
class TailwindColorFamily {
/**
* Creates a new TailwindColorFamily
* @param {string} text
*/
constructor(text){
const splited = text.split(/\n/g).filter(line => line !== '')
this.name = splited.shift()?.toLowerCase() ?? ''
this.keys = splited.filter((_, index) => index % 2 == 0)
this.values = splited.filter((_, index) => index % 2 == 1)
}
get variables(){
if(this.keys.length !== this.values.length){
throw new Error(`I can't, keys and values are not the same`)
}
let variablesText = ''
for(let index = 0; index < this.keys.length; index++){
const key = this.keys[index]
const value = this.values[index]
variablesText += `\nexport const s${key} = '${value}'`
}
return variablesText
}
get mainObject(){
return `
/** Material ${capitalizeOne(this.name)} Colors */
const ${this.name}:TailwindColorObject = {
'50' : s50,
'100' : s100,
'200' : s200,
'300' : s300,
'400' : s400,
'500' : s500,
'600' : s600,
'700' : s700,
'800' : s800,
'900' : s900,
}
export default ${this.name}`
}
get fileText(){
return `${fileHeader(`Tailwind ${capitalizeOne(this.name)} Colors`, 'tailwind.creator.js')}
import { TailwindColorObject } from './types'
${this.variables}
${this.mainObject}`
}
async createFile(){
const filePath = `./src/tailwind/${this.name}.ts`
await writeFile(filePath, this.fileText)
console.log(`tailwind.creator: ${this.name}.ts created successfully`)
}
}
/**
* Creates an instance of TailwindColorFamily
* @param {string} text
* @returns Instance of TailwindColorFamily
*/
const colorFamily = (text) => new TailwindColorFamily(text)
const colorFamilies = [
colorFamily(`Slate
50
#f8fafc
100
#f1f5f9
200
#e2e8f0
300
#cbd5e1
400
#94a3b8
500
#64748b
600
#475569
700
#334155
800
#1e293b
900
#0f172a`),
colorFamily(`Gray
50
#f9fafb
100
#f3f4f6
200
#e5e7eb
300
#d1d5db
400
#9ca3af
500
#6b7280
600
#4b5563
700
#374151
800
#1f2937
900
#111827`),
colorFamily(`Zinc
50
#fafafa
100
#f4f4f5
200
#e4e4e7
300
#d4d4d8
400
#a1a1aa
500
#71717a
600
#52525b
700
#3f3f46
800
#27272a
900
#18181b`),
colorFamily(`Neutral
50
#fafafa
100
#f5f5f5
200
#e5e5e5
300
#d4d4d4
400
#a3a3a3
500
#737373
600
#525252
700
#404040
800
#262626
900
#171717`),
colorFamily(`Stone
50
#fafaf9
100
#f5f5f4
200
#e7e5e4
300
#d6d3d1
400
#a8a29e
500
#78716c
600
#57534e
700
#44403c
800
#292524
900
#1c1917`),
colorFamily(`Red
50
#fef2f2
100
#fee2e2
200
#fecaca
300
#fca5a5
400
#f87171
500
#ef4444
600
#dc2626
700
#b91c1c
800
#991b1b
900
#7f1d1d`),
colorFamily(`Orange
50
#fff7ed
100
#ffedd5
200
#fed7aa
300
#fdba74
400
#fb923c
500
#f97316
600
#ea580c
700
#c2410c
800
#9a3412
900
#7c2d12`),
colorFamily(`Amber
50
#fffbeb
100
#fef3c7
200
#fde68a
300
#fcd34d
400
#fbbf24
500
#f59e0b
600
#d97706
700
#b45309
800
#92400e
900
#78350f`),
colorFamily(`Yellow
50
#fefce8
100
#fef9c3
200
#fef08a
300
#fde047
400
#facc15
500
#eab308
600
#ca8a04
700
#a16207
800
#854d0e
900
#713f12`),
colorFamily(`Lime
50
#f7fee7
100
#ecfccb
200
#d9f99d
300
#bef264
400
#a3e635
500
#84cc16
600
#65a30d
700
#4d7c0f
800
#3f6212
900
#365314`),
colorFamily(`Green
50
#f0fdf4
100
#dcfce7
200
#bbf7d0
300
#86efac
400
#4ade80
500
#22c55e
600
#16a34a
700
#15803d
800
#166534
900
#14532d`),
colorFamily(`Emerald
50
#ecfdf5
100
#d1fae5
200
#a7f3d0
300
#6ee7b7
400
#34d399
500
#10b981
600
#059669
700
#047857
800
#065f46
900
#064e3b`),
colorFamily(`Teal
50
#f0fdfa
100
#ccfbf1
200
#99f6e4
300
#5eead4
400
#2dd4bf
500
#14b8a6
600
#0d9488
700
#0f766e
800
#115e59
900
#134e4a`),
colorFamily(`Cyan
50
#ecfeff
100
#cffafe
200
#a5f3fc
300
#67e8f9
400
#22d3ee
500
#06b6d4
600
#0891b2
700
#0e7490
800
#155e75
900
#164e63`),
colorFamily(`Sky
50
#f0f9ff
100
#e0f2fe
200
#bae6fd
300
#7dd3fc
400
#38bdf8
500
#0ea5e9
600
#0284c7
700
#0369a1
800
#075985
900
#0c4a6e`),
colorFamily(`Blue
50
#eff6ff
100
#dbeafe
200
#bfdbfe
300
#93c5fd
400
#60a5fa
500
#3b82f6
600
#2563eb
700
#1d4ed8
800
#1e40af
900
#1e3a8a`),
colorFamily(`Indigo
50
#eef2ff
100
#e0e7ff
200
#c7d2fe
300
#a5b4fc
400
#818cf8
500
#6366f1
600
#4f46e5
700
#4338ca
800
#3730a3
900
#312e81`),
colorFamily(`Violet
50
#f5f3ff
100
#ede9fe
200
#ddd6fe
300
#c4b5fd
400
#a78bfa
500
#8b5cf6
600
#7c3aed
700
#6d28d9
800
#5b21b6
900
#4c1d95`),
colorFamily(`Purple
50
#faf5ff
100
#f3e8ff
200
#e9d5ff
300
#d8b4fe
400
#c084fc
500
#a855f7
600
#9333ea
700
#7e22ce
800
#6b21a8
900
#581c87`),
colorFamily(`Fuchsia
50
#fdf4ff
100
#fae8ff
200
#f5d0fe
300
#f0abfc
400
#e879f9
500
#d946ef
600
#c026d3
700
#a21caf
800
#86198f
900
#701a75`),
colorFamily(`Pink
50
#fdf2f8
100
#fce7f3
200
#fbcfe8
300
#f9a8d4
400
#f472b6
500
#ec4899
600
#db2777
700
#be185d
800
#9d174d
900
#831843`),
colorFamily(`Rose
50
#fff1f2
100
#ffe4e6
200
#fecdd3
300
#fda4af
400
#fb7185
500
#f43f5e
600
#e11d48
700
#be123c
800
#9f1239
900
#881337`),
]
function tailwindCreator(){
colorFamilies.forEach(colorFamily => colorFamily.createFile())
}
// eslint-disable-next-line no-undef
module.exports = {
tailwindCreator
}