luxen-ui 0.6.2 → 0.8.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 (270) hide show
  1. package/bin/cli.mjs +54 -10
  2. package/cdn/chunks/decorate.js +1 -1
  3. package/cdn/chunks/floating-ui.dom.js +2 -0
  4. package/cdn/chunks/floating-ui.dom.js.map +1 -0
  5. package/cdn/chunks/lit-html.js +3 -0
  6. package/cdn/chunks/lit-html.js.map +1 -0
  7. package/cdn/chunks/lit.js +1 -2
  8. package/cdn/chunks/lit.js.map +1 -1
  9. package/cdn/chunks/module.js +717 -0
  10. package/cdn/chunks/module.js.map +1 -0
  11. package/cdn/chunks/native.js +2 -0
  12. package/cdn/chunks/native.js.map +1 -0
  13. package/cdn/chunks/static-html.js +2 -0
  14. package/cdn/chunks/static-html.js.map +1 -0
  15. package/cdn/custom-elements.json +1412 -12629
  16. package/cdn/elements/avatar/avatar.d.ts +5 -0
  17. package/cdn/elements/avatar/avatar.d.ts.map +1 -1
  18. package/cdn/elements/avatar/avatar.js +5 -5
  19. package/cdn/elements/avatar/avatar.js.map +1 -1
  20. package/cdn/elements/button/button.meta.d.ts +33 -0
  21. package/cdn/elements/button/button.meta.d.ts.map +1 -0
  22. package/cdn/elements/button/button.meta.js +0 -0
  23. package/cdn/elements/carousel/carousel.d.ts +6 -0
  24. package/cdn/elements/carousel/carousel.d.ts.map +1 -1
  25. package/cdn/elements/carousel/carousel.js +1 -1
  26. package/cdn/elements/carousel/carousel.js.map +1 -1
  27. package/cdn/elements/carousel-item/carousel-item.d.ts +2 -0
  28. package/cdn/elements/carousel-item/carousel-item.d.ts.map +1 -1
  29. package/cdn/elements/carousel-item/carousel-item.js +1 -1
  30. package/cdn/elements/carousel-item/carousel-item.js.map +1 -1
  31. package/cdn/elements/close-button/close-button.meta.d.ts +24 -0
  32. package/cdn/elements/close-button/close-button.meta.d.ts.map +1 -0
  33. package/cdn/elements/close-button/close-button.meta.js +0 -0
  34. package/cdn/elements/dialog/dialog.d.ts +12 -6
  35. package/cdn/elements/dialog/dialog.d.ts.map +1 -1
  36. package/cdn/elements/dialog/dialog.js +8 -5
  37. package/cdn/elements/dialog/dialog.js.map +1 -1
  38. package/cdn/elements/dialog/dialog.styles.js +1 -1
  39. package/cdn/elements/dialog/dialog.styles.js.map +1 -1
  40. package/cdn/elements/disclosure/disclosure.meta.d.ts +28 -0
  41. package/cdn/elements/disclosure/disclosure.meta.d.ts.map +1 -0
  42. package/cdn/elements/disclosure/disclosure.meta.js +0 -0
  43. package/cdn/elements/divider/divider.d.ts +1 -1
  44. package/cdn/elements/divider/divider.js.map +1 -1
  45. package/cdn/elements/drawer/drawer.d.ts +5 -0
  46. package/cdn/elements/drawer/drawer.d.ts.map +1 -1
  47. package/cdn/elements/drawer/drawer.js +1 -1
  48. package/cdn/elements/drawer/drawer.js.map +1 -1
  49. package/cdn/elements/dropdown/dropdown.d.ts +2 -0
  50. package/cdn/elements/dropdown/dropdown.d.ts.map +1 -1
  51. package/cdn/elements/dropdown/dropdown.js +1 -1
  52. package/cdn/elements/dropdown/dropdown.js.map +1 -1
  53. package/cdn/elements/dropdown-item/dropdown-item.d.ts +2 -0
  54. package/cdn/elements/dropdown-item/dropdown-item.d.ts.map +1 -1
  55. package/cdn/elements/dropdown-item/dropdown-item.js +1 -1
  56. package/cdn/elements/dropdown-item/dropdown-item.js.map +1 -1
  57. package/cdn/elements/icon/icon.js +1 -1
  58. package/cdn/elements/icon/icon.js.map +1 -1
  59. package/cdn/elements/input-otp/input-otp.d.ts +2 -0
  60. package/cdn/elements/input-otp/input-otp.d.ts.map +1 -1
  61. package/cdn/elements/input-otp/input-otp.js.map +1 -1
  62. package/cdn/elements/input-stepper/input-stepper.d.ts +2 -0
  63. package/cdn/elements/input-stepper/input-stepper.d.ts.map +1 -1
  64. package/cdn/elements/input-stepper/input-stepper.js +1 -1
  65. package/cdn/elements/input-stepper/input-stepper.js.map +1 -1
  66. package/cdn/elements/kbd/kbd.meta.d.ts +14 -0
  67. package/cdn/elements/kbd/kbd.meta.d.ts.map +1 -0
  68. package/cdn/elements/kbd/kbd.meta.js +0 -0
  69. package/cdn/elements/popover/popover.js +1 -1
  70. package/cdn/elements/popover/popover.js.map +1 -1
  71. package/cdn/elements/progress/progress.meta.d.ts +22 -0
  72. package/cdn/elements/progress/progress.meta.d.ts.map +1 -0
  73. package/cdn/elements/progress/progress.meta.js +0 -0
  74. package/cdn/elements/prose-editor/index.d.ts +2 -0
  75. package/cdn/elements/prose-editor/index.d.ts.map +1 -0
  76. package/cdn/elements/prose-editor/index.js +2 -0
  77. package/cdn/elements/prose-editor/index.js.map +1 -0
  78. package/cdn/elements/prose-editor/prose-editor.d.ts +113 -0
  79. package/cdn/elements/prose-editor/prose-editor.d.ts.map +1 -0
  80. package/cdn/elements/prose-editor/prose-editor.js +180 -0
  81. package/cdn/elements/prose-editor/prose-editor.js.map +1 -0
  82. package/cdn/elements/rating/rating.d.ts +2 -0
  83. package/cdn/elements/rating/rating.d.ts.map +1 -1
  84. package/cdn/elements/rating/rating.js +1 -1
  85. package/cdn/elements/rating/rating.js.map +1 -1
  86. package/cdn/elements/select/select.meta.d.ts +28 -0
  87. package/cdn/elements/select/select.meta.d.ts.map +1 -0
  88. package/cdn/elements/select/select.meta.js +0 -0
  89. package/cdn/elements/skeleton/skeleton.d.ts +3 -0
  90. package/cdn/elements/skeleton/skeleton.d.ts.map +1 -1
  91. package/cdn/elements/skeleton/skeleton.js.map +1 -1
  92. package/cdn/elements/spinner/spinner.js +1 -1
  93. package/cdn/elements/spinner/spinner.js.map +1 -1
  94. package/cdn/elements/sticky-bar/sticky-bar.js +1 -1
  95. package/cdn/elements/sticky-bar/sticky-bar.js.map +1 -1
  96. package/cdn/elements/stories-viewer/stories-viewer.d.ts +1 -1
  97. package/cdn/elements/stories-viewer/stories-viewer.d.ts.map +1 -1
  98. package/cdn/elements/stories-viewer/stories-viewer.js +26 -26
  99. package/cdn/elements/stories-viewer/stories-viewer.js.map +1 -1
  100. package/cdn/elements/story/story.d.ts +10 -1
  101. package/cdn/elements/story/story.d.ts.map +1 -1
  102. package/cdn/elements/story/story.js +20 -20
  103. package/cdn/elements/story/story.js.map +1 -1
  104. package/cdn/elements/toast/toast.d.ts +5 -0
  105. package/cdn/elements/toast/toast.d.ts.map +1 -1
  106. package/cdn/elements/toast/toast.js.map +1 -1
  107. package/cdn/elements/tooltip/tooltip.js +1 -1
  108. package/cdn/elements/tooltip/tooltip.js.map +1 -1
  109. package/cdn/elements/tree/tree.d.ts +2 -0
  110. package/cdn/elements/tree/tree.d.ts.map +1 -1
  111. package/cdn/elements/tree/tree.js +1 -1
  112. package/cdn/elements/tree/tree.js.map +1 -1
  113. package/cdn/elements/tree-item/tree-item.d.ts +2 -0
  114. package/cdn/elements/tree-item/tree-item.d.ts.map +1 -1
  115. package/cdn/elements/tree-item/tree-item.js +1 -1
  116. package/cdn/elements/tree-item/tree-item.js.map +1 -1
  117. package/cdn/registry.d.ts +1 -1
  118. package/cdn/registry.d.ts.map +1 -1
  119. package/cdn/registry.js.map +1 -1
  120. package/cdn/shared/controllers/has-slot-controller.d.ts +37 -0
  121. package/cdn/shared/controllers/has-slot-controller.d.ts.map +1 -0
  122. package/cdn/shared/controllers/has-slot-controller.js +2 -0
  123. package/cdn/shared/controllers/has-slot-controller.js.map +1 -0
  124. package/cdn/shared/controllers/popover.js +1 -1
  125. package/cdn/shared/controllers/popover.js.map +1 -1
  126. package/cdn/shared/styles/host.styles.js +1 -1
  127. package/cdn/standalone.css +132 -1
  128. package/cdn/standalone.js +25743 -191
  129. package/cdn/standalone.js.map +1 -1
  130. package/cdn/static-tag.d.ts +17 -0
  131. package/cdn/static-tag.d.ts.map +1 -0
  132. package/cdn/static-tag.js +2 -0
  133. package/cdn/static-tag.js.map +1 -0
  134. package/cdn/styles/elements/prose-editor.css +129 -0
  135. package/cdn/styles/elements/toast.css +1 -1
  136. package/dist/css/elements/prose-editor.css +129 -0
  137. package/dist/css/elements/toast.css +1 -1
  138. package/dist/custom-elements.json +1412 -12629
  139. package/dist/elements/avatar/avatar.d.ts +5 -0
  140. package/dist/elements/avatar/avatar.d.ts.map +1 -1
  141. package/dist/elements/avatar/avatar.js +5 -0
  142. package/dist/elements/button/button.meta.d.ts +33 -0
  143. package/dist/elements/button/button.meta.d.ts.map +1 -0
  144. package/dist/elements/button/button.meta.js +44 -0
  145. package/dist/elements/carousel/carousel.d.ts +6 -0
  146. package/dist/elements/carousel/carousel.d.ts.map +1 -1
  147. package/dist/elements/carousel/carousel.js +6 -0
  148. package/dist/elements/carousel-item/carousel-item.d.ts +2 -0
  149. package/dist/elements/carousel-item/carousel-item.d.ts.map +1 -1
  150. package/dist/elements/carousel-item/carousel-item.js +2 -0
  151. package/dist/elements/close-button/close-button.meta.d.ts +24 -0
  152. package/dist/elements/close-button/close-button.meta.d.ts.map +1 -0
  153. package/dist/elements/close-button/close-button.meta.js +30 -0
  154. package/dist/elements/dialog/dialog.css +15 -0
  155. package/dist/elements/dialog/dialog.d.ts +12 -6
  156. package/dist/elements/dialog/dialog.d.ts.map +1 -1
  157. package/dist/elements/dialog/dialog.js +21 -7
  158. package/dist/elements/disclosure/disclosure.meta.d.ts +28 -0
  159. package/dist/elements/disclosure/disclosure.meta.d.ts.map +1 -0
  160. package/dist/elements/disclosure/disclosure.meta.js +34 -0
  161. package/dist/elements/divider/divider.d.ts +1 -1
  162. package/dist/elements/divider/divider.js +1 -1
  163. package/dist/elements/drawer/drawer.d.ts +5 -0
  164. package/dist/elements/drawer/drawer.d.ts.map +1 -1
  165. package/dist/elements/drawer/drawer.js +5 -0
  166. package/dist/elements/dropdown/dropdown.d.ts +2 -0
  167. package/dist/elements/dropdown/dropdown.d.ts.map +1 -1
  168. package/dist/elements/dropdown/dropdown.js +2 -0
  169. package/dist/elements/dropdown-item/dropdown-item.d.ts +2 -0
  170. package/dist/elements/dropdown-item/dropdown-item.d.ts.map +1 -1
  171. package/dist/elements/dropdown-item/dropdown-item.js +2 -0
  172. package/dist/elements/input-otp/input-otp.d.ts +2 -0
  173. package/dist/elements/input-otp/input-otp.d.ts.map +1 -1
  174. package/dist/elements/input-otp/input-otp.js +2 -0
  175. package/dist/elements/input-stepper/input-stepper.d.ts +2 -0
  176. package/dist/elements/input-stepper/input-stepper.d.ts.map +1 -1
  177. package/dist/elements/input-stepper/input-stepper.js +5 -1
  178. package/dist/elements/kbd/kbd.meta.d.ts +14 -0
  179. package/dist/elements/kbd/kbd.meta.d.ts.map +1 -0
  180. package/dist/elements/kbd/kbd.meta.js +20 -0
  181. package/dist/elements/progress/progress.meta.d.ts +22 -0
  182. package/dist/elements/progress/progress.meta.d.ts.map +1 -0
  183. package/dist/elements/progress/progress.meta.js +28 -0
  184. package/dist/elements/prose-editor/index.d.ts +2 -0
  185. package/dist/elements/prose-editor/index.d.ts.map +1 -0
  186. package/dist/elements/prose-editor/index.js +4 -0
  187. package/dist/elements/prose-editor/prose-editor.css +133 -0
  188. package/dist/elements/prose-editor/prose-editor.d.ts +114 -0
  189. package/dist/elements/prose-editor/prose-editor.d.ts.map +1 -0
  190. package/dist/elements/prose-editor/prose-editor.js +481 -0
  191. package/dist/elements/rating/rating.d.ts +2 -0
  192. package/dist/elements/rating/rating.d.ts.map +1 -1
  193. package/dist/elements/rating/rating.js +2 -0
  194. package/dist/elements/select/select.meta.d.ts +28 -0
  195. package/dist/elements/select/select.meta.d.ts.map +1 -0
  196. package/dist/elements/select/select.meta.js +34 -0
  197. package/dist/elements/skeleton/skeleton.d.ts +3 -0
  198. package/dist/elements/skeleton/skeleton.d.ts.map +1 -1
  199. package/dist/elements/skeleton/skeleton.js +3 -0
  200. package/dist/elements/stories-viewer/stories-viewer.d.ts +1 -1
  201. package/dist/elements/stories-viewer/stories-viewer.d.ts.map +1 -1
  202. package/dist/elements/stories-viewer/stories-viewer.js +23 -19
  203. package/dist/elements/story/story.d.ts +10 -1
  204. package/dist/elements/story/story.d.ts.map +1 -1
  205. package/dist/elements/story/story.js +29 -17
  206. package/dist/elements/toast/toast.d.ts +5 -0
  207. package/dist/elements/toast/toast.d.ts.map +1 -1
  208. package/dist/elements/toast/toast.js +5 -0
  209. package/dist/elements/tree/tree.d.ts +2 -0
  210. package/dist/elements/tree/tree.d.ts.map +1 -1
  211. package/dist/elements/tree/tree.js +2 -0
  212. package/dist/elements/tree-item/tree-item.d.ts +2 -0
  213. package/dist/elements/tree-item/tree-item.d.ts.map +1 -1
  214. package/dist/elements/tree-item/tree-item.js +2 -0
  215. package/dist/metadata/avatar.json +83 -0
  216. package/dist/metadata/badge.json +59 -0
  217. package/dist/metadata/button.json +138 -0
  218. package/dist/metadata/carousel-item.json +32 -0
  219. package/dist/metadata/carousel.json +388 -0
  220. package/dist/metadata/close-button.json +90 -0
  221. package/dist/metadata/dialog.json +163 -0
  222. package/dist/metadata/disclosure.json +88 -0
  223. package/dist/metadata/divider.json +65 -0
  224. package/dist/metadata/drawer.json +176 -0
  225. package/dist/metadata/dropdown-item.json +85 -0
  226. package/dist/metadata/dropdown.json +157 -0
  227. package/dist/metadata/icon.json +49 -0
  228. package/dist/metadata/index.json +4062 -0
  229. package/dist/metadata/input-otp.json +86 -0
  230. package/dist/metadata/input-stepper.json +122 -0
  231. package/dist/metadata/kbd.json +37 -0
  232. package/dist/metadata/popover.json +157 -0
  233. package/dist/metadata/progress.json +71 -0
  234. package/dist/metadata/prose-editor.json +365 -0
  235. package/dist/metadata/rating.json +126 -0
  236. package/dist/metadata/select.json +82 -0
  237. package/dist/metadata/skeleton.json +56 -0
  238. package/dist/metadata/spinner.json +47 -0
  239. package/dist/metadata/sticky-bar.json +93 -0
  240. package/dist/metadata/stories-viewer.json +316 -0
  241. package/dist/metadata/stories.json +109 -0
  242. package/dist/metadata/story.json +148 -0
  243. package/dist/metadata/tabs.json +74 -0
  244. package/dist/metadata/toast.json +122 -0
  245. package/dist/metadata/tooltip.json +144 -0
  246. package/dist/metadata/tree-item.json +199 -0
  247. package/dist/metadata/tree.json +130 -0
  248. package/dist/registry.d.ts +1 -1
  249. package/dist/registry.d.ts.map +1 -1
  250. package/dist/shared/controllers/has-slot-controller.d.ts +37 -0
  251. package/dist/shared/controllers/has-slot-controller.d.ts.map +1 -0
  252. package/dist/shared/controllers/has-slot-controller.js +66 -0
  253. package/dist/static-tag.d.ts +17 -0
  254. package/dist/static-tag.d.ts.map +1 -0
  255. package/dist/static-tag.js +22 -0
  256. package/dist/templates/elements/avatar.md +21 -24
  257. package/dist/templates/elements/badge.md +9 -15
  258. package/dist/templates/elements/button.md +31 -41
  259. package/dist/templates/elements/close-button.md +24 -36
  260. package/dist/templates/elements/dialog.md +73 -54
  261. package/dist/templates/elements/drawer.md +39 -52
  262. package/dist/templates/elements/progress.md +13 -23
  263. package/dist/templates/elements/prose-editor.md +211 -0
  264. package/dist/templates/elements/select.md +20 -31
  265. package/dist/templates/elements/sticky-bar.md +16 -60
  266. package/dist/templates/elements/toast.md +33 -53
  267. package/dist/templates/elements/tree.md +39 -67
  268. package/elements.json +46 -1
  269. package/package.json +13 -3
  270. package/templates/SKILL.md.tpl +5 -1
@@ -0,0 +1,93 @@
1
+ {
2
+ "name": "sticky-bar",
3
+ "displayName": "Sticky bar",
4
+ "type": "shadow",
5
+ "isCustomElement": true,
6
+ "tag": "l-sticky-bar",
7
+ "nativeTag": null,
8
+ "selector": "l-sticky-bar",
9
+ "summary": "A bar docked to the viewport edge, revealed in the top layer when a referenced element scrolls out of view.",
10
+ "status": "stable",
11
+ "appearances": [],
12
+ "import": {
13
+ "css": null,
14
+ "js": "luxen-ui/sticky-bar"
15
+ },
16
+ "properties": [
17
+ {
18
+ "name": "for",
19
+ "attribute": "for",
20
+ "type": "string",
21
+ "default": "''",
22
+ "reflects": false,
23
+ "description": "HTML id of the element to track. When that element leaves the viewport, the bar reveals. Omit for a permanently visible bar."
24
+ },
25
+ {
26
+ "name": "root",
27
+ "attribute": "root",
28
+ "type": "string",
29
+ "default": "''",
30
+ "reflects": false,
31
+ "description": "HTML id of the scrolling ancestor used as the IntersectionObserver root. Omit to use the viewport. Useful for nested scroll containers (CMS preview panes, modals)."
32
+ },
33
+ {
34
+ "name": "placement",
35
+ "attribute": "placement",
36
+ "type": "'bottom' | 'top'",
37
+ "default": "'bottom'",
38
+ "reflects": true,
39
+ "description": "Edge to dock against."
40
+ }
41
+ ],
42
+ "attributes": [],
43
+ "events": [
44
+ {
45
+ "name": "show",
46
+ "description": "Fired before the bar reveals. Cancelable.",
47
+ "cancelable": true
48
+ },
49
+ {
50
+ "name": "after-show",
51
+ "description": "Fired after the reveal animation completes.",
52
+ "cancelable": false
53
+ },
54
+ {
55
+ "name": "hide",
56
+ "description": "Fired before the bar hides. Cancelable.",
57
+ "cancelable": true
58
+ },
59
+ {
60
+ "name": "after-hide",
61
+ "description": "Fired after the hide animation completes.",
62
+ "cancelable": false
63
+ }
64
+ ],
65
+ "methods": [],
66
+ "slots": [
67
+ {
68
+ "name": "",
69
+ "description": "Bar content. Owns its own background, padding, and typography."
70
+ }
71
+ ],
72
+ "cssClasses": [],
73
+ "cssParts": [],
74
+ "cssProperties": [
75
+ {
76
+ "name": "--show-duration",
77
+ "default": "200ms",
78
+ "description": "Reveal animation duration."
79
+ },
80
+ {
81
+ "name": "--hide-duration",
82
+ "default": "200ms",
83
+ "description": "Dismiss animation duration."
84
+ },
85
+ {
86
+ "name": "--offset",
87
+ "default": "0px",
88
+ "description": "Distance from the active edge. Use to clear a sticky header when `placement=\"top\"`."
89
+ }
90
+ ],
91
+ "commands": [],
92
+ "examples": []
93
+ }
@@ -0,0 +1,316 @@
1
+ {
2
+ "name": "stories-viewer",
3
+ "displayName": "Stories viewer",
4
+ "type": "shadow",
5
+ "isCustomElement": true,
6
+ "tag": "l-stories-viewer",
7
+ "nativeTag": null,
8
+ "selector": "l-stories-viewer",
9
+ "summary": "Fullscreen modal that plays a sequence of `<l-story>` videos with an\nInstagram-style segmented progress bar, previous/next navigation, mute toggle,\nand auto-advance.\n\nLinked to one or more `<l-stories>` rows via matching `id` ↔ `for`. Open\nprogrammatically via `open()` or by clicking a thumbnail in a linked row.",
10
+ "status": "experimental",
11
+ "appearances": [],
12
+ "import": {
13
+ "css": null,
14
+ "js": "luxen-ui/stories-viewer"
15
+ },
16
+ "properties": [
17
+ {
18
+ "name": "open",
19
+ "attribute": "open",
20
+ "type": "boolean",
21
+ "default": "false",
22
+ "reflects": true,
23
+ "description": "Whether the viewer is open."
24
+ },
25
+ {
26
+ "name": "index",
27
+ "attribute": "index",
28
+ "type": "number",
29
+ "default": "0",
30
+ "reflects": true,
31
+ "description": "Active story index (0-based)."
32
+ },
33
+ {
34
+ "name": "muted",
35
+ "attribute": "muted",
36
+ "type": "boolean",
37
+ "default": "true",
38
+ "reflects": true,
39
+ "description": "Whether playback is muted. so autoplay always succeeds across browsers. The user can unmute via the dedicated button or the `m` keyboard shortcut."
40
+ },
41
+ {
42
+ "name": "loop",
43
+ "attribute": "loop",
44
+ "type": "boolean",
45
+ "default": "false",
46
+ "reflects": true,
47
+ "description": "Loop the active story instead of advancing."
48
+ },
49
+ {
50
+ "name": "autoAdvance",
51
+ "attribute": "auto-advance",
52
+ "type": "boolean",
53
+ "default": "true",
54
+ "reflects": true,
55
+ "description": "Move to the next story when the current one ends; close after the last story."
56
+ },
57
+ {
58
+ "name": "lightDismiss",
59
+ "attribute": "light-dismiss",
60
+ "type": "boolean",
61
+ "default": "true",
62
+ "reflects": true,
63
+ "description": "Close when the backdrop is clicked."
64
+ },
65
+ {
66
+ "name": "chapter",
67
+ "attribute": "chapter",
68
+ "type": "number",
69
+ "default": "0",
70
+ "reflects": true,
71
+ "description": "Active chapter index within the current story. Reflected."
72
+ },
73
+ {
74
+ "name": "stories",
75
+ "attribute": null,
76
+ "type": "LuxenStory[]",
77
+ "default": "[]",
78
+ "reflects": false,
79
+ "description": "Internal: the playlist set by the source `<l-stories>`."
80
+ },
81
+ {
82
+ "name": "source",
83
+ "attribute": null,
84
+ "type": "LuxenStories | null",
85
+ "default": "null",
86
+ "reflects": false,
87
+ "description": "Internal: the source `<l-stories>` element that opened the viewer."
88
+ }
89
+ ],
90
+ "attributes": [],
91
+ "events": [
92
+ {
93
+ "name": "show",
94
+ "description": "Fired when the viewer opens.",
95
+ "cancelable": false
96
+ },
97
+ {
98
+ "name": "after-show",
99
+ "description": "Fired after the open transition completes.",
100
+ "cancelable": false
101
+ },
102
+ {
103
+ "name": "hide",
104
+ "description": "Fired when the viewer is about to close. Cancelable.",
105
+ "cancelable": true
106
+ },
107
+ {
108
+ "name": "after-hide",
109
+ "description": "Fired after the close transition completes.",
110
+ "cancelable": false
111
+ },
112
+ {
113
+ "name": "story-change",
114
+ "description": "Fired when the active story changes. Detail: `{ index: number, story: LuxenStory }`.",
115
+ "cancelable": false
116
+ },
117
+ {
118
+ "name": "story-end",
119
+ "description": "Fired when the active story finishes playback. Detail: `{ index: number }`.",
120
+ "cancelable": false
121
+ },
122
+ {
123
+ "name": "chapter-change",
124
+ "description": "Fired when the active chapter (within a story) changes. Detail: `{ chapter: number, story: LuxenStory }`.",
125
+ "cancelable": false
126
+ },
127
+ {
128
+ "name": "mute-change",
129
+ "description": "Fired when the mute state changes. Detail: `{ muted: boolean }`.",
130
+ "cancelable": false
131
+ }
132
+ ],
133
+ "methods": [
134
+ {
135
+ "name": "openAt",
136
+ "params": [
137
+ {
138
+ "name": "stories",
139
+ "type": "LuxenStory[]"
140
+ },
141
+ {
142
+ "name": "index",
143
+ "type": null
144
+ },
145
+ {
146
+ "name": "source",
147
+ "type": "LuxenStories | null"
148
+ }
149
+ ],
150
+ "returns": null,
151
+ "description": "Open the viewer at the given index with an explicit playlist."
152
+ },
153
+ {
154
+ "name": "close",
155
+ "params": [],
156
+ "returns": null,
157
+ "description": ""
158
+ },
159
+ {
160
+ "name": "next",
161
+ "params": [],
162
+ "returns": null,
163
+ "description": "Advance one chapter, or to the next story at the chapter boundary."
164
+ },
165
+ {
166
+ "name": "previous",
167
+ "params": [],
168
+ "returns": null,
169
+ "description": "Retreat one chapter, restart the current chapter past 1s in, or cross into the previous story."
170
+ },
171
+ {
172
+ "name": "nextStory",
173
+ "params": [],
174
+ "returns": null,
175
+ "description": "Jump to the next story, skipping any remaining chapters in the current story."
176
+ },
177
+ {
178
+ "name": "previousStory",
179
+ "params": [],
180
+ "returns": null,
181
+ "description": "Jump to the previous story regardless of current chapter. Lands on chapter 0 of the previous story."
182
+ },
183
+ {
184
+ "name": "play",
185
+ "params": [],
186
+ "returns": null,
187
+ "description": ""
188
+ },
189
+ {
190
+ "name": "pause",
191
+ "params": [],
192
+ "returns": null,
193
+ "description": ""
194
+ }
195
+ ],
196
+ "slots": [
197
+ {
198
+ "name": "cta",
199
+ "description": "Default CTA overlay (e.g. shoppable card). Per-story `slot=\"cta\"` inside `<l-story>` overrides this when that story is active."
200
+ },
201
+ {
202
+ "name": "header",
203
+ "description": "Default header overlay (e.g. avatar + author). Per-story override available the same way."
204
+ },
205
+ {
206
+ "name": "close",
207
+ "description": "Override the default close button."
208
+ }
209
+ ],
210
+ "cssClasses": [],
211
+ "cssParts": [
212
+ {
213
+ "name": "dialog",
214
+ "description": "The native `<dialog>` element."
215
+ },
216
+ {
217
+ "name": "frame",
218
+ "description": "The aspect-ratio video frame."
219
+ },
220
+ {
221
+ "name": "progress",
222
+ "description": "The progress bar wrapper."
223
+ },
224
+ {
225
+ "name": "progress-segment",
226
+ "description": "A single progress segment."
227
+ },
228
+ {
229
+ "name": "progress-fill",
230
+ "description": "The fill element inside an active segment."
231
+ },
232
+ {
233
+ "name": "video",
234
+ "description": "The `<video>` element."
235
+ },
236
+ {
237
+ "name": "overlay",
238
+ "description": "The overlay wrapper that hosts CTA/header slots."
239
+ },
240
+ {
241
+ "name": "header",
242
+ "description": "The top-left header area (story thumbnail + label fallback, or consumer-supplied content via the `header` slot)."
243
+ },
244
+ {
245
+ "name": "header-label",
246
+ "description": "The default story label inside the header."
247
+ },
248
+ {
249
+ "name": "actions",
250
+ "description": "The top-right vertical button stack (close, play/pause, mute)."
251
+ },
252
+ {
253
+ "name": "button-close",
254
+ "description": "The close button."
255
+ },
256
+ {
257
+ "name": "button-pause",
258
+ "description": "The play/pause toggle."
259
+ },
260
+ {
261
+ "name": "button-mute",
262
+ "description": "The mute toggle."
263
+ },
264
+ {
265
+ "name": "button-previous",
266
+ "description": "The previous story button."
267
+ },
268
+ {
269
+ "name": "button-next",
270
+ "description": "The next story button."
271
+ },
272
+ {
273
+ "name": "spinner",
274
+ "description": "The loading spinner shown while the current video is buffering."
275
+ }
276
+ ],
277
+ "cssProperties": [
278
+ {
279
+ "name": "--width",
280
+ "default": "min(420px, 100vw)",
281
+ "description": "Frame width."
282
+ },
283
+ {
284
+ "name": "--progress-color",
285
+ "default": "white",
286
+ "description": "Active progress fill color."
287
+ },
288
+ {
289
+ "name": "--progress-bg",
290
+ "default": "rgb(255 255 255 / 35%)",
291
+ "description": "Inactive progress segment background."
292
+ },
293
+ {
294
+ "name": "--progress-gap",
295
+ "default": "4px",
296
+ "description": "Gap between segments."
297
+ },
298
+ {
299
+ "name": "--show-duration",
300
+ "default": "200ms",
301
+ "description": "Open transition duration."
302
+ },
303
+ {
304
+ "name": "--hide-duration",
305
+ "default": "200ms",
306
+ "description": "Close transition duration."
307
+ },
308
+ {
309
+ "name": "--backdrop",
310
+ "default": "var(--l-backdrop-strong)",
311
+ "description": "Backdrop color. — darker than `--l-backdrop` to focus attention on the immersive frame, but still translucent so the page stays perceptible."
312
+ }
313
+ ],
314
+ "commands": [],
315
+ "examples": []
316
+ }
@@ -0,0 +1,109 @@
1
+ {
2
+ "name": "stories",
3
+ "displayName": "Stories",
4
+ "type": "custom",
5
+ "isCustomElement": true,
6
+ "tag": "l-stories",
7
+ "nativeTag": null,
8
+ "selector": "l-stories",
9
+ "summary": "A horizontal row of `<l-story>` thumbnails. Click opens the linked\n`<l-stories-viewer>` (matched by `for` → `id`). If `for` is omitted and no\nviewer exists, a singleton viewer is appended to `<body>` on first click.",
10
+ "status": "experimental",
11
+ "appearances": [],
12
+ "import": {
13
+ "css": "luxen-ui/css/stories",
14
+ "js": "luxen-ui/stories"
15
+ },
16
+ "properties": [
17
+ {
18
+ "name": "for",
19
+ "attribute": "for",
20
+ "type": "string",
21
+ "default": "''",
22
+ "reflects": true,
23
+ "description": "ID of the linked `<l-stories-viewer>`."
24
+ },
25
+ {
26
+ "name": "appearance",
27
+ "attribute": "appearance",
28
+ "type": "StoriesAppearance",
29
+ "default": "'rounded'",
30
+ "reflects": true,
31
+ "description": "Visual appearance of the thumbnails."
32
+ }
33
+ ],
34
+ "attributes": [],
35
+ "events": [
36
+ {
37
+ "name": "story-open",
38
+ "description": "Fired when the viewer opens. Detail: `{ index: number, story: LuxenStory }`.",
39
+ "cancelable": false
40
+ }
41
+ ],
42
+ "methods": [
43
+ {
44
+ "name": "open",
45
+ "params": [
46
+ {
47
+ "name": "index",
48
+ "type": null
49
+ }
50
+ ],
51
+ "returns": null,
52
+ "description": "Open the linked viewer at the given index."
53
+ },
54
+ {
55
+ "name": "stories",
56
+ "params": [],
57
+ "returns": "LuxenStory[]",
58
+ "description": "All `<l-story>` children."
59
+ }
60
+ ],
61
+ "slots": [],
62
+ "cssClasses": [],
63
+ "cssParts": [],
64
+ "cssProperties": [
65
+ {
66
+ "name": "--size",
67
+ "default": null,
68
+ "description": "Thumbnail size (width). Default per appearance."
69
+ },
70
+ {
71
+ "name": "--radius",
72
+ "default": null,
73
+ "description": "Thumbnail border radius. Default per appearance (`--radius-full` for rounded, `1rem` for portrait)."
74
+ },
75
+ {
76
+ "name": "--gap",
77
+ "default": "1rem",
78
+ "description": "Gap between thumbnails."
79
+ },
80
+ {
81
+ "name": "--ring-color",
82
+ "default": null,
83
+ "description": "Ring color around fresh thumbnails."
84
+ },
85
+ {
86
+ "name": "--ring-color-seen",
87
+ "default": null,
88
+ "description": "Ring color for `[seen]` thumbnails."
89
+ },
90
+ {
91
+ "name": "--ring-width",
92
+ "default": "2px",
93
+ "description": "Ring width."
94
+ },
95
+ {
96
+ "name": "--label-color",
97
+ "default": null,
98
+ "description": "Label text color."
99
+ }
100
+ ],
101
+ "commands": [],
102
+ "examples": [
103
+ {
104
+ "title": null,
105
+ "language": "html",
106
+ "code": "<l-stories for=\"brand\">\n <l-story src=\"…video.mp4\" poster=\"…jpg\" label=\"Notre concept\"></l-story>\n <l-story src=\"…video2.mp4\" label=\"Collant Essentiel\"></l-story>\n</l-stories>\n<l-stories-viewer id=\"brand\"></l-stories-viewer>"
107
+ }
108
+ ]
109
+ }
@@ -0,0 +1,148 @@
1
+ {
2
+ "name": "story",
3
+ "displayName": "Story",
4
+ "type": "custom",
5
+ "isCustomElement": true,
6
+ "tag": "l-story",
7
+ "nativeTag": null,
8
+ "selector": "l-story",
9
+ "summary": "A single story declaration inside an `<l-stories>` row.\n\nRenders the clickable thumbnail (poster image + centered play overlay).\nThe viewer reads `src`, `poster`, `label`, `handle`, `duration`, and\n`tracks` to play this story when opened.",
10
+ "status": "experimental",
11
+ "appearances": [],
12
+ "import": {
13
+ "css": "luxen-ui/css/story",
14
+ "js": "luxen-ui/story"
15
+ },
16
+ "properties": [
17
+ {
18
+ "name": "src",
19
+ "attribute": "src",
20
+ "type": "string",
21
+ "default": "''",
22
+ "reflects": true,
23
+ "description": "Video URL."
24
+ },
25
+ {
26
+ "name": "poster",
27
+ "attribute": "poster",
28
+ "type": "string",
29
+ "default": "''",
30
+ "reflects": true,
31
+ "description": "Thumbnail poster image. Falls back to the first video frame."
32
+ },
33
+ {
34
+ "name": "preview",
35
+ "attribute": "preview",
36
+ "type": "string",
37
+ "default": "''",
38
+ "reflects": true,
39
+ "description": "Optional short looping preview video (URL of a small dedicated MP4, typically 2-3s, 480p, no audio). When set, the thumbnail renders this video muted+looped+autoplayed in place of `poster`. Gated by an `IntersectionObserver` so off-screen previews don't play."
40
+ },
41
+ {
42
+ "name": "label",
43
+ "attribute": "label",
44
+ "type": "string",
45
+ "default": "''",
46
+ "reflects": true,
47
+ "description": "Caption shown below the thumbnail (or overlaid, depending on appearance) and used as the trigger `aria-label`."
48
+ },
49
+ {
50
+ "name": "duration",
51
+ "attribute": "duration",
52
+ "type": "number",
53
+ "default": "0",
54
+ "reflects": false,
55
+ "description": "Override the progress duration in seconds. Defaults to the video's metadata duration."
56
+ },
57
+ {
58
+ "name": "seen",
59
+ "attribute": "seen",
60
+ "type": "boolean",
61
+ "default": "false",
62
+ "reflects": true,
63
+ "description": "Mark this story as already viewed (faded ring). Reflected."
64
+ },
65
+ {
66
+ "name": "pulse",
67
+ "attribute": "pulse",
68
+ "type": "boolean",
69
+ "default": "false",
70
+ "reflects": true,
71
+ "description": "Pulse the thumbnail with an animated halo + a subtle scale tap to draw attention. Reflected."
72
+ },
73
+ {
74
+ "name": "chapters",
75
+ "attribute": "chapters",
76
+ "type": "string",
77
+ "default": "''",
78
+ "reflects": false,
79
+ "description": "Chapter start times within the video, comma-separated seconds (e.g. `0,5,12,20`). `0` is implicit if omitted. Empty = single chapter spanning the full video."
80
+ },
81
+ {
82
+ "name": "tracks",
83
+ "attribute": "tracks",
84
+ "type": "string",
85
+ "default": "''",
86
+ "reflects": false,
87
+ "description": "Comma-separated VTT track URLs for captions."
88
+ }
89
+ ],
90
+ "attributes": [],
91
+ "events": [],
92
+ "methods": [
93
+ {
94
+ "name": "getChapterStarts",
95
+ "params": [],
96
+ "returns": "number[]",
97
+ "description": "Parsed chapter start times. Always begins with `0`, sorted, deduplicated. Empty `chapters` returns `[0]`."
98
+ }
99
+ ],
100
+ "slots": [
101
+ {
102
+ "name": "cta",
103
+ "description": "Overlay surfaced by the viewer when this story is active (e.g. product card, link)."
104
+ },
105
+ {
106
+ "name": "header",
107
+ "description": "Header overlay (e.g. avatar + author)."
108
+ }
109
+ ],
110
+ "cssClasses": [
111
+ {
112
+ "name": ".l-story-trigger",
113
+ "description": "The clickable thumbnail button wrapper."
114
+ },
115
+ {
116
+ "name": ".l-story-thumb",
117
+ "description": "The poster/video thumbnail frame (ring + offset)."
118
+ },
119
+ {
120
+ "name": ".l-story-play",
121
+ "description": "The centered play-icon overlay."
122
+ },
123
+ {
124
+ "name": ".l-story-label",
125
+ "description": "The caption text below the thumbnail."
126
+ }
127
+ ],
128
+ "cssParts": [],
129
+ "cssProperties": [
130
+ {
131
+ "name": "--pulse-color",
132
+ "default": null,
133
+ "description": "Color of the attention pulse ring (only with the `pulse` attribute)."
134
+ },
135
+ {
136
+ "name": "--pulse-scale",
137
+ "default": "1.2",
138
+ "description": "Peak scale of the pulse animation."
139
+ },
140
+ {
141
+ "name": "--pulse-duration",
142
+ "default": "1.6s",
143
+ "description": "Duration of one pulse cycle."
144
+ }
145
+ ],
146
+ "commands": [],
147
+ "examples": []
148
+ }