@smwb/ui-solid 2.0.0 → 2.1.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 (207) hide show
  1. package/README.md +115 -0
  2. package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
  3. package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
  4. package/dist/assets/styles/less/components/breadcrumbs/breadcrumbs.entry.css +1 -1
  5. package/dist/assets/styles/less/components/button/button.entry.css +1 -1
  6. package/dist/assets/styles/less/components/buttonGroup/buttonGroup.entry.css +1 -1
  7. package/dist/assets/styles/less/components/dagView/dagView.entry.css +1 -1
  8. package/dist/assets/styles/less/components/meter/meter.entry.css +1 -1
  9. package/dist/assets/styles/less/components/screenDivider/screenDivider.entry.css +1 -1
  10. package/dist/assets/styles/less/components/sheet/sheet.entry.css +1 -1
  11. package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -1
  12. package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -1
  13. package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
  14. package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
  15. package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
  16. package/dist/assets/styles/less/tokens.entry.css +1 -1
  17. package/dist/components/dataDisplay/avatar/avatar.d.ts +5 -2
  18. package/dist/components/dataDisplay/avatar/avatar.js +9 -9
  19. package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
  20. package/dist/components/dataDisplay/chart/chart.d.ts +16 -8
  21. package/dist/components/dataDisplay/chart/chartFull.d.ts +14 -0
  22. package/dist/components/dataDisplay/chart/core.d.ts +19 -0
  23. package/dist/components/dataDisplay/chart/index.d.ts +1 -1
  24. package/dist/components/dataDisplay/dagView/dagView.d.ts +4 -0
  25. package/dist/components/dataDisplay/dagView/dagView.js +124 -123
  26. package/dist/components/dataDisplay/dagView/dagView.js.map +1 -1
  27. package/dist/components/dataDisplay/dagView/index.d.ts +1 -1
  28. package/dist/components/dataDisplay/meter/index.d.ts +1 -1
  29. package/dist/components/dataDisplay/meter/meter.d.ts +14 -0
  30. package/dist/components/dataDisplay/meter/meter.js +32 -30
  31. package/dist/components/dataDisplay/meter/meter.js.map +1 -1
  32. package/dist/components/dataDisplay/statusDot/index.d.ts +1 -1
  33. package/dist/components/dataDisplay/statusDot/statusDot.d.ts +10 -1
  34. package/dist/components/dataDisplay/statusDot/statusDot.js +20 -11
  35. package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -1
  36. package/dist/components/dataDisplay/treeView/treeView.d.ts +18 -2
  37. package/dist/components/dataDisplay/treeView/treeView.js +140 -121
  38. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  39. package/dist/components/inputs/button/button.d.ts +7 -0
  40. package/dist/components/inputs/button/button.js +57 -51
  41. package/dist/components/inputs/button/button.js.map +1 -1
  42. package/dist/components/inputs/toggle/toggle.d.ts +6 -0
  43. package/dist/components/inputs/toggle/toggle.js +23 -23
  44. package/dist/components/inputs/toggle/toggle.js.map +1 -1
  45. package/dist/components/layout/appLayout/appLayout.d.ts +6 -1
  46. package/dist/components/layout/appLayout/appLayout.js +49 -42
  47. package/dist/components/layout/appLayout/appLayout.js.map +1 -1
  48. package/dist/components/layout/screenDivider/screenDivider.d.ts +12 -0
  49. package/dist/components/layout/screenDivider/screenDivider.js +87 -46
  50. package/dist/components/layout/screenDivider/screenDivider.js.map +1 -1
  51. package/dist/components/layout/sheet/sheet.d.ts +11 -0
  52. package/dist/components/layout/sheet/sheet.js +122 -102
  53. package/dist/components/layout/sheet/sheet.js.map +1 -1
  54. package/dist/components/layout/tabGroups/index.d.ts +1 -1
  55. package/dist/components/layout/tabGroups/tabGroups.d.ts +44 -1
  56. package/dist/components/layout/tabGroups/tabGroups.js +500 -460
  57. package/dist/components/layout/tabGroups/tabGroups.js.map +1 -1
  58. package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +16 -0
  59. package/dist/components/layout/tabGroups/tabGroupsFocus.js +102 -70
  60. package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -1
  61. package/dist/components/navigation/appBar/appBar.d.ts +12 -0
  62. package/dist/components/navigation/appBar/appBar.js.map +1 -1
  63. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +9 -0
  64. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +47 -31
  65. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  66. package/dist/components/navigation/tabs/tab/tab.js +71 -68
  67. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  68. package/dist/components/navigation/tabs/tabs.d.ts +11 -0
  69. package/dist/components/navigation/tabs/tabs.js +19 -16
  70. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  71. package/dist/components/navigation/tabs/tabsContext.d.ts +2 -0
  72. package/dist/components/navigation/tabs/tabsContext.js.map +1 -1
  73. package/dist/headless/components/dataDisplay/avatar/avatar.js +9 -9
  74. package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
  75. package/dist/headless/components/dataDisplay/dagView/dagView.js +133 -132
  76. package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -1
  77. package/dist/headless/components/dataDisplay/meter/meter.js +32 -30
  78. package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -1
  79. package/dist/headless/components/dataDisplay/statusDot/statusDot.js +19 -10
  80. package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -1
  81. package/dist/headless/components/dataDisplay/treeView/treeView.js +139 -120
  82. package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
  83. package/dist/headless/components/inputs/button/button.js +57 -51
  84. package/dist/headless/components/inputs/button/button.js.map +1 -1
  85. package/dist/headless/components/inputs/toggle/toggle.js +23 -23
  86. package/dist/headless/components/inputs/toggle/toggle.js.map +1 -1
  87. package/dist/headless/components/layout/appLayout/appLayout.js +52 -45
  88. package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
  89. package/dist/headless/components/layout/screenDivider/screenDivider.js +88 -47
  90. package/dist/headless/components/layout/screenDivider/screenDivider.js.map +1 -1
  91. package/dist/headless/components/layout/sheet/sheet.js +124 -104
  92. package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
  93. package/dist/headless/components/layout/tabGroups/tabGroups.js +500 -460
  94. package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -1
  95. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +102 -70
  96. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -1
  97. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  98. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js +46 -30
  99. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  100. package/dist/headless/components/navigation/tabs/tab/tab.js +70 -67
  101. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  102. package/dist/headless/components/navigation/tabs/tabs.js +19 -16
  103. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  104. package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -1
  105. package/dist/headless/primitives/publishHeaderOffset.js +19 -0
  106. package/dist/headless/primitives/publishHeaderOffset.js.map +1 -0
  107. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx +1 -0
  108. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  109. package/dist/headless/source/components/dataDisplay/chart/chart.jsx +14 -12
  110. package/dist/headless/source/components/dataDisplay/chart/chart.jsx.map +1 -1
  111. package/dist/headless/source/components/dataDisplay/chart/chartFull.js +12 -0
  112. package/dist/headless/source/components/dataDisplay/chart/chartFull.js.map +7 -0
  113. package/dist/headless/source/components/dataDisplay/chart/core.js +11 -0
  114. package/dist/headless/source/components/dataDisplay/chart/core.js.map +7 -0
  115. package/dist/headless/source/components/dataDisplay/chart/index.js +1 -1
  116. package/dist/headless/source/components/dataDisplay/chart/index.js.map +1 -1
  117. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx +2 -1
  118. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  119. package/dist/headless/source/components/dataDisplay/dagView/index.js.map +2 -2
  120. package/dist/headless/source/components/dataDisplay/meter/index.js.map +1 -1
  121. package/dist/headless/source/components/dataDisplay/meter/meter.jsx +14 -2
  122. package/dist/headless/source/components/dataDisplay/meter/meter.jsx.map +1 -1
  123. package/dist/headless/source/components/dataDisplay/statusDot/index.js.map +1 -1
  124. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx +13 -1
  125. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -1
  126. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx +16 -3
  127. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  128. package/dist/headless/source/components/inputs/button/button.jsx +26 -1
  129. package/dist/headless/source/components/inputs/button/button.jsx.map +1 -1
  130. package/dist/headless/source/components/inputs/toggle/toggle.jsx +9 -2
  131. package/dist/headless/source/components/inputs/toggle/toggle.jsx.map +1 -1
  132. package/dist/headless/source/components/layout/appLayout/appLayout.jsx +14 -2
  133. package/dist/headless/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  134. package/dist/headless/source/components/layout/screenDivider/screenDivider.jsx +102 -18
  135. package/dist/headless/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
  136. package/dist/headless/source/components/layout/sheet/sheet.jsx +14 -1
  137. package/dist/headless/source/components/layout/sheet/sheet.jsx.map +1 -1
  138. package/dist/headless/source/components/layout/tabGroups/index.js.map +1 -1
  139. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx +55 -1
  140. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx.map +1 -1
  141. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js +42 -0
  142. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js.map +2 -2
  143. package/dist/headless/source/components/navigation/appBar/appBar.jsx.map +1 -1
  144. package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx +39 -4
  145. package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
  146. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +7 -1
  147. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  148. package/dist/headless/source/components/navigation/tabs/tabs.jsx +5 -1
  149. package/dist/headless/source/components/navigation/tabs/tabs.jsx.map +1 -1
  150. package/dist/headless/source/components/navigation/tabs/tabsContext.js.map +2 -2
  151. package/dist/headless/source/index.js +8 -1
  152. package/dist/headless/source/index.js.map +2 -2
  153. package/dist/headless/source/primitives/publishHeaderOffset.js +34 -0
  154. package/dist/headless/source/primitives/publishHeaderOffset.js.map +7 -0
  155. package/dist/index.d.ts +5 -5
  156. package/dist/primitives/publishHeaderOffset.d.ts +7 -0
  157. package/dist/primitives/publishHeaderOffset.js +19 -0
  158. package/dist/primitives/publishHeaderOffset.js.map +1 -0
  159. package/dist/source/components/dataDisplay/avatar/avatar.jsx +1 -0
  160. package/dist/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  161. package/dist/source/components/dataDisplay/chart/chart.jsx +14 -12
  162. package/dist/source/components/dataDisplay/chart/chart.jsx.map +1 -1
  163. package/dist/source/components/dataDisplay/chart/chartFull.js +12 -0
  164. package/dist/source/components/dataDisplay/chart/chartFull.js.map +7 -0
  165. package/dist/source/components/dataDisplay/chart/core.js +11 -0
  166. package/dist/source/components/dataDisplay/chart/core.js.map +7 -0
  167. package/dist/source/components/dataDisplay/chart/index.js +1 -1
  168. package/dist/source/components/dataDisplay/chart/index.js.map +1 -1
  169. package/dist/source/components/dataDisplay/dagView/dagView.jsx +2 -1
  170. package/dist/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  171. package/dist/source/components/dataDisplay/dagView/index.js.map +2 -2
  172. package/dist/source/components/dataDisplay/meter/index.js.map +1 -1
  173. package/dist/source/components/dataDisplay/meter/meter.jsx +14 -2
  174. package/dist/source/components/dataDisplay/meter/meter.jsx.map +1 -1
  175. package/dist/source/components/dataDisplay/statusDot/index.js.map +1 -1
  176. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx +13 -1
  177. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -1
  178. package/dist/source/components/dataDisplay/treeView/treeView.jsx +16 -3
  179. package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  180. package/dist/source/components/inputs/button/button.jsx +26 -1
  181. package/dist/source/components/inputs/button/button.jsx.map +1 -1
  182. package/dist/source/components/inputs/toggle/toggle.jsx +9 -2
  183. package/dist/source/components/inputs/toggle/toggle.jsx.map +1 -1
  184. package/dist/source/components/layout/appLayout/appLayout.jsx +14 -2
  185. package/dist/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  186. package/dist/source/components/layout/screenDivider/screenDivider.jsx +102 -18
  187. package/dist/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
  188. package/dist/source/components/layout/sheet/sheet.jsx +14 -1
  189. package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
  190. package/dist/source/components/layout/tabGroups/index.js.map +1 -1
  191. package/dist/source/components/layout/tabGroups/tabGroups.jsx +55 -1
  192. package/dist/source/components/layout/tabGroups/tabGroups.jsx.map +1 -1
  193. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js +42 -0
  194. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js.map +2 -2
  195. package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
  196. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx +39 -4
  197. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
  198. package/dist/source/components/navigation/tabs/tab/tab.jsx +7 -1
  199. package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  200. package/dist/source/components/navigation/tabs/tabs.jsx +5 -1
  201. package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
  202. package/dist/source/components/navigation/tabs/tabsContext.js.map +2 -2
  203. package/dist/source/index.js +8 -1
  204. package/dist/source/index.js.map +2 -2
  205. package/dist/source/primitives/publishHeaderOffset.js +34 -0
  206. package/dist/source/primitives/publishHeaderOffset.js.map +7 -0
  207. package/package.json +9 -3
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.js","sources":["../../../../src/components/dataDisplay/avatar/avatar.tsx"],"sourcesContent":["import {\n type JSX,\n type ParentProps,\n Show,\n children as resolveChildren,\n createSignal,\n mergeProps,\n splitProps,\n} from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport { mergeStyle } from \"../../../primitives/mergeStyle\";\n\nexport type AvatarSize = \"small\" | \"medium\" | \"large\";\n\nexport interface AvatarProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /** Image source. Falls back to children (initials / icon) on error or when absent. */\n src?: string | undefined;\n alt?: string | undefined;\n /** Preset size or an explicit pixel value. */\n size?: AvatarSize | number;\n variant?: \"circular\" | \"rounded\" | \"square\";\n /** Background color for the fallback (initials / icon). */\n color?: string;\n /** Extra attributes forwarded to the underlying <img> (srcSet, loading…). */\n imgProps?: JSX.ImgHTMLAttributes<HTMLImageElement>;\n /** Test id of the root `<div>`; `avatar` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\nconst isPresetSize = (size: AvatarSize | number): size is AvatarSize => typeof size === \"string\";\n\nexport function Avatar(props: ParentProps<AvatarProps>): JSX.Element {\n const merged = mergeProps({ size: \"medium\" as AvatarSize | number, variant: \"circular\" as const }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"src\",\n \"alt\",\n \"size\",\n \"variant\",\n \"color\",\n \"style\",\n \"imgProps\",\n \"children\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const [imgFailed, setImgFailed] = createSignal(false);\n const showImage = (): boolean => Boolean(local.src) && !imgFailed();\n\n const inlineStyle = (): JSX.CSSProperties | string | undefined => {\n const size = local.size;\n return mergeStyle(local.style, {\n ...(isPresetSize(size) ? {} : { width: `${size}px`, height: `${size}px`, \"font-size\": `${size / 2.5}px` }),\n ...(local.color && !showImage() ? { \"background-color\": local.color } : {}),\n });\n };\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid={local[\"data-testid\"] ?? \"avatar\"}\n class={cn(\n \"smwb-avatar\",\n `smwb-avatar_${local.variant}`,\n isPresetSize(local.size) ? `smwb-avatar_${local.size}` : undefined,\n local.class\n )}\n style={inlineStyle()}\n >\n <Show\n when={showImage()}\n fallback={\n <span class=\"smwb-avatar__fallback\" role=\"img\" aria-label={local.alt}>\n {local.children}\n </span>\n }\n >\n <img\n {...(local.imgProps ?? {})}\n class={cn(\"smwb-avatar__img\", local.imgProps?.class)}\n src={local.src}\n alt={local.alt}\n onError={(event) => {\n setImgFailed(true);\n callHandler(local.imgProps?.onError, event);\n }}\n />\n </Show>\n </div>\n );\n}\n\nexport interface AvatarGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /** Maximum avatars to show before collapsing the rest into a \"+N\" surplus. */\n max?: number;\n /** Override the total count used for the surplus label (defaults to children count). */\n total?: number;\n /** Click handler for the \"+N\" surplus chip. */\n onSurplusClick?: () => void;\n /** Accessible name of the \"+N\" surplus chip. */\n surplusAriaLabel?: (count: number) => string;\n /** Size of the \"+N\" surplus chip: match the avatars in the group. */\n size?: AvatarSize | number;\n /** Test id of the root `<div>`; `avatar-group` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function AvatarGroup(props: ParentProps<AvatarGroupProps>): JSX.Element {\n const merged = mergeProps(\n { max: 5, surplusAriaLabel: (count: number) => `${count} more` },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"max\",\n \"total\",\n \"onSurplusClick\",\n \"surplusAriaLabel\",\n \"size\",\n \"children\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const resolved = resolveChildren(() => local.children);\n const items = (): unknown[] => resolved.toArray();\n const totalCount = (): number => local.total ?? items().length;\n const clampedMax = (): number => Math.max(local.max, 1);\n const visible = (): unknown[] => items().slice(0, clampedMax());\n const hidden = (): unknown[] => items().slice(clampedMax());\n const surplus = (): number => totalCount() - visible().length;\n\n // In order, the first avatar first; the \"+N\" chip ends the row.\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid={local[\"data-testid\"] ?? \"avatar-group\"}\n class={cn(\"smwb-avatar-group\", local.class)}\n >\n {visible() as JSX.Element}\n <Show when={surplus() > 0}>\n <Avatar\n class=\"smwb-avatar-group__surplus\"\n size={local.size ?? \"medium\"}\n alt={local.surplusAriaLabel(surplus())}\n onClick={local.onSurplusClick}\n style={local.onSurplusClick ? { cursor: \"pointer\" } : undefined}\n >\n {`+${surplus()}`}\n </Avatar>\n </Show>\n {/* Avatars past max are created with the rest (the children resolve at\n once), so they are rendered, hidden: a server that left them out would\n leave the browser without nodes to hydrate them from. */}\n <Show when={hidden().length > 0}>\n <span class=\"smwb-avatar-group__hidden\" hidden>\n {hidden() as JSX.Element}\n </span>\n </Show>\n </div>\n );\n}\n\nexport default Avatar;\n"],"names":["isPresetSize","size","Avatar","props","merged","mergeProps","variant","local","rest","splitProps","imgFailed","setImgFailed","createSignal","showImage","Boolean","src","inlineStyle","mergeStyle","style","width","height","color","_el$","_tmpl$2","_ref$","mergeRefs","ref","_$use","_$spread","_$mergeProps","cn","undefined","class","_$insert","_$createComponent","Show","when","fallback","_el$3","_tmpl$3","children","_$effect","_$setAttribute","alt","_el$2","_tmpl$","imgProps","event","callHandler","onError","AvatarGroup","max","surplusAriaLabel","count","resolved","resolveChildren","items","toArray","totalCount","total","length","clampedMax","Math","visible","slice","hidden","surplus","_el$4","_ref$2","onClick","onSurplusClick","cursor","_el$5","_tmpl$4"],"mappings":"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"}
1
+ {"version":3,"file":"avatar.js","sources":["../../../../src/components/dataDisplay/avatar/avatar.tsx"],"sourcesContent":["import {\n type JSX,\n type ParentProps,\n Show,\n children as resolveChildren,\n createSignal,\n mergeProps,\n splitProps,\n} from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport { mergeStyle } from \"../../../primitives/mergeStyle\";\n\nexport type AvatarSize = \"small\" | \"medium\" | \"large\";\n\nexport interface AvatarProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * Image source. Falls back to children (initials / icon) on error or when absent. While the image is shown the\n * avatar paints no background under it, so a transparent PNG/SVG shows what is behind the avatar.\n */\n src?: string | undefined;\n alt?: string | undefined;\n /** Preset size or an explicit pixel value. */\n size?: AvatarSize | number;\n variant?: \"circular\" | \"rounded\" | \"square\";\n /** Background color for the fallback (initials / icon); not painted under an image. */\n color?: string;\n /** Extra attributes forwarded to the underlying <img> (srcSet, loading…). */\n imgProps?: JSX.ImgHTMLAttributes<HTMLImageElement>;\n /** Test id of the root `<div>`; `avatar` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\nconst isPresetSize = (size: AvatarSize | number): size is AvatarSize => typeof size === \"string\";\n\nexport function Avatar(props: ParentProps<AvatarProps>): JSX.Element {\n const merged = mergeProps({ size: \"medium\" as AvatarSize | number, variant: \"circular\" as const }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"src\",\n \"alt\",\n \"size\",\n \"variant\",\n \"color\",\n \"style\",\n \"imgProps\",\n \"children\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const [imgFailed, setImgFailed] = createSignal(false);\n const showImage = (): boolean => Boolean(local.src) && !imgFailed();\n\n const inlineStyle = (): JSX.CSSProperties | string | undefined => {\n const size = local.size;\n return mergeStyle(local.style, {\n ...(isPresetSize(size) ? {} : { width: `${size}px`, height: `${size}px`, \"font-size\": `${size / 2.5}px` }),\n ...(local.color && !showImage() ? { \"background-color\": local.color } : {}),\n });\n };\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid={local[\"data-testid\"] ?? \"avatar\"}\n class={cn(\n \"smwb-avatar\",\n `smwb-avatar_${local.variant}`,\n isPresetSize(local.size) ? `smwb-avatar_${local.size}` : undefined,\n showImage() ? \"smwb-avatar_image\" : undefined,\n local.class\n )}\n style={inlineStyle()}\n >\n <Show\n when={showImage()}\n fallback={\n <span class=\"smwb-avatar__fallback\" role=\"img\" aria-label={local.alt}>\n {local.children}\n </span>\n }\n >\n <img\n {...(local.imgProps ?? {})}\n class={cn(\"smwb-avatar__img\", local.imgProps?.class)}\n src={local.src}\n alt={local.alt}\n onError={(event) => {\n setImgFailed(true);\n callHandler(local.imgProps?.onError, event);\n }}\n />\n </Show>\n </div>\n );\n}\n\nexport interface AvatarGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /** Maximum avatars to show before collapsing the rest into a \"+N\" surplus. */\n max?: number;\n /** Override the total count used for the surplus label (defaults to children count). */\n total?: number;\n /** Click handler for the \"+N\" surplus chip. */\n onSurplusClick?: () => void;\n /** Accessible name of the \"+N\" surplus chip. */\n surplusAriaLabel?: (count: number) => string;\n /** Size of the \"+N\" surplus chip: match the avatars in the group. */\n size?: AvatarSize | number;\n /** Test id of the root `<div>`; `avatar-group` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function AvatarGroup(props: ParentProps<AvatarGroupProps>): JSX.Element {\n const merged = mergeProps(\n { max: 5, surplusAriaLabel: (count: number) => `${count} more` },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"max\",\n \"total\",\n \"onSurplusClick\",\n \"surplusAriaLabel\",\n \"size\",\n \"children\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const resolved = resolveChildren(() => local.children);\n const items = (): unknown[] => resolved.toArray();\n const totalCount = (): number => local.total ?? items().length;\n const clampedMax = (): number => Math.max(local.max, 1);\n const visible = (): unknown[] => items().slice(0, clampedMax());\n const hidden = (): unknown[] => items().slice(clampedMax());\n const surplus = (): number => totalCount() - visible().length;\n\n // In order, the first avatar first; the \"+N\" chip ends the row.\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid={local[\"data-testid\"] ?? \"avatar-group\"}\n class={cn(\"smwb-avatar-group\", local.class)}\n >\n {visible() as JSX.Element}\n <Show when={surplus() > 0}>\n <Avatar\n class=\"smwb-avatar-group__surplus\"\n size={local.size ?? \"medium\"}\n alt={local.surplusAriaLabel(surplus())}\n onClick={local.onSurplusClick}\n style={local.onSurplusClick ? { cursor: \"pointer\" } : undefined}\n >\n {`+${surplus()}`}\n </Avatar>\n </Show>\n {/* Avatars past max are created with the rest (the children resolve at\n once), so they are rendered, hidden: a server that left them out would\n leave the browser without nodes to hydrate them from. */}\n <Show when={hidden().length > 0}>\n <span class=\"smwb-avatar-group__hidden\" hidden>\n {hidden() as JSX.Element}\n </span>\n </Show>\n </div>\n );\n}\n\nexport default Avatar;\n"],"names":["isPresetSize","size","Avatar","props","merged","mergeProps","variant","local","rest","splitProps","imgFailed","setImgFailed","createSignal","showImage","Boolean","src","inlineStyle","mergeStyle","style","width","height","color","_el$","_tmpl$2","_ref$","mergeRefs","ref","_$use","_$spread","_$mergeProps","cn","undefined","class","_$insert","_$createComponent","Show","when","fallback","_el$3","_tmpl$3","children","_$effect","_$setAttribute","alt","_el$2","_tmpl$","imgProps","event","callHandler","onError","AvatarGroup","max","surplusAriaLabel","count","resolved","resolveChildren","items","toArray","totalCount","total","length","clampedMax","Math","visible","slice","hidden","surplus","_el$4","_ref$2","onClick","onSurplusClick","cursor","_el$5","_tmpl$4"],"mappings":";;;;;;;;;AAqCA,MAAMA,IAAeA,CAACC,MAAkD,OAAOA,KAAS;AAEjF,SAASC,EAAOC,GAA8C;AACnE,QAAMC,IAASC,EAAW;AAAA,IAAEJ,MAAM;AAAA,IAAiCK,SAAS;AAAA,EAAA,GAAuBH,CAAK,GAClG,CAACI,GAAOC,CAAI,IAAIC,EAAWL,GAAQ,CACvC,SACA,OACA,OACA,QACA,WACA,SACA,SACA,YACA,YACA,OACA,aAAa,CACd,GAEK,CAACM,GAAWC,CAAY,IAAIC,EAAa,EAAK,GAC9CC,IAAYA,MAAeC,EAAQP,EAAMQ,OAAQ,CAACL,EAAAA,GAElDM,IAAcA,MAA8C;AAChE,UAAMf,IAAOM,EAAMN;AACnB,WAAOgB,EAAWV,EAAMW,OAAO;AAAA,MAC7B,GAAIlB,EAAaC,CAAI,IAAI,KAAK;AAAA,QAAEkB,OAAO,GAAGlB,CAAI;AAAA,QAAMmB,QAAQ,GAAGnB,CAAI;AAAA,QAAM,aAAa,GAAGA,IAAO,GAAG;AAAA,MAAA;AAAA,MACnG,GAAIM,EAAMc,SAAS,CAACR,MAAc;AAAA,QAAE,oBAAoBN,EAAMc;AAAAA,MAAAA,IAAU,CAAA;AAAA,IAAC,CAC1E;AAAA,EACH;AAEA,UAAA,MAAA;AAAA,QAAAC,IAAAC,EAAAA,GAAAC,IAGSC,EAAUlB,EAAMmB,GAAG;AAAC,kBAAAF,KAAA,cAAAG,EAAAH,GAAAF,CAAA,GAAAM,EAAAN,GAAAO,EADrBrB,GAAI;AAAA,MAAA,IAAA,gBAAA;AAAA,eAEKD,EAAM,aAAa,KAAK;AAAA,MAAQ;AAAA,MAAA,IAAA,QAAA;AAAA,eACtCuB,EACL,eACA,eAAevB,EAAMD,OAAO,IAC5BN,EAAaO,EAAMN,IAAI,IAAI,eAAeM,EAAMN,IAAI,KAAK8B,QACzDlB,EAAAA,IAAc,sBAAsBkB,QACpCxB,EAAMyB,KACR;AAAA,MAAC;AAAA,MAAA,IACDd,QAAK;AAAA,eAAEF,EAAAA;AAAAA,MAAa;AAAA,IAAA,CAAA,GAAA,IAAA,EAAA,GAAAiB,EAAAX,GAAAY,EAEnBC,GAAI;AAAA,MAAA,IACHC,OAAI;AAAA,eAAEvB,EAAAA;AAAAA,MAAW;AAAA,MAAA,IACjBwB,WAAQ;AAAA,gBAAA,MAAA;AAAA,cAAAC,IAAAC,EAAAA;AAAAN,iBAAAA,EAAAK,GAAA,MAEH/B,EAAMiC,QAAQ,GAAAC,QAAAC,EAAAJ,GAAA,cAD0C/B,EAAMoC,GAAG,CAAA,GAAAL;AAAAA,QAAA,GAAA;AAAA,MAAA;AAAA,MAAA,IAAAE,WAAA;AAAA,YAAAI,IAAAC,EAAAA;AAAAjB,eAAAA,EAAAgB,GAAAf,EAAA,MAM/DtB,EAAMuC,YAAY,CAAA,GAAE;AAAA,UAAA,IAAA,QAAA;AAAA,mBAClBhB,EAAG,oBAAoBvB,EAAMuC,UAAUd,KAAK;AAAA,UAAC;AAAA,UAAA,IACpDjB,MAAG;AAAA,mBAAER,EAAMQ;AAAAA,UAAG;AAAA,UAAA,IACd4B,MAAG;AAAA,mBAAEpC,EAAMoC;AAAAA,UAAG;AAAA,UAAA,SACJI,CAAAA,MAAU;AAClBpC,YAAAA,EAAa,EAAI,GACjBqC,EAAYzC,EAAMuC,UAAUG,SAASF,CAAK;AAAA,UAC5C;AAAA,QAAA,CAAC,GAAA,IAAA,EAAA,GAAAH;AAAAA,MAAA;AAAA,IAAA,CAAA,CAAA,GAAAtB;AAAAA,EAAA,GAAA;AAKX;AAkBO,SAAS4B,EAAY/C,GAAmD;AAC7E,QAAMC,IAASC,EACb;AAAA,IAAE8C,KAAK;AAAA,IAAGC,kBAAkBA,CAACC,MAAkB,GAAGA,CAAK;AAAA,EAAA,GACvDlD,CACF,GACM,CAACI,GAAOC,CAAI,IAAIC,EAAWL,GAAQ,CACvC,SACA,OACA,SACA,kBACA,oBACA,QACA,YACA,OACA,aAAa,CACd,GAEKkD,IAAWC,EAAgB,MAAMhD,EAAMiC,QAAQ,GAC/CgB,IAAQA,MAAiBF,EAASG,QAAAA,GAClCC,IAAaA,MAAcnD,EAAMoD,SAASH,IAAQI,QAClDC,IAAaA,MAAcC,KAAKX,IAAI5C,EAAM4C,KAAK,CAAC,GAChDY,IAAUA,MAAiBP,EAAAA,EAAQQ,MAAM,GAAGH,GAAY,GACxDI,IAASA,MAAiBT,EAAAA,EAAQQ,MAAMH,GAAY,GACpDK,IAAUA,MAAcR,MAAeK,IAAUH;AAGvD,UAAA,MAAA;AAAA,QAAAO,IAAA5C,EAAAA,GAAA6C,IAGS3C,EAAUlB,EAAMmB,GAAG;AAAC,kBAAA0C,KAAA,cAAAzC,EAAAyC,GAAAD,CAAA,GAAAvC,EAAAuC,GAAAtC,EADrBrB,GAAI;AAAA,MAAA,IAAA,gBAAA;AAAA,eAEKD,EAAM,aAAa,KAAK;AAAA,MAAc;AAAA,MAAA,IAAA,QAAA;AAAA,eAC5CuB,EAAG,qBAAqBvB,EAAMyB,KAAK;AAAA,MAAC;AAAA,IAAA,CAAA,GAAA,IAAA,EAAA,GAAAC,EAAAkC,GAAA,MAE1CJ,EAAAA,GAAwB,IAAA,GAAA9B,EAAAkC,GAAAjC,EACxBC,GAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAE8B,MAAY;AAAA,MAAC;AAAA,MAAA,IAAA1B,WAAA;AAAA,eAAAN,EACtBhC,GAAM;AAAA,UAAA,OAAA;AAAA,UAAA,IAELD,OAAI;AAAA,mBAAEM,EAAMN,QAAQ;AAAA,UAAQ;AAAA,UAAA,IAC5B0C,MAAG;AAAA,mBAAEpC,EAAM6C,iBAAiBc,GAAS;AAAA,UAAC;AAAA,UAAA,IACtCG,UAAO;AAAA,mBAAE9D,EAAM+D;AAAAA,UAAc;AAAA,UAAA,IAC7BpD,QAAK;AAAA,mBAAEX,EAAM+D,iBAAiB;AAAA,cAAEC,QAAQ;AAAA,YAAA,IAAcxC;AAAAA,UAAS;AAAA,UAAA,IAAAS,WAAA;AAAA,mBAE9D,IAAI0B,GAAS;AAAA,UAAE;AAAA,QAAA,CAAA;AAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA,GAAAjC,EAAAkC,GAAAjC,EAMnBC,GAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAE6B,EAAAA,EAASL,SAAS;AAAA,MAAC;AAAA,MAAA,IAAApB,WAAA;AAAA,YAAAgC,IAAAC,EAAAA;AAAAxC,eAAAA,EAAAuC,GAAA,MAE1BP,GAAuB,GAAAO;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA,GAAAL;AAAAA,EAAA,GAAA;AAKlC;"}
@@ -43,9 +43,12 @@ export interface ChartProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "on
43
43
  /** The chart's height: a number of pixels or any CSS length; 240 by default. It fills the width. */
44
44
  height?: number | string;
45
45
  /**
46
- * Loads ECharts in the browser: `import("echarts")` by default, the whole
47
- * library. For a smaller bundle pass `() => import("./my-echarts")`, a module
48
- * that registers only the charts you use with `echarts/core`.
46
+ * Loads ECharts in the browser. Optional in `@smwb/ui-solid/chart`, where
47
+ * `import("echarts")` — the whole library — is the default; required in
48
+ * `@smwb/ui-solid/chart/core`, which has no default and so never puts the
49
+ * whole library in your bundle. For a smaller bundle pass
50
+ * `() => import("./my-echarts")`, a module that registers only the charts
51
+ * you use with `echarts/core`.
49
52
  */
50
53
  loader?: () => Promise<ChartModule>;
51
54
  /** How ECharts draws: "canvas" (default) or "svg". Read once, when the chart is created. */
@@ -59,9 +62,14 @@ export interface ChartProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "on
59
62
  ref?: Ref<HTMLDivElement>;
60
63
  }
61
64
  /**
62
- * An ECharts chart in the theme's palette. On the server, and until ECharts
63
- * loads in the browser, a skeleton of the same size stands in its place, so
64
- * the page does not jump; the chart follows theme switches and its box's size.
65
+ * An ECharts chart in the theme's palette, loaded by the `loader` it is given
66
+ * and by nothing else: this module never reaches `echarts`, so a bundler that
67
+ * follows it finds no copy of the whole library. The `chart` entry puts the
68
+ * default loader on top (`chartFull.ts`); the `chart/core` entry is this
69
+ * component as it is, with `loader` required (`core.ts`).
70
+ *
71
+ * On the server, and until ECharts loads in the browser, a skeleton of the same
72
+ * size stands in its place, so the page does not jump; the chart follows theme
73
+ * switches and its box's size.
65
74
  */
66
- export declare function Chart(props: ChartProps): JSX.Element;
67
- export default Chart;
75
+ export declare function ChartCore(props: ChartProps): JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { type JSX } from "solid-js";
2
+ import { type ChartProps } from "./chart";
3
+ /**
4
+ * An ECharts chart in the theme's palette. Without a `loader` it loads the
5
+ * whole of `echarts`, which makes the bundler emit a chunk with the whole
6
+ * library; to build without that chunk import `Chart` from
7
+ * `@smwb/ui-solid/chart/core` and give it a `loader` of your own.
8
+ *
9
+ * On the server, and until ECharts loads in the browser, a skeleton of the same
10
+ * size stands in its place, so the page does not jump; the chart follows theme
11
+ * switches and its box's size.
12
+ */
13
+ export declare function Chart(props: ChartProps): JSX.Element;
14
+ export default Chart;
@@ -0,0 +1,19 @@
1
+ import type { JSX } from "solid-js";
2
+ import { type ChartModule, type ChartProps as ChartPropsWithDefaultLoader } from "./chart";
3
+ /** The props of `Chart`, with `loader` required: there is no default to fall back on. */
4
+ export type ChartProps = Omit<ChartPropsWithDefaultLoader, "loader"> & {
5
+ /**
6
+ * Loads ECharts in the browser: `() => import("./my-echarts")`, a module that
7
+ * registers only the charts you use with `echarts/core` and exports its `init`.
8
+ */
9
+ loader: () => Promise<ChartModule>;
10
+ };
11
+ /**
12
+ * An ECharts chart in the theme's palette, with no built-in ECharts: `loader`
13
+ * is required, and the whole library is never part of your bundle.
14
+ */
15
+ export declare const Chart: (props: ChartProps) => JSX.Element;
16
+ export default Chart;
17
+ export type { ChartEventParams, ChartInstance, ChartModule } from "./chart";
18
+ export { chartTheme, readChartPalette } from "./chartTheme";
19
+ export type { ChartOption, ChartPalette } from "./chartTheme";
@@ -1,4 +1,4 @@
1
- export { Chart, default } from "./chart";
1
+ export { Chart, default } from "./chartFull";
2
2
  export type { ChartProps, ChartEventParams, ChartInstance, ChartModule } from "./chart";
3
3
  export { chartTheme, readChartPalette } from "./chartTheme";
4
4
  export type { ChartOption, ChartPalette } from "./chartTheme";
@@ -4,6 +4,8 @@ import { type DagDirection, type DagLayoutInput, type DagLayoutResult } from "./
4
4
  import { type Viewport } from "./panZoom";
5
5
  /** A node's status: a built-in one, coloured by the theme, or any word of the app's, styled by `[data-status]`. */
6
6
  export type DagViewStatus = "idle" | "pending" | "running" | "success" | "warning" | "error" | "skipped" | (string & {});
7
+ /** The line style of a node's frame: dashed or solid, over its status and the theme's `--smwb-dag-view-node-border-style`. */
8
+ export type DagViewNodeVariant = "solid" | "dashed";
7
9
  export interface DagViewNode<T = unknown> {
8
10
  /** Unique among the nodes; edges name nodes by it. */
9
11
  id: string;
@@ -13,6 +15,8 @@ export interface DagViewNode<T = unknown> {
13
15
  status?: DagViewStatus | undefined;
14
16
  /** The node's accent colour, over its status colour: any CSS colour. */
15
17
  accent?: string | undefined;
18
+ /** The line style of the node's frame, over its status and the theme; the theme's unless given. */
19
+ variant?: DagViewNodeVariant | undefined;
16
20
  /** The node's width in pixels; `nodeWidth` unless given. */
17
21
  width?: number | undefined;
18
22
  /** The node's height in pixels; `nodeHeight` unless given. */