Index

libs/fe-utilities/src/lib/keycodes/keycodes.const.ts

A
Type : number
Default value : 65
B
Type : number
Default value : 66
BACKSPACE
Type : number
Default value : 8
C
Type : number
Default value : 67
COMMA
Type : number
Default value : 188
D
Type : number
Default value : 68
DELETE
Type : number
Default value : 46
DOWN_ARROW
Type : number
Default value : 40
E
Type : number
Default value : 69
EIGHT
Type : number
Default value : 56
END
Type : number
Default value : 35
ENTER
Type : number
Default value : 13
ESCAPE
Type : number
Default value : 27
F
Type : number
Default value : 70
FIVE
Type : number
Default value : 53
FOUR
Type : number
Default value : 52
G
Type : number
Default value : 71
H
Type : number
Default value : 72
HOME
Type : number
Default value : 36
I
Type : number
Default value : 73
J
Type : number
Default value : 74
K
Type : number
Default value : 75
KEYS
Type : Record<string, KeyCode>
Default value : { BACKSPACE: { code: 'Backspace', keyCode: 8, }, TAB: { code: 'Tab', keyCode: 9, }, ENTER: { code: 'Enter', keyCode: 13, }, ESCAPE: { code: 'Escape', keyCode: 27, }, SPACE: { code: 'Space', keyCode: 32, }, PAGE_UP: { code: 'PageUp', keyCode: 33, }, PAGE_DOWN: { code: 'PageDown', keyCode: 34, }, END: { code: 'End', keyCode: 35, }, HOME: { code: 'Home', keyCode: 36, }, LEFT_ARROW: { code: 'ArrowLeft', keyCode: 37, }, UP_ARROW: { code: 'ArrowUp', keyCode: 38, }, RIGHT_ARROW: { code: 'ArrowRight', keyCode: 39, }, DOWN_ARROW: { code: 'ArrowDown', keyCode: 40, }, DELETE: { code: 'Delete', keyCode: 46, }, ZERO: { code: 'Digit0', keyCode: 48, }, ONE: { code: 'Digit1', keyCode: 49, }, TWO: { code: 'Digit2', keyCode: 50, }, THREE: { code: 'Digit3', keyCode: 51, }, FOUR: { code: 'Digit4', keyCode: 52, }, FIVE: { code: 'Digit5', keyCode: 53, }, SIX: { code: 'Digit6', keyCode: 54, }, SEVEN: { code: 'Digit7', keyCode: 55, }, EIGHT: { code: 'Digit8', keyCode: 56, }, NINE: { code: 'Digit9', keyCode: 57, }, A: { code: 'KeyA', keyCode: 65, }, B: { code: 'KeyB', keyCode: 66, }, C: { code: 'KeyC', keyCode: 67, }, D: { code: 'KeyD', keyCode: 68, }, E: { code: 'KeyE', keyCode: 69, }, F: { code: 'KeyF', keyCode: 70, }, G: { code: 'KeyG', keyCode: 71, }, H: { code: 'KeyH', keyCode: 72, }, I: { code: 'KeyI', keyCode: 73, }, J: { code: 'KeyJ', keyCode: 74, }, K: { code: 'KeyK', keyCode: 75, }, L: { code: 'KeyL', keyCode: 76, }, M: { code: 'KeyM', keyCode: 77, }, N: { code: 'KeyN', keyCode: 78, }, O: { code: 'KeyO', keyCode: 79, }, P: { code: 'KeyP', keyCode: 80, }, Q: { code: 'KeyQ', keyCode: 81, }, R: { code: 'KeyR', keyCode: 82, }, S: { code: 'KeyS', keyCode: 83, }, T: { code: 'KeyT', keyCode: 84, }, U: { code: 'KeyU', keyCode: 85, }, V: { code: 'KeyV', keyCode: 86, }, W: { code: 'KeyW', keyCode: 87, }, X: { code: 'KeyX', keyCode: 88, }, Y: { code: 'KeyY', keyCode: 89, }, Z: { code: 'KeyZ', keyCode: 90, }, COMMA: { code: 'Comma', keyCode: 188, }, }
L
Type : number
Default value : 76
LEFT_ARROW
Type : number
Default value : 37
M
Type : number
Default value : 77
N
Type : number
Default value : 78
NINE
Type : number
Default value : 57
O
Type : number
Default value : 79
ONE
Type : number
Default value : 49
P
Type : number
Default value : 80
PAGE_DOWN
Type : number
Default value : 34
PAGE_UP
Type : number
Default value : 33
Q
Type : number
Default value : 81
R
Type : number
Default value : 82
RIGHT_ARROW
Type : number
Default value : 39
S
Type : number
Default value : 83
SEVEN
Type : number
Default value : 55
SIX
Type : number
Default value : 54
SPACE
Type : number
Default value : 32
T
Type : number
Default value : 84
TAB
Type : number
Default value : 9
THREE
Type : number
Default value : 51
TWO
Type : number
Default value : 50
U
Type : number
Default value : 85
UP_ARROW
Type : number
Default value : 38
V
Type : number
Default value : 86
W
Type : number
Default value : 87
X
Type : number
Default value : 88
Y
Type : number
Default value : 89
Z
Type : number
Default value : 90
ZERO
Type : number
Default value : 48

libs/ui/pipes/src/lib/stories/pipes.numbers.stories.ts

abbreviateNumber
Default value : () => ({ moduleMetadata: { imports: [...MODULE_IMPORTS] }, component: PipesAbbreviateWrapper, props: { value: number('Value', 12345), decimalPlaces: number('Decimal places', 1), }, })
DL_STYLES
Default value : ` dd {font-weight: bold;} dd:first-of-type {margin-bottom: 2rem;} dt:after {content: ':';} `
MODULE_IMPORTS
Type : []
Default value : [TsPipesModule]
roundNumber
Default value : () => ({ moduleMetadata: { imports: [...MODULE_IMPORTS] }, component: PipesRoundNumberWrapper, props: { value: number('Value', 1234.9876), decimalPlaces: number('Decimal places', 0), }, })

libs/ui/file-upload/src/lib/file-upload.stories.ts

ALL_MIME_TYPES
Type : []
Default value : [ 'image/png', 'image/jpg', 'image/jpeg', 'text/csv', 'video/mp4', 'video/x-flv', 'video/webm', 'video/quicktime', 'video/mpeg', ]
basic
Default value : () => ({ component: TsFileUploadComponent, props: { formControl: new FormControl(), isDisabled: boolean('Disabled', false), cleared: action('File cleared'), enter: action('Drag: Enter'), exit: action('Drag: Exit'), selected: action('File selected'), }, })
constraints
Default value : () => ({ component: TsFileUploadComponent, props: { formControl: new FormControl(), seedFile: SEED_FILE, dimensionConstraints: object('Accepted dimensions', DIMENSIONS), accept: array('Accepted mime types', ALL_MIME_TYPES), maximumKilobytesPerFile: number('Maximum kilobytes per file', 10240), ratioConstraints: array('Ratio constraints', ['1:2', '1.9:1', '5:1']), }, })
DIMENSIONS
Type : []
Default value : [ { height: { min: 50, max: 100, }, width: { min: 50, max: 100, }, }, { height: { min: 72, max: 72, }, width: { min: 72, max: 72, }, }, ]
hideUploadButton
Default value : () => ({ component: TsFileUploadComponent, props: { formControl: new FormControl(), hideButton: boolean('Hide button', true), }, })
multiple
Default value : () => ({ component: FileUploadWrapper, })
progressAndSeededFile
Default value : () => ({ component: TsFileUploadComponent, props: { formControl: new FormControl(), seedFile: SEED_FILE, progress: number('Upload progress', 23), }, })
SEED_FILE
Default value : dataURLtoFile( // eslint-disable-next-line max-len 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAQMAAABKLAcXAAAAA1BMVEV6IiKMzteYAAAAE0lEQVR4AWOgKxgFo2AUjIJRAAAFeAABHs0ozQAAAABJRU5ErkJggg==', 'test-file.png', )
themes
Default value : () => ({ component: TsFileUploadComponent, template: ` <ts-file-upload [formControl]="formControl" [isDisabled]="isDisabled" theme="default" tsVerticalSpacing="large--1"></ts-file-upload> <ts-file-upload [formControl]="formControl" [isDisabled]="isDisabled" theme="secondary" tsVerticalSpacing="large--1"></ts-file-upload> <ts-file-upload [formControl]="formControl" [isDisabled]="isDisabled" theme="warning"></ts-file-upload> `, props: { formControl: new FormControl(), isDisabled: boolean('Disabled', false), }, })

libs/ui/input/src/lib/input/input.component.ts

allowedMaskShortcuts
Type : TsMaskShortcutOptions[]
Default value : [ 'currency', 'date', 'number', 'percentage', 'phone', 'postal', 'default', ]

Create an array used to verify the passed in shortcut is valid. Used by TsInputComponent

AUTOCOMPLETE_DEFAULT
Type : TsInputAutocompleteTypes
Default value : 'on'
DEFAULT_DATE_LOCALE
Type : string
Default value : 'en-US'
DEFAULT_TEXTAREA_ROWS
Type : number
Default value : 4
nextUniqueId
Type : number
Default value : 0
NUMBER_ONLY_REGEX
Default value : /[^0-9]/g
NUMBER_WITH_DECIMAL_REGEX
Default value : /[^0-9.]/g

libs/ui/confirmation/src/lib/confirmation/confirmation.directive.ts

allowedOverlayPositionTypes
Type : TsConfirmationOverlayPositionTypes[]
Default value : [ 'above', 'below', 'before', 'after', ]

Define the allowed tooltips Used by TsConfirmationOverlayComponent position

libs/ui/tooltip/src/lib/tooltip/tooltip.component.ts

allowedTooltipTypes
Type : TsTooltipPositionTypes[]
Default value : [ 'above', 'below', 'before', 'after', ]

Define the allowed tooltips Used by TsTooltipComponent position

libs/ui/pipes/src/lib/truncate/truncate.pipe.ts

allowedTruncationTypes
Type : TsTruncatePositionType[]
Default value : [ 'start', 'middle', 'end', ]

Define the allowed truncation position types Used by TsTruncateAtPipe position

libs/ui/selection-list/src/lib/stories/selection-list.stories.ts

allowUserInput
Default value : () => ({ component: TsSelectionListComponent, props: { emulateLongQuery: boolean('Emulate long-running query', false), hint: text('Hint', 'Begin typing to search..'), isDisabled: boolean('Disabled', false), label: text('Label', 'Select states'), theme: select('Theme', ['primary', 'accent', 'warn'], 'primary'), closed: action('Closed'), duplicate: action('Duplicate selection'), opened: action('Opened'), queryChange: action('Query changed'), selectionChange: action('Selection changed'), optionSelected: action('Option selected'), optionDeselected: action('Option deselected'), }, })
basic
Default value : () => ({ template: ` <ts-selection-list [allowMultiple]="allowMultiple" [label]="label" [hint]="hint" [formControl]="formControl" [allowUserInput]="false" [displayFormatter]="formatter" [theme]="theme" > <ts-option [value]="f" [option]="f" *ngFor="let f of fruit">{{ f }}</ts-option> </ts-selection-list> `, props: { hint: text('Hint', 'Begin typing to search..'), isDisabled: boolean('Disabled', false), label: text('Label', 'Select states'), theme: select('Theme', ['primary', 'accent', 'warn'], 'primary'), results: STATES.slice(0, 10), formControl: new FormControl([]), allowMultiple: boolean('Allow multiple selections', false), fruit: ['apple', 'grape', 'peach', 'pear', 'banana'], }, })

libs/ui/chart/src/lib/stories/chart.stories.ts

amChartsFactory
Default value : (): TsAmChartsToken => ({ core: am4core, charts: am4charts, maps: am4maps, // eslint-disable-next-line @typescript-eslint/naming-convention themes: [am4themes_animated, am4themes_material], })
chord
Default value : () => ({ component: ChartWrapper, props: { visualization: 'chord', }, })
map
Default value : () => ({ component: ChartWrapper, props: { visualization: 'map', }, })
pie
Default value : () => ({ component: ChartWrapper, props: { visualization: 'pie', }, })
radar
Default value : () => ({ component: ChartWrapper, props: { visualization: 'radar', }, })
sankey
Default value : () => ({ component: ChartWrapper, props: { visualization: 'sankey', }, })
tree
Default value : () => ({ component: ChartWrapper, props: { visualization: 'tree', }, })
XY
Default value : () => ({ component: ChartWrapper, props: { visualization: 'xy', }, })

libs/ui/card/src/lib/card.stories.ts

aspectRatio
Default value : () => ({ template: `<ts-card [aspectRatio]="aspectRatio">My card content</ts-card>`, props: { aspectRatio: select('Aspect ratio', tsCardAspectRatioTypes, '16:9'), }, })
basic
Default value : () => ({ template: `<ts-card>My card content</ts-card>`, })
border
Default value : () => ({ template: `<ts-card [border]="border" [theme]="theme">My card content</ts-card>`, props: { border: select('Border side', tsCardBorderOptionsList, 'left'), theme: select('Theme', ['primary', 'accent', 'warn'], 'primary'), }, })
cardWithTitle
Default value : () => ({ template: ` <ts-card> <h3 tsCardTitle>{{ title }}</h3> <p>{{ content }}</p> </ts-card> `, props: { title: text('Card title', 'Card Title'), content: text('Card content', 'My card content!'), }, })
centeredContent
Default value : () => ({ template: `<ts-card [centeredContent]="centeredContent">My card content</ts-card>`, props: { centeredContent: boolean('Centered content', false) }, })
disabled
Default value : () => ({ template: `<ts-card [isDisabled]="disabled">My card content</ts-card>`, props: { disabled: boolean('Disabled', true) }, })
flat
Default value : () => ({ template: `<ts-card [flat]="flat">My card content</ts-card>`, props: { flat: boolean('Flat', true) }, })
supportsInteraction
Default value : () => ({ template: `<ts-card [supportsInteraction]="supportsInteraction" (click)="action($event)">My card content</ts-card>`, props: { supportsInteraction: boolean('Supports interaction', true), action: action('Card clicked!'), }, })

libs/ui/autocomplete/src/lib/autocomplete-panel/autocomplete-trigger.directive.ts

AUTOCOMPLETE_OPTION_HEIGHT
Type : number
Default value : 48

The following style constants are necessary to save here in order to properly calculate the scrollTop of the panel. Because we are not actually focusing the active item, scroll must be handled manually.

AUTOCOMPLETE_PANEL_HEIGHT
Type : number
Default value : 256
nextUniqueId
Type : number
Default value : 0
TS_AUTOCOMPLETE_SCROLL_STRATEGY
Default value : new InjectionToken<() => ScrollStrategy>('mat-autocomplete-scroll-strategy')
TS_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY
Default value : (overlay: Overlay): () => ScrollStrategy => () => overlay.scrollStrategies.reposition()

Define a scroll strategy factory

TS_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER
Type : object
Default value : { provide: TS_AUTOCOMPLETE_SCROLL_STRATEGY, deps: [Overlay], useFactory: TS_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY, }

libs/ui/search/src/lib/search.stories.ts

autoSubmit
Default value : () => ({ component: TsSearchComponent, props: { autoSubmit: true, submitted: action('Submitted'), }, })
basic
Default value : () => ({ component: TsSearchComponent, props: { initialValue: 'My search query', inputHint: text('Hint', 'Enter at least two characters.'), inputLabel: text('Label', 'Search'), isDisabled: boolean('Disabled', false), noValidationOrHint: boolean('No validation or hint', false), userCanClear: boolean('User can clear', true), changed: action('Query changed'), submitted: action('Submitted'), cleared: action('Cleared'), }, })
focusOnLoad
Default value : () => ({ component: TsSearchComponent, props: { isFocused: true, }, })
initialValue
Default value : () => ({ component: TsSearchComponent, props: { initialValue: 'My initial value', }, })
isSubmitting
Default value : () => ({ component: TsSearchComponent, props: { initialValue: 'My search query', isSubmitting: boolean('Submitting', true), }, })
themes
Default value : () => ({ template: ` <div tsVerticalSpacing="large--1"> <div tsVerticalSpacing="small--0"> theme: 'primary'<br> buttonTheme: 'default' </div> <ts-search [initialValue]="initialValue" theme="primary" buttonTheme="default"></ts-search> </div> <div tsVerticalSpacing="large--1"> <div tsVerticalSpacing="small--0"> theme: 'accent'<br> buttonTheme: 'secondary' </div> <ts-search [initialValue]="initialValue" theme="accent" buttonTheme="secondary"></ts-search> </div> <div tsVerticalSpacing="large--1"> <div tsVerticalSpacing="small--0"> theme: 'warn'<br> buttonTheme: 'warning' </div> <ts-search [initialValue]="initialValue" theme="warn" buttonTheme="warning"></ts-search> </div> `, props: { initialValue: 'My initial value', }, })

libs/fe-jwt/src/lib/jwt-decode/base64-url-decode.ts

b64DecodeUnicode
Default value : (str: string): string => decodeURIComponent(localAtob(str).replace(/(.)/g, function(m, p: string) { let code = p.charCodeAt(0).toString(16).toUpperCase(); if (code.length < 2) { code = `0${code}`; } return `%${code}`; }))

Decode unicode value

localAtob
Default value : window.atob || atobPolyfill

libs/ui/drawer/src/lib/drawer.stories.ts

backdrop
Default value : () => ({ component: DrawerWrapper, props: { expanded: true, hasBackdrop: true, collapsedSize: '0', expandedSize: '15rem', position: 'end', backdropClicked: action('Backdrop clicked'), }, })
basic
Default value : () => ({ component: DrawerWrapper, props: { collapsedSize: text('Collapsed size', '0'), expandedSize: text('Expanded size', '15rem'), position: select('Drawer position', ['start', 'end'], 'start'), role: text('Drawer aria role', ''), expandedChange: action('Expanded change'), isExpanded: action('Expanded'), expandedStart: action('Expanded start'), closed: action('Closed'), collapsedStart: action('Collapsed start'), positionChanged: action('Position changed'), }, })
mode
Default value : () => ({ component: DrawerWrapper, props: { expanded: true, collapsedSize: '0', expandedSize: '15rem', position: select('Drawer position', ['start', 'end'], 'start'), mode: select('Mode', ['overlay', 'push'], 'overlay'), }, })

libs/ui/spacing/src/lib/spacing.constant.ts

base
Type : number
Default value : 16

NOTE: The base value and the mathematics behind these spacings must exactly reflect the spacings defined in lib/src/scss/helpers/_spacing.scss

TS_SPACING
Type : literal type
Default value : { none: [ '0', ], small: [ `${Math.floor(base - 4)}px`, `${Math.floor(base / 2)}px`, `${Math.floor(base / 4)}px`, ], default: [ `${base}px`, ], large: [ `${Math.floor(base / 2 * 3)}px`, `${Math.floor(base / 2 * 4)}px`, `${Math.floor(base / 2 * 5)}px`, `${Math.floor(base / 2 * 6)}px`, `${Math.floor(base / 2 * 7)}px`, `${Math.floor(base / 2 * 9)}px`, `${Math.floor(base / 2 * 12)}px`, ], }

JavaScript representation of the values in _spacing.scss

libs/ui/paginator/src/lib/paginator.stories.ts

baseZeroOrOne
Default value : () => ({ template: ` <ts-paginator [totalRecords]="recordCount" [isZeroBased]="isZeroBased" ></ts-paginator> `, props: { recordCount: number('Record count', 82), isZeroBased: boolean('Zero based', true), }, })
basic
Default value : () => ({ template: ` <ts-paginator [theme]="theme" [totalRecords]="recordCount" (previousPageClicked)="previousPage($event)" (nextPageClicked)="nextPage($event)" (firstPageClicked)="firstPage($event)" (lastPageClicked)="lastPage($event)" (recordsPerPageChange)="recordsPerPageChange($event)" ></ts-paginator> `, props: { recordCount: number('Record count', 47), theme: select('Theme', tsButtonThemes, 'secondary'), firstPage: action('First page'), previousPage: action('Previous page'), nextPage: action('Next page'), lastPage: action('Last page'), recordsPerPageChange: action('Records per-page changed'), }, })
customTooltips
Default value : () => ({ template: ` <ts-paginator [totalRecords]="recordCount" [firstPageTooltip]="firstPageTooltip" [previousPageTooltip]="previousPageTooltip" [nextPageTooltip]="nextPageTooltip" [lastPageTooltip]="lastPageTooltip" ></ts-paginator> `, props: { recordCount: number('Record count', 82), firstPageTooltip: text('First page tooltip', 'My FIRST page tooltip!'), nextPageTooltip: text('Next page tooltip', 'My NEXT page tooltip!'), previousPageTooltip: text('Previous page tooltip', 'My PREVIOUS page tooltip!'), lastPageTooltip: text('Last page tooltip', 'My LAST page tooltip!'), }, })
noRecordsPerPageSelector
Default value : () => ({ template: ` <ts-paginator [totalRecords]="recordCount" [showRecordsPerPageSelector]="showRecordsPerPageSelector" ></ts-paginator> `, props: { recordCount: number('Record count', 82), showRecordsPerPageSelector: boolean('Show the Records Per Page menu', false), }, })
recordCountMaximum
Default value : () => ({ template: ` <ts-paginator [totalRecords]="recordCount" [maxPreferredRecords]="maxPreferredRecords" [recordCountTooHighMessage]="recordCountTooHighMessage" ></ts-paginator> `, props: { recordCount: number('Record count', 130), recordCountTooHighMessage: text( 'Message when record count is too high', `That is a lot of results! Try refining your filters for better results.`, ), maxPreferredRecords: number('Maximum preferred records', 100), }, })
setInitialPage
Default value : () => ({ template: ` <ts-paginator [totalRecords]="recordCount" [currentPageIndex]="currentPageIndex" ></ts-paginator> `, props: { recordCount: number('Record count', 82), currentPageIndex: number('Current page index', 3), }, })
simpleMode
Default value : () => ({ template: ` <ts-paginator [totalRecords]="recordCount" [isSimpleMode]="isSimpleMode" ></ts-paginator> `, props: { recordCount: number('Record count', 82), isSimpleMode: boolean('Simple mode', true), }, })

libs/ui/autofocus/src/lib/autofocus.stories.ts

basic
Default value : () => ({ template: ` <div> Input will be focused by default: <br> <input type="text" tsAutofocus /> </div> `, })

libs/ui/checkbox/src/lib/checkbox.stories.ts

basic
Default value : () => ({ component: TsCheckboxComponent, template: ` <ts-checkbox [formControl]="formControl" [isChecked]="isChecked" [isDisabled]="isDisabled" (inputChange)="inputChange($event)" (indeterminateChange)="interChanged($event)" >My checkbox!</ts-checkbox> `, props: { formControl: new FormControl(false), isChecked: boolean('isChecked', false), isDisabled: boolean('isDisabled', false), inputChange: action('Input changed'), interChanged: action('Indeterminate changed'), }, })

libs/ui/cohort-date-range/src/lib/cohort-date-range.stories.ts

basic
Default value : () => ({ component: TsCohortDateRangeComponent, props: { dateFormGroup: FORM_GROUP_SEEDED, cohorts: COHORTS_ACTIVE, isDisabled: boolean('Disabled', false), cohortDateRangeChanged: action('Date range changed'), }, })
COHORTS
Type : TsDateCohort[]
Default value : [ { display: 'Last 90 days', range: { start: startOfDay(subDays(DATES.start, 90)), end: DATES.start, }, }, { display: 'Last full month', range: { start: startOfDay(subMonths(startOfMonth(DATES.end), 1)), end: endOfDay(subDays(startOfMonth(DATES.end), 1)), }, }, ]
COHORTS_ACTIVE
Type : TsDateCohort[]
Default value : [ { display: 'Last 90 days', range: { start: startOfDay(subDays(DATES.start, 90)), end: DATES.start, }, }, { display: 'Last full month', range: { start: startOfDay(subMonths(startOfMonth(DATES.end), 1)), end: endOfDay(subDays(startOfMonth(DATES.end), 1)), }, active: true, }, ]
DATES
Type : object
Default value : { start: new Date(2020, 2, 18), startMin: new Date(2020, 2, 6), startMax: new Date(2020, 2, 24), end: new Date(2020, 2, 23), endMin: new Date(2020, 2, 13), endMax: new Date(2020, 2, 28), }
FORM_GROUP
Default value : new FormGroup({ startDate: new FormControl(null, Validators.required), endDate: new FormControl(null, Validators.required), })
FORM_GROUP_SEEDED
Default value : new FormGroup({ startDate: new FormControl(DATES.start, Validators.required), endDate: new FormControl(DATES.end, Validators.required), })
minMaxDate
Default value : () => ({ component: TsCohortDateRangeComponent, props: { dateFormGroup: FORM_GROUP, cohorts: COHORTS, startMinDate: date('Start min date', DATES.startMin), startMaxDate: date('Start max date', DATES.startMax), endMinDate: date('End min date', DATES.endMin), endMaxDate: date('End max date', DATES.endMax), }, })
noCustomDates
Default value : () => ({ component: TsCohortDateRangeComponent, props: { dateFormGroup: FORM_GROUP, cohorts: COHORTS_ACTIVE, allowCustomDates: boolean('Allow custom dates', false), }, })

libs/ui/confirmation/src/lib/confirmation.stories.ts

basic
Default value : () => ({ component: ConfirmationWrapper, props: { isDisabled: boolean('Disabled', false), cancelButtonText: text('Cancel button text', 'Cancel'), confirmationButtonText: text('Confirm button text', 'Confirm'), explanationText: text('Explanation (helper) text', 'Are you sure you want to do the thing you clicked to do?'), overlayPosition: select('Overlay position', ['above', 'below', 'before', 'after'], 'below'), cancelled: action('Cancelled'), submitted: action('Submit success'), }, })

libs/ui/copy/src/lib/copy.stories.ts

basic
Default value : () => ({ template: `<ts-copy>{{ content }}</ts-copy>`, props: { content: text('Text to copy', URL_STANDARD), }, })
format
Default value : () => ({ template: ` <h3>Standard</h3> <ts-copy format="standard" tsVerticalSpacing="large--1">{{ content }}</ts-copy> <h3>Minimal</h3> <ts-copy format="minimal" tsVerticalSpacing="large--1">{{ content }}</ts-copy> <h3>Icon</h3> <ts-copy format="icon">{{ content }}</ts-copy> `, props: { content: text('Text to copy', URL_LONG), }, })
themes
Default value : () => ({ template: ` <ts-copy theme="primary" tsVerticalSpacing>{{ content }}</ts-copy> <ts-copy theme="accent" tsVerticalSpacing>{{ content }}</ts-copy> <ts-copy theme="warn">{{ content }}</ts-copy> `, props: { content: text('Text to copy', URL_LONG), }, })
URL_LONG
Type : string
Default value : 'https://github.com/foo/bar/baz/bing/bang/boom/foo/bar/baz/bing/bang/boom/foo/bar/baz/bing/bang/boom/foo/bar/baz/bing/bang/boom/foo/bar/baz/bing/bang/boom/foo/bar/baz/bing/bang/boom'
URL_STANDARD
Type : string
Default value : 'https://github.com/foo/bar/baz/bing/bang/boom/'

libs/ui/csv-entry/src/lib/csv-entry.stories.ts

basic
Default value : () => ({ component: TsCSVEntryComponent, props: { blobGenerated: action('Generated file blob'), }, })
customFooterContent
Default value : () => ({ template: ` <ts-csv-entry [columnCount]="cols" [footerDirection]="dir"> <button>My custom footer button!</button> </ts-csv-entry> `, props: { cols: 3, dir: select('footerDirection', ['ltr', 'rtl'], 'ltr'), }, })
customRowAndColumnCount
Default value : () => ({ component: TsCSVEntryComponent, props: { columnCount: 4, rowCount: 6, }, })
fullWidth
Default value : () => ({ component: TsCSVEntryComponent, props: { columnCount: 1, fullWidth: true, }, })
staticHeaders
Default value : () => ({ component: TsCSVEntryComponent, props: { columnHeaders: ['Header One', 'Header Two'], }, })

libs/ui/date-range/src/lib/date-range.stories.ts

basic
Default value : () => ({ component: TsDateRangeComponent, props: { dateFormGroup: FORM_GROUP_SEEDED, isDisabled: boolean('Disabled', false), dateRangeChange: action('Date range changed'), startSelected: action('Start date selected'), endSelected: action('End date selected'), }, })
DATES
Type : object
Default value : { start: new Date(2020, 2, 18), startMin: new Date(2020, 2, 6), startMax: new Date(2020, 2, 24), end: new Date(2020, 2, 23), endMin: new Date(2020, 2, 13), endMax: new Date(2020, 2, 28), }
FORM_GROUP
Default value : new FormGroup({ startDate: new FormControl(null, Validators.required), endDate: new FormControl(null, Validators.required), })
FORM_GROUP_SEEDED
Default value : new FormGroup({ startDate: new FormControl(DATES.start, Validators.required), endDate: new FormControl(DATES.end, Validators.required), })
locale
Default value : () => ({ component: TsDateRangeComponent, props: { dateFormGroup: FORM_GROUP, dateLocale: text('Date locale', 'zh-cn'), }, })
minMaxDate
Default value : () => ({ component: TsDateRangeComponent, props: { dateFormGroup: FORM_GROUP, isDisabled: boolean('Disabled', false), startMinDate: date('Start min date', DATES.startMin), startMaxDate: date('Start max date', DATES.startMax), endMinDate: date('End min date', DATES.endMin), endMaxDate: date('End max date', DATES.endMax), }, })
startingView
Default value : () => ({ component: TsDateRangeComponent, props: { dateFormGroup: FORM_GROUP, startingView: select('Starting view', ['month', 'year'], 'year'), }, })

libs/ui/expansion-panel/src/lib/expansion-panel.stories.ts

basic
Default value : () => ({ template: ` <ts-expansion-panel [isDisabled]="isDisabled" (opened)="panelOpened()" (closed)="panelClosed()" (expandedChange)="panelExpandedChange($event)" (destroyed)="destroyed()" (afterExpand)="afterExpand()" (afterCollapse)="afterCollapse()" > <ts-expansion-panel-trigger>{{ triggerContent }}</ts-expansion-panel-trigger> <p>{{ panelContent }}</p> </ts-expansion-panel> `, props: { triggerContent: text('Trigger content', 'Here is my trigger!'), panelContent: text('Trigger content', 'And here is my standard panel content.'), isDisabled: boolean('isDisabled', false), panelOpened: action('Panel opened'), panelClosed: action('Panel closed'), panelExpandedChange: action('Panel expanded change'), afterExpand: action('After expand'), afterCollapse: action('After collapse'), destroyed: action('Panel destroyed'), }, })
customTriggerSizes
Default value : () => ({ template: ` <ts-expansion-panel> <ts-expansion-panel-trigger [collapsedHeight]="collapsedHeight + 'px'" [expandedHeight]="expandedHeight + 'px'" >Panel Trigger ({{collapsedHeight}}px -> {{expandedHeight}}px)</ts-expansion-panel-trigger> <p>And here is my standard panel content.</p> </ts-expansion-panel> `, props: { collapsedHeight: number('collapsedHeight', 100), expandedHeight: number('expandedHeight', 200), }, })
defaultOpen
Default value : () => ({ template: ` <ts-expansion-panel [isExpanded]="isExpanded"> <ts-expansion-panel-trigger> Here is my trigger! </ts-expansion-panel-trigger> <p>And here is my standard panel content.</p> </ts-expansion-panel> `, props: { isExpanded: boolean('isExpanded', true), }, })
lazyLoad
Default value : () => ({ template: ` <ts-expansion-panel> <ts-expansion-panel-trigger> My content won't be loaded until I open! </ts-expansion-panel-trigger> <ng-template tsExpansionPanelContent> Here is my deferred template! </ng-template> </ts-expansion-panel> `, })
stepperOrWizard
Default value : () => ({ component: AccordionWrapper, })
transparent
Default value : () => ({ template: ` <ts-card> <h3 tsCardTitle>This panel is wrapped in a TsCardComponent</h3> <ts-expansion-panel [transparentMode]="transparent"> <ts-expansion-panel-trigger> Here is my transparent trigger! </ts-expansion-panel-trigger> <p>And here is my standard panel content.</p> </ts-expansion-panel> </ts-card> `, props: { transparent: boolean('transparent', true), }, })

libs/ui/icon/src/lib/icon.stories.ts

basic
Default value : () => ({ template: ` <style> dl { columns: 2 auto; } div { break-inside: avoid-column; margin-bottom: 2em; } </style> <dl> <div> <dt>Basic icon</dt> <dd><ts-icon [icon]="icon1"></ts-icon></dd> </div> <div> <dt>Custom styles and classes</dt> <dd><ts-icon [icon]="icon1" [classes]="'foo bar'" [styles]="styles"></ts-icon></dd> </div> <div> <dt>Size</dt> <dd><ts-icon [icon]="icon1" [size]="size"></ts-icon></dd> </div> <div> <dt>Transform (string)</dt> <dd><ts-icon [icon]="icon1" [transform]="transformString"></ts-icon></dd> </div> <div> <dt>Transform (object)</dt> <dd><ts-icon [icon]="icon1" [transform]="transformObject"></ts-icon></dd> </div> <div> <dt>Fixed width</dt> <dd><ts-icon [icon]="icon1" [fixedWidth]="true"></ts-icon></dd> </div> <div> <dt>Border</dt> <dd><ts-icon [icon]="icon1" [border]="true"></ts-icon></dd> </div> <div> <dt>Pull</dt> <dd><ts-icon [icon]="icon1" [pull]="pull"></ts-icon></dd> </div> <div> <dt>Flip</dt> <dd><ts-icon [icon]="icon1" [flip]="flip"></ts-icon></dd> </div> <div> <dt>Pulse</dt> <dd><ts-icon [icon]="icon2" [pulse]="true"></ts-icon></dd> </div> <div> <dt>Spin</dt> <dd><ts-icon [icon]="icon3" [spin]="true"></ts-icon></dd> </div> </dl> `, props: { icon1: faBomb, icon2: faSpinner, icon3: faCircleNotch, size: select('Size', tsIconSizes, '2x'), transformString: text('Transform (string)', 'shrink-2 right-6 rotate-30'), transformObject: object('Transform (object)', { size: 40, x: 4, y: 6, rotate: 45, flipX: true, flipY: false, }), styles: object('Styles', { color: '#B20' }), pull: select('Pull', ['left', 'right'], 'right'), flip: select('Flip', ['horizontal', 'vertical', 'both'], 'vertical'), }, })

libs/ui/icon-button/src/lib/icon-button.stories.ts

basic
Default value : () => ({ component: TsIconButtonComponent, props: { actionName: select('Action name', tsButtonActionTypes, 'Button'), buttonType: select('Button type', tsButtonFunctionTypes, 'button'), icon: faAbacus, isDisabled: boolean('Disabled', false), clicked: action('Button clicked!'), }, })
themes
Default value : () => ({ template: ` <div> <h3>Primary</h3> <ts-icon-button theme="primary" [icon]="icon" tsVerticalSpacing></ts-icon-button> </div> <div> <h3>Accent</h3> <ts-icon-button theme="accent" [icon]="icon" tsVerticalSpacing></ts-icon-button> </div> <div> <h3>Warn</h3> <ts-icon-button theme="warn" [icon]="icon"></ts-icon-button> </div> `, props: { icon: faAbacus, }, })

libs/ui/input/src/lib/input.stories.ts

basic
Default value : () => ({ template: ` <div [style.width.px]="width"> <ts-input [(ngModel)]="myValue" [label]="label" [theme]="theme" (inputBlur)="onBlur($event)" (inputFocus)="onFocus($event)" ></ts-input> </div> `, props: { myValue: 'hello there', label: text('Label', 'My Input'), theme: select('Theme', ['primary', 'accent', 'warn'], 'primary'), width: number('Container width', 300), onBlur: action('Blur: '), onFocus: action('Focus: '), }, })
clearable
Default value : () => ({ template: ` <div [style.width.px]="width"> <ts-input [(ngModel)]="myValue" label="My clearable input" [isClearable]="true" (cleared)="cleared($event)" ></ts-input> </div> `, props: { myValue: 'Test content..', width: number('Container width', 300), cleared: action('Cleared: '), }, })
datepicker
Default value : () => ({ template: ` <ts-input label="My datepicker input" [datepicker]="true" [maxDate]="maxDate" [minDate]="minDate" [startingView]="startingView" [(ngModel)]="myValue" (selected)="selected($event)" ></ts-input> `, props: { maxDate: date('Maximum Date', MAX_DATE), minDate: date('Minimum Date', MIN_DATE), myValue: DEFAULT_DATE, openTo: date('Open calendar to', DEFAULT_DATE), startingView: select('Starting View', ['month', 'year'], 'month'), selected: action('Selected: '), }, })
DEFAULT_DATE
Default value : new Date(2020, 2, 12)
hideRequiredMarker
Default value : () => ({ template: ` <div [style.width.px]="width"> <ts-input [(ngModel)]="myValue" [isRequired]="true" [hideRequiredMarker]="hideRequiredMarker" [label]="label" [theme]="theme" ></ts-input> </div> `, props: { myValue: 'hello there', hideRequiredMarker: boolean('Hide required marker', true), label: text('Label', 'My input'), theme: select('Theme', ['primary', 'accent', 'warn'], 'primary'), width: number('Container width', 300), }, })
hint
Default value : () => ({ template: ` <div [style.width.px]="width"> <ts-input [(ngModel)]="myValue" [label]="label" [hint]="hint" ></ts-input> </div> `, props: { myValue: 'hello there', hint: text('Hint', 'My custom hint'), label: text('Label', 'My input'), width: number('Container width', 300), }, })
mask
Default value : () => ({ template: ` <div [style.width.px]="width"> <label> Input mask: <select id="mask" [(ngModel)]="activeMask" style="margin-bottom:1rem;"> <option value="none">None</option> <option value="currency">Currency</option> <option value="date">Date</option> <option value="number">Number</option> <option value="percentage">Percentage</option> <option value="phone">Phone</option> <option value="postal">Postal</option> </select> </label> <ts-input [(ngModel)]="myValue" label="My masked input" [maskAllowDecimal]="allowDecimal" [maskSanitizeValue]="sanitizeValue" [mask]="activeMask" ></ts-input> <pre>Model value: {{ myValue }}</pre> </div> `, props: { activeMask: 'phone', myValue: '8081234567', allowDecimal: boolean('Allow decimal', true), sanitizeValue: boolean('Sanitize value (update input value after changing)', true), width: number('Container width', 300), }, })
MAX_DATE
Default value : add(DEFAULT_DATE, { days: 7 })
MIN_DATE
Default value : sub(DEFAULT_DATE, { days: 7 })
prefixIcon
Default value : () => ({ template: ` <div [style.width.px]="width"> <ts-input [(ngModel)]="myValue" label="My input with a prefix" [prefixIcon]="prefixIcon" ></ts-input> </div> `, props: { prefixIcon: faAirFreshener, myValue: 'hello there', width: number('Container width', 300), }, })
textarea
Default value : () => ({ template: ` <div [style.width.px]="width"> <ts-input [isTextarea]="true" [textareaRows]="textareaRows" [(ngModel)]="myValue" label="My textarea" ></ts-input> </div> `, props: { myValue: 'hello there', width: number('Container width', 300), textareaRows: number('Textarea rows', 4), }, })

libs/ui/link/src/lib/link.stories.ts

basic
Default value : () => ({ template: `<ts-link>{{ content }}</ts-link>`, props: { content: text('Content', 'My link!'), }, })
external
Default value : () => ({ template: `<ts-link [isExternal]="true" [destination]="destination">{{ content }}</ts-link>`, props: { destination: text('Destination', 'http://google.com'), content: text('Content', 'My link!'), }, })
fragment
Default value : () => ({ template: `<ts-link fragment="myLocalId">{{ content }}</ts-link>`, props: { content: text('Content', 'My link!'), }, })

libs/ui/loading-overlay/src/lib/loading-overlay.stories.ts

basic
Default value : () => ({ component: LoadingOverlayWrapper, props: { isLoading: boolean('Loading', true), }, })

libs/ui/logo/src/lib/logo.stories.ts

basic
Default value : () => ({ component: TsLogoComponent, template: `<ts-logo></ts-logo>`, })
fullAccountHubLogo
Default value : () => ({ component: TsLogoComponent, props: { type: 'full-account-hub', }, })
fullSolidLogo
Default value : () => ({ component: TsLogoComponent, props: { type: 'full-solid', }, })
fullSolidLogoBlack
Default value : () => ({ component: TsLogoComponent, props: { type: 'full-solid', logoColor: 'black', }, })
marks
Default value : () => ({ component: TsLogoComponent, template: ` <style> ts-logo { display: block; } </style> <div fxLayout="row" fxLayoutGap="16px"> <div fxFlex> Gradient: <ts-logo type="mark-gradient"></ts-logo> </div> <div fxFlex> Solid: <ts-logo type="mark-solid"></ts-logo> </div> <div fxFlex> Solid & Gray: <ts-logo type="mark-solid" logoColor="gray"></ts-logo> </div> <div fxFlex> Solid & Black: <ts-logo type="mark-solid" logoColor="black"></ts-logo> </div> </div> `, })

libs/ui/menu/src/lib/menu.stories.ts

basic
Default value : () => ({ template: ` <ts-menu [defaultOpened]="true" [isDisabled]="isDisabled" [menuItemsTemplate]="myTemplate" >Select Item</ts-menu> <ng-template #myTemplate> <ts-button>Button One</ts-button> <ts-link>Link One</ts-link> </ng-template> `, props: { isDisabled: boolean('isDisabled', false), }, })
customPanelPosition
Default value : () => ({ template: ` <small>Close & reopen the menu after changing position via knobs.</small> <ts-menu [defaultOpened]="true" [menuItemsTemplate]="myTemplate" [menuPositionX]="menuPositionX" [menuPositionY]="menuPositionY" style="margin:200px;" >Select Item</ts-menu> <ng-template #myTemplate> <ts-button>Button One</ts-button> <ts-link>Link One</ts-link> </ng-template> `, props: { menuPositionX: select('menuPositionX', ['after', 'before'], 'after'), menuPositionY: select('menuPositionY', ['above', 'below'], 'above'), }, })
themes
Default value : () => ({ template: ` <div tsVerticalSpacing="large--1"> <h3>Default</h3> <ts-menu [menuItemsTemplate]="myTemplate" theme="default">Select Item</ts-menu> </div> <div tsVerticalSpacing="large--1"> <h3>Accent</h3> <ts-menu [menuItemsTemplate]="myTemplate" theme="accent">Select Item</ts-menu> </div> <div tsVerticalSpacing="large--1"> <h3>Warning</h3> <ts-menu [menuItemsTemplate]="myTemplate" theme="warning">Select Item</ts-menu> </div> <ng-template #myTemplate> <ts-button>Button One</ts-button> <ts-link>Link One</ts-link> </ng-template> `, })
utilityTrigger
Default value : () => ({ template: ` <ts-menu triggerType="utility" [menuItemsTemplate]="myTemplate" >Select Item</ts-menu> <ng-template #myTemplate> <ts-button>Button One</ts-button> <ts-link>Link One</ts-link> </ng-template> `, })

libs/ui/navigation/src/lib/navigation.stories.ts

basic
Default value : () => ({ component: NavigationWrapper, props: { currentUser: object( 'Current user', { id: 1, email: 'max@roadwarrior.com', firstname: 'Max', lastname: 'Rockatansky', fullName: 'Max Rockatansky', }, ), welcomeMessage: text('Welcome message', 'Hello, this message is 37 characters.'), userNameLength: number('User name maximum length', 20), welcomeMsgLength: number('Welcome message maximum length', 20), action: action('Action triggered'), }, })
NAV_ITEMS_MOCK
Type : TsNavigationItem[]
Default value : [ { name: '1 Components', destination: '/components', alwaysHidden: false, }, { name: '2 Nav', destination: '/components/navigation', alwaysHidden: false, }, { name: '3 Buttons', destination: ['/components/button'], alwaysHidden: false, }, { name: '4 Action', action: { type: 'Do:thing' }, alwaysHidden: false, }, { name: '5 Menus', destination: ['/components/menu'], alwaysHidden: false, }, { name: '7 External', destination: 'https://google.com', alwaysHidden: true, }, { name: '8 Hidden', action: { type: 'Do:another:thing' }, alwaysHidden: true, }, ]

libs/ui/popover/src/lib/popover.stories.ts

basic
Default value : () => ({ template: ` <div> <button tsPopoverTrigger="popper1" [position]="position" [popoverTrigger]="popoverTrigger" [popover]="popper1" style="margin: 200px 250px;" >{{ popoverTrigger === 'click' ? 'Click' : 'Hover' }} Me!</button> </div> <ts-popover #popper1> <h1>My Title</h1> <p>Other random content.</p> </ts-popover> `, props: { position: select('position', ['top', 'bottom', 'left', 'right'], 'top'), popoverTrigger: select('popoverTrigger', ['click', 'hover'], 'click'), }, })

libs/ui/scrollbars/src/lib/scrollbars.stories.ts

basic
Default value : () => ({ component: ScrollbarsWrapper, props: { isDisabled: boolean('Disable scrollbars', false), noWrap: boolean('Stop content from wrapping (creates x-axis scrollbar)', false), scrollDownEvent: action('Scroll down'), scrollUpEvent: action('Scroll up'), scrollLeftEvent: action('Scroll left'), scrollRightEvent: action('Scroll right'), scrollXEvent: action('Scroll X'), scrollYEvent: action('Scroll Y'), xReachEndEvent: action('X reach end'), xReachStartEvent: action('X reach start'), yReachEndEvent: action('Y reach end'), yReachStartEvent: action('Y reach start'), }, })

libs/ui/spacing/src/lib/spacing.stories.ts

basic
Default value : () => ({ component: TsVerticalSpacingDirective, template: ` <style> div { outline: 2px solid lightblue; padding: 1em; } </style> <div tsVerticalSpacing="small--2">tsVerticalSpacing="small--2"</div> <div tsVerticalSpacing="small--1">tsVerticalSpacing="small--1"</div> <div tsVerticalSpacing="small--0">tsVerticalSpacing="small--0"</div> <div tsVerticalSpacing>tsVerticalSpacing</div> <div tsVerticalSpacing="large--0">tsVerticalSpacing="large--0"</div> <div tsVerticalSpacing="large--1">tsVerticalSpacing="large--1"</div> <div tsVerticalSpacing="large--2">tsVerticalSpacing="large--2 </div> <div tsVerticalSpacing="large--3">tsVerticalSpacing="large--3 </div> <div tsVerticalSpacing="large--4">tsVerticalSpacing="large--4"</div> <div tsVerticalSpacing="large--5">tsVerticalSpacing="large--5 </div> <div tsVerticalSpacing="large--6">tsVerticalSpacing="large--6"</div> <div tsVerticalSpacing="none">tsVerticalSpacing="none"</div> <div>Standard content...</div> `, props: { spacing: select('Spacing', tsVerticalSpacingTypes, 'default--0'), }, })

libs/ui/tabs/src/lib/tabs.stories.ts

basic
Default value : () => ({ template: ` <ts-tab-collection [theme]="theme" (animationFinished)="animationFinished($event)" (focusChange)="focusChange($event)" (selectedIndexChange)="selectedIndexChange($event)" (selectedTabChange)="selectedTabChange($event)" > <ts-tab label="First">Content 1</ts-tab> <ts-tab label="Second">Content 2</ts-tab> <ts-tab label="Third">Content 3</ts-tab> </ts-tab-collection> `, props: { theme: select('Theme', ['primary', 'accent', 'warn'], 'primary'), animationFinished: action('Animation finished'), focusChange: action('Focus changed'), selectedIndexChange: action('Selected tab index changed'), selectedTabChange: action('Selected tab changed'), }, })
customLabels
Default value : () => ({ template: ` <ts-tab-collection> <ts-tab> <ng-template tsTabLabel> <ts-icon [icon]="homeIcon"></ts-icon> First </ng-template> Content 1 </ts-tab> <ts-tab> <ng-template tsTabLabel> <ts-icon [icon]="helpIcon"></ts-icon> Second </ng-template> Content 2 </ts-tab> </ts-tab-collection> `, props: { homeIcon: faHome, helpIcon: faQuestionCircle, }, })
disabledTabs
Default value : () => ({ template: ` <ts-tab-collection> <ts-tab label="First" [isDisabled]="disabled1 || disabledAll">Content 1</ts-tab> <ts-tab label="Second" [isDisabled]="disabled2 || disabledAll">Content 2</ts-tab> <ts-tab label="Third" [isDisabled]="disabled3 || disabledAll">Content 3</ts-tab> </ts-tab-collection> `, props: { disabled1: boolean('Disable tab 1', false), disabled2: boolean('Disable tab 2', true), disabled3: boolean('Disable tab 3', false), disabledAll: boolean('Disable all tabs', false), }, })
dynamicTabs
Default value : () => ({ component: TabsDynamicWrapper, })
headerPosition
Default value : () => ({ template: ` <h3>Above:</h3> <ts-tab-collection tsVerticalSpacing="large--2"> <ts-tab label="First">Content 1</ts-tab> <ts-tab label="Second">Content 2</ts-tab> </ts-tab-collection> <h3>Below:</h3> <ts-tab-collection headerPosition="below"> <ts-tab label="First">Content 1</ts-tab> <ts-tab label="Second">Content 2</ts-tab> </ts-tab-collection> `, })
lazyLoadedContent
Default value : () => ({ template: ` <ts-tab-collection> <ts-tab label="First"> <ng-template tsTabContent>Content 1</ng-template> </ts-tab> <ts-tab label="Second"> <ng-template tsTabContent>Content 2</ng-template> </ts-tab> </ts-tab-collection> `, })
tabAlignment
Default value : () => ({ template: ` <h3>Start</h3> <ts-tab-collection tabAlignment="start" tsVerticalSpacing="large--2"> <ts-tab label="First">Content 1</ts-tab> <ts-tab label="Second">Content 2</ts-tab> <ts-tab label="Third">Content 3</ts-tab> </ts-tab-collection> <h3>Center</h3> <ts-tab-collection tabAlignment="center" tsVerticalSpacing="large--2"> <ts-tab label="First">Content 1</ts-tab> <ts-tab label="Second">Content 2</ts-tab> <ts-tab label="Third">Content 3</ts-tab> </ts-tab-collection> <h3>End</h3> <ts-tab-collection tabAlignment="end" tsVerticalSpacing="large--2"> <ts-tab label="First">Content 1</ts-tab> <ts-tab label="Second">Content 2</ts-tab> <ts-tab label="Third">Content 3</ts-tab> </ts-tab-collection> <h3>Stretch</h3> <ts-tab-collection tabAlignment="stretch"> <ts-tab label="First">Content 1</ts-tab> <ts-tab label="Second">Content 2</ts-tab> <ts-tab label="Third">Content 3</ts-tab> </ts-tab-collection> `, })

libs/ui/toggle/src/lib/toggle.stories.ts

basic
Default value : () => ({ component: TsToggleComponent, template: `<ts-toggle [isDisabled]="isDisabled" (selectionChange)="selectionChange($event)">My toggle!</ts-toggle>`, props: { isDisabled: boolean('Disabled', false), selectionChange: action('Selection changed'), }, })
labelPosition
Default value : () => ({ component: TsToggleComponent, template: `<ts-toggle [labelPosition]="labelPosition">My toggle!</ts-toggle>`, props: { labelPosition: select('Label position', ['before', 'after'], 'before'), }, })
themes
Default value : () => ({ component: TsToggleComponent, template: ` <style> ts-toggle:not(:last-of-type) { margin-right: 1rem; } </style> <div tsVerticalSpacing="large--1"> <ts-toggle theme="primary" [isChecked]="true">Primary Toggle</ts-toggle> <ts-toggle theme="primary" [isChecked]="true" [isDisabled]="true">Primary Disabled</ts-toggle> </div> <div tsVerticalSpacing="large--1"> <ts-toggle theme="accent" [isChecked]="true">Accent Toggle</ts-toggle> <ts-toggle theme="accent" [isChecked]="true" [isDisabled]="true">Accent Disabled</ts-toggle> </div> <div> <ts-toggle theme="warn" [isChecked]="true">Warn Toggle</ts-toggle> <ts-toggle theme="warn" [isChecked]="true" [isDisabled]="true">Warn Disabled</ts-toggle> </div> `, })

libs/ui/tooltip/src/lib/tooltip.stories.ts

basic
Default value : () => ({ component: TooltipWrapper, props: { showContentBorder: true, tooltipPosition: select('Tooltip position', allowedTooltipTypes, 'below'), tooltipValue: text('Tooltip value', 'My tooltip content!'), }, })
longContent
Default value : () => ({ component: TooltipWrapper, props: { tooltipPosition: 'below', tooltipValue: ` Quas consequuntur deserunt. Dolorum consequuntur eius dolore velit aspernatur. Soluta dolorum fugit explicabo itaque. Eaque ad cumque aliquam pariatur harum. Sit iste nemo maxime. Aspernatur dicta similique cupiditate dolor. Ipsum consectetur quasi. Deserunt iure quisquam est. Sint unde corporis quae veniam error ex. `, showContentBorder: true, }, })
manualControl
Default value : () => ({ component: TooltipWrapper, props: { tooltipPosition: 'below', showButton: true, showContentBorder: true, tooltipValue: text('Tooltip value', 'My tooltip content!'), }, })
underline
Default value : () => ({ component: TooltipWrapper, props: { tooltipPosition: 'below', hasUnderline: true, triggerContent: 'This trigger has an underline!', tooltipValue: text('Tooltip value', 'My tooltip content!'), }, })

libs/ui/chip/src/lib/stories/chip.badge.stories.ts

basic
Default value : () => ({ template: ` <style> ts-chip:not(:last-of-type) { margin-right: 2rem; } </style> <ts-chip tsChipBadge>Primary</ts-chip> <ts-chip tsChipBadge theme="accent">Accent</ts-chip> <ts-chip tsChipBadge theme="warn">Warn</ts-chip> `, })

libs/ui/chip/src/lib/stories/chip.stories.ts

basic
Default value : () => ({ template: ` <ts-chip [isRemovable]="isRemovable" [isDisabled]="isDisabled" >My chip</ts-chip> `, props: { isRemovable: boolean('Removable', true), isDisabled: boolean('Disabled', false), }, })
chipCollection
Default value : () => ({ component: ChipWrapper, props: { isRemovable: boolean('Removable', true), isDisabled: boolean('Disabled', false), orientation: select('Orientation', ['horizontal', 'vertical'], 'horizontal'), options: ['banana', 'apple', 'orange', 'pear'], removed: action('Chip removed'), collectionChange: action('Collection changed'), tabUpdateFocus: action('Tab focus updated'), }, })

libs/ui/table/src/lib/stories/table.stories.ts

basic
Default value : () => ({ component: TableWrapper, props: { columnsSource: COLUMNS_SOURCE.slice(), firstColumnNoWrap: true, columnsChange: action('Columns changed'), }, })
COLUMNS_SOURCE
Type : CustomColumn[]
Default value : [ { display: 'Title', name: 'title', width: 300, control: new FormControl(true), }, { display: 'Comments', name: 'comments', width: 140, control: new FormControl(false), }, { display: 'Number', name: 'number', width: 160, control: new FormControl(true), }, { display: 'Updated', name: 'updated', width: 160, control: new FormControl(true), }, { display: 'State', name: 'state', width: 140, control: new FormControl(false), }, { display: 'Labels', name: 'labels', width: 260, control: new FormControl(true), }, { display: 'Assignee', name: 'assignee', width: 200, control: new FormControl(false), }, { display: 'ID', name: 'id', width: 100, control: new FormControl(true), }, { display: 'Created', name: 'created', width: 100, control: new FormControl(false), }, { display: 'View', name: 'html_url', width: 100, control: new FormControl(true), }, ]
density
Default value : () => ({ component: TableWrapper, props: { columnsSource: COLUMNS_SOURCE.slice(), density: select('Density', ['comfy', 'compact'], 'compact'), firstColumnNoWrap: false, columnsChange: action('Columns changed'), }, })
expandableRows
Default value : () => ({ component: TableWrapper, props: { columnsSource: COLUMNS_SOURCE.slice(), isExpandable: true, }, })
noWrapFalse
Default value : () => ({ component: TableWrapper, props: { columnsSource: COLUMNS_SOURCE.slice(0, 5).map(c => { c?.control?.setValue(true); return c; }), firstColumnNoWrap: false, constrainContainer: true, }, })
stickyColumnsAndRows
Default value : () => ({ component: TableWrapper, props: { columnsSource: COLUMNS_SOURCE.slice().map(c => { c?.control?.setValue(true); return c; }), headerSticky: boolean('Sticky header', true), footerSticky: boolean('Sticky footer', true), firstSticky: boolean('Sticky first column', true), lastSticky: boolean('Sticky last column', true), constrainContainer: true, }, })

libs/ui/radio-group/src/lib/radio-group.stories.ts

basicWithSubLabel
Default value : () => ({ component: RadioWrapper, props: { isDisabled: boolean('isDisabled', false), selectionChange: action('DEMO: Radio change: '), }, })
DEMO_ITEMS
Type : TsRadioOption[]
Default value : [ { foo: 'foo_value', bar: 'Foo Display', bing: 'Some helper text for my item', }, { foo: 'bar_value', bar: 'Bar Display', bing: 'Some helper text for my item', disabled: false, }, { foo: 'baz_value', bar: 'Baz Display', bing: 'Some helper text for my item', }, ]
themes
Default value : () => ({ template: ` <div fxLayout="row" fxLayoutGap="4em"> <div> Primary: <ts-radio-group [options]="['one', 'two', 'three']" [formControl]="formControl" ></ts-radio-group> </div> <div> Accent: <ts-radio-group theme="accent" [options]="['one', 'two', 'three']" [formControl]="formControl" ></ts-radio-group> </div> <div> Warn: <ts-radio-group theme="warn" [options]="['one', 'two', 'three']" [formControl]="formControl" ></ts-radio-group> </div> </div> `, props: { formControl: new FormControl('one'), }, })
visual
Default value : () => ({ template: ` Visual: <ts-radio-group [isVisual]="true" [options]="options" [formControl]="formControl" ></ts-radio-group> Visual (small): <ts-radio-group [isVisual]="true" [small]="true" [options]="options" [formControl]="formControl" ></ts-radio-group> `, props: { options: array('Options', ['one', 'two', 'three']), formControl: new FormControl('one'), }, })

libs/ui/file-upload/src/lib/selected-file/selected-file.ts

BYTES_PER_KB
Type : number
Default value : 1024

The number of bytes per kilobyte (for calculations)

typesWithoutDimensionValidation
Type : []
Default value : ['text/csv', 'video/mp4']

libs/ui/table/src/lib/cell/cell.ts

cellNextUniqueId
Type : number
Default value : 0
headerNextUniqueId
Type : number
Default value : 0
TS_TABLE_MIN_COLUMN_WIDTH
Type : number
Default value : 70

The minimum width for columns

libs/fe-jwt/src/lib/jwt-decode/atob.ts

chars
Type : string
Default value : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='

The code was extracted from: https://github.com/davidchambers/Base64.js

libs/fe-jwt/src/lib/jwt-token-managment/selectors.ts

claimsFor
Default value : <CM, ServiceName extends Extract<keyof CM, string>>(serviceName: ServiceName) => createSelector( tokenFor<CM, ServiceName>(serviceName), (token): CM[ServiceName] | null => { if (token) { try { return jwtDecode<CM[ServiceName]>(token); } catch (e) { if (e.name === 'InvalidTokenError') { return null; } throw e; } } else { return null; } }, )
claimValue
Default value : <CM, ServiceName extends Extract<keyof CM, string>, ClaimName extends keyof CM[ServiceName]>( serviceName: ServiceName, claimName: ClaimName, ) => createSelector( claimsFor<CM, ServiceName>(serviceName), (claims): CM[ServiceName][ClaimName] | null => (claims ? claims[claimName] : null), )
getDefaultToken
Default value : () => createSelector( getJwtTokenRoot(), jwtTokenState => (jwtTokenState ? jwtTokenState.jwtTokens.defaultToken : undefined), )
getJwtTokenRoot
Default value : <CM>() => createFeatureSelector<State<CM> | undefined>(JWT_TOKEN_MANAGEMENT_STATE_TOKEN)
getTokens
Default value : <CM>() => createSelector( getJwtTokenRoot<CM>(), (jwtTokenState): Tokens<CM> => (jwtTokenState ? jwtTokenState.jwtTokens.tokens : {}), )

Return all current tokens

tokenFor
Default value : <CM, ServiceName extends Extract<keyof CM, string>>(serviceName: ServiceName) => createSelector( getDefaultToken(), tokenForWithoutDefault<CM, ServiceName>(serviceName), (defaultToken, serviceToken): string | undefined => serviceToken || defaultToken, )
tokenForWithoutDefault
Default value : <CM, ServiceName extends Extract<keyof CM, string>>(serviceName: ServiceName) => createSelector( getTokens<CM>(), (userState): string | undefined => userState[serviceName], )

libs/fe-jwt/src/lib/jwt-token-managment/effects.ts

CLEANUP_DELAY
Type : number
Default value : 100
DEFAULT_MINUTES_BEFORE_EXPIRATION_TO_NOTIFY
Type : number
Default value : 5
DEFAULT_SECONDS_BEFORE_EXPIRATION_TO_NOTIFY
Default value : DEFAULT_MINUTES_BEFORE_EXPIRATION_TO_NOTIFY * SECONDS_IN_MINUTE
MS_IN_SECONDS
Type : number
Default value : 1000
SECONDS_BEFORE_EXPIRATION_TO_NOTIFY
Default value : new InjectionToken<number>('wait time')
SECONDS_IN_MINUTE
Type : number
Default value : 60
TOKENS_EXPIRED_DELAY
Type : number
Default value : 10

libs/fe-utilities/src/lib/coercion/array.ts

coerceArray
Default value : <T>(value: T | T[]): T[] => (Array.isArray(value) ? value : [value])

Wraps the provided value in an array, unless the provided value is an array.

libs/fe-utilities/src/lib/coercion/boolean-property.ts

coerceBooleanProperty
Default value : (value: any): boolean => value != null && `${value}` !== 'false'

Coerces a data-bound value (typically a string) to a boolean.

libs/ui/table/src/lib/table/table.component.ts

COLUMN_DEBOUNCE_DELAY
Type : number
Default value : 100

The default debounce delay for column sizing update calls

nextUniqueId
Type : number
Default value : 0
VIEWPORT_DEBOUNCE
Type : number
Default value : 500

libs/fe-utilities/src/lib/regex/contains-lower.regex.ts

containsLowercaseRegex
Default value : /(.*[a-z].*)/

Define a regex to validate a string contains at least one lowercase letter

createContainsLowercaseRegex
Default value : (minimum: number): RegExp => new RegExp(`(.*[a-z].*){${minimum},}`)

Create a regex that requires a minimum amount of lowercase characters

libs/fe-utilities/src/lib/regex/contains-numbers.regex.ts

containsNumbersRegex
Default value : /(.*([0-9]+\.?[0-9]*).*)/

Define a regex to validate a string contains at least one number

createContainsNumbersRegex
Default value : (minimum: number): RegExp => new RegExp(`(.*([0-9]+\.?[0-9]*).*){${minimum},}`)

Create a regex that requires a minimum amount of numbers

libs/fe-utilities/src/lib/regex/special-characters.regex.ts

containsSpecialCharacterRegex
Default value : /.*(?:[!@#$%^&*_=+()-].*)/

Define a regex to validate a string contains at least one special character

Allowed special characters: !, @, #, $, %, ^, &, *, (, ), -, _

createContainsSpecialCharacterRegex
Default value : (minimum: number): RegExp => new RegExp(`.*(?:[!@#$%^&*_=+()-].*){${minimum},}`)

Create a regex that requires a minimum amount of numbers

libs/fe-utilities/src/lib/regex/contains-upper.regex.ts

containsUppercaseRegex
Default value : /(.*[A-Z].*)/

Define a regex to validate a string contains at least one uppercase letter

createContainsUppercaseRegex
Default value : (minUppercaseCount: number): RegExp => new RegExp(`(.*[A-Z].*){${minUppercaseCount},}`)

Create a regex that requires a minimum amount of uppercase characters

libs/ui/validation-messages/src/lib/service/validation-messages.service.ts

creditCardMessage
Default value : `Invalid credit card number.`

Define the error message for an invalid credit card

emailMessage
Default value : `Invalid email address.`

Define the error message for an invalid email

passwordMessage
Default value : `Password must be between 6 and 100 characters, and contain a number.`

Define the error message for an invalid password

libs/fe-utilities/src/lib/regex/credit-card.regex.ts

creditCardRegex
Default value : /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/

Define a regex to validate a credit card number

Visa, MasterCard, American Express, Diners Club, Discover, JCB

libs/ui/validators/src/lib/validators/creditCard/creditCard.ts

creditCardValidator
Default value : (): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } const invalidResponse: ValidationErrors = { creditCard: { valid: false, actual: control.value, }, }; return creditCardRegex.test(control.value) ? null : invalidResponse; }

Return a validator function to verify that a credit card number is valid

libs/ui/pipes/src/lib/stories/pipes.dates.stories.ts

customDate
Default value : new Date()
customDateOld
Default value : sub(customDate, { days: 3 })
datePipe
Default value : () => ({ component: PipesDateWrapper, props: { value: myDateKnob('Value', customDate), }, })
DL_STYLES
Default value : ` dd {font-weight: bold;} dd:first-of-type {margin-bottom: 2rem;} dt:after {content: ':';} `
timeAgo
Default value : () => ({ component: PipesTimeAgoWrapper, props: { value: myDateKnob('Value', customDateOld), dateNow: customDate, }, })

libs/fe-utilities/src/lib/regex/date.regex.ts

dateRegex
Default value : /^(0?[1-9]|1[012])[- \/.](0?[1-9]|[12][0-9]|3[01])[- \/.](19|20)?\d\d$/

Define a regex to verify a date

Matches 3/7/18, 3-7-18 and 03/07/2018

libs/fe-utilities/src/lib/general/delay-calculator.ts

DEFAULT_BACK_OFF_TIME
Type : number
Default value : 2
DEFAULT_BASE_WAIT_TIME
Type : number
Default value : 100
DEFAULT_JITTER_FACTOR
Type : number
Default value : .3
exponentialBackoffDelayCalculator
Default value : ({ jitter = true, jitterFactor = DEFAULT_JITTER_FACTOR, backOffFactor = DEFAULT_BACK_OFF_TIME, baseWaitTime = DEFAULT_BASE_WAIT_TIME, }: Partial<DelayCalculator>) => function(attempt: number) { let sleepDuration = baseWaitTime * Math.pow(backOffFactor, attempt); if (jitter) { sleepDuration *= (1 - (jitterFactor * Math.random())); } return sleepDuration; }

Calculate retry timing

jitter: "Slight irregular movement, variation, or unsteadiness, especially in an electrical signal or electronic device"

libs/ui/button/src/lib/button/button.component.ts

DEFAULT_COLLAPSE_DELAY_MS
Type : number
Default value : 4000
nextUniqueId
Type : number
Default value : 0
tsButtonActionTypes
Type : []
Default value : [ 'Button', 'Submit', 'Menu', 'Reset', ]
tsButtonFunctionTypes
Type : []
Default value : [ 'button', 'search', 'submit', ]
tsButtonThemes
Type : ReadonlyArray<TsButtonThemeTypes>
Default value : [ 'default', 'secondary', 'warning', ]

The list of supported theme names

libs/ui/csv-entry/src/lib/csv-entry/csv-entry.component.ts

DEFAULT_COLUMN_COUNT
Type : number
Default value : 2
DEFAULT_MAX_ROWS
Type : number
Default value : 2000
DEFAULT_ROW_COUNT
Type : number
Default value : 4
DEFAULT_VALIDATION_MESSAGES_MAX
Type : number
Default value : 6
nextUniqueId
Type : number
Default value : 0

Unique ID for each instance

libs/ui/select/src/lib/select/select.component.ts

DEFAULT_COMPARE_WITH
Type : TsSelectOptionCompareWith
Default value : (o1: unknown, o2: unknown) => o1 === o2

The default compare with function used when the consumer does not define one

DEFAULT_DELIMITER
Type : string
Default value : ','
DEFAULT_VIEWPORT_MARGIN
Type : number
Default value : 100
nextUniqueId
Type : number
Default value : 0
SELECT_ITEM_HEIGHT
Type : number
Default value : 3
SELECT_ITEM_HEIGHT_EM
Default value : SELECT_ITEM_HEIGHT
SELECT_MULTIPLE_PANEL_PADDING_X
Type : number
Default value : 0

Distance between the panel edge and the option text in multi-selection mode.

Calculated as: (SELECT_PANEL_PADDING_X * 1.5) + 20 = 44 The padding is multiplied by 1.5 because the checkbox's margin is half the padding. The checkbox width is 16px.

SELECT_PANEL_INDENT_PADDING_X
Default value : SELECT_PANEL_PADDING_X * 2
SELECT_PANEL_MAX_HEIGHT
Type : number
Default value : 256

The following style constants are necessary to save here in order to properly calculate the alignment of the selected option over the trigger element.

SELECT_PANEL_PADDING_X
Type : number
Default value : 16
SELECT_PANEL_VIEWPORT_PADDING
Type : number
Default value : 8

The select panel will only "fit" inside the viewport if it is positioned at this value or more away from the viewport boundary

TS_SELECT_PANEL_VIEWPORT_PADDING
Type : number
Default value : 8

The select panel will only "fit" inside the viewport if it is positioned at this value or more away from the viewport boundary

libs/ui/autocomplete/src/lib/autocomplete/autocomplete.component.ts

DEFAULT_DEBOUNCE_DELAY
Type : number
Default value : 200
DEFAULT_MINIMUM_CHARACTER_COUNT
Type : number
Default value : 2
nextUniqueId
Type : number
Default value : 0

libs/ui/selection-list/src/lib/selection-list/selection-list.component.ts

DEFAULT_DEBOUNCE_DELAY
Type : number
Default value : 200
DEFAULT_MINIMUM_CHARACTER_COUNT
Type : number
Default value : 2
nextUniqueId
Type : number
Default value : 0

libs/fe-jwt/src/lib/jwt-token-managment/utilities/retry-with-escalation.ts

DEFAULT_ESCALATION_WAIT_TIME
Type : number
Default value : 30000
ESCALATION_WAIT_TIME
Default value : new InjectionToken<number>('wait time')
FORBIDDEN_ERROR
Type : number
Default value : 403
SCHEDULER
Default value : new InjectionToken<Scheduler>('scheduler')

libs/ui/paginator/src/lib/paginator/paginator.component.ts

DEFAULT_MAX_PREFERRED_RECORDS
Type : number
Default value : 100

Default max records before message is shown

DEFAULT_RECORDS_PER_PAGE
Type : number
Default value : 10

Define the default count of records per page

DEFAULT_RECORDS_PER_PAGE_OPTIONS
Type : []
Default value : [10, 20, 50]

Define the default options for the records per page select menu

libs/fe-utilities/src/lib/general/http-retryer.ts

DEFAULT_RETRY_COUNT
Type : number
Default value : 2
ERROR_CODE_500_MAX
Type : number
Default value : 599
ERROR_CODE_500_MIN
Type : number
Default value : 500
ERROR_CODE_TOO_MANY_REQUESTS
Type : number
Default value : 429
httpRetryer
Default value : <T>({ retries = DEFAULT_RETRY_COUNT, delayCalculator = exponentialBackoffDelayCalculator({}), scheduler = async, }: Partial<HttpRetryWithBackoff>): MonoTypeOperatorFunction<T> => retryWhen((errors: Observable<HttpErrorResponse | Error>) => zip( errors, range(1, retries + 1), ).pipe( mergeMap(([err, retry]) => { if (retry > retries || !isConsideredError(err)) { return throwError(err); } let waitTime: number | Date = delayCalculator(retry); if (err.status === ERROR_CODE_TOO_MANY_REQUESTS) { const headerWaitTime = extractRetryAfterTime(err); waitTime = headerWaitTime || waitTime; } return timer(waitTime, scheduler).pipe(take(1)); }), ))

libs/fe-utilities/src/lib/general/retry-with-backoff.ts

DEFAULT_RETRY_COUNT
Type : number
Default value : 3
retryWithBackoff
Default value : <T>({ retries = DEFAULT_RETRY_COUNT, delayCalculator = exponentialBackoffDelayCalculator({}), }: Partial<RetryWithBackoff>): MonoTypeOperatorFunction<T> => retryWhen(errors => zip( errors, range(1, retries), ) .pipe( mergeMap(([err, retry]) => { if (retry >= retries) { return throwError(err); } return timer(delayCalculator(retry)); }), ))

Return the difference in time in words

libs/ui/scrollbars/src/lib/scrollbars/scrollbars.component.ts

DEFAULT_SCROLL_SPEED
Type : number
Default value : 400
nextUniqueId
Type : number
Default value : 0

Unique ID for each instance

libs/ui/navigation/src/lib/nav/navigation.component.ts

DEFAULT_USER_NAME_MAX_LENGTH
Type : number
Default value : 20
DEFAULT_WELCOME_MESSAGE_MAX_LENGTH
Type : number
Default value : 20
isLinkItem
Default value : (x: TsNavigationLinkItem | TsNavigationActionItem): x is TsNavigationLinkItem => !!(x as TsNavigationLinkItem).destination

Determine if a navigation item is a TsNavigationLinkItem

libs/fe-testing/src/lib/utilities/events/dispatch-fake-event.ts

dispatchFakeEvent
Default value : (node: Node | Window, type: string, canBubble?: boolean): Event => dispatchEvent(node, createFakeEvent(type, canBubble))

Shorthand to dispatch a fake event on a specified node.

libs/fe-testing/src/lib/utilities/events/dispatch-keyboard-event.ts

dispatchKeyboardEvent
Default value : (node: Node, type: string, key: KeyCode, target?: Element): KeyboardEvent => dispatchEvent(node, createKeyboardEvent(type, key, target)) as KeyboardEvent

Shorthand to dispatch a keyboard event with a specified key code

libs/fe-testing/src/lib/utilities/events/dispatch-mouse-event.ts

dispatchMouseEvent
Default value : ( node: Node, type: string, x = 0, y = 0, event = createMouseEvent(type, x, y), ): MouseEvent => dispatchEvent(node, event) as MouseEvent

Shorthand to dispatch a mouse event on the specified coordinates.

libs/fe-testing/src/lib/utilities/events/dispatch-touch-event.ts

dispatchTouchEvent
Default value : (node: Node, type: string, x = 0, y = 0): Event => dispatchEvent(node, createTouchEvent(type, x, y))

Shorthand to dispatch a touch event on the specified coordinates.

libs/ui/pipes/src/lib/stories/pipes.strings.stories.ts

DL_STYLES
Default value : ` dd {font-weight: bold;} dd:first-of-type {margin-bottom: 2rem;} dt:after {content: ':';} `
MODULE_IMPORTS
Type : []
Default value : [TsPipesModule]
sentenceCase
Default value : () => ({ moduleMetadata: { imports: [...MODULE_IMPORTS] }, component: PipesSentenceWrapper, props: { value: text('Value', 'THE QUICK BROWN FOX'), }, })
titleCase
Default value : () => ({ moduleMetadata: { imports: [...MODULE_IMPORTS] }, component: PipesTitleWrapper, props: { value1: text('Value 1', 'Careful man, there’s a beverage here!'), value2: text('Value 2', 'THAT RUG REALLY TIED THE ROOM TOGETHER.'), }, })
truncate
Default value : () => ({ moduleMetadata: { imports: [...MODULE_IMPORTS] }, component: PipesTruncateWrapper, props: { value: text('Value', 'Careful man, there’s a beverage here!'), count: number('Character count', 23), position: select('Position', allowedTruncationTypes, 'end'), }, })

libs/ui/validators/src/lib/stories/validation-string.stories.ts

domain
Default value : () => ({ component: StringWrapper, props: { demo: 'domain', }, })
lowercase
Default value : () => ({ component: StringWrapper, props: { demo: 'lowercase', }, })
uppercase
Default value : () => ({ component: StringWrapper, props: { demo: 'uppercase', }, })
url
Default value : () => ({ component: StringWrapper, props: { demo: 'url', }, })

libs/ui/validators/src/lib/validators/domain/domain.ts

domainValidator
Default value : (): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } const invalidResponse: ValidationErrors = { domain: { valid: false, actual: control.value, }, }; return urlOptionalProtocolRegex.test(control.value) ? null : invalidResponse; }

Return a validator function to verify that a domain is valid

libs/fe-utilities/src/lib/regex/email.regex.ts

emailRegex
Default value : /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

Define a regex to validate an email address

libs/ui/validators/src/lib/validators/email/email.ts

emailValidator
Default value : (): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } const invalidResponse: ValidationErrors = { email: { valid: false, actual: control.value, }, }; return emailRegex.test(control.value) ? null : invalidResponse; }

Return a validator function to verify that an email address is valid

libs/ui/validators/src/lib/stories/validation-universal.stories.ts

equalToControl
Default value : () => ({ component: UniversalWrapper, props: { demo: 'equalToControl', }, })
inCollection
Default value : () => ({ component: UniversalWrapper, props: { demo: 'inCollection', }, })
password
Default value : () => ({ component: UniversalWrapper, props: { demo: 'password', }, })

libs/ui/validators/src/lib/validators/equalToControl/equalToControl.ts

equalToControlValidator
Default value : (compareControl: AbstractControl): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value || !compareControl.value) { return null; } const invalidResponse: ValidationErrors = { equalToControl: { valid: false, compareValue: compareControl.value, actual: control.value, }, }; return (control.value === compareControl.value) ? null : invalidResponse; }

Return a validator function to verify the selected date is after a minimum date

libs/ui/tabs/src/lib/header/tab-header.component.ts

EXAGGERATED_OVERSCROLL
Type : number
Default value : 60

The distance in pixels that will be overshot when scrolling a tab label into view. This helps provide a small affordance to the label next to it.

HEADER_SCROLL_DELAY
Type : number
Default value : 650

Amount of milliseconds to wait before starting to scroll the header automatically.

NOTE: This is set a little conservatively in order to handle fake events dispatched on touch devices.

HEADER_SCROLL_INTERVAL
Type : number
Default value : 100

Interval in milliseconds at which to scroll the header while the user is holding their pointer.

passiveEventListenerOptions
Default value : normalizePassiveListenerOptions({ passive: true }) as EventListenerOptions

Config used to bind passive event listeners

libs/ui/chip/src/lib/ui-chip.module.ts

EXPORTED_DECLARATIONS
Type : []
Default value : [ TsChipBadgeDirective, TsChipComponent, TsChipCollectionComponent, ]

libs/ui/form-field/src/lib/form-field/form-field.component.ts

FLOATING_LABEL_SCALE
Type : number
Default value : .75
nextUniqueId
Type : number
Default value : 0

Unique ID for each instance

OUTLINE_GAP_PADDING
Type : number
Default value : 5

libs/ui/logo/src/lib/logo-types/full-account-hub.ts

FULL_ACCOUNT_HUB_LOGO
Default value : ` <svg xmlns="http://www.w3.org/2000/svg" width="440" height="200" viewBox="0 0 440 200"> <title>Terminus Account Hub</title> <defs> <radialGradient id="logo-account-hub" cx="45.011%" cy="44.731%" r="80.422%" fx="45.011%" fy="44.731%" gradientTransform="matrix(.7688 .5888 -.6395 .70785 .39 -.134)"> <stop offset="0%" stop-color="#0098CE"/> <stop offset="29%" stop-color="#0072C6"/> <stop offset="58%" stop-color="#0065AC"/> <stop offset="100%" stop-color="#00538A"/> </radialGradient> </defs> <g fill="none" fill-rule="evenodd"> <path fill="#44525E" d="M234.238282,149.365234 L226.527345,149.365234 L224.914064,154 L221.31836,154 L228.837892,134.09375 L231.941407,134.09375 L239.47461,154 L235.865235,154 L234.238282,149.365234 Z M227.498048,146.576172 L233.267579,146.576172 L230.382814,138.318359 L227.498048,146.576172 Z M247.726329,151.621094 C248.55576,151.621094 249.243905,151.37956 249.790782,150.896484 C250.33766,150.413409 250.629324,149.81641 250.665782,149.105469 L253.796642,149.105469 C253.760183,150.026046 253.473077,150.885087 252.935314,151.682617 C252.39755,152.480147 251.668391,153.111326 250.747814,153.576172 C249.827236,154.041018 248.833756,154.273438 247.767345,154.273438 C245.698324,154.273438 244.057715,153.603522 242.84547,152.263672 C241.633224,150.923821 241.02711,149.07358 241.02711,146.712891 L241.02711,146.371094 C241.02711,144.11978 241.628667,142.31739 242.831798,140.963867 C244.034929,139.610345 245.675538,138.933594 247.753673,138.933594 C249.512796,138.933594 250.94605,139.446284 252.053478,140.47168 C253.160905,141.497075 253.741954,142.843742 253.796642,144.511719 L250.665782,144.511719 C250.629324,143.664058 250.339939,142.9668 249.797618,142.419922 C249.255298,141.873044 248.564875,141.599609 247.726329,141.599609 C246.650803,141.599609 245.821384,141.989254 245.238048,142.768555 C244.654712,143.547855 244.358491,144.730461 244.349376,146.316406 L244.349376,146.849609 C244.349376,148.453784 244.638761,149.650061 245.21754,150.438477 C245.796319,151.226892 246.632574,151.621094 247.726329,151.621094 Z M262.622579,151.621094 C263.45201,151.621094 264.140155,151.37956 264.687032,150.896484 C265.23391,150.413409 265.525574,149.81641 265.562032,149.105469 L268.692892,149.105469 C268.656433,150.026046 268.369327,150.885087 267.831564,151.682617 C267.2938,152.480147 266.564641,153.111326 265.644064,153.576172 C264.723486,154.041018 263.730006,154.273438 262.663595,154.273438 C260.594574,154.273438 258.953965,153.603522 257.74172,152.263672 C256.529474,150.923821 255.92336,149.07358 255.92336,146.712891 L255.92336,146.371094 C255.92336,144.11978 256.524917,142.31739 257.728048,140.963867 C258.931179,139.610345 260.571788,138.933594 262.649923,138.933594 C264.409046,138.933594 265.8423,139.446284 266.949728,140.47168 C268.057155,141.497075 268.638204,142.843742 268.692892,144.511719 L265.562032,144.511719 C265.525574,143.664058 265.236189,142.9668 264.693868,142.419922 C264.151548,141.873044 263.461125,141.599609 262.622579,141.599609 C261.547053,141.599609 260.717634,141.989254 260.134298,142.768555 C259.550962,143.547855 259.254741,144.730461 259.245626,146.316406 L259.245626,146.849609 C259.245626,148.453784 259.535011,149.650061 260.11379,150.438477 C260.692569,151.226892 261.528824,151.621094 262.622579,151.621094 Z M270.81961,146.466797 C270.81961,145.017571 271.106717,143.71192 271.680939,142.549805 C272.25516,141.38769 273.061793,140.494469 274.10086,139.870117 C275.139928,139.245765 276.333927,138.933594 277.682892,138.933594 C279.678995,138.933594 281.299096,139.576165 282.543243,140.861328 C283.78739,142.146491 284.459584,143.850901 284.559845,145.974609 L284.573517,146.753906 C284.573517,148.212247 284.293246,149.515619 283.732696,150.664062 C283.172147,151.812506 282.370071,152.701169 281.326446,153.330078 C280.282821,153.958988 279.07743,154.273438 277.710235,154.273438 C275.622985,154.273438 273.952755,153.578457 272.699493,152.188477 C271.446232,150.798496 270.81961,148.945975 270.81961,146.630859 L270.81961,146.466797 Z M274.141876,146.753906 C274.141876,148.276049 274.456326,149.467769 275.085235,150.329102 C275.714145,151.190434 276.589136,151.621094 277.710235,151.621094 C278.831335,151.621094 279.704047,151.183598 280.328399,150.308594 C280.952752,149.433589 281.264923,148.153003 281.264923,146.466797 C281.264923,144.971998 280.943637,143.787114 280.301056,142.912109 C279.658474,142.037105 278.785762,141.599609 277.682892,141.599609 C276.598251,141.599609 275.736931,142.030269 275.098907,142.891602 C274.460883,143.752934 274.141876,145.040356 274.141876,146.753906 Z M296.585001,152.550781 C295.609736,153.699224 294.224333,154.273438 292.428751,154.273438 C290.824576,154.273438 289.61007,153.804041 288.785196,152.865234 C287.960322,151.926428 287.547892,150.568368 287.547892,148.791016 L287.547892,139.207031 L290.870157,139.207031 L290.870157,148.75 C290.870157,150.627614 291.649446,151.566406 293.208048,151.566406 C294.821337,151.566406 295.910519,150.987636 296.475626,149.830078 L296.475626,139.207031 L299.797892,139.207031 L299.797892,154 L296.667032,154 L296.585001,152.550781 Z M306.504689,139.207031 L306.600392,140.916016 C307.694147,139.594394 309.12968,138.933594 310.907032,138.933594 C313.987777,138.933594 315.55547,140.697248 315.610157,144.224609 L315.610157,154 L312.287892,154 L312.287892,144.416016 C312.287892,143.477209 312.085094,142.782229 311.679493,142.331055 C311.273892,141.879881 310.610813,141.654297 309.690235,141.654297 C308.350385,141.654297 307.352348,142.260411 306.696095,143.472656 L306.696095,154 L303.373829,154 L303.373829,139.207031 L306.504689,139.207031 Z M323.397032,135.611328 L323.397032,139.207031 L326.00836,139.207031 L326.00836,141.667969 L323.397032,141.667969 L323.397032,149.925781 C323.397032,150.490888 323.508685,150.898762 323.731993,151.149414 C323.955302,151.400066 324.354061,151.525391 324.928282,151.525391 C325.311097,151.525391 325.698463,151.479818 326.090392,151.388672 L326.090392,153.958984 C325.333877,154.168621 324.604718,154.273438 323.902892,154.273438 C321.350796,154.273438 320.074767,152.865248 320.074767,150.048828 L320.074767,141.667969 L317.641173,141.667969 L317.641173,139.207031 L320.074767,139.207031 L320.074767,135.611328 L323.397032,135.611328 Z M352.123126,154 L348.677814,154 L348.677814,145.154297 L339.777423,145.154297 L339.777423,154 L336.318439,154 L336.318439,134.09375 L339.777423,134.09375 L339.777423,142.378906 L348.677814,142.378906 L348.677814,134.09375 L352.123126,134.09375 L352.123126,154 Z M365.091642,152.550781 C364.116376,153.699224 362.730974,154.273438 360.935392,154.273438 C359.331217,154.273438 358.116711,153.804041 357.291837,152.865234 C356.466963,151.926428 356.054532,150.568368 356.054532,148.791016 L356.054532,139.207031 L359.376798,139.207031 L359.376798,148.75 C359.376798,150.627614 360.156087,151.566406 361.714689,151.566406 C363.327978,151.566406 364.41716,150.987636 364.982267,149.830078 L364.982267,139.207031 L368.304532,139.207031 L368.304532,154 L365.173673,154 L365.091642,152.550781 Z M384.909767,146.753906 C384.909767,149.050793 384.397076,150.878248 383.371681,152.236328 C382.346285,153.594408 380.935817,154.273438 379.140235,154.273438 C377.408456,154.273438 376.059511,153.649095 375.09336,152.400391 L374.929298,154 L371.921485,154 L371.921485,133 L375.243751,133 L375.243751,140.628906 C376.200787,139.498692 377.490488,138.933594 379.112892,138.933594 C380.917588,138.933594 382.334892,139.603509 383.364845,140.943359 C384.394798,142.28321 384.909767,144.156238 384.909767,146.5625 L384.909767,146.753906 Z M381.587501,146.466797 C381.587501,144.862622 381.304952,143.659509 380.739845,142.857422 C380.174738,142.055335 379.354433,141.654297 378.278907,141.654297 C376.838796,141.654297 375.827087,142.283197 375.243751,143.541016 L375.243751,149.638672 C375.836202,150.923835 376.857025,151.566406 378.306251,151.566406 C379.345319,151.566406 380.147394,151.17904 380.712501,150.404297 C381.277608,149.629553 381.569272,148.458341 381.587501,146.890625 L381.587501,146.466797 Z"/> <g transform="translate(55 61)"> <path fill="url(#logo-account-hub)" fill-rule="nonzero" d="M24.1182432,30.4458204 L34.9138514,26.7306502 C35.2668919,26.6006192 35.6756757,26.7863777 35.8057432,27.1393189 C35.8429054,27.2136223 35.8429054,27.3065015 35.8429054,27.380805 L35.8429054,58.755418 C35.8429054,59.1455108 35.527027,59.4613003 35.1368243,59.4613003 C35.1368243,59.4613003 35.1368243,59.4613003 35.1368243,59.4613003 L24.3597973,59.4613003 C23.9695946,59.4613003 23.6537162,59.1455108 23.6537162,58.755418 C23.6537162,58.755418 23.6537162,58.755418 23.6537162,58.755418 L23.6537162,31.0959752 C23.6537162,30.7987616 23.839527,30.5386997 24.1182432,30.4458204 Z M0,39.1950464 L0,58.755418 C0,59.1455108 0.315878378,59.4427245 0.706081081,59.4427245 L11.3902027,59.4427245 C11.7804054,59.4427245 12.0962838,59.126935 12.0962838,58.7368421 C12.0962838,58.7368421 12.0962838,58.7368421 12.0962838,58.7368421 L12.0962838,35.5913313 C12.0962838,35.2012384 11.7804054,34.8854489 11.4087838,34.8854489 C11.3344595,34.8854489 11.2601351,34.9040248 11.1858108,34.9226006 L0.483108108,38.5263158 C0.204391892,38.619195 0,38.8978328 0,39.1950464 Z M35.4527027,1.04024768 L36.3631757,5.44272446 L0.445945946,17.869969 C0.185810811,17.9814241 0,18.2414861 0,18.5201238 L0,27.8637771 C0,28.25387 0.315878378,28.5696594 0.6875,28.5696594 C0.761824324,28.5696594 0.85472973,28.5510836 0.929054054,28.5325077 L38.8902027,15.4551084 L39.7077703,19.0588235 C39.8006757,19.4303406 40.1722973,19.6718266 40.5439189,19.5789474 C40.6739865,19.5417957 40.8040541,19.4674923 40.8969595,19.374613 L54.4054054,4.82972136 C54.6655405,4.55108359 54.6469595,4.10526316 54.3682432,3.84520124 C54.2753378,3.75232198 54.1638514,3.69659443 54.0337838,3.67801858 L36.2702703,0.185758514 C35.8986486,0.111455108 35.527027,0.352941176 35.4527027,0.724458204 C35.4341216,0.835913313 35.4341216,0.947368421 35.4527027,1.04024768 Z"/> <path fill="#44525E" fill-rule="nonzero" d="M115.277027,45.5479876 L93.0168919,45.5479876 C92.7381757,45.5479876 92.5152027,45.7708978 92.5152027,46.0495356 C92.5152027,46.0866873 92.5152027,46.123839 92.5337838,46.1609907 C93.3513514,49.5603715 95.785473,52.0866873 100.560811,52.0866873 C102.771959,52.0866873 104.33277,51.7337461 105.466216,50.5263158 C105.614865,50.3591331 105.837838,50.2662539 106.060811,50.2662539 L114.236486,50.2662539 C114.701014,50.2662539 115.072635,50.6377709 115.072635,51.1021672 C115.072635,51.2321981 115.054054,51.3436533 114.998311,51.4551084 C112.545608,56.7863777 107.119932,59.8513932 100.505068,59.8513932 C90.1925676,59.8513932 83.3733108,52.5696594 83.3733108,42.9845201 C83.3733108,33.3993808 90.1182432,26.0619195 99.9662162,26.0619195 C110.780405,26.0619195 117.413851,34.0495356 116.113176,44.8049536 C116.057432,45.2321981 115.704392,45.5479876 115.277027,45.5479876 Z M92.6081081,39.5479876 L107.231419,39.5479876 C106.766892,35.4427245 104.128378,33.5479876 100.021959,33.5479876 C95.7111486,33.5294118 93.4070946,36.1671827 92.6081081,39.5479876 Z"/> <path fill="#44525E" d="M142.516892,27.5108359 C142.498311,27.0464396 142.108108,26.6934985 141.662162,26.7120743 C137.295608,26.879257 133.858108,28.3467492 131.14527,30.9287926 L131.126689,30.9287926 L131.126689,28.0681115 C131.126689,27.6037152 130.755068,27.2321981 130.290541,27.2321981 L123.118243,27.2321981 C123.118243,27.2321981 123.118243,27.2321981 123.118243,27.2321981 C122.653716,27.2321981 122.282095,27.6037152 122.282095,28.0681115 L122.282095,58.5696594 C122.282095,59.0340557 122.653716,59.4055728 123.118243,59.4055728 L130.290541,59.4055728 C130.755068,59.4055728 131.126689,59.0340557 131.126689,58.5696594 L131.126689,40.1052632 C131.126689,39.9752322 131.182432,39.8637771 131.256757,39.7708978 C133.858108,36.9287926 137.239865,35.4798762 141.755068,35.1083591 C142.182432,35.0712074 142.516892,34.7182663 142.516892,34.2724458 L142.516892,27.5294118 C142.516892,27.5294118 142.516892,27.5294118 142.516892,27.5108359 Z"/> <path fill="#44525E" fill-rule="nonzero" d="M156.954392 28.0681115C156.954392 27.6037152 156.58277 27.2321981 156.118243 27.2321981L148.945946 27.2321981C148.481419 27.2321981 148.109797 27.6037152 148.109797 28.0681115L148.109797 58.5696594C148.109797 59.0340557 148.481419 59.4055728 148.945946 59.4055728L156.118243 59.4055728C156.58277 59.4055728 156.954392 59.0340557 156.954392 58.5696594L156.954392 40.123839C156.954392 38.6749226 157.60473 37.3003096 158.738176 36.3900929 160.317568 35.1083591 162.287162 34.4210526 164.3125 34.4582043 167.675676 34.4582043 170.314189 36.0743034 170.314189 40.996904L170.314189 58.5696594C170.314189 59.0340557 170.685811 59.4055728 171.150338 59.4055728L178.322635 59.4055728C178.787162 59.4055728 179.158784 59.0340557 179.158784 58.5696594L179.158784 40.996904C179.158784 40.5510836 179.140203 40.1795666 179.140203 39.752322 179.140203 38.1547988 179.734797 36.7987616 180.942568 35.9442724 180.942568 35.9442724 180.942568 35.9442724 180.961149 35.9442724L156.972973 29.3684211 156.972973 28.0681115 156.954392 28.0681115zM186.572635 26.4148607C182.1875 26.4148607 178.880068 27.752322 175.721284 30.4643963 173.287162 27.7708978 169.719595 26.4148607 165.464527 26.4148607 161.618243 26.4148607 159.128378 27.5665635 156.972973 29.3684211L180.961149 35.9442724C182.429054 34.9411765 184.175676 34.4210526 185.959459 34.4582043 189.136824 34.4582043 191.478041 35.8328173 192.239865 39.0464396L201.344595 41.5356037C201.344595 31.8204334 195.268581 26.4334365 186.572635 26.4148607zM192.239865 39.0278638C192.407095 39.7708978 192.5 40.5882353 192.5 41.5170279L192.5 58.5510836C192.5 59.0154799 192.871622 59.3869969 193.336149 59.3869969L200.508446 59.3869969C200.972973 59.3869969 201.344595 59.0154799 201.344595 58.5510836L201.344595 41.5170279 192.239865 39.0278638zM207.643581 17.4427245C207.309122 14.247678 209.984797 11.5356037 213.180743 11.628483 215.949324 11.7027864 218.197635 13.7275542 218.383446 16.495356 218.587838 19.5603715 216.060811 22.0681115 212.994932 22.0681115 210.170608 22.0681115 207.922297 20.1176471 207.643581 17.4427245zM217.454392 28.0681115L217.454392 58.5696594C217.454392 59.0340557 217.08277 59.4055728 216.618243 59.4055728L209.445946 59.4055728C208.981419 59.4055728 208.609797 59.0340557 208.609797 58.5696594L208.609797 28.0681115C208.609797 27.6037152 208.981419 27.2321981 209.445946 27.2321981 209.445946 27.2321981 209.445946 27.2321981 209.445946 27.2321981L216.618243 27.2321981C217.08277 27.2321981 217.454392 27.6037152 217.454392 28.0681115z"/> <path fill="#44525E" d="M257.087838 41.9442724L257.087838 58.5696594C257.087838 59.0340557 256.716216 59.4055728 256.251689 59.4055728L249.079392 59.4055728C248.614865 59.4055728 248.243243 59.0340557 248.243243 58.5696594L248.243243 42.4829721C248.243243 37.2260062 245.60473 34.4582043 240.959459 34.4582043 240.327703 34.4582043 239.714527 34.5510836 239.101351 34.7182663 235.775338 35.6470588 233.545608 38.749226 233.545608 42.1857585L233.545608 58.5696594C233.545608 59.0340557 233.173986 59.4055728 232.709459 59.4055728L225.537162 59.4055728C225.072635 59.4055728 224.701014 59.0340557 224.701014 58.5696594L224.701014 28.0681115C224.701014 27.6037152 225.072635 27.2321981 225.537162 27.2321981 225.537162 27.2321981 225.537162 27.2321981 225.537162 27.2321981L232.709459 27.2321981C233.173986 27.2321981 233.545608 27.6037152 233.545608 28.0681115 233.545608 28.0681115 233.545608 28.0681115 233.545608 28.0681115L233.545608 29.6470588C233.545608 29.6470588 233.545608 29.6470588 233.564189 29.6470588 236.184122 27.5108359 239.472973 26.377709 242.85473 26.4148607 251.420608 26.4334365 257.087838 32.4891641 257.087838 41.9442724zM295.086149 27.6965944L295.086149 58.1981424C295.086149 58.6625387 294.714527 59.0340557 294.25 59.0340557L287.096284 59.0340557C286.631757 59.0340557 286.260135 58.6625387 286.260135 58.1981424L286.260135 56.4705882C283.621622 58.5510836 280.592905 59.8328173 276.951014 59.8328173 268.385135 59.8328173 262.717905 53.5541796 262.717905 44.1176471L262.717905 27.6780186C262.717905 27.2136223 263.089527 26.8421053 263.554054 26.8421053 263.554054 26.8421053 263.554054 26.8421053 263.554054 26.8421053L270.726351 26.8421053C271.190878 26.8421053 271.5625 27.2136223 271.5625 27.6780186L271.5625 43.5603715C271.5625 48.8173375 274.201014 51.7894737 278.846284 51.7894737 279.478041 51.7894737 280.109797 51.6965944 280.704392 51.5108359 284.030405 50.5448916 286.260135 47.4241486 286.260135 43.9690402L286.260135 27.6594427C286.260135 27.1950464 286.631757 26.8235294 287.096284 26.8235294 287.096284 26.8235294 287.096284 26.8235294 287.096284 26.8235294L294.268581 26.8235294C294.714527 26.879257 295.086149 27.2321981 295.086149 27.6965944zM315.72973 52.6811146C319.111486 52.6811146 321.471284 51.8080495 321.471284 49.9876161 321.471284 48.7058824 320.393581 47.628483 318.163851 47.2198142L311.214527 46.0123839C306.494932 45.1950464 301.701014 42.6501548 301.701014 36.5758514 301.701014 29.9628483 307.293919 25.9876161 315.469595 25.9876161 321.0625 25.9876161 328.420608 27.4922601 329.591216 35.8885449 329.646959 36.3529412 329.331081 36.7616099 328.885135 36.8359133 328.847973 36.8359133 328.810811 36.8359133 328.773649 36.8359133L322.251689 36.8359133C321.880068 36.8359133 321.545608 36.5758514 321.452703 36.2043344 320.913851 33.7894737 318.331081 32.9907121 315.469595 32.9907121 312.087838 32.9907121 310.471284 34.1424149 310.471284 35.6842105 310.471284 36.8916409 311.344595 38.3219814 314.447635 38.8606811L320.244932 39.8080495C325.243243 40.6811146 329.888514 42.9845201 329.888514 49.1888545 329.888514 56.3405573 323.682432 59.8513932 315.525338 59.8513932 308.6875 59.8513932 301.793919 57.3993808 300.716216 48.7987616 300.660473 48.3343653 300.976351 47.9256966 301.440878 47.869969 301.478041 47.869969 301.515203 47.869969 301.552365 47.869969L308.111486 47.9256966C308.501689 47.9256966 308.817568 48.1857585 308.910473 48.5758514 309.635135 51.6780186 312.180743 52.6811146 315.72973 52.6811146zM80.7719595 57.9566563C80.7905405 57.993808 80.8091216 58.0309598 80.8091216 58.0866873 80.8091216 58.2910217 80.6790541 58.495356 80.4746622 58.5696594 78.1148649 59.4427245 75.625 59.869969 73.097973 59.8513932 64.4577703 59.8513932 59.6081081 54.4643963 59.6081081 46.2352941L59.6081081 34.3095975 54.6841216 34.3095975C54.2195946 34.3095975 53.847973 33.9380805 53.847973 33.4736842 53.847973 33.4736842 53.847973 33.4736842 53.847973 33.4736842L53.847973 27.5294118C53.847973 27.0650155 54.2195946 26.6934985 54.6841216 26.6934985 54.6841216 26.6934985 54.6841216 26.6934985 54.6841216 26.6934985L59.6081081 26.6934985 68.4527027 17.1826625 68.4527027 26.6934985 78.3006757 26.6934985C78.7652027 26.6934985 79.1368243 27.0650155 79.1368243 27.5294118 79.1368243 27.5294118 79.1368243 27.5294118 79.1368243 27.5294118L79.1368243 33.4736842C79.1368243 33.9380805 78.7652027 34.3095975 78.3006757 34.3095975 78.3006757 34.3095975 78.3006757 34.3095975 78.3006757 34.3095975L68.4527027 34.3095975 68.4527027 46.2352941C68.4527027 50.006192 70.8125 51.8080495 74.1199324 51.6965944 75.3834459 51.6594427 76.6469595 51.4736842 77.8733108 51.1021672 77.9476351 51.0835913 78.0405405 51.0650155 78.1148649 51.0835913 78.375 51.1393189 78.597973 51.3250774 78.6722973 51.5851393L80.7719595 57.9566563z"/> </g> </g> </svg> `

libs/ui/logo/src/lib/logo-types/full-gradient.ts

FULL_GRADIENT_LOGO
Default value : ` <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1775.5 321.2" style="enable-background:new 0 0 1775.5 321.2;" xml:space="preserve"> <title>Terminus Logo</title> <style type="text/css"> .lfg0{fill:url(#logo-full-gradient-def);} .lfg1{fill:#44525E;} </style> <g id="logo-full-gradient"> <radialGradient id="logo-full-gradient-def" cx="432.9533" cy="-194.8066" r="236.3" fx="481.2245" fy="-379.1161" gradientTransform="matrix(0.7687 0.6396 0.6524 -0.7841 -73.4819 -286.9689)" gradientUnits="userSpaceOnUse"> <stop offset="0" style="stop-color:#0098CE"/> <stop offset="0.29" style="stop-color:#0072C6"/> <stop offset="0.58" style="stop-color:#0065AC"/> <stop offset="1" style="stop-color:#00538A"/> </radialGradient> <path class="lfg0" d="M129.8,162.9l58.1-20c1.9-0.7,4.1,0.3,4.8,2.2c0.2,0.4,0.2,0.9,0.2,1.3v168.9c0,2.1-1.7,3.8-3.8,3.8 c0,0,0,0,0,0h-58c-2.1,0-3.8-1.7-3.8-3.8c0,0,0,0,0,0V166.4C127.3,164.8,128.3,163.4,129.8,162.9z M0,210v105.3 c0,2.1,1.7,3.7,3.8,3.7h57.5c2.1,0,3.8-1.7,3.8-3.8c0,0,0,0,0,0V190.6c0-2.1-1.7-3.8-3.7-3.8c-0.4,0-0.8,0.1-1.2,0.2L2.6,206.4 C1.1,206.9,0,208.4,0,210z M190.8,4.6l4.9,23.7L2.4,95.2c-1.4,0.6-2.4,2-2.4,3.5V149c0,2.1,1.7,3.8,3.7,3.8c0.4,0,0.9-0.1,1.3-0.2 l204.3-70.4l4.4,19.4c0.5,2,2.5,3.3,4.5,2.8c0.7-0.2,1.4-0.6,1.9-1.1L292.8,25c1.4-1.5,1.3-3.9-0.2-5.3c-0.5-0.5-1.1-0.8-1.8-0.9 L195.2,0c-2-0.4-4,0.9-4.4,2.9C190.7,3.5,190.7,4.1,190.8,4.6z"/> <path class="lfg1" d="M620.4,244.2H500.6c-1.5,0-2.7,1.2-2.7,2.7c0,0.2,0,0.4,0.1,0.6c4.4,18.3,17.5,31.9,43.2,31.9 c11.9,0,20.3-1.9,26.4-8.4c0.8-0.9,2-1.4,3.2-1.4h44c2.5,0,4.5,2,4.5,4.5c0,0.7-0.1,1.3-0.4,1.9c-13.2,28.7-42.4,45.2-78,45.2 c-55.5,0-92.2-39.2-92.2-90.8s36.3-91.1,89.3-91.1c58.2,0,93.9,43,86.9,100.9C624.6,242.5,622.7,244.2,620.4,244.2z M498.4,211.9 h78.7c-2.5-22.1-16.7-32.3-38.8-32.3C515.1,179.5,502.7,193.7,498.4,211.9L498.4,211.9z"/> <path class="lfg1" d="M767,147.1c-0.1-2.5-2.2-4.4-4.6-4.3c-23.5,0.9-42,8.8-56.6,22.7l-0.1,0v-15.4c0-2.5-2-4.5-4.5-4.5h-38.6 c0,0,0,0,0,0c-2.5,0-4.5,2-4.5,4.5v164.2c0,2.5,2,4.5,4.5,4.5h38.6c2.5,0,4.5-2,4.5-4.5v-99.4c0-0.7,0.3-1.3,0.7-1.8 c14-15.3,32.2-23.1,56.5-25.1c2.3-0.2,4.1-2.1,4.1-4.5v-36.3C767,147.2,767,147.2,767,147.1z"/> <g> <g> <path class="lfg1" d="M844.7,150.1c0-2.5-2-4.5-4.5-4.5h-38.6c-2.5,0-4.5,2-4.5,4.5v164.2c0,2.5,2,4.5,4.5,4.5h38.6 c2.5,0,4.5-2,4.5-4.5V215c0-7.8,3.5-15.2,9.6-20.1c8.5-6.9,19.1-10.6,30-10.4c18.1,0,32.3,8.7,32.3,35.2v94.6 c0,2.5,2,4.5,4.5,4.5h38.6c2.5,0,4.5-2,4.5-4.5v-94.6c0-2.4-0.1-4.4-0.1-6.7c0-8.6,3.2-15.9,9.7-20.5c0,0,0,0,0.1,0l-129.1-35.4 V150.1z M1004.1,141.2c-23.6,0-41.4,7.2-58.4,21.8c-13.1-14.5-32.3-21.8-55.2-21.8c-20.7,0-34.1,6.2-45.7,15.9l129.1,35.4 c7.9-5.4,17.3-8.2,26.9-8c17.1,0,29.7,7.4,33.8,24.7l49,13.4C1083.6,170.3,1050.9,141.3,1004.1,141.2z M1034.6,209.1 c0.9,4,1.4,8.4,1.4,13.4v91.7c0,2.5,2,4.5,4.5,4.5h38.6c2.5,0,4.5-2,4.5-4.5v-91.7L1034.6,209.1z"/> </g> </g> <path class="lfg1" d="M1117.5,92.9c-1.8-17.2,12.6-31.8,29.8-31.3c14.9,0.4,27,11.3,28,26.2c1.1,16.5-12.5,30-29,30 C1131.1,117.8,1119,107.3,1117.5,92.9z M1170.3,150.1v164.2c0,2.5-2,4.5-4.5,4.5h-38.6c-2.5,0-4.5-2-4.5-4.5V150.1 c0-2.5,2-4.5,4.5-4.5c0,0,0,0,0,0h38.6C1168.3,145.6,1170.3,147.6,1170.3,150.1z"/> <path class="lfg1" d="M1383.6,224.8v89.5c0,2.5-2,4.5-4.5,4.5h-38.6c-2.5,0-4.5-2-4.5-4.5v-86.6c0-28.3-14.2-43.2-39.2-43.2 c-3.4,0-6.7,0.5-10,1.4c-17.9,5-29.9,21.7-29.9,40.2v88.2c0,2.5-2,4.5-4.5,4.5h-38.6c-2.5,0-4.5-2-4.5-4.5V150.1 c0-2.5,2-4.5,4.5-4.5c0,0,0,0,0,0h38.6c2.5,0,4.5,2,4.5,4.5c0,0,0,0,0,0v8.5c0,0,0,0,0.1,0c14.1-11.5,31.8-17.6,50-17.4 C1353.1,141.3,1383.6,173.9,1383.6,224.8z"/> <path class="lfg1" d="M1588.1,148.1v164.2c0,2.5-2,4.5-4.5,4.5h-38.5c-2.5,0-4.5-2-4.5-4.5V303c-14.2,11.2-30.5,18.1-50.1,18.1 c-46.1,0-76.6-33.8-76.6-84.6v-88.5c0-2.5,2-4.5,4.5-4.5c0,0,0,0,0,0h38.6c2.5,0,4.5,2,4.5,4.5v85.5c0,28.3,14.2,44.3,39.2,44.3 c3.4,0,6.8-0.5,10-1.5c17.9-5.2,29.9-22,29.9-40.6v-87.8c0-2.5,2-4.5,4.5-4.5c0,0,0,0,0,0h38.6 C1586.1,143.7,1588.1,145.6,1588.1,148.1z"/> <path class="lfg1" d="M1699.2,282.6c18.2,0,30.9-4.7,30.9-14.5c0-6.9-5.8-12.7-17.8-14.9l-37.4-6.5c-25.4-4.4-51.2-18.1-51.2-50.8 c0-35.6,30.1-57,74.1-57c30.1,0,69.7,8.1,76,53.3c0.3,2.5-1.4,4.7-3.8,5.1c-0.2,0-0.4,0-0.6,0h-35.1c-2,0-3.8-1.4-4.3-3.4 c-2.9-13-16.8-17.3-32.2-17.3c-18.2,0-26.9,6.2-26.9,14.5c0,6.5,4.7,14.2,21.4,17.1l31.2,5.1c26.9,4.7,51.9,17.1,51.9,50.5 c0,38.5-33.4,57.4-77.3,57.4c-36.8,0-73.9-13.2-79.7-59.5c-0.3-2.5,1.4-4.7,3.9-5c0.2,0,0.4,0,0.6,0l35.3,0.3 c2.1,0,3.8,1.4,4.3,3.5C1666.4,277.2,1680.1,282.6,1699.2,282.6z"/> <path class="lfg1" d="M434.7,311c0.1,0.2,0.2,0.4,0.2,0.7c0,1.1-0.7,2.2-1.8,2.6c-12.7,4.7-26.1,7-39.7,6.9 c-46.5,0-72.6-29-72.6-73.3v-64.2h-26.5c-2.5,0-4.5-2-4.5-4.5c0,0,0,0,0,0v-32c0-2.5,2-4.5,4.5-4.5c0,0,0,0,0,0h26.5l47.6-51.2 v51.2h53c2.5,0,4.5,2,4.5,4.5c0,0,0,0,0,0v32c0,2.5-2,4.5-4.5,4.5c0,0,0,0,0,0h-53v64.2c0,20.3,12.7,30,30.5,29.4 c6.8-0.2,13.6-1.2,20.2-3.2c0.4-0.1,0.9-0.2,1.3-0.1c1.4,0.3,2.6,1.3,3,2.7L434.7,311z"/> </g> </svg> `

libs/ui/logo/src/lib/logo-types/full-solid.ts

FULL_SOLID_LOGO
Default value : ` <svg id="logo-full-solid" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1775.48 321.18"><defs><style>.lfs-1,.lfs-2{fill:#fff;}.lfs-2{stroke:#fff;stroke-miterlimit:10;stroke-width:0.1px;}</style></defs><title>Terminus Logo</title><path class="lfs-1" d="M224.69,265.85l58.06-20a3.76,3.76,0,0,1,5.06,3.53V418.28a3.76,3.76,0,0,1-3.76,3.76H226a3.75,3.75,0,0,1-3.75-3.76V269.38A3.75,3.75,0,0,1,224.69,265.85ZM94.9,313V418.28A3.75,3.75,0,0,0,98.65,422h57.51a3.75,3.75,0,0,0,3.75-3.76V293.57A3.75,3.75,0,0,0,155,290l-57.5,19.44A3.75,3.75,0,0,0,94.9,313ZM285.73,107.59l4.91,23.71L97.29,198.19a3.75,3.75,0,0,0-2.39,3.5V252a3.75,3.75,0,0,0,5,3.54L304.2,185.1l4.44,19.38a3.76,3.76,0,0,0,6.42,1.72L387.72,128a3.76,3.76,0,0,0-2-6.24l-95.57-18.72A3.76,3.76,0,0,0,285.73,107.59Z" transform="translate(-94.9 -103)"/><path class="lfs-2" d="M715.31,347.17H595.49a2.68,2.68,0,0,0-2.62,3.29c4.44,18.32,17.52,31.92,43.23,31.92,11.89,0,20.28-1.91,26.36-8.39a4.44,4.44,0,0,1,3.23-1.41h44a4.49,4.49,0,0,1,4.06,6.39c-13.19,28.73-42.43,45.16-78,45.16-55.54,0-92.2-39.21-92.2-90.76s36.3-91.11,89.29-91.11c58.22,0,93.87,43,86.94,100.95A4.5,4.5,0,0,1,715.31,347.17Zm-122-32.31H672c-2.54-22.14-16.7-32.31-38.84-32.31C610,282.55,597.62,296.71,593.27,314.86Z" transform="translate(-94.9 -103)"/><path class="lfs-2" d="M861.88,250.28v36.26a4.48,4.48,0,0,1-4.12,4.46c-24.35,2-42.51,9.77-56.53,25.08a2.73,2.73,0,0,0-.7,1.82v99.39a4.49,4.49,0,0,1-4.48,4.48H757.46a4.48,4.48,0,0,1-4.48-4.48V253.1a4.47,4.47,0,0,1,4.48-4.48h38.59a4.48,4.48,0,0,1,4.48,4.48v15.39a0,0,0,0,0,.06,0c14.65-13.94,33.14-21.81,56.65-22.72A4.48,4.48,0,0,1,861.88,250.28Z" transform="translate(-94.9 -103)"/><path class="lfs-2" d="M1178.5,325.57v91.72a4.49,4.49,0,0,1-4.49,4.48h-38.59a4.49,4.49,0,0,1-4.48-4.48V325.57c0-26.86-14.15-38.11-35.21-38.11a46.22,46.22,0,0,0-27,8.07c-6.56,4.54-9.74,11.82-9.74,20.47,0,2.26.07,4.23.07,6.67v94.62a4.49,4.49,0,0,1-4.48,4.48H1016a4.49,4.49,0,0,1-4.49-4.48V322.67c0-26.5-14.15-35.21-32.3-35.21a46.08,46.08,0,0,0-30,10.41A25.91,25.91,0,0,0,939.64,318v99.27a4.49,4.49,0,0,1-4.48,4.48H896.57a4.49,4.49,0,0,1-4.49-4.48V253.1a4.48,4.48,0,0,1,4.49-4.48h38.59a4.48,4.48,0,0,1,4.48,4.48v7a0,0,0,0,0,.06,0c11.6-9.77,25-15.92,45.68-15.92,22.85,0,42.08,7.25,55.15,21.75a0,0,0,0,0,0,0c17.06-14.51,34.84-21.76,58.42-21.76C1145.83,244.26,1178.5,273.3,1178.5,325.57Z" transform="translate(-94.9 -103)"/><path class="lfs-2" d="M1212.39,195.91c-1.76-17.2,12.55-31.82,29.83-31.31,14.87.44,27,11.29,28,26.24,1.13,16.48-12.52,30-29,30C1226,220.83,1213.87,210.33,1212.39,195.91Zm52.85,57.19V417.29a4.49,4.49,0,0,1-4.48,4.48h-38.59a4.49,4.49,0,0,1-4.49-4.48V253.1a4.48,4.48,0,0,1,4.49-4.48h38.59A4.48,4.48,0,0,1,1265.24,253.1Z" transform="translate(-94.9 -103)"/><path class="lfs-2" d="M1478.49,327.75v89.54a4.49,4.49,0,0,1-4.48,4.48h-38.59a4.48,4.48,0,0,1-4.48-4.48V330.66c0-28.32-14.16-43.2-39.21-43.2a37.1,37.1,0,0,0-10,1.42c-17.87,4.95-29.92,21.66-29.92,40.2v88.21a4.48,4.48,0,0,1-4.48,4.48h-38.59a4.48,4.48,0,0,1-4.48-4.48V253.1a4.47,4.47,0,0,1,4.48-4.48h38.59a4.47,4.47,0,0,1,4.48,4.48v8.51s0,.05.06,0a77.79,77.79,0,0,1,50-17.38C1448,244.26,1478.49,276.93,1478.49,327.75Z" transform="translate(-94.9 -103)"/><path class="lfs-2" d="M1683,251.1V415.29a4.49,4.49,0,0,1-4.48,4.48H1640a4.48,4.48,0,0,1-4.48-4.48V406c-14.16,11.25-30.5,18.15-50.1,18.15-46.1,0-76.59-33.76-76.59-84.59V251.1a4.47,4.47,0,0,1,4.48-4.48h38.59a4.48,4.48,0,0,1,4.48,4.48v85.54c0,28.32,14.16,44.29,39.21,44.29a36.07,36.07,0,0,0,10-1.48c17.89-5.18,29.92-21.95,29.92-40.56V251.1a4.47,4.47,0,0,1,4.48-4.48h38.59A4.48,4.48,0,0,1,1683,251.1Z" transform="translate(-94.9 -103)"/><path class="lfs-2" d="M1794.1,385.65c18.15,0,30.86-4.72,30.86-14.52,0-6.9-5.81-12.71-17.79-14.89l-37.39-6.53c-25.41-4.36-51.19-18.15-51.19-50.82,0-35.58,30.13-57,74.06-57,30.12,0,69.69,8.11,76,53.34a4.48,4.48,0,0,1-4.44,5.1h-35.1a4.38,4.38,0,0,1-4.3-3.37c-2.88-13-16.76-17.32-32.19-17.32-18.15,0-26.86,6.17-26.86,14.52,0,6.53,4.71,14.16,21.41,17.06l31.22,5.08c26.86,4.72,51.91,17.06,51.91,50.46,0,38.48-33.4,57.36-77.32,57.36-36.8,0-73.93-13.2-79.72-59.51a4.49,4.49,0,0,1,4.48-5.07l35.27.29a4.48,4.48,0,0,1,4.32,3.45C1761.35,380.2,1775,385.65,1794.1,385.65Z" transform="translate(-94.9 -103)"/><path class="lfs-2" d="M529.63,414a1.62,1.62,0,0,1,.2.67,2.69,2.69,0,0,1-1.78,2.57,109.58,109.58,0,0,1-39.67,6.85c-46.47,0-72.61-29.05-72.61-73.33V286.55H389.23a4.48,4.48,0,0,1-4.48-4.49v-32a4.47,4.47,0,0,1,4.48-4.48h26.54l47.56-51.23v51.23h53a4.47,4.47,0,0,1,4.48,4.48v32a4.48,4.48,0,0,1-4.48,4.49h-53V350.8c0,20.33,12.71,30,30.49,29.4A77.55,77.55,0,0,0,514,377a2.9,2.9,0,0,1,1.32-.08,3.91,3.91,0,0,1,3,2.71Z" transform="translate(-94.9 -103)"/></svg> `

libs/ui/sort/src/lib/sort-errors.ts

getSortDuplicateSortableIdError
Default value : (id: string): Error => Error(`Cannot have two TsSortables with the same id (${id}).`)
getSortHeaderMissingIdError
Default value : (): Error => Error(`TsSortHeader must be provided with a unique id.`)
getSortHeaderNotContainedWithinSortError
Default value : (): Error => Error(`TsSortHeader must be placed within a parent element with the TsSort directive.`)
getSortInvalidDirectionError
Default value : (direction: string): Error => Error(`${direction} is not a valid sort direction ('asc' or 'desc').`)

libs/ui/validators/src/lib/stories/validation-number.stories.ts

greaterThan
Default value : () => ({ component: NumberWrapper, props: { demo: 'greaterThan', }, })
isInRange
Default value : () => ({ component: NumberWrapper, props: { demo: 'isInRange', }, })
lessThan
Default value : () => ({ component: NumberWrapper, props: { demo: 'lessThan', }, })
numbers
Default value : () => ({ component: NumberWrapper, props: { demo: 'numbers', }, })

libs/ui/validators/src/lib/validators/greaterThan/greaterThan.ts

greaterThanValidator
Default value : (minimum: number | AbstractControl = 0): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || isNaN(control.value)) { return null; } if (!isNumber(minimum) && isAbstractControl(minimum)) { return getValidationResult(minimum.value, control); } return getValidationResult(minimum, control); }

Return a validator function to verify the value is above a minimum value

libs/fe-utilities/src/lib/browser/cookies.service.ts

HOURS_IN_DAY
Type : number
Default value : 24
MINUTES_IN_HOUR
Type : number
Default value : 60
MS_IN_DAY
Default value : MS_IN_SECONDS * SECONDS_IN_MINUTE * MINUTES_IN_HOUR * HOURS_IN_DAY
MS_IN_SECONDS
Type : number
Default value : 1000
SECONDS_IN_MINUTE
Type : number
Default value : 60

libs/ui/validators/src/lib/validators/inCollection/inCollection.ts

inCollectionValidator
Default value : <T>(collection: T[], valueFn?: (a: T) => string): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value || !collection || collection.length < 1) { return null; } const invalidResponse: ValidationErrors = { inCollection: { valid: false, actual: control.value, collection, }, }; const found = collection.some(v => { const controlValue = control.value; const collectionValue = valueFn ? valueFn(v) : v; return collectionValue === controlValue; }); return found ? null : invalidResponse; }

Return a validator function to verify the value is present in the collection

libs/fe-jwt/src/lib/jwt-token-managment/tokens.ts

INITIAL_TOKEN_NAME
Default value : new InjectionToken('jwt-token-managment INITIAL_JWT_TOKEN_NAME')

libs/fe-jwt/src/lib/jwt-token-managment/reducer.ts

initialState
Type : JwtTokenProviderState
Default value : { initialTokenStatus: 'uninitialized', tokens: {}, }

libs/ui/search/src/lib/search/search.component.ts

INPUT_DEBOUNCE_DEFAULT_MS
Type : number
Default value : 200
INPUT_MINIMUM_LENGTH
Type : number
Default value : 2

libs/fe-utilities/src/lib/type-guards/is-abstract-control.ts

isAbstractControl
Default value : (x: Record<string, any>): x is AbstractControl => !!x && x.hasOwnProperty('valueChanges')

Determine if the item is an AbstractControl

libs/fe-utilities/src/lib/type-guards/is-array.ts

isArray
Default value : <T>(item: T[] | any): item is Array<T> => !!(item && item.constructor === Array)

Determine if an item is an Array

NOTE: This is the fastest performer across all primary browsers.

libs/fe-utilities/src/lib/type-guards/is-boolean.ts

isBoolean
Default value : (value: any): value is boolean => value === true || value === false || Object.prototype.toString.call(value) === '[object Boolean]'

Determine if a value is a boolean

libs/fe-utilities/src/lib/coercion/date-property.ts

isDateValue
Default value : (value: any): value is Date => !isNaN(Date.parse(value))

Whether the provided value is considered a date.

libs/fe-utilities/src/lib/type-guards/is-drag-event.ts

isDragEvent
Default value : (x: any): x is DragEvent => !!x && isSet(x.dataTransfer)

Coerce the type to DragEvent

libs/fe-utilities/src/lib/type-guards/is-function.ts

isFunction
Default value : (x: any): x is Function => !!(x && x.constructor && x.call && x.apply)

Determine if an item is a function

NOTE: While this isn't the fastest performing test in every browser, it is the faster when averaged across the browsers we care about.

libs/fe-utilities/src/lib/type-guards/is-html-input-element.ts

isHTMLInputElement
Default value : (x: any): x is HTMLInputElement => !!x && isSet(x.files)

Coerce the type to HTMLInputElement

libs/fe-utilities/src/lib/type-guards/is-http-response.ts

isHttpResponse
Default value : <T>(x: Object | TokenResponse | HttpResponse<T>): x is HttpResponse<T> => !isNull(x) && !isUndefined(x) && x.hasOwnProperty('headers')

Determine if an item is an HTTP response

libs/ui/validators/src/lib/validators/isInRange/isInRange.ts

isInRangeValidator
Default value : ( minimum: number | AbstractControl = 0, maximum: number | AbstractControl = 0, ): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control) { return null; } const value: number | null = isNumber(control.value) ? Number(control.value) : null; // Verify the value if (value === null) { return null; } if (!isNumber(minimum) && !isNumber(maximum) && isAbstractControl(minimum) && isAbstractControl(maximum)) { return getValidationResult(minimum.value, maximum.value, control); } return getValidationResult(coerceNumberProperty(minimum), coerceNumberProperty(maximum), control); }

Return a validator function to verify the value is within range

libs/fe-utilities/src/lib/type-guards/is-keyboard-event.ts

isKeyboardEvent
Default value : (x: any): x is KeyboardEvent => !!x && isSet(x.code)

Coerce the type to KeyboardEvent

libs/fe-utilities/src/lib/type-guards/is-mouse-event.ts

isMouseEvent
Default value : (x: any): x is MouseEvent => !!x && isSet(x.relatedTarget)

Coerce the type to MouseEvent

libs/fe-utilities/src/lib/type-guards/is-null.ts

isNull
Default value : (x: any): x is null => x === null

Determine if an item is null

libs/fe-utilities/src/lib/type-guards/is-number.ts

isNumber
Default value : (value: any): value is number => !isNaN(parseFloat(value)) && !isNaN(Number(value))

Determine if a value is a number

libs/fe-utilities/src/lib/coercion/number-property.ts

isNumberValue
Default value : (value: any): boolean => !isNaN(parseFloat(value)) && !isNaN(Number(value))

Whether the provided value is considered a number.

ParseFloat(value) handles most of the cases we're interested in (it treats null, empty string, and other non-number values as NaN, where Number just uses 0) but it considers the string '123hello' to be a valid number. Therefore we also check if Number(value) is NaN. NOTE: TypeScript seems to consider parseFloat(value) unsafe. In my tests there are no values which parseFloat cannot handle safely.

libs/fe-utilities/src/lib/type-guards/is-object.ts

isObject
Default value : (x: any): x is object => Object.prototype.toString.call(x) === '[object Object]'

Determine if an item is an object

libs/fe-utilities/src/lib/type-guards/is-set.ts

isSet
Default value : <T>(x: any): x is T => !isUndefined(x)

Determine if the item has a value

libs/fe-utilities/src/lib/type-guards/is-string.ts

isString
Default value : (x: any): x is string => !!(typeof x === 'string' || x instanceof String)

Determine if a value is a string

libs/fe-utilities/src/lib/type-guards/is-token-response.ts

isTokenResponse
Default value : <T>(x: Object | TokenResponse | HttpResponse<T>): x is TokenResponse => !isNull(x) && !isUndefined(x) && x.hasOwnProperty('token')

Determine if an item is a token response

libs/fe-utilities/src/lib/type-guards/is-undefined.ts

isUndefined
Default value : (input: any): input is undefined => input === undefined

Helper function to determine if input is undefined.

libs/fe-utilities/src/lib/general/is-unset.ts

isUnset
Default value : (x: any): boolean => isNull(x) || isUndefined(x)

Helper function to determine if input is unset.

libs/fe-jwt/src/lib/jwt-token-managment/state.ts

JWT_TOKEN_MANAGEMENT_STATE_TOKEN
Type : string
Default value : 'ngx-tools-jwtTokenManagement'
jwtModuleEmptyState
Type : State
Default value : { jwtTokens: { initialTokenStatus: 'empty', tokens: {}, }, }

libs/fe-jwt/src/lib/jwt-token-managment/empty-state.ts

jwtEmptyStateReset
Type : object
Default value : { [JWT_TOKEN_MANAGEMENT_STATE_TOKEN]: jwtModuleEmptyState }

libs/ui/validators/src/lib/validators/lessThan/lessThan.ts

lessThanValidator
Default value : (max: number | AbstractControl = 0): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || isNaN(control.value)) { return null; } if (!isNumber(max) && isAbstractControl(max)) { return getValidationResult(max.value, control); } return getValidationResult(max, control); }

Return a validator function to verify the number is below a specific number

libs/ui/validators/src/lib/validators/lowercase/lowercase.ts

lowercaseValidator
Default value : (lowercaseMin?: number): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } lowercaseMin = lowercaseMin ? lowercaseMin : 1; const invalidResponse: ValidationErrors = { lowercase: { valid: false, actual: control.value, lowercase: lowercaseMin, }, }; const regex = createContainsLowercaseRegex(lowercaseMin); return regex.test(control.value) ? null : invalidResponse; }

Return a validator function to verify that number of lowercase letters is satisfied

libs/ui/chart/src/lib/stories/chart.component.ts

MAP_DATA
Type : Record[]
Default value : [{ latitude: 48.856614, longitude: 2.352222, title: 'Paris', }, { latitude: 40.712775, longitude: -74.005973, title: 'New York', }, { latitude: 49.282729, longitude: -123.120738, title: 'Vancouver', }]
visits
Type : number
Default value : 10
XY_DATA
Type : Record[]
Default value : []

libs/ui/drawer/src/lib/container/drawer-container.component.ts

MARGIN_SIZE_CONVERSION
Type : number
Default value : 16

This is used to convert margin measurement from rem to px.

libs/ui/logo/src/lib/logo-types/mark-gradient.ts

MARK_GRADIENT_LOGO
Default value : ` <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1682 1798" style="enable-background:new 0 0 1682 1798;" xml:space="preserve"> <title>Terminus Logo</title> <style type="text/css"> .lmg0{fill:url(#logo-mark-gradient);} </style> <radialGradient id="logo-mark-gradient" cx="786.7582%" cy="850.3633%" r="1236.9305%" fx="1039.4332%" fy="-114.3848%" gradientTransform="matrix(0.7687 0.6396 -0.6527 0.7844 737.0205 -319.9217)" gradientUnits="userSpaceOnUse"> <stop offset="0" style="stop-color:#0098CE"/> <stop offset="0.2889" style="stop-color:#0072C6"/> <stop offset="0.5781" style="stop-color:#0065AC"/> <stop offset="1" style="stop-color:#00538A"/> </radialGradient> <path class="lmg0" d="M774.3,955.44l303.94-104.58c12.84-4.71,26.45,4.79,26.45,18.47v884.01c0,10.86-8.81,19.67-19.67,19.67H781.08 c-10.86,0-19.67-8.81-19.67-19.67V973.9C761.41,965.65,766.55,958.28,774.3,955.44z M94.9,1202.27v551.06 c0,10.86,8.81,19.67,19.67,19.67h301c10.86,0,19.67-8.81,19.67-19.67v-652.81c0-13.33-12.99-22.8-25.68-18.73l-301,101.76 C100.42,1186.15,94.9,1193.72,94.9,1202.27z M1093.83,127.01l25.66,124.12L107.44,601.25c-7.57,2.94-12.55,10.22-12.55,18.34v263.4 c0,13.57,13.42,23.07,26.22,18.55L1190.5,532.75l23.24,101.43c3.53,15.39,22.83,20.56,33.58,9l380.34-409.1 c10.47-11.26,4.55-29.64-10.52-32.68L1116.9,103.4C1102.93,100.59,1090.7,113.1,1093.83,127.01z"/> </svg> `

libs/ui/logo/src/lib/logo-types/mark-solid.ts

MARK_SOLID_LOGO
Default value : ` <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1682 1798" style="enable-background:new 0 0 1682 1798;" xml:space="preserve"> <title>Terminus Logo</title> <style type="text/css"> .lms{fill:#FFFFFF;} </style> <path id="logo-mark-solid" class="lms" d="M774.3,955.44l303.94-104.58c12.84-4.71,26.45,4.79,26.45,18.47v884.01c0,10.86-8.81,19.67-19.67,19.67H781.08 c-10.86,0-19.67-8.81-19.67-19.67V973.9C761.41,965.65,766.55,958.28,774.3,955.44z M94.9,1202.27v551.06 c0,10.86,8.81,19.67,19.67,19.67h301c10.86,0,19.67-8.81,19.67-19.67v-652.81c0-13.33-12.99-22.8-25.68-18.73l-301,101.76 C100.42,1186.15,94.9,1193.72,94.9,1202.27z M1093.83,127.01l25.66,124.12L107.44,601.25c-7.57,2.94-12.55,10.22-12.55,18.34v263.4 c0,13.57,13.42,23.07,26.22,18.55L1190.5,532.75l23.24,101.43c3.53,15.39,22.83,20.56,33.58,9l380.34-409.1 c10.47-11.26,4.55-29.64-10.52-32.68L1116.9,103.4C1102.93,100.59,1090.7,113.1,1093.83,127.01z"/> </svg> `

libs/ui/validators/src/lib/stories/validation-date.stories.ts

MAX_DATE
Default value : new Date(2020, 2, 24)
maxDate
Default value : () => ({ component: DateWrapper, props: { demo: 'maxDate', maxDate: date('Max date', new Date(2020, 2, 24)), }, })
MIN_DATE
Default value : new Date(2020, 2, 6)
minDate
Default value : () => ({ component: DateWrapper, props: { demo: 'minDate', minDate: date('Min date', new Date(2020, 2, 6)), }, })
START_DATE
Default value : new Date(2020, 2, 14)

libs/ui/validators/src/lib/validators/maxDate/maxDate.ts

maxDateValidator
Default value : (maxDate: string | AbstractControl): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } if (!isString(maxDate) && isAbstractControl(maxDate)) { return getValidationResult(maxDate.value, control); } return getValidationResult(maxDate, control); }

Return a validator function to verify the selected date is before a maximum date

libs/ui/file-upload/src/lib/file-upload/file-upload.component.ts

MAXIMUM_KILOBYTES_PER_FILE
Default value : 10 * 1024

The maximum file size in bytes

NOTE: Currently nginx has a hard limit of 10mb

nextUniqueId
Type : number
Default value : 0

Unique ID for each instance

libs/ui/validators/src/lib/validators/minDate/minDate.ts

minDateValidator
Default value : (minDate: string | AbstractControl): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } if (!isString(minDate) && isAbstractControl(minDate)) { return getValidationResult(minDate.value, control); } return getValidationResult(minDate, control); }

Return a validator function to verify the selected date is after a minimum date

libs/ui/autocomplete/src/lib/autocomplete-panel/autocomplete-panel.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/card/src/lib/card/card.component.ts

nextUniqueId
Type : number
Default value : 0

Unique ID for each instance

tsCardAspectRatioTypes
Type : TsAspectRatioTypes[]
Default value : [ '16:9', '4:3', '3:2', '5:4', '1:1', ]
tsCardBorderOptionsList
Type : TsCardBorderOptions[]
Default value : [ 'none', 'left', 'right', 'top', 'bottom', ]

libs/ui/checkbox/src/lib/checkbox/checkbox.component.ts

nextUniqueId
Type : number
Default value : 0

Unique ID for each instance

libs/ui/chip/src/lib/chip/chip.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/chip/src/lib/collection/chip-collection.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/cohort-date-range/src/lib/cohort/cohort-date-range.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/expansion-panel/src/lib/panel/expansion-panel.component.ts

nextUniqueId
Type : number
Default value : 0

Unique ID for each panel trigger ID

TS_EXPANSION_PANEL_DEFAULT_OPTIONS
Default value : new InjectionToken<TsExpansionPanelDefaultOptions>('TS_EXPANSION_PANEL_DEFAULT_OPTIONS')

Injection token that can be used to configure the defalt options for the expansion panel component.

libs/ui/option/src/lib/optgroup/optgroup.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/option/src/lib/option/option.component.ts

nextUniqueId
Type : number
Default value : 0
TS_OPTGROUP_PARENT_COMPONENT
Type : miscellaneou
Default value : new InjectionToken<TsOptgroupParentComponent>('TS_OPTGROUP_PARENT_COMPONENT')

Injection token used to provide the parent optgroup to options. Used by TsOptgroupComponent

TS_OPTION_PARENT_COMPONENT
Type : miscellaneou
Default value : new InjectionToken<TsOptionParentComponent>('TS_OPTION_PARENT_COMPONENT')

Injection token used to provide the parent component to options. Used by TsOptionComponent

Since TsSelectionListComponent imports TsOptionComponent, importing TsSelectionListComponent here will cause a circular dependency. Injecting via an InjectionToken helps us circumvent that limitation.

libs/ui/popover/src/lib/trigger/popover-trigger.directive.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/radio-group/src/lib/group/radio-group.component.ts

nextUniqueId
Type : number
Default value : 0

Unique ID for each instance

libs/ui/select/src/lib/trigger/select-trigger.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/selection-list/src/lib/selection-list-panel/selection-list-panel.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/selection-list/src/lib/trigger/selection-list-trigger.directive.ts

nextUniqueId
Type : number
Default value : 0
SELECTION_LIST_PANEL_MAX_HEIGHT
Type : number
Default value : 256
TS_SELECTION_LIST_SCROLL_STRATEGY
Default value : new InjectionToken<() => ScrollStrategy>('ts-selection-list-scroll-strategy')
TS_SELECTION_LIST_SCROLL_STRATEGY_FACTORY
Default value : (overlay: Overlay): () => ScrollStrategy => () => overlay.scrollStrategies.reposition()
TS_SELECTION_LIST_SCROLL_STRATEGY_FACTORY_PROVIDER
Type : object
Default value : { provide: TS_SELECTION_LIST_SCROLL_STRATEGY, deps: [Overlay], useFactory: TS_SELECTION_LIST_SCROLL_STRATEGY_FACTORY, }

libs/ui/tabs/src/lib/body/tab-body-host.directive.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/tabs/src/lib/body/tab-body.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/tabs/src/lib/collection/tab-collection.component.ts

nextUniqueId
Type : number
Default value : 0
tsTabAlignmentOptions
Type : []
Default value : [ 'start', 'center', 'end', 'stretch', ]
tsTabHeaderPositions
Type : []
Default value : [ 'above', 'below', ]

libs/ui/tabs/src/lib/tab/tab.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/validation-messages/src/lib/messages/validation-messages.component.ts

nextUniqueId
Type : number
Default value : 0

libs/ui/autocomplete/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-chip: ^2.0.4', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-input: ^2.0.7', '@terminus/ui-option: ^1.0.10', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-autocomplete: ^1.0.13', 'text-mask-addons: 3.8.0', 'text-mask-core: 5.1.2', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/autofocus/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-autofocus: ^1.0.10', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/button/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-button: ^2.0.7', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-styles: ^1.0.13', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/card/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-card: ^2.0.4', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/chart/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@amcharts/amcharts4: ^4.9.20', '@amcharts/amcharts4-geodata: ^4.1.14', '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-chart: ^1.0.13', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/checkbox/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-checkbox: ^2.0.6', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/chip/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-chip: ^2.0.4', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-styles: ^1.0.13', 'date-fns: 2.14.0', '@terminus/ui-utilities: ^1.0.9', 'rxjs: ^6.5.0', 'tslib: ^1.10.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/cohort-date-range/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ 'date-fns: 2.14.0', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-date-range: ^1.0.9', '@terminus/ui-input: ^2.0.7', '@terminus/ui-option: ^1.0.10', '@terminus/ui-selection-list: ^2.0.6', 'tslib: ^1.10.0', '@terminus/ui-cohort-date-range: ^1.0.10', '@angular/cdk: 9.2.4', '@angular/material: ^9.2.4', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-chip: ^2.0.4', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-spacing: ^1.0.11', 'text-mask-addons: 3.8.0', 'text-mask-core: 5.1.2', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/confirmation/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ 'date-fns: 2.14.0', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', 'tslib: ^1.10.0', '@angular/cdk: 9.2.4', '@terminus/ui-button: ^2.0.7', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-confirmation: ^2.0.2', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-spacing: ^1.0.11', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/copy/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-copy: ^2.0.6', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-confirmation: ^2.0.2', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-input: ^2.0.7', '@terminus/ui-option: ^1.0.10', '@terminus/ui-selection-list: ^2.0.6', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-tooltip: ^1.0.13', '@terminus/ui-utilities: ^1.0.9', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/csv-entry/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-button: ^2.0.7', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-icon-button: ^2.0.5', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-tooltip: ^1.0.13', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-csv-entry: ^2.0.6', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/date-range/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-input: ^2.0.7', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-date-range: ^1.0.9', 'text-mask-core: 5.1.2', 'text-mask-addons: 3.8.0', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/drawer/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@angular/cdk: ^9.2.4', '@angular/material: ^9.1.11', '@terminus/ui-drawer: ^1.0.10', '@terminus/ui-utilities: ^1.0.9', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/expansion-panel/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-expansion-panel: ^1.0.13', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/file-upload/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-file-upload: ^2.0.8', 'date-fns: ^2.14.0', '@terminus/ui-button: ^2.0.7', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-icon-button: ^2.0.5', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-tooltip: ^1.0.13', '@terminus/ui-validation-messages: ^1.0.14', 'rxjs: ^6.5.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/form-field/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-validation-messages: ^1.0.14', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/icon/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-icon: ^2.0.5', '@fortawesome/pro-solid-svg-icons: ^5.14.0', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/icon-button/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-icon-button: ^2.0.5', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/input/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-input: ^2.0.7', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-pipes: ^1.0.7', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-validators: ^1.0.9', 'date-fns: ^2.14.0', 'text-mask-addons: ^3.8.0', 'text-mask-core: ^5.1.2', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/link/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-link: ^2.0.5', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/loading-overlay/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-loading-overlay: ^1.0.13', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/login-form/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-login-form: ^1.0.10', '@terminus/ui-button: ^2.0.7', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-input: ^2.0.7', '@terminus/ui-link: ^2.0.5', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-validation-messages: ^1.0.14', 'text-mask-addons: ^3.8', 'text-mask-core: ^5.1.2', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/logo/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-logo: ^1.0.10', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/menu/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-button: ^2.0.7', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-menu: ^2.0.7', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/navigation/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-navigation: ^2.0.7', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-tooltip: ^1.0.13', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/option/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-option: ^1.0.10', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/paginator/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-button: ^2.0.7', '@terminus/ui-menu: ^2.0.7', '@terminus/ui-option: ^1.0.10', '@terminus/ui-selection-list: ^2.0.6', '@terminus/ui-tooltip: ^1.0.13', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-paginator: ^2.0.5', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-chip: ^2.0.4', '@terminus/ui-input: ^2.0.7', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-styles: ^1.0.13', 'text-mask-addons: ^3.8.0', 'text-mask-core: ^5.1.2', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/pipes/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-pipes: ^1.0.9', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/popover/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@popperjs/core: 2.4.4', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-popover: ^2.0.4', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/radio-group/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-radio-group: ^2.0.7', '@terminus/ui-validation-messages: ^1.0.14', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/scrollbars/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-scrollbars: ^1.0.10', 'ngx-perfect-scrollbar: ^9.0.0', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/search/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-button: ^2.0.7', '@terminus/ui-input: ^2.0.7', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-form-field: ^1.0.6', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-spacing: ^1.0.6', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-search: ^2.0.5', 'date-fns: ^2.14.0', 'text-mask-addons: 3.8.0', 'text-mask-core: 5.1.2', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/select/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-input: ^2.0.7', '@terminus/ui-option: ^1.0.10', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-select: ^2.0.5', 'date-fns: ^2.14.0', 'text-mask-addons: 3.8.0', 'text-mask-core: 5.1.2', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/selection-list/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-chip: ^2.0.4', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-input: ^2.0.7', '@terminus/ui-option: ^1.0.10', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-selection-list: ^2.0.6', 'date-fns: ^2.14.0', 'text-mask-addons: 3.8.0', 'text-mask-core: 5.1.2', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/sort/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-sort: ^1.0.14', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/spacing/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-spacing: ^1.0.11', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/styles/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-styles: ^1.0.13', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/table/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-button: ^2.0.7', '@terminus/ui-chip: ^2.0.4', '@terminus/ui-checkbox: ^2.0.6', '@terminus/ui-form-field: ^2.0.8', '@terminus/ui-icon: ^2.0.5', '@terminus/ui-input: ^2.0.7', '@terminus/ui-menu: ^2.0.7', '@terminus/ui-option: ^1.0.10', '@terminus/ui-paginator: ^2.0.5', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-selection-list: ^2.0.6', '@terminus/ui-sort: ^1.0.14', '@terminus/ui-spacing: ^1.0.11', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-table: ^2.0.6', '@terminus/ui-tooltip: ^1.0.13', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-validators: ^1.0.9', '@terminus/ui-utilities: ^1.0.9', 'text-mask-addons: 3.8.0', 'text-mask-core: 5.1.2', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/tabs/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-tabs: ^2.0.7', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/toggle/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-styles: ^1.0.13', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-toggle: ^1.0.10', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/tooltip/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-tooltip: ^1.0.13', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/utilities/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-utilities: ^1.0.9', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/validation-messages/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/cdk: ^9.2.4', '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/material: ^9.2.4', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-pipes: ^1.0.9', '@terminus/ui-utilities: ^1.0.9', '@terminus/ui-validation-messages: ^1.0.14', '@terminus/ui-validators: ^1.0.9', 'date-fns: ^2.14.0', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/ui/validators/schematics/ng-add/index.ts

ngAdd
Default value : () => (tree: Tree, context: SchematicContext): Tree => { [ '@angular/common: ^9.1.0', '@angular/core: ^9.1.0', '@angular/flex-layout: ~9.0.0-beta.29', '@angular/forms: ^9.1.0', '@angular/platform-browser: ^9.1.0', '@terminus/design-tokens: ^3.1.0', '@terminus/fe-utilities: ^1.0.0', '@terminus/ui-validators: ^1.0.9', ].map(p => { const individualPackage = p.split(':'); const nodeDependency: NodeDependency = { type: NodeDependencyType.Default, name: individualPackage[0], version: individualPackage[1].trim(), overwrite: false, }; addPackageJsonDependency(tree, nodeDependency); context.logger.info( `✅️ Added dependency: ${individualPackage[0]}@${ individualPackage[1] }`, ); context.addTask(new NodePackageInstallTask()); }); return tree; }

libs/fe-utilities/src/lib/general/noop.ts

noop
Default value : (): undefined => void 0

Placeholder function.

libs/ui/validators/src/lib/validators/numbers/numbers.ts

numbersValidator
Default value : (numbersMin?: number): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } numbersMin = numbersMin ? numbersMin : 1; const invalidResponse: ValidationErrors = { numbers: { valid: false, actual: control.value, numbers: numbersMin, }, }; const regex = createContainsNumbersRegex(numbersMin); return regex.test(control.value) ? null : invalidResponse; }

Return a validator function to verify that number of digital numbers is satisfied

libs/fe-utilities/src/lib/regex/only-letters.regex.ts

onlyLettersRegex
Default value : /^[a-zA-Z]+$/

Define a regex to validate a string contains only letters

libs/fe-utilities/src/lib/regex/only-numbers.regex.ts

onlyNumbersRegex
Default value : /^-?(\d+\.?\d*)$|(\d*\.?\d+)$/

Define a regex to validate a string contains only numbers

libs/fe-utilities/src/lib/browser/document.service.ts

originalDocument
Default value : (): Document => document

Return the native document object

libs/fe-utilities/src/lib/regex/password.regex.ts

passwordRegex
Default value : /^(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{6,100}$/

Define a regex to validate an email address

{6,100} - Assert password is between 6 and 100 characters (?=.*[0-9]) - Assert a string has at least one number

libs/ui/validators/src/lib/validators/password/password.ts

passwordValidator
Default value : (): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } const invalidResponse: ValidationErrors = { password: { valid: false, actual: control.value, }, }; return passwordRegex.test(control.value) ? null : invalidResponse; }

Return a validator function to verify a password is valid

libs/fe-utilities/src/lib/general/to-camel-case.ts

postProcess
Default value : (x: string, pascalCase: boolean): string => (pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x)

Post process a conversion into PascalCase if necessary

libs/fe-testing/src/lib/utilities/query-for.ts

queryFor
Default value : <T>(fixture: ComponentFixture<T>, selector: string): DebugElement => fixture.debugElement.query(By.css(selector))

Helper to query a fixture for a selector

libs/fe-utilities/src/lib/browser/window.service.ts

realWindow
Default value : (): Window => window

Return the native window object

libs/fe-jwt/src/lib/jwt-token-managment/module.ts

reducers
Type : ActionReducerMap<State, any>
Default value : { jwtTokens: jwtTokenProviderReducer }

libs/fe-jwt/src/lib/jwt-token-managment/utilities/regenerate-on-retry.ts

regenerateOnRetry
Default value : <T>(obs: (() => Observable<T>)): Observable<T> => of(true).pipe( switchMap(() => obs()), )

Regenerate on retry

libs/ui/sort/src/lib/sort-header/sort-animations.ts

SORT_ANIMATION_TRANSITION
Default value : `${AnimationDurations.ENTERING } ${ AnimationCurves.STANDARD_CURVE}`
tsSortAnimations
Type : literal type
Default value : { /** * Animation that moves the sort indicator */ indicator: trigger('indicator', [ state('asc', style({ transform: 'translateY(0px)' })), // 10px is the height of the sort indicator, minus the width of the pointers state('desc', style({ transform: 'translateY(10px)' })), transition('asc <=> desc', animate(SORT_ANIMATION_TRANSITION)), ]), /** * Animation that rotates the left pointer of the indicator based on the sorting direction */ leftPointer: trigger('leftPointer', [ state('asc', style({ transform: 'rotate(-45deg)' })), state('desc', style({ transform: 'rotate(45deg)' })), transition('asc <=> desc', animate(SORT_ANIMATION_TRANSITION)), ]), /** * Animation that rotates the right pointer of the indicator based on the sorting direction */ rightPointer: trigger('rightPointer', [ state('asc', style({ transform: 'rotate(45deg)' })), state('desc', style({ transform: 'rotate(-45deg)' })), transition('asc <=> desc', animate(SORT_ANIMATION_TRANSITION)), ]), /** * Animation that moves the indicator in and out of view when sorting is enabled/disabled */ indicatorToggle: trigger('indicatorToggle', [ transition('void => asc', animate(SORT_ANIMATION_TRANSITION, keyframes([ style({ transform: 'translateY(25%)', opacity: 0, }), style({ transform: 'none', opacity: 1, }), ]))), transition('asc => void', animate(SORT_ANIMATION_TRANSITION, keyframes([ style({ transform: 'none', opacity: 1, }), style({ transform: 'translateY(-25%)', opacity: 0, }), ]))), transition('void => desc', animate(SORT_ANIMATION_TRANSITION, keyframes([ style({ transform: 'translateY(-25%)', opacity: 0, }), style({ transform: 'none', opacity: 1, }), ]))), transition('desc => void', animate(SORT_ANIMATION_TRANSITION, keyframes([ style({ transform: 'none', opacity: 1, }), style({ transform: 'translateY(25%)', opacity: 0, }), ]))), ]), }

Animations used by TsSort.

libs/ui/selection-list/src/lib/stories/data.ts

STATES
Type : State[]
Default value : [ { name: 'Alabama', abbreviation: 'AL', }, { name: 'Alaska', abbreviation: 'AK', }, { name: 'American Samoa', abbreviation: 'AS', }, { name: 'Arizona', abbreviation: 'AZ', }, { name: 'Arkansas', abbreviation: 'AR', }, { name: 'California', abbreviation: 'CA', }, { name: 'Colorado', abbreviation: 'CO', }, { name: 'Connecticut', abbreviation: 'CT', }, { name: 'Delaware', abbreviation: 'DE', }, { name: 'District Of Columbia', abbreviation: 'DC', }, { name: 'Federated States Of Micronesia', abbreviation: 'FM', }, { name: 'Florida', abbreviation: 'FL', }, { name: 'Georgia', abbreviation: 'GA', }, { name: 'Guam Gu', abbreviation: 'GU', }, { name: 'Hawaii', abbreviation: 'HI', }, { name: 'Idaho', abbreviation: 'ID', }, { name: 'Illinois', abbreviation: 'IL', }, { name: 'Indiana', abbreviation: 'IN', }, { name: 'Iowa', abbreviation: 'IA', }, { name: 'Kansas', abbreviation: 'KS', }, { name: 'Kentucky', abbreviation: 'KY', }, { name: 'Louisiana', abbreviation: 'LA', }, { name: 'Maine', abbreviation: 'ME', }, { name: 'Marshall Islands', abbreviation: 'MH', }, { name: 'Maryland', abbreviation: 'MD', }, { name: 'Massachusetts', abbreviation: 'MA', }, { name: 'Michigan', abbreviation: 'MI', }, { name: 'Minnesota', abbreviation: 'MN', }, { name: 'Mississippi', abbreviation: 'MS', }, { name: 'Missouri', abbreviation: 'MO', }, { name: 'Montana', abbreviation: 'MT', }, { name: 'Nebraska', abbreviation: 'NE', }, { name: 'Nevada', abbreviation: 'NV', }, { name: 'New Hampshire', abbreviation: 'NH', }, { name: 'New Jersey', abbreviation: 'NJ', }, { name: 'New Mexico', abbreviation: 'NM', }, { name: 'New York', abbreviation: 'NY', }, { name: 'North Carolina', abbreviation: 'NC', }, { name: 'North Dakota', abbreviation: 'ND', }, { name: 'Northern Mariana Islands', abbreviation: 'MP', }, { name: 'Ohio', abbreviation: 'OH', }, { name: 'Oklahoma', abbreviation: 'OK', }, { name: 'Oregon', abbreviation: 'OR', }, { name: 'Palau', abbreviation: 'PW', }, { name: 'Pennsylvania', abbreviation: 'PA', }, { name: 'Puerto Rico', abbreviation: 'PR', }, { name: 'Rhode Island', abbreviation: 'RI', }, { name: 'South Carolina', abbreviation: 'SC', }, { name: 'South Dakota', abbreviation: 'SD', }, { name: 'Tennessee', abbreviation: 'TN', }, { name: 'Texas', abbreviation: 'TX', }, { name: 'Utah', abbreviation: 'UT', }, { name: 'Vermont', abbreviation: 'VT', }, { name: 'Virgin Islands', abbreviation: 'VI', }, { name: 'Virginia', abbreviation: 'VA', }, { name: 'Washington', abbreviation: 'WA', }, { name: 'West Virginia', abbreviation: 'WV', }, { name: 'Wisconsin', abbreviation: 'WI', }, { name: 'Wyoming', abbreviation: 'WY', }, ]

libs/ui/utilities/src/lib/strip-control-characters/strip-control-characters.ts

stripControlCharacters
Default value : (str: string): string => str.split('').filter(x => { const controlLowerLimit = 31; const controlUpperLimit = 127; const n = x.charCodeAt(0); return n > controlLowerLimit && n < controlUpperLimit; }).join('')

Strip any control characters from a string (eg backspace or carriage return)

libs/ui/button/src/lib/button.stories.ts

themes
Default value : () => ({ template: ` <style> ts-button { margin-right: 1em } </style> <div> <ts-button [icon]="withIcon ? icon : undefined" theme="default" (clicked)="onClick($event)" >My Button</ts-button> <ts-button [icon]="withIcon ? icon : undefined" theme="secondary" (clicked)="onClick($event)" >My Button</ts-button> <ts-button [icon]="withIcon ? icon : undefined" theme="warning" (clicked)="onClick($event)" >My Button</ts-button> </div> <div> <ts-button [icon]="withIcon ? icon : undefined" theme="default" [isDisabled]="true" (clicked)="onClick($event)" >My Button</ts-button> <ts-button [icon]="withIcon ? icon : undefined" theme="secondary" [isDisabled]="true" (clicked)="onClick($event)" >My Button</ts-button> <ts-button [icon]="withIcon ? icon : undefined" theme="warning" [isDisabled]="true" (clicked)="onClick($event)" >My Button</ts-button> </div> <div> <ts-button [icon]="icon2" theme="default" format="collapsible" (clicked)="onClick($event)" >My Button</ts-button> <ts-button [icon]="icon2" theme="default" format="collapsible" [isDisabled]="true" (clicked)="onClick($event)" >My Button</ts-button> </div> <div> <ts-button [icon]="icon2" theme="secondary" format="collapsible" (clicked)="onClick($event)" >My Button</ts-button> <ts-button [icon]="icon2" theme="secondary" format="collapsible" [isDisabled]="true" (clicked)="onClick($event)" >My Button</ts-button> </div> <div> <ts-button [icon]="icon2" theme="warning" format="collapsible" (clicked)="onClick($event)" >My Button</ts-button> <ts-button [icon]="icon2" theme="warning" format="collapsible" [isDisabled]="true" (clicked)="onClick($event)" >My Button</ts-button> </div> `, props: { withIcon: boolean('With Icon', true), icon: faHome, icon2: faPlus, onClick: action('log'), }, })

libs/fe-jwt/src/lib/jwt-token-managment/utilities/token-extractor.ts

TOKEN_NOT_FOUND_ERROR
Default value : new Error('Token Not found in response')

libs/ui/file-upload/src/lib/mime-types.ts

TS_ACCEPTED_MIME_TYPES
Type : TsFileAcceptedMimeTypes[]
Default value : [ 'text/csv', 'image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'video/mp4', 'video/x-flv', 'video/webm', 'video/quicktime', 'video/mpeg', ]

Define an array of all allowed mime types for TsFileUploadComponent

libs/ui/expansion-panel/src/lib/accordion/accordion-base.ts

TS_ACCORDION
Default value : new InjectionToken<TsAccordionBase>('TS_ACCORDION')

Token used to provide a TsAccordionComponent to TsExpansionPanelComponent.

Used primarily to avoid circular imports between TsAccordionComponent and TsExpansionPanelComponent.

libs/ui/chart/src/lib/service/amcharts.service.ts

TS_AMCHARTS_TOKEN
Default value : new InjectionToken<TsAmChartsToken>('amCharts')

Create an injection token that the consumer can override with their version of amCharts

libs/ui/input/src/lib/date-adapter/date-adapter.ts

TS_DATE_FORMATS
Type : object
Default value : { parse: { dateInput: { month: 'short', year: 'numeric', day: 'numeric', }, }, display: { dateInput: 'input', monthYearLabel: { year: 'numeric', month: 'short', }, dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric', }, monthYearA11yLabel: { year: 'numeric', month: 'long', }, }, }

Define date formats to be used with the custom date adapter

libs/ui/drawer/src/lib/drawer/drawer.component.ts

TS_DRAWER_DEFAULT_COLLAPSE_SIZE
Type : string
Default value : '3.75rem'
TS_DRAWER_DEFAULT_EXPAND_SIZE
Type : string
Default value : '12.5rem'

libs/ui/expansion-panel/src/lib/panel/expansion-animations.ts

TS_EXPANSION_PANEL_ANIMATION_TIMING
Type : string
Default value : '225ms cubic-bezier(0.4,0.0,0.2,1)'

Time and timing curve for expansion panel animation

tsExpansionPanelAnimations
Type : literal type
Default value : { /** * Animation that rotates the indicator arrow */ indicatorRotate: trigger('indicatorRotate', [ state('collapsed, void', style({ transform: 'rotate(0deg)' })), state('expanded', style({ transform: 'rotate(180deg)' })), transition('expanded <=> collapsed, void => collapsed', animate(TS_EXPANSION_PANEL_ANIMATION_TIMING)), ]), /** * Animation that expands and collapses the panel trigger height */ expansionTriggerHeight: trigger('expansionHeight', [ state('collapsed, void', style({ height: '{{collapsedHeight}}' }), { params: { collapsedHeight: '48px' } }), state('expanded', style({ height: '{{expandedHeight}}' }), { params: { expandedHeight: '64px' } }), transition('expanded <=> collapsed, void => collapsed', group([ query('@indicatorRotate', animateChild(), { optional: true }), animate(TS_EXPANSION_PANEL_ANIMATION_TIMING), ])), ]), /** * Animation that expands and collapses the panel content */ bodyExpansion: trigger('bodyExpansion', [ state('collapsed, void', style({ height: '0px', visibility: 'hidden', })), state('expanded', style({ height: '*', visibility: 'visible', })), transition('expanded <=> collapsed, void => collapsed', animate(TS_EXPANSION_PANEL_ANIMATION_TIMING)), ]), }

Animations used by the Material expansion panel.

A bug in angular animation's state when ViewContainers are moved using ViewContainerRef.move() causes the animation state of moved components to become void upon exit, and not update again upon reentry into the DOM. This can lead to a situation for the expansion panel where the state of the panel is expanded or collapsed but the animation state is void.

To correctly handle animating to the next state, we animate between void and collapsed which are defined to have the same styles. Since angular animates from the current styles to the destination state's style definition, in situations where we are moving from void's styles to collapsed this acts a noop since no style values change.

In the case where angular's animation state is out of sync with the expansion panel's state, the expansion panel being expanded and angular animations being void, the animation from the expanded's effective styles (though in a void animation state) to the collapsed state will occur as expected.

Angular Bug: https://github.com/angular/angular/issues/18847

libs/ui/input/src/lib/input-value-accessor.ts

TS_INPUT_VALUE_ACCESSOR
Default value : new InjectionToken<{value: any}>('TS_INPUT_VALUE_ACCESSOR')

This token is used to inject the object whose value should be set into TsInputComponent. If none is provided, the native HTMLInputElement is used. Directives like TsAutocompleteTriggerDirective can provide themselves for this token, in order to make TsInputComponent delegate the getting and setting of the value to them.

libs/ui/logo/src/lib/logo/logo.component.ts

TS_LOGO_COLORS
Type : TS_LOGO_COLOR[]
Default value : [ 'white', 'black', 'gray', ]

An array of supported logo colors.

TS_LOGO_TYPES
Type : TS_LOGO_TYPE[]
Default value : [ 'full-account-hub', 'full-gradient', 'full-solid', 'mark-gradient', 'mark-solid', ]

An array of supported logo types.

libs/ui/sort/src/lib/sort-header/sort-header-intl.ts

TS_SORT_HEADER_INTL_PROVIDER
Type : object
Default value : { // If there is already an TsSortHeaderIntl available, use that. Otherwise, provide a new one. provide: TsSortHeaderIntl, deps: [[new Optional(), new SkipSelf(), TsSortHeaderIntl]], useFactory: TS_SORT_HEADER_INTL_PROVIDER_FACTORY, }

TsSortHeaderIntl provider declaration

TS_SORT_HEADER_INTL_PROVIDER_FACTORY
Default value : (parentIntl: TsSortHeaderIntl) => parentIntl || new TsSortHeaderIntl()

Factory to return an instance of TsSortHeaderIntl

libs/ui/chart/src/lib/chart-type-check.ts

tsChartChordTypeCheck
Default value : (chart: TsChart): chart is am4charts.ChordDiagram => chart.className === 'ChordDiagram'

Coerce the type to ChordDiagram

tsChartMapTypeCheck
Default value : (chart: TsChart): chart is am4maps.MapChart => chart.className === 'MapChart'

Coerce the type to MapChart

tsChartPieTypeCheck
Default value : (chart: TsChart): chart is am4charts.PieChart => chart.className === 'PieChart'

Coerce the type to PieChart

tsChartRadarTypeCheck
Default value : (chart: TsChart): chart is am4charts.RadarChart => chart.className === 'RadarChart'

Coerce the type to RadarChart

tsChartSankeyTypeCheck
Default value : (chart: TsChart): chart is am4charts.SankeyDiagram => chart.className === 'SankeyDiagram'

Coerce the type to SankeyDiagram

tsChartTreeTypeCheck
Default value : (chart: TsChart): chart is am4charts.TreeMap => chart.className === 'TreeMap'

Coerce the type to TreeMap

tsChartXYTypeCheck
Default value : (chart: TsChart): chart is am4charts.XYChart => chart.className === 'XYChart'

Coerce the type to XYChart

libs/ui/chart/src/lib/chart/chart.component.ts

tsChartVisualizationOptions
Type : ReadonlyArray<TsChartVisualizationOptions>
Default value : [ 'xy', 'pie', 'map', 'radar', 'tree', 'sankey', 'chord', ]

libs/ui/drawer/src/lib/drawer/drawer-animations.ts

tsDrawerAnimations
Type : literal type
Default value : { // Animation that expands and collapses a drawer. transformDrawer: trigger('transform', [ state('open, open-instant', style({ transform: 'none', visibility: 'visible', width: '{{ expandedSize }}', }), { params: { expandedSize: '12.5rem' } }), state('void', style({ 'box-shadow': 'none', 'visibility': 'visible', 'width': '{{ collapsedSize }}', }), { params: { collapsedSize: '3.75rem' } }), state('void-shadow', style({ visibility: 'visible', width: '{{ collapsedSize }}', }), { params: { collapsedSize: '3.75rem' } }), transition('void => open-instant', animate('0ms')), transition('void <=> open, open-instant => void, void-shadow <=> open, open-instant => void-shadow', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')), ]), }

Animations used by the TsDrawerComponent.

libs/ui/icon/src/lib/icon/icon.component.ts

tsIconSizes
Type : ReadonlyArray<string>
Default value : [ 'xs', 'sm', 'lg', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x', ]

libs/ui/popover/src/lib/popover-options.ts

tsPopoverPositions
Type : []
Default value : [ 'top', 'bottom', 'left', 'right', 'top-start', 'bottom-start', 'right-start', 'top-end', 'bottom-end', 'left-end', 'right-end', 'top-end', 'bottom-end', 'left-end', 'right-end', 'auto', 'auto-start', 'auto-end', ]

List of accepted positions

libs/ui/select/src/lib/select-animations.ts

tsSelectAnimations
Type : literal type
Default value : { /** * This animation transforms the select's overlay panel on and off the page. * * When the panel is attached to the DOM, it expands its width by the amount of padding, scales it * up to 100% on the Y axis, fades in its border, and translates slightly up and to the * side to ensure the option text correctly overlaps the trigger text. * * When the panel is removed from the DOM, it simply fades out linearly. */ transformPanel: trigger('transformPanel', [ state('void', style({ transform: 'scaleY(0.8)', minWidth: '100%', opacity: 0, })), state('showing', style({ opacity: 1, minWidth: 'calc(100% + 32px)', transform: 'scaleY(1)', })), state('showing-multiple', style({ opacity: 1, minWidth: 'calc(100% + 24px)', transform: 'scaleY(1)', })), transition('void => *', animate('120ms cubic-bezier(0, 0, 0.2, 1)')), transition('* => void', animate('100ms 25ms linear', style({ opacity: 0 }))), ]), }

The defined panel animations for the TsSelectComponent

libs/ui/utilities/src/lib/types/style-theme.types.ts

tsStyleThemeTypesArray
Type : TsStyleThemeTypes[]
Default value : ['primary', 'accent', 'warn']

An array of the allowed TsStyleThemeTypes for checking values

libs/ui/table/src/lib/column/column.ts

tsTableColumnAlignmentTypesArray
Type : TsTableColumnAlignment[]
Default value : [ 'left', 'center', 'right', ]

An array of the allowed TsTableColumnAlignment for checking values

libs/ui/tabs/src/lib/body/tab-animations.ts

tsTabsAnimations
Type : literal type
Default value : { // This animation translates a tab along the X axis translateTab: trigger('translateTab', [ // Note: transitions to `none` instead of 0, because some browsers might blur the content. state('center, void, left-origin-center, right-origin-center', style({ transform: 'none' })), // NOTE: If the tab is either on the left or right, we additionally add a `min-height` of 1px in order to ensure that the element has a // height before its state changes. This is necessary because Chrome does seem to skip the transition in RTL mode if the element does // not have a static height and is not rendered. See related issue: https://github.com/angular/material2/issues/9465 state( 'left', style({ minHeight: '1px', opacity: 0, transform: 'translate3d(-50%, 0, 0)', }), ), state( 'right', style({ opacity: 0, minHeight: '1px', transform: 'translate3d(50%, 0, 0)', }), ), transition( '* => left, * => right, left => center, right => center', animate('200ms cubic-bezier(0.35, 0, 0.25, 1)'), ), transition('void => left-origin-center', [ style({ transform: 'translate3d(-100%, 0, 0)' }), animate('200ms cubic-bezier(0.35, 0, 0.25, 1)'), ]), transition('void => right-origin-center', [ style({ transform: 'translate3d(100%, 0, 0)' }), animate('200ms cubic-bezier(0.35, 0, 0.25, 1)'), ]), ]), }

Animations used by TsTabCollectionComponent

libs/ui/spacing/src/lib/vertical/vertical-spacing.directive.ts

tsVerticalSpacingTypes
Type : []
Default value : [ 'small--2', 'small--1', 'small--0', 'none', 'default--0', 'large--0', 'large--1', 'large--2', 'large--3', 'large--4', 'large--5', 'large--6', ]

libs/fe-utilities/src/lib/general/define-type.ts

typeCache
Type : literal type
Default value : {}

Define the typeCache which will hold all action types for the entire application

libs/fe-utilities/src/lib/general/until-component-destroyed.ts

untilComponentDestroyed
Default value : <T>(component: WithOnDestroy): (source: Observable<T>) => Observable<T> => (source: Observable<T>) => source.pipe(takeUntil(componentDestroyed(component)))

A pipe-able operator to unsubscribe during OnDestroy lifecycle event

libs/ui/validators/src/lib/validators/uppercase/uppercase.ts

uppercaseValidator
Default value : (uppercaseMin?: number): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } uppercaseMin = uppercaseMin ? uppercaseMin : 1; const invalidResponse: ValidationErrors = { uppercase: { valid: false, actual: control.value, uppercase: uppercaseMin, }, }; const regex = createContainsUppercaseRegex(uppercaseMin); return regex.test(control.value) ? null : invalidResponse; }

Return a validator function to verify that number of uppercase letters is satisfied

libs/fe-utilities/src/lib/regex/url-optional-protocol.regex.ts

urlOptionalProtocolRegex
Default value : new RegExp( '^' // protocol identifier + '(?:(?:https?|ftp)://)?' // user:pass authentication + '(?:\\S+(?::\\S*)?@)?' + '(?:' // IP address exclusion // private & local networks + '(?!(?:10|127)(?:\\.\\d{1,3}){3})' + '(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})' + '(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})' // IP address dotted notation octets // excludes loopback network 0.0.0.0 // excludes reserved space >= 224.0.0.0 // excludes network & broacast addresses // (first & last IP address of each class) + '(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])' + '(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}' + '(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))' + '|' // host name + '(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)' // domain name + '(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*' // TLD identifier + '(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))' // TLD may end with dot + '\\.?' + ')' // port number + '(?::\\d{2,5})?' // resource path + '(?:[/?#]\\S*)?' + '$', 'i', )

Define a regex to validate a URL

Discussion: https://gist.github.com/dperini/729294 NOTE: This is identical to our standard URL regex with the exception that the protocol is optional.

libs/fe-utilities/src/lib/regex/url.regex.ts

urlRegex
Default value : new RegExp( '^' // protocol identifier + '(?:(?:https?|ftp)://)' // user:pass authentication + '(?:\\S+(?::\\S*)?@)?' + '(?:' // IP address exclusion // private & local networks + '(?!(?:10|127)(?:\\.\\d{1,3}){3})' + '(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})' + '(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})' // IP address dotted notation octets // excludes loopback network 0.0.0.0 // excludes reserved space >= 224.0.0.0 // excludes network & broacast addresses // (first & last IP address of each class) + '(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])' + '(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}' + '(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))' + '|' // host name + '(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)' // domain name + '(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*' // TLD identifier + '(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))' // TLD may end with dot + '\\.?' + ')' // port number + '(?::\\d{2,5})?' // resource path + '(?:[/?#]\\S*)?' + '$', 'i', )

Define a regex to validate a URL

Discussion: https://gist.github.com/dperini/729294

libs/ui/validators/src/lib/validators/url/url.ts

urlValidator
Default value : (): ValidatorFn => (control: AbstractControl): ValidationErrors | null => { // Allow optional controls by not validating empty values if (!control || !control.value) { return null; } const invalidResponse: ValidationErrors = { url: { valid: false, actual: control.value, }, }; return urlRegex.test(control.value) ? null : invalidResponse; }

Return a validator function to verify that a url is valid

libs/fe-utilities/src/lib/regex/usa-phone.regex.ts

usaPhoneRegex
Default value : /\D*([2-9]\d{2})(\D*)([2-9]\d{2})(\D*)(\d{4})\D*/

Define a regex to validate US phone numbers

libs/fe-utilities/src/lib/regex/usa-postal.regex.ts

usaPostalRegex
Default value : /^[0-9]{5}(-[0-9]{4})?$/

Define a regex to verify a US postal code

Matches 12345 and 12345-1234

libs/fe-utilities/src/lib/regex/uuid.regex.ts

uuidRegex
Default value : new RegExp(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/)

Define a regex to test for a canonically formatted UUID that is Version 1 through 5 and is the appropriate Variant as per RFC4122.

Matches: f4ee5eed-ed19-3681-713e-907a23ed7858

result-matching ""

    No results matching ""