@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/README.md +22 -0
- package/dist/charts.d.ts +106 -0
- package/dist/charts.d.ts.map +1 -0
- package/dist/charts.js +380 -0
- package/dist/code.d.ts.map +1 -1
- package/dist/code.js +45 -34
- package/dist/components.d.ts +864 -2
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +284 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +3 -3
- package/dist/figma.d.ts.map +1 -1
- package/dist/forms.d.ts +29 -0
- package/dist/forms.d.ts.map +1 -0
- package/dist/forms.js +75 -0
- package/dist/icons.d.ts +9 -1
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +58 -11
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/props.d.ts +1 -2
- package/dist/props.d.ts.map +1 -1
- package/dist/props.js +1 -1
- package/dist/schedule.d.ts.map +1 -1
- package/dist/schedule.js +7 -7
- package/dist/theme-builder.d.ts.map +1 -1
- package/dist/theme-builder.js +23 -8
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +23 -8
- package/dist/tokens.d.ts +19 -1
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +19 -1
- package/package.json +7 -3
package/dist/icons.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { icons as lucideIcons } from '@lucide/icons';
|
|
2
|
-
const toKebabCase = (value) => value
|
|
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
|
|
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('&', '&')
|
|
20
45
|
.replaceAll('"', '"')
|
|
21
46
|
.replaceAll('<', '<')
|
|
22
47
|
.replaceAll('>', '>');
|
|
@@ -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 ?
|
|
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
|
|
36
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
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 {
|
|
6
|
-
export { type
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,aAAa,EACb,KAAK,kBAAkB,
|
|
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 {
|
|
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
|
|
8
|
+
export declare const resolveLumenGlass: (glass?: LumenGlass) => LumenGlass;
|
|
10
9
|
//# sourceMappingURL=props.d.ts.map
|
package/dist/props.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
5
|
+
export const resolveLumenGlass = (glass = false) => glass;
|
package/dist/schedule.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,kBAAkB,EAAE,CAAA;IAC5B,QAAQ,CAAC,EAAE,qBAAqB,CAAA;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,EAAE,kBAAkB,CAAA;IACrB,CAAC,EAAE,kBAAkB,CAAA;CACtB;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,OAAO,CAAA;AAErD,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,uBAAuB,CAAA;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAA;CACxC;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,4BAA6B,SAAQ,2BAA2B,EAAE,2BAA2B;CAAG;AAEjH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,SAAS,MAAM,EAAE,EACxB,QAAQ,SAAS,kBAAkB,EAAE,EACrC,YAAW,SAAS,qBAAqB,EAAO,KAC/C,iBAAiB,
|
|
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
|
-
|
|
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
|
-
|
|
70
|
-
|
|
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":"
|
|
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"}
|
package/dist/theme-builder.js
CHANGED
|
@@ -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
|
-
|
|
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 ?
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const
|
|
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) =>
|
|
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, {
|
package/dist/theme.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAErD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,4BAA4B,2LAgB/B,CAAA;AAEV,eAAO,MAAM,yBAAyB,oKAU5B,CAAA;AAEV,eAAO,MAAM,0BAA0B,+EAK7B,CAAA;AAEV,eAAO,MAAM,oBAAoB,wOAcvB,CAAA;AAEV,eAAO,MAAM,qBAAqB,wDAIxB,CAAA;AAEV,eAAO,MAAM,qBAAqB,2DAIxB,CAAA;AAEV,eAAO,MAAM,yBAAyB,sBAE5B,CAAA;AAEV,eAAO,MAAM,qBAAqB,mGAMxB,CAAA;AAEV,eAAO,MAAM,wBAAwB,2MAK3B,CAAA;AAEV,eAAO,MAAM,oBAAoB,oVAGvB,CAAA;AAEV,eAAO,MAAM,eAAe,wlBAIlB,CAAA;AAEV,MAAM,MAAM,2BAA2B,GAAG,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAA;AACrF,MAAM,MAAM,wBAAwB,GAAG,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAA;AAC/E,MAAM,MAAM,yBAAyB,GAAG,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAA;AACjF,MAAM,MAAM,mBAAmB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAA;AACrE,MAAM,MAAM,mBAAmB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAA;AACrE,MAAM,MAAM,oBAAoB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAA;AACvE,MAAM,MAAM,oBAAoB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAA;AACvE,MAAM,MAAM,wBAAwB,GAAG,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAA;AAC/E,MAAM,MAAM,oBAAoB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAA;AACvE,MAAM,MAAM,uBAAuB,GAAG,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAA;AAC7E,MAAM,MAAM,mBAAmB,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAA;AAEhE,eAAO,MAAM,cAAc,GACzB,QAAQ,gBAAgB,EACxB,iBAAkB,KACjB,MAUF,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,gBAY3C,CAAA;
|
|
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': '
|
|
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
|
|
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
|
-
|
|
287
|
-
|
|
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
|
-
|
|
317
|
-
|
|
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: "
|
|
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";
|
package/dist/tokens.d.ts.map
CHANGED
|
@@ -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,
|
|
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 = '
|
|
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
|
+
"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
|
}
|