@lism-css/ui 0.10.0 → 0.12.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.
Files changed (209) hide show
  1. package/README.md +1 -1
  2. package/dist/components/Accordion/Accordion.stories.d.ts +7 -0
  3. package/dist/components/Accordion/getProps.d.ts +55 -42
  4. package/dist/components/Accordion/getProps.js +36 -32
  5. package/dist/components/Accordion/react/AccIcon.d.ts +2 -1
  6. package/dist/components/Accordion/react/Accordion.d.ts +12 -21
  7. package/dist/components/Accordion/react/Accordion.js +30 -29
  8. package/dist/components/Accordion/react/index.d.ts +10 -11
  9. package/dist/components/Accordion/setAccordion.d.ts +6 -3
  10. package/dist/components/Accordion/setAccordion.js +12 -10
  11. package/dist/components/Alert/Alert.stories.d.ts +13 -0
  12. package/dist/components/Alert/getProps.d.ts +6 -4
  13. package/dist/components/Alert/react/Alert.d.ts +3 -4
  14. package/dist/components/Alert/react/Alert.js +2 -2
  15. package/dist/components/Avatar/Avatar.stories.d.ts +8 -0
  16. package/dist/components/Avatar/react/Avatar.d.ts +10 -6
  17. package/dist/components/Avatar/react/Avatar.js +1 -1
  18. package/dist/components/Badge/Badge.stories.d.ts +8 -0
  19. package/dist/components/Badge/react/Badge.d.ts +3 -1
  20. package/dist/components/Badge/react/Badge.js +5 -8
  21. package/dist/components/Button/Button.stories.d.ts +8 -0
  22. package/dist/components/Button/react/Button.d.ts +3 -1
  23. package/dist/components/Button/react/Button.js +3 -6
  24. package/dist/components/Callout/Callout.stories.d.ts +12 -0
  25. package/dist/components/Callout/getProps.d.ts +3 -3
  26. package/dist/components/Callout/getProps.js +11 -12
  27. package/dist/components/Callout/react/Callout.d.ts +3 -4
  28. package/dist/components/Callout/react/Callout.js +4 -4
  29. package/dist/components/Chat/Chat.stories.d.ts +9 -0
  30. package/dist/components/Chat/getProps.d.ts +43 -44
  31. package/dist/components/Chat/getProps.js +2 -2
  32. package/dist/components/Chat/react/Chat.d.ts +11 -7
  33. package/dist/components/Chat/react/Chat.js +10 -10
  34. package/dist/components/Details/Details.stories.d.ts +6 -0
  35. package/dist/components/Details/getProps.d.ts +34 -35
  36. package/dist/components/Details/getProps.js +16 -6
  37. package/dist/components/Details/react/Details.d.ts +11 -20
  38. package/dist/components/Details/react/Details.js +15 -15
  39. package/dist/components/Details/react/index.d.ts +7 -7
  40. package/dist/components/DummyImage/DummyImage.stories.d.ts +7 -0
  41. package/dist/components/DummyText/DummyText.stories.d.ts +9 -0
  42. package/dist/components/Modal/Modal.stories.d.ts +6 -0
  43. package/dist/components/Modal/getProps.d.ts +36 -36
  44. package/dist/components/Modal/getProps.js +36 -17
  45. package/dist/components/Modal/react/Body.d.ts +2 -4
  46. package/dist/components/Modal/react/CloseBtn.d.ts +9 -7
  47. package/dist/components/Modal/react/CloseBtn.js +5 -5
  48. package/dist/components/Modal/react/Inner.d.ts +3 -4
  49. package/dist/components/Modal/react/Modal.d.ts +4 -4
  50. package/dist/components/Modal/react/Modal.js +11 -9
  51. package/dist/components/Modal/react/OpenBtn.d.ts +7 -5
  52. package/dist/components/Modal/react/OpenBtn.js +4 -4
  53. package/dist/components/Modal/react/index.d.ts +7 -8
  54. package/dist/components/NavMenu/NavMenu.stories.d.ts +7 -0
  55. package/dist/components/NavMenu/getProps.d.ts +31 -29
  56. package/dist/components/NavMenu/react/NavMenu.d.ts +6 -16
  57. package/dist/components/NavMenu/react/NavMenu.js +21 -17
  58. package/dist/components/NavMenu/react/index.d.ts +6 -6
  59. package/dist/components/ShapeDivider/ShapeDivider.stories.d.ts +10 -0
  60. package/dist/components/ShapeDivider/getProps.d.ts +16 -11
  61. package/dist/components/ShapeDivider/getProps.js +10 -12
  62. package/dist/components/ShapeDivider/react/ShapeDivider.d.ts +3 -4
  63. package/dist/components/ShapeDivider/react/ShapeDivider.js +3 -3
  64. package/dist/components/Tabs/Tabs.stories.d.ts +6 -0
  65. package/dist/components/Tabs/getProps.d.ts +11 -4
  66. package/dist/components/Tabs/getProps.js +14 -4
  67. package/dist/components/Tabs/react/Tab.d.ts +8 -6
  68. package/dist/components/Tabs/react/Tab.js +15 -6
  69. package/dist/components/Tabs/react/TabItem.d.ts +7 -4
  70. package/dist/components/Tabs/react/TabList.d.ts +2 -1
  71. package/dist/components/Tabs/react/TabPanel.d.ts +8 -6
  72. package/dist/components/Tabs/react/Tabs.d.ts +9 -7
  73. package/dist/components/Tabs/react/Tabs.js +50 -36
  74. package/dist/components/Tabs/react/index.d.ts +8 -8
  75. package/dist/components/Tabs/setTabs.d.ts +1 -1
  76. package/dist/components/Tabs/setTabs.js +25 -15
  77. package/dist/lism-css/dist/components/{Center → layout/Center}/index.js +1 -1
  78. package/dist/lism-css/dist/components/{Flex → layout/Flex}/index.js +1 -1
  79. package/dist/lism-css/dist/components/{Flow → layout/Flow}/index.js +1 -1
  80. package/dist/lism-css/dist/components/{Frame → layout/Frame}/index.js +1 -1
  81. package/dist/lism-css/dist/components/{Grid → layout/Grid}/index.js +1 -1
  82. package/dist/lism-css/dist/components/{Stack → layout/Stack}/index.js +1 -1
  83. package/dist/lism-css/dist/config/defaults/props.js +16 -26
  84. package/dist/lism-css/dist/config/defaults/states.js +3 -24
  85. package/dist/lism-css/dist/config/defaults/tokens.js +2 -2
  86. package/dist/lism-css/dist/lib/getLayoutProps.js +6 -9
  87. package/dist/lism-css/dist/lib/getLismProps.js +94 -92
  88. package/dist/lism-css/dist/lib/helper/mergeSet.js +14 -0
  89. package/dist/style.css +1 -1
  90. package/dist/ui.css +1 -1
  91. package/package.json +14 -7
  92. package/src/components/Accordion/Accordion.stories.tsx +105 -0
  93. package/src/components/Accordion/astro/Button.astro +2 -2
  94. package/src/components/Accordion/getProps.ts +91 -0
  95. package/src/components/Accordion/react/{AccIcon.jsx → AccIcon.tsx} +2 -2
  96. package/src/components/Accordion/react/{Accordion.jsx → Accordion.tsx} +33 -11
  97. package/src/components/Accordion/setAccordion.ts +120 -0
  98. package/src/components/Alert/Alert.stories.tsx +64 -0
  99. package/src/components/Alert/getProps.ts +5 -3
  100. package/src/components/Alert/react/Alert.tsx +3 -3
  101. package/src/components/Avatar/Avatar.stories.tsx +42 -0
  102. package/src/components/Avatar/react/Avatar.tsx +17 -0
  103. package/src/components/Badge/Badge.stories.tsx +40 -0
  104. package/src/components/Badge/astro/Badge.astro +1 -7
  105. package/src/components/Badge/react/Badge.tsx +7 -0
  106. package/src/components/Button/Button.stories.tsx +44 -0
  107. package/src/components/Button/astro/Button.astro +1 -7
  108. package/src/components/Button/react/Button.tsx +7 -0
  109. package/src/components/Callout/Callout.stories.tsx +55 -0
  110. package/src/components/Callout/getProps.ts +5 -5
  111. package/src/components/Callout/react/Callout.tsx +3 -3
  112. package/src/components/Chat/Chat.stories.tsx +58 -0
  113. package/src/components/Chat/_style.css +5 -5
  114. package/src/components/Chat/{getProps.js → getProps.ts} +10 -4
  115. package/src/components/Chat/react/{Chat.jsx → Chat.tsx} +13 -3
  116. package/src/components/Details/Details.stories.tsx +61 -0
  117. package/src/components/Details/astro/Title.astro +2 -2
  118. package/src/components/Details/{getProps.js → getProps.ts} +19 -6
  119. package/src/components/Details/react/Details.tsx +69 -0
  120. package/src/components/DummyImage/DummyImage.stories.tsx +23 -0
  121. package/src/components/DummyText/DummyText.stories.tsx +48 -0
  122. package/src/components/Modal/Modal.stories.tsx +67 -0
  123. package/src/components/Modal/astro/CloseBtn.astro +2 -2
  124. package/src/components/Modal/astro/OpenBtn.astro +2 -3
  125. package/src/components/Modal/getProps.ts +65 -0
  126. package/src/components/Modal/react/Body.tsx +10 -0
  127. package/src/components/Modal/react/CloseBtn.tsx +24 -0
  128. package/src/components/Modal/react/Inner.tsx +6 -0
  129. package/src/components/Modal/react/Modal.tsx +24 -0
  130. package/src/components/Modal/react/OpenBtn.tsx +15 -0
  131. package/src/components/Modal/{script.js → script.ts} +1 -1
  132. package/src/components/NavMenu/NavMenu.stories.tsx +68 -0
  133. package/src/components/NavMenu/getProps.ts +60 -0
  134. package/src/components/NavMenu/react/NavMenu.tsx +40 -0
  135. package/src/components/ShapeDivider/ShapeDivider.stories.tsx +87 -0
  136. package/src/components/ShapeDivider/getProps.ts +36 -0
  137. package/src/components/ShapeDivider/react/{ShapeDivider.jsx → ShapeDivider.tsx} +4 -4
  138. package/src/components/Tabs/Tabs.stories.tsx +79 -0
  139. package/src/components/Tabs/astro/Tab.astro +2 -1
  140. package/src/components/Tabs/astro/{transformTabitems.js → transformTabitems.ts} +9 -9
  141. package/src/components/Tabs/getProps.ts +23 -0
  142. package/src/components/Tabs/react/Tab.tsx +21 -0
  143. package/src/components/Tabs/react/TabItem.tsx +13 -0
  144. package/src/components/Tabs/react/TabList.tsx +5 -0
  145. package/src/components/Tabs/react/{TabPanel.jsx → TabPanel.tsx} +8 -3
  146. package/src/components/Tabs/react/{Tabs.jsx → Tabs.tsx} +27 -12
  147. package/src/components/Tabs/{script.js → script.ts} +2 -2
  148. package/src/components/Tabs/setTabs.ts +65 -0
  149. package/src/helper/{uuid.js → uuid.ts} +2 -2
  150. package/src/vite-env.d.ts +1 -0
  151. package/dist/components/Accordion/astro/__setEvent.d.ts +0 -1
  152. package/dist/components/Accordion/astro/index.d.ts +0 -15
  153. package/dist/components/Alert/astro/index.d.ts +0 -1
  154. package/dist/components/Callout/astro/index.d.ts +0 -1
  155. package/dist/components/Details/astro/index.d.ts +0 -13
  156. package/dist/components/DummyImage/astro/index.d.ts +0 -1
  157. package/dist/components/DummyText/astro/index.d.ts +0 -1
  158. package/dist/components/Modal/astro/index.d.ts +0 -13
  159. package/dist/components/NavMenu/astro/index.d.ts +0 -11
  160. package/dist/components/Tabs/astro/index.d.ts +0 -13
  161. package/dist/components/Tabs/astro/transformTabitems.d.ts +0 -4
  162. package/dist/components/astro.d.ts +0 -14
  163. package/dist/lism-css/dist/config/helper/getSvgUrl.js +0 -4
  164. package/src/components/Accordion/getProps.js +0 -77
  165. package/src/components/Accordion/setAccordion.js +0 -146
  166. package/src/components/Avatar/astro/index.js +0 -1
  167. package/src/components/Avatar/react/Avatar.jsx +0 -9
  168. package/src/components/Badge/astro/index.js +0 -1
  169. package/src/components/Badge/react/Badge.jsx +0 -12
  170. package/src/components/Button/astro/index.js +0 -1
  171. package/src/components/Button/react/Button.jsx +0 -12
  172. package/src/components/Chat/astro/index.js +0 -1
  173. package/src/components/Details/react/Details.jsx +0 -66
  174. package/src/components/Modal/getProps.js +0 -30
  175. package/src/components/Modal/react/Body.jsx +0 -10
  176. package/src/components/Modal/react/CloseBtn.jsx +0 -20
  177. package/src/components/Modal/react/Inner.jsx +0 -6
  178. package/src/components/Modal/react/Modal.jsx +0 -23
  179. package/src/components/Modal/react/OpenBtn.jsx +0 -11
  180. package/src/components/NavMenu/getProps.js +0 -65
  181. package/src/components/NavMenu/react/NavMenu.jsx +0 -19
  182. package/src/components/ShapeDivider/astro/index.js +0 -1
  183. package/src/components/ShapeDivider/getProps.js +0 -40
  184. package/src/components/Tabs/getProps.js +0 -8
  185. package/src/components/Tabs/react/Tab.jsx +0 -10
  186. package/src/components/Tabs/react/TabItem.jsx +0 -5
  187. package/src/components/Tabs/react/TabList.jsx +0 -6
  188. package/src/components/Tabs/setTabs.js +0 -87
  189. /package/src/components/Accordion/astro/{index.js → index.ts} +0 -0
  190. /package/src/components/Accordion/react/{index.js → index.ts} +0 -0
  191. /package/src/components/Accordion/{script.js → script.ts} +0 -0
  192. /package/{dist/components/Avatar/astro/index.d.ts → src/components/Avatar/astro/index.ts} +0 -0
  193. /package/src/components/Avatar/react/{index.js → index.ts} +0 -0
  194. /package/{dist/components/Badge/astro/index.d.ts → src/components/Badge/astro/index.ts} +0 -0
  195. /package/src/components/Badge/react/{index.js → index.ts} +0 -0
  196. /package/{dist/components/Button/astro/index.d.ts → src/components/Button/astro/index.ts} +0 -0
  197. /package/src/components/Button/react/{index.js → index.ts} +0 -0
  198. /package/{dist/components/Chat/astro/index.d.ts → src/components/Chat/astro/index.ts} +0 -0
  199. /package/src/components/Chat/react/{index.js → index.ts} +0 -0
  200. /package/src/components/Details/astro/{index.js → index.ts} +0 -0
  201. /package/src/components/Details/react/{index.js → index.ts} +0 -0
  202. /package/src/components/Modal/astro/{index.js → index.ts} +0 -0
  203. /package/src/components/Modal/react/{index.js → index.ts} +0 -0
  204. /package/src/components/NavMenu/astro/{index.js → index.ts} +0 -0
  205. /package/src/components/NavMenu/react/{index.js → index.ts} +0 -0
  206. /package/{dist/components/ShapeDivider/astro/index.d.ts → src/components/ShapeDivider/astro/index.ts} +0 -0
  207. /package/src/components/ShapeDivider/react/{index.js → index.ts} +0 -0
  208. /package/src/components/Tabs/astro/{index.js → index.ts} +0 -0
  209. /package/src/components/Tabs/react/{index.js → index.ts} +0 -0
@@ -1,19 +1,20 @@
1
- import { STATES as P, PROPS as S } from "../config/index.js";
1
+ import { STATES as b, PROPS as S } from "../config/index.js";
2
2
  import j from "./getLayoutProps.js";
3
3
  import U from "./isPresetValue.js";
4
- import w from "./isTokenValue.js";
4
+ import x from "./isTokenValue.js";
5
5
  import v from "./getUtilKey.js";
6
6
  import m from "./getMaybeCssVar.js";
7
- import z from "./getBpData.js";
8
- import E from "./helper/atts.js";
7
+ import E from "./getBpData.js";
8
+ import z from "./helper/atts.js";
9
9
  import N from "./helper/isEmptyObj.js";
10
10
  import C from "./helper/filterEmptyObj.js";
11
+ import _ from "./helper/mergeSet.js";
11
12
  import k from "./helper/splitWithComma.js";
12
- const _ = (h) => {
13
- const s = S[h];
14
- return s && s?.token || "";
13
+ const A = (n) => {
14
+ const e = S[n];
15
+ return e && e?.token || "";
15
16
  };
16
- class x {
17
+ class w {
17
18
  // propList = {};
18
19
  className = "";
19
20
  uClasses = [];
@@ -21,120 +22,121 @@ class x {
21
22
  styles = {};
22
23
  attrs = {};
23
24
  _propConfig;
24
- constructor(s) {
25
- const { forwardedRef: t, class: e, className: i, lismClass: o, variant: r, style: l = {}, _propConfig: n = {}, ...c } = s;
26
- this.styles = { ...l }, this._propConfig = { ...n };
27
- let f = o || "";
28
- if (r && o) {
29
- const y = o.split(" "), a = y[0], u = `${a}--${r}`;
30
- f = [a, u, ...y.slice(1)].join(" ");
25
+ constructor(e) {
26
+ const { forwardedRef: t, class: s, className: r, lismClass: o, variant: i, style: l = {}, _propConfig: y = {}, ...c } = e;
27
+ this.styles = { ...l }, this._propConfig = { ...y };
28
+ let h = o || "";
29
+ if (i && o) {
30
+ const d = o.split(" "), a = d[0], u = `${a}--${i}`;
31
+ h = [a, u, ...d.slice(1)].join(" ");
31
32
  }
32
- N(c) || (this.attrs = { ...c }, this.analyzeProps()), t && (this.attrs.ref = t), this.className = E(i || e, f, this.lismState, this.uClasses);
33
+ N(c) || (this.attrs = { ...c }, this.analyzeProps()), t && (this.attrs.ref = t), this.className = z(r || s, h, this.lismState, this.uClasses);
33
34
  }
34
- analyzeState(s, t) {
35
- const { className: e, preset: i, presetClass: o, customVar: r, tokenKey: l, setStyles: n } = s;
36
- t === !0 ? this.lismState.push(e) : i && U(i, t) ? this.lismState.push(`${e} ${o}:${String(t)}`) : t && (this.lismState.push(e), l && r ? this.addStyle(r, m(t, l)) : n && typeof t == "string" && this.addStyles(n(t)));
35
+ analyzeState(e, t) {
36
+ const { className: s, preset: r, presetClass: o, customVar: i, tokenKey: l } = e;
37
+ t === !0 ? this.lismState.push(s) : r && U(r, t) ? this.lismState.push(`${s} ${o}:${String(t)}`) : t && (this.lismState.push(s), l && i && this.addStyle(i, m(t, l)));
37
38
  }
38
39
  // prop解析
39
40
  analyzeProps() {
41
+ const e = this.extractProp("set"), t = this.extractProp("unset");
40
42
  Object.keys(this.attrs).forEach((s) => {
41
- if (Object.hasOwn(P, s)) {
42
- const t = this.extractProp(s), e = P[s];
43
- typeof e == "string" ? t && this.lismState.push(e) : this.analyzeState(e, t);
43
+ if (Object.hasOwn(b, s)) {
44
+ const r = this.extractProp(s), o = b[s];
45
+ typeof o == "string" ? r && this.lismState.push(o) : this.analyzeState(o, r);
44
46
  } else if (Object.hasOwn(S, s)) {
45
- const t = this.attrs[s];
46
- delete this.attrs[s], this.analyzeLismProp(s, t);
47
+ const r = this.attrs[s];
48
+ delete this.attrs[s], this.analyzeLismProp(s, r);
47
49
  } else if (s === "hov") {
48
- const t = this.extractProp(s);
49
- this.setHovProps(t);
50
+ const r = this.extractProp(s);
51
+ this.setHovProps(r);
50
52
  } else if (s === "css") {
51
- const t = this.extractProp("css");
52
- this.addStyles(t);
53
+ const r = this.extractProp("css");
54
+ this.addStyles(r);
53
55
  }
54
- });
56
+ }), _(void 0, e, t).forEach((s) => this.lismState.push(`set--${s}`));
55
57
  }
56
58
  // Lism Prop 解析
57
- analyzeLismProp(s, t) {
59
+ analyzeLismProp(e, t) {
58
60
  if (t == null) return;
59
- let e = S[s] || null;
60
- if (e === null) return;
61
- this._propConfig?.[s] && (e = Object.assign({}, e, this._propConfig[s]));
62
- const { base: i, ...o } = z(t);
63
- this.setAttrs(s, i, e), Object.keys(o).forEach((r) => {
64
- e && this.setAttrs(s, o[r], e, r);
61
+ let s = S[e] || null;
62
+ if (s === null) return;
63
+ this._propConfig?.[e] && (s = Object.assign({}, s, this._propConfig[e]));
64
+ const { base: r, ...o } = E(t);
65
+ this.setAttrs(e, r, s), Object.keys(o).forEach((i) => {
66
+ s && this.setAttrs(e, o[i], s, i);
65
67
  });
66
68
  }
67
- addUtil(s) {
68
- this.uClasses.push(s);
69
+ addUtil(e) {
70
+ this.uClasses.push(e);
69
71
  }
70
- addUtils(s) {
71
- this.uClasses.push(...s);
72
+ addUtils(e) {
73
+ this.uClasses.push(...e);
72
74
  }
73
75
  // addState(state) {
74
76
  // this.stateClasses.push(state);
75
77
  // }
76
- addStyle(s, t) {
77
- this.styles[s] = t;
78
+ addStyle(e, t) {
79
+ this.styles[e] = t;
78
80
  }
79
- addStyles(s) {
80
- this.styles = { ...this.styles, ...s };
81
+ addStyles(e) {
82
+ this.styles = { ...this.styles, ...e };
81
83
  }
82
- addAttrs(s) {
83
- this.addStyles(s.styles || {}), this.addUtils(s.utils || []);
84
+ addAttrs(e) {
85
+ this.addStyles(e.styles || {}), this.addUtils(e.utils || []);
84
86
  }
85
- extractProp(s) {
86
- const t = this.attrs[s];
87
- return this.attrs[s] === void 0 ? null : (delete this.attrs[s], t);
87
+ extractProp(e) {
88
+ const t = this.attrs[e];
89
+ return this.attrs[e] === void 0 ? null : (delete this.attrs[e], t);
88
90
  }
89
- extractProps(s) {
91
+ extractProps(e) {
90
92
  const t = {};
91
- return s.forEach((e) => {
92
- this.attrs[e] !== void 0 && (t[e] = this.attrs[e], delete this.attrs[e]);
93
+ return e.forEach((s) => {
94
+ this.attrs[s] !== void 0 && (t[s] = this.attrs[s], delete this.attrs[s]);
93
95
  }), t;
94
96
  }
95
97
  // utilクラスを追加するか、styleにセットするかの分岐処理 @base
96
98
  // 値が null, undefined, '', false の時はスキップ
97
- setAttrs(s, t, e = {}, i = "") {
99
+ setAttrs(e, t, s = {}, r = "") {
98
100
  if (t == null || t === "" || t === !1) return;
99
- let o = `--${s}`, r = `-${String(e.utilKey || s)}`;
100
- if (i && (o = `--${s}_${i}`, r += `_${i}`), typeof t == "string" && t.startsWith(":")) {
101
- this.addUtil(`${r}:${t.replace(":", "")}`);
101
+ let o = `--${e}`, i = `-${String(s.utilKey || e)}`;
102
+ if (r && (o = `--${e}_${r}`, i += `_${r}`), typeof t == "string" && t.startsWith(":")) {
103
+ this.addUtil(`${i}:${t.replace(":", "")}`);
102
104
  return;
103
105
  }
104
- if (!i) {
105
- const { presets: u, tokenClass: O, utils: g, shorthands: b } = e;
106
+ if (!r) {
107
+ const { presets: u, tokenClass: O, utils: g, shorthands: P } = s;
106
108
  if (u && U(u, t)) {
107
- const d = typeof t == "string" || typeof t == "number" ? String(t) : "";
108
- d && this.addUtil(`${r}:${d}`);
109
+ const p = typeof t == "string" || typeof t == "number" ? String(t) : "";
110
+ p && this.addUtil(`${i}:${p}`);
109
111
  return;
110
112
  }
111
- if (O && e.token && w(e.token, t)) {
112
- const d = typeof t == "string" || typeof t == "number" ? String(t) : "";
113
- d && this.addUtil(`${r}:${d}`);
113
+ if (O && s.token && x(s.token, t)) {
114
+ const p = typeof t == "string" || typeof t == "number" ? String(t) : "";
115
+ p && this.addUtil(`${i}:${p}`);
114
116
  return;
115
117
  }
116
- let p = "";
117
- if (g && typeof t == "string" && (p = v(g, t)), !p && b && typeof t == "string" && (p = v(b, t, !0)), p) {
118
- this.addUtil(`${r}:${p}`);
118
+ let f = "";
119
+ if (g && typeof t == "string" && (f = v(g, t)), !f && P && typeof t == "string" && (f = v(P, t, !0)), f) {
120
+ this.addUtil(`${i}:${f}`);
119
121
  return;
120
122
  }
121
123
  }
122
124
  if (t === !0 || t === "-") {
123
- this.addUtil(r);
125
+ this.addUtil(i);
124
126
  return;
125
127
  }
126
- const { prop: l, isVar: n, alwaysVar: c, token: f, bp: y } = e;
128
+ const { prop: l, isVar: y, alwaysVar: c, token: h, bp: d } = s;
127
129
  let a;
128
- if (f && (typeof t == "string" || typeof t == "number") ? a = m(t, f) : typeof t == "string" || typeof t == "number" ? a = t : a = JSON.stringify(t), !i) {
129
- if (n) {
130
- this.addStyle(`--${s}`, a);
130
+ if (h && (typeof t == "string" || typeof t == "number") ? a = m(t, h) : typeof t == "string" || typeof t == "number" ? a = t : a = JSON.stringify(t), !r) {
131
+ if (y) {
132
+ this.addStyle(`--${e}`, a);
131
133
  return;
132
- } else if (!y && !c) {
134
+ } else if (!d && !c) {
133
135
  this.addStyle(l, a);
134
136
  return;
135
137
  }
136
138
  }
137
- this.addUtil(r), this.addStyle(o, a);
139
+ this.addUtil(i), this.addStyle(o, a);
138
140
  }
139
141
  // setPassProps(passVars) {
140
142
  // let dataList = [];
@@ -149,40 +151,40 @@ class x {
149
151
  // this.addStyle(`--pass_${propName}`, value);
150
152
  // });
151
153
  // }
152
- setHovProps(s) {
153
- s && (s === "-" || s === !0 ? this.addUtil("-hov") : typeof s == "string" ? k(s).forEach((t) => {
154
+ setHovProps(e) {
155
+ e && (e === "-" || e === !0 ? this.addUtil("-hov") : typeof e == "string" ? k(e).forEach((t) => {
154
156
  this.addUtil(`-hov:${t}`);
155
- }) : typeof s == "object" && Object.keys(s).forEach((t) => {
156
- const e = s[t];
157
- if (!(e == null || e === "" || e === !1)) {
158
- if (e === "-" || e === !0)
157
+ }) : typeof e == "object" && Object.keys(e).forEach((t) => {
158
+ const s = e[t];
159
+ if (!(s == null || s === "" || s === !1)) {
160
+ if (s === "-" || s === !0)
159
161
  this.addUtil(`-hov:${t}`);
160
162
  else if (t === "class")
161
- k(e).forEach((i) => {
162
- this.addUtil(`-hov:${i}`);
163
+ k(s).forEach((r) => {
164
+ this.addUtil(`-hov:${r}`);
163
165
  });
164
- else if (typeof e == "string" || typeof e == "number") {
165
- const i = m(e, _(t));
166
- this.addUtil(`-hov:${t}`), this.addStyle(`--hov-${t}`, i);
166
+ else if (typeof s == "string" || typeof s == "number") {
167
+ const r = m(s, A(t));
168
+ this.addUtil(`-hov:${t}`), this.addStyle(`--hov-${t}`, r);
167
169
  }
168
170
  }
169
171
  }));
170
172
  }
171
173
  }
172
- function q(h) {
173
- if (Object.keys(h).length === 0)
174
+ function B(n) {
175
+ if (Object.keys(n).length === 0)
174
176
  return {};
175
- const { layout: s, ...t } = h, e = new x(j(s, t));
177
+ const { layout: e, ...t } = n, s = new w(j(e, t));
176
178
  return {
177
179
  ...C({
178
- className: e.className,
179
- style: C(e.styles)
180
+ className: s.className,
181
+ style: C(s.styles)
180
182
  }),
181
- ...e.attrs
183
+ ...s.attrs
182
184
  // data-* などHTMLの標準属性はそのまま渡す
183
185
  };
184
186
  }
185
187
  export {
186
- x as LismPropsData,
187
- q as default
188
+ w as LismPropsData,
189
+ B as default
188
190
  };
@@ -0,0 +1,14 @@
1
+ function t(n) {
2
+ return n ? Array.isArray(n) ? n.flatMap((r) => t(r)) : typeof n == "string" ? n.split(/[,\s]+/).map((r) => r.trim()).filter(Boolean) : [] : [];
3
+ }
4
+ function o(n, r, s) {
5
+ const e = [.../* @__PURE__ */ new Set([...t(n), ...t(r)])];
6
+ if (e.length === 0) return [];
7
+ const i = t(s);
8
+ if (i.length === 0) return e;
9
+ const a = new Set(i);
10
+ return e.filter((f) => !a.has(f));
11
+ }
12
+ export {
13
+ o as default
14
+ };
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- @layer lism-modules{.c--accordion{--duration:var(--acc-duration,0.25s)}.c--accordion_item{--_panel-h:0px;--_icon-transform:rotate(0deg)}.c--accordion_item[data-opened]{--_icon-transform:rotate(90deg);--_panel-h:auto}.c--accordion_panel{height:var(--_panel-h);transition:height var(--duration)}[hidden]>.c--accordion_content{position:absolute}.c--accordion_icon{display:grid;height:1em;width:1em;&:after,&:before{background-color:currentColor;content:"";display:block;grid-area:1/1}&:before{height:100%;transform:var(--_icon-transform);transition:transform var(--duration);width:.1em}&:after{height:.1em;width:100%}}.c--accordion_button:focus-visible{outline:2px solid currentColor;outline-color:revert;outline-offset:-3px}@media (prefers-reduced-motion:reduce){.c--accordion_item{--duration:0s}}@media (scripting:none){.c--accordion_panel{content-visibility:visible!important;height:auto!important}.c--accordion_content{position:static!important}}}@layer lism-modules{.c--badge{--c:var(--base);--bgc:var(--text);--bdc:transparent;background-color:var(--bgc);border:1px solid var(--bdc);color:var(--c)}.c--badge--outline{--c:var(--text);--bgc:transparent;--bdc:currentColor}.c--button{--c:var(--base);--bgc:var(--text);--bdc:var(--bgc);background-color:var(--bgc);border:1px solid var(--bdc);color:var(--c);gap:var(--s10);place-content:center;place-items:center;text-decoration:none}.c--button--outline{--c:var(--text);--bgc:transparent;--bdc:var(--c)}}@layer lism-modules{:where(.c--button)>.a--icon{scale:1.05}.c--button:where(.l--grid){grid-template-columns:minmax(1em,auto) 1fr minmax(1em,auto);justify-items:center}.c--button:where(.l--grid)>:not(.a--icon){grid-column:2}}@layer lism-modules{.c--chat{--cbox-bgPct:8%;--gta:"avatar name" "avatar body";--gtc:auto 1fr;--gtr:minmax(1.5rem,auto) auto;--_avator-size:clamp(48px,32px + 5cqw,64px);--_deco-size:calc(min(var(--_avator-size), 80px)/4 + 0.25rem);--_deco-mask:none;--_deco-t:0;--_deco-scale:1;--_deco-inset-x:0;gap:0 calc(var(--_deco-size) + 1px)}.c--chat_avatar{grid-area:avatar;width:var(--_avator-size)}.c--chat_name{grid-area:name}.c--chat_body{grid-area:body}.c--chat_content{max-width:var(--sz--s)}.c--chat_deco{height:var(--_deco-size);top:var(--_deco-t);inset-inline:var(--_deco-inset-x);-webkit-mask:var(--_deco-mask) center/contain no-repeat;mask:var(--_deco-mask) center/contain no-repeat;scale:var(--_deco-scale);width:var(--_deco-size)}.c--chat--speak{--_deco-mask:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path d="M8,8L8,8C7.4,4.8,5.4,2,2.6,0.4L2,0h6V8z"/></svg>')}[data-chat-dir=start]{--_deco-inset-x:auto calc(100% - 1px)}[data-chat-dir=end]{--_deco-scale:-1 1;--_deco-inset-x:calc(100% - 1px) auto;--gta:"name avatar" "body avatar";--gtc:1fr auto}}.c--chat--speak[data-chat-dir=start]>div>.c--chat_content{border-start-start-radius:0}.c--chat--speak[data-chat-dir=end]>div>.c--chat_content{border-start-end-radius:0}@layer lism-modules{.c--navMenu{--link-td:none;--hl:var(--hl--s);--_item-p:var(--s20);--focus-offset:-1px}.c--navMenu_nest{--_item-p:inherit}.c--navMenu_link{padding:var(--_item-p)}.c--navMenu_item,.c--navMenu_nest{--bdc:inherit}.c--shapeDivider{--level:0;--_inner-offset:0px;--_inner-stretch:1;--_flipX:1;--_flipY:1;height:clamp(5px * var(--level),1cqw * var(--level),12px * var(--level));overflow:visible}}@layer lism-modules{.c--shapeDivider:where([data-flip^=X]){--_flipX:-1}.c--shapeDivider:where([data-flip$=Y]){--_flipY:-1}.c--shapeDivider_inner{--offsetY:0.5px;--offsetX:-0.5px;height:100%;scale:calc(var(--_flipX)*var(--_inner-stretch)) var(--_flipY);translate:calc(var(--offsetX) + var(--_inner-offset)) calc(var(--offsetY)*var(--_flipY));width:calc(100% + 1px)}.c--shapeDivider_svg{display:block}:where([data-has-animation=true]) .c--shapeDivider_svg{animation:lism--slideShape 12s linear infinite alternate;transform-origin:100% 0}}@keyframes lism--slideShape{0%{transform:scaleX(4)}to{transform:scaleX(4) translateX(75%)}}
1
+ @layer lism-modules{.c--accordion{--duration:var(--acc-duration,0.25s)}.c--accordion_item{--_panel-h:0px;--_icon-transform:rotate(0deg)}.c--accordion_item[data-opened]{--_icon-transform:rotate(90deg);--_panel-h:auto}.c--accordion_panel{height:var(--_panel-h);transition:height var(--duration)}[hidden]>.c--accordion_content{position:absolute}.c--accordion_icon{display:grid;height:1em;width:1em;&:after,&:before{background-color:currentColor;content:"";display:block;grid-area:1/1}&:before{height:100%;transform:var(--_icon-transform);transition:transform var(--duration);width:.1em}&:after{height:.1em;width:100%}}.c--accordion_button:focus-visible{outline:2px solid currentColor;outline-color:revert;outline-offset:-3px}@media (prefers-reduced-motion:reduce){.c--accordion_item{--duration:0s}}@media (scripting:none){.c--accordion_panel{content-visibility:visible!important;height:auto!important}.c--accordion_content{position:static!important}}}@layer lism-modules{.c--badge{--c:var(--base);--bgc:var(--text);--bdc:transparent;background-color:var(--bgc);border:1px solid var(--bdc);color:var(--c)}.c--badge--outline{--c:var(--text);--bgc:transparent;--bdc:currentColor}.c--button{--c:var(--base);--bgc:var(--text);--bdc:var(--bgc);background-color:var(--bgc);border:1px solid var(--bdc);color:var(--c);gap:var(--s10);place-content:center;place-items:center;text-decoration:none}.c--button--outline{--c:var(--text);--bgc:transparent;--bdc:var(--c)}}@layer lism-modules{:where(.c--button)>.a--icon{scale:1.05}.c--button:where(.l--grid){grid-template-columns:minmax(1em,auto) 1fr minmax(1em,auto);justify-items:center}.c--button:where(.l--grid)>:not(.a--icon){grid-column:2}}@layer lism-modules{.c--chat{--cbox-bgPct:8%;grid-template-areas:"avatar name" "avatar body";grid-template-columns:auto 1fr;grid-template-rows:minmax(1.5rem,auto) auto;--_avator-size:clamp(48px,32px + 5cqw,64px);--_deco-size:calc(min(var(--_avator-size), 80px)/4 + 0.25rem);--_deco-mask:none;--_deco-t:0;--_deco-scale:1;--_deco-inset-x:0;gap:0 calc(var(--_deco-size) + 1px)}.c--chat_avatar{grid-area:avatar;width:var(--_avator-size)}.c--chat_name{grid-area:name}.c--chat_body{grid-area:body}.c--chat_content{max-width:var(--sz--s)}.c--chat_deco{height:var(--_deco-size);top:var(--_deco-t);inset-inline:var(--_deco-inset-x);-webkit-mask:var(--_deco-mask) center/contain no-repeat;mask:var(--_deco-mask) center/contain no-repeat;scale:var(--_deco-scale);width:var(--_deco-size)}.c--chat--speak{--_deco-mask:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path d="M8,8L8,8C7.4,4.8,5.4,2,2.6,0.4L2,0h6V8z"/></svg>')}[data-chat-dir=start]{--_deco-inset-x:auto calc(100% - 1px)}[data-chat-dir=end]{--_deco-scale:-1 1;--_deco-inset-x:calc(100% - 1px) auto;grid-template-areas:"name avatar" "body avatar";grid-template-columns:1fr auto}}.c--chat--speak[data-chat-dir=start]>div>.c--chat_content{border-start-start-radius:0}.c--chat--speak[data-chat-dir=end]>div>.c--chat_content{border-start-end-radius:0}@layer lism-modules{.c--navMenu{--link-td:none;--hl:var(--hl--s);--_item-p:var(--s20);--focus-offset:-1px}.c--navMenu_nest{--_item-p:inherit}.c--navMenu_link{padding:var(--_item-p)}.c--navMenu_item,.c--navMenu_nest{--bdc:inherit}.c--shapeDivider{--level:0;--_inner-offset:0px;--_inner-stretch:1;--_flipX:1;--_flipY:1;height:clamp(5px * var(--level),1cqw * var(--level),12px * var(--level));overflow:visible}}@layer lism-modules{.c--shapeDivider:where([data-flip^=X]){--_flipX:-1}.c--shapeDivider:where([data-flip$=Y]){--_flipY:-1}.c--shapeDivider_inner{--offsetY:0.5px;--offsetX:-0.5px;height:100%;scale:calc(var(--_flipX)*var(--_inner-stretch)) var(--_flipY);translate:calc(var(--offsetX) + var(--_inner-offset)) calc(var(--offsetY)*var(--_flipY));width:calc(100% + 1px)}.c--shapeDivider_svg{display:block}:where([data-has-animation=true]) .c--shapeDivider_svg{animation:lism--slideShape 12s linear infinite alternate;transform-origin:100% 0}}@keyframes lism--slideShape{0%{transform:scaleX(4)}to{transform:scaleX(4) translateX(75%)}}
package/dist/ui.css CHANGED
@@ -1 +1 @@
1
- @layer lism-modules{.c--accordion{--duration: var(--acc-duration, .25s)}.c--accordion_item{--_panel-h: 0px;--_icon-transform: rotate(0deg)}.c--accordion_item[data-opened]{--_icon-transform: rotate(90deg);--_panel-h: auto}.c--accordion_panel{height:var(--_panel-h);transition:height var(--duration)}[hidden]>.c--accordion_content{position:absolute}.c--accordion_icon{display:grid;width:1em;height:1em}.c--accordion_icon:before,.c--accordion_icon:after{content:"";display:block;grid-area:1 / 1;background-color:currentColor}.c--accordion_icon:before{width:.1em;height:100%;transition:transform var(--duration);transform:var(--_icon-transform)}.c--accordion_icon:after{height:.1em;width:100%}.c--accordion_button:focus-visible{outline:solid 2px currentColor;outline-color:revert;outline-offset:-3px}@media(prefers-reduced-motion:reduce){.c--accordion_item{--duration: 0s}}@media(scripting:none){.c--accordion_panel{height:auto!important;content-visibility:visible!important}.c--accordion_content{position:static!important}}}@layer lism-modules{.c--details{--duration: var(--acc-duration, .25s);--_icon-scale: 1.1;--_icon-transform: rotate(0deg);--_content-gtr: 0fr}.c--details[open]{--_icon-transform: scaleY(-1);--_content-gtr: 1fr}.c--details_summary::-webkit-details-marker{display:none}.c--details_icon{--svg: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="1em" height="1em" fill="currentColor"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg>');display:inline-grid;background-color:currentColor;-webkit-mask:var(--svg) no-repeat center center / contain;mask:var(--svg) no-repeat center center / contain;scale:var(--_icon-scale);transition:transform var(--duration);transform:var(--_icon-transform)}.c--details::details-content{display:grid;grid-template-rows:var(--_content-gtr);transition-duration:var(--duration);transition-property:content-visibility,grid-template;transition-behavior:allow-discrete}.c--details_body{overflow:hidden}}@layer lism-modules{.c--modal{--flow: 0;--duration: var(--modal-duration, .4s);width:100%;height:100%;max-width:100%;max-height:100%;overflow:unset;background:var(--backdrop-bg, rgb(0 0 0 / .6));transition-duration:var(--duration);transition-property:opacity}.c--modal::backdrop{background:none}.c--modal[open]{display:flex;flex-direction:column;justify-content:center}.c--modal_inner{--offset: 0 0;background-color:var(--base);transition:translate var(--duration);max-height:100%}.c--modal:not([data-is-open]){opacity:0}.c--modal:not([data-is-open])>.c--modal_inner{translate:var(--offset)}}@layer lism-modules{.c--navMenu{--link-td: none;--hl: var(--hl--s);--_item-p: var(--s20);--focus-offset: -1px}.c--navMenu_nest{--_item-p: inherit}.c--navMenu_link{padding:var(--_item-p)}.c--navMenu_nest,.c--navMenu_item{--bdc: inherit}}@layer lism-modules{.c--tabs{display:grid;grid:"list" "panel" / 100%}.c--tabs_list{grid-area:list;display:flex;overflow-x:auto}.c--tabs_tab[aria-selected=true]{--_notSelected: }.c--tabs_tab[aria-selected=false]{--_isSelected: }:where(.c--tabs_tab){color:var(--_notSelected, var(--text-2))}.c--tabs_panel{grid-area:panel;width:100%}.c--tabs_panel:where([aria-hidden=true]){display:none}}@layer lism-modules{.c--badge{--c: var(--base);--bgc: var(--text);--bdc: transparent;color:var(--c);background-color:var(--bgc);border:solid 1px var(--bdc)}.c--badge--outline{--c: var(--text);--bgc: transparent;--bdc: currentColor}}@layer lism-modules{.c--button{--c: var(--base);--bgc: var(--text);--bdc: var(--bgc);color:var(--c);background-color:var(--bgc);border:solid 1px var(--bdc);gap:var(--s10);text-decoration:none;place-content:center;place-items:center}.c--button--outline{--c: var(--text);--bgc: transparent;--bdc: var(--c)}:where(.c--button)>.a--icon{scale:1.05}.c--button:where(.l--grid){grid-template-columns:minmax(1em,auto) 1fr minmax(1em,auto);justify-items:center}.c--button:where(.l--grid)>:not(.a--icon){grid-column:2}}@layer lism-modules{.c--chat{--cbox-bgPct: 8%;--gta: "avatar name" "avatar body";--gtc: auto 1fr;--gtr: minmax(1.5rem, auto) auto;--_avator-size: clamp(48px, 32px + 5cqw, 64px);--_deco-size: calc(min(var(--_avator-size), 80px)/4 + .25rem) ;--_deco-mask: none;--_deco-t: 0;--_deco-scale: 1;--_deco-inset-x: 0;gap:0 calc(var(--_deco-size) + 1px)}.c--chat_avatar{grid-area:avatar;width:var(--_avator-size)}.c--chat_name{grid-area:name}.c--chat_body{grid-area:body}.c--chat_content{max-width:var(--sz--s)}.c--chat_deco{top:var(--_deco-t);inset-inline:var(--_deco-inset-x);width:var(--_deco-size);height:var(--_deco-size);scale:var(--_deco-scale);-webkit-mask:var(--_deco-mask) center / contain no-repeat;mask:var(--_deco-mask) center / contain no-repeat}.c--chat--speak{--_deco-mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path d="M8,8L8,8C7.4,4.8,5.4,2,2.6,0.4L2,0h6V8z"/></svg>')}[data-chat-dir=start]{--_deco-inset-x: auto calc(100% - 1px) }[data-chat-dir=end]{--_deco-scale: -1 1;--_deco-inset-x: calc(100% - 1px) auto;--gta: "name avatar" "body avatar";--gtc: 1fr auto}}.c--chat--speak[data-chat-dir=start]>div>.c--chat_content{border-start-start-radius:0}.c--chat--speak[data-chat-dir=end]>div>.c--chat_content{border-start-end-radius:0}@layer lism-modules{.c--shapeDivider{--level: 0;--_inner-offset: 0px;--_inner-stretch: 1;--_flipX: 1;--_flipY: 1;height:clamp(calc(5px * var(--level)),calc(1cqw * var(--level)),calc(12px * var(--level)));overflow:visible}.c--shapeDivider:where([data-flip^=X]){--_flipX: -1}.c--shapeDivider:where([data-flip$=Y]){--_flipY: -1}.c--shapeDivider_inner{--offsetY: .5px;--offsetX: -.5px;height:100%;width:calc(100% + 1px);scale:calc(var(--_flipX) * var(--_inner-stretch)) var(--_flipY);translate:calc(var(--offsetX) + var(--_inner-offset)) calc(var(--offsetY) * var(--_flipY))}.c--shapeDivider_svg{display:block}:where([data-has-animation=true]) .c--shapeDivider_svg{transform-origin:100% 0;animation:lism--slideShape 12s infinite alternate linear}}@keyframes lism--slideShape{0%{transform:scaleX(4)}to{transform:scaleX(4) translate(75%)}}
1
+ @layer lism-modules{.c--accordion{--duration: var(--acc-duration, .25s)}.c--accordion_item{--_panel-h: 0px;--_icon-transform: rotate(0deg)}.c--accordion_item[data-opened]{--_icon-transform: rotate(90deg);--_panel-h: auto}.c--accordion_panel{height:var(--_panel-h);transition:height var(--duration)}[hidden]>.c--accordion_content{position:absolute}.c--accordion_icon{display:grid;width:1em;height:1em}.c--accordion_icon:before,.c--accordion_icon:after{content:"";display:block;grid-area:1 / 1;background-color:currentColor}.c--accordion_icon:before{width:.1em;height:100%;transition:transform var(--duration);transform:var(--_icon-transform)}.c--accordion_icon:after{height:.1em;width:100%}.c--accordion_button:focus-visible{outline:solid 2px currentColor;outline-color:revert;outline-offset:-3px}@media(prefers-reduced-motion:reduce){.c--accordion_item{--duration: 0s}}@media(scripting:none){.c--accordion_panel{height:auto!important;content-visibility:visible!important}.c--accordion_content{position:static!important}}}@layer lism-modules{.c--details{--duration: var(--acc-duration, .25s);--_icon-scale: 1.1;--_icon-transform: rotate(0deg);--_content-gtr: 0fr}.c--details[open]{--_icon-transform: scaleY(-1);--_content-gtr: 1fr}.c--details_summary::-webkit-details-marker{display:none}.c--details_icon{--svg: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="1em" height="1em" fill="currentColor"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg>');display:inline-grid;background-color:currentColor;-webkit-mask:var(--svg) no-repeat center center / contain;mask:var(--svg) no-repeat center center / contain;scale:var(--_icon-scale);transition:transform var(--duration);transform:var(--_icon-transform)}.c--details::details-content{display:grid;grid-template-rows:var(--_content-gtr);transition-duration:var(--duration);transition-property:content-visibility,grid-template;transition-behavior:allow-discrete}.c--details_body{overflow:hidden}}@layer lism-modules{.c--modal{--flow: 0;--duration: var(--modal-duration, .4s);width:100%;height:100%;max-width:100%;max-height:100%;overflow:unset;background:var(--backdrop-bg, rgb(0 0 0 / .6));transition-duration:var(--duration);transition-property:opacity}.c--modal::backdrop{background:none}.c--modal[open]{display:flex;flex-direction:column;justify-content:center}.c--modal_inner{--offset: 0 0;background-color:var(--base);transition:translate var(--duration);max-height:100%}.c--modal:not([data-is-open]){opacity:0}.c--modal:not([data-is-open])>.c--modal_inner{translate:var(--offset)}}@layer lism-modules{.c--navMenu{--link-td: none;--hl: var(--hl--s);--_item-p: var(--s20);--focus-offset: -1px}.c--navMenu_nest{--_item-p: inherit}.c--navMenu_link{padding:var(--_item-p)}.c--navMenu_nest,.c--navMenu_item{--bdc: inherit}}@layer lism-modules{.c--tabs{display:grid;grid:"list" "panel" / 100%}.c--tabs_list{grid-area:list;display:flex;overflow-x:auto}.c--tabs_tab[aria-selected=true]{--_notSelected: }.c--tabs_tab[aria-selected=false]{--_isSelected: }:where(.c--tabs_tab){color:var(--_notSelected, var(--text-2))}.c--tabs_panel{grid-area:panel;width:100%}.c--tabs_panel:where([aria-hidden=true]){display:none}}@layer lism-modules{.c--badge{--c: var(--base);--bgc: var(--text);--bdc: transparent;color:var(--c);background-color:var(--bgc);border:solid 1px var(--bdc)}.c--badge--outline{--c: var(--text);--bgc: transparent;--bdc: currentColor}}@layer lism-modules{.c--button{--c: var(--base);--bgc: var(--text);--bdc: var(--bgc);color:var(--c);background-color:var(--bgc);border:solid 1px var(--bdc);gap:var(--s10);text-decoration:none;place-content:center;place-items:center}.c--button--outline{--c: var(--text);--bgc: transparent;--bdc: var(--c)}:where(.c--button)>.a--icon{scale:1.05}.c--button:where(.l--grid){grid-template-columns:minmax(1em,auto) 1fr minmax(1em,auto);justify-items:center}.c--button:where(.l--grid)>:not(.a--icon){grid-column:2}}@layer lism-modules{.c--chat{--cbox-bgPct: 8%;grid-template-areas:"avatar name" "avatar body";grid-template-columns:auto 1fr;grid-template-rows:minmax(1.5rem,auto) auto;--_avator-size: clamp(48px, 32px + 5cqw, 64px);--_deco-size: calc(min(var(--_avator-size), 80px)/4 + .25rem) ;--_deco-mask: none;--_deco-t: 0;--_deco-scale: 1;--_deco-inset-x: 0;gap:0 calc(var(--_deco-size) + 1px)}.c--chat_avatar{grid-area:avatar;width:var(--_avator-size)}.c--chat_name{grid-area:name}.c--chat_body{grid-area:body}.c--chat_content{max-width:var(--sz--s)}.c--chat_deco{top:var(--_deco-t);inset-inline:var(--_deco-inset-x);width:var(--_deco-size);height:var(--_deco-size);scale:var(--_deco-scale);-webkit-mask:var(--_deco-mask) center / contain no-repeat;mask:var(--_deco-mask) center / contain no-repeat}.c--chat--speak{--_deco-mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path d="M8,8L8,8C7.4,4.8,5.4,2,2.6,0.4L2,0h6V8z"/></svg>')}[data-chat-dir=start]{--_deco-inset-x: auto calc(100% - 1px) }[data-chat-dir=end]{--_deco-scale: -1 1;--_deco-inset-x: calc(100% - 1px) auto;grid-template-areas:"name avatar" "body avatar";grid-template-columns:1fr auto}}.c--chat--speak[data-chat-dir=start]>div>.c--chat_content{border-start-start-radius:0}.c--chat--speak[data-chat-dir=end]>div>.c--chat_content{border-start-end-radius:0}@layer lism-modules{.c--shapeDivider{--level: 0;--_inner-offset: 0px;--_inner-stretch: 1;--_flipX: 1;--_flipY: 1;height:clamp(calc(5px * var(--level)),calc(1cqw * var(--level)),calc(12px * var(--level)));overflow:visible}.c--shapeDivider:where([data-flip^=X]){--_flipX: -1}.c--shapeDivider:where([data-flip$=Y]){--_flipY: -1}.c--shapeDivider_inner{--offsetY: .5px;--offsetX: -.5px;height:100%;width:calc(100% + 1px);scale:calc(var(--_flipX) * var(--_inner-stretch)) var(--_flipY);translate:calc(var(--offsetX) + var(--_inner-offset)) calc(var(--offsetY) * var(--_flipY))}.c--shapeDivider_svg{display:block}:where([data-has-animation=true]) .c--shapeDivider_svg{transform-origin:100% 0;animation:lism--slideShape 12s infinite alternate linear}}@keyframes lism--slideShape{0%{transform:scaleX(4)}to{transform:scaleX(4) translate(75%)}}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lism-css/ui",
3
- "version": "0.10.0",
4
- "description": "UI components by lism-css.",
3
+ "version": "0.12.0",
4
+ "description": "UI components for React and Astro, powered by Lism CSS.",
5
5
  "author": {
6
6
  "name": "ddryo",
7
7
  "url": "https://github.com/ddryo"
@@ -21,11 +21,10 @@
21
21
  "exports": {
22
22
  "./react": {
23
23
  "import": "./dist/components/react.js",
24
- "types": "./dist/components/index.d.ts"
24
+ "types": "./dist/components/react.d.ts"
25
25
  },
26
26
  "./astro": {
27
- "import": "./src/components/astro.js",
28
- "types": "./dist/components/index.d.ts"
27
+ "import": "./src/components/astro.ts"
29
28
  },
30
29
  "./scripts/*": "./dist/scripts/*.js",
31
30
  "./style.css": "./dist/style.css"
@@ -39,9 +38,13 @@
39
38
  "url": "https://github.com/lism-css/lism-css/issues"
40
39
  },
41
40
  "dependencies": {
42
- "lism-css": "0.10.3"
41
+ "lism-css": "0.12.0"
43
42
  },
44
43
  "devDependencies": {
44
+ "@storybook/react-vite": "^10.3.3",
45
+ "eslint": "^9.39.4",
46
+ "storybook": "^10.3.3",
47
+ "stylelint": "^17.4.0",
45
48
  "@babel/cli": "^7.28.6",
46
49
  "@babel/core": "^7.29.0",
47
50
  "@babel/preset-env": "^7.29.0",
@@ -67,6 +70,10 @@
67
70
  "format": "prettier --write . --ignore-path ../../.prettierignore",
68
71
  "dev": "vite",
69
72
  "build": "vite build && pnpm build:css",
70
- "build:css": "node build-css.js"
73
+ "build:css": "node build-css.js",
74
+ "typecheck": "tsc --noEmit",
75
+ "lint": "pnpm lint:eslint && pnpm lint:style",
76
+ "lint:eslint": "eslint '**/*.{js,mjs,ts,tsx}'",
77
+ "lint:style": "stylelint '**/*.{css,scss}'"
71
78
  }
72
79
  }
@@ -0,0 +1,105 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { expect, userEvent, within, waitFor } from 'storybook/test';
3
+ import Accordion from './react';
4
+
5
+ const meta: Meta = {
6
+ title: 'UI/Accordion',
7
+ tags: ['autodocs'],
8
+ };
9
+
10
+ export default meta;
11
+ type Story = StoryObj;
12
+
13
+ export const Default: Story = {
14
+ render: () => (
15
+ <Accordion.Root>
16
+ <Accordion.Item>
17
+ <Accordion.Heading>
18
+ <Accordion.Button>アコーディオン 1</Accordion.Button>
19
+ </Accordion.Heading>
20
+ <Accordion.Panel>
21
+ <p>アコーディオン 1 のコンテンツです。</p>
22
+ </Accordion.Panel>
23
+ </Accordion.Item>
24
+ </Accordion.Root>
25
+ ),
26
+ play: async ({ canvasElement }) => {
27
+ const canvas = within(canvasElement);
28
+ const button = canvas.getByRole('button');
29
+
30
+ // 初期状態: 閉じている
31
+ await expect(button).toHaveAttribute('aria-expanded', 'false');
32
+
33
+ // クリックで開く
34
+ await userEvent.click(button);
35
+ await waitFor(() => expect(button).toHaveAttribute('aria-expanded', 'true'));
36
+
37
+ // 再クリックで閉じる
38
+ await userEvent.click(button);
39
+ await waitFor(() => expect(button).toHaveAttribute('aria-expanded', 'false'));
40
+ },
41
+ };
42
+
43
+ export const Multiple: Story = {
44
+ name: '複数アイテム',
45
+ render: () => (
46
+ <Accordion.Root>
47
+ {[1, 2, 3].map((i) => (
48
+ <Accordion.Item key={i}>
49
+ <Accordion.Heading>
50
+ <Accordion.Button>アコーディオン {i}</Accordion.Button>
51
+ </Accordion.Heading>
52
+ <Accordion.Panel>
53
+ <p>アコーディオン {i} のコンテンツです。</p>
54
+ </Accordion.Panel>
55
+ </Accordion.Item>
56
+ ))}
57
+ </Accordion.Root>
58
+ ),
59
+ play: async ({ canvasElement }) => {
60
+ const canvas = within(canvasElement);
61
+ const buttons = canvas.getAllByRole('button');
62
+ const [btn1, btn2] = buttons;
63
+
64
+ // 1つ目を開く
65
+ await userEvent.click(btn1);
66
+ await waitFor(() => expect(btn1).toHaveAttribute('aria-expanded', 'true'));
67
+
68
+ // 2つ目を開く → 1つ目が閉じる(allowMultiple なし)
69
+ await userEvent.click(btn2);
70
+ await waitFor(() => expect(btn2).toHaveAttribute('aria-expanded', 'true'));
71
+ await waitFor(() => expect(btn1).toHaveAttribute('aria-expanded', 'false'));
72
+ },
73
+ };
74
+
75
+ export const AllowMultiple: Story = {
76
+ name: 'allowMultiple(複数同時展開可)',
77
+ render: () => (
78
+ <Accordion.Root allowMultiple>
79
+ {[1, 2, 3].map((i) => (
80
+ <Accordion.Item key={i}>
81
+ <Accordion.Heading>
82
+ <Accordion.Button>アコーディオン {i}</Accordion.Button>
83
+ </Accordion.Heading>
84
+ <Accordion.Panel>
85
+ <p>アコーディオン {i} のコンテンツです。複数同時に開けます。</p>
86
+ </Accordion.Panel>
87
+ </Accordion.Item>
88
+ ))}
89
+ </Accordion.Root>
90
+ ),
91
+ play: async ({ canvasElement }) => {
92
+ const canvas = within(canvasElement);
93
+ const buttons = canvas.getAllByRole('button');
94
+ const [btn1, btn2] = buttons;
95
+
96
+ // 1つ目を開く
97
+ await userEvent.click(btn1);
98
+ await waitFor(() => expect(btn1).toHaveAttribute('aria-expanded', 'true'));
99
+
100
+ // 2つ目を開く → 1つ目はそのまま開いている
101
+ await userEvent.click(btn2);
102
+ await waitFor(() => expect(btn2).toHaveAttribute('aria-expanded', 'true'));
103
+ await expect(btn1).toHaveAttribute('aria-expanded', 'true');
104
+ },
105
+ };
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  import { Lism } from 'lism-css/astro';
3
3
  import Icon from './Icon.astro';
4
- import { defaultProps } from '../getProps';
4
+ import { getButtonProps } from '../getProps';
5
5
 
6
6
  // interface Props extends LismProps {}
7
7
  const { isOpen = false, accID = '__LISM_ACC_ID__', ...props } = Astro.props || {};
8
8
  ---
9
9
 
10
- <Lism {...defaultProps.button} {...props} aria-controls={accID} aria-expanded={isOpen ? 'true' : 'false'}>
10
+ <Lism {...getButtonProps(props)} aria-controls={accID} aria-expanded={isOpen ? 'true' : 'false'}>
11
11
  <slot />
12
12
  <Icon />
13
13
  </Lism>
@@ -0,0 +1,91 @@
1
+ import atts from 'lism-css/lib/helper/atts';
2
+ import mergeSet from 'lism-css/lib/helper/mergeSet';
3
+
4
+ export type AccordionRootProps = {
5
+ lismClass?: string;
6
+ allowMultiple?: boolean;
7
+ [key: string]: unknown;
8
+ };
9
+
10
+ export type AccordionItemProps = {
11
+ lismClass?: string;
12
+ [key: string]: unknown;
13
+ };
14
+
15
+ export type AccordionHeadingProps = {
16
+ as?: string;
17
+ role?: string;
18
+ lismClass?: string;
19
+ [key: string]: unknown;
20
+ };
21
+
22
+ export type AccordionPanelProps = {
23
+ lismClass?: string;
24
+ _contextID?: string;
25
+ accID?: string;
26
+ isOpen?: boolean;
27
+ [key: string]: unknown;
28
+ };
29
+
30
+ export function getRootProps({ lismClass, allowMultiple, ...props }: AccordionRootProps) {
31
+ props.lismClass = atts(lismClass, 'c--accordion');
32
+ if (allowMultiple) props['data-allow-multiple'] = '';
33
+ return props;
34
+ }
35
+
36
+ export function getItemProps({ lismClass, ...props }: AccordionItemProps) {
37
+ props.lismClass = atts(lismClass, 'c--accordion_item');
38
+ return props;
39
+ }
40
+
41
+ export function getHeadingProps({ as = 'div', role, lismClass, set, unset, ...props }: AccordionHeadingProps) {
42
+ const returnProps = {
43
+ lismClass: atts(lismClass, 'c--accordion_heading'),
44
+ as,
45
+ set: mergeSet('plain', set, unset),
46
+ ...props,
47
+ };
48
+
49
+ if (returnProps.as === 'div') {
50
+ (returnProps as Record<string, unknown>).role = role ?? 'heading';
51
+ }
52
+ return returnProps;
53
+ }
54
+
55
+ export function getButtonProps({ set, unset, ...props }: Record<string, unknown>) {
56
+ return {
57
+ lismClass: 'c--accordion_button',
58
+ as: 'button',
59
+ layout: 'flex',
60
+ set: mergeSet('plain', set, unset),
61
+ g: '10',
62
+ w: '100%',
63
+ ai: 'center',
64
+ jc: 'between',
65
+ ...props,
66
+ };
67
+ }
68
+
69
+ export function getPanelProps({ lismClass, _contextID, accID = '__LISM_ACC_ID__', isOpen = false, ...props }: AccordionPanelProps) {
70
+ const panelProps = {
71
+ lismClass: atts(lismClass, 'c--accordion_panel'),
72
+ id: _contextID || accID,
73
+ hidden: isOpen ? undefined : ('until-found' as unknown as boolean),
74
+ pos: 'relative',
75
+ ov: 'hidden',
76
+ };
77
+
78
+ const contentProps = { lismClass: 'c--accordion_content', layout: 'flow' as const, ...props };
79
+
80
+ return { panelProps, contentProps };
81
+ }
82
+
83
+ export const defaultProps = {
84
+ icon: {
85
+ lismClass: 'c--accordion_icon a--icon',
86
+ as: 'span',
87
+ pi: 'center',
88
+ fxsh: '0',
89
+ 'aria-hidden': 'true',
90
+ },
91
+ } as const;
@@ -1,7 +1,7 @@
1
- import { Lism } from 'lism-css/react';
1
+ import { Lism, type LismComponentProps } from 'lism-css/react';
2
2
  import { defaultProps } from '../getProps';
3
3
 
4
4
  // CSS疑似要素(::before / ::after)でアイコンを描画するコンポーネント
5
- export default function AccIcon(props) {
5
+ export default function AccIcon(props: LismComponentProps) {
6
6
  return <Lism {...defaultProps.icon} {...props} />;
7
7
  }