bestax-migrate 2.29.0 → 2.29.1
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/dist/sources/bulma-classes/class-map.d.ts +28 -5
- package/dist/sources/bulma-classes/class-map.d.ts.map +1 -1
- package/dist/sources/bulma-classes/class-map.js +40 -5
- package/dist/sources/bulma-classes/plan.d.ts +12 -5
- package/dist/sources/bulma-classes/plan.d.ts.map +1 -1
- package/dist/sources/bulma-classes/plan.js +80 -13
- package/dist/sources/bulma-classes/rules.d.ts.map +1 -1
- package/dist/sources/bulma-classes/rules.js +1 -0
- package/dist/sources/bulma-classes/transform.d.ts +2 -1
- package/dist/sources/bulma-classes/transform.d.ts.map +1 -1
- package/dist/sources/bulma-classes/transform.js +10 -6
- package/package.json +1 -1
|
@@ -6,11 +6,13 @@
|
|
|
6
6
|
* Every conversion this table allows must render exactly the HTML the raw
|
|
7
7
|
* element rendered. That is a claim about bestax, and the render tests hold
|
|
8
8
|
* it: each root, modifier and helper here is rendered through the built
|
|
9
|
-
* library and compared with the raw markup it replaces.
|
|
10
|
-
* purpose
|
|
9
|
+
* library and compared with the raw markup it replaces. The exceptions are
|
|
10
|
+
* on purpose. Font Awesome's own `<i aria-hidden="true">` alone in a `.icon`
|
|
11
11
|
* that carries nothing assistive tech reads converts to `Icon`, which writes
|
|
12
12
|
* the attribute on the `.icon` instead, since the glyph is hidden either way
|
|
13
|
-
* (see `readsGlyph`).
|
|
13
|
+
* (see `readsGlyph`). And a Bulma 0.9 helper v1 removed, which styles
|
|
14
|
+
* nothing under v1, converts as the v1 helper that does its job (see
|
|
15
|
+
* `REPLACED_IN_V1`).
|
|
14
16
|
*
|
|
15
17
|
* Data only: `scripts/gen-mcp-index.mjs` imports it directly for the MCP
|
|
16
18
|
* server's `lookup_bulma_classes`, so nothing Node cannot strip (no enums, no
|
|
@@ -301,8 +303,8 @@ export interface RootEntry {
|
|
|
301
303
|
* else, the target renders its children as given. An `<i>` that carries
|
|
302
304
|
* the `aria-hidden` the target writes, as Font Awesome's own markup does,
|
|
303
305
|
* reads too when the element carries nothing assistive tech reads: the
|
|
304
|
-
* attribute moves up onto it,
|
|
305
|
-
*
|
|
306
|
+
* attribute moves up onto it, a difference in markup a conversion makes
|
|
307
|
+
* on purpose.
|
|
306
308
|
*/
|
|
307
309
|
readonly readsGlyph?: ReadsGlyph;
|
|
308
310
|
/**
|
|
@@ -349,6 +351,12 @@ export interface RootEntry {
|
|
|
349
351
|
* no prop for them.
|
|
350
352
|
*/
|
|
351
353
|
readonly omits?: Readonly<Record<string, string>>;
|
|
354
|
+
/**
|
|
355
|
+
* Bulma styles this root's modifiers, and the classes it omits, only on
|
|
356
|
+
* the element that carries the root itself (`.image.is-64x64`), so on an
|
|
357
|
+
* element without it they do nothing, and the planner flags them.
|
|
358
|
+
*/
|
|
359
|
+
readonly modifiersNeedRoot?: boolean;
|
|
352
360
|
}
|
|
353
361
|
export declare const COLORS: readonly ["primary", "link", "info", "success", "warning", "danger", "black", "black-bis", "black-ter", "grey-darker", "grey-dark", "grey", "grey-light", "grey-lighter", "white", "white-bis", "white-ter", "light", "dark"];
|
|
354
362
|
export declare const SIZES: readonly ["0", "1", "2", "3", "4", "5", "6", "auto"];
|
|
@@ -416,6 +424,15 @@ export declare const WRAPPER_OWN_PROPS: Readonly<Record<string, readonly string[
|
|
|
416
424
|
export declare const REMOVED_IN_V1: readonly string[];
|
|
417
425
|
/** Bulma 0.9 classes v1 dropped, with what replaced them. */
|
|
418
426
|
export declare const LEGACY_09: Readonly<Record<string, string>>;
|
|
427
|
+
/**
|
|
428
|
+
* Bulma 0.9 helpers v1 removed whose job a v1 helper does, with that helper.
|
|
429
|
+
* Each is a helper token for the v1 helper's prop, so wherever its element
|
|
430
|
+
* converts it becomes that prop, which renders the v1 class in its place:
|
|
431
|
+
* the conversion here that changes a class, since the class it replaces
|
|
432
|
+
* styles nothing under v1. Where its element stays markup, or the prop is
|
|
433
|
+
* not written, it gets its `LEGACY_09` TODO instead.
|
|
434
|
+
*/
|
|
435
|
+
export declare const REPLACED_IN_V1: Readonly<Record<string, string>>;
|
|
419
436
|
/**
|
|
420
437
|
* `text-color` and `background` resolve to a per-target prop (`RootEntry`'s
|
|
421
438
|
* `textColor`/`bgColor`); `flex-container` only renders beside a flex
|
|
@@ -460,8 +477,14 @@ export declare function placedFor(list: string): RootEntry | undefined;
|
|
|
460
477
|
export declare function flaggableRoot(token: string): RootEntry | undefined;
|
|
461
478
|
/** A root's modifier for a class. */
|
|
462
479
|
export declare function modifierFor(entry: RootEntry, token: string): Modifier | undefined;
|
|
480
|
+
/** Whether a root takes a class as a modifier, or omits it on purpose. */
|
|
481
|
+
export declare function modifiesRoot(entry: RootEntry, token: string): boolean;
|
|
482
|
+
/** The root a class modifies when Bulma styles it only on that root. */
|
|
483
|
+
export declare function rootItNeeds(token: string): string | undefined;
|
|
463
484
|
/** What replaced a Bulma 0.9 class v1 removed. */
|
|
464
485
|
export declare function legacyHint(token: string): string | undefined;
|
|
486
|
+
/** The v1 helper a removed Bulma 0.9 helper converts as. */
|
|
487
|
+
export declare function replacedBy(token: string): string | undefined;
|
|
465
488
|
/** The bestax wrapper for a plain tag. */
|
|
466
489
|
export declare function wrapperFor(tag: string): string | undefined;
|
|
467
490
|
//# sourceMappingURL=class-map.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-map.d.ts","sourceRoot":"","sources":["../../../src/sources/bulma-classes/class-map.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"class-map.d.ts","sourceRoot":"","sources":["../../../src/sources/bulma-classes/class-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,13 @@
|
|
|
6
6
|
* Every conversion this table allows must render exactly the HTML the raw
|
|
7
7
|
* element rendered. That is a claim about bestax, and the render tests hold
|
|
8
8
|
* it: each root, modifier and helper here is rendered through the built
|
|
9
|
-
* library and compared with the raw markup it replaces.
|
|
10
|
-
* purpose
|
|
9
|
+
* library and compared with the raw markup it replaces. The exceptions are
|
|
10
|
+
* on purpose. Font Awesome's own `<i aria-hidden="true">` alone in a `.icon`
|
|
11
11
|
* that carries nothing assistive tech reads converts to `Icon`, which writes
|
|
12
12
|
* the attribute on the `.icon` instead, since the glyph is hidden either way
|
|
13
|
-
* (see `readsGlyph`).
|
|
13
|
+
* (see `readsGlyph`). And a Bulma 0.9 helper v1 removed, which styles
|
|
14
|
+
* nothing under v1, converts as the v1 helper that does its job (see
|
|
15
|
+
* `REPLACED_IN_V1`).
|
|
14
16
|
*
|
|
15
17
|
* Data only: `scripts/gen-mcp-index.mjs` imports it directly for the MCP
|
|
16
18
|
* server's `lookup_bulma_classes`, so nothing Node cannot strip (no enums, no
|
|
@@ -1476,6 +1478,7 @@ export const ROOTS = {
|
|
|
1476
1478
|
`is-${ratio}`,
|
|
1477
1479
|
'`size` renders `has-ratio` beside it as well',
|
|
1478
1480
|
])),
|
|
1481
|
+
modifiersNeedRoot: true,
|
|
1479
1482
|
absorbs: {
|
|
1480
1483
|
tag: 'img',
|
|
1481
1484
|
attributesOn: 'element',
|
|
@@ -1862,8 +1865,6 @@ export const ROOTS = {
|
|
|
1862
1865
|
'theme-dark': plain('a theme scope; bestax sets themes through `Theme`'),
|
|
1863
1866
|
'theme-light': plain('a theme scope; bestax sets themes through `Theme`'),
|
|
1864
1867
|
fa: plain("Font Awesome's own class, styled by Bulma inside `.icon`"),
|
|
1865
|
-
marginless: plain('a Bulma helper with no bestax prop'),
|
|
1866
|
-
paddingless: plain('a Bulma helper with no bestax prop'),
|
|
1867
1868
|
};
|
|
1868
1869
|
function todo(target, why) {
|
|
1869
1870
|
return { status: 'todo', target, why };
|
|
@@ -2047,6 +2048,20 @@ export const REMOVED_IN_V1 = [
|
|
|
2047
2048
|
/** Bulma 0.9 classes v1 dropped, with what replaced them. */
|
|
2048
2049
|
export const LEGACY_09 = {
|
|
2049
2050
|
tile: 'Bulma v1 removed tiles; rebuild the layout with `Grid` and `Cell` (see the Bulma 0.9 to 1 guide)',
|
|
2051
|
+
'is-marginless': 'Bulma v1 removed `is-marginless`, so it styles nothing now; write v1\'s `m-0` in its place, or `m="0"` on a bestax component. The codemod does that itself wherever the element converts',
|
|
2052
|
+
'is-paddingless': 'Bulma v1 removed `is-paddingless`, so it styles nothing now; write v1\'s `p-0` in its place, or `p="0"` on a bestax component. The codemod does that itself wherever the element converts',
|
|
2053
|
+
};
|
|
2054
|
+
/**
|
|
2055
|
+
* Bulma 0.9 helpers v1 removed whose job a v1 helper does, with that helper.
|
|
2056
|
+
* Each is a helper token for the v1 helper's prop, so wherever its element
|
|
2057
|
+
* converts it becomes that prop, which renders the v1 class in its place:
|
|
2058
|
+
* the conversion here that changes a class, since the class it replaces
|
|
2059
|
+
* styles nothing under v1. Where its element stays markup, or the prop is
|
|
2060
|
+
* not written, it gets its `LEGACY_09` TODO instead.
|
|
2061
|
+
*/
|
|
2062
|
+
export const REPLACED_IN_V1 = {
|
|
2063
|
+
'is-marginless': 'm-0',
|
|
2064
|
+
'is-paddingless': 'p-0',
|
|
2050
2065
|
};
|
|
2051
2066
|
function helperTokens(group, prefix, values, prop, suffix = '') {
|
|
2052
2067
|
return values.map(value => [
|
|
@@ -2083,6 +2098,9 @@ export const HELPER_TOKENS = new Map([
|
|
|
2083
2098
|
...helperTokens('text-color', 'has-text-', HELPER_COLORS, 'textColor'),
|
|
2084
2099
|
...helperTokens('background', 'has-background-', HELPER_COLORS, 'bgColor'),
|
|
2085
2100
|
...SPACING_PROPS.flatMap(prop => helperTokens('spacing', `${prop}-`, SIZES, prop)),
|
|
2101
|
+
// Bulma 0.9's, as the v1 helper that replaced each (`REPLACED_IN_V1`).
|
|
2102
|
+
['is-marginless', { group: 'spacing', write: { prop: 'm', value: '0' } }],
|
|
2103
|
+
['is-paddingless', { group: 'spacing', write: { prop: 'p', value: '0' } }],
|
|
2086
2104
|
...helperTokens('typography', 'is-size-', TEXT_SIZES, 'textSize'),
|
|
2087
2105
|
...helperPerViewport('typography', 'is-size-', TEXT_SIZES, 'textSize', SIZE_VIEWPORTS),
|
|
2088
2106
|
...helperTokens('typography', 'has-text-', ALIGNMENTS, 'textAlign'),
|
|
@@ -2185,6 +2203,10 @@ export const PASSTHROUGH = [
|
|
|
2185
2203
|
why: 'a Bulma helper with no bestax prop',
|
|
2186
2204
|
match: /^(?:is-display-.+|is-visibility-.+|is-float-.+|is-clear-.+|has-text-weight-extrabold|is-align-content-(?:baseline|start|end)|is-align-items-self-(?:start|end)|is-offset-0(?:-[a-z]+)?)$/,
|
|
2187
2205
|
},
|
|
2206
|
+
{
|
|
2207
|
+
why: 'Bulma\'s other name for `m-0` or `p-0`, with the same rule; bestax writes that rule as `m="0"` or `p="0"`, which renders `m-0` or `p-0`, so the class stays as it is',
|
|
2208
|
+
match: /^(?:marginless|paddingless)$/,
|
|
2209
|
+
},
|
|
2188
2210
|
{
|
|
2189
2211
|
why: 'a `.breadcrumb` separator, which converts only on its own `.breadcrumb`',
|
|
2190
2212
|
match: /^has-[a-z]+-separator$/,
|
|
@@ -2236,10 +2258,23 @@ export function flaggableRoot(token) {
|
|
|
2236
2258
|
export function modifierFor(entry, token) {
|
|
2237
2259
|
return entry.modifiers ? own(entry.modifiers, token) : undefined;
|
|
2238
2260
|
}
|
|
2261
|
+
/** Whether a root takes a class as a modifier, or omits it on purpose. */
|
|
2262
|
+
export function modifiesRoot(entry, token) {
|
|
2263
|
+
return (modifierFor(entry, token) !== undefined ||
|
|
2264
|
+
(entry.omits !== undefined && own(entry.omits, token) !== undefined));
|
|
2265
|
+
}
|
|
2266
|
+
/** The root a class modifies when Bulma styles it only on that root. */
|
|
2267
|
+
export function rootItNeeds(token) {
|
|
2268
|
+
return Object.keys(ROOTS).find(root => ROOTS[root].modifiersNeedRoot && modifiesRoot(ROOTS[root], token));
|
|
2269
|
+
}
|
|
2239
2270
|
/** What replaced a Bulma 0.9 class v1 removed. */
|
|
2240
2271
|
export function legacyHint(token) {
|
|
2241
2272
|
return own(LEGACY_09, token);
|
|
2242
2273
|
}
|
|
2274
|
+
/** The v1 helper a removed Bulma 0.9 helper converts as. */
|
|
2275
|
+
export function replacedBy(token) {
|
|
2276
|
+
return own(REPLACED_IN_V1, token);
|
|
2277
|
+
}
|
|
2243
2278
|
/** The bestax wrapper for a plain tag. */
|
|
2244
2279
|
export function wrapperFor(tag) {
|
|
2245
2280
|
return own(WRAPPERS, tag);
|
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
* renders exactly the markup the element did. Anything that would change the
|
|
8
8
|
* markup is either left in `className` (a class with no prop here) or refuses
|
|
9
9
|
* the whole element with a TODO (an attribute or tag the component would
|
|
10
|
-
* render differently).
|
|
10
|
+
* render differently). The exceptions are on purpose. Font Awesome's own
|
|
11
11
|
* `<i aria-hidden="true">` alone in a `.icon` that carries nothing assistive
|
|
12
12
|
* tech reads (the table's `hiddenMovesBeside`) converts to `Icon`, which writes that attribute
|
|
13
13
|
* on the `.icon` instead (`movesHidden`), since the glyph is hidden either
|
|
14
|
-
* way.
|
|
14
|
+
* way. And a Bulma 0.9 helper v1 removed (`REPLACED_IN_V1`), which styles
|
|
15
|
+
* nothing under v1, converts as the v1 helper that does its job.
|
|
15
16
|
*/
|
|
16
17
|
import { type Glyph } from './glyph.js';
|
|
17
18
|
export interface ElementFacts {
|
|
@@ -107,6 +108,12 @@ export interface ElementFacts {
|
|
|
107
108
|
* The string the element's content renders, when it is one static text.
|
|
108
109
|
*/
|
|
109
110
|
text?: string;
|
|
111
|
+
/**
|
|
112
|
+
* The element's `className` is computed in a way the codemod doesn't read
|
|
113
|
+
* whole (anything but a `clsx` or `classnames` call of parts it reads), so
|
|
114
|
+
* it may carry classes `tokens` doesn't hold.
|
|
115
|
+
*/
|
|
116
|
+
unreadClasses?: boolean;
|
|
110
117
|
/**
|
|
111
118
|
* The classes the element directly around this one renders: its static
|
|
112
119
|
* ones, or for a bestax component already in the file, its root class and
|
|
@@ -211,9 +218,9 @@ export interface Conversion {
|
|
|
211
218
|
glyph?: Glyph;
|
|
212
219
|
/**
|
|
213
220
|
* That child carried the `aria-hidden` the target writes on the element
|
|
214
|
-
* (Font Awesome's own `<i aria-hidden="true">`), so it moves up:
|
|
215
|
-
*
|
|
216
|
-
*
|
|
221
|
+
* (Font Awesome's own `<i aria-hidden="true">`), so it moves up: a way a
|
|
222
|
+
* conversion's markup differs from the element's on purpose, since the
|
|
223
|
+
* glyph is hidden either way. The render tests compare it with the
|
|
217
224
|
* attribute moved up, and nothing else.
|
|
218
225
|
*/
|
|
219
226
|
movesHidden?: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/sources/bulma-classes/plan.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/sources/bulma-classes/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
* renders exactly the markup the element did. Anything that would change the
|
|
8
8
|
* markup is either left in `className` (a class with no prop here) or refuses
|
|
9
9
|
* the whole element with a TODO (an attribute or tag the component would
|
|
10
|
-
* render differently).
|
|
10
|
+
* render differently). The exceptions are on purpose. Font Awesome's own
|
|
11
11
|
* `<i aria-hidden="true">` alone in a `.icon` that carries nothing assistive
|
|
12
12
|
* tech reads (the table's `hiddenMovesBeside`) converts to `Icon`, which writes that attribute
|
|
13
13
|
* on the `.icon` instead (`movesHidden`), since the glyph is hidden either
|
|
14
|
-
* way.
|
|
14
|
+
* way. And a Bulma 0.9 helper v1 removed (`REPLACED_IN_V1`), which styles
|
|
15
|
+
* nothing under v1, converts as the v1 helper that does its job.
|
|
15
16
|
*/
|
|
16
|
-
import { FORWARDS_REF, HELPER_PROPS, HELPER_TOKENS, inTagSet, legacyHint, modifierFor, numberAttrsOf, placedFor, PRECEDENCE, rootFor, WRAPPER_OWN_PROPS, wrapperFor, } from './class-map.js';
|
|
17
|
+
import { FORWARDS_REF, HELPER_PROPS, HELPER_TOKENS, inTagSet, legacyHint, modifierFor, modifiesRoot, numberAttrsOf, placedFor, PRECEDENCE, replacedBy, rootFor, rootItNeeds, WRAPPER_OWN_PROPS, wrapperFor, } from './class-map.js';
|
|
17
18
|
import { glyphProps, readDrawnGlyph, readGlyph, readHiddenGlyph, } from './glyph.js';
|
|
18
19
|
import { aTag } from '../_shared/articles.js';
|
|
19
20
|
import { ruleId } from './rules.js';
|
|
@@ -53,6 +54,13 @@ function precedence(token) {
|
|
|
53
54
|
function rootLabel(tokens) {
|
|
54
55
|
return tokens.find(token => rootFor(token)?.status === 'mapped') ?? 'button';
|
|
55
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Whether the target renders this tag: the one it renders by itself (or the
|
|
59
|
+
* heading its size picks), or one its `as` takes.
|
|
60
|
+
*/
|
|
61
|
+
function reachesTag(entry, tag, renders = entry.tag) {
|
|
62
|
+
return (tag === renders || entry.as === 'any' || (entry.as?.includes(tag) ?? false));
|
|
63
|
+
}
|
|
56
64
|
function tagsItReaches(entry) {
|
|
57
65
|
if (entry.as === 'any')
|
|
58
66
|
return 'any tag through `as`';
|
|
@@ -60,19 +68,66 @@ function tagsItReaches(entry) {
|
|
|
60
68
|
return entry.as.map(tag => `<${tag}>`).join(', ');
|
|
61
69
|
return `only <${entry.tag}>`;
|
|
62
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Every class the element may carry: its fixed ones, and any a condition
|
|
73
|
+
* adds, which the element has to be right with as well as without.
|
|
74
|
+
*/
|
|
75
|
+
function carriedBy(facts) {
|
|
76
|
+
return [...new Set([...facts.tokens, ...(facts.conditional ?? []).flat()])];
|
|
77
|
+
}
|
|
63
78
|
export function plan(facts) {
|
|
79
|
+
const result = planElement(facts);
|
|
80
|
+
// A Bulma 0.9 helper v1 removed converts as the v1 helper that replaced
|
|
81
|
+
// it, and only one that stays a class gets the TODO naming that helper:
|
|
82
|
+
// where it converted, nothing is left to do.
|
|
83
|
+
const kept = new Set(result.conversion?.className?.split(' ') ?? []);
|
|
84
|
+
const stays = carriedBy(facts).filter(token => replacedBy(token) &&
|
|
85
|
+
(!result.conversion || !facts.tokens.includes(token) || kept.has(token)));
|
|
86
|
+
if (stays.length === 0)
|
|
87
|
+
return result;
|
|
88
|
+
return {
|
|
89
|
+
...result,
|
|
90
|
+
todos: [
|
|
91
|
+
...result.todos,
|
|
92
|
+
...stays.map(token => ({
|
|
93
|
+
rule: ruleId('legacy', token),
|
|
94
|
+
message: legacyHint(token),
|
|
95
|
+
})),
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function planElement(facts) {
|
|
64
100
|
const todos = [];
|
|
65
101
|
const { tag, tokens } = facts;
|
|
66
|
-
|
|
67
|
-
// adds, which the element has to be right with as well as without.
|
|
68
|
-
const carried = [
|
|
69
|
-
...new Set([...tokens, ...(facts.conditional ?? []).flat()]),
|
|
70
|
-
];
|
|
102
|
+
const carried = carriedBy(facts);
|
|
71
103
|
const mayCarry = (token) => carried.includes(token);
|
|
72
104
|
for (const token of carried) {
|
|
73
|
-
|
|
105
|
+
// One that converts says so only if it stays, which `plan` knows.
|
|
106
|
+
const hint = replacedBy(token) ? undefined : legacyHint(token);
|
|
74
107
|
if (hint)
|
|
75
108
|
todos.push({ rule: ruleId('legacy', token), message: hint });
|
|
109
|
+
// A modifier Bulma styles only on its own root does nothing on an element
|
|
110
|
+
// with no root it modifies. That's a claim about every class the element
|
|
111
|
+
// carries, and the remedy drops one, so it's made only when the codemod
|
|
112
|
+
// reads them all. A re-run converts the element only on a tag the root's
|
|
113
|
+
// target renders, so only there does the advice promise one.
|
|
114
|
+
const root = rootItNeeds(token);
|
|
115
|
+
if (root &&
|
|
116
|
+
!facts.unreadClasses &&
|
|
117
|
+
!carried.some(other => {
|
|
118
|
+
const entry = rootFor(other);
|
|
119
|
+
return entry !== undefined && modifiesRoot(entry, token);
|
|
120
|
+
})) {
|
|
121
|
+
const needed = rootFor(root);
|
|
122
|
+
const article = /^[aeiou]/.test(root) ? 'an' : 'a';
|
|
123
|
+
const fix = reachesTag(needed, tag)
|
|
124
|
+
? `add \`${root}\`, which bestax \`${needed.target}\` renders, then re-run`
|
|
125
|
+
: `add \`${root}\` for Bulma to style it, though bestax \`${needed.target}\` renders ${tagsItReaches(needed)}, not ${aTag(tag)}, so the element stays markup`;
|
|
126
|
+
todos.push({
|
|
127
|
+
rule: ruleId('modifier', root),
|
|
128
|
+
message: `\`${token}\` is ${article} \`.${root}\` modifier, and Bulma styles it only on the element that carries \`.${root}\`, so on this one it styles nothing unless the project's own CSS gives it a rule; if this element is the ${root}, ${fix}, and otherwise drop the class`,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
76
131
|
}
|
|
77
132
|
// A family this source leaves as markup keeps its element as markup, even
|
|
78
133
|
// beside a class it would convert (`navbar box`): the family's parts carry no
|
|
@@ -142,8 +197,7 @@ export function plan(facts) {
|
|
|
142
197
|
}
|
|
143
198
|
let as;
|
|
144
199
|
if (renders !== tag) {
|
|
145
|
-
|
|
146
|
-
if (!reachable) {
|
|
200
|
+
if (!reachesTag(entry, tag, renders)) {
|
|
147
201
|
return refuse('tag', target, `bestax \`${target}\` renders ${tagsItReaches(entry)}, not ${aTag(tag)}; keep the markup, or change the tag and re-run`);
|
|
148
202
|
}
|
|
149
203
|
as = tag;
|
|
@@ -253,7 +307,7 @@ export function plan(facts) {
|
|
|
253
307
|
// Font Awesome's own markup hides the <i> rather than the element around
|
|
254
308
|
// it, and a target that renders the glyph from props writes the same
|
|
255
309
|
// `aria-hidden` on the element in its place: it moves up, and the glyph is
|
|
256
|
-
// hidden either way.
|
|
310
|
+
// hidden either way. A difference in markup a conversion makes on
|
|
257
311
|
// purpose; the render tests compare it with the attribute moved up. Only
|
|
258
312
|
// onto an element that carries nothing assistive tech reads, by name and
|
|
259
313
|
// whatever the value: an expression may render as anything.
|
|
@@ -765,6 +819,15 @@ function buildIcons(children, target) {
|
|
|
765
819
|
* base `display` beside a per-viewport one, a flex-container helper with no
|
|
766
820
|
* flex `display`, `gapless` beside a `gap`) stays a class, as does one it
|
|
767
821
|
* leaves out, and so does a modifier missing the attribute it needs.
|
|
822
|
+
*
|
|
823
|
+
* The first class to claim a prop keeps it, but a Bulma 0.9 class v1 removed
|
|
824
|
+
* claims one only after every other class has: whatever the order, a live
|
|
825
|
+
* class beside it for the same prop (`p-2 is-paddingless`) is what the page
|
|
826
|
+
* renders today and keeps the prop, and the removed one stays a class, with
|
|
827
|
+
* the TODO `plan` gives it. Beside a class for a different prop, such as an
|
|
828
|
+
* axis (`px-2 is-paddingless`), it still converts: the two render `px-2` and
|
|
829
|
+
* `p-0`, and v1's stylesheet puts every side and axis class after `p-0`, so
|
|
830
|
+
* the axis keeps its sides and `p-0` zeroes the rest.
|
|
768
831
|
*/
|
|
769
832
|
function propsFrom(entry, tokens, tag, root, attributes) {
|
|
770
833
|
const numbers = [];
|
|
@@ -774,7 +837,11 @@ function propsFrom(entry, tokens, tag, root, attributes) {
|
|
|
774
837
|
const sourceOf = new Map();
|
|
775
838
|
const groupOf = new Map();
|
|
776
839
|
const converted = new Set(root ? [root] : []);
|
|
777
|
-
|
|
840
|
+
const claiming = [
|
|
841
|
+
...tokens.filter(token => !replacedBy(token)),
|
|
842
|
+
...tokens.filter(token => replacedBy(token)),
|
|
843
|
+
];
|
|
844
|
+
for (const token of claiming) {
|
|
778
845
|
if (converted.has(token))
|
|
779
846
|
continue;
|
|
780
847
|
const modifier = modifierFor(entry, token);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/sources/bulma-classes/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,eAAO,MAAM,KAAK,EAAE,WAAW,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/sources/bulma-classes/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,eAAO,MAAM,KAAK,EAAE,WAAW,CAAC,MAAM,CAcpC,CAAC;AAqCH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1D"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* scope when a lowercase JSX element carries a `className` with a Bulma class
|
|
6
6
|
* `class-map.ts` knows. Each such element goes through `plan()`, which
|
|
7
7
|
* converts it only when the component renders exactly the same markup, but
|
|
8
|
-
* for the
|
|
8
|
+
* for the exceptions it states (Font Awesome's hidden `<i>`, and a Bulma 0.9
|
|
9
|
+
* helper v1 removed).
|
|
9
10
|
*
|
|
10
11
|
* Passes, in order:
|
|
11
12
|
* 1. the shared stylesheet-import pass (a no-op under the default `keep`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/sources/bulma-classes/transform.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/sources/bulma-classes/transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAW,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAkiCvD,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,gBAAqB,GAC7B,MAAM,GAAG,SAAS,CAy9BpB"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* scope when a lowercase JSX element carries a `className` with a Bulma class
|
|
6
6
|
* `class-map.ts` knows. Each such element goes through `plan()`, which
|
|
7
7
|
* converts it only when the component renders exactly the same markup, but
|
|
8
|
-
* for the
|
|
8
|
+
* for the exceptions it states (Font Awesome's hidden `<i>`, and a Bulma 0.9
|
|
9
|
+
* helper v1 removed).
|
|
9
10
|
*
|
|
10
11
|
* Passes, in order:
|
|
11
12
|
* 1. the shared stylesheet-import pass (a no-op under the default `keep`)
|
|
@@ -1246,6 +1247,11 @@ export default function transform(fileInfo, api, options = {}) {
|
|
|
1246
1247
|
const className = classAttr ? staticClassName(classAttr) : '';
|
|
1247
1248
|
const surrounding = around(elementPath);
|
|
1248
1249
|
const sole = soleChild(element);
|
|
1250
|
+
// A joiner call the codemod can read converts exactly: its fixed classes
|
|
1251
|
+
// as for a static className, and each condition on a flag as its prop.
|
|
1252
|
+
const joined = className === null
|
|
1253
|
+
? readJoiner(classAttr.value, callee => isJoiner(callee, elementPath))
|
|
1254
|
+
: undefined;
|
|
1249
1255
|
const facts = {
|
|
1250
1256
|
tag: name.name,
|
|
1251
1257
|
tokens: className === null
|
|
@@ -1271,15 +1277,13 @@ export default function transform(fileInfo, api, options = {}) {
|
|
|
1271
1277
|
holderOnlyChildOf: onlyChildOf(elementPath.parent, bestaxLocals),
|
|
1272
1278
|
}),
|
|
1273
1279
|
...(textOf(element) !== undefined && { text: textOf(element) }),
|
|
1280
|
+
// Any other computed className may carry classes its strings don't
|
|
1281
|
+
// show (a variable, a call).
|
|
1282
|
+
...(className === null && !joined && { unreadClasses: true }),
|
|
1274
1283
|
};
|
|
1275
1284
|
if (facts.tokens.some(token => rootFor(token)?.readsGlyph)) {
|
|
1276
1285
|
Object.assign(facts, glyphPlace(elementPath));
|
|
1277
1286
|
}
|
|
1278
|
-
// A joiner call the codemod can read converts exactly: its fixed classes
|
|
1279
|
-
// as for a static className, and each condition on a flag as its prop.
|
|
1280
|
-
const joined = className === null
|
|
1281
|
-
? readJoiner(classAttr.value, callee => isJoiner(callee, elementPath))
|
|
1282
|
-
: undefined;
|
|
1283
1287
|
let exact;
|
|
1284
1288
|
if (joined) {
|
|
1285
1289
|
exact = plan({
|