@lifecorner/angular-ui-kit 3.21.0 → 3.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/lifecorner-angular-ui-kit-card.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-card.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-code-block.mjs +3 -3
- package/fesm2022/lifecorner-angular-ui-kit-code-block.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-copy-field.mjs +3 -3
- package/fesm2022/lifecorner-angular-ui-kit-copy-field.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-dependency-viewer.mjs +11 -11
- package/fesm2022/lifecorner-angular-ui-kit-dependency-viewer.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-diff-viewer.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-diff-viewer.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-file-upload.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-file-upload.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-icon.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-icon.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-icons.mjs +80 -2
- package/fesm2022/lifecorner-angular-ui-kit-icons.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-internal-icon-set.mjs +34 -2
- package/fesm2022/lifecorner-angular-ui-kit-internal-icon-set.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-kanban-board.mjs +9 -9
- package/fesm2022/lifecorner-angular-ui-kit-kanban-board.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-log-viewer.mjs +19 -5
- package/fesm2022/lifecorner-angular-ui-kit-log-viewer.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-markdown.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-markdown.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-notification-center.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-notification-center.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-pipeline.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-pipeline.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-progress-bar.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-progress-bar.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-rating.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-rating.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-search-input.mjs +3 -3
- package/fesm2022/lifecorner-angular-ui-kit-search-input.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-status-dot.mjs +2 -2
- package/fesm2022/lifecorner-angular-ui-kit-status-dot.mjs.map +1 -1
- package/fesm2022/lifecorner-angular-ui-kit-tree-view.mjs +3 -1
- package/fesm2022/lifecorner-angular-ui-kit-tree-view.mjs.map +1 -1
- package/package.json +1 -1
- package/src/styles/theme-contrast.spec.ts +239 -0
- package/types/lifecorner-angular-ui-kit-icons.d.ts +14 -1
|
@@ -657,3 +657,242 @@ describe('Component pairings of 3.20 (request 027)', () => {
|
|
|
657
657
|
});
|
|
658
658
|
});
|
|
659
659
|
});
|
|
660
|
+
|
|
661
|
+
// Request 029 (3.21.1): the follow-up candidates of 027 design §5. Status
|
|
662
|
+
// colours used as text, icon, glyph, border or progress fill read the inks
|
|
663
|
+
// --color-on-<v>-subtle in both themes (WCAG 1.4.3 4.5:1 for text, 1.4.11 3:1
|
|
664
|
+
// for graphics). The shared fills, rails and line tints stay; the card and
|
|
665
|
+
// notification chips sit on --color-<v>-subtle (design 029 D-1).
|
|
666
|
+
describe('Component pairings of 3.21.1 (request 029)', () => {
|
|
667
|
+
const lib = (path: string) => resolve(__dirname, '../lib', path);
|
|
668
|
+
const sheets = {
|
|
669
|
+
nc: compile(lib('notification-center/notification-center.component.scss')).css,
|
|
670
|
+
card: compile(lib('card/card.component.scss')).css,
|
|
671
|
+
markdown: compile(lib('markdown/markdown.component.scss')).css,
|
|
672
|
+
dot: compile(lib('status-dot/status-dot.component.scss')).css,
|
|
673
|
+
pipeline: compile(lib('pipeline/pipeline.component.scss')).css,
|
|
674
|
+
upload: compile(lib('file-upload/file-upload.component.scss')).css,
|
|
675
|
+
rating: compile(lib('rating/rating.component.scss')).css,
|
|
676
|
+
log: compile(lib('log-viewer/log-viewer.component.scss')).css,
|
|
677
|
+
diff: compile(lib('diff-viewer/diff-viewer.component.scss')).css,
|
|
678
|
+
dep: compile(lib('dependency-viewer/dependency-viewer.component.scss')).css,
|
|
679
|
+
kanban: compile(lib('kanban-board/kanban-board.component.scss')).css,
|
|
680
|
+
progress: compile(lib('progress-bar/progress-bar.component.scss')).css,
|
|
681
|
+
};
|
|
682
|
+
type Sheet = keyof typeof sheets;
|
|
683
|
+
const rulesOf = (css: string) => [...css.matchAll(/([^{}]+)\{([^{}]*)\}/g)].map((m) => ({ selector: m[1].trim(), body: m[2] }));
|
|
684
|
+
const rule = (sheet: Sheet, selector: string) => {
|
|
685
|
+
const found = rulesOf(sheets[sheet]).filter((r) => r.selector === selector);
|
|
686
|
+
expect(found).toHaveLength(1);
|
|
687
|
+
return found[0].body;
|
|
688
|
+
};
|
|
689
|
+
/** The declarations of a rule body, property → value. */
|
|
690
|
+
const decls = (body: string): Record<string, string> =>
|
|
691
|
+
Object.fromEntries([...body.matchAll(/([\w-]+):\s*([^;]+);/g)].map((m) => [m[1], m[2].trim()]));
|
|
692
|
+
const ink = (v: string) => `var(--color-on-${v}-subtle)`;
|
|
693
|
+
const sub = (v: string) => `var(--color-${v}-subtle)`;
|
|
694
|
+
const fills = (sheet: Sheet, selector: string) => decls(rule(sheet, selector));
|
|
695
|
+
|
|
696
|
+
const swaps: [Sheet, string, Record<string, string>][] = [
|
|
697
|
+
...(['info', 'success', 'warning', 'error'] as const).map((v): [Sheet, string, Record<string, string>] => ['nc', `.lc-nc__item-icon--${v}`, { color: ink(v) }]),
|
|
698
|
+
['nc', '.lc-nc__item-priority--high', { background: sub('warning'), color: ink('warning') }],
|
|
699
|
+
['nc', '.lc-nc__item-priority--urgent', { background: sub('error'), color: ink('error') }],
|
|
700
|
+
...(['success', 'warning', 'error'] as const).map((v): [Sheet, string, Record<string, string>] => ['card', `.card__badge--${v}`, { 'background-color': sub(v), color: ink(v) }]),
|
|
701
|
+
['markdown', '.lc-markdown__mermaid-error', { color: ink('error') }],
|
|
702
|
+
['dot', '.lc-status-dot--done', { color: ink('success') }],
|
|
703
|
+
['dot', '.lc-status-dot--wait', { color: ink('warning') }],
|
|
704
|
+
['dot', '.lc-status-dot--blocked', { color: ink('error') }],
|
|
705
|
+
['pipeline', '.lc-pipeline__step--warning .lc-pipeline__node', { 'border-color': ink('warning'), color: ink('warning') }],
|
|
706
|
+
['pipeline', '.lc-pipeline__step--error .lc-pipeline__node', { 'border-color': ink('error'), color: ink('error') }],
|
|
707
|
+
['pipeline', '.lc-pipeline__step--complete .lc-pipeline__node', { 'background-color': 'var(--color-primary-500)', color: 'var(--color-surface)' }],
|
|
708
|
+
['upload', '.file-upload__file-remove:hover', { background: 'rgba(157, 14, 14, 0.18)', color: ink('error') }],
|
|
709
|
+
['rating', '.rating__icon--filled', { color: ink('warning') }],
|
|
710
|
+
['rating', '.rating__icon-fill', { color: ink('warning') }],
|
|
711
|
+
['log', '.lc-log-viewer__line--info .lc-log-viewer__level', { color: ink('info') }],
|
|
712
|
+
['log', '.lc-log-viewer__line--warn .lc-log-viewer__level', { color: ink('warning') }],
|
|
713
|
+
['log', '.lc-log-viewer__line--error .lc-log-viewer__level', { color: ink('error') }],
|
|
714
|
+
['log', '.lc-log-viewer__level-pill--error', { 'background-color': 'rgba(157, 14, 14, 0.18)', color: ink('error') }],
|
|
715
|
+
['log', '.lc-log-viewer__level-pill--warn', { 'background-color': 'rgba(225, 160, 64, 0.18)', color: ink('warning') }],
|
|
716
|
+
['log', '.lc-log-viewer__level-pill--active', { 'box-shadow': 'inset 0 0 0 1px currentColor' }],
|
|
717
|
+
['diff', '.lc-diff__stat--add', { color: ink('success') }],
|
|
718
|
+
['diff', '.lc-diff__stat--del', { color: ink('error') }],
|
|
719
|
+
['diff', '.lc-diff__line--added .lc-diff__prefix', { color: ink('success') }],
|
|
720
|
+
['diff', '.lc-diff__line--removed .lc-diff__prefix', { color: ink('error') }],
|
|
721
|
+
...(['success', 'warning', 'error'] as const).map((v): [Sheet, string, Record<string, string>] => ['dep', `.dep-viewer__detail-status--${v}`, { color: ink(v) }]),
|
|
722
|
+
['kanban', '.lc-kanban__column-limit--over', { color: ink('error') }],
|
|
723
|
+
...(['success', 'warning', 'error', 'info'] as const).flatMap((v): [Sheet, string, Record<string, string>][] => [
|
|
724
|
+
['progress', `.progress-bar--${v} .progress-bar__fill`, { 'background-color': ink(v) }],
|
|
725
|
+
['progress', `.progress-bar-circular--${v} .progress-bar-circular__fill`, { stroke: ink(v) }],
|
|
726
|
+
]),
|
|
727
|
+
];
|
|
728
|
+
|
|
729
|
+
it.each(swaps)('AC-1…10: %s %s reads the status ink (no raw colour)', (sheet, selector, expectedDecls) => {
|
|
730
|
+
const found = fills(sheet, selector);
|
|
731
|
+
for (const [property, value] of Object.entries(expectedDecls)) expect(found[property]).toBe(value);
|
|
732
|
+
});
|
|
733
|
+
|
|
734
|
+
it('AC-4: the notification type icons carry no hex fallback any more', () => {
|
|
735
|
+
expect(sheets.nc).not.toMatch(/#3b82f6|#22c55e|#f59e0b|#ef4444/i);
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
it('D-2: the level pills stay at full opacity; the pressed pill gets an outline in forced colours', () => {
|
|
739
|
+
expect(fills('log', '.lc-log-viewer__level-pill').opacity).toBeUndefined();
|
|
740
|
+
expect(fills('log', '.lc-log-viewer__level-pill--active').opacity).toBeUndefined();
|
|
741
|
+
expect(sheets.log).toMatch(
|
|
742
|
+
/@media \(forced-colors: active\) \{\s*\.lc-log-viewer__level-pill--active:not\(:focus-visible\) \{\s*outline: 2px solid Highlight;\s*outline-offset: 1px;\s*\}/,
|
|
743
|
+
);
|
|
744
|
+
});
|
|
745
|
+
|
|
746
|
+
it('AC-10: the progress track is unchanged; primary and secondary stay raw', () => {
|
|
747
|
+
// The base rule (the forced-colours block repeats the selector with an outline).
|
|
748
|
+
expect(sheets.progress).toMatch(/\n\.progress-bar__track \{\s*flex: 1;\s*background-color: var\(--color-surface-hover\);/);
|
|
749
|
+
expect(fills('progress', '.progress-bar--primary .progress-bar__fill')['background-color']).toMatch(/^#[0-9a-f]{6}$/i);
|
|
750
|
+
expect(fills('progress', '.progress-bar--secondary .progress-bar__fill')['background-color']).toMatch(/^#[0-9a-f]{6}$/i);
|
|
751
|
+
});
|
|
752
|
+
|
|
753
|
+
it('AC-9: kanban priorities, dependency relations, arrows and node borders read the inks', () => {
|
|
754
|
+
const source = (path: string) => readFileSync(lib(path), 'utf8');
|
|
755
|
+
const kanban = source('kanban-board/kanban-board.component.ts');
|
|
756
|
+
const depTs = source('dependency-viewer/dependency-viewer.component.ts');
|
|
757
|
+
const depHtml = source('dependency-viewer/dependency-viewer.component.html');
|
|
758
|
+
for (const text of [kanban, depTs, depHtml]) {
|
|
759
|
+
expect(text).not.toMatch(/--color-(success|warning|error|info)-default/);
|
|
760
|
+
expect(text).not.toMatch(/#3b82f6/i);
|
|
761
|
+
}
|
|
762
|
+
const priorities: [string, string][] = [['critical', 'error'], ['high', 'warning'], ['medium', 'info'], ['low', 'success']];
|
|
763
|
+
for (const [priority, v] of priorities) {
|
|
764
|
+
expect(kanban).toContain(`case '${priority}': return '${ink(v)}';`);
|
|
765
|
+
}
|
|
766
|
+
const relations: [string, string][] = [['blocks', 'error'], ['references', 'info'], ['requires', 'warning'], ['implements', 'success']];
|
|
767
|
+
for (const [relation, v] of relations) {
|
|
768
|
+
expect(depTs).toMatch(new RegExp(`${relation}:\\s*\\{ color: '${ink(v).replace(/[()]/g, '\\$&')}'`));
|
|
769
|
+
expect(depHtml).toMatch(new RegExp(`<marker id="arrow-${relation}"[^>]*><path [^>]*fill="${ink(v).replace(/[()]/g, '\\$&')}"/>`));
|
|
770
|
+
}
|
|
771
|
+
for (const v of ['success', 'warning', 'error']) {
|
|
772
|
+
expect(depTs).toMatch(new RegExp(`${v}:\\s*\\{ bg: '[^']+', border: '${ink(v).replace(/[()]/g, '\\$&')}'`));
|
|
773
|
+
}
|
|
774
|
+
});
|
|
775
|
+
|
|
776
|
+
/**
|
|
777
|
+
* Design 029 §5, per palette [light, dark]: the minimum over every listed
|
|
778
|
+
* element and its real backgrounds. Text 4.85 L (card success chip) and 4.60
|
|
779
|
+
* D (NC high on the panel top, card warning on surface-2); graphics 3.52 L
|
|
780
|
+
* (diff +, dependency success border) and 4.83 D (NC warning icon on an
|
|
781
|
+
* unread row). F-1: the NC high chip on an unread row in dark stays 3.67.
|
|
782
|
+
*/
|
|
783
|
+
const expected = { text: [4.85, 4.6], graphic: [3.52, 4.83], ncUnread: [5.52, 3.67], completeGlyph: [4.36, 9.12] };
|
|
784
|
+
const floor = (n: number) => Math.floor(n * 100) / 100;
|
|
785
|
+
|
|
786
|
+
/**
|
|
787
|
+
* Design 029 §2/§5 (r1, review finding 1): the terminal is always dark, so
|
|
788
|
+
* its levels use its own palette in both themes. The nested block of 3.21.0
|
|
789
|
+
* compiled to `.lc-log-viewer__line--<lv> .lc-log-viewer--terminal
|
|
790
|
+
* .lc-log-viewer__level` (a line outside the terminal), never matched, and
|
|
791
|
+
* left the terminal levels on the theme's colours (light ink: warn 2.40).
|
|
792
|
+
*/
|
|
793
|
+
const terminalLevels: [string, string, number][] = [
|
|
794
|
+
['debug', '#9399b2', 5.81],
|
|
795
|
+
['info', '#89b4fa', 7.78],
|
|
796
|
+
['warn', '#f9e2af', 11.43],
|
|
797
|
+
['error', '#f38ba8', 6.19],
|
|
798
|
+
];
|
|
799
|
+
|
|
800
|
+
it('AC-9 (r1): the terminal levels read the terminal palette at (0,3,0); the dead selector shape is gone', () => {
|
|
801
|
+
for (const [lv, hexValue] of terminalLevels) {
|
|
802
|
+
// Three classes beat the log variant's `.lc-log-viewer__line--<lv> .lc-log-viewer__level` (0,2,0).
|
|
803
|
+
expect(fills('log', `.lc-log-viewer--terminal .lc-log-viewer__line--${lv} .lc-log-viewer__level`)).toEqual({ color: hexValue });
|
|
804
|
+
}
|
|
805
|
+
expect(sheets.log).not.toMatch(/\.lc-log-viewer__line--[\w-]+ \.lc-log-viewer--terminal/);
|
|
806
|
+
});
|
|
807
|
+
|
|
808
|
+
it('AC-9 (r1): the terminal levels reach 4.5:1 on the terminal and its warn and error line tints, in both themes', () => {
|
|
809
|
+
const terminal = parse(fills('log', '.lc-log-viewer--terminal')['background-color']);
|
|
810
|
+
const lineTint = (lv: string) => over(parse(fills('log', `.lc-log-viewer--terminal .lc-log-viewer__line--${lv}`)['background-color']), terminal);
|
|
811
|
+
const bases: Record<string, Rgba> = { debug: terminal, info: terminal, warn: lineTint('warn'), error: lineTint('error') };
|
|
812
|
+
for (const [lv, hexValue, expectedRatio] of terminalLevels) {
|
|
813
|
+
const level = ratio(hexValue, bases[lv]);
|
|
814
|
+
expect(floor(level)).toBe(expectedRatio);
|
|
815
|
+
expect(level).toBeGreaterThanOrEqual(4.5);
|
|
816
|
+
}
|
|
817
|
+
});
|
|
818
|
+
|
|
819
|
+
describe.each(palettes.map(([name, tokens], i) => [name, tokens, i] as const))('%s palette', (_palette, tokens, i) => {
|
|
820
|
+
const c = (name: string) => color(tokens, name);
|
|
821
|
+
const S = c('--color-surface');
|
|
822
|
+
const S2 = c('--color-surface-2');
|
|
823
|
+
const BG = c('--color-background');
|
|
824
|
+
const LOW = c('--color-background-low');
|
|
825
|
+
const SUN = c('--color-surface-sunken');
|
|
826
|
+
const TILE = c('--color-muted-tile');
|
|
827
|
+
const hov = (base: Rgba) => over(c('--color-surface-hover'), base);
|
|
828
|
+
const sel = (base: Rgba) => over(c('--color-surface-selected'), base);
|
|
829
|
+
/** A token or literal from a rule body, composited over `base`. */
|
|
830
|
+
const layer = (value: string, base: Rgba) => {
|
|
831
|
+
const ref = value.match(/^var\((--[\w-]+)\)$/);
|
|
832
|
+
return over(ref ? c(ref[1]) : parse(value), base);
|
|
833
|
+
};
|
|
834
|
+
const inkOf = (v: string) => c(`--color-on-${v}-subtle`);
|
|
835
|
+
const lowest = (fg: Rgba, bases: Rgba[]) => Math.min(...bases.map((bg) => ratio(over(fg, bg), bg)));
|
|
836
|
+
|
|
837
|
+
const panel = [S2, S, hov(S)];
|
|
838
|
+
const unread = [sel(S2), sel(S)];
|
|
839
|
+
const chip = (sheet: Sheet, selector: string, v: string, bases: Rgba[]) => {
|
|
840
|
+
const d = fills(sheet, selector);
|
|
841
|
+
return lowest(inkOf(v), bases.map((b) => layer(d.background ?? d['background-color'], b)));
|
|
842
|
+
};
|
|
843
|
+
const tint = (sheet: Sheet, selector: string, property: string, base: Rgba) => layer(fills(sheet, selector)[property], base);
|
|
844
|
+
|
|
845
|
+
const text = () => [
|
|
846
|
+
chip('nc', '.lc-nc__item-priority--high', 'warning', panel),
|
|
847
|
+
chip('nc', '.lc-nc__item-priority--urgent', 'error', panel),
|
|
848
|
+
// A selected card's background is --color-surface-selected over the page.
|
|
849
|
+
...(['success', 'warning', 'error'] as const).map((v) => chip('card', `.card__badge--${v}`, v, [S, S2, hov(S), sel(BG), TILE])),
|
|
850
|
+
lowest(inkOf('error'), [BG, S, S2, LOW, SUN]),
|
|
851
|
+
lowest(inkOf('info'), [S, hov(S), tint('log', '.lc-log-viewer__line:hover', 'background-color', S)]),
|
|
852
|
+
lowest(inkOf('warning'), [tint('log', '.lc-log-viewer--log .lc-log-viewer__line--warn', 'background-color', S)]),
|
|
853
|
+
lowest(inkOf('error'), [tint('log', '.lc-log-viewer--log .lc-log-viewer__line--error', 'background-color', S)]),
|
|
854
|
+
lowest(inkOf('warning'), [tint('log', '.lc-log-viewer__level-pill--warn', 'background-color', S)]),
|
|
855
|
+
lowest(inkOf('error'), [tint('log', '.lc-log-viewer__level-pill--error', 'background-color', S)]),
|
|
856
|
+
lowest(inkOf('success'), [S2]),
|
|
857
|
+
lowest(inkOf('error'), [S2]),
|
|
858
|
+
...['success', 'warning', 'error', 'info'].map((v) => lowest(inkOf(v), [S, S2])),
|
|
859
|
+
lowest(inkOf('error'), [layer('var(--color-error-50)', S), layer('var(--color-error-50)', BG)]),
|
|
860
|
+
];
|
|
861
|
+
|
|
862
|
+
const graphic = () => [
|
|
863
|
+
...['success', 'warning', 'error', 'info'].map((v) => lowest(inkOf(v), [...panel, ...unread])),
|
|
864
|
+
...['success', 'warning', 'error'].map((v) => lowest(inkOf(v), [S, BG, S2])),
|
|
865
|
+
lowest(inkOf('error'), [tint('upload', '.file-upload__file-remove:hover', 'background', S2)]),
|
|
866
|
+
...['success', 'error'].map((v) => lowest(inkOf(v), [layer(`var(--color-${v}-50)`, S), layer(`var(--color-${v}-50)`, BG)])),
|
|
867
|
+
...['success', 'warning', 'error'].map((v) => lowest(inkOf(v), [layer(`var(--color-${v}-50)`, S), S])),
|
|
868
|
+
...['success', 'warning', 'error', 'info'].map((v) => lowest(inkOf(v), [S])),
|
|
869
|
+
...['success', 'warning', 'error', 'info'].map((v) => lowest(inkOf(v), [hov(S), hov(BG), hov(S2)])),
|
|
870
|
+
];
|
|
871
|
+
|
|
872
|
+
it('AC-1/2/3/9: every listed status text reaches 4.5:1 on its real backgrounds', () => {
|
|
873
|
+
const min = Math.min(...text());
|
|
874
|
+
expect(floor(min)).toBe(expected.text[i]);
|
|
875
|
+
expect(min).toBeGreaterThanOrEqual(4.5);
|
|
876
|
+
});
|
|
877
|
+
|
|
878
|
+
it('AC-4…10: every listed status icon, glyph, border and progress fill reaches 3:1', () => {
|
|
879
|
+
const min = Math.min(...graphic());
|
|
880
|
+
expect(floor(min)).toBe(expected.graphic[i]);
|
|
881
|
+
expect(min).toBeGreaterThanOrEqual(3);
|
|
882
|
+
});
|
|
883
|
+
|
|
884
|
+
it('D-4: the pipeline complete check reaches 3:1 on its node fill', () => {
|
|
885
|
+
const glyph = ratio(c('--color-surface'), c('--color-primary-500'));
|
|
886
|
+
expect(floor(glyph)).toBe(expected.completeGlyph[i]);
|
|
887
|
+
expect(glyph).toBeGreaterThanOrEqual(3);
|
|
888
|
+
});
|
|
889
|
+
|
|
890
|
+
it('F-1 (known): the NC priority chips on an unread row', () => {
|
|
891
|
+
const min = Math.min(
|
|
892
|
+
chip('nc', '.lc-nc__item-priority--high', 'warning', unread),
|
|
893
|
+
chip('nc', '.lc-nc__item-priority--urgent', 'error', unread),
|
|
894
|
+
);
|
|
895
|
+
expect(floor(min)).toBe(expected.ncUnread[i]);
|
|
896
|
+
});
|
|
897
|
+
});
|
|
898
|
+
});
|
|
@@ -136,8 +136,21 @@ export declare const ICON_WALLET: LcIconDefinition;
|
|
|
136
136
|
export declare const ICON_BUILDING_BANK: LcIconDefinition;
|
|
137
137
|
export declare const ICON_SHIELD_LOCK: LcIconDefinition;
|
|
138
138
|
export declare const ICON_SHIELD_LOCK_SOLID: LcIconDefinition;
|
|
139
|
+
export declare const ICON_SEARCH: LcIconDefinition;
|
|
140
|
+
export declare const ICON_SEARCH_SOLID: LcIconDefinition;
|
|
141
|
+
export declare const ICON_LOCK: LcIconDefinition;
|
|
142
|
+
export declare const ICON_LOCK_SOLID: LcIconDefinition;
|
|
143
|
+
export declare const ICON_DEVICE_TABLET: LcIconDefinition;
|
|
144
|
+
export declare const ICON_DEVICE_TABLET_SOLID: LcIconDefinition;
|
|
145
|
+
export declare const ICON_PLAYER_PLAY: LcIconDefinition;
|
|
146
|
+
export declare const ICON_PLAYER_PLAY_SOLID: LcIconDefinition;
|
|
147
|
+
export declare const ICON_PLAYER_PAUSE: LcIconDefinition;
|
|
148
|
+
export declare const ICON_PLAYER_PAUSE_SOLID: LcIconDefinition;
|
|
149
|
+
export declare const ICON_CLIPBOARD: LcIconDefinition;
|
|
150
|
+
export declare const ICON_CLIPBOARD_SOLID: LcIconDefinition;
|
|
151
|
+
export declare const ICON_ARROW_DOWN: LcIconDefinition;
|
|
139
152
|
/**
|
|
140
|
-
* Every glyph above (
|
|
153
|
+
* Every glyph above (150): `provideLcIcons(BUNDLED_ICONS)` restores the
|
|
141
154
|
* synchronous rendering of 3.5.1 for every inline name, e.g. in tests or
|
|
142
155
|
* Storybook. An app that imports it bundles all of them.
|
|
143
156
|
*/
|