From 32b5ab0574cf295a91171c42ff3a477cb60f1167 Mon Sep 17 00:00:00 2001 From: Carlos Valente <34649812+cpvalente@users.noreply.github.com> Date: Mon, 3 Apr 2023 09:03:36 +0200 Subject: [PATCH] V2 align (#321) * fix: fetch in offline environments (#295) * Add arm platforms to docker build (#297) * add arm platforms to docker build --------- Co-authored-by: Fabian Posenau * fix: docker build (#298) Co-authored-by: Fabian Posenau * Timer: fix too many renders error when using ?progress (#305) * Timer: fix too many renders error when using ?progress * version bump (#314) * style: small tweaks * fix: prevent actions in roll mode * chore: update external assets * style: show shortcuts in quick blocks * refactor: revert optimisations on callbacks * fun: industry dictionary * style: indicators for event features --------- Co-authored-by: Fabian Posenau Co-authored-by: Fabian Posenau Co-authored-by: Marks Polakovs --- .../input/time-input/TimeInput.module.scss | 4 + .../src/features/event-editor/EventEditor.tsx | 2 + apps/client/src/features/rundown/Rundown.tsx | 2 +- .../src/features/rundown/RundownEntry.tsx | 136 +- .../event-block/EventBlock.module.scss | 13 +- .../rundown/event-block/EventBlock.tsx | 8 +- .../rundown/event-block/EventBlockInner.tsx | 55 +- apps/client/src/theme/ontimeSelect.ts | 2 +- apps/electron/package.json | 14 + apps/server/src/app.ts | 4 +- apps/server/src/services/TimerService.ts | 20 +- apps/server/src/setup.ts | 10 +- apps/server/src/utils/getRandomName.js | 2821 +---------------- .../features/201-message-control.spec.ts | 2 +- 14 files changed, 297 insertions(+), 2796 deletions(-) diff --git a/apps/client/src/common/components/input/time-input/TimeInput.module.scss b/apps/client/src/common/components/input/time-input/TimeInput.module.scss index d21b423d4..f6e7e1d3b 100644 --- a/apps/client/src/common/components/input/time-input/TimeInput.module.scss +++ b/apps/client/src/common/components/input/time-input/TimeInput.module.scss @@ -4,6 +4,10 @@ $input-delayed-border-color: #E69056; .timeInput { width: fit-content !important; + .inputButton { + aspect-ratio: 1; + } + .inputField { font-size: $input-font-size; letter-spacing: 1px; diff --git a/apps/client/src/features/event-editor/EventEditor.tsx b/apps/client/src/features/event-editor/EventEditor.tsx index 86cef6c56..2f5cc6a19 100644 --- a/apps/client/src/features/event-editor/EventEditor.tsx +++ b/apps/client/src/features/event-editor/EventEditor.tsx @@ -174,6 +174,7 @@ export default function EventEditor() { name='timerType' value={event.timerType} onChange={(event) => handleChange('timerType', event.target.value)} + variant='ontime' > @@ -185,6 +186,7 @@ export default function EventEditor() { name='endAction' value={event.endAction} onChange={(event) => handleChange('endAction', event.target.value)} + variant='ontime' > diff --git a/apps/client/src/features/rundown/Rundown.tsx b/apps/client/src/features/rundown/Rundown.tsx index 5d53cebc0..386e1051d 100644 --- a/apps/client/src/features/rundown/Rundown.tsx +++ b/apps/client/src/features/rundown/Rundown.tsx @@ -245,7 +245,7 @@ export default function Rundown(props: RundownProps) { /> {((showQuickEntry && index === cursor) || isLast) && ( { - switch (action) { - case 'event': { - const newEvent = { type: SupportedEvent.Event }; - const options = { - startTimeIsLastEnd, - defaultPublic, - lastEventId: previousEventId, - after: data.id, - }; - addEvent(newEvent, options); - break; - } - case 'delay': { - addEvent({ type: SupportedEvent.Delay }, { after: data.id }); - break; - } - case 'block': { - addEvent({ type: SupportedEvent.Block }, { after: data.id }); - break; - } - case 'delete': { - if (openId === data.id) { - removeOpenEvent(); + const actionHandler = useCallback( + (action: EventItemActions, payload?: number | FieldValue) => { + switch (action) { + case 'event': { + const newEvent = { type: SupportedEvent.Event }; + const options = { + startTimeIsLastEnd, + defaultPublic, + lastEventId: previousEventId, + after: data.id, + }; + addEvent(newEvent, options); + break; } - deleteEvent(data.id); - break; - } - case 'clone': { - const newEvent = cloneEvent(data as OntimeEvent, data.id); - addEvent(newEvent); - break; - } - case 'update': { - // Handles and filters update requests - const { field, value } = payload as FieldValue; - const newData: Partial = { id: data.id }; + case 'delay': { + addEvent({ type: SupportedEvent.Delay }, { after: data.id }); + break; + } + case 'block': { + addEvent({ type: SupportedEvent.Block }, { after: data.id }); + break; + } + case 'delete': { + if (openId === data.id) { + removeOpenEvent(); + } + deleteEvent(data.id); + break; + } + case 'clone': { + const newEvent = cloneEvent(data as OntimeEvent, data.id); + addEvent(newEvent); + break; + } + case 'update': { + // Handles and filters update requests + const { field, value } = payload as FieldValue; + const newData: Partial = { id: data.id }; - if (field === 'durationOverride' && data.type === SupportedEvent.Event) { - // duration defines timeEnd - newData.duration = value as number; - newData.timeEnd = data.timeStart + (value as number); - updateEvent(newData); - } else if (field === 'timeStart' && data.type === SupportedEvent.Event) { - newData.duration = calculateDuration(value as number, data.timeEnd); - newData.timeStart = value as number; - updateEvent(newData); - } else if (field === 'timeEnd' && data.type === SupportedEvent.Event) { - newData.duration = calculateDuration(data.timeStart, value as number); - newData.timeEnd = value as number; - updateEvent(newData); - } else if (field in data) { - // @ts-expect-error not sure how to type this - newData[field] = value; - updateEvent(newData); - } else { - emitError(`Unknown field: ${field}`); + if (field === 'durationOverride' && data.type === SupportedEvent.Event) { + // duration defines timeEnd + newData.duration = value as number; + newData.timeEnd = data.timeStart + (value as number); + updateEvent(newData); + } else if (field === 'timeStart' && data.type === SupportedEvent.Event) { + newData.duration = calculateDuration(value as number, data.timeEnd); + newData.timeStart = value as number; + updateEvent(newData); + } else if (field === 'timeEnd' && data.type === SupportedEvent.Event) { + newData.duration = calculateDuration(data.timeStart, value as number); + newData.timeEnd = value as number; + updateEvent(newData); + } else if (field in data) { + // @ts-expect-error not sure how to type this + newData[field] = value; + updateEvent(newData); + } else { + emitError(`Unknown field: ${field}`); + } + break; } - break; + default: + throw new Error(`Unhandled event ${action}`); } - default: - throw new Error(`Unhandled event ${action}`); - } - }, []); + }, + [ + addEvent, + data, + defaultPublic, + deleteEvent, + emitError, + openId, + previousEventId, + removeOpenEvent, + startTimeIsLastEnd, + updateEvent, + ], + ); if (data.type === SupportedEvent.Event) { return ( @@ -123,6 +137,8 @@ export default function RundownEntry(props: RundownEntryProps) { eventIndex={eventIndex + 1} eventId={data.id} isPublic={data.isPublic} + endAction={data.endAction} + timerType={data.timerType} title={data.title} note={data.note} delay={delay} diff --git a/apps/client/src/features/rundown/event-block/EventBlock.module.scss b/apps/client/src/features/rundown/event-block/EventBlock.module.scss index 76b5e5d6d..858c41e49 100644 --- a/apps/client/src/features/rundown/event-block/EventBlock.module.scss +++ b/apps/client/src/features/rundown/event-block/EventBlock.module.scss @@ -154,15 +154,24 @@ grid-area: status; display: flex; justify-content: flex-end; + align-items: center; gap: 8px; + .tag { + font-size: 0.55em; + color: $active-indicator; + } + .statusIcon { width: 16px; height: 16px; - color: $gray-1000; + color: $gray-500; } .statusIcon.active { - color: $ui-white; + color: $active-indicator; + } + .statusIcon.disabled { + color: $gray-1000; } } diff --git a/apps/client/src/features/rundown/event-block/EventBlock.tsx b/apps/client/src/features/rundown/event-block/EventBlock.tsx index b2910c1a3..24fa6fe1d 100644 --- a/apps/client/src/features/rundown/event-block/EventBlock.tsx +++ b/apps/client/src/features/rundown/event-block/EventBlock.tsx @@ -2,7 +2,7 @@ import { useEffect, useLayoutEffect, useRef, useState } from 'react'; import { useSortable } from '@dnd-kit/sortable'; import { CSS } from '@dnd-kit/utilities'; import { IoReorderTwo } from '@react-icons/all-files/io5/IoReorderTwo'; -import { OntimeEvent, Playback } from 'ontime-types'; +import { EndAction, OntimeEvent, Playback, TimerType } from 'ontime-types'; import { useCursor } from '../../../common/stores/cursorStore'; import { useEventEditorStore } from '../../../common/stores/eventEditor'; @@ -21,6 +21,8 @@ interface EventBlockProps { eventIndex: number; eventId: string; isPublic: boolean; + endAction: EndAction; + timerType: TimerType; title: string; note: string; delay: number; @@ -51,6 +53,8 @@ export default function EventBlock(props: EventBlockProps) { eventIndex, eventId, isPublic = true, + endAction, + timerType, title, note, delay, @@ -143,6 +147,8 @@ export default function EventBlock(props: EventBlockProps) { duration={duration} eventId={eventId} isPublic={isPublic} + endAction={endAction} + timerType={timerType} title={title} note={note} delay={delay} diff --git a/apps/client/src/features/rundown/event-block/EventBlockInner.tsx b/apps/client/src/features/rundown/event-block/EventBlockInner.tsx index cd9474ecf..b135d5ad8 100644 --- a/apps/client/src/features/rundown/event-block/EventBlockInner.tsx +++ b/apps/client/src/features/rundown/event-block/EventBlockInner.tsx @@ -1,14 +1,20 @@ import { memo, useCallback, useEffect, useState } from 'react'; import { Editable, EditableInput, EditablePreview, Tooltip } from '@chakra-ui/react'; +import { IoCaretDownCircle } from '@react-icons/all-files/io5/IoCaretDownCircle'; +import { IoCaretUpCircle } from '@react-icons/all-files/io5/IoCaretUpCircle'; import { IoOptions } from '@react-icons/all-files/io5/IoOptions'; import { IoPeople } from '@react-icons/all-files/io5/IoPeople'; import { IoPlay } from '@react-icons/all-files/io5/IoPlay'; +import { IoPlayCircle } from '@react-icons/all-files/io5/IoPlayCircle'; +import { IoPlayForwardCircle } from '@react-icons/all-files/io5/IoPlayForwardCircle'; import { IoPlayOutline } from '@react-icons/all-files/io5/IoPlayOutline'; -import { IoPlaySkipForward } from '@react-icons/all-files/io5/IoPlaySkipForward'; +import { IoPlaySkipForwardCircle } from '@react-icons/all-files/io5/IoPlaySkipForwardCircle'; import { IoReload } from '@react-icons/all-files/io5/IoReload'; import { IoRemoveCircle } from '@react-icons/all-files/io5/IoRemoveCircle'; import { IoRemoveCircleOutline } from '@react-icons/all-files/io5/IoRemoveCircleOutline'; -import { Playback } from 'ontime-types'; +import { IoStopCircle } from '@react-icons/all-files/io5/IoStopCircle'; +import { IoTime } from '@react-icons/all-files/io5/IoTime'; +import { EndAction, Playback, TimerType } from 'ontime-types'; import TooltipActionBtn from '../../../common/components/buttons/TooltipActionBtn'; import { useEventAction } from '../../../common/hooks/useEventAction'; @@ -38,6 +44,8 @@ interface EventBlockInnerProps { duration: number; eventId: string; isPublic: boolean; + endAction: EndAction; + timerType: TimerType; title: string; note: string; delay: number; @@ -57,6 +65,8 @@ const EventBlockInner = (props: EventBlockInnerProps) => { duration, eventId, isPublic = true, + endAction, + timerType, title, note, delay, @@ -180,14 +190,24 @@ const EventBlockInner = (props: EventBlockInnerProps) => { {selected && }
- + {next && ( + + NEXT + + )} + - + + + + + + - +
@@ -212,3 +232,28 @@ const EventBlockInner = (props: EventBlockInnerProps) => { }; export default memo(EventBlockInner); + +function EndActionIcon(props: { action: EndAction; className: string }) { + const { action, className } = props; + if (action === EndAction.LoadNext) { + return ; + } + if (action === EndAction.PlayNext) { + return ; + } + if (action === EndAction.Stop) { + return ; + } + return ; +} + +function TimerIcon(props: { type: TimerType; className: string }) { + const { type, className } = props; + if (type === TimerType.CountUp) { + return ; + } + if (type === TimerType.Clock) { + return ; + } + return ; +} diff --git a/apps/client/src/theme/ontimeSelect.ts b/apps/client/src/theme/ontimeSelect.ts index 7ae243706..17f799439 100644 --- a/apps/client/src/theme/ontimeSelect.ts +++ b/apps/client/src/theme/ontimeSelect.ts @@ -3,7 +3,7 @@ export const ontimeSelect = { color: '#e2e2e2', // $gray-200 borderRadius: '3px', fontWeight: '400', - background: '#262626', // $gray-1100 + background: '#262626', // $gray-1100 border: '1px solid transparent', _hover: { background: '#404040', // $gray-1000 diff --git a/apps/electron/package.json b/apps/electron/package.json index 8a2e4a5fa..0acfda26e 100644 --- a/apps/electron/package.json +++ b/apps/electron/package.json @@ -95,6 +95,20 @@ "!**/{mock,mocks,__mock__,__mocks__}", "!*{.spec.js,*.test.js,*.spec.ts,.test.ts}" ] + }, + { + "from": "../server/src/preloaded-db/", + "to": "extraResources/preloaded-db/", + "filter": [ + "**/*" + ] + }, + { + "from": "../server/src/external/", + "to": "extraResources/external/", + "filter": [ + "**/*" + ] } ] } diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts index 47e271fc2..7e3a6d69e 100644 --- a/apps/server/src/app.ts +++ b/apps/server/src/app.ts @@ -7,7 +7,7 @@ import cors from 'cors'; import { join, resolve } from 'path'; import { initSentry, reportSentryException } from './modules/sentry.js'; -import { currentDirectory, environment, isProduction, resolvedPath } from './setup.js'; +import { currentDirectory, environment, externalsStartDirectory, isProduction, resolvedPath } from './setup.js'; import { ONTIME_VERSION } from './ONTIME_VERSION.js'; import { OSCSettings } from 'ontime-types'; @@ -61,7 +61,7 @@ app.use('/ontime', ontimeRouter); app.use('/playback', playbackRouter); // serve static - css -app.use('/external', express.static(join(currentDirectory, 'external'))); +app.use('/external', express.static(externalsStartDirectory)); // serve static - react, in test mode we fetch the React app from module app.use(express.static(join(currentDirectory, resolvedPath()))); diff --git a/apps/server/src/services/TimerService.ts b/apps/server/src/services/TimerService.ts index baeac9072..3437c8b6c 100644 --- a/apps/server/src/services/TimerService.ts +++ b/apps/server/src/services/TimerService.ts @@ -307,15 +307,17 @@ export class TimerService { _onFinish() { eventStore.set('timer', this.timer); integrationService.dispatch(TimerLifeCycle.onFinish); - if (this.timer.endAction === EndAction.Stop) { - PlaybackService.stop(); - } else if (this.timer.endAction === EndAction.LoadNext) { - // we need to delay here to put this action in the queue stack. otherwise it won't be executed properly - setTimeout(() => { - PlaybackService.loadNext(); - }, 0); - } else if (this.timer.endAction === EndAction.PlayNext) { - PlaybackService.startNext(); + if (this.playback === Playback.Play) { + if (this.timer.endAction === EndAction.Stop) { + PlaybackService.stop(); + } else if (this.timer.endAction === EndAction.LoadNext) { + // we need to delay here to put this action in the queue stack. otherwise it won't be executed properly + setTimeout(() => { + PlaybackService.loadNext(); + }, 0); + } else if (this.timer.endAction === EndAction.PlayNext) { + PlaybackService.startNext(); + } } } diff --git a/apps/server/src/setup.ts b/apps/server/src/setup.ts index 2c3d9135f..f31e72b81 100644 --- a/apps/server/src/setup.ts +++ b/apps/server/src/setup.ts @@ -66,10 +66,14 @@ if (import.meta.url) { // path to server src folder export const currentDirectory = dirname(__dirname); -const appPath = isTest ? '../' : getAppDataPath(); +const testDbStartDirectory = isTest ? '../' : getAppDataPath(); +export const externalsStartDirectory = isProduction ? getAppDataPath() : join(currentDirectory, 'external'); // path to public db -export const resolveDbDirectory = join(appPath, isTest ? config.database.testdb : config.database.directory); +export const resolveDbDirectory = join( + testDbStartDirectory, + isTest ? config.database.testdb : config.database.directory, +); export const resolveDbPath = join(resolveDbDirectory, config.database.filename); export const pathToStartDb = isTest @@ -77,7 +81,7 @@ export const pathToStartDb = isTest : join(currentDirectory, '/preloaded-db/', config.database.filename); // path to public styles -export const resolveStylesDirectory = join(appPath, config.styles.directory); +export const resolveStylesDirectory = join(externalsStartDirectory, config.styles.directory); export const resolveStylesPath = join(resolveStylesDirectory, config.styles.filename); export const pathToStartStyles = join(currentDirectory, '/external/styles/', config.styles.filename); diff --git a/apps/server/src/utils/getRandomName.js b/apps/server/src/utils/getRandomName.js index 2cff4ffd6..595f07485 100644 --- a/apps/server/src/utils/getRandomName.js +++ b/apps/server/src/utils/getRandomName.js @@ -1,2749 +1,148 @@ const adjective = [ - 'academic', - 'acclaimed', - 'accomplished', - 'accurate', - 'acrobatic', - 'active', - 'adaptable', - 'adorable', - 'adventurous', - 'adept', - 'admirable', - 'admired', - 'adolescent', - 'adorable', - 'adored', - 'advanced', - 'afraid', - 'affectionate', - 'agile', - 'agitated', - 'agreeable', - 'ajar', - 'alarmed', - 'alert', - 'alienated', - 'alive', - 'all', - 'altruistic', - 'amazing', - 'ambitious', - 'ample', - 'amused', - 'amusing', - 'anchored', - 'ancient', - 'angelic', - 'angry', - 'anguished', - 'animated', - 'annual', - 'another', - 'antique', - 'any', - 'apprehensive', - 'appropriate', - 'apt', - 'arctic', - 'aromatic', + 'ambient', + 'analog', 'artistic', - 'ashamed', - 'assured', - 'astonishing', - 'athletic', - 'attached', - 'attentive', - 'attractive', - 'austere', - 'authentic', - 'authorized', - 'automatic', - 'avaricious', - 'aware', - 'awesome', - 'bad', - 'back', - 'bare', - 'barren', - 'beautiful', - 'belated', - 'beloved', - 'beneficial', - 'better', - 'best', - 'bewitched', - 'big', - 'big-hearted', - 'biodegradable', - 'bite-sized', - 'bitter', - 'black', - 'black-and-white', - 'bland', - 'blank', - 'blaring', - 'bleak', - 'blind', - 'blissful', - 'blond', - 'blue', - 'blushing', - 'bogus', - 'boiling', - 'bold', - 'bony', - 'bossy', - 'both', - 'bouncy', - 'bountiful', - 'bowed', - 'brave', - 'breakable', - 'brief', + 'binaural', 'bright', - 'brilliant', - 'brisk', - 'broken', - 'bronze', - 'brown', - 'bubbly', - 'bulky', - 'bumpy', - 'buoyant', - 'burly', - 'bustling', - 'busy', - 'buttery', - 'buzzing', - 'calculating', - 'calm', - 'candid', - 'canine', - 'capital', - 'carefree', - 'careful', - 'careless', - 'caring', - 'cautious', - 'cavernous', - 'celebrated', - 'charming', - 'cheap', - 'cheerful', - 'cheery', - 'chief', - 'chilly', - 'chubby', - 'circular', - 'classic', + 'cinematic', 'clean', - 'clear', - 'clear-cut', - 'clever', - 'close', - 'closed', - 'cloudy', - 'clueless', - 'clumsy', - 'cluttered', - 'coarse', - 'cold', - 'colorful', - 'colorless', - 'colossal', - 'comfortable', - 'common', - 'compassionate', - 'competent', - 'complete', - 'complex', - 'complicated', - 'composed', - 'concerned', - 'concrete', - 'confused', - 'conscious', - 'considerate', - 'constant', - 'content', - 'conventional', - 'cooked', 'cool', - 'cooperative', - 'coordinated', - 'corny', - 'costly', - 'courageous', - 'courteous', - 'crafty', - 'crazy', - 'creamy', - 'creative', 'crisp', - 'critical', - 'crooked', - 'crowded', - 'cruel', - 'crushing', - 'cuddly', - 'cultivated', - 'cultured', - 'cumbersome', - 'curly', - 'curvy', - 'cute', - 'cylindrical', - 'damp', - 'dangerous', - 'dapper', - 'daring', - 'darling', 'dark', - 'dazzling', - 'dead', - 'deadly', - 'deafening', - 'dear', - 'dearest', - 'decent', - 'decimal', - 'decisive', 'deep', - 'defensive', - 'defiant', - 'definite', - 'definitive', - 'delayed', - 'delectable', - 'delicious', - 'delightful', - 'delirious', - 'demanding', - 'dense', - 'dependable', - 'dependent', - 'descriptive', - 'deserted', - 'detailed', - 'determined', - 'devoted', - 'different', - 'digital', - 'diligent', - 'dim', - 'dimpled', - 'discrete', - 'dismal', - 'distant', - 'downright', - 'dreary', - 'disguised', - 'dismal', - 'distant', - 'distinct', - 'dizzy', - 'dopey', - 'doting', - 'double', - 'downright', - 'drab', - 'drafty', - 'dramatic', - 'dreary', - 'droopy', - 'dry', - 'dual', - 'dutiful', - 'each', - 'eager', - 'earnest', - 'early', - 'easy', - 'easy-going', - 'ecstatic', - 'edible', - 'educated', - 'elaborate', - 'elastic', - 'elated', - 'elderly', + 'distorted', + 'dreamy', + 'dynamic', 'electric', - 'elegant', - 'elementary', - 'elliptical', - 'embarrassed', - 'embellished', - 'eminent', - 'emotional', - 'empty', - 'enchanted', - 'enchanting', - 'energetic', - 'enlightened', - 'enormous', - 'enraged', - 'entire', - 'envious', - 'equal', - 'equatorial', - 'essential', - 'esteemed', - 'ethical', - 'euphoric', - 'even', - 'evergreen', - 'everlasting', - 'every', - 'evil', - 'exalted', - 'excellent', - 'exemplary', - 'exhausted', - 'excitable', - 'excited', - 'exciting', - 'exotic', - 'expensive', - 'experienced', - 'expert', - 'extraneous', - 'extroverted', - 'extra-large', - 'extra-small', - 'fabulous', - 'failing', - 'faint', - 'fair', - 'faithful', - 'fake', - 'false', - 'familiar', - 'famous', - 'fancy', - 'fantastic', - 'far', - 'faraway', - 'far-flung', - 'far-off', - 'fast', - 'fatherly', - 'favorable', - 'favorite', - 'fearful', - 'fearless', - 'feisty', - 'feline', - 'female', - 'feminine', - 'few', - 'fickle', - 'filthy', - 'fine', - 'finished', - 'firm', - 'first', - 'firsthand', - 'fitting', - 'fixed', - 'flaky', - 'flamboyant', - 'flashy', - 'flat', - 'flawed', - 'flawless', + 'explosive', 'flickering', - 'flimsy', - 'flippant', - 'flowery', - 'fluffy', 'fluid', - 'flustered', - 'focused', - 'fond', - 'foolhardy', - 'foolish', - 'forceful', - 'forked', - 'formal', - 'forsaken', - 'forthright', - 'fortunate', - 'fragrant', - 'frail', - 'frank', - 'frayed', - 'free', - 'French', - 'fresh', - 'frequent', - 'friendly', - 'frightened', - 'frightening', - 'frigid', - 'frilly', - 'frizzy', - 'frivolous', - 'front', - 'frosty', - 'frozen', - 'frugal', - 'fruitful', - 'full', - 'fumbling', - 'functional', - 'funny', - 'fussy', - 'fuzzy', - 'gargantuan', - 'gaseous', - 'general', - 'generous', - 'gentle', - 'genuine', - 'giant', - 'giddy', - 'gigantic', - 'gifted', - 'giving', - 'glamorous', - 'glaring', - 'glass', - 'gleaming', - 'gleeful', - 'glistening', - 'glittering', - 'gloomy', - 'glorious', - 'glossy', - 'glum', - 'golden', - 'good', - 'good-natured', - 'gorgeous', - 'graceful', - 'gracious', - 'grand', - 'grandiose', - 'granular', - 'grateful', - 'grave', - 'gray', - 'great', - 'greedy', - 'green', - 'grim', - 'grimy', - 'gripping', - 'grizzled', - 'grouchy', - 'grounded', - 'growing', - 'growling', - 'grown', - 'grubby', - 'grumpy', - 'guilty', - 'gullible', - 'gummy', - 'hairy', - 'half', - 'handmade', - 'handsome', - 'handy', - 'happy', - 'happy-go-lucky', - 'hard', - 'hard-to-find', - 'harmful', - 'harmless', + 'glitchy', + 'glowing', 'harmonious', - 'harsh', - 'hasty', - 'haunting', - 'healthy', - 'heartfelt', - 'hearty', - 'heavenly', - 'heavy', - 'hefty', - 'helpful', - 'helpless', - 'hidden', - 'hideous', - 'high', - 'high-level', - 'hilarious', - 'hoarse', - 'hollow', - 'homely', - 'honest', - 'honorable', - 'honored', - 'hopeful', - 'hospitable', - 'hot', - 'huge', - 'humble', - 'humming', - 'humongous', - 'hungry', - 'husky', - 'icky', - 'icy', - 'ideal', - 'idealistic', - 'identical', - 'idle', - 'idiotic', - 'idolized', - 'ignorant', - 'illegal', - 'illiterate', - 'illustrious', - 'imaginary', - 'imaginative', - 'immaculate', - 'immaterial', - 'immediate', - 'immense', - 'impassioned', - 'impeccable', - 'impartial', - 'imperfect', - 'imperturbable', - 'impish', - 'important', - 'impossible', - 'impressionable', - 'impressive', - 'improbable', - 'incomparable', - 'incompatible', - 'incomplete', - 'inconsequential', - 'incredible', - 'indelible', - 'inexperienced', - 'indolent', - 'infamous', - 'infantile', - 'infatuated', - 'inferior', - 'infinite', - 'informal', - 'innocent', - 'insecure', - 'insidious', - 'insistent', - 'instructive', - 'insubstantial', - 'intelligent', - 'intent', - 'intentional', - 'interesting', - 'internal', - 'international', - 'intrepid', - 'ironclad', - 'irresponsible', - 'irritating', - 'itchy', - 'jaded', - 'jagged', - 'jam-packed', - 'jaunty', - 'jealous', - 'jittery', - 'joint', - 'jolly', - 'jovial', - 'joyful', - 'joyous', - 'jubilant', - 'judicious', - 'juicy', - 'jumbo', - 'junior', - 'jumpy', - 'juvenile', - 'kaleidoscopic', - 'keen', - 'key', - 'kind', - 'kindhearted', - 'kindly', - 'klutzy', - 'knobby', - 'knotty', - 'knowledgeable', - 'knowing', - 'known', - 'kooky', - 'kosher', - 'lanky', - 'large', - 'last', - 'lasting', - 'late', - 'lavish', - 'lawful', - 'lazy', - 'leading', - 'lean', - 'leafy', - 'left', - 'legal', - 'legitimate', - 'light', - 'lighthearted', - 'likable', - 'likely', - 'limited', - 'limp', - 'limping', - 'linear', - 'lined', - 'liquid', - 'little', - 'live', - 'lively', - 'livid', - 'loathsome', - 'lone', - 'lonely', - 'long', - 'long-term', - 'loose', - 'lopsided', - 'lost', - 'loud', - 'lovable', - 'lovely', - 'loving', - 'low', - 'loyal', - 'lucky', - 'lumbering', - 'luminous', - 'lumpy', - 'lustrous', - 'luxurious', - 'mad', - 'made-up', - 'magnificent', - 'majestic', - 'major', - 'male', - 'mammoth', - 'married', - 'marvelous', - 'masculine', - 'massive', - 'mature', - 'meager', - 'mealy', - 'mean', - 'measly', - 'meaty', - 'medical', - 'mediocre', - 'medium', - 'meek', + 'hazy', + 'intense', + 'low-fi', 'mellow', 'melodic', - 'memorable', - 'menacing', - 'merry', - 'messy', 'metallic', - 'mild', - 'milky', - 'mindless', - 'miniature', - 'minor', - 'minty', - 'miserly', - 'misty', - 'mixed', - 'modern', - 'modest', - 'moist', - 'monstrous', - 'monthly', - 'monumental', - 'moral', - 'mortified', - 'motherly', - 'motionless', - 'mountainous', - 'muddy', - 'muffled', - 'multicolored', - 'mundane', - 'murky', - 'mushy', - 'musty', + 'moody', 'muted', - 'mysterious', - 'naive', - 'narrow', - 'nasty', - 'natural', - 'naughty', - 'nautical', - 'near', - 'neat', - 'necessary', - 'needy', - 'negative', - 'neglected', - 'negligible', - 'neighboring', - 'nervous', - 'new', - 'next', - 'nice', - 'nifty', - 'nimble', - 'nippy', - 'nocturnal', + 'nostalgic', 'noisy', - 'nonstop', - 'normal', - 'notable', - 'noted', - 'noteworthy', - 'novel', - 'noxious', - 'nutritious', - 'nutty', - 'obedient', - 'oblong', - 'oily', - 'oblong', - 'obvious', - 'occasional', - 'odd', - 'offbeat', - 'offensive', - 'official', - 'old', - 'old-fashioned', - 'only', - 'open', - 'optimal', - 'optimistic', - 'opulent', - 'orange', - 'orderly', 'organic', - 'ornate', - 'ornery', - 'ordinary', - 'original', - 'other', - 'our', - 'outlying', - 'outgoing', - 'outlandish', - 'outrageous', - 'outstanding', - 'oval', - 'overcooked', - 'overdue', - 'overjoyed', - 'overlooked', - 'palatable', - 'pale', - 'paltry', - 'parallel', - 'parched', - 'partial', - 'passionate', - 'past', - 'pastel', - 'peaceful', - 'peppery', - 'perfect', - 'perfumed', - 'periodic', - 'perky', - 'personal', - 'pertinent', - 'pesky', - 'petty', - 'phony', - 'physical', - 'piercing', - 'pink', - 'pitiful', - 'plain', - 'plaintive', - 'plastic', - 'playful', - 'pleasant', - 'pleased', - 'pleasing', - 'plump', - 'plush', - 'polished', - 'polite', - 'political', - 'pointed', - 'pointless', - 'poised', - 'popular', - 'portly', - 'posh', - 'positive', - 'possible', - 'potable', + 'panoramic', + 'percussive', 'powerful', - 'powerless', - 'practical', - 'precious', - 'present', - 'prestigious', - 'pretty', - 'precious', - 'previous', - 'pricey', - 'prickly', - 'primary', - 'prime', - 'pristine', - 'private', - 'prize', - 'probable', - 'productive', - 'profitable', - 'profuse', - 'proper', - 'proud', - 'prudent', - 'punctual', - 'pungent', - 'puny', - 'pure', - 'purple', - 'pushy', - 'putrid', - 'puzzled', - 'puzzling', - 'quaint', - 'qualified', - 'quarrelsome', - 'quarterly', - 'queasy', - 'querulous', - 'quick', - 'quick-witted', - 'quiet', - 'quintessential', + 'psychedelic', 'quirky', - 'quixotic', - 'quizzical', - 'radiant', - 'ragged', - 'rapid', - 'rare', - 'rash', 'raw', - 'recent', - 'reckless', - 'rectangular', - 'ready', - 'real', - 'realistic', - 'reasonable', - 'red', - 'reflecting', - 'regal', - 'regular', - 'reliable', - 'relieved', - 'remarkable', - 'remote', - 'repentant', - 'required', - 'respectful', - 'responsible', - 'repulsive', - 'revolving', - 'rewarding', - 'rich', - 'rigid', - 'right', - 'ringed', - 'ripe', - 'roasted', - 'robust', - 'rosy', - 'rotating', - 'rough', - 'round', - 'rowdy', - 'royal', - 'rubbery', - 'rundown', - 'ruddy', - 'rude', - 'runny', - 'rural', - 'rusty', - 'sad', - 'safe', - 'same', - 'sandy', - 'sane', - 'sarcastic', - 'sardonic', - 'satisfied', - 'scaly', - 'scarce', - 'scared', - 'scary', - 'scented', - 'scholarly', - 'scientific', - 'scornful', - 'scratchy', - 'scrawny', - 'second', - 'secondary', - 'second-hand', - 'secret', - 'self-assured', - 'self-reliant', - 'selfish', - 'sentimental', - 'separate', - 'serene', - 'serious', - 'serpentine', - 'several', - 'severe', - 'shabby', - 'shadowy', - 'shady', - 'shallow', - 'shameless', + 'resonant', + 'retro', 'sharp', 'shimmering', - 'shiny', - 'shocked', - 'shocking', - 'shoddy', - 'short', - 'short-term', - 'showy', - 'shrill', - 'shy', - 'silent', - 'silky', - 'silly', - 'silver', - 'similar', - 'simple', - 'simplistic', - 'sinful', - 'single', - 'sizzling', - 'skeletal', - 'skinny', - 'sleepy', - 'slight', - 'slim', - 'slippery', - 'slow', - 'slushy', - 'small', - 'smart', - 'smoggy', 'smooth', - 'smug', - 'snappy', - 'snarling', - 'sneaky', - 'sniveling', - 'snoopy', - 'sociable', 'soft', - 'soggy', - 'solid', - 'somber', - 'some', - 'spherical', - 'sophisticated', - 'sorrowful', 'soulful', - 'soupy', - 'sour', - 'Spanish', 'sparkling', - 'sparse', - 'specific', - 'spectacular', - 'speedy', - 'spicy', - 'spiffy', - 'spirited', - 'spiteful', - 'splendid', - 'spotless', - 'spotted', - 'spry', - 'square', - 'squeaky', - 'squiggly', - 'stable', - 'staid', - 'stained', - 'stale', - 'standard', - 'starchy', - 'stark', - 'starry', - 'steep', - 'sticky', - 'stiff', - 'stimulating', - 'stingy', - 'stormy', - 'straight', - 'strange', - 'steel', - 'strict', - 'strident', - 'striking', - 'striped', - 'strong', - 'studious', - 'stunning', - 'stupendous', - 'stupid', - 'sturdy', - 'stylish', - 'subdued', - 'submissive', - 'substantial', + 'spacious', 'subtle', - 'suburban', - 'sudden', - 'sugary', - 'sunny', - 'super', - 'superb', - 'superficial', - 'superior', - 'supportive', - 'sure-footed', - 'surprised', - 'suspicious', - 'svelte', - 'sweaty', - 'sweet', - 'sweltering', - 'swift', - 'sympathetic', - 'tall', - 'talkative', - 'tame', - 'tan', - 'tangible', - 'tart', - 'tasty', - 'tattered', - 'taut', - 'tedious', - 'teeming', - 'tempting', - 'tender', - 'tense', - 'tepid', - 'terrific', - 'testy', - 'thankful', - 'that', - 'these', - 'thick', - 'thin', - 'third', - 'thirsty', - 'this', - 'thorough', - 'thorny', - 'those', - 'thoughtful', - 'threadbare', - 'thrifty', - 'thunderous', - 'tidy', - 'tight', - 'timely', - 'tinted', - 'tiny', - 'tired', - 'torn', - 'total', - 'tough', - 'traumatic', - 'treasured', - 'tremendous', - 'tragic', - 'trained', - 'tremendous', - 'triangular', - 'tricky', - 'trifling', - 'trim', - 'trivial', - 'troubled', - 'true', - 'trusting', - 'trustworthy', - 'trusty', - 'truthful', - 'tubby', - 'turbulent', - 'twin', - 'ultimate', - 'unacceptable', - 'unaware', - 'uncomfortable', - 'uncommon', - 'unconscious', - 'understated', - 'unequaled', - 'uneven', - 'unfinished', - 'unfit', - 'unfolded', - 'unfortunate', - 'unhappy', - 'uniform', - 'unimportant', - 'unique', - 'united', - 'unkempt', - 'unknown', - 'unlined', - 'unlucky', - 'unnatural', - 'unpleasant', - 'unrealistic', - 'unripe', - 'unruly', - 'unselfish', - 'unsightly', - 'unsteady', - 'unsung', - 'untidy', - 'untimely', - 'untried', - 'untrue', - 'unused', - 'unusual', - 'unwelcome', - 'unwieldy', - 'unwilling', - 'unwitting', - 'unwritten', - 'upbeat', - 'upright', - 'upset', - 'urban', - 'usable', - 'used', - 'useful', - 'utilized', - 'utter', - 'vacant', - 'vague', - 'vain', - 'valid', - 'valuable', - 'vapid', - 'variable', - 'vast', - 'velvety', - 'venerated', - 'vengeful', - 'verifiable', + 'surround', + 'tilted', + 'uplifting', 'vibrant', - 'vicious', - 'victorious', - 'vigilant', - 'vigorous', - 'villainous', - 'violet', - 'violent', - 'virtual', - 'virtuous', - 'visible', - 'vital', - 'vivacious', - 'vivid', - 'voluminous', - 'wan', - 'warlike', 'warm', - 'warmhearted', - 'warped', - 'wary', - 'watchful', - 'waterlogged', - 'watery', - 'wavy', - 'wealthy', - 'weak', - 'weary', - 'webbed', - 'wee', - 'weekly', - 'weepy', - 'weighty', - 'weird', - 'welcome', - 'well-documented', - 'well-groomed', - 'well-informed', - 'well-lit', - 'well-made', - 'well-off', - 'well-to-do', - 'well-worn', - 'wet', - 'which', - 'whimsical', - 'whirlwind', - 'whispered', - 'white', - 'whole', - 'whopping', - 'wicked', - 'wide', - 'wide-eyed', - 'wiggly', - 'wild', - 'willing', - 'wilted', - 'winding', - 'windy', - 'winged', - 'wiry', - 'wise', - 'witty', - 'wobbly', - 'woeful', - 'wonderful', - 'wooden', - 'woozy', - 'wordy', - 'worldly', - 'worn', - 'worried', - 'worrisome', - 'worse', - 'worst', - 'worthwhile', - 'worthy', - 'wrathful', - 'wretched', - 'writhing', - 'wrong', - 'wry', - 'yawning', - 'yearly', - 'yellow', - 'yellowish', - 'young', - 'youthful', - 'yummy', - 'zany', - 'zealous', - 'zesty', - 'zigzag', - 'rocky', ]; const object = [ - 'people', - 'history', - 'way', - 'art', - 'world', - 'information', - 'map', - 'family', - 'government', - 'health', - 'system', - 'computer', - 'meat', - 'year', - 'thanks', - 'music', - 'person', - 'reading', - 'method', - 'data', - 'food', - 'understanding', - 'theory', - 'law', - 'bird', - 'literature', - 'problem', - 'software', - 'control', - 'knowledge', - 'power', - 'ability', - 'economics', - 'love', - 'internet', - 'television', - 'science', - 'library', - 'nature', - 'fact', - 'product', - 'idea', - 'temperature', - 'investment', - 'area', - 'society', - 'activity', - 'story', - 'industry', - 'media', - 'thing', - 'oven', - 'community', - 'definition', - 'safety', - 'quality', - 'development', - 'language', - 'management', - 'player', - 'variety', - 'video', - 'week', - 'security', - 'country', - 'exam', - 'movie', - 'organization', - 'equipment', - 'physics', - 'analysis', - 'policy', - 'series', - 'thought', - 'basis', - 'boyfriend', - 'direction', - 'strategy', - 'technology', - 'army', - 'camera', - 'freedom', - 'paper', - 'environment', - 'child', - 'instance', - 'month', - 'truth', - 'marketing', - 'university', - 'writing', - 'article', - 'department', - 'difference', - 'goal', - 'news', - 'audience', - 'fishing', - 'growth', - 'income', - 'marriage', - 'user', - 'combination', - 'failure', - 'meaning', - 'medicine', - 'philosophy', - 'teacher', - 'communication', - 'night', - 'chemistry', - 'disease', - 'disk', - 'energy', - 'nation', - 'road', - 'role', - 'soup', - 'advertising', - 'location', - 'success', - 'addition', - 'apartment', - 'education', - 'math', - 'moment', - 'painting', - 'politics', - 'attention', - 'decision', - 'event', - 'property', - 'shopping', - 'student', - 'wood', - 'competition', - 'distribution', - 'entertainment', - 'office', - 'population', - 'president', - 'unit', - 'category', - 'cigarette', - 'context', - 'introduction', - 'opportunity', - 'performance', - 'driver', - 'flight', - 'length', - 'magazine', - 'newspaper', - 'relationship', - 'teaching', - 'cell', - 'dealer', - 'debate', - 'finding', - 'lake', - 'member', - 'message', - 'phone', - 'scene', - 'appearance', - 'association', - 'concept', - 'customer', - 'death', - 'discussion', - 'housing', - 'inflation', - 'insurance', - 'mood', - 'woman', - 'advice', - 'blood', - 'effort', - 'expression', - 'importance', - 'opinion', - 'payment', - 'reality', - 'responsibility', - 'situation', - 'skill', - 'statement', - 'wealth', - 'application', - 'city', - 'county', - 'depth', - 'estate', - 'foundation', - 'grandmother', - 'heart', - 'perspective', - 'photo', - 'recipe', - 'studio', - 'topic', - 'collection', - 'imagination', - 'passion', - 'percentage', - 'resource', - 'setting', - 'ad', - 'agency', - 'college', - 'connection', - 'criticism', - 'debt', - 'description', - 'memory', - 'patience', - 'secretary', - 'solution', - 'administration', - 'aspect', - 'attitude', - 'director', - 'personality', - 'psychology', - 'recommendation', - 'response', - 'selection', - 'storage', - 'version', - 'alcohol', - 'argument', - 'complaint', - 'contract', - 'emphasis', - 'highway', - 'loss', - 'membership', - 'possession', - 'preparation', - 'steak', - 'union', - 'agreement', - 'currency', - 'employment', - 'engineering', - 'entry', - 'interaction', - 'limit', - 'mixture', - 'preference', - 'region', - 'republic', - 'seat', - 'tradition', - 'actor', - 'classroom', - 'delivery', - 'device', - 'drama', - 'election', - 'engine', - 'football', - 'guidance', - 'hotel', - 'match', - 'owner', - 'priority', - 'protection', - 'suggestion', - 'tension', - 'variation', - 'atmosphere', - 'awareness', - 'bread', - 'climate', - 'comparison', - 'confusion', - 'construction', - 'elevator', - 'emotion', - 'employee', - 'employer', - 'guest', - 'height', - 'leadership', - 'mall', - 'manager', - 'operation', - 'recording', - 'respect', - 'sample', - 'transportation', - 'boring', - 'charity', - 'cousin', - 'disaster', - 'editor', - 'efficiency', - 'excitement', - 'extent', - 'feedback', - 'guitar', - 'homework', - 'leader', - 'mom', - 'outcome', - 'permission', - 'presentation', - 'promotion', - 'reflection', - 'refrigerator', - 'resolution', - 'revenue', - 'session', - 'singer', - 'tennis', - 'basket', - 'bonus', - 'cabinet', - 'childhood', - 'church', - 'clothes', - 'coffee', - 'dinner', - 'drawing', - 'hair', - 'hearing', - 'initiative', - 'judgment', - 'lab', - 'measurement', - 'mode', - 'mud', - 'orange', - 'poetry', - 'police', - 'possibility', - 'procedure', - 'queen', - 'ratio', - 'relation', - 'restaurant', - 'satisfaction', - 'sector', - 'signature', - 'significance', - 'song', - 'tooth', - 'town', - 'vehicle', - 'volume', - 'wife', - 'accident', - 'airport', - 'appointment', - 'arrival', - 'assumption', - 'baseball', - 'chapter', - 'committee', - 'conversation', - 'database', - 'enthusiasm', - 'error', - 'explanation', - 'farmer', - 'gate', - 'girl', - 'hall', - 'historian', - 'hospital', - 'instruction', - 'maintenance', - 'manufacturer', - 'meal', - 'perception', - 'pie', - 'poem', - 'presence', - 'proposal', - 'reception', - 'replacement', - 'revolution', - 'river', - 'son', - 'speech', - 'tea', - 'village', - 'warning', - 'winner', - 'worker', - 'writer', - 'assistance', - 'breath', - 'buyer', - 'chest', - 'chocolate', - 'conclusion', - 'contribution', - 'cookie', - 'courage', - 'desk', - 'drawer', - 'establishment', - 'examination', - 'grocery', - 'honey', - 'impression', - 'improvement', - 'independence', - 'insect', - 'inspection', - 'inspector', - 'king', - 'ladder', - 'menu', - 'penalty', - 'piano', - 'potato', - 'profession', - 'professor', - 'quantity', - 'reaction', - 'requirement', - 'salad', - 'sister', - 'supermarket', - 'tongue', - 'weakness', - 'wedding', - 'affair', - 'ambition', - 'analyst', - 'apple', - 'assignment', - 'assistant', - 'bathroom', - 'bedroom', - 'beer', - 'birthday', - 'celebration', - 'championship', - 'cheek', - 'client', - 'consequence', - 'departure', - 'diamond', - 'dirt', - 'ear', - 'fortune', - 'friendship', - 'funeral', - 'gene', - 'girlfriend', - 'hat', - 'indication', - 'intention', - 'lady', - 'midnight', - 'negotiation', - 'obligation', - 'passenger', - 'pizza', - 'platform', - 'poet', - 'pollution', - 'recognition', - 'reputation', - 'shirt', - 'speaker', - 'stranger', - 'surgery', - 'sympathy', - 'tale', - 'throat', - 'trainer', - 'uncle', - 'youth', - 'time', - 'work', - 'film', - 'water', - 'money', - 'example', - 'while', - 'business', - 'study', - 'game', - 'life', - 'form', - 'air', - 'day', - 'place', - 'number', - 'part', - 'field', - 'fish', - 'back', - 'process', - 'heat', - 'hand', - 'experience', - 'job', - 'book', - 'end', - 'point', - 'type', - 'home', - 'economy', - 'value', - 'body', - 'market', - 'guide', - 'interest', - 'state', - 'radio', - 'course', - 'company', - 'price', - 'size', - 'card', - 'list', - 'mind', - 'trade', - 'line', - 'care', - 'group', - 'risk', - 'word', - 'force', - 'key', - 'light', - 'training', - 'name', - 'school', - 'top', - 'amount', - 'level', - 'order', - 'practice', - 'research', - 'sense', - 'service', - 'piece', - 'web', - 'boss', - 'sport', - 'fun', - 'house', - 'page', - 'term', - 'test', - 'answer', - 'sound', - 'focus', - 'matter', - 'kind', - 'soil', - 'board', - 'oil', - 'picture', - 'access', - 'garden', - 'range', - 'rate', - 'reason', - 'future', - 'site', - 'demand', - 'exercise', - 'image', - 'case', - 'cause', - 'coast', - 'action', - 'age', - 'boat', - 'record', - 'result', - 'section', - 'building', - 'mouse', - 'cash', - 'class', - 'period', - 'plan', - 'store', - 'tax', - 'side', - 'subject', - 'space', - 'rule', - 'stock', - 'weather', - 'chance', - 'figure', - 'man', - 'model', - 'source', - 'beginning', - 'earth', - 'program', - 'chicken', - 'design', - 'feature', - 'head', - 'material', - 'purpose', - 'question', - 'rock', - 'salt', - 'act', - 'birth', - 'car', - 'dog', - 'object', - 'scale', - 'sun', - 'note', - 'profit', - 'rent', - 'speed', - 'style', - 'war', - 'bank', - 'craft', - 'half', - 'inside', - 'outside', - 'standard', - 'bus', - 'exchange', - 'eye', - 'fire', - 'position', - 'pressure', - 'stress', - 'advantage', - 'benefit', - 'box', - 'frame', - 'issue', - 'step', - 'cycle', - 'face', - 'item', - 'metal', - 'paint', - 'review', - 'room', - 'screen', - 'structure', - 'view', - 'account', - 'ball', - 'discipline', - 'medium', - 'share', - 'balance', - 'bit', - 'black', - 'bottom', - 'choice', - 'gift', - 'impact', - 'machine', - 'shape', - 'tool', - 'wind', - 'address', - 'average', - 'career', - 'culture', - 'morning', - 'pot', - 'sign', - 'table', - 'task', - 'condition', - 'contact', - 'credit', - 'egg', - 'hope', - 'ice', - 'network', - 'north', - 'square', - 'attempt', - 'date', - 'effect', - 'link', - 'post', - 'star', - 'voice', - 'capital', - 'challenge', - 'friend', - 'self', - 'shot', - 'brush', - 'couple', - 'exit', - 'front', - 'function', - 'lack', - 'living', - 'plant', - 'plastic', - 'spot', - 'summer', - 'taste', - 'theme', - 'track', - 'wing', - 'brain', - 'button', - 'click', - 'desire', - 'foot', - 'gas', - 'influence', - 'notice', - 'rain', - 'wall', - 'base', - 'damage', - 'distance', - 'feeling', - 'pair', - 'savings', - 'staff', - 'sugar', - 'target', - 'text', - 'animal', - 'author', - 'budget', - 'discount', - 'file', - 'ground', - 'lesson', - 'minute', - 'officer', - 'phase', - 'reference', - 'register', - 'sky', - 'stage', - 'stick', - 'title', - 'trouble', - 'bowl', - 'bridge', - 'campaign', - 'character', - 'club', - 'edge', - 'evidence', - 'fan', - 'letter', - 'lock', - 'maximum', - 'novel', - 'option', - 'pack', - 'park', - 'quarter', - 'skin', - 'sort', - 'weight', - 'baby', - 'background', - 'carry', - 'dish', - 'factor', - 'fruit', - 'glass', - 'joint', - 'master', - 'muscle', - 'red', - 'strength', - 'traffic', - 'trip', - 'vegetable', - 'appeal', - 'chart', - 'gear', - 'ideal', - 'kitchen', - 'land', - 'log', - 'mother', - 'net', - 'party', - 'principle', - 'relative', - 'sale', - 'season', - 'signal', - 'spirit', - 'street', - 'tree', - 'wave', - 'belt', - 'bench', - 'commission', - 'copy', - 'drop', - 'minimum', - 'path', - 'progress', - 'project', - 'sea', - 'south', - 'status', - 'stuff', - 'ticket', - 'tour', - 'angle', - 'blue', - 'breakfast', - 'confidence', - 'daughter', - 'degree', - 'doctor', - 'dot', - 'dream', - 'duty', - 'essay', - 'father', - 'fee', - 'finance', - 'hour', - 'juice', - 'luck', - 'milk', - 'mouth', - 'peace', - 'pipe', - 'stable', - 'storm', - 'substance', - 'team', - 'trick', - 'afternoon', - 'bat', - 'beach', - 'blank', - 'catch', - 'chain', - 'consideration', - 'cream', - 'crew', - 'detail', - 'gold', - 'interview', - 'kid', - 'mark', - 'mission', - 'pain', - 'pleasure', - 'score', - 'screw', - 'shop', - 'shower', - 'suit', - 'tone', - 'window', - 'agent', - 'band', - 'bath', - 'block', - 'bone', - 'calendar', - 'candidate', - 'cap', - 'coat', - 'contest', - 'corner', - 'court', - 'cup', - 'district', - 'door', - 'east', - 'finger', - 'garage', - 'guarantee', - 'hole', - 'hook', - 'implement', - 'layer', - 'lecture', - 'lie', - 'manner', - 'meeting', - 'nose', - 'parking', - 'partner', - 'profile', - 'rice', - 'routine', - 'schedule', - 'swimming', - 'telephone', - 'tip', - 'winter', - 'airline', - 'bag', - 'battle', - 'bed', - 'bill', - 'bother', - 'cake', - 'code', - 'curve', - 'designer', - 'dimension', - 'dress', - 'ease', - 'emergency', - 'evening', - 'extension', - 'farm', - 'fight', - 'gap', - 'grade', - 'holiday', - 'horror', - 'horse', - 'host', - 'husband', - 'loan', - 'mistake', - 'mountain', - 'nail', - 'noise', - 'occasion', - 'package', - 'patient', - 'pause', - 'phrase', - 'proof', - 'race', - 'relief', - 'sand', - 'sentence', - 'shoulder', - 'smoke', - 'stomach', - 'string', - 'tourist', - 'towel', - 'vacation', - 'west', - 'wheel', - 'wine', - 'arm', - 'aside', - 'associate', - 'bet', - 'blow', - 'border', - 'branch', - 'breast', - 'brother', - 'buddy', - 'bunch', - 'chip', - 'coach', - 'cross', - 'document', - 'draft', - 'dust', - 'expert', - 'floor', - 'god', - 'golf', - 'habit', - 'iron', - 'judge', - 'knife', - 'landscape', - 'league', - 'mail', - 'mess', - 'native', - 'opening', - 'parent', - 'pattern', - 'pin', - 'pool', - 'pound', - 'request', - 'salary', - 'shame', - 'shelter', - 'shoe', - 'silver', - 'tackle', - 'tank', - 'trust', - 'assist', - 'bake', - 'bar', - 'bell', - 'bike', - 'blame', - 'boy', - 'brick', - 'chair', - 'closet', - 'clue', - 'collar', - 'comment', - 'conference', - 'devil', - 'diet', - 'fear', - 'fuel', - 'glove', - 'jacket', - 'lunch', - 'monitor', - 'mortgage', - 'nurse', - 'pace', - 'panic', - 'peak', - 'plane', - 'reward', - 'row', - 'sandwich', - 'shock', - 'spite', - 'spray', - 'surprise', - 'till', - 'transition', - 'weekend', - 'welcome', - 'yard', - 'alarm', - 'bend', - 'bicycle', - 'bite', - 'blind', - 'bottle', - 'cable', - 'candle', - 'clerk', - 'cloud', - 'concert', - 'counter', - 'flower', - 'grandfather', - 'knee', - 'lawyer', - 'leather', - 'load', - 'mirror', - 'neck', - 'pension', - 'plate', - 'purple', - 'ruin', - 'ship', - 'skirt', - 'slice', - 'snow', - 'specialist', - 'stroke', - 'switch', - 'tune', - 'zone', - 'anger', - 'award', - 'bid', - 'boot', - 'bug', - 'camp', - 'candy', - 'carpet', - 'cat', - 'champion', - 'channel', - 'clock', - 'comfort', - 'cow', - 'crack', - 'engineer', - 'entrance', - 'fault', - 'grass', - 'guy', - 'hell', - 'highlight', - 'incident', - 'island', - 'joke', - 'jury', - 'leg', - 'lip', - 'mate', - 'motor', - 'nerve', - 'passage', - 'pen', - 'pride', - 'priest', - 'prize', - 'promise', - 'resident', - 'resort', - 'ring', - 'roof', - 'rope', - 'sail', - 'scheme', - 'script', - 'sock', - 'station', - 'toe', - 'tower', - 'truck', - 'witness', - 'can', - 'will', - 'other', - 'use', - 'make', - 'good', - 'look', - 'help', - 'go', - 'great', - 'being', - 'still', - 'public', - 'read', - 'keep', - 'start', - 'give', - 'human', - 'local', - 'general', - 'specific', - 'long', - 'play', - 'feel', - 'high', - 'put', - 'common', - 'set', - 'change', - 'simple', - 'past', - 'big', - 'possible', - 'particular', - 'major', - 'personal', - 'current', - 'national', - 'cut', - 'natural', - 'physical', - 'show', - 'try', - 'check', - 'second', - 'call', - 'move', - 'pay', - 'let', - 'increase', - 'single', - 'individual', - 'turn', - 'ask', - 'buy', - 'guard', - 'hold', - 'main', - 'offer', - 'potential', - 'professional', - 'international', - 'travel', - 'cook', - 'alternative', - 'special', - 'working', - 'whole', - 'dance', - 'excuse', - 'cold', - 'commercial', - 'low', - 'purchase', - 'deal', - 'primary', - 'worth', - 'fall', - 'necessary', - 'positive', - 'produce', - 'search', - 'present', - 'spend', - 'talk', - 'creative', - 'tell', - 'cost', - 'drive', - 'green', - 'support', - 'glad', - 'remove', - 'return', - 'run', - 'complex', - 'due', - 'effective', - 'middle', - 'regular', - 'reserve', - 'independent', - 'leave', - 'original', - 'reach', - 'rest', - 'serve', - 'watch', - 'beautiful', - 'charge', - 'active', - 'break', - 'negative', - 'safe', - 'stay', - 'visit', - 'visual', - 'affect', - 'cover', - 'report', - 'rise', - 'walk', - 'white', - 'junior', - 'pick', - 'unique', - 'classic', - 'final', - 'lift', - 'mix', - 'private', - 'stop', - 'teach', - 'western', - 'concern', - 'familiar', - 'fly', - 'official', - 'broad', - 'comfortable', - 'gain', - 'rich', - 'save', - 'stand', - 'young', - 'heavy', - 'lead', - 'listen', - 'valuable', - 'worry', - 'handle', - 'leading', - 'meet', - 'release', - 'sell', - 'finish', - 'normal', - 'press', - 'ride', - 'secret', - 'spread', - 'spring', - 'tough', - 'wait', - 'brown', - 'deep', - 'display', - 'flow', - 'hit', - 'objective', - 'shoot', - 'touch', - 'cancel', - 'chemical', - 'extreme', - 'push', - 'conflict', - 'eat', - 'fill', - 'formal', - 'jump', - 'kick', - 'opposite', - 'pass', - 'pitch', - 'remote', - 'total', - 'treat', - 'vast', + 'acoustics', + 'animation', + 'audio', + 'barndoor', 'beat', - 'burn', - 'deposit', - 'print', - 'raise', - 'sleep', - 'somewhere', - 'advance', - 'consist', - 'dark', - 'double', - 'draw', - 'equal', - 'fix', - 'hire', - 'internal', - 'join', - 'kill', - 'sensitive', - 'tap', - 'win', - 'attack', - 'claim', - 'constant', - 'drag', - 'drink', - 'guess', - 'minor', - 'pull', - 'raw', - 'soft', - 'solid', - 'wear', - 'weird', - 'wonder', - 'annual', - 'count', - 'dead', - 'doubt', - 'feed', - 'forever', - 'impress', - 'repeat', - 'round', - 'sing', - 'slide', - 'strip', - 'wish', - 'combine', - 'command', - 'dig', - 'divide', - 'equivalent', - 'hang', - 'hunt', - 'initial', - 'march', - 'mention', - 'spiritual', - 'survey', - 'tie', - 'adult', - 'brief', - 'crazy', - 'escape', - 'gather', - 'prior', - 'repair', - 'rough', - 'sad', - 'scratch', - 'strike', - 'employ', - 'external', - 'laugh', - 'lay', - 'mobile', - 'ordinary', - 'respond', - 'royal', - 'senior', - 'split', - 'strain', - 'swim', - 'train', - 'upper', - 'wash', - 'yellow', - 'convert', - 'crash', - 'dependent', - 'fold', - 'funny', - 'grab', - 'hide', - 'miss', - 'permit', - 'quote', - 'recover', - 'resolve', - 'roll', - 'sink', - 'slip', - 'spare', - 'suspect', - 'sweet', - 'swing', - 'twist', - 'upstairs', - 'usual', - 'abroad', - 'brave', - 'calm', - 'concentrate', - 'estimate', - 'grand', - 'male', - 'mine', - 'prompt', - 'quiet', - 'refuse', - 'reveal', - 'rush', - 'shake', - 'shift', - 'shine', - 'steal', - 'suck', + 'brightness', + 'bulb', + 'channel', + 'chroma', + 'cinema', + 'clip', + 'color', + 'codec', + 'composition', + 'compression', + 'contrast', + 'darkness', + 'display', + 'distortion', + 'dolly', + 'downlight', + 'drum', + 'echo', + 'edit', + 'effect', + 'film', + 'fixture', + 'flash', + 'footage', + 'format', + 'floodlight', + 'flicker', + 'frame', + 'fresnel', + 'gel', + 'glow', + 'gobo', + 'groove', + 'guitar', + 'harmony', + 'highlight', + 'illumination', + 'instrument', + 'instrumental', + 'jib', + 'lamp', + 'led', + 'light', + 'luminance', + 'mastering', + 'melody', + 'microphone', + 'mix', + 'mixing', + 'moving light', + 'note', + 'pattern', + 'piano', + 'picture', + 'production', + 'record', + 'reflection', + 'reverb', + 'resolution', + 'sampler', + 'sample', + 'saxophone', + 'screen', + 'signal', + 'softlight', + 'song', + 'sound', + 'soundtrack', + 'speaker', + 'spot', + 'strobe', + 'streaming', 'surround', - 'bear', - 'brilliant', - 'dare', - 'dear', - 'delay', - 'drunk', - 'female', - 'hurry', - 'inevitable', - 'invite', - 'kiss', - 'neat', - 'pop', - 'punch', - 'quit', - 'reply', - 'representative', - 'resist', - 'rip', - 'rub', - 'silly', - 'smile', - 'spell', - 'stretch', - 'stupid', - 'tear', - 'temporary', - 'tomorrow', - 'wake', - 'wrap', - 'yesterday', + 'synth', + 'tune', + 'trumpet', + 'uplight', + 'video', + 'violin', + 'visual', + 'voice', + 'wave', + 'wash', ]; /** diff --git a/e2e/tests/features/201-message-control.spec.ts b/e2e/tests/features/201-message-control.spec.ts index e6f763517..d1e94abd1 100644 --- a/e2e/tests/features/201-message-control.spec.ts +++ b/e2e/tests/features/201-message-control.spec.ts @@ -8,7 +8,7 @@ test('test', async ({ context }) => { // stage timer message await editorPage.getByPlaceholder('Shown in stage timer').click(); - await expect(editorPage.getByPlaceholder('Shown in stage timer')).toBeEnabled(true); + await expect(editorPage.getByPlaceholder('Shown in stage timer')).toBeEnabled(); await editorPage.getByPlaceholder('Shown in stage timer').fill('testing stage'); await editorPage.getByRole('button', { name: /toggle timer screen message/i }).click({ timeout: 5000 });