@lumx/core 3.20.1-alpha.48 → 3.20.1-alpha.49

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.
@@ -1,2 +1,2 @@
1
1
  /** Transform a string literal into kebab case */
2
- export type KebabCase<S extends string | number> = S extends `${infer C}${infer T}` ? T extends Uncapitalize<T> ? `${Uncapitalize<C>}${KebabCase<T>}` : `${Uncapitalize<C>}-${KebabCase<T>}` : `${S}`;
2
+ export type KebabCase<S> = S extends `${infer C}${infer T}` ? T extends Uncapitalize<T> ? `${Uncapitalize<C>}${KebabCase<T>}` : `${Uncapitalize<C>}-${KebabCase<T>}` : S;
@@ -9,7 +9,6 @@ import { type Modifier, type RawModifier } from './generateBEMClass';
9
9
  * @returns A function that accepts:
10
10
  * - modifier - Optional BEM modifier (string, object, or array)
11
11
  * - additionalClasses - Optional additional classes to include
12
- * - modifierLast - Whether to append modifier classes last (default: false)
13
12
  *
14
13
  * @example
15
14
  * const button = block('my-button');
@@ -17,4 +16,4 @@ import { type Modifier, type RawModifier } from './generateBEMClass';
17
16
  * button('primary'); // 'my-button my-button--primary'
18
17
  * button({ active: true }); // 'my-button my-button--active'
19
18
  */
20
- export declare const block: <B extends string>(baseClass: KebabCase<B>) => <M extends RawModifier>(modifier?: Modifier<M>, additionalClasses?: ClassValue | ClassValue[], modifierLast?: boolean) => string;
19
+ export declare const block: <B extends string>(baseClass: KebabCase<B>) => <M extends RawModifier>(modifier?: Modifier<M>, additionalClasses?: ClassValue | ClassValue[]) => string;
@@ -8,7 +8,6 @@ import { generateBEMClass } from './generateBEMClass.js';
8
8
  * @returns A function that accepts:
9
9
  * - modifier - Optional BEM modifier (string, object, or array)
10
10
  * - additionalClasses - Optional additional classes to include
11
- * - modifierLast - Whether to append modifier classes last (default: false)
12
11
  *
13
12
  * @example
14
13
  * const button = block('my-button');
@@ -16,8 +15,6 @@ import { generateBEMClass } from './generateBEMClass.js';
16
15
  * button('primary'); // 'my-button my-button--primary'
17
16
  * button({ active: true }); // 'my-button my-button--active'
18
17
  */
19
- const block = (baseClass) => (modifier, additionalClasses, modifierLast) => {
20
- return generateBEMClass(baseClass, modifier, additionalClasses, modifierLast);
21
- };
18
+ const block = (baseClass) => (modifier, additionalClasses) => generateBEMClass(baseClass, modifier, additionalClasses);
22
19
 
23
20
  export { block };
@@ -10,7 +10,6 @@ import { type Modifier, type RawModifier } from './generateBEMClass';
10
10
  * - elem - The BEM element name (e.g., 'icon', 'title')
11
11
  * - modifier - Optional BEM modifier (string, object, or array)
12
12
  * - additionalClasses - Optional additional classes to include
13
- * - modifierLast - Whether to append modifier classes last (default: false)
14
13
  *
15
14
  * @example
16
15
  * const button = element('my-button');
@@ -18,4 +17,4 @@ import { type Modifier, type RawModifier } from './generateBEMClass';
18
17
  * button('icon', 'large'); // 'my-button__icon my-button__icon--large'
19
18
  * button('icon', { active: true }); // 'my-button__icon my-button__icon--active'
20
19
  */
21
- export declare const element: <B extends string>(baseClass: KebabCase<B>) => <E extends string, M extends RawModifier>(elem: KebabCase<E>, modifier?: Modifier<M>, additionalClasses?: ClassValue | ClassValue[], modifierLast?: boolean) => string;
20
+ export declare const element: <B extends string>(baseClass: KebabCase<B>) => <E extends string, M extends RawModifier>(elem: KebabCase<E>, modifier?: Modifier<M>, additionalClasses?: ClassValue | ClassValue[]) => string;
@@ -9,7 +9,6 @@ import { generateBEMClass } from './generateBEMClass.js';
9
9
  * - elem - The BEM element name (e.g., 'icon', 'title')
10
10
  * - modifier - Optional BEM modifier (string, object, or array)
11
11
  * - additionalClasses - Optional additional classes to include
12
- * - modifierLast - Whether to append modifier classes last (default: false)
13
12
  *
14
13
  * @example
15
14
  * const button = element('my-button');
@@ -17,9 +16,6 @@ import { generateBEMClass } from './generateBEMClass.js';
17
16
  * button('icon', 'large'); // 'my-button__icon my-button__icon--large'
18
17
  * button('icon', { active: true }); // 'my-button__icon my-button__icon--active'
19
18
  */
20
- const element = (baseClass) => (elem, modifier, additionalClasses, modifierLast) => {
21
- const elementClassname = `${baseClass}__${elem}`;
22
- return generateBEMClass(elementClassname, modifier, additionalClasses, modifierLast);
23
- };
19
+ const element = (baseClass) => (elem, modifier, additionalClasses) => generateBEMClass(`${baseClass}__${elem}`, modifier, additionalClasses);
24
20
 
25
21
  export { element };
@@ -7,9 +7,9 @@ export type RawModifier = string | Record<string, boolean> | ClassValue[];
7
7
  * @example { 'is-disabled': true, 'is-selected': false }
8
8
  * @example ['another-class'] // => Added as-is, not as a BEM modifier suffix
9
9
  */
10
- export type Modifier<T extends RawModifier> = T extends string ? KebabCase<T> : T extends ClassValue[] ? T : {
10
+ export type Modifier<T extends RawModifier> = T extends string ? KebabCase<T> : T extends Record<string, boolean> ? {
11
11
  [K in keyof T as KebabCase<K>]?: boolean;
12
- };
12
+ } : T;
13
13
  /**
14
14
  * Generates a BEM (Block Element Modifier) class name string.
15
15
  * Combines a base class with optional modifiers and additional classes.
@@ -20,7 +20,6 @@ export type Modifier<T extends RawModifier> = T extends string ? KebabCase<T> :
20
20
  * - object: creates `baseClass--key` for each truthy value
21
21
  * - array: passes through as additional classes
22
22
  * @param additionalClasses - Optional additional classes to include
23
- * @param modifierLast - If true, appends modifier classes after additional classes (default: false)
24
23
  * @returns Combined class name string
25
24
  *
26
25
  * @example
@@ -29,4 +28,4 @@ export type Modifier<T extends RawModifier> = T extends string ? KebabCase<T> :
29
28
  * generateBEMClass('button', { active: true, disabled: false }); // 'button button--active'
30
29
  * generateBEMClass('button', 'primary', 'my-class'); // 'button button--primary my-class'
31
30
  */
32
- export declare function generateBEMClass<B extends string, M extends RawModifier>(baseClass: KebabCase<B>, modifier?: Modifier<M>, additionalClasses?: ClassValue | ClassValue[], modifierLast?: boolean): string;
31
+ export declare function generateBEMClass<M extends RawModifier>(baseClass: string, modifier?: Modifier<M>, additionalClasses?: ClassValue | ClassValue[]): string;
@@ -1,18 +1,19 @@
1
1
  import classnames from 'classnames';
2
2
 
3
- function parseModifier(baseClass, modifier) {
4
- const classes = [];
5
- if (typeof modifier === 'string') {
6
- classes.push(`${baseClass}--${modifier}`);
3
+ function generateModifierClasses(baseClass, modifier) {
4
+ if (!modifier) {
5
+ return undefined;
7
6
  }
8
- else if (Array.isArray(modifier)) {
7
+ if (Array.isArray(modifier)) {
9
8
  return modifier;
10
9
  }
11
- else if (modifier && typeof modifier === 'object') {
12
- for (const [key, value] of Object.entries(modifier)) {
13
- if (value)
14
- classes.push(`${baseClass}--${key}`);
15
- }
10
+ if (typeof modifier === 'string') {
11
+ return `${baseClass}--${modifier}`;
12
+ }
13
+ const classes = [];
14
+ for (const [key, value] of Object.entries(modifier)) {
15
+ if (value)
16
+ classes.push(`${baseClass}--${key}`);
16
17
  }
17
18
  return classes;
18
19
  }
@@ -26,7 +27,6 @@ function parseModifier(baseClass, modifier) {
26
27
  * - object: creates `baseClass--key` for each truthy value
27
28
  * - array: passes through as additional classes
28
29
  * @param additionalClasses - Optional additional classes to include
29
- * @param modifierLast - If true, appends modifier classes after additional classes (default: false)
30
30
  * @returns Combined class name string
31
31
  *
32
32
  * @example
@@ -35,14 +35,14 @@ function parseModifier(baseClass, modifier) {
35
35
  * generateBEMClass('button', { active: true, disabled: false }); // 'button button--active'
36
36
  * generateBEMClass('button', 'primary', 'my-class'); // 'button button--primary my-class'
37
37
  */
38
- function generateBEMClass(baseClass, modifier, additionalClasses, modifierLast) {
39
- if (!modifier && !additionalClasses) {
40
- return baseClass;
41
- }
42
- if (modifierLast) {
43
- return classnames(baseClass, additionalClasses, modifier && parseModifier(baseClass, modifier));
44
- }
45
- return classnames(baseClass, modifier && parseModifier(baseClass, modifier), additionalClasses);
38
+ function generateBEMClass(baseClass, modifier, additionalClasses) {
39
+ return classnames(
40
+ // Base class
41
+ baseClass,
42
+ // Modifier(s)
43
+ generateModifierClasses(baseClass, modifier),
44
+ // Additional classes
45
+ additionalClasses);
46
46
  }
47
47
 
48
48
  export { generateBEMClass };
package/package.json CHANGED
@@ -35,7 +35,7 @@
35
35
  "update-version-changelog": "yarn version-changelog ../../CHANGELOG.md"
36
36
  },
37
37
  "sideEffects": false,
38
- "version": "3.20.1-alpha.48",
38
+ "version": "3.20.1-alpha.49",
39
39
  "devDependencies": {
40
40
  "@rollup/plugin-typescript": "^12.3.0",
41
41
  "@types/react": "^17.0.2",