@santi020k/lumen-core 0.3.0 → 1.0.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/dist/icons.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import { icons as lucideIcons } from '@lucide/icons';
2
- const toKebabCase = (value) => value.trim()
2
+ const toKebabCase = (value) => value
3
+ .trim()
3
4
  .replaceAll(/([a-z0-9])([A-Z])/g, '$1-$2')
4
5
  .replaceAll(/[\s_]+/g, '-')
5
6
  .toLowerCase();
6
7
  const lucideIconEntries = Object.entries(lucideIcons);
8
+ const registeredIconPacks = new Map();
7
9
  const createLumenIconEntries = () => {
8
10
  const entries = [];
9
11
  for (const [exportName, icon] of lucideIconEntries) {
@@ -16,7 +18,30 @@ const createLumenIconEntries = () => {
16
18
  };
17
19
  export const lumenIcons = Object.freeze(Object.fromEntries(createLumenIconEntries()));
18
20
  export const lumenIconNames = Object.freeze(Object.keys(lumenIcons).sort());
19
- const escapeHtmlAttribute = (value) => value.replaceAll('&', '&')
21
+ const parseIconName = (name) => {
22
+ const separatorIndex = name.indexOf(':');
23
+ if (separatorIndex < 0) {
24
+ return { iconName: toKebabCase(name) };
25
+ }
26
+ return {
27
+ iconName: toKebabCase(name.slice(separatorIndex + 1)),
28
+ prefix: toKebabCase(name.slice(0, separatorIndex))
29
+ };
30
+ };
31
+ export const registerLumenIconPack = (prefix, icons) => {
32
+ const normalizedPrefix = toKebabCase(prefix);
33
+ if (!normalizedPrefix || normalizedPrefix.includes(':')) {
34
+ throw new Error('Lumen icon pack prefixes must be non-empty and cannot contain colons.');
35
+ }
36
+ const normalizedIcons = Object.fromEntries(Object.entries(icons).map(([name, icon]) => [toKebabCase(name), icon]));
37
+ registeredIconPacks.set(normalizedPrefix, Object.freeze(normalizedIcons));
38
+ };
39
+ export const getLumenIconPack = (prefix) => (registeredIconPacks.get(toKebabCase(prefix)));
40
+ export const getRegisteredLumenIconNames = () => [...registeredIconPacks.entries()]
41
+ .flatMap(([prefix, icons]) => Object.keys(icons).map(name => `${prefix}:${name}`))
42
+ .sort();
43
+ const escapeHtmlAttribute = (value) => value
44
+ .replaceAll('&', '&amp;')
20
45
  .replaceAll('"', '&quot;')
21
46
  .replaceAll('<', '&lt;')
22
47
  .replaceAll('>', '&gt;');
@@ -25,36 +50,58 @@ const renderAttributes = (attributes) => Object.entries(attributes)
25
50
  .join(' ');
26
51
  const renderIconNode = ([tagName, attributes, children]) => {
27
52
  const renderedAttributes = renderAttributes(attributes);
28
- const openingTag = renderedAttributes ? `<${tagName} ${renderedAttributes}` : `<${tagName}`;
53
+ const openingTag = renderedAttributes ?
54
+ `<${tagName} ${renderedAttributes}` :
55
+ `<${tagName}`;
29
56
  if (!children?.length) {
30
57
  return `${openingTag} />`;
31
58
  }
32
59
  return `${openingTag}>${children.map(renderIconNode).join('')}</${tagName}>`;
33
60
  };
34
61
  export const resolveLumenIconName = (name) => {
35
- const normalized = toKebabCase(name);
36
- return lumenIcons[normalized] ? normalized : undefined;
62
+ const { iconName, prefix } = parseIconName(name);
63
+ if (!prefix) {
64
+ return lumenIcons[iconName] ? iconName : undefined;
65
+ }
66
+ return registeredIconPacks.get(prefix)?.[iconName] ?
67
+ `${prefix}:${iconName}` :
68
+ undefined;
37
69
  };
38
70
  export const getLumenIcon = (name) => {
39
71
  const resolvedName = resolveLumenIconName(name);
40
- return resolvedName ? lumenIcons[resolvedName] : undefined;
72
+ if (!resolvedName)
73
+ return undefined;
74
+ const { iconName, prefix } = parseIconName(resolvedName);
75
+ return prefix ?
76
+ registeredIconPacks.get(prefix)?.[iconName] :
77
+ lumenIcons[iconName];
41
78
  };
42
79
  export const renderLumenIconSvg = (name, options = {}) => {
43
80
  const icon = getLumenIcon(name);
44
81
  if (!icon)
45
82
  return '';
46
- const className = ['ui-icon__svg', `lucide-${icon.name}`, options.className].filter(Boolean).join(' ');
83
+ const iconStyle = icon.style ?? 'stroke';
84
+ const source = icon.source ?? 'lucide';
85
+ const width = 'size' in icon ? icon.size : icon.width;
86
+ const height = 'size' in icon ? icon.size : icon.height;
87
+ const className = [
88
+ 'ui-icon__svg',
89
+ `${source}-${icon.name}`,
90
+ options.className
91
+ ]
92
+ .filter(Boolean)
93
+ .join(' ');
47
94
  return `<svg ${renderAttributes({
48
95
  'aria-hidden': 'true',
49
96
  class: className,
50
- fill: 'none',
97
+ fill: iconStyle === 'fill' ? 'currentColor' : 'none',
51
98
  focusable: 'false',
52
99
  height: '1em',
53
- stroke: 'currentColor',
100
+ stroke: iconStyle === 'stroke' ? 'currentColor' : 'none',
54
101
  'stroke-linecap': 'round',
55
102
  'stroke-linejoin': 'round',
56
- 'stroke-width': '2',
57
- viewBox: '0 0 24 24',
103
+ 'stroke-width': iconStyle === 'stroke' ? '2' : '0',
104
+ viewBox: `0 0 ${width} ${height}`,
58
105
  width: '1em',
59
106
  xmlns: 'http://www.w3.org/2000/svg'
60
107
  })}>${icon.node.map(renderIconNode).join('')}</svg>`;
package/dist/index.d.ts CHANGED
@@ -1,12 +1,14 @@
1
+ export { alignLumenChartSeries, createLumenBarGeometry, createLumenLineGeometry, createLumenPieGeometry, getLumenChartCategories, getLumenChartDomain, getLumenChartTicks, getLumenChartToneClassName, getLumenChartValueRatio, getLumenPieChartVariantClassName, hasLumenChartData, hasLumenPieData, type LumenBarChartLayout, type LumenBarGeometry, type LumenBarGeometryCategory, type LumenBarGeometryMark, type LumenBarGeometryOptions, type LumenChartDatum, type LumenChartDomain, type LumenChartGeometryPoint, type LumenChartOrientation, type LumenChartSeries, type LumenChartTone, lumenChartTones, type LumenLineGeometry, type LumenLineGeometryOptions, type LumenPieChartVariant, type LumenPieGeometry, type LumenPieGeometryOptions, type LumenPieGeometrySlice, resolveLumenChartTone, scaleLumenChartValue } from './charts.js';
1
2
  export { type LumenCodeToken, lumenCodeTokenClassNames, type LumenCodeTokenKind, normalizeLumenCode, renderLumenCodeHtml, tokenizeLumenCode } from './code.js';
2
- export { type LumenComponentName, lumenComponentNames, lumenPackages, type LumenPackageTarget } from './components.js';
3
+ export { type LumenComponentBehavior, lumenComponentBehavior, type LumenComponentName, lumenComponentNames, type LumenGlobalBehavior, lumenGlobalBehaviors, lumenPackages, type LumenPackageTarget, type LumenStylingContract, lumenStylingContracts } from './components.js';
3
4
  export { applyDataViewState, createDataViewRequestUrl, createDataViewSearchParams, createDataViewServerRequest, createDataViewState, createDataViewStorageKey, filterDataRecords, getVirtualRange, loadDataViewState, type LumenDataRecord, type LumenDataViewServerRequest, type LumenDataViewState, type LumenKeyValueReader, type LumenKeyValueStorage, type LumenKeyValueWriter, type LumenSortDirection, paginateDataRecords, parseDataViewState, pinDataViewColumn, saveDataViewState, serializeDataViewState, sortDataRecords, toggleDataViewSelection, unpinDataViewColumn } from './data.js';
4
5
  export { createFigmaVariableName, exportThemeDesignTokens, exportThemeFigmaVariables, hslTokenToFigmaColor, hslTokenToHexColor, type LumenDesignToken, type LumenDesignTokenExport, type LumenDesignTokenType, type LumenEffectDesignToken, type LumenFigmaColorValue, type LumenFigmaVariable, type LumenFigmaVariableCollection, type LumenFigmaVariableExportOptions, type LumenFigmaVariableMode, type LumenStructureDesignToken } from './figma.js';
5
- export { getLumenIcon, type LumenIconData, type LumenIconName, lumenIconNames, type LumenIconNode, lumenIcons, renderLumenIconSvg, resolveLumenIconName } from './icons.js';
6
- export { type LumenAstroPropsResult, type LumenClassValue, type LumenGlass, type LumenSurfaceAlias, resolveLumenAstroProps, resolveLumenGlass } from './props.js';
6
+ export { createLumenFormFailure, createLumenFormSuccess, getLumenFieldErrors, type LumenFieldError, type LumenFormErrorInput, type LumenFormErrors, type LumenFormFailure, type LumenFormResult, type LumenFormStatus, lumenFormStatuses, type LumenFormSuccess, normalizeLumenFormErrors } from './forms.js';
7
+ export { getLumenIcon, getLumenIconPack, getRegisteredLumenIconNames, type LumenIconData, type LumenIconName, lumenIconNames, type LumenIconNode, type LumenIconPack, lumenIcons, type LumenIconStyle, registerLumenIconPack, renderLumenIconSvg, resolveLumenIconName } from './icons.js';
8
+ export { type LumenAstroPropsResult, type LumenClassValue, type LumenGlass, resolveLumenAstroProps, resolveLumenGlass } from './props.js';
7
9
  export { getLumenRichTextShortcut, isLumenRichTextToggleCommand, type LumenRichTextChangeDetail, type LumenRichTextCommandDetail, type LumenRichTextShortcutEvent, type LumenRichTextToggleCommand, lumenRichTextToggleCommands } from './rich-text.js';
8
10
  export { canPlaceScheduleEvent, createScheduleSlots, createScheduleStorageKey, expandRecurringScheduleEvent, getScheduleConflicts, loadScheduleEvents, type LumenScheduleConflict, type LumenScheduleEvent, type LumenScheduleKeyValueReader, type LumenScheduleKeyValueStorage, type LumenScheduleKeyValueWriter, type LumenScheduleResizeEdge, type LumenScheduleResizeOptions, type LumenScheduleResource, type LumenScheduleSlot, moveScheduleEvent, parseScheduleEvents, resizeScheduleEvent, resizeScheduleEvents, saveScheduleEvents, scheduleEventsOverlap, serializeScheduleEvents } from './schedule.js';
9
11
  export { createThemeFromHue, createThemePalette, exportThemeCss, getContrastRatio, type LumenColorTokenName, lumenColorTokenNames, type LumenContrastScore, type LumenGlassColorTokenName, lumenGlassColorTokenNames, type LumenGlassEffectTokenName, lumenGlassEffectTokenNames, type LumenGlassTokenName, lumenGlassTokenNames, type LumenMotionTokenName, lumenMotionTokenNames, type LumenRadiusTokenName, lumenRadiusTokenNames, type LumenSemanticColorTokenName, lumenSemanticColorTokenNames, type LumenShadowTokenName, lumenShadowTokenNames, type LumenStructureTokenName, lumenStructureTokenNames, type LumenThemeContrastSuggestion, type LumenThemeFromHueOptions, type LumenThemeTokenName, type LumenThemeTokens, lumenTokenNames, type LumenTypographyTokenName, lumenTypographyTokenNames, mergeThemeTokens, parseThemeCss, scoreThemeContrast, suggestReadableInk, tuneThemeContrast } from './theme.js';
10
12
  export { coerceThemeBuilderExportFormat, coerceThemeBuilderMode, coerceThemeBuilderScheme, createThemeBuilderTokens, exportThemeBuilderCss, exportThemeBuilderValue, type LumenThemeBuilderExportFormat, type LumenThemeBuilderMode, type LumenThemeBuilderOptions, type LumenThemeBuilderResult, type LumenThemeBuilderScheme, normalizeThemeBuilderHex, normalizeThemeBuilderHue, themeBuilderHexToHsl } from './theme-builder.js';
11
- export { composeClassName, lumenColors, lumenDarkTheme, lumenFont, lumenGlass, lumenLightTheme, lumenMotion, lumenRadius, lumenShadow, lumenThemeAttribute } from './tokens.js';
13
+ export { composeClassName, lumenChart, lumenColors, lumenDarkTheme, lumenFont, lumenGlass, lumenLightTheme, lumenMotion, lumenRadius, lumenShadow, lumenThemeAttribute } from './tokens.js';
12
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,11 +1,13 @@
1
+ export { alignLumenChartSeries, createLumenBarGeometry, createLumenLineGeometry, createLumenPieGeometry, getLumenChartCategories, getLumenChartDomain, getLumenChartTicks, getLumenChartToneClassName, getLumenChartValueRatio, getLumenPieChartVariantClassName, hasLumenChartData, hasLumenPieData, lumenChartTones, resolveLumenChartTone, scaleLumenChartValue } from './charts.js';
1
2
  export { lumenCodeTokenClassNames, normalizeLumenCode, renderLumenCodeHtml, tokenizeLumenCode } from './code.js';
2
- export { lumenComponentNames, lumenPackages } from './components.js';
3
+ export { lumenComponentBehavior, lumenComponentNames, lumenGlobalBehaviors, lumenPackages, lumenStylingContracts } from './components.js';
3
4
  export { applyDataViewState, createDataViewRequestUrl, createDataViewSearchParams, createDataViewServerRequest, createDataViewState, createDataViewStorageKey, filterDataRecords, getVirtualRange, loadDataViewState, paginateDataRecords, parseDataViewState, pinDataViewColumn, saveDataViewState, serializeDataViewState, sortDataRecords, toggleDataViewSelection, unpinDataViewColumn } from './data.js';
4
5
  export { createFigmaVariableName, exportThemeDesignTokens, exportThemeFigmaVariables, hslTokenToFigmaColor, hslTokenToHexColor } from './figma.js';
5
- export { getLumenIcon, lumenIconNames, lumenIcons, renderLumenIconSvg, resolveLumenIconName } from './icons.js';
6
+ export { createLumenFormFailure, createLumenFormSuccess, getLumenFieldErrors, lumenFormStatuses, normalizeLumenFormErrors } from './forms.js';
7
+ export { getLumenIcon, getLumenIconPack, getRegisteredLumenIconNames, lumenIconNames, lumenIcons, registerLumenIconPack, renderLumenIconSvg, resolveLumenIconName } from './icons.js';
6
8
  export { resolveLumenAstroProps, resolveLumenGlass } from './props.js';
7
9
  export { getLumenRichTextShortcut, isLumenRichTextToggleCommand, lumenRichTextToggleCommands } from './rich-text.js';
8
10
  export { canPlaceScheduleEvent, createScheduleSlots, createScheduleStorageKey, expandRecurringScheduleEvent, getScheduleConflicts, loadScheduleEvents, moveScheduleEvent, parseScheduleEvents, resizeScheduleEvent, resizeScheduleEvents, saveScheduleEvents, scheduleEventsOverlap, serializeScheduleEvents } from './schedule.js';
9
11
  export { createThemeFromHue, createThemePalette, exportThemeCss, getContrastRatio, lumenColorTokenNames, lumenGlassColorTokenNames, lumenGlassEffectTokenNames, lumenGlassTokenNames, lumenMotionTokenNames, lumenRadiusTokenNames, lumenSemanticColorTokenNames, lumenShadowTokenNames, lumenStructureTokenNames, lumenTokenNames, lumenTypographyTokenNames, mergeThemeTokens, parseThemeCss, scoreThemeContrast, suggestReadableInk, tuneThemeContrast } from './theme.js';
10
12
  export { coerceThemeBuilderExportFormat, coerceThemeBuilderMode, coerceThemeBuilderScheme, createThemeBuilderTokens, exportThemeBuilderCss, exportThemeBuilderValue, normalizeThemeBuilderHex, normalizeThemeBuilderHue, themeBuilderHexToHsl } from './theme-builder.js';
11
- export { composeClassName, lumenColors, lumenDarkTheme, lumenFont, lumenGlass, lumenLightTheme, lumenMotion, lumenRadius, lumenShadow, lumenThemeAttribute } from './tokens.js';
13
+ export { composeClassName, lumenChart, lumenColors, lumenDarkTheme, lumenFont, lumenGlass, lumenLightTheme, lumenMotion, lumenRadius, lumenShadow, lumenThemeAttribute } from './tokens.js';
package/dist/props.d.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  export type LumenClassValue = boolean | null | string | undefined;
2
2
  export type LumenGlass = boolean | 'strong' | 'subtle';
3
- export type LumenSurfaceAlias = 'default' | 'glass';
4
3
  export interface LumenAstroPropsResult {
5
4
  classList: LumenClassValue[];
6
5
  passthrough: Record<string, unknown>;
7
6
  }
8
7
  export declare const resolveLumenAstroProps: (rest: Record<string, unknown>, classList: LumenClassValue[], classProp?: string, className?: string) => LumenAstroPropsResult;
9
- export declare const resolveLumenGlass: (glass?: LumenGlass, surface?: LumenSurfaceAlias) => LumenGlass;
8
+ export declare const resolveLumenGlass: (glass?: LumenGlass) => LumenGlass;
10
9
  //# sourceMappingURL=props.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../src/props.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAA;AAEjE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEtD,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAA;AAEnD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,eAAe,EAAE,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AAED,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,eAAe,EAAE,EAC5B,kBAAc,EACd,kBAAc,KACb,qBAGD,CAAA;AAEF,eAAO,MAAM,iBAAiB,GAC5B,QAAO,UAAkB,EACzB,UAAS,iBAA6B,KACrC,UAA0C,CAAA"}
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../src/props.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAA;AAEjE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEtD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,eAAe,EAAE,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AAED,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,eAAe,EAAE,EAC5B,kBAAc,EACd,kBAAc,KACb,qBAGD,CAAA;AAEF,eAAO,MAAM,iBAAiB,GAC5B,QAAO,UAAkB,KACxB,UAAmB,CAAA"}
package/dist/props.js CHANGED
@@ -2,4 +2,4 @@ export const resolveLumenAstroProps = (rest, classList, classProp = '', classNam
2
2
  classList: [...classList, classProp, className],
3
3
  passthrough: rest
4
4
  });
5
- export const resolveLumenGlass = (glass = false, surface = 'default') => glass || surface === 'glass';
5
+ export const resolveLumenGlass = (glass = false) => glass;
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"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"}
package/dist/schedule.js CHANGED
@@ -7,14 +7,14 @@ export const createScheduleSlots = (dates, events, resources = []) => {
7
7
  ...(resource ? { resource } : {})
8
8
  })));
9
9
  };
10
- export const moveScheduleEvent = (events, eventId, nextStart, nextEnd, resourceId) => events.map(event => event.id === eventId
11
- ? {
10
+ export const moveScheduleEvent = (events, eventId, nextStart, nextEnd, resourceId) => events.map(event => event.id === eventId ?
11
+ {
12
12
  ...event,
13
13
  end: nextEnd,
14
14
  ...(resourceId ? { resourceId } : {}),
15
15
  start: nextStart
16
- }
17
- : event);
16
+ } :
17
+ event);
18
18
  export const expandRecurringScheduleEvent = (event, count, intervalDays = 7) => Array.from({ length: count }, (_, index) => {
19
19
  const start = new Date(event.start);
20
20
  const end = new Date(event.end);
@@ -65,9 +65,9 @@ export const resizeScheduleEvent = (event, nextDateTime, options = {}) => {
65
65
  start: new Date(nextStart).toISOString()
66
66
  };
67
67
  };
68
- export const resizeScheduleEvents = (events, eventId, nextDateTime, options = {}) => events.map(event => event.id === eventId
69
- ? resizeScheduleEvent(event, nextDateTime, options)
70
- : event);
68
+ export const resizeScheduleEvents = (events, eventId, nextDateTime, options = {}) => events.map(event => event.id === eventId ?
69
+ resizeScheduleEvent(event, nextDateTime, options) :
70
+ event);
71
71
  const isScheduleEvent = (value) => {
72
72
  if (!value || typeof value !== 'object')
73
73
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"theme-builder.d.ts","sourceRoot":"","sources":["../src/theme-builder.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,6BAA6B,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEtE,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,QAAQ,CAAA;AAE1D,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,OAAO,CAAA;AAEtD,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAClC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,qBAAqB,CAAA;IAC3B,MAAM,EAAE,uBAAuB,CAAA;IAC/B,MAAM,EAAE,gBAAgB,CAAA;CACzB;AAED,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,GAAG,IAAI,KACpB,6BAIF,CAAA;AAED,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,GAAG,IAAI,KACpB,qBAC0C,CAAA;AAE7C,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,GAAG,IAAI,KACpB,uBACkC,CAAA;AAErC,eAAO,MAAM,wBAAwB,GACnC,OAAO,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,iBAAY,KACX,MAMF,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,IAQjE,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,KACZ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAiCnC,CAAA;AAED,eAAO,MAAM,wBAAwB,GACnC,UAAS,wBAA6B,KACrC,uBAuCF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,QAAQ,gBAAgB,EACxB,QAAQ,uBAAuB,KAC9B,MAA8E,CAAA;AAEjF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,gBAAgB,EACxB,QAAQ,uBAAuB,EAC/B,QAAQ,6BAA6B,KACpC,MAaF,CAAA"}
1
+ {"version":3,"file":"theme-builder.d.ts","sourceRoot":"","sources":["../src/theme-builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,6BAA6B,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEtE,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,QAAQ,CAAA;AAE1D,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,OAAO,CAAA;AAEtD,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAClC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,qBAAqB,CAAA;IAC3B,MAAM,EAAE,uBAAuB,CAAA;IAC/B,MAAM,EAAE,gBAAgB,CAAA;CACzB;AAED,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,GAAG,IAAI,KACpB,6BAIF,CAAA;AAED,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,GAAG,IAAI,KACpB,qBAAsE,CAAA;AAEzE,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,GAAG,IAAI,KACpB,uBAAgE,CAAA;AAEnE,eAAO,MAAM,wBAAwB,GACnC,OAAO,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,iBAAY,KACX,MAMF,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,IAcjE,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,KACZ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAiCnC,CAAA;AAED,eAAO,MAAM,wBAAwB,GACnC,UAAS,wBAA6B,KACrC,uBA+CF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,QAAQ,gBAAgB,EACxB,QAAQ,uBAAuB,KAC9B,MAOF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,QAAQ,gBAAgB,EACxB,QAAQ,uBAAuB,EAC/B,QAAQ,6BAA6B,KACpC,MAeF,CAAA"}
@@ -6,8 +6,8 @@ export const coerceThemeBuilderExportFormat = (value) => {
6
6
  return value;
7
7
  return 'css';
8
8
  };
9
- export const coerceThemeBuilderMode = (value) => value === 'manual' ? 'manual' : 'generated';
10
- export const coerceThemeBuilderScheme = (value) => value === 'dark' ? 'dark' : 'light';
9
+ export const coerceThemeBuilderMode = (value) => (value === 'manual' ? 'manual' : 'generated');
10
+ export const coerceThemeBuilderScheme = (value) => (value === 'dark' ? 'dark' : 'light');
11
11
  export const normalizeThemeBuilderHue = (value, fallback = 0) => {
12
12
  const parsed = Number(value);
13
13
  if (!Number.isFinite(parsed))
@@ -17,7 +17,12 @@ export const normalizeThemeBuilderHue = (value, fallback = 0) => {
17
17
  export const normalizeThemeBuilderHex = (value) => {
18
18
  const hex = value.trim().replace(/^#/, '');
19
19
  if (/^[\da-f]{3}$/i.test(hex)) {
20
- return `#${hex.charAt(0)}${hex.charAt(0)}${hex.charAt(1)}${hex.charAt(1)}${hex.charAt(2)}${hex.charAt(2)}`.toLowerCase();
20
+ const expanded = [
21
+ hex.charAt(0),
22
+ hex.charAt(1),
23
+ hex.charAt(2)
24
+ ].map(character => character.repeat(2)).join('');
25
+ return `#${expanded}`.toLowerCase();
21
26
  }
22
27
  return /^[\da-f]{6}$/i.test(hex) ? `#${hex.toLowerCase()}` : null;
23
28
  };
@@ -57,10 +62,14 @@ export const createThemeBuilderTokens = (options = {}) => {
57
62
  const accentHue = normalizeThemeBuilderHue(options.accentHue, normalizeThemeBuilderHue(hue + 150));
58
63
  const mode = coerceThemeBuilderMode(options.mode);
59
64
  const scheme = coerceThemeBuilderScheme(options.scheme);
60
- const primary = options.primaryColor ? themeBuilderHexToHsl(options.primaryColor) : null;
61
- const secondary = options.secondaryColor ? themeBuilderHexToHsl(options.secondaryColor) : null;
62
- const baseHue = mode === 'manual' ? primary?.hue ?? hue : hue;
63
- const baseAccentHue = mode === 'manual' ? secondary?.hue ?? accentHue : accentHue;
65
+ const primary = options.primaryColor ?
66
+ themeBuilderHexToHsl(options.primaryColor) :
67
+ null;
68
+ const secondary = options.secondaryColor ?
69
+ themeBuilderHexToHsl(options.secondaryColor) :
70
+ null;
71
+ const baseHue = mode === 'manual' ? (primary?.hue ?? hue) : hue;
72
+ const baseAccentHue = mode === 'manual' ? (secondary?.hue ?? accentHue) : accentHue;
64
73
  const tokens = createThemeFromHue(baseHue, {
65
74
  accentHue: baseAccentHue,
66
75
  scheme
@@ -82,7 +91,13 @@ export const createThemeBuilderTokens = (options = {}) => {
82
91
  tokens
83
92
  };
84
93
  };
85
- export const exportThemeBuilderCss = (tokens, scheme) => exportThemeCss(tokens).replace('{', `{\n color-scheme: ${scheme};`);
94
+ export const exportThemeBuilderCss = (tokens, scheme) => {
95
+ const css = exportThemeCss(tokens);
96
+ const firstLineEnd = css.indexOf('\n');
97
+ if (firstLineEnd === -1)
98
+ return css;
99
+ return `${css.slice(0, firstLineEnd + 1)} color-scheme: ${scheme};\n${css.slice(firstLineEnd + 1)}`;
100
+ };
86
101
  export const exportThemeBuilderValue = (tokens, scheme, format) => {
87
102
  if (format === 'figma') {
88
103
  return JSON.stringify(exportThemeFigmaVariables(tokens, {
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
package/dist/theme.js CHANGED
@@ -102,6 +102,21 @@ export const parseThemeCss = (css) => {
102
102
  return tokens;
103
103
  };
104
104
  const normalizeHue = (hue) => ((Math.round(hue) % 360) + 360) % 360;
105
+ const replaceTrailingIntegerPercentage = (value, replacement) => {
106
+ if (!value.endsWith('%'))
107
+ return value;
108
+ let digitStart = value.length - 2;
109
+ while (digitStart >= 0) {
110
+ const character = value[digitStart];
111
+ if (character === undefined || character < '0' || character > '9')
112
+ break;
113
+ digitStart -= 1;
114
+ }
115
+ const percentageStart = digitStart + 1;
116
+ if (percentageStart === value.length - 1)
117
+ return value;
118
+ return `${value.slice(0, percentageStart)}${replacement}%`;
119
+ };
105
120
  const getHueFromToken = (value) => {
106
121
  const hue = Number(value.trim().split(/\s+/)[0]);
107
122
  return Number.isFinite(hue) ? normalizeHue(hue) : 221;
@@ -147,7 +162,7 @@ const lumenRadiusTokens = {
147
162
  'ui-radius-sm': '0.375rem'
148
163
  };
149
164
  const lumenTypographyTokens = {
150
- 'ui-font': 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif'
165
+ 'ui-font': '"Montserrat", "Avenir Next", "Segoe UI", sans-serif'
151
166
  };
152
167
  const lumenMotionTokens = {
153
168
  'ui-duration': '160ms',
@@ -180,7 +195,7 @@ const createStructureTokens = (hue, scheme = 'light') => ({
180
195
  export const createThemePalette = (brand, accent = brand) => ({
181
196
  accent,
182
197
  brand,
183
- 'brand-soft': brand.replace(/(\d+)%$/, '96%'),
198
+ 'brand-soft': replaceTrailingIntegerPercentage(brand, 96),
184
199
  'brand-solid': brand,
185
200
  canvas: '0 0% 100%',
186
201
  danger: '0 84% 60%',
@@ -282,9 +297,9 @@ const hslToRgb = (value) => {
282
297
  const getRelativeLuminance = ([r, g, b]) => {
283
298
  const [red, green, blue] = [r, g, b].map(channel => {
284
299
  const value = channel / 255;
285
- return value <= 0.03928
286
- ? value / 12.92
287
- : ((value + 0.055) / 1.055) ** 2.4;
300
+ return value <= 0.03928 ?
301
+ value / 12.92 :
302
+ ((value + 0.055) / 1.055) ** 2.4;
288
303
  });
289
304
  return 0.2126 * (red ?? 0) + 0.7152 * (green ?? 0) + 0.0722 * (blue ?? 0);
290
305
  };
@@ -312,9 +327,9 @@ export const suggestReadableInk = (background) => {
312
327
  const lightForeground = '0 0% 100%';
313
328
  const darkRatio = getContrastRatio(darkForeground, background);
314
329
  const lightRatio = getContrastRatio(lightForeground, background);
315
- return darkRatio >= lightRatio
316
- ? { background, foreground: darkForeground, ratio: darkRatio }
317
- : { background, foreground: lightForeground, ratio: lightRatio };
330
+ return darkRatio >= lightRatio ?
331
+ { background, foreground: darkForeground, ratio: darkRatio } :
332
+ { background, foreground: lightForeground, ratio: lightRatio };
318
333
  };
319
334
  export const tuneThemeContrast = (tokens, foreground = 'ink', background = 'canvas') => {
320
335
  const current = scoreThemeContrast(tokens, foreground, background);
package/dist/tokens.d.ts CHANGED
@@ -18,6 +18,24 @@ export declare const lumenColors: {
18
18
  readonly surfaceStrong: "268 15% 90%";
19
19
  readonly warning: "38 92% 50%";
20
20
  };
21
+ export declare const lumenChart: {
22
+ readonly axis: "var(--ink-muted)";
23
+ readonly divergingMid: "220 13% 91%";
24
+ readonly divergingNegative: "0 84% 60%";
25
+ readonly divergingPositive: "221 83% 53%";
26
+ readonly grid: "var(--line)";
27
+ readonly sequentialHigh: "221 83% 40%";
28
+ readonly sequentialLow: "218 100% 97%";
29
+ readonly sequentialMid: "221 83% 67%";
30
+ readonly series1: "221 83% 53%";
31
+ readonly series2: "168 76% 36%";
32
+ readonly series3: "280 72% 56%";
33
+ readonly series4: "25 95% 53%";
34
+ readonly series5: "340 82% 55%";
35
+ readonly series6: "190 82% 42%";
36
+ readonly series7: "52 92% 45%";
37
+ readonly series8: "215 16% 47%";
38
+ };
21
39
  export declare const lumenGlass: {
22
40
  readonly bg: "0 0% 100% / 0.55";
23
41
  readonly bgStrong: "0 0% 100% / 0.72";
@@ -43,7 +61,7 @@ export declare const lumenShadow: {
43
61
  readonly md: "0 8px 24px hsl(222 47% 11% / 0.08)";
44
62
  readonly sm: "0 1px 2px hsl(222 47% 11% / 0.06)";
45
63
  };
46
- export declare const lumenFont: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif";
64
+ export declare const lumenFont: "\"Montserrat\", \"Avenir Next\", \"Segoe UI\", sans-serif";
47
65
  export declare const lumenMotion: {
48
66
  readonly duration: "160ms";
49
67
  readonly durationFast: "120ms";
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,eAAe,CAAA;AAC/C,eAAO,MAAM,cAAc,SAAS,CAAA;AACpC,eAAO,MAAM,eAAe,UAAU,CAAA;AAEtC,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;CAgBd,CAAA;AAEV,eAAO,MAAM,UAAU;;;;;;;;;;;;;;CAcb,CAAA;AAEV,eAAO,MAAM,WAAW;;;;CAId,CAAA;AAEV,eAAO,MAAM,WAAW;;;;CAId,CAAA;AAEV,eAAO,MAAM,SAAS,EACpB,8FAAqG,CAAA;AAEvG,eAAO,MAAM,WAAW;;;;;;CAMd,CAAA;AAEV,eAAO,MAAM,gBAAgB,GAAI,GAAG,SAAS,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,EAAE,WACjD,CAAA"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,eAAe,CAAA;AAC/C,eAAO,MAAM,cAAc,SAAS,CAAA;AACpC,eAAO,MAAM,eAAe,UAAU,CAAA;AAEtC,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;CAgBd,CAAA;AAEV,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;CAiBb,CAAA;AAEV,eAAO,MAAM,UAAU;;;;;;;;;;;;;;CAcb,CAAA;AAEV,eAAO,MAAM,WAAW;;;;CAId,CAAA;AAEV,eAAO,MAAM,WAAW;;;;CAId,CAAA;AAEV,eAAO,MAAM,SAAS,EACpB,2DAA8D,CAAA;AAEhE,eAAO,MAAM,WAAW;;;;;;CAMd,CAAA;AAEV,eAAO,MAAM,gBAAgB,GAAI,GAAG,SAAS,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,EAAE,WAAsC,CAAA"}
package/dist/tokens.js CHANGED
@@ -18,6 +18,24 @@ export const lumenColors = {
18
18
  surfaceStrong: '268 15% 90%',
19
19
  warning: '38 92% 50%'
20
20
  };
21
+ export const lumenChart = {
22
+ axis: 'var(--ink-muted)',
23
+ divergingMid: '220 13% 91%',
24
+ divergingNegative: '0 84% 60%',
25
+ divergingPositive: '221 83% 53%',
26
+ grid: 'var(--line)',
27
+ sequentialHigh: '221 83% 40%',
28
+ sequentialLow: '218 100% 97%',
29
+ sequentialMid: '221 83% 67%',
30
+ series1: '221 83% 53%',
31
+ series2: '168 76% 36%',
32
+ series3: '280 72% 56%',
33
+ series4: '25 95% 53%',
34
+ series5: '340 82% 55%',
35
+ series6: '190 82% 42%',
36
+ series7: '52 92% 45%',
37
+ series8: '215 16% 47%'
38
+ };
21
39
  export const lumenGlass = {
22
40
  bg: '0 0% 100% / 0.55',
23
41
  bgStrong: '0 0% 100% / 0.72',
@@ -43,7 +61,7 @@ export const lumenShadow = {
43
61
  md: '0 8px 24px hsl(222 47% 11% / 0.08)',
44
62
  sm: '0 1px 2px hsl(222 47% 11% / 0.06)'
45
63
  };
46
- export const lumenFont = 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
64
+ export const lumenFont = '"Montserrat", "Avenir Next", "Segoe UI", sans-serif';
47
65
  export const lumenMotion = {
48
66
  duration: '160ms',
49
67
  durationFast: '120ms',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@santi020k/lumen-core",
3
- "version": "0.3.0",
3
+ "version": "1.0.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -27,6 +27,10 @@
27
27
  "types": "./dist/code.d.ts",
28
28
  "import": "./dist/code.js"
29
29
  },
30
+ "./charts": {
31
+ "types": "./dist/charts.d.ts",
32
+ "import": "./dist/charts.js"
33
+ },
30
34
  "./data": {
31
35
  "types": "./dist/data.d.ts",
32
36
  "import": "./dist/data.js"
@@ -90,8 +94,8 @@
90
94
  "typecheck": "tsc -p tsconfig.json --noEmit",
91
95
  "test": "vitest run --config ../../vitest.config.ts --project core",
92
96
  "test:coverage": "vitest run --config ../../vitest.config.ts --project core --coverage",
93
- "lint": "eslint . --no-warn-ignored",
94
- "lint:fix": "eslint . --fix --no-warn-ignored",
97
+ "lint": "eslint . --no-warn-ignored --max-warnings=0",
98
+ "lint:fix": "eslint . --fix --no-warn-ignored --max-warnings=0",
95
99
  "clean": "rm -rf dist coverage"
96
100
  }
97
101
  }