@fangxinyan/lumina 0.4.0 → 0.5.1

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 (199) hide show
  1. package/dist/Accordion.cjs +3 -3
  2. package/dist/Accordion.js +2 -2
  3. package/dist/Alert.cjs +3 -3
  4. package/dist/Alert.js +2 -2
  5. package/dist/AutoComplete.cjs +5 -5
  6. package/dist/AutoComplete.js +4 -4
  7. package/dist/Button.cjs +4 -4
  8. package/dist/Button.js +2 -2
  9. package/dist/Calendar.cjs +3 -3
  10. package/dist/Calendar.js +2 -2
  11. package/dist/Cascader.cjs +4 -4
  12. package/dist/Cascader.js +3 -3
  13. package/dist/Checkbox.cjs +4 -4
  14. package/dist/Checkbox.js +2 -2
  15. package/dist/ColorPicker.cjs +3 -3
  16. package/dist/ColorPicker.js +2 -2
  17. package/dist/CommandPalette.cjs +4 -4
  18. package/dist/CommandPalette.js +3 -3
  19. package/dist/Drawer.cjs +3 -3
  20. package/dist/Drawer.js +2 -2
  21. package/dist/Icon.cjs +3 -3
  22. package/dist/Icon.d.cts +1 -1
  23. package/dist/Icon.d.ts +1 -1
  24. package/dist/Icon.js +1 -1
  25. package/dist/Image.cjs +4 -4
  26. package/dist/Image.js +2 -2
  27. package/dist/Input.cjs +4 -4
  28. package/dist/Input.js +2 -2
  29. package/dist/InputNumber.cjs +4 -4
  30. package/dist/InputNumber.js +3 -3
  31. package/dist/Modal.cjs +4 -4
  32. package/dist/Modal.js +3 -3
  33. package/dist/Pagination.cjs +6 -6
  34. package/dist/Pagination.js +5 -5
  35. package/dist/Popover-DVGQGWX6.css +103 -0
  36. package/dist/Popover.cjs +3 -3
  37. package/dist/Popover.d.cts +23 -1
  38. package/dist/Popover.d.ts +23 -1
  39. package/dist/Popover.js +2 -2
  40. package/dist/Select.cjs +5 -5
  41. package/dist/Select.js +4 -4
  42. package/dist/{Slider-X4PVA65R.css → Slider-3JKA5EW6.css} +44 -25
  43. package/dist/Slider.cjs +2 -2
  44. package/dist/Slider.d.cts +8 -5
  45. package/dist/Slider.d.ts +8 -5
  46. package/dist/Slider.js +1 -1
  47. package/dist/Table.cjs +9 -9
  48. package/dist/Table.js +7 -7
  49. package/dist/Tag.cjs +4 -4
  50. package/dist/Tag.js +2 -2
  51. package/dist/Timeline-RHZAZKZ7.css +136 -0
  52. package/dist/Timeline.cjs +13 -0
  53. package/dist/Timeline.cjs.map +1 -0
  54. package/dist/Timeline.d.cts +38 -0
  55. package/dist/Timeline.d.ts +38 -0
  56. package/dist/Timeline.js +4 -0
  57. package/dist/Timeline.js.map +1 -0
  58. package/dist/{Toast-6PVSAXQ5.css → Toast-YSACW3EM.css} +2 -2
  59. package/dist/Toast.cjs +4 -4
  60. package/dist/Toast.js +2 -2
  61. package/dist/{Tooltip-ST24GY4S.css → Tooltip-DMKUPC24.css} +1 -0
  62. package/dist/Tooltip.cjs +3 -3
  63. package/dist/Tooltip.js +2 -2
  64. package/dist/Typography.cjs +7 -7
  65. package/dist/Typography.js +2 -2
  66. package/dist/{chunk-BCPAY65C.cjs → chunk-2D5VCIJZ.cjs} +7 -7
  67. package/dist/{chunk-BCPAY65C.cjs.map → chunk-2D5VCIJZ.cjs.map} +1 -1
  68. package/dist/{chunk-LLNEDEST.cjs → chunk-2OBQOEFD.cjs} +4 -4
  69. package/dist/{chunk-LLNEDEST.cjs.map → chunk-2OBQOEFD.cjs.map} +1 -1
  70. package/dist/chunk-2TZ2R7L2.js +235 -0
  71. package/dist/chunk-2TZ2R7L2.js.map +1 -0
  72. package/dist/{chunk-N73JGXYZ.cjs → chunk-3ES5QPAF.cjs} +4 -4
  73. package/dist/{chunk-N73JGXYZ.cjs.map → chunk-3ES5QPAF.cjs.map} +1 -1
  74. package/dist/{chunk-YCHUHMNP.cjs → chunk-3KQKEE5O.cjs} +5 -4
  75. package/dist/chunk-3KQKEE5O.cjs.map +1 -0
  76. package/dist/{chunk-RZ2E3XEU.cjs → chunk-3XIDJEYR.cjs} +21 -6
  77. package/dist/chunk-3XIDJEYR.cjs.map +1 -0
  78. package/dist/{chunk-IOWREUEP.js → chunk-3YYOYDKI.js} +4 -4
  79. package/dist/{chunk-IOWREUEP.js.map → chunk-3YYOYDKI.js.map} +1 -1
  80. package/dist/{chunk-PKXXR76Q.js → chunk-4ADDAZK3.js} +3 -3
  81. package/dist/{chunk-PKXXR76Q.js.map → chunk-4ADDAZK3.js.map} +1 -1
  82. package/dist/{chunk-TZLM5GF4.js → chunk-5SJJI3HL.js} +4 -4
  83. package/dist/{chunk-TZLM5GF4.js.map → chunk-5SJJI3HL.js.map} +1 -1
  84. package/dist/{chunk-2ENTRT7R.cjs → chunk-AJEF2ZB7.cjs} +16 -6
  85. package/dist/chunk-AJEF2ZB7.cjs.map +1 -0
  86. package/dist/{chunk-V2DIQ3RH.js → chunk-ANAQER3T.js} +21 -6
  87. package/dist/chunk-ANAQER3T.js.map +1 -0
  88. package/dist/{chunk-FXQGPHK2.js → chunk-AZRJZM7W.js} +3 -3
  89. package/dist/{chunk-FXQGPHK2.js.map → chunk-AZRJZM7W.js.map} +1 -1
  90. package/dist/{chunk-3BZ47QNV.cjs → chunk-BIXW4ZYW.cjs} +7 -7
  91. package/dist/{chunk-3BZ47QNV.cjs.map → chunk-BIXW4ZYW.cjs.map} +1 -1
  92. package/dist/{chunk-IJA26LRY.cjs → chunk-BPDWBY6Y.cjs} +4 -4
  93. package/dist/{chunk-IJA26LRY.cjs.map → chunk-BPDWBY6Y.cjs.map} +1 -1
  94. package/dist/{chunk-77TZHI76.cjs → chunk-D26YHP2Y.cjs} +7 -7
  95. package/dist/{chunk-77TZHI76.cjs.map → chunk-D26YHP2Y.cjs.map} +1 -1
  96. package/dist/{chunk-T4PI2ZX7.cjs → chunk-D3GZSL2B.cjs} +16 -17
  97. package/dist/chunk-D3GZSL2B.cjs.map +1 -0
  98. package/dist/{chunk-VQBZKRIB.cjs → chunk-DF5K2BZ2.cjs} +6 -6
  99. package/dist/{chunk-VQBZKRIB.cjs.map → chunk-DF5K2BZ2.cjs.map} +1 -1
  100. package/dist/{chunk-7M7NAMR5.js → chunk-DLGFIRVW.js} +14 -4
  101. package/dist/chunk-DLGFIRVW.js.map +1 -0
  102. package/dist/{chunk-6Z24VO3K.js → chunk-E7UQSFKF.js} +3 -3
  103. package/dist/{chunk-6Z24VO3K.js.map → chunk-E7UQSFKF.js.map} +1 -1
  104. package/dist/{chunk-KW7Z4IQC.js → chunk-FLPHVK45.js} +3 -3
  105. package/dist/{chunk-KW7Z4IQC.js.map → chunk-FLPHVK45.js.map} +1 -1
  106. package/dist/{chunk-WUOFJPZ4.js → chunk-GB5NAXBP.js} +3 -3
  107. package/dist/{chunk-WUOFJPZ4.js.map → chunk-GB5NAXBP.js.map} +1 -1
  108. package/dist/{chunk-SMHXSEBD.cjs → chunk-GT45MQAK.cjs} +7 -7
  109. package/dist/{chunk-SMHXSEBD.cjs.map → chunk-GT45MQAK.cjs.map} +1 -1
  110. package/dist/{chunk-TZXEZFCI.cjs → chunk-H2QTLV5T.cjs} +5 -5
  111. package/dist/{chunk-TZXEZFCI.cjs.map → chunk-H2QTLV5T.cjs.map} +1 -1
  112. package/dist/{chunk-FFZLSY2N.js → chunk-HHPYY4LH.js} +4 -4
  113. package/dist/{chunk-FFZLSY2N.js.map → chunk-HHPYY4LH.js.map} +1 -1
  114. package/dist/{chunk-XYVJ3FBQ.cjs → chunk-I7UJA6RM.cjs} +5 -5
  115. package/dist/{chunk-XYVJ3FBQ.cjs.map → chunk-I7UJA6RM.cjs.map} +1 -1
  116. package/dist/{chunk-YFBHVTKN.cjs → chunk-IJIQ4H6C.cjs} +7 -7
  117. package/dist/{chunk-YFBHVTKN.cjs.map → chunk-IJIQ4H6C.cjs.map} +1 -1
  118. package/dist/{chunk-LXNR6TQK.js → chunk-ILVNMES2.js} +3 -3
  119. package/dist/{chunk-LXNR6TQK.js.map → chunk-ILVNMES2.js.map} +1 -1
  120. package/dist/{chunk-JXHMJUVI.js → chunk-JELHUUM5.js} +3 -3
  121. package/dist/{chunk-JXHMJUVI.js.map → chunk-JELHUUM5.js.map} +1 -1
  122. package/dist/{chunk-CTYW42GG.js → chunk-JQZFOIX6.js} +6 -6
  123. package/dist/{chunk-CTYW42GG.js.map → chunk-JQZFOIX6.js.map} +1 -1
  124. package/dist/{chunk-I7WLFADD.js → chunk-LWN2PXW7.js} +3 -3
  125. package/dist/{chunk-I7WLFADD.js.map → chunk-LWN2PXW7.js.map} +1 -1
  126. package/dist/{chunk-I2HHC6QW.js → chunk-N5W6XJI2.js} +3 -3
  127. package/dist/{chunk-I2HHC6QW.js.map → chunk-N5W6XJI2.js.map} +1 -1
  128. package/dist/chunk-N6ZLZUBF.cjs +257 -0
  129. package/dist/chunk-N6ZLZUBF.cjs.map +1 -0
  130. package/dist/chunk-P2AV5BD7.cjs +137 -0
  131. package/dist/chunk-P2AV5BD7.cjs.map +1 -0
  132. package/dist/{chunk-ZFJHUOFU.js → chunk-P4XPESR2.js} +4 -4
  133. package/dist/{chunk-ZFJHUOFU.js.map → chunk-P4XPESR2.js.map} +1 -1
  134. package/dist/{chunk-AESLEYST.js → chunk-RJNGXR5Y.js} +4 -4
  135. package/dist/{chunk-AESLEYST.js.map → chunk-RJNGXR5Y.js.map} +1 -1
  136. package/dist/chunk-S3NIRNWM.js +86 -0
  137. package/dist/chunk-S3NIRNWM.js.map +1 -0
  138. package/dist/{chunk-HJIKU6MF.cjs → chunk-S7RFIMA3.cjs} +4 -4
  139. package/dist/{chunk-HJIKU6MF.cjs.map → chunk-S7RFIMA3.cjs.map} +1 -1
  140. package/dist/chunk-TAYFI4RG.cjs +108 -0
  141. package/dist/chunk-TAYFI4RG.cjs.map +1 -0
  142. package/dist/{chunk-OZVPJWXO.cjs → chunk-TCPTBLDV.cjs} +5 -5
  143. package/dist/{chunk-OZVPJWXO.cjs.map → chunk-TCPTBLDV.cjs.map} +1 -1
  144. package/dist/{chunk-E62JFAHW.js → chunk-TGUDT3GK.js} +4 -4
  145. package/dist/{chunk-E62JFAHW.js.map → chunk-TGUDT3GK.js.map} +1 -1
  146. package/dist/{chunk-XCYE4OQV.js → chunk-TMRSI543.js} +3 -3
  147. package/dist/{chunk-XCYE4OQV.js.map → chunk-TMRSI543.js.map} +1 -1
  148. package/dist/{chunk-RWHWEQQX.cjs → chunk-U7TAQLPN.cjs} +6 -6
  149. package/dist/{chunk-RWHWEQQX.cjs.map → chunk-U7TAQLPN.cjs.map} +1 -1
  150. package/dist/chunk-UEHONGPZ.js +115 -0
  151. package/dist/chunk-UEHONGPZ.js.map +1 -0
  152. package/dist/{chunk-NN7WMXY4.cjs → chunk-UUY7EDVJ.cjs} +4 -4
  153. package/dist/{chunk-NN7WMXY4.cjs.map → chunk-UUY7EDVJ.cjs.map} +1 -1
  154. package/dist/{chunk-OM76QWUN.js → chunk-UXABXEWT.js} +3 -3
  155. package/dist/{chunk-OM76QWUN.js.map → chunk-UXABXEWT.js.map} +1 -1
  156. package/dist/{chunk-MDQNUKCP.cjs → chunk-V6466VMN.cjs} +14 -14
  157. package/dist/{chunk-MDQNUKCP.cjs.map → chunk-V6466VMN.cjs.map} +1 -1
  158. package/dist/{chunk-O7C6S644.js → chunk-WBL7LOIH.js} +3 -3
  159. package/dist/{chunk-O7C6S644.js.map → chunk-WBL7LOIH.js.map} +1 -1
  160. package/dist/{chunk-RQV7SMIZ.cjs → chunk-WKNVNN2K.cjs} +5 -5
  161. package/dist/{chunk-RQV7SMIZ.cjs.map → chunk-WKNVNN2K.cjs.map} +1 -1
  162. package/dist/{chunk-HXSAH4Y6.cjs → chunk-WR3FML2W.cjs} +7 -7
  163. package/dist/{chunk-HXSAH4Y6.cjs.map → chunk-WR3FML2W.cjs.map} +1 -1
  164. package/dist/{chunk-QOGROEVD.js → chunk-X3JG3IR6.js} +6 -5
  165. package/dist/chunk-X3JG3IR6.js.map +1 -0
  166. package/dist/{chunk-6XZ362VL.js → chunk-XT7RXXOE.js} +6 -7
  167. package/dist/chunk-XT7RXXOE.js.map +1 -0
  168. package/dist/{chunk-WVBFQB26.cjs → chunk-ZSR5JSYZ.cjs} +8 -8
  169. package/dist/{chunk-WVBFQB26.cjs.map → chunk-ZSR5JSYZ.cjs.map} +1 -1
  170. package/dist/index.cjs +67 -62
  171. package/dist/index.cjs.map +1 -1
  172. package/dist/index.d.cts +3 -2
  173. package/dist/index.d.ts +3 -2
  174. package/dist/index.js +27 -26
  175. package/dist/index.js.map +1 -1
  176. package/dist/styles.css +124 -29
  177. package/docs/llms/form.md +26 -0
  178. package/docs/llms/popover.md +138 -6
  179. package/docs/llms/slider.md +13 -2
  180. package/docs/llms/timeline.md +140 -0
  181. package/docs/llms.md +5 -4
  182. package/package.json +5 -1
  183. package/dist/Popover-NYEKT5CQ.css +0 -10
  184. package/dist/chunk-2ENTRT7R.cjs.map +0 -1
  185. package/dist/chunk-3UU2PUK4.js +0 -66
  186. package/dist/chunk-3UU2PUK4.js.map +0 -1
  187. package/dist/chunk-6XZ362VL.js.map +0 -1
  188. package/dist/chunk-7M7NAMR5.js.map +0 -1
  189. package/dist/chunk-B5JH7NRZ.cjs +0 -133
  190. package/dist/chunk-B5JH7NRZ.cjs.map +0 -1
  191. package/dist/chunk-O2HMH5BI.cjs +0 -88
  192. package/dist/chunk-O2HMH5BI.cjs.map +0 -1
  193. package/dist/chunk-QJGKI2BD.js +0 -111
  194. package/dist/chunk-QJGKI2BD.js.map +0 -1
  195. package/dist/chunk-QOGROEVD.js.map +0 -1
  196. package/dist/chunk-RZ2E3XEU.cjs.map +0 -1
  197. package/dist/chunk-T4PI2ZX7.cjs.map +0 -1
  198. package/dist/chunk-V2DIQ3RH.js.map +0 -1
  199. package/dist/chunk-YCHUHMNP.cjs.map +0 -1
@@ -1,16 +1,38 @@
1
1
  import * as React from 'react';
2
2
 
3
3
  interface PopoverProps {
4
+ /** Popover body content. */
4
5
  content: React.ReactNode;
6
+ /** Optional title rendered above content. */
7
+ title?: React.ReactNode;
8
+ /** Preferred placement relative to the trigger. */
5
9
  placement?: "top" | "bottom" | "left" | "right";
10
+ /** How the popover is triggered. */
6
11
  trigger?: "click" | "hover";
12
+ /** Show a small arrow pointing at the trigger. */
13
+ arrow?: boolean;
14
+ /** Show a close button in the header (click trigger only). */
15
+ closable?: boolean;
16
+ /** Panel width in px, or `"auto"` to fit content. */
17
+ width?: number | "auto";
18
+ /** Uncontrolled initial open state. */
7
19
  defaultOpen?: boolean;
20
+ /** Controlled open state. */
8
21
  open?: boolean;
22
+ /** Callback when visibility changes. */
9
23
  onOpenChange?: (open: boolean) => void;
24
+ /** Trigger element. */
10
25
  children: React.ReactElement;
11
26
  className?: string;
12
27
  }
13
- /** `Popover` — rich content bubble. */
28
+ /**
29
+ * `Popover` — rich content bubble with optional title, arrow, and close button.
30
+ *
31
+ * @example
32
+ * <Popover title="Confirm" content={<p>Are you sure?</p>} arrow>
33
+ * <Button>Delete</Button>
34
+ * </Popover>
35
+ */
14
36
  declare const Popover: React.FC<PopoverProps>;
15
37
 
16
38
  export { Popover, type PopoverProps };
package/dist/Popover.d.ts CHANGED
@@ -1,16 +1,38 @@
1
1
  import * as React from 'react';
2
2
 
3
3
  interface PopoverProps {
4
+ /** Popover body content. */
4
5
  content: React.ReactNode;
6
+ /** Optional title rendered above content. */
7
+ title?: React.ReactNode;
8
+ /** Preferred placement relative to the trigger. */
5
9
  placement?: "top" | "bottom" | "left" | "right";
10
+ /** How the popover is triggered. */
6
11
  trigger?: "click" | "hover";
12
+ /** Show a small arrow pointing at the trigger. */
13
+ arrow?: boolean;
14
+ /** Show a close button in the header (click trigger only). */
15
+ closable?: boolean;
16
+ /** Panel width in px, or `"auto"` to fit content. */
17
+ width?: number | "auto";
18
+ /** Uncontrolled initial open state. */
7
19
  defaultOpen?: boolean;
20
+ /** Controlled open state. */
8
21
  open?: boolean;
22
+ /** Callback when visibility changes. */
9
23
  onOpenChange?: (open: boolean) => void;
24
+ /** Trigger element. */
10
25
  children: React.ReactElement;
11
26
  className?: string;
12
27
  }
13
- /** `Popover` — rich content bubble. */
28
+ /**
29
+ * `Popover` — rich content bubble with optional title, arrow, and close button.
30
+ *
31
+ * @example
32
+ * <Popover title="Confirm" content={<p>Are you sure?</p>} arrow>
33
+ * <Button>Delete</Button>
34
+ * </Popover>
35
+ */
14
36
  declare const Popover: React.FC<PopoverProps>;
15
37
 
16
38
  export { Popover, type PopoverProps };
package/dist/Popover.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Popover } from './chunk-3UU2PUK4.js';
2
- import './chunk-V2DIQ3RH.js';
1
+ export { Popover } from './chunk-UEHONGPZ.js';
2
+ import './chunk-ANAQER3T.js';
3
3
  //# sourceMappingURL=Popover.js.map
4
4
  //# sourceMappingURL=Popover.js.map
package/dist/Select.cjs CHANGED
@@ -1,15 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkT4PI2ZX7_cjs = require('./chunk-T4PI2ZX7.cjs');
4
- require('./chunk-RQV7SMIZ.cjs');
5
- require('./chunk-RZ2E3XEU.cjs');
6
- require('./chunk-YCHUHMNP.cjs');
3
+ var chunkD3GZSL2B_cjs = require('./chunk-D3GZSL2B.cjs');
4
+ require('./chunk-WKNVNN2K.cjs');
5
+ require('./chunk-3XIDJEYR.cjs');
6
+ require('./chunk-3KQKEE5O.cjs');
7
7
 
8
8
 
9
9
 
10
10
  Object.defineProperty(exports, "Select", {
11
11
  enumerable: true,
12
- get: function () { return chunkT4PI2ZX7_cjs.Select; }
12
+ get: function () { return chunkD3GZSL2B_cjs.Select; }
13
13
  });
14
14
  //# sourceMappingURL=Select.cjs.map
15
15
  //# sourceMappingURL=Select.cjs.map
package/dist/Select.js CHANGED
@@ -1,6 +1,6 @@
1
- export { Select } from './chunk-6XZ362VL.js';
2
- import './chunk-LXNR6TQK.js';
3
- import './chunk-V2DIQ3RH.js';
4
- import './chunk-QOGROEVD.js';
1
+ export { Select } from './chunk-XT7RXXOE.js';
2
+ import './chunk-ILVNMES2.js';
3
+ import './chunk-ANAQER3T.js';
4
+ import './chunk-X3JG3IR6.js';
5
5
  //# sourceMappingURL=Select.js.map
6
6
  //# sourceMappingURL=Select.js.map
@@ -1,14 +1,25 @@
1
1
  /* ============ Slider ============ */
2
2
  .slider {
3
3
  position: relative;
4
- height: 36px;
5
4
  width: 100%;
6
5
  display: flex;
7
6
  align-items: center;
7
+ gap: 10px;
8
8
  cursor: pointer;
9
+ min-height: 36px;
9
10
  }
10
11
  .slider.has-marks { padding-bottom: 26px; }
11
12
  .slider.disabled { opacity: 0.5; cursor: not-allowed; }
13
+
14
+ /* Rail: positioning context for track + thumbs + marks */
15
+ .slider-rail {
16
+ position: relative;
17
+ flex: 1 1 0%;
18
+ height: 36px;
19
+ display: flex;
20
+ align-items: center;
21
+ }
22
+
12
23
  .slider-track {
13
24
  position: relative;
14
25
  width: 100%;
@@ -16,8 +27,10 @@
16
27
  border-radius: 999px;
17
28
  background: var(--bg);
18
29
  box-shadow: var(--neu-in-sm);
19
- overflow: hidden;
30
+ touch-action: none;
31
+ z-index: 1;
20
32
  }
33
+
21
34
  .slider-fill {
22
35
  position: absolute;
23
36
  top: 0; bottom: 0;
@@ -25,7 +38,9 @@
25
38
  box-shadow: 0 0 12px var(--accent-glow);
26
39
  border-radius: 999px;
27
40
  transition: left var(--dur-fast) var(--ease), right var(--dur-fast) var(--ease);
41
+ pointer-events: none;
28
42
  }
43
+
29
44
  .slider-thumb {
30
45
  position: absolute;
31
46
  top: 50%;
@@ -36,43 +51,45 @@
36
51
  transform: translate(-50%, -50%);
37
52
  transition: all var(--dur-fast) var(--ease);
38
53
  display: grid; place-items: center;
39
- pointer-events: none;
54
+ z-index: 3;
55
+ outline: none;
56
+ touch-action: none;
40
57
  }
41
- .slider.has-marks .slider-thumb { top: calc(50% - 13px); }
42
- .slider.has-marks .slider-track { margin-top: -26px; }
43
58
  .slider-thumb::after {
44
59
  content: "";
45
60
  width: 6px; height: 6px;
46
61
  border-radius: 999px;
47
- background: var(--accent);
62
+ background: var(--slider-thumb-color, var(--accent));
63
+ }
64
+ .slider-thumb:focus-visible {
65
+ box-shadow: var(--neu-out-sm), 0 0 0 3px var(--accent-glow);
48
66
  }
49
67
  .slider:hover .slider-thumb { transform: translate(-50%, -50%) scale(1.08); }
50
- .slider input[type="range"] {
51
- position: absolute;
52
- inset: 0;
53
- width: 100%; height: 100%;
54
- opacity: 0;
55
- cursor: inherit;
56
- margin: 0;
57
- pointer-events: auto;
68
+
69
+ .slider-value {
70
+ font-family: var(--font-mono);
71
+ font-size: 12px;
72
+ color: var(--accent-ink);
73
+ flex-shrink: 0;
74
+ white-space: nowrap;
58
75
  }
59
- /* In range mode (two stacked inputs), split the hit zones by half so the user can drag either thumb */
60
- .slider input[type="range"]:nth-of-type(1):not(:only-of-type) { right: 50%; }
61
- .slider input[type="range"]:nth-of-type(2) { left: 50%; }
62
- .slider.has-marks input[type="range"] { height: calc(100% - 26px); }
63
- .slider-value { font-family: var(--font-mono); font-size: 12px; color: var(--accent-ink); margin-left: 10px; }
76
+
77
+ /* Tone variants */
78
+ .slider.success .slider-thumb { --slider-thumb-color: var(--success); }
64
79
  .slider.success .slider-fill { background: linear-gradient(90deg, color-mix(in oklch, var(--success) 70%, white), var(--success)); box-shadow: 0 0 10px color-mix(in oklch, var(--success) 35%, transparent); }
65
- .slider.success .slider-thumb::after { background: var(--success); }
80
+ .slider.success .slider-thumb:focus-visible { box-shadow: var(--neu-out-sm), 0 0 0 3px color-mix(in oklch, var(--success) 35%, transparent); }
81
+ .slider.warning .slider-thumb { --slider-thumb-color: var(--warning); }
66
82
  .slider.warning .slider-fill { background: linear-gradient(90deg, color-mix(in oklch, var(--warning) 70%, white), var(--warning)); box-shadow: 0 0 10px color-mix(in oklch, var(--warning) 35%, transparent); }
67
- .slider.warning .slider-thumb::after { background: var(--warning); }
83
+ .slider.warning .slider-thumb:focus-visible { box-shadow: var(--neu-out-sm), 0 0 0 3px color-mix(in oklch, var(--warning) 35%, transparent); }
84
+ .slider.danger .slider-thumb { --slider-thumb-color: var(--danger); }
68
85
  .slider.danger .slider-fill { background: linear-gradient(90deg, color-mix(in oklch, var(--danger) 70%, white), var(--danger)); box-shadow: 0 0 10px color-mix(in oklch, var(--danger) 35%, transparent); }
69
- .slider.danger .slider-thumb::after { background: var(--danger); }
86
+ .slider.danger .slider-thumb:focus-visible { box-shadow: var(--neu-out-sm), 0 0 0 3px color-mix(in oklch, var(--danger) 35%, transparent); }
70
87
 
71
88
  /* Marks */
72
89
  .slider-marks {
73
90
  position: absolute;
74
91
  left: 0; right: 0;
75
- bottom: 0;
92
+ bottom: -26px;
76
93
  height: 22px;
77
94
  pointer-events: none;
78
95
  }
@@ -94,8 +111,10 @@
94
111
  border-radius: 999px;
95
112
  background: var(--bg);
96
113
  box-shadow: var(--neu-in-sm);
97
- margin-top: -18px;
98
- position: relative;
114
+ position: absolute;
115
+ top: -12px;
116
+ left: 50%;
117
+ transform: translateX(-50%);
99
118
  z-index: 1;
100
119
  }
101
120
  .slider-mark.active .slider-mark-dot { background: var(--accent); box-shadow: 0 0 6px var(--accent-glow); }
package/dist/Slider.cjs CHANGED
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkB5JH7NRZ_cjs = require('./chunk-B5JH7NRZ.cjs');
3
+ var chunkN6ZLZUBF_cjs = require('./chunk-N6ZLZUBF.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "Slider", {
8
8
  enumerable: true,
9
- get: function () { return chunkB5JH7NRZ_cjs.Slider; }
9
+ get: function () { return chunkN6ZLZUBF_cjs.Slider; }
10
10
  });
11
11
  //# sourceMappingURL=Slider.cjs.map
12
12
  //# sourceMappingURL=Slider.cjs.map
package/dist/Slider.d.cts CHANGED
@@ -1,8 +1,7 @@
1
1
  import * as React from 'react';
2
2
 
3
- type SliderSingleValue = number;
4
3
  type SliderRangeValue = [number, number];
5
- type SliderValue = SliderSingleValue | SliderRangeValue;
4
+ type SliderValue = number | SliderRangeValue;
6
5
  interface SliderBaseProps {
7
6
  min?: number;
8
7
  max?: number;
@@ -10,6 +9,8 @@ interface SliderBaseProps {
10
9
  disabled?: boolean;
11
10
  showValue?: boolean;
12
11
  tone?: "accent" | "success" | "warning" | "danger";
12
+ /** Custom gradient colors mapped from min→max. Overrides `tone` for fill & thumb. */
13
+ colors?: string[];
13
14
  /** Tick marks with labels. Clicking a mark snaps to it. */
14
15
  marks?: Record<number, React.ReactNode>;
15
16
  className?: string;
@@ -27,7 +28,9 @@ interface SliderRangeProps extends SliderBaseProps {
27
28
  onChange?: (value: SliderRangeValue) => void;
28
29
  }
29
30
  type SliderProps = SliderSingleProps | SliderRangeProps;
30
- /** `Slider` — neumorphic range input with grooved track. */
31
- declare const Slider: React.FC<SliderProps>;
31
+ /** `Slider` — neumorphic range input with grooved track.
32
+ * @example <Slider defaultValue={40} showValue />
33
+ */
34
+ declare const Slider: React.ForwardRefExoticComponent<SliderProps & React.RefAttributes<HTMLDivElement>>;
32
35
 
33
- export { Slider, type SliderProps, type SliderRangeProps, type SliderRangeValue, type SliderSingleProps, type SliderSingleValue, type SliderValue };
36
+ export { Slider, type SliderProps, type SliderRangeProps, type SliderRangeValue, type SliderSingleProps, type SliderValue };
package/dist/Slider.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  import * as React from 'react';
2
2
 
3
- type SliderSingleValue = number;
4
3
  type SliderRangeValue = [number, number];
5
- type SliderValue = SliderSingleValue | SliderRangeValue;
4
+ type SliderValue = number | SliderRangeValue;
6
5
  interface SliderBaseProps {
7
6
  min?: number;
8
7
  max?: number;
@@ -10,6 +9,8 @@ interface SliderBaseProps {
10
9
  disabled?: boolean;
11
10
  showValue?: boolean;
12
11
  tone?: "accent" | "success" | "warning" | "danger";
12
+ /** Custom gradient colors mapped from min→max. Overrides `tone` for fill & thumb. */
13
+ colors?: string[];
13
14
  /** Tick marks with labels. Clicking a mark snaps to it. */
14
15
  marks?: Record<number, React.ReactNode>;
15
16
  className?: string;
@@ -27,7 +28,9 @@ interface SliderRangeProps extends SliderBaseProps {
27
28
  onChange?: (value: SliderRangeValue) => void;
28
29
  }
29
30
  type SliderProps = SliderSingleProps | SliderRangeProps;
30
- /** `Slider` — neumorphic range input with grooved track. */
31
- declare const Slider: React.FC<SliderProps>;
31
+ /** `Slider` — neumorphic range input with grooved track.
32
+ * @example <Slider defaultValue={40} showValue />
33
+ */
34
+ declare const Slider: React.ForwardRefExoticComponent<SliderProps & React.RefAttributes<HTMLDivElement>>;
32
35
 
33
- export { Slider, type SliderProps, type SliderRangeProps, type SliderRangeValue, type SliderSingleProps, type SliderSingleValue, type SliderValue };
36
+ export { Slider, type SliderProps, type SliderRangeProps, type SliderRangeValue, type SliderSingleProps, type SliderValue };
package/dist/Slider.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Slider } from './chunk-QJGKI2BD.js';
1
+ export { Slider } from './chunk-2TZ2R7L2.js';
2
2
  //# sourceMappingURL=Slider.js.map
3
3
  //# sourceMappingURL=Slider.js.map
package/dist/Table.cjs CHANGED
@@ -1,22 +1,22 @@
1
1
  'use strict';
2
2
 
3
- var chunkMDQNUKCP_cjs = require('./chunk-MDQNUKCP.cjs');
4
- require('./chunk-77TZHI76.cjs');
5
- require('./chunk-T4PI2ZX7.cjs');
6
- require('./chunk-RQV7SMIZ.cjs');
7
- require('./chunk-NN7WMXY4.cjs');
8
- require('./chunk-RZ2E3XEU.cjs');
9
- require('./chunk-YCHUHMNP.cjs');
3
+ var chunkV6466VMN_cjs = require('./chunk-V6466VMN.cjs');
4
+ require('./chunk-D26YHP2Y.cjs');
5
+ require('./chunk-D3GZSL2B.cjs');
6
+ require('./chunk-WKNVNN2K.cjs');
7
+ require('./chunk-UUY7EDVJ.cjs');
8
+ require('./chunk-3XIDJEYR.cjs');
9
+ require('./chunk-3KQKEE5O.cjs');
10
10
 
11
11
 
12
12
 
13
13
  Object.defineProperty(exports, "Table", {
14
14
  enumerable: true,
15
- get: function () { return chunkMDQNUKCP_cjs.Table; }
15
+ get: function () { return chunkV6466VMN_cjs.Table; }
16
16
  });
17
17
  Object.defineProperty(exports, "TablePro", {
18
18
  enumerable: true,
19
- get: function () { return chunkMDQNUKCP_cjs.TablePro; }
19
+ get: function () { return chunkV6466VMN_cjs.TablePro; }
20
20
  });
21
21
  //# sourceMappingURL=Table.cjs.map
22
22
  //# sourceMappingURL=Table.cjs.map
package/dist/Table.js CHANGED
@@ -1,9 +1,9 @@
1
- export { Table, TablePro } from './chunk-CTYW42GG.js';
2
- import './chunk-AESLEYST.js';
3
- import './chunk-6XZ362VL.js';
4
- import './chunk-LXNR6TQK.js';
5
- import './chunk-PKXXR76Q.js';
6
- import './chunk-V2DIQ3RH.js';
7
- import './chunk-QOGROEVD.js';
1
+ export { Table, TablePro } from './chunk-JQZFOIX6.js';
2
+ import './chunk-RJNGXR5Y.js';
3
+ import './chunk-XT7RXXOE.js';
4
+ import './chunk-ILVNMES2.js';
5
+ import './chunk-4ADDAZK3.js';
6
+ import './chunk-ANAQER3T.js';
7
+ import './chunk-X3JG3IR6.js';
8
8
  //# sourceMappingURL=Table.js.map
9
9
  //# sourceMappingURL=Table.js.map
package/dist/Tag.cjs CHANGED
@@ -1,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
- var chunkRQV7SMIZ_cjs = require('./chunk-RQV7SMIZ.cjs');
4
- require('./chunk-YCHUHMNP.cjs');
3
+ var chunkWKNVNN2K_cjs = require('./chunk-WKNVNN2K.cjs');
4
+ require('./chunk-3KQKEE5O.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "Badge", {
9
9
  enumerable: true,
10
- get: function () { return chunkRQV7SMIZ_cjs.Badge; }
10
+ get: function () { return chunkWKNVNN2K_cjs.Badge; }
11
11
  });
12
12
  Object.defineProperty(exports, "Tag", {
13
13
  enumerable: true,
14
- get: function () { return chunkRQV7SMIZ_cjs.Tag; }
14
+ get: function () { return chunkWKNVNN2K_cjs.Tag; }
15
15
  });
16
16
  //# sourceMappingURL=Tag.cjs.map
17
17
  //# sourceMappingURL=Tag.cjs.map
package/dist/Tag.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Badge, Tag } from './chunk-LXNR6TQK.js';
2
- import './chunk-QOGROEVD.js';
1
+ export { Badge, Tag } from './chunk-ILVNMES2.js';
2
+ import './chunk-X3JG3IR6.js';
3
3
  //# sourceMappingURL=Tag.js.map
4
4
  //# sourceMappingURL=Tag.js.map
@@ -0,0 +1,136 @@
1
+ .timeline {
2
+ display: flex;
3
+ flex-direction: column;
4
+ font-size: 14px;
5
+ color: var(--fg);
6
+ }
7
+
8
+ /* ---- Item layout ---- */
9
+ .timeline-item {
10
+ display: grid;
11
+ grid-template-columns: 1fr auto 1fr;
12
+ gap: 0 var(--gap-3);
13
+ min-height: 60px;
14
+ position: relative;
15
+ }
16
+
17
+ /* Left mode: label hidden, content on right */
18
+ .timeline-left .timeline-item-label {
19
+ display: none;
20
+ }
21
+ .timeline-left .timeline-item {
22
+ grid-template-columns: auto 1fr;
23
+ }
24
+
25
+ /* Right mode: content on left, label hidden */
26
+ .timeline-right .timeline-item-label {
27
+ display: none;
28
+ }
29
+ .timeline-right .timeline-item {
30
+ grid-template-columns: 1fr auto;
31
+ direction: rtl;
32
+ }
33
+ .timeline-right .timeline-item-content,
34
+ .timeline-right .timeline-item-head {
35
+ direction: ltr;
36
+ }
37
+
38
+ /* Alternate mode */
39
+ .timeline-alternate .timeline-item-left .timeline-item-label {
40
+ text-align: right;
41
+ color: var(--fg-muted);
42
+ }
43
+ .timeline-alternate .timeline-item-left .timeline-item-content {
44
+ text-align: left;
45
+ }
46
+ .timeline-alternate .timeline-item-right .timeline-item-label {
47
+ text-align: left;
48
+ }
49
+ .timeline-alternate .timeline-item-right .timeline-item-content {
50
+ text-align: right;
51
+ color: var(--fg-muted);
52
+ }
53
+ .timeline-alternate .timeline-item-right {
54
+ direction: rtl;
55
+ }
56
+ .timeline-alternate .timeline-item-right .timeline-item-head,
57
+ .timeline-alternate .timeline-item-right .timeline-item-content,
58
+ .timeline-alternate .timeline-item-right .timeline-item-label {
59
+ direction: ltr;
60
+ }
61
+
62
+ /* ---- Head (dot + tail) ---- */
63
+ .timeline-item-head {
64
+ display: flex;
65
+ flex-direction: column;
66
+ align-items: center;
67
+ position: relative;
68
+ }
69
+
70
+ .timeline-item-dot {
71
+ width: 12px;
72
+ height: 12px;
73
+ border-radius: var(--r-pill);
74
+ box-shadow: var(--neu-out-sm);
75
+ flex-shrink: 0;
76
+ display: flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ position: relative;
80
+ z-index: 1;
81
+ margin-top: 4px;
82
+ }
83
+
84
+ .timeline-item-dot.accent { background: var(--accent); }
85
+ .timeline-item-dot.success { background: var(--success); }
86
+ .timeline-item-dot.warning { background: var(--warning); }
87
+ .timeline-item-dot.danger { background: var(--danger); }
88
+ .timeline-item-dot.info { background: var(--info); }
89
+ .timeline-item-dot.muted { background: var(--fg-subtle); }
90
+
91
+ /* Pending dot: clear default fill, Spinner handles its own visuals */
92
+ .timeline-item-dot.pending {
93
+ background: transparent;
94
+ box-shadow: none;
95
+ border: none;
96
+ }
97
+
98
+ .timeline-item-tail {
99
+ width: 2px;
100
+ flex: 1;
101
+ background: var(--divider);
102
+ margin-top: var(--gap-1);
103
+ margin-bottom: 0;
104
+ border-radius: 1px;
105
+ }
106
+
107
+ /* ---- Content ---- */
108
+ .timeline-item-content {
109
+ padding-bottom: var(--gap-5);
110
+ line-height: 1.6;
111
+ }
112
+ .timeline-item-last .timeline-item-content {
113
+ padding-bottom: 0;
114
+ }
115
+
116
+ .timeline-item-label {
117
+ padding-bottom: var(--gap-5);
118
+ line-height: 1.6;
119
+ color: var(--fg-muted);
120
+ font-size: 13px;
121
+ }
122
+
123
+ /* ---- Pending animation ---- */
124
+ .timeline-item-pending .timeline-item-content {
125
+ color: var(--fg-muted);
126
+ }
127
+
128
+ /* When dot has custom content (Spinner / Icon), expand to fit */
129
+ .timeline-item-dot:has(> *) {
130
+ width: auto;
131
+ height: auto;
132
+ background: transparent !important;
133
+ box-shadow: none;
134
+ border-radius: 0;
135
+ border: none;
136
+ }
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var chunkTAYFI4RG_cjs = require('./chunk-TAYFI4RG.cjs');
4
+ require('./chunk-XUT2Z2L6.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "Timeline", {
9
+ enumerable: true,
10
+ get: function () { return chunkTAYFI4RG_cjs.Timeline; }
11
+ });
12
+ //# sourceMappingURL=Timeline.cjs.map
13
+ //# sourceMappingURL=Timeline.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Timeline.cjs"}
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+
3
+ interface TimelineItemConfig {
4
+ /** Unique key for the item */
5
+ key?: string;
6
+ /** Content displayed on the right (or main side) */
7
+ children?: React.ReactNode;
8
+ /** Label displayed on the opposite side (alternate/label mode) */
9
+ label?: React.ReactNode;
10
+ /** Dot color */
11
+ color?: "accent" | "success" | "warning" | "danger" | "info" | "muted";
12
+ /** Custom dot content (replaces default dot) */
13
+ dot?: React.ReactNode;
14
+ }
15
+ interface TimelineProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
16
+ /** Timeline items */
17
+ items: TimelineItemConfig[];
18
+ /**
19
+ * Show a pending (loading) item at the end.
20
+ * `true` renders a default spinner; a ReactNode renders custom content.
21
+ */
22
+ pending?: boolean | React.ReactNode;
23
+ /** Text shown as the pending item's content */
24
+ pendingContent?: React.ReactNode;
25
+ /** Layout mode */
26
+ mode?: "left" | "right" | "alternate";
27
+ /** Reverse the order of items */
28
+ reverse?: boolean;
29
+ }
30
+ /**
31
+ * `Timeline` — vertical timeline with pending/loading state.
32
+ *
33
+ * @example
34
+ * <Timeline items={[{ children: "Created" }, { children: "In Progress" }]} pending />
35
+ */
36
+ declare const Timeline: React.ForwardRefExoticComponent<TimelineProps & React.RefAttributes<HTMLDivElement>>;
37
+
38
+ export { Timeline, type TimelineItemConfig, type TimelineProps };
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+
3
+ interface TimelineItemConfig {
4
+ /** Unique key for the item */
5
+ key?: string;
6
+ /** Content displayed on the right (or main side) */
7
+ children?: React.ReactNode;
8
+ /** Label displayed on the opposite side (alternate/label mode) */
9
+ label?: React.ReactNode;
10
+ /** Dot color */
11
+ color?: "accent" | "success" | "warning" | "danger" | "info" | "muted";
12
+ /** Custom dot content (replaces default dot) */
13
+ dot?: React.ReactNode;
14
+ }
15
+ interface TimelineProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
16
+ /** Timeline items */
17
+ items: TimelineItemConfig[];
18
+ /**
19
+ * Show a pending (loading) item at the end.
20
+ * `true` renders a default spinner; a ReactNode renders custom content.
21
+ */
22
+ pending?: boolean | React.ReactNode;
23
+ /** Text shown as the pending item's content */
24
+ pendingContent?: React.ReactNode;
25
+ /** Layout mode */
26
+ mode?: "left" | "right" | "alternate";
27
+ /** Reverse the order of items */
28
+ reverse?: boolean;
29
+ }
30
+ /**
31
+ * `Timeline` — vertical timeline with pending/loading state.
32
+ *
33
+ * @example
34
+ * <Timeline items={[{ children: "Created" }, { children: "In Progress" }]} pending />
35
+ */
36
+ declare const Timeline: React.ForwardRefExoticComponent<TimelineProps & React.RefAttributes<HTMLDivElement>>;
37
+
38
+ export { Timeline, type TimelineItemConfig, type TimelineProps };
@@ -0,0 +1,4 @@
1
+ export { Timeline } from './chunk-S3NIRNWM.js';
2
+ import './chunk-GR5STMOA.js';
3
+ //# sourceMappingURL=Timeline.js.map
4
+ //# sourceMappingURL=Timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Timeline.js"}