@mindlogic-ai/logician-ui 3.1.0-alpha.3 → 3.1.0-alpha.4

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.
@@ -22,7 +22,7 @@ const FileInput = React.forwardRef(({ fileInputLabel, containerStyle = {}, bgIma
22
22
  const handleChange = (event) => {
23
23
  onChange(event.currentTarget.files);
24
24
  };
25
- return (jsxRuntime.jsx(react.Flex, { role: "button", w: "100%", h: "100%", maxH: 32, flexDir: "column", align: "center", justify: "center", border: "1px dashed", borderColor: "border.default", position: "relative", overflow: "hidden", borderRadius: "md", ...containerStyle, children: jsxRuntime.jsxs("label", { role: "group", style: { width: '100%', height: '100%', cursor: 'pointer' }, children: [bgImage && (jsxRuntime.jsx(react.Box, { position: "absolute", top: "0", left: "0", right: "0", bottom: "0", backgroundImage: bgImage, backgroundSize: "cover", backgroundPosition: "center", filter: "grayscale(50%) brightness(80%)", zIndex: "-1" })), jsxRuntime.jsx(react.Input, { type: "file", hidden: true, ref: ref, onChange: handleChange, ...rest }), jsxRuntime.jsx(react.Flex, { w: "100%", h: "100%", p: 7, flexDir: "column", justify: "center", align: "center", bgColor: "rgba(255, 255, 255, 0.85)", opacity: bgImage ? 0 : 1, transition: "ease-in", _groupHover: { opacity: 1 }, children: isLoading ? (jsxRuntime.jsx(Spinner.Spinner, {})) : (jsxRuntime.jsxs(react.Flex, { w: "100%", flexDir: "column", align: "center", justify: "center", children: [jsxRuntime.jsx(react.Box, { borderRadius: "lg", bgColor: bgImage ? 'transparent' : 'bg.muted', p: 3, mb: 2, w: "fit-content", children: jsxRuntime.jsx(index.LuUpload, { color: bgImage ? 'fg.default' : 'fg.subtle' }) }), jsxRuntime.jsx(Text.Text, { color: bgImage ? 'fg.default' : 'fg.subtle', children: fileInputLabel || translate('upload_your_file') })] })) })] }) }));
25
+ return (jsxRuntime.jsx(react.Flex, { role: "button", w: "100%", h: "100%", maxH: 32, flexDir: "column", align: "center", justify: "center", border: "1px dashed", borderColor: "border.default", position: "relative", overflow: "hidden", borderRadius: "md", ...containerStyle, children: jsxRuntime.jsxs("label", { role: "group", style: { width: '100%', height: '100%', cursor: 'pointer' }, children: [bgImage && (jsxRuntime.jsx(react.Box, { position: "absolute", top: "0", left: "0", right: "0", bottom: "0", backgroundImage: bgImage, backgroundSize: "cover", backgroundPosition: "center", filter: "grayscale(50%) brightness(80%)", zIndex: "-1" })), jsxRuntime.jsx(react.Input, { type: "file", hidden: true, ref: ref, onChange: handleChange, ...rest }), jsxRuntime.jsx(react.Flex, { w: "100%", h: "100%", p: 7, flexDir: "column", justify: "center", align: "center", bgColor: "color-mix(in srgb, var(--chakra-colors-bg-surface) 85%, transparent)", opacity: bgImage ? 0 : 1, transition: "ease-in", _groupHover: { opacity: 1 }, children: isLoading ? (jsxRuntime.jsx(Spinner.Spinner, {})) : (jsxRuntime.jsxs(react.Flex, { w: "100%", flexDir: "column", align: "center", justify: "center", children: [jsxRuntime.jsx(react.Box, { borderRadius: "lg", bgColor: bgImage ? 'transparent' : 'bg.muted', p: 3, mb: 2, w: "fit-content", children: jsxRuntime.jsx(index.LuUpload, { color: bgImage ? 'fg.default' : 'fg.subtle' }) }), jsxRuntime.jsx(Text.Text, { color: bgImage ? 'fg.default' : 'fg.subtle', children: fileInputLabel || translate('upload_your_file') })] })) })] }) }));
26
26
  });
27
27
  FileInput.displayName = 'FileInput';
28
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"FileInput.js","sources":["../../../src/components/FileInput/FileInput.tsx"],"sourcesContent":[null],"names":["forwardRef","useTranslate","_jsx","Flex","_jsxs","Box","Input","Spinner","LuUpload","Text"],"mappings":"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"}
1
+ {"version":3,"file":"FileInput.js","sources":["../../../src/components/FileInput/FileInput.tsx"],"sourcesContent":[null],"names":["forwardRef","useTranslate","_jsx","Flex","_jsxs","Box","Input","Spinner","LuUpload","Text"],"mappings":";;;;;;;;;;;;;;;;;;;AAUO,MAAM,SAAS,GAAGA,gBAAU,CACjC,CACE,EACE,cAAc,EACd,cAAc,GAAG,EAAE,EACnB,OAAO,EACP,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EACD,GAAG,KACD;AACF,IAAA,MAAM,SAAS,GAAGC,yBAAY,EAAE;AAEhC,IAAA,MAAM,YAAY,GAAyC,CAAC,KAAK,KAAI;AACnE,QAAA,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AACrC,IAAA,CAAC;AAED,IAAA,QACEC,cAAA,CAACC,UAAI,EAAA,EACH,IAAI,EAAC,QAAQ,EACb,CAAC,EAAC,MAAM,EACR,CAAC,EAAC,MAAM,EACR,IAAI,EAAE,EAAE,EACR,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,QAAQ,EAChB,MAAM,EAAC,YAAY,EACnB,WAAW,EAAC,gBAAgB,EAC5B,QAAQ,EAAC,UAAU,EACnB,QAAQ,EAAC,QAAQ,EACjB,YAAY,EAAC,IAAI,EAAA,GACb,cAAc,EAAA,QAAA,EAElBC,eAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAA,QAAA,EAAA,CAE1D,OAAO,KACNF,cAAA,CAACG,SAAG,EAAA,EACF,QAAQ,EAAC,UAAU,EACnB,GAAG,EAAC,GAAG,EACP,IAAI,EAAC,GAAG,EACR,KAAK,EAAC,GAAG,EACT,MAAM,EAAC,GAAG,EACV,eAAe,EAAE,OAAO,EACxB,cAAc,EAAC,OAAO,EACtB,kBAAkB,EAAC,QAAQ,EAC3B,MAAM,EAAC,gCAAgC,EACvC,MAAM,EAAC,IAAI,GACX,CACH,EACDH,cAAA,CAACI,WAAK,IACJ,IAAI,EAAC,MAAM,EACX,MAAM,EAAA,IAAA,EACN,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,YAAY,EAAA,GAClB,IAAI,EAAA,CACR,EACFJ,cAAA,CAACC,UAAI,IACH,CAAC,EAAC,MAAM,EACR,CAAC,EAAC,MAAM,EACR,CAAC,EAAE,CAAC,EACJ,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,sEAAsE,EAC9E,OAAO,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,EACxB,UAAU,EAAC,SAAS,EACpB,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,YAE1B,SAAS,IACRD,cAAA,CAACK,eAAO,EAAA,EAAA,CAAG,KAEXH,eAAA,CAACD,UAAI,EAAA,EAAC,CAAC,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,QAAQ,EAAA,QAAA,EAAA,CAC7DD,cAAA,CAACG,SAAG,EAAA,EACF,YAAY,EAAC,IAAI,EACjB,OAAO,EAAE,OAAO,GAAG,aAAa,GAAG,UAAU,EAC7C,CAAC,EAAE,CAAC,EACJ,EAAE,EAAE,CAAC,EACL,CAAC,EAAC,aAAa,EAAA,QAAA,EAEfH,eAACM,cAAQ,EAAA,EAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,WAAW,GAAI,EAAA,CACrD,EACNN,cAAA,CAACO,SAAI,IAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,WAAW,EAAA,QAAA,EAC9C,cAAc,IAAI,SAAS,CAAC,kBAAkB,CAAC,EAAA,CAC3C,IACF,CACR,EAAA,CACI,CAAA,EAAA,CACD,EAAA,CACH;AAEX,CAAC;AAGH,SAAS,CAAC,WAAW,GAAG,WAAW;;;;"}
@@ -20,7 +20,7 @@ const FileInput = forwardRef(({ fileInputLabel, containerStyle = {}, bgImage, on
20
20
  const handleChange = (event) => {
21
21
  onChange(event.currentTarget.files);
22
22
  };
23
- return (jsx(Flex, { role: "button", w: "100%", h: "100%", maxH: 32, flexDir: "column", align: "center", justify: "center", border: "1px dashed", borderColor: "border.default", position: "relative", overflow: "hidden", borderRadius: "md", ...containerStyle, children: jsxs("label", { role: "group", style: { width: '100%', height: '100%', cursor: 'pointer' }, children: [bgImage && (jsx(Box, { position: "absolute", top: "0", left: "0", right: "0", bottom: "0", backgroundImage: bgImage, backgroundSize: "cover", backgroundPosition: "center", filter: "grayscale(50%) brightness(80%)", zIndex: "-1" })), jsx(Input, { type: "file", hidden: true, ref: ref, onChange: handleChange, ...rest }), jsx(Flex, { w: "100%", h: "100%", p: 7, flexDir: "column", justify: "center", align: "center", bgColor: "rgba(255, 255, 255, 0.85)", opacity: bgImage ? 0 : 1, transition: "ease-in", _groupHover: { opacity: 1 }, children: isLoading ? (jsx(Spinner, {})) : (jsxs(Flex, { w: "100%", flexDir: "column", align: "center", justify: "center", children: [jsx(Box, { borderRadius: "lg", bgColor: bgImage ? 'transparent' : 'bg.muted', p: 3, mb: 2, w: "fit-content", children: jsx(LuUpload, { color: bgImage ? 'fg.default' : 'fg.subtle' }) }), jsx(Text, { color: bgImage ? 'fg.default' : 'fg.subtle', children: fileInputLabel || translate('upload_your_file') })] })) })] }) }));
23
+ return (jsx(Flex, { role: "button", w: "100%", h: "100%", maxH: 32, flexDir: "column", align: "center", justify: "center", border: "1px dashed", borderColor: "border.default", position: "relative", overflow: "hidden", borderRadius: "md", ...containerStyle, children: jsxs("label", { role: "group", style: { width: '100%', height: '100%', cursor: 'pointer' }, children: [bgImage && (jsx(Box, { position: "absolute", top: "0", left: "0", right: "0", bottom: "0", backgroundImage: bgImage, backgroundSize: "cover", backgroundPosition: "center", filter: "grayscale(50%) brightness(80%)", zIndex: "-1" })), jsx(Input, { type: "file", hidden: true, ref: ref, onChange: handleChange, ...rest }), jsx(Flex, { w: "100%", h: "100%", p: 7, flexDir: "column", justify: "center", align: "center", bgColor: "color-mix(in srgb, var(--chakra-colors-bg-surface) 85%, transparent)", opacity: bgImage ? 0 : 1, transition: "ease-in", _groupHover: { opacity: 1 }, children: isLoading ? (jsx(Spinner, {})) : (jsxs(Flex, { w: "100%", flexDir: "column", align: "center", justify: "center", children: [jsx(Box, { borderRadius: "lg", bgColor: bgImage ? 'transparent' : 'bg.muted', p: 3, mb: 2, w: "fit-content", children: jsx(LuUpload, { color: bgImage ? 'fg.default' : 'fg.subtle' }) }), jsx(Text, { color: bgImage ? 'fg.default' : 'fg.subtle', children: fileInputLabel || translate('upload_your_file') })] })) })] }) }));
24
24
  });
25
25
  FileInput.displayName = 'FileInput';
26
26
 
@@ -1 +1 @@
1
- {"version":3,"file":"FileInput.mjs","sources":["../../../src/components/FileInput/FileInput.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"FileInput.mjs","sources":["../../../src/components/FileInput/FileInput.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LineGraph.d.ts","sourceRoot":"","sources":["../../../src/components/LineGraph/LineGraph.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9D,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,SAAS,EAAE,4CAK5C,cAAc,CAAC,CAAC,CAAC,4CAuEnB,CAAC"}
1
+ {"version":3,"file":"LineGraph.d.ts","sourceRoot":"","sources":["../../../src/components/LineGraph/LineGraph.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9D,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,SAAS,EAAE,4CAK5C,cAAc,CAAC,CAAC,CAAC,4CAyEnB,CAAC"}
@@ -37,11 +37,15 @@ const LineGraph = ({ data = [], dataKeys, displayLegend = true, ...rest }) => {
37
37
  fill: 'var(--chakra-colors-fg-muted)',
38
38
  fontSize: `${react.useToken('fontSizes', 'sm')}`,
39
39
  }, tickMargin: 0 }), jsxRuntime.jsx(recharts.Tooltip
40
- // invert label color since mode inside tooltip is different
40
+ // The tooltip surface stays light in both modes, so the label keeps
41
+ // a fixed near-black. Must be a CSS var, not 'gray.1500' — recharts
42
+ // won't resolve Chakra tokens (see XAxis/YAxis above).
41
43
  , {
42
- // invert label color since mode inside tooltip is different
44
+ // The tooltip surface stays light in both modes, so the label keeps
45
+ // a fixed near-black. Must be a CSS var, not 'gray.1500' — recharts
46
+ // won't resolve Chakra tokens (see XAxis/YAxis above).
43
47
  labelStyle: {
44
- color: 'gray.1500',
48
+ color: 'var(--chakra-colors-gray-1500)',
45
49
  } }), displayLegend && (jsxRuntime.jsx(recharts.Legend, { wrapperStyle: {
46
50
  bottom: -16,
47
51
  } })), dataKeys.map(({ key, label, color }) => (jsxRuntime.jsx(recharts.Line, { type: "monotone", dataKey: key, name: label, stroke: color ?? primaryColor, dot: { r: 0 } }, `line-${key}`)))] }) }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"LineGraph.js","sources":["../../../src/components/LineGraph/LineGraph.tsx"],"sourcesContent":[null],"names":["useToken","_jsx","Box","ResponsiveContainer","_jsxs","LineChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","Line"],"mappings":";;;;;;;MAca,SAAS,GAAG,CAAsB,EAC7C,IAAI,GAAG,EAAE,EACT,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,GAAG,IAAI,EACW,KAAI;IACtB,MAAM,YAAY,GAAGA,cAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAA,QACEC,cAAA,CAACC,SAAG,EAAA,EAAC,CAAC,EAAC,OAAO,EAAA,GAAK,IAAI,EAAA,QAAA,EACrBD,cAAA,CAACE,4BAAmB,EAAA,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAA,QAAA,EAC7CC,eAAA,CAACC,kBAAS,EAAA,EACR,IAAI,EAAE,IAAI,EACV,MAAM,EAAE;AACN,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA,EAAA,QAAA,EAAA,CAEDJ,eAACK;;;;AAEC,wBAAA,eAAe,EAAC,EAAE,EAClB,QAAQ,EAAE,KAAK;;;wBAGf,MAAM,EAAC,qCAAqC,EAAA,CAC5C,EACFL,eAACM,cAAK,EAAA,EACJ,OAAO,EAAC,MAAM;;AAEd,wBAAA,MAAM,EAAC,aAAa;;;AAGpB,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE,+BAA+B;4BACrC,QAAQ,EAAE,GAAGP,cAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,CAAE;AAC3C,yBAAA,EACD,UAAU,EAAE,CAAC,EAAA,CACb,EACFC,eAACO;;;;AAEC,wBAAA,MAAM,EAAC,aAAa;;AAEpB,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE,+BAA+B;4BACrC,QAAQ,EAAE,GAAGR,cAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,CAAE;AAC3C,yBAAA,EACD,UAAU,EAAE,CAAC,EAAA,CACb,EACFC,eAACQ;;;;AAEC,wBAAA,UAAU,EAAE;AACV,4BAAA,KAAK,EAAE,WAAW;yBACnB,EAAA,CACD,EACD,aAAa,KACZR,eAACS,eAAM,EAAA,EACL,YAAY,EAAE;4BACZ,MAAM,EAAE,GAAG;yBACZ,EAAA,CACD,CACH,EACA,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAClCT,cAAA,CAACU,aAAI,EAAA,EAEH,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,KAAK,IAAI,YAAY,EAC7B,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAA,EALR,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAMlB,CACH,CAAC,CAAA,EAAA,CACQ,EAAA,CACQ,EAAA,CAClB;AAEV;;;;"}
1
+ {"version":3,"file":"LineGraph.js","sources":["../../../src/components/LineGraph/LineGraph.tsx"],"sourcesContent":[null],"names":["useToken","_jsx","Box","ResponsiveContainer","_jsxs","LineChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","Line"],"mappings":";;;;;;;MAca,SAAS,GAAG,CAAsB,EAC7C,IAAI,GAAG,EAAE,EACT,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,GAAG,IAAI,EACW,KAAI;IACtB,MAAM,YAAY,GAAGA,cAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAA,QACEC,cAAA,CAACC,SAAG,EAAA,EAAC,CAAC,EAAC,OAAO,EAAA,GAAK,IAAI,EAAA,QAAA,EACrBD,cAAA,CAACE,4BAAmB,EAAA,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAA,QAAA,EAC7CC,eAAA,CAACC,kBAAS,EAAA,EACR,IAAI,EAAE,IAAI,EACV,MAAM,EAAE;AACN,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA,EAAA,QAAA,EAAA,CAEDJ,eAACK;;;;AAEC,wBAAA,eAAe,EAAC,EAAE,EAClB,QAAQ,EAAE,KAAK;;;wBAGf,MAAM,EAAC,qCAAqC,EAAA,CAC5C,EACFL,eAACM,cAAK,EAAA,EACJ,OAAO,EAAC,MAAM;;AAEd,wBAAA,MAAM,EAAC,aAAa;;;AAGpB,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE,+BAA+B;4BACrC,QAAQ,EAAE,GAAGP,cAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,CAAE;AAC3C,yBAAA,EACD,UAAU,EAAE,CAAC,EAAA,CACb,EACFC,eAACO;;;;AAEC,wBAAA,MAAM,EAAC,aAAa;;AAEpB,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE,+BAA+B;4BACrC,QAAQ,EAAE,GAAGR,cAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,CAAE;AAC3C,yBAAA,EACD,UAAU,EAAE,CAAC,EAAA,CACb,EACFC,eAACQ;;;;;;;;AAIC,wBAAA,UAAU,EAAE;AACV,4BAAA,KAAK,EAAE,gCAAgC;yBACxC,EAAA,CACD,EACD,aAAa,KACZR,eAACS,eAAM,EAAA,EACL,YAAY,EAAE;4BACZ,MAAM,EAAE,GAAG;yBACZ,EAAA,CACD,CACH,EACA,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAClCT,cAAA,CAACU,aAAI,EAAA,EAEH,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,KAAK,IAAI,YAAY,EAC7B,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAA,EALR,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAMlB,CACH,CAAC,CAAA,EAAA,CACQ,EAAA,CACQ,EAAA,CAClB;AAEV;;;;"}
@@ -35,11 +35,15 @@ const LineGraph = ({ data = [], dataKeys, displayLegend = true, ...rest }) => {
35
35
  fill: 'var(--chakra-colors-fg-muted)',
36
36
  fontSize: `${useToken('fontSizes', 'sm')}`,
37
37
  }, tickMargin: 0 }), jsx(Tooltip
38
- // invert label color since mode inside tooltip is different
38
+ // The tooltip surface stays light in both modes, so the label keeps
39
+ // a fixed near-black. Must be a CSS var, not 'gray.1500' — recharts
40
+ // won't resolve Chakra tokens (see XAxis/YAxis above).
39
41
  , {
40
- // invert label color since mode inside tooltip is different
42
+ // The tooltip surface stays light in both modes, so the label keeps
43
+ // a fixed near-black. Must be a CSS var, not 'gray.1500' — recharts
44
+ // won't resolve Chakra tokens (see XAxis/YAxis above).
41
45
  labelStyle: {
42
- color: 'gray.1500',
46
+ color: 'var(--chakra-colors-gray-1500)',
43
47
  } }), displayLegend && (jsx(Legend, { wrapperStyle: {
44
48
  bottom: -16,
45
49
  } })), dataKeys.map(({ key, label, color }) => (jsx(Line, { type: "monotone", dataKey: key, name: label, stroke: color ?? primaryColor, dot: { r: 0 } }, `line-${key}`)))] }) }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"LineGraph.mjs","sources":["../../../src/components/LineGraph/LineGraph.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":";;;;;MAca,SAAS,GAAG,CAAsB,EAC7C,IAAI,GAAG,EAAE,EACT,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,GAAG,IAAI,EACW,KAAI;IACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAA,QACEA,GAAA,CAAC,GAAG,EAAA,EAAC,CAAC,EAAC,OAAO,EAAA,GAAK,IAAI,EAAA,QAAA,EACrBA,GAAA,CAAC,mBAAmB,EAAA,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAA,QAAA,EAC7CC,IAAA,CAAC,SAAS,EAAA,EACR,IAAI,EAAE,IAAI,EACV,MAAM,EAAE;AACN,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA,EAAA,QAAA,EAAA,CAEDD,IAAC;;;;AAEC,wBAAA,eAAe,EAAC,EAAE,EAClB,QAAQ,EAAE,KAAK;;;wBAGf,MAAM,EAAC,qCAAqC,EAAA,CAC5C,EACFA,IAAC,KAAK,EAAA,EACJ,OAAO,EAAC,MAAM;;AAEd,wBAAA,MAAM,EAAC,aAAa;;;AAGpB,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE,+BAA+B;4BACrC,QAAQ,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,CAAE;AAC3C,yBAAA,EACD,UAAU,EAAE,CAAC,EAAA,CACb,EACFA,IAAC;;;;AAEC,wBAAA,MAAM,EAAC,aAAa;;AAEpB,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE,+BAA+B;4BACrC,QAAQ,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,CAAE;AAC3C,yBAAA,EACD,UAAU,EAAE,CAAC,EAAA,CACb,EACFA,IAAC;;;;AAEC,wBAAA,UAAU,EAAE;AACV,4BAAA,KAAK,EAAE,WAAW;yBACnB,EAAA,CACD,EACD,aAAa,KACZA,IAAC,MAAM,EAAA,EACL,YAAY,EAAE;4BACZ,MAAM,EAAE,GAAG;yBACZ,EAAA,CACD,CACH,EACA,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAClCA,GAAA,CAAC,IAAI,EAAA,EAEH,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,KAAK,IAAI,YAAY,EAC7B,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAA,EALR,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAMlB,CACH,CAAC,CAAA,EAAA,CACQ,EAAA,CACQ,EAAA,CAClB;AAEV;;;;"}
1
+ {"version":3,"file":"LineGraph.mjs","sources":["../../../src/components/LineGraph/LineGraph.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":";;;;;MAca,SAAS,GAAG,CAAsB,EAC7C,IAAI,GAAG,EAAE,EACT,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,GAAG,IAAI,EACW,KAAI;IACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAA,QACEA,GAAA,CAAC,GAAG,EAAA,EAAC,CAAC,EAAC,OAAO,EAAA,GAAK,IAAI,EAAA,QAAA,EACrBA,GAAA,CAAC,mBAAmB,EAAA,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAA,QAAA,EAC7CC,IAAA,CAAC,SAAS,EAAA,EACR,IAAI,EAAE,IAAI,EACV,MAAM,EAAE;AACN,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA,EAAA,QAAA,EAAA,CAEDD,IAAC;;;;AAEC,wBAAA,eAAe,EAAC,EAAE,EAClB,QAAQ,EAAE,KAAK;;;wBAGf,MAAM,EAAC,qCAAqC,EAAA,CAC5C,EACFA,IAAC,KAAK,EAAA,EACJ,OAAO,EAAC,MAAM;;AAEd,wBAAA,MAAM,EAAC,aAAa;;;AAGpB,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE,+BAA+B;4BACrC,QAAQ,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,CAAE;AAC3C,yBAAA,EACD,UAAU,EAAE,CAAC,EAAA,CACb,EACFA,IAAC;;;;AAEC,wBAAA,MAAM,EAAC,aAAa;;AAEpB,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE,+BAA+B;4BACrC,QAAQ,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,CAAE;AAC3C,yBAAA,EACD,UAAU,EAAE,CAAC,EAAA,CACb,EACFA,IAAC;;;;;;;;AAIC,wBAAA,UAAU,EAAE;AACV,4BAAA,KAAK,EAAE,gCAAgC;yBACxC,EAAA,CACD,EACD,aAAa,KACZA,IAAC,MAAM,EAAA,EACL,YAAY,EAAE;4BACZ,MAAM,EAAE,GAAG;yBACZ,EAAA,CACD,CACH,EACA,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAClCA,GAAA,CAAC,IAAI,EAAA,EAEH,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,KAAK,IAAI,YAAY,EAC7B,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAA,EALR,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAMlB,CACH,CAAC,CAAA,EAAA,CACQ,EAAA,CACQ,EAAA,CAClB;AAEV;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindlogic-ai/logician-ui",
3
- "version": "3.1.0-alpha.3",
3
+ "version": "3.1.0-alpha.4",
4
4
  "description": "A comprehensive React design system built on Chakra UI",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -74,7 +74,7 @@ export const FileInput = forwardRef<HTMLInputElement, FileInputProps>(
74
74
  flexDir="column"
75
75
  justify="center"
76
76
  align="center"
77
- bgColor="rgba(255, 255, 255, 0.85)"
77
+ bgColor="color-mix(in srgb, var(--chakra-colors-bg-surface) 85%, transparent)"
78
78
  opacity={bgImage ? 0 : 1}
79
79
  transition="ease-in"
80
80
  _groupHover={{ opacity: 1 }} // Set opacity to 1 on parent hover
@@ -62,9 +62,11 @@ export const LineGraph = <T extends DatumBase>({
62
62
  tickMargin={0}
63
63
  />
64
64
  <Tooltip
65
- // invert label color since mode inside tooltip is different
65
+ // The tooltip surface stays light in both modes, so the label keeps
66
+ // a fixed near-black. Must be a CSS var, not 'gray.1500' — recharts
67
+ // won't resolve Chakra tokens (see XAxis/YAxis above).
66
68
  labelStyle={{
67
- color: 'gray.1500',
69
+ color: 'var(--chakra-colors-gray-1500)',
68
70
  }}
69
71
  />
70
72
  {displayLegend && (
@@ -146,7 +146,10 @@ const Component = () => {
146
146
  **Semantic tokens to use:**
147
147
  - `primary.main`, `primary.light` - Primary brand colors
148
148
  - `danger.main` - Error/danger states
149
- - `gray.*` - Neutral colors (gray.50 to gray.1200)
149
+ - `bg.*` / `fg.*` / `border.*` - Neutral surfaces, text, and borders that **flip with
150
+ color mode**. Prefer these over raw `gray.*`/`white` so components work in dark mode
151
+ (see `src/theme/claude.md` → Neutral Semantic Tokens). Raw `gray.*` is only for values
152
+ that must stay fixed across modes.
150
153
 
151
154
  ### Common Style Patterns
152
155
 
@@ -348,7 +351,9 @@ See `.storybook/claude.md` for Storybook-specific patterns.
348
351
 
349
352
  1. **Forgetting forwardRef**: Always use it for components wrapping DOM elements
350
353
  2. **Not setting displayName**: Required for React DevTools
351
- 3. **Hardcoded colors**: Use theme tokens instead
354
+ 3. **Hardcoded / non-flipping colors**: Use theme tokens instead — and for neutrals use the
355
+ flipping `bg.*`/`fg.*`/`border.*` tokens, not raw `gray.*`/`white` (which stay stuck in
356
+ light mode under `.dark`)
352
357
  4. **Missing focus states**: Required for accessibility
353
358
  5. **Props in wrong order**: Custom props before spread
354
359
  6. **Not handling IME**: Important for international users
@@ -381,6 +386,7 @@ Before considering a component complete:
381
386
  - [ ] Disabled states work correctly
382
387
  - [ ] Hover states are visible
383
388
  - [ ] Theme tokens are used (no hardcoded colors)
389
+ - [ ] Neutral colors use flipping `bg.*`/`fg.*`/`border.*` tokens; verified in dark mode
384
390
  - [ ] Storybook story is created
385
391
  - [ ] Component is exported from src/index.ts
386
392
  - [ ] Works with keyboard navigation
@@ -20,7 +20,9 @@ src/theme/
20
20
  1. **Accessibility First**: All semantic color combinations meet WCAG 2.1 AA standards (4.5:1 minimum contrast)
21
21
  2. **Cool Gray Foundation**: Slate-based grays with blue undertone for a modern, professional feel
22
22
  3. **Consistent Scale**: Each color has 50/100/200/300/500/600/700/800/900 steps
23
- 4. **Light Mode Optimized**: Designed for light mode with semantic token flexibility
23
+ 4. **Light & Dark Mode**: Neutral semantic tokens (`bg.*`/`fg.*`/`border.*`) carry a `_dark`
24
+ variant and flip automatically by color mode. Use them instead of raw `gray.*`/`white`
25
+ primitives so components work in both modes (see [Neutral Semantic Tokens](#neutral-semantic-tokens-dark-mode)).
24
26
 
25
27
  ### Primitive Color Palettes
26
28
 
@@ -185,6 +187,59 @@ semanticTokens: {
185
187
  }
186
188
  ```
187
189
 
190
+ ### Neutral Semantic Tokens (Dark Mode)
191
+
192
+ The brand semantics above carry `_dark` variants, but the **neutral** tokens below are
193
+ the ones to reach for on surfaces, text, and borders. Each maps onto the `gray.0–1500`
194
+ scale and resolves to a different step under `.dark` (Chakra v3's class strategy), so a
195
+ component built with them flips for free — **no `_dark` overrides needed**.
196
+
197
+ ```tsx
198
+ semanticTokens: {
199
+ colors: {
200
+ // Backgrounds base (light) → _dark
201
+ bg: {
202
+ canvas: 'gray.0', // app background → gray.1500
203
+ surface: 'white', // cards, menus, popovers → gray.1400
204
+ subtle: 'gray.50', // secondary surface → gray.1300
205
+ muted: 'gray.100', // tertiary fill, hover → gray.1200
206
+ inverse: 'gray.1300', // high-contrast surface → gray.50
207
+ },
208
+ // Foreground (text / icons)
209
+ fg: {
210
+ default: 'gray.1300', // primary text → gray.200
211
+ muted: 'gray.900', // secondary → gray.400
212
+ subtle: 'gray.700', // tertiary → gray.600
213
+ inverse: 'gray.0', // text on inverse → gray.1400
214
+ },
215
+ // Borders / dividers
216
+ border: {
217
+ default: 'gray.300', // standard borders → gray.1100
218
+ subtle: 'gray.200', // low-emphasis → gray.1300
219
+ strong: 'gray.500', // high-emphasis → gray.900
220
+ },
221
+ },
222
+ }
223
+ ```
224
+
225
+ ```tsx
226
+ // ✅ Flips with color mode
227
+ <Box bg="bg.surface" color="fg.default" borderColor="border.default" />
228
+
229
+ // ❌ Stuck in light mode — a white panel / dark text that never flips
230
+ <Box bg="white" color="gray.1300" borderColor="gray.300" />
231
+ ```
232
+
233
+ **Exceptions (intentionally do not flip):**
234
+ - Solid brand fills and their white labels (`bg="primary.main" color="white"`) are
235
+ mode-invariant by design — keep them as primitives.
236
+ - White slider knobs and always-dark surfaces (Tooltip, CodeTabs) stay fixed.
237
+ - **Third-party renderers that don't resolve Chakra tokens** (e.g. recharts in
238
+ `LineGraph`): feed the resolved CSS var instead — `var(--chakra-colors-fg-muted)`.
239
+ - **Translucency**: when you need a semi-transparent surface that still flips, mix the
240
+ CSS var instead of hardcoding rgba — e.g.
241
+ `color-mix(in srgb, var(--chakra-colors-bg-surface) 85%, transparent)` (see `FileInput`).
242
+
188
243
  ### WCAG Contrast Ratios
189
244
 
190
245
  All semantic color combinations meet WCAG 2.1 accessibility standards:
@@ -214,13 +269,24 @@ All semantic color combinations meet WCAG 2.1 accessibility standards:
214
269
  <Box bg="warning.lighter" color="warning.dark" />
215
270
  ```
216
271
 
272
+ ### Neutral Surfaces / Text / Borders: use `bg.*` / `fg.*` / `border.*`
273
+
274
+ These flip with color mode — prefer them over raw `gray.*`/`white` for anything neutral:
275
+
276
+ ```tsx
277
+ // ✅ Best - flips between light and dark
278
+ <Box bgColor="bg.surface" borderColor="border.default" />
279
+ <Text color="fg.default">Primary text</Text>
280
+ <Text color="fg.subtle">Secondary text</Text>
281
+ ```
282
+
217
283
  ### Alternative: Primitive Colors
218
284
 
219
285
  ```tsx
220
- // Acceptable - when no semantic token applies
221
- <Box borderColor="gray.300" bgColor="gray.0" />
222
- <Text color="gray.1300">Primary text</Text>
223
- <Text color="gray.700">Secondary text</Text>
286
+ // ⚠️ Only when the value must stay fixed across modes (rare for neutrals).
287
+ // Raw gray.*/white do NOT flip, so a `white` surface or `gray.1300` text will be
288
+ // stuck in light mode under .dark. Reach for bg.*/fg.*/border.* above instead.
289
+ <Box bgColor="primary.main" color="white" /> // mode-invariant brand fill — OK
224
290
  ```
225
291
 
226
292
  ### Accessing Theme in Components
@@ -340,13 +406,17 @@ const color = theme.semanticTokens.colors.primary.main;
340
406
  const color = '#1751D0';
341
407
  ```
342
408
 
343
- ### 3. Consistent Gray Usage
409
+ ### 3. Consistent Gray Usage — prefer flipping neutral tokens
344
410
 
345
411
  ```tsx
346
- // ✅ Good - semantic gray usage
347
- <Text color="gray.1300">Primary text</Text>
348
- <Text color="gray.700">Secondary text</Text>
349
- <Box borderColor="gray.300" />
412
+ // ✅ Best - neutral semantic tokens flip with color mode
413
+ <Text color="fg.default">Primary text</Text>
414
+ <Text color="fg.subtle">Secondary text</Text>
415
+ <Box bgColor="bg.surface" borderColor="border.default" />
416
+
417
+ // ⚠️ Stuck in light mode - raw gray.*/white never flip under .dark
418
+ <Text color="gray.1300" /> // use fg.default
419
+ <Box bgColor="white" /> // use bg.surface
350
420
 
351
421
  // ❌ Bad - arbitrary values
352
422
  <Text color="#333" />