@antadesign/anta 0.1.1-dev.6 → 0.1.1-dev.7

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 (235) hide show
  1. package/README.md +2 -2
  2. package/dist/components/Button.d.ts +113 -0
  3. package/dist/components/Button.js +100 -0
  4. package/dist/components/Button.module.css +2 -0
  5. package/dist/components/Icon.d.ts +2 -1
  6. package/dist/components/Progress.d.ts +4 -2
  7. package/dist/components/Sticker.d.ts +31 -0
  8. package/dist/components/Sticker.js +17 -0
  9. package/dist/components/StickerAnimated.d.ts +23 -0
  10. package/dist/components/StickerAnimated.js +28 -0
  11. package/dist/components/Text.d.ts +2 -1
  12. package/dist/components/Title.d.ts +6 -4
  13. package/dist/components/__generated__/stickers/angry-animated.d.ts +3 -0
  14. package/dist/components/__generated__/stickers/angry-animated.js +7 -0
  15. package/dist/components/__generated__/stickers/angry.d.ts +3 -0
  16. package/dist/components/__generated__/stickers/angry.js +7 -0
  17. package/dist/components/__generated__/stickers/ask-animated.d.ts +3 -0
  18. package/dist/components/__generated__/stickers/ask-animated.js +7 -0
  19. package/dist/components/__generated__/stickers/ask.d.ts +3 -0
  20. package/dist/components/__generated__/stickers/ask.js +7 -0
  21. package/dist/components/__generated__/stickers/balance-animated.d.ts +3 -0
  22. package/dist/components/__generated__/stickers/balance-animated.js +7 -0
  23. package/dist/components/__generated__/stickers/balance.d.ts +3 -0
  24. package/dist/components/__generated__/stickers/balance.js +7 -0
  25. package/dist/components/__generated__/stickers/butterfly-animated.d.ts +3 -0
  26. package/dist/components/__generated__/stickers/butterfly-animated.js +7 -0
  27. package/dist/components/__generated__/stickers/butterfly-snake-animated.d.ts +3 -0
  28. package/dist/components/__generated__/stickers/butterfly-snake-animated.js +7 -0
  29. package/dist/components/__generated__/stickers/butterfly-snake.d.ts +3 -0
  30. package/dist/components/__generated__/stickers/butterfly-snake.js +7 -0
  31. package/dist/components/__generated__/stickers/butterfly.d.ts +3 -0
  32. package/dist/components/__generated__/stickers/butterfly.js +7 -0
  33. package/dist/components/__generated__/stickers/catch-animated.d.ts +3 -0
  34. package/dist/components/__generated__/stickers/catch-animated.js +7 -0
  35. package/dist/components/__generated__/stickers/catch.d.ts +3 -0
  36. package/dist/components/__generated__/stickers/catch.js +7 -0
  37. package/dist/components/__generated__/stickers/clap-animated.d.ts +3 -0
  38. package/dist/components/__generated__/stickers/clap-animated.js +7 -0
  39. package/dist/components/__generated__/stickers/clap.d.ts +3 -0
  40. package/dist/components/__generated__/stickers/clap.js +7 -0
  41. package/dist/components/__generated__/stickers/coding-animated.d.ts +3 -0
  42. package/dist/components/__generated__/stickers/coding-animated.js +7 -0
  43. package/dist/components/__generated__/stickers/coding.d.ts +3 -0
  44. package/dist/components/__generated__/stickers/coding.js +7 -0
  45. package/dist/components/__generated__/stickers/cowboy-animated.d.ts +3 -0
  46. package/dist/components/__generated__/stickers/cowboy-animated.js +7 -0
  47. package/dist/components/__generated__/stickers/cowboy.d.ts +3 -0
  48. package/dist/components/__generated__/stickers/cowboy.js +7 -0
  49. package/dist/components/__generated__/stickers/dance-animated.d.ts +3 -0
  50. package/dist/components/__generated__/stickers/dance-animated.js +7 -0
  51. package/dist/components/__generated__/stickers/dance.d.ts +3 -0
  52. package/dist/components/__generated__/stickers/dance.js +7 -0
  53. package/dist/components/__generated__/stickers/detective-animated.d.ts +3 -0
  54. package/dist/components/__generated__/stickers/detective-animated.js +7 -0
  55. package/dist/components/__generated__/stickers/detective.d.ts +3 -0
  56. package/dist/components/__generated__/stickers/detective.js +7 -0
  57. package/dist/components/__generated__/stickers/disapprove-animated.d.ts +3 -0
  58. package/dist/components/__generated__/stickers/disapprove-animated.js +7 -0
  59. package/dist/components/__generated__/stickers/disapprove.d.ts +3 -0
  60. package/dist/components/__generated__/stickers/disapprove.js +7 -0
  61. package/dist/components/__generated__/stickers/distracted-animated.d.ts +3 -0
  62. package/dist/components/__generated__/stickers/distracted-animated.js +7 -0
  63. package/dist/components/__generated__/stickers/distracted.d.ts +3 -0
  64. package/dist/components/__generated__/stickers/distracted.js +7 -0
  65. package/dist/components/__generated__/stickers/dive-animated.d.ts +3 -0
  66. package/dist/components/__generated__/stickers/dive-animated.js +7 -0
  67. package/dist/components/__generated__/stickers/dive.d.ts +3 -0
  68. package/dist/components/__generated__/stickers/dive.js +7 -0
  69. package/dist/components/__generated__/stickers/eat-animated.d.ts +3 -0
  70. package/dist/components/__generated__/stickers/eat-animated.js +7 -0
  71. package/dist/components/__generated__/stickers/eat.d.ts +3 -0
  72. package/dist/components/__generated__/stickers/eat.js +7 -0
  73. package/dist/components/__generated__/stickers/facepalm-animated.d.ts +3 -0
  74. package/dist/components/__generated__/stickers/facepalm-animated.js +7 -0
  75. package/dist/components/__generated__/stickers/facepalm.d.ts +3 -0
  76. package/dist/components/__generated__/stickers/facepalm.js +7 -0
  77. package/dist/components/__generated__/stickers/failed-animated.d.ts +3 -0
  78. package/dist/components/__generated__/stickers/failed-animated.js +7 -0
  79. package/dist/components/__generated__/stickers/failed.d.ts +3 -0
  80. package/dist/components/__generated__/stickers/failed.js +7 -0
  81. package/dist/components/__generated__/stickers/found-animated.d.ts +3 -0
  82. package/dist/components/__generated__/stickers/found-animated.js +7 -0
  83. package/dist/components/__generated__/stickers/found.d.ts +3 -0
  84. package/dist/components/__generated__/stickers/found.js +7 -0
  85. package/dist/components/__generated__/stickers/grow-animated.d.ts +3 -0
  86. package/dist/components/__generated__/stickers/grow-animated.js +7 -0
  87. package/dist/components/__generated__/stickers/grow.d.ts +3 -0
  88. package/dist/components/__generated__/stickers/grow.js +7 -0
  89. package/dist/components/__generated__/stickers/handstand-animated.d.ts +3 -0
  90. package/dist/components/__generated__/stickers/handstand-animated.js +7 -0
  91. package/dist/components/__generated__/stickers/handstand.d.ts +3 -0
  92. package/dist/components/__generated__/stickers/handstand.js +7 -0
  93. package/dist/components/__generated__/stickers/heart-animated.d.ts +3 -0
  94. package/dist/components/__generated__/stickers/heart-animated.js +7 -0
  95. package/dist/components/__generated__/stickers/heart.d.ts +3 -0
  96. package/dist/components/__generated__/stickers/heart.js +7 -0
  97. package/dist/components/__generated__/stickers/hello-animated.d.ts +3 -0
  98. package/dist/components/__generated__/stickers/hello-animated.js +7 -0
  99. package/dist/components/__generated__/stickers/hello.d.ts +3 -0
  100. package/dist/components/__generated__/stickers/hello.js +7 -0
  101. package/dist/components/__generated__/stickers/idea-animated.d.ts +3 -0
  102. package/dist/components/__generated__/stickers/idea-animated.js +7 -0
  103. package/dist/components/__generated__/stickers/idea.d.ts +3 -0
  104. package/dist/components/__generated__/stickers/idea.js +7 -0
  105. package/dist/components/__generated__/stickers/index.d.ts +99 -0
  106. package/dist/components/__generated__/stickers/index.js +198 -0
  107. package/dist/components/__generated__/stickers/laugh-animated.d.ts +3 -0
  108. package/dist/components/__generated__/stickers/laugh-animated.js +7 -0
  109. package/dist/components/__generated__/stickers/laugh.d.ts +3 -0
  110. package/dist/components/__generated__/stickers/laugh.js +7 -0
  111. package/dist/components/__generated__/stickers/love-animated.d.ts +3 -0
  112. package/dist/components/__generated__/stickers/love-animated.js +7 -0
  113. package/dist/components/__generated__/stickers/love.d.ts +3 -0
  114. package/dist/components/__generated__/stickers/love.js +7 -0
  115. package/dist/components/__generated__/stickers/nap-animated.d.ts +3 -0
  116. package/dist/components/__generated__/stickers/nap-animated.js +7 -0
  117. package/dist/components/__generated__/stickers/nap.d.ts +3 -0
  118. package/dist/components/__generated__/stickers/nap.js +7 -0
  119. package/dist/components/__generated__/stickers/party-animated.d.ts +3 -0
  120. package/dist/components/__generated__/stickers/party-animated.js +7 -0
  121. package/dist/components/__generated__/stickers/party.d.ts +3 -0
  122. package/dist/components/__generated__/stickers/party.js +7 -0
  123. package/dist/components/__generated__/stickers/passed-animated.d.ts +3 -0
  124. package/dist/components/__generated__/stickers/passed-animated.js +7 -0
  125. package/dist/components/__generated__/stickers/passed.d.ts +3 -0
  126. package/dist/components/__generated__/stickers/passed.js +7 -0
  127. package/dist/components/__generated__/stickers/peekaboo-animated.d.ts +3 -0
  128. package/dist/components/__generated__/stickers/peekaboo-animated.js +7 -0
  129. package/dist/components/__generated__/stickers/peekaboo.d.ts +3 -0
  130. package/dist/components/__generated__/stickers/peekaboo.js +7 -0
  131. package/dist/components/__generated__/stickers/pizza-animated.d.ts +3 -0
  132. package/dist/components/__generated__/stickers/pizza-animated.js +7 -0
  133. package/dist/components/__generated__/stickers/pizza.d.ts +3 -0
  134. package/dist/components/__generated__/stickers/pizza.js +7 -0
  135. package/dist/components/__generated__/stickers/puzzle-animated.d.ts +3 -0
  136. package/dist/components/__generated__/stickers/puzzle-animated.js +7 -0
  137. package/dist/components/__generated__/stickers/puzzle.d.ts +3 -0
  138. package/dist/components/__generated__/stickers/puzzle.js +7 -0
  139. package/dist/components/__generated__/stickers/sad-animated.d.ts +3 -0
  140. package/dist/components/__generated__/stickers/sad-animated.js +7 -0
  141. package/dist/components/__generated__/stickers/sad.d.ts +3 -0
  142. package/dist/components/__generated__/stickers/sad.js +7 -0
  143. package/dist/components/__generated__/stickers/scared-animated.d.ts +3 -0
  144. package/dist/components/__generated__/stickers/scared-animated.js +7 -0
  145. package/dist/components/__generated__/stickers/scared.d.ts +3 -0
  146. package/dist/components/__generated__/stickers/scared.js +7 -0
  147. package/dist/components/__generated__/stickers/scroll-animated.d.ts +3 -0
  148. package/dist/components/__generated__/stickers/scroll-animated.js +7 -0
  149. package/dist/components/__generated__/stickers/scroll.d.ts +3 -0
  150. package/dist/components/__generated__/stickers/scroll.js +7 -0
  151. package/dist/components/__generated__/stickers/search-animated.d.ts +3 -0
  152. package/dist/components/__generated__/stickers/search-animated.js +7 -0
  153. package/dist/components/__generated__/stickers/search.d.ts +3 -0
  154. package/dist/components/__generated__/stickers/search.js +7 -0
  155. package/dist/components/__generated__/stickers/shield-animated.d.ts +3 -0
  156. package/dist/components/__generated__/stickers/shield-animated.js +7 -0
  157. package/dist/components/__generated__/stickers/shield.d.ts +3 -0
  158. package/dist/components/__generated__/stickers/shield.js +7 -0
  159. package/dist/components/__generated__/stickers/shocked-animated.d.ts +3 -0
  160. package/dist/components/__generated__/stickers/shocked-animated.js +7 -0
  161. package/dist/components/__generated__/stickers/shocked.d.ts +3 -0
  162. package/dist/components/__generated__/stickers/shocked.js +7 -0
  163. package/dist/components/__generated__/stickers/sleep-animated.d.ts +3 -0
  164. package/dist/components/__generated__/stickers/sleep-animated.js +7 -0
  165. package/dist/components/__generated__/stickers/sleep.d.ts +3 -0
  166. package/dist/components/__generated__/stickers/sleep.js +7 -0
  167. package/dist/components/__generated__/stickers/stressed-animated.d.ts +3 -0
  168. package/dist/components/__generated__/stickers/stressed-animated.js +7 -0
  169. package/dist/components/__generated__/stickers/stressed.d.ts +3 -0
  170. package/dist/components/__generated__/stickers/stressed.js +7 -0
  171. package/dist/components/__generated__/stickers/suspicious-animated.d.ts +3 -0
  172. package/dist/components/__generated__/stickers/suspicious-animated.js +7 -0
  173. package/dist/components/__generated__/stickers/suspicious.d.ts +3 -0
  174. package/dist/components/__generated__/stickers/suspicious.js +7 -0
  175. package/dist/components/__generated__/stickers/thanks-animated.d.ts +3 -0
  176. package/dist/components/__generated__/stickers/thanks-animated.js +7 -0
  177. package/dist/components/__generated__/stickers/thanks.d.ts +3 -0
  178. package/dist/components/__generated__/stickers/thanks.js +7 -0
  179. package/dist/components/__generated__/stickers/think-animated.d.ts +3 -0
  180. package/dist/components/__generated__/stickers/think-animated.js +7 -0
  181. package/dist/components/__generated__/stickers/think-of-you-animated.d.ts +3 -0
  182. package/dist/components/__generated__/stickers/think-of-you-animated.js +7 -0
  183. package/dist/components/__generated__/stickers/think-of-you.d.ts +3 -0
  184. package/dist/components/__generated__/stickers/think-of-you.js +7 -0
  185. package/dist/components/__generated__/stickers/think.d.ts +3 -0
  186. package/dist/components/__generated__/stickers/think.js +7 -0
  187. package/dist/components/__generated__/stickers/thumbs-up-animated.d.ts +3 -0
  188. package/dist/components/__generated__/stickers/thumbs-up-animated.js +7 -0
  189. package/dist/components/__generated__/stickers/thumbs-up.d.ts +3 -0
  190. package/dist/components/__generated__/stickers/thumbs-up.js +7 -0
  191. package/dist/components/__generated__/stickers/vacation-animated.d.ts +3 -0
  192. package/dist/components/__generated__/stickers/vacation-animated.js +7 -0
  193. package/dist/components/__generated__/stickers/vacation.d.ts +3 -0
  194. package/dist/components/__generated__/stickers/vacation.js +7 -0
  195. package/dist/components/__generated__/stickers/wait-animated.d.ts +3 -0
  196. package/dist/components/__generated__/stickers/wait-animated.js +7 -0
  197. package/dist/components/__generated__/stickers/wait.d.ts +3 -0
  198. package/dist/components/__generated__/stickers/wait.js +7 -0
  199. package/dist/components/__generated__/stickers/wink-animated.d.ts +3 -0
  200. package/dist/components/__generated__/stickers/wink-animated.js +7 -0
  201. package/dist/components/__generated__/stickers/wink.d.ts +3 -0
  202. package/dist/components/__generated__/stickers/wink.js +7 -0
  203. package/dist/components/__generated__/stickers/work-animated.d.ts +3 -0
  204. package/dist/components/__generated__/stickers/work-animated.js +7 -0
  205. package/dist/components/__generated__/stickers/work.d.ts +3 -0
  206. package/dist/components/__generated__/stickers/work.js +7 -0
  207. package/dist/components/__generated__/stickers/zen-animated.d.ts +3 -0
  208. package/dist/components/__generated__/stickers/zen-animated.js +7 -0
  209. package/dist/components/__generated__/stickers/zen.d.ts +3 -0
  210. package/dist/components/__generated__/stickers/zen.js +7 -0
  211. package/dist/elements/a-button.css +733 -0
  212. package/dist/elements/a-button.d.ts +10 -0
  213. package/dist/elements/a-button.js +76 -0
  214. package/dist/elements/a-icon.css +30 -10
  215. package/dist/elements/a-icon.shapes.css +9 -1
  216. package/dist/elements/a-icon.shapes.d.ts +3 -1
  217. package/dist/elements/a-icon.shapes.js +2 -0
  218. package/dist/elements/a-progress.css +7 -9
  219. package/dist/elements/a-sticker-animated.css +9 -0
  220. package/dist/elements/a-sticker-animated.d.ts +38 -0
  221. package/dist/elements/a-sticker-animated.js +79 -0
  222. package/dist/elements/a-sticker.css +9 -0
  223. package/dist/elements/a-sticker.d.ts +18 -0
  224. package/dist/elements/a-sticker.js +30 -0
  225. package/dist/elements/a-text.css +6 -3
  226. package/dist/elements/index.d.ts +6 -0
  227. package/dist/elements/index.js +18 -0
  228. package/dist/general_types.d.ts +89 -4
  229. package/dist/generate-stickers.mjs +293 -0
  230. package/dist/index.d.ts +6 -0
  231. package/dist/index.js +6 -0
  232. package/dist/jsx-runtime.d.ts +5 -1
  233. package/dist/reset.css +21 -23
  234. package/dist/tokens.css +186 -182
  235. package/package.json +17 -4
@@ -0,0 +1,10 @@
1
+ import { HTMLElementBase } from "../anta_helpers";
2
+ declare global {
3
+ interface Document {
4
+ hasKeyListenerForAButton?: boolean;
5
+ }
6
+ }
7
+ export declare class AButtonElement extends HTMLElementBase {
8
+ connectedCallback(): void;
9
+ }
10
+ export declare function register_a_button(): void;
@@ -0,0 +1,76 @@
1
+ import { HTMLElementBase } from "../anta_helpers";
2
+ class AButtonElement extends HTMLElementBase {
3
+ connectedCallback() {
4
+ if (!document.hasKeyListenerForAButton) {
5
+ document.addEventListener("keydown", handleKeyDown, true);
6
+ document.addEventListener("click", handleClick, true);
7
+ document.hasKeyListenerForAButton = true;
8
+ }
9
+ }
10
+ }
11
+ function findForm(el) {
12
+ const formId = el.getAttribute("form");
13
+ if (formId) {
14
+ return document.getElementById(formId);
15
+ }
16
+ return el.closest("form");
17
+ }
18
+ function handleKeyDown(e) {
19
+ if (e.key !== "Enter" && e.key !== " ") return;
20
+ const el = e.target.closest(
21
+ "a-button"
22
+ );
23
+ if (!el) return;
24
+ e.preventDefault();
25
+ el.click();
26
+ }
27
+ function handleClick(e) {
28
+ const el = e.target.closest(
29
+ "a-button"
30
+ );
31
+ if (!el) return;
32
+ const customEvent = el.getAttribute("data-custom-event");
33
+ if (customEvent) {
34
+ el.dispatchEvent(
35
+ new CustomEvent(customEvent, { bubbles: true, cancelable: true })
36
+ );
37
+ }
38
+ const type = el.getAttribute("type") || "button";
39
+ const form = findForm(el);
40
+ if (!form) return;
41
+ if (type === "submit") {
42
+ if (form.requestSubmit) {
43
+ form.requestSubmit();
44
+ } else {
45
+ form.submit();
46
+ }
47
+ const formData = new FormData(form);
48
+ form.dispatchEvent(
49
+ new CustomEvent("submitdetailed", {
50
+ bubbles: true,
51
+ cancelable: true,
52
+ detail: {
53
+ formData: Object.fromEntries(formData.entries()),
54
+ submitter: {
55
+ tag: el.tagName.toLowerCase(),
56
+ attrs: Object.fromEntries(
57
+ Array.from(el.attributes).map((a) => [a.name, a.value])
58
+ )
59
+ }
60
+ }
61
+ })
62
+ );
63
+ } else if (type === "reset") {
64
+ form.reset();
65
+ }
66
+ }
67
+ function register_a_button() {
68
+ if (typeof customElements === "undefined") return;
69
+ if (!customElements.get("a-button")) {
70
+ customElements.define("a-button", AButtonElement);
71
+ }
72
+ }
73
+ export {
74
+ AButtonElement,
75
+ register_a_button
76
+ };
@@ -1,23 +1,43 @@
1
1
  @layer anta {
2
2
  a-icon {
3
- /* `<a-icon size="N">` maps to `--icon-size` via typed `attr()`
4
- (CSS Values 5) Chrome 133+, Safari 18.2+. Firefox not yet:
5
- in raw HTML usage there, set `style="--icon-size: Npx"`. */
6
- --icon-size: attr(size px);
3
+ /* Default lives in a plain declaration never in `attr()`. Safari
4
+ doesn't support typed `attr()` for `<length>` (MDN: "No" across
5
+ all Safari versions), so an `attr(size px, …)` value can't
6
+ resolve there and the var-substituted `width` ends up invalid →
7
+ auto → 0 on an empty inline-block. Keeping the default off the
8
+ attr() path means every browser lands on 16px when no `size`
9
+ attribute is set. */
10
+ --icon-size: 16px;
7
11
 
8
12
  display: inline-block;
9
13
  vertical-align: middle;
10
- width: var(--icon-size, 16px);
11
- height: var(--icon-size, 16px);
14
+ width: var(--icon-size);
15
+ height: var(--icon-size);
12
16
  flex-shrink: 0;
13
17
  background-color: currentColor;
14
18
  -webkit-mask-image: var(--icon);
15
- mask-image: var(--icon);
19
+ mask-image: var(--icon);
16
20
  -webkit-mask-position: center;
17
- mask-position: center;
21
+ mask-position: center;
18
22
  -webkit-mask-repeat: no-repeat;
19
- mask-repeat: no-repeat;
23
+ mask-repeat: no-repeat;
20
24
  -webkit-mask-size: contain;
21
- mask-size: contain;
25
+ mask-size: contain;
26
+ }
27
+
28
+ /* `<a-icon size="N">` only — typed `attr()` (CSS Values 5, Chrome
29
+ 133+). Safari/Firefox don't support the typed form, but a custom
30
+ property parses permissively, so without the `@supports` guard the
31
+ invalid `attr()` would still land on `--icon-size` and only fail
32
+ later when `width: var(--icon-size)` substitutes it — collapsing the
33
+ icon to `auto` → 0×0. The guard keeps the override off unsupported
34
+ engines so the plain `--icon-size: 16px` base wins (visible 16px
35
+ icon, not 0). Consumers that need an exact custom size everywhere
36
+ should route through the `<Icon size={N}>` JSX wrapper, which sets
37
+ `--icon-size` inline as a plain length. */
38
+ @supports (width: attr(size px, 16px)) {
39
+ a-icon[size] {
40
+ --icon-size: attr(size px, 16px);
41
+ }
22
42
  }
23
43
  }
@@ -1,4 +1,4 @@
1
- /* Auto-generated by scripts/generate-icons.mjs. Do not edit by hand. */
1
+ /* Auto-generated by @antadesign/anta. Do not edit by hand. */
2
2
 
3
3
  @layer anta {
4
4
 
@@ -262,6 +262,10 @@
262
262
  --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3v10M3 8h10'/%3E%3C/svg%3E%0A");
263
263
  }
264
264
 
265
+ a-icon[shape="pointer"] {
266
+ --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='lucide lucide-pointer-icon lucide-pointer'%3E%3Cpath d='M22 14a8 8 0 0 1-8 8'/%3E%3Cpath d='M18 11v-1a2 2 0 0 0-2-2a2 2 0 0 0-2 2'/%3E%3Cpath d='M14 10V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v1'/%3E%3Cpath d='M10 9.5V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v10'/%3E%3Cpath d='M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15'/%3E%3C/svg%3E");
267
+ }
268
+
265
269
  a-icon[shape="presentation"] {
266
270
  --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 3h20'/%3E%3Cpath d='M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3'/%3E%3Cpath d='m7 21 5-5 5 5'/%3E%3C/svg%3E%0A");
267
271
  }
@@ -282,6 +286,10 @@
282
286
  --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cg transform='scale(-1 1) translate(-24 0)'%3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8'/%3E%3Cpath d='M3 3v5h5'/%3E%3C/g%3E%3C/svg%3E%0A");
283
287
  }
284
288
 
289
+ a-icon[shape="rotate-ccw"] {
290
+ --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8'/%3E%3Cpath d='M3 3v5h5'/%3E%3C/svg%3E%0A");
291
+ }
292
+
285
293
  a-icon[shape="rss"] {
286
294
  --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%0A %3Cpath stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.33' d='M2.67 7.33a6 6 0 0 1 6 6m-6-10.66a10.67 10.67 0 0 1 10.66 10.66M4 12.67a.67.67 0 1 1-1.33 0 .67.67 0 0 1 1.33 0Z'/%3E%0A%3C/svg%3E%0A");
287
295
  }
@@ -1,5 +1,5 @@
1
1
  import type { IconShapes } from '@antadesign/anta';
2
- export declare const ICON_SHAPES: readonly ["arrow-left-to-line", "arrow-left", "arrow-narrow-down", "arrow-narrow-up-down", "arrow-narrow-up", "arrow-right", "arrow-top-right", "asterisk", "book-open", "braces", "bug", "calendar", "case-sensitive", "chat", "check", "chevron-down", "chevron-left", "chevron-right", "chevron-up", "chevrons-right", "circle-check", "circle-large", "circle", "click", "clock", "cloud-upload", "copy", "corner-down-right", "cube", "dots-vertical", "download", "edit", "education-disk", "external-link", "file-down", "file", "filter", "folder-close", "folder-open", "folder-tree", "github-logo", "gitlab-logo", "hat-glasses", "heart-handshake", "help-disk", "history-tree", "history", "home", "hourglass", "info", "jira-logo", "linear-logo", "link", "list-detail-view", "maximize", "megaphone", "menu", "minimize", "minus", "moon", "more", "move-horizontal", "not-equal", "play", "plus", "presentation", "refresh-ccw-dot", "refresh", "regex", "repeat", "rss", "runs-history", "scroll-text", "search-check", "search", "send", "sparkles", "sun", "swatch-book", "table-2", "text-highlight", "text-initial", "timer", "trash", "trello-logo", "view", "warning-triangle", "webhook", "workflow", "x"];
2
+ export declare const ICON_SHAPES: readonly ["arrow-left-to-line", "arrow-left", "arrow-narrow-down", "arrow-narrow-up-down", "arrow-narrow-up", "arrow-right", "arrow-top-right", "asterisk", "book-open", "braces", "bug", "calendar", "case-sensitive", "chat", "check", "chevron-down", "chevron-left", "chevron-right", "chevron-up", "chevrons-right", "circle-check", "circle-large", "circle", "click", "clock", "cloud-upload", "copy", "corner-down-right", "cube", "dots-vertical", "download", "edit", "education-disk", "external-link", "file-down", "file", "filter", "folder-close", "folder-open", "folder-tree", "github-logo", "gitlab-logo", "hat-glasses", "heart-handshake", "help-disk", "history-tree", "history", "home", "hourglass", "info", "jira-logo", "linear-logo", "link", "list-detail-view", "maximize", "megaphone", "menu", "minimize", "minus", "moon", "more", "move-horizontal", "not-equal", "play", "plus", "pointer", "presentation", "refresh-ccw-dot", "refresh", "regex", "repeat", "rotate-ccw", "rss", "runs-history", "scroll-text", "search-check", "search", "send", "sparkles", "sun", "swatch-book", "table-2", "text-highlight", "text-initial", "timer", "trash", "trello-logo", "view", "warning-triangle", "webhook", "workflow", "x"];
3
3
  export declare const ICON_SYNONYMS: Readonly<Record<string, readonly string[]>>;
4
4
  declare module '@antadesign/anta' {
5
5
  interface IconShapes {
@@ -68,11 +68,13 @@ declare module '@antadesign/anta' {
68
68
  'not-equal': true;
69
69
  'play': true;
70
70
  'plus': true;
71
+ 'pointer': true;
71
72
  'presentation': true;
72
73
  'refresh-ccw-dot': true;
73
74
  'refresh': true;
74
75
  'regex': true;
75
76
  'repeat': true;
77
+ 'rotate-ccw': true;
76
78
  'rss': true;
77
79
  'runs-history': true;
78
80
  'scroll-text': true;
@@ -64,11 +64,13 @@ const ICON_SHAPES = [
64
64
  "not-equal",
65
65
  "play",
66
66
  "plus",
67
+ "pointer",
67
68
  "presentation",
68
69
  "refresh-ccw-dot",
69
70
  "refresh",
70
71
  "regex",
71
72
  "repeat",
73
+ "rotate-ccw",
72
74
  "rss",
73
75
  "runs-history",
74
76
  "scroll-text",
@@ -1,16 +1,14 @@
1
1
  @layer anta {
2
2
  a-progress {
3
- --progress-bg: var(--bg-block);
3
+ --progress-bg: var(--bg-4);
4
4
  --progress-border-color: var(--border-4);
5
- --progress-indicator-bg: var(--bg-spot);
5
+ --progress-indicator-bg: var(--bg-5);
6
6
  /* Right-edge fade: from the indicator's own bg to the border
7
- colour, both opaque. Two opaque endpoints + `in oklch`
8
- interpolation give a perceptually-uniform fade with no alpha
9
- pre-multiplication artefacts. Tone variants automatically
10
- re-tint because both endpoint tokens (`--progress-indicator-bg`,
7
+ colour, both opaque. Tone variants automatically re-tint because
8
+ both endpoint tokens (`--progress-indicator-bg`,
11
9
  `--progress-border-color`) get re-aliased per tone. */
12
10
  --progress-indicator-edge: linear-gradient(
13
- 90deg in oklch,
11
+ 90deg,
14
12
  var(--progress-indicator-bg) 0%,
15
13
  var(--progress-border-color) 100%
16
14
  );
@@ -33,9 +31,9 @@
33
31
  }
34
32
 
35
33
  a-progress[tone="info"] {
36
- --progress-bg: var(--bg-block-info);
34
+ --progress-bg: var(--bg-4-info);
37
35
  --progress-border-color: var(--border-4-info);
38
- --progress-indicator-bg: var(--bg-spot-info);
36
+ --progress-indicator-bg: var(--bg-5-info);
39
37
  --progress-text-color: var(--text-2-info);
40
38
  --progress-hint-color: var(--text-3-info);
41
39
  }
@@ -0,0 +1,9 @@
1
+ @layer anta {
2
+ a-sticker-animated {
3
+ --sticker-size: 256px;
4
+
5
+ display: inline-block;
6
+ width: var(--sticker-size);
7
+ height: var(--sticker-size);
8
+ }
9
+ }
@@ -0,0 +1,38 @@
1
+ import { type AnimationItem } from 'lottie-web';
2
+ import { HTMLElementBase } from '../anta_helpers';
3
+ /**
4
+ * `<a-sticker-animated>` — Lottie-driven sticker carrier.
5
+ *
6
+ * Receives the Lottie payload as the `animation` attribute (a JSON
7
+ * string). On change, parses the JSON once and instantiates a
8
+ * `lottie-web` player against a shadow-DOM container. The renderer is
9
+ * SVG — `lottie-web` creates real `<svg>` elements in the shadow root
10
+ * and updates path / transform attributes each frame. Rasterisation
11
+ * goes through the browser's native SVG renderer (Skia / Core
12
+ * Graphics), giving the same crispness as static `<svg>` content.
13
+ *
14
+ * Observed attributes:
15
+ * - `animation` — JSON string for `lottie-web`. Reset to null/missing
16
+ * tears the player down.
17
+ * - `paused` — present: freeze at current frame. Numeric value
18
+ * (seconds): seek to that time, then freeze. Absent: play.
19
+ *
20
+ * Sizing comes from external CSS reading `--sticker-size` (set by the
21
+ * JSX wrapper or the consumer).
22
+ *
23
+ * The static counterpart is `<a-sticker>`.
24
+ */
25
+ export declare class AStickerAnimatedElement extends HTMLElementBase {
26
+ static observedAttributes: string[];
27
+ container: HTMLDivElement;
28
+ player: AnimationItem | null;
29
+ _animation: Record<string, unknown> | null;
30
+ constructor();
31
+ connectedCallback(): void;
32
+ disconnectedCallback(): void;
33
+ attributeChangedCallback(name: string): void;
34
+ rebuild(): void;
35
+ applyPaused(): void;
36
+ teardown(): void;
37
+ }
38
+ export declare function register_a_sticker_animated(): void;
@@ -0,0 +1,79 @@
1
+ import lottie from "lottie-web";
2
+ import { HTMLElementBase } from "../anta_helpers";
3
+ class AStickerAnimatedElement extends HTMLElementBase {
4
+ static observedAttributes = ["animation", "paused"];
5
+ container;
6
+ player = null;
7
+ _animation = null;
8
+ constructor() {
9
+ super();
10
+ const shadow = this.attachShadow({ mode: "open" });
11
+ const style = document.createElement("style");
12
+ style.textContent = `
13
+ :host { display: inline-block; }
14
+ div { width: 100%; height: 100%; }
15
+ div > svg { display: block; width: 100%; height: 100%; }
16
+ `;
17
+ this.container = document.createElement("div");
18
+ shadow.append(style, this.container);
19
+ }
20
+ connectedCallback() {
21
+ if (this._animation != null && this.player == null) this.rebuild();
22
+ }
23
+ disconnectedCallback() {
24
+ this.teardown();
25
+ }
26
+ attributeChangedCallback(name) {
27
+ if (name === "animation") {
28
+ const value = this.getAttribute("animation");
29
+ this._animation = value ? JSON.parse(value) : null;
30
+ if (this.isConnected) this.rebuild();
31
+ } else if (name === "paused") {
32
+ this.applyPaused();
33
+ }
34
+ }
35
+ rebuild() {
36
+ this.teardown();
37
+ if (this._animation == null) return;
38
+ this.player = lottie.loadAnimation({
39
+ container: this.container,
40
+ renderer: "svg",
41
+ loop: true,
42
+ autoplay: !this.hasAttribute("paused"),
43
+ animationData: this._animation
44
+ });
45
+ this.applyPaused();
46
+ }
47
+ applyPaused() {
48
+ if (!this.player) return;
49
+ const attr = this.getAttribute("paused");
50
+ if (attr === null) {
51
+ this.player.play();
52
+ return;
53
+ }
54
+ const seconds = Number(attr);
55
+ if (Number.isFinite(seconds) && seconds > 0) {
56
+ const frame = seconds * this.player.frameRate;
57
+ const clamped = Math.min(this.player.totalFrames - 1, Math.max(0, frame));
58
+ this.player.goToAndStop(clamped, true);
59
+ } else {
60
+ this.player.pause();
61
+ }
62
+ }
63
+ teardown() {
64
+ if (this.player) {
65
+ this.player.destroy();
66
+ this.player = null;
67
+ }
68
+ }
69
+ }
70
+ function register_a_sticker_animated() {
71
+ if (typeof customElements === "undefined") return;
72
+ if (!customElements.get("a-sticker-animated")) {
73
+ customElements.define("a-sticker-animated", AStickerAnimatedElement);
74
+ }
75
+ }
76
+ export {
77
+ AStickerAnimatedElement,
78
+ register_a_sticker_animated
79
+ };
@@ -0,0 +1,9 @@
1
+ @layer anta {
2
+ a-sticker {
3
+ --sticker-size: 256px;
4
+
5
+ display: inline-block;
6
+ width: var(--sticker-size);
7
+ height: var(--sticker-size);
8
+ }
9
+ }
@@ -0,0 +1,18 @@
1
+ import { HTMLElementBase } from '../anta_helpers';
2
+ /**
3
+ * `<a-sticker>` — static sticker carrier.
4
+ *
5
+ * Receives SVG markup as the `svg` attribute. On change, drops it into
6
+ * a shadow-DOM container so the host's light DOM stays untouched.
7
+ * Sizing comes from external CSS reading `--sticker-size` (set by the
8
+ * JSX wrapper, or by the consumer directly).
9
+ *
10
+ * The animated counterpart is `<a-sticker-animated>`.
11
+ */
12
+ export declare class AStickerElement extends HTMLElementBase {
13
+ static observedAttributes: string[];
14
+ container: HTMLDivElement;
15
+ constructor();
16
+ attributeChangedCallback(): void;
17
+ }
18
+ export declare function register_a_sticker(): void;
@@ -0,0 +1,30 @@
1
+ import { HTMLElementBase } from "../anta_helpers";
2
+ class AStickerElement extends HTMLElementBase {
3
+ static observedAttributes = ["svg"];
4
+ container;
5
+ constructor() {
6
+ super();
7
+ const shadow = this.attachShadow({ mode: "open" });
8
+ const style = document.createElement("style");
9
+ style.textContent = `
10
+ :host { display: inline-block; }
11
+ div { width: 100%; height: 100%; }
12
+ div > svg { display: block; width: 100%; height: 100%; }
13
+ `;
14
+ this.container = document.createElement("div");
15
+ shadow.append(style, this.container);
16
+ }
17
+ attributeChangedCallback() {
18
+ this.container.innerHTML = this.getAttribute("svg") ?? "";
19
+ }
20
+ }
21
+ function register_a_sticker() {
22
+ if (typeof customElements === "undefined") return;
23
+ if (!customElements.get("a-sticker")) {
24
+ customElements.define("a-sticker", AStickerElement);
25
+ }
26
+ }
27
+ export {
28
+ AStickerElement,
29
+ register_a_sticker
30
+ };
@@ -76,8 +76,11 @@
76
76
  On hover the underline color is repeated so it tracks the priority
77
77
  color rather than the global --link-color-hover. */
78
78
  a-text a, a-text a:link, a-text a:visited { color: var(--text-link-color); }
79
- a-text a:hover {
80
- color: var(--text-link-hover);
81
- text-decoration-color: var(--text-link-hover);
79
+ /* Hover only on real-pointer devices — avoids sticky hover after a tap. */
80
+ @media (hover: hover) and (pointer: fine) {
81
+ a-text a:hover {
82
+ color: var(--text-link-hover);
83
+ text-decoration-color: var(--text-link-hover);
84
+ }
82
85
  }
83
86
  }
@@ -3,6 +3,12 @@ import './a-text.css';
3
3
  import './a-title.css';
4
4
  import './a-icon.css';
5
5
  import './a-icon.shapes.css';
6
+ import './a-button.css';
7
+ import './a-sticker.css';
8
+ import './a-sticker-animated.css';
6
9
  export { AProgressElement, register_a_progress } from './a-progress';
7
10
  export { ATextElement, register_a_text } from './a-text';
8
11
  export { AIconElement, register_a_icon } from './a-icon';
12
+ export { AButtonElement, register_a_button } from './a-button';
13
+ export { AStickerElement, register_a_sticker } from './a-sticker';
14
+ export { AStickerAnimatedElement, register_a_sticker_animated } from './a-sticker-animated';
@@ -1,24 +1,42 @@
1
1
  import { register_a_progress } from "./a-progress";
2
2
  import { register_a_text } from "./a-text";
3
3
  import { register_a_icon } from "./a-icon";
4
+ import { register_a_button } from "./a-button";
5
+ import { register_a_sticker } from "./a-sticker";
6
+ import { register_a_sticker_animated } from "./a-sticker-animated";
4
7
  import "./a-progress.css";
5
8
  import "./a-text.css";
6
9
  import "./a-title.css";
7
10
  import "./a-icon.css";
8
11
  import "./a-icon.shapes.css";
12
+ import "./a-button.css";
13
+ import "./a-sticker.css";
14
+ import "./a-sticker-animated.css";
9
15
  import { AProgressElement, register_a_progress as register_a_progress2 } from "./a-progress";
10
16
  import { ATextElement, register_a_text as register_a_text2 } from "./a-text";
11
17
  import { AIconElement, register_a_icon as register_a_icon2 } from "./a-icon";
18
+ import { AButtonElement, register_a_button as register_a_button2 } from "./a-button";
19
+ import { AStickerElement, register_a_sticker as register_a_sticker2 } from "./a-sticker";
20
+ import { AStickerAnimatedElement, register_a_sticker_animated as register_a_sticker_animated2 } from "./a-sticker-animated";
12
21
  if (typeof customElements !== "undefined") {
13
22
  register_a_progress();
14
23
  register_a_text();
15
24
  register_a_icon();
25
+ register_a_button();
26
+ register_a_sticker();
27
+ register_a_sticker_animated();
16
28
  }
17
29
  export {
30
+ AButtonElement,
18
31
  AIconElement,
19
32
  AProgressElement,
33
+ AStickerAnimatedElement,
34
+ AStickerElement,
20
35
  ATextElement,
36
+ register_a_button2 as register_a_button,
21
37
  register_a_icon2 as register_a_icon,
22
38
  register_a_progress2 as register_a_progress,
39
+ register_a_sticker2 as register_a_sticker,
40
+ register_a_sticker_animated2 as register_a_sticker_animated,
23
41
  register_a_text2 as register_a_text
24
42
  };
@@ -1,3 +1,4 @@
1
+ import type { IconShape } from './elements/a-icon.shapes';
1
2
  /** Common props for JSX component wrappers. */
2
3
  export interface BaseProps {
3
4
  /** CSS class name. Merged with any internal classes by the component. */
@@ -6,9 +7,21 @@ export interface BaseProps {
6
7
  style?: React.CSSProperties;
7
8
  /** Child elements. When provided, replaces the component's default label/content. */
8
9
  children?: React.ReactNode;
10
+ /** HTML `id` attribute. */
11
+ id?: string;
12
+ /** HTML `title` attribute — native browser tooltip on hover. */
13
+ title?: string;
14
+ /** Tab order. Set to `-1` to skip the element when tabbing. */
15
+ tabIndex?: number;
16
+ /** Any `data-*` attribute is forwarded to the rendered element. */
17
+ [key: `data-${string}`]: unknown;
18
+ /** Any `aria-*` attribute is forwarded to the rendered element. */
19
+ [key: `aria-${string}`]: unknown;
9
20
  }
10
21
  /** Attributes for intrinsic custom elements (`<a-*>` tags) in JSX. */
11
22
  export interface BaseAttributes {
23
+ /** React/Preact reconciliation key when rendered inside a list. */
24
+ key?: string | number | null;
12
25
  /** HTML `class` attribute (standard DOM). */
13
26
  class?: string;
14
27
  /** React/Preact-style class name. Alias for `class`. */
@@ -95,13 +108,54 @@ export interface ATitleAttributes extends BaseAttributes {
95
108
  'aria-level'?: number | string;
96
109
  }
97
110
  /**
98
- * Attributes for the `<a-icon>` custom element. The `shape` attribute
99
- * value is typed as `string` here so the element accepts any consumer's
100
- * generated shapes. The JSX wrapper (`Icon`) narrows it to `IconShape`.
111
+ * Attributes for the `<a-sticker>` static sticker carrier.
112
+ *
113
+ * The SVG payload is passed as the `svg` attribute a markup string.
114
+ * On change, the element writes it into its shadow DOM (no light-DOM
115
+ * `<slot>`, so children aren't rendered). The JSX wrapper
116
+ * (`Sticker{Name}`) sets it from the per-sticker module's inlined SVG.
117
+ * Sizing comes from `--sticker-size`.
118
+ */
119
+ export interface AStickerAttributes extends BaseAttributes {
120
+ /** SVG markup string. On change the element drops it into its shadow
121
+ * DOM (`innerHTML`). */
122
+ svg?: string;
123
+ role?: string;
124
+ 'aria-label'?: string;
125
+ 'aria-hidden'?: 'true' | 'false' | boolean;
126
+ }
127
+ /**
128
+ * Attributes for the `<a-sticker-animated>` Lottie sticker carrier.
129
+ *
130
+ * The Lottie payload is passed as the `animation` attribute — a JSON
131
+ * string. On change the element `JSON.parse`s it once and drives a
132
+ * `lottie-web` player (SVG renderer) inside its shadow DOM. The JSX
133
+ * wrapper (`Sticker{Name}Animated`) sets it from the per-sticker
134
+ * module's inlined JSON. Sizing comes from the `--sticker-size` CSS
135
+ * variable; `paused` controls playback.
136
+ */
137
+ export interface AStickerAnimatedAttributes extends BaseAttributes {
138
+ /** Lottie payload as a JSON string. The element parses it once on
139
+ * change. */
140
+ animation?: string;
141
+ /** Present (any string value, including `""`) freezes the animation.
142
+ * A numeric string is parsed as seconds and the player seeks to
143
+ * that time before pausing. Omit to play. */
144
+ paused?: string | boolean | number;
145
+ role?: string;
146
+ 'aria-label'?: string;
147
+ 'aria-hidden'?: 'true' | 'false' | boolean;
148
+ }
149
+ /**
150
+ * Attributes for the `<a-icon>` custom element. `shape` is typed as
151
+ * `IconShape` (`keyof IconShapes`); the `IconShapes` interface is
152
+ * module-augmentable, so consumers who generate their own shape sets
153
+ * via `declare module '@antadesign/anta' { interface IconShapes { … } }`
154
+ * get those keys accepted automatically.
101
155
  */
102
156
  export interface AIconAttributes extends BaseAttributes {
103
157
  /** Which icon to render. */
104
- shape?: string;
158
+ shape?: IconShape;
105
159
  /** Width and height in pixels. Mapped to the `--icon-size` custom
106
160
  * property via the CSS Values 5 typed `attr()` function — Chrome
107
161
  * 133+ and Safari 18.2+ only. Firefox hasn't shipped typed
@@ -119,3 +173,34 @@ export interface AIconAttributes extends BaseAttributes {
119
173
  /** Hides decorative icons from screen readers. */
120
174
  'aria-hidden'?: 'true' | 'false' | boolean;
121
175
  }
176
+ /**
177
+ * Attributes for the `<a-button>` custom element. For the typed JSX
178
+ * wrapper use `Button` from `@antadesign/anta`.
179
+ */
180
+ export interface AButtonAttributes extends BaseAttributes {
181
+ /** Visual emphasis. */
182
+ priority?: 'primary' | 'secondary' | 'tertiary' | 'quaternary';
183
+ /** Semantic tone, or any literal CSS color for a one-off custom tone. */
184
+ tone?: 'neutral' | 'brand' | 'critical' | 'info' | 'success' | 'warning' | (string & {});
185
+ /** Underline style. Only renders on `priority="tertiary" | "quaternary"`. */
186
+ underline?: 'solid' | 'dashed' | 'dotted';
187
+ /** Size variant. small=22px, medium=26px, large=30px. */
188
+ size?: 'small' | 'medium' | 'large';
189
+ /** Drop outer padding to zero. Only takes effect on `priority="quaternary"`.
190
+ * Presence-based: `''` (or any value) turns it on; omit to turn off. */
191
+ paddingless?: '' | 'true' | 'false' | boolean;
192
+ /** Loading state. Presence-based (`''` on, omit off). */
193
+ loading?: '' | 'true' | 'false' | boolean;
194
+ /** Disabled state. Presence-based (`''` on, omit off). */
195
+ disabled?: '' | 'true' | 'false' | boolean;
196
+ /** Toggled-on / pressed state. Presence-based (`''` on, omit off). */
197
+ selected?: '' | 'true' | 'false' | boolean;
198
+ /** Submit/reset semantics. */
199
+ type?: 'button' | 'submit' | 'reset';
200
+ /** Associate with a form by id when not nested inside it. */
201
+ form?: string;
202
+ /** Custom event name dispatched (bubbling) on click. */
203
+ 'data-custom-event'?: string;
204
+ 'aria-disabled'?: 'true' | 'false' | boolean;
205
+ 'aria-busy'?: 'true' | 'false' | boolean;
206
+ }