@smwb/ui-solid 0.4.1 → 0.6.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 (116) hide show
  1. package/dist/assets/styles/less/components/assetGrid/assetGrid.entry.css +1 -0
  2. package/dist/assets/styles/less/components/chipGroup/chipGroup.entry.css +1 -0
  3. package/dist/assets/styles/less/components/lazyImage/lazyImage.entry.css +1 -0
  4. package/dist/assets/styles/less/components/overflowMenu/overflowMenu.entry.css +1 -0
  5. package/dist/assets/styles/less/components/saveAssetDialog/saveAssetDialog.entry.css +1 -0
  6. package/dist/assets/styles/less/components/sheet/sheet.entry.css +1 -1
  7. package/dist/assets/styles/less/components/thumbCard/thumbCard.entry.css +1 -0
  8. package/dist/assets/styles/less/components/valueSlider/valueSlider.entry.css +1 -0
  9. package/dist/components/dataDisplay/assetGrid/assetGrid.d.ts +30 -0
  10. package/dist/components/dataDisplay/assetGrid/assetGrid.js +144 -0
  11. package/dist/components/dataDisplay/assetGrid/assetGrid.js.map +1 -0
  12. package/dist/components/dataDisplay/assetGrid/index.d.ts +2 -0
  13. package/dist/components/dataDisplay/chipGroup/chipGroup.d.ts +27 -0
  14. package/dist/components/dataDisplay/chipGroup/chipGroup.js +58 -0
  15. package/dist/components/dataDisplay/chipGroup/chipGroup.js.map +1 -0
  16. package/dist/components/dataDisplay/chipGroup/index.d.ts +2 -0
  17. package/dist/components/dataDisplay/lazyImage/index.d.ts +2 -0
  18. package/dist/components/dataDisplay/lazyImage/lazyImage.d.ts +24 -0
  19. package/dist/components/dataDisplay/lazyImage/lazyImage.js +73 -0
  20. package/dist/components/dataDisplay/lazyImage/lazyImage.js.map +1 -0
  21. package/dist/components/dataDisplay/thumbCard/index.d.ts +2 -0
  22. package/dist/components/dataDisplay/thumbCard/thumbCard.d.ts +31 -0
  23. package/dist/components/dataDisplay/thumbCard/thumbCard.js +114 -0
  24. package/dist/components/dataDisplay/thumbCard/thumbCard.js.map +1 -0
  25. package/dist/components/feedBack/saveAssetDialog/index.d.ts +2 -0
  26. package/dist/components/feedBack/saveAssetDialog/saveAssetDialog.d.ts +30 -0
  27. package/dist/components/feedBack/saveAssetDialog/saveAssetDialog.js +101 -0
  28. package/dist/components/feedBack/saveAssetDialog/saveAssetDialog.js.map +1 -0
  29. package/dist/components/inputs/valueSlider/index.d.ts +2 -0
  30. package/dist/components/inputs/valueSlider/valueSlider.d.ts +23 -0
  31. package/dist/components/inputs/valueSlider/valueSlider.js +57 -0
  32. package/dist/components/inputs/valueSlider/valueSlider.js.map +1 -0
  33. package/dist/components/navigation/overflowMenu/index.d.ts +2 -0
  34. package/dist/components/navigation/overflowMenu/overflowMenu.d.ts +27 -0
  35. package/dist/components/navigation/overflowMenu/overflowMenu.js +88 -0
  36. package/dist/components/navigation/overflowMenu/overflowMenu.js.map +1 -0
  37. package/dist/headless/components/dataDisplay/assetGrid/assetGrid.js +143 -0
  38. package/dist/headless/components/dataDisplay/assetGrid/assetGrid.js.map +1 -0
  39. package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js +57 -0
  40. package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js.map +1 -0
  41. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js +72 -0
  42. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js.map +1 -0
  43. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js +113 -0
  44. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js.map +1 -0
  45. package/dist/headless/components/feedBack/saveAssetDialog/saveAssetDialog.js +100 -0
  46. package/dist/headless/components/feedBack/saveAssetDialog/saveAssetDialog.js.map +1 -0
  47. package/dist/headless/components/inputs/valueSlider/valueSlider.js +56 -0
  48. package/dist/headless/components/inputs/valueSlider/valueSlider.js.map +1 -0
  49. package/dist/headless/components/navigation/overflowMenu/overflowMenu.js +87 -0
  50. package/dist/headless/components/navigation/overflowMenu/overflowMenu.js.map +1 -0
  51. package/dist/headless/index.js +278 -264
  52. package/dist/headless/index.js.map +1 -1
  53. package/dist/headless/source/components/dataDisplay/assetGrid/assetGrid.jsx +115 -0
  54. package/dist/headless/source/components/dataDisplay/assetGrid/assetGrid.jsx.map +1 -0
  55. package/dist/headless/source/components/dataDisplay/assetGrid/index.js +5 -0
  56. package/dist/headless/source/components/dataDisplay/assetGrid/index.js.map +7 -0
  57. package/dist/headless/source/components/dataDisplay/chipGroup/chipGroup.jsx +50 -0
  58. package/dist/headless/source/components/dataDisplay/chipGroup/chipGroup.jsx.map +1 -0
  59. package/dist/headless/source/components/dataDisplay/chipGroup/index.js +5 -0
  60. package/dist/headless/source/components/dataDisplay/chipGroup/index.js.map +7 -0
  61. package/dist/headless/source/components/dataDisplay/lazyImage/index.js +5 -0
  62. package/dist/headless/source/components/dataDisplay/lazyImage/index.js.map +7 -0
  63. package/dist/headless/source/components/dataDisplay/lazyImage/lazyImage.jsx +64 -0
  64. package/dist/headless/source/components/dataDisplay/lazyImage/lazyImage.jsx.map +1 -0
  65. package/dist/headless/source/components/dataDisplay/thumbCard/index.js +5 -0
  66. package/dist/headless/source/components/dataDisplay/thumbCard/index.js.map +7 -0
  67. package/dist/headless/source/components/dataDisplay/thumbCard/thumbCard.jsx +93 -0
  68. package/dist/headless/source/components/dataDisplay/thumbCard/thumbCard.jsx.map +1 -0
  69. package/dist/headless/source/components/feedBack/saveAssetDialog/index.js +5 -0
  70. package/dist/headless/source/components/feedBack/saveAssetDialog/index.js.map +7 -0
  71. package/dist/headless/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx +65 -0
  72. package/dist/headless/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx.map +1 -0
  73. package/dist/headless/source/components/inputs/valueSlider/index.js +5 -0
  74. package/dist/headless/source/components/inputs/valueSlider/index.js.map +7 -0
  75. package/dist/headless/source/components/inputs/valueSlider/valueSlider.jsx +54 -0
  76. package/dist/headless/source/components/inputs/valueSlider/valueSlider.jsx.map +1 -0
  77. package/dist/headless/source/components/navigation/overflowMenu/index.js +5 -0
  78. package/dist/headless/source/components/navigation/overflowMenu/index.js.map +7 -0
  79. package/dist/headless/source/components/navigation/overflowMenu/overflowMenu.jsx +60 -0
  80. package/dist/headless/source/components/navigation/overflowMenu/overflowMenu.jsx.map +1 -0
  81. package/dist/headless/source/index.js +14 -0
  82. package/dist/headless/source/index.js.map +2 -2
  83. package/dist/index.d.ts +14 -0
  84. package/dist/index.js +278 -264
  85. package/dist/index.js.map +1 -1
  86. package/dist/source/components/dataDisplay/assetGrid/assetGrid.jsx +116 -0
  87. package/dist/source/components/dataDisplay/assetGrid/assetGrid.jsx.map +1 -0
  88. package/dist/source/components/dataDisplay/assetGrid/index.js +5 -0
  89. package/dist/source/components/dataDisplay/assetGrid/index.js.map +7 -0
  90. package/dist/source/components/dataDisplay/chipGroup/chipGroup.jsx +51 -0
  91. package/dist/source/components/dataDisplay/chipGroup/chipGroup.jsx.map +1 -0
  92. package/dist/source/components/dataDisplay/chipGroup/index.js +5 -0
  93. package/dist/source/components/dataDisplay/chipGroup/index.js.map +7 -0
  94. package/dist/source/components/dataDisplay/lazyImage/index.js +5 -0
  95. package/dist/source/components/dataDisplay/lazyImage/index.js.map +7 -0
  96. package/dist/source/components/dataDisplay/lazyImage/lazyImage.jsx +65 -0
  97. package/dist/source/components/dataDisplay/lazyImage/lazyImage.jsx.map +1 -0
  98. package/dist/source/components/dataDisplay/thumbCard/index.js +5 -0
  99. package/dist/source/components/dataDisplay/thumbCard/index.js.map +7 -0
  100. package/dist/source/components/dataDisplay/thumbCard/thumbCard.jsx +94 -0
  101. package/dist/source/components/dataDisplay/thumbCard/thumbCard.jsx.map +1 -0
  102. package/dist/source/components/feedBack/saveAssetDialog/index.js +5 -0
  103. package/dist/source/components/feedBack/saveAssetDialog/index.js.map +7 -0
  104. package/dist/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx +66 -0
  105. package/dist/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx.map +1 -0
  106. package/dist/source/components/inputs/valueSlider/index.js +5 -0
  107. package/dist/source/components/inputs/valueSlider/index.js.map +7 -0
  108. package/dist/source/components/inputs/valueSlider/valueSlider.jsx +55 -0
  109. package/dist/source/components/inputs/valueSlider/valueSlider.jsx.map +1 -0
  110. package/dist/source/components/navigation/overflowMenu/index.js +5 -0
  111. package/dist/source/components/navigation/overflowMenu/index.js.map +7 -0
  112. package/dist/source/components/navigation/overflowMenu/overflowMenu.jsx +61 -0
  113. package/dist/source/components/navigation/overflowMenu/overflowMenu.jsx.map +1 -0
  114. package/dist/source/index.js +14 -0
  115. package/dist/source/index.js.map +2 -2
  116. package/package.json +439 -5
@@ -0,0 +1 @@
1
+ .smwb-asset-grid{position:relative;overflow-y:auto;width:100%}.smwb-asset-grid__empty{display:flex;align-items:center;justify-content:center;padding:32px 16px;color:var(--smui-onSurfaceColor);opacity:.7}.smwb-asset-grid__skeleton{border-radius:8px;background-color:var(--smui-surfaceVariant);animation:smwb-asset-grid-pulse 1.4s ease-in-out infinite}@keyframes smwb-asset-grid-pulse{0%,to{opacity:1}50%{opacity:.5}}
@@ -0,0 +1 @@
1
+ .smwb-chip-group{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
@@ -0,0 +1 @@
1
+ .smwb-lazy-image{display:block;position:relative;overflow:hidden;width:100%;height:100%}.smwb-lazy-image__img{display:block;width:100%;height:100%;object-fit:cover}.smwb-lazy-image__fallback{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--smui-onSurfaceColor);background-color:var(--smui-surfaceVariant)}
@@ -0,0 +1 @@
1
+ .smwb-overflow-menu{display:inline-flex}.smwb-overflow-menu__item--danger{color:var(--smui-errorColor)}
@@ -0,0 +1 @@
1
+ .smwb-save-asset-dialog__body{display:flex;flex-direction:column;gap:12px;min-width:280px}.smwb-save-asset-dialog__preview{display:flex;justify-content:center;align-items:center;border-radius:8px;overflow:hidden;background-color:var(--smui-surfaceVariant)}.smwb-save-asset-dialog__preview img{max-width:100%;max-height:200px;object-fit:contain}
@@ -1 +1 @@
1
- .smwb-sheet{background-color:var(--smui-surfaceBackground);position:fixed;opacity:0;transition:all .2s ease-in-out;box-shadow:#00000024 0 8px 10px -5px,#00000024 0 1px 14px 1px,#00000024 0 6px 22px 4px;z-index:100;padding:10px 20px 20px;overflow:hidden;display:flex;max-width:100vw}.smwb-sheet__header{display:flex;justify-content:space-between;align-items:center;flex-shrink:0;gap:4px;padding-bottom:5px}.smwb-sheet__header .smwb-button{min-width:0}.smwb-sheet__drag-handle{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1;touch-action:none;user-select:none}.smwb-sheet__drag-handle:focus-visible{outline:2px solid var(--smui-primaryColor);outline-offset:-2px}.smwb-sheet__drag-handle-bar{display:block;border-radius:999px;background-color:var(--smui-onSurfaceVariant);opacity:.4;transition:opacity .15s ease-in-out}.smwb-sheet__drag-handle:hover .smwb-sheet__drag-handle-bar,.smwb-sheet__drag-handle:active .smwb-sheet__drag-handle-bar{opacity:.7}.smwb-sheet_resizable.smwb-bottom{padding-top:20px}.smwb-sheet_resizable.smwb-top{padding-bottom:20px}.smwb-sheet_resizable.smwb-left{padding-right:20px}.smwb-sheet_resizable.smwb-right{padding-left:20px}.smwb-sheet.smwb-bottom .smwb-sheet__drag-handle,.smwb-sheet.smwb-top .smwb-sheet__drag-handle{left:0;right:0;height:20px;cursor:ns-resize}.smwb-sheet.smwb-bottom .smwb-sheet__drag-handle .smwb-sheet__drag-handle-bar,.smwb-sheet.smwb-top .smwb-sheet__drag-handle .smwb-sheet__drag-handle-bar{width:36px;height:4px}.smwb-sheet.smwb-bottom .smwb-sheet__drag-handle{top:0}.smwb-sheet.smwb-top .smwb-sheet__drag-handle{bottom:0}.smwb-sheet.smwb-left .smwb-sheet__drag-handle,.smwb-sheet.smwb-right .smwb-sheet__drag-handle{top:0;bottom:0;width:20px;cursor:ew-resize}.smwb-sheet.smwb-left .smwb-sheet__drag-handle .smwb-sheet__drag-handle-bar,.smwb-sheet.smwb-right .smwb-sheet__drag-handle .smwb-sheet__drag-handle-bar{width:4px;height:36px}.smwb-sheet.smwb-right .smwb-sheet__drag-handle{left:0}.smwb-sheet.smwb-left .smwb-sheet__drag-handle{right:0}.smwb-sheet__inner{display:flex;flex-direction:column;height:100%;width:100%;overflow-y:auto}.smwb-sheet.smwb-bottom{border-radius:28px 28px 0 0;bottom:0;left:0;width:100%;height:var(--sizeProp);transform:translateY(100%);flex-direction:column}.smwb-sheet.smwb-bottom .smwb-sheet__header{width:100%}.smwb-sheet.smwb-top{border-radius:0 0 28px 28px;top:0;left:0;width:100%;height:var(--sizeProp);transform:translateY(-100%);flex-direction:column}.smwb-sheet.smwb-top .smwb-sheet__header{width:100%}.smwb-sheet.smwb-left{border-radius:0 28px 28px 0;top:0;left:0;height:100%;width:var(--sizeProp);transform:translate(-100%);flex-direction:row-reverse}.smwb-sheet.smwb-left .smwb-sheet__header{flex-direction:column;height:100%;padding-left:10px}.smwb-sheet.smwb-right{border-radius:28px 0 0 28px;top:0;right:0;height:100%;width:var(--sizeProp);transform:translate(100%)}.smwb-sheet.smwb-right .smwb-sheet__header{flex-direction:column;height:100%}.smwb-sheet__overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;flex-direction:column;z-index:100;opacity:0;transition:all .25s ease-in-out}.smwb-sheet__overlay.smwb-entered{opacity:1}.smwb-sheet__overlay.smwb-dark{background-color:#00000080}.smwb-sheet__default.smwb-entered .smwb-sheet,.smwb-sheet__overlay.smwb-entered .smwb-sheet{opacity:1}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-bottom,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-bottom{transform:translateY(0)}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-bottom.smwb-expanded,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-bottom.smwb-expanded{height:90%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-bottom.smwb-small,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-bottom.smwb-small{height:10%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-top,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-top{transform:translateY(0)}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-top.smwb-expanded,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-top.smwb-expanded{height:90%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-top.smwb-small,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-top.smwb-small{height:10%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-left,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-left{transform:translate(0)}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-left.smwb-expanded,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-left.smwb-expanded{width:90%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-left.smwb-small,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-left.smwb-small{width:10%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-right,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-right{transform:translate(0)}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-right.smwb-expanded,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-right.smwb-expanded{width:90%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-right.smwb-small,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-right.smwb-small{width:10%}.smwb-scrollbar::-webkit-scrollbar-thumb{background-color:var(--smui-scrollThumbColor);width:6px;border-radius:999px}.smwb-scrollbar::-webkit-scrollbar{width:6px}.smwb-scrollbar::-webkit-scrollbar-track{background-color:transparent}
1
+ .smwb-sheet{background-color:var(--smui-surfaceBackground);position:fixed;opacity:0;transition:all .2s ease-in-out;box-shadow:#00000024 0 8px 10px -5px,#00000024 0 1px 14px 1px,#00000024 0 6px 22px 4px;z-index:100;padding:10px 20px 20px;box-sizing:border-box;overflow:hidden;display:flex;max-width:100vw}.smwb-sheet__header{display:flex;justify-content:space-between;align-items:center;flex-shrink:0;gap:4px;padding-bottom:5px}.smwb-sheet__header .smwb-button{min-width:0}.smwb-sheet__drag-handle{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1;touch-action:none;user-select:none}.smwb-sheet__drag-handle:focus-visible{outline:2px solid var(--smui-primaryColor);outline-offset:-2px}.smwb-sheet__drag-handle-bar{display:block;border-radius:999px;background-color:var(--smui-onSurfaceVariant);opacity:.4;transition:opacity .15s ease-in-out}.smwb-sheet__drag-handle:hover .smwb-sheet__drag-handle-bar,.smwb-sheet__drag-handle:active .smwb-sheet__drag-handle-bar{opacity:.7}.smwb-sheet_resizable.smwb-bottom{padding-top:20px}.smwb-sheet_resizable.smwb-top{padding-bottom:20px}.smwb-sheet_resizable.smwb-left{padding-right:20px}.smwb-sheet_resizable.smwb-right{padding-left:20px}.smwb-sheet.smwb-bottom .smwb-sheet__drag-handle,.smwb-sheet.smwb-top .smwb-sheet__drag-handle{left:0;right:0;height:20px;cursor:ns-resize}.smwb-sheet.smwb-bottom .smwb-sheet__drag-handle .smwb-sheet__drag-handle-bar,.smwb-sheet.smwb-top .smwb-sheet__drag-handle .smwb-sheet__drag-handle-bar{width:36px;height:4px}.smwb-sheet.smwb-bottom .smwb-sheet__drag-handle{top:0}.smwb-sheet.smwb-top .smwb-sheet__drag-handle{bottom:0}.smwb-sheet.smwb-left .smwb-sheet__drag-handle,.smwb-sheet.smwb-right .smwb-sheet__drag-handle{top:0;bottom:0;width:20px;cursor:ew-resize}.smwb-sheet.smwb-left .smwb-sheet__drag-handle .smwb-sheet__drag-handle-bar,.smwb-sheet.smwb-right .smwb-sheet__drag-handle .smwb-sheet__drag-handle-bar{width:4px;height:36px}.smwb-sheet.smwb-right .smwb-sheet__drag-handle{left:0}.smwb-sheet.smwb-left .smwb-sheet__drag-handle{right:0}.smwb-sheet__inner{display:flex;flex-direction:column;height:100%;width:100%;overflow-y:auto}.smwb-sheet.smwb-bottom{border-radius:28px 28px 0 0;bottom:0;left:0;width:100%;height:var(--sizeProp);transform:translateY(100%);flex-direction:column}.smwb-sheet.smwb-bottom .smwb-sheet__header{width:100%}.smwb-sheet.smwb-top{border-radius:0 0 28px 28px;top:0;left:0;width:100%;height:var(--sizeProp);transform:translateY(-100%);flex-direction:column}.smwb-sheet.smwb-top .smwb-sheet__header{width:100%}.smwb-sheet.smwb-left{border-radius:0 28px 28px 0;top:0;left:0;height:100%;width:var(--sizeProp);transform:translate(-100%);flex-direction:row-reverse}.smwb-sheet.smwb-left .smwb-sheet__header{flex-direction:column;height:100%;padding-left:10px}.smwb-sheet.smwb-right{border-radius:28px 0 0 28px;top:0;right:0;height:100%;width:var(--sizeProp);transform:translate(100%)}.smwb-sheet.smwb-right .smwb-sheet__header{flex-direction:column;height:100%}.smwb-sheet__overlay{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;flex-direction:column;z-index:100;opacity:0;transition:all .25s ease-in-out}.smwb-sheet__overlay.smwb-entered{opacity:1}.smwb-sheet__overlay.smwb-dark{background-color:#00000080}.smwb-sheet__default.smwb-entered .smwb-sheet,.smwb-sheet__overlay.smwb-entered .smwb-sheet{opacity:1}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-bottom,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-bottom{transform:translateY(0)}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-bottom.smwb-expanded,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-bottom.smwb-expanded{height:90%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-bottom.smwb-small,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-bottom.smwb-small{height:10%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-top,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-top{transform:translateY(0)}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-top.smwb-expanded,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-top.smwb-expanded{height:90%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-top.smwb-small,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-top.smwb-small{height:10%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-left,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-left{transform:translate(0)}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-left.smwb-expanded,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-left.smwb-expanded{width:90%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-left.smwb-small,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-left.smwb-small{width:10%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-right,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-right{transform:translate(0)}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-right.smwb-expanded,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-right.smwb-expanded{width:90%}.smwb-sheet__default.smwb-entered .smwb-sheet.smwb-right.smwb-small,.smwb-sheet__overlay.smwb-entered .smwb-sheet.smwb-right.smwb-small{width:10%}.smwb-scrollbar::-webkit-scrollbar-thumb{background-color:var(--smui-scrollThumbColor);width:6px;border-radius:999px}.smwb-scrollbar::-webkit-scrollbar{width:6px}.smwb-scrollbar::-webkit-scrollbar-track{background-color:transparent}
@@ -0,0 +1 @@
1
+ .smwb-thumb-card{position:relative;display:flex;flex-direction:column;border-radius:8px;overflow:visible;outline:none}.smwb-thumb-card--interactive{cursor:pointer}.smwb-thumb-card--disabled{opacity:.5;pointer-events:none}.smwb-thumb-card__media{position:relative;width:100%;aspect-ratio:1;border-radius:8px;overflow:hidden;background-color:var(--smui-surfaceVariant)}.smwb-thumb-card--selected .smwb-thumb-card__media{outline:2px solid var(--smui-primaryColor);outline-offset:1px}.smwb-thumb-card--interactive:focus-visible .smwb-thumb-card__media{outline:2px solid var(--smui-primaryColor);outline-offset:1px}.smwb-thumb-card__slot{position:absolute;top:4px;display:flex;gap:4px;z-index:1}.smwb-thumb-card__slot--start{left:4px}.smwb-thumb-card__slot--end{right:4px}.smwb-thumb-card__caption{margin-top:4px;font-size:.8125rem;color:var(--smui-onSurfaceColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.smwb-thumb-card__preview{z-index:1000;border-radius:8px;overflow:hidden;box-shadow:0 8px 24px #0000004d;background-color:var(--smui-surfaceBackground);pointer-events:none}.smwb-thumb-card__preview img{display:block;max-width:320px;max-height:320px;object-fit:contain}
@@ -0,0 +1 @@
1
+ .smwb-value-slider{display:flex;flex-direction:column;width:100%}.smwb-value-slider__header{display:flex;align-items:center;gap:8px;min-height:24px}.smwb-value-slider__label{font-size:.875rem;color:var(--smui-onSurfaceColor)}.smwb-value-slider__spacer{flex:1 1 auto}.smwb-value-slider__readout{font-size:.875rem;font-variant-numeric:tabular-nums;color:var(--smui-onSurfaceColor);opacity:.85}.smwb-value-slider__reset{display:inline-flex;align-items:center;justify-content:center;padding:2px;border:none;background:transparent;color:var(--smui-onSurfaceColor);cursor:pointer;border-radius:50%;opacity:.7}.smwb-value-slider__reset:hover{opacity:1;background-color:var(--smui-onSurfaceHover)}.smwb-value-slider__reset:disabled{opacity:.4;cursor:default}
@@ -0,0 +1,30 @@
1
+ import { type JSX } from "solid-js";
2
+ export interface AssetGridProps<T> {
3
+ items: T[];
4
+ /** Render one cell. `index` is the absolute index into `items`. */
5
+ renderItem: (item: T, index: number) => JSX.Element;
6
+ /** Minimum column width (px); drives the column count from the measured width. Default 160. */
7
+ minColumn?: number;
8
+ /** Fixed cell height (px). */
9
+ rowHeight: number;
10
+ /** Gap (px) between cells on both axes. Default 8. */
11
+ gap?: number;
12
+ /** Extra rows rendered above/below the viewport. Default 2. */
13
+ overscan?: number;
14
+ loading?: boolean;
15
+ /** Skeleton tile count while loading. Default 12. */
16
+ loadingCount?: number;
17
+ emptyLabel?: JSX.Element;
18
+ class?: string;
19
+ style?: JSX.CSSProperties | string;
20
+ }
21
+ /**
22
+ * A virtualized, data-shape-agnostic asset grid: measures its own width to pick a
23
+ * column count, windows rows via `createVirtualList`, and renders only the visible
24
+ * cells through a `renderItem` slot — with loading skeletons + an empty state. The
25
+ * windowing math every catalog app reimplements, upstreamed. SSR-safe: before it
26
+ * can measure (server + first paint) it renders a plain auto-fill grid of all
27
+ * items, then virtualizes after mount.
28
+ */
29
+ export declare function AssetGrid<T>(props: AssetGridProps<T>): JSX.Element;
30
+ export default AssetGrid;
@@ -0,0 +1,144 @@
1
+ import { addEventListener as P, use as E, insert as g, createComponent as o, effect as m, style as h, setStyleProperty as w, className as O, template as c } from "solid-js/web";
2
+ import '../../../assets/styles/less/components/assetGrid/assetGrid.entry.css';/* empty css */
3
+ import { mergeProps as W, splitProps as Y, createSignal as f, onMount as F, createMemo as _, Show as p, For as v, onCleanup as G } from "solid-js";
4
+ import N from "clsx";
5
+ import { createVirtualList as V } from "../../../primitives/createVirtualList.js";
6
+ var j = /* @__PURE__ */ c("<div class=smwb-asset-grid__sizer style=position:relative><div class=smwb-asset-grid__band style=position:absolute;top:0;left:0;right:0>"), q = /* @__PURE__ */ c("<div>"), b = /* @__PURE__ */ c("<div class=smwb-asset-grid__plain>"), B = /* @__PURE__ */ c("<div class=smwb-asset-grid__skeleton>"), D = /* @__PURE__ */ c("<div class=smwb-asset-grid__empty>"), J = /* @__PURE__ */ c("<div class=smwb-asset-grid__row>");
7
+ function ee(y) {
8
+ const x = W({
9
+ minColumn: 160,
10
+ gap: 8,
11
+ overscan: 2,
12
+ loadingCount: 12
13
+ }, y), [t] = Y(x, ["items", "renderItem", "minColumn", "rowHeight", "gap", "overscan", "loading", "loadingCount", "emptyLabel", "class", "style"]);
14
+ let l;
15
+ const [C, H] = f(0), [S, I] = f(0), [M, k] = f(!1);
16
+ F(() => {
17
+ if (!l || typeof ResizeObserver > "u") return;
18
+ const r = new ResizeObserver(() => {
19
+ l && (H(l.clientWidth), I(l.clientHeight), k(!0));
20
+ });
21
+ r.observe(l), G(() => r.disconnect());
22
+ });
23
+ const u = _(() => {
24
+ const r = C();
25
+ return r <= 0 ? 1 : Math.max(1, Math.floor((r + t.gap) / (t.minColumn + t.gap)));
26
+ }), L = _(() => Math.ceil(t.items.length / u())), d = V({
27
+ itemCount: L,
28
+ itemHeight: () => t.rowHeight + t.gap,
29
+ viewportHeight: () => S() || 1,
30
+ overscan: t.overscan
31
+ }), R = _(() => {
32
+ const r = [];
33
+ for (let e = d.startIndex(); e < d.endIndex(); e++) r.push(e);
34
+ return r;
35
+ }), z = () => ({
36
+ display: "grid",
37
+ "grid-template-columns": `repeat(${u()}, minmax(0, 1fr))`,
38
+ gap: `${t.gap}px`,
39
+ height: `${t.rowHeight}px`,
40
+ "margin-bottom": `${t.gap}px`
41
+ }), $ = () => ({
42
+ display: "grid",
43
+ "grid-template-columns": `repeat(auto-fill, minmax(${t.minColumn}px, 1fr))`,
44
+ gap: `${t.gap}px`,
45
+ "grid-auto-rows": `${t.rowHeight}px`
46
+ });
47
+ return (() => {
48
+ var r = q();
49
+ return P(r, "scroll", d.onScroll), E((e) => l = e, r), g(r, o(p, {
50
+ get when() {
51
+ return !t.loading;
52
+ },
53
+ get fallback() {
54
+ return (() => {
55
+ var e = b();
56
+ return g(e, o(v, {
57
+ get each() {
58
+ return Array.from({
59
+ length: t.loadingCount
60
+ });
61
+ },
62
+ children: () => (() => {
63
+ var n = B();
64
+ return m((i) => w(n, "height", `${t.rowHeight}px`)), n;
65
+ })()
66
+ })), m((n) => h(e, $(), n)), e;
67
+ })();
68
+ },
69
+ get children() {
70
+ return o(p, {
71
+ get when() {
72
+ return t.items.length > 0;
73
+ },
74
+ get fallback() {
75
+ return (() => {
76
+ var e = D();
77
+ return g(e, () => t.emptyLabel), e;
78
+ })();
79
+ },
80
+ get children() {
81
+ return o(p, {
82
+ get when() {
83
+ return M();
84
+ },
85
+ get fallback() {
86
+ return (() => {
87
+ var e = b();
88
+ return g(e, o(v, {
89
+ get each() {
90
+ return t.items;
91
+ },
92
+ children: (n, i) => t.renderItem(n, i())
93
+ })), m((n) => h(e, $(), n)), e;
94
+ })();
95
+ },
96
+ get children() {
97
+ var e = j(), n = e.firstChild;
98
+ return g(n, o(v, {
99
+ get each() {
100
+ return R();
101
+ },
102
+ children: (i) => (() => {
103
+ var a = J();
104
+ return g(a, o(v, {
105
+ get each() {
106
+ return Array.from({
107
+ length: u()
108
+ }, (s, A) => i * u() + A);
109
+ },
110
+ children: (s) => o(p, {
111
+ get when() {
112
+ return s < t.items.length;
113
+ },
114
+ get children() {
115
+ return t.renderItem(t.items[s], s);
116
+ }
117
+ })
118
+ })), m((s) => h(a, z(), s)), a;
119
+ })()
120
+ })), m((i) => {
121
+ var a = `${d.totalHeight()}px`, s = `translateY(${d.offsetY()}px)`;
122
+ return a !== i.e && w(e, "height", i.e = a), s !== i.t && w(n, "transform", i.t = s), i;
123
+ }, {
124
+ e: void 0,
125
+ t: void 0
126
+ }), e;
127
+ }
128
+ });
129
+ }
130
+ });
131
+ }
132
+ })), m((e) => {
133
+ var n = N("smwb-asset-grid", t.class), i = t.style;
134
+ return n !== e.e && O(r, e.e = n), e.t = h(r, i, e.t), e;
135
+ }, {
136
+ e: void 0,
137
+ t: void 0
138
+ }), r;
139
+ })();
140
+ }
141
+ export {
142
+ ee as AssetGrid
143
+ };
144
+ //# sourceMappingURL=assetGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetGrid.js","sources":["../../../../src/components/dataDisplay/assetGrid/assetGrid.tsx"],"sourcesContent":["import { type JSX, For, Show, createMemo, createSignal, mergeProps, onCleanup, onMount, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { createVirtualList } from \"../../../primitives/createVirtualList\";\n\nexport interface AssetGridProps<T> {\n items: T[];\n /** Render one cell. `index` is the absolute index into `items`. */\n renderItem: (item: T, index: number) => JSX.Element;\n /** Minimum column width (px); drives the column count from the measured width. Default 160. */\n minColumn?: number;\n /** Fixed cell height (px). */\n rowHeight: number;\n /** Gap (px) between cells on both axes. Default 8. */\n gap?: number;\n /** Extra rows rendered above/below the viewport. Default 2. */\n overscan?: number;\n loading?: boolean;\n /** Skeleton tile count while loading. Default 12. */\n loadingCount?: number;\n emptyLabel?: JSX.Element;\n class?: string;\n style?: JSX.CSSProperties | string;\n}\n\n/**\n * A virtualized, data-shape-agnostic asset grid: measures its own width to pick a\n * column count, windows rows via `createVirtualList`, and renders only the visible\n * cells through a `renderItem` slot — with loading skeletons + an empty state. The\n * windowing math every catalog app reimplements, upstreamed. SSR-safe: before it\n * can measure (server + first paint) it renders a plain auto-fill grid of all\n * items, then virtualizes after mount.\n */\nexport function AssetGrid<T>(props: AssetGridProps<T>): JSX.Element {\n const merged = mergeProps({ minColumn: 160, gap: 8, overscan: 2, loadingCount: 12 }, props);\n const [local] = splitProps(merged, [\n \"items\",\n \"renderItem\",\n \"minColumn\",\n \"rowHeight\",\n \"gap\",\n \"overscan\",\n \"loading\",\n \"loadingCount\",\n \"emptyLabel\",\n \"class\",\n \"style\",\n ]);\n\n let viewportEl: HTMLDivElement | undefined;\n const [width, setWidth] = createSignal(0);\n const [height, setHeight] = createSignal(0);\n const [ready, setReady] = createSignal(false);\n\n onMount(() => {\n if (!viewportEl || typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(() => {\n if (!viewportEl) return;\n setWidth(viewportEl.clientWidth);\n setHeight(viewportEl.clientHeight);\n setReady(true);\n });\n ro.observe(viewportEl);\n onCleanup(() => ro.disconnect());\n });\n\n const cols = createMemo(() => {\n const w = width();\n if (w <= 0) return 1;\n return Math.max(1, Math.floor((w + local.gap) / (local.minColumn + local.gap)));\n });\n const rowCount = createMemo(() => Math.ceil(local.items.length / cols()));\n const rowStride = (): number => local.rowHeight + local.gap;\n\n const vl = createVirtualList({\n itemCount: rowCount,\n itemHeight: rowStride,\n viewportHeight: () => height() || 1,\n overscan: local.overscan,\n });\n\n const visibleRows = createMemo(() => {\n const out: number[] = [];\n for (let row = vl.startIndex(); row < vl.endIndex(); row++) out.push(row);\n return out;\n });\n\n const rowStyle = (): JSX.CSSProperties => ({\n display: \"grid\",\n \"grid-template-columns\": `repeat(${cols()}, minmax(0, 1fr))`,\n gap: `${local.gap}px`,\n height: `${local.rowHeight}px`,\n \"margin-bottom\": `${local.gap}px`,\n });\n\n const plainStyle = (): JSX.CSSProperties => ({\n display: \"grid\",\n \"grid-template-columns\": `repeat(auto-fill, minmax(${local.minColumn}px, 1fr))`,\n gap: `${local.gap}px`,\n \"grid-auto-rows\": `${local.rowHeight}px`,\n });\n\n return (\n <div\n ref={(el) => (viewportEl = el)}\n class={cn(\"smwb-asset-grid\", local.class)}\n style={local.style}\n onScroll={vl.onScroll}\n >\n <Show\n when={!local.loading}\n fallback={\n <div class=\"smwb-asset-grid__plain\" style={plainStyle()}>\n <For each={Array.from({ length: local.loadingCount })}>\n {() => <div class=\"smwb-asset-grid__skeleton\" style={{ height: `${local.rowHeight}px` }} />}\n </For>\n </div>\n }\n >\n <Show\n when={local.items.length > 0}\n fallback={<div class=\"smwb-asset-grid__empty\">{local.emptyLabel}</div>}\n >\n <Show\n when={ready()}\n fallback={\n <div class=\"smwb-asset-grid__plain\" style={plainStyle()}>\n <For each={local.items}>{(item, index) => local.renderItem(item, index())}</For>\n </div>\n }\n >\n <div class=\"smwb-asset-grid__sizer\" style={{ height: `${vl.totalHeight()}px`, position: \"relative\" }}>\n <div\n class=\"smwb-asset-grid__band\"\n style={{ position: \"absolute\", top: \"0\", left: \"0\", right: \"0\", transform: `translateY(${vl.offsetY()}px)` }}\n >\n <For each={visibleRows()}>\n {(row) => (\n <div class=\"smwb-asset-grid__row\" style={rowStyle()}>\n <For each={Array.from({ length: cols() }, (_, c) => row * cols() + c)}>\n {(index) => (\n <Show when={index < local.items.length}>\n {local.renderItem(local.items[index] as T, index)}\n </Show>\n )}\n </For>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n </Show>\n </Show>\n </div>\n );\n}\n\nexport default AssetGrid;\n"],"names":["AssetGrid","props","merged","mergeProps","minColumn","gap","overscan","loadingCount","local","splitProps","viewportEl","width","setWidth","createSignal","height","setHeight","ready","setReady","onMount","ResizeObserver","ro","clientWidth","clientHeight","observe","onCleanup","disconnect","cols","createMemo","w","Math","max","floor","rowCount","ceil","items","length","vl","createVirtualList","itemCount","itemHeight","rowStride","rowHeight","viewportHeight","visibleRows","out","row","startIndex","endIndex","push","rowStyle","display","plainStyle","_el$","_tmpl$2","_$addEventListener","onScroll","_$use","el","_$insert","_$createComponent","Show","when","loading","fallback","_el$4","_tmpl$3","For","each","Array","from","children","_el$5","_tmpl$4","_$effect","_$p","_$setStyleProperty","_$style","_el$6","_tmpl$5","emptyLabel","_el$7","item","index","renderItem","_el$2","_tmpl$","_el$3","firstChild","_el$8","_tmpl$6","_","c","_p$","_v$","totalHeight","_v$2","offsetY","e","t","undefined","_v$3","cn","class","_v$4","style","_$className"],"mappings":";;;;;;AAiCO,SAASA,GAAaC,GAAuC;AAClE,QAAMC,IAASC,EAAW;AAAA,IAAEC,WAAW;AAAA,IAAKC,KAAK;AAAA,IAAGC,UAAU;AAAA,IAAGC,cAAc;AAAA,EAAA,GAAMN,CAAK,GACpF,CAACO,CAAK,IAAIC,EAAWP,GAAQ,CACjC,SACA,cACA,aACA,aACA,OACA,YACA,WACA,gBACA,cACA,SACA,OAAO,CACR;AAED,MAAIQ;AACJ,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAa,CAAC,GAClC,CAACC,GAAQC,CAAS,IAAIF,EAAa,CAAC,GACpC,CAACG,GAAOC,CAAQ,IAAIJ,EAAa,EAAK;AAE5CK,EAAAA,EAAQ,MAAM;AACZ,QAAI,CAACR,KAAc,OAAOS,iBAAmB,IAAa;AAC1D,UAAMC,IAAK,IAAID,eAAe,MAAM;AAClC,MAAKT,MACLE,EAASF,EAAWW,WAAW,GAC/BN,EAAUL,EAAWY,YAAY,GACjCL,EAAS,EAAI;AAAA,IACf,CAAC;AACDG,IAAAA,EAAGG,QAAQb,CAAU,GACrBc,EAAU,MAAMJ,EAAGK,YAAY;AAAA,EACjC,CAAC;AAED,QAAMC,IAAOC,EAAW,MAAM;AAC5B,UAAMC,IAAIjB,EAAAA;AACV,WAAIiB,KAAK,IAAU,IACZC,KAAKC,IAAI,GAAGD,KAAKE,OAAOH,IAAIpB,EAAMH,QAAQG,EAAMJ,YAAYI,EAAMH,IAAI,CAAC;AAAA,EAChF,CAAC,GACK2B,IAAWL,EAAW,MAAME,KAAKI,KAAKzB,EAAM0B,MAAMC,SAAST,EAAAA,CAAM,CAAC,GAGlEU,IAAKC,EAAkB;AAAA,IAC3BC,WAAWN;AAAAA,IACXO,YAJgBC,MAAchC,EAAMiC,YAAYjC,EAAMH;AAAAA,IAKtDqC,gBAAgBA,MAAM5B,EAAAA,KAAY;AAAA,IAClCR,UAAUE,EAAMF;AAAAA,EAAAA,CACjB,GAEKqC,IAAchB,EAAW,MAAM;AACnC,UAAMiB,IAAgB,CAAA;AACtB,aAASC,IAAMT,EAAGU,WAAAA,GAAcD,IAAMT,EAAGW,SAAAA,GAAYF,IAAOD,CAAAA,EAAII,KAAKH,CAAG;AACxE,WAAOD;AAAAA,EACT,CAAC,GAEKK,IAAWA,OAA0B;AAAA,IACzCC,SAAS;AAAA,IACT,yBAAyB,UAAUxB,EAAAA,CAAM;AAAA,IACzCrB,KAAK,GAAGG,EAAMH,GAAG;AAAA,IACjBS,QAAQ,GAAGN,EAAMiC,SAAS;AAAA,IAC1B,iBAAiB,GAAGjC,EAAMH,GAAG;AAAA,EAAA,IAGzB8C,IAAaA,OAA0B;AAAA,IAC3CD,SAAS;AAAA,IACT,yBAAyB,4BAA4B1C,EAAMJ,SAAS;AAAA,IACpEC,KAAK,GAAGG,EAAMH,GAAG;AAAA,IACjB,kBAAkB,GAAGG,EAAMiC,SAAS;AAAA,EAAA;AAGtC,UAAA,MAAA;AAAA,QAAAW,IAAAC,EAAAA;AAAAC,WAAAA,EAAAF,GAAA,UAKchB,EAAGmB,QAAQ,GAAAC,EAHfC,CAAAA,MAAQ/C,IAAa+C,GAAGL,CAAA,GAAAM,EAAAN,GAAAO,EAK7BC,GAAI;AAAA,MAAA,IACHC,OAAI;AAAA,eAAE,CAACrD,EAAMsD;AAAAA,MAAO;AAAA,MAAA,IACpBC,WAAQ;AAAA,gBAAA,MAAA;AAAA,cAAAC,IAAAC,EAAAA;AAAAP,iBAAAA,EAAAM,GAAAL,EAEHO,GAAG;AAAA,YAAA,IAACC,OAAI;AAAA,qBAAEC,MAAMC,KAAK;AAAA,gBAAElC,QAAQ3B,EAAMD;AAAAA,cAAAA,CAAc;AAAA,YAAC;AAAA,YAAA+D,UAClDA,OAAA,MAAA;AAAA,kBAAAC,IAAAC,EAAAA;AAAAC,qBAAAA,EAAAC,CAAAA,MAAAC,EAAAJ,GAAA,UAA8D,GAAG/D,EAAMiC,SAAS,IAAI,CAAA,GAAA8B;AAAAA,YAAA,GAAA;AAAA,UAAA,CAAM,CAAA,GAAAE,EAAAC,OAAAE,EAAAZ,GAFpDb,EAAAA,GAAYuB,CAAA,CAAA,GAAAV;AAAAA,QAAA,GAAA;AAAA,MAAA;AAAA,MAAA,IAAAM,WAAA;AAAA,eAAAX,EAOxDC,GAAI;AAAA,UAAA,IACHC,OAAI;AAAA,mBAAErD,EAAM0B,MAAMC,SAAS;AAAA,UAAC;AAAA,UAAA,IAC5B4B,WAAQ;AAAA,oBAAA,MAAA;AAAA,kBAAAc,IAAAC,EAAAA;AAAApB,qBAAAA,EAAAmB,GAAA,MAAuCrE,EAAMuE,UAAU,GAAAF;AAAAA,YAAA,GAAA;AAAA,UAAA;AAAA,UAAA,IAAAP,WAAA;AAAA,mBAAAX,EAE9DC,GAAI;AAAA,cAAA,IACHC,OAAI;AAAA,uBAAE7C,EAAAA;AAAAA,cAAO;AAAA,cAAA,IACb+C,WAAQ;AAAA,wBAAA,MAAA;AAAA,sBAAAiB,IAAAf,EAAAA;AAAAP,yBAAAA,EAAAsB,GAAArB,EAEHO,GAAG;AAAA,oBAAA,IAACC,OAAI;AAAA,6BAAE3D,EAAM0B;AAAAA,oBAAK;AAAA,oBAAAoC,UAAGA,CAACW,GAAMC,MAAU1E,EAAM2E,WAAWF,GAAMC,GAAO;AAAA,kBAAA,CAAC,CAAA,GAAAT,EAAAC,OAAAE,EAAAI,GADhC7B,EAAAA,GAAYuB,CAAA,CAAA,GAAAM;AAAAA,gBAAA,GAAA;AAAA,cAAA;AAAA,cAAA,IAAAV,WAAA;AAAA,oBAAAc,IAAAC,EAAAA,GAAAC,IAAAF,EAAAG;AAAA7B,uBAAAA,EAAA4B,GAAA3B,EAUpDO,GAAG;AAAA,kBAAA,IAACC,OAAI;AAAA,2BAAExB,EAAAA;AAAAA,kBAAa;AAAA,kBAAA2B,UACpBzB,QAAG,MAAA;AAAA,wBAAA2C,IAAAC,EAAAA;AAAA/B,2BAAAA,EAAA8B,GAAA7B,EAEAO,GAAG;AAAA,sBAAA,IAACC,OAAI;AAAA,+BAAEC,MAAMC,KAAK;AAAA,0BAAElC,QAAQT,EAAAA;AAAAA,wBAAK,GAAK,CAACgE,GAAGC,MAAM9C,IAAMnB,EAAAA,IAASiE,CAAC;AAAA,sBAAC;AAAA,sBAAArB,UACjEY,CAAAA,MAAKvB,EACJC,GAAI;AAAA,wBAAA,IAACC,OAAI;AAAA,iCAAEqB,IAAQ1E,EAAM0B,MAAMC;AAAAA,wBAAM;AAAA,wBAAA,IAAAmC,WAAA;AAAA,iCACnC9D,EAAM2E,WAAW3E,EAAM0B,MAAMgD,CAAK,GAAQA,CAAK;AAAA,wBAAC;AAAA,sBAAA,CAAA;AAAA,oBAAA,CAEpD,CAAA,GAAAT,EAAAC,OAAAE,EAAAY,GANoCvC,EAAAA,GAAUyB,CAAA,CAAA,GAAAc;AAAAA,kBAAA,GAAA;AAAA,gBAAA,CASpD,CAAA,GAAAf,EAAAmB,CAAAA,MAAA;AAAA,sBAAAC,IAhB8C,GAAGzD,EAAG0D,YAAAA,CAAa,MAAIC,IAGG,cAAc3D,EAAG4D,QAAAA,CAAS;AAAKH,yBAAAA,MAAAD,EAAAK,KAAAtB,EAAAS,GAAA,UAAAQ,EAAAK,IAAAJ,CAAA,GAAAE,MAAAH,EAAAM,KAAAvB,EAAAW,GAAA,aAAAM,EAAAM,IAAAH,CAAA,GAAAH;AAAAA,gBAAA,GAAA;AAAA,kBAAAK,GAAAE;AAAAA,kBAAAD,GAAAC;AAAAA,gBAAAA,CAAA,GAAAf;AAAAA,cAAA;AAAA,YAAA,CAAA;AAAA,UAAA;AAAA,QAAA,CAAA;AAAA,MAAA;AAAA,IAAA,CAAA,CAAA,GAAAX,EAAAmB,CAAAA,MAAA;AAAA,UAAAQ,IA7B7GC,EAAG,mBAAmB7F,EAAM8F,KAAK,GAACC,IAClC/F,EAAMgG;AAAKJ,aAAAA,MAAAR,EAAAK,KAAAQ,EAAArD,GAAAwC,EAAAK,IAAAG,CAAA,GAAAR,EAAAM,IAAAtB,EAAAxB,GAAAmD,GAAAX,EAAAM,CAAA,GAAAN;AAAAA,IAAA,GAAA;AAAA,MAAAK,GAAAE;AAAAA,MAAAD,GAAAC;AAAAA,IAAAA,CAAA,GAAA/C;AAAAA,EAAA,GAAA;AAkDxB;"}
@@ -0,0 +1,2 @@
1
+ export { AssetGrid } from "./assetGrid";
2
+ export type { AssetGridProps } from "./assetGrid";
@@ -0,0 +1,27 @@
1
+ import { type JSX } from "solid-js";
2
+ import { type ChipColor } from "../chip";
3
+ export interface ChipGroupOption {
4
+ value: string;
5
+ label: string;
6
+ icon?: JSX.Element;
7
+ disabled?: boolean;
8
+ }
9
+ export interface ChipGroupProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "onChange"> {
10
+ options: ChipGroupOption[];
11
+ /** Selected value (single) or values (when `multiple`). */
12
+ value?: string | string[];
13
+ /** Allow more than one selected chip (value becomes a string[]). */
14
+ multiple?: boolean;
15
+ onChange?: (value: string | string[]) => void;
16
+ size?: "small" | "medium";
17
+ color?: ChipColor;
18
+ disabled?: boolean;
19
+ }
20
+ /**
21
+ * A multi/single-select toggle group built on `Chip` — the "chip as a toggle"
22
+ * loop (selected → filled, else outlined; `role=group`) that apps re-hand-roll
23
+ * for filters / segmented controls. Pass an `options` array and a controlled
24
+ * `value`; `onChange` returns the next value (string, or string[] when multiple).
25
+ */
26
+ export declare function ChipGroup(props: ChipGroupProps): JSX.Element;
27
+ export default ChipGroup;
@@ -0,0 +1,58 @@
1
+ import { spread as p, mergeProps as n, insert as g, createComponent as o, template as f } from "solid-js/web";
2
+ import '../../../assets/styles/less/components/chipGroup/chipGroup.entry.css';/* empty css */
3
+ import { mergeProps as v, splitProps as h, For as b } from "solid-js";
4
+ import C from "clsx";
5
+ import { Chip as z } from "../chip/chip.js";
6
+ var P = /* @__PURE__ */ f("<div>");
7
+ function k(i) {
8
+ const a = v({
9
+ size: "medium",
10
+ color: "primary"
11
+ }, i), [e, c] = h(a, ["options", "value", "multiple", "onChange", "size", "color", "disabled", "class"]), l = () => e.value == null ? [] : Array.isArray(e.value) ? e.value : [e.value], s = (t) => l().includes(t), u = (t) => {
12
+ if (e.multiple) {
13
+ const r = l(), m = r.includes(t) ? r.filter((d) => d !== t) : [...r, t];
14
+ e.onChange?.(m);
15
+ } else
16
+ e.onChange?.(t);
17
+ };
18
+ return (() => {
19
+ var t = P();
20
+ return p(t, n(c, {
21
+ role: "group",
22
+ get class() {
23
+ return C("smwb-chip-group", e.class);
24
+ }
25
+ }), !1, !0), g(t, o(b, {
26
+ get each() {
27
+ return e.options;
28
+ },
29
+ children: (r) => o(z, n({
30
+ get label() {
31
+ return r.label;
32
+ },
33
+ get size() {
34
+ return e.size;
35
+ },
36
+ get color() {
37
+ return e.color;
38
+ },
39
+ get selected() {
40
+ return s(r.value);
41
+ },
42
+ get variant() {
43
+ return s(r.value) ? "filled" : "outlined";
44
+ },
45
+ get disabled() {
46
+ return !!(e.disabled || r.disabled);
47
+ },
48
+ onClick: () => u(r.value)
49
+ }, () => r.icon ? {
50
+ icon: r.icon
51
+ } : {}))
52
+ })), t;
53
+ })();
54
+ }
55
+ export {
56
+ k as ChipGroup
57
+ };
58
+ //# sourceMappingURL=chipGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chipGroup.js","sources":["../../../../src/components/dataDisplay/chipGroup/chipGroup.tsx"],"sourcesContent":["import { type JSX, For, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Chip, type ChipColor } from \"../chip\";\n\nexport interface ChipGroupOption {\n value: string;\n label: string;\n icon?: JSX.Element;\n disabled?: boolean;\n}\n\nexport interface ChipGroupProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n options: ChipGroupOption[];\n /** Selected value (single) or values (when `multiple`). */\n value?: string | string[];\n /** Allow more than one selected chip (value becomes a string[]). */\n multiple?: boolean;\n onChange?: (value: string | string[]) => void;\n size?: \"small\" | \"medium\";\n color?: ChipColor;\n disabled?: boolean;\n}\n\n/**\n * A multi/single-select toggle group built on `Chip` — the \"chip as a toggle\"\n * loop (selected → filled, else outlined; `role=group`) that apps re-hand-roll\n * for filters / segmented controls. Pass an `options` array and a controlled\n * `value`; `onChange` returns the next value (string, or string[] when multiple).\n */\nexport function ChipGroup(props: ChipGroupProps): JSX.Element {\n const merged = mergeProps({ size: \"medium\" as const, color: \"primary\" as ChipColor }, props);\n const [local, rest] = splitProps(merged, [\n \"options\",\n \"value\",\n \"multiple\",\n \"onChange\",\n \"size\",\n \"color\",\n \"disabled\",\n \"class\",\n ]);\n\n const selectedValues = (): string[] => {\n if (local.value == null) return [];\n return Array.isArray(local.value) ? local.value : [local.value];\n };\n const isSelected = (value: string): boolean => selectedValues().includes(value);\n\n const toggle = (value: string): void => {\n if (local.multiple) {\n const current = selectedValues();\n const next = current.includes(value) ? current.filter((v) => v !== value) : [...current, value];\n local.onChange?.(next);\n } else {\n local.onChange?.(value);\n }\n };\n\n return (\n <div {...rest} role=\"group\" class={cn(\"smwb-chip-group\", local.class)}>\n <For each={local.options}>\n {(option) => (\n <Chip\n label={option.label}\n size={local.size}\n color={local.color}\n selected={isSelected(option.value)}\n variant={isSelected(option.value) ? \"filled\" : \"outlined\"}\n disabled={!!(local.disabled || option.disabled)}\n onClick={() => toggle(option.value)}\n {...(option.icon ? { icon: option.icon } : {})}\n />\n )}\n </For>\n </div>\n );\n}\n\nexport default ChipGroup;\n"],"names":["ChipGroup","props","merged","mergeProps","size","color","local","rest","splitProps","selectedValues","value","Array","isArray","isSelected","includes","toggle","multiple","current","next","filter","v","onChange","_el$","_tmpl$","_$spread","_$mergeProps","cn","class","_$insert","_$createComponent","For","each","options","children","option","Chip","label","selected","variant","disabled","onClick","icon"],"mappings":";;;;;;AA8BO,SAASA,EAAUC,GAAoC;AAC5D,QAAMC,IAASC,EAAW;AAAA,IAAEC,MAAM;AAAA,IAAmBC,OAAO;AAAA,EAAA,GAA0BJ,CAAK,GACrF,CAACK,GAAOC,CAAI,IAAIC,EAAWN,GAAQ,CACvC,WACA,SACA,YACA,YACA,QACA,SACA,YACA,OAAO,CACR,GAEKO,IAAiBA,MACjBH,EAAMI,SAAS,OAAa,CAAA,IACzBC,MAAMC,QAAQN,EAAMI,KAAK,IAAIJ,EAAMI,QAAQ,CAACJ,EAAMI,KAAK,GAE1DG,IAAaA,CAACH,MAA2BD,EAAAA,EAAiBK,SAASJ,CAAK,GAExEK,IAASA,CAACL,MAAwB;AACtC,QAAIJ,EAAMU,UAAU;AAClB,YAAMC,IAAUR,EAAAA,GACVS,IAAOD,EAAQH,SAASJ,CAAK,IAAIO,EAAQE,OAAQC,CAAAA,MAAMA,MAAMV,CAAK,IAAI,CAAC,GAAGO,GAASP,CAAK;AAC9FJ,MAAAA,EAAMe,WAAWH,CAAI;AAAA,IACvB;AACEZ,MAAAA,EAAMe,WAAWX,CAAK;AAAA,EAE1B;AAEA,UAAA,MAAA;AAAA,QAAAY,IAAAC,EAAAA;AAAAC,WAAAA,EAAAF,GAAAG,EACWlB,GAAI;AAAA,MAAA,MAAO;AAAA,MAAO,IAAA,QAAA;AAAA,eAAQmB,EAAG,mBAAmBpB,EAAMqB,KAAK;AAAA,MAAC;AAAA,IAAA,CAAA,GAAA,IAAA,EAAA,GAAAC,EAAAN,GAAAO,EAClEC,GAAG;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEzB,EAAM0B;AAAAA,MAAO;AAAA,MAAAC,UACpBC,CAAAA,MAAML,EACLM,GAAIV,EAAA;AAAA,QAAA,IACHW,QAAK;AAAA,iBAAEF,EAAOE;AAAAA,QAAK;AAAA,QAAA,IACnBhC,OAAI;AAAA,iBAAEE,EAAMF;AAAAA,QAAI;AAAA,QAAA,IAChBC,QAAK;AAAA,iBAAEC,EAAMD;AAAAA,QAAK;AAAA,QAAA,IAClBgC,WAAQ;AAAA,iBAAExB,EAAWqB,EAAOxB,KAAK;AAAA,QAAC;AAAA,QAAA,IAClC4B,UAAO;AAAA,iBAAEzB,EAAWqB,EAAOxB,KAAK,IAAI,WAAW;AAAA,QAAU;AAAA,QAAA,IACzD6B,WAAQ;AAAA,iBAAE,CAAC,EAAEjC,EAAMiC,YAAYL,EAAOK;AAAAA,QAAS;AAAA,QAC/CC,SAASA,MAAMzB,EAAOmB,EAAOxB,KAAK;AAAA,MAAA,GAAC,MAC9BwB,EAAOO,OAAO;AAAA,QAAEA,MAAMP,EAAOO;AAAAA,MAAAA,IAAS,EAAE,CAAA;AAAA,IAAA,CAEhD,CAAA,GAAAnB;AAAAA,EAAA,GAAA;AAIT;"}
@@ -0,0 +1,2 @@
1
+ export { ChipGroup } from "./chipGroup";
2
+ export type { ChipGroupProps, ChipGroupOption } from "./chipGroup";
@@ -0,0 +1,2 @@
1
+ export { LazyImage } from "./lazyImage";
2
+ export type { LazyImageProps } from "./lazyImage";
@@ -0,0 +1,24 @@
1
+ import { type JSX } from "solid-js";
2
+ import { type Ref } from "../../../primitives/mergeRefs";
3
+ export interface LazyImageProps extends Omit<JSX.ImgHTMLAttributes<HTMLImageElement>, "onError"> {
4
+ /** Image URL. When absent (or after a load error) the `fallback` is shown. */
5
+ src?: string | undefined;
6
+ alt?: string | undefined;
7
+ /** Rendered in place of the image when it is missing or fails to load. */
8
+ fallback?: JSX.Element | undefined;
9
+ /** Defer loading until the image scrolls into view (IntersectionObserver). Default true. */
10
+ lazy?: boolean;
11
+ /** CSS `aspect-ratio` for the wrapper (e.g. `1`, `"4 / 3"`) to reserve space before load. */
12
+ aspectRatio?: string | number;
13
+ /** Fires on a load error (after the fallback is swapped in). */
14
+ onError?: (event: Event) => void;
15
+ ref?: Ref<HTMLImageElement>;
16
+ }
17
+ /**
18
+ * An `<img>` with a built-in `onError` fallback and optional in-viewport lazy
19
+ * loading — the `<img decoding=async onError=…>` + `<Show>` dance hand-rolled in
20
+ * every gallery, in one primitive. SSR-safe: renders the image markup on the
21
+ * server; the IntersectionObserver only runs after mount on the client.
22
+ */
23
+ export declare function LazyImage(props: LazyImageProps): JSX.Element;
24
+ export default LazyImage;
@@ -0,0 +1,73 @@
1
+ import { insert as o, createComponent as u, memo as $, use as h, spread as k, mergeProps as E, effect as I, className as P, style as R, template as i } from "solid-js/web";
2
+ import '../../../assets/styles/less/components/lazyImage/lazyImage.entry.css';/* empty css */
3
+ import { mergeProps as S, splitProps as C, createSignal as g, onMount as F, Show as p, onCleanup as O } from "solid-js";
4
+ import x from "clsx";
5
+ import { mergeRefs as L } from "../../../primitives/mergeRefs.js";
6
+ var M = /* @__PURE__ */ i("<span class=smwb-lazy-image__fallback>"), N = /* @__PURE__ */ i("<img>", !0, !1, !1), V = /* @__PURE__ */ i("<span>");
7
+ function G(d) {
8
+ const c = S({
9
+ lazy: !0
10
+ }, d), [r, v] = C(c, ["src", "alt", "fallback", "lazy", "aspectRatio", "class", "onError", "ref"]), [y, b] = g(!1), [m, f] = g(!c.lazy);
11
+ let s;
12
+ F(() => {
13
+ if (!r.lazy || m() || !s) return;
14
+ if (typeof IntersectionObserver > "u") {
15
+ f(!0);
16
+ return;
17
+ }
18
+ const t = new IntersectionObserver((e) => {
19
+ e.some((a) => a.isIntersecting) && (f(!0), t.disconnect());
20
+ });
21
+ t.observe(s), O(() => t.disconnect());
22
+ });
23
+ const z = (t) => {
24
+ b(!0), r.onError?.(t);
25
+ }, n = () => y() || !r.src, w = () => m() ? r.src : void 0, _ = () => r.aspectRatio != null ? {
26
+ "aspect-ratio": String(r.aspectRatio)
27
+ } : void 0;
28
+ return (() => {
29
+ var t = V();
30
+ return o(t, u(p, {
31
+ get when() {
32
+ return $(() => !!n())() && r.fallback;
33
+ },
34
+ get children() {
35
+ var e = M();
36
+ return o(e, () => r.fallback), e;
37
+ }
38
+ }), null), o(t, u(p, {
39
+ get when() {
40
+ return !n();
41
+ },
42
+ get children() {
43
+ var e = N(), a = L(r.ref, (l) => s = l);
44
+ return typeof a == "function" && h(a, e), k(e, E(v, {
45
+ class: "smwb-lazy-image__img",
46
+ get src() {
47
+ return w();
48
+ },
49
+ get alt() {
50
+ return r.alt ?? "";
51
+ },
52
+ get loading() {
53
+ return r.lazy ? "lazy" : void 0;
54
+ },
55
+ decoding: "async",
56
+ onError: z
57
+ }), !1, !1), e;
58
+ }
59
+ }), null), I((e) => {
60
+ var a = x("smwb-lazy-image", r.class, {
61
+ "smwb-lazy-image--empty": n()
62
+ }), l = _();
63
+ return a !== e.e && P(t, e.e = a), e.t = R(t, l, e.t), e;
64
+ }, {
65
+ e: void 0,
66
+ t: void 0
67
+ }), t;
68
+ })();
69
+ }
70
+ export {
71
+ G as LazyImage
72
+ };
73
+ //# sourceMappingURL=lazyImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazyImage.js","sources":["../../../../src/components/dataDisplay/lazyImage/lazyImage.tsx"],"sourcesContent":["import { type JSX, Show, createSignal, mergeProps, onCleanup, onMount, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface LazyImageProps extends Omit<JSX.ImgHTMLAttributes<HTMLImageElement>, \"onError\"> {\n /** Image URL. When absent (or after a load error) the `fallback` is shown. */\n src?: string | undefined;\n alt?: string | undefined;\n /** Rendered in place of the image when it is missing or fails to load. */\n fallback?: JSX.Element | undefined;\n /** Defer loading until the image scrolls into view (IntersectionObserver). Default true. */\n lazy?: boolean;\n /** CSS `aspect-ratio` for the wrapper (e.g. `1`, `\"4 / 3\"`) to reserve space before load. */\n aspectRatio?: string | number;\n /** Fires on a load error (after the fallback is swapped in). */\n onError?: (event: Event) => void;\n ref?: Ref<HTMLImageElement>;\n}\n\n/**\n * An `<img>` with a built-in `onError` fallback and optional in-viewport lazy\n * loading — the `<img decoding=async onError=…>` + `<Show>` dance hand-rolled in\n * every gallery, in one primitive. SSR-safe: renders the image markup on the\n * server; the IntersectionObserver only runs after mount on the client.\n */\nexport function LazyImage(props: LazyImageProps): JSX.Element {\n const merged = mergeProps({ lazy: true }, props);\n const [local, rest] = splitProps(merged, [\n \"src\",\n \"alt\",\n \"fallback\",\n \"lazy\",\n \"aspectRatio\",\n \"class\",\n \"onError\",\n \"ref\",\n ]);\n\n const [failed, setFailed] = createSignal(false);\n // When lazy, hold the real src back until the element scrolls into view.\n const [visible, setVisible] = createSignal(!merged.lazy);\n let imgEl: HTMLImageElement | undefined;\n\n onMount(() => {\n if (!local.lazy || visible() || !imgEl) return;\n if (typeof IntersectionObserver === \"undefined\") {\n setVisible(true);\n return;\n }\n const io = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n setVisible(true);\n io.disconnect();\n }\n });\n io.observe(imgEl);\n onCleanup(() => io.disconnect());\n });\n\n const onError = (event: Event): void => {\n setFailed(true);\n local.onError?.(event);\n };\n\n const showFallback = (): boolean => failed() || !local.src;\n const resolvedSrc = (): string | undefined => (visible() ? local.src : undefined);\n const style = (): JSX.CSSProperties | undefined =>\n local.aspectRatio != null ? { \"aspect-ratio\": String(local.aspectRatio) } : undefined;\n\n return (\n <span class={cn(\"smwb-lazy-image\", local.class, { \"smwb-lazy-image--empty\": showFallback() })} style={style()}>\n <Show when={showFallback() && local.fallback}>\n <span class=\"smwb-lazy-image__fallback\">{local.fallback}</span>\n </Show>\n <Show when={!showFallback()}>\n <img\n {...rest}\n ref={mergeRefs(local.ref, (el) => (imgEl = el as HTMLImageElement))}\n class=\"smwb-lazy-image__img\"\n src={resolvedSrc()}\n alt={local.alt ?? \"\"}\n loading={local.lazy ? \"lazy\" : undefined}\n decoding=\"async\"\n onError={onError}\n />\n </Show>\n </span>\n );\n}\n\nexport default LazyImage;\n"],"names":["LazyImage","props","merged","mergeProps","lazy","local","rest","splitProps","failed","setFailed","createSignal","visible","setVisible","imgEl","onMount","IntersectionObserver","io","entries","some","entry","isIntersecting","disconnect","observe","onCleanup","onError","event","showFallback","src","resolvedSrc","undefined","style","aspectRatio","String","_el$","_tmpl$3","_$insert","_$createComponent","Show","when","_$memo","fallback","children","_el$2","_tmpl$","_el$3","_tmpl$2","_ref$","mergeRefs","ref","el","_$use","_$spread","_$mergeProps","alt","loading","_$effect","_p$","_v$","cn","class","_v$2","e","_$className","t","_$style"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ThumbCard } from "./thumbCard";
2
+ export type { ThumbCardProps } from "./thumbCard";
@@ -0,0 +1,31 @@
1
+ import { type JSX } from "solid-js";
2
+ import { type Ref } from "../../../primitives/mergeRefs";
3
+ export interface ThumbCardProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "onSelect"> {
4
+ /** Thumbnail URL; falls back to `fallback` when missing / failed. */
5
+ src?: string;
6
+ caption?: JSX.Element;
7
+ selected?: boolean;
8
+ /** Makes the card a selectable button (keyboard + `aria-pressed`). */
9
+ onSelect?: () => void;
10
+ /** Shown in place of the image when `src` is missing / fails. */
11
+ fallback?: JSX.Element;
12
+ /** A larger preview shown in a floating popup after a hover delay. */
13
+ hoverPreview?: JSX.Element | string;
14
+ /** Top-left overlay slot (e.g. a favourite star). */
15
+ topStart?: JSX.Element;
16
+ /** Top-right overlay slot (e.g. a kebab menu). */
17
+ topEnd?: JSX.Element;
18
+ lazy?: boolean;
19
+ disabled?: boolean;
20
+ /** Delay (ms) before the hover preview appears. Default 350. */
21
+ hoverDelay?: number;
22
+ ref?: Ref<HTMLDivElement>;
23
+ }
24
+ /**
25
+ * A selectable gallery card: image with an `onError` fallback + optional lazy
26
+ * load, keyboard/`aria-pressed` selection, corner action slots, and a delayed
27
+ * floating hover-preview. The generic gallery-card behaviour every app rebuilds
28
+ * on top of the primitives. SSR-safe — the hover preview is client-only.
29
+ */
30
+ export declare function ThumbCard(props: ThumbCardProps): JSX.Element;
31
+ export default ThumbCard;
@@ -0,0 +1,114 @@
1
+ import { use as h, spread as D, mergeProps as E, memo as g, insert as l, createComponent as n, Portal as z, effect as f, setAttribute as C, style as T, isServer as L, template as a } from "solid-js/web";
2
+ import '../../../assets/styles/less/components/thumbCard/thumbCard.entry.css';/* empty css */
3
+ import { mergeProps as x, splitProps as F, createSignal as K, onCleanup as M, Show as c } from "solid-js";
4
+ import O from "clsx";
5
+ import { createFloating as R } from "../../../primitives/createFloating.js";
6
+ import { mergeRefs as A } from "../../../primitives/mergeRefs.js";
7
+ import { LazyImage as I } from "../lazyImage/lazyImage.js";
8
+ var j = /* @__PURE__ */ a('<div class="smwb-thumb-card__slot smwb-thumb-card__slot--start">'), q = /* @__PURE__ */ a('<div class="smwb-thumb-card__slot smwb-thumb-card__slot--end">'), B = /* @__PURE__ */ a("<div class=smwb-thumb-card__caption>"), G = /* @__PURE__ */ a("<div class=smwb-thumb-card__preview>"), H = /* @__PURE__ */ a("<div><div class=smwb-thumb-card__media>"), J = /* @__PURE__ */ a("<img alt>");
9
+ function Z(_) {
10
+ const w = x({
11
+ lazy: !0,
12
+ hoverDelay: 350
13
+ }, _), [e, y] = F(w, ["src", "caption", "selected", "onSelect", "fallback", "hoverPreview", "topStart", "topEnd", "lazy", "disabled", "hoverDelay", "class", "ref"]), m = R({
14
+ placement: () => "right"
15
+ }), [$, p] = K(!1);
16
+ let i;
17
+ const d = () => {
18
+ i && (clearTimeout(i), i = void 0);
19
+ }, S = () => {
20
+ e.hoverPreview == null || e.disabled || (d(), i = setTimeout(() => p(!0), e.hoverDelay));
21
+ }, P = () => {
22
+ d(), p(!1);
23
+ };
24
+ M(d);
25
+ const o = () => !!e.onSelect && !e.disabled, k = (r) => {
26
+ o() && (r.key === "Enter" || r.key === " ") && (r.preventDefault(), e.onSelect?.());
27
+ };
28
+ return (() => {
29
+ var r = H(), u = r.firstChild, v = A(e.ref, (t) => m.setReference(t));
30
+ return typeof v == "function" && h(v, r), D(r, E(y, {
31
+ get class() {
32
+ return O("smwb-thumb-card", e.class, {
33
+ "smwb-thumb-card--selected": e.selected,
34
+ "smwb-thumb-card--disabled": e.disabled,
35
+ "smwb-thumb-card--interactive": o()
36
+ });
37
+ },
38
+ get role() {
39
+ return o() ? "button" : void 0;
40
+ },
41
+ get tabindex() {
42
+ return o() ? 0 : void 0;
43
+ },
44
+ get "aria-pressed"() {
45
+ return g(() => !!e.onSelect)() ? e.selected ?? !1 : void 0;
46
+ },
47
+ get "aria-disabled"() {
48
+ return e.disabled || void 0;
49
+ },
50
+ get onClick() {
51
+ return o() ? () => e.onSelect?.() : void 0;
52
+ },
53
+ onKeyDown: k,
54
+ onMouseEnter: S,
55
+ onMouseLeave: P
56
+ }), !1, !0), l(u, n(I, {
57
+ get src() {
58
+ return e.src;
59
+ },
60
+ get lazy() {
61
+ return e.lazy;
62
+ },
63
+ get fallback() {
64
+ return e.fallback;
65
+ }
66
+ }), null), l(u, n(c, {
67
+ get when() {
68
+ return e.topStart;
69
+ },
70
+ get children() {
71
+ var t = j();
72
+ return l(t, () => e.topStart), t;
73
+ }
74
+ }), null), l(u, n(c, {
75
+ get when() {
76
+ return e.topEnd;
77
+ },
78
+ get children() {
79
+ var t = q();
80
+ return l(t, () => e.topEnd), t;
81
+ }
82
+ }), null), l(r, n(c, {
83
+ get when() {
84
+ return e.caption;
85
+ },
86
+ get children() {
87
+ var t = B();
88
+ return l(t, () => e.caption), t;
89
+ }
90
+ }), null), l(r, n(c, {
91
+ get when() {
92
+ return $() && !L;
93
+ },
94
+ get children() {
95
+ return n(z, {
96
+ get children() {
97
+ var t = G();
98
+ return h((s) => m.setFloating(s), t), l(t, (() => {
99
+ var s = g(() => typeof e.hoverPreview == "string");
100
+ return () => s() ? (() => {
101
+ var b = J();
102
+ return f(() => C(b, "src", e.hoverPreview)), b;
103
+ })() : e.hoverPreview;
104
+ })()), f((s) => T(t, m.floatingStyles(), s)), t;
105
+ }
106
+ });
107
+ }
108
+ }), null), r;
109
+ })();
110
+ }
111
+ export {
112
+ Z as ThumbCard
113
+ };
114
+ //# sourceMappingURL=thumbCard.js.map