@k8slens/element-components 3.3.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 (187) hide show
  1. package/README.md +124 -0
  2. package/dist/index.css +3455 -0
  3. package/dist/index.d.ts +71 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +4024 -0
  6. package/dist/src/element-components.performance-test.d.ts +2 -0
  7. package/dist/src/element-components.performance-test.d.ts.map +1 -0
  8. package/dist/src/elements/minimal-div.d.ts +30 -0
  9. package/dist/src/elements/minimal-div.d.ts.map +1 -0
  10. package/dist/src/elements.d.ts +3379 -0
  11. package/dist/src/elements.d.ts.map +1 -0
  12. package/dist/src/feature.d.ts +2 -0
  13. package/dist/src/feature.d.ts.map +1 -0
  14. package/dist/src/plugins/_shared/colors.d.ts +2 -0
  15. package/dist/src/plugins/_shared/colors.d.ts.map +1 -0
  16. package/dist/src/plugins/_shared/directions.d.ts +9 -0
  17. package/dist/src/plugins/_shared/directions.d.ts.map +1 -0
  18. package/dist/src/plugins/_shared/sizes.d.ts +14 -0
  19. package/dist/src/plugins/_shared/sizes.d.ts.map +1 -0
  20. package/dist/src/plugins/absolute/absolute.d.ts +10 -0
  21. package/dist/src/plugins/absolute/absolute.d.ts.map +1 -0
  22. package/dist/src/plugins/anchor/anchor.d.ts +56 -0
  23. package/dist/src/plugins/anchor/anchor.d.ts.map +1 -0
  24. package/dist/src/plugins/area/area.d.ts +15 -0
  25. package/dist/src/plugins/area/area.d.ts.map +1 -0
  26. package/dist/src/plugins/area-content/area-content.d.ts +12 -0
  27. package/dist/src/plugins/area-content/area-content.d.ts.map +1 -0
  28. package/dist/src/plugins/background-color/background-color.d.ts +22 -0
  29. package/dist/src/plugins/background-color/background-color.d.ts.map +1 -0
  30. package/dist/src/plugins/block/block.d.ts +9 -0
  31. package/dist/src/plugins/block/block.d.ts.map +1 -0
  32. package/dist/src/plugins/border/border.d.ts +28 -0
  33. package/dist/src/plugins/border/border.d.ts.map +1 -0
  34. package/dist/src/plugins/border/get-corner-styles.d.ts +10 -0
  35. package/dist/src/plugins/border/get-corner-styles.d.ts.map +1 -0
  36. package/dist/src/plugins/border/get-side-styles.d.ts +9 -0
  37. package/dist/src/plugins/border/get-side-styles.d.ts.map +1 -0
  38. package/dist/src/plugins/border/types.d.ts +9 -0
  39. package/dist/src/plugins/border/types.d.ts.map +1 -0
  40. package/dist/src/plugins/box-shadow/box-shadow.d.ts +9 -0
  41. package/dist/src/plugins/box-shadow/box-shadow.d.ts.map +1 -0
  42. package/dist/src/plugins/class-name/class-name.d.ts +9 -0
  43. package/dist/src/plugins/class-name/class-name.d.ts.map +1 -0
  44. package/dist/src/plugins/clickable/clickable.d.ts +33 -0
  45. package/dist/src/plugins/clickable/clickable.d.ts.map +1 -0
  46. package/dist/src/plugins/clickable/is-mac.injectable.d.ts +10 -0
  47. package/dist/src/plugins/clickable/is-mac.injectable.d.ts.map +1 -0
  48. package/dist/src/plugins/clickable/on-right-trigger.injectable.d.ts +2 -0
  49. package/dist/src/plugins/clickable/on-right-trigger.injectable.d.ts.map +1 -0
  50. package/dist/src/plugins/color/color.d.ts +23 -0
  51. package/dist/src/plugins/color/color.d.ts.map +1 -0
  52. package/dist/src/plugins/cursor/cursor.d.ts +10 -0
  53. package/dist/src/plugins/cursor/cursor.d.ts.map +1 -0
  54. package/dist/src/plugins/display-contents/display-contents.d.ts +9 -0
  55. package/dist/src/plugins/display-contents/display-contents.d.ts.map +1 -0
  56. package/dist/src/plugins/draggable-and-droppable/_shared/dragged-item-state.injectable.d.ts +3 -0
  57. package/dist/src/plugins/draggable-and-droppable/_shared/dragged-item-state.injectable.d.ts.map +1 -0
  58. package/dist/src/plugins/draggable-and-droppable/draggable.d.ts +9 -0
  59. package/dist/src/plugins/draggable-and-droppable/draggable.d.ts.map +1 -0
  60. package/dist/src/plugins/draggable-and-droppable/droppable.d.ts +3 -0
  61. package/dist/src/plugins/draggable-and-droppable/droppable.d.ts.map +1 -0
  62. package/dist/src/plugins/draggable-and-droppable/get-draggable-context.d.ts +18 -0
  63. package/dist/src/plugins/draggable-and-droppable/get-draggable-context.d.ts.map +1 -0
  64. package/dist/src/plugins/draggable-and-droppable/item-being-dragged.injectable.d.ts +9 -0
  65. package/dist/src/plugins/draggable-and-droppable/item-being-dragged.injectable.d.ts.map +1 -0
  66. package/dist/src/plugins/draggable-and-droppable/make-sure-drag-and-drop-events-have-time-to-happen/make-sure-drag-and-drop-events-have-time-to-happen.default-override.d.ts +4 -0
  67. package/dist/src/plugins/draggable-and-droppable/make-sure-drag-and-drop-events-have-time-to-happen/make-sure-drag-and-drop-events-have-time-to-happen.default-override.d.ts.map +1 -0
  68. package/dist/src/plugins/draggable-and-droppable/make-sure-drag-and-drop-events-have-time-to-happen/make-sure-drag-and-drop-events-have-time-to-happen.injectable.d.ts +2 -0
  69. package/dist/src/plugins/draggable-and-droppable/make-sure-drag-and-drop-events-have-time-to-happen/make-sure-drag-and-drop-events-have-time-to-happen.injectable.d.ts.map +1 -0
  70. package/dist/src/plugins/drop-down-menu/drop-down-menu.d.ts +20 -0
  71. package/dist/src/plugins/drop-down-menu/drop-down-menu.d.ts.map +1 -0
  72. package/dist/src/plugins/enabled/enabled.d.ts +20 -0
  73. package/dist/src/plugins/enabled/enabled.d.ts.map +1 -0
  74. package/dist/src/plugins/faded/faded.d.ts +13 -0
  75. package/dist/src/plugins/faded/faded.d.ts.map +1 -0
  76. package/dist/src/plugins/flex/flex.d.ts +28 -0
  77. package/dist/src/plugins/flex/flex.d.ts.map +1 -0
  78. package/dist/src/plugins/flex-child/flex-child.d.ts +24 -0
  79. package/dist/src/plugins/flex-child/flex-child.d.ts.map +1 -0
  80. package/dist/src/plugins/floating/floating.d.ts +24 -0
  81. package/dist/src/plugins/floating/floating.d.ts.map +1 -0
  82. package/dist/src/plugins/focusable/_private/_shared/focusable-event.d.ts +7 -0
  83. package/dist/src/plugins/focusable/_private/_shared/focusable-event.d.ts.map +1 -0
  84. package/dist/src/plugins/focusable/_private/handle-blur.d.ts +6 -0
  85. package/dist/src/plugins/focusable/_private/handle-blur.d.ts.map +1 -0
  86. package/dist/src/plugins/focusable/_private/handle-focus.d.ts +6 -0
  87. package/dist/src/plugins/focusable/_private/handle-focus.d.ts.map +1 -0
  88. package/dist/src/plugins/focusable/_private/use-cleanup-on-unmount.d.ts +4 -0
  89. package/dist/src/plugins/focusable/_private/use-cleanup-on-unmount.d.ts.map +1 -0
  90. package/dist/src/plugins/focusable/_private/use-keyboard-navigation.d.ts +8 -0
  91. package/dist/src/plugins/focusable/_private/use-keyboard-navigation.d.ts.map +1 -0
  92. package/dist/src/plugins/focusable/_private/use-programmatic-focusing.d.ts +4 -0
  93. package/dist/src/plugins/focusable/_private/use-programmatic-focusing.d.ts.map +1 -0
  94. package/dist/src/plugins/focusable/_private/use-update-when-props-change.d.ts +4 -0
  95. package/dist/src/plugins/focusable/_private/use-update-when-props-change.d.ts.map +1 -0
  96. package/dist/src/plugins/focusable/_shared/focusable-html-element-ref-set.injectable.d.ts +6 -0
  97. package/dist/src/plugins/focusable/_shared/focusable-html-element-ref-set.injectable.d.ts.map +1 -0
  98. package/dist/src/plugins/focusable/_shared/focusable-item-state.injectable.d.ts +3 -0
  99. package/dist/src/plugins/focusable/_shared/focusable-item-state.injectable.d.ts.map +1 -0
  100. package/dist/src/plugins/focusable/_shared/keyboard-navigation-state.injectable.d.ts +19 -0
  101. package/dist/src/plugins/focusable/_shared/keyboard-navigation-state.injectable.d.ts.map +1 -0
  102. package/dist/src/plugins/focusable/do-focus.injectable.d.ts +8 -0
  103. package/dist/src/plugins/focusable/do-focus.injectable.d.ts.map +1 -0
  104. package/dist/src/plugins/focusable/focusable.d.ts +27 -0
  105. package/dist/src/plugins/focusable/focusable.d.ts.map +1 -0
  106. package/dist/src/plugins/focusable/get-focusable-context.d.ts +33 -0
  107. package/dist/src/plugins/focusable/get-focusable-context.d.ts.map +1 -0
  108. package/dist/src/plugins/focusable/item-being-focused.injectable.d.ts +9 -0
  109. package/dist/src/plugins/focusable/item-being-focused.injectable.d.ts.map +1 -0
  110. package/dist/src/plugins/font/font.d.ts +32 -0
  111. package/dist/src/plugins/font/font.d.ts.map +1 -0
  112. package/dist/src/plugins/gradient/gradient.d.ts +9 -0
  113. package/dist/src/plugins/gradient/gradient.d.ts.map +1 -0
  114. package/dist/src/plugins/grayscale/grayscale.d.ts +14 -0
  115. package/dist/src/plugins/grayscale/grayscale.d.ts.map +1 -0
  116. package/dist/src/plugins/grid/grid.d.ts +19 -0
  117. package/dist/src/plugins/grid/grid.d.ts.map +1 -0
  118. package/dist/src/plugins/height/height.d.ts +15 -0
  119. package/dist/src/plugins/height/height.d.ts.map +1 -0
  120. package/dist/src/plugins/hidden/hidden.d.ts +9 -0
  121. package/dist/src/plugins/hidden/hidden.d.ts.map +1 -0
  122. package/dist/src/plugins/hoverable/computed-now.injectable.d.ts +12 -0
  123. package/dist/src/plugins/hoverable/computed-now.injectable.d.ts.map +1 -0
  124. package/dist/src/plugins/hoverable/hoverable-by-dragging.d.ts +12 -0
  125. package/dist/src/plugins/hoverable/hoverable-by-dragging.d.ts.map +1 -0
  126. package/dist/src/plugins/hoverable/hoverable.d.ts +27 -0
  127. package/dist/src/plugins/hoverable/hoverable.d.ts.map +1 -0
  128. package/dist/src/plugins/hoverable/hovered-item-state.injectable.d.ts +14 -0
  129. package/dist/src/plugins/hoverable/hovered-item-state.injectable.d.ts.map +1 -0
  130. package/dist/src/plugins/hoverable/item-being-hovered.injectable.d.ts +9 -0
  131. package/dist/src/plugins/hoverable/item-being-hovered.injectable.d.ts.map +1 -0
  132. package/dist/src/plugins/hoverable/local-hoverable/_private/context-is-being-hovered.injectable.d.ts +4 -0
  133. package/dist/src/plugins/hoverable/local-hoverable/_private/context-is-being-hovered.injectable.d.ts.map +1 -0
  134. package/dist/src/plugins/hoverable/local-hoverable/local-hoverable.d.ts +7 -0
  135. package/dist/src/plugins/hoverable/local-hoverable/local-hoverable.d.ts.map +1 -0
  136. package/dist/src/plugins/invisible-backdrop/invisible-backdrop.d.ts +9 -0
  137. package/dist/src/plugins/invisible-backdrop/invisible-backdrop.d.ts.map +1 -0
  138. package/dist/src/plugins/margin/margin.d.ts +18 -0
  139. package/dist/src/plugins/margin/margin.d.ts.map +1 -0
  140. package/dist/src/plugins/no-pointer-events/no-pointer-events.d.ts +9 -0
  141. package/dist/src/plugins/no-pointer-events/no-pointer-events.d.ts.map +1 -0
  142. package/dist/src/plugins/offset/offset.d.ts +17 -0
  143. package/dist/src/plugins/offset/offset.d.ts.map +1 -0
  144. package/dist/src/plugins/offset-children/offset-children.d.ts +17 -0
  145. package/dist/src/plugins/offset-children/offset-children.d.ts.map +1 -0
  146. package/dist/src/plugins/on-outside-click/on-outside-click.d.ts +22 -0
  147. package/dist/src/plugins/on-outside-click/on-outside-click.d.ts.map +1 -0
  148. package/dist/src/plugins/outline/outline.d.ts +21 -0
  149. package/dist/src/plugins/outline/outline.d.ts.map +1 -0
  150. package/dist/src/plugins/overflow/overflow.d.ts +18 -0
  151. package/dist/src/plugins/overflow/overflow.d.ts.map +1 -0
  152. package/dist/src/plugins/padding/padding.d.ts +18 -0
  153. package/dist/src/plugins/padding/padding.d.ts.map +1 -0
  154. package/dist/src/plugins/popover/popover.d.ts +28 -0
  155. package/dist/src/plugins/popover/popover.d.ts.map +1 -0
  156. package/dist/src/plugins/ref/ref.d.ts +13 -0
  157. package/dist/src/plugins/ref/ref.d.ts.map +1 -0
  158. package/dist/src/plugins/ref/type-test.d.ts +3 -0
  159. package/dist/src/plugins/ref/type-test.d.ts.map +1 -0
  160. package/dist/src/plugins/relative/relative.d.ts +11 -0
  161. package/dist/src/plugins/relative/relative.d.ts.map +1 -0
  162. package/dist/src/plugins/size/size.d.ts +17 -0
  163. package/dist/src/plugins/size/size.d.ts.map +1 -0
  164. package/dist/src/plugins/style/style.d.ts +6 -0
  165. package/dist/src/plugins/style/style.d.ts.map +1 -0
  166. package/dist/src/plugins/text-align/text-align.d.ts +9 -0
  167. package/dist/src/plugins/text-align/text-align.d.ts.map +1 -0
  168. package/dist/src/plugins/tint/tint.d.ts +19 -0
  169. package/dist/src/plugins/tint/tint.d.ts.map +1 -0
  170. package/dist/src/plugins/tooltip/tooltip-delay/tooltip-delay.default-override.d.ts +4 -0
  171. package/dist/src/plugins/tooltip/tooltip-delay/tooltip-delay.default-override.d.ts.map +1 -0
  172. package/dist/src/plugins/tooltip/tooltip-delay/tooltip-delay.injectable.d.ts +2 -0
  173. package/dist/src/plugins/tooltip/tooltip-delay/tooltip-delay.injectable.d.ts.map +1 -0
  174. package/dist/src/plugins/tooltip/tooltip.d.ts +64 -0
  175. package/dist/src/plugins/tooltip/tooltip.d.ts.map +1 -0
  176. package/dist/src/plugins/transition/transition.d.ts +9 -0
  177. package/dist/src/plugins/transition/transition.d.ts.map +1 -0
  178. package/dist/src/plugins/visually-hidden/visually-hidden.d.ts +9 -0
  179. package/dist/src/plugins/visually-hidden/visually-hidden.d.ts.map +1 -0
  180. package/dist/src/plugins/width/width.d.ts +15 -0
  181. package/dist/src/plugins/width/width.d.ts.map +1 -0
  182. package/dist/src/remove-css-module-clutter.default-override.d.ts +3 -0
  183. package/dist/src/remove-css-module-clutter.default-override.d.ts.map +1 -0
  184. package/dist/src/test-util-runnable.injectable.d.ts +4 -0
  185. package/dist/src/test-util-runnable.injectable.d.ts.map +1 -0
  186. package/dist/tsconfig.tsbuildinfo +1 -0
  187. package/package.json +72 -0
package/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # @k8slens/element-components
2
+
3
+ The React primitives Lens's own interface is built from: thin wrappers over HTML elements, with layout, styling and behaviour supplied by `$props` rather than by stylesheets. Anything built with them inherits the app's spacing scale, colours and theme.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @k8slens/element-components
9
+ ```
10
+
11
+ ## The model
12
+
13
+ Ordinary props pass through to the DOM. Props prefixed with `$` do not — they are read by plugins:
14
+
15
+ ```tsx
16
+ import { Div, Span, Button } from "@k8slens/element-components";
17
+
18
+ export const Example = () => (
19
+ <Div $flex={{ direction: "vertical", gap: "m" }} $padding="l">
20
+ <Span $font={{ size: "xl", bold: true }}>Hello</Span>
21
+ <Button $onClick={doTheThing} $tooltip="Does the thing">
22
+ Do the thing
23
+ </Button>
24
+ </Div>
25
+ );
26
+ ```
27
+
28
+ ### Elements
29
+
30
+ `A`, `Button`, `Canvas`, `ClickableDiv`, `ClickableLi`, `Code`, `Dialog`, `Div`, `Form`, `H1`–`H6`, `I`, `Img`, `Input`, `Label`, `Li`, `Nav`, `Ol`, `P`, `Pre`, `Span`, `Svg`, `Table`, `TBody`, `Td`, `TextArea`, `Th`, `Tr`, `Ul`.
31
+
32
+ ### The size scale
33
+
34
+ Anything taking a size takes a t-shirt size rather than pixels: `zero`, `xxxs`, `xxs`, `xs`, `s`, `m`, `l`, `xl`, `xxl`, `3xl` … `11xl`. One step is 4px.
35
+
36
+ ## The `$props`
37
+
38
+ Layout
39
+ : `$flex`, `$flexChild`, `$grid`, `$area`, `$areaContent`, `$offset`, `$offsetChildren`, `$block`, `$displayContents`
40
+
41
+ The box
42
+ : `$size`, `$width`, `$height`, `$margin`, `$padding`, `$border`, `$boxShadow`, `$outline`, `$overflow`
43
+
44
+ Appearance
45
+ : `$color`, `$backgroundColor`, `$font`, `$textAlign`, `$gradient`, `$tint`, `$grayscale`, `$faded`, `$transition`, `$className`, `$style`
46
+
47
+ Position and overlays
48
+ : `$relative`, `$absolute`, `$fixed`, `$anchor`, `$anchoredAt`, `$floating`, `$popover`, `$invisibleBackdrop`
49
+
50
+ Interaction
51
+ : `$onClick`, `$onDoubleClick`, `$onMiddleClick`, `$onRightClick`, `$onOnlyMouseClick`, `$onOutsideClick`, `$cursor`, `$enabled`, `$disabled`
52
+
53
+ Stateful behaviour
54
+ : `$tooltip`, `$hoverable`, `$hoverableByDragging`, `$focusable`, `$draggable`, `$droppable`, `$dropDownMenu`
55
+
56
+ Visibility and escape hatches
57
+ : `$hidden`, `$visuallyHidden`, `$noPointerEvents`, `$ref`, `$wrapper`
58
+
59
+ The types are the reference for each one's values; the sections below cover the ones whose shape is easy to get wrong.
60
+
61
+ ### Colour comes from the theme
62
+
63
+ Named roles, not literals. Text takes `textDefault`, `textMuted` or `textHighlight`; backgrounds take `backgroundPrimary`, `backgroundSecondary` or `backgroundPrimaryDimmed`; borders take `borderPrimary`. Status and emphasis have roles of their own (`primary`, `success`, `notice`, `warning`, `critical`, `link`, `code`), and the nominal palette (`grey10`…`grey100`, `white`, `inherit`, `transparent`) is available, but a role survives a change to the palette where a nominal grey does not.
64
+
65
+ ```tsx
66
+ <Span $color="textMuted" />
67
+ <Div $backgroundColor="backgroundPrimary" />
68
+ ```
69
+
70
+ ### Borders
71
+
72
+ `color` is a theme role or nominal colour, `width` is on the t-shirt scale, and `radius` is one of `zero`, `s`, `m`, `ml`, `l`, `50`, `full` (or `true` for the default):
73
+
74
+ ```tsx
75
+ <Div $border={{ color: "borderPrimary", width: "xxs", radius: "m" }} $boxShadow />
76
+ ```
77
+
78
+ ### Sizes accept a range
79
+
80
+ The range object's own field is named after its prop — `size` for `$size`, `height` for `$height`, `width` for `$width` — alongside `min` and `max`.
81
+
82
+ ```tsx
83
+ <Div $width="full" $height={{ min: "m", height: "l", max: "xl" }} />
84
+ ```
85
+
86
+ ### `$onClick`, not `onClick`
87
+
88
+ `$onClick` also activates on Enter, and on Space when the element itself is focused, and it respects `$enabled`. Plain `onClick` does neither, which is the usual cause of a control a keyboard user cannot reach.
89
+
90
+ ## Passing `$props` through your own components
91
+
92
+ Extend the element's props and spread the rest onto the root element, so callers can lay your component out:
93
+
94
+ ```tsx
95
+ import { Div, type DivProps } from "@k8slens/element-components";
96
+
97
+ interface StatusBadgeProps extends DivProps {
98
+ readonly status: "success" | "error" | "pending";
99
+ }
100
+
101
+ export const StatusBadge = ({ status, ...rest }: StatusBadgeProps) => (
102
+ <Div $flex={{ direction: "horizontal", gap: "s" }} {...rest}>
103
+ {status}
104
+ </Div>
105
+ );
106
+ ```
107
+
108
+ Prop types are exported per element: `DivProps`, `ButtonProps`, and so on.
109
+
110
+ ## Styles and registration
111
+
112
+ The stylesheet is a separate entry point:
113
+
114
+ ```ts
115
+ import "@k8slens/element-components/styles";
116
+ ```
117
+
118
+ The package also exports a Feature, which the application registers:
119
+
120
+ ```ts
121
+ import { elementComponentFeature } from "@k8slens/element-components";
122
+ ```
123
+
124
+ An extension does not register it — the host already has. A unit test that renders these components does need it registered in its container.