- web/: Vue 3 + Vite + UnoCSS + Pinia, dark tactical theme (amber/#0d1117) - AppNav, ListingCard, SearchView with filters/sort, composables (useSnipeMode, useKonamiCode, useMotion), Pinia search store - Steal shimmer, auction countdown, Snipe Mode easter egg all native in Vue - docker/web/: nginx + multi-stage Dockerfile (node build → nginx serve) - compose.yml: api (8510) + web (8509) services - Dockerfile CMD updated to uvicorn for upcoming FastAPI layer - Clean build: 0 TS errors, 380 modules
29 lines
823 B
TypeScript
29 lines
823 B
TypeScript
export interface Options {
|
|
/**
|
|
Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2).
|
|
|
|
@default true
|
|
*/
|
|
readonly ambiguousIsNarrow: boolean;
|
|
}
|
|
|
|
/**
|
|
Get the visual width of a string - the number of columns required to display it.
|
|
|
|
Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width.
|
|
|
|
@example
|
|
```
|
|
import stringWidth from 'string-width';
|
|
|
|
stringWidth('a');
|
|
//=> 1
|
|
|
|
stringWidth('古');
|
|
//=> 2
|
|
|
|
stringWidth('\u001B[1m古\u001B[22m');
|
|
//=> 2
|
|
```
|
|
*/
|
|
export default function stringWidth(string: string, options?: Options): number;
|