@mindlogic-ai/logician-ui 4.0.0-alpha.23 → 4.0.0-alpha.24

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.
@@ -6,6 +6,7 @@ var React = require('react');
6
6
  var react = require('@chakra-ui/react');
7
7
  var Code = require('../Code/Code.js');
8
8
  var Tab = require('../Tabs/Tab/Tab.js');
9
+ require('../Tabs/Tab/Tab.styles.js');
9
10
  var TabList = require('../Tabs/TabList/TabList.js');
10
11
  var Tabs = require('../Tabs/Tabs.js');
11
12
  var CopyButton = require('./CopyButton.js');
@@ -1 +1 @@
1
- {"version":3,"file":"CodeTabs.js","sources":["../../../src/components/CodeTabs/CodeTabs.tsx"],"sourcesContent":[null],"names":["useState","_jsxs","Tabs","TabList","_jsx","Flex","Tab","CopyButton","Box","Code"],"mappings":";;;;;;;;;;;;AASO,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAiB,KAAI;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGA,cAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAEtE,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IAErD,QACEC,eAAA,CAACC,SAAI,EAAA,EACH,OAAO,EAAC,WAAW,EACnB,YAAY,EAAC,IAAI,EACjB,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,CAAC,OAAO,KAAK,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAA,GACvD,IAAI,EAAA,QAAA,EAAA,CAERD,eAAA,CAACE,eAAO,IAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAA,QAAA,EAAA,CACjCC,cAAA,CAACC,UAAI,EAAA,EAAC,CAAC,EAAC,MAAM,EAAC,IAAI,EAAE,CAAC,EAAA,QAAA,EACnB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MACtBD,cAAA,CAACE,OAAG,EAAA,EAEF,KAAK,EAAE,QAAQ,EACf,EAAE,EAAC,MAAM,EACT,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,CAAC,EACL,CAAC,EAAE,CAAC,EACJ,YAAY,EAAC,MAAM,EACnB,aAAa,EAAC,WAAW,EACzB,UAAU,EAAC,MAAM,EACjB,SAAS,EAAC,SAAS,EACnB,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAC7B,MAAM,EAAE;AACN,gCAAA,OAAO,EAAE,gBAAgB;AAC1B,6BAAA,EAAA,QAAA,EAEA,QAAQ,EAAA,EAfJ,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,CAgBlB,CACP,CAAC,EAAA,CACG,EACN,MAAM,IAAIF,cAAA,CAACG,qBAAU,EAAA,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAA,CAAI,CAAA,EAAA,CACpD,EACVH,cAAA,CAACI,SAAG,IAAC,OAAO,EAAC,MAAM,EAAA,QAAA,EAChB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AAC1B,oBAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,aAAa;AAC7C,oBAAA,QACEJ,cAAA,CAACK,SAAI,EAAA,EAEH,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAA,IAAA,EAAA,aAAA,EACG,CAAC,UAAU,EACxB,cAAc,EAAE;AACd,4BAAA,YAAY,EAAE,MAAM;AACpB,4BAAA,kBAAkB,EAAE,IAAI;AACxB,4BAAA,QAAQ,EAAE,OAAO;4BACjB,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ;AAC9C,yBAAA,EAAA,QAAA,EAEA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAXxB,CAAA,EAAG,QAAQ,CAAA,MAAA,CAAQ,CAYnB;AAEX,gBAAA,CAAC,CAAC,EAAA,CACE,CAAA,EAAA,CACD;AAEX;;;;"}
1
+ {"version":3,"file":"CodeTabs.js","sources":["../../../src/components/CodeTabs/CodeTabs.tsx"],"sourcesContent":[null],"names":["useState","_jsxs","Tabs","TabList","_jsx","Flex","Tab","CopyButton","Box","Code"],"mappings":";;;;;;;;;;;;;AASO,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAiB,KAAI;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGA,cAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAEtE,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IAErD,QACEC,eAAA,CAACC,SAAI,EAAA,EACH,OAAO,EAAC,WAAW,EACnB,YAAY,EAAC,IAAI,EACjB,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,CAAC,OAAO,KAAK,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAA,GACvD,IAAI,EAAA,QAAA,EAAA,CAERD,eAAA,CAACE,eAAO,IAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAA,QAAA,EAAA,CACjCC,cAAA,CAACC,UAAI,EAAA,EAAC,CAAC,EAAC,MAAM,EAAC,IAAI,EAAE,CAAC,EAAA,QAAA,EACnB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MACtBD,cAAA,CAACE,OAAG,EAAA,EAEF,KAAK,EAAE,QAAQ,EACf,EAAE,EAAC,MAAM,EACT,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,CAAC,EACL,CAAC,EAAE,CAAC,EACJ,YAAY,EAAC,MAAM,EACnB,aAAa,EAAC,WAAW,EACzB,UAAU,EAAC,MAAM,EACjB,SAAS,EAAC,SAAS,EACnB,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAC7B,MAAM,EAAE;AACN,gCAAA,OAAO,EAAE,gBAAgB;AAC1B,6BAAA,EAAA,QAAA,EAEA,QAAQ,EAAA,EAfJ,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,CAgBlB,CACP,CAAC,EAAA,CACG,EACN,MAAM,IAAIF,cAAA,CAACG,qBAAU,EAAA,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAA,CAAI,CAAA,EAAA,CACpD,EACVH,cAAA,CAACI,SAAG,IAAC,OAAO,EAAC,MAAM,EAAA,QAAA,EAChB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AAC1B,oBAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,aAAa;AAC7C,oBAAA,QACEJ,cAAA,CAACK,SAAI,EAAA,EAEH,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAA,IAAA,EAAA,aAAA,EACG,CAAC,UAAU,EACxB,cAAc,EAAE;AACd,4BAAA,YAAY,EAAE,MAAM;AACpB,4BAAA,kBAAkB,EAAE,IAAI;AACxB,4BAAA,QAAQ,EAAE,OAAO;4BACjB,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ;AAC9C,yBAAA,EAAA,QAAA,EAEA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAXxB,CAAA,EAAG,QAAQ,CAAA,MAAA,CAAQ,CAYnB;AAEX,gBAAA,CAAC,CAAC,EAAA,CACE,CAAA,EAAA,CACD;AAEX;;;;"}
@@ -4,6 +4,7 @@ import { useState } from 'react';
4
4
  import { Flex, Box } from '@chakra-ui/react';
5
5
  import { Code } from '../Code/Code.mjs';
6
6
  import { Tab } from '../Tabs/Tab/Tab.mjs';
7
+ import '../Tabs/Tab/Tab.styles.mjs';
7
8
  import { TabList } from '../Tabs/TabList/TabList.mjs';
8
9
  import { Tabs } from '../Tabs/Tabs.mjs';
9
10
  import { CopyButton } from './CopyButton.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"CodeTabs.mjs","sources":["../../../src/components/CodeTabs/CodeTabs.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;AASO,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAiB,KAAI;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAEtE,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IAErD,QACEA,IAAA,CAAC,IAAI,EAAA,EACH,OAAO,EAAC,WAAW,EACnB,YAAY,EAAC,IAAI,EACjB,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,CAAC,OAAO,KAAK,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAA,GACvD,IAAI,EAAA,QAAA,EAAA,CAERA,IAAA,CAAC,OAAO,IAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAA,QAAA,EAAA,CACjCC,GAAA,CAAC,IAAI,EAAA,EAAC,CAAC,EAAC,MAAM,EAAC,IAAI,EAAE,CAAC,EAAA,QAAA,EACnB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MACtBA,GAAA,CAAC,GAAG,EAAA,EAEF,KAAK,EAAE,QAAQ,EACf,EAAE,EAAC,MAAM,EACT,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,CAAC,EACL,CAAC,EAAE,CAAC,EACJ,YAAY,EAAC,MAAM,EACnB,aAAa,EAAC,WAAW,EACzB,UAAU,EAAC,MAAM,EACjB,SAAS,EAAC,SAAS,EACnB,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAC7B,MAAM,EAAE;AACN,gCAAA,OAAO,EAAE,gBAAgB;AAC1B,6BAAA,EAAA,QAAA,EAEA,QAAQ,EAAA,EAfJ,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,CAgBlB,CACP,CAAC,EAAA,CACG,EACN,MAAM,IAAIA,GAAA,CAAC,UAAU,EAAA,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAA,CAAI,CAAA,EAAA,CACpD,EACVA,GAAA,CAAC,GAAG,IAAC,OAAO,EAAC,MAAM,EAAA,QAAA,EAChB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AAC1B,oBAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,aAAa;AAC7C,oBAAA,QACEA,GAAA,CAAC,IAAI,EAAA,EAEH,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAA,IAAA,EAAA,aAAA,EACG,CAAC,UAAU,EACxB,cAAc,EAAE;AACd,4BAAA,YAAY,EAAE,MAAM;AACpB,4BAAA,kBAAkB,EAAE,IAAI;AACxB,4BAAA,QAAQ,EAAE,OAAO;4BACjB,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ;AAC9C,yBAAA,EAAA,QAAA,EAEA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAXxB,CAAA,EAAG,QAAQ,CAAA,MAAA,CAAQ,CAYnB;AAEX,gBAAA,CAAC,CAAC,EAAA,CACE,CAAA,EAAA,CACD;AAEX;;;;"}
1
+ {"version":3,"file":"CodeTabs.mjs","sources":["../../../src/components/CodeTabs/CodeTabs.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;AASO,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAiB,KAAI;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAEtE,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IAErD,QACEA,IAAA,CAAC,IAAI,EAAA,EACH,OAAO,EAAC,WAAW,EACnB,YAAY,EAAC,IAAI,EACjB,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,CAAC,OAAO,KAAK,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAA,GACvD,IAAI,EAAA,QAAA,EAAA,CAERA,IAAA,CAAC,OAAO,IAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAA,QAAA,EAAA,CACjCC,GAAA,CAAC,IAAI,EAAA,EAAC,CAAC,EAAC,MAAM,EAAC,IAAI,EAAE,CAAC,EAAA,QAAA,EACnB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MACtBA,GAAA,CAAC,GAAG,EAAA,EAEF,KAAK,EAAE,QAAQ,EACf,EAAE,EAAC,MAAM,EACT,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,CAAC,EACL,CAAC,EAAE,CAAC,EACJ,YAAY,EAAC,MAAM,EACnB,aAAa,EAAC,WAAW,EACzB,UAAU,EAAC,MAAM,EACjB,SAAS,EAAC,SAAS,EACnB,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAC7B,MAAM,EAAE;AACN,gCAAA,OAAO,EAAE,gBAAgB;AAC1B,6BAAA,EAAA,QAAA,EAEA,QAAQ,EAAA,EAfJ,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,CAgBlB,CACP,CAAC,EAAA,CACG,EACN,MAAM,IAAIA,GAAA,CAAC,UAAU,EAAA,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAA,CAAI,CAAA,EAAA,CACpD,EACVA,GAAA,CAAC,GAAG,IAAC,OAAO,EAAC,MAAM,EAAA,QAAA,EAChB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AAC1B,oBAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,aAAa;AAC7C,oBAAA,QACEA,GAAA,CAAC,IAAI,EAAA,EAEH,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAA,IAAA,EAAA,aAAA,EACG,CAAC,UAAU,EACxB,cAAc,EAAE;AACd,4BAAA,YAAY,EAAE,MAAM;AACpB,4BAAA,kBAAkB,EAAE,IAAI;AACxB,4BAAA,QAAQ,EAAE,OAAO;4BACjB,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ;AAC9C,yBAAA,EAAA,QAAA,EAEA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAXxB,CAAA,EAAG,QAAQ,CAAA,MAAA,CAAQ,CAYnB;AAEX,gBAAA,CAAC,CAAC,EAAA,CACE,CAAA,EAAA,CACD;AAEX;;;;"}
@@ -7,8 +7,43 @@ export declare const verticalStyles: {
7
7
  p: number;
8
8
  width: string;
9
9
  };
10
+ /**
11
+ * The steps the horizontal tab's selected state paints, exported as tokens so
12
+ * the contrast regression in `src/components/a11y.kwcag.test.tsx` measures what
13
+ * this component actually renders rather than an arithmetic restatement of it.
14
+ *
15
+ * `label` is mode-aware for the same reason `LINK_RAMP` is. `primary.main`
16
+ * resolves to `blue.300` (#4A79DC) in dark, which is 4.59:1 on the page
17
+ * background (#0E1014) but only **4.19:1** on a raised surface (#181A20) — so
18
+ * the selected tab cleared AA on a full-page layout and failed it the moment
19
+ * the same tab list rendered inside a modal or a popover. KWCAG 5.3.3
20
+ * (텍스트 콘텐츠의 명도 대비) asks 4.5:1 of text, and this is text. The `.dark`
21
+ * end of the ramp is `blue.200` (#7DA0E8): 6.68:1 on the surface, 7.31:1 on the
22
+ * page. Light is untouched — `primary.main` is 6.62:1 on white.
23
+ *
24
+ * `indicator` stays `primary.main` deliberately. The 2px underline is a
25
+ * GRAPHIC, judged at 3:1, which 4.19:1 clears; moving it would be a visual
26
+ * change the standard does not ask for.
27
+ *
28
+ * `primary.main` itself is not re-pegged, and should not be: it is also a solid
29
+ * fill under white labels (`Checkbox`, `Switch`, `Banner`), where white on
30
+ * `blue.200` measures 2.60:1. The same reasoning already produced
31
+ * `secondary.main`'s `_dark` step — see its note in `theme/colors.ts`, which
32
+ * moved violet off `.300` at 4.29:1 for exactly this. Blue never got the same
33
+ * treatment.
34
+ */
35
+ export declare const TAB_RAMP: {
36
+ readonly label: {
37
+ readonly base: "primary.main";
38
+ readonly _dark: "primary.dark";
39
+ };
40
+ readonly indicator: "primary.main";
41
+ };
10
42
  export declare const horizontalSelectedStyles: {
11
- color: string;
43
+ color: {
44
+ readonly base: "primary.main";
45
+ readonly _dark: "primary.dark";
46
+ };
12
47
  fontWeight: string;
13
48
  position: string;
14
49
  _after: {
@@ -18,7 +53,7 @@ export declare const horizontalSelectedStyles: {
18
53
  left: number;
19
54
  width: string;
20
55
  height: string;
21
- background: string;
56
+ background: "primary.main";
22
57
  };
23
58
  };
24
59
  export declare const verticalSelectedStyles: {
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/Tabs/Tab/Tab.styles.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc;;;;;;;;CAQ1B,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;CAapC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;CAelC,CAAC"}
1
+ {"version":3,"file":"Tab.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/Tabs/Tab/Tab.styles.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc;;;;;;;;CAQ1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,QAAQ;;;;;;CAGX,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;CAapC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;CAelC,CAAC"}
@@ -11,8 +11,37 @@ const verticalStyles = {
11
11
  p: 4,
12
12
  width: '100%',
13
13
  };
14
+ /**
15
+ * The steps the horizontal tab's selected state paints, exported as tokens so
16
+ * the contrast regression in `src/components/a11y.kwcag.test.tsx` measures what
17
+ * this component actually renders rather than an arithmetic restatement of it.
18
+ *
19
+ * `label` is mode-aware for the same reason `LINK_RAMP` is. `primary.main`
20
+ * resolves to `blue.300` (#4A79DC) in dark, which is 4.59:1 on the page
21
+ * background (#0E1014) but only **4.19:1** on a raised surface (#181A20) — so
22
+ * the selected tab cleared AA on a full-page layout and failed it the moment
23
+ * the same tab list rendered inside a modal or a popover. KWCAG 5.3.3
24
+ * (텍스트 콘텐츠의 명도 대비) asks 4.5:1 of text, and this is text. The `.dark`
25
+ * end of the ramp is `blue.200` (#7DA0E8): 6.68:1 on the surface, 7.31:1 on the
26
+ * page. Light is untouched — `primary.main` is 6.62:1 on white.
27
+ *
28
+ * `indicator` stays `primary.main` deliberately. The 2px underline is a
29
+ * GRAPHIC, judged at 3:1, which 4.19:1 clears; moving it would be a visual
30
+ * change the standard does not ask for.
31
+ *
32
+ * `primary.main` itself is not re-pegged, and should not be: it is also a solid
33
+ * fill under white labels (`Checkbox`, `Switch`, `Banner`), where white on
34
+ * `blue.200` measures 2.60:1. The same reasoning already produced
35
+ * `secondary.main`'s `_dark` step — see its note in `theme/colors.ts`, which
36
+ * moved violet off `.300` at 4.29:1 for exactly this. Blue never got the same
37
+ * treatment.
38
+ */
39
+ const TAB_RAMP = {
40
+ label: { base: 'primary.main', _dark: 'primary.dark' },
41
+ indicator: 'primary.main',
42
+ };
14
43
  const horizontalSelectedStyles = {
15
- color: 'primary.main',
44
+ color: TAB_RAMP.label,
16
45
  fontWeight: 'semibold',
17
46
  position: 'relative',
18
47
  _after: {
@@ -22,7 +51,7 @@ const horizontalSelectedStyles = {
22
51
  left: 0,
23
52
  width: '100%',
24
53
  height: '2px',
25
- background: 'primary.main',
54
+ background: TAB_RAMP.indicator,
26
55
  },
27
56
  };
28
57
  const verticalSelectedStyles = {
@@ -42,6 +71,7 @@ const verticalSelectedStyles = {
42
71
  },
43
72
  };
44
73
 
74
+ exports.TAB_RAMP = TAB_RAMP;
45
75
  exports.horizontalSelectedStyles = horizontalSelectedStyles;
46
76
  exports.verticalSelectedStyles = verticalSelectedStyles;
47
77
  exports.verticalStyles = verticalStyles;
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.styles.js","sources":["../../../../src/components/Tabs/Tab/Tab.styles.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;AACO,MAAM,cAAc,GAAG;AAC5B,IAAA,iBAAiB,EAAE,MAAM;AACzB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,cAAc,EAAE,YAAY;AAC5B,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,KAAK,EAAE,MAAM;;AAGR,MAAM,wBAAwB,GAAG;AACtC,IAAA,KAAK,EAAE,cAAc;AACrB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,GAAG,EAAE,kBAAkB;AACvB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,UAAU,EAAE,cAAc;AAC3B,KAAA;;AAGI,MAAM,sBAAsB,GAAG;IACpC,eAAe,EAAE,oBAAoB;IACrC,KAAK,EAAE,cAAc;AACrB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AAC3B,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,gBAAgB,EAAE,CAAC;;AAEnB,QAAA,cAAc,EAAE,OAAO;AACvB,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,UAAU,EAAE,cAAc;AAC3B,KAAA;;;;;;;"}
1
+ {"version":3,"file":"Tab.styles.js","sources":["../../../../src/components/Tabs/Tab/Tab.styles.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;AACO,MAAM,cAAc,GAAG;AAC5B,IAAA,iBAAiB,EAAE,MAAM;AACzB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,cAAc,EAAE,YAAY;AAC5B,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,KAAK,EAAE,MAAM;;AAGf;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACI,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;AACtD,IAAA,SAAS,EAAE,cAAc;;AAGpB,MAAM,wBAAwB,GAAG;IACtC,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,GAAG,EAAE,kBAAkB;AACvB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,QAAQ,CAAC,SAAS;AAC/B,KAAA;;AAGI,MAAM,sBAAsB,GAAG;IACpC,eAAe,EAAE,oBAAoB;IACrC,KAAK,EAAE,cAAc;AACrB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AAC3B,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,gBAAgB,EAAE,CAAC;;AAEnB,QAAA,cAAc,EAAE,OAAO;AACvB,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,UAAU,EAAE,cAAc;AAC3B,KAAA;;;;;;;;"}
@@ -9,8 +9,37 @@ const verticalStyles = {
9
9
  p: 4,
10
10
  width: '100%',
11
11
  };
12
+ /**
13
+ * The steps the horizontal tab's selected state paints, exported as tokens so
14
+ * the contrast regression in `src/components/a11y.kwcag.test.tsx` measures what
15
+ * this component actually renders rather than an arithmetic restatement of it.
16
+ *
17
+ * `label` is mode-aware for the same reason `LINK_RAMP` is. `primary.main`
18
+ * resolves to `blue.300` (#4A79DC) in dark, which is 4.59:1 on the page
19
+ * background (#0E1014) but only **4.19:1** on a raised surface (#181A20) — so
20
+ * the selected tab cleared AA on a full-page layout and failed it the moment
21
+ * the same tab list rendered inside a modal or a popover. KWCAG 5.3.3
22
+ * (텍스트 콘텐츠의 명도 대비) asks 4.5:1 of text, and this is text. The `.dark`
23
+ * end of the ramp is `blue.200` (#7DA0E8): 6.68:1 on the surface, 7.31:1 on the
24
+ * page. Light is untouched — `primary.main` is 6.62:1 on white.
25
+ *
26
+ * `indicator` stays `primary.main` deliberately. The 2px underline is a
27
+ * GRAPHIC, judged at 3:1, which 4.19:1 clears; moving it would be a visual
28
+ * change the standard does not ask for.
29
+ *
30
+ * `primary.main` itself is not re-pegged, and should not be: it is also a solid
31
+ * fill under white labels (`Checkbox`, `Switch`, `Banner`), where white on
32
+ * `blue.200` measures 2.60:1. The same reasoning already produced
33
+ * `secondary.main`'s `_dark` step — see its note in `theme/colors.ts`, which
34
+ * moved violet off `.300` at 4.29:1 for exactly this. Blue never got the same
35
+ * treatment.
36
+ */
37
+ const TAB_RAMP = {
38
+ label: { base: 'primary.main', _dark: 'primary.dark' },
39
+ indicator: 'primary.main',
40
+ };
12
41
  const horizontalSelectedStyles = {
13
- color: 'primary.main',
42
+ color: TAB_RAMP.label,
14
43
  fontWeight: 'semibold',
15
44
  position: 'relative',
16
45
  _after: {
@@ -20,7 +49,7 @@ const horizontalSelectedStyles = {
20
49
  left: 0,
21
50
  width: '100%',
22
51
  height: '2px',
23
- background: 'primary.main',
52
+ background: TAB_RAMP.indicator,
24
53
  },
25
54
  };
26
55
  const verticalSelectedStyles = {
@@ -40,5 +69,5 @@ const verticalSelectedStyles = {
40
69
  },
41
70
  };
42
71
 
43
- export { horizontalSelectedStyles, verticalSelectedStyles, verticalStyles };
72
+ export { TAB_RAMP, horizontalSelectedStyles, verticalSelectedStyles, verticalStyles };
44
73
  //# sourceMappingURL=Tab.styles.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.styles.mjs","sources":["../../../../src/components/Tabs/Tab/Tab.styles.ts"],"sourcesContent":[null],"names":[],"mappings":";AAAA;AACO,MAAM,cAAc,GAAG;AAC5B,IAAA,iBAAiB,EAAE,MAAM;AACzB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,cAAc,EAAE,YAAY;AAC5B,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,KAAK,EAAE,MAAM;;AAGR,MAAM,wBAAwB,GAAG;AACtC,IAAA,KAAK,EAAE,cAAc;AACrB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,GAAG,EAAE,kBAAkB;AACvB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,UAAU,EAAE,cAAc;AAC3B,KAAA;;AAGI,MAAM,sBAAsB,GAAG;IACpC,eAAe,EAAE,oBAAoB;IACrC,KAAK,EAAE,cAAc;AACrB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AAC3B,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,gBAAgB,EAAE,CAAC;;AAEnB,QAAA,cAAc,EAAE,OAAO;AACvB,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,UAAU,EAAE,cAAc;AAC3B,KAAA;;;;;"}
1
+ {"version":3,"file":"Tab.styles.mjs","sources":["../../../../src/components/Tabs/Tab/Tab.styles.ts"],"sourcesContent":[null],"names":[],"mappings":";AAAA;AACO,MAAM,cAAc,GAAG;AAC5B,IAAA,iBAAiB,EAAE,MAAM;AACzB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,cAAc,EAAE,YAAY;AAC5B,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,KAAK,EAAE,MAAM;;AAGf;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACI,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;AACtD,IAAA,SAAS,EAAE,cAAc;;AAGpB,MAAM,wBAAwB,GAAG;IACtC,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,GAAG,EAAE,kBAAkB;AACvB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,QAAQ,CAAC,SAAS;AAC/B,KAAA;;AAGI,MAAM,sBAAsB,GAAG;IACpC,eAAe,EAAE,oBAAoB;IACrC,KAAK,EAAE,cAAc;AACrB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;AAC3B,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,gBAAgB,EAAE,CAAC;;AAEnB,QAAA,cAAc,EAAE,OAAO;AACvB,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,UAAU,EAAE,cAAc;AAC3B,KAAA;;;;;"}
@@ -1,3 +1,4 @@
1
1
  export type { TabProps } from './Tab';
2
2
  export { Tab } from './Tab';
3
+ export { TAB_RAMP } from './Tab.styles';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Tabs/Tab/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Tabs/Tab/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export type { TabProps } from './Tab';
2
- export { Tab } from './Tab';
2
+ export { Tab, TAB_RAMP } from './Tab';
3
3
  export type { TabListProps } from './TabList';
4
4
  export { TabList } from './TabList';
5
5
  export type { TabPanelProps } from './TabPanel';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/index.tsx"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/index.tsx"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.d.ts CHANGED
@@ -62,7 +62,7 @@ export * from './components/Toast';
62
62
  export * from './components/Tooltip';
63
63
  export * from './components/Tree';
64
64
  export * from './components/Workflow';
65
- export { Caption, H1, H2, H3, H4, H5, Link, Overline, Subtext, Subtitle, Text, } from './components/Typography';
65
+ export { Caption, H1, H2, H3, H4, H5, Link, LINK_RAMP, Overline, Subtext, Subtitle, Text, } from './components/Typography';
66
66
  export { useHasHover } from './hooks/useHasHover';
67
67
  export type { LanguageContextValue } from './hooks/useLanguage';
68
68
  export { LanguageContext, useLanguage } from './hooks/useLanguage';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAGvC,YAAY,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,cAAc,yBAAyB,CAAC;AAGxC,YAAY,EACV,WAAW,EACX,SAAS,IAAI,eAAe,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAG3E,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EACL,OAAO,EACP,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,IAAI,GACL,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EACL,MAAM,EACN,KAAK,kBAAkB,EACvB,cAAc,GACf,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAGvC,YAAY,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,cAAc,yBAAyB,CAAC;AAGxC,YAAY,EACV,WAAW,EACX,SAAS,IAAI,eAAe,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAG3E,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EACL,OAAO,EACP,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,IAAI,GACL,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EACL,MAAM,EACN,KAAK,kBAAkB,EACvB,cAAc,GACf,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -112,6 +112,7 @@ var Th = require('./components/Table/Th.js');
112
112
  var Thead = require('./components/Table/Thead.js');
113
113
  var Tr = require('./components/Table/Tr.js');
114
114
  var Tab = require('./components/Tabs/Tab/Tab.js');
115
+ var Tab_styles = require('./components/Tabs/Tab/Tab.styles.js');
115
116
  var TabList = require('./components/Tabs/TabList/TabList.js');
116
117
  var TabPanel = require('./components/Tabs/TabPanel.js');
117
118
  var TabPanels = require('./components/Tabs/TabPanels.js');
@@ -327,6 +328,7 @@ exports.Th = Th.Th;
327
328
  exports.Thead = Thead.Thead;
328
329
  exports.Tr = Tr.Tr;
329
330
  exports.Tab = Tab.Tab;
331
+ exports.TAB_RAMP = Tab_styles.TAB_RAMP;
330
332
  exports.TabList = TabList.TabList;
331
333
  exports.TabPanel = TabPanel.TabPanel;
332
334
  exports.TabPanels = TabPanels.TabPanels;
@@ -394,6 +396,7 @@ exports.H2 = H2.H2;
394
396
  exports.H3 = H3.H3;
395
397
  exports.H4 = H4.H4;
396
398
  exports.H5 = H5.H5;
399
+ exports.LINK_RAMP = Link.LINK_RAMP;
397
400
  exports.Link = Link.Link;
398
401
  exports.Overline = Overline.Overline;
399
402
  exports.Subtext = Subtext.Subtext;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.mjs CHANGED
@@ -110,6 +110,7 @@ export { Th } from './components/Table/Th.mjs';
110
110
  export { Thead } from './components/Table/Thead.mjs';
111
111
  export { Tr } from './components/Table/Tr.mjs';
112
112
  export { Tab } from './components/Tabs/Tab/Tab.mjs';
113
+ export { TAB_RAMP } from './components/Tabs/Tab/Tab.styles.mjs';
113
114
  export { TabList } from './components/Tabs/TabList/TabList.mjs';
114
115
  export { TabPanel } from './components/Tabs/TabPanel.mjs';
115
116
  export { TabPanels } from './components/Tabs/TabPanels.mjs';
@@ -162,7 +163,7 @@ export { H2 } from './components/Typography/H2.mjs';
162
163
  export { H3 } from './components/Typography/H3.mjs';
163
164
  export { H4 } from './components/Typography/H4.mjs';
164
165
  export { H5 } from './components/Typography/H5.mjs';
165
- export { Link } from './components/Typography/Link.mjs';
166
+ export { LINK_RAMP, Link } from './components/Typography/Link.mjs';
166
167
  export { Overline } from './components/Typography/Overline.mjs';
167
168
  export { Subtext } from './components/Typography/Subtext.mjs';
168
169
  export { Subtitle } from './components/Typography/Subtitle.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindlogic-ai/logician-ui",
3
- "version": "4.0.0-alpha.23",
3
+ "version": "4.0.0-alpha.24",
4
4
  "description": "A comprehensive React design system built on Chakra UI",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -9,8 +9,38 @@ export const verticalStyles = {
9
9
  width: '100%',
10
10
  };
11
11
 
12
+ /**
13
+ * The steps the horizontal tab's selected state paints, exported as tokens so
14
+ * the contrast regression in `src/components/a11y.kwcag.test.tsx` measures what
15
+ * this component actually renders rather than an arithmetic restatement of it.
16
+ *
17
+ * `label` is mode-aware for the same reason `LINK_RAMP` is. `primary.main`
18
+ * resolves to `blue.300` (#4A79DC) in dark, which is 4.59:1 on the page
19
+ * background (#0E1014) but only **4.19:1** on a raised surface (#181A20) — so
20
+ * the selected tab cleared AA on a full-page layout and failed it the moment
21
+ * the same tab list rendered inside a modal or a popover. KWCAG 5.3.3
22
+ * (텍스트 콘텐츠의 명도 대비) asks 4.5:1 of text, and this is text. The `.dark`
23
+ * end of the ramp is `blue.200` (#7DA0E8): 6.68:1 on the surface, 7.31:1 on the
24
+ * page. Light is untouched — `primary.main` is 6.62:1 on white.
25
+ *
26
+ * `indicator` stays `primary.main` deliberately. The 2px underline is a
27
+ * GRAPHIC, judged at 3:1, which 4.19:1 clears; moving it would be a visual
28
+ * change the standard does not ask for.
29
+ *
30
+ * `primary.main` itself is not re-pegged, and should not be: it is also a solid
31
+ * fill under white labels (`Checkbox`, `Switch`, `Banner`), where white on
32
+ * `blue.200` measures 2.60:1. The same reasoning already produced
33
+ * `secondary.main`'s `_dark` step — see its note in `theme/colors.ts`, which
34
+ * moved violet off `.300` at 4.29:1 for exactly this. Blue never got the same
35
+ * treatment.
36
+ */
37
+ export const TAB_RAMP = {
38
+ label: { base: 'primary.main', _dark: 'primary.dark' },
39
+ indicator: 'primary.main',
40
+ } as const;
41
+
12
42
  export const horizontalSelectedStyles = {
13
- color: 'primary.main',
43
+ color: TAB_RAMP.label,
14
44
  fontWeight: 'semibold',
15
45
  position: 'relative',
16
46
  _after: {
@@ -20,7 +50,7 @@ export const horizontalSelectedStyles = {
20
50
  left: 0,
21
51
  width: '100%',
22
52
  height: '2px',
23
- background: 'primary.main',
53
+ background: TAB_RAMP.indicator,
24
54
  },
25
55
  };
26
56
 
@@ -1,2 +1,3 @@
1
1
  export type { TabProps } from './Tab';
2
2
  export { Tab } from './Tab';
3
+ export { TAB_RAMP } from './Tab.styles';
@@ -1,5 +1,5 @@
1
1
  export type { TabProps } from './Tab';
2
- export { Tab } from './Tab';
2
+ export { Tab, TAB_RAMP } from './Tab';
3
3
  export type { TabListProps } from './TabList';
4
4
  export { TabList } from './TabList';
5
5
  export type { TabPanelProps } from './TabPanel';
@@ -13,6 +13,7 @@ import {
13
13
  SliderThumb,
14
14
  SliderTrack,
15
15
  } from '@/components/Slider';
16
+ import { TAB_RAMP } from '@/components/Tabs';
16
17
  import { Link, LINK_RAMP, Subtitle } from '@/components/Typography';
17
18
  import { colors } from '@/theme/colors';
18
19
 
@@ -312,7 +313,11 @@ describe('axe — 구조·ARIA 규칙', () => {
312
313
  * KWCAG 2.2 5.3.3 텍스트 콘텐츠의 명도 대비 applies to text in every state a
313
314
  * user can put it in, and hover is a state a mouse user is IN while reading.
314
315
  */
315
- describe('Link 대비 링크 램프의 hover 상태', () => {
316
+ // Both ramps live here because they share one defect and one measuring
317
+ // table: `primary.main`/`danger.main` are tuned against a WHITE page and
318
+ // go under AA as TEXT in dark. `Link` was the first component caught;
319
+ // `Tab`'s selected label was the third.
320
+ describe('브랜드 색 대비 — Link · Tab 램프', () => {
316
321
  const relativeLuminance = (hex: string) => {
317
322
  const n = hex.replace('#', '');
318
323
  const channels = [0, 2, 4].map(
@@ -409,4 +414,32 @@ describe('Link 색 대비 — 링크 램프의 hover 상태', () => {
409
414
  ).toBeGreaterThan(resting);
410
415
  }
411
416
  });
417
+
418
+ it('선택된 가로 탭의 레이블이 라이트·다크 양쪽에서 4.5:1 을 넘는다', () => {
419
+ // Measured against `DARK_CANVAS` (#181A20), the RAISED surface — not the
420
+ // page background (#0E1014). That distinction is the whole defect:
421
+ // `primary.main` is 4.59:1 on the page and 4.19:1 here, so the selected tab
422
+ // passed every full-page scan and failed the first time a tab list rendered
423
+ // inside a modal. The stricter of the two surfaces is the one to hold.
424
+ expect(
425
+ contrast(resolve(TAB_RAMP.label.base, 'base'), LIGHT_CANVAS)
426
+ ).toBeGreaterThanOrEqual(AA_BODY_TEXT);
427
+ expect(
428
+ contrast(resolve(TAB_RAMP.label._dark, '_dark'), DARK_CANVAS)
429
+ ).toBeGreaterThanOrEqual(AA_BODY_TEXT);
430
+ });
431
+
432
+ it('선택 표시 밑줄은 그래픽 기준 3:1 을 넘는다', () => {
433
+ // The underline is not text, so its bar is 3:1 (KWCAG 5.3.4 콘텐츠 간의
434
+ // 구분 / WCAG 1.4.11), which is why it keeps `primary.main` while the label
435
+ // moves. Held here so a later "make them match" edit has to be deliberate
436
+ // rather than arriving as a silent contrast change.
437
+ const AA_NON_TEXT = 3;
438
+ expect(
439
+ contrast(resolve(TAB_RAMP.indicator, 'base'), LIGHT_CANVAS)
440
+ ).toBeGreaterThanOrEqual(AA_NON_TEXT);
441
+ expect(
442
+ contrast(resolve(TAB_RAMP.indicator, '_dark'), DARK_CANVAS)
443
+ ).toBeGreaterThanOrEqual(AA_NON_TEXT);
444
+ });
412
445
  });
package/src/index.ts CHANGED
@@ -99,6 +99,7 @@ export {
99
99
  H4,
100
100
  H5,
101
101
  Link,
102
+ LINK_RAMP,
102
103
  Overline,
103
104
  Subtext,
104
105
  Subtitle,