diff --git a/dist/AdvancedFlagging.user.js b/dist/AdvancedFlagging.user.js index da52082..da4c7bb 100644 --- a/dist/AdvancedFlagging.user.js +++ b/dist/AdvancedFlagging.user.js @@ -38,1537 +38,11 @@ "use strict"; (() => { - var __create = Object.create; var __defProp = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames = Object.getOwnPropertyNames; - var __getProtoOf = Object.getPrototypeOf; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod - )); - - // node_modules/@userscripters/stacks-helpers/dist/avatar.js - var require_avatar = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/avatar.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeAvatar = void 0; - var makeAvatar = (options = {}, elementType = "a") => { - const { size = "", href = "", src, classes = [] } = options; - const avatar = document.createElement(elementType); - avatar.classList.add("s-avatar", ...classes); - if (size) { - avatar.classList.add(`s-avatar__${size}`); - } - if (href && avatar instanceof HTMLAnchorElement) { - avatar.href = href; - } - const img = document.createElement("img"); - img.classList.add("s-avatar--image"); - img.src = src; - avatar.append(img); - return avatar; - }; - exports.makeAvatar = makeAvatar; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/badges.js - var require_badges = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/badges.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeBling = exports.makeStacksBadge = void 0; - var makeStacksBadge = (options) => { - const { classes = [], blingColor = "", type = "", size = "", text, icon } = options; - const badge = document.createElement("span"); - badge.classList.add("s-badge", ...classes); - if (type) { - const typeClasses = type.map((name) => `s-badge__${name}`); - badge.classList.add(...typeClasses); - } - if (size) { - badge.classList.add(`s-badge__${size}`); - } - if (icon) { - badge.classList.add("s-badge__icon"); - badge.append(icon, " "); - } - if (blingColor) { - const bling = (0, exports.makeBling)("span", blingColor, text); - badge.append(bling); - } else { - badge.append(text); - } - return badge; - }; - exports.makeStacksBadge = makeStacksBadge; - var makeBling = (elementType, color, count) => { - const element = document.createElement(elementType); - element.classList.add("s-award-bling", `s-award-bling__${color}`); - element.innerText = count; - return element; - }; - exports.makeBling = makeBling; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/banners.js - var require_banners = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/banners.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksBanner = void 0; - var index_1 = require_dist(); - var makeStacksBanner = (options) => { - const { style, text, important = false, pinned = false, icon, classes = [] } = options; - const banner = document.createElement("aside"); - banner.classList.add("s-banner", `s-banner__${style}`, "js-notice-banner", ...classes); - banner.setAttribute("role", "alert"); - if (important) { - banner.classList.add("s-banner__important"); - } - if (pinned) { - banner.classList.add("is-pinned"); - } - const container = document.createElement("div"); - container.classList.add("d-flex", "flex__center", "jc-space-between", "s-banner--container"); - container.setAttribute("role", "alertdialog"); - const mainContainer = document.createElement("div"); - mainContainer.classList.add("d-flex", "g8"); - if (icon) { - const iconContainer = document.createElement("div"); - iconContainer.classList.add("flex--item"); - const [name, path] = icon; - const [svgIcon] = index_1.Icons.makeStacksIcon(name, path, { width: 18 }); - iconContainer.append(svgIcon); - mainContainer.append(iconContainer); - } - const textContainer = document.createElement("div"); - textContainer.classList.add("d-flex", "ai-center"); - const textElement = document.createElement("p"); - textElement.classList.add("m0"); - textElement.append(text); - textContainer.append(textElement); - mainContainer.append(textContainer); - const closeContainer = document.createElement("div"); - closeContainer.classList.add("flex--item", "ml-auto", "myn8"); - const closeButton = document.createElement("a"); - closeButton.classList.add("p8", "s-btn", "d-flex", "flex__center", "fc-dark", "js-notice-close"); - closeButton.setAttribute("role", "status"); - const [svgClose] = index_1.Icons.makeStacksIcon("iconClearSm", "M12 3.41 10.59 2 7 5.59 3.41 2 2 3.41 5.59 7 2 10.59 3.41 12 7 8.41 10.59 12 12 10.59 8.41 7 12 3.41Z", { classes: ["m0"] }); - closeButton.append(svgClose); - closeContainer.append(closeButton); - container.append(mainContainer, closeContainer); - banner.append(container); - return banner; - }; - exports.makeStacksBanner = makeStacksBanner; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/breadcrumb.js - var require_breadcrumb = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/breadcrumb.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksBreadcrumb = void 0; - var index_1 = require_dist(); - var makeStacksBreadcrumb = (items, options) => { - const { classes = [] } = options; - const nav = document.createElement("nav"); - nav.classList.add("s-breadcrumbs", "mb6", "sm:mb2", ...classes); - items.forEach((item, index) => { - const { label, href = "#" } = item; - const breadcrumbItem = document.createElement("div"); - breadcrumbItem.classList.add("s-breadcrumbs--item"); - const breadcrumbLink = document.createElement("a"); - breadcrumbLink.classList.add("s-breadcrumbs--link"); - breadcrumbLink.href = href; - if (Array.isArray(label)) { - const [name, path] = label; - const [icon] = index_1.Icons.makeStacksIcon(name, path, { - classes: ["mtn2"], - width: 18 - }); - breadcrumbLink.append(icon); - } else { - breadcrumbLink.append(label); - } - breadcrumbItem.append(breadcrumbLink); - if (index !== items.length - 1) { - const [dividerIcon] = index_1.Icons.makeStacksIcon("iconArrowRightAltSm", "m4.38 4.62 1.24-1.24L9.24 7l-3.62 3.62-1.24-1.24L6.76 7 4.38 4.62Z", { - classes: ["s-breadcrumbs--divider"], - width: 13, - height: 14 - }); - breadcrumbItem.append(dividerIcon); - } - nav.append(breadcrumbItem); - }); - return nav; - }; - exports.makeStacksBreadcrumb = makeStacksBreadcrumb; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/button-groups.js - var require_button_groups = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/button-groups.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksButtonGroup = void 0; - var makeStacksButtonGroup = (buttons, options = {}) => { - const { classes = [] } = options; - const container = document.createElement("div"); - container.classList.add("s-btn-group", ...classes); - buttons.forEach((buttonConfig) => { - const { text, selected = false, count, form = false } = buttonConfig; - const button = document.createElement("button"); - button.classList.add("s-btn", "s-btn__muted", "s-btn__outlined"); - button.setAttribute("role", "button"); - button.append(text); - if (selected) { - button.classList.add("is-selected"); - } - if (count) { - const badge = document.createElement("span"); - badge.classList.add("s-btn--badge"); - const btnNumber = document.createElement("span"); - btnNumber.classList.add("s-btn--number"); - btnNumber.textContent = count.toString(); - badge.append(btnNumber); - button.append(" ", badge); - } - if (form) { - const formContainer = document.createElement("form"); - formContainer.classList.add("s-btn-group--container"); - formContainer.append(button); - container.append(formContainer); - } else { - container.append(button); - } - }); - return container; - }; - exports.makeStacksButtonGroup = makeStacksButtonGroup; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/checkbox.js - var require_checkbox = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/checkbox.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksCheckboxes = void 0; - var index_1 = require_dist(); - var makeStacksCheckboxes = (checkboxes, options) => { - return index_1.Input.makeStacksRadiosOrCheckboxes(checkboxes, "checkbox", options); - }; - exports.makeStacksCheckboxes = makeStacksCheckboxes; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/indicator.js - var require_indicator = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/indicator.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeIndicator = void 0; - var makeIndicator = (options = {}) => { - const { type = "", text = "", hiddenText = "", classes = [] } = options; - const indicator = document.createElement("div"); - indicator.classList.add("s-activity-indicator", ...classes); - if (type) { - indicator.classList.add(`s-activity-indicator__${type}`); - } - if (text) { - indicator.append(text); - } - if (hiddenText) { - const hiddenElement = document.createElement("div"); - hiddenElement.classList.add("v-visible-sr"); - hiddenElement.innerText = hiddenText; - indicator.append(hiddenElement); - } - return indicator; - }; - exports.makeIndicator = makeIndicator; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/input.js - var require_input = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/input.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksRadiosOrCheckboxes = exports.makeStacksInput = void 0; - var index_1 = require_dist(); - var makeStacksInput = (id, inputOptions = {}, labelOptions) => { - var _a; - const { value = "", classes = [], placeholder = "", title, isSearch: isSearch2 } = inputOptions; - const inputParent = document.createElement("div"); - inputParent.classList.add("d-flex", "ps-relative"); - const input = document.createElement("input"); - input.classList.add("s-input", ...classes); - input.type = "text"; - input.id = input.name = id; - input.placeholder = placeholder; - input.value = value; - if (title) - input.title = title; - if (isSearch2) { - input.classList.add("s-input__search"); - const [searchIcon] = index_1.Icons.makeStacksIcon("iconSearch", "m18 16.5-5.14-5.18h-.35a7 7 0 10-1.19 1.19v.35L16.5 18l1.5-1.5zM12 7A5 5 0 112 7a5 5 0 0110 0z", { - classes: ["s-input-icon", "s-input-icon__search"], - width: 18 - }); - inputParent.append(searchIcon); - } - inputParent.prepend(input); - if (labelOptions) { - (_a = labelOptions.parentClasses || (labelOptions.parentClasses = [])) === null || _a === void 0 ? void 0 : _a.push("flex--item"); - const label = index_1.Label.makeStacksLabel(id, labelOptions); - const container = document.createElement("div"); - container.classList.add("d-flex", "gy4", "fd-column"); - container.append(label, inputParent); - return container; - } - return inputParent; - }; - exports.makeStacksInput = makeStacksInput; - var makeStacksRadiosOrCheckboxes = (inputs, type, options, withoutFieldset) => { - const fieldset = document.createElement("fieldset"); - fieldset.classList.add("s-check-group"); - if (options) { - const { legendText = "", legendDescription = "", horizontal, classes = [] } = options; - if (horizontal) { - fieldset.classList.add("s-check-group__horizontal"); - } - fieldset.classList.add(...classes); - const legend = document.createElement("legend"); - legend.classList.add("flex--item", "s-label"); - legend.innerText = legendText; - if (legendDescription) { - const span = document.createElement("span"); - span.classList.add("ml4", "fw-normal", "fc-light"); - span.innerText = legendDescription; - legend.append(" ", span); - } - fieldset.append(legend); - } - const items = inputs.map((inputType) => makeFormContainer(inputType, type)); - if (withoutFieldset) { - return items; - } else { - fieldset.append(...items); - return [fieldset, ...items]; - } - }; - exports.makeStacksRadiosOrCheckboxes = makeStacksRadiosOrCheckboxes; - var makeFormContainer = (radioCheckbox, type) => { - const { id, labelConfig, selected = false, disabled = false, name } = radioCheckbox; - const container = document.createElement("div"); - container.classList.add("s-check-control"); - const input = document.createElement("input"); - input.classList.add(`s-${type}`); - input.type = type; - input.id = id; - input.checked = selected; - input.disabled = disabled; - if (name) { - input.name = name; - } - const label = index_1.Label.makeStacksLabel(id, labelConfig); - container.append(input, label); - return container; - }; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/label.js - var require_label = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/label.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksLabel = void 0; - var makeStacksLabel = (forId, labelOptions) => { - const { classes = [], parentClasses = [], text, description, statusText, statusType } = labelOptions; - const labelParent = document.createElement("div"); - labelParent.classList.add(...parentClasses); - const label = document.createElement("label"); - label.classList.add("s-label", ...classes); - label.htmlFor = forId; - label.innerHTML = text; - if (statusText && statusType) { - const status = document.createElement("span"); - status.innerHTML = statusText; - status.classList.add("s-label--status"); - if (statusType !== "optional") { - status.classList.add(`s-label--status__${statusType}`); - } - label.append(" ", status); - } - if (description) { - const p = document.createElement("p"); - p.classList.add("s-description", "mt2"); - p.innerHTML = description; - label.classList.add("d-block"); - label.append(p); - labelParent.append(label); - return labelParent; - } else { - label.classList.add("flex--item"); - return label; - } - }; - exports.makeStacksLabel = makeStacksLabel; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/links.js - var require_links = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/links.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeLink = void 0; - var makeLink = (options = {}) => { - const { href = "", isButton = false, type = "", blockLink = null, text, click, classes = [] } = options; - const anchor = document.createElement(isButton ? "button" : "a"); - anchor.classList.add("s-link", ...classes); - anchor.innerText = text; - if (type) { - anchor.classList.add(`s-link__${type}`); - } - if (blockLink) { - anchor.classList.add("s-block-link"); - anchor.classList.remove("s-link"); - if (blockLink.border) { - anchor.classList.add(`s-block-link__${blockLink.border}`); - } - if (blockLink.selected) { - anchor.classList.add("is-selected"); - } - if (blockLink.danger) { - anchor.classList.add("s-block-link__danger"); - } - } - if (href && anchor instanceof HTMLAnchorElement) { - anchor.href = href; - } - if (click) { - const { handler, options: options2 } = click; - anchor.addEventListener("click", handler, options2); - } - return anchor; - }; - exports.makeLink = makeLink; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/menus.js - var require_menus = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/menus.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeMenu = void 0; - var index_1 = require_dist(); - var makeMenu2 = (options = {}) => { - const { itemsType = "a", childrenClasses = [], navItems, classes = [] } = options; - const menu = document.createElement("ul"); - menu.classList.add("s-menu", ...classes); - menu.setAttribute("role", "menu"); - navItems.forEach((navItem) => { - var _a; - const li = document.createElement("li"); - if ("popover" in navItem && navItem.popover) { - const { position = "auto", html } = navItem.popover; - Stacks.setTooltipHtml(li, html, { - placement: position - }); - } - if ("separatorType" in navItem) { - const { separatorType, separatorText } = navItem; - li.setAttribute("role", "separator"); - li.classList.add(`s-menu--${separatorType}`); - if (separatorText) - li.innerText = separatorText; - menu.append(li); - return; - } else if ("checkbox" in navItem) { - const { checkbox, checkboxOptions } = navItem; - const [, input] = index_1.Checkbox.makeStacksCheckboxes([checkbox], checkboxOptions); - li.append(input); - menu.append(li); - return; - } - (_a = navItem.classes) === null || _a === void 0 ? void 0 : _a.push(...childrenClasses); - li.setAttribute("role", "menuitem"); - const item = index_1.Links.makeLink(Object.assign({ - isButton: itemsType === "button", - blockLink: {} - }, navItem)); - li.append(item); - menu.append(li); - }); - return menu; - }; - exports.makeMenu = makeMenu2; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/navigation.js - var require_navigation = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/navigation.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeNavigation = void 0; - var makeNavigation = (navItems, type, selectIndex = 0) => { - const navigation = document.createElement("nav"); - const ul = document.createElement("ul"); - ul.classList.add("s-navigation"); - if (type === "button") { - ul.setAttribute("role", "tablist"); - ul.setAttribute("data-controller", "s-navigation-tablist"); - } - const children = navItems.map((item, i) => createNavItem(item, type, i === selectIndex)); - ul.append(...children); - navigation.append(ul); - return navigation; - }; - exports.makeNavigation = makeNavigation; - var createNavItem = ({ id, text, ariaControls }, type, select) => { - const li = document.createElement("li"); - const wrapper = document.createElement(type); - wrapper.id = id; - wrapper.innerText = text; - wrapper.classList.add("s-navigation--item"); - if (select) - wrapper.classList.add("is-selected"); - if (type === "button") { - wrapper.setAttribute("role", "tab"); - wrapper.type = "button"; - if (ariaControls) - wrapper.setAttribute("aria-controls", ariaControls); - } - li.append(wrapper); - return li; - }; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/notices.js - var require_notices = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/notices.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksNotice = void 0; - var index_1 = require_dist(); - var makeStacksNotice = (options) => { - const { type, important = false, icon, text, classes = [] } = options; - const notice = document.createElement("aside"); - notice.classList.add("s-notice", ...classes); - notice.setAttribute("role", important ? "alert" : "status"); - if (type) { - notice.classList.add(`s-notice__${type}`); - } - if (important) { - notice.classList.add("s-notice__important"); - } - if (icon) { - notice.classList.add("d-flex"); - const iconContainer = document.createElement("div"); - iconContainer.classList.add("flex--item", "mr8"); - const [name, path] = icon; - const [svgIcon] = index_1.Icons.makeStacksIcon(name, path, { width: 18 }); - iconContainer.append(svgIcon); - const textContainer = document.createElement("div"); - textContainer.classList.add("flex--item", "lh-lg"); - textContainer.append(text); - notice.append(iconContainer, textContainer); - } else { - const p = document.createElement("p"); - p.classList.add("m0"); - p.append(text); - notice.append(p); - } - return notice; - }; - exports.makeStacksNotice = makeStacksNotice; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/pagination.js - var require_pagination = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/pagination.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makePagination = void 0; - var makePagination = (options) => { - const { first, middle, last, selectedPage = 1, generator, nextButtonHref = "#", classes = [] } = options; - const container = document.createElement("div"); - container.classList.add("s-pagination", ...classes); - const clear = document.createElement("span"); - clear.classList.add("s-pagination--item", "s-pagination--item__clear"); - clear.textContent = "..."; - const nextButton = document.createElement("a"); - nextButton.classList.add("s-pagination--item"); - nextButton.textContent = "Next"; - nextButton.href = nextButtonHref; - container.append(...first.map((page) => createPage(page, generator(page), page === selectedPage)), clear.cloneNode(true)); - if (middle) { - container.append(...middle.map((page) => createPage(page, generator(page), page === selectedPage)), clear.cloneNode(true)); - } - container.append(...last.map((page) => createPage(page, generator(page), page === selectedPage)), nextButton); - return container; - }; - exports.makePagination = makePagination; - var createPage = (page, url, isSelected) => { - const element = document.createElement(isSelected ? "span" : "a"); - element.classList.add("s-pagination--item"); - element.textContent = page.toString(); - if (element instanceof HTMLAnchorElement) { - element.href = url; - } else { - element.classList.add("is-selected"); - } - return element; - }; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/progress.js - var require_progress = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/progress.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeSteppedBar = exports.makeSegmentedBar = exports.makeCircularBar = exports.makeBaseBar = void 0; - var index_1 = require_dist(); - var makeBaseBar = (id, options) => { - const { width, coloring, classes = [] } = options; - const bar = document.createElement("div"); - bar.classList.add("s-progress--bar"); - bar.style.setProperty("width", `${width.toString()}%`); - bar.setAttribute("role", "progressbar"); - bar.setAttribute("aria-valuemin", "0"); - bar.setAttribute("aria-valuemax", "100"); - bar.setAttribute("aria-valuenow", width.toString()); - const progress = document.createElement("div"); - progress.classList.add("s-progress", ...classes); - progress.id = id; - if (coloring) { - progress.classList.add(`s-progress__${coloring}`); - } - progress.append(bar); - return progress; - }; - exports.makeBaseBar = makeBaseBar; - var makeCircularBar = (id, options) => { - const { width, classes = [], size } = options; - const progress = document.createElement("div"); - progress.id = id; - progress.classList.add("s-progress", "s-progress__circular", ...classes); - progress.style.setProperty("--s-progress-value", `${(width / 100).toString()}`); - if (size) { - progress.classList.add(`s-progress__${size}`); - } - const bar = document.createElement("svg"); - bar.classList.add("s-progress-bar"); - bar.setAttribute("viewBox", "0 0 32 32"); - bar.setAttribute("aria-valuemin", "0"); - bar.setAttribute("aria-valuemax", "100"); - bar.setAttribute("aria-valuenow", width.toString()); - const circle = document.createElement("circle"); - circle.setAttribute("cx", "16"); - circle.setAttribute("cy", "16"); - circle.setAttribute("r", "14"); - bar.append(circle, circle.cloneNode(true)); - progress.innerHTML = bar.outerHTML; - return progress; - }; - exports.makeCircularBar = makeCircularBar; - var makeSegmentedBar = (id, options) => { - const { width, segments, coloring, classes = [] } = options; - const progress = document.createElement("div"); - progress.id = id; - progress.classList.add("s-progress", "s-progress__segmented", ...classes); - if (coloring) { - progress.classList.add(`s-progress__${coloring}`); - } - const bar = document.createElement("div"); - bar.classList.add("s-progress--bar"); - bar.style.setProperty("width", `${width.toString()}%"`); - bar.setAttribute("role", "progressbar"); - bar.setAttribute("aria-valuemin", "0"); - bar.setAttribute("aria-valuemax", "100"); - bar.setAttribute("aria-valuenow", width.toString()); - const ol = document.createElement("ol"); - ol.classList.add("s-progress--segments"); - for (let i = 0; i < segments + 1; i++) { - const li = document.createElement("li"); - ol.append(li); - } - progress.append(bar, ol); - return progress; - }; - exports.makeSegmentedBar = makeSegmentedBar; - var makeSteppedBar = (id, items, options = {}) => { - const { classes = [] } = options; - const progress = document.createElement("div"); - progress.id = id; - progress.classList.add("s-progress", "s-progress__stepped", ...classes); - items.forEach((item, index) => { - const { status, label, classes: classes2 = [], href = "#" } = item; - const step = document.createElement("div"); - step.classList.add("s-progress--step", ...classes2); - if (status) { - step.classList.add(`is-${status}`); - } - const stop = document.createElement("a"); - stop.classList.add("s-progress--stop"); - stop.href = href; - if (status === "complete") { - const [checkmark] = index_1.Icons.makeStacksIcon("iconCheckmarkSm", "M13 3.41 11.59 2 5 8.59 2.41 6 1 7.41l4 4 8-8Z"); - stop.append(checkmark); - } - step.append(stop); - const rightBar = document.createElement("div"); - rightBar.classList.add("s-progress--bar", "s-progress--bar__right"); - const leftBar = document.createElement("div"); - leftBar.classList.add("s-progress--bar", "s-progress--bar__left"); - if (index === 0) { - step.append(rightBar); - } else if (index === items.length - 1) { - step.append(leftBar); - } else { - step.append(rightBar, leftBar); - } - const labelEl = document.createElement("a"); - labelEl.classList.add("s-progress--label"); - labelEl.href = href; - labelEl.textContent = label; - step.append(labelEl); - progress.append(step); - }); - return progress; - }; - exports.makeSteppedBar = makeSteppedBar; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/popover.js - var require_popover = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/popover.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksPopover = void 0; - var makeStacksPopover = (id, controller, options) => { - const { referenceSelector, toggleClass, placement, toggle, autoShow, hideOnOutsideClick, manualArrowPositioning, callbacks: callbacks2, contentHtml, classes = [] } = options; - controller.setAttribute("data-controller", "popover"); - controller.setAttribute("aria-controls", id); - if (referenceSelector) { - controller.setAttribute("data-s-popover-reference-selector", referenceSelector); - } - if (placement) { - controller.setAttribute("data-s-popover-placement", placement); - } - if (toggleClass) { - controller.setAttribute("data-s-popover-toggle-class", toggleClass); - } - if (toggle) { - controller.setAttribute("data-action", "s-popover#toggle"); - } - if (autoShow) { - controller.setAttribute("data-s-popover-auto-show", "true"); - } - if (hideOnOutsideClick) { - controller.setAttribute("data-s-popover-hide-on-outside-click", hideOnOutsideClick); - } - if (callbacks2) { - Object.entries(callbacks2).map(([name, callback]) => [`s-popover:${name}`, callback]).forEach(([name, callback]) => { - const eventName = name; - const handler = callback; - controller.addEventListener(eventName, handler); - }); - } - controller.addEventListener("s-popover:show", callbacks2.show); - const popover = document.createElement("div"); - popover.id = id; - popover.setAttribute("role", "menu"); - popover.classList.add("s-popover", ...classes); - const arrow = document.createElement("div"); - arrow.classList.add("s-popover--arrow"); - if (manualArrowPositioning) { - arrow.classList.add(`s-popover--arrow__${manualArrowPositioning}`); - } - popover.append(arrow, contentHtml); - return popover; - }; - exports.makeStacksPopover = makeStacksPopover; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/radio.js - var require_radio = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/radio.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksRadios = void 0; - var index_1 = require_dist(); - var makeStacksRadios = (radios, groupName, options) => { - radios.forEach((radio) => { - radio.name = groupName; - }); - return index_1.Input.makeStacksRadiosOrCheckboxes(radios, "radio", options); - }; - exports.makeStacksRadios = makeStacksRadios; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/select.js - var require_select = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/select.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.toggleValidation = exports.makeStacksSelect = void 0; - var index_1 = require_dist(); - var makeStacksSelect = (id, items, options = {}, labelOptions) => { - const { disabled = false, size, validation, classes = [] } = options; - const container = document.createElement("div"); - container.classList.add("d-flex", "gy4", "fd-column"); - if (labelOptions) { - (labelOptions.parentClasses || (labelOptions.parentClasses = [])).push("flex--item"); - const label = index_1.Label.makeStacksLabel(id, labelOptions); - container.append(label); - } - const selectContainer = document.createElement("div"); - selectContainer.classList.add("flex--item", "s-select"); - if (size) { - selectContainer.classList.add(`s-select__${size}`); - } - const select = document.createElement("select"); - select.id = id; - select.classList.add(...classes); - if (disabled) { - container.classList.add("is-disabled"); - select.disabled = true; - } - items.forEach((item) => { - const { value, text, selected = false } = item; - const option = document.createElement("option"); - option.value = value; - option.text = text; - option.selected = selected; - select.append(option); - }); - selectContainer.append(select); - container.append(selectContainer); - if (validation) { - (0, exports.toggleValidation)(container, validation); - } - return container; - }; - exports.makeStacksSelect = makeStacksSelect; - var toggleValidation = (container, state) => { - var _a, _b; - container.classList.remove("has-success", "has-warning", "has-error"); - (_a = container.querySelector(".s-input-icon")) === null || _a === void 0 ? void 0 : _a.remove(); - if (!state) - return; - container.classList.add(`has-${state}`); - const [name, path] = index_1.Icons.validationIcons[state]; - const [icon] = index_1.Icons.makeStacksIcon(name, path, { - classes: ["s-input-icon"], - width: 18 - }); - (_b = container.querySelector(".s-select")) === null || _b === void 0 ? void 0 : _b.append(icon); - }; - exports.toggleValidation = toggleValidation; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/spinner.js - var require_spinner = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/spinner.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeSpinner = void 0; - var makeSpinner = (options = {}) => { - const { size = "", hiddenText = "", classes = [] } = options; - const spinner = document.createElement("div"); - spinner.classList.add("s-spinner", ...classes); - if (size) { - spinner.classList.add(`s-spinner__${size}`); - } - if (hiddenText) { - const hiddenElement = document.createElement("div"); - hiddenElement.classList.add("v-visible-sr"); - hiddenElement.innerText = hiddenText; - spinner.append(hiddenElement); - } - return spinner; - }; - exports.makeSpinner = makeSpinner; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/tags.js - var require_tags = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/tags.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksTag = void 0; - var index_1 = require_dist(); - var makeStacksTag = (options) => { - const { classes = [], name, href = "#", moderator = false, selected = false, size = "", muted = false, required = false, sponsor = null, dismissable = false, onDismiss = null, watched = false, ignored = false } = options; - const tag = document.createElement("a"); - tag.classList.add("s-tag", ...classes); - tag.href = href; - tag.textContent = name; - if (moderator) { - tag.classList.add("s-tag__moderator"); - } - if (selected) { - tag.classList.add("is-selected"); - } - if (size) { - tag.classList.add(`s-tag__${size}`); - } - if (muted) { - tag.classList.add("s-tag__muted"); - } - if (required) { - tag.classList.add("s-tag__required"); - } - if (watched) { - tag.classList.add("s-tag__watched"); - } else if (ignored) { - tag.classList.add("s-tag__ignored"); - } - if (sponsor) { - const { imgUrl, width = 18, height = 16, alt = "" } = sponsor; - const sponsorImg = document.createElement("img"); - sponsorImg.classList.add("s-tag--sponsor"); - sponsorImg.src = imgUrl; - sponsorImg.width = width; - sponsorImg.height = height; - sponsorImg.alt = alt; - tag.prepend(" ", sponsorImg); - } - if (dismissable) { - const [iconClearSm] = index_1.Icons.makeStacksIcon("iconClearSm", "M12 3.41 10.59 2 7 5.59 3.41 2 2 3.41 5.59 7 2 10.59 3.41 12 7 8.41 10.59 12 12 10.59 8.41 7 12 3.41Z"); - const dismiss = document.createElement("span"); - dismiss.classList.add("s-tag--dismiss"); - dismiss.append(iconClearSm); - if (onDismiss) { - dismiss.addEventListener("click", (event) => { - const span = event.target; - onDismiss(span === null || span === void 0 ? void 0 : span.closest(".s-tag"), event); - }); - } - tag.append(" ", dismiss); - } - return tag; - }; - exports.makeStacksTag = makeStacksTag; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/textarea.js - var require_textarea = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/textarea.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.toggleValidation = exports.makeStacksTextarea = void 0; - var index_1 = require_dist(); - var makeStacksTextarea = (id, textareaOptions = {}, labelOptions) => { - const { value = "", classes = [], placeholder = "", title = "", size, validation } = textareaOptions; - const textareaParent = document.createElement("div"); - textareaParent.classList.add("d-flex", "fd-column", "gy4", ...classes); - if (labelOptions) { - const label = index_1.Label.makeStacksLabel(id, labelOptions); - textareaParent.append(label); - } - const textarea = document.createElement("textarea"); - textarea.classList.add("flex--item", "s-textarea"); - textarea.id = id; - textarea.placeholder = placeholder; - textarea.value = value; - textarea.title = title; - if (size) { - textarea.classList.add(`s-textarea__${size}`); - } - textareaParent.append(textarea); - if (validation) { - (0, exports.toggleValidation)(textareaParent, validation); - } - return textareaParent; - }; - exports.makeStacksTextarea = makeStacksTextarea; - var toggleValidation = (textareaParent, validation) => { - var _a, _b; - textareaParent.classList.remove("has-success", "has-warning", "has-error"); - const oldTextarea = textareaParent.querySelector(".s-textarea"); - if (!validation) { - (_a = textareaParent.querySelector(".s-input-icon")) === null || _a === void 0 ? void 0 : _a.remove(); - (_b = textareaParent.querySelector(".s-input-message")) === null || _b === void 0 ? void 0 : _b.remove(); - const validationContainer = oldTextarea.parentElement; - validationContainer === null || validationContainer === void 0 ? void 0 : validationContainer.replaceWith(oldTextarea); - return; - } - const { state, description } = validation; - textareaParent.classList.add(`has-${state}`); - const [iconName, iconPath] = index_1.Icons.validationIcons[state]; - const [icon] = index_1.Icons.makeStacksIcon(iconName, iconPath, { - classes: ["s-input-icon"], - width: 18 - }); - if (oldTextarea.nextElementSibling) { - oldTextarea.nextElementSibling.replaceWith(icon); - const inputMessage = textareaParent.querySelector(".s-input-message"); - if (description) { - if (inputMessage) { - inputMessage.innerHTML = description; - } else { - createAndAppendDescription(description, textareaParent); - } - } else if (!description && inputMessage) { - inputMessage.remove(); - } - } else { - const validationContainer = document.createElement("div"); - validationContainer.classList.add("d-flex", "ps-relative"); - validationContainer.append(oldTextarea, icon); - textareaParent.append(validationContainer); - if (description) { - createAndAppendDescription(description, textareaParent); - } - } - }; - exports.toggleValidation = toggleValidation; - var createAndAppendDescription = (description, appendTo) => { - const message = document.createElement("p"); - message.classList.add("flex--item", "s-input-message"); - message.innerHTML = description; - appendTo.append(message); - }; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/toggle.js - var require_toggle = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/toggle.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksToggle = void 0; - var index_1 = require_dist(); - var makeStacksToggle = (id, labelOptions, on = false, ...classes) => { - const container = document.createElement("div"); - container.classList.add("d-flex", "g8", "ai-center", ...classes); - const label = index_1.Label.makeStacksLabel(id, labelOptions); - const toggle = document.createElement("input"); - toggle.id = id; - toggle.classList.add("s-toggle-switch"); - toggle.type = "checkbox"; - toggle.checked = on; - container.append(label, toggle); - return container; - }; - exports.makeStacksToggle = makeStacksToggle; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/usercards.js - var require_usercards = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/usercards.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeMinimalUserCard = exports.makeSmallUserCard = exports.makeBaseUserCard = exports.makeFullUserCard = void 0; - var _1 = require_dist(); - var makeFullUserCard = (options) => { - const { avatar, user: { name = "", href = "#", reputation = "1", badges, labels, role, location: location2, tags }, userType, classes = [] } = options; - const userCard = document.createElement("div"); - userCard.classList.add("s-user-card", "s-user-card__full", ...classes); - const avatarContainer = getDefaultUserCardAvatar(avatar, href, 48); - const infoContainer = document.createElement("div"); - infoContainer.classList.add("s-user-card--info"); - const link = document.createElement("a"); - link.classList.add("s-user-card--link", "d-flex", "g4"); - link.href = href; - const username2 = document.createElement("div"); - username2.classList.add("flex--item"); - username2.innerHTML = name; - link.append(username2); - if (labels) { - const elements = getLabelElements(labels); - link.append(...elements); - } - const awards = getUserAwards(reputation, badges); - infoContainer.append(link, awards); - if (role) { - const roleEl = document.createElement("div"); - roleEl.classList.add("s-user-card--role"); - roleEl.innerHTML = role; - infoContainer.append(roleEl); - } - if (location2) { - const locationEl = document.createElement("div"); - locationEl.classList.add("s-user-card--location"); - locationEl.innerHTML = location2; - infoContainer.append(locationEl); - } - if (tags) { - const userTags = document.createElement("div"); - userTags.classList.add("s-user-card--tags", "d-flex", "g4"); - const tagsEls = tags.map((config) => { - var _a; - (_a = config.classes) === null || _a === void 0 ? void 0 : _a.push("flex--item"); - if (!(config === null || config === void 0 ? void 0 : config.size)) { - config.size = "xs"; - } - return _1.Tag.makeStacksTag(config); - }); - userTags.append(...tagsEls); - infoContainer.append(userTags); - } - userCard.append(avatarContainer, infoContainer); - if (userType) { - const userTypeEl = document.createElement("div"); - userTypeEl.classList.add("s-user-card--type"); - userTypeEl.innerHTML = userType; - userCard.append(userTypeEl); - } - return userCard; - }; - exports.makeFullUserCard = makeFullUserCard; - var makeBaseUserCard = (options) => { - const { avatar, time = "", user: { name = "", href = "#", reputation = "1", badges, labels }, deleted, highlight, userType, classes = [] } = options; - const userCard = document.createElement("div"); - userCard.classList.add("s-user-card", ...classes); - if (highlight) { - userCard.classList.add("s-user-card__highlighted"); - } - const timeEl = document.createElement("time"); - timeEl.classList.add("s-user-card--time"); - timeEl.innerHTML = time; - const avatarContainer = getDefaultUserCardAvatar(avatar, href, 32, deleted); - const infoContainer = document.createElement("div"); - infoContainer.classList.add("s-user-card--info"); - const link = document.createElement(deleted ? "div" : "a"); - link.classList.add("s-user-card--link", "d-flex", "g4"); - if (labels) { - const nameDiv = document.createElement("div"); - nameDiv.classList.add("flex--item"); - nameDiv.innerHTML = name; - link.append(nameDiv, ...getLabelElements(labels)); - } else { - link.innerHTML = name; - } - infoContainer.append(link); - userCard.append(timeEl, avatarContainer, infoContainer); - if (deleted || link instanceof HTMLDivElement) { - userCard.classList.add("s-user-card__deleted"); - return userCard; - } - link.href = href; - const awards = getUserAwards(reputation, badges); - infoContainer.append(awards); - if (userType) { - const userTypeEl = document.createElement("div"); - userTypeEl.classList.add("s-user-card--type"); - userTypeEl.innerText = userType; - userCard.append(userTypeEl); - } - return userCard; - }; - exports.makeBaseUserCard = makeBaseUserCard; - var makeSmallUserCard = (options) => { - const { avatar, user: { badges, href = "#", reputation = "1" }, classes = [] } = options; - const userCard = document.createElement("div"); - userCard.classList.add("s-user-card", "s-user-card__small", ...classes); - const avatarContainer = getDefaultUserCardAvatar(avatar, href, 24); - const infoContainer = document.createElement("div"); - infoContainer.classList.add("s-user-card--info"); - const awards = getUserAwards(reputation, badges); - infoContainer.append(awards); - userCard.append(avatarContainer, infoContainer); - return userCard; - }; - exports.makeSmallUserCard = makeSmallUserCard; - var makeMinimalUserCard = (options) => { - const { avatar, time = "", user: { name = "", href = "#", reputation = "1" }, deleted, classes = [] } = options; - const userCard = document.createElement("div"); - userCard.classList.add("s-user-card", "s-user-card__minimal", ...classes); - if (deleted) { - userCard.classList.add("s-user-card__deleted"); - } - if (avatar) { - const avatarContainer = getDefaultUserCardAvatar(avatar, href, "", deleted); - userCard.prepend(avatarContainer); - } - const infoContainer = document.createElement("div"); - infoContainer.classList.add("s-user-card--info"); - const link = document.createElement(deleted ? "div" : "a"); - link.classList.add("s-user-card--link"); - link.innerHTML = name; - if (link instanceof HTMLAnchorElement) { - link.href = href; - } - const awards = getUserAwards(reputation); - infoContainer.append(link, !deleted ? awards : ""); - const timeEl = document.createElement("time"); - timeEl.classList.add("s-user-card--time"); - timeEl.innerText = time; - userCard.append(infoContainer, timeEl); - return userCard; - }; - exports.makeMinimalUserCard = makeMinimalUserCard; - var getUserAwards = (reputation, badges) => { - const awards = document.createElement("ul"); - awards.classList.add("s-user-card--awards"); - const repContainer = document.createElement("li"); - repContainer.classList.add("s-user-card--rep"); - repContainer.innerHTML = reputation; - awards.append(repContainer); - if (badges) { - const badgesEls = Object.entries(badges).map(([color, count]) => { - const badgeColor = color; - return _1.Badges.makeBling("li", badgeColor, count.toString()); - }); - awards.append(...badgesEls); - } - return awards; - }; - var getLabelElements = (labels) => { - return labels.map((config) => { - var _a; - (_a = config.classes) === null || _a === void 0 ? void 0 : _a.push("flex--item"); - if (!config.size) { - config.size = "xs"; - } - return _1.Badges.makeStacksBadge(config); - }); - }; - var getDefaultUserCardAvatar = (config, defaultHref, defaultSize, deleted) => { - var _a; - (_a = config === null || config === void 0 ? void 0 : config.classes) === null || _a === void 0 ? void 0 : _a.push("s-user-card--avatar"); - if (config && !config.size && defaultSize) { - config.size = defaultSize; - } - if (config && !config.href) { - config.href = defaultHref; - } - return _1.Avatar.makeAvatar(config, deleted ? "div" : "a"); - }; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/buttons/index.js - var require_buttons = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/buttons/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksButton = void 0; - var index_1 = require_dist(); - var makeStacksButton = (id, text, options = {}) => { - const { title, type = [], primary = false, loading = false, selected = false, disabled = false, badge, size, iconConfig, click, classes = [] } = options; - const btn = document.createElement("button"); - btn.id = id; - btn.textContent = text; - btn.classList.add("s-btn", ...type.map((name) => `s-btn__${name}`), ...classes); - btn.type = "button"; - btn.setAttribute("role", "button"); - btn.setAttribute("aria-label", title || text); - if (primary) { - btn.classList.add("s-btn__primary"); - } - if (loading) { - btn.classList.add("is-loading"); - } - if (title) { - btn.title = title; - } - if (selected) { - btn.classList.add("is-selected"); - } - if (disabled) { - btn.disabled = true; - } - if (badge) { - const badgeEl = document.createElement("span"); - badgeEl.classList.add("s-btn--badge"); - const badgeNumber = document.createElement("span"); - badgeNumber.classList.add("s-btn--number"); - badgeNumber.textContent = badge.toString(); - badgeEl.append(badgeNumber); - btn.append(" ", badgeEl); - } - if (size) { - btn.classList.add(`s-btn__${size}`); - } - if (iconConfig) { - btn.classList.add("s-btn__icon"); - const { name, path, width, height } = iconConfig; - const [icon] = index_1.Icons.makeStacksIcon(name, path, { width, height }); - btn.prepend(icon, " "); - } - if (click) { - const { handler, options: options2 } = click; - btn.addEventListener("click", handler, options2); - } - return btn; - }; - exports.makeStacksButton = makeStacksButton; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/icons/index.js - var require_icons = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/icons/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksIcon = exports.validationIcons = void 0; - exports.validationIcons = { - warning: [ - "iconAlert", - "M7.95 2.71c.58-.94 1.52-.94 2.1 0l7.69 12.58c.58.94.15 1.71-.96 1.71H1.22C.1 17-.32 16.23.26 15.29L7.95 2.71ZM8 6v5h2V6H8Zm0 7v2h2v-2H8Z" - ], - error: [ - "iconAlertCircle", - "M9 17c-4.36 0-8-3.64-8-8 0-4.36 3.64-8 8-8 4.36 0 8 3.64 8 8 0 4.36-3.64 8-8 8ZM8 4v6h2V4H8Zm0 8v2h2v-2H8Z" - ], - success: [ - "iconCheckmark", - "M16 4.41 14.59 3 6 11.59 2.41 8 1 9.41l5 5 10-10Z" - ] - }; - var makeStacksIcon = (name, pathConfig, { classes = [], width = 14, height = width } = {}) => { - const ns = "http://www.w3.org/2000/svg"; - const svg = document.createElementNS(ns, "svg"); - svg.classList.add("svg-icon", name, ...classes); - svg.setAttribute("width", width.toString()); - svg.setAttribute("height", height.toString()); - svg.setAttribute("viewBox", `0 0 ${width} ${height}`); - svg.setAttribute("aria-hidden", "true"); - const path = document.createElementNS(ns, "path"); - path.setAttribute("d", pathConfig); - svg.append(path); - return [svg, path]; - }; - exports.makeStacksIcon = makeStacksIcon; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/modals/index.js - var require_modals = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/modals/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeStacksModal = void 0; - var index_1 = require_dist(); - var makeStacksModal = (id, options) => { - const { classes = [], danger = false, fullscreen = false, celebratory = false, title: { text, id: titleId, classes: titleClasses = [] }, body: { bodyHtml, id: bodyId, classes: bodyClasses = [] }, footer: { buttons, classes: footerClasses = [] } } = options; - const modal = document.createElement("aside"); - modal.id = id; - modal.classList.add("s-modal", ...classes); - modal.setAttribute("role", "dialog"); - modal.setAttribute("data-controller", "s-modal"); - modal.setAttribute("data-s-modal-target", "modal"); - if (danger) { - modal.classList.add("s-modal__danger"); - } - if (celebratory) { - modal.classList.add("s-modal__celebration"); - } - const dialog = document.createElement("div"); - dialog.classList.add("s-modal--dialog"); - dialog.setAttribute("role", "document"); - if (fullscreen) { - dialog.classList.add("s-modal__full"); - } - const header = document.createElement("h1"); - header.classList.add("s-modal--header", ...titleClasses); - header.append(text); - if (titleId) { - header.id = titleId; - modal.setAttribute("aria-labelledby", titleId); - } - const body = document.createElement("p"); - body.classList.add("s-modal--body", ...bodyClasses); - body.append(bodyHtml); - if (bodyId) { - body.id = bodyId; - modal.setAttribute("aria-describedby", bodyId); - } - const footer = document.createElement("div"); - footer.classList.add("d-flex", "gx8", "s-modal--footer", ...footerClasses); - buttons.forEach((button) => { - const { element, hideOnClick } = button; - element.classList.add("flex--item"); - if (hideOnClick) { - element.setAttribute("data-action", "s-modal#hide"); - } - footer.append(element); - }); - const [iconClear] = index_1.Icons.makeStacksIcon("iconClear", "M15 4.41 13.59 3 9 7.59 4.41 3 3 4.41 7.59 9 3 13.59 4.41 15 9 10.41 13.59 15 15 13.59 10.41 9 15 4.41Z", { width: 18 }); - const close = document.createElement("button"); - close.classList.add("s-modal--close", "s-btn", "s-btn__muted"); - close.setAttribute("type", "button"); - close.setAttribute("aria-label", "Close"); - close.setAttribute("data-action", "s-modal#hide"); - close.append(iconClear); - dialog.append(header, body, footer, close); - modal.append(dialog); - return modal; - }; - exports.makeStacksModal = makeStacksModal; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/notifications/index.js - var require_notifications = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/notifications/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.showToast = exports.hideToast = exports.toggleToast = exports.makeStacksToast = void 0; - var index_1 = require_icons(); - var makeStacksToast = (id, text, { buttons = [], classes = [], msgClasses = [], type = "none", important = false } = {}) => { - const wrap = document.createElement("div"); - wrap.classList.add("s-toast", ...classes); - wrap.setAttribute("aria-hidden", "true"); - wrap.setAttribute("role", "alertdialog"); - wrap.setAttribute("aria-labelledby", "notice-message"); - wrap.id = id; - const aside = document.createElement("aside"); - aside.classList.add("s-notice", "p8", "pl16"); - if (type !== "none") - aside.classList.add(`s-notice__${type}`); - if (important) - aside.classList.add("s-notice__important"); - const msgWrap = document.createElement("div"); - msgWrap.classList.add("d-flex", "gx16", "ai-center", "jc-space-between", ...msgClasses); - const message = document.createElement("div"); - message.classList.add("flex--item"); - message.textContent = text; - const btnWrap = document.createElement("div"); - btnWrap.classList.add("d-flex"); - const dismissBtn = document.createElement("button"); - dismissBtn.type = "button"; - dismissBtn.classList.add("s-btn", "s-notice--btn"); - dismissBtn.setAttribute("aria-label", "Dismiss"); - buttons.push(dismissBtn); - const [dismissIcon] = (0, index_1.makeStacksIcon)("iconClearSm", "M12 3.41 10.59 2 7 5.59 3.41 2 2 3.41 5.59 7 2 10.59 3.41 12 7 8.41 10.59 12 12 10.59 8.41 7 12 3.41z"); - dismissBtn.append(dismissIcon); - btnWrap.append(...buttons); - msgWrap.append(message, btnWrap); - aside.append(msgWrap); - wrap.append(aside); - return wrap; - }; - exports.makeStacksToast = makeStacksToast; - var toggleToast = (target, show) => { - const toast = typeof target === "string" ? document.querySelector(target) : target; - if (!toast) - throw new ReferenceError(`missing toast: ${target}`); - const isShown = (toast === null || toast === void 0 ? void 0 : toast.getAttribute("aria-hidden")) !== "true"; - toast.setAttribute("aria-hidden", (show !== void 0 ? !show : isShown).toString()); - return toast; - }; - exports.toggleToast = toggleToast; - var hideToast = (target, hideFor) => { - const toast = (0, exports.toggleToast)(target, false); - if (hideFor) - setTimeout(() => (0, exports.showToast)(toast), hideFor * 1e3); - }; - exports.hideToast = hideToast; - var showToast = (target, showFor) => { - const toast = (0, exports.toggleToast)(target, true); - if (showFor) - setTimeout(() => (0, exports.hideToast)(toast), showFor * 1e3); - }; - exports.showToast = showToast; - } - }); - - // node_modules/@userscripters/stacks-helpers/dist/index.js - var require_dist = __commonJS({ - "node_modules/@userscripters/stacks-helpers/dist/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Notifications = exports.Modals = exports.Icons = exports.Buttons = exports.UserCard = exports.Toggle = exports.Textarea = exports.Tag = exports.Spinner = exports.Select = exports.Radio = exports.Popover = exports.Progress = exports.Pagination = exports.Notice = exports.Navigation = exports.Menu = exports.Links = exports.Label = exports.Input = exports.Indicator = exports.Checkbox = exports.ButtonGroup = exports.Breadcrumb = exports.Banners = exports.Badges = exports.Avatar = void 0; - var Avatar = require_avatar(); - exports.Avatar = Avatar; - var Badges = require_badges(); - exports.Badges = Badges; - var Banners = require_banners(); - exports.Banners = Banners; - var Breadcrumb = require_breadcrumb(); - exports.Breadcrumb = Breadcrumb; - var ButtonGroup = require_button_groups(); - exports.ButtonGroup = ButtonGroup; - var Checkbox3 = require_checkbox(); - exports.Checkbox = Checkbox3; - var Indicator = require_indicator(); - exports.Indicator = Indicator; - var Input3 = require_input(); - exports.Input = Input3; - var Label = require_label(); - exports.Label = Label; - var Links = require_links(); - exports.Links = Links; - var Menu2 = require_menus(); - exports.Menu = Menu2; - var Navigation = require_navigation(); - exports.Navigation = Navigation; - var Notice = require_notices(); - exports.Notice = Notice; - var Pagination = require_pagination(); - exports.Pagination = Pagination; - var Progress = require_progress(); - exports.Progress = Progress; - var Popover = require_popover(); - exports.Popover = Popover; - var Radio2 = require_radio(); - exports.Radio = Radio2; - var Select2 = require_select(); - exports.Select = Select2; - var Spinner = require_spinner(); - exports.Spinner = Spinner; - var Tag = require_tags(); - exports.Tag = Tag; - var Textarea2 = require_textarea(); - exports.Textarea = Textarea2; - var Toggle3 = require_toggle(); - exports.Toggle = Toggle3; - var UserCard = require_usercards(); - exports.UserCard = UserCard; - var Buttons5 = require_buttons(); - exports.Buttons = Buttons5; - var Icons = require_icons(); - exports.Icons = Icons; - var Modals4 = require_modals(); - exports.Modals = Modals4; - var Notifications = require_notifications(); - exports.Notifications = Notifications; - } - }); // src/UserscriptTools/Store.ts var Store = class _Store { @@ -1994,8 +468,533 @@ } }; + // node_modules/@userscripters/stacks-helpers/dist/checkbox.js + var checkbox_exports = {}; + __export(checkbox_exports, { + makeStacksCheckboxes: () => makeStacksCheckboxes + }); + var makeStacksCheckboxes = (checkboxes, options) => { + return input_exports.makeStacksRadiosOrCheckboxes(checkboxes, "checkbox", options); + }; + + // node_modules/@userscripters/stacks-helpers/dist/input.js + var input_exports = {}; + __export(input_exports, { + makeStacksInput: () => makeStacksInput, + makeStacksRadiosOrCheckboxes: () => makeStacksRadiosOrCheckboxes + }); + var makeStacksInput = (id, inputOptions = {}, labelOptions) => { + var _a; + const { value = "", classes = [], placeholder = "", title, isSearch: isSearch2 } = inputOptions; + const inputParent = document.createElement("div"); + inputParent.classList.add("d-flex", "ps-relative"); + const input = document.createElement("input"); + input.classList.add("s-input", ...classes); + input.type = "text"; + input.id = input.name = id; + input.placeholder = placeholder; + input.value = value; + if (title) + input.title = title; + if (isSearch2) { + input.classList.add("s-input__search"); + const [searchIcon] = icons_exports.makeStacksIcon("iconSearch", "m18 16.5-5.14-5.18h-.35a7 7 0 10-1.19 1.19v.35L16.5 18l1.5-1.5zM12 7A5 5 0 112 7a5 5 0 0110 0z", { + classes: ["s-input-icon", "s-input-icon__search"], + width: 18 + }); + inputParent.append(searchIcon); + } + inputParent.prepend(input); + if (labelOptions) { + (_a = labelOptions.parentClasses || (labelOptions.parentClasses = [])) === null || _a === void 0 ? void 0 : _a.push("flex--item"); + const label = label_exports.makeStacksLabel(id, labelOptions); + const container = document.createElement("div"); + container.classList.add("d-flex", "gy4", "fd-column"); + container.append(label, inputParent); + return container; + } + return inputParent; + }; + var makeStacksRadiosOrCheckboxes = (inputs, type, options, withoutFieldset) => { + const fieldset = document.createElement("fieldset"); + fieldset.classList.add("s-check-group"); + if (options) { + const { legendText = "", legendDescription = "", horizontal, classes = [] } = options; + if (horizontal) { + fieldset.classList.add("s-check-group__horizontal"); + } + fieldset.classList.add(...classes); + const legend = document.createElement("legend"); + legend.classList.add("flex--item", "s-label"); + legend.innerText = legendText; + if (legendDescription) { + const span = document.createElement("span"); + span.classList.add("ml4", "fw-normal", "fc-light"); + span.innerText = legendDescription; + legend.append(" ", span); + } + fieldset.append(legend); + } + const items = inputs.map((inputType) => makeFormContainer(inputType, type)); + if (withoutFieldset) { + return items; + } else { + fieldset.append(...items); + return [fieldset, ...items]; + } + }; + var makeFormContainer = (radioCheckbox, type) => { + const { id, labelConfig, selected = false, disabled = false, name } = radioCheckbox; + const container = document.createElement("div"); + container.classList.add("s-check-control"); + const input = document.createElement("input"); + input.classList.add(`s-${type}`); + input.type = type; + input.id = id; + input.checked = selected; + input.disabled = disabled; + if (name) { + input.name = name; + } + const label = label_exports.makeStacksLabel(id, labelConfig); + container.append(input, label); + return container; + }; + + // node_modules/@userscripters/stacks-helpers/dist/label.js + var label_exports = {}; + __export(label_exports, { + makeStacksLabel: () => makeStacksLabel + }); + var makeStacksLabel = (forId, labelOptions) => { + const { classes = [], parentClasses = [], text, description, statusText, statusType } = labelOptions; + const labelParent = document.createElement("div"); + labelParent.classList.add(...parentClasses); + const label = document.createElement("label"); + label.classList.add("s-label", ...classes); + label.htmlFor = forId; + label.innerHTML = text; + if (statusText && statusType) { + const status = document.createElement("span"); + status.innerHTML = statusText; + status.classList.add("s-label--status"); + if (statusType !== "optional") { + status.classList.add(`s-label--status__${statusType}`); + } + label.append(" ", status); + } + if (description) { + const p = document.createElement("p"); + p.classList.add("s-description", "mt2"); + p.innerHTML = description; + label.classList.add("d-block"); + label.append(p); + labelParent.append(label); + return labelParent; + } else { + label.classList.add("flex--item"); + return label; + } + }; + + // node_modules/@userscripters/stacks-helpers/dist/links.js + var links_exports = {}; + __export(links_exports, { + makeLink: () => makeLink + }); + var makeLink = (options = {}) => { + const { href = "", isButton = false, type = "", blockLink = null, text, click, classes = [] } = options; + const anchor = document.createElement(isButton ? "button" : "a"); + anchor.classList.add("s-link", ...classes); + anchor.textContent = text; + if (type) { + anchor.classList.add(`s-link__${type}`); + } + if (blockLink) { + anchor.classList.add("s-block-link"); + anchor.classList.remove("s-link"); + if (blockLink.border) { + anchor.classList.add(`s-block-link__${blockLink.border}`); + } + if (blockLink.selected) { + anchor.classList.add("is-selected"); + } + if (blockLink.danger) { + anchor.classList.add("s-block-link__danger"); + } + } + if (href && anchor instanceof HTMLAnchorElement) { + anchor.href = href; + } + if (click) { + const { handler, options: options2 } = click; + anchor.addEventListener("click", handler, options2); + } + return anchor; + }; + + // node_modules/@userscripters/stacks-helpers/dist/menus.js + var menus_exports = {}; + __export(menus_exports, { + makeMenu: () => makeMenu + }); + var makeMenu = (options = {}) => { + const { itemsType = "a", childrenClasses = [], navItems, classes = [] } = options; + const menu = document.createElement("ul"); + menu.classList.add("s-menu", ...classes); + menu.setAttribute("role", "menu"); + navItems.forEach((navItem) => { + var _a; + const li = document.createElement("li"); + if ("popover" in navItem && navItem.popover) { + const { position = "auto", html } = navItem.popover; + Stacks.setTooltipHtml(li, html, { + placement: position + }); + } + if ("separatorType" in navItem) { + const { separatorType, separatorText } = navItem; + li.setAttribute("role", "separator"); + li.classList.add(`s-menu--${separatorType}`); + if (separatorText) + li.textContent = separatorText; + menu.append(li); + return; + } else if ("checkbox" in navItem) { + const { checkbox, checkboxOptions } = navItem; + const [, input] = checkbox_exports.makeStacksCheckboxes([checkbox], checkboxOptions); + li.append(input); + menu.append(li); + return; + } + (_a = navItem.classes) === null || _a === void 0 ? void 0 : _a.push(...childrenClasses); + li.setAttribute("role", "menuitem"); + const item = links_exports.makeLink(Object.assign({ + isButton: itemsType === "button" || navItem.isButton, + blockLink: {} + }, navItem)); + li.append(item); + menu.append(li); + }); + return menu; + }; + + // node_modules/@userscripters/stacks-helpers/dist/radio.js + var radio_exports = {}; + __export(radio_exports, { + makeStacksRadios: () => makeStacksRadios + }); + var makeStacksRadios = (radios, groupName, options) => { + radios.forEach((radio) => { + radio.name = groupName; + }); + return input_exports.makeStacksRadiosOrCheckboxes(radios, "radio", options); + }; + + // node_modules/@userscripters/stacks-helpers/dist/select.js + var select_exports = {}; + __export(select_exports, { + makeStacksSelect: () => makeStacksSelect, + toggleValidation: () => toggleValidation + }); + var makeStacksSelect = (id, items, options = {}, labelOptions) => { + const { disabled = false, size, validation, classes = [] } = options; + const container = document.createElement("div"); + container.classList.add("d-flex", "gy4", "fd-column"); + if (labelOptions) { + (labelOptions.parentClasses || (labelOptions.parentClasses = [])).push("flex--item"); + const label = label_exports.makeStacksLabel(id, labelOptions); + container.append(label); + } + const selectContainer = document.createElement("div"); + selectContainer.classList.add("flex--item", "s-select"); + if (size) { + selectContainer.classList.add(`s-select__${size}`); + } + const select = document.createElement("select"); + select.id = id; + select.classList.add(...classes); + if (disabled) { + container.classList.add("is-disabled"); + select.disabled = true; + } + items.forEach((item) => { + const { value, text, selected = false } = item; + const option = document.createElement("option"); + option.value = value; + option.text = text; + option.selected = selected; + select.append(option); + }); + selectContainer.append(select); + container.append(selectContainer); + if (validation) { + toggleValidation(container, validation); + } + return container; + }; + var toggleValidation = (container, state) => { + var _a, _b; + container.classList.remove("has-success", "has-warning", "has-error"); + (_a = container.querySelector(".s-input-icon")) === null || _a === void 0 ? void 0 : _a.remove(); + if (!state) + return; + container.classList.add(`has-${state}`); + const [name, path] = icons_exports.validationIcons[state]; + const [icon] = icons_exports.makeStacksIcon(name, path, { + classes: ["s-input-icon"], + width: 18 + }); + (_b = container.querySelector(".s-select")) === null || _b === void 0 ? void 0 : _b.append(icon); + }; + + // node_modules/@userscripters/stacks-helpers/dist/textarea.js + var textarea_exports = {}; + __export(textarea_exports, { + makeStacksTextarea: () => makeStacksTextarea, + toggleValidation: () => toggleValidation2 + }); + var makeStacksTextarea = (id, textareaOptions = {}, labelOptions) => { + const { value = "", classes = [], placeholder = "", title = "", size, validation } = textareaOptions; + const textareaParent = document.createElement("div"); + textareaParent.classList.add("d-flex", "fd-column", "gy4", ...classes); + if (labelOptions) { + const label = label_exports.makeStacksLabel(id, labelOptions); + textareaParent.append(label); + } + const textarea = document.createElement("textarea"); + textarea.classList.add("flex--item", "s-textarea"); + textarea.id = id; + textarea.placeholder = placeholder; + textarea.value = value; + textarea.title = title; + if (size) { + textarea.classList.add(`s-textarea__${size}`); + } + textareaParent.append(textarea); + if (validation) { + toggleValidation2(textareaParent, validation); + } + return textareaParent; + }; + var toggleValidation2 = (textareaParent, validation) => { + var _a, _b; + textareaParent.classList.remove("has-success", "has-warning", "has-error"); + const oldTextarea = textareaParent.querySelector(".s-textarea"); + if (!validation) { + (_a = textareaParent.querySelector(".s-input-icon")) === null || _a === void 0 ? void 0 : _a.remove(); + (_b = textareaParent.querySelector(".s-input-message")) === null || _b === void 0 ? void 0 : _b.remove(); + const validationContainer = oldTextarea.parentElement; + validationContainer === null || validationContainer === void 0 ? void 0 : validationContainer.replaceWith(oldTextarea); + return; + } + const { state, description } = validation; + textareaParent.classList.add(`has-${state}`); + const [iconName, iconPath] = icons_exports.validationIcons[state]; + const [icon] = icons_exports.makeStacksIcon(iconName, iconPath, { + classes: ["s-input-icon"], + width: 18 + }); + if (oldTextarea.nextElementSibling) { + oldTextarea.nextElementSibling.replaceWith(icon); + const inputMessage = textareaParent.querySelector(".s-input-message"); + if (description) { + if (inputMessage) { + inputMessage.innerHTML = description; + } else { + createAndAppendDescription(description, textareaParent); + } + } else if (!description && inputMessage) { + inputMessage.remove(); + } + } else { + const validationContainer = document.createElement("div"); + validationContainer.classList.add("d-flex", "ps-relative"); + validationContainer.append(oldTextarea, icon); + textareaParent.append(validationContainer); + if (description) { + createAndAppendDescription(description, textareaParent); + } + } + }; + var createAndAppendDescription = (description, appendTo) => { + const message = document.createElement("p"); + message.classList.add("flex--item", "s-input-message"); + message.innerHTML = description; + appendTo.append(message); + }; + + // node_modules/@userscripters/stacks-helpers/dist/toggle.js + var toggle_exports = {}; + __export(toggle_exports, { + makeStacksToggle: () => makeStacksToggle + }); + var makeStacksToggle = (id, labelOptions, on = false, ...classes) => { + const container = document.createElement("div"); + container.classList.add("d-flex", "g8", "ai-center", ...classes); + const label = label_exports.makeStacksLabel(id, labelOptions); + const toggle = document.createElement("input"); + toggle.id = id; + toggle.classList.add("s-toggle-switch"); + toggle.type = "checkbox"; + toggle.checked = on; + container.append(label, toggle); + return container; + }; + + // node_modules/@userscripters/stacks-helpers/dist/buttons/index.js + var buttons_exports = {}; + __export(buttons_exports, { + makeStacksButton: () => makeStacksButton + }); + var makeStacksButton = (id, text, options = {}) => { + const { title, type = [], primary = false, loading = false, selected = false, disabled = false, badge, size, iconConfig, click, classes = [] } = options; + const btn = document.createElement("button"); + if (id !== "") { + btn.id = id; + } + btn.classList.add("s-btn", ...type.map((name) => `s-btn__${name}`), ...classes); + btn.append(text); + btn.type = "button"; + btn.setAttribute("role", "button"); + const ariaLabel = title || (text instanceof HTMLElement ? text.textContent || "" : text); + btn.setAttribute("aria-label", ariaLabel); + if (primary) { + btn.classList.add("s-btn__filled"); + } + if (loading) { + btn.classList.add("is-loading"); + } + if (title) { + btn.title = title; + } + if (selected) { + btn.classList.add("is-selected"); + } + if (disabled) { + btn.disabled = true; + } + if (badge) { + const badgeEl = document.createElement("span"); + badgeEl.classList.add("s-btn--badge"); + const badgeNumber = document.createElement("span"); + badgeNumber.classList.add("s-btn--number"); + badgeNumber.textContent = badge.toString(); + badgeEl.append(badgeNumber); + btn.append(" ", badgeEl); + } + if (size) { + btn.classList.add(`s-btn__${size}`); + } + if (iconConfig) { + btn.classList.add("s-btn__icon"); + const { name, path, width, height } = iconConfig; + const [icon] = icons_exports.makeStacksIcon(name, path, { width, height }); + btn.prepend(icon, " "); + } + if (click) { + const { handler, options: options2 } = click; + btn.addEventListener("click", handler, options2); + } + return btn; + }; + + // node_modules/@userscripters/stacks-helpers/dist/icons/index.js + var icons_exports = {}; + __export(icons_exports, { + makeStacksIcon: () => makeStacksIcon, + validationIcons: () => validationIcons + }); + var validationIcons = { + warning: [ + "iconAlert", + "M7.95 2.71c.58-.94 1.52-.94 2.1 0l7.69 12.58c.58.94.15 1.71-.96 1.71H1.22C.1 17-.32 16.23.26 15.29L7.95 2.71ZM8 6v5h2V6H8Zm0 7v2h2v-2H8Z" + ], + error: [ + "iconAlertCircle", + "M9 17c-4.36 0-8-3.64-8-8 0-4.36 3.64-8 8-8 4.36 0 8 3.64 8 8 0 4.36-3.64 8-8 8ZM8 4v6h2V4H8Zm0 8v2h2v-2H8Z" + ], + success: [ + "iconCheckmark", + "M16 4.41 14.59 3 6 11.59 2.41 8 1 9.41l5 5 10-10Z" + ] + }; + var makeStacksIcon = (name, pathConfig, { classes = [], width = 14, height = width } = {}) => { + const ns = "http://www.w3.org/2000/svg"; + const svg = document.createElementNS(ns, "svg"); + svg.classList.add("svg-icon", name, ...classes); + svg.setAttribute("width", width.toString()); + svg.setAttribute("height", height.toString()); + svg.setAttribute("viewBox", `0 0 ${width} ${height}`); + svg.setAttribute("aria-hidden", "true"); + const path = document.createElementNS(ns, "path"); + path.setAttribute("d", pathConfig); + svg.append(path); + return [svg, path]; + }; + + // node_modules/@userscripters/stacks-helpers/dist/modals/index.js + var modals_exports = {}; + __export(modals_exports, { + makeStacksModal: () => makeStacksModal + }); + var makeStacksModal = (id, options) => { + const { classes = [], danger = false, fullscreen = false, celebratory = false, title: { text, id: titleId, classes: titleClasses = [] }, body: { bodyHtml, id: bodyId, classes: bodyClasses = [] }, footer: { buttons, classes: footerClasses = [] } } = options; + const modal = document.createElement("aside"); + modal.id = id; + modal.classList.add("s-modal", ...classes); + modal.setAttribute("role", "dialog"); + modal.setAttribute("data-controller", "s-modal"); + modal.setAttribute("data-s-modal-target", "modal"); + if (danger) { + modal.classList.add("s-modal__danger"); + } + if (celebratory) { + modal.classList.add("s-modal__celebration"); + } + const dialog = document.createElement("div"); + dialog.classList.add("s-modal--dialog"); + dialog.setAttribute("role", "document"); + if (fullscreen) { + dialog.classList.add("s-modal__full"); + } + const header = document.createElement("h1"); + header.classList.add("s-modal--header", ...titleClasses); + header.append(text); + if (titleId) { + header.id = titleId; + modal.setAttribute("aria-labelledby", titleId); + } + const body = document.createElement("p"); + body.classList.add("s-modal--body", ...bodyClasses); + body.append(bodyHtml); + if (bodyId) { + body.id = bodyId; + modal.setAttribute("aria-describedby", bodyId); + } + const footer = document.createElement("div"); + footer.classList.add("d-flex", "gx8", "s-modal--footer", ...footerClasses); + buttons.forEach((button) => { + const { element, hideOnClick } = button; + element.classList.add("flex--item"); + if (hideOnClick) { + element.setAttribute("data-action", "s-modal#hide"); + } + footer.append(element); + }); + const [iconClear] = icons_exports.makeStacksIcon("iconClear", "M15 4.41 13.59 3 9 7.59 4.41 3 3 4.41 7.59 9 3 13.59 4.41 15 9 10.41 13.59 15 15 13.59 10.41 9 15 4.41Z", { width: 18 }); + const close = document.createElement("button"); + close.classList.add("s-modal--close", "s-btn", "s-btn__muted"); + close.setAttribute("type", "button"); + close.setAttribute("aria-label", "Close"); + close.setAttribute("data-action", "s-modal#hide"); + close.append(iconClear); + dialog.append(header, body, footer, close); + modal.append(dialog); + return modal; + }; + // src/UserscriptTools/MetaSmokeAPI.ts - var import_stacks_helpers = __toESM(require_dist(), 1); var metasmokeKey = "0a946b9419b5842f99b052d19c956302aa6c6dd5a420b043b20072ad2efc29e0"; var metasmokeApiFilter = "GGJFNNKKJFHFKJFLJLGIJMFIHNNJNINJ"; var metasmokeReportedMessage = "Post reported to Smokey"; @@ -2021,7 +1020,7 @@ _MetaSmokeAPI.accessToken = await _MetaSmokeAPI.getUserKey(); } static getMetasmokeTokenPopup() { - const codeInput = import_stacks_helpers.Input.makeStacksInput( + const codeInput = input_exports.makeStacksInput( "advanced-flagging-metasmoke-token-input", { placeholder: "Enter the code here" }, { @@ -2029,7 +1028,7 @@ description: "Once you've authenticated Advanced Flagging with metasmoke, you'll be given a code; enter it below:" } ); - const authModal = import_stacks_helpers.Modals.makeStacksModal( + const authModal = modals_exports.makeStacksModal( "advanced-flagging-metasmoke-token-modal", { title: { @@ -2041,14 +1040,14 @@ footer: { buttons: [ { - element: import_stacks_helpers.Buttons.makeStacksButton( + element: buttons_exports.makeStacksButton( "advanced-flagging-submit-code", "Submit", { primary: true } ) }, { - element: import_stacks_helpers.Buttons.makeStacksButton( + element: buttons_exports.makeStacksButton( "advanced-flagging-dismiss-code-modal", "Cancel" ), @@ -2305,7 +1304,7 @@ else return ""; } function getPostType(element) { - return element.classList.contains("question") || element.querySelector(".question-hyperlink, .s-link") ? "Question" : "Answer"; + return element.classList.contains("question") || element.id.startsWith("question") ? "Question" : "Answer"; } function getPostId(postNode, postType) { const href = postNode.querySelector( @@ -2624,7 +1623,6 @@ ]; // src/modals/config.ts - var import_stacks_helpers2 = __toESM(require_dist(), 1); function saveChanges() { document.querySelectorAll("#advanced-flagging-configuration-section-general > div > input").forEach((element) => { const id = element.id.split("-").pop(); @@ -2644,7 +1642,7 @@ setTimeout(() => window.location.reload(), 500); } function buildConfigurationOverlay() { - const modal = import_stacks_helpers2.Modals.makeStacksModal( + const modal = modals_exports.makeStacksModal( "advanced-flagging-configuration-modal", { title: { @@ -2656,7 +1654,7 @@ footer: { buttons: [ { - element: import_stacks_helpers2.Buttons.makeStacksButton( + element: buttons_exports.makeStacksButton( "advanced-flagging-configuration-modal-save", "Save changes", { @@ -2671,14 +1669,14 @@ ) }, { - element: import_stacks_helpers2.Buttons.makeStacksButton( + element: buttons_exports.makeStacksButton( "advanced-flagging-configuration-modal-cancel", "Cancel" ), hideOnClick: true }, { - element: import_stacks_helpers2.Buttons.makeStacksButton( + element: buttons_exports.makeStacksButton( "advanced-flagging-configuration-modal-reset", "Reset", { @@ -2772,7 +1770,7 @@ selected }; }); - const [fieldset] = import_stacks_helpers2.Checkbox.makeStacksCheckboxes(checkboxes); + const [fieldset] = checkbox_exports.makeStacksCheckboxes(checkboxes); fieldset.id = "advanced-flagging-configuration-section-general"; return fieldset; } @@ -2926,7 +1924,6 @@ } // src/modals/comments/rows.ts - var import_stacks_helpers3 = __toESM(require_dist(), 1); var flagTypes = flagCategories.flatMap(({ FlagTypes }) => FlagTypes); var flagNames = [...new Set(flagTypes.map(({ reportType }) => reportType))]; function getCharSpan(textarea, contentType) { @@ -2970,13 +1967,13 @@ container.classList.add("d-flex", "ai-center", "g16"); const toggleContainer = document.createElement("div"); toggleContainer.classList.add("flex--item"); - const toggle = import_stacks_helpers3.Toggle.makeStacksToggle( + const toggle = toggle_exports.makeStacksToggle( `advanced-flagging-comments-toggle-${id}`, { text: "Leave comment" }, Boolean(comments?.low) ); toggleContainer.append(toggle); - const [, checkbox] = import_stacks_helpers3.Checkbox.makeStacksCheckboxes([ + const [, checkbox] = checkbox_exports.makeStacksCheckboxes([ { id: `advanced-flagging-toggle-highrep-${id}`, labelConfig: { @@ -3021,18 +2018,18 @@ flagText, comments }) { - const flag = import_stacks_helpers3.Textarea.makeStacksTextarea( + const flag = textarea_exports.makeStacksTextarea( `advanced-flagging-text-modflag-${id}`, { value: flagText }, { text: "Flag text" } ); - const lowRep = import_stacks_helpers3.Textarea.makeStacksTextarea( + const lowRep = textarea_exports.makeStacksTextarea( `advanced-flagging-comment-lowrep-${id}`, { value: comments?.low }, // if there is a high rep comment, change the wording of the label { text: "Comment text" + (comments?.high ? " for low reputation users" : "") } ); - const highRep = import_stacks_helpers3.Textarea.makeStacksTextarea( + const highRep = textarea_exports.makeStacksTextarea( `advanced-flagging-comment-highrep-${id}`, { value: comments?.high }, { text: "Comment text for high reputation users" } @@ -3066,7 +2063,7 @@ selected: flagName === reportType }; }); - const select = import_stacks_helpers3.Select.makeStacksSelect( + const select = select_exports.makeStacksSelect( `advanced-flagging-select-flag-${id}`, options, { disabled: shouldDisable } @@ -3090,7 +2087,7 @@ reportType }) { const [label, select] = getFlagSelect(id, reportType); - const [, feedback] = import_stacks_helpers3.Checkbox.makeStacksCheckboxes([ + const [, feedback] = checkbox_exports.makeStacksCheckboxes([ { id: `advanced-flagging-send-when-flag-raised-${id}`, labelConfig: { @@ -3099,7 +2096,7 @@ selected: sendWhenFlagRaised } ]); - const [, downvoteBox] = import_stacks_helpers3.Checkbox.makeStacksCheckboxes([ + const [, downvoteBox] = checkbox_exports.makeStacksCheckboxes([ { id: `advanced-flagging-downvote-post-${id}`, labelConfig: { @@ -3133,7 +2130,7 @@ selected: feedback === currentFeedback }; }); - const [fieldset] = import_stacks_helpers3.Radio.makeStacksRadios(config, name, { + const [fieldset] = radio_exports.makeStacksRadios(config, name, { horizontal: true, classes: ["fs-body2"] }); @@ -3160,7 +2157,6 @@ } // src/modals/comments/main.ts - var import_stacks_helpers4 = __toESM(require_dist(), 1); function toggleHideIfNeeded(parent) { const children = parent.firstElementChild?.children; const shouldHide = [...children].every((element) => element.style.display === "none"); @@ -3189,7 +2185,7 @@ card.firstElementChild?.classList.toggle("jc-space-between"); if (isExpanded) { const name = card.querySelector("h3"); - const input = import_stacks_helpers4.Input.makeStacksInput( + const input = input_exports.makeStacksInput( `advanced-flagging-flag-name-${flagId}`, { classes: ["s-input__md"], @@ -3214,7 +2210,7 @@ isExpanded ? $(save).fadeIn("fast") : $(save).fadeOut("fast"); } function getActionItems(flagId, enabled, expandableId) { - const save = import_stacks_helpers4.Buttons.makeStacksButton( + const save = buttons_exports.makeStacksButton( `advanced-flagging-save-flagtype-${flagId}`, "Save", { @@ -3224,7 +2220,7 @@ ); save.style.display = "none"; save.addEventListener("click", () => submitChanges(save)); - const edit = import_stacks_helpers4.Buttons.makeStacksButton( + const edit = buttons_exports.makeStacksButton( `advanced-flagging-edit-flagtype-${flagId}`, "Edit", { @@ -3241,7 +2237,7 @@ edit.setAttribute("aria-controls", expandableId); edit.addEventListener("s-expandable-control:hide", () => expandableToggled(edit)); edit.addEventListener("s-expandable-control:show", () => expandableToggled(edit)); - const remove = import_stacks_helpers4.Buttons.makeStacksButton( + const remove = buttons_exports.makeStacksButton( `advanced-flagging-remove-flagtype-${flagId}`, "Remove", { @@ -3270,7 +2266,7 @@ }); displayStacksToast("Successfully removed flag type", "success", true); }); - const toggle = import_stacks_helpers4.Toggle.makeStacksToggle( + const toggle = toggle_exports.makeStacksToggle( `advanced-flagging-toggle-flagtype-${flagId}`, { text: "" }, enabled @@ -3369,7 +2365,7 @@ setTimeout(() => window.location.reload(), 500); } function setupCommentsAndFlagsModal() { - const modal = import_stacks_helpers4.Modals.makeStacksModal( + const modal = modals_exports.makeStacksModal( "advanced-flagging-comments-modal", { title: { @@ -3381,7 +2377,7 @@ footer: { buttons: [ { - element: import_stacks_helpers4.Buttons.makeStacksButton( + element: buttons_exports.makeStacksButton( "advanced-flagging-comments-modal-done", "I'm done!", { primary: true } @@ -3389,14 +2385,14 @@ hideOnClick: true }, { - element: import_stacks_helpers4.Buttons.makeStacksButton( + element: buttons_exports.makeStacksButton( "advanced-flagging-comments-modal-cancel", "Cancel" ), hideOnClick: true }, { - element: import_stacks_helpers4.Buttons.makeStacksButton( + element: buttons_exports.makeStacksButton( "advanced-flagging-configuration-modal-reset", "Reset", { @@ -3508,7 +2504,6 @@ } // src/popover.ts - var import_stacks_helpers5 = __toESM(require_dist(), 1); var noneSpan = document.createElement("span"); noneSpan.classList.add("o50"); noneSpan.innerText = "(none)"; @@ -3796,9 +2791,9 @@ }; }); } - function makeMenu(reporters, post) { + function makeMenu2(reporters, post) { const actionBoxes = getOptionsRow(post); - const menu = import_stacks_helpers5.Menu.makeMenu( + const menu = menus_exports.makeMenu( { itemsType: "a", navItems: [ @@ -3872,7 +2867,6 @@ } // src/AdvancedFlagging.ts - var import_stacks_helpers6 = __toESM(require_dist(), 1); function setupStyles() { GM_addStyle(` .advanced-flagging-popover { @@ -4117,7 +3111,7 @@ "py4", "advanced-flagging-popover" ); - const actionsMenu = makeMenu(reporters, post); + const actionsMenu = makeMenu2(reporters, post); dropdown.append(actionsMenu); return dropdown; } @@ -4202,7 +3196,7 @@ reporters["Generic Bot"] = new GenericBotAPI(postId); } setFlagWatch(post, reporters); - const advancedFlaggingLink = import_stacks_helpers6.Buttons.makeStacksButton( + const advancedFlaggingLink = buttons_exports.makeStacksButton( `advanced-flagging-link-${postId}`, "Advanced Flagging", {