@sortsys/ui 0.1.34 → 0.1.35
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.
- package/dist/dev.js +158 -194
- package/dist/index.d.ts +13 -21
- package/dist/index.js +158 -194
- package/package.json +1 -1
package/dist/dev.js
CHANGED
|
@@ -441,6 +441,12 @@ function SSDropdown(props) {
|
|
|
441
441
|
const [renderMenu, setRenderMenu] = createSignal(false);
|
|
442
442
|
const [menuState, setMenuState] = createSignal("closed");
|
|
443
443
|
let rootRef;
|
|
444
|
+
const visibleItems = () => props.items.map((item, index) => ({
|
|
445
|
+
item,
|
|
446
|
+
index
|
|
447
|
+
})).filter(({
|
|
448
|
+
item
|
|
449
|
+
}) => !item.hideIf);
|
|
444
450
|
const close = () => setOpen(false);
|
|
445
451
|
createEffect(() => {
|
|
446
452
|
if (open()) {
|
|
@@ -469,64 +475,72 @@ function SSDropdown(props) {
|
|
|
469
475
|
window.removeEventListener("keydown", handleKeyDown);
|
|
470
476
|
});
|
|
471
477
|
});
|
|
472
|
-
return (
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
478
|
+
return createComponent(Show, {
|
|
479
|
+
get when() {
|
|
480
|
+
return visibleItems().length > 0;
|
|
481
|
+
},
|
|
482
|
+
get children() {
|
|
483
|
+
var _el$ = _tmpl$25(), _el$2 = _el$.firstChild;
|
|
484
|
+
use((el) => rootRef = el, _el$);
|
|
485
|
+
_el$2.$$click = () => setOpen((value) => !value);
|
|
486
|
+
insert(_el$2, () => props.icon ?? _tmpl$35());
|
|
487
|
+
insert(_el$, createComponent(Show, {
|
|
488
|
+
get when() {
|
|
489
|
+
return renderMenu();
|
|
490
|
+
},
|
|
491
|
+
get children() {
|
|
492
|
+
var _el$3 = _tmpl$14();
|
|
493
|
+
insert(_el$3, createComponent(For, {
|
|
494
|
+
get each() {
|
|
495
|
+
return visibleItems();
|
|
496
|
+
},
|
|
497
|
+
children: ({
|
|
498
|
+
item,
|
|
499
|
+
index
|
|
500
|
+
}) => (() => {
|
|
501
|
+
var _el$5 = _tmpl$43(), _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling;
|
|
502
|
+
_el$5.$$click = async () => {
|
|
503
|
+
close();
|
|
504
|
+
await item.onclick?.(index);
|
|
505
|
+
};
|
|
506
|
+
insert(_el$6, () => item.icon);
|
|
507
|
+
insert(_el$7, () => item.label);
|
|
508
|
+
insert(_el$5, (() => {
|
|
509
|
+
var _c$ = memo(() => !!item.checked);
|
|
510
|
+
return () => _c$() && _tmpl$53();
|
|
511
|
+
})(), null);
|
|
512
|
+
effect((_p$) => {
|
|
513
|
+
var _v$5 = item.checked ? "menuitemcheckbox" : "menuitem", _v$6 = item.checked ? "true" : void 0;
|
|
514
|
+
_v$5 !== _p$.e && setAttribute(_el$5, "role", _p$.e = _v$5);
|
|
515
|
+
_v$6 !== _p$.t && setAttribute(_el$5, "aria-checked", _p$.t = _v$6);
|
|
516
|
+
return _p$;
|
|
517
|
+
}, {
|
|
518
|
+
e: void 0,
|
|
519
|
+
t: void 0
|
|
520
|
+
});
|
|
521
|
+
return _el$5;
|
|
522
|
+
})()
|
|
523
|
+
}));
|
|
524
|
+
effect(() => setAttribute(_el$3, "data-state", menuState()));
|
|
525
|
+
return _el$3;
|
|
526
|
+
}
|
|
527
|
+
}), null);
|
|
528
|
+
effect((_p$) => {
|
|
529
|
+
var _v$ = `ss_dropdown ${props.class ?? ""}`, _v$2 = props.style, _v$3 = open(), _v$4 = props.ariaLabel ?? "Aktionen \xF6ffnen";
|
|
530
|
+
_v$ !== _p$.e && className(_el$, _p$.e = _v$);
|
|
531
|
+
_p$.t = style(_el$, _v$2, _p$.t);
|
|
532
|
+
_v$3 !== _p$.a && setAttribute(_el$2, "aria-expanded", _p$.a = _v$3);
|
|
533
|
+
_v$4 !== _p$.o && setAttribute(_el$2, "aria-label", _p$.o = _v$4);
|
|
534
|
+
return _p$;
|
|
535
|
+
}, {
|
|
536
|
+
e: void 0,
|
|
537
|
+
t: void 0,
|
|
538
|
+
a: void 0,
|
|
539
|
+
o: void 0
|
|
540
|
+
});
|
|
541
|
+
return _el$;
|
|
542
|
+
}
|
|
543
|
+
});
|
|
530
544
|
}
|
|
531
545
|
delegateEvents(["click"]);
|
|
532
546
|
var _tmpl$15 = /* @__PURE__ */ template(`<div><div class=ss_expandable__header role=button tabindex=0><span class=ss_expandable__icon aria-hidden=true></span><span class=ss_expandable__title></span></div><div class=ss_expandable__content style=transition-duration:200ms><div class=ss_expandable__content_inner>`);
|
|
@@ -2138,161 +2152,111 @@ function SSSurface(props) {
|
|
|
2138
2152
|
return _el$;
|
|
2139
2153
|
})();
|
|
2140
2154
|
}
|
|
2141
|
-
var _tmpl$41 = /* @__PURE__ */ template(`<div>`);
|
|
2142
|
-
var _tmpl$211 = /* @__PURE__ */ template(`<
|
|
2143
|
-
var _tmpl$310 = /* @__PURE__ */ template(`<button type=button role=tab>`);
|
|
2144
|
-
var SSTabsContext = createContext();
|
|
2155
|
+
var _tmpl$41 = /* @__PURE__ */ template(`<div><div class=ss_tablist role=tablist>`);
|
|
2156
|
+
var _tmpl$211 = /* @__PURE__ */ template(`<button type=button role=tab>`);
|
|
2145
2157
|
function SSTabs(props) {
|
|
2146
|
-
const
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
return prev;
|
|
2157
|
-
}
|
|
2158
|
-
nextIndex = prev.length;
|
|
2159
|
-
return [...prev, id];
|
|
2158
|
+
const visibleTabs = createMemo(() => props.tabs.map((tab, index) => ({
|
|
2159
|
+
...tab,
|
|
2160
|
+
index
|
|
2161
|
+
})).filter((tab) => !tab.hideIf));
|
|
2162
|
+
let tabRefs = [];
|
|
2163
|
+
const handleSelect = (index) => {
|
|
2164
|
+
if (index === props.selectedIndex) return;
|
|
2165
|
+
props.onChange?.({
|
|
2166
|
+
selectedIndex: index,
|
|
2167
|
+
previousIndex: props.selectedIndex
|
|
2160
2168
|
});
|
|
2161
|
-
return nextIndex;
|
|
2162
|
-
};
|
|
2163
|
-
const unregisterTab = (id) => {
|
|
2164
|
-
tabElements.delete(id);
|
|
2165
|
-
setTabIds((prev) => prev.filter((entry) => entry !== id));
|
|
2166
2169
|
};
|
|
2167
|
-
const focusTab = (
|
|
2168
|
-
const
|
|
2169
|
-
if (!
|
|
2170
|
-
|
|
2170
|
+
const focusTab = (position) => {
|
|
2171
|
+
const target = tabRefs[position];
|
|
2172
|
+
if (!target) return;
|
|
2173
|
+
target.focus();
|
|
2171
2174
|
};
|
|
2172
|
-
const
|
|
2173
|
-
const
|
|
2174
|
-
if (
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
})
|
|
2175
|
+
const handleKeyDown = (event, position) => {
|
|
2176
|
+
const tabs = visibleTabs();
|
|
2177
|
+
if (!tabs.length) return;
|
|
2178
|
+
let nextPosition = position;
|
|
2179
|
+
if (event.key === "ArrowRight") {
|
|
2180
|
+
nextPosition = (position + 1) % tabs.length;
|
|
2181
|
+
} else if (event.key === "ArrowLeft") {
|
|
2182
|
+
nextPosition = (position - 1 + tabs.length) % tabs.length;
|
|
2183
|
+
} else if (event.key === "Home") {
|
|
2184
|
+
nextPosition = 0;
|
|
2185
|
+
} else if (event.key === "End") {
|
|
2186
|
+
nextPosition = tabs.length - 1;
|
|
2187
|
+
} else {
|
|
2188
|
+
return;
|
|
2189
|
+
}
|
|
2190
|
+
event.preventDefault();
|
|
2191
|
+
const nextTab = tabs[nextPosition];
|
|
2192
|
+
if (!nextTab || nextTab.disabled) {
|
|
2193
|
+
focusTab(nextPosition);
|
|
2194
|
+
return;
|
|
2195
|
+
}
|
|
2196
|
+
handleSelect(nextTab.index);
|
|
2197
|
+
requestAnimationFrame(() => focusTab(nextPosition));
|
|
2179
2198
|
};
|
|
2180
|
-
return createComponent(
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
count,
|
|
2184
|
-
registerTab,
|
|
2185
|
-
unregisterTab,
|
|
2186
|
-
onSelect,
|
|
2187
|
-
focusTab
|
|
2199
|
+
return createComponent(Show, {
|
|
2200
|
+
get when() {
|
|
2201
|
+
return visibleTabs().length > 0;
|
|
2188
2202
|
},
|
|
2189
2203
|
get children() {
|
|
2190
|
-
var _el$ = _tmpl$41();
|
|
2191
|
-
insert(_el
|
|
2204
|
+
var _el$ = _tmpl$41(), _el$2 = _el$.firstChild;
|
|
2205
|
+
insert(_el$2, createComponent(For, {
|
|
2206
|
+
get each() {
|
|
2207
|
+
return visibleTabs();
|
|
2208
|
+
},
|
|
2209
|
+
children: (tab, position) => {
|
|
2210
|
+
const isSelected = () => tab.index === props.selectedIndex;
|
|
2211
|
+
return (() => {
|
|
2212
|
+
var _el$3 = _tmpl$211();
|
|
2213
|
+
_el$3.$$keydown = (event) => handleKeyDown(event, position());
|
|
2214
|
+
_el$3.$$click = () => {
|
|
2215
|
+
if (tab.disabled) return;
|
|
2216
|
+
handleSelect(tab.index);
|
|
2217
|
+
};
|
|
2218
|
+
use((el) => tabRefs[position()] = el, _el$3);
|
|
2219
|
+
insert(_el$3, () => tab.label);
|
|
2220
|
+
effect((_p$) => {
|
|
2221
|
+
var _v$4 = `ss_tab ${tab.class ?? ""}`, _v$5 = tab.style, _v$6 = isSelected(), _v$7 = tab.disabled ? "true" : void 0, _v$8 = isSelected() ? 0 : -1, _v$9 = tab.disabled;
|
|
2222
|
+
_v$4 !== _p$.e && className(_el$3, _p$.e = _v$4);
|
|
2223
|
+
_p$.t = style(_el$3, _v$5, _p$.t);
|
|
2224
|
+
_v$6 !== _p$.a && setAttribute(_el$3, "aria-selected", _p$.a = _v$6);
|
|
2225
|
+
_v$7 !== _p$.o && setAttribute(_el$3, "aria-disabled", _p$.o = _v$7);
|
|
2226
|
+
_v$8 !== _p$.i && setAttribute(_el$3, "tabindex", _p$.i = _v$8);
|
|
2227
|
+
_v$9 !== _p$.n && (_el$3.disabled = _p$.n = _v$9);
|
|
2228
|
+
return _p$;
|
|
2229
|
+
}, {
|
|
2230
|
+
e: void 0,
|
|
2231
|
+
t: void 0,
|
|
2232
|
+
a: void 0,
|
|
2233
|
+
o: void 0,
|
|
2234
|
+
i: void 0,
|
|
2235
|
+
n: void 0
|
|
2236
|
+
});
|
|
2237
|
+
return _el$3;
|
|
2238
|
+
})();
|
|
2239
|
+
}
|
|
2240
|
+
}));
|
|
2192
2241
|
effect((_p$) => {
|
|
2193
|
-
var _v$ = `ss_tabs ${props.class ?? ""}`, _v$2 = props.style;
|
|
2242
|
+
var _v$ = `ss_tabs ${props.class ?? ""}`, _v$2 = props.style, _v$3 = props.ariaLabel;
|
|
2194
2243
|
_v$ !== _p$.e && className(_el$, _p$.e = _v$);
|
|
2195
2244
|
_p$.t = style(_el$, _v$2, _p$.t);
|
|
2245
|
+
_v$3 !== _p$.a && setAttribute(_el$2, "aria-label", _p$.a = _v$3);
|
|
2196
2246
|
return _p$;
|
|
2197
2247
|
}, {
|
|
2198
2248
|
e: void 0,
|
|
2199
|
-
t: void 0
|
|
2249
|
+
t: void 0,
|
|
2250
|
+
a: void 0
|
|
2200
2251
|
});
|
|
2201
2252
|
return _el$;
|
|
2202
2253
|
}
|
|
2203
2254
|
});
|
|
2204
2255
|
}
|
|
2205
|
-
function SSTabList(props) {
|
|
2206
|
-
return (() => {
|
|
2207
|
-
var _el$2 = _tmpl$211();
|
|
2208
|
-
insert(_el$2, () => props.children);
|
|
2209
|
-
effect((_p$) => {
|
|
2210
|
-
var _v$3 = `ss_tablist ${props.class ?? ""}`, _v$4 = props.style, _v$5 = props.ariaLabel;
|
|
2211
|
-
_v$3 !== _p$.e && className(_el$2, _p$.e = _v$3);
|
|
2212
|
-
_p$.t = style(_el$2, _v$4, _p$.t);
|
|
2213
|
-
_v$5 !== _p$.a && setAttribute(_el$2, "aria-label", _p$.a = _v$5);
|
|
2214
|
-
return _p$;
|
|
2215
|
-
}, {
|
|
2216
|
-
e: void 0,
|
|
2217
|
-
t: void 0,
|
|
2218
|
-
a: void 0
|
|
2219
|
-
});
|
|
2220
|
-
return _el$2;
|
|
2221
|
-
})();
|
|
2222
|
-
}
|
|
2223
|
-
function SSTab(props) {
|
|
2224
|
-
if (props.hideIf) return null;
|
|
2225
|
-
const context = useContext(SSTabsContext);
|
|
2226
|
-
if (!context) {
|
|
2227
|
-
throw new Error("SSTab must be used within SSTabs");
|
|
2228
|
-
}
|
|
2229
|
-
const id = createUniqueId();
|
|
2230
|
-
const [index, setIndex] = createSignal(null);
|
|
2231
|
-
let buttonRef;
|
|
2232
|
-
onMount(() => {
|
|
2233
|
-
if (!buttonRef) return;
|
|
2234
|
-
setIndex(context.registerTab(id, buttonRef));
|
|
2235
|
-
});
|
|
2236
|
-
onCleanup(() => {
|
|
2237
|
-
context.unregisterTab(id);
|
|
2238
|
-
});
|
|
2239
|
-
const isSelected = () => index() !== null && index() === context.selectedIndex();
|
|
2240
|
-
const handleSelect = () => {
|
|
2241
|
-
if (props.disabled) return;
|
|
2242
|
-
if (index() === null) return;
|
|
2243
|
-
context.onSelect(index());
|
|
2244
|
-
};
|
|
2245
|
-
const handleKeyDown = (event) => {
|
|
2246
|
-
if (props.disabled) return;
|
|
2247
|
-
const current = index();
|
|
2248
|
-
const total = context.count();
|
|
2249
|
-
if (current === null || total < 1) return;
|
|
2250
|
-
let nextIndex = current;
|
|
2251
|
-
if (event.key === "ArrowRight") {
|
|
2252
|
-
nextIndex = (current + 1) % total;
|
|
2253
|
-
} else if (event.key === "ArrowLeft") {
|
|
2254
|
-
nextIndex = (current - 1 + total) % total;
|
|
2255
|
-
} else if (event.key === "Home") {
|
|
2256
|
-
nextIndex = 0;
|
|
2257
|
-
} else if (event.key === "End") {
|
|
2258
|
-
nextIndex = total - 1;
|
|
2259
|
-
} else {
|
|
2260
|
-
return;
|
|
2261
|
-
}
|
|
2262
|
-
event.preventDefault();
|
|
2263
|
-
context.onSelect(nextIndex);
|
|
2264
|
-
requestAnimationFrame(() => context.focusTab(nextIndex));
|
|
2265
|
-
};
|
|
2266
|
-
return (() => {
|
|
2267
|
-
var _el$3 = _tmpl$310();
|
|
2268
|
-
_el$3.$$keydown = handleKeyDown;
|
|
2269
|
-
_el$3.$$click = handleSelect;
|
|
2270
|
-
use((el) => buttonRef = el, _el$3);
|
|
2271
|
-
insert(_el$3, () => props.children);
|
|
2272
|
-
effect((_p$) => {
|
|
2273
|
-
var _v$6 = `ss_tab ${props.class ?? ""}`, _v$7 = props.style, _v$8 = isSelected(), _v$9 = props.disabled ? "true" : void 0, _v$0 = isSelected() ? 0 : -1, _v$1 = props.disabled;
|
|
2274
|
-
_v$6 !== _p$.e && className(_el$3, _p$.e = _v$6);
|
|
2275
|
-
_p$.t = style(_el$3, _v$7, _p$.t);
|
|
2276
|
-
_v$8 !== _p$.a && setAttribute(_el$3, "aria-selected", _p$.a = _v$8);
|
|
2277
|
-
_v$9 !== _p$.o && setAttribute(_el$3, "aria-disabled", _p$.o = _v$9);
|
|
2278
|
-
_v$0 !== _p$.i && setAttribute(_el$3, "tabindex", _p$.i = _v$0);
|
|
2279
|
-
_v$1 !== _p$.n && (_el$3.disabled = _p$.n = _v$1);
|
|
2280
|
-
return _p$;
|
|
2281
|
-
}, {
|
|
2282
|
-
e: void 0,
|
|
2283
|
-
t: void 0,
|
|
2284
|
-
a: void 0,
|
|
2285
|
-
o: void 0,
|
|
2286
|
-
i: void 0,
|
|
2287
|
-
n: void 0
|
|
2288
|
-
});
|
|
2289
|
-
return _el$3;
|
|
2290
|
-
})();
|
|
2291
|
-
}
|
|
2292
2256
|
delegateEvents(["click", "keydown"]);
|
|
2293
2257
|
var _tmpl$47 = /* @__PURE__ */ template(`<div><div class=ss_tile__row><div class=ss_tile__content>`);
|
|
2294
2258
|
var _tmpl$212 = /* @__PURE__ */ template(`<span class=ss_tile__icon>`);
|
|
2295
|
-
var _tmpl$
|
|
2259
|
+
var _tmpl$310 = /* @__PURE__ */ template(`<h5 class=ss_tile__title>`);
|
|
2296
2260
|
var _tmpl$48 = /* @__PURE__ */ template(`<h5 class=ss_tile__title><span class=ss_tile__text>`);
|
|
2297
2261
|
var _tmpl$57 = /* @__PURE__ */ template(`<div class=ss_tile__subtitle>`);
|
|
2298
2262
|
var _tmpl$64 = /* @__PURE__ */ template(`<div class=ss_tile__trailing>`);
|
|
@@ -2311,7 +2275,7 @@ function SSTile(props) {
|
|
|
2311
2275
|
insert(_el$3, (() => {
|
|
2312
2276
|
var _c$2 = memo(() => !!props.href);
|
|
2313
2277
|
return () => _c$2() ? (() => {
|
|
2314
|
-
var _el$5 = _tmpl$
|
|
2278
|
+
var _el$5 = _tmpl$310();
|
|
2315
2279
|
insert(_el$5, createComponent(SSLink, {
|
|
2316
2280
|
get href() {
|
|
2317
2281
|
return props.href;
|
|
@@ -2426,4 +2390,4 @@ var SSAwaited = (props) => {
|
|
|
2426
2390
|
});
|
|
2427
2391
|
};
|
|
2428
2392
|
|
|
2429
|
-
export { SSAttrList, SSAwaited, SSButton, SSCallout, SSChip, SSDataTable, SSDivider, SSDropdown, SSExpandable, SSForm, SSHeader, SSLink, SSModal, SSModalsProvider, SSRow, SSShell, SSSurface,
|
|
2393
|
+
export { SSAttrList, SSAwaited, SSButton, SSCallout, SSChip, SSDataTable, SSDivider, SSDropdown, SSExpandable, SSForm, SSHeader, SSLink, SSModal, SSModalsProvider, SSRow, SSShell, SSSurface, SSTabs, SSTile, createSSTile, useSSModals };
|
package/dist/index.d.ts
CHANGED
|
@@ -87,7 +87,7 @@ type PromiseOr$2<T> = Promise<T> | T;
|
|
|
87
87
|
type SSDropdownItem = {
|
|
88
88
|
label: string;
|
|
89
89
|
icon: JSXElement;
|
|
90
|
-
onclick?: () => PromiseOr$2<any>;
|
|
90
|
+
onclick?: (index?: number) => PromiseOr$2<any>;
|
|
91
91
|
checked?: boolean;
|
|
92
92
|
hideIf?: boolean;
|
|
93
93
|
};
|
|
@@ -388,33 +388,25 @@ type SSSurfaceProps = {
|
|
|
388
388
|
};
|
|
389
389
|
declare function SSSurface(props: SSSurfaceProps): solid_js.JSX.Element;
|
|
390
390
|
|
|
391
|
-
type
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
type SSTabsProps = {
|
|
396
|
-
selectedIndex: number;
|
|
397
|
-
onChange?: SSTabsOnChange;
|
|
398
|
-
children: JSXElement;
|
|
391
|
+
type SSTabItem = {
|
|
392
|
+
label: JSXElement;
|
|
393
|
+
hideIf?: boolean;
|
|
394
|
+
disabled?: boolean;
|
|
399
395
|
class?: string;
|
|
400
396
|
style?: string;
|
|
401
397
|
};
|
|
402
|
-
type
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
398
|
+
type SSTabsProps = {
|
|
399
|
+
tabs: SSTabItem[];
|
|
400
|
+
selectedIndex: number;
|
|
401
|
+
onChange?: (props: {
|
|
402
|
+
selectedIndex: number;
|
|
403
|
+
previousIndex: number;
|
|
404
|
+
}) => void;
|
|
406
405
|
ariaLabel?: string;
|
|
407
|
-
};
|
|
408
|
-
type SSTabProps = {
|
|
409
|
-
children: JSXElement;
|
|
410
|
-
disabled?: boolean;
|
|
411
|
-
hideIf?: boolean;
|
|
412
406
|
class?: string;
|
|
413
407
|
style?: string;
|
|
414
408
|
};
|
|
415
409
|
declare function SSTabs(props: SSTabsProps): solid_js.JSX.Element;
|
|
416
|
-
declare function SSTabList(props: SSTabListProps): solid_js.JSX.Element;
|
|
417
|
-
declare function SSTab(props: SSTabProps): solid_js.JSX.Element;
|
|
418
410
|
|
|
419
411
|
type SSTileProps = {
|
|
420
412
|
icon?: JSXElement;
|
|
@@ -448,4 +440,4 @@ type AwaitedProps = {
|
|
|
448
440
|
declare function _Awaited(props: AwaitedProps): solid_js.JSX.Element;
|
|
449
441
|
declare const SSAwaited: typeof _Awaited;
|
|
450
442
|
|
|
451
|
-
export { SSAttrList, SSAwaited, SSButton, SSCallout, SSChip, type SSColor, SSDataTable, SSDivider, SSDropdown, SSExpandable, SSForm, SSHeader, SSLink, SSModal, SSModalsProvider, SSRow, SSShell, SSSurface,
|
|
443
|
+
export { SSAttrList, SSAwaited, SSButton, SSCallout, SSChip, type SSColor, SSDataTable, SSDivider, SSDropdown, SSExpandable, SSForm, SSHeader, SSLink, SSModal, SSModalsProvider, SSRow, SSShell, SSSurface, SSTabs, SSTile, createSSTile, useSSModals };
|
package/dist/index.js
CHANGED
|
@@ -441,6 +441,12 @@ function SSDropdown(props) {
|
|
|
441
441
|
const [renderMenu, setRenderMenu] = createSignal(false);
|
|
442
442
|
const [menuState, setMenuState] = createSignal("closed");
|
|
443
443
|
let rootRef;
|
|
444
|
+
const visibleItems = () => props.items.map((item, index) => ({
|
|
445
|
+
item,
|
|
446
|
+
index
|
|
447
|
+
})).filter(({
|
|
448
|
+
item
|
|
449
|
+
}) => !item.hideIf);
|
|
444
450
|
const close = () => setOpen(false);
|
|
445
451
|
createEffect(() => {
|
|
446
452
|
if (open()) {
|
|
@@ -469,64 +475,72 @@ function SSDropdown(props) {
|
|
|
469
475
|
window.removeEventListener("keydown", handleKeyDown);
|
|
470
476
|
});
|
|
471
477
|
});
|
|
472
|
-
return (
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
478
|
+
return createComponent(Show, {
|
|
479
|
+
get when() {
|
|
480
|
+
return visibleItems().length > 0;
|
|
481
|
+
},
|
|
482
|
+
get children() {
|
|
483
|
+
var _el$ = _tmpl$25(), _el$2 = _el$.firstChild;
|
|
484
|
+
use((el) => rootRef = el, _el$);
|
|
485
|
+
_el$2.$$click = () => setOpen((value) => !value);
|
|
486
|
+
insert(_el$2, () => props.icon ?? _tmpl$35());
|
|
487
|
+
insert(_el$, createComponent(Show, {
|
|
488
|
+
get when() {
|
|
489
|
+
return renderMenu();
|
|
490
|
+
},
|
|
491
|
+
get children() {
|
|
492
|
+
var _el$3 = _tmpl$14();
|
|
493
|
+
insert(_el$3, createComponent(For, {
|
|
494
|
+
get each() {
|
|
495
|
+
return visibleItems();
|
|
496
|
+
},
|
|
497
|
+
children: ({
|
|
498
|
+
item,
|
|
499
|
+
index
|
|
500
|
+
}) => (() => {
|
|
501
|
+
var _el$5 = _tmpl$43(), _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling;
|
|
502
|
+
_el$5.$$click = async () => {
|
|
503
|
+
close();
|
|
504
|
+
await item.onclick?.(index);
|
|
505
|
+
};
|
|
506
|
+
insert(_el$6, () => item.icon);
|
|
507
|
+
insert(_el$7, () => item.label);
|
|
508
|
+
insert(_el$5, (() => {
|
|
509
|
+
var _c$ = memo(() => !!item.checked);
|
|
510
|
+
return () => _c$() && _tmpl$53();
|
|
511
|
+
})(), null);
|
|
512
|
+
effect((_p$) => {
|
|
513
|
+
var _v$5 = item.checked ? "menuitemcheckbox" : "menuitem", _v$6 = item.checked ? "true" : void 0;
|
|
514
|
+
_v$5 !== _p$.e && setAttribute(_el$5, "role", _p$.e = _v$5);
|
|
515
|
+
_v$6 !== _p$.t && setAttribute(_el$5, "aria-checked", _p$.t = _v$6);
|
|
516
|
+
return _p$;
|
|
517
|
+
}, {
|
|
518
|
+
e: void 0,
|
|
519
|
+
t: void 0
|
|
520
|
+
});
|
|
521
|
+
return _el$5;
|
|
522
|
+
})()
|
|
523
|
+
}));
|
|
524
|
+
effect(() => setAttribute(_el$3, "data-state", menuState()));
|
|
525
|
+
return _el$3;
|
|
526
|
+
}
|
|
527
|
+
}), null);
|
|
528
|
+
effect((_p$) => {
|
|
529
|
+
var _v$ = `ss_dropdown ${props.class ?? ""}`, _v$2 = props.style, _v$3 = open(), _v$4 = props.ariaLabel ?? "Aktionen \xF6ffnen";
|
|
530
|
+
_v$ !== _p$.e && className(_el$, _p$.e = _v$);
|
|
531
|
+
_p$.t = style(_el$, _v$2, _p$.t);
|
|
532
|
+
_v$3 !== _p$.a && setAttribute(_el$2, "aria-expanded", _p$.a = _v$3);
|
|
533
|
+
_v$4 !== _p$.o && setAttribute(_el$2, "aria-label", _p$.o = _v$4);
|
|
534
|
+
return _p$;
|
|
535
|
+
}, {
|
|
536
|
+
e: void 0,
|
|
537
|
+
t: void 0,
|
|
538
|
+
a: void 0,
|
|
539
|
+
o: void 0
|
|
540
|
+
});
|
|
541
|
+
return _el$;
|
|
542
|
+
}
|
|
543
|
+
});
|
|
530
544
|
}
|
|
531
545
|
delegateEvents(["click"]);
|
|
532
546
|
var _tmpl$15 = /* @__PURE__ */ template(`<div><div class=ss_expandable__header role=button tabindex=0><span class=ss_expandable__icon aria-hidden=true></span><span class=ss_expandable__title></span></div><div class=ss_expandable__content style=transition-duration:200ms><div class=ss_expandable__content_inner>`);
|
|
@@ -2138,161 +2152,111 @@ function SSSurface(props) {
|
|
|
2138
2152
|
return _el$;
|
|
2139
2153
|
})();
|
|
2140
2154
|
}
|
|
2141
|
-
var _tmpl$41 = /* @__PURE__ */ template(`<div>`);
|
|
2142
|
-
var _tmpl$211 = /* @__PURE__ */ template(`<
|
|
2143
|
-
var _tmpl$310 = /* @__PURE__ */ template(`<button type=button role=tab>`);
|
|
2144
|
-
var SSTabsContext = createContext();
|
|
2155
|
+
var _tmpl$41 = /* @__PURE__ */ template(`<div><div class=ss_tablist role=tablist>`);
|
|
2156
|
+
var _tmpl$211 = /* @__PURE__ */ template(`<button type=button role=tab>`);
|
|
2145
2157
|
function SSTabs(props) {
|
|
2146
|
-
const
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
return prev;
|
|
2157
|
-
}
|
|
2158
|
-
nextIndex = prev.length;
|
|
2159
|
-
return [...prev, id];
|
|
2158
|
+
const visibleTabs = createMemo(() => props.tabs.map((tab, index) => ({
|
|
2159
|
+
...tab,
|
|
2160
|
+
index
|
|
2161
|
+
})).filter((tab) => !tab.hideIf));
|
|
2162
|
+
let tabRefs = [];
|
|
2163
|
+
const handleSelect = (index) => {
|
|
2164
|
+
if (index === props.selectedIndex) return;
|
|
2165
|
+
props.onChange?.({
|
|
2166
|
+
selectedIndex: index,
|
|
2167
|
+
previousIndex: props.selectedIndex
|
|
2160
2168
|
});
|
|
2161
|
-
return nextIndex;
|
|
2162
|
-
};
|
|
2163
|
-
const unregisterTab = (id) => {
|
|
2164
|
-
tabElements.delete(id);
|
|
2165
|
-
setTabIds((prev) => prev.filter((entry) => entry !== id));
|
|
2166
2169
|
};
|
|
2167
|
-
const focusTab = (
|
|
2168
|
-
const
|
|
2169
|
-
if (!
|
|
2170
|
-
|
|
2170
|
+
const focusTab = (position) => {
|
|
2171
|
+
const target = tabRefs[position];
|
|
2172
|
+
if (!target) return;
|
|
2173
|
+
target.focus();
|
|
2171
2174
|
};
|
|
2172
|
-
const
|
|
2173
|
-
const
|
|
2174
|
-
if (
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
})
|
|
2175
|
+
const handleKeyDown = (event, position) => {
|
|
2176
|
+
const tabs = visibleTabs();
|
|
2177
|
+
if (!tabs.length) return;
|
|
2178
|
+
let nextPosition = position;
|
|
2179
|
+
if (event.key === "ArrowRight") {
|
|
2180
|
+
nextPosition = (position + 1) % tabs.length;
|
|
2181
|
+
} else if (event.key === "ArrowLeft") {
|
|
2182
|
+
nextPosition = (position - 1 + tabs.length) % tabs.length;
|
|
2183
|
+
} else if (event.key === "Home") {
|
|
2184
|
+
nextPosition = 0;
|
|
2185
|
+
} else if (event.key === "End") {
|
|
2186
|
+
nextPosition = tabs.length - 1;
|
|
2187
|
+
} else {
|
|
2188
|
+
return;
|
|
2189
|
+
}
|
|
2190
|
+
event.preventDefault();
|
|
2191
|
+
const nextTab = tabs[nextPosition];
|
|
2192
|
+
if (!nextTab || nextTab.disabled) {
|
|
2193
|
+
focusTab(nextPosition);
|
|
2194
|
+
return;
|
|
2195
|
+
}
|
|
2196
|
+
handleSelect(nextTab.index);
|
|
2197
|
+
requestAnimationFrame(() => focusTab(nextPosition));
|
|
2179
2198
|
};
|
|
2180
|
-
return createComponent(
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
count,
|
|
2184
|
-
registerTab,
|
|
2185
|
-
unregisterTab,
|
|
2186
|
-
onSelect,
|
|
2187
|
-
focusTab
|
|
2199
|
+
return createComponent(Show, {
|
|
2200
|
+
get when() {
|
|
2201
|
+
return visibleTabs().length > 0;
|
|
2188
2202
|
},
|
|
2189
2203
|
get children() {
|
|
2190
|
-
var _el$ = _tmpl$41();
|
|
2191
|
-
insert(_el
|
|
2204
|
+
var _el$ = _tmpl$41(), _el$2 = _el$.firstChild;
|
|
2205
|
+
insert(_el$2, createComponent(For, {
|
|
2206
|
+
get each() {
|
|
2207
|
+
return visibleTabs();
|
|
2208
|
+
},
|
|
2209
|
+
children: (tab, position) => {
|
|
2210
|
+
const isSelected = () => tab.index === props.selectedIndex;
|
|
2211
|
+
return (() => {
|
|
2212
|
+
var _el$3 = _tmpl$211();
|
|
2213
|
+
_el$3.$$keydown = (event) => handleKeyDown(event, position());
|
|
2214
|
+
_el$3.$$click = () => {
|
|
2215
|
+
if (tab.disabled) return;
|
|
2216
|
+
handleSelect(tab.index);
|
|
2217
|
+
};
|
|
2218
|
+
use((el) => tabRefs[position()] = el, _el$3);
|
|
2219
|
+
insert(_el$3, () => tab.label);
|
|
2220
|
+
effect((_p$) => {
|
|
2221
|
+
var _v$4 = `ss_tab ${tab.class ?? ""}`, _v$5 = tab.style, _v$6 = isSelected(), _v$7 = tab.disabled ? "true" : void 0, _v$8 = isSelected() ? 0 : -1, _v$9 = tab.disabled;
|
|
2222
|
+
_v$4 !== _p$.e && className(_el$3, _p$.e = _v$4);
|
|
2223
|
+
_p$.t = style(_el$3, _v$5, _p$.t);
|
|
2224
|
+
_v$6 !== _p$.a && setAttribute(_el$3, "aria-selected", _p$.a = _v$6);
|
|
2225
|
+
_v$7 !== _p$.o && setAttribute(_el$3, "aria-disabled", _p$.o = _v$7);
|
|
2226
|
+
_v$8 !== _p$.i && setAttribute(_el$3, "tabindex", _p$.i = _v$8);
|
|
2227
|
+
_v$9 !== _p$.n && (_el$3.disabled = _p$.n = _v$9);
|
|
2228
|
+
return _p$;
|
|
2229
|
+
}, {
|
|
2230
|
+
e: void 0,
|
|
2231
|
+
t: void 0,
|
|
2232
|
+
a: void 0,
|
|
2233
|
+
o: void 0,
|
|
2234
|
+
i: void 0,
|
|
2235
|
+
n: void 0
|
|
2236
|
+
});
|
|
2237
|
+
return _el$3;
|
|
2238
|
+
})();
|
|
2239
|
+
}
|
|
2240
|
+
}));
|
|
2192
2241
|
effect((_p$) => {
|
|
2193
|
-
var _v$ = `ss_tabs ${props.class ?? ""}`, _v$2 = props.style;
|
|
2242
|
+
var _v$ = `ss_tabs ${props.class ?? ""}`, _v$2 = props.style, _v$3 = props.ariaLabel;
|
|
2194
2243
|
_v$ !== _p$.e && className(_el$, _p$.e = _v$);
|
|
2195
2244
|
_p$.t = style(_el$, _v$2, _p$.t);
|
|
2245
|
+
_v$3 !== _p$.a && setAttribute(_el$2, "aria-label", _p$.a = _v$3);
|
|
2196
2246
|
return _p$;
|
|
2197
2247
|
}, {
|
|
2198
2248
|
e: void 0,
|
|
2199
|
-
t: void 0
|
|
2249
|
+
t: void 0,
|
|
2250
|
+
a: void 0
|
|
2200
2251
|
});
|
|
2201
2252
|
return _el$;
|
|
2202
2253
|
}
|
|
2203
2254
|
});
|
|
2204
2255
|
}
|
|
2205
|
-
function SSTabList(props) {
|
|
2206
|
-
return (() => {
|
|
2207
|
-
var _el$2 = _tmpl$211();
|
|
2208
|
-
insert(_el$2, () => props.children);
|
|
2209
|
-
effect((_p$) => {
|
|
2210
|
-
var _v$3 = `ss_tablist ${props.class ?? ""}`, _v$4 = props.style, _v$5 = props.ariaLabel;
|
|
2211
|
-
_v$3 !== _p$.e && className(_el$2, _p$.e = _v$3);
|
|
2212
|
-
_p$.t = style(_el$2, _v$4, _p$.t);
|
|
2213
|
-
_v$5 !== _p$.a && setAttribute(_el$2, "aria-label", _p$.a = _v$5);
|
|
2214
|
-
return _p$;
|
|
2215
|
-
}, {
|
|
2216
|
-
e: void 0,
|
|
2217
|
-
t: void 0,
|
|
2218
|
-
a: void 0
|
|
2219
|
-
});
|
|
2220
|
-
return _el$2;
|
|
2221
|
-
})();
|
|
2222
|
-
}
|
|
2223
|
-
function SSTab(props) {
|
|
2224
|
-
if (props.hideIf) return null;
|
|
2225
|
-
const context = useContext(SSTabsContext);
|
|
2226
|
-
if (!context) {
|
|
2227
|
-
throw new Error("SSTab must be used within SSTabs");
|
|
2228
|
-
}
|
|
2229
|
-
const id = createUniqueId();
|
|
2230
|
-
const [index, setIndex] = createSignal(null);
|
|
2231
|
-
let buttonRef;
|
|
2232
|
-
onMount(() => {
|
|
2233
|
-
if (!buttonRef) return;
|
|
2234
|
-
setIndex(context.registerTab(id, buttonRef));
|
|
2235
|
-
});
|
|
2236
|
-
onCleanup(() => {
|
|
2237
|
-
context.unregisterTab(id);
|
|
2238
|
-
});
|
|
2239
|
-
const isSelected = () => index() !== null && index() === context.selectedIndex();
|
|
2240
|
-
const handleSelect = () => {
|
|
2241
|
-
if (props.disabled) return;
|
|
2242
|
-
if (index() === null) return;
|
|
2243
|
-
context.onSelect(index());
|
|
2244
|
-
};
|
|
2245
|
-
const handleKeyDown = (event) => {
|
|
2246
|
-
if (props.disabled) return;
|
|
2247
|
-
const current = index();
|
|
2248
|
-
const total = context.count();
|
|
2249
|
-
if (current === null || total < 1) return;
|
|
2250
|
-
let nextIndex = current;
|
|
2251
|
-
if (event.key === "ArrowRight") {
|
|
2252
|
-
nextIndex = (current + 1) % total;
|
|
2253
|
-
} else if (event.key === "ArrowLeft") {
|
|
2254
|
-
nextIndex = (current - 1 + total) % total;
|
|
2255
|
-
} else if (event.key === "Home") {
|
|
2256
|
-
nextIndex = 0;
|
|
2257
|
-
} else if (event.key === "End") {
|
|
2258
|
-
nextIndex = total - 1;
|
|
2259
|
-
} else {
|
|
2260
|
-
return;
|
|
2261
|
-
}
|
|
2262
|
-
event.preventDefault();
|
|
2263
|
-
context.onSelect(nextIndex);
|
|
2264
|
-
requestAnimationFrame(() => context.focusTab(nextIndex));
|
|
2265
|
-
};
|
|
2266
|
-
return (() => {
|
|
2267
|
-
var _el$3 = _tmpl$310();
|
|
2268
|
-
_el$3.$$keydown = handleKeyDown;
|
|
2269
|
-
_el$3.$$click = handleSelect;
|
|
2270
|
-
use((el) => buttonRef = el, _el$3);
|
|
2271
|
-
insert(_el$3, () => props.children);
|
|
2272
|
-
effect((_p$) => {
|
|
2273
|
-
var _v$6 = `ss_tab ${props.class ?? ""}`, _v$7 = props.style, _v$8 = isSelected(), _v$9 = props.disabled ? "true" : void 0, _v$0 = isSelected() ? 0 : -1, _v$1 = props.disabled;
|
|
2274
|
-
_v$6 !== _p$.e && className(_el$3, _p$.e = _v$6);
|
|
2275
|
-
_p$.t = style(_el$3, _v$7, _p$.t);
|
|
2276
|
-
_v$8 !== _p$.a && setAttribute(_el$3, "aria-selected", _p$.a = _v$8);
|
|
2277
|
-
_v$9 !== _p$.o && setAttribute(_el$3, "aria-disabled", _p$.o = _v$9);
|
|
2278
|
-
_v$0 !== _p$.i && setAttribute(_el$3, "tabindex", _p$.i = _v$0);
|
|
2279
|
-
_v$1 !== _p$.n && (_el$3.disabled = _p$.n = _v$1);
|
|
2280
|
-
return _p$;
|
|
2281
|
-
}, {
|
|
2282
|
-
e: void 0,
|
|
2283
|
-
t: void 0,
|
|
2284
|
-
a: void 0,
|
|
2285
|
-
o: void 0,
|
|
2286
|
-
i: void 0,
|
|
2287
|
-
n: void 0
|
|
2288
|
-
});
|
|
2289
|
-
return _el$3;
|
|
2290
|
-
})();
|
|
2291
|
-
}
|
|
2292
2256
|
delegateEvents(["click", "keydown"]);
|
|
2293
2257
|
var _tmpl$47 = /* @__PURE__ */ template(`<div><div class=ss_tile__row><div class=ss_tile__content>`);
|
|
2294
2258
|
var _tmpl$212 = /* @__PURE__ */ template(`<span class=ss_tile__icon>`);
|
|
2295
|
-
var _tmpl$
|
|
2259
|
+
var _tmpl$310 = /* @__PURE__ */ template(`<h5 class=ss_tile__title>`);
|
|
2296
2260
|
var _tmpl$48 = /* @__PURE__ */ template(`<h5 class=ss_tile__title><span class=ss_tile__text>`);
|
|
2297
2261
|
var _tmpl$57 = /* @__PURE__ */ template(`<div class=ss_tile__subtitle>`);
|
|
2298
2262
|
var _tmpl$64 = /* @__PURE__ */ template(`<div class=ss_tile__trailing>`);
|
|
@@ -2311,7 +2275,7 @@ function SSTile(props) {
|
|
|
2311
2275
|
insert(_el$3, (() => {
|
|
2312
2276
|
var _c$2 = memo(() => !!props.href);
|
|
2313
2277
|
return () => _c$2() ? (() => {
|
|
2314
|
-
var _el$5 = _tmpl$
|
|
2278
|
+
var _el$5 = _tmpl$310();
|
|
2315
2279
|
insert(_el$5, createComponent(SSLink, {
|
|
2316
2280
|
get href() {
|
|
2317
2281
|
return props.href;
|
|
@@ -2426,4 +2390,4 @@ var SSAwaited = (props) => {
|
|
|
2426
2390
|
});
|
|
2427
2391
|
};
|
|
2428
2392
|
|
|
2429
|
-
export { SSAttrList, SSAwaited, SSButton, SSCallout, SSChip, SSDataTable, SSDivider, SSDropdown, SSExpandable, SSForm, SSHeader, SSLink, SSModal, SSModalsProvider, SSRow, SSShell, SSSurface,
|
|
2393
|
+
export { SSAttrList, SSAwaited, SSButton, SSCallout, SSChip, SSDataTable, SSDivider, SSDropdown, SSExpandable, SSForm, SSHeader, SSLink, SSModal, SSModalsProvider, SSRow, SSShell, SSSurface, SSTabs, SSTile, createSSTile, useSSModals };
|