diff options
Diffstat (limited to 'src')
79 files changed, 1021 insertions, 56 deletions
diff --git a/src/definitions/color.ts b/src/definitions/color.ts new file mode 100644 index 00000000..a5bbd282 --- /dev/null +++ b/src/definitions/color.ts @@ -0,0 +1,15 @@ +import type { LocaleEntry } from './definitions'; + +/** + * The possible definitions related to color. + */ +export type ColorDefinitions = LocaleEntry<{ + /** + * Human readable color names + */ + human: string[]; + /** + * Color space names. + */ + space: string[]; +}>; diff --git a/src/definitions/commerce.ts b/src/definitions/commerce.ts index 65aef4ba..8157c1fc 100644 --- a/src/definitions/commerce.ts +++ b/src/definitions/commerce.ts @@ -5,10 +5,6 @@ import type { LocaleEntry } from './definitions'; */ export type CommerceDefinitions = LocaleEntry<{ /** - * Human readable color names - */ - color: string[]; - /** * Department names inside a shop. */ department: string[]; diff --git a/src/definitions/definitions.ts b/src/definitions/definitions.ts index fae443ba..092c73a2 100644 --- a/src/definitions/definitions.ts +++ b/src/definitions/definitions.ts @@ -1,5 +1,6 @@ import type { AddressDefinitions } from './address'; import type { AnimalDefinitions } from './animal'; +import type { ColorDefinitions } from './color'; import type { CommerceDefinitions } from './commerce'; import type { CompanyDefinitions } from './company'; import type { DatabaseDefinitions } from './database'; @@ -26,6 +27,7 @@ export type LocaleEntry<T> = Partial<T> & export interface Definitions { address: AddressDefinitions; animal: AnimalDefinitions; + color: ColorDefinitions; commerce: CommerceDefinitions; company: CompanyDefinitions; database: DatabaseDefinitions; diff --git a/src/definitions/index.ts b/src/definitions/index.ts index bcfcab0f..7341e241 100644 --- a/src/definitions/index.ts +++ b/src/definitions/index.ts @@ -1,5 +1,6 @@ export type { AddressDefinitions } from './address'; export type { AnimalDefinitions } from './animal'; +export type { ColorDefinitions } from './color'; export type { CommerceDefinitions, CommerceProductNameDefinitions, diff --git a/src/faker.ts b/src/faker.ts index 3a7962c8..a252a3e0 100644 --- a/src/faker.ts +++ b/src/faker.ts @@ -3,6 +3,7 @@ import { FakerError } from './errors/faker-error'; import type { KnownLocale } from './locales'; import { Address } from './modules/address'; import { Animal } from './modules/animal'; +import { Color } from './modules/color'; import { Commerce } from './modules/commerce'; import { Company } from './modules/company'; import { Database } from './modules/database'; @@ -60,6 +61,7 @@ export class Faker { readonly address: Address = new Address(this); readonly animal: Animal = new Animal(this); + readonly color: Color = new Color(this); readonly commerce: Commerce = new Commerce(this); readonly company: Company = new Company(this); readonly database: Database = new Database(this); diff --git a/src/index.ts b/src/index.ts index 64223a09..d437fd9d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ import allLocales from './locales'; export type { AddressDefinitions, AnimalDefinitions, + ColorDefinitions, CommerceDefinitions, CommerceProductNameDefinitions, CompanyDefinitions, @@ -27,6 +28,14 @@ export type { } from './definitions'; export { FakerError } from './errors/faker-error'; export type { FakerOptions, UsableLocale, UsedLocales } from './faker'; +export type { + Casing, + ColorFormat, + CSSFunction, + CSSSpace, + NumberColorFormat, + StringColorFormat, +} from './modules/color'; export { Gender } from './modules/name'; export type { GenderType } from './modules/name'; export { Faker }; diff --git a/src/locales/ar/commerce/color.ts b/src/locales/ar/color/human.ts index 71b2a10d..71b2a10d 100644 --- a/src/locales/ar/commerce/color.ts +++ b/src/locales/ar/color/human.ts diff --git a/src/locales/ar/color/index.ts b/src/locales/ar/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/ar/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/ar/commerce/index.ts b/src/locales/ar/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/ar/commerce/index.ts +++ b/src/locales/ar/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/ar/index.ts b/src/locales/ar/index.ts index e3e47d94..643d2823 100644 --- a/src/locales/ar/index.ts +++ b/src/locales/ar/index.ts @@ -5,6 +5,7 @@ import type { LocaleDefinition } from '../..'; import address from './address'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import date from './date'; import name_ from './name'; @@ -17,6 +18,7 @@ const ar: LocaleDefinition = { separator: ' & ', address, cell_phone, + color, commerce, date, name: name_, diff --git a/src/locales/az/commerce/color.ts b/src/locales/az/color/human.ts index c84f6270..c84f6270 100644 --- a/src/locales/az/commerce/color.ts +++ b/src/locales/az/color/human.ts diff --git a/src/locales/az/color/index.ts b/src/locales/az/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/az/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/az/commerce/index.ts b/src/locales/az/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/az/commerce/index.ts +++ b/src/locales/az/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/az/index.ts b/src/locales/az/index.ts index 05b10fd4..55d7d807 100644 --- a/src/locales/az/index.ts +++ b/src/locales/az/index.ts @@ -4,6 +4,7 @@ */ import type { LocaleDefinition } from '../..'; import address from './address'; +import color from './color'; import commerce from './commerce'; import company from './company'; import date from './date'; @@ -15,6 +16,7 @@ const az: LocaleDefinition = { title: 'Azerbaijani', separator: ' və ', address, + color, commerce, company, date, diff --git a/src/locales/el/commerce/color.ts b/src/locales/el/color/human.ts index fb1de99c..fb1de99c 100644 --- a/src/locales/el/commerce/color.ts +++ b/src/locales/el/color/human.ts diff --git a/src/locales/el/color/index.ts b/src/locales/el/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/el/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/el/commerce/index.ts b/src/locales/el/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/el/commerce/index.ts +++ b/src/locales/el/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/el/index.ts b/src/locales/el/index.ts index 430bdf68..69b91f40 100644 --- a/src/locales/el/index.ts +++ b/src/locales/el/index.ts @@ -7,6 +7,7 @@ import address from './address'; import app from './app'; import business from './business'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import company from './company'; import finance from './finance'; @@ -24,6 +25,7 @@ const el: LocaleDefinition = { app, business, cell_phone, + color, commerce, company, finance, diff --git a/src/locales/en/commerce/color.ts b/src/locales/en/color/human.ts index 6a9071ae..6a9071ae 100644 --- a/src/locales/en/commerce/color.ts +++ b/src/locales/en/color/human.ts diff --git a/src/locales/en/color/index.ts b/src/locales/en/color/index.ts new file mode 100644 index 00000000..2f84c198 --- /dev/null +++ b/src/locales/en/color/index.ts @@ -0,0 +1,14 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; +import space from './space'; + +const color: ColorDefinitions = { + human, + space, +}; + +export default color; diff --git a/src/locales/en/color/space.ts b/src/locales/en/color/space.ts new file mode 100644 index 00000000..2fe91419 --- /dev/null +++ b/src/locales/en/color/space.ts @@ -0,0 +1,43 @@ +export default [ + 'CIE 1931 XYZ', + 'CIEUVW', + 'Uniform Color Spaces (UCSs)', + 'CIELUV', + 'CIELAB', + 'HSLuv', + 'sRGB', + 'Adobe RGB', + 'Adobe Wide Gamut RGB', + 'Rec. 2100', + 'ProPhoto RGB Color Space', + 'scRGB', + 'DCI-P3', + 'Display-P3', + 'Rec. 601', + 'Rec. 709', + 'Academy Color Encoding System (ACES)', + 'Rec. 2020', + 'YPbPr', + 'YDbDr', + 'YIQ', + 'xvYCC', + 'sYCC', + 'HSV', + 'HSL', + 'HWB', + 'RGBA', + 'HSLA', + 'LCh', + 'CMY', + 'CMYK', + 'Munsell Color System', + 'Natural Color System (NSC)', + 'Pantone Matching System (PMS)', + 'RAL', + 'Federal Standard 595C', + 'British Standard Colour (BS)', + 'HKS', + 'LMS', + 'RG', + 'RGK', +]; diff --git a/src/locales/en/commerce/index.ts b/src/locales/en/commerce/index.ts index 2f3f890d..dab2aa69 100644 --- a/src/locales/en/commerce/index.ts +++ b/src/locales/en/commerce/index.ts @@ -3,13 +3,11 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_description from './product_description'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_description, product_name, diff --git a/src/locales/en/index.ts b/src/locales/en/index.ts index ded35323..75bd0437 100644 --- a/src/locales/en/index.ts +++ b/src/locales/en/index.ts @@ -8,6 +8,7 @@ import animal from './animal'; import app from './app'; import business from './business'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import company from './company'; import database from './database'; @@ -32,6 +33,7 @@ const en: LocaleDefinition = { app, business, cell_phone, + color, commerce, company, database, diff --git a/src/locales/es/commerce/color.ts b/src/locales/es/color/human.ts index c30d0894..c30d0894 100644 --- a/src/locales/es/commerce/color.ts +++ b/src/locales/es/color/human.ts diff --git a/src/locales/es/color/index.ts b/src/locales/es/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/es/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/es/commerce/index.ts b/src/locales/es/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/es/commerce/index.ts +++ b/src/locales/es/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/es/index.ts b/src/locales/es/index.ts index dd8a4775..b97f68a2 100644 --- a/src/locales/es/index.ts +++ b/src/locales/es/index.ts @@ -5,6 +5,7 @@ import type { LocaleDefinition } from '../..'; import address from './address'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import company from './company'; import internet from './internet'; @@ -15,6 +16,7 @@ const es: LocaleDefinition = { title: 'Spanish', address, cell_phone, + color, commerce, company, internet, diff --git a/src/locales/es_MX/commerce/color.ts b/src/locales/es_MX/color/human.ts index 9d7e4a07..9d7e4a07 100644 --- a/src/locales/es_MX/commerce/color.ts +++ b/src/locales/es_MX/color/human.ts diff --git a/src/locales/es_MX/color/index.ts b/src/locales/es_MX/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/es_MX/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/es_MX/commerce/index.ts b/src/locales/es_MX/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/es_MX/commerce/index.ts +++ b/src/locales/es_MX/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/es_MX/index.ts b/src/locales/es_MX/index.ts index 189829fa..c60536e9 100644 --- a/src/locales/es_MX/index.ts +++ b/src/locales/es_MX/index.ts @@ -5,6 +5,7 @@ import type { LocaleDefinition } from '../..'; import address from './address'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import company from './company'; import internet from './internet'; @@ -18,6 +19,7 @@ const es_MX: LocaleDefinition = { separator: ' & ', address, cell_phone, + color, commerce, company, internet, diff --git a/src/locales/fa/commerce/color.ts b/src/locales/fa/color/human.ts index bc002f4b..bc002f4b 100644 --- a/src/locales/fa/commerce/color.ts +++ b/src/locales/fa/color/human.ts diff --git a/src/locales/fa/color/index.ts b/src/locales/fa/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/fa/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/fa/commerce/index.ts b/src/locales/fa/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/fa/commerce/index.ts +++ b/src/locales/fa/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/fa/index.ts b/src/locales/fa/index.ts index 9f53ec55..b554f801 100644 --- a/src/locales/fa/index.ts +++ b/src/locales/fa/index.ts @@ -5,6 +5,7 @@ import type { LocaleDefinition } from '../..'; import address from './address'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import company from './company'; import date from './date'; @@ -19,6 +20,7 @@ const fa: LocaleDefinition = { title: 'Farsi', address, cell_phone, + color, commerce, company, date, diff --git a/src/locales/he/commerce/color.ts b/src/locales/he/color/human.ts index a6223626..a6223626 100644 --- a/src/locales/he/commerce/color.ts +++ b/src/locales/he/color/human.ts diff --git a/src/locales/he/color/index.ts b/src/locales/he/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/he/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/he/commerce/index.ts b/src/locales/he/commerce/index.ts index 2f3f890d..dab2aa69 100644 --- a/src/locales/he/commerce/index.ts +++ b/src/locales/he/commerce/index.ts @@ -3,13 +3,11 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_description from './product_description'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_description, product_name, diff --git a/src/locales/he/index.ts b/src/locales/he/index.ts index 1ab59ac8..38a26a29 100644 --- a/src/locales/he/index.ts +++ b/src/locales/he/index.ts @@ -5,6 +5,7 @@ import type { LocaleDefinition } from '../..'; import address from './address'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import date from './date'; import lorem from './lorem'; @@ -17,6 +18,7 @@ const he: LocaleDefinition = { separator: 'ו ', address, cell_phone, + color, commerce, date, lorem, diff --git a/src/locales/hy/commerce/color.ts b/src/locales/hy/color/human.ts index fab129e0..fab129e0 100644 --- a/src/locales/hy/commerce/color.ts +++ b/src/locales/hy/color/human.ts diff --git a/src/locales/hy/color/index.ts b/src/locales/hy/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/hy/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/hy/commerce/index.ts b/src/locales/hy/commerce/index.ts deleted file mode 100644 index 26b2864f..00000000 --- a/src/locales/hy/commerce/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* - * This file is automatically generated. - * Run 'pnpm run generate:locales' to update. - */ -import type { CommerceDefinitions } from '../../..'; -import color from './color'; - -const commerce: CommerceDefinitions = { - color, -}; - -export default commerce; diff --git a/src/locales/hy/index.ts b/src/locales/hy/index.ts index 2f9da62c..1a1fb639 100644 --- a/src/locales/hy/index.ts +++ b/src/locales/hy/index.ts @@ -4,7 +4,7 @@ */ import type { LocaleDefinition } from '../..'; import address from './address'; -import commerce from './commerce'; +import color from './color'; import date from './date'; import internet from './internet'; import lorem from './lorem'; @@ -15,7 +15,7 @@ const hy: LocaleDefinition = { title: 'Armenian', separator: ' և ', address, - commerce, + color, date, internet, lorem, diff --git a/src/locales/lv/commerce/color.ts b/src/locales/lv/color/human.ts index fb99fb4a..fb99fb4a 100644 --- a/src/locales/lv/commerce/color.ts +++ b/src/locales/lv/color/human.ts diff --git a/src/locales/lv/color/index.ts b/src/locales/lv/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/lv/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/lv/commerce/index.ts b/src/locales/lv/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/lv/commerce/index.ts +++ b/src/locales/lv/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/lv/index.ts b/src/locales/lv/index.ts index 31fe8253..527d7c3f 100644 --- a/src/locales/lv/index.ts +++ b/src/locales/lv/index.ts @@ -5,6 +5,7 @@ import type { LocaleDefinition } from '../..'; import address from './address'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import company from './company'; import date from './date'; @@ -18,6 +19,7 @@ const lv: LocaleDefinition = { separator: ' un ', address, cell_phone, + color, commerce, company, date, diff --git a/src/locales/nl/commerce/color.ts b/src/locales/nl/color/human.ts index 4c8928e1..4c8928e1 100644 --- a/src/locales/nl/commerce/color.ts +++ b/src/locales/nl/color/human.ts diff --git a/src/locales/nl/color/index.ts b/src/locales/nl/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/nl/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/nl/commerce/index.ts b/src/locales/nl/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/nl/commerce/index.ts +++ b/src/locales/nl/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/nl/index.ts b/src/locales/nl/index.ts index 7dc23561..6e6fb8a5 100644 --- a/src/locales/nl/index.ts +++ b/src/locales/nl/index.ts @@ -4,6 +4,7 @@ */ import type { LocaleDefinition } from '../..'; import address from './address'; +import color from './color'; import commerce from './commerce'; import company from './company'; import date from './date'; @@ -16,6 +17,7 @@ import phone_number from './phone_number'; const nl: LocaleDefinition = { title: 'Dutch', address, + color, commerce, company, date, diff --git a/src/locales/pt_BR/commerce/color.ts b/src/locales/pt_BR/color/human.ts index e2f37a86..e2f37a86 100644 --- a/src/locales/pt_BR/commerce/color.ts +++ b/src/locales/pt_BR/color/human.ts diff --git a/src/locales/pt_BR/color/index.ts b/src/locales/pt_BR/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/pt_BR/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/pt_BR/commerce/index.ts b/src/locales/pt_BR/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/pt_BR/commerce/index.ts +++ b/src/locales/pt_BR/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/pt_BR/index.ts b/src/locales/pt_BR/index.ts index a23c5227..de563dcd 100644 --- a/src/locales/pt_BR/index.ts +++ b/src/locales/pt_BR/index.ts @@ -4,6 +4,7 @@ */ import type { LocaleDefinition } from '../..'; import address from './address'; +import color from './color'; import commerce from './commerce'; import company from './company'; import date from './date'; @@ -15,6 +16,7 @@ import phone_number from './phone_number'; const pt_BR: LocaleDefinition = { title: 'Portuguese (Brazil)', address, + color, commerce, company, date, diff --git a/src/locales/pt_PT/commerce/color.ts b/src/locales/pt_PT/color/human.ts index cf682574..cf682574 100644 --- a/src/locales/pt_PT/commerce/color.ts +++ b/src/locales/pt_PT/color/human.ts diff --git a/src/locales/pt_PT/color/index.ts b/src/locales/pt_PT/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/pt_PT/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/pt_PT/commerce/index.ts b/src/locales/pt_PT/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/pt_PT/commerce/index.ts +++ b/src/locales/pt_PT/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/pt_PT/index.ts b/src/locales/pt_PT/index.ts index cd2281d8..ca3a9f30 100644 --- a/src/locales/pt_PT/index.ts +++ b/src/locales/pt_PT/index.ts @@ -5,6 +5,7 @@ import type { LocaleDefinition } from '../..'; import address from './address'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import date from './date'; import internet from './internet'; @@ -15,6 +16,7 @@ const pt_PT: LocaleDefinition = { title: 'Portuguese (Portugal)', address, cell_phone, + color, commerce, date, internet, diff --git a/src/locales/ru/commerce/color.ts b/src/locales/ru/color/human.ts index 2f4af921..2f4af921 100644 --- a/src/locales/ru/commerce/color.ts +++ b/src/locales/ru/color/human.ts diff --git a/src/locales/ru/color/index.ts b/src/locales/ru/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/ru/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/ru/commerce/index.ts b/src/locales/ru/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/ru/commerce/index.ts +++ b/src/locales/ru/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/ru/index.ts b/src/locales/ru/index.ts index b5366714..d8e94dee 100644 --- a/src/locales/ru/index.ts +++ b/src/locales/ru/index.ts @@ -4,6 +4,7 @@ */ import type { LocaleDefinition } from '../..'; import address from './address'; +import color from './color'; import commerce from './commerce'; import company from './company'; import date from './date'; @@ -17,6 +18,7 @@ const ru: LocaleDefinition = { title: 'Russian', separator: ' и ', address, + color, commerce, company, date, diff --git a/src/locales/sv/commerce/color.ts b/src/locales/sv/color/human.ts index 359cbdaa..359cbdaa 100644 --- a/src/locales/sv/commerce/color.ts +++ b/src/locales/sv/color/human.ts diff --git a/src/locales/sv/color/index.ts b/src/locales/sv/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/sv/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/sv/commerce/index.ts b/src/locales/sv/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/sv/commerce/index.ts +++ b/src/locales/sv/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/sv/index.ts b/src/locales/sv/index.ts index dc0f0985..6c5ffe69 100644 --- a/src/locales/sv/index.ts +++ b/src/locales/sv/index.ts @@ -5,6 +5,7 @@ import type { LocaleDefinition } from '../..'; import address from './address'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import company from './company'; import date from './date'; @@ -17,6 +18,7 @@ const sv: LocaleDefinition = { title: 'Swedish', address, cell_phone, + color, commerce, company, date, diff --git a/src/locales/tr/commerce/color.ts b/src/locales/tr/color/human.ts index 313a8afc..313a8afc 100644 --- a/src/locales/tr/commerce/color.ts +++ b/src/locales/tr/color/human.ts diff --git a/src/locales/tr/color/index.ts b/src/locales/tr/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/tr/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/tr/commerce/index.ts b/src/locales/tr/commerce/index.ts index 2f3f890d..dab2aa69 100644 --- a/src/locales/tr/commerce/index.ts +++ b/src/locales/tr/commerce/index.ts @@ -3,13 +3,11 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_description from './product_description'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_description, product_name, diff --git a/src/locales/tr/index.ts b/src/locales/tr/index.ts index 7a7fac2f..70a988b6 100644 --- a/src/locales/tr/index.ts +++ b/src/locales/tr/index.ts @@ -5,6 +5,7 @@ import type { LocaleDefinition } from '../..'; import address from './address'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import internet from './internet'; import lorem from './lorem'; @@ -15,6 +16,7 @@ const tr: LocaleDefinition = { title: 'Turkish', address, cell_phone, + color, commerce, internet, lorem, diff --git a/src/locales/ur/commerce/color.ts b/src/locales/ur/color/human.ts index 717ffb4c..717ffb4c 100644 --- a/src/locales/ur/commerce/color.ts +++ b/src/locales/ur/color/human.ts diff --git a/src/locales/ur/color/index.ts b/src/locales/ur/color/index.ts new file mode 100644 index 00000000..79cc39f0 --- /dev/null +++ b/src/locales/ur/color/index.ts @@ -0,0 +1,12 @@ +/* + * This file is automatically generated. + * Run 'pnpm run generate:locales' to update. + */ +import type { ColorDefinitions } from '../../..'; +import human from './human'; + +const color: ColorDefinitions = { + human, +}; + +export default color; diff --git a/src/locales/ur/commerce/index.ts b/src/locales/ur/commerce/index.ts index 823fcbd2..7e5f4475 100644 --- a/src/locales/ur/commerce/index.ts +++ b/src/locales/ur/commerce/index.ts @@ -3,12 +3,10 @@ * Run 'pnpm run generate:locales' to update. */ import type { CommerceDefinitions } from '../../..'; -import color from './color'; import department from './department'; import product_name from './product_name'; const commerce: CommerceDefinitions = { - color, department, product_name, }; diff --git a/src/locales/ur/index.ts b/src/locales/ur/index.ts index 49aae08e..5794e793 100644 --- a/src/locales/ur/index.ts +++ b/src/locales/ur/index.ts @@ -8,6 +8,7 @@ import animal from './animal'; import app from './app'; import business from './business'; import cell_phone from './cell_phone'; +import color from './color'; import commerce from './commerce'; import date from './date'; import finance from './finance'; @@ -25,6 +26,7 @@ const ur: LocaleDefinition = { app, business, cell_phone, + color, commerce, date, finance, diff --git a/src/modules/color/index.ts b/src/modules/color/index.ts new file mode 100644 index 00000000..8b5fdba2 --- /dev/null +++ b/src/modules/color/index.ts @@ -0,0 +1,696 @@ +import type { Faker } from '../../faker'; + +/** + * Color space names supported by CSS. + */ +export const CSS_SPACES = [ + 'sRGB', + 'display-p3', + 'rec2020', + 'a98-rgb', + 'prophoto-rgb', + 'rec2020', +] as const; + +/** + * Functions supported by CSS to produce color. + */ +export const CSS_FUNCTIONS = [ + 'rgb', + 'rgba', + 'hsl', + 'hsla', + 'hwb', + 'cmyk', + 'lab', + 'lch', + 'color', +] as const; + +export type CSSFunction = typeof CSS_FUNCTIONS[number]; +export type CSSSpace = typeof CSS_SPACES[number]; +export type StringColorFormat = 'css' | 'binary'; +export type NumberColorFormat = 'decimal'; +export type ColorFormat = StringColorFormat | NumberColorFormat; +export type Casing = 'lower' | 'upper' | 'mixed'; + +/** + * Formats the hex format of a generated color string according + * to options specified by user. + * + * @param hexColor Hex color string to be formatted. + * @param options Options object. + * @param options.prefix Prefix of the generated hex color. Defaults to `'0x'`. + * @param options.casing Letter type case of the generated hex color. Defaults to `'mixed'`. + */ +function formatHexColor( + hexColor: string, + options?: { + prefix?: string; + casing?: Casing; + } +): string { + switch (options?.casing) { + case 'upper': + hexColor = hexColor.toUpperCase(); + break; + case 'lower': + hexColor = hexColor.toLowerCase(); + break; + } + if (options?.prefix) { + hexColor = options.prefix + hexColor; + } + return hexColor; +} + +/** + * Converts an array of numbers into binary string format. + * + * @param values Array of values to be converted. + */ +function toBinary(values: number[]): string { + const binary: string[] = values.map((value) => { + const isFloat = value % 1 !== 0; + if (isFloat) { + const buffer = new ArrayBuffer(4); + new DataView(buffer).setFloat32(0, value); + const bytes = new Uint8Array(buffer); + return toBinary(Array.from(bytes)).split(' ').join(''); + } + return (value >>> 0).toString(2).padStart(8, '0'); + }); + return binary.join(' '); +} + +/** + * Converts an array of numbers into CSS accepted format. + * + * @param values Array of values to be converted. + * @param cssFunction CSS function to be generated for the color. Defaults to `'rgb'`. + * @param space Color space to format CSS color function with. Defaults to `'sRGB'`. + */ +function toCSS( + values: number[], + cssFunction: CSSFunction = 'rgb', + space: CSSSpace = 'sRGB' +): string { + const percentage = (value: number) => Math.round(value * 100); + switch (cssFunction) { + case 'rgba': + return `rgba(${values[0]}, ${values[1]}, ${values[2]}, ${values[3]})`; + case 'color': + return `color(${space} ${values[0]} ${values[1]} ${values[2]})`; + case 'cmyk': + return `cmyk(${percentage(values[0])}%, ${percentage( + values[1] + )}%, ${percentage(values[2])}%, ${percentage(values[3])}%)`; + case 'hsl': + return `hsl(${values[0]}deg ${percentage(values[1])}% ${percentage( + values[2] + )}%)`; + case 'hsla': + return `hsl(${values[0]}deg ${percentage(values[1])}% ${percentage( + values[2] + )}% / ${percentage(values[3])})`; + case 'hwb': + return `hwb(${values[0]} ${percentage(values[1])}% ${percentage( + values[2] + )}%)`; + case 'lab': + return `lab(${percentage(values[0])}% ${values[1]} ${values[2]})`; + case 'lch': + return `lch(${percentage(values[0])}% ${values[1]} ${values[2]})`; + case 'rgb': + default: + return `rgb(${values[0]}, ${values[1]}, ${values[2]})`; + } +} + +/** + * Converts an array of color values to the specified color format. + * + * @param values Array of color values to be converted. + * @param format Format of generated RGB color. + * @param cssFunction CSS function to be generated for the color. Defaults to `'rgb'`. + * @param space Color space to format CSS color function with. Defaults to `'sRGB'`. + */ +function toColorFormat( + values: number[], + format: ColorFormat, + cssFunction: CSSFunction = 'rgb', + space: CSSSpace = 'sRGB' +): string | number[] { + switch (format) { + case 'css': + return toCSS(values, cssFunction, space); + case 'binary': + return toBinary(values); + default: + return values; + } +} + +/** + * Module to generate colors. + */ +export class Color { + constructor(private readonly faker: Faker) { + // Bind `this` so namespaced is working correctly + for (const name of Object.getOwnPropertyNames(Color.prototype)) { + if (name === 'constructor' || typeof this[name] !== 'function') { + continue; + } + this[name] = this[name].bind(this); + } + } + + /** + * Returns a random human readable color name. + * + * @example + * faker.color.human() // 'red' + */ + human(): string { + return this.faker.helpers.arrayElement(this.faker.definitions.color.human); + } + + /** + * Returns a random color space name from the worldwide accepted color spaces. + * Source: https://en.wikipedia.org/wiki/List_of_color_spaces_and_their_uses + * + * @example + * faker.color.space() // 'sRGB' + */ + space(): string { + return this.faker.helpers.arrayElement(this.faker.definitions.color.space); + } + + /** + * Returns a random css supported color function name. + * + * @example + * faker.color.cssSupportedFunction() // 'rgb' + */ + cssSupportedFunction(): string { + return this.faker.helpers.arrayElement(CSS_FUNCTIONS); + } + + /** + * Returns a random css supported color space name. + * + * @example + * faker.color.cssSupportedSpace() // 'display-p3' + */ + cssSupportedSpace(): string { + return this.faker.helpers.arrayElement(CSS_SPACES); + } + + /** + * Returns an RGB color. + * + * @example + * faker.color.rgb() // '0xffffFF' + */ + rgb(): string; + /** + * Returns an RGB color. + * + * @param options Options object. + * @param options.prefix Prefix of the generated hex color. Only applied when 'hex' format is used. Defaults to `'0x'`. + * @param options.casing Letter type case of the generated hex color. Only applied when `'hex'` format is used. Defaults to `'mixed'`. + * @param options.format Format of generated RGB color. Defaults to `hex`. + * @param options.includeAlpha Adds an alpha value to the color (RGBA). Defaults to `false`. + * + * @example + * faker.color.rgb() // '0xffffFF' + * faker.color.rgb({ prefix: '#' }) // '#ffffFF' + * faker.color.rgb({ casing: 'upper' }) // '0xFFFFFF' + * faker.color.rgb({ casing: 'lower' }) // '0xffffff' + * faker.color.rgb({ prefix: '#', casing: 'lower' }) // '#ffffff' + * faker.color.rgb({ format: 'hex', casing: 'lower' }) // '#ffffff' + * faker.color.rgb({ format: 'css' }) // 'rgb(255, 0, 0)' + * faker.color.rgb({ format: 'binary' }) // '10000000 00000000 11111111' + */ + rgb(options?: { + prefix?: string; + casing?: Casing; + format?: 'hex' | StringColorFormat; + includeAlpha?: boolean; + }): string; + /** + * Returns an RGB color. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'hex'`. + * @param options.includeAlpha Adds an alpha value to the color (RGBA). Defaults to `false`. + * + * @example + * faker.color.rgb() // '0xffffFF' + * faker.color.rgb({ format: 'decimal' }) // [255, 255, 255] + * faker.color.rgb({ format: 'decimal', includeAlpha: true }) // [255, 255, 255, 0.4] + */ + rgb(options?: { + format?: NumberColorFormat; + includeAlpha?: boolean; + }): number[]; + /** + * Returns an RGB color. + * + * @param options Options object. + * @param options.prefix Prefix of the generated hex color. Only applied when `'hex'` format is used. Defaults to `'0x'`. + * @param options.casing Letter type case of the generated hex color. Only applied when `'hex'` format is used. Defaults to `'mixed'`. + * @param options.format Format of generated RGB color. Defaults to `'hex'`. + * @param options.includeAlpha Adds an alpha value to the color (RGBA). Defaults to `false`. + * + * @example + * faker.color.rgb() // '0xffffFF' + * faker.color.rgb({ prefix: '#' }) // '#ffffFF' + * faker.color.rgb({ casing: 'upper' }) // '0xFFFFFF' + * faker.color.rgb({ casing: 'lower' }) // '0xffffff' + * faker.color.rgb({ prefix: '#', casing: 'lower' }) // '#ffffff' + * faker.color.rgb({ format: 'hex', casing: 'lower' }) // '#ffffff' + * faker.color.rgb({ format: 'decimal' }) // [255, 255, 255] + * faker.color.rgb({ format: 'css' }) // 'rgb(255, 0, 0)' + * faker.color.rgb({ format: 'binary' }) // '10000000 00000000 11111111' + * faker.color.rgb({ format: 'decimal', includeAlpha: true }) // [255, 255, 255, 0.4] + */ + rgb(options?: { + prefix?: string; + casing?: Casing; + format?: 'hex' | ColorFormat; + includeAlpha?: boolean; + }): string | number[]; + rgb(options?: { + prefix?: string; + casing?: Casing; + format?: 'hex' | ColorFormat; + includeAlpha?: boolean; + }): string | number[] { + const { + format = 'hex', + includeAlpha = false, + prefix = '#', + casing = 'lower', + } = options || {}; + options = { format, includeAlpha, prefix, casing }; + let color: string | number[]; + let cssFunction: CSSFunction = 'rgb'; + if (format === 'hex') { + color = this.faker.datatype.hexadecimal(includeAlpha ? 8 : 6).slice(2); + color = formatHexColor(color, options); + return color; + } + color = Array.from({ length: 3 }).map(() => + this.faker.datatype.number({ min: 0, max: 255 }) + ); + if (includeAlpha) { + color.push( + this.faker.datatype.float({ min: 0, max: 1, precision: 0.01 }) + ); + cssFunction = 'rgba'; + } + return toColorFormat(color, format, cssFunction); + } + + /** + * Returns a CMYK color. + * + * @example + * faker.color.cmyk() // [0.31, 0.52, 0.32, 0.43] + */ + cmyk(): number[]; + /** + * Returns a CMYK color. + * + * @param options Options object. + * @param options.format Format of generated CMYK color. Defaults to `'decimal'`. + * + * @example + * faker.color.cmyk() // [0.31, 0.52, 0.32, 0.43] + * faker.color.cmyk({ format: 'css' }) // cmyk(100%, 0%, 0%, 0%) + * faker.color.cmyk({ format: 'binary' }) // (8-32 bits) x 4 + */ + cmyk(options?: { format?: StringColorFormat }): string; + /** + * Returns a CMYK color. + * + * @param options Options object. + * @param options.format Format of generated CMYK color. Defaults to `'decimal'`. + * + * @example + * faker.color.cmyk() // [0.31, 0.52, 0.32, 0.43] + * faker.color.cmyk({ format: 'decimal' }) // [0.31, 0.52, 0.32, 0.43] + */ + cmyk(options?: { format?: NumberColorFormat }): number[]; + /** + * Returns a CMYK color. + * + * @param options Options object. + * @param options.format Format of generated CMYK color. Defaults to `'decimal'`. + * + * @example + * faker.color.cmyk() // [0.31, 0.52, 0.32, 0.43] + * faker.color.cmyk({ format: 'decimal' }) // [0.31, 0.52, 0.32, 0.43] + * faker.color.cmyk({ format: 'css' }) // cmyk(100%, 0%, 0%, 0%) + * faker.color.cmyk({ format: 'binary' }) // (8-32 bits) x 4 + */ + cmyk(options?: { format?: ColorFormat }): string | number[]; + cmyk(options?: { format?: ColorFormat }): string | number[] { + const color: string | number[] = Array.from({ length: 4 }).map(() => + this.faker.datatype.float({ min: 0, max: 1, precision: 0.01 }) + ); + return toColorFormat(color, options?.format || 'decimal', 'cmyk'); + } + + /** + * Returns an HSL color. + * + * @example + * faker.color.hsl() // [201, 0.23, 0.32] + */ + hsl(): number[]; + /** + * Returns an HSL color. + * + * @param options Options object. + * @param options.format Format of generated HSL color. Defaults to `'decimal'`. + * @param options.includeAlpha Adds an alpha value to the color (RGBA). Defaults to `false`. + * + * @example + * faker.color.hsl() // [201, 0.23, 0.32] + * faker.color.hsl({ format: 'css' }) // hsl(0deg, 100%, 80%) + * faker.color.hsl({ format: 'css', includeAlpha: true }) // hsl(0deg 100% 50% / 0.5) + * faker.color.hsl({ format: 'binary' }) // (8-32 bits) x 3 + * faker.color.hsl({ format: 'binary', includeAlpha: true }) // (8-32 bits) x 4 + */ + hsl(options?: { format?: StringColorFormat; includeAlpha?: boolean }): string; + /** + * Returns an HSL color. + * + * @param options Options object. + * @param options.format Format of generated HSL color. Defaults to `'decimal'`. + * @param options.includeAlpha Adds an alpha value to the color (RGBA). Defaults to `false`. + * + * @example + * faker.color.hsl() // [201, 0.23, 0.32] + * faker.color.hsl({ format: 'decimal' }) // [300, 0.21, 0.52] + * faker.color.hsl({ format: 'decimal', includeAlpha: true }) // [300, 0.21, 0.52, 0.28] + */ + hsl(options?: { + format?: NumberColorFormat; + includeAlpha?: boolean; + }): number[]; + /** + * Returns an HSL color. + * + * @param options Options object. + * @param options.format Format of generated HSL color. Defaults to `'decimal'`. + * @param options.includeAlpha Adds an alpha value to the color (RGBA). Defaults to `false`. + * + * @example + * faker.color.hsl() // [201, 0.23, 0.32] + * faker.color.hsl({ format: 'decimal' }) // [300, 0.21, 0.52] + * faker.color.hsl({ format: 'decimal', includeAlpha: true }) // [300, 0.21, 0.52, 0.28] + * faker.color.hsl({ format: 'css' }) // hsl(0deg, 100%, 80%) + * faker.color.hsl({ format: 'css', includeAlpha: true }) // hsl(0deg 100% 50% / 0.5) + * faker.color.hsl({ format: 'binary' }) // (8-32 bits) x 3 + * faker.color.hsl({ format: 'binary', includeAlpha: true }) // (8-32 bits) x 4 + */ + hsl(options?: { + format?: ColorFormat; + includeAlpha?: boolean; + }): string | number[]; + hsl(options?: { + format?: ColorFormat; + includeAlpha?: boolean; + }): string | number[] { + const hsl: number[] = [this.faker.datatype.number({ min: 0, max: 360 })]; + for (let i = 0; i < (options?.includeAlpha ? 3 : 2); i++) { + hsl.push(this.faker.datatype.float({ min: 0, max: 1, precision: 0.01 })); + } + return toColorFormat( + hsl, + options?.format || 'decimal', + options?.includeAlpha ? 'hsla' : 'hsl' + ); + } + + /** + * Returns an HWB color. + * + * @example + * faker.color.hwb() // [201, 0.21, 0.31] + */ + hwb(): number[]; + /** + * Returns an HWB color. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.hwb() // [201, 0.21, 0.31] + * faker.color.hwb({ format: 'css' }) // hwb(194 0% 0%) + * faker.color.hwb({ format: 'binary' }) // (8-32 bits x 3) + */ + hwb(options?: { format?: StringColorFormat }): string; + /** + * Returns an HWB color. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.hwb() // [201, 0.21, 0.31] + * faker.color.hwb({ format: 'decimal' }) // [201, 0.21, 0.31] + */ + hwb(options?: { format?: NumberColorFormat }): number[]; + /** + * Returns an HWB color. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.hwb() // [201, 0.21, 0.31] + * faker.color.hwb({ format: 'decimal' }) // [201, 0.21, 0.31] + * faker.color.hwb({ format: 'css' }) // hwb(194 0% 0%) + * faker.color.hwb({ format: 'binary' }) // (8-32 bits x 3) + */ + hwb(options?: { format?: ColorFormat }): string | number[]; + /** + * Returns an HWB color. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.hwb() // [201, 0.21, 0.31] + * faker.color.hwb({ format: 'decimal' }) // [201, 0.21, 0.31] + * faker.color.hwb({ format: 'css' }) // hwb(194 0% 0%) + * faker.color.hwb({ format: 'binary' }) // (8-32 bits x 3) + */ + hwb(options?: { format?: ColorFormat }): string | number[] { + const hsl: number[] = [this.faker.datatype.number({ min: 0, max: 360 })]; + for (let i = 0; i < 2; i++) { + hsl.push(this.faker.datatype.float({ min: 0, max: 1, precision: 0.01 })); + } + return toColorFormat(hsl, options?.format || 'decimal', 'hwb'); + } + + /** + * Returns a LAB (CIELAB) color. + * + * @example + * faker.color.lab() // [0.832133, -80.3245, 100.1234] + */ + lab(): number[]; + /** + * Returns a LAB (CIELAB) color. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.lab() // [0.832133, -80.3245, 100.1234] + * faker.color.lab({ format: 'css' }) // lab(29.2345% 39.3825 20.0664) + * faker.color.lab({ format: 'binary' }) // (8-32 bits x 3) + */ + lab(options?: { format?: StringColorFormat }): string; + /** + * Returns a LAB (CIELAB) color. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.lab() // [0.832133, -80.3245, 100.1234] + * faker.color.lab({ format: 'decimal' }) // [0.856773, -80.2345, 100.2341] + */ + lab(options?: { format?: NumberColorFormat }): number[]; + /** + * Returns a LAB (CIELAB) color. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.lab() // [0.832133, -80.3245, 100.1234] + * faker.color.lab({ format: 'decimal' }) // [0.856773, -80.2345, 100.2341] + * faker.color.lab({ format: 'css' }) // lab(29.2345% 39.3825 20.0664) + * faker.color.lab({ format: 'binary' }) // (8-32 bits x 3) + */ + lab(options?: { format?: ColorFormat }): string | number[]; + lab(options?: { format?: ColorFormat }): string | number[] { + const lab = [ + this.faker.datatype.float({ min: 0, max: 1, precision: 0.000001 }), + ]; + for (let i = 0; i < 2; i++) { + lab.push( + this.faker.datatype.float({ min: -100, max: 100, precision: 0.0001 }) + ); + } + return toColorFormat(lab, options?.format || 'decimal', 'lab'); + } + + /** + * Returns an LCH color. Even though upper bound of + * chroma in LCH color space is theoretically unbounded, + * it is bounded to 230 as anything above will not + * make a noticeable difference in the browser. + * + * @example + * faker.color.lch() // [0.522345, 72.2, 56.2] + */ + lch(): number[]; + /** + * Returns an LCH color. Even though upper bound of + * chroma in LCH color space is theoretically unbounded, + * it is bounded to 230 as anything above will not + * make a noticeable difference in the browser. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.lch() // [0.522345, 72.2, 56.2] + * faker.color.lch({ format: 'css' }) // lch(52.2345% 72.2 56.2) + * faker.color.lch({ format: 'binary' }) // (8-32 bits x 3) + */ + lch(options?: { format?: StringColorFormat }): string; + /** + * Returns an LCH color. Even though upper bound of + * chroma in LCH color space is theoretically unbounded, + * it is bounded to 230 as anything above will not + * make a noticeable difference in the browser. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.lch() // [0.522345, 72.2, 56.2] + * faker.color.lch({ format: 'decimal' }) // [0.522345, 72.2, 56.2] + */ + lch(options?: { format?: NumberColorFormat }): number[]; + /** + * Returns an LCH color. Even though upper bound of + * chroma in LCH color space is theoretically unbounded, + * it is bounded to 230 as anything above will not + * make a noticeable difference in the browser. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * + * @example + * faker.color.lch() // [0.522345, 72.2, 56.2] + * faker.color.lch({ format: 'decimal' }) // [0.522345, 72.2, 56.2] + * faker.color.lch({ format: 'css' }) // lch(52.2345% 72.2 56.2) + * faker.color.lch({ format: 'binary' }) // (8-32 bits x 3) + */ + lch(options?: { format?: ColorFormat }): string | number[]; + lch(options?: { format?: ColorFormat }): string | number[] { + const lch = [ + this.faker.datatype.float({ min: 0, max: 1, precision: 0.000001 }), + ]; + for (let i = 0; i < 2; i++) { + lch.push( + this.faker.datatype.number({ min: 0, max: 230, precision: 0.1 }) + ); + } + return toColorFormat(lch, options?.format || 'decimal', 'lch'); + } + + /** + * Returns a random color based on CSS color space specified. + * + * @example + * faker.color.colorByCSSColorSpace() // [0.93, 1, 0.82] + */ + colorByCSSColorSpace(): number[]; + /** + * Returns a random color based on CSS color space specified. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * @param options.space Color space to generate the color for. Defaults to `'sRGB'`. + * + * @example + * faker.color.colorByCSSColorSpace() // [0.93, 1, 0.82] + * faker.color.colorByCSSColorSpace({ format: 'css', space: 'display-p3' }) // color(display-p3 0.12 1 0.23) + * faker.color.colorByCSSColorSpace({ format: 'binary' }) // (8-32 bits x 3) + */ + colorByCSSColorSpace(options?: { + format?: StringColorFormat; + space?: CSSSpace; + }): string; + /** + * Returns a random color based on CSS color space specified. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * @param options.space Color space to generate the color for. Defaults to `'sRGB'`. + * + * @example + * faker.color.colorByCSSColorSpace() // [0.93, 1, 0.82] + * faker.color.colorByCSSColorSpace({ format: 'decimal' }) // [0.12, 0.21, 0.31] + */ + colorByCSSColorSpace(options?: { + format?: NumberColorFormat; + space?: CSSSpace; + }): number[]; + /** + * Returns a random color based on CSS color space specified. + * + * @param options Options object. + * @param options.format Format of generated RGB color. Defaults to `'decimal'`. + * @param options.space Color space to generate the color for. Defaults to `'sRGB'`. + * + * @example + * faker.color.colorByCSSColorSpace() // [0.93, 1, 0.82] + * faker.color.colorByCSSColorSpace({ format: 'decimal' }) // [0.12, 0.21, 0.31] + * faker.color.colorByCSSColorSpace({ format: 'css', space: 'display-p3' }) // color(display-p3 0.12 1 0.23) + * faker.color.colorByCSSColorSpace({ format: 'binary' }) // (8-32 bits x 3) + */ + colorByCSSColorSpace(options?: { + format?: ColorFormat; + space?: CSSSpace; + }): string | number[]; + colorByCSSColorSpace(options?: { + format?: ColorFormat; + space?: CSSSpace; + }): string | number[] { + if (options?.format === 'css' && !options?.space) { + options = { ...options, space: 'sRGB' }; + } + const color = Array.from({ length: 3 }).map(() => + this.faker.datatype.float({ min: 0, max: 1, precision: 0.0001 }) + ); + return toColorFormat( + color, + options?.format || 'decimal', + 'color', + options?.space + ); + } +} diff --git a/src/modules/commerce/index.ts b/src/modules/commerce/index.ts index 71ce96d6..d17c473b 100644 --- a/src/modules/commerce/index.ts +++ b/src/modules/commerce/index.ts @@ -1,4 +1,5 @@ -import type { Faker } from '../..'; +import type { Faker } from '../../faker'; +import { deprecated } from '../../internal/deprecated'; /** * Module to generate commerce and product related entries. @@ -19,11 +20,17 @@ export class Commerce { * * @example * faker.commerce.color() // 'red' + * + * @deprecated */ color(): string { - return this.faker.helpers.arrayElement( - this.faker.definitions.commerce.color - ); + deprecated({ + deprecated: 'faker.commerce.color()', + proposed: 'faker.color.human()', + since: 'v7.0.0', + until: 'v8.0.0', + }); + return this.faker.color.human(); } /** diff --git a/src/modules/random/index.ts b/src/modules/random/index.ts index 57783c9b..616dc4dd 100644 --- a/src/modules/random/index.ts +++ b/src/modules/random/index.ts @@ -121,7 +121,7 @@ export class Random { this.faker.commerce.productAdjective, this.faker.commerce.productMaterial, this.faker.commerce.product, - this.faker.commerce.color, + this.faker.color.human, this.faker.company.catchPhraseAdjective, this.faker.company.catchPhraseDescriptor, diff --git a/src/modules/vehicle/index.ts b/src/modules/vehicle/index.ts index fb5cd9f9..903dab53 100644 --- a/src/modules/vehicle/index.ts +++ b/src/modules/vehicle/index.ts @@ -97,7 +97,7 @@ export class Vehicle { * faker.vehicle.color() // 'red' */ color(): string { - return this.faker.commerce.color(); + return this.faker.color.human(); } /** |
