@mindlogic-ai/logician-ui 5.0.0-alpha.8 → 5.0.0-alpha.9

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.
@@ -34,6 +34,7 @@ require('../../Badge/Badge.js');
34
34
  require('../../Workflow/canvas/NodeShell/NodeShell.styles.js');
35
35
  require('../../Workflow/graphObserver.js');
36
36
  require('@dagrejs/dagre');
37
+ require('../../../hooks/useLanguage.js');
37
38
  require('../../Workflow/canvas/Canvas/Canvas.js');
38
39
 
39
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"CollapsibleFormSection.js","sources":["../../../../src/components/Form/FormSection/CollapsibleFormSection.tsx"],"sourcesContent":[null],"names":["_jsx","CollapsibleSection","VStack"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA;;;;AAIG;AACI,MAAM,sBAAsB,GAAG,CAAC,EACrC,KAAK,EACL,MAAM,EACN,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,GAAG,GAAG,CAAC,EACP,QAAQ,GACoB,MAC5BA,cAAA,CAACC,qCAAkB,EAAA,EACjB,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,eAAe,EAAE,WAAW,EAC5B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EAAA,QAAA,EAEpBD,eAACE,YAAM,EAAA,EAAC,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAC,MAAM,EAAA,QAAA,EACvC,QAAQ,EAAA,CACF,EAAA,CACU;;;;"}
1
+ {"version":3,"file":"CollapsibleFormSection.js","sources":["../../../../src/components/Form/FormSection/CollapsibleFormSection.tsx"],"sourcesContent":[null],"names":["_jsx","CollapsibleSection","VStack"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA;;;;AAIG;AACI,MAAM,sBAAsB,GAAG,CAAC,EACrC,KAAK,EACL,MAAM,EACN,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,GAAG,GAAG,CAAC,EACP,QAAQ,GACoB,MAC5BA,cAAA,CAACC,qCAAkB,EAAA,EACjB,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,eAAe,EAAE,WAAW,EAC5B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EAAA,QAAA,EAEpBD,eAACE,YAAM,EAAA,EAAC,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAC,MAAM,EAAA,QAAA,EACvC,QAAQ,EAAA,CACF,EAAA,CACU;;;;"}
@@ -32,6 +32,7 @@ import '../../Badge/Badge.mjs';
32
32
  import '../../Workflow/canvas/NodeShell/NodeShell.styles.mjs';
33
33
  import '../../Workflow/graphObserver.mjs';
34
34
  import '@dagrejs/dagre';
35
+ import '../../../hooks/useLanguage.mjs';
35
36
  import '../../Workflow/canvas/Canvas/Canvas.mjs';
36
37
 
37
38
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"CollapsibleFormSection.mjs","sources":["../../../../src/components/Form/FormSection/CollapsibleFormSection.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA;;;;AAIG;AACI,MAAM,sBAAsB,GAAG,CAAC,EACrC,KAAK,EACL,MAAM,EACN,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,GAAG,GAAG,CAAC,EACP,QAAQ,GACoB,MAC5BA,GAAA,CAAC,kBAAkB,EAAA,EACjB,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,eAAe,EAAE,WAAW,EAC5B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EAAA,QAAA,EAEpBA,IAAC,MAAM,EAAA,EAAC,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAC,MAAM,EAAA,QAAA,EACvC,QAAQ,EAAA,CACF,EAAA,CACU;;;;"}
1
+ {"version":3,"file":"CollapsibleFormSection.mjs","sources":["../../../../src/components/Form/FormSection/CollapsibleFormSection.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA;;;;AAIG;AACI,MAAM,sBAAsB,GAAG,CAAC,EACrC,KAAK,EACL,MAAM,EACN,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,KAAK,EAChB,GAAG,GAAG,CAAC,EACP,QAAQ,GACoB,MAC5BA,GAAA,CAAC,kBAAkB,EAAA,EACjB,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,eAAe,EAAE,WAAW,EAC5B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EAAA,QAAA,EAEpBA,IAAC,MAAM,EAAA,EAAC,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAC,MAAM,EAAA,QAAA,EACvC,QAAQ,EAAA,CACF,EAAA,CACU;;;;"}
@@ -2,6 +2,11 @@ import type { SupportedLanguage } from '@/components/MonthPicker/constants';
2
2
  export interface LanguageContextValue {
3
3
  language: SupportedLanguage;
4
4
  }
5
+ /**
6
+ * The value seen outside any `LogicianProvider`. Exported so `useTranslate`
7
+ * can tell "no provider" (keep Korean) from a provider set to `en`.
8
+ */
9
+ export declare const NO_PROVIDER_LANGUAGE: LanguageContextValue;
5
10
  export declare const LanguageContext: import("react").Context<LanguageContextValue>;
6
11
  export declare const useLanguage: () => LanguageContextValue;
7
12
  export default useLanguage;
@@ -1 +1 @@
1
- {"version":3,"file":"useLanguage.d.ts","sourceRoot":"","sources":["../../src/hooks/useLanguage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,eAAO,MAAM,eAAe,+CAE1B,CAAC;AAEH,eAAO,MAAM,WAAW,4BAAoC,CAAC;AAE7D,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"useLanguage.d.ts","sourceRoot":"","sources":["../../src/hooks/useLanguage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,oBAAyC,CAAC;AAE7E,eAAO,MAAM,eAAe,+CAC+B,CAAC;AAE5D,eAAO,MAAM,WAAW,4BAAoC,CAAC;AAE7D,eAAe,WAAW,CAAC"}
@@ -5,12 +5,16 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var React = require('react');
7
7
 
8
- const LanguageContext = React.createContext({
9
- language: 'en',
10
- });
8
+ /**
9
+ * The value seen outside any `LogicianProvider`. Exported so `useTranslate`
10
+ * can tell "no provider" (keep Korean) from a provider set to `en`.
11
+ */
12
+ const NO_PROVIDER_LANGUAGE = { language: 'en' };
13
+ const LanguageContext = React.createContext(NO_PROVIDER_LANGUAGE);
11
14
  const useLanguage = () => React.useContext(LanguageContext);
12
15
 
13
16
  exports.LanguageContext = LanguageContext;
17
+ exports.NO_PROVIDER_LANGUAGE = NO_PROVIDER_LANGUAGE;
14
18
  exports.default = useLanguage;
15
19
  exports.useLanguage = useLanguage;
16
20
  //# sourceMappingURL=useLanguage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLanguage.js","sources":["../../src/hooks/useLanguage.ts"],"sourcesContent":[null],"names":["createContext","useContext"],"mappings":";;;;;;;AAUO,MAAM,eAAe,GAAGA,mBAAa,CAAuB;AACjE,IAAA,QAAQ,EAAE,IAAI;AACf,CAAA;AAEM,MAAM,WAAW,GAAG,MAAMC,gBAAU,CAAC,eAAe;;;;;;"}
1
+ {"version":3,"file":"useLanguage.js","sources":["../../src/hooks/useLanguage.ts"],"sourcesContent":[null],"names":["createContext","useContext"],"mappings":";;;;;;;AAUA;;;AAGG;MACU,oBAAoB,GAAyB,EAAE,QAAQ,EAAE,IAAI;MAE7D,eAAe,GAC1BA,mBAAa,CAAuB,oBAAoB;AAEnD,MAAM,WAAW,GAAG,MAAMC,gBAAU,CAAC,eAAe;;;;;;;"}
@@ -1,10 +1,13 @@
1
1
  "use client";
2
2
  import { createContext, useContext } from 'react';
3
3
 
4
- const LanguageContext = createContext({
5
- language: 'en',
6
- });
4
+ /**
5
+ * The value seen outside any `LogicianProvider`. Exported so `useTranslate`
6
+ * can tell "no provider" (keep Korean) from a provider set to `en`.
7
+ */
8
+ const NO_PROVIDER_LANGUAGE = { language: 'en' };
9
+ const LanguageContext = createContext(NO_PROVIDER_LANGUAGE);
7
10
  const useLanguage = () => useContext(LanguageContext);
8
11
 
9
- export { LanguageContext, useLanguage as default, useLanguage };
12
+ export { LanguageContext, NO_PROVIDER_LANGUAGE, useLanguage as default, useLanguage };
10
13
  //# sourceMappingURL=useLanguage.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLanguage.mjs","sources":["../../src/hooks/useLanguage.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAUO,MAAM,eAAe,GAAG,aAAa,CAAuB;AACjE,IAAA,QAAQ,EAAE,IAAI;AACf,CAAA;AAEM,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,eAAe;;;;"}
1
+ {"version":3,"file":"useLanguage.mjs","sources":["../../src/hooks/useLanguage.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAUA;;;AAGG;MACU,oBAAoB,GAAyB,EAAE,QAAQ,EAAE,IAAI;MAE7D,eAAe,GAC1B,aAAa,CAAuB,oBAAoB;AAEnD,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,eAAe;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTranslate.d.ts","sourceRoot":"","sources":["../../src/hooks/useTranslate.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,YAAY,GAAI,iBAAiB,WAGpC,MAAM,cAAc;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,mBASnD,CAAC"}
1
+ {"version":3,"file":"useTranslate.d.ts","sourceRoot":"","sources":["../../src/hooks/useTranslate.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,YAAY,GAAI,iBAAiB,WAQpC,MAAM,cAAc;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,mBASnD,CAAC"}
@@ -4,7 +4,9 @@
4
4
  var React = require('react');
5
5
  var Defaults_translations = require('../translations/Defaults.translations.json.js');
6
6
  var formatTextForMarkdown = require('../utils/formatTextForMarkdown.js');
7
+ var useLanguage = require('./useLanguage.js');
7
8
 
9
+ const DEFAULT_LOCALE = 'ko';
8
10
  // Given a block of text and variables, replaces instances of the provided variables in the text
9
11
  const replaceVariables = (text, variables) => {
10
12
  if (!variables)
@@ -31,13 +33,14 @@ const replaceVariables = (text, variables) => {
31
33
  ? parts.join('')
32
34
  : parts;
33
35
  };
34
- const getLanguage = () => {
35
- return 'ko';
36
- };
37
36
  const useTranslate = (translations = {}) => {
38
- const userLanguage = getLanguage();
37
+ // Follow `LogicianProvider`'s `language`, the same one the date pickers
38
+ // read. Outside a provider there is nothing to follow, so the library keeps
39
+ // its historical Korean.
40
+ const context = useLanguage.useLanguage();
41
+ const userLanguage = context === useLanguage.NO_PROVIDER_LANGUAGE ? DEFAULT_LOCALE : context.language;
39
42
  return React.useCallback((key, variables) => {
40
- const locale = userLanguage;
43
+ const locale = userLanguage ?? DEFAULT_LOCALE;
41
44
  const translation = { ...Defaults_translations.default, ...translations }[key]?.[locale] ?? key;
42
45
  const finalRes = replaceVariables(translation, variables);
43
46
  return finalRes;
@@ -1 +1 @@
1
- {"version":3,"file":"useTranslate.js","sources":["../../src/hooks/useTranslate.ts"],"sourcesContent":[null],"names":["formatForMarkdown","useCallback","defaultTranslations"],"mappings":";;;;;;;AAQA;AACA,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,SAAkC,KAAI;AAC5E,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAOA,uCAAiB,CAAC,IAAI,CAAC;IAE9C,MAAM,KAAK,GAAG,aAAa;IAE3B,MAAM,aAAa,GAAa,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;IACvD,MAAM,SAAS,GAAkB,EAAE;IACnC,IAAI,SAAS,GAAG,CAAC;AACjB,IAAA,aAAa,CAAC,OAAO,CAAC,CAAC,YAAoB,KAAI;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;;AAE3C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;;AAE/C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACpE,QAAA,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC,MAAM;AAC5C,IAAA,CAAC,CAAC;;IAEF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CACzB,CAAC,QAAgB;;AAEf,IAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjD,QAAAA,uCAAiB,CAAC,QAAQ,CAAC,CAC9B;AAED,IAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ;AACnD,UAAE,KAAK,CAAC,IAAI,CAAC,EAAE;UACb,KAAK;AACX,CAAC;AAED,MAAM,WAAW,GAAG,MAAK;AACvB,IAAA,OAAO,IAAI;AACb,CAAC;MAEY,YAAY,GAAG,CAAC,YAAY,GAAG,EAAE,KAAI;AAChD,IAAA,MAAM,YAAY,GAAG,WAAW,EAAE;AAClC,IAAA,OAAOC,iBAAW,CAChB,CAAC,GAAW,EAAE,SAAkC,KAAI;AAClD,QAAA,MAAM,MAAM,GAAI,YAAyC;AACzD,QAAA,MAAM,WAAW,GACf,EAAE,GAAGC,6BAAmB,EAAE,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG;QACnE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC;AACzD,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,EACD,CAAC,YAAY,EAAE,YAAY,CAAC,CAC7B;AACH;;;;"}
1
+ {"version":3,"file":"useTranslate.js","sources":["../../src/hooks/useTranslate.ts"],"sourcesContent":[null],"names":["formatForMarkdown","useLanguage","NO_PROVIDER_LANGUAGE","useCallback","defaultTranslations"],"mappings":";;;;;;;;AAOA,MAAM,cAAc,GAAG,IAAI;AAE3B;AACA,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,SAAkC,KAAI;AAC5E,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAOA,uCAAiB,CAAC,IAAI,CAAC;IAE9C,MAAM,KAAK,GAAG,aAAa;IAE3B,MAAM,aAAa,GAAa,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;IACvD,MAAM,SAAS,GAAkB,EAAE;IACnC,IAAI,SAAS,GAAG,CAAC;AACjB,IAAA,aAAa,CAAC,OAAO,CAAC,CAAC,YAAoB,KAAI;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;;AAE3C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;;AAE/C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACpE,QAAA,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC,MAAM;AAC5C,IAAA,CAAC,CAAC;;IAEF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CACzB,CAAC,QAAgB;;AAEf,IAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjD,QAAAA,uCAAiB,CAAC,QAAQ,CAAC,CAC9B;AAED,IAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ;AACnD,UAAE,KAAK,CAAC,IAAI,CAAC,EAAE;UACb,KAAK;AACX,CAAC;MAEY,YAAY,GAAG,CAAC,YAAY,GAAG,EAAE,KAAI;;;;AAIhD,IAAA,MAAM,OAAO,GAAGC,uBAAW,EAAE;AAC7B,IAAA,MAAM,YAAY,GAChB,OAAO,KAAKC,gCAAoB,GAAG,cAAc,GAAG,OAAO,CAAC,QAAQ;AACtE,IAAA,OAAOC,iBAAW,CAChB,CAAC,GAAW,EAAE,SAAkC,KAAI;AAClD,QAAA,MAAM,MAAM,GAAI,YAAuB,IAAI,cAAc;AACzD,QAAA,MAAM,WAAW,GACf,EAAE,GAAGC,6BAAmB,EAAE,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG;QACnE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC;AACzD,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,EACD,CAAC,YAAY,EAAE,YAAY,CAAC,CAC7B;AACH;;;;"}
@@ -2,7 +2,9 @@
2
2
  import { useCallback } from 'react';
3
3
  import defaultTranslations from '../translations/Defaults.translations.json.mjs';
4
4
  import { formatForMarkdown } from '../utils/formatTextForMarkdown.mjs';
5
+ import { useLanguage, NO_PROVIDER_LANGUAGE } from './useLanguage.mjs';
5
6
 
7
+ const DEFAULT_LOCALE = 'ko';
6
8
  // Given a block of text and variables, replaces instances of the provided variables in the text
7
9
  const replaceVariables = (text, variables) => {
8
10
  if (!variables)
@@ -29,13 +31,14 @@ const replaceVariables = (text, variables) => {
29
31
  ? parts.join('')
30
32
  : parts;
31
33
  };
32
- const getLanguage = () => {
33
- return 'ko';
34
- };
35
34
  const useTranslate = (translations = {}) => {
36
- const userLanguage = getLanguage();
35
+ // Follow `LogicianProvider`'s `language`, the same one the date pickers
36
+ // read. Outside a provider there is nothing to follow, so the library keeps
37
+ // its historical Korean.
38
+ const context = useLanguage();
39
+ const userLanguage = context === NO_PROVIDER_LANGUAGE ? DEFAULT_LOCALE : context.language;
37
40
  return useCallback((key, variables) => {
38
- const locale = userLanguage;
41
+ const locale = userLanguage ?? DEFAULT_LOCALE;
39
42
  const translation = { ...defaultTranslations, ...translations }[key]?.[locale] ?? key;
40
43
  const finalRes = replaceVariables(translation, variables);
41
44
  return finalRes;
@@ -1 +1 @@
1
- {"version":3,"file":"useTranslate.mjs","sources":["../../src/hooks/useTranslate.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAQA;AACA,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,SAAkC,KAAI;AAC5E,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAE9C,MAAM,KAAK,GAAG,aAAa;IAE3B,MAAM,aAAa,GAAa,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;IACvD,MAAM,SAAS,GAAkB,EAAE;IACnC,IAAI,SAAS,GAAG,CAAC;AACjB,IAAA,aAAa,CAAC,OAAO,CAAC,CAAC,YAAoB,KAAI;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;;AAE3C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;;AAE/C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACpE,QAAA,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC,MAAM;AAC5C,IAAA,CAAC,CAAC;;IAEF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CACzB,CAAC,QAAgB;;AAEf,IAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjD,QAAA,iBAAiB,CAAC,QAAQ,CAAC,CAC9B;AAED,IAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ;AACnD,UAAE,KAAK,CAAC,IAAI,CAAC,EAAE;UACb,KAAK;AACX,CAAC;AAED,MAAM,WAAW,GAAG,MAAK;AACvB,IAAA,OAAO,IAAI;AACb,CAAC;MAEY,YAAY,GAAG,CAAC,YAAY,GAAG,EAAE,KAAI;AAChD,IAAA,MAAM,YAAY,GAAG,WAAW,EAAE;AAClC,IAAA,OAAO,WAAW,CAChB,CAAC,GAAW,EAAE,SAAkC,KAAI;AAClD,QAAA,MAAM,MAAM,GAAI,YAAyC;AACzD,QAAA,MAAM,WAAW,GACf,EAAE,GAAG,mBAAmB,EAAE,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG;QACnE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC;AACzD,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,EACD,CAAC,YAAY,EAAE,YAAY,CAAC,CAC7B;AACH;;;;"}
1
+ {"version":3,"file":"useTranslate.mjs","sources":["../../src/hooks/useTranslate.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAOA,MAAM,cAAc,GAAG,IAAI;AAE3B;AACA,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,SAAkC,KAAI;AAC5E,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAE9C,MAAM,KAAK,GAAG,aAAa;IAE3B,MAAM,aAAa,GAAa,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;IACvD,MAAM,SAAS,GAAkB,EAAE;IACnC,IAAI,SAAS,GAAG,CAAC;AACjB,IAAA,aAAa,CAAC,OAAO,CAAC,CAAC,YAAoB,KAAI;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;;AAE3C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;;AAE/C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACpE,QAAA,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC,MAAM;AAC5C,IAAA,CAAC,CAAC;;IAEF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CACzB,CAAC,QAAgB;;AAEf,IAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjD,QAAA,iBAAiB,CAAC,QAAQ,CAAC,CAC9B;AAED,IAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ;AACnD,UAAE,KAAK,CAAC,IAAI,CAAC,EAAE;UACb,KAAK;AACX,CAAC;MAEY,YAAY,GAAG,CAAC,YAAY,GAAG,EAAE,KAAI;;;;AAIhD,IAAA,MAAM,OAAO,GAAG,WAAW,EAAE;AAC7B,IAAA,MAAM,YAAY,GAChB,OAAO,KAAK,oBAAoB,GAAG,cAAc,GAAG,OAAO,CAAC,QAAQ;AACtE,IAAA,OAAO,WAAW,CAChB,CAAC,GAAW,EAAE,SAAkC,KAAI;AAClD,QAAA,MAAM,MAAM,GAAI,YAAuB,IAAI,cAAc;AACzD,QAAA,MAAM,WAAW,GACf,EAAE,GAAG,mBAAmB,EAAE,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG;QACnE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC;AACzD,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,EACD,CAAC,YAAY,EAAE,YAAY,CAAC,CAC7B;AACH;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindlogic-ai/logician-ui",
3
- "version": "5.0.0-alpha.8",
3
+ "version": "5.0.0-alpha.9",
4
4
  "description": "A comprehensive React design system built on Chakra UI",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -29,7 +29,8 @@ beforeAll(() => {
29
29
  });
30
30
 
31
31
  const Sheet = (props: Partial<BottomSheetProps>) => (
32
- <LogicianProvider>
32
+ // Korean copy, so the built-in close label is 닫기 (it follows `language`).
33
+ <LogicianProvider language="ko">
33
34
  <BottomSheet {...props}>
34
35
  <BottomSheetContent data-testid="content">
35
36
  <BottomSheetHeader>노드 추가</BottomSheetHeader>
@@ -8,9 +8,14 @@ export interface LanguageContextValue {
8
8
  language: SupportedLanguage;
9
9
  }
10
10
 
11
- export const LanguageContext = createContext<LanguageContextValue>({
12
- language: 'en',
13
- });
11
+ /**
12
+ * The value seen outside any `LogicianProvider`. Exported so `useTranslate`
13
+ * can tell "no provider" (keep Korean) from a provider set to `en`.
14
+ */
15
+ export const NO_PROVIDER_LANGUAGE: LanguageContextValue = { language: 'en' };
16
+
17
+ export const LanguageContext =
18
+ createContext<LanguageContextValue>(NO_PROVIDER_LANGUAGE);
14
19
 
15
20
  export const useLanguage = () => useContext(LanguageContext);
16
21
 
@@ -0,0 +1,46 @@
1
+ import { ChakraProvider } from '@chakra-ui/react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import { beforeAll, describe, expect, it } from 'vitest';
4
+
5
+ import { Button } from '@/components/Button';
6
+ import { LogicianProvider } from '@/components/LogicianProvider';
7
+ import { system } from '@/theme';
8
+
9
+ beforeAll(() => {
10
+ // LogicianProvider's color-mode machinery calls it on mount; jsdom has none.
11
+ window.matchMedia = ((query: string) => ({
12
+ matches: false,
13
+ media: query,
14
+ onchange: null,
15
+ addListener: () => {},
16
+ removeListener: () => {},
17
+ addEventListener: () => {},
18
+ removeEventListener: () => {},
19
+ dispatchEvent: () => false,
20
+ })) as unknown as typeof window.matchMedia;
21
+ });
22
+
23
+ // Read through Button's 처리 중 default, the string an app sees most.
24
+ describe('useTranslate follows LogicianProvider language', () => {
25
+ it('stays Korean outside a provider', () => {
26
+ render(
27
+ <ChakraProvider value={system}>
28
+ <Button loading>x</Button>
29
+ </ChakraProvider>
30
+ );
31
+ expect(screen.getByRole('button')).toHaveTextContent('처리 중');
32
+ });
33
+
34
+ it.each([
35
+ ['ko', '처리 중'],
36
+ ['en', 'Processing'],
37
+ ['ja', '処理中'],
38
+ ] as const)('renders %s', (language, text) => {
39
+ render(
40
+ <LogicianProvider language={language} loadFonts={false}>
41
+ <Button loading>x</Button>
42
+ </LogicianProvider>
43
+ );
44
+ expect(screen.getByRole('button')).toHaveTextContent(text);
45
+ });
46
+ });
@@ -3,6 +3,7 @@ import { useCallback } from 'react';
3
3
 
4
4
  import defaultTranslations from '../translations/Defaults.translations.json';
5
5
  import { formatForMarkdown } from '../utils/formatTextForMarkdown';
6
+ import { NO_PROVIDER_LANGUAGE, useLanguage } from './useLanguage';
6
7
 
7
8
  const DEFAULT_LOCALE = 'ko';
8
9
 
@@ -38,12 +39,13 @@ const replaceVariables = (text: string, variables?: { [key: string]: any }) => {
38
39
  : parts;
39
40
  };
40
41
 
41
- const getLanguage = () => {
42
- return 'ko';
43
- };
44
-
45
42
  export const useTranslate = (translations = {}) => {
46
- const userLanguage = getLanguage();
43
+ // Follow `LogicianProvider`'s `language`, the same one the date pickers
44
+ // read. Outside a provider there is nothing to follow, so the library keeps
45
+ // its historical Korean.
46
+ const context = useLanguage();
47
+ const userLanguage =
48
+ context === NO_PROVIDER_LANGUAGE ? DEFAULT_LOCALE : context.language;
47
49
  return useCallback(
48
50
  (key: string, variables?: { [key: string]: any }) => {
49
51
  const locale = (userLanguage as string) ?? DEFAULT_LOCALE;