import { readFileSync } from 'node:fs' import { resolve } from 'node:path' import { describe, expect, it } from 'vitest' const retiredSelectors: Record = { 'audit-trail.css': [ 'mint-audit-trail__empty', ], 'dataframe.css': [ 'mint-dataframe__empty', 'mint-dataframe__empty-icon', 'mint-dataframe__empty-text', 'mint-dataframe__loading-spinner', ], 'dose-calculator.css': [ 'mint-dose-calculator__mw-input', ], 'experiment-data-viewer.css': [ 'mint-data-viewer__empty', ], 'experiment-popover.css': [ 'mint-experiment-popover__check-icon', 'mint-experiment-popover__divider', 'mint-experiment-popover__footer', 'mint-experiment-popover__save-btn', 'mint-experiment-popover__save-btn--loading', 'mint-experiment-popover__save-btn--success', 'mint-experiment-popover__save-hint', 'mint-experiment-popover__save-icon', 'mint-experiment-popover__spinner', ], 'experiment-selector-modal.css': [ 'mint-experiment-selector__filters', 'mint-experiment-selector__status-filter', ], 'experiment-timeline.css': [ 'mint-timeline__empty', 'mint-timeline__empty-btn', 'mint-timeline__empty-content', 'mint-timeline__empty-text', ], 'protocol-step-editor.css': [ 'mint-protocol-editor__field-row', ], 'reagent-editor.css': [ 'mint-reagent-editor__row', ], 'reagent-list.css': [ 'mint-reagent-list__empty', 'mint-reagent-list__empty-btn', 'mint-reagent-list__empty-icon', 'mint-reagent-list__empty-text', ], 'sample-hierarchy-tree.css': [ 'mint-sample-tree__empty', 'mint-sample-tree__empty-icon', 'mint-sample-tree__empty-text', 'mint-sample-tree__node--selected', ], 'sample-selector.css': [ 'mint-popover-enter-active', 'mint-popover-enter-from', 'mint-popover-leave-active', 'mint-popover-leave-to', 'mint-sample-selector__empty', 'mint-sample-selector__level-badge', 'mint-sample-selector__level-btn', 'mint-sample-selector__level-desc', 'mint-sample-selector__level-example', 'mint-sample-selector__level-info', 'mint-sample-selector__level-title', 'mint-sample-selector__popover', 'mint-sample-selector__popover-body', 'mint-sample-selector__popover-header', ], 'schedule-calendar.css': [ 'mint-schedule__grid-line', ], 'well-plate.css': [ 'mint-well-plate__well--blank', 'mint-well-plate__well--control', 'mint-well-plate__well--iqc', 'mint-well-plate__well--qc', 'mint-well-plate__well--readonly', 'mint-well-plate__well--sample', ], } const cases = Object.entries(retiredSelectors).flatMap(([file, selectors]) => selectors.map(selector => ({ file, selector })), ) function classSelectorPattern(selector: string): RegExp { const escaped = selector.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') return new RegExp(`\\.${escaped}(?![A-Za-z0-9_-])`) } describe('retired component styles', () => { it.each(cases)('should omit $selector from $file', ({ file, selector }) => { const styles = readFileSync( resolve(process.cwd(), 'src/styles/components', file), 'utf8', ) expect(styles).not.toMatch(classSelectorPattern(selector)) }) })